first commit

This commit is contained in:
kajvan
2023-10-10 17:07:22 +02:00
commit f7e668c8fb
10 changed files with 988 additions and 0 deletions
+73
View File
@@ -0,0 +1,73 @@
class RateLimit{
constructor(maxRequests, timeFrame){
this.maxRequests = maxRequests;
this.timeFrame = timeFrame;
this.users = {};
}
async addUser(user){
this.users[user] = {
requests: this.maxRequests,
lastRequest: Date.now()
};
}
async removeUser(user){
delete this.users[user];
}
async checkUser(user){
if(!this.users[user]) await this.addUser(user);
return this.users[user];
}
async checkRateLimit(user){
const { requests, lastRequest } = await this.checkUser(user);
const now = Date.now();
if(now - lastRequest > this.timeFrame) {
this.users[user].requests = this.maxRequests;
this.users[user].lastRequest = now;
return true;
}
if(requests > 0) {
this.users[user].requests--;
return true;
}
return false;
}
async getRateLimit(user){
const { requests, lastRequest } = await this.checkUser(user);
const now = Date.now();
if(now - lastRequest > this.timeFrame) {
this.users[user].requests = this.maxRequests;
this.users[user].lastRequest = now;
return this.maxRequests;
}
return requests;
}
async getRateLimitReset(user){
const { requests, lastRequest } = await this.checkUser(user);
const now = Date.now();
if(now - lastRequest > this.timeFrame) {
this.users[user].requests = this.maxRequests;
this.users[user].lastRequest = now;
return this.timeFrame;
}
return this.timeFrame - (now - lastRequest);
}
async getRateLimitRemaining(user){
const { requests, lastRequest } = await this.checkUser(user);
const now = Date.now();
if(now - lastRequest > this.timeFrame) {
this.users[user].requests = this.maxRequests;
this.users[user].lastRequest = now;
return this.maxRequests;
}
return requests;
}
}
module.exports = RateLimit;