/** * Simple in-memory rate limiter. * Extracted from index.ts for modularity. */ const rateLimitMap = new Map(); const RATE_LIMIT = { maxRequests: 30, windowMs: 60_000 }; // 30 req/min export function checkRateLimit(key: string): boolean { const now = Date.now(); const entry = rateLimitMap.get(key); if (!entry || now > entry.resetAt) { rateLimitMap.set(key, { count: 1, resetAt: now + RATE_LIMIT.windowMs }); return true; } if (entry.count >= RATE_LIMIT.maxRequests) return false; entry.count++; return true; } // Clean up stale entries every 5 minutes setInterval(() => { const now = Date.now(); for (const [key, entry] of rateLimitMap) { if (now > entry.resetAt) rateLimitMap.delete(key); } }, 300_000).unref();