23 lines
735 B
TypeScript
23 lines
735 B
TypeScript
// src/lib/rateLimit.ts
|
|
const rateLimits = new Map<string, { count: number; resetTime: number }>()
|
|
|
|
export function rateLimit(
|
|
ip: string,
|
|
limit: number = 100,
|
|
windowMs: number = 60000 // 1 minute
|
|
): { success: boolean; remaining: number; resetTime: number } {
|
|
const now = Date.now()
|
|
const record = rateLimits.get(ip)
|
|
|
|
if (!record || now > record.resetTime) {
|
|
rateLimits.set(ip, { count: 1, resetTime: now + windowMs })
|
|
return { success: true, remaining: limit - 1, resetTime: now + windowMs }
|
|
}
|
|
|
|
if (record.count >= limit) {
|
|
return { success: false, remaining: 0, resetTime: record.resetTime }
|
|
}
|
|
|
|
record.count++
|
|
return { success: true, remaining: limit - record.count, resetTime: record.resetTime }
|
|
} |