From b47c293fd3e8a715277a2b8876a60de6a5c116ee Mon Sep 17 00:00:00 2001 From: Viren070 Date: Sat, 27 Sep 2025 16:15:27 +0100 Subject: [PATCH] feat: make redis store optional for rate limiting Release-As: 2.13.4 --- packages/core/src/utils/env.ts | 6 +++++- packages/server/src/middlewares/ratelimit.ts | 13 +++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/core/src/utils/env.ts b/packages/core/src/utils/env.ts index 49a99067..a985df31 100644 --- a/packages/core/src/utils/env.ts +++ b/packages/core/src/utils/env.ts @@ -1810,7 +1810,11 @@ export const Env = cleanEnv(process.env, { default: false, desc: 'Disable rate limiting', }), - + RATE_LIMIT_STORE: str({ + choices: ['memory', 'redis'], + default: 'memory', + desc: 'The store to use for rate limiting', + }), STATIC_RATE_LIMIT_WINDOW: num({ default: 5, // 1 minute desc: 'Time window for static file serving rate limiting in seconds', diff --git a/packages/server/src/middlewares/ratelimit.ts b/packages/server/src/middlewares/ratelimit.ts index 1df2a72e..03109e26 100644 --- a/packages/server/src/middlewares/ratelimit.ts +++ b/packages/server/src/middlewares/ratelimit.ts @@ -21,12 +21,13 @@ const createRateLimiter = ( return (req: Request, res: Response, next: NextFunction) => next(); } const redisClient = Env.REDIS_URI ? Cache.getRedisClient() : undefined; - const store = redisClient - ? new RedisStore({ - prefix: `${REDIS_PREFIX}rate-limit:`, - sendCommand: (...args: string[]) => redisClient.sendCommand(args), - }) - : new MemoryStore(); + const store = + redisClient && Env.RATE_LIMIT_STORE === 'redis' + ? new RedisStore({ + prefix: `${REDIS_PREFIX}rate-limit:`, + sendCommand: (...args: string[]) => redisClient.sendCommand(args), + }) + : new MemoryStore(); return rateLimit({ windowMs, max: maxRequests,