Socket
Socket
Sign inDemoInstall

rate-limiter-flexible

Package Overview
Dependencies
Maintainers
1
Versions
163
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rate-limiter-flexible - npm Package Compare versions

Comparing version 2.1.7 to 2.1.9

50

lib/BurstyRateLimiter.js
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;
}
};

2

lib/index.d.ts

@@ -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",

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc