Remove expiring on every failed request, add Max expire duration.

pull/306/head
Tim Robinson 2016-05-18 08:22:56 -04:00
rodzic ccc8b1b56e
commit a2e0ee24bc
1 zmienionych plików z 6 dodań i 6 usunięć

12
node_modules/c9/ratelimit.js wygenerowano vendored
Wyświetl plik

@ -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());