@@ -7,19 +7,27 @@ import { RedisTokenBucket } from './redis-token-bucket'
77
88const logger = createLogger ( 'RateLimitStorage' )
99
10- let cachedAdapter : RateLimitStorageAdapter | null = null
11- let reconnectListenerRegistered = false
10+ type FactoryGlobal = typeof globalThis & {
11+ _rlCachedAdapter ?: RateLimitStorageAdapter | null
12+ _rlReconnectListenerRegistered ?: boolean
13+ }
14+
15+ const g = globalThis as FactoryGlobal
16+ if ( ! ( '_rlCachedAdapter' in g ) ) {
17+ g . _rlCachedAdapter = null
18+ g . _rlReconnectListenerRegistered = false
19+ }
1220
1321export function createStorageAdapter ( ) : RateLimitStorageAdapter {
14- if ( cachedAdapter ) {
15- return cachedAdapter
22+ if ( g . _rlCachedAdapter ) {
23+ return g . _rlCachedAdapter
1624 }
1725
18- if ( ! reconnectListenerRegistered ) {
26+ if ( ! g . _rlReconnectListenerRegistered ) {
1927 onRedisReconnect ( ( ) => {
20- cachedAdapter = null
28+ g . _rlCachedAdapter = null
2129 } )
22- reconnectListenerRegistered = true
30+ g . _rlReconnectListenerRegistered = true
2331 }
2432
2533 const storageMethod = getStorageMethod ( )
@@ -30,27 +38,27 @@ export function createStorageAdapter(): RateLimitStorageAdapter {
3038 logger . warn (
3139 'Redis configured but client unavailable - falling back to PostgreSQL for rate limiting'
3240 )
33- cachedAdapter = new DbTokenBucket ( )
41+ g . _rlCachedAdapter = new DbTokenBucket ( )
3442 } else {
3543 logger . info ( 'Rate limiting: Using Redis' )
36- cachedAdapter = new RedisTokenBucket ( redis )
44+ g . _rlCachedAdapter = new RedisTokenBucket ( redis )
3745 }
3846 } else {
3947 logger . info ( 'Rate limiting: Using PostgreSQL' )
40- cachedAdapter = new DbTokenBucket ( )
48+ g . _rlCachedAdapter = new DbTokenBucket ( )
4149 }
4250
43- return cachedAdapter
51+ return g . _rlCachedAdapter !
4452}
4553
4654export function getAdapterType ( ) : StorageMethod {
4755 return getStorageMethod ( )
4856}
4957
5058export function resetStorageAdapter ( ) : void {
51- cachedAdapter = null
59+ g . _rlCachedAdapter = null
5260}
5361
5462export function setStorageAdapter ( adapter : RateLimitStorageAdapter ) : void {
55- cachedAdapter = adapter
63+ g . _rlCachedAdapter = adapter
5664}
0 commit comments