zappyzep/backend/src/api/rateLimits.ts
2024-04-09 20:57:18 +03:00

18 lines
556 B
TypeScript

import { Request, Response } from "express";
import { error } from "./responses.js";
const lastRequestsByKey: Map<string, number> = new Map();
export function rateLimit(getKey: (req: Request) => string, limitMs: number, message = "Rate limited") {
return async (req: Request, res: Response, next) => {
const key = getKey(req);
if (lastRequestsByKey.has(key)) {
if (lastRequestsByKey.get(key)! > Date.now() - limitMs) {
return error(res, message, 429);
}
}
lastRequestsByKey.set(key, Date.now());
next();
};
}