UNPKG

socio

Version:

A WebSocket Real-Time Communication (RTC) API framework.

39 lines (38 loc) 1.11 kB
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; } }