From 7972dc5914f6feb89fde4fc462fd30839038e978 Mon Sep 17 00:00:00 2001 From: Nwokolo Chukwuemeka Paul Date: Mon, 2 Mar 2026 21:46:13 +0100 Subject: [PATCH 1/2] API rate limiter --- coverage/clover.xml | 49 ++++-- coverage/coverage-final.json | 8 +- coverage/lcov-report/index.html | 30 ++-- coverage/lcov-report/src/app.js.html | 160 +++++++++++++++++- coverage/lcov-report/src/config/db.js.html | 2 +- coverage/lcov-report/src/config/index.html | 2 +- coverage/lcov-report/src/index.html | 30 ++-- .../lcov-report/src/middlewares/index.html | 2 +- .../src/middlewares/validate.js.html | 2 +- .../src/validators/auth.validators.js.html | 2 +- .../lcov-report/src/validators/index.html | 2 +- coverage/lcov.info | 55 ++++-- package-lock.json | 33 ++++ package.json | 3 +- src/app.js | 48 ++++++ 15 files changed, 346 insertions(+), 82 deletions(-) diff --git a/coverage/clover.xml b/coverage/clover.xml index 9dca09c..666aff3 100644 --- a/coverage/clover.xml +++ b/coverage/clover.xml @@ -1,29 +1,44 @@ - - - + + + - - - + + + - - + + - - - - - - + + + + + + + + + + + + + + + + + + + + + - + @@ -43,7 +58,7 @@ - + @@ -57,7 +72,7 @@ - + diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json index e6e64a5..b3fe23a 100644 --- a/coverage/coverage-final.json +++ b/coverage/coverage-final.json @@ -1,5 +1,5 @@ -{"C:\\Users\\a-abdulkareem\\Documents\\GRANTFOX\\api-fox\\src\\app.js": {"path":"C:\\Users\\a-abdulkareem\\Documents\\GRANTFOX\\api-fox\\src\\app.js","statementMap":{"0":{"start":{"line":1,"column":16},"end":{"line":1,"column":34}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":28}},"2":{"start":{"line":3,"column":15},"end":{"line":3,"column":32}},"3":{"start":{"line":4,"column":15},"end":{"line":4,"column":32}},"4":{"start":{"line":6,"column":12},"end":{"line":6,"column":21}},"5":{"start":{"line":8,"column":23},"end":{"line":8,"column":97}},"6":{"start":{"line":8,"column":77},"end":{"line":8,"column":90}},"7":{"start":{"line":10,"column":0},"end":{"line":10,"column":24}},"8":{"start":{"line":11,"column":0},"end":{"line":15,"column":4}},"9":{"start":{"line":16,"column":0},"end":{"line":16,"column":18}},"10":{"start":{"line":17,"column":0},"end":{"line":17,"column":23}},"11":{"start":{"line":19,"column":0},"end":{"line":21,"column":3}},"12":{"start":{"line":20,"column":2},"end":{"line":20,"column":41}},"13":{"start":{"line":23,"column":0},"end":{"line":23,"column":21}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":8,"column":67},"end":{"line":8,"column":68}},"loc":{"start":{"line":8,"column":77},"end":{"line":8,"column":90}},"line":8},"1":{"name":"(anonymous_1)","decl":{"start":{"line":19,"column":23},"end":{"line":19,"column":24}},"loc":{"start":{"line":19,"column":37},"end":{"line":21,"column":1}},"line":19}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":23},"end":{"line":8,"column":97}},"type":"binary-expr","locations":[{"start":{"line":8,"column":23},"end":{"line":8,"column":91}},{"start":{"line":8,"column":95},"end":{"line":8,"column":97}}],"line":8}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":0,"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1},"f":{"0":0,"1":1},"b":{"0":[1,1]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"b727c02c9c1f57aa89d381f3a9e9862f2a445bf8"} -,"C:\\Users\\a-abdulkareem\\Documents\\GRANTFOX\\api-fox\\src\\config\\db.js": {"path":"C:\\Users\\a-abdulkareem\\Documents\\GRANTFOX\\api-fox\\src\\config\\db.js","statementMap":{"0":{"start":{"line":1,"column":17},"end":{"line":1,"column":36}},"1":{"start":{"line":3,"column":18},"end":{"line":13,"column":1}},"2":{"start":{"line":4,"column":2},"end":{"line":12,"column":3}},"3":{"start":{"line":5,"column":17},"end":{"line":5,"column":62}},"4":{"start":{"line":7,"column":4},"end":{"line":7,"column":63}},"5":{"start":{"line":9,"column":4},"end":{"line":9,"column":64}},"6":{"start":{"line":11,"column":4},"end":{"line":11,"column":20}},"7":{"start":{"line":15,"column":0},"end":{"line":17,"column":3}},"8":{"start":{"line":16,"column":2},"end":{"line":16,"column":68}},"9":{"start":{"line":19,"column":0},"end":{"line":21,"column":3}},"10":{"start":{"line":20,"column":2},"end":{"line":20,"column":37}},"11":{"start":{"line":23,"column":0},"end":{"line":25,"column":3}},"12":{"start":{"line":24,"column":2},"end":{"line":24,"column":39}},"13":{"start":{"line":27,"column":0},"end":{"line":27,"column":27}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":3,"column":18},"end":{"line":3,"column":19}},"loc":{"start":{"line":3,"column":30},"end":{"line":13,"column":1}},"line":3},"1":{"name":"(anonymous_1)","decl":{"start":{"line":15,"column":39},"end":{"line":15,"column":40}},"loc":{"start":{"line":15,"column":45},"end":{"line":17,"column":1}},"line":15},"2":{"name":"(anonymous_2)","decl":{"start":{"line":19,"column":38},"end":{"line":19,"column":39}},"loc":{"start":{"line":19,"column":44},"end":{"line":21,"column":1}},"line":19},"3":{"name":"(anonymous_3)","decl":{"start":{"line":23,"column":32},"end":{"line":23,"column":33}},"loc":{"start":{"line":23,"column":41},"end":{"line":25,"column":1}},"line":23}},"branchMap":{},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0},"f":{"0":0,"1":0,"2":0,"3":0},"b":{}} -,"C:\\Users\\a-abdulkareem\\Documents\\GRANTFOX\\api-fox\\src\\middlewares\\validate.js": {"path":"C:\\Users\\a-abdulkareem\\Documents\\GRANTFOX\\api-fox\\src\\middlewares\\validate.js","statementMap":{"0":{"start":{"line":1,"column":17},"end":{"line":20,"column":1}},"1":{"start":{"line":2,"column":2},"end":{"line":19,"column":4}},"2":{"start":{"line":3,"column":22},"end":{"line":3,"column":70}},"3":{"start":{"line":5,"column":4},"end":{"line":16,"column":5}},"4":{"start":{"line":6,"column":21},"end":{"line":9,"column":9}},"5":{"start":{"line":6,"column":52},"end":{"line":9,"column":7}},"6":{"start":{"line":11,"column":6},"end":{"line":15,"column":9}},"7":{"start":{"line":18,"column":4},"end":{"line":18,"column":11}},"8":{"start":{"line":22,"column":0},"end":{"line":22,"column":26}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":29},"end":{"line":20,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":2,"column":9},"end":{"line":2,"column":10}},"loc":{"start":{"line":2,"column":29},"end":{"line":19,"column":3}},"line":2},"2":{"name":"(anonymous_2)","decl":{"start":{"line":6,"column":39},"end":{"line":6,"column":40}},"loc":{"start":{"line":6,"column":52},"end":{"line":9,"column":7}},"line":6}},"branchMap":{"0":{"loc":{"start":{"line":5,"column":4},"end":{"line":16,"column":5}},"type":"if","locations":[{"start":{"line":5,"column":4},"end":{"line":16,"column":5}},{"start":{},"end":{}}],"line":5}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0]}} -,"C:\\Users\\a-abdulkareem\\Documents\\GRANTFOX\\api-fox\\src\\validators\\auth.validators.js": {"path":"C:\\Users\\a-abdulkareem\\Documents\\GRANTFOX\\api-fox\\src\\validators\\auth.validators.js","statementMap":{"0":{"start":{"line":1,"column":12},"end":{"line":1,"column":26}},"1":{"start":{"line":3,"column":23},"end":{"line":17,"column":2}},"2":{"start":{"line":19,"column":20},"end":{"line":27,"column":2}},"3":{"start":{"line":29,"column":0},"end":{"line":32,"column":2}}},"fnMap":{},"branchMap":{},"s":{"0":0,"1":0,"2":0,"3":0},"f":{},"b":{}} +{"C:\\Users\\USER\\Documents\\api-fox\\src\\app.js": {"path":"C:\\Users\\USER\\Documents\\api-fox\\src\\app.js","statementMap":{"0":{"start":{"line":1,"column":16},"end":{"line":1,"column":34}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":28}},"2":{"start":{"line":3,"column":15},"end":{"line":3,"column":32}},"3":{"start":{"line":4,"column":15},"end":{"line":4,"column":32}},"4":{"start":{"line":5,"column":18},"end":{"line":5,"column":47}},"5":{"start":{"line":7,"column":12},"end":{"line":7,"column":21}},"6":{"start":{"line":10,"column":22},"end":{"line":23,"column":2}},"7":{"start":{"line":16,"column":23},"end":{"line":16,"column":64}},"8":{"start":{"line":17,"column":4},"end":{"line":17,"column":39}},"9":{"start":{"line":18,"column":4},"end":{"line":21,"column":7}},"10":{"start":{"line":26,"column":20},"end":{"line":39,"column":2}},"11":{"start":{"line":32,"column":23},"end":{"line":32,"column":64}},"12":{"start":{"line":33,"column":4},"end":{"line":33,"column":39}},"13":{"start":{"line":34,"column":4},"end":{"line":37,"column":7}},"14":{"start":{"line":42,"column":0},"end":{"line":42,"column":23}},"15":{"start":{"line":44,"column":23},"end":{"line":44,"column":97}},"16":{"start":{"line":44,"column":77},"end":{"line":44,"column":90}},"17":{"start":{"line":46,"column":0},"end":{"line":46,"column":24}},"18":{"start":{"line":47,"column":0},"end":{"line":51,"column":4}},"19":{"start":{"line":52,"column":0},"end":{"line":52,"column":18}},"20":{"start":{"line":53,"column":0},"end":{"line":53,"column":23}},"21":{"start":{"line":55,"column":0},"end":{"line":57,"column":3}},"22":{"start":{"line":56,"column":2},"end":{"line":56,"column":41}},"23":{"start":{"line":60,"column":0},"end":{"line":60,"column":34}},"24":{"start":{"line":63,"column":0},"end":{"line":65,"column":3}},"25":{"start":{"line":64,"column":2},"end":{"line":64,"column":54}},"26":{"start":{"line":67,"column":0},"end":{"line":69,"column":3}},"27":{"start":{"line":68,"column":2},"end":{"line":68,"column":57}},"28":{"start":{"line":71,"column":0},"end":{"line":71,"column":21}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":15,"column":11},"end":{"line":15,"column":12}},"loc":{"start":{"line":15,"column":25},"end":{"line":22,"column":3}},"line":15},"1":{"name":"(anonymous_1)","decl":{"start":{"line":31,"column":11},"end":{"line":31,"column":12}},"loc":{"start":{"line":31,"column":25},"end":{"line":38,"column":3}},"line":31},"2":{"name":"(anonymous_2)","decl":{"start":{"line":44,"column":67},"end":{"line":44,"column":68}},"loc":{"start":{"line":44,"column":77},"end":{"line":44,"column":90}},"line":44},"3":{"name":"(anonymous_3)","decl":{"start":{"line":55,"column":23},"end":{"line":55,"column":24}},"loc":{"start":{"line":55,"column":37},"end":{"line":57,"column":1}},"line":55},"4":{"name":"(anonymous_4)","decl":{"start":{"line":63,"column":28},"end":{"line":63,"column":29}},"loc":{"start":{"line":63,"column":42},"end":{"line":65,"column":1}},"line":63},"5":{"name":"(anonymous_5)","decl":{"start":{"line":67,"column":31},"end":{"line":67,"column":32}},"loc":{"start":{"line":67,"column":45},"end":{"line":69,"column":1}},"line":67}},"branchMap":{"0":{"loc":{"start":{"line":44,"column":23},"end":{"line":44,"column":97}},"type":"binary-expr","locations":[{"start":{"line":44,"column":23},"end":{"line":44,"column":91}},{"start":{"line":44,"column":95},"end":{"line":44,"column":97}}],"line":44}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":0,"8":0,"9":0,"10":1,"11":0,"12":0,"13":0,"14":1,"15":1,"16":0,"17":1,"18":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":0,"26":1,"27":0,"28":1},"f":{"0":0,"1":0,"2":0,"3":1,"4":0,"5":0},"b":{"0":[1,1]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"4cdcb50b1ceac3c71a96130cc657c8e6200d4418"} +,"C:\\Users\\USER\\Documents\\api-fox\\src\\config\\db.js": {"path":"C:\\Users\\USER\\Documents\\api-fox\\src\\config\\db.js","statementMap":{"0":{"start":{"line":1,"column":17},"end":{"line":1,"column":36}},"1":{"start":{"line":3,"column":18},"end":{"line":13,"column":1}},"2":{"start":{"line":4,"column":2},"end":{"line":12,"column":3}},"3":{"start":{"line":5,"column":17},"end":{"line":5,"column":62}},"4":{"start":{"line":7,"column":4},"end":{"line":7,"column":63}},"5":{"start":{"line":9,"column":4},"end":{"line":9,"column":64}},"6":{"start":{"line":11,"column":4},"end":{"line":11,"column":20}},"7":{"start":{"line":15,"column":0},"end":{"line":17,"column":3}},"8":{"start":{"line":16,"column":2},"end":{"line":16,"column":68}},"9":{"start":{"line":19,"column":0},"end":{"line":21,"column":3}},"10":{"start":{"line":20,"column":2},"end":{"line":20,"column":37}},"11":{"start":{"line":23,"column":0},"end":{"line":25,"column":3}},"12":{"start":{"line":24,"column":2},"end":{"line":24,"column":39}},"13":{"start":{"line":27,"column":0},"end":{"line":27,"column":27}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":3,"column":18},"end":{"line":3,"column":19}},"loc":{"start":{"line":3,"column":30},"end":{"line":13,"column":1}},"line":3},"1":{"name":"(anonymous_1)","decl":{"start":{"line":15,"column":39},"end":{"line":15,"column":40}},"loc":{"start":{"line":15,"column":45},"end":{"line":17,"column":1}},"line":15},"2":{"name":"(anonymous_2)","decl":{"start":{"line":19,"column":38},"end":{"line":19,"column":39}},"loc":{"start":{"line":19,"column":44},"end":{"line":21,"column":1}},"line":19},"3":{"name":"(anonymous_3)","decl":{"start":{"line":23,"column":32},"end":{"line":23,"column":33}},"loc":{"start":{"line":23,"column":41},"end":{"line":25,"column":1}},"line":23}},"branchMap":{},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0},"f":{"0":0,"1":0,"2":0,"3":0},"b":{}} +,"C:\\Users\\USER\\Documents\\api-fox\\src\\middlewares\\validate.js": {"path":"C:\\Users\\USER\\Documents\\api-fox\\src\\middlewares\\validate.js","statementMap":{"0":{"start":{"line":1,"column":17},"end":{"line":20,"column":1}},"1":{"start":{"line":2,"column":2},"end":{"line":19,"column":4}},"2":{"start":{"line":3,"column":22},"end":{"line":3,"column":70}},"3":{"start":{"line":5,"column":4},"end":{"line":16,"column":5}},"4":{"start":{"line":6,"column":21},"end":{"line":9,"column":9}},"5":{"start":{"line":6,"column":52},"end":{"line":9,"column":7}},"6":{"start":{"line":11,"column":6},"end":{"line":15,"column":9}},"7":{"start":{"line":18,"column":4},"end":{"line":18,"column":11}},"8":{"start":{"line":22,"column":0},"end":{"line":22,"column":26}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":17},"end":{"line":1,"column":18}},"loc":{"start":{"line":1,"column":29},"end":{"line":20,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":2,"column":9},"end":{"line":2,"column":10}},"loc":{"start":{"line":2,"column":29},"end":{"line":19,"column":3}},"line":2},"2":{"name":"(anonymous_2)","decl":{"start":{"line":6,"column":39},"end":{"line":6,"column":40}},"loc":{"start":{"line":6,"column":52},"end":{"line":9,"column":7}},"line":6}},"branchMap":{"0":{"loc":{"start":{"line":5,"column":4},"end":{"line":16,"column":5}},"type":"if","locations":[{"start":{"line":5,"column":4},"end":{"line":16,"column":5}},{"start":{},"end":{}}],"line":5}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0]}} +,"C:\\Users\\USER\\Documents\\api-fox\\src\\validators\\auth.validators.js": {"path":"C:\\Users\\USER\\Documents\\api-fox\\src\\validators\\auth.validators.js","statementMap":{"0":{"start":{"line":1,"column":12},"end":{"line":1,"column":26}},"1":{"start":{"line":3,"column":23},"end":{"line":17,"column":2}},"2":{"start":{"line":19,"column":20},"end":{"line":27,"column":2}},"3":{"start":{"line":29,"column":0},"end":{"line":32,"column":2}}},"fnMap":{},"branchMap":{},"s":{"0":0,"1":0,"2":0,"3":0},"f":{},"b":{}} } diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html index 632fdbc..5a62e12 100644 --- a/coverage/lcov-report/index.html +++ b/coverage/lcov-report/index.html @@ -23,9 +23,9 @@

All files

- 31.7% + 35.71% Statements - 13/41 + 20/56
@@ -37,16 +37,16 @@

All files

- 11.11% + 7.69% Functions - 1/9 + 1/13
- 33.33% + 37.03% Lines - 13/39 + 20/54
@@ -80,17 +80,17 @@

All files

src - -
+ +
- 92.85% - 13/14 + 68.96% + 20/29 100% 2/2 - 50% - 1/2 - 100% - 13/13 + 16.66% + 1/6 + 71.42% + 20/28 @@ -146,7 +146,7 @@

All files