socio
Version:
A WebSocket Real-Time Communication (RTC) API framework.
39 lines (38 loc) • 1.11 kB
JavaScript
import { E, LogHandler } from "./logging.js";
export class RateLimiter extends LogHandler {
rl;
count = 0;
last_time_ms = 0;
constructor(rl) {
super({ verbose: false, prefix: 'RateLimiter' });
if (!rl)
throw new E('Must provide RateLimit object!', rl);
if (!rl?.ms && !rl?.seconds && !rl?.minutes)
throw new E('Must provide RateLimitTimeUnit!', rl);
else
rl.ms ??= 0;
if (rl?.seconds)
rl.ms += rl.seconds * 1000;
if (rl?.minutes)
rl.ms += rl.minutes * 60 * 1000;
delete rl?.seconds;
delete rl?.minutes;
this.rl = rl;
this.StartNewTimer();
}
CheckLimit() {
const now = (new Date()).getTime();
if (now - this.last_time_ms > this.rl.ms) {
this.StartNewTimer();
return false;
}
else if (this.count >= this.rl.n)
return true;
this.count++;
return false;
}
StartNewTimer() {
this.last_time_ms = (new Date()).getTime();
this.count = 0;
}
}