@burdenoff/be-sdk 2026.513.6 → 2026.513.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { GatewayClient } from './chunk-4B43DZIS.js';
1
+ import { GatewayClient } from './chunk-NAOHXHUP.js';
2
2
  import { LayerManager } from './chunk-HIWTWIGQ.js';
3
3
  import { EventQueueFactory } from './chunk-EMSON3UD.js';
4
4
  import { DEFAULT_LAYER_STREAMS } from './chunk-NGMEI42S.js';
@@ -474,5 +474,5 @@ async function initializeLayerStreams(config) {
474
474
  __name(initializeLayerStreams, "initializeLayerStreams");
475
475
 
476
476
  export { getSDKState, init_exports, initializeBurdenoffSDK, isSDKInitialized, resetSDK };
477
- //# sourceMappingURL=chunk-OMKFTTAN.js.map
478
- //# sourceMappingURL=chunk-OMKFTTAN.js.map
477
+ //# sourceMappingURL=chunk-6JHB4FDQ.js.map
478
+ //# sourceMappingURL=chunk-6JHB4FDQ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/init/index.ts","../src/event-queue/stream-manager.ts"],"names":["StreamManager","config","publisher","isConnected","autoCreateDefaultStreams","defaultRetention","defaultStorage","defaultMaxAge","defaultMaxBytes","defaultDuplicateWindow","connect","envPrefix","layer","toUpperCase","natsUrl","process","env","publisherConfig","type","url","user","natsUser","password","natsPassword","token","natsToken","creds","natsCreds","credsFile","natsCredsFile","name","maxReconnectAttempts","reconnectTimeWait","EventQueueFactory","createPublisher","logger","info","ensureDefaultStreams","disconnect","getIsConnected","defaultStreams","DEFAULT_LAYER_STREAMS","results","streamDef","result","ensureStream","subjects","description","push","streamConfig","Error","fullConfig","retention","storage","maxAge","maxBytes","duplicateWindow","maxConsumers","maxMsgs","created","existed","error","errorMessage","message","String","includes","ensureStreams","streams","stream","getDefaultStreamsForLayer","fromEnv","sdkState","isInitialized","initializeBurdenoffSDK","warn","startTime","Date","now","initializeLogging","layerManager","gatewayClient","initializeLayer","prisma","initializeDatabase","valkey","initializeCache","nats","initializeEventQueue","autoCreateStreams","initializeLayerStreams","graphSync","initializeGraphSync","clickhouse","initializeAnalytics","initializeObservability","graphSyncEnabled","graph","enabled","analyticsEnabled","analytics","observabilityEnabled","observability","metrics","layerAwareEnabled","duration","initializedState","serviceName","getSDKState","isSDKInitialized","resetSDK","loggingConfig","logging","isDevelopment","app","nodeEnv","level","setLevel","console","setConsoleEnabled","format","database","maxConnections","enableQueryLogging","undefined","cacheConfig","cache","defaultTTL","eventQueue","natsConfig","connectionUrl","Array","isArray","servers","join","QueueType","effectiveUser","effectivePass","NATS","note","eventsEnabled","productSource","streamName","syncInterval","batchSize","requestTimeout","openTelemetry","port","endpoint","samplingRate","LayerManager","serviceIdentity","GatewayClient","internalGatewayUrl","getInternalGatewayUrl","crossLayerGatewayUrl","getCrossLayerGatewayUrl","streamManager","filter","r","length","errors"],"mappings":"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","file":"chunk-OMKFTTAN.js","sourcesContent":["/**\n * Burdenoff SDK Initialization Module\n *\n * Provides a unified initialization function for all state services\n * including database, cache, analytics, event queue, and graph sync.\n *\n * @module init\n * @category Initialization\n */\n\nimport { logger } from '../logger/index.js';\nimport { LayerManager } from '../layer/index.js';\nimport { GatewayClient } from '../gateway/index.js';\nimport { StreamManager } from '../event-queue/stream-manager.js';\nimport type { BurdenoffSDKInitConfig, InitializedSDKState } from './types.js';\n\n/**\n * Global SDK state\n */\nlet sdkState: InitializedSDKState | null = null;\nlet isInitialized = false;\n\n/**\n * Initialize Burdenoff SDK with unified configuration\n *\n * This function initializes all configured state services in the correct order:\n * 1. Logging configuration\n * 2. Database (Prisma with PostgreSQL)\n * 3. Cache (Valkey)\n * 4. Event Queue (NATS)\n * 5. Graph Sync (NATS-based — NebulaGraph writes happen inside wspace-graph-svc)\n * 6. Analytics (ClickHouse)\n * 7. Observability (Metrics, OpenTelemetry)\n *\n * @param config - SDK initialization configuration\n * @returns Initialized SDK state\n *\n * @example\n * ```typescript\n * import { initializeBurdenoffSDK } from '@burdenoff/be-sdk/init';\n *\n * const state = await initializeBurdenoffSDK({\n * database: {\n * url: process.env.DATABASE_URL!,\n * maxConnections: 20,\n * },\n * graph: {\n * enabled: true,\n * eventsEnabled: true,\n * },\n * cache: {\n * valkey: {\n * url: process.env.VALKEY_URL!,\n * },\n * },\n * });\n * ```\n */\nexport async function initializeBurdenoffSDK(config: BurdenoffSDKInitConfig): Promise<InitializedSDKState> {\n if (isInitialized && sdkState) {\n logger.warn('[SDK Init] SDK already initialized, returning existing state');\n return sdkState;\n }\n\n logger.info('[SDK Init] Starting SDK initialization...');\n const startTime = Date.now();\n\n try {\n // 1. Configure logging\n await initializeLogging(config);\n\n // 2. Initialize layer manager (if configured)\n const { layerManager, gatewayClient } = await initializeLayer(config);\n\n // 3. Initialize database (required)\n const prisma = await initializeDatabase(config);\n\n // 4. Initialize cache (optional)\n const valkey = await initializeCache(config);\n\n // 5. Initialize event queue (optional)\n const nats = await initializeEventQueue(config);\n\n // 6. Initialize layer streams (if layer configured)\n if (config.layer?.autoCreateStreams !== false && config.layer) {\n await initializeLayerStreams(config);\n }\n\n // 7. Initialize graph sync (optional) — publishes to NATS, never opens a graph-DB connection\n const graphSync = await initializeGraphSync(config);\n\n // 8. Initialize analytics (optional)\n const clickhouse = await initializeAnalytics(config);\n\n // 9. Initialize observability (optional)\n await initializeObservability(config);\n\n // Create SDK state\n // graphSync is a publisher-side placeholder; services emit NATS events\n // and wspace-graph-svc owns the sole NebulaGraph connection.\n void graphSync;\n sdkState = {\n prisma,\n valkey,\n clickhouse,\n nats,\n layerManager,\n gatewayClient,\n graphSyncEnabled: config.graph?.enabled ?? false,\n analyticsEnabled: !!config.analytics?.clickhouse,\n observabilityEnabled: config.observability?.metrics?.enabled ?? false,\n layerAwareEnabled: !!config.layer,\n };\n\n isInitialized = true;\n\n const duration = Date.now() - startTime;\n // sdkState is guaranteed non-null here since we just assigned it above\n const initializedState = sdkState;\n logger.info(`[SDK Init] SDK initialized successfully in ${duration}ms`, {\n graphSyncEnabled: initializedState.graphSyncEnabled,\n analyticsEnabled: initializedState.analyticsEnabled,\n observabilityEnabled: initializedState.observabilityEnabled,\n layerAwareEnabled: initializedState.layerAwareEnabled,\n layer: config.layer?.type,\n serviceName: config.layer?.serviceName,\n });\n\n return initializedState;\n } catch (error) {\n logger.error('[SDK Init] Failed to initialize SDK:', error);\n throw error;\n }\n}\n\n/**\n * Get current SDK state\n * @throws Error if SDK is not initialized\n */\nexport function getSDKState(): InitializedSDKState {\n if (!isInitialized || !sdkState) {\n throw new Error('SDK not initialized. Call initializeBurdenoffSDK() first.');\n }\n return sdkState;\n}\n\n/**\n * Check if SDK is initialized\n */\nexport function isSDKInitialized(): boolean {\n return isInitialized;\n}\n\n/**\n * Reset SDK state (useful for testing)\n */\nexport async function resetSDK(): Promise<void> {\n logger.info('[SDK Init] Resetting SDK state...');\n\n if (sdkState) {\n // Cleanup resources\n // Note: Individual cleanup will be handled by service-specific shutdown handlers\n sdkState = null;\n }\n\n isInitialized = false;\n logger.info('[SDK Init] SDK state reset');\n}\n\n/**\n * Initialize logging configuration\n */\nasync function initializeLogging(config: BurdenoffSDKInitConfig): Promise<void> {\n logger.info('[SDK Init] Configuring logging...');\n\n const loggingConfig = config.logging ?? {};\n const isDevelopment = config.app?.nodeEnv === 'development';\n\n // Set log level\n const level = loggingConfig.level ?? 'info';\n logger.setLevel(level);\n\n // Set console logging\n const console = loggingConfig.console ?? true;\n logger.setConsoleEnabled(console);\n\n logger.info('[SDK Init] Logging configured', {\n level,\n console,\n format: loggingConfig.format ?? (isDevelopment ? 'pretty' : 'json'),\n });\n}\n\n/**\n * Initialize database (Prisma with PostgreSQL)\n */\nasync function initializeDatabase(config: BurdenoffSDKInitConfig): Promise<unknown> {\n logger.info('[SDK Init] Initializing database...');\n\n // Note: Database initialization is handled by createPrismaClient in prisma/client.ts\n // This is called by the application (e.g., workspaces-backend)\n // We just validate the config here\n if (!config.database?.url) {\n throw new Error('Database URL is required');\n }\n\n logger.info('[SDK Init] Database configuration validated', {\n maxConnections: config.database.maxConnections ?? 20,\n enableQueryLogging: config.database.enableQueryLogging ?? false,\n });\n\n // Return undefined as database client is created separately\n return undefined;\n}\n\n/**\n * Initialize cache (Valkey)\n */\nasync function initializeCache(config: BurdenoffSDKInitConfig): Promise<unknown> {\n const cacheConfig = config.cache?.valkey;\n\n if (!cacheConfig) {\n logger.info('[SDK Init] Cache not configured, skipping');\n return undefined;\n }\n\n logger.info('[SDK Init] Initializing Valkey cache...');\n\n // Note: Valkey initialization is handled by cache module\n // This is a placeholder for future implementation\n logger.info('[SDK Init] Valkey cache configuration validated', {\n url: cacheConfig.url ? '***' : undefined,\n defaultTTL: cacheConfig.defaultTTL ?? 3600,\n });\n\n return undefined;\n}\n\n/**\n * Initialize event queue (NATS)\n */\nasync function initializeEventQueue(config: BurdenoffSDKInitConfig): Promise<unknown> {\n if (!config.eventQueue?.nats) {\n logger.info('[SDK Init] Event queue not configured, skipping');\n return undefined;\n }\n\n logger.info('[SDK Init] Initializing NATS event queue...');\n\n // Support both 'url' and 'servers' fields for flexibility\n const natsConfig = config.eventQueue.nats;\n let connectionUrl: string | undefined;\n if (natsConfig.url) {\n connectionUrl = natsConfig.url;\n } else if (Array.isArray(natsConfig.servers)) {\n connectionUrl = natsConfig.servers.join(',');\n } else {\n connectionUrl = natsConfig.servers;\n }\n\n if (!connectionUrl) {\n logger.warn('[SDK Init] NATS configuration requires either \"url\" or \"servers\" field');\n return undefined;\n }\n\n logger.info('[SDK Init] NATS event queue configuration validated', {\n url: connectionUrl,\n maxReconnectAttempts: natsConfig.maxReconnectAttempts ?? 10,\n reconnectTimeWait: natsConfig.reconnectTimeWait ?? 2000,\n });\n\n // Create and connect the event publisher\n try {\n const { EventQueueFactory } = await import('../event-queue/factory/EventQueueFactory.js');\n const { QueueType } = await import('../event-queue/types/config.js');\n\n // Auth is passed as separate ConnectionOptions. The bun-bundled `nats`\n // 2.29.x client mis-parses URL-embedded credentials, so URLs must stay\n // credential-free. Synadia/NATS .creds auth takes precedence downstream\n // over user/password/token when provided.\n const effectiveUser = natsConfig.user ?? process.env['NATS_USER'];\n const effectivePass = natsConfig.password ?? process.env['NATS_PASSWORD'];\n\n const publisher = EventQueueFactory.createPublisher({\n type: QueueType.NATS,\n url: connectionUrl,\n user: effectiveUser,\n password: effectivePass,\n token: natsConfig.token,\n creds: natsConfig.creds ?? process.env['NATS_CREDS'],\n credsFile: natsConfig.credsFile ?? process.env['NATS_CREDS_FILE'],\n name: config.layer?.serviceName || config.app?.serviceName || 'sdk-publisher',\n maxReconnectAttempts: natsConfig.maxReconnectAttempts ?? -1,\n reconnectTimeWait: natsConfig.reconnectTimeWait ?? 2000,\n });\n\n await publisher.connect();\n\n logger.info('[SDK Init] NATS event publisher connected', {\n url: connectionUrl,\n serviceName: config.layer?.serviceName || config.app?.serviceName,\n });\n\n return publisher;\n } catch (error) {\n logger.warn('[SDK Init] Failed to connect NATS event publisher (non-fatal)', {\n error: error instanceof Error ? error.message : String(error),\n note: 'Service will continue without event publishing. Use direct API calls as fallback.',\n });\n return undefined;\n }\n}\n\n/**\n * Initialize graph sync (NATS publisher side).\n *\n * Services publish entity events to NATS; the `wspace-graph-svc` consumer\n * (and only it) persists them into NebulaGraph via its Python sidecar. This\n * SDK function does no DB work — it just validates that the publisher-side\n * config is sensible and logs it.\n */\nasync function initializeGraphSync(config: BurdenoffSDKInitConfig): Promise<unknown> {\n if (!config.graph?.enabled) {\n logger.info('[SDK Init] Graph sync not enabled, skipping');\n return undefined;\n }\n\n logger.info('[SDK Init] Graph sync enabled (publisher-only mode)', {\n eventsEnabled: config.graph.eventsEnabled ?? true,\n productSource: config.graph.productSource,\n streamName: config.graph.streamName ?? 'graph_events',\n syncInterval: config.graph.syncInterval ?? 1000,\n batchSize: config.graph.batchSize ?? 10,\n });\n\n return undefined;\n}\n\n/**\n * Initialize analytics (ClickHouse)\n */\nasync function initializeAnalytics(config: BurdenoffSDKInitConfig): Promise<unknown> {\n if (!config.analytics?.clickhouse) {\n logger.info('[SDK Init] Analytics not configured, skipping');\n return undefined;\n }\n\n logger.info('[SDK Init] Initializing ClickHouse for analytics...');\n\n // Note: ClickHouse initialization is handled by analytics module\n // This is a placeholder for future implementation\n logger.info('[SDK Init] ClickHouse configuration validated', {\n url: config.analytics.clickhouse.url,\n database: config.analytics.clickhouse.database,\n requestTimeout: config.analytics.clickhouse.requestTimeout ?? 60000,\n });\n\n return undefined;\n}\n\n/**\n * Initialize observability (metrics, tracing)\n */\nasync function initializeObservability(config: BurdenoffSDKInitConfig): Promise<void> {\n if (!config.observability?.metrics?.enabled && !config.observability?.openTelemetry?.enabled) {\n logger.info('[SDK Init] Observability not configured, skipping');\n return;\n }\n\n logger.info('[SDK Init] Initializing observability...');\n\n // Note: Observability initialization is handled by observability module\n // This is a placeholder for future implementation\n if (config.observability.metrics?.enabled) {\n logger.info('[SDK Init] Metrics configuration validated', {\n port: config.observability.metrics.port ?? 9090,\n endpoint: config.observability.metrics.endpoint ?? '/metrics',\n });\n }\n\n if (config.observability.openTelemetry?.enabled) {\n logger.info('[SDK Init] OpenTelemetry configuration validated', {\n serviceName: config.observability.openTelemetry.serviceName,\n samplingRate: config.observability.openTelemetry.samplingRate ?? 1.0,\n });\n }\n}\n\n/**\n * Initialize layer manager and gateway client\n */\nasync function initializeLayer(\n config: BurdenoffSDKInitConfig\n): Promise<{ layerManager?: LayerManager; gatewayClient?: GatewayClient }> {\n if (!config.layer) {\n logger.info('[SDK Init] Layer configuration not provided, skipping layer initialization');\n return {};\n }\n\n logger.info('[SDK Init] Initializing layer manager...', {\n layer: config.layer.type,\n serviceName: config.layer.serviceName,\n });\n\n // Create layer manager\n const layerManager = new LayerManager({\n layer: config.layer.type,\n serviceName: config.layer.serviceName,\n serviceIdentity: config.layer.serviceIdentity,\n });\n\n // Create gateway client\n const gatewayClient = new GatewayClient({\n layer: config.layer.type,\n serviceName: config.layer.serviceName,\n serviceIdentity: config.layer.serviceIdentity,\n internalGatewayUrl: layerManager.getInternalGatewayUrl(),\n crossLayerGatewayUrl: layerManager.getCrossLayerGatewayUrl(),\n });\n\n logger.info('[SDK Init] Layer manager initialized', {\n layer: config.layer.type,\n serviceName: config.layer.serviceName,\n internalGatewayUrl: layerManager.getInternalGatewayUrl(),\n crossLayerGatewayUrl: layerManager.getCrossLayerGatewayUrl(),\n });\n\n return { layerManager, gatewayClient };\n}\n\n/**\n * Initialize layer-specific NATS streams\n */\nasync function initializeLayerStreams(config: BurdenoffSDKInitConfig): Promise<void> {\n if (!config.layer) {\n return;\n }\n\n logger.info('[SDK Init] Initializing layer streams...', {\n layer: config.layer.type,\n });\n\n try {\n const streamManager = new StreamManager({\n layer: config.layer.type,\n autoCreateDefaultStreams: true,\n });\n\n await streamManager.connect();\n\n const results = await streamManager.ensureDefaultStreams();\n const created = results.filter((r) => r.created).length;\n const existed = results.filter((r) => r.existed).length;\n const errors = results.filter((r) => r.error).length;\n\n logger.info('[SDK Init] Layer streams initialized', {\n layer: config.layer.type,\n created,\n existed,\n errors,\n });\n\n // Disconnect stream manager (we only needed it for setup)\n await streamManager.disconnect();\n } catch (error) {\n logger.warn('[SDK Init] Failed to initialize layer streams (non-fatal)', {\n error: error instanceof Error ? error.message : String(error),\n });\n // Don't throw - stream creation failure shouldn't block SDK initialization\n }\n}\n\n// Export types\nexport type * from './types.js';\n","/**\n * NATS Stream Manager\n *\n * Provides automatic stream creation and management for layer-aware\n * NATS JetStream configuration.\n *\n * @module event-queue/stream-manager\n * @category EventQueue\n *\n * @example\n * ```typescript\n * import { StreamManager } from '@burdenoff/be-sdk/event-queue';\n *\n * const manager = new StreamManager({\n * layer: 'wspace',\n * natsUrl: 'nats://localhost:4222',\n * });\n *\n * // Ensure all default streams exist\n * await manager.ensureDefaultStreams();\n *\n * // Create custom stream\n * await manager.ensureStream({\n * name: 'CUSTOM_EVENTS',\n * subjects: ['custom.>'],\n * });\n * ```\n */\n\nimport { logger } from '../logger/index.js';\nimport type { ServiceLayer } from '../types/layer.js';\nimport { DEFAULT_LAYER_STREAMS } from '../types/layer.js';\nimport type { StreamConfig } from './types/index.js';\nimport type { IEventPublisher } from './interfaces/IEventPublisher.js';\nimport { EventQueueFactory } from './factory/EventQueueFactory.js';\nimport type { PublisherConfig } from './types/config.js';\n\n/**\n * Stream manager configuration\n */\nexport interface StreamManagerConfig {\n /**\n * Layer for default stream configuration\n */\n layer: ServiceLayer;\n\n /**\n * NATS server URL\n * @default From environment or layer defaults\n */\n natsUrl?: string;\n\n /**\n * NATS username for authentication\n */\n natsUser?: string;\n\n /**\n * NATS password for authentication\n */\n natsPassword?: string;\n\n /**\n * NATS token for authentication\n */\n natsToken?: string;\n\n /**\n * NATS credentials file contents (JWT + NKEY seed)\n */\n natsCreds?: string;\n\n /**\n * Path to a NATS credentials file\n */\n natsCredsFile?: string;\n\n /**\n * Auto-create default streams on connect\n * @default true\n */\n autoCreateDefaultStreams?: boolean;\n\n /**\n * Default retention policy for streams\n * @default 'limits'\n */\n defaultRetention?: 'limits' | 'interest' | 'workqueue';\n\n /**\n * Default storage type for streams\n * @default 'file'\n */\n defaultStorage?: 'file' | 'memory';\n\n /**\n * Default max age for messages (in nanoseconds)\n * @default 86400000000000 (24 hours)\n */\n defaultMaxAge?: number;\n\n /**\n * Default max bytes per stream\n * @default -1 (unlimited)\n */\n defaultMaxBytes?: number;\n\n /**\n * Default duplicate window (in nanoseconds)\n * @default 120000000000 (2 minutes)\n */\n defaultDuplicateWindow?: number;\n}\n\n/**\n * Stream creation result\n */\nexport interface StreamCreationResult {\n name: string;\n created: boolean;\n existed: boolean;\n error?: string;\n}\n\n/**\n * Stream Manager for NATS JetStream\n */\nexport class StreamManager {\n private config: StreamManagerConfig;\n private publisher: IEventPublisher | null = null;\n private isConnected = false;\n\n constructor(config: StreamManagerConfig) {\n this.config = {\n autoCreateDefaultStreams: true,\n defaultRetention: 'limits',\n defaultStorage: 'file',\n defaultMaxAge: 86400000000000, // 24 hours in nanoseconds\n defaultMaxBytes: -1,\n defaultDuplicateWindow: 120000000000, // 2 minutes in nanoseconds\n ...config,\n };\n }\n\n /**\n * Connect to NATS and optionally create default streams\n */\n async connect(): Promise<void> {\n if (this.isConnected && this.publisher) {\n return;\n }\n\n const envPrefix = this.config.layer.toUpperCase();\n const natsUrl =\n this.config.natsUrl || process.env[`${envPrefix}_NATS_URL`] || process.env['NATS_URL'] || 'nats://localhost:4222';\n\n const publisherConfig: PublisherConfig = {\n type: 'nats',\n url: natsUrl,\n user: this.config.natsUser || process.env['NATS_USER'],\n password: this.config.natsPassword || process.env['NATS_PASSWORD'],\n token: this.config.natsToken || process.env['NATS_TOKEN'],\n creds: this.config.natsCreds || process.env['NATS_CREDS'],\n credsFile: this.config.natsCredsFile || process.env['NATS_CREDS_FILE'],\n name: `stream-manager-${this.config.layer}`,\n maxReconnectAttempts: 10,\n reconnectTimeWait: 2000,\n };\n\n this.publisher = EventQueueFactory.createPublisher(publisherConfig);\n await this.publisher.connect();\n this.isConnected = true;\n\n logger.info('[StreamManager] Connected to NATS', {\n layer: this.config.layer,\n url: natsUrl,\n });\n\n // Auto-create default streams if configured\n if (this.config.autoCreateDefaultStreams) {\n await this.ensureDefaultStreams();\n }\n }\n\n /**\n * Disconnect from NATS\n */\n async disconnect(): Promise<void> {\n if (this.publisher) {\n await this.publisher.disconnect();\n this.publisher = null;\n this.isConnected = false;\n\n logger.info('[StreamManager] Disconnected from NATS', {\n layer: this.config.layer,\n });\n }\n }\n\n /**\n * Check if connected\n */\n getIsConnected(): boolean {\n return this.isConnected && (this.publisher?.isConnected() ?? false);\n }\n\n /**\n * Ensure default streams for the layer exist\n */\n async ensureDefaultStreams(): Promise<StreamCreationResult[]> {\n const defaultStreams = DEFAULT_LAYER_STREAMS[this.config.layer];\n const results: StreamCreationResult[] = [];\n\n for (const streamDef of defaultStreams) {\n const result = await this.ensureStream({\n name: streamDef.name,\n subjects: streamDef.subjects,\n description: streamDef.description,\n });\n results.push(result);\n }\n\n return results;\n }\n\n /**\n * Ensure a stream exists with the given configuration\n */\n async ensureStream(\n streamConfig: Partial<StreamConfig> & { name: string; subjects: string[] }\n ): Promise<StreamCreationResult> {\n if (!this.publisher) {\n throw new Error('[StreamManager] Not connected to NATS');\n }\n\n const fullConfig: StreamConfig = {\n name: streamConfig.name,\n subjects: streamConfig.subjects,\n retention: streamConfig.retention || this.config.defaultRetention,\n storage: streamConfig.storage || this.config.defaultStorage,\n maxAge: streamConfig.maxAge || this.config.defaultMaxAge,\n maxBytes: streamConfig.maxBytes || this.config.defaultMaxBytes,\n duplicateWindow: streamConfig.duplicateWindow || this.config.defaultDuplicateWindow,\n maxConsumers: streamConfig.maxConsumers,\n maxMsgs: streamConfig.maxMsgs,\n description: streamConfig.description,\n };\n\n try {\n await this.publisher.ensureStream(fullConfig);\n\n logger.info('[StreamManager] Stream ensured', {\n name: fullConfig.name,\n subjects: fullConfig.subjects,\n });\n\n return {\n name: fullConfig.name,\n created: true,\n existed: false,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n // Check if error is because stream already exists\n if (errorMessage.includes('already exists') || errorMessage.includes('stream not found')) {\n return {\n name: fullConfig.name,\n created: false,\n existed: true,\n };\n }\n\n logger.error('[StreamManager] Failed to ensure stream', {\n name: fullConfig.name,\n error: errorMessage,\n });\n\n return {\n name: fullConfig.name,\n created: false,\n existed: false,\n error: errorMessage,\n };\n }\n }\n\n /**\n * Ensure multiple streams exist\n */\n async ensureStreams(\n streams: Array<Partial<StreamConfig> & { name: string; subjects: string[] }>\n ): Promise<StreamCreationResult[]> {\n const results: StreamCreationResult[] = [];\n\n for (const stream of streams) {\n const result = await this.ensureStream(stream);\n results.push(result);\n }\n\n return results;\n }\n\n /**\n * Get default streams configuration for a layer\n */\n static getDefaultStreamsForLayer(\n layer: ServiceLayer\n ): Array<{ name: string; subjects: string[]; description?: string }> {\n return DEFAULT_LAYER_STREAMS[layer];\n }\n\n /**\n * Create stream manager from environment variables\n */\n static fromEnv(): StreamManager {\n const layer = (process.env['SERVICE_LAYER'] as ServiceLayer) || 'wspace';\n\n if (layer !== 'wspace' && layer !== 'global') {\n throw new Error(`[StreamManager] Invalid SERVICE_LAYER: ${layer}. Expected 'wspace' or 'global'`);\n }\n\n return new StreamManager({\n layer,\n natsUrl: process.env['NATS_URL'],\n natsUser: process.env['NATS_USER'],\n natsPassword: process.env['NATS_PASSWORD'],\n natsToken: process.env['NATS_TOKEN'],\n natsCreds: process.env['NATS_CREDS'],\n natsCredsFile: process.env['NATS_CREDS_FILE'],\n autoCreateDefaultStreams: process.env['STREAM_MANAGER_AUTO_CREATE'] !== 'false',\n });\n }\n}\n\n/**\n * Create stream manager instance\n */\nexport function createStreamManager(config: StreamManagerConfig): StreamManager {\n return new StreamManager(config);\n}\n\n/**\n * Create stream manager from environment and connect\n */\nexport async function createAndConnectStreamManager(): Promise<StreamManager> {\n const manager = StreamManager.fromEnv();\n await manager.connect();\n return manager;\n}\n"]}
1
+ {"version":3,"sources":["../src/init/index.ts","../src/event-queue/stream-manager.ts"],"names":["StreamManager","config","publisher","isConnected","autoCreateDefaultStreams","defaultRetention","defaultStorage","defaultMaxAge","defaultMaxBytes","defaultDuplicateWindow","connect","envPrefix","layer","toUpperCase","natsUrl","process","env","publisherConfig","type","url","user","natsUser","password","natsPassword","token","natsToken","creds","natsCreds","credsFile","natsCredsFile","name","maxReconnectAttempts","reconnectTimeWait","EventQueueFactory","createPublisher","logger","info","ensureDefaultStreams","disconnect","getIsConnected","defaultStreams","DEFAULT_LAYER_STREAMS","results","streamDef","result","ensureStream","subjects","description","push","streamConfig","Error","fullConfig","retention","storage","maxAge","maxBytes","duplicateWindow","maxConsumers","maxMsgs","created","existed","error","errorMessage","message","String","includes","ensureStreams","streams","stream","getDefaultStreamsForLayer","fromEnv","sdkState","isInitialized","initializeBurdenoffSDK","warn","startTime","Date","now","initializeLogging","layerManager","gatewayClient","initializeLayer","prisma","initializeDatabase","valkey","initializeCache","nats","initializeEventQueue","autoCreateStreams","initializeLayerStreams","graphSync","initializeGraphSync","clickhouse","initializeAnalytics","initializeObservability","graphSyncEnabled","graph","enabled","analyticsEnabled","analytics","observabilityEnabled","observability","metrics","layerAwareEnabled","duration","initializedState","serviceName","getSDKState","isSDKInitialized","resetSDK","loggingConfig","logging","isDevelopment","app","nodeEnv","level","setLevel","console","setConsoleEnabled","format","database","maxConnections","enableQueryLogging","undefined","cacheConfig","cache","defaultTTL","eventQueue","natsConfig","connectionUrl","Array","isArray","servers","join","QueueType","effectiveUser","effectivePass","NATS","note","eventsEnabled","productSource","streamName","syncInterval","batchSize","requestTimeout","openTelemetry","port","endpoint","samplingRate","LayerManager","serviceIdentity","GatewayClient","internalGatewayUrl","getInternalGatewayUrl","crossLayerGatewayUrl","getCrossLayerGatewayUrl","streamManager","filter","r","length","errors"],"mappings":"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","file":"chunk-6JHB4FDQ.js","sourcesContent":["/**\n * Burdenoff SDK Initialization Module\n *\n * Provides a unified initialization function for all state services\n * including database, cache, analytics, event queue, and graph sync.\n *\n * @module init\n * @category Initialization\n */\n\nimport { logger } from '../logger/index.js';\nimport { LayerManager } from '../layer/index.js';\nimport { GatewayClient } from '../gateway/index.js';\nimport { StreamManager } from '../event-queue/stream-manager.js';\nimport type { BurdenoffSDKInitConfig, InitializedSDKState } from './types.js';\n\n/**\n * Global SDK state\n */\nlet sdkState: InitializedSDKState | null = null;\nlet isInitialized = false;\n\n/**\n * Initialize Burdenoff SDK with unified configuration\n *\n * This function initializes all configured state services in the correct order:\n * 1. Logging configuration\n * 2. Database (Prisma with PostgreSQL)\n * 3. Cache (Valkey)\n * 4. Event Queue (NATS)\n * 5. Graph Sync (NATS-based — NebulaGraph writes happen inside wspace-graph-svc)\n * 6. Analytics (ClickHouse)\n * 7. Observability (Metrics, OpenTelemetry)\n *\n * @param config - SDK initialization configuration\n * @returns Initialized SDK state\n *\n * @example\n * ```typescript\n * import { initializeBurdenoffSDK } from '@burdenoff/be-sdk/init';\n *\n * const state = await initializeBurdenoffSDK({\n * database: {\n * url: process.env.DATABASE_URL!,\n * maxConnections: 20,\n * },\n * graph: {\n * enabled: true,\n * eventsEnabled: true,\n * },\n * cache: {\n * valkey: {\n * url: process.env.VALKEY_URL!,\n * },\n * },\n * });\n * ```\n */\nexport async function initializeBurdenoffSDK(config: BurdenoffSDKInitConfig): Promise<InitializedSDKState> {\n if (isInitialized && sdkState) {\n logger.warn('[SDK Init] SDK already initialized, returning existing state');\n return sdkState;\n }\n\n logger.info('[SDK Init] Starting SDK initialization...');\n const startTime = Date.now();\n\n try {\n // 1. Configure logging\n await initializeLogging(config);\n\n // 2. Initialize layer manager (if configured)\n const { layerManager, gatewayClient } = await initializeLayer(config);\n\n // 3. Initialize database (required)\n const prisma = await initializeDatabase(config);\n\n // 4. Initialize cache (optional)\n const valkey = await initializeCache(config);\n\n // 5. Initialize event queue (optional)\n const nats = await initializeEventQueue(config);\n\n // 6. Initialize layer streams (if layer configured)\n if (config.layer?.autoCreateStreams !== false && config.layer) {\n await initializeLayerStreams(config);\n }\n\n // 7. Initialize graph sync (optional) — publishes to NATS, never opens a graph-DB connection\n const graphSync = await initializeGraphSync(config);\n\n // 8. Initialize analytics (optional)\n const clickhouse = await initializeAnalytics(config);\n\n // 9. Initialize observability (optional)\n await initializeObservability(config);\n\n // Create SDK state\n // graphSync is a publisher-side placeholder; services emit NATS events\n // and wspace-graph-svc owns the sole NebulaGraph connection.\n void graphSync;\n sdkState = {\n prisma,\n valkey,\n clickhouse,\n nats,\n layerManager,\n gatewayClient,\n graphSyncEnabled: config.graph?.enabled ?? false,\n analyticsEnabled: !!config.analytics?.clickhouse,\n observabilityEnabled: config.observability?.metrics?.enabled ?? false,\n layerAwareEnabled: !!config.layer,\n };\n\n isInitialized = true;\n\n const duration = Date.now() - startTime;\n // sdkState is guaranteed non-null here since we just assigned it above\n const initializedState = sdkState;\n logger.info(`[SDK Init] SDK initialized successfully in ${duration}ms`, {\n graphSyncEnabled: initializedState.graphSyncEnabled,\n analyticsEnabled: initializedState.analyticsEnabled,\n observabilityEnabled: initializedState.observabilityEnabled,\n layerAwareEnabled: initializedState.layerAwareEnabled,\n layer: config.layer?.type,\n serviceName: config.layer?.serviceName,\n });\n\n return initializedState;\n } catch (error) {\n logger.error('[SDK Init] Failed to initialize SDK:', error);\n throw error;\n }\n}\n\n/**\n * Get current SDK state\n * @throws Error if SDK is not initialized\n */\nexport function getSDKState(): InitializedSDKState {\n if (!isInitialized || !sdkState) {\n throw new Error('SDK not initialized. Call initializeBurdenoffSDK() first.');\n }\n return sdkState;\n}\n\n/**\n * Check if SDK is initialized\n */\nexport function isSDKInitialized(): boolean {\n return isInitialized;\n}\n\n/**\n * Reset SDK state (useful for testing)\n */\nexport async function resetSDK(): Promise<void> {\n logger.info('[SDK Init] Resetting SDK state...');\n\n if (sdkState) {\n // Cleanup resources\n // Note: Individual cleanup will be handled by service-specific shutdown handlers\n sdkState = null;\n }\n\n isInitialized = false;\n logger.info('[SDK Init] SDK state reset');\n}\n\n/**\n * Initialize logging configuration\n */\nasync function initializeLogging(config: BurdenoffSDKInitConfig): Promise<void> {\n logger.info('[SDK Init] Configuring logging...');\n\n const loggingConfig = config.logging ?? {};\n const isDevelopment = config.app?.nodeEnv === 'development';\n\n // Set log level\n const level = loggingConfig.level ?? 'info';\n logger.setLevel(level);\n\n // Set console logging\n const console = loggingConfig.console ?? true;\n logger.setConsoleEnabled(console);\n\n logger.info('[SDK Init] Logging configured', {\n level,\n console,\n format: loggingConfig.format ?? (isDevelopment ? 'pretty' : 'json'),\n });\n}\n\n/**\n * Initialize database (Prisma with PostgreSQL)\n */\nasync function initializeDatabase(config: BurdenoffSDKInitConfig): Promise<unknown> {\n logger.info('[SDK Init] Initializing database...');\n\n // Note: Database initialization is handled by createPrismaClient in prisma/client.ts\n // This is called by the application (e.g., workspaces-backend)\n // We just validate the config here\n if (!config.database?.url) {\n throw new Error('Database URL is required');\n }\n\n logger.info('[SDK Init] Database configuration validated', {\n maxConnections: config.database.maxConnections ?? 20,\n enableQueryLogging: config.database.enableQueryLogging ?? false,\n });\n\n // Return undefined as database client is created separately\n return undefined;\n}\n\n/**\n * Initialize cache (Valkey)\n */\nasync function initializeCache(config: BurdenoffSDKInitConfig): Promise<unknown> {\n const cacheConfig = config.cache?.valkey;\n\n if (!cacheConfig) {\n logger.info('[SDK Init] Cache not configured, skipping');\n return undefined;\n }\n\n logger.info('[SDK Init] Initializing Valkey cache...');\n\n // Note: Valkey initialization is handled by cache module\n // This is a placeholder for future implementation\n logger.info('[SDK Init] Valkey cache configuration validated', {\n url: cacheConfig.url ? '***' : undefined,\n defaultTTL: cacheConfig.defaultTTL ?? 3600,\n });\n\n return undefined;\n}\n\n/**\n * Initialize event queue (NATS)\n */\nasync function initializeEventQueue(config: BurdenoffSDKInitConfig): Promise<unknown> {\n if (!config.eventQueue?.nats) {\n logger.info('[SDK Init] Event queue not configured, skipping');\n return undefined;\n }\n\n logger.info('[SDK Init] Initializing NATS event queue...');\n\n // Support both 'url' and 'servers' fields for flexibility\n const natsConfig = config.eventQueue.nats;\n let connectionUrl: string | undefined;\n if (natsConfig.url) {\n connectionUrl = natsConfig.url;\n } else if (Array.isArray(natsConfig.servers)) {\n connectionUrl = natsConfig.servers.join(',');\n } else {\n connectionUrl = natsConfig.servers;\n }\n\n if (!connectionUrl) {\n logger.warn('[SDK Init] NATS configuration requires either \"url\" or \"servers\" field');\n return undefined;\n }\n\n logger.info('[SDK Init] NATS event queue configuration validated', {\n url: connectionUrl,\n maxReconnectAttempts: natsConfig.maxReconnectAttempts ?? 10,\n reconnectTimeWait: natsConfig.reconnectTimeWait ?? 2000,\n });\n\n // Create and connect the event publisher\n try {\n const { EventQueueFactory } = await import('../event-queue/factory/EventQueueFactory.js');\n const { QueueType } = await import('../event-queue/types/config.js');\n\n // Auth is passed as separate ConnectionOptions. The bun-bundled `nats`\n // 2.29.x client mis-parses URL-embedded credentials, so URLs must stay\n // credential-free. Synadia/NATS .creds auth takes precedence downstream\n // over user/password/token when provided.\n const effectiveUser = natsConfig.user ?? process.env['NATS_USER'];\n const effectivePass = natsConfig.password ?? process.env['NATS_PASSWORD'];\n\n const publisher = EventQueueFactory.createPublisher({\n type: QueueType.NATS,\n url: connectionUrl,\n user: effectiveUser,\n password: effectivePass,\n token: natsConfig.token,\n creds: natsConfig.creds ?? process.env['NATS_CREDS'],\n credsFile: natsConfig.credsFile ?? process.env['NATS_CREDS_FILE'],\n name: config.layer?.serviceName || config.app?.serviceName || 'sdk-publisher',\n maxReconnectAttempts: natsConfig.maxReconnectAttempts ?? -1,\n reconnectTimeWait: natsConfig.reconnectTimeWait ?? 2000,\n });\n\n await publisher.connect();\n\n logger.info('[SDK Init] NATS event publisher connected', {\n url: connectionUrl,\n serviceName: config.layer?.serviceName || config.app?.serviceName,\n });\n\n return publisher;\n } catch (error) {\n logger.warn('[SDK Init] Failed to connect NATS event publisher (non-fatal)', {\n error: error instanceof Error ? error.message : String(error),\n note: 'Service will continue without event publishing. Use direct API calls as fallback.',\n });\n return undefined;\n }\n}\n\n/**\n * Initialize graph sync (NATS publisher side).\n *\n * Services publish entity events to NATS; the `wspace-graph-svc` consumer\n * (and only it) persists them into NebulaGraph via its Python sidecar. This\n * SDK function does no DB work — it just validates that the publisher-side\n * config is sensible and logs it.\n */\nasync function initializeGraphSync(config: BurdenoffSDKInitConfig): Promise<unknown> {\n if (!config.graph?.enabled) {\n logger.info('[SDK Init] Graph sync not enabled, skipping');\n return undefined;\n }\n\n logger.info('[SDK Init] Graph sync enabled (publisher-only mode)', {\n eventsEnabled: config.graph.eventsEnabled ?? true,\n productSource: config.graph.productSource,\n streamName: config.graph.streamName ?? 'graph_events',\n syncInterval: config.graph.syncInterval ?? 1000,\n batchSize: config.graph.batchSize ?? 10,\n });\n\n return undefined;\n}\n\n/**\n * Initialize analytics (ClickHouse)\n */\nasync function initializeAnalytics(config: BurdenoffSDKInitConfig): Promise<unknown> {\n if (!config.analytics?.clickhouse) {\n logger.info('[SDK Init] Analytics not configured, skipping');\n return undefined;\n }\n\n logger.info('[SDK Init] Initializing ClickHouse for analytics...');\n\n // Note: ClickHouse initialization is handled by analytics module\n // This is a placeholder for future implementation\n logger.info('[SDK Init] ClickHouse configuration validated', {\n url: config.analytics.clickhouse.url,\n database: config.analytics.clickhouse.database,\n requestTimeout: config.analytics.clickhouse.requestTimeout ?? 60000,\n });\n\n return undefined;\n}\n\n/**\n * Initialize observability (metrics, tracing)\n */\nasync function initializeObservability(config: BurdenoffSDKInitConfig): Promise<void> {\n if (!config.observability?.metrics?.enabled && !config.observability?.openTelemetry?.enabled) {\n logger.info('[SDK Init] Observability not configured, skipping');\n return;\n }\n\n logger.info('[SDK Init] Initializing observability...');\n\n // Note: Observability initialization is handled by observability module\n // This is a placeholder for future implementation\n if (config.observability.metrics?.enabled) {\n logger.info('[SDK Init] Metrics configuration validated', {\n port: config.observability.metrics.port ?? 9090,\n endpoint: config.observability.metrics.endpoint ?? '/metrics',\n });\n }\n\n if (config.observability.openTelemetry?.enabled) {\n logger.info('[SDK Init] OpenTelemetry configuration validated', {\n serviceName: config.observability.openTelemetry.serviceName,\n samplingRate: config.observability.openTelemetry.samplingRate ?? 1.0,\n });\n }\n}\n\n/**\n * Initialize layer manager and gateway client\n */\nasync function initializeLayer(\n config: BurdenoffSDKInitConfig\n): Promise<{ layerManager?: LayerManager; gatewayClient?: GatewayClient }> {\n if (!config.layer) {\n logger.info('[SDK Init] Layer configuration not provided, skipping layer initialization');\n return {};\n }\n\n logger.info('[SDK Init] Initializing layer manager...', {\n layer: config.layer.type,\n serviceName: config.layer.serviceName,\n });\n\n // Create layer manager\n const layerManager = new LayerManager({\n layer: config.layer.type,\n serviceName: config.layer.serviceName,\n serviceIdentity: config.layer.serviceIdentity,\n });\n\n // Create gateway client\n const gatewayClient = new GatewayClient({\n layer: config.layer.type,\n serviceName: config.layer.serviceName,\n serviceIdentity: config.layer.serviceIdentity,\n internalGatewayUrl: layerManager.getInternalGatewayUrl(),\n crossLayerGatewayUrl: layerManager.getCrossLayerGatewayUrl(),\n });\n\n logger.info('[SDK Init] Layer manager initialized', {\n layer: config.layer.type,\n serviceName: config.layer.serviceName,\n internalGatewayUrl: layerManager.getInternalGatewayUrl(),\n crossLayerGatewayUrl: layerManager.getCrossLayerGatewayUrl(),\n });\n\n return { layerManager, gatewayClient };\n}\n\n/**\n * Initialize layer-specific NATS streams\n */\nasync function initializeLayerStreams(config: BurdenoffSDKInitConfig): Promise<void> {\n if (!config.layer) {\n return;\n }\n\n logger.info('[SDK Init] Initializing layer streams...', {\n layer: config.layer.type,\n });\n\n try {\n const streamManager = new StreamManager({\n layer: config.layer.type,\n autoCreateDefaultStreams: true,\n });\n\n await streamManager.connect();\n\n const results = await streamManager.ensureDefaultStreams();\n const created = results.filter((r) => r.created).length;\n const existed = results.filter((r) => r.existed).length;\n const errors = results.filter((r) => r.error).length;\n\n logger.info('[SDK Init] Layer streams initialized', {\n layer: config.layer.type,\n created,\n existed,\n errors,\n });\n\n // Disconnect stream manager (we only needed it for setup)\n await streamManager.disconnect();\n } catch (error) {\n logger.warn('[SDK Init] Failed to initialize layer streams (non-fatal)', {\n error: error instanceof Error ? error.message : String(error),\n });\n // Don't throw - stream creation failure shouldn't block SDK initialization\n }\n}\n\n// Export types\nexport type * from './types.js';\n","/**\n * NATS Stream Manager\n *\n * Provides automatic stream creation and management for layer-aware\n * NATS JetStream configuration.\n *\n * @module event-queue/stream-manager\n * @category EventQueue\n *\n * @example\n * ```typescript\n * import { StreamManager } from '@burdenoff/be-sdk/event-queue';\n *\n * const manager = new StreamManager({\n * layer: 'wspace',\n * natsUrl: 'nats://localhost:4222',\n * });\n *\n * // Ensure all default streams exist\n * await manager.ensureDefaultStreams();\n *\n * // Create custom stream\n * await manager.ensureStream({\n * name: 'CUSTOM_EVENTS',\n * subjects: ['custom.>'],\n * });\n * ```\n */\n\nimport { logger } from '../logger/index.js';\nimport type { ServiceLayer } from '../types/layer.js';\nimport { DEFAULT_LAYER_STREAMS } from '../types/layer.js';\nimport type { StreamConfig } from './types/index.js';\nimport type { IEventPublisher } from './interfaces/IEventPublisher.js';\nimport { EventQueueFactory } from './factory/EventQueueFactory.js';\nimport type { PublisherConfig } from './types/config.js';\n\n/**\n * Stream manager configuration\n */\nexport interface StreamManagerConfig {\n /**\n * Layer for default stream configuration\n */\n layer: ServiceLayer;\n\n /**\n * NATS server URL\n * @default From environment or layer defaults\n */\n natsUrl?: string;\n\n /**\n * NATS username for authentication\n */\n natsUser?: string;\n\n /**\n * NATS password for authentication\n */\n natsPassword?: string;\n\n /**\n * NATS token for authentication\n */\n natsToken?: string;\n\n /**\n * NATS credentials file contents (JWT + NKEY seed)\n */\n natsCreds?: string;\n\n /**\n * Path to a NATS credentials file\n */\n natsCredsFile?: string;\n\n /**\n * Auto-create default streams on connect\n * @default true\n */\n autoCreateDefaultStreams?: boolean;\n\n /**\n * Default retention policy for streams\n * @default 'limits'\n */\n defaultRetention?: 'limits' | 'interest' | 'workqueue';\n\n /**\n * Default storage type for streams\n * @default 'file'\n */\n defaultStorage?: 'file' | 'memory';\n\n /**\n * Default max age for messages (in nanoseconds)\n * @default 86400000000000 (24 hours)\n */\n defaultMaxAge?: number;\n\n /**\n * Default max bytes per stream\n * @default -1 (unlimited)\n */\n defaultMaxBytes?: number;\n\n /**\n * Default duplicate window (in nanoseconds)\n * @default 120000000000 (2 minutes)\n */\n defaultDuplicateWindow?: number;\n}\n\n/**\n * Stream creation result\n */\nexport interface StreamCreationResult {\n name: string;\n created: boolean;\n existed: boolean;\n error?: string;\n}\n\n/**\n * Stream Manager for NATS JetStream\n */\nexport class StreamManager {\n private config: StreamManagerConfig;\n private publisher: IEventPublisher | null = null;\n private isConnected = false;\n\n constructor(config: StreamManagerConfig) {\n this.config = {\n autoCreateDefaultStreams: true,\n defaultRetention: 'limits',\n defaultStorage: 'file',\n defaultMaxAge: 86400000000000, // 24 hours in nanoseconds\n defaultMaxBytes: -1,\n defaultDuplicateWindow: 120000000000, // 2 minutes in nanoseconds\n ...config,\n };\n }\n\n /**\n * Connect to NATS and optionally create default streams\n */\n async connect(): Promise<void> {\n if (this.isConnected && this.publisher) {\n return;\n }\n\n const envPrefix = this.config.layer.toUpperCase();\n const natsUrl =\n this.config.natsUrl || process.env[`${envPrefix}_NATS_URL`] || process.env['NATS_URL'] || 'nats://localhost:4222';\n\n const publisherConfig: PublisherConfig = {\n type: 'nats',\n url: natsUrl,\n user: this.config.natsUser || process.env['NATS_USER'],\n password: this.config.natsPassword || process.env['NATS_PASSWORD'],\n token: this.config.natsToken || process.env['NATS_TOKEN'],\n creds: this.config.natsCreds || process.env['NATS_CREDS'],\n credsFile: this.config.natsCredsFile || process.env['NATS_CREDS_FILE'],\n name: `stream-manager-${this.config.layer}`,\n maxReconnectAttempts: 10,\n reconnectTimeWait: 2000,\n };\n\n this.publisher = EventQueueFactory.createPublisher(publisherConfig);\n await this.publisher.connect();\n this.isConnected = true;\n\n logger.info('[StreamManager] Connected to NATS', {\n layer: this.config.layer,\n url: natsUrl,\n });\n\n // Auto-create default streams if configured\n if (this.config.autoCreateDefaultStreams) {\n await this.ensureDefaultStreams();\n }\n }\n\n /**\n * Disconnect from NATS\n */\n async disconnect(): Promise<void> {\n if (this.publisher) {\n await this.publisher.disconnect();\n this.publisher = null;\n this.isConnected = false;\n\n logger.info('[StreamManager] Disconnected from NATS', {\n layer: this.config.layer,\n });\n }\n }\n\n /**\n * Check if connected\n */\n getIsConnected(): boolean {\n return this.isConnected && (this.publisher?.isConnected() ?? false);\n }\n\n /**\n * Ensure default streams for the layer exist\n */\n async ensureDefaultStreams(): Promise<StreamCreationResult[]> {\n const defaultStreams = DEFAULT_LAYER_STREAMS[this.config.layer];\n const results: StreamCreationResult[] = [];\n\n for (const streamDef of defaultStreams) {\n const result = await this.ensureStream({\n name: streamDef.name,\n subjects: streamDef.subjects,\n description: streamDef.description,\n });\n results.push(result);\n }\n\n return results;\n }\n\n /**\n * Ensure a stream exists with the given configuration\n */\n async ensureStream(\n streamConfig: Partial<StreamConfig> & { name: string; subjects: string[] }\n ): Promise<StreamCreationResult> {\n if (!this.publisher) {\n throw new Error('[StreamManager] Not connected to NATS');\n }\n\n const fullConfig: StreamConfig = {\n name: streamConfig.name,\n subjects: streamConfig.subjects,\n retention: streamConfig.retention || this.config.defaultRetention,\n storage: streamConfig.storage || this.config.defaultStorage,\n maxAge: streamConfig.maxAge || this.config.defaultMaxAge,\n maxBytes: streamConfig.maxBytes || this.config.defaultMaxBytes,\n duplicateWindow: streamConfig.duplicateWindow || this.config.defaultDuplicateWindow,\n maxConsumers: streamConfig.maxConsumers,\n maxMsgs: streamConfig.maxMsgs,\n description: streamConfig.description,\n };\n\n try {\n await this.publisher.ensureStream(fullConfig);\n\n logger.info('[StreamManager] Stream ensured', {\n name: fullConfig.name,\n subjects: fullConfig.subjects,\n });\n\n return {\n name: fullConfig.name,\n created: true,\n existed: false,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n // Check if error is because stream already exists\n if (errorMessage.includes('already exists') || errorMessage.includes('stream not found')) {\n return {\n name: fullConfig.name,\n created: false,\n existed: true,\n };\n }\n\n logger.error('[StreamManager] Failed to ensure stream', {\n name: fullConfig.name,\n error: errorMessage,\n });\n\n return {\n name: fullConfig.name,\n created: false,\n existed: false,\n error: errorMessage,\n };\n }\n }\n\n /**\n * Ensure multiple streams exist\n */\n async ensureStreams(\n streams: Array<Partial<StreamConfig> & { name: string; subjects: string[] }>\n ): Promise<StreamCreationResult[]> {\n const results: StreamCreationResult[] = [];\n\n for (const stream of streams) {\n const result = await this.ensureStream(stream);\n results.push(result);\n }\n\n return results;\n }\n\n /**\n * Get default streams configuration for a layer\n */\n static getDefaultStreamsForLayer(\n layer: ServiceLayer\n ): Array<{ name: string; subjects: string[]; description?: string }> {\n return DEFAULT_LAYER_STREAMS[layer];\n }\n\n /**\n * Create stream manager from environment variables\n */\n static fromEnv(): StreamManager {\n const layer = (process.env['SERVICE_LAYER'] as ServiceLayer) || 'wspace';\n\n if (layer !== 'wspace' && layer !== 'global') {\n throw new Error(`[StreamManager] Invalid SERVICE_LAYER: ${layer}. Expected 'wspace' or 'global'`);\n }\n\n return new StreamManager({\n layer,\n natsUrl: process.env['NATS_URL'],\n natsUser: process.env['NATS_USER'],\n natsPassword: process.env['NATS_PASSWORD'],\n natsToken: process.env['NATS_TOKEN'],\n natsCreds: process.env['NATS_CREDS'],\n natsCredsFile: process.env['NATS_CREDS_FILE'],\n autoCreateDefaultStreams: process.env['STREAM_MANAGER_AUTO_CREATE'] !== 'false',\n });\n }\n}\n\n/**\n * Create stream manager instance\n */\nexport function createStreamManager(config: StreamManagerConfig): StreamManager {\n return new StreamManager(config);\n}\n\n/**\n * Create stream manager from environment and connect\n */\nexport async function createAndConnectStreamManager(): Promise<StreamManager> {\n const manager = StreamManager.fromEnv();\n await manager.connect();\n return manager;\n}\n"]}
@@ -521,8 +521,12 @@ var ValkeyGlideProvider = class {
521
521
  let port = this.config.port || 6379;
522
522
  let password = this.config.password;
523
523
  let username = this.config.username;
524
+ let useTLSFromUrl;
525
+ let databaseFromUrl;
524
526
  if (this.config.url) {
525
- const url = new URL(this.config.url.replace("valkey://", "redis://"));
527
+ const rawUrl = this.config.url;
528
+ useTLSFromUrl = /^(rediss|valkeys):\/\//i.test(rawUrl);
529
+ const url = new URL(rawUrl.replace(/^valkey:\/\//i, "redis://").replace(/^valkeys:\/\//i, "rediss://"));
526
530
  host = url.hostname;
527
531
  port = parseInt(url.port || "6379", 10);
528
532
  if (!password && url.password) {
@@ -539,6 +543,10 @@ var ValkeyGlideProvider = class {
539
543
  username = url.username;
540
544
  }
541
545
  }
546
+ const dbMatch = url.pathname.match(/^\/(\d+)$/);
547
+ if (dbMatch && dbMatch[1]) {
548
+ databaseFromUrl = parseInt(dbMatch[1], 10);
549
+ }
542
550
  }
543
551
  const addresses = this.config.clusterNodes?.length ? this.config.clusterNodes : [
544
552
  {
@@ -548,13 +556,13 @@ var ValkeyGlideProvider = class {
548
556
  ];
549
557
  const baseClientConfig = {
550
558
  addresses,
551
- useTLS: this.config.useTLS,
559
+ useTLS: this.config.useTLS ?? useTLSFromUrl,
552
560
  credentials: password || username ? {
553
561
  password,
554
562
  username
555
563
  } : void 0,
556
564
  clientName: this.config.name || `valkey-glide-${this.namespace}`,
557
- databaseId: this.config.db,
565
+ databaseId: this.config.db ?? databaseFromUrl,
558
566
  connectionTimeout: this.config.connectionTimeout,
559
567
  readFrom: "primary"
560
568
  };
@@ -1401,5 +1409,5 @@ async function closeAllCaches() {
1401
1409
  __name(closeAllCaches, "closeAllCaches");
1402
1410
 
1403
1411
  export { CacheFactory, CacheProviderType, MemoryCacheProvider, ValkeyGlideProvider, cache_exports, closeAllCaches, createCache, getCache, getValkeyClient };
1404
- //# sourceMappingURL=chunk-4XGGWW36.js.map
1405
- //# sourceMappingURL=chunk-4XGGWW36.js.map
1412
+ //# sourceMappingURL=chunk-6PKIKOTT.js.map
1413
+ //# sourceMappingURL=chunk-6PKIKOTT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cache/index.ts","../src/cache/implementations/memory/MemoryCacheProvider.ts","../src/cache/implementations/valkey/ValkeyGlideProvider.ts","../src/cache/factory/CacheFactory.ts","../src/cache/types/config.ts"],"names":["MemoryCacheProvider","cache","Map","namespace","defaultTTL","maxSize","enableLogging","connected","stats","hits","misses","sets","deletes","evictions","config","startCleanupInterval","connect","Promise","resolve","logger","info","disconnect","clear","isConnected","healthCheck","status","timestamp","Date","toISOString","latencyMs","details","provider","cacheSize","size","getStatistics","totalOperations","hitRate","memoryUsed","keyCount","buildKey","key","isExpired","expiresAt","now","evictIfNeeded","firstKey","keys","next","value","delete","cleanup","cleaned","entries","debug","setInterval","get","_options","cacheKey","cached","set","entry","data","options","ttlSeconds","ttl","metadata","deleted","has","remaining","Math","floor","expire","mget","result","mset","mdel","matchPattern","pattern","includes","parts","split","position","i","length","part","index","indexOf","lastPart","endsWith","clearPattern","searchPattern","matchedKeys","prefix","push","replace","limitedKeys","limit","slice","nextCursor","totalCount","cleared","Array","from","startsWith","increment","amount","current","newValue","decrement","getOrSet","fetcher","invalidateTags","tags","totalDeleted","tag","ValkeyGlideProvider","client","clusterScanCursor","clientIsCluster","errors","process","env","serverReportsCluster","test","scanClusterKeys","clusterClient","cursor","batch","scan","match","count","isFinished","getKeys","Error","glideModule","GlideClient","default","GlideClusterClient","ClusterScanCursor","host","port","password","username","useTLSFromUrl","databaseFromUrl","url","rawUrl","URL","hostname","parseInt","decodeURIComponent","dbMatch","pathname","addresses","clusterNodes","baseClientConfig","useTLS","credentials","undefined","clientName","name","databaseId","db","connectionTimeout","readFrom","cluster","createClient","periodicChecks","duration_in_sec","advancedConfiguration","refreshTopologyFromInitialNodes","standaloneClient","close","error","startTime","ping","message","memoryRegex","memoryMatch","exec","dbsize","JSON","parse","stringify","expiry","type","del","exists","cacheKeys","map","values","requested","found","keyValuePairs","Object","cleanKeys","incrBy","decrBy","CacheFactory","instances","parseBoolean","normalized","trim","toLowerCase","parseClusterNodes","nodes","node","filter","Boolean","rawPort","Number","isFinite","resolvePort","layerPort","genericPort","defaultPort","createCache","keyPrefix","maxReconnectAttempts","reconnectTimeWait","tls","enabled","createCacheFromEnv","envType","getInstance","instanceKey","closeInstance","closeAll","promises","all","createCacheForLayer","layer","serviceName","envPrefix","toUpperCase","defaults","DEFAULT_LAYER_RESOURCES","valkeyUrl","resolvedPort","getInstanceForLayer","CacheProviderType","getCache","getValkeyClient","valkeyConfig","VALKEY","closeAllCaches"],"mappings":"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","file":"chunk-6PKIKOTT.js","sourcesContent":["/**\n * Cache - Public API\n *\n * This module provides a complete abstraction over caching systems (Valkey, Memory, etc.)\n * allowing the application to cache data without direct dependency on any specific caching implementation.\n *\n * Usage:\n *\n * // Create cache from environment variables (workspaces-backend)\n * import { createCache } from '@burdenoff/be-sdk/cache';\n *\n * const cache = createCache('my-module');\n * await cache.connect();\n *\n * // Set value\n * await cache.set('user:123', { name: 'John', email: 'john@example.com' }, { ttl: 3600 });\n *\n * // Get value\n * const user = await cache.get<User>('user:123');\n *\n * // Delete value\n * await cache.delete('user:123');\n *\n * // Disconnect when done\n * await cache.disconnect();\n */\n// Import factory for use in convenience functions\nimport { CacheFactory } from './factory/CacheFactory.js';\nimport type { ICacheProvider } from './interfaces/ICacheProvider.js';\n// Re-export for convenience\nimport type { CacheConfig, ValkeyCacheConfig } from './types/config.js';\nimport { CacheProviderType } from './types/config.js';\n\n// Export interfaces\nexport type { ICache } from './interfaces/ICache.js';\nexport type { ICacheProvider } from './interfaces/ICacheProvider.js';\n\n// Export types\nexport type { CacheEntry, CacheOptions, BatchCacheOptions, PatternOptions, PatternResult } from './types/cache.js';\n\nexport type {\n BaseCacheConfig,\n ValkeyCacheConfig,\n MemoryCacheConfig,\n MemcachedCacheConfig,\n CacheConfig,\n CacheHealthCheckResult,\n CacheStatistics,\n CacheProviderTypeLiteral,\n} from './types/config.js';\n\nexport { CacheProviderType } from './types/config.js';\n\n// Export factory\nexport { CacheFactory } from './factory/CacheFactory.js';\n\n// Export implementations (in case direct access is needed)\nexport { ValkeyGlideProvider } from './implementations/valkey/ValkeyGlideProvider.js';\nexport type { ValkeyGlideConfig } from './implementations/valkey/ValkeyGlideProvider.js';\nexport { MemoryCacheProvider } from './implementations/memory/MemoryCacheProvider.js';\n\n/**\n * Create a cache instance from environment configuration\n * Convenience function for creating a cache without manual config\n *\n * @param namespace - Cache namespace (e.g., 'analytics', 'files', 'users')\n * @returns Cache provider instance\n */\nexport function createCache(namespace: string = 'default'): ICacheProvider {\n return CacheFactory.createCacheFromEnv(namespace);\n}\n\n/**\n * Get or create a singleton cache instance\n * Convenience function for getting/creating a singleton cache\n *\n * @param namespace - Cache namespace\n * @param config - Optional cache configuration\n * @returns Singleton cache provider instance\n */\nexport function getCache(namespace: string = 'default', config?: CacheConfig): ICacheProvider {\n return CacheFactory.getInstance(namespace, config);\n}\n\n/**\n * Valkey Glide client interface for raw Valkey operations\n */\nexport interface ValkeyGlideClient {\n get(key: string): Promise<string | null>;\n set(key: string, value: string, options?: { EX?: number }): Promise<string | null>;\n del(keys: string[]): Promise<number>;\n exists(keys: string[]): Promise<number>;\n ttl(key: string): Promise<number>;\n expire(key: string, seconds: number): Promise<boolean>;\n mget(keys: string[]): Promise<(string | null)[]>;\n mset(keyValuePairs: Record<string, string>): Promise<string | null>;\n keys(pattern: string): Promise<string[]>;\n incrBy(key: string, amount: number): Promise<number>;\n decrBy(key: string, amount: number): Promise<number>;\n ping(): Promise<string>;\n info(section?: string): Promise<string>;\n dbsize(): Promise<number>;\n close(): Promise<void>;\n // Additional list operations\n lpush(key: string, ...values: string[]): Promise<number>;\n rpush(key: string, ...values: string[]): Promise<number>;\n lpop(key: string): Promise<string | null>;\n rpop(key: string): Promise<string | null>;\n lrange(key: string, start: number, stop: number): Promise<string[]>;\n llen(key: string): Promise<number>;\n // Additional set operations\n sadd(key: string, ...members: string[]): Promise<number>;\n srem(key: string, ...members: string[]): Promise<number>;\n smembers(key: string): Promise<string[]>;\n sismember(key: string, member: string): Promise<boolean>;\n // Additional hash operations\n hset(key: string, field: string, value: string): Promise<number>;\n hget(key: string, field: string): Promise<string | null>;\n hdel(key: string, ...fields: string[]): Promise<number>;\n hgetall(key: string): Promise<Record<string, string>>;\n // Pub/Sub operations\n publish(channel: string, message: string): Promise<number>;\n}\n\n/**\n * Get direct access to Valkey client via @valkey/valkey-glide\n * Useful for cases where you need raw Valkey operations beyond caching\n *\n * @param config - Optional Valkey configuration. If not provided, uses environment variables\n * @returns ValkeyGlideClient instance from @valkey/valkey-glide\n *\n * @example\n * ```typescript\n * import { getValkeyClient } from '@burdenoff/be-sdk';\n *\n * const valkey = await getValkeyClient();\n * await valkey.lpush('mylist', 'value');\n * ```\n */\nexport async function getValkeyClient(config?: ValkeyCacheConfig): Promise<ValkeyGlideClient> {\n const glideModule = await import('@valkey/valkey-glide');\n const GlideClient = glideModule.GlideClient || glideModule.default;\n\n const valkeyConfig: ValkeyCacheConfig = config || {\n type: CacheProviderType.VALKEY,\n url: process.env['VALKEY_URL'],\n host: process.env['VALKEY_HOST'] || 'localhost',\n port: process.env['VALKEY_PORT'] ? parseInt(process.env['VALKEY_PORT'], 10) : 6379,\n password: process.env['VALKEY_PASSWORD'],\n db: process.env['VALKEY_DB'] ? parseInt(process.env['VALKEY_DB'], 10) : 0,\n username: process.env['VALKEY_USERNAME'],\n };\n\n // Parse URL if provided\n let host = valkeyConfig.host || 'localhost';\n let port = valkeyConfig.port || 6379;\n\n if (valkeyConfig.url) {\n const url = new URL(valkeyConfig.url.replace('valkey://', 'redis://'));\n host = url.hostname;\n port = parseInt(url.port || '6379', 10);\n }\n\n // Create Glide client\n const createClient = GlideClient as {\n createClient: (config: {\n addresses: Array<{ host: string; port: number }>;\n useTLS?: boolean;\n credentials?: { password?: string; username?: string };\n clientName?: string;\n readFrom?: string;\n }) => Promise<ValkeyGlideClient>;\n };\n\n return createClient.createClient({\n addresses: [{ host, port }],\n useTLS: valkeyConfig.useTLS,\n credentials: valkeyConfig.password\n ? {\n password: valkeyConfig.password,\n username: valkeyConfig.username,\n }\n : undefined,\n clientName: valkeyConfig.name || 'valkey-glide-client',\n readFrom: 'primary',\n });\n}\n\n/**\n * Close all cache connections\n * Call this during application shutdown\n */\nexport async function closeAllCaches(): Promise<void> {\n await CacheFactory.closeAll();\n}\n","/**\n * Memory Cache Provider\n * In-memory cache implementation (for testing and fallback)\n */\nimport { logger } from '../../../logger/index.js';\n\nimport type { ICacheProvider } from '../../interfaces/ICacheProvider.js';\nimport type {\n BatchCacheOptions,\n CacheEntry,\n CacheOptions,\n CacheStatistics,\n CacheHealthCheckResult,\n MemoryCacheConfig,\n PatternOptions,\n PatternResult,\n} from '../../types/index.js';\n\n/**\n * Memory cache provider implementation (LRU-based)\n */\nexport class MemoryCacheProvider implements ICacheProvider {\n private cache: Map<string, { entry: CacheEntry<unknown>; expiresAt: number }> = new Map();\n private readonly namespace: string;\n private readonly defaultTTL: number;\n private readonly maxSize: number;\n private readonly enableLogging: boolean;\n private connected: boolean = false;\n\n // Statistics\n private stats = {\n hits: 0,\n misses: 0,\n sets: 0,\n deletes: 0,\n evictions: 0,\n };\n\n constructor(config: MemoryCacheConfig, namespace: string = 'default') {\n this.namespace = namespace;\n this.defaultTTL = config.defaultTTL || 300; // 5 minutes default\n this.maxSize = config.maxSize || 1000; // Max 1000 entries by default\n this.enableLogging = config.enableLogging ?? false;\n\n // Start cleanup interval for expired entries\n this.startCleanupInterval();\n }\n\n /**\n * Connect (no-op for memory cache)\n */\n async connect(): Promise<void> {\n await Promise.resolve();\n this.connected = true;\n if (this.enableLogging) {\n logger.info(`[MemoryCacheProvider:${this.namespace}] Connected (in-memory)`);\n }\n }\n\n /**\n * Disconnect (cleanup)\n */\n async disconnect(): Promise<void> {\n await Promise.resolve();\n this.connected = false;\n this.cache.clear();\n if (this.enableLogging) {\n logger.info(`[MemoryCacheProvider:${this.namespace}] Disconnected`);\n }\n }\n\n /**\n * Check if connected\n */\n isConnected(): boolean {\n return this.connected;\n }\n\n /**\n * Health check\n */\n async healthCheck(): Promise<CacheHealthCheckResult> {\n await Promise.resolve();\n return {\n status: 'healthy',\n timestamp: new Date().toISOString(),\n connected: this.connected,\n latencyMs: 0,\n details: {\n provider: 'memory',\n cacheSize: this.cache.size,\n maxSize: this.maxSize,\n },\n };\n }\n\n /**\n * Get statistics\n */\n async getStatistics(): Promise<CacheStatistics> {\n await Promise.resolve();\n const totalOperations = this.stats.hits + this.stats.misses;\n const hitRate = totalOperations > 0 ? this.stats.hits / totalOperations : 0;\n\n // Calculate approximate memory usage (rough estimate)\n const memoryUsed = this.cache.size * 500; // Assume ~500 bytes per entry\n\n return {\n hits: this.stats.hits,\n misses: this.stats.misses,\n hitRate,\n keyCount: this.cache.size,\n memoryUsed,\n totalOperations,\n details: {\n sets: this.stats.sets,\n deletes: this.stats.deletes,\n evictions: this.stats.evictions,\n maxSize: this.maxSize,\n },\n };\n }\n\n /**\n * Build cache key with namespace\n */\n private buildKey(key: string): string {\n return `${this.namespace}:${key}`;\n }\n\n /**\n * Check if entry is expired\n */\n private isExpired(expiresAt: number): boolean {\n return Date.now() > expiresAt;\n }\n\n /**\n * Evict LRU entry if cache is full\n */\n private evictIfNeeded(): void {\n if (this.cache.size >= this.maxSize) {\n // Evict the first (oldest) entry (simple LRU)\n const firstKey = this.cache.keys().next().value;\n if (firstKey) {\n this.cache.delete(firstKey);\n this.stats.evictions++;\n }\n }\n }\n\n /**\n * Cleanup expired entries\n */\n private cleanup(): void {\n let cleaned = 0;\n\n for (const [key, value] of this.cache.entries()) {\n if (this.isExpired(value.expiresAt)) {\n this.cache.delete(key);\n cleaned++;\n }\n }\n\n if (cleaned > 0 && this.enableLogging) {\n logger.debug(`[MemoryCacheProvider:${this.namespace}] Cleaned up ${cleaned} expired entries`);\n }\n }\n\n /**\n * Start cleanup interval\n */\n private startCleanupInterval(): void {\n setInterval(() => this.cleanup(), 60000); // Cleanup every minute\n }\n\n /**\n * Get value from cache\n */\n async get<T>(key: string, _options?: CacheOptions): Promise<T | null> {\n await Promise.resolve();\n const cacheKey = this.buildKey(key);\n const cached = this.cache.get(cacheKey);\n\n if (!cached) {\n this.stats.misses++;\n if (this.enableLogging) {\n logger.debug(`[MemoryCacheProvider:${this.namespace}] Cache miss`, { key });\n }\n return null;\n }\n\n // Check if expired\n if (this.isExpired(cached.expiresAt)) {\n this.cache.delete(cacheKey);\n this.stats.misses++;\n if (this.enableLogging) {\n logger.debug(`[MemoryCacheProvider:${this.namespace}] Cache miss (expired)`, { key });\n }\n return null;\n }\n\n this.stats.hits++;\n if (this.enableLogging) {\n logger.debug(`[MemoryCacheProvider:${this.namespace}] Cache hit`, { key });\n }\n\n // Move to end (LRU)\n this.cache.delete(cacheKey);\n this.cache.set(cacheKey, cached);\n\n return cached.entry.data as T;\n }\n\n /**\n * Set value in cache\n */\n async set<T>(key: string, value: T, options?: CacheOptions): Promise<boolean> {\n await Promise.resolve();\n const cacheKey = this.buildKey(key);\n const ttlSeconds = options?.ttl || this.defaultTTL;\n\n this.evictIfNeeded();\n\n const entry: CacheEntry<T> = {\n data: value,\n timestamp: Date.now(),\n ttl: ttlSeconds,\n metadata: options?.metadata,\n };\n\n this.cache.set(cacheKey, {\n entry: entry as CacheEntry<unknown>,\n expiresAt: Date.now() + ttlSeconds * 1000,\n });\n\n this.stats.sets++;\n if (this.enableLogging) {\n logger.debug(`[MemoryCacheProvider:${this.namespace}] Cache set`, {\n key,\n ttl: ttlSeconds,\n });\n }\n\n return true;\n }\n\n /**\n * Delete value from cache\n */\n async delete(key: string): Promise<boolean> {\n await Promise.resolve();\n const cacheKey = this.buildKey(key);\n const deleted = this.cache.delete(cacheKey);\n\n if (deleted) {\n this.stats.deletes++;\n if (this.enableLogging) {\n logger.debug(`[MemoryCacheProvider:${this.namespace}] Cache delete`, { key });\n }\n }\n\n return deleted;\n }\n\n /**\n * Check if key exists\n */\n async has(key: string): Promise<boolean> {\n await Promise.resolve();\n const cacheKey = this.buildKey(key);\n const cached = this.cache.get(cacheKey);\n\n if (!cached) {\n return false;\n }\n\n // Check if expired\n if (this.isExpired(cached.expiresAt)) {\n this.cache.delete(cacheKey);\n return false;\n }\n\n return true;\n }\n\n /**\n * Get TTL for key\n */\n async ttl(key: string): Promise<number> {\n await Promise.resolve();\n const cacheKey = this.buildKey(key);\n const cached = this.cache.get(cacheKey);\n\n if (!cached) {\n return -2; // Key doesn't exist\n }\n\n const remaining = Math.floor((cached.expiresAt - Date.now()) / 1000);\n\n if (remaining <= 0) {\n this.cache.delete(cacheKey);\n return -2;\n }\n\n return remaining;\n }\n\n /**\n * Update TTL for key\n */\n async expire(key: string, ttl: number): Promise<boolean> {\n await Promise.resolve();\n const cacheKey = this.buildKey(key);\n const cached = this.cache.get(cacheKey);\n\n if (!cached) {\n return false;\n }\n\n cached.expiresAt = Date.now() + ttl * 1000;\n cached.entry.ttl = ttl;\n\n return true;\n }\n\n /**\n * Get multiple values (batch operation)\n */\n async mget<T>(keys: string[], _options?: BatchCacheOptions): Promise<Map<string, T>> {\n const result = new Map<string, T>();\n\n for (const key of keys) {\n const value = await this.get<T>(key);\n if (value !== null) {\n result.set(key, value);\n }\n }\n\n return result;\n }\n\n /**\n * Set multiple values (batch operation)\n */\n async mset<T>(entries: Map<string, T>, options?: BatchCacheOptions): Promise<boolean> {\n for (const [key, value] of entries) {\n await this.set(key, value, options);\n }\n\n return true;\n }\n\n /**\n * Delete multiple keys (batch operation)\n */\n async mdel(keys: string[]): Promise<number> {\n let deleted = 0;\n\n for (const key of keys) {\n const result = await this.delete(key);\n if (result) {\n deleted++;\n }\n }\n\n return deleted;\n }\n\n /**\n * Match key against pattern (supports * wildcard)\n */\n private matchPattern(key: string, pattern: string): boolean {\n // Simple wildcard matching without regex\n if (!pattern.includes('*')) {\n return key === pattern;\n }\n\n const parts = pattern.split('*');\n let position = 0;\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (!part || part === '') continue;\n\n const index = key.indexOf(part, position);\n if (index === -1) return false;\n if (i === 0 && index !== 0) return false;\n position = index + part.length;\n }\n\n const lastPart = parts[parts.length - 1];\n return !lastPart || lastPart === '' || key.endsWith(lastPart);\n }\n\n /**\n * Clear keys by pattern\n */\n async clearPattern(pattern: string): Promise<number> {\n await Promise.resolve();\n const searchPattern = this.buildKey(pattern);\n let deleted = 0;\n\n for (const key of this.cache.keys()) {\n if (this.matchPattern(key, searchPattern)) {\n this.cache.delete(key);\n deleted++;\n }\n }\n\n if (this.enableLogging) {\n logger.debug(`[MemoryCacheProvider:${this.namespace}] Pattern cleared`, {\n pattern,\n deleted,\n });\n }\n\n return deleted;\n }\n\n /**\n * Get keys by pattern\n */\n async keys(options: PatternOptions): Promise<PatternResult> {\n await Promise.resolve();\n const searchPattern = this.buildKey(options.pattern);\n const matchedKeys: string[] = [];\n const prefix = `${this.namespace}:`;\n\n for (const key of this.cache.keys()) {\n if (this.matchPattern(key, searchPattern)) {\n matchedKeys.push(key.replace(prefix, ''));\n }\n }\n\n // Apply limit if specified\n const limitedKeys = options.limit ? matchedKeys.slice(0, options.limit) : matchedKeys;\n\n return {\n keys: limitedKeys,\n nextCursor: null,\n totalCount: matchedKeys.length,\n };\n }\n\n /**\n * Clear all keys in namespace\n */\n async clear(): Promise<boolean> {\n await Promise.resolve();\n const prefix = `${this.namespace}:`;\n let cleared = 0;\n\n for (const key of Array.from(this.cache.keys())) {\n if (key.startsWith(prefix)) {\n this.cache.delete(key);\n cleared++;\n }\n }\n\n if (this.enableLogging) {\n logger.info(`[MemoryCacheProvider:${this.namespace}] Cleared ${cleared} keys`);\n }\n\n return true;\n }\n\n /**\n * Increment numeric value\n */\n async increment(key: string, amount: number = 1): Promise<number> {\n const current = await this.get<number>(key);\n const newValue = (current || 0) + amount;\n await this.set(key, newValue);\n return newValue;\n }\n\n /**\n * Decrement numeric value\n */\n async decrement(key: string, amount: number = 1): Promise<number> {\n const current = await this.get<number>(key);\n const newValue = (current || 0) - amount;\n await this.set(key, newValue);\n return newValue;\n }\n\n /**\n * Get or set value\n */\n async getOrSet<T>(key: string, fetcher: () => Promise<T>, options?: CacheOptions): Promise<T> {\n const cached = await this.get<T>(key, options);\n if (cached !== null) {\n return cached;\n }\n\n const value = await fetcher();\n await this.set(key, value, options);\n\n return value;\n }\n\n /**\n * Invalidate by tags\n */\n async invalidateTags(tags: string[]): Promise<number> {\n let totalDeleted = 0;\n\n for (const tag of tags) {\n const pattern = `*:tag:${tag}:*`;\n const deleted = await this.clearPattern(pattern);\n totalDeleted += deleted;\n }\n\n return totalDeleted;\n }\n}\n","/**\n * Valkey Glide Cache Provider\n *\n * Implements ICacheProvider using @valkey/valkey-glide client.\n * Provides a modern, high-performance Valkey/Redis client implementation.\n *\n * @module cache/implementations/valkey/ValkeyGlideProvider\n * @category Cache\n *\n * @example\n * ```typescript\n * import { ValkeyGlideProvider } from '@burdenoff/be-sdk/cache';\n *\n * const cache = new ValkeyGlideProvider({\n * type: 'valkey-glide',\n * url: 'valkey://localhost:6379',\n * defaultTTL: 300,\n * }, 'my-namespace');\n *\n * await cache.connect();\n * await cache.set('key', 'value', { ttl: 60 });\n * const value = await cache.get('key');\n * ```\n */\n\nimport { logger } from '../../../logger/index.js';\nimport type { ICacheProvider } from '../../interfaces/ICacheProvider.js';\nimport type {\n BatchCacheOptions,\n CacheEntry,\n CacheOptions,\n CacheStatistics,\n CacheHealthCheckResult,\n PatternOptions,\n PatternResult,\n} from '../../types/index.js';\n\n/**\n * Valkey Glide configuration\n */\nexport interface ValkeyGlideConfig {\n /**\n * Cache provider type\n */\n type: 'valkey-glide';\n\n /**\n * Valkey server URL\n * @example 'valkey://localhost:6379' or 'redis://localhost:6379'\n */\n url?: string;\n\n /**\n * Valkey host\n * @default 'localhost'\n */\n host?: string;\n\n /**\n * Valkey port\n * @default 6379\n */\n port?: number;\n\n /**\n * Password for authentication\n */\n password?: string;\n\n /**\n * Username for authentication\n */\n username?: string;\n\n /**\n * Database number\n * @default 0\n */\n db?: number;\n\n /**\n * Key prefix for all keys\n * @default 'cache'\n */\n keyPrefix?: string;\n\n /**\n * Default TTL in seconds\n * @default 300 (5 minutes)\n */\n defaultTTL?: number;\n\n /**\n * Enable logging\n * @default NODE_ENV === 'development'\n */\n enableLogging?: boolean;\n\n /**\n * Connection timeout in milliseconds\n * @default 10000\n */\n connectionTimeout?: number;\n\n /**\n * Max reconnect attempts\n * @default -1 (infinite)\n */\n maxReconnectAttempts?: number;\n\n /**\n * Reconnect time wait in milliseconds\n * @default 2000\n */\n reconnectTimeWait?: number;\n\n /**\n * Client name for identification\n */\n name?: string;\n\n /**\n * Use TLS for connection\n * @default false\n */\n useTLS?: boolean;\n\n /**\n * Force Valkey Cluster mode. If unset, the provider auto-detects cluster mode.\n */\n cluster?: boolean;\n\n /**\n * Seed nodes for Valkey Cluster topology discovery.\n */\n clusterNodes?: Array<{ host: string; port: number }>;\n}\n\n/**\n * Valkey Glide TimeUnit enum (mirror of @valkey/valkey-glide's TimeUnit).\n * We re-declare locally so this file has zero compile-time dependency on the\n * peer-dep types — the enum values are ABI-stable Redis expiry tokens\n * (\"EX\", \"PX\", \"EXAT\", \"PXAT\", \"KEEPTTL\") so the runtime client accepts them\n * regardless of whether the peer package is installed.\n */\nconst enum GlideTimeUnit {\n Seconds = 'EX',\n Milliseconds = 'PX',\n UnixSeconds = 'EXAT',\n UnixMilliseconds = 'PXAT',\n KeepExisting = 'KEEPTTL',\n}\n\n/**\n * Valkey Glide set()-options shape. The real client takes\n * `{ expiry: { type: TimeUnit, count: number } }` and silently ignores the\n * legacy `{ EX: number }` shape — that silent drop caused rate-limit\n * counters to persist forever (no TTL on the key). See\n * node_modules/@valkey/valkey-glide/build-ts/BaseClient.d.ts `set(...)`.\n */\ninterface GlideSetOptions {\n expiry?: 'persist' | { type: GlideTimeUnit; count: number; duration?: number };\n conditionalSet?: 'onlyIfExists' | 'onlyIfDoesNotExist' | 'onlyIfEqual';\n returnOldValue?: boolean;\n}\n\ninterface GlideAddress {\n host: string;\n port: number;\n}\n\ninterface GlideCreateClientConfig {\n addresses: GlideAddress[];\n useTLS?: boolean;\n credentials?: { password?: string; username?: string };\n clientName?: string;\n readFrom?: string;\n databaseId?: number;\n connectionTimeout?: number;\n periodicChecks?: { duration_in_sec?: number };\n advancedConfiguration?: { refreshTopologyFromInitialNodes?: boolean };\n}\n\ninterface GlideClientFactory {\n createClient(config: GlideCreateClientConfig): Promise<ValkeyGlideClient>;\n}\n\ninterface ClusterScanCursorLike {\n getCursor(): string;\n isFinished(): boolean;\n}\n\ntype ClusterScanCursorConstructor = new (newCursor?: string | undefined | null) => ClusterScanCursorLike;\n\ninterface ValkeyGlideModule {\n GlideClient?: GlideClientFactory;\n GlideClusterClient?: GlideClientFactory;\n ClusterScanCursor?: ClusterScanCursorConstructor;\n default?: GlideClientFactory;\n}\n\n/**\n * Valkey Glide client interface (minimal type definition)\n * This is a simplified interface - full types come from @valkey/valkey-glide\n */\ninterface ValkeyGlideClient {\n get(key: string): Promise<string | null>;\n set(key: string, value: string, options?: GlideSetOptions): Promise<string | null>;\n del(keys: string[]): Promise<number>;\n exists(keys: string[]): Promise<number>;\n ttl(key: string): Promise<number>;\n expire(key: string, seconds: number): Promise<boolean>;\n mget(keys: string[]): Promise<(string | null)[]>;\n mset(keyValuePairs: Record<string, string>): Promise<string | null>;\n keys?(pattern: string): Promise<string[]>;\n incrBy(key: string, amount: number): Promise<number>;\n decrBy(key: string, amount: number): Promise<number>;\n ping(): Promise<string>;\n info(section?: string): Promise<string>;\n dbsize(): Promise<number>;\n close(): Promise<void>;\n}\n\ninterface ValkeyGlideClusterClient extends ValkeyGlideClient {\n scan(\n cursor: ClusterScanCursorLike,\n options?: { match?: string; count?: number }\n ): Promise<[ClusterScanCursorLike, string[]]>;\n}\n\n/**\n * Valkey Glide cache provider implementation\n */\nexport class ValkeyGlideProvider implements ICacheProvider {\n private client: ValkeyGlideClient | null = null;\n private clusterScanCursor: ClusterScanCursorConstructor | null = null;\n private clientIsCluster = false;\n private connected = false;\n private readonly config: ValkeyGlideConfig;\n private readonly namespace: string;\n private readonly defaultTTL: number;\n private readonly enableLogging: boolean;\n\n // Statistics\n private stats = {\n hits: 0,\n misses: 0,\n sets: 0,\n deletes: 0,\n errors: 0,\n };\n\n constructor(config: ValkeyGlideConfig, namespace: string = 'default') {\n this.config = config;\n this.namespace = namespace;\n this.defaultTTL = config.defaultTTL || 300;\n this.enableLogging = config.enableLogging ?? process.env['NODE_ENV'] === 'development';\n }\n\n private async serverReportsCluster(client: ValkeyGlideClient): Promise<boolean> {\n try {\n const info = await client.info('cluster');\n return /(?:^|\\n)cluster_enabled:1(?:\\r?\\n|$)/.test(info);\n } catch {\n return false;\n }\n }\n\n private async scanClusterKeys(pattern: string): Promise<string[]> {\n if (!this.client || !this.clientIsCluster || !this.clusterScanCursor) {\n return [];\n }\n\n const clusterClient = this.client as ValkeyGlideClusterClient;\n let cursor: ClusterScanCursorLike = new this.clusterScanCursor();\n const keys: string[] = [];\n\n do {\n const [nextCursor, batch] = await clusterClient.scan(cursor, { match: pattern, count: 1000 });\n keys.push(...batch);\n cursor = nextCursor;\n } while (!cursor.isFinished());\n\n return keys;\n }\n\n private async getKeys(pattern: string): Promise<string[]> {\n if (!this.client) {\n throw new Error('Not connected');\n }\n\n if (this.clientIsCluster) {\n return this.scanClusterKeys(pattern);\n }\n\n if (!this.client.keys) {\n throw new Error('KEYS command is not available on this Valkey client');\n }\n\n return this.client.keys(pattern);\n }\n\n /**\n * Connect to Valkey server using @valkey/valkey-glide\n */\n async connect(): Promise<void> {\n if (this.connected && this.client) {\n return;\n }\n\n try {\n // Dynamically import @valkey/valkey-glide\n const glideModule = (await import('@valkey/valkey-glide')) as ValkeyGlideModule;\n const GlideClient = glideModule.GlideClient || glideModule.default;\n const GlideClusterClient = glideModule.GlideClusterClient;\n this.clusterScanCursor = glideModule.ClusterScanCursor ?? null;\n\n if (!GlideClient) {\n throw new Error('Valkey GLIDE standalone client is unavailable');\n }\n\n // Parse URL if provided\n let host = this.config.host || 'localhost';\n let port = this.config.port || 6379;\n let password = this.config.password;\n let username = this.config.username;\n // Auto-detect TLS from URL scheme. `rediss://` (Redis-over-TLS) and\n // `valkeys://` are the canonical \"TLS-required\" schemes — Azure Managed\n // Redis on port 10000 only accepts TLS, so missing this flag manifests as\n // a connect timeout (plaintext handshake on a TLS-only socket).\n let useTLSFromUrl: boolean | undefined;\n let databaseFromUrl: number | undefined;\n\n if (this.config.url) {\n const rawUrl = this.config.url;\n useTLSFromUrl = /^(rediss|valkeys):\\/\\//i.test(rawUrl);\n const url = new URL(rawUrl.replace(/^valkey:\\/\\//i, 'redis://').replace(/^valkeys:\\/\\//i, 'rediss://'));\n host = url.hostname;\n port = parseInt(url.port || '6379', 10);\n if (!password && url.password) {\n try {\n password = decodeURIComponent(url.password);\n } catch {\n password = url.password;\n }\n }\n if (!username && url.username) {\n try {\n username = decodeURIComponent(url.username);\n } catch {\n username = url.username;\n }\n }\n // Pull DB number from path (e.g. `/0`, `/1`)\n const dbMatch = url.pathname.match(/^\\/(\\d+)$/);\n if (dbMatch && dbMatch[1]) {\n databaseFromUrl = parseInt(dbMatch[1], 10);\n }\n }\n\n const addresses = this.config.clusterNodes?.length ? this.config.clusterNodes : [{ host, port }];\n const baseClientConfig: GlideCreateClientConfig = {\n addresses,\n useTLS: this.config.useTLS ?? useTLSFromUrl,\n credentials:\n password || username\n ? {\n password,\n username,\n }\n : undefined,\n clientName: this.config.name || `valkey-glide-${this.namespace}`,\n databaseId: this.config.db ?? databaseFromUrl,\n connectionTimeout: this.config.connectionTimeout,\n readFrom: 'primary',\n };\n\n if (this.config.cluster === true) {\n if (!GlideClusterClient) {\n throw new Error('Valkey GLIDE cluster client is unavailable');\n }\n this.client = await GlideClusterClient.createClient({\n ...baseClientConfig,\n periodicChecks: { duration_in_sec: 30 },\n advancedConfiguration: { refreshTopologyFromInitialNodes: true },\n });\n this.clientIsCluster = true;\n } else {\n const standaloneClient = await GlideClient.createClient(baseClientConfig);\n if (this.config.cluster !== false && (await this.serverReportsCluster(standaloneClient))) {\n if (!GlideClusterClient) {\n throw new Error('Valkey server is clustered but GLIDE cluster client is unavailable');\n }\n await standaloneClient.close();\n this.client = await GlideClusterClient.createClient({\n ...baseClientConfig,\n periodicChecks: { duration_in_sec: 30 },\n advancedConfiguration: { refreshTopologyFromInitialNodes: true },\n });\n this.clientIsCluster = true;\n } else {\n this.client = standaloneClient;\n this.clientIsCluster = false;\n }\n }\n\n this.connected = true;\n\n if (this.enableLogging) {\n logger.info(`[ValkeyGlideProvider:${this.namespace}] Connected to Valkey`, {\n host,\n port,\n cluster: this.clientIsCluster,\n });\n }\n } catch (error) {\n this.stats.errors++;\n logger.error(`[ValkeyGlideProvider:${this.namespace}] Failed to connect:`, error as Record<string, unknown>);\n throw error;\n }\n }\n\n /**\n * Disconnect from Valkey server\n */\n async disconnect(): Promise<void> {\n if (this.client) {\n await this.client.close();\n this.client = null;\n this.clientIsCluster = false;\n this.connected = false;\n\n if (this.enableLogging) {\n logger.info(`[ValkeyGlideProvider:${this.namespace}] Disconnected`);\n }\n }\n }\n\n /**\n * Check if connected\n */\n isConnected(): boolean {\n return this.connected && this.client !== null;\n }\n\n /**\n * Health check\n */\n async healthCheck(): Promise<CacheHealthCheckResult> {\n const startTime = Date.now();\n\n try {\n if (!this.client) {\n return {\n status: 'unhealthy',\n timestamp: new Date().toISOString(),\n connected: false,\n error: 'Not connected',\n };\n }\n\n const result = await this.client.ping();\n const latencyMs = Date.now() - startTime;\n\n if (result === 'PONG') {\n return {\n status: 'healthy',\n timestamp: new Date().toISOString(),\n connected: true,\n latencyMs,\n };\n }\n\n return {\n status: 'unhealthy',\n timestamp: new Date().toISOString(),\n connected: false,\n error: 'Unexpected ping response',\n };\n } catch (error) {\n return {\n status: 'unhealthy',\n timestamp: new Date().toISOString(),\n connected: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n latencyMs: Date.now() - startTime,\n };\n }\n }\n\n /**\n * Get statistics\n */\n async getStatistics(): Promise<CacheStatistics> {\n const totalOperations = this.stats.hits + this.stats.misses;\n const hitRate = totalOperations > 0 ? this.stats.hits / totalOperations : 0;\n\n try {\n if (!this.client) {\n throw new Error('Not connected');\n }\n\n const info = await this.client.info('memory');\n const memoryRegex = /used_memory:(\\d+)/;\n const memoryMatch = memoryRegex.exec(info);\n const memoryUsed = memoryMatch && memoryMatch[1] ? parseInt(memoryMatch[1], 10) : undefined;\n\n const keyCount = await this.client.dbsize();\n\n return {\n hits: this.stats.hits,\n misses: this.stats.misses,\n hitRate,\n keyCount,\n memoryUsed,\n totalOperations,\n details: {\n sets: this.stats.sets,\n deletes: this.stats.deletes,\n errors: this.stats.errors,\n },\n };\n } catch (error) {\n logger.error(\n `[ValkeyGlideProvider:${this.namespace}] Failed to get statistics:`,\n error as Record<string, unknown>\n );\n return {\n hits: this.stats.hits,\n misses: this.stats.misses,\n hitRate,\n totalOperations,\n details: {\n sets: this.stats.sets,\n deletes: this.stats.deletes,\n errors: this.stats.errors,\n },\n };\n }\n }\n\n /**\n * Build cache key with namespace\n */\n private buildKey(key: string): string {\n return `${this.namespace}:${key}`;\n }\n\n /**\n * Get value from cache\n */\n async get<T>(key: string, _options?: CacheOptions): Promise<T | null> {\n try {\n if (!this.client) {\n throw new Error('Not connected');\n }\n\n const cacheKey = this.buildKey(key);\n const value = await this.client.get(cacheKey);\n\n if (value === null) {\n this.stats.misses++;\n if (this.enableLogging) {\n logger.debug(`[ValkeyGlideProvider:${this.namespace}] Cache miss`, { key });\n }\n return null;\n }\n\n this.stats.hits++;\n if (this.enableLogging) {\n logger.debug(`[ValkeyGlideProvider:${this.namespace}] Cache hit`, { key });\n }\n\n const entry: CacheEntry<T> = JSON.parse(value);\n return entry.data;\n } catch (error) {\n this.stats.errors++;\n logger.error(\n `[ValkeyGlideProvider:${this.namespace}] Error getting cache key:`,\n error as Record<string, unknown>\n );\n return null;\n }\n }\n\n /**\n * Set value in cache\n */\n async set<T>(key: string, value: T, options?: CacheOptions): Promise<boolean> {\n try {\n if (!this.client) {\n throw new Error('Not connected');\n }\n\n const cacheKey = this.buildKey(key);\n const ttlSeconds = options?.ttl || this.defaultTTL;\n\n const entry: CacheEntry<T> = {\n data: value,\n timestamp: Date.now(),\n ttl: ttlSeconds,\n metadata: options?.metadata,\n };\n\n // Valkey Glide expects `{ expiry: { type: TimeUnit.Seconds, count } }`\n // and silently ignores the legacy `{ EX }` shape — passing EX meant\n // keys were written with no TTL, which wedged rate-limit counters\n // (e.g. APP_TOKEN_GENERATION bucket filling up permanently).\n await this.client.set(cacheKey, JSON.stringify(entry), {\n expiry: { type: GlideTimeUnit.Seconds, count: ttlSeconds },\n });\n\n this.stats.sets++;\n if (this.enableLogging) {\n logger.debug(`[ValkeyGlideProvider:${this.namespace}] Cache set`, {\n key,\n ttl: ttlSeconds,\n });\n }\n\n return true;\n } catch (error) {\n this.stats.errors++;\n logger.error(\n `[ValkeyGlideProvider:${this.namespace}] Error setting cache key:`,\n error as Record<string, unknown>\n );\n return false;\n }\n }\n\n /**\n * Delete value from cache\n */\n async delete(key: string): Promise<boolean> {\n try {\n if (!this.client) {\n throw new Error('Not connected');\n }\n\n const cacheKey = this.buildKey(key);\n const result = await this.client.del([cacheKey]);\n\n this.stats.deletes++;\n if (this.enableLogging) {\n logger.debug(`[ValkeyGlideProvider:${this.namespace}] Cache delete`, {\n key,\n deleted: result > 0,\n });\n }\n\n return result > 0;\n } catch (error) {\n this.stats.errors++;\n logger.error(\n `[ValkeyGlideProvider:${this.namespace}] Error deleting cache key:`,\n error as Record<string, unknown>\n );\n return false;\n }\n }\n\n /**\n * Check if key exists\n */\n async has(key: string): Promise<boolean> {\n try {\n if (!this.client) {\n throw new Error('Not connected');\n }\n\n const cacheKey = this.buildKey(key);\n const exists = await this.client.exists([cacheKey]);\n return exists === 1;\n } catch (error) {\n this.stats.errors++;\n logger.error(\n `[ValkeyGlideProvider:${this.namespace}] Error checking cache key:`,\n error as Record<string, unknown>\n );\n return false;\n }\n }\n\n /**\n * Get TTL for key\n */\n async ttl(key: string): Promise<number> {\n try {\n if (!this.client) {\n throw new Error('Not connected');\n }\n\n const cacheKey = this.buildKey(key);\n return await this.client.ttl(cacheKey);\n } catch (error) {\n this.stats.errors++;\n logger.error(`[ValkeyGlideProvider:${this.namespace}] Error getting TTL:`, error as Record<string, unknown>);\n return -2;\n }\n }\n\n /**\n * Update TTL for key\n */\n async expire(key: string, ttl: number): Promise<boolean> {\n try {\n if (!this.client) {\n throw new Error('Not connected');\n }\n\n const cacheKey = this.buildKey(key);\n return await this.client.expire(cacheKey, ttl);\n } catch (error) {\n this.stats.errors++;\n logger.error(\n `[ValkeyGlideProvider:${this.namespace}] Error setting expiration:`,\n error as Record<string, unknown>\n );\n return false;\n }\n }\n\n /**\n * Get multiple values (batch operation)\n */\n async mget<T>(keys: string[], _options?: BatchCacheOptions): Promise<Map<string, T>> {\n const result = new Map<string, T>();\n\n if (keys.length === 0) {\n return result;\n }\n\n try {\n if (!this.client) {\n throw new Error('Not connected');\n }\n\n const cacheKeys = keys.map((key) => this.buildKey(key));\n const values = await this.client.mget(cacheKeys);\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (!key) continue;\n\n if (values[i] !== null) {\n const entry: CacheEntry<T> = JSON.parse(values[i]!);\n result.set(key, entry.data);\n this.stats.hits++;\n } else {\n this.stats.misses++;\n }\n }\n\n if (this.enableLogging) {\n logger.debug(`[ValkeyGlideProvider:${this.namespace}] Batch get`, {\n requested: keys.length,\n found: result.size,\n });\n }\n\n return result;\n } catch (error) {\n this.stats.errors++;\n logger.error(`[ValkeyGlideProvider:${this.namespace}] Error in batch get:`, error as Record<string, unknown>);\n return result;\n }\n }\n\n /**\n * Set multiple values (batch operation)\n */\n async mset<T>(entries: Map<string, T>, options?: BatchCacheOptions): Promise<boolean> {\n if (entries.size === 0) {\n return true;\n }\n\n try {\n if (!this.client) {\n throw new Error('Not connected');\n }\n\n const ttlSeconds = options?.ttl || this.defaultTTL;\n const keyValuePairs: Record<string, string> = {};\n\n for (const [key, value] of entries) {\n const cacheKey = this.buildKey(key);\n const entry: CacheEntry<T> = {\n data: value,\n timestamp: Date.now(),\n ttl: ttlSeconds,\n metadata: options?.metadata,\n };\n keyValuePairs[cacheKey] = JSON.stringify(entry);\n }\n\n await this.client.mset(keyValuePairs);\n\n // Set TTL for each key (mset doesn't support TTL directly)\n for (const cacheKey of Object.keys(keyValuePairs)) {\n await this.client.expire(cacheKey, ttlSeconds);\n }\n\n this.stats.sets += entries.size;\n if (this.enableLogging) {\n logger.debug(`[ValkeyGlideProvider:${this.namespace}] Batch set`, {\n count: entries.size,\n ttl: ttlSeconds,\n });\n }\n\n return true;\n } catch (error) {\n this.stats.errors++;\n logger.error(`[ValkeyGlideProvider:${this.namespace}] Error in batch set:`, error as Record<string, unknown>);\n return false;\n }\n }\n\n /**\n * Delete multiple keys (batch operation)\n */\n async mdel(keys: string[]): Promise<number> {\n if (keys.length === 0) {\n return 0;\n }\n\n try {\n if (!this.client) {\n throw new Error('Not connected');\n }\n\n const cacheKeys = keys.map((key) => this.buildKey(key));\n const result = await this.client.del(cacheKeys);\n\n this.stats.deletes += result;\n if (this.enableLogging) {\n logger.debug(`[ValkeyGlideProvider:${this.namespace}] Batch delete`, {\n requested: keys.length,\n deleted: result,\n });\n }\n\n return result;\n } catch (error) {\n this.stats.errors++;\n logger.error(`[ValkeyGlideProvider:${this.namespace}] Error in batch delete:`, error as Record<string, unknown>);\n return 0;\n }\n }\n\n /**\n * Clear keys by pattern\n */\n async clearPattern(pattern: string): Promise<number> {\n try {\n if (!this.client) {\n throw new Error('Not connected');\n }\n\n const searchPattern = this.buildKey(pattern);\n const keys = await this.getKeys(searchPattern);\n\n if (keys.length === 0) {\n return 0;\n }\n\n const result = await this.client.del(keys);\n\n if (this.enableLogging) {\n logger.debug(`[ValkeyGlideProvider:${this.namespace}] Pattern cleared`, {\n pattern,\n deleted: result,\n });\n }\n\n return result;\n } catch (error) {\n this.stats.errors++;\n logger.error(`[ValkeyGlideProvider:${this.namespace}] Error clearing pattern:`, error as Record<string, unknown>);\n return 0;\n }\n }\n\n /**\n * Get keys by pattern\n */\n async keys(options: PatternOptions): Promise<PatternResult> {\n try {\n if (!this.client) {\n throw new Error('Not connected');\n }\n\n const searchPattern = this.buildKey(options.pattern);\n const keys = await this.getKeys(searchPattern);\n\n const prefix = `${this.namespace}:`;\n const cleanKeys = keys.map((key) => key.replace(prefix, ''));\n\n const limitedKeys = options.limit ? cleanKeys.slice(0, options.limit) : cleanKeys;\n\n return {\n keys: limitedKeys,\n nextCursor: null,\n totalCount: cleanKeys.length,\n };\n } catch (error) {\n this.stats.errors++;\n logger.error(`[ValkeyGlideProvider:${this.namespace}] Error getting keys:`, error as Record<string, unknown>);\n return {\n keys: [],\n nextCursor: null,\n totalCount: 0,\n };\n }\n }\n\n /**\n * Clear all keys in namespace\n */\n async clear(): Promise<boolean> {\n try {\n if (!this.client) {\n throw new Error('Not connected');\n }\n\n const pattern = this.buildKey('*');\n const keys = await this.getKeys(pattern);\n\n if (keys.length > 0) {\n await this.client.del(keys);\n if (this.enableLogging) {\n logger.info(`[ValkeyGlideProvider:${this.namespace}] Cleared ${keys.length} keys`);\n }\n }\n\n return true;\n } catch (error) {\n this.stats.errors++;\n logger.error(`[ValkeyGlideProvider:${this.namespace}] Error clearing cache:`, error as Record<string, unknown>);\n return false;\n }\n }\n\n /**\n * Increment numeric value\n */\n async increment(key: string, amount: number = 1): Promise<number> {\n try {\n if (!this.client) {\n throw new Error('Not connected');\n }\n\n const cacheKey = this.buildKey(key);\n return await this.client.incrBy(cacheKey, amount);\n } catch (error) {\n this.stats.errors++;\n logger.error(`[ValkeyGlideProvider:${this.namespace}] Error incrementing:`, error as Record<string, unknown>);\n throw error;\n }\n }\n\n /**\n * Decrement numeric value\n */\n async decrement(key: string, amount: number = 1): Promise<number> {\n try {\n if (!this.client) {\n throw new Error('Not connected');\n }\n\n const cacheKey = this.buildKey(key);\n return await this.client.decrBy(cacheKey, amount);\n } catch (error) {\n this.stats.errors++;\n logger.error(`[ValkeyGlideProvider:${this.namespace}] Error decrementing:`, error as Record<string, unknown>);\n throw error;\n }\n }\n\n /**\n * Get or set value\n */\n async getOrSet<T>(key: string, fetcher: () => Promise<T>, options?: CacheOptions): Promise<T> {\n const cached = await this.get<T>(key, options);\n if (cached !== null) {\n return cached;\n }\n\n const value = await fetcher();\n await this.set(key, value, options);\n\n return value;\n }\n\n /**\n * Invalidate by tags\n */\n async invalidateTags(tags: string[]): Promise<number> {\n try {\n let totalDeleted = 0;\n\n for (const tag of tags) {\n const pattern = `*:tag:${tag}:*`;\n const deleted = await this.clearPattern(pattern);\n totalDeleted += deleted;\n }\n\n if (this.enableLogging) {\n logger.debug(`[ValkeyGlideProvider:${this.namespace}] Tags invalidated`, {\n tags,\n deleted: totalDeleted,\n });\n }\n\n return totalDeleted;\n } catch (error) {\n this.stats.errors++;\n logger.error(\n `[ValkeyGlideProvider:${this.namespace}] Error invalidating tags:`,\n error as Record<string, unknown>\n );\n return 0;\n }\n }\n}\n","/**\n * Cache Factory\n * Creates appropriate cache provider instances based on configuration\n */\nimport { logger } from '../../logger/index.js';\nimport type { ServiceLayer } from '../../types/layer.js';\nimport { DEFAULT_LAYER_RESOURCES } from '../../types/layer.js';\n\nimport { MemoryCacheProvider } from '../implementations/memory/MemoryCacheProvider.js';\nimport { ValkeyGlideProvider } from '../implementations/valkey/ValkeyGlideProvider.js';\nimport type { ICacheProvider } from '../interfaces/ICacheProvider.js';\nimport type { CacheConfig, CacheProviderTypeLiteral } from '../types/config.js';\n\n/**\n * Factory for creating cache instances\n */\nexport class CacheFactory {\n private static instances: Map<string, ICacheProvider> = new Map();\n\n private static parseBoolean(value: string | undefined): boolean | undefined {\n if (value === undefined) return undefined;\n const normalized = value.trim().toLowerCase();\n if (['1', 'true', 'yes', 'on'].includes(normalized)) return true;\n if (['0', 'false', 'no', 'off'].includes(normalized)) return false;\n return undefined;\n }\n\n private static parseClusterNodes(value: string | undefined): Array<{ host: string; port: number }> | undefined {\n if (!value) return undefined;\n\n const nodes = value\n .split(',')\n .map((node) => node.trim())\n .filter(Boolean)\n .map((node) => {\n const [host, rawPort] = node\n .replace(/^redis:\\/\\//, '')\n .replace(/^valkey:\\/\\//, '')\n .split(':');\n if (!host) return null;\n return { host, port: rawPort ? parseInt(rawPort, 10) : 6379 };\n })\n .filter((node): node is { host: string; port: number } => node !== null && Number.isFinite(node.port));\n\n return nodes.length > 0 ? nodes : undefined;\n }\n\n /**\n * Resolve port from multiple environment variable sources\n * @param layerPort - Layer-specific port environment variable value\n * @param genericPort - Generic port environment variable value\n * @param defaultPort - Default port if none provided\n * @returns Resolved port number\n */\n private static resolvePort(\n layerPort: string | undefined,\n genericPort: string | undefined,\n defaultPort: number = 6379\n ): number {\n if (layerPort) {\n return parseInt(layerPort, 10);\n }\n if (genericPort) {\n return parseInt(genericPort, 10);\n }\n return defaultPort;\n }\n\n /**\n * Create a cache provider based on configuration\n */\n static createCache(config: CacheConfig, namespace: string = 'default'): ICacheProvider {\n logger.info('[CacheFactory] Creating cache provider', {\n type: config.type,\n namespace,\n });\n\n switch (config.type) {\n case 'valkey':\n case 'redis': // Backwards compatibility - redis maps to valkey\n return new ValkeyGlideProvider(\n {\n type: 'valkey-glide',\n url: config.url,\n host: config.host,\n port: config.port,\n password: config.password,\n username: config.username,\n db: config.db,\n keyPrefix: config.keyPrefix,\n defaultTTL: config.defaultTTL,\n enableLogging: config.enableLogging,\n maxReconnectAttempts: config.maxReconnectAttempts,\n reconnectTimeWait: config.reconnectTimeWait,\n connectionTimeout: config.connectionTimeout,\n name: config.name,\n useTLS: config.tls?.enabled,\n cluster: config.cluster,\n clusterNodes: config.clusterNodes,\n },\n namespace\n );\n\n case 'memory':\n return new MemoryCacheProvider(config, namespace);\n\n // Future implementations can be added here\n // case 'memcached':\n // return new MemcachedCacheProvider(config as MemcachedCacheConfig, namespace);\n\n default:\n throw new Error(`Unsupported cache provider type: ${config.type}`);\n }\n }\n\n /**\n * Create a cache from environment variables\n */\n static createCacheFromEnv(namespace: string = 'default'): ICacheProvider {\n const envType = process.env['CACHE_PROVIDER_TYPE'] as CacheProviderTypeLiteral | undefined;\n // Default to valkey, but treat 'redis' as 'valkey' for backwards compatibility\n const type = envType === 'memory' ? 'memory' : 'valkey';\n\n const config: CacheConfig =\n type === 'valkey'\n ? {\n type: 'valkey',\n url: process.env['VALKEY_URL'],\n host: process.env['VALKEY_HOST'] || 'localhost',\n port: process.env['VALKEY_PORT'] ? parseInt(process.env['VALKEY_PORT'], 10) : 6379,\n password: process.env['VALKEY_PASSWORD'],\n db: process.env['VALKEY_DB'] ? parseInt(process.env['VALKEY_DB'], 10) : 0,\n username: process.env['VALKEY_USERNAME'],\n keyPrefix: process.env['CACHE_KEY_PREFIX'] || 'cache',\n defaultTTL: process.env['CACHE_DEFAULT_TTL'] ? parseInt(process.env['CACHE_DEFAULT_TTL'], 10) : 300,\n enableLogging: process.env['CACHE_ENABLE_LOGGING'] === 'true',\n maxReconnectAttempts: process.env['VALKEY_MAX_RECONNECT_ATTEMPTS']\n ? parseInt(process.env['VALKEY_MAX_RECONNECT_ATTEMPTS'], 10)\n : -1,\n reconnectTimeWait: process.env['VALKEY_RECONNECT_TIME_WAIT']\n ? parseInt(process.env['VALKEY_RECONNECT_TIME_WAIT'], 10)\n : 2000,\n connectionTimeout: process.env['VALKEY_CONNECTION_TIMEOUT']\n ? parseInt(process.env['VALKEY_CONNECTION_TIMEOUT'], 10)\n : 10000,\n name: process.env['CACHE_CLIENT_NAME'] || `cache-${namespace}`,\n cluster: CacheFactory.parseBoolean(process.env['VALKEY_CLUSTER'] || process.env['CACHE_CLUSTER']),\n clusterNodes: CacheFactory.parseClusterNodes(\n process.env['VALKEY_CLUSTER_NODES'] || process.env['CACHE_CLUSTER_NODES']\n ),\n }\n : {\n type: 'memory',\n maxSize: process.env['CACHE_MAX_SIZE'] ? parseInt(process.env['CACHE_MAX_SIZE'], 10) : 1000,\n defaultTTL: process.env['CACHE_DEFAULT_TTL'] ? parseInt(process.env['CACHE_DEFAULT_TTL'], 10) : 300,\n enableLogging: process.env['CACHE_ENABLE_LOGGING'] === 'true',\n keyPrefix: process.env['CACHE_KEY_PREFIX'] || 'cache',\n };\n\n return CacheFactory.createCache(config, namespace);\n }\n\n /**\n * Get or create a singleton cache instance for a namespace\n */\n static getInstance(namespace: string = 'default', config?: CacheConfig): ICacheProvider {\n const instanceKey = `${config?.type || 'default'}:${namespace}`;\n\n if (!CacheFactory.instances.has(instanceKey)) {\n const cache = config ? CacheFactory.createCache(config, namespace) : CacheFactory.createCacheFromEnv(namespace);\n CacheFactory.instances.set(instanceKey, cache);\n }\n\n return CacheFactory.instances.get(instanceKey)!;\n }\n\n /**\n * Close a specific cache instance\n */\n static async closeInstance(namespace: string): Promise<void> {\n for (const [key, cache] of CacheFactory.instances.entries()) {\n if (key.endsWith(`:${namespace}`)) {\n await cache.disconnect();\n CacheFactory.instances.delete(key);\n logger.info('[CacheFactory] Closed cache instance', { namespace });\n }\n }\n }\n\n /**\n * Close all cache instances\n * Call this during application shutdown\n */\n static async closeAll(): Promise<void> {\n const promises = Array.from(CacheFactory.instances.values()).map(async (cache) => cache.disconnect());\n await Promise.all(promises);\n CacheFactory.instances.clear();\n logger.info('[CacheFactory] All cache instances closed');\n }\n\n // ========================================================================\n // Layer-Aware Factory Methods\n // ========================================================================\n\n /**\n * Create a cache provider for a specific layer\n *\n * @param layer - Service layer ('wspace' or 'global')\n * @param serviceName - Service name for identification\n * @param namespace - Cache namespace (default: 'default')\n * @returns Cache provider configured for the layer\n *\n * @example\n * ```typescript\n * const cache = CacheFactory.createCacheForLayer('wspace', 'wspace-tags-svc');\n * await cache.connect();\n * await cache.set('key', { data: 'value' });\n * ```\n */\n static createCacheForLayer(layer: ServiceLayer, serviceName: string, namespace: string = 'default'): ICacheProvider {\n const envPrefix = layer.toUpperCase();\n const defaults = DEFAULT_LAYER_RESOURCES[layer];\n\n // Build Valkey URL from layer-specific or generic env vars\n const url = process.env[`${envPrefix}_VALKEY_URL`] || process.env['VALKEY_URL'] || defaults.valkeyUrl;\n\n // Resolve port with fallback chain\n const resolvedPort = CacheFactory.resolvePort(process.env[`${envPrefix}_VALKEY_PORT`], process.env['VALKEY_PORT']);\n\n const config: CacheConfig = {\n type: 'valkey',\n url,\n host: process.env[`${envPrefix}_VALKEY_HOST`] || process.env['VALKEY_HOST'] || 'localhost',\n port: resolvedPort,\n password: process.env['VALKEY_PASSWORD'],\n db: process.env['VALKEY_DB'] ? parseInt(process.env['VALKEY_DB'], 10) : 0,\n username: process.env['VALKEY_USERNAME'],\n keyPrefix: process.env['CACHE_KEY_PREFIX'] || `${layer}-cache`,\n defaultTTL: process.env['CACHE_DEFAULT_TTL'] ? parseInt(process.env['CACHE_DEFAULT_TTL'], 10) : 300,\n enableLogging: process.env['CACHE_ENABLE_LOGGING'] === 'true',\n maxReconnectAttempts: process.env['VALKEY_MAX_RECONNECT_ATTEMPTS']\n ? parseInt(process.env['VALKEY_MAX_RECONNECT_ATTEMPTS'], 10)\n : -1,\n reconnectTimeWait: process.env['VALKEY_RECONNECT_TIME_WAIT']\n ? parseInt(process.env['VALKEY_RECONNECT_TIME_WAIT'], 10)\n : 2000,\n connectionTimeout: process.env['VALKEY_CONNECTION_TIMEOUT']\n ? parseInt(process.env['VALKEY_CONNECTION_TIMEOUT'], 10)\n : 10000,\n name: serviceName,\n cluster: CacheFactory.parseBoolean(\n process.env[`${envPrefix}_VALKEY_CLUSTER`] || process.env['VALKEY_CLUSTER'] || process.env['CACHE_CLUSTER']\n ),\n clusterNodes: CacheFactory.parseClusterNodes(\n process.env[`${envPrefix}_VALKEY_CLUSTER_NODES`] ||\n process.env['VALKEY_CLUSTER_NODES'] ||\n process.env['CACHE_CLUSTER_NODES']\n ),\n };\n\n logger.info('[CacheFactory] Creating layer cache', {\n layer,\n serviceName,\n namespace,\n url: config.url,\n });\n\n return CacheFactory.createCache(config, namespace);\n }\n\n /**\n * Get or create a singleton cache instance for a layer\n *\n * @param layer - Service layer ('wspace' or 'global')\n * @param serviceName - Service name for identification\n * @param namespace - Cache namespace (default: 'default')\n * @returns Singleton cache provider for the layer\n */\n static getInstanceForLayer(layer: ServiceLayer, serviceName: string, namespace: string = 'default'): ICacheProvider {\n const instanceKey = `${layer}:${serviceName}:${namespace}`;\n\n if (!CacheFactory.instances.has(instanceKey)) {\n const cache = CacheFactory.createCacheForLayer(layer, serviceName, namespace);\n CacheFactory.instances.set(instanceKey, cache);\n }\n\n return CacheFactory.instances.get(instanceKey)!;\n }\n}\n","/**\n * Cache Configuration Types\n */\n\n/**\n * Cache provider type enum\n */\nexport enum CacheProviderType {\n VALKEY = 'valkey',\n MEMORY = 'memory',\n MEMCACHED = 'memcached',\n}\n\n/**\n * Cache provider type string literal\n */\nexport type CacheProviderTypeLiteral = 'valkey' | 'redis' | 'memory' | 'memcached';\n\n/**\n * Base configuration for cache\n */\nexport interface BaseCacheConfig {\n /** Cache provider type */\n type: CacheProviderType | CacheProviderTypeLiteral;\n /** Connection URL or host */\n url?: string;\n /** Cache key prefix */\n keyPrefix?: string;\n /** Default TTL in seconds */\n defaultTTL?: number;\n /** Enable debug logging */\n enableLogging?: boolean;\n /** Maximum reconnection attempts (-1 for infinite) */\n maxReconnectAttempts?: number;\n /** Time to wait between reconnection attempts (ms) */\n reconnectTimeWait?: number;\n /** Connection timeout (ms) */\n connectionTimeout?: number;\n /** Client name/identifier */\n name?: string;\n}\n\n/**\n * Valkey-specific configuration\n * Compatible with Redis protocol (Valkey is a Redis fork)\n */\nexport interface ValkeyCacheConfig extends BaseCacheConfig {\n type: CacheProviderType.VALKEY | 'valkey' | 'redis';\n /** Valkey host */\n host?: string;\n /** Valkey port */\n port?: number;\n /** Valkey password */\n password?: string;\n /** Valkey database number */\n db?: number;\n /** Valkey username */\n username?: string;\n /** Use TLS for connection (simple boolean flag) */\n useTLS?: boolean;\n /** TLS configuration (detailed) */\n tls?: {\n enabled: boolean;\n cert?: string;\n key?: string;\n ca?: string;\n };\n /** Enable cluster mode */\n cluster?: boolean;\n /** Cluster nodes (if cluster mode enabled) */\n clusterNodes?: Array<{ host: string; port: number }>;\n /** Sentinel configuration */\n sentinel?: {\n enabled: boolean;\n sentinels: Array<{ host: string; port: number }>;\n name: string;\n };\n}\n\n/**\n * Memory cache-specific configuration\n */\nexport interface MemoryCacheConfig extends BaseCacheConfig {\n type: CacheProviderType.MEMORY | 'memory';\n /** Maximum number of items in cache */\n maxSize?: number;\n /** Eviction strategy */\n evictionStrategy?: 'lru' | 'lfu' | 'fifo';\n}\n\n/**\n * Memcached-specific configuration\n */\nexport interface MemcachedCacheConfig extends BaseCacheConfig {\n type: CacheProviderType.MEMCACHED | 'memcached';\n /** Memcached servers */\n servers?: string[];\n}\n\n/**\n * Union type for all cache configurations\n */\nexport type CacheConfig = ValkeyCacheConfig | MemoryCacheConfig | MemcachedCacheConfig;\n\n/**\n * Health check result\n */\nexport interface CacheHealthCheckResult {\n /** Overall health status */\n status: 'healthy' | 'unhealthy' | 'degraded';\n /** Timestamp of health check */\n timestamp: string;\n /** Connection status */\n connected?: boolean;\n /** Latency in milliseconds */\n latencyMs?: number;\n /** Additional details */\n details?: Record<string, unknown>;\n /** Error message if unhealthy */\n error?: string;\n}\n\n/**\n * Cache statistics\n */\nexport interface CacheStatistics {\n /** Total cache hits */\n hits?: number;\n /** Total cache misses */\n misses?: number;\n /** Hit rate (0-1) */\n hitRate?: number;\n /** Total number of keys */\n keyCount?: number;\n /** Total memory used (bytes) */\n memoryUsed?: number;\n /** Total cache operations */\n totalOperations?: number;\n /** Average operation time (ms) */\n avgOperationTimeMs?: number;\n /** Last activity timestamp */\n lastActivity?: string | null;\n /** Custom metrics */\n details?: Record<string, unknown>;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { GatewayClient } from './chunk-4B43DZIS.js';
1
+ import { GatewayClient } from './chunk-NAOHXHUP.js';
2
2
  import { __export, __name } from './chunk-XE4OXN2W.js';
3
3
 
4
4
  // src/export/index.ts
@@ -624,5 +624,5 @@ async function triggerExportJob(params) {
624
624
  __name(triggerExportJob, "triggerExportJob");
625
625
 
626
626
  export { BaseModuleExporter, PaginationService, convertToCSV, csvToJSON, estimateCSVSize, export_exports, getCSVHeaders, parseCSV, triggerExportJob };
627
- //# sourceMappingURL=chunk-FNZEQOJY.js.map
628
- //# sourceMappingURL=chunk-FNZEQOJY.js.map
627
+ //# sourceMappingURL=chunk-A46X4Y5Q.js.map
628
+ //# sourceMappingURL=chunk-A46X4Y5Q.js.map