rate-limiter-flexible
Advanced tools
Comparing version 2.1.3 to 2.1.4
const RateLimiterQueueError = require('./component/RateLimiterQueueError') | ||
const MAX_QUEUE_SIZE = 4294967295; | ||
const KEY_DEFAULT = 'limiter'; | ||
module.exports = class RateLimiterQueue { | ||
constructor(limiterFlexible, opts = { | ||
maxQueueSize: MAX_QUEUE_SIZE, | ||
}) { | ||
this._queueLimiters = { | ||
KEY_DEFAULT: new RateLimiterQueueInternal(limiterFlexible, opts) | ||
}; | ||
this._limiterFlexible = limiterFlexible; | ||
this._maxQueueSize = opts.maxQueueSize | ||
} | ||
getTokensRemaining(key = KEY_DEFAULT) { | ||
if (this._queueLimiters[key]) { | ||
return this._queueLimiters[key].getTokensRemaining() | ||
} else { | ||
return Promise.resolve(this._limiterFlexible.points) | ||
} | ||
} | ||
removeTokens(tokens, key = KEY_DEFAULT) { | ||
if (!this._queueLimiters[key]) { | ||
this._queueLimiters[key] = new RateLimiterQueueInternal( | ||
this._limiterFlexible, { | ||
key, | ||
maxQueueSize: this._maxQueueSize, | ||
}) | ||
} | ||
return this._queueLimiters[key].removeTokens(tokens) | ||
} | ||
}; | ||
class RateLimiterQueueInternal { | ||
constructor(limiterFlexible, opts = { | ||
maxQueueSize: MAX_QUEUE_SIZE, | ||
key: KEY_DEFAULT, | ||
}) { | ||
this._key = 'limiter'; | ||
this._key = opts.key; | ||
this._waitTimeout = null; | ||
@@ -93,2 +127,2 @@ this._queue = []; | ||
} | ||
}; | ||
} |
{ | ||
"name": "rate-limiter-flexible", | ||
"version": "2.1.3", | ||
"version": "2.1.4", | ||
"description": "Node.js rate limiter by key and protection from DDoS and Brute-Force attacks in process Memory, Redis, MongoDb, Memcached, MySQL, PostgreSQL, Cluster or PM", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -129,2 +129,6 @@ [![Build Status](https://travis-ci.org/animir/node-rate-limiter-flexible.png)](https://travis-ci.org/animir/node-rate-limiter-flexible) | ||
### Changelog | ||
See [releases](https://github.com/animir/node-rate-limiter-flexible/releases) for detailed changelog. | ||
## Basic Options | ||
@@ -163,3 +167,3 @@ | ||
Cut off load picks: | ||
Smooth out traffic picks: | ||
* [execEvenly](https://github.com/animir/node-rate-limiter-flexible/wiki/Options#execevenly) | ||
@@ -223,1 +227,3 @@ * [execEvenlyMinDelayMs](https://github.com/animir/node-rate-limiter-flexible/wiki/Options#execevenlymindelayms) | ||
All other methods depends on store. See `RateLimiterRedis` or `RateLimiterPostgres` for example. | ||
Note: all changes should be covered by tests. |
108081
2927
227