diff --git a/server/server/src/sessionManager.ts b/server/server/src/sessionManager.ts index 32b9cf4b7b..086c6c58c1 100644 --- a/server/server/src/sessionManager.ts +++ b/server/server/src/sessionManager.ts @@ -1083,11 +1083,23 @@ export class TSessionManager implements SessionManager { } limitter = new SlidingWindowRateLimitter( - parseInt(process.env.RATE_LIMIT_MAX ?? '250'), + parseInt(process.env.RATE_LIMIT_MAX ?? '1500'), parseInt(process.env.RATE_LIMIT_WINDOW ?? '30000'), () => Date.now() ) + sysLimitter = new SlidingWindowRateLimitter( + parseInt(process.env.RATE_LIMIT_MAX ?? '5000'), + parseInt(process.env.RATE_LIMIT_WINDOW ?? '30000'), + () => Date.now() + ) + + checkRate (service: Session): RateLimitInfo { + return (service.getUser() === systemAccountUuid ? this.sysLimitter : this.limitter).checkRateLimit( + service.getUser() + (service.token.extra?.service ?? '') + ) + } + async handleRequest( requestCtx: MeasureContext, service: S, @@ -1099,7 +1111,7 @@ export class TSessionManager implements SessionManager { source: service.token.extra?.service ?? '🤦‍♂️user', mode: '🧭 handleRequest' }) - const rateLimit = this.limitter.checkRateLimit(service.getUser() + (service.token.extra?.service ?? '')) + const rateLimit = this.checkRate(service) // If remaining is 0, rate limit is exceeded if (rateLimit?.remaining === 0) { void ws.send( @@ -1213,7 +1225,7 @@ export class TSessionManager implements SessionManager { ws: ConnectionSocket, operation: (ctx: ClientSessionCtx, rateLimit: RateLimitInfo | undefined) => Promise ): Promise { - const rateLimitStatus = this.limitter.checkRateLimit(service.getUser() + (service.token.extra?.service ?? '')) + const rateLimitStatus = this.checkRate(service) // If remaining is 0, rate limit is exceeded if (rateLimitStatus?.remaining === 0) { return await Promise.resolve(rateLimitStatus)