Files
diyaa.de/lib/rate-limit.ts
T

27 lines
858 B
TypeScript

type RateLimitEntry = { count: number; resetAt: number };
const entries = new Map<string, RateLimitEntry>();
const windowMs = 10 * 60 * 1000;
const maxRequests = 5;
export function consumeRateLimit(key: string, limit: number, durationMs: number) {
const now = Date.now();
const current = entries.get(key);
if (!current || current.resetAt <= now) {
entries.set(key, { count: 1, resetAt: now + durationMs });
return true;
}
if (current.count >= limit) return false;
current.count += 1;
return true;
}
export function consumeContactRateLimit(key: string) {
return consumeRateLimit(key, maxRequests, windowMs);
}
export function getClientIp(requestHeaders: Headers) {
const forwardedFor = requestHeaders.get("x-forwarded-for")?.split(",")[0]?.trim();
return forwardedFor || requestHeaders.get("x-real-ip")?.trim() || "unknown";
}