28 lines
917 B
TypeScript
28 lines
917 B
TypeScript
import { createSharedStore, type SharedStore } from "@toolctrl/shared-store";
|
|
|
|
/**
|
|
* Singleton SharedStore for the web process. Tenant-scoped caches,
|
|
* cross-replica rate limits, and MFA challenge state migrated as part
|
|
* of task #38 all use this instance so a single Redis connection is
|
|
* reused across the web lifetime.
|
|
*/
|
|
let cachedStore: SharedStore | null = null;
|
|
let factory: () => SharedStore = () => createSharedStore({ namespace: "web", redisUrl: process.env.REDIS_URL });
|
|
|
|
export function getSharedStore(): SharedStore {
|
|
if (cachedStore === null) {
|
|
cachedStore = factory();
|
|
}
|
|
return cachedStore;
|
|
}
|
|
|
|
export function __setSharedStoreFactoryForTests(next: () => SharedStore): void {
|
|
factory = next;
|
|
cachedStore = null;
|
|
}
|
|
|
|
export function __resetSharedStoreForTests(): void {
|
|
factory = () => createSharedStore({ namespace: "web", redisUrl: process.env.REDIS_URL });
|
|
cachedStore = null;
|
|
}
|