diff --git a/packages/backend-defaults/src/entrypoints/httpRouter/http/createRateLimitMiddleware.ts b/packages/backend-defaults/src/entrypoints/httpRouter/http/createRateLimitMiddleware.ts index 0e9239650b..377d7fa301 100644 --- a/packages/backend-defaults/src/entrypoints/httpRouter/http/createRateLimitMiddleware.ts +++ b/packages/backend-defaults/src/entrypoints/httpRouter/http/createRateLimitMiddleware.ts @@ -34,7 +34,7 @@ export const createRateLimitMiddleware = (options: { const rateLimitOptions = config.getConfig(configKey); return rateLimitMiddleware({ - store: RateLimitStoreFactory.create(config), + store: RateLimitStoreFactory.create({ config, prefix: pluginId }), config: rateLimitOptions, }); }; diff --git a/packages/backend-defaults/src/entrypoints/rootHttpRouter/http/MiddlewareFactory.ts b/packages/backend-defaults/src/entrypoints/rootHttpRouter/http/MiddlewareFactory.ts index 9a76ec5a59..80a10fe0eb 100644 --- a/packages/backend-defaults/src/entrypoints/rootHttpRouter/http/MiddlewareFactory.ts +++ b/packages/backend-defaults/src/entrypoints/rootHttpRouter/http/MiddlewareFactory.ts @@ -265,7 +265,7 @@ export class MiddlewareFactory { return rateLimitMiddleware({ store: useDefaults ? undefined - : RateLimitStoreFactory.create(this.#config), + : RateLimitStoreFactory.create({ config: this.#config }), config: rateLimitOptions, }); } diff --git a/packages/backend-defaults/src/lib/RateLimitStoreFactory.test.ts b/packages/backend-defaults/src/lib/RateLimitStoreFactory.test.ts index 02a7f30417..684c204cb8 100644 --- a/packages/backend-defaults/src/lib/RateLimitStoreFactory.test.ts +++ b/packages/backend-defaults/src/lib/RateLimitStoreFactory.test.ts @@ -45,7 +45,7 @@ describe('CacheRateLimitStoreFactory', () => { }, }, }); - const store = RateLimitStoreFactory.create(config); + const store = RateLimitStoreFactory.create({ config }); expect(store).toBeUndefined(); }); @@ -62,7 +62,7 @@ describe('CacheRateLimitStoreFactory', () => { }, }, }); - const store = RateLimitStoreFactory.create(config); + const store = RateLimitStoreFactory.create({ config }); expect(store).toBeInstanceOf(RedisStore); }); }); diff --git a/packages/backend-defaults/src/lib/RateLimitStoreFactory.ts b/packages/backend-defaults/src/lib/RateLimitStoreFactory.ts index 0a24a8792c..9df6f03225 100644 --- a/packages/backend-defaults/src/lib/RateLimitStoreFactory.ts +++ b/packages/backend-defaults/src/lib/RateLimitStoreFactory.ts @@ -23,7 +23,11 @@ import { RedisStore } from 'rate-limit-redis'; * @internal */ export class RateLimitStoreFactory { - static create(config: Config): Store | undefined { + static create(options: { + config: Config; + prefix?: string; + }): Store | undefined { + const { config, prefix } = options; const store = config.getOptionalConfig('backend.rateLimit.store'); if (!store) { return undefined; @@ -31,18 +35,20 @@ export class RateLimitStoreFactory { const type = store.getString('type'); switch (type) { case 'redis': - return this.redis(store); + return this.redis({ store, prefix }); case 'memory': default: return undefined; } } - private static redis(storeConfig: Config): Store { - const connectionString = storeConfig.getString('connection'); + private static redis(options: { store: Config; prefix?: string }): Store { + const { store, prefix } = options; + const connectionString = store.getString('connection'); const KeyvRedis = require('@keyv/redis').default; const keyv = new KeyvRedis(connectionString); return new RedisStore({ + prefix, sendCommand: async (...args: string[]) => { const client = await keyv.getClient(); return client.sendCommand(args);