Files
Guardian/dist/ratelimit.js
T
2024-02-03 00:35:29 +01:00

167 lines
4.1 KiB
JavaScript

"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;