@burdenoff/be-sdk 2026.709.1 → 2026.710.2
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.
- package/dist/auth/index.d.ts +2 -1
- package/dist/cache/index.d.ts +1 -1
- package/dist/cache/index.js +1 -1
- package/dist/{chunk-OOHO33FX.js → chunk-3XJUXXES.js} +4 -4
- package/dist/{chunk-OOHO33FX.js.map → chunk-3XJUXXES.js.map} +1 -1
- package/dist/{chunk-UIMPJNWC.js → chunk-7UJXIX4I.js} +7 -3
- package/dist/chunk-7UJXIX4I.js.map +1 -0
- package/dist/{chunk-UYE4IEPT.js → chunk-CAI5GJJ6.js} +51 -11
- package/dist/chunk-CAI5GJJ6.js.map +1 -0
- package/dist/{chunk-5BCCI2FV.js → chunk-GCY2FTHD.js} +3 -3
- package/dist/{chunk-5BCCI2FV.js.map → chunk-GCY2FTHD.js.map} +1 -1
- package/dist/{chunk-IDKU7OGF.js → chunk-GVZ5BDER.js} +4 -4
- package/dist/{chunk-IDKU7OGF.js.map → chunk-GVZ5BDER.js.map} +1 -1
- package/dist/{chunk-WHSIZCJX.js → chunk-LHLOJS52.js} +2 -2
- package/dist/{chunk-WHSIZCJX.js.map → chunk-LHLOJS52.js.map} +1 -1
- package/dist/export/index.js +4 -4
- package/dist/gateway/index.js +3 -3
- package/dist/gateway/security/index.js +1 -1
- package/dist/{index-D3lGLwby.d.ts → index-Bxzzlu4x.d.ts} +5 -43
- package/dist/{index-DkObbJD_.d.ts → index-Mr2ATGnY.d.ts} +1 -0
- package/dist/index.d.ts +4 -3
- package/dist/index.js +10 -10
- package/dist/init/index.js +4 -4
- package/dist/layer/index.js +1 -1
- package/dist/prisma/index.d.ts +2 -1
- package/dist/server/index.d.ts +3 -2
- package/dist/server/index.js +1 -1
- package/dist/{types-CXVleyWq.d.ts → types-DNF8bOx0.d.ts} +2 -10
- package/dist/workspace-extension-TquhDEKU.d.ts +40 -0
- package/package.json +1 -1
- package/dist/chunk-UIMPJNWC.js.map +0 -1
- package/dist/chunk-UYE4IEPT.js.map +0 -1
package/dist/auth/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { B as BurdenoffGraphQLClient } from '../graphql-Dxxpbzr3.js';
|
|
2
2
|
import { S as SDKContext } from '../index-B8viwwDM.js';
|
|
3
|
-
import { G as GraphQLContext } from '../types-
|
|
3
|
+
import { G as GraphQLContext } from '../types-DNF8bOx0.js';
|
|
4
4
|
import 'graphql-request';
|
|
5
5
|
import '../layer-GNAVXBMf.js';
|
|
6
6
|
import 'graphql';
|
|
@@ -8,6 +8,7 @@ import 'graphql-yoga';
|
|
|
8
8
|
import '../client-ODOgzzs0.js';
|
|
9
9
|
import '@prisma/adapter-pg';
|
|
10
10
|
import 'pg';
|
|
11
|
+
import '../workspace-extension-TquhDEKU.js';
|
|
11
12
|
import '../types-C8TbSdEj.js';
|
|
12
13
|
|
|
13
14
|
interface CookieOptions {
|
package/dist/cache/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { B as BaseCacheConfig, a as BatchCacheOptions, C as CacheConfig, b as CacheEntry, c as CacheFactory, d as CacheHealthCheckResult, e as CacheOptions, f as CacheProviderType, g as CacheProviderTypeLiteral, h as CacheStatistics, I as ICache, j as ICacheProvider, M as MemcachedCacheConfig, k as MemoryCacheConfig, l as MemoryCacheProvider, P as PatternOptions, m as PatternResult, V as ValkeyCacheConfig, n as ValkeyGlideClient, o as ValkeyGlideConfig, p as ValkeyGlideProvider, q as closeAllCaches, r as createCache, s as getCache, t as getValkeyClient } from '../index-
|
|
1
|
+
export { B as BaseCacheConfig, a as BatchCacheOptions, C as CacheConfig, b as CacheEntry, c as CacheFactory, d as CacheHealthCheckResult, e as CacheOptions, f as CacheProviderType, g as CacheProviderTypeLiteral, h as CacheStatistics, I as ICache, j as ICacheProvider, M as MemcachedCacheConfig, k as MemoryCacheConfig, l as MemoryCacheProvider, P as PatternOptions, m as PatternResult, V as ValkeyCacheConfig, n as ValkeyGlideClient, o as ValkeyGlideConfig, p as ValkeyGlideProvider, q as closeAllCaches, r as createCache, s as getCache, t as getValkeyClient } from '../index-Mr2ATGnY.js';
|
|
2
2
|
import '../layer-GNAVXBMf.js';
|
package/dist/cache/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { CacheFactory, CacheProviderType, MemoryCacheProvider, ValkeyGlideProvider, closeAllCaches, createCache, getCache, getValkeyClient } from '../chunk-
|
|
1
|
+
export { CacheFactory, CacheProviderType, MemoryCacheProvider, ValkeyGlideProvider, closeAllCaches, createCache, getCache, getValkeyClient } from '../chunk-CAI5GJJ6.js';
|
|
2
2
|
import '../chunk-YFOHAHZE.js';
|
|
3
3
|
import '../chunk-CBZNP6RF.js';
|
|
4
4
|
import '../chunk-XE4OXN2W.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { GatewayClient } from './chunk-
|
|
2
|
-
import { LayerManager } from './chunk-
|
|
1
|
+
import { GatewayClient } from './chunk-GVZ5BDER.js';
|
|
2
|
+
import { LayerManager } from './chunk-7UJXIX4I.js';
|
|
3
3
|
import { logger } from './chunk-CBZNP6RF.js';
|
|
4
4
|
import { __export, __name } from './chunk-XE4OXN2W.js';
|
|
5
5
|
|
|
@@ -237,5 +237,5 @@ async function initializeLayerStreams(config) {
|
|
|
237
237
|
__name(initializeLayerStreams, "initializeLayerStreams");
|
|
238
238
|
|
|
239
239
|
export { getSDKState, init_exports, initializeBurdenoffSDK, isSDKInitialized, resetSDK };
|
|
240
|
-
//# sourceMappingURL=chunk-
|
|
241
|
-
//# sourceMappingURL=chunk-
|
|
240
|
+
//# sourceMappingURL=chunk-3XJUXXES.js.map
|
|
241
|
+
//# sourceMappingURL=chunk-3XJUXXES.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/init/index.ts"],"names":["sdkState","isInitialized","initializeBurdenoffSDK","config","logger","warn","info","startTime","Date","now","initializeLogging","layerManager","gatewayClient","initializeLayer","prisma","initializeDatabase","valkey","initializeCache","eventPublisher","initializeEventQueue","layer","autoCreateStreams","initializeLayerStreams","graphSync","initializeGraphSync","clickhouse","initializeAnalytics","initializeObservability","graphSyncEnabled","graph","enabled","analyticsEnabled","analytics","observabilityEnabled","observability","metrics","layerAwareEnabled","duration","initializedState","type","serviceName","error","getSDKState","Error","isSDKInitialized","resetSDK","loggingConfig","logging","isDevelopment","app","nodeEnv","level","setLevel","console","setConsoleEnabled","format","database","url","maxConnections","enableQueryLogging","undefined","cacheConfig","cache","defaultTTL","_config","process","env","EventQueueFactory","publisher","createPublisherFromEnv","connect","message","String","note","eventsEnabled","productSource","streamName","syncInterval","batchSize","requestTimeout","openTelemetry","port","endpoint","samplingRate","LayerManager","serviceIdentity","GatewayClient","internalGatewayUrl","getInternalGatewayUrl","crossLayerGatewayUrl","getCrossLayerGatewayUrl","debug"],"mappings":"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","file":"chunk-OOHO33FX.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 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 (Redis Streams)\n * 5. Graph Sync (Redis Streams-based — Apache AGE 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) — Redis Streams via REDIS_URL\n const eventPublisher = 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) — publisher emits to Redis Streams,\n // 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 Redis Streams\n // events and wspace-graph-svc owns the sole Apache AGE connection.\n void graphSync;\n sdkState = {\n prisma,\n valkey,\n clickhouse,\n eventPublisher,\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 (Redis Streams).\n *\n * NATS was retired on 2026-05-16. The publisher is created from\n * `REDIS_URL` (set platform-wide in KV). Legacy `config.eventQueue.nats`\n * values are ignored — kept on the type only as a back-compat shim.\n */\nasync function initializeEventQueue(_config: BurdenoffSDKInitConfig): Promise<unknown> {\n if (!process.env['REDIS_URL']) {\n logger.info('[SDK Init] REDIS_URL not set, skipping event queue init');\n return undefined;\n }\n\n try {\n const { EventQueueFactory } = await import('../event-queue/factory/EventQueueFactory.js');\n const publisher = EventQueueFactory.createPublisherFromEnv();\n await publisher.connect();\n\n logger.info('[SDK Init] Redis Streams event publisher connected');\n\n return publisher;\n } catch (error) {\n logger.warn('[SDK Init] Failed to connect Redis Streams 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 (Redis Streams publisher side).\n *\n * Services publish entity events to Redis Streams; the `wspace-graph-svc`\n * consumer (and only it) persists them into Apache AGE via Azure PG\n * sidecar. This SDK function does no DB work — it just validates that the\n * publisher-side 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 Redis streams.\n *\n * No-op since the 2026-05-16 NATS retirement: Redis Streams are created\n * on demand by `XGROUP CREATE ... MKSTREAM` inside the consumer, so no\n * upfront connect-and-provision step is needed.\n */\nasync function initializeLayerStreams(config: BurdenoffSDKInitConfig): Promise<void> {\n if (!config.layer) {\n return;\n }\n logger.debug('[SDK Init] Layer streams init is a no-op for Redis Streams (auto-created on first XADD/XGROUP)', {\n layer: config.layer.type,\n });\n}\n\n// Export types\nexport type * from './types.js';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/init/index.ts"],"names":["sdkState","isInitialized","initializeBurdenoffSDK","config","logger","warn","info","startTime","Date","now","initializeLogging","layerManager","gatewayClient","initializeLayer","prisma","initializeDatabase","valkey","initializeCache","eventPublisher","initializeEventQueue","layer","autoCreateStreams","initializeLayerStreams","graphSync","initializeGraphSync","clickhouse","initializeAnalytics","initializeObservability","graphSyncEnabled","graph","enabled","analyticsEnabled","analytics","observabilityEnabled","observability","metrics","layerAwareEnabled","duration","initializedState","type","serviceName","error","getSDKState","Error","isSDKInitialized","resetSDK","loggingConfig","logging","isDevelopment","app","nodeEnv","level","setLevel","console","setConsoleEnabled","format","database","url","maxConnections","enableQueryLogging","undefined","cacheConfig","cache","defaultTTL","_config","process","env","EventQueueFactory","publisher","createPublisherFromEnv","connect","message","String","note","eventsEnabled","productSource","streamName","syncInterval","batchSize","requestTimeout","openTelemetry","port","endpoint","samplingRate","LayerManager","serviceIdentity","GatewayClient","internalGatewayUrl","getInternalGatewayUrl","crossLayerGatewayUrl","getCrossLayerGatewayUrl","debug"],"mappings":"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","file":"chunk-3XJUXXES.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 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 (Redis Streams)\n * 5. Graph Sync (Redis Streams-based — Apache AGE 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) — Redis Streams via REDIS_URL\n const eventPublisher = 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) — publisher emits to Redis Streams,\n // 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 Redis Streams\n // events and wspace-graph-svc owns the sole Apache AGE connection.\n void graphSync;\n sdkState = {\n prisma,\n valkey,\n clickhouse,\n eventPublisher,\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 (Redis Streams).\n *\n * NATS was retired on 2026-05-16. The publisher is created from\n * `REDIS_URL` (set platform-wide in KV). Legacy `config.eventQueue.nats`\n * values are ignored — kept on the type only as a back-compat shim.\n */\nasync function initializeEventQueue(_config: BurdenoffSDKInitConfig): Promise<unknown> {\n if (!process.env['REDIS_URL']) {\n logger.info('[SDK Init] REDIS_URL not set, skipping event queue init');\n return undefined;\n }\n\n try {\n const { EventQueueFactory } = await import('../event-queue/factory/EventQueueFactory.js');\n const publisher = EventQueueFactory.createPublisherFromEnv();\n await publisher.connect();\n\n logger.info('[SDK Init] Redis Streams event publisher connected');\n\n return publisher;\n } catch (error) {\n logger.warn('[SDK Init] Failed to connect Redis Streams 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 (Redis Streams publisher side).\n *\n * Services publish entity events to Redis Streams; the `wspace-graph-svc`\n * consumer (and only it) persists them into Apache AGE via Azure PG\n * sidecar. This SDK function does no DB work — it just validates that the\n * publisher-side 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 Redis streams.\n *\n * No-op since the 2026-05-16 NATS retirement: Redis Streams are created\n * on demand by `XGROUP CREATE ... MKSTREAM` inside the consumer, so no\n * upfront connect-and-provision step is needed.\n */\nasync function initializeLayerStreams(config: BurdenoffSDKInitConfig): Promise<void> {\n if (!config.layer) {\n return;\n }\n logger.debug('[SDK Init] Layer streams init is a no-op for Redis Streams (auto-created on first XADD/XGROUP)', {\n layer: config.layer.type,\n });\n}\n\n// Export types\nexport type * from './types.js';\n"]}
|
|
@@ -60,7 +60,11 @@ var LayerManager = class {
|
|
|
60
60
|
// REDIS_URL (set in ACA KV / local .env) always wins; the per-layer
|
|
61
61
|
// default is only the local-dev compose fallback.
|
|
62
62
|
eventQueueUrl: process.env["REDIS_URL"] || defaults.eventQueueUrl,
|
|
63
|
-
|
|
63
|
+
// Cache Valkey: layer-specific → generic VALKEY_URL → canonical REDIS_URL →
|
|
64
|
+
// local-dev compose default. REDIS_URL is the same Azure Managed Redis the
|
|
65
|
+
// event queue uses; falling back to it keeps a service whose VALKEY_URL is
|
|
66
|
+
// blank from silently dropping to the local-dev host in prod.
|
|
67
|
+
valkeyUrl: process.env[`${envPrefix}_VALKEY_URL`] || process.env["VALKEY_URL"] || process.env["REDIS_URL"] || defaults.valkeyUrl,
|
|
64
68
|
temporalAddress: process.env[`${envPrefix}_TEMPORAL_ADDRESS`] || defaults.temporalAddress,
|
|
65
69
|
temporalNamespace: process.env[`${envPrefix}_TEMPORAL_NAMESPACE`] || defaults.temporalNamespace,
|
|
66
70
|
rbacGatewayUrl: process.env[`${envPrefix}_RBAC_GATEWAY_URL`] || defaults.rbacGatewayUrl
|
|
@@ -225,5 +229,5 @@ function validateLayerConfig(config) {
|
|
|
225
229
|
__name(validateLayerConfig, "validateLayerConfig");
|
|
226
230
|
|
|
227
231
|
export { LayerManager, createLayerManagerFromEnv, detectLayerFromServiceName, getGatewayUrlForLayer, layer_exports, validateLayerConfig };
|
|
228
|
-
//# sourceMappingURL=chunk-
|
|
229
|
-
//# sourceMappingURL=chunk-
|
|
232
|
+
//# sourceMappingURL=chunk-7UJXIX4I.js.map
|
|
233
|
+
//# sourceMappingURL=chunk-7UJXIX4I.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/layer/index.ts"],"names":["LayerManager","config","gatewayConfig","resourceConfig","routingConfig","serviceIdentity","serviceName","DEFAULT_GATEWAY_ROUTING","layer","resolveGatewayConfig","resolveResourceConfig","logger","debug","envPrefix","toUpperCase","internalGatewayUrl","process","env","internalGateway","host","port","graphqlPath","crossLayerEnvPrefix","crossLayerGatewayUrl","crossLayerGateway","defaults","DEFAULT_LAYER_RESOURCES","eventQueueUrl","valkeyUrl","temporalAddress","temporalNamespace","rbacGatewayUrl","getLayer","getServiceName","getServiceIdentity","getInternalGatewayUrl","getCrossLayerGatewayUrl","getEventQueueUrl","getValkeyUrl","getTemporalAddress","getTemporalNamespace","getRbacGatewayUrl","getDefaultStreams","DEFAULT_LAYER_STREAMS","getFullConfig","gateways","resources","isWspaceLayer","isGlobalLayer","getOppositeLayer","createLayerManagerFromEnv","Error","detectLayerFromServiceName","startsWith","undefined","getGatewayUrlForLayer","sourceLayer","targetLayer","sourceManager","routing","validateLayerConfig","expectedPrefix","warn"],"mappings":"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","file":"chunk-7UJXIX4I.js","sourcesContent":["/**\n * Layer Detection and Configuration Module\n *\n * Provides layer-aware configuration and gateway URL resolution\n * for wspace (workspace) and global (tenant) service layers.\n *\n * @module layer\n * @category Configuration\n *\n * @example\n * ```typescript\n * import { LayerManager } from '@burdenoff/be-sdk/layer';\n *\n * // Create layer manager for a wspace service\n * const layer = new LayerManager({\n * layer: 'wspace',\n * serviceName: 'wspace-tags-svc',\n * });\n *\n * // Get gateway URLs\n * const internalUrl = layer.getInternalGatewayUrl(); // wspace-int-gateway\n * const crossLayerUrl = layer.getCrossLayerGatewayUrl(); // global-public-gateway\n * ```\n */\n\nimport {\n type ServiceLayer,\n type LayerConfig,\n type LayerGatewayConfig,\n type LayerResourceUrls,\n type LayerFullConfig,\n type GatewayRoutingConfig,\n DEFAULT_GATEWAY_ROUTING,\n DEFAULT_LAYER_RESOURCES,\n DEFAULT_LAYER_STREAMS,\n} from '../types/layer.js';\nimport { logger } from '../logger/index.js';\n\n/**\n * Layer Manager - Provides layer-aware configuration and URL resolution\n */\nexport class LayerManager {\n private config: LayerConfig;\n private gatewayConfig: LayerGatewayConfig;\n private resourceConfig: LayerResourceUrls;\n private routingConfig: GatewayRoutingConfig;\n\n constructor(config: LayerConfig) {\n this.config = {\n serviceIdentity: config.serviceName, // Default to service name\n ...config,\n };\n\n // Load routing config for layer\n this.routingConfig = DEFAULT_GATEWAY_ROUTING[config.layer];\n\n // Initialize gateway config\n this.gatewayConfig = this.resolveGatewayConfig();\n\n // Initialize resource config\n this.resourceConfig = this.resolveResourceConfig();\n\n logger.debug('[LayerManager] Initialized', {\n layer: this.config.layer,\n serviceName: this.config.serviceName,\n serviceIdentity: this.config.serviceIdentity,\n });\n }\n\n /**\n * Resolve gateway configuration from environment or defaults\n */\n private resolveGatewayConfig(): LayerGatewayConfig {\n const envPrefix = this.config.layer.toUpperCase();\n\n // Internal gateway URL\n const internalGatewayUrl =\n process.env[`${envPrefix}_INT_GATEWAY_URL`] ||\n `http://${this.routingConfig.internalGateway.host}:${this.routingConfig.internalGateway.port}${this.routingConfig.internalGateway.graphqlPath}`;\n\n // Cross-layer gateway URL\n const crossLayerEnvPrefix = this.config.layer === 'wspace' ? 'GLOBAL' : 'WSPACE';\n const crossLayerGatewayUrl =\n process.env[`${crossLayerEnvPrefix}_PUBLIC_GATEWAY_URL`] ||\n `http://${this.routingConfig.crossLayerGateway.host}:${this.routingConfig.crossLayerGateway.port}${this.routingConfig.crossLayerGateway.graphqlPath}`;\n\n return {\n internalGatewayUrl,\n crossLayerGatewayUrl,\n };\n }\n\n /**\n * Resolve resource configuration from environment or defaults\n */\n private resolveResourceConfig(): LayerResourceUrls {\n const envPrefix = this.config.layer.toUpperCase();\n const defaults = DEFAULT_LAYER_RESOURCES[this.config.layer];\n\n return {\n // Event queue is fleet-shared (ACA Managed Redis or local shared-valkey).\n // REDIS_URL (set in ACA KV / local .env) always wins; the per-layer\n // default is only the local-dev compose fallback.\n eventQueueUrl: process.env['REDIS_URL'] || defaults.eventQueueUrl,\n // Cache Valkey: layer-specific → generic VALKEY_URL → canonical REDIS_URL →\n // local-dev compose default. REDIS_URL is the same Azure Managed Redis the\n // event queue uses; falling back to it keeps a service whose VALKEY_URL is\n // blank from silently dropping to the local-dev host in prod.\n valkeyUrl:\n process.env[`${envPrefix}_VALKEY_URL`] ||\n process.env['VALKEY_URL'] ||\n process.env['REDIS_URL'] ||\n defaults.valkeyUrl,\n temporalAddress: process.env[`${envPrefix}_TEMPORAL_ADDRESS`] || defaults.temporalAddress,\n temporalNamespace: process.env[`${envPrefix}_TEMPORAL_NAMESPACE`] || defaults.temporalNamespace,\n rbacGatewayUrl: process.env[`${envPrefix}_RBAC_GATEWAY_URL`] || defaults.rbacGatewayUrl,\n };\n }\n\n /**\n * Get the layer type\n */\n getLayer(): ServiceLayer {\n return this.config.layer;\n }\n\n /**\n * Get the service name\n */\n getServiceName(): string {\n return this.config.serviceName;\n }\n\n /**\n * Get the service identity (for bypass headers)\n */\n getServiceIdentity(): string {\n return this.config.serviceIdentity || this.config.serviceName;\n }\n\n /**\n * Get internal gateway URL (same layer M2M calls)\n */\n getInternalGatewayUrl(): string {\n return this.gatewayConfig.internalGatewayUrl;\n }\n\n /**\n * Get cross-layer gateway URL (cross layer calls via public gateway)\n */\n getCrossLayerGatewayUrl(): string {\n return this.gatewayConfig.crossLayerGatewayUrl;\n }\n\n /**\n * Get event queue (Redis Streams) URL for this layer\n */\n getEventQueueUrl(): string {\n return this.resourceConfig.eventQueueUrl;\n }\n\n /**\n * Get Valkey URL for this layer\n */\n getValkeyUrl(): string {\n return this.resourceConfig.valkeyUrl;\n }\n\n /**\n * Get Temporal address for this layer\n */\n getTemporalAddress(): string {\n return this.resourceConfig.temporalAddress;\n }\n\n /**\n * Get Temporal namespace for this layer\n */\n getTemporalNamespace(): string {\n return this.resourceConfig.temporalNamespace;\n }\n\n /**\n * Get RBAC gateway URL for this layer\n */\n getRbacGatewayUrl(): string {\n return this.resourceConfig.rbacGatewayUrl;\n }\n\n /**\n * Get default streams for this layer\n */\n getDefaultStreams(): Array<{ name: string; subjects: string[]; description?: string }> {\n return DEFAULT_LAYER_STREAMS[this.config.layer];\n }\n\n /**\n * Get full configuration\n */\n getFullConfig(): LayerFullConfig {\n return {\n ...this.config,\n gateways: this.gatewayConfig,\n resources: this.resourceConfig,\n };\n }\n\n /**\n * Check if this is a wspace layer service\n */\n isWspaceLayer(): boolean {\n return this.config.layer === 'wspace';\n }\n\n /**\n * Check if this is a global layer service\n */\n isGlobalLayer(): boolean {\n return this.config.layer === 'global';\n }\n\n /**\n * Get the opposite layer\n */\n getOppositeLayer(): ServiceLayer {\n return this.config.layer === 'wspace' ? 'global' : 'wspace';\n }\n}\n\n/**\n * Create LayerManager from environment variables\n *\n * Environment variables:\n * - SERVICE_LAYER: 'wspace' | 'global'\n * - SERVICE_NAME: Service name (e.g., 'wspace-tags-svc')\n * - SERVICE_IDENTITY: Service identity for bypass headers (defaults to SERVICE_NAME)\n *\n * @throws Error if SERVICE_LAYER is not set or invalid\n */\nexport function createLayerManagerFromEnv(): LayerManager {\n const layer = process.env['SERVICE_LAYER'] as ServiceLayer;\n\n if (!layer || (layer !== 'wspace' && layer !== 'global')) {\n throw new Error(\n `[LayerManager] Invalid or missing SERVICE_LAYER environment variable. ` +\n `Expected 'wspace' or 'global', got '${layer}'`\n );\n }\n\n const serviceName = process.env['SERVICE_NAME'];\n if (!serviceName) {\n throw new Error('[LayerManager] SERVICE_NAME environment variable is required');\n }\n\n const serviceIdentity = process.env['SERVICE_IDENTITY'] || serviceName;\n\n return new LayerManager({\n layer,\n serviceName,\n serviceIdentity,\n });\n}\n\n/**\n * Detect layer from service name\n *\n * @param serviceName - Service name (e.g., 'wspace-tags-svc', 'global-auth-svc')\n * @returns Detected layer or undefined if unable to detect\n */\nexport function detectLayerFromServiceName(serviceName: string): ServiceLayer | undefined {\n if (serviceName.startsWith('wspace-')) {\n return 'wspace';\n }\n if (serviceName.startsWith('global-')) {\n return 'global';\n }\n return undefined;\n}\n\n/**\n * Get gateway URL for a target layer from a source layer\n *\n * @param sourceLayer - Layer making the call\n * @param targetLayer - Layer being called\n * @param sourceManager - LayerManager for the source layer (optional, for URL resolution)\n * @returns Gateway URL to use for the call\n */\nexport function getGatewayUrlForLayer(\n sourceLayer: ServiceLayer,\n targetLayer: ServiceLayer,\n sourceManager?: LayerManager\n): string {\n // Same layer = internal gateway\n if (sourceLayer === targetLayer) {\n if (sourceManager) {\n return sourceManager.getInternalGatewayUrl();\n }\n const routing = DEFAULT_GATEWAY_ROUTING[sourceLayer];\n return `http://${routing.internalGateway.host}:${routing.internalGateway.port}${routing.internalGateway.graphqlPath}`;\n }\n\n // Different layer = cross-layer public gateway\n if (sourceManager) {\n return sourceManager.getCrossLayerGatewayUrl();\n }\n const routing = DEFAULT_GATEWAY_ROUTING[sourceLayer];\n return `http://${routing.crossLayerGateway.host}:${routing.crossLayerGateway.port}${routing.crossLayerGateway.graphqlPath}`;\n}\n\n/**\n * Validate layer configuration\n *\n * @param config - Layer configuration to validate\n * @throws Error if configuration is invalid\n */\nexport function validateLayerConfig(config: LayerConfig): void {\n if (!config.layer) {\n throw new Error('[LayerManager] layer is required');\n }\n if (config.layer !== 'wspace' && config.layer !== 'global') {\n throw new Error(`[LayerManager] Invalid layer '${config.layer}'. Must be 'wspace' or 'global'`);\n }\n if (!config.serviceName) {\n throw new Error('[LayerManager] serviceName is required');\n }\n\n // Validate naming convention\n const expectedPrefix = `${config.layer}-`;\n if (!config.serviceName.startsWith(expectedPrefix)) {\n logger.warn('[LayerManager] Service name does not follow naming convention', {\n serviceName: config.serviceName,\n expectedPrefix,\n layer: config.layer,\n });\n }\n}\n\n// Re-export types for convenience\nexport type {\n ServiceLayer,\n LayerConfig,\n LayerGatewayConfig,\n LayerResourceUrls,\n LayerFullConfig,\n GatewayRoutingConfig,\n} from '../types/layer.js';\n\nexport { DEFAULT_GATEWAY_ROUTING, DEFAULT_LAYER_RESOURCES, DEFAULT_LAYER_STREAMS } from '../types/layer.js';\n"]}
|
|
@@ -439,7 +439,8 @@ var MemoryCacheProvider = class {
|
|
|
439
439
|
};
|
|
440
440
|
|
|
441
441
|
// src/cache/implementations/valkey/ValkeyGlideProvider.ts
|
|
442
|
-
var CONNECT_RETRY_COOLDOWN_MS =
|
|
442
|
+
var CONNECT_RETRY_COOLDOWN_MS = 8e3;
|
|
443
|
+
var CONNECT_ATTEMPT_TIMEOUT_MS = 2500;
|
|
443
444
|
var ValkeyGlideProvider = class {
|
|
444
445
|
static {
|
|
445
446
|
__name(this, "ValkeyGlideProvider");
|
|
@@ -542,6 +543,36 @@ var ValkeyGlideProvider = class {
|
|
|
542
543
|
}
|
|
543
544
|
return this.client;
|
|
544
545
|
}
|
|
546
|
+
/**
|
|
547
|
+
* Race a GLIDE `createClient` promise against {@link CONNECT_ATTEMPT_TIMEOUT_MS}
|
|
548
|
+
* so a stalled connect can never block the calling resolver (and the pg
|
|
549
|
+
* connection it may be holding) longer than the budget. On timeout the
|
|
550
|
+
* underlying connect is abandoned but not left dangling: if it later resolves
|
|
551
|
+
* we close the orphaned client to avoid leaking a socket. The thrown error
|
|
552
|
+
* propagates to `connect()`'s catch, which arms the circuit-breaker so
|
|
553
|
+
* subsequent ops fast-fail (cache miss) during the cooldown.
|
|
554
|
+
*/
|
|
555
|
+
async withConnectBudget(pending) {
|
|
556
|
+
let timer;
|
|
557
|
+
const timeout = new Promise((_, reject) => {
|
|
558
|
+
timer = setTimeout(() => reject(new Error(`Valkey connect exceeded ${String(CONNECT_ATTEMPT_TIMEOUT_MS)}ms budget`)), CONNECT_ATTEMPT_TIMEOUT_MS);
|
|
559
|
+
});
|
|
560
|
+
try {
|
|
561
|
+
return await Promise.race([
|
|
562
|
+
pending,
|
|
563
|
+
timeout
|
|
564
|
+
]);
|
|
565
|
+
} catch (error) {
|
|
566
|
+
void pending.then((client) => {
|
|
567
|
+
void client.close().catch(() => void 0);
|
|
568
|
+
}, () => void 0);
|
|
569
|
+
throw error;
|
|
570
|
+
} finally {
|
|
571
|
+
if (timer) {
|
|
572
|
+
clearTimeout(timer);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
}
|
|
545
576
|
async connect() {
|
|
546
577
|
if (this.connected && this.client) {
|
|
547
578
|
return;
|
|
@@ -623,7 +654,7 @@ var ValkeyGlideProvider = class {
|
|
|
623
654
|
if (!GlideClusterClient) {
|
|
624
655
|
throw new Error("Valkey GLIDE cluster client is unavailable");
|
|
625
656
|
}
|
|
626
|
-
this.client = await GlideClusterClient.createClient({
|
|
657
|
+
this.client = await this.withConnectBudget(GlideClusterClient.createClient({
|
|
627
658
|
...baseClientConfig,
|
|
628
659
|
periodicChecks: {
|
|
629
660
|
duration_in_sec: 30
|
|
@@ -631,16 +662,16 @@ var ValkeyGlideProvider = class {
|
|
|
631
662
|
advancedConfiguration: {
|
|
632
663
|
refreshTopologyFromInitialNodes: true
|
|
633
664
|
}
|
|
634
|
-
});
|
|
665
|
+
}));
|
|
635
666
|
this.clientIsCluster = true;
|
|
636
667
|
} else {
|
|
637
|
-
const standaloneClient = await GlideClient.createClient(baseClientConfig);
|
|
668
|
+
const standaloneClient = await this.withConnectBudget(GlideClient.createClient(baseClientConfig));
|
|
638
669
|
if (this.config.cluster !== false && await this.serverReportsCluster(standaloneClient)) {
|
|
639
670
|
if (!GlideClusterClient) {
|
|
640
671
|
throw new Error("Valkey server is clustered but GLIDE cluster client is unavailable");
|
|
641
672
|
}
|
|
642
673
|
await standaloneClient.close();
|
|
643
|
-
this.client = await GlideClusterClient.createClient({
|
|
674
|
+
this.client = await this.withConnectBudget(GlideClusterClient.createClient({
|
|
644
675
|
...baseClientConfig,
|
|
645
676
|
periodicChecks: {
|
|
646
677
|
duration_in_sec: 30
|
|
@@ -648,7 +679,7 @@ var ValkeyGlideProvider = class {
|
|
|
648
679
|
advancedConfiguration: {
|
|
649
680
|
refreshTopologyFromInitialNodes: true
|
|
650
681
|
}
|
|
651
|
-
});
|
|
682
|
+
}));
|
|
652
683
|
this.clientIsCluster = true;
|
|
653
684
|
} else {
|
|
654
685
|
this.client = standaloneClient;
|
|
@@ -1249,7 +1280,15 @@ var CacheFactory = class _CacheFactory {
|
|
|
1249
1280
|
const type = envType === "memory" ? "memory" : "valkey";
|
|
1250
1281
|
const config = type === "valkey" ? {
|
|
1251
1282
|
type: "valkey",
|
|
1252
|
-
|
|
1283
|
+
// Fall back to REDIS_URL when VALKEY_URL is unset/empty. Prod KV
|
|
1284
|
+
// provisioning populates the canonical REDIS_URL (a `rediss://…`
|
|
1285
|
+
// Azure Managed Redis string) for every service but has, for some
|
|
1286
|
+
// services, left VALKEY_URL blank. Without this fallback the cache
|
|
1287
|
+
// silently connected to localhost:6379 — a connect that hangs on
|
|
1288
|
+
// GLIDE's reconnect backoff long enough to starve the event loop and
|
|
1289
|
+
// saturate the pg pool (10s "connect timeout" 500s). This mirrors the
|
|
1290
|
+
// precedence already used by gateway/security/valkey.ts.
|
|
1291
|
+
url: process.env["VALKEY_URL"] || process.env["REDIS_URL"],
|
|
1253
1292
|
host: process.env["VALKEY_HOST"] || "localhost",
|
|
1254
1293
|
port: process.env["VALKEY_PORT"] ? parseInt(process.env["VALKEY_PORT"], 10) : 6379,
|
|
1255
1294
|
password: process.env["VALKEY_PASSWORD"],
|
|
@@ -1329,7 +1368,7 @@ var CacheFactory = class _CacheFactory {
|
|
|
1329
1368
|
static createCacheForLayer(layer, serviceName, namespace = "default") {
|
|
1330
1369
|
const envPrefix = layer.toUpperCase();
|
|
1331
1370
|
const defaults = DEFAULT_LAYER_RESOURCES[layer];
|
|
1332
|
-
const url = process.env[`${envPrefix}_VALKEY_URL`] || process.env["VALKEY_URL"] || defaults.valkeyUrl;
|
|
1371
|
+
const url = process.env[`${envPrefix}_VALKEY_URL`] || process.env["VALKEY_URL"] || process.env["REDIS_URL"] || defaults.valkeyUrl;
|
|
1333
1372
|
const resolvedPort = _CacheFactory.resolvePort(process.env[`${envPrefix}_VALKEY_PORT`], process.env["VALKEY_PORT"]);
|
|
1334
1373
|
const config = {
|
|
1335
1374
|
type: "valkey",
|
|
@@ -1397,7 +1436,8 @@ async function getValkeyClient(config) {
|
|
|
1397
1436
|
const GlideClient = glideModule.GlideClient || glideModule.default;
|
|
1398
1437
|
const valkeyConfig = config || {
|
|
1399
1438
|
type: CacheProviderType.VALKEY,
|
|
1400
|
-
|
|
1439
|
+
// Fall back to REDIS_URL when VALKEY_URL is unset/empty (see CacheFactory).
|
|
1440
|
+
url: process.env["VALKEY_URL"] || process.env["REDIS_URL"],
|
|
1401
1441
|
host: process.env["VALKEY_HOST"] || "localhost",
|
|
1402
1442
|
port: process.env["VALKEY_PORT"] ? parseInt(process.env["VALKEY_PORT"], 10) : 6379,
|
|
1403
1443
|
password: process.env["VALKEY_PASSWORD"],
|
|
@@ -1435,5 +1475,5 @@ async function closeAllCaches() {
|
|
|
1435
1475
|
__name(closeAllCaches, "closeAllCaches");
|
|
1436
1476
|
|
|
1437
1477
|
export { CacheFactory, CacheProviderType, MemoryCacheProvider, ValkeyGlideProvider, cache_exports, closeAllCaches, createCache, getCache, getValkeyClient };
|
|
1438
|
-
//# sourceMappingURL=chunk-
|
|
1439
|
-
//# sourceMappingURL=chunk-
|
|
1478
|
+
//# sourceMappingURL=chunk-CAI5GJJ6.js.map
|
|
1479
|
+
//# sourceMappingURL=chunk-CAI5GJJ6.js.map
|