added more support
This commit is contained in:
Vendored
+166
@@ -0,0 +1,166 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
class RateLimit {
|
||||
constructor(users = {}, events = {}) {
|
||||
this.users = users;
|
||||
this.events = events;
|
||||
this.users = users;
|
||||
this.events = events;
|
||||
}
|
||||
addEvent(event) {
|
||||
try {
|
||||
this.events[event.name] = event;
|
||||
//add event to all users
|
||||
for (const token in this.users) {
|
||||
this.users[token].events[event.name] = event;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
removeEvent(name) {
|
||||
try {
|
||||
delete this.events[name];
|
||||
//remove event from all users
|
||||
for (const token in this.users) {
|
||||
delete this.users[token].events[name];
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
addUser(token) {
|
||||
try {
|
||||
this.users[token] = { token, events: this.events };
|
||||
return true;
|
||||
}
|
||||
catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
removeUser(token) {
|
||||
try {
|
||||
delete this.users[token];
|
||||
return true;
|
||||
}
|
||||
catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
attempt(token, name) {
|
||||
try {
|
||||
if (!this.users[token] || !this.users[token].events[name]) {
|
||||
return false;
|
||||
}
|
||||
const event = this.users[token].events[name];
|
||||
if (event.attempts === undefined) {
|
||||
event.attempts = [];
|
||||
}
|
||||
const now = Date.now();
|
||||
if (event.lastAttempt && now - event.lastAttempt < event.cooldown) {
|
||||
return false;
|
||||
}
|
||||
event.lastAttempt = now;
|
||||
event.attempts.push(now);
|
||||
if (event.attempts.length > event.maxAttempts) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
getEvents() {
|
||||
return this.events;
|
||||
}
|
||||
getUsers() {
|
||||
return this.users;
|
||||
}
|
||||
getEvent(name) {
|
||||
return this.events[name];
|
||||
}
|
||||
getUser(token) {
|
||||
return this.users[token];
|
||||
}
|
||||
remainingAttempts(token, name) {
|
||||
try {
|
||||
if (!this.users[token] || !this.users[token].events[name]) {
|
||||
return -1;
|
||||
}
|
||||
const event = this.users[token].events[name];
|
||||
if (event.attempts === undefined) {
|
||||
event.attempts = [];
|
||||
}
|
||||
return event.maxAttempts - event.attempts.length;
|
||||
}
|
||||
catch (error) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
resetAttempts(token, name) {
|
||||
try {
|
||||
if (!this.users[token] || !this.users[token].events[name]) {
|
||||
return false;
|
||||
}
|
||||
const event = this.users[token].events[name];
|
||||
event.attempts = [];
|
||||
return true;
|
||||
}
|
||||
catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
resetAllAttempts(token) {
|
||||
try {
|
||||
if (!this.users[token]) {
|
||||
return false;
|
||||
}
|
||||
for (const name in this.users[token].events) {
|
||||
this.resetAttempts(token, name);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
resetAllUsers() {
|
||||
try {
|
||||
for (const token in this.users) {
|
||||
this.resetAllAttempts(token);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
resetEvent(name) {
|
||||
try {
|
||||
for (const token in this.users) {
|
||||
this.resetAttempts(token, name);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
resetUser(token) {
|
||||
try {
|
||||
for (const name in this.users[token].events) {
|
||||
this.resetAttempts(token, name);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.default = RateLimit;
|
||||
Reference in New Issue
Block a user