diff --git a/apps/web/app/api/utils.ts b/apps/web/app/api/utils.ts index 1feeb4db91..0eb33aa57a 100644 --- a/apps/web/app/api/utils.ts +++ b/apps/web/app/api/utils.ts @@ -34,7 +34,19 @@ export const developerRateLimiter = createMiddleware(async (c, next) => { if (now > v.resetAt) requestCounts.delete(k); } if (requestCounts.size > RATE_LIMIT_MAX_ENTRIES) { - requestCounts.clear(); + for (const [k, v] of requestCounts) { + if (requestCounts.size <= RATE_LIMIT_MAX_ENTRIES) break; + if (v.count < RATE_LIMIT_MAX_REQUESTS) requestCounts.delete(k); + } + if (requestCounts.size > RATE_LIMIT_MAX_ENTRIES) { + const byExpiry = [...requestCounts.entries()].sort( + (a, b) => a[1].resetAt - b[1].resetAt, + ); + for (const [k] of byExpiry) { + if (requestCounts.size <= RATE_LIMIT_MAX_ENTRIES) break; + requestCounts.delete(k); + } + } } }