mirror of
https://github.com/linuxserver/core.git
synced 2026-02-20 05:07:19 +08:00
Remove expiring on every failed request, add Max expire duration.
This commit is contained in:
parent
ccc8b1b56e
commit
a2e0ee24bc
12
node_modules/c9/ratelimit.js
generated
vendored
12
node_modules/c9/ratelimit.js
generated
vendored
@ -1,6 +1,8 @@
|
||||
var error = require("http-error");
|
||||
var _ = require("lodash");
|
||||
|
||||
var MAX_EXPIRE_INTERVAL = 5000;
|
||||
|
||||
/**
|
||||
* In memory rate limiter as connect middleware
|
||||
*/
|
||||
@ -10,7 +12,7 @@ function ratelimit(key, duration, max) {
|
||||
var requests = Object.create(null); // in case there handles like 'constructor'
|
||||
setInterval(function() {
|
||||
Object.keys(requests).forEach(expireRequests);
|
||||
}, duration * 0.75);
|
||||
}, Math.min(duration * 0.75, MAX_EXPIRE_INTERVAL));
|
||||
|
||||
function expireRequests(handle) {
|
||||
var requestsForHandle = requests[handle];
|
||||
@ -34,11 +36,9 @@ function ratelimit(key, duration, max) {
|
||||
|
||||
requests[handle] = requests[handle] || [];
|
||||
if (requests[handle].length >= max) {
|
||||
if (expireRequests(handle) && requests[handle].length >= max) {
|
||||
var err = new error.TooManyRequests("Rate limit exceeded");
|
||||
err.retryIn = Math.min(duration, 5000);
|
||||
return next(err);
|
||||
}
|
||||
var err = new error.TooManyRequests("Rate limit exceeded");
|
||||
err.retryIn = Math.min(duration, 5000);
|
||||
return next(err);
|
||||
}
|
||||
|
||||
requests[handle].push(Date.now());
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user