rate-limiter-flexible
Advanced tools
Comparing version 2.1.7 to 2.1.9
const RateLimiterRes = require("./RateLimiterRes"); | ||
/** | ||
* Bursty rate limiter exposes only msBeforeNext time and doesn't expose points from bursty limiter by default | ||
* @type {BurstyRateLimiter} | ||
*/ | ||
module.exports = class BurstyRateLimiter { | ||
@@ -9,2 +13,23 @@ constructor(rateLimiter, burstLimiter) { | ||
/** | ||
* Merge rate limiter response objects. Responses can be null | ||
* | ||
* @param {RateLimiterRes} [rlRes] Rate limiter response | ||
* @param {RateLimiterRes} [blRes] Bursty limiter response | ||
*/ | ||
_combineRes(rlRes, blRes) { | ||
return new RateLimiterRes( | ||
rlRes.remainingPoints, | ||
Math.min(rlRes.msBeforeNext, blRes.msBeforeNext), | ||
rlRes.consumedPoints, | ||
rlRes.isFirstInDuration | ||
) | ||
} | ||
/** | ||
* @param key | ||
* @param pointsToConsume | ||
* @param options | ||
* @returns {Promise<any>} | ||
*/ | ||
consume(key, pointsToConsume = 1, options = {}) { | ||
@@ -15,8 +40,8 @@ return this._rateLimiter.consume(key, pointsToConsume, options) | ||
return this._burstLimiter.consume(key, pointsToConsume, options) | ||
.then(() => { | ||
return Promise.resolve(rlRej) | ||
.then((blRes) => { | ||
return Promise.resolve(this._combineRes(rlRej, blRes)) | ||
}) | ||
.catch((blRej) => { | ||
if (blRej instanceof RateLimiterRes) { | ||
return Promise.reject(rlRej) | ||
return Promise.reject(this._combineRes(rlRej, blRej)) | ||
} else { | ||
@@ -32,2 +57,21 @@ return Promise.reject(blRej) | ||
} | ||
/** | ||
* It doesn't expose available points from burstLimiter | ||
* | ||
* @param key | ||
* @returns {Promise<RateLimiterRes>} | ||
*/ | ||
get(key) { | ||
return Promise.all([ | ||
this._rateLimiter.get(key), | ||
this._burstLimiter.get(key), | ||
]).then(([rlRes, blRes]) => { | ||
return this._combineRes(rlRes, blRes); | ||
}); | ||
} | ||
get points() { | ||
return this._rateLimiter.points; | ||
} | ||
}; |
@@ -161,3 +161,3 @@ export interface IRateLimiterRes { | ||
export class RateLimiterQueue { | ||
constructor(limiterFlexible: RateLimiterAbstract, opts?: IRateLimiterQueueOpts); | ||
constructor(limiterFlexible: RateLimiterAbstract | BurstyRateLimiter, opts?: IRateLimiterQueueOpts); | ||
@@ -164,0 +164,0 @@ getTokensRemaining(key?: string | number): Promise<RateLimiterRes>; |
{ | ||
"name": "rate-limiter-flexible", | ||
"version": "2.1.7", | ||
"version": "2.1.9", | ||
"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", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
110338
3002