- Updated all component headers and documentation
- Changed navbar and footer branding
- Updated homepage hero badge
- Modified page title in index.html
- Simplified footer text to 'Built with ❤️'
- Consistent V2 capitalization across all references
76 lines
1.4 KiB
JavaScript
76 lines
1.4 KiB
JavaScript
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];
|
|
});
|
|
}
|
|
}
|
|
};
|