const requestTimestamps = new Map() export function rateLimit( identifier: string, limit: number, windowMilliseconds: number ): { success: boolean; remaining: number } { const now = Date.now() const timestamps = requestTimestamps.get(identifier) ?? [] const windowStart = now - windowMilliseconds const recentTimestamps = timestamps.filter( (timestamp) => timestamp > windowStart ) if (recentTimestamps.length === 0) { requestTimestamps.delete(identifier) } else if (recentTimestamps.length >= limit) { requestTimestamps.set(identifier, recentTimestamps) return { success: false, remaining: 0 } } recentTimestamps.push(now) requestTimestamps.set(identifier, recentTimestamps) return { success: true, remaining: limit - recentTimestamps.length } }