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; }