First commit
This commit is contained in:
75
framework/node_modules/node-rate-limiter-flexible/lib/component/BlockedKeys/BlockedKeys.js
generated
vendored
Normal file
75
framework/node_modules/node-rate-limiter-flexible/lib/component/BlockedKeys/BlockedKeys.js
generated
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
module.exports = class BlockedKeys {
|
||||
constructor() {
|
||||
this._keys = {}; // {'key': 1526279430331}
|
||||
this._addedKeysAmount = 0;
|
||||
}
|
||||
|
||||
collectExpired() {
|
||||
const now = Date.now();
|
||||
|
||||
Object.keys(this._keys).forEach((key) => {
|
||||
if (this._keys[key] <= now) {
|
||||
delete this._keys[key];
|
||||
}
|
||||
});
|
||||
|
||||
this._addedKeysAmount = Object.keys(this._keys).length;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add new blocked key
|
||||
*
|
||||
* @param key String
|
||||
* @param sec Number
|
||||
*/
|
||||
add(key, sec) {
|
||||
this.addMs(key, sec * 1000);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add new blocked key for ms
|
||||
*
|
||||
* @param key String
|
||||
* @param ms Number
|
||||
*/
|
||||
addMs(key, ms) {
|
||||
this._keys[key] = Date.now() + ms;
|
||||
this._addedKeysAmount++;
|
||||
if (this._addedKeysAmount > 999) {
|
||||
this.collectExpired();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 0 means not blocked
|
||||
*
|
||||
* @param key
|
||||
* @returns {number}
|
||||
*/
|
||||
msBeforeExpire(key) {
|
||||
const expire = this._keys[key];
|
||||
|
||||
if (expire && expire >= Date.now()) {
|
||||
this.collectExpired();
|
||||
const now = Date.now();
|
||||
return expire >= now ? expire - now : 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* If key is not given, delete all data in memory
|
||||
*
|
||||
* @param {string|undefined} key
|
||||
*/
|
||||
delete(key) {
|
||||
if (key) {
|
||||
delete this._keys[key];
|
||||
} else {
|
||||
Object.keys(this._keys).forEach((key) => {
|
||||
delete this._keys[key];
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user