19 lines
534 B
TypeScript
19 lines
534 B
TypeScript
|
|
const rateLimitMap = new Map<string, number[]>();
|
|
|
|
export function checkRateLimit(identifier: string, action: string, limit: number, windowMs: number): boolean {
|
|
const now = Date.now();
|
|
const key = `${identifier}:${action}`; // Make rate limits per-action
|
|
const timestamps = rateLimitMap.get(key) || [];
|
|
const windowStart = now - windowMs;
|
|
|
|
const recent = timestamps.filter(t => t > windowStart);
|
|
|
|
if (recent.length >= limit) {
|
|
return true;
|
|
}
|
|
|
|
recent.push(now);
|
|
rateLimitMap.set(key, recent);
|
|
return false;
|
|
}
|