@burdenoff/be-sdk 2026.512.2 → 2026.512.99

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.
Files changed (89) hide show
  1. package/dist/EventQueueFactory-6NMSGECR.js +8 -0
  2. package/dist/{EventQueueFactory-YGCOETTR.js.map → EventQueueFactory-6NMSGECR.js.map} +1 -1
  3. package/dist/auth/index.d.ts +2 -2
  4. package/dist/auth/index.js +2 -2
  5. package/dist/cache/index.js +1 -1
  6. package/dist/{chunk-342WTZ4B.js → chunk-2SD5L2F2.js} +3 -3
  7. package/dist/{chunk-342WTZ4B.js.map → chunk-2SD5L2F2.js.map} +1 -1
  8. package/dist/{chunk-YOLJ6ONY.js → chunk-3O2RQOPV.js} +4 -12
  9. package/dist/chunk-3O2RQOPV.js.map +1 -0
  10. package/dist/{chunk-RUGNI7CR.js → chunk-ELLX3K54.js} +3 -3
  11. package/dist/{chunk-RUGNI7CR.js.map → chunk-ELLX3K54.js.map} +1 -1
  12. package/dist/{chunk-THTLTTA6.js → chunk-F5XEAGHQ.js} +4 -4
  13. package/dist/{chunk-THTLTTA6.js.map → chunk-F5XEAGHQ.js.map} +1 -1
  14. package/dist/{chunk-4B43DZIS.js → chunk-FEPHVLZ5.js} +3 -3
  15. package/dist/{chunk-4B43DZIS.js.map → chunk-FEPHVLZ5.js.map} +1 -1
  16. package/dist/{chunk-MLW2HPS5.js → chunk-IPYA5X67.js} +2 -2
  17. package/dist/{chunk-MLW2HPS5.js.map → chunk-IPYA5X67.js.map} +1 -1
  18. package/dist/{chunk-ER77ZA7C.js → chunk-J26YGR2U.js} +3 -3
  19. package/dist/{chunk-ER77ZA7C.js.map → chunk-J26YGR2U.js.map} +1 -1
  20. package/dist/{chunk-5CAA3JST.js → chunk-JG2FTZPI.js} +3 -3
  21. package/dist/{chunk-5CAA3JST.js.map → chunk-JG2FTZPI.js.map} +1 -1
  22. package/dist/{chunk-VOFKF27Q.js → chunk-L7ZMN2FJ.js} +2 -2
  23. package/dist/chunk-L7ZMN2FJ.js.map +1 -0
  24. package/dist/{chunk-QTSPQQWA.js → chunk-M5IMU3US.js} +5 -5
  25. package/dist/{chunk-QTSPQQWA.js.map → chunk-M5IMU3US.js.map} +1 -1
  26. package/dist/{chunk-KFPP47FP.js → chunk-MNCGUYLJ.js} +3 -6
  27. package/dist/chunk-MNCGUYLJ.js.map +1 -0
  28. package/dist/{chunk-ZTSNNKI3.js → chunk-NIEEQWFB.js} +6 -12
  29. package/dist/chunk-NIEEQWFB.js.map +1 -0
  30. package/dist/{chunk-4XGGWW36.js → chunk-NKA7EWZC.js} +18 -3
  31. package/dist/chunk-NKA7EWZC.js.map +1 -0
  32. package/dist/{chunk-FNZEQOJY.js → chunk-NUWVGPWO.js} +3 -3
  33. package/dist/{chunk-FNZEQOJY.js.map → chunk-NUWVGPWO.js.map} +1 -1
  34. package/dist/{chunk-VX35BOJP.js → chunk-OVSYMNCI.js} +12 -35
  35. package/dist/chunk-OVSYMNCI.js.map +1 -0
  36. package/dist/{chunk-RTQIRGVB.js → chunk-SAG6ZYWQ.js} +2 -2
  37. package/dist/{chunk-RTQIRGVB.js.map → chunk-SAG6ZYWQ.js.map} +1 -1
  38. package/dist/{chunk-WBWM7UY7.js → chunk-SAK2JCA7.js} +3 -3
  39. package/dist/{chunk-WBWM7UY7.js.map → chunk-SAK2JCA7.js.map} +1 -1
  40. package/dist/{chunk-I43B35CP.js → chunk-XC2YD6CF.js} +3 -3
  41. package/dist/{chunk-I43B35CP.js.map → chunk-XC2YD6CF.js.map} +1 -1
  42. package/dist/{chunk-VGMFFO6N.js → chunk-YN6NTFJK.js} +5 -5
  43. package/dist/{chunk-VGMFFO6N.js.map → chunk-YN6NTFJK.js.map} +1 -1
  44. package/dist/config-UKE2E3BW.js +4 -0
  45. package/dist/{config-7U7J3QXQ.js.map → config-UKE2E3BW.js.map} +1 -1
  46. package/dist/database/index.js +2 -2
  47. package/dist/event-queue/index.d.ts +3 -3
  48. package/dist/event-queue/index.js +5 -5
  49. package/dist/export/index.js +3 -3
  50. package/dist/gateway/index.js +2 -2
  51. package/dist/gateway/security/index.js +1 -1
  52. package/dist/graph/index.d.ts +3 -3
  53. package/dist/graph/index.js +7 -7
  54. package/dist/graphql/index.d.ts +1 -1
  55. package/dist/graphql/index.js +2 -2
  56. package/dist/{graphql-0_hoaeUf.d.ts → graphql-BAVrUgBF.d.ts} +1 -1
  57. package/dist/{index-HkD7NBED.d.ts → index-B18rrFru.d.ts} +0 -2
  58. package/dist/{index-DZO2nvC9.d.ts → index-BS2idbnr.d.ts} +2 -2
  59. package/dist/{index-CSPbpywb.d.ts → index-CHbVw5M7.d.ts} +0 -2
  60. package/dist/{index-BF2uh_h9.d.ts → index-Cq_xNjcv.d.ts} +2 -4
  61. package/dist/{index-DYEts1R8.d.ts → index-CrQgidpx.d.ts} +1 -1
  62. package/dist/{index-zzKCairW.d.ts → index-CyVEg86m.d.ts} +2 -2
  63. package/dist/{index-XY9x2I6b.d.ts → index-DOcBnmMe.d.ts} +0 -2
  64. package/dist/{index-TKcu5LDR.d.ts → index-DoK0bjhH.d.ts} +1 -1
  65. package/dist/{index-DJq060D-.d.ts → index-KVWGHMbS.d.ts} +3 -3
  66. package/dist/index.d.ts +15 -15
  67. package/dist/index.js +26 -28
  68. package/dist/index.js.map +1 -1
  69. package/dist/init/index.d.ts +1 -1
  70. package/dist/init/index.js +6 -6
  71. package/dist/instrumentation/index.d.ts +3 -3
  72. package/dist/logger/index.d.ts +2 -2
  73. package/dist/notifications/index.d.ts +3 -3
  74. package/dist/notifications/index.js +2 -2
  75. package/dist/prisma/index.js +5 -5
  76. package/dist/rbac/index.d.ts +2 -2
  77. package/dist/rbac/index.js +2 -2
  78. package/dist/telemetry/index.d.ts +4 -4
  79. package/dist/tracker/index.d.ts +4 -4
  80. package/dist/tracker/index.js +4 -4
  81. package/package.json +1 -1
  82. package/dist/EventQueueFactory-YGCOETTR.js +0 -8
  83. package/dist/chunk-4XGGWW36.js.map +0 -1
  84. package/dist/chunk-KFPP47FP.js.map +0 -1
  85. package/dist/chunk-VOFKF27Q.js.map +0 -1
  86. package/dist/chunk-VX35BOJP.js.map +0 -1
  87. package/dist/chunk-YOLJ6ONY.js.map +0 -1
  88. package/dist/chunk-ZTSNNKI3.js.map +0 -1
  89. package/dist/config-7U7J3QXQ.js +0 -4
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/event-queue/implementations/nats/trace-context.ts","../src/event-queue/implementations/nats/NatsEventConsumer.ts","../src/event-queue/implementations/nats/NatsEventPublisher.ts","../src/event-queue/factory/EventQueueFactory.ts"],"names":["otelApiPromise","loadOtelApi","mod","logger","debug","setter","set","carrier","key","value","getter","get","keys","Object","injectW3CTraceContext","hdrs","api","propagation","inject","context","active","entries","err","error","Error","message","String","extractW3CTraceContext","undefined","extract","runWithConsumerSpan","subject","handler","parentCtx","tracer","trace","getTracer","Promise","resolve","reject","startActiveSpan","kind","attributes","span","result","setStatus","code","end","recordException","NatsSubscription","stats","messagesReceived","messagesProcessed","messagesFailed","lastActivity","Date","toISOString","id","stopFn","unsubscribe","isActive","getStats","incrementReceived","incrementProcessed","incrementFailed","NatsEventConsumer","connectionManager","subscriptions","Map","config","baseConfig","type","url","user","password","token","maxReconnectAttempts","reconnectTimeWait","connectionTimeout","name","NatsConnectionManager","connect","disconnect","unsubscribeAll","isConnected","healthCheck","status","timestamp","connected","details","activeSubscriptions","size","getStatistics","totalReceived","totalProcessed","totalFailed","subscription","values","messagesPublished","messagesConsumed","activeConsumers","activePublishers","queueSize","ensureStream","jsm","getJetStreamManager","streams","info","stream","streamConfig","subjects","retention","mapRetentionPolicy","storage","mapStorageType","max_consumers","maxConsumers","max_msgs","maxMsgs","max_bytes","maxBytes","max_age","maxAge","duplicate_window","duplicateWindow","add","ensureConsumer","consumers","consumer","durable_name","filter_subject","filterSubject","ack_policy","mapAckPolicy","ackPolicy","deliver_policy","mapDeliverPolicy","deliverPolicy","max_deliver","maxDeliver","ack_wait","ackWait","max_ack_pending","maxAckPending","includes","deriveStreamSubjects","firstSegment","split","replace","subscribe","options","js","getJetStream","streamName","consumerName","streamSubjects","subscriptionId","now","crypto","randomUUID","substring","stopRequested","consumeMessages","maxConcurrent","catch","subscribeMultiple","push","pull","messages","fetch","max_messages","batch","expires","timeout","events","msg","event","wrapMessage","unsubscribePromises","Array","from","map","all","clear","getSubscriptions","processDLQ","_handler","warn","listSubjects","consume","headers","nak","eventMessage","JSON","parse","data","toString","sequence","seq","ack","delay","term","isRedelivered","redelivered","getDeliveryAttempt","deliveryCount","policy","toLowerCase","RetentionPolicy","Limits","Interest","Workqueue","StorageType","Memory","File","AckPolicy","None","All","Explicit","DeliverPolicy","New","Last","LastPerSubject","NatsEventPublisher","publishCount","lastPublishTime","list","next","streamCount","length","deriveStreamName","toUpperCase","publish","messageId","generateMessageId","metadata","source","correlationId","generateCorrelationId","userId","workspaceId","priority","defaultPriority","publishOpts","msgID","enableDeduplication","ttl","stringify","publishBatch","results","publishWithAck","nc","getNatsConnection","response","request","EventQueueFactory","createPublisher","QueueType","NATS","createConsumer","createPublisherFromEnv","process","env","parseInt","defaultTTL","createConsumerFromEnv","createPublisherForLayer","layer","serviceName","envPrefix","defaults","DEFAULT_LAYER_RESOURCES","natsUrl","createConsumerForLayer"],"mappings":"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","file":"chunk-3O2RQOPV.js","sourcesContent":["/**\n * W3C trace context injection/extraction for NATS headers.\n *\n * Uses `@opentelemetry/api` when available to read/write `traceparent`,\n * `tracestate`, and `baggage` headers. When the API module isn't installed\n * (optional peer dep), these helpers are no-ops so NATS continues to work.\n */\nimport { logger } from '../../../logger/index.js';\nimport type { MsgHdrs } from 'nats';\n\ntype OtelApi = {\n propagation: {\n inject: (\n ctx: unknown,\n carrier: Record<string, string>,\n setter: { set: (c: Record<string, string>, k: string, v: string) => void }\n ) => void;\n extract: (\n ctx: unknown,\n carrier: Record<string, string>,\n getter: {\n get: (c: Record<string, string>, k: string) => string | undefined;\n keys: (c: Record<string, string>) => string[];\n }\n ) => unknown;\n };\n context: { active: () => unknown; with: <T>(ctx: unknown, fn: () => T) => T };\n trace: { getTracer: (name: string, version?: string) => { startActiveSpan: (...args: unknown[]) => unknown } };\n};\n\nlet otelApiPromise: Promise<OtelApi | null> | null = null;\n\nasync function loadOtelApi(): Promise<OtelApi | null> {\n if (otelApiPromise) {\n return otelApiPromise;\n }\n otelApiPromise = (async () => {\n try {\n // Dynamic import so services without OTel installed still work.\n const mod = (await import('@opentelemetry/api')) as unknown as OtelApi;\n return mod;\n } catch {\n logger.debug('[trace-context] @opentelemetry/api not available; NATS traces disabled');\n return null;\n }\n })();\n return otelApiPromise;\n}\n\nconst setter = {\n set(carrier: Record<string, string>, key: string, value: string): void {\n carrier[key] = value;\n },\n};\n\nconst getter = {\n get(carrier: Record<string, string>, key: string): string | undefined {\n return carrier[key];\n },\n keys(carrier: Record<string, string>): string[] {\n return Object.keys(carrier);\n },\n};\n\n/**\n * Inject the active W3C trace context into the given NATS headers.\n * Adds `traceparent`, `tracestate`, and `baggage` when present in the\n * active context.\n */\nexport async function injectW3CTraceContext(hdrs: MsgHdrs): Promise<void> {\n const api = await loadOtelApi();\n if (!api) return;\n try {\n const carrier: Record<string, string> = {};\n api.propagation.inject(api.context.active(), carrier, setter);\n for (const [key, value] of Object.entries(carrier)) {\n if (value) hdrs.set(key, value);\n }\n } catch (err) {\n logger.debug('[trace-context] injection failed', {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n}\n\n/**\n * Extract a W3C trace context from the given NATS headers and return the\n * resulting OTel context. Callers wrap their handler in `context.with(...)`\n * to stitch parent spans.\n */\nexport async function extractW3CTraceContext(hdrs: MsgHdrs | undefined): Promise<unknown> {\n const api = await loadOtelApi();\n if (!api || !hdrs) return undefined;\n try {\n const carrier: Record<string, string> = {};\n for (const key of ['traceparent', 'tracestate', 'baggage']) {\n const value = hdrs.get(key);\n if (value) carrier[key] = value;\n }\n return api.propagation.extract(api.context.active(), carrier, getter);\n } catch (err) {\n logger.debug('[trace-context] extraction failed', {\n error: err instanceof Error ? err.message : String(err),\n });\n return undefined;\n }\n}\n\n/**\n * Wrap a NATS consumer handler in a CONSUMER-kind span rooted at the\n * extracted W3C context. If OTel isn't available, the handler runs\n * directly. Errors are recorded on the span and re-thrown so ack/nak\n * semantics are preserved by the caller.\n */\nexport async function runWithConsumerSpan<T>(\n subject: string,\n hdrs: MsgHdrs | undefined,\n handler: () => Promise<T>\n): Promise<T> {\n const api = await loadOtelApi();\n if (!api) return handler();\n try {\n const parentCtx = await extractW3CTraceContext(hdrs);\n const tracer = api.trace.getTracer('@burdenoff/be-sdk/nats');\n return await new Promise<T>((resolve, reject) => {\n tracer.startActiveSpan(\n `nats.consume ${subject}`,\n { kind: 5, attributes: { 'messaging.system': 'nats', 'messaging.destination.name': subject } },\n parentCtx,\n async (span: {\n setStatus: (status: { code: number; message?: string }) => void;\n recordException: (err: Error) => void;\n end: () => void;\n }) => {\n try {\n const result = await handler();\n span.setStatus({ code: 1 });\n span.end();\n resolve(result);\n } catch (err) {\n span.recordException(err as Error);\n span.setStatus({ code: 2, message: err instanceof Error ? err.message : String(err) });\n span.end();\n reject(err);\n }\n }\n );\n });\n } catch (err) {\n logger.debug('[trace-context] consumer span failed to start; running without span', {\n error: err instanceof Error ? err.message : String(err),\n });\n return handler();\n }\n}\n","/**\n * NATS Event Consumer Implementation\n * Implements IEventConsumer interface for NATS JetStream\n */\nimport { logger } from '../../../logger/index.js';\nimport { runWithConsumerSpan } from './trace-context.js';\nimport {\n AckPolicy,\n type Consumer,\n DeliverPolicy,\n type JsMsg,\n type StreamConfig as NatsStreamConfig,\n RetentionPolicy,\n StorageType,\n} from 'nats';\n\nimport type { IEventConsumer, ISubscription } from '../../interfaces/IEventConsumer.js';\nimport type {\n AcknowledgeableEvent,\n ConsumerConfig,\n EventHandler,\n EventMessage,\n EventQueueHealthCheckResult,\n QueueStatistics,\n StreamConfig,\n SubscriptionOptions,\n} from '../../types/index.js';\nimport { NatsConnectionManager } from './NatsConnection.js';\n\n/**\n * NATS Subscription Implementation\n */\nclass NatsSubscription implements ISubscription {\n private active: boolean = true;\n private stats = {\n messagesReceived: 0,\n messagesProcessed: 0,\n messagesFailed: 0,\n lastActivity: new Date().toISOString(),\n };\n\n constructor(\n public readonly id: string,\n public readonly subject: string,\n private stopFn: () => void\n ) {}\n\n async unsubscribe(): Promise<void> {\n if (!this.active) {\n return Promise.resolve();\n }\n this.active = false;\n this.stopFn();\n return Promise.resolve();\n }\n\n isActive(): boolean {\n return this.active;\n }\n\n getStats(): {\n messagesReceived: number;\n messagesProcessed: number;\n messagesFailed: number;\n lastActivity: string;\n } {\n return {\n messagesReceived: this.stats.messagesReceived,\n messagesProcessed: this.stats.messagesProcessed,\n messagesFailed: this.stats.messagesFailed,\n lastActivity: this.stats.lastActivity,\n };\n }\n\n incrementReceived(): void {\n this.stats.messagesReceived++;\n this.stats.lastActivity = new Date().toISOString();\n }\n\n incrementProcessed(): void {\n this.stats.messagesProcessed++;\n this.stats.lastActivity = new Date().toISOString();\n }\n\n incrementFailed(): void {\n this.stats.messagesFailed++;\n this.stats.lastActivity = new Date().toISOString();\n }\n}\n\n/**\n * NATS implementation of IEventConsumer\n */\nexport class NatsEventConsumer implements IEventConsumer {\n private connectionManager: NatsConnectionManager;\n private subscriptions: Map<string, NatsSubscription> = new Map();\n\n constructor(private config: ConsumerConfig) {\n // Create base config for connection manager\n const baseConfig = {\n type: config.type || 'nats',\n url: config.url || 'nats://localhost:4222',\n user: config.user,\n password: config.password,\n token: config.token,\n maxReconnectAttempts: config.maxReconnectAttempts,\n reconnectTimeWait: config.reconnectTimeWait,\n connectionTimeout: config.connectionTimeout,\n name: config.name,\n };\n this.connectionManager = new NatsConnectionManager(baseConfig);\n }\n\n /**\n * Connect to NATS server\n */\n async connect(): Promise<void> {\n await this.connectionManager.connect();\n }\n\n /**\n * Disconnect from NATS server\n */\n async disconnect(): Promise<void> {\n await this.unsubscribeAll();\n await this.connectionManager.disconnect();\n }\n\n /**\n * Check if connected\n */\n isConnected(): boolean {\n return this.connectionManager.isConnected();\n }\n\n /**\n * Health check\n */\n async healthCheck(): Promise<EventQueueHealthCheckResult> {\n await Promise.resolve();\n const isConnected = this.isConnected();\n\n return {\n status: isConnected ? 'healthy' : 'unhealthy',\n timestamp: new Date().toISOString(),\n connected: isConnected,\n details: {\n type: 'nats',\n url: this.config.url,\n activeSubscriptions: this.subscriptions.size,\n },\n };\n }\n\n /**\n * Get queue statistics\n */\n async getStatistics(): Promise<QueueStatistics> {\n await Promise.resolve();\n let totalReceived = 0;\n let totalProcessed = 0;\n let totalFailed = 0;\n let lastActivity: string | null = null;\n\n for (const subscription of this.subscriptions.values()) {\n const stats = subscription.getStats();\n totalReceived += stats.messagesReceived;\n totalProcessed += stats.messagesProcessed;\n totalFailed += stats.messagesFailed;\n\n if (stats.lastActivity && (!lastActivity || stats.lastActivity > lastActivity)) {\n lastActivity = stats.lastActivity;\n }\n }\n\n return {\n messagesPublished: 0, // Consumer doesn't track publishing\n messagesConsumed: totalProcessed,\n messagesFailed: totalFailed,\n activeConsumers: this.subscriptions.size,\n activePublishers: 0,\n queueSize: 0,\n lastActivity: lastActivity,\n details: {\n totalReceived,\n type: 'nats',\n },\n };\n }\n\n /**\n * Ensure a stream exists\n */\n async ensureStream(config: StreamConfig): Promise<void> {\n const jsm = this.connectionManager.getJetStreamManager();\n\n try {\n // Check if stream exists\n try {\n await jsm.streams.info(config.name);\n logger.debug('[NatsEventConsumer] Stream already exists', {\n stream: config.name,\n });\n return;\n } catch {\n // Stream doesn't exist, create it\n }\n\n const streamConfig: Partial<NatsStreamConfig> = {\n name: config.name,\n subjects: config.subjects,\n retention: this.mapRetentionPolicy(config.retention),\n storage: this.mapStorageType(config.storage),\n max_consumers: config.maxConsumers,\n max_msgs: config.maxMsgs,\n max_bytes: config.maxBytes,\n max_age: config.maxAge,\n duplicate_window: config.duplicateWindow,\n };\n\n await jsm.streams.add(streamConfig);\n\n logger.info('[NatsEventConsumer] Stream created successfully', {\n stream: config.name,\n subjects: config.subjects,\n });\n } catch (error) {\n logger.error('[NatsEventConsumer] Failed to ensure stream', {\n stream: config.name,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Ensure a consumer exists\n */\n async ensureConsumer(config: ConsumerConfig): Promise<void> {\n const jsm = this.connectionManager.getJetStreamManager();\n\n try {\n await jsm.consumers.add(config.stream, {\n name: config.consumer,\n durable_name: config.consumer,\n filter_subject: config.filterSubject,\n ack_policy: this.mapAckPolicy(config.ackPolicy),\n deliver_policy: this.mapDeliverPolicy(config.deliverPolicy),\n max_deliver: config.maxDeliver || 3,\n ack_wait: config.ackWait || 30_000_000_000, // 30 seconds in nanoseconds\n max_ack_pending: config.maxAckPending || 100,\n });\n\n logger.info('[NatsEventConsumer] Consumer created successfully', {\n stream: config.stream,\n consumer: config.consumer,\n });\n } catch (error) {\n if (error instanceof Error && error.message?.includes('already exists')) {\n logger.debug('[NatsEventConsumer] Consumer already exists', {\n stream: config.stream,\n consumer: config.consumer,\n });\n } else {\n logger.error('[NatsEventConsumer] Failed to ensure consumer', {\n stream: config.stream,\n consumer: config.consumer,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n }\n\n /**\n * Derive stream subject pattern from subscription subject\n * Examples:\n * - \"channel.conversation.message\" → [\"channel.>\"]\n * - \"wspace.tags.created\" → [\"wspace.>\"]\n * - \"global.auth.login\" → [\"global.>\"]\n */\n private deriveStreamSubjects(subject: string): string[] {\n // Extract the first segment and create a wildcard pattern\n const firstSegment = subject.split('.')[0];\n if (firstSegment) {\n return [`${firstSegment}.>`];\n }\n // Fallback to the subject itself with a wildcard\n return [`${subject.replace(/\\.[^.]+$/, '.>')}`];\n }\n\n /**\n * Subscribe to a subject\n */\n async subscribe<T = unknown>(options: {\n subject: string;\n handler: EventHandler<T>;\n options?: SubscriptionOptions;\n }): Promise<ISubscription> {\n const js = this.connectionManager.getJetStream();\n\n try {\n const streamName = options.options?.stream || this.config.stream;\n const consumerName =\n options.options?.consumer || `${this.config.consumer}-${options.subject.replace(/\\./g, '-')}`;\n\n // Auto-create stream if it doesn't exist\n // Derive subjects from the subscription subject pattern\n const streamSubjects = options.options?.streamSubjects || this.deriveStreamSubjects(options.subject);\n await this.ensureStream({\n name: streamName,\n subjects: streamSubjects,\n retention: options.options?.retention || 'limits',\n storage: options.options?.storage || 'file',\n });\n\n // Ensure consumer exists\n await this.ensureConsumer({\n type: this.config.type,\n url: this.config.url,\n consumer: consumerName,\n stream: streamName,\n filterSubject: options.subject,\n ackPolicy: options.options?.ackPolicy,\n deliverPolicy: options.options?.deliverPolicy,\n maxDeliver: options.options?.maxDeliver || this.config.maxDeliver,\n ackWait: options.options?.ackWait || this.config.ackWait,\n maxAckPending: options.options?.maxAckPending,\n });\n\n // Get consumer\n const consumer = await js.consumers.get(streamName, consumerName);\n\n const subscriptionId = `sub_${Date.now()}_${crypto.randomUUID().substring(0, 7)}`;\n let stopRequested = false;\n\n // Create subscription\n const stopFn = (): void => {\n stopRequested = true;\n };\n\n const subscription = new NatsSubscription(subscriptionId, options.subject, stopFn);\n\n this.subscriptions.set(subscriptionId, subscription);\n\n // Start consuming messages\n this.consumeMessages(\n consumer,\n subscription,\n options.handler,\n options.options?.maxConcurrent || this.config.maxConcurrent || 1,\n () => stopRequested\n ).catch((error) => {\n logger.error('[NatsEventConsumer] Error in message consumption loop', {\n subject: options.subject,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n });\n\n logger.info('[NatsEventConsumer] Subscription created', {\n subscriptionId,\n subject: options.subject,\n });\n\n return subscription;\n } catch (error) {\n logger.error('[NatsEventConsumer] Failed to subscribe', {\n subject: options.subject,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Subscribe to multiple subjects\n */\n async subscribeMultiple<T = unknown>(\n subjects: string[],\n handler: EventHandler<T>,\n options?: SubscriptionOptions\n ): Promise<ISubscription[]> {\n const subscriptions: ISubscription[] = [];\n\n for (const subject of subjects) {\n const subscription = await this.subscribe({\n subject,\n handler,\n options,\n });\n subscriptions.push(subscription);\n }\n\n return subscriptions;\n }\n\n /**\n * Pull messages manually\n */\n async pull<T = unknown>(options: {\n subject: string;\n batch?: number;\n timeout?: number;\n }): Promise<AcknowledgeableEvent<T>[]> {\n const js = this.connectionManager.getJetStream();\n\n try {\n const consumer = await js.consumers.get(this.config.stream, this.config.consumer);\n\n const messages = await consumer.fetch({\n max_messages: options.batch || 10,\n expires: options.timeout || 30000,\n });\n\n const events: AcknowledgeableEvent<T>[] = [];\n\n for await (const msg of messages) {\n const event = this.wrapMessage<T>(msg);\n events.push(event);\n }\n\n return events;\n } catch (error) {\n logger.error('[NatsEventConsumer] Failed to pull messages', {\n subject: options.subject,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Unsubscribe from all active subscriptions\n */\n async unsubscribeAll(): Promise<void> {\n const unsubscribePromises = Array.from(this.subscriptions.values()).map(async (subscription) =>\n subscription.unsubscribe()\n );\n\n await Promise.all(unsubscribePromises);\n\n this.subscriptions.clear();\n\n logger.info('[NatsEventConsumer] All subscriptions unsubscribed');\n }\n\n /**\n * Get all active subscriptions\n */\n getSubscriptions(): ISubscription[] {\n return Array.from(this.subscriptions.values());\n }\n\n /**\n * Process pending messages in dead letter queue\n */\n async processDLQ<T = unknown>(_handler: EventHandler<T>): Promise<void> {\n await Promise.resolve();\n // Would need to implement DLQ stream pattern\n logger.warn('[NatsEventConsumer] DLQ processing not yet implemented');\n }\n\n /**\n * List subjects for the configured stream\n */\n async listSubjects(streamName?: string): Promise<string[]> {\n const jsm = this.connectionManager.getJetStreamManager();\n const info = await jsm.streams.info(streamName || this.config.stream);\n return info.config.subjects || [];\n }\n\n /**\n * Consume messages from consumer\n */\n private async consumeMessages<T>(\n consumer: Consumer,\n subscription: NatsSubscription,\n handler: EventHandler<T>,\n maxConcurrent: number,\n stopRequested: () => boolean\n ): Promise<void> {\n try {\n const messages = await consumer.consume({\n max_messages: maxConcurrent,\n expires: 30000, // 30 seconds\n });\n\n for await (const msg of messages) {\n if (stopRequested()) {\n break;\n }\n\n subscription.incrementReceived();\n\n try {\n const event = this.wrapMessage<T>(msg);\n // Wrap in a CONSUMER-kind span rooted at the producer's trace\n // context (if present in headers). No-op when OTel isn't installed.\n await runWithConsumerSpan(msg.subject, msg.headers, async () => handler(event));\n subscription.incrementProcessed();\n } catch (error) {\n subscription.incrementFailed();\n logger.error('[NatsEventConsumer] Error processing message', {\n subject: msg.subject,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n // Don't ack - let it retry\n msg.nak();\n }\n }\n } catch (error) {\n logger.error('[NatsEventConsumer] Error consuming messages', {\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n }\n }\n\n /**\n * Wrap NATS message in AcknowledgeableEvent\n */\n private wrapMessage<T>(msg: JsMsg): AcknowledgeableEvent<T> {\n const eventMessage: EventMessage<T> = JSON.parse(msg.data.toString());\n\n return {\n ...eventMessage,\n sequence: msg.seq,\n ack: async (): Promise<void> => {\n await Promise.resolve();\n msg.ack();\n },\n nak: async (delay?: number): Promise<void> => {\n await Promise.resolve();\n if (delay) {\n msg.nak(delay);\n } else {\n msg.nak();\n }\n },\n term: async (): Promise<void> => {\n await Promise.resolve();\n msg.term();\n },\n isRedelivered: (): boolean => {\n return msg.redelivered;\n },\n getDeliveryAttempt: (): number => {\n return msg.info.deliveryCount;\n },\n };\n }\n\n /**\n * Map retention policy string to NATS enum\n */\n private mapRetentionPolicy(policy?: string): RetentionPolicy {\n switch (policy?.toLowerCase()) {\n case 'limits':\n return RetentionPolicy.Limits;\n case 'interest':\n return RetentionPolicy.Interest;\n case 'workqueue':\n default:\n return RetentionPolicy.Workqueue;\n }\n }\n\n /**\n * Map storage type string to NATS enum\n */\n private mapStorageType(storage?: string): StorageType {\n switch (storage?.toLowerCase()) {\n case 'memory':\n return StorageType.Memory;\n case 'file':\n default:\n return StorageType.File;\n }\n }\n\n /**\n * Map ack policy string to NATS enum\n */\n private mapAckPolicy(policy?: string): AckPolicy {\n switch (policy?.toLowerCase()) {\n case 'none':\n return AckPolicy.None;\n case 'all':\n return AckPolicy.All;\n case 'explicit':\n default:\n return AckPolicy.Explicit;\n }\n }\n\n /**\n * Map deliver policy string to NATS enum\n */\n private mapDeliverPolicy(policy?: string): DeliverPolicy {\n switch (policy?.toLowerCase()) {\n case 'new':\n return DeliverPolicy.New;\n case 'last':\n return DeliverPolicy.Last;\n case 'lastpersubject':\n return DeliverPolicy.LastPerSubject;\n case 'all':\n default:\n return DeliverPolicy.All;\n }\n }\n}\n","/**\n * NATS Event Publisher Implementation\n * Implements IEventPublisher interface for NATS JetStream\n */\nimport { logger } from '../../../logger/index.js';\nimport { injectW3CTraceContext } from './trace-context.js';\nimport { type StreamConfig as NatsStreamConfig, RetentionPolicy, StorageType, headers } from 'nats';\n\nimport type { IEventPublisher, PublishOptions } from '../../interfaces/IEventPublisher.js';\nimport type { PublisherConfig } from '../../types/config.js';\nimport type {\n EventMessage,\n EventMetadata,\n EventQueueHealthCheckResult,\n QueueStatistics,\n StreamConfig,\n} from '../../types/index.js';\nimport { NatsConnectionManager } from './NatsConnection.js';\n\n/**\n * NATS implementation of IEventPublisher\n */\nexport class NatsEventPublisher implements IEventPublisher {\n private connectionManager: NatsConnectionManager;\n private publishCount: number = 0;\n private lastPublishTime: Date | null = null;\n\n constructor(private config: PublisherConfig) {\n this.connectionManager = new NatsConnectionManager(config);\n }\n\n /**\n * Connect to NATS server\n */\n async connect(): Promise<void> {\n await this.connectionManager.connect();\n }\n\n /**\n * Disconnect from NATS server\n */\n async disconnect(): Promise<void> {\n await this.connectionManager.disconnect();\n }\n\n /**\n * Check if connected\n */\n isConnected(): boolean {\n return this.connectionManager.isConnected();\n }\n\n /**\n * Health check\n */\n async healthCheck(): Promise<EventQueueHealthCheckResult> {\n await Promise.resolve();\n const isConnected = this.isConnected();\n\n return {\n status: isConnected ? 'healthy' : 'unhealthy',\n timestamp: new Date().toISOString(),\n details: {\n connected: isConnected,\n type: 'nats',\n url: this.config.url,\n },\n };\n }\n\n /**\n * Get queue statistics\n */\n async getStatistics(): Promise<QueueStatistics> {\n const jsm = this.connectionManager.getJetStreamManager();\n\n try {\n const streams = await jsm.streams.list().next();\n const streamCount = streams.length;\n\n return {\n messagesPublished: this.publishCount,\n messagesConsumed: 0, // Publisher doesn't track consumption\n messagesFailed: 0,\n activeConsumers: 0,\n activePublishers: 1,\n queueSize: 0, // Would need to sum all stream messages\n lastActivity: this.lastPublishTime?.toISOString() || null,\n details: {\n streamCount,\n type: 'nats',\n },\n };\n } catch (error) {\n logger.error('[NatsEventPublisher] Failed to get statistics', {\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Ensure a stream exists\n */\n async ensureStream(config: StreamConfig): Promise<void> {\n const jsm = this.connectionManager.getJetStreamManager();\n\n try {\n // Check if stream exists\n try {\n await jsm.streams.info(config.name);\n logger.debug('[NatsEventPublisher] Stream already exists', {\n stream: config.name,\n });\n return;\n } catch {\n // Stream doesn't exist, create it\n }\n\n const streamConfig: Partial<NatsStreamConfig> = {\n name: config.name,\n subjects: config.subjects,\n retention: this.mapRetentionPolicy(config.retention),\n storage: this.mapStorageType(config.storage),\n max_consumers: config.maxConsumers,\n max_msgs: config.maxMsgs,\n max_bytes: config.maxBytes,\n max_age: config.maxAge,\n duplicate_window: config.duplicateWindow,\n };\n\n await jsm.streams.add(streamConfig);\n\n logger.info('[NatsEventPublisher] Stream created successfully', {\n stream: config.name,\n subjects: config.subjects,\n });\n } catch (error) {\n logger.error('[NatsEventPublisher] Failed to ensure stream', {\n stream: config.name,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Derive stream subject pattern from subscription subject\n * Examples:\n * - \"channel.conversation.message\" → [\"channel.>\"]\n * - \"wspace.tags.created\" → [\"wspace.>\"]\n * - \"global.auth.login\" → [\"global.>\"]\n */\n private deriveStreamSubjects(subject: string): string[] {\n // Extract the first segment and create a wildcard pattern\n const firstSegment = subject.split('.')[0];\n if (firstSegment) {\n return [`${firstSegment}.>`];\n }\n // Fallback to the subject itself with a wildcard\n return [`${subject.replace(/\\.[^.]+$/, '.>')}`];\n }\n\n /**\n * Derive stream name from subject\n * Examples:\n * - \"channel.conversation.message\" → \"CHANNEL_EVENTS\"\n * - \"wspace.tags.created\" → \"WSPACE_EVENTS\"\n * - \"global.auth.login\" → \"GLOBAL_EVENTS\"\n */\n private deriveStreamName(subject: string): string {\n const firstSegment = subject.split('.')[0];\n if (firstSegment) {\n return `${firstSegment.toUpperCase()}_EVENTS`;\n }\n return 'EVENTS';\n }\n\n /**\n * Publish an event to a subject\n */\n async publish<T = unknown>(options: {\n subject: string;\n data: T;\n metadata?: Partial<EventMetadata>;\n options?: PublishOptions;\n }): Promise<number | string> {\n const js = this.connectionManager.getJetStream();\n\n try {\n // Auto-create stream if it doesn't exist\n const streamName = options.options?.stream || this.deriveStreamName(options.subject);\n const streamSubjects = options.options?.streamSubjects || this.deriveStreamSubjects(options.subject);\n await this.ensureStream({\n name: streamName,\n subjects: streamSubjects,\n retention: options.options?.retention || 'limits',\n storage: options.options?.storage || 'file',\n });\n\n // Create event message\n const message: EventMessage<T> = {\n id: options.options?.messageId || this.generateMessageId(),\n subject: options.subject,\n data: options.data,\n metadata: {\n source: options.metadata?.source || 'workspaces-backend',\n correlationId: options.metadata?.correlationId || this.generateCorrelationId(),\n userId: options.metadata?.userId,\n workspaceId: options.metadata?.workspaceId,\n priority: options.options?.priority || this.config.defaultPriority || 'normal',\n ...options.metadata,\n },\n timestamp: new Date().toISOString(),\n };\n\n // Create headers\n const hdrs = headers();\n hdrs.set('message-id', message.id);\n hdrs.set('correlation-id', message.metadata.correlationId);\n\n if (message.metadata.source) {\n hdrs.set('source', message.metadata.source);\n }\n if (message.metadata['priority'] && typeof message.metadata['priority'] === 'string') {\n hdrs.set('priority', message.metadata['priority']);\n }\n if (message.metadata.userId) {\n hdrs.set('user-id', message.metadata.userId);\n }\n if (message.metadata.workspaceId) {\n hdrs.set('workspace-id', message.metadata.workspaceId);\n }\n\n // Inject W3C trace context so the consumer can link its span to the\n // producer's trace. Dynamic import keeps @opentelemetry/api optional.\n await injectW3CTraceContext(hdrs);\n\n // Publish options\n const publishOpts: {\n msgID?: string;\n headers: ReturnType<typeof headers>;\n } = {\n msgID: this.config.enableDeduplication ? message.id : undefined,\n headers: hdrs,\n };\n\n // Handle TTL\n if (options.options?.ttl) {\n // NATS doesn't have per-message TTL, would need stream-level configuration\n logger.warn('[NatsEventPublisher] Per-message TTL not supported in NATS', {\n subject: options.subject,\n ttl: options.options.ttl,\n });\n }\n\n // Handle delay\n if (options.options?.delay) {\n // NATS doesn't have native delay, would need to implement with separate delayed stream\n logger.warn('[NatsEventPublisher] Message delay not supported in NATS', {\n subject: options.subject,\n delay: options.options.delay,\n });\n }\n\n // Publish message\n const ack = await js.publish(options.subject, JSON.stringify(message), publishOpts);\n\n this.publishCount++;\n this.lastPublishTime = new Date();\n\n logger.debug('[NatsEventPublisher] Event published', {\n subject: options.subject,\n messageId: message.id,\n sequence: ack.seq,\n });\n\n return ack.seq;\n } catch (error) {\n logger.error('[NatsEventPublisher] Failed to publish event', {\n subject: options.subject,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Publish multiple events in a batch\n */\n async publishBatch<T = unknown>(\n events: Array<{\n subject: string;\n data: T;\n metadata?: Partial<EventMetadata>;\n options?: PublishOptions;\n }>\n ): Promise<Array<number | string>> {\n const results: Array<number | string> = [];\n\n for (const event of events) {\n const seq = await this.publish(event);\n results.push(seq);\n }\n\n return results;\n }\n\n /**\n * Publish an event and wait for acknowledgment\n * Note: This is not natively supported by NATS JetStream\n * Would require implementing request-reply pattern\n */\n async publishWithAck<T = unknown, R = unknown>(options: {\n subject: string;\n data: T;\n metadata?: Partial<EventMetadata>;\n timeout?: number;\n }): Promise<R> {\n const nc = this.connectionManager.getNatsConnection();\n\n try {\n const message: EventMessage<T> = {\n id: this.generateMessageId(),\n subject: options.subject,\n data: options.data,\n metadata: {\n source: options.metadata?.source || 'workspaces-backend',\n correlationId: options.metadata?.correlationId || this.generateCorrelationId(),\n userId: options.metadata?.userId,\n workspaceId: options.metadata?.workspaceId,\n ...options.metadata,\n },\n timestamp: new Date().toISOString(),\n };\n\n const response = await nc.request(options.subject, JSON.stringify(message), {\n timeout: options.timeout || 30000,\n });\n\n const result = JSON.parse(response.data.toString()) as R;\n\n logger.debug('[NatsEventPublisher] Event published with ack', {\n subject: options.subject,\n messageId: message.id,\n });\n\n return result;\n } catch (error) {\n logger.error('[NatsEventPublisher] Failed to publish event with ack', {\n subject: options.subject,\n error: error instanceof Error ? error.message : 'Unknown error',\n });\n throw error;\n }\n }\n\n /**\n * Map retention policy string to NATS enum\n */\n private mapRetentionPolicy(policy?: string): RetentionPolicy {\n switch (policy?.toLowerCase()) {\n case 'limits':\n return RetentionPolicy.Limits;\n case 'interest':\n return RetentionPolicy.Interest;\n case 'workqueue':\n default:\n return RetentionPolicy.Workqueue;\n }\n }\n\n /**\n * Map storage type string to NATS enum\n */\n private mapStorageType(storage?: string): StorageType {\n switch (storage?.toLowerCase()) {\n case 'memory':\n return StorageType.Memory;\n case 'file':\n default:\n return StorageType.File;\n }\n }\n\n /**\n * Generate unique message ID\n */\n private generateMessageId(): string {\n return `msg_${Date.now()}_${crypto.randomUUID().substring(0, 13)}`;\n }\n\n /**\n * Generate correlation ID\n */\n private generateCorrelationId(): string {\n return `corr_${Date.now()}_${crypto.randomUUID().substring(0, 13)}`;\n }\n}\n","/**\n * Event Queue Factory\n * Creates appropriate event queue 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 { NatsEventConsumer } from '../implementations/nats/NatsEventConsumer.js';\nimport { NatsEventPublisher } from '../implementations/nats/NatsEventPublisher.js';\nimport type { IEventConsumer } from '../interfaces/IEventConsumer.js';\nimport type { IEventPublisher } from '../interfaces/IEventPublisher.js';\nimport { type ConsumerConfig, type PublisherConfig, QueueType } from '../types/config.js';\n\n/**\n * Factory for creating event queue instances\n */\nexport class EventQueueFactory {\n /**\n * Create an event publisher based on configuration\n */\n static createPublisher(config: PublisherConfig): IEventPublisher {\n logger.info('[EventQueueFactory] Creating event publisher', {\n type: config.type,\n url: config.url,\n });\n\n if (config.type === QueueType.NATS) {\n return new NatsEventPublisher(config);\n }\n\n // Future implementations can be added here\n // if (config.type === QueueType.RABBITMQ) {\n // return new RabbitMQEventPublisher(config);\n // }\n // if (config.type === QueueType.KAFKA) {\n // return new KafkaEventPublisher(config);\n // }\n // if (config.type === QueueType.SQS) {\n // return new SQSEventPublisher(config);\n // }\n\n throw new Error(`Unsupported queue type: ${config.type}`);\n }\n\n /**\n * Create an event consumer based on configuration\n */\n static createConsumer(config: ConsumerConfig): IEventConsumer {\n logger.info('[EventQueueFactory] Creating event consumer', {\n type: config.type,\n url: config.url,\n stream: config.stream,\n consumer: config.consumer,\n });\n\n if (config.type === QueueType.NATS) {\n return new NatsEventConsumer(config);\n }\n\n // Future implementations can be added here\n // if (config.type === QueueType.RABBITMQ) {\n // return new RabbitMQEventConsumer(config);\n // }\n // if (config.type === QueueType.KAFKA) {\n // return new KafkaEventConsumer(config);\n // }\n // if (config.type === QueueType.SQS) {\n // return new SQSEventConsumer(config);\n // }\n\n throw new Error(`Unsupported queue type: ${config.type}`);\n }\n\n /**\n * Create a publisher from environment variables\n */\n static createPublisherFromEnv(): IEventPublisher {\n const config: PublisherConfig = {\n type: (process.env['QUEUE_TYPE'] as QueueType) || QueueType.NATS,\n url: process.env['NATS_URL'] || 'nats://localhost:4222',\n user: process.env['NATS_USER'],\n password: process.env['NATS_PASSWORD'],\n token: process.env['NATS_TOKEN'],\n name: process.env['QUEUE_CLIENT_NAME'] || 'workspaces-backend-publisher',\n maxReconnectAttempts: process.env['NATS_MAX_RECONNECT_ATTEMPTS']\n ? parseInt(process.env['NATS_MAX_RECONNECT_ATTEMPTS'], 10)\n : -1,\n reconnectTimeWait: process.env['NATS_RECONNECT_TIME_WAIT']\n ? parseInt(process.env['NATS_RECONNECT_TIME_WAIT'], 10)\n : 2000,\n enableDeduplication: process.env['QUEUE_ENABLE_DEDUPLICATION'] === 'true',\n defaultPriority: (process.env['QUEUE_DEFAULT_PRIORITY'] as 'low' | 'normal' | 'high') || 'normal',\n defaultTTL: process.env['QUEUE_DEFAULT_TTL'] ? parseInt(process.env['QUEUE_DEFAULT_TTL'], 10) : undefined,\n };\n\n return EventQueueFactory.createPublisher(config);\n }\n\n /**\n * Create a consumer from environment variables\n */\n static createConsumerFromEnv(stream: string, consumer: string): IEventConsumer {\n const config: ConsumerConfig = {\n type: (process.env['QUEUE_TYPE'] as QueueType) || QueueType.NATS,\n url: process.env['NATS_URL'] || 'nats://localhost:4222',\n user: process.env['NATS_USER'],\n password: process.env['NATS_PASSWORD'],\n token: process.env['NATS_TOKEN'],\n name: process.env['QUEUE_CLIENT_NAME'] || 'workspaces-workers-consumer',\n maxReconnectAttempts: process.env['NATS_MAX_RECONNECT_ATTEMPTS']\n ? parseInt(process.env['NATS_MAX_RECONNECT_ATTEMPTS'], 10)\n : -1,\n reconnectTimeWait: process.env['NATS_RECONNECT_TIME_WAIT']\n ? parseInt(process.env['NATS_RECONNECT_TIME_WAIT'], 10)\n : 2000,\n stream,\n consumer,\n maxConcurrent: process.env['QUEUE_MAX_CONCURRENT'] ? parseInt(process.env['QUEUE_MAX_CONCURRENT'], 10) : 5,\n maxDeliver: process.env['QUEUE_MAX_DELIVER'] ? parseInt(process.env['QUEUE_MAX_DELIVER'], 10) : 3,\n ackWait: process.env['QUEUE_ACK_WAIT']\n ? parseInt(process.env['QUEUE_ACK_WAIT'], 10) * 1_000_000_000 // Convert seconds to nanoseconds\n : 30_000_000_000,\n };\n\n return EventQueueFactory.createConsumer(config);\n }\n\n // ========================================================================\n // Layer-Aware Factory Methods\n // ========================================================================\n\n /**\n * Create a publisher for a specific layer\n *\n * @param layer - Service layer ('wspace' or 'global')\n * @param serviceName - Service name for identification\n * @returns Publisher configured for the layer\n *\n * @example\n * ```typescript\n * const publisher = EventQueueFactory.createPublisherForLayer('wspace', 'wspace-tags-svc');\n * await publisher.connect();\n * await publisher.publish({ subject: 'wspace.tags.created', data: { id: '123' } });\n * ```\n */\n static createPublisherForLayer(layer: ServiceLayer, serviceName: string): IEventPublisher {\n const envPrefix = layer.toUpperCase();\n const defaults = DEFAULT_LAYER_RESOURCES[layer];\n\n const config: PublisherConfig = {\n type: QueueType.NATS,\n url: process.env[`${envPrefix}_NATS_URL`] || process.env['NATS_URL'] || defaults.natsUrl,\n user: process.env['NATS_USER'],\n password: process.env['NATS_PASSWORD'],\n token: process.env['NATS_TOKEN'],\n name: serviceName,\n maxReconnectAttempts: process.env['NATS_MAX_RECONNECT_ATTEMPTS']\n ? parseInt(process.env['NATS_MAX_RECONNECT_ATTEMPTS'], 10)\n : -1,\n reconnectTimeWait: process.env['NATS_RECONNECT_TIME_WAIT']\n ? parseInt(process.env['NATS_RECONNECT_TIME_WAIT'], 10)\n : 2000,\n enableDeduplication: process.env['QUEUE_ENABLE_DEDUPLICATION'] === 'true',\n defaultPriority: (process.env['QUEUE_DEFAULT_PRIORITY'] as 'low' | 'normal' | 'high') || 'normal',\n defaultTTL: process.env['QUEUE_DEFAULT_TTL'] ? parseInt(process.env['QUEUE_DEFAULT_TTL'], 10) : undefined,\n };\n\n logger.info('[EventQueueFactory] Creating layer publisher', {\n layer,\n serviceName,\n url: config.url,\n });\n\n return EventQueueFactory.createPublisher(config);\n }\n\n /**\n * Create a consumer for a specific layer\n *\n * @param layer - Service layer ('wspace' or 'global')\n * @param serviceName - Service name for identification\n * @param stream - NATS stream name\n * @param consumer - Consumer name\n * @returns Consumer configured for the layer\n *\n * @example\n * ```typescript\n * const consumer = EventQueueFactory.createConsumerForLayer(\n * 'wspace', 'wspace-tags-svc', 'WSPACE_EVENTS', 'tags-consumer'\n * );\n * await consumer.connect();\n * await consumer.consume(async (msg) => { console.log(msg); });\n * ```\n */\n static createConsumerForLayer(\n layer: ServiceLayer,\n serviceName: string,\n stream: string,\n consumer: string\n ): IEventConsumer {\n const envPrefix = layer.toUpperCase();\n const defaults = DEFAULT_LAYER_RESOURCES[layer];\n\n const config: ConsumerConfig = {\n type: QueueType.NATS,\n url: process.env[`${envPrefix}_NATS_URL`] || process.env['NATS_URL'] || defaults.natsUrl,\n user: process.env['NATS_USER'],\n password: process.env['NATS_PASSWORD'],\n token: process.env['NATS_TOKEN'],\n name: serviceName,\n maxReconnectAttempts: process.env['NATS_MAX_RECONNECT_ATTEMPTS']\n ? parseInt(process.env['NATS_MAX_RECONNECT_ATTEMPTS'], 10)\n : -1,\n reconnectTimeWait: process.env['NATS_RECONNECT_TIME_WAIT']\n ? parseInt(process.env['NATS_RECONNECT_TIME_WAIT'], 10)\n : 2000,\n stream,\n consumer,\n maxConcurrent: process.env['QUEUE_MAX_CONCURRENT'] ? parseInt(process.env['QUEUE_MAX_CONCURRENT'], 10) : 5,\n maxDeliver: process.env['QUEUE_MAX_DELIVER'] ? parseInt(process.env['QUEUE_MAX_DELIVER'], 10) : 3,\n ackWait: process.env['QUEUE_ACK_WAIT']\n ? parseInt(process.env['QUEUE_ACK_WAIT'], 10) * 1_000_000_000\n : 30_000_000_000,\n };\n\n logger.info('[EventQueueFactory] Creating layer consumer', {\n layer,\n serviceName,\n stream,\n consumer,\n url: config.url,\n });\n\n return EventQueueFactory.createConsumer(config);\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { EventQueueFactory } from './chunk-YOLJ6ONY.js';
1
+ import { EventQueueFactory } from './chunk-3O2RQOPV.js';
2
2
  import { logger } from './chunk-CBZNP6RF.js';
3
3
  import { __name } from './chunk-XE4OXN2W.js';
4
4
  import { randomUUID } from 'crypto';
@@ -609,5 +609,5 @@ async function resetGraphEventEmitter() {
609
609
  __name(resetGraphEventEmitter, "resetGraphEventEmitter");
610
610
 
611
611
  export { MemoryEventBus, MemoryEventConsumer, MemoryEventPublisher, MemoryEventQueue, NatsGraphEventEmitter, createGraphEventEmitter, createGraphEventEmitter2, createMemoryConsumer, createMemoryPublisher, getGraphEventEmitter, resetGraphEventEmitter };
612
- //# sourceMappingURL=chunk-RUGNI7CR.js.map
613
- //# sourceMappingURL=chunk-RUGNI7CR.js.map
612
+ //# sourceMappingURL=chunk-ELLX3K54.js.map
613
+ //# sourceMappingURL=chunk-ELLX3K54.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/event-queue/implementations/memory/MemoryEventQueue.ts","../src/event-queue/graph-emitter.ts"],"names":["MemoryEventBus","handlers","Map","emit","event","data","eventHandlers","get","forEach","handler","Promise","resolve","pattern","matchesPattern","on","has","set","Set","add","off","delete","endsWith","prefix","slice","startsWith","clear","MemoryEventQueue","queue","processing","maxRetries","retryDelay","options","publishEntityEvent","eventType","entity","context","subject","productName","type","split","logger","debug","entityId","id","entityType","enqueue","metadata","Date","now","randomUUID","timestamp","retries","push","processQueue","registerHandler","length","shift","ackEvent","correlationId","toISOString","ack","nak","term","isRedelivered","getDeliveryAttempt","setTimeout","publish","close","MemoryEventPublisher","_connected","publishCount","connect","info","disconnect","isConnected","ensureStream","Error","messageId","publishBatch","events","messageIds","publishWithAck","healthCheck","status","connected","latencyMs","getStatistics","messagesPublished","messagesConsumed","messagesPending","messagesFailed","getQueue","MemoryEventConsumer","bus","_subscriptions","consumeCount","subIdCounter","streamName","consumerName","stream","consumer","sub","values","unsubscribe","ensureConsumer","subscribe","subId","messagesReceived","messagesProcessed","lastActivity","active","subscription","isActive","getStats","subscriptionId","subscribeMultiple","subjects","subscriptions","pull","unsubscribeAll","getSubscriptions","Array","from","processDLQ","_handler","getBus","createMemoryPublisher","createMemoryConsumer","createGraphEventEmitter","uuidv4","crypto","NatsGraphEventEmitter","publisher","connecting","graphNatsUrl","process","env","natsServers","originalNatsServers","url","EventQueueFactory","createPublisherFromEnv","undefined","ensureConnected","then","rbac","eventId","action","hasRbac","streamSubjects","productSource","organizationId","actorId","workspaceId","result","isHealthy","healthy","message","error","_graphEventEmitter","getGraphEventEmitter","resetGraphEventEmitter"],"mappings":"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","file":"chunk-RUGNI7CR.js","sourcesContent":["/**\n * In-Memory Event Queue Implementation\n *\n * A simple in-memory event bus and queue for development/testing environments\n * or when NATS is not available. Implements the same interfaces as the NATS\n * implementation for seamless swapping.\n *\n * @module event-queue/memory\n * @category Events\n */\n\nimport { randomUUID } from 'node:crypto';\nimport { logger } from '../../../logger/index.js';\nimport type { IEventPublisher, PublishOptions } from '../../interfaces/IEventPublisher.js';\nimport type { IEventConsumer, ISubscription } from '../../interfaces/IEventConsumer.js';\nimport type { EventHandler, AcknowledgeableEvent, EventMetadata } from '../../types/events.js';\nimport type { EventQueueHealthCheckResult, QueueStatistics } from '../../types/config.js';\n\n/**\n * Entity event type for graph events\n */\nexport type EntityEventType = 'entity.created' | 'entity.updated' | 'entity.deleted';\n\n/**\n * Graph event emitter interface - compatible with Prisma extension\n */\nexport interface GraphEventEmitter {\n publishEntityEvent(\n eventType: EntityEventType,\n entity: {\n id: string;\n type: string;\n data: Record<string, unknown>;\n },\n context: {\n productName: string;\n organizationId: string;\n userId?: string;\n workspaceId?: string;\n }\n ): Promise<void>;\n}\n\n/**\n * Simple event bus for in-memory pub/sub\n */\nexport class MemoryEventBus {\n private handlers: Map<string, Set<EventHandler<unknown>>> = new Map();\n\n /**\n * Emit an event to all handlers\n */\n emit<T>(event: string, data: T): void {\n const eventHandlers = this.handlers.get(event);\n if (eventHandlers) {\n eventHandlers.forEach((handler) => {\n void Promise.resolve(handler(data as AcknowledgeableEvent));\n });\n }\n\n // Also emit to wildcard handlers\n for (const [pattern, handlers] of this.handlers) {\n if (this.matchesPattern(event, pattern)) {\n handlers.forEach((handler) => {\n void Promise.resolve(handler(data as AcknowledgeableEvent));\n });\n }\n }\n }\n\n /**\n * Register a handler for an event\n */\n on<T>(event: string, handler: EventHandler<T>): void {\n if (!this.handlers.has(event)) {\n this.handlers.set(event, new Set());\n }\n this.handlers.get(event)!.add(handler as EventHandler<unknown>);\n }\n\n /**\n * Remove a handler for an event\n */\n off<T>(event: string, handler: EventHandler<T>): void {\n const eventHandlers = this.handlers.get(event);\n if (eventHandlers) {\n eventHandlers.delete(handler as EventHandler<unknown>);\n }\n }\n\n /**\n * Check if pattern matches event (supports wildcards)\n */\n private matchesPattern(event: string, pattern: string): boolean {\n if (pattern === event) return false; // Already handled exact match\n if (pattern.endsWith('.*')) {\n const prefix = pattern.slice(0, -2);\n return event.startsWith(prefix + '.');\n }\n if (pattern.endsWith('.>')) {\n const prefix = pattern.slice(0, -2);\n return event.startsWith(prefix + '.');\n }\n return false;\n }\n\n /**\n * Clear all handlers\n */\n clear(): void {\n this.handlers.clear();\n }\n}\n\n/**\n * Queued event structure\n */\ninterface QueuedEvent<T = unknown> {\n id: string;\n subject: string;\n data: T;\n metadata: Record<string, unknown>;\n timestamp: Date;\n retries: number;\n maxRetries: number;\n}\n\n/**\n * In-memory event queue with retry support\n */\nexport class MemoryEventQueue implements GraphEventEmitter {\n private queue: QueuedEvent[] = [];\n private processing = false;\n private handlers: Map<string, EventHandler<unknown>> = new Map();\n private maxRetries: number;\n private retryDelay: number;\n\n constructor(options?: { maxRetries?: number; retryDelay?: number }) {\n this.maxRetries = options?.maxRetries ?? 3;\n this.retryDelay = options?.retryDelay ?? 1000;\n }\n\n /**\n * Publish entity event (implements GraphEventEmitter)\n */\n async publishEntityEvent(\n eventType: EntityEventType,\n entity: {\n id: string;\n type: string;\n data: Record<string, unknown>;\n },\n context: {\n productName: string;\n organizationId: string;\n userId?: string;\n workspaceId?: string;\n }\n ): Promise<void> {\n const subject = `graph.${context.productName}.${entity.type}.${eventType.split('.')[1]}`;\n\n logger.debug('[MemoryEventQueue] Publishing entity event', {\n eventType,\n entityId: entity.id,\n entityType: entity.type,\n subject,\n });\n\n this.enqueue(subject, {\n eventType,\n entity,\n context,\n });\n }\n\n /**\n * Add an event to the queue\n */\n enqueue<T>(subject: string, data: T, metadata: Record<string, unknown> = {}): string {\n const id = `evt_${Date.now()}_${randomUUID().slice(0, 8)}`;\n const event: QueuedEvent<T> = {\n id,\n subject,\n data,\n metadata,\n timestamp: new Date(),\n retries: 0,\n maxRetries: this.maxRetries,\n };\n this.queue.push(event as QueuedEvent);\n void this.processQueue();\n return id;\n }\n\n /**\n * Register a handler for a subject\n */\n registerHandler<T>(subject: string, handler: EventHandler<T>): void {\n this.handlers.set(subject, handler as EventHandler<unknown>);\n }\n\n /**\n * Process the queue\n */\n private async processQueue(): Promise<void> {\n if (this.processing || this.queue.length === 0) {\n return;\n }\n\n this.processing = true;\n\n while (this.queue.length > 0) {\n const event = this.queue.shift();\n if (!event) continue;\n\n const handler = this.handlers.get(event.subject);\n if (handler) {\n try {\n const ackEvent: AcknowledgeableEvent = {\n id: event.id,\n subject: event.subject,\n data: event.data as Record<string, unknown>,\n metadata: {\n correlationId: event.id,\n ...event.metadata,\n },\n timestamp: event.timestamp.toISOString(),\n ack: async () => {\n logger.debug('[MemoryEventQueue] Event acknowledged', { id: event.id });\n },\n nak: async () => {\n logger.debug('[MemoryEventQueue] Event negatively acknowledged', { id: event.id });\n if (event.retries < event.maxRetries) {\n event.retries++;\n this.queue.push(event);\n }\n },\n term: async () => {\n logger.debug('[MemoryEventQueue] Event terminated', { id: event.id });\n },\n isRedelivered: () => event.retries > 0,\n getDeliveryAttempt: () => event.retries + 1,\n };\n await handler(ackEvent);\n } catch {\n if (event.retries < event.maxRetries) {\n event.retries++;\n await new Promise((resolve) => setTimeout(resolve, this.retryDelay));\n this.queue.push(event);\n }\n }\n }\n }\n\n this.processing = false;\n }\n\n /**\n * Get queue length\n */\n get length(): number {\n return this.queue.length;\n }\n\n /**\n * Clear the queue\n */\n clear(): void {\n this.queue = [];\n }\n\n /**\n * Publish an event (fire-and-forget)\n */\n async publish<T>(subject: string, data: T, metadata: Record<string, unknown> = {}): Promise<void> {\n this.enqueue(subject, data, metadata);\n logger.debug('[MemoryEventQueue] Published event', { subject });\n }\n\n /**\n * Close the event queue\n */\n async close(): Promise<void> {\n this.clear();\n this.handlers.clear();\n logger.debug('[MemoryEventQueue] Event queue closed');\n }\n}\n\n/**\n * In-memory event publisher implementation\n */\nexport class MemoryEventPublisher implements IEventPublisher {\n private queue: MemoryEventQueue;\n private _connected = false;\n private publishCount = 0;\n\n constructor() {\n this.queue = new MemoryEventQueue();\n }\n\n async connect(): Promise<void> {\n this._connected = true;\n logger.info('[MemoryEventPublisher] Connected (in-memory mode)');\n }\n\n async disconnect(): Promise<void> {\n await this.queue.close();\n this._connected = false;\n logger.info('[MemoryEventPublisher] Disconnected');\n }\n\n isConnected(): boolean {\n return this._connected;\n }\n\n async ensureStream(): Promise<void> {\n // No-op for in-memory implementation\n logger.debug('[MemoryEventPublisher] ensureStream called (no-op for in-memory)');\n }\n\n async publish<T = unknown>(options: {\n subject: string;\n data: T;\n metadata?: Record<string, unknown>;\n options?: PublishOptions;\n }): Promise<string> {\n if (!this._connected) {\n throw new Error('Publisher not connected');\n }\n\n const messageId = this.queue.enqueue(options.subject, options.data, options.metadata);\n this.publishCount++;\n\n logger.debug('[MemoryEventPublisher] Published', {\n subject: options.subject,\n messageId,\n });\n\n return messageId;\n }\n\n async publishBatch<T = unknown>(\n events: Array<{\n subject: string;\n data: T;\n metadata?: Record<string, unknown>;\n options?: PublishOptions;\n }>\n ): Promise<string[]> {\n const messageIds: string[] = [];\n for (const event of events) {\n const id = await this.publish(event);\n messageIds.push(id);\n }\n return messageIds;\n }\n\n async publishWithAck<T = unknown, R = unknown>(options: {\n subject: string;\n data: T;\n metadata?: Partial<EventMetadata>;\n timeout?: number;\n }): Promise<R> {\n // For in-memory, just publish and return empty response\n await this.publish({\n subject: options.subject,\n data: options.data,\n metadata: options.metadata as Record<string, unknown>,\n });\n return {} as R;\n }\n\n async healthCheck(): Promise<EventQueueHealthCheckResult> {\n return {\n status: this._connected ? 'healthy' : 'unhealthy',\n timestamp: new Date().toISOString(),\n connected: this._connected,\n latencyMs: 0,\n };\n }\n\n async getStatistics(): Promise<QueueStatistics> {\n return {\n messagesPublished: this.publishCount,\n messagesConsumed: 0,\n messagesPending: this.queue.length,\n messagesFailed: 0,\n };\n }\n\n /**\n * Get the underlying queue (for testing/debugging)\n */\n getQueue(): MemoryEventQueue {\n return this.queue;\n }\n}\n\n/**\n * In-memory event consumer implementation\n */\nexport class MemoryEventConsumer implements IEventConsumer {\n private queue: MemoryEventQueue;\n private bus: MemoryEventBus;\n private _connected = false;\n private _subscriptions: Map<string, ISubscription> = new Map();\n private consumeCount = 0;\n private subIdCounter = 0;\n\n constructor(\n private streamName: string,\n private consumerName: string\n ) {\n this.queue = new MemoryEventQueue();\n this.bus = new MemoryEventBus();\n }\n\n async connect(): Promise<void> {\n this._connected = true;\n logger.info('[MemoryEventConsumer] Connected (in-memory mode)', {\n stream: this.streamName,\n consumer: this.consumerName,\n });\n }\n\n async disconnect(): Promise<void> {\n for (const sub of this._subscriptions.values()) {\n await sub.unsubscribe();\n }\n this._subscriptions.clear();\n await this.queue.close();\n this.bus.clear();\n this._connected = false;\n logger.info('[MemoryEventConsumer] Disconnected');\n }\n\n isConnected(): boolean {\n return this._connected;\n }\n\n async ensureStream(): Promise<void> {\n // No-op for in-memory implementation\n logger.debug('[MemoryEventConsumer] ensureStream called (no-op for in-memory)');\n }\n\n async ensureConsumer(): Promise<void> {\n // No-op for in-memory implementation\n logger.debug('[MemoryEventConsumer] ensureConsumer called (no-op for in-memory)');\n }\n\n async subscribe<T = unknown>(options: {\n subject: string;\n handler: EventHandler<T>;\n queueGroup?: string;\n }): Promise<ISubscription> {\n if (!this._connected) {\n throw new Error('Consumer not connected');\n }\n\n const { subject, handler } = options;\n const subId = `sub_${++this.subIdCounter}`;\n let messagesReceived = 0;\n let messagesProcessed = 0;\n let messagesFailed = 0;\n let lastActivity = new Date().toISOString();\n let active = true;\n\n // Register with both queue and bus\n this.queue.registerHandler(subject, async (event) => {\n messagesReceived++;\n lastActivity = new Date().toISOString();\n try {\n this.consumeCount++;\n await handler(event as AcknowledgeableEvent<T>);\n messagesProcessed++;\n } catch {\n messagesFailed++;\n }\n });\n\n this.bus.on(subject, async (data) => {\n messagesReceived++;\n lastActivity = new Date().toISOString();\n try {\n this.consumeCount++;\n await handler(data as AcknowledgeableEvent<T>);\n messagesProcessed++;\n } catch {\n messagesFailed++;\n }\n });\n\n const subscription: ISubscription = {\n id: subId,\n subject,\n unsubscribe: async () => {\n active = false;\n this._subscriptions.delete(subId);\n logger.debug('[MemoryEventConsumer] Unsubscribed', { subject });\n },\n isActive: () => active,\n getStats: () => ({\n messagesReceived,\n messagesProcessed,\n messagesFailed,\n lastActivity,\n }),\n };\n\n this._subscriptions.set(subId, subscription);\n logger.info('[MemoryEventConsumer] Subscribed', { subject, subscriptionId: subId });\n\n return subscription;\n }\n\n async subscribeMultiple<T = unknown>(subjects: string[], handler: EventHandler<T>): Promise<ISubscription[]> {\n const subscriptions: ISubscription[] = [];\n for (const subject of subjects) {\n const sub = await this.subscribe<T>({ subject, handler });\n subscriptions.push(sub);\n }\n return subscriptions;\n }\n\n async pull<T = unknown>(): Promise<AcknowledgeableEvent<T>[]> {\n // In-memory doesn't support pull-based consumption in a meaningful way\n logger.debug('[MemoryEventConsumer] pull called (returning empty for in-memory)');\n return [];\n }\n\n async unsubscribeAll(): Promise<void> {\n for (const sub of this._subscriptions.values()) {\n await sub.unsubscribe();\n }\n this._subscriptions.clear();\n }\n\n getSubscriptions(): ISubscription[] {\n return Array.from(this._subscriptions.values());\n }\n\n async processDLQ<T = unknown>(_handler: EventHandler<T>): Promise<void> {\n // No-op for in-memory (no DLQ)\n logger.debug('[MemoryEventConsumer] processDLQ called (no-op for in-memory)');\n }\n\n // eslint-disable-next-line sonarjs/no-identical-functions -- Same implementation needed for both Publisher and Consumer\n async healthCheck(): Promise<EventQueueHealthCheckResult> {\n return {\n status: this._connected ? 'healthy' : 'unhealthy',\n timestamp: new Date().toISOString(),\n connected: this._connected,\n latencyMs: 0,\n };\n }\n\n async getStatistics(): Promise<QueueStatistics> {\n return {\n messagesPublished: 0,\n messagesConsumed: this.consumeCount,\n messagesPending: this.queue.length,\n messagesFailed: 0,\n };\n }\n\n /**\n * Get the underlying bus (for testing/debugging)\n */\n getBus(): MemoryEventBus {\n return this.bus;\n }\n\n /**\n * Get the underlying queue (for testing/debugging)\n */\n getQueue(): MemoryEventQueue {\n return this.queue;\n }\n}\n\n/**\n * Create an in-memory event publisher\n */\nexport function createMemoryPublisher(): IEventPublisher {\n return new MemoryEventPublisher();\n}\n\n/**\n * Create an in-memory event consumer\n */\nexport function createMemoryConsumer(stream: string, consumer: string): IEventConsumer {\n return new MemoryEventConsumer(stream, consumer);\n}\n\n/**\n * Create a GraphEventEmitter instance (in-memory)\n */\nexport function createGraphEventEmitter(): GraphEventEmitter {\n return new MemoryEventQueue();\n}\n","/**\n * Graph Event Emitter\n *\n * Provides a GraphEventEmitter implementation that works with the event queue system.\n * Uses NATS when available, falls back to in-memory queue otherwise.\n *\n * @module event-queue/graph-emitter\n * @category Events\n */\nimport { logger } from '../logger/index.js';\nimport { EventQueueFactory } from './factory/EventQueueFactory.js';\nimport type { IEventPublisher } from './interfaces/IEventPublisher.js';\nimport { MemoryEventPublisher } from './implementations/memory/MemoryEventQueue.js';\n\nconst uuidv4 = (): string => crypto.randomUUID();\n\n/**\n * Entity event type for graph events\n */\nexport type EntityEventType = 'entity.created' | 'entity.updated' | 'entity.deleted';\n\n/**\n * RBAC metadata included in entity lifecycle events.\n * When present, the RBAC consumer will create/update/delete resources accordingly.\n * When absent, only the graph consumer processes the event (strict mode).\n */\nexport interface EntityEventRbacMetadata {\n /** RBAC resource type name (e.g., 'tag', 'conversation', 'bot') */\n resourceTypeName: string;\n /** Human-readable resource name */\n name?: string;\n /** Resource identifier (defaults to entity.id if not provided) */\n identifier?: string;\n /** Parent resource identifier for hierarchy */\n parentResourceIdentifier?: string;\n /** Whether to create a resource in RBAC (default: true) */\n createResource?: boolean;\n}\n\n/**\n * Graph event emitter interface - compatible with Prisma extension\n */\nexport interface GraphEventEmitter {\n publishEntityEvent(\n eventType: EntityEventType,\n entity: {\n id: string;\n type: string;\n data: Record<string, unknown>;\n },\n context: {\n productName: string;\n organizationId: string;\n actorId?: string;\n workspaceId?: string;\n },\n rbac?: EntityEventRbacMetadata\n ): Promise<void>;\n}\n\n/**\n * NATS-based Graph Event Emitter\n *\n * Publishes graph entity events to NATS JetStream for processing by graph sync workers.\n * Falls back to in-memory publisher if NATS is not configured.\n */\nexport class NatsGraphEventEmitter implements GraphEventEmitter {\n private publisher: IEventPublisher;\n private connected = false;\n private connecting: Promise<void> | null = null;\n\n constructor() {\n // GRAPH_NATS_URL allows global-layer services to publish graph events\n // to the workspace NATS (where graph/RBAC consumers live), while keeping\n // their general event queue on the global NATS.\n const graphNatsUrl = process.env['GRAPH_NATS_URL'];\n const natsServers = graphNatsUrl || process.env['NATS_SERVERS'] || process.env['NATS_URL'];\n if (natsServers) {\n // If GRAPH_NATS_URL is set, temporarily override NATS_SERVERS for this publisher\n const originalNatsServers = process.env['NATS_SERVERS'];\n if (graphNatsUrl) {\n process.env['NATS_SERVERS'] = graphNatsUrl;\n logger.info('[NatsGraphEventEmitter] Using GRAPH_NATS_URL for graph events', { url: graphNatsUrl });\n } else if (!process.env['NATS_SERVERS'] && process.env['NATS_URL']) {\n process.env['NATS_SERVERS'] = process.env['NATS_URL'];\n }\n this.publisher = EventQueueFactory.createPublisherFromEnv();\n // Restore original NATS_SERVERS to not affect other publishers\n if (graphNatsUrl && originalNatsServers !== undefined) {\n process.env['NATS_SERVERS'] = originalNatsServers;\n } else if (graphNatsUrl) {\n delete process.env['NATS_SERVERS'];\n }\n logger.info('[NatsGraphEventEmitter] Using NATS publisher');\n } else {\n this.publisher = new MemoryEventPublisher();\n logger.info('[NatsGraphEventEmitter] Using in-memory publisher (NATS not configured)');\n }\n }\n\n /**\n * Ensure publisher is connected\n */\n private async ensureConnected(): Promise<void> {\n if (this.connected) {\n return;\n }\n\n if (this.connecting) {\n await this.connecting;\n return;\n }\n\n this.connecting = this.publisher.connect().then(() => {\n this.connected = true;\n this.connecting = null;\n logger.info('[NatsGraphEventEmitter] Publisher connected');\n });\n\n await this.connecting;\n }\n\n /**\n * Publish entity event to graph queue\n *\n * @param eventType - The lifecycle event type\n * @param entity - Entity data (id, type, data)\n * @param context - Event context (product, org, user, workspace)\n * @param rbac - Optional RBAC metadata. When present, the RBAC consumer will\n * create/update/delete resources. When absent, only graph consumer processes.\n */\n async publishEntityEvent(\n eventType: EntityEventType,\n entity: {\n id: string;\n type: string;\n data: Record<string, unknown>;\n },\n context: {\n productName: string;\n organizationId: string;\n actorId?: string;\n workspaceId?: string;\n },\n rbac?: EntityEventRbacMetadata\n ): Promise<void> {\n await this.ensureConnected();\n\n const eventId = uuidv4();\n const action = eventType.split('.')[1]; // 'created', 'updated', 'deleted'\n const subject = `graph.${context.productName}.${entity.type}.${action}`;\n\n logger.debug('[NatsGraphEventEmitter] Publishing entity event', {\n eventId,\n eventType,\n entityId: entity.id,\n entityType: entity.type,\n subject,\n hasRbac: !!rbac,\n });\n\n // All graph events go to WSPACE_GRAPH_EVENTS stream (where graph-sync-consumer\n // and rbac-entity-consumer listen). Global services use GRAPH_NATS_URL to connect\n // to the workspace NATS instance for graph event publishing.\n const streamName = 'WSPACE_GRAPH_EVENTS';\n const streamSubjects = ['graph.>'];\n\n await this.publisher.publish({\n subject,\n data: {\n eventId,\n eventType,\n productSource: context.productName,\n organizationId: context.organizationId,\n entity,\n context: {\n actorId: context.actorId,\n workspaceId: context.workspaceId,\n },\n // Include RBAC metadata when configured (consumed by rbac-entity-consumer)\n ...(rbac && { rbac }),\n timestamp: new Date().toISOString(),\n },\n metadata: {\n eventId,\n productName: context.productName,\n organizationId: context.organizationId,\n actorId: context.actorId,\n workspaceId: context.workspaceId,\n entityType: entity.type,\n entityId: entity.id,\n },\n options: {\n stream: streamName,\n streamSubjects,\n },\n });\n }\n\n /**\n * Disconnect the publisher\n */\n async disconnect(): Promise<void> {\n if (this.connected) {\n await this.publisher.disconnect();\n this.connected = false;\n logger.info('[NatsGraphEventEmitter] Publisher disconnected');\n }\n }\n\n /**\n * Get health check status\n */\n async healthCheck(): Promise<{ healthy: boolean; message: string }> {\n const result = await this.publisher.healthCheck();\n const isHealthy = result.status === 'healthy';\n return {\n healthy: isHealthy,\n message: result.error || (isHealthy ? 'Healthy' : 'Unhealthy'),\n };\n }\n}\n\n/**\n * Singleton instance\n */\nlet _graphEventEmitter: NatsGraphEventEmitter | null = null;\n\n/**\n * Get or create the graph event emitter singleton\n *\n * @returns Graph event emitter instance\n */\nexport function getGraphEventEmitter(): GraphEventEmitter {\n if (!_graphEventEmitter) {\n _graphEventEmitter = new NatsGraphEventEmitter();\n }\n return _graphEventEmitter;\n}\n\n/**\n * Create a new graph event emitter instance (non-singleton)\n *\n * @returns New graph event emitter instance\n */\nexport function createGraphEventEmitter(): GraphEventEmitter {\n return new NatsGraphEventEmitter();\n}\n\n/**\n * Reset the singleton (for testing)\n */\nexport async function resetGraphEventEmitter(): Promise<void> {\n if (_graphEventEmitter) {\n await _graphEventEmitter.disconnect();\n _graphEventEmitter = null;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/event-queue/implementations/memory/MemoryEventQueue.ts","../src/event-queue/graph-emitter.ts"],"names":["MemoryEventBus","handlers","Map","emit","event","data","eventHandlers","get","forEach","handler","Promise","resolve","pattern","matchesPattern","on","has","set","Set","add","off","delete","endsWith","prefix","slice","startsWith","clear","MemoryEventQueue","queue","processing","maxRetries","retryDelay","options","publishEntityEvent","eventType","entity","context","subject","productName","type","split","logger","debug","entityId","id","entityType","enqueue","metadata","Date","now","randomUUID","timestamp","retries","push","processQueue","registerHandler","length","shift","ackEvent","correlationId","toISOString","ack","nak","term","isRedelivered","getDeliveryAttempt","setTimeout","publish","close","MemoryEventPublisher","_connected","publishCount","connect","info","disconnect","isConnected","ensureStream","Error","messageId","publishBatch","events","messageIds","publishWithAck","healthCheck","status","connected","latencyMs","getStatistics","messagesPublished","messagesConsumed","messagesPending","messagesFailed","getQueue","MemoryEventConsumer","bus","_subscriptions","consumeCount","subIdCounter","streamName","consumerName","stream","consumer","sub","values","unsubscribe","ensureConsumer","subscribe","subId","messagesReceived","messagesProcessed","lastActivity","active","subscription","isActive","getStats","subscriptionId","subscribeMultiple","subjects","subscriptions","pull","unsubscribeAll","getSubscriptions","Array","from","processDLQ","_handler","getBus","createMemoryPublisher","createMemoryConsumer","createGraphEventEmitter","uuidv4","crypto","NatsGraphEventEmitter","publisher","connecting","graphNatsUrl","process","env","natsServers","originalNatsServers","url","EventQueueFactory","createPublisherFromEnv","undefined","ensureConnected","then","rbac","eventId","action","hasRbac","streamSubjects","productSource","organizationId","actorId","workspaceId","result","isHealthy","healthy","message","error","_graphEventEmitter","getGraphEventEmitter","resetGraphEventEmitter"],"mappings":"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","file":"chunk-ELLX3K54.js","sourcesContent":["/**\n * In-Memory Event Queue Implementation\n *\n * A simple in-memory event bus and queue for development/testing environments\n * or when NATS is not available. Implements the same interfaces as the NATS\n * implementation for seamless swapping.\n *\n * @module event-queue/memory\n * @category Events\n */\n\nimport { randomUUID } from 'node:crypto';\nimport { logger } from '../../../logger/index.js';\nimport type { IEventPublisher, PublishOptions } from '../../interfaces/IEventPublisher.js';\nimport type { IEventConsumer, ISubscription } from '../../interfaces/IEventConsumer.js';\nimport type { EventHandler, AcknowledgeableEvent, EventMetadata } from '../../types/events.js';\nimport type { EventQueueHealthCheckResult, QueueStatistics } from '../../types/config.js';\n\n/**\n * Entity event type for graph events\n */\nexport type EntityEventType = 'entity.created' | 'entity.updated' | 'entity.deleted';\n\n/**\n * Graph event emitter interface - compatible with Prisma extension\n */\nexport interface GraphEventEmitter {\n publishEntityEvent(\n eventType: EntityEventType,\n entity: {\n id: string;\n type: string;\n data: Record<string, unknown>;\n },\n context: {\n productName: string;\n organizationId: string;\n userId?: string;\n workspaceId?: string;\n }\n ): Promise<void>;\n}\n\n/**\n * Simple event bus for in-memory pub/sub\n */\nexport class MemoryEventBus {\n private handlers: Map<string, Set<EventHandler<unknown>>> = new Map();\n\n /**\n * Emit an event to all handlers\n */\n emit<T>(event: string, data: T): void {\n const eventHandlers = this.handlers.get(event);\n if (eventHandlers) {\n eventHandlers.forEach((handler) => {\n void Promise.resolve(handler(data as AcknowledgeableEvent));\n });\n }\n\n // Also emit to wildcard handlers\n for (const [pattern, handlers] of this.handlers) {\n if (this.matchesPattern(event, pattern)) {\n handlers.forEach((handler) => {\n void Promise.resolve(handler(data as AcknowledgeableEvent));\n });\n }\n }\n }\n\n /**\n * Register a handler for an event\n */\n on<T>(event: string, handler: EventHandler<T>): void {\n if (!this.handlers.has(event)) {\n this.handlers.set(event, new Set());\n }\n this.handlers.get(event)!.add(handler as EventHandler<unknown>);\n }\n\n /**\n * Remove a handler for an event\n */\n off<T>(event: string, handler: EventHandler<T>): void {\n const eventHandlers = this.handlers.get(event);\n if (eventHandlers) {\n eventHandlers.delete(handler as EventHandler<unknown>);\n }\n }\n\n /**\n * Check if pattern matches event (supports wildcards)\n */\n private matchesPattern(event: string, pattern: string): boolean {\n if (pattern === event) return false; // Already handled exact match\n if (pattern.endsWith('.*')) {\n const prefix = pattern.slice(0, -2);\n return event.startsWith(prefix + '.');\n }\n if (pattern.endsWith('.>')) {\n const prefix = pattern.slice(0, -2);\n return event.startsWith(prefix + '.');\n }\n return false;\n }\n\n /**\n * Clear all handlers\n */\n clear(): void {\n this.handlers.clear();\n }\n}\n\n/**\n * Queued event structure\n */\ninterface QueuedEvent<T = unknown> {\n id: string;\n subject: string;\n data: T;\n metadata: Record<string, unknown>;\n timestamp: Date;\n retries: number;\n maxRetries: number;\n}\n\n/**\n * In-memory event queue with retry support\n */\nexport class MemoryEventQueue implements GraphEventEmitter {\n private queue: QueuedEvent[] = [];\n private processing = false;\n private handlers: Map<string, EventHandler<unknown>> = new Map();\n private maxRetries: number;\n private retryDelay: number;\n\n constructor(options?: { maxRetries?: number; retryDelay?: number }) {\n this.maxRetries = options?.maxRetries ?? 3;\n this.retryDelay = options?.retryDelay ?? 1000;\n }\n\n /**\n * Publish entity event (implements GraphEventEmitter)\n */\n async publishEntityEvent(\n eventType: EntityEventType,\n entity: {\n id: string;\n type: string;\n data: Record<string, unknown>;\n },\n context: {\n productName: string;\n organizationId: string;\n userId?: string;\n workspaceId?: string;\n }\n ): Promise<void> {\n const subject = `graph.${context.productName}.${entity.type}.${eventType.split('.')[1]}`;\n\n logger.debug('[MemoryEventQueue] Publishing entity event', {\n eventType,\n entityId: entity.id,\n entityType: entity.type,\n subject,\n });\n\n this.enqueue(subject, {\n eventType,\n entity,\n context,\n });\n }\n\n /**\n * Add an event to the queue\n */\n enqueue<T>(subject: string, data: T, metadata: Record<string, unknown> = {}): string {\n const id = `evt_${Date.now()}_${randomUUID().slice(0, 8)}`;\n const event: QueuedEvent<T> = {\n id,\n subject,\n data,\n metadata,\n timestamp: new Date(),\n retries: 0,\n maxRetries: this.maxRetries,\n };\n this.queue.push(event as QueuedEvent);\n void this.processQueue();\n return id;\n }\n\n /**\n * Register a handler for a subject\n */\n registerHandler<T>(subject: string, handler: EventHandler<T>): void {\n this.handlers.set(subject, handler as EventHandler<unknown>);\n }\n\n /**\n * Process the queue\n */\n private async processQueue(): Promise<void> {\n if (this.processing || this.queue.length === 0) {\n return;\n }\n\n this.processing = true;\n\n while (this.queue.length > 0) {\n const event = this.queue.shift();\n if (!event) continue;\n\n const handler = this.handlers.get(event.subject);\n if (handler) {\n try {\n const ackEvent: AcknowledgeableEvent = {\n id: event.id,\n subject: event.subject,\n data: event.data as Record<string, unknown>,\n metadata: {\n correlationId: event.id,\n ...event.metadata,\n },\n timestamp: event.timestamp.toISOString(),\n ack: async () => {\n logger.debug('[MemoryEventQueue] Event acknowledged', { id: event.id });\n },\n nak: async () => {\n logger.debug('[MemoryEventQueue] Event negatively acknowledged', { id: event.id });\n if (event.retries < event.maxRetries) {\n event.retries++;\n this.queue.push(event);\n }\n },\n term: async () => {\n logger.debug('[MemoryEventQueue] Event terminated', { id: event.id });\n },\n isRedelivered: () => event.retries > 0,\n getDeliveryAttempt: () => event.retries + 1,\n };\n await handler(ackEvent);\n } catch {\n if (event.retries < event.maxRetries) {\n event.retries++;\n await new Promise((resolve) => setTimeout(resolve, this.retryDelay));\n this.queue.push(event);\n }\n }\n }\n }\n\n this.processing = false;\n }\n\n /**\n * Get queue length\n */\n get length(): number {\n return this.queue.length;\n }\n\n /**\n * Clear the queue\n */\n clear(): void {\n this.queue = [];\n }\n\n /**\n * Publish an event (fire-and-forget)\n */\n async publish<T>(subject: string, data: T, metadata: Record<string, unknown> = {}): Promise<void> {\n this.enqueue(subject, data, metadata);\n logger.debug('[MemoryEventQueue] Published event', { subject });\n }\n\n /**\n * Close the event queue\n */\n async close(): Promise<void> {\n this.clear();\n this.handlers.clear();\n logger.debug('[MemoryEventQueue] Event queue closed');\n }\n}\n\n/**\n * In-memory event publisher implementation\n */\nexport class MemoryEventPublisher implements IEventPublisher {\n private queue: MemoryEventQueue;\n private _connected = false;\n private publishCount = 0;\n\n constructor() {\n this.queue = new MemoryEventQueue();\n }\n\n async connect(): Promise<void> {\n this._connected = true;\n logger.info('[MemoryEventPublisher] Connected (in-memory mode)');\n }\n\n async disconnect(): Promise<void> {\n await this.queue.close();\n this._connected = false;\n logger.info('[MemoryEventPublisher] Disconnected');\n }\n\n isConnected(): boolean {\n return this._connected;\n }\n\n async ensureStream(): Promise<void> {\n // No-op for in-memory implementation\n logger.debug('[MemoryEventPublisher] ensureStream called (no-op for in-memory)');\n }\n\n async publish<T = unknown>(options: {\n subject: string;\n data: T;\n metadata?: Record<string, unknown>;\n options?: PublishOptions;\n }): Promise<string> {\n if (!this._connected) {\n throw new Error('Publisher not connected');\n }\n\n const messageId = this.queue.enqueue(options.subject, options.data, options.metadata);\n this.publishCount++;\n\n logger.debug('[MemoryEventPublisher] Published', {\n subject: options.subject,\n messageId,\n });\n\n return messageId;\n }\n\n async publishBatch<T = unknown>(\n events: Array<{\n subject: string;\n data: T;\n metadata?: Record<string, unknown>;\n options?: PublishOptions;\n }>\n ): Promise<string[]> {\n const messageIds: string[] = [];\n for (const event of events) {\n const id = await this.publish(event);\n messageIds.push(id);\n }\n return messageIds;\n }\n\n async publishWithAck<T = unknown, R = unknown>(options: {\n subject: string;\n data: T;\n metadata?: Partial<EventMetadata>;\n timeout?: number;\n }): Promise<R> {\n // For in-memory, just publish and return empty response\n await this.publish({\n subject: options.subject,\n data: options.data,\n metadata: options.metadata as Record<string, unknown>,\n });\n return {} as R;\n }\n\n async healthCheck(): Promise<EventQueueHealthCheckResult> {\n return {\n status: this._connected ? 'healthy' : 'unhealthy',\n timestamp: new Date().toISOString(),\n connected: this._connected,\n latencyMs: 0,\n };\n }\n\n async getStatistics(): Promise<QueueStatistics> {\n return {\n messagesPublished: this.publishCount,\n messagesConsumed: 0,\n messagesPending: this.queue.length,\n messagesFailed: 0,\n };\n }\n\n /**\n * Get the underlying queue (for testing/debugging)\n */\n getQueue(): MemoryEventQueue {\n return this.queue;\n }\n}\n\n/**\n * In-memory event consumer implementation\n */\nexport class MemoryEventConsumer implements IEventConsumer {\n private queue: MemoryEventQueue;\n private bus: MemoryEventBus;\n private _connected = false;\n private _subscriptions: Map<string, ISubscription> = new Map();\n private consumeCount = 0;\n private subIdCounter = 0;\n\n constructor(\n private streamName: string,\n private consumerName: string\n ) {\n this.queue = new MemoryEventQueue();\n this.bus = new MemoryEventBus();\n }\n\n async connect(): Promise<void> {\n this._connected = true;\n logger.info('[MemoryEventConsumer] Connected (in-memory mode)', {\n stream: this.streamName,\n consumer: this.consumerName,\n });\n }\n\n async disconnect(): Promise<void> {\n for (const sub of this._subscriptions.values()) {\n await sub.unsubscribe();\n }\n this._subscriptions.clear();\n await this.queue.close();\n this.bus.clear();\n this._connected = false;\n logger.info('[MemoryEventConsumer] Disconnected');\n }\n\n isConnected(): boolean {\n return this._connected;\n }\n\n async ensureStream(): Promise<void> {\n // No-op for in-memory implementation\n logger.debug('[MemoryEventConsumer] ensureStream called (no-op for in-memory)');\n }\n\n async ensureConsumer(): Promise<void> {\n // No-op for in-memory implementation\n logger.debug('[MemoryEventConsumer] ensureConsumer called (no-op for in-memory)');\n }\n\n async subscribe<T = unknown>(options: {\n subject: string;\n handler: EventHandler<T>;\n queueGroup?: string;\n }): Promise<ISubscription> {\n if (!this._connected) {\n throw new Error('Consumer not connected');\n }\n\n const { subject, handler } = options;\n const subId = `sub_${++this.subIdCounter}`;\n let messagesReceived = 0;\n let messagesProcessed = 0;\n let messagesFailed = 0;\n let lastActivity = new Date().toISOString();\n let active = true;\n\n // Register with both queue and bus\n this.queue.registerHandler(subject, async (event) => {\n messagesReceived++;\n lastActivity = new Date().toISOString();\n try {\n this.consumeCount++;\n await handler(event as AcknowledgeableEvent<T>);\n messagesProcessed++;\n } catch {\n messagesFailed++;\n }\n });\n\n this.bus.on(subject, async (data) => {\n messagesReceived++;\n lastActivity = new Date().toISOString();\n try {\n this.consumeCount++;\n await handler(data as AcknowledgeableEvent<T>);\n messagesProcessed++;\n } catch {\n messagesFailed++;\n }\n });\n\n const subscription: ISubscription = {\n id: subId,\n subject,\n unsubscribe: async () => {\n active = false;\n this._subscriptions.delete(subId);\n logger.debug('[MemoryEventConsumer] Unsubscribed', { subject });\n },\n isActive: () => active,\n getStats: () => ({\n messagesReceived,\n messagesProcessed,\n messagesFailed,\n lastActivity,\n }),\n };\n\n this._subscriptions.set(subId, subscription);\n logger.info('[MemoryEventConsumer] Subscribed', { subject, subscriptionId: subId });\n\n return subscription;\n }\n\n async subscribeMultiple<T = unknown>(subjects: string[], handler: EventHandler<T>): Promise<ISubscription[]> {\n const subscriptions: ISubscription[] = [];\n for (const subject of subjects) {\n const sub = await this.subscribe<T>({ subject, handler });\n subscriptions.push(sub);\n }\n return subscriptions;\n }\n\n async pull<T = unknown>(): Promise<AcknowledgeableEvent<T>[]> {\n // In-memory doesn't support pull-based consumption in a meaningful way\n logger.debug('[MemoryEventConsumer] pull called (returning empty for in-memory)');\n return [];\n }\n\n async unsubscribeAll(): Promise<void> {\n for (const sub of this._subscriptions.values()) {\n await sub.unsubscribe();\n }\n this._subscriptions.clear();\n }\n\n getSubscriptions(): ISubscription[] {\n return Array.from(this._subscriptions.values());\n }\n\n async processDLQ<T = unknown>(_handler: EventHandler<T>): Promise<void> {\n // No-op for in-memory (no DLQ)\n logger.debug('[MemoryEventConsumer] processDLQ called (no-op for in-memory)');\n }\n\n // eslint-disable-next-line sonarjs/no-identical-functions -- Same implementation needed for both Publisher and Consumer\n async healthCheck(): Promise<EventQueueHealthCheckResult> {\n return {\n status: this._connected ? 'healthy' : 'unhealthy',\n timestamp: new Date().toISOString(),\n connected: this._connected,\n latencyMs: 0,\n };\n }\n\n async getStatistics(): Promise<QueueStatistics> {\n return {\n messagesPublished: 0,\n messagesConsumed: this.consumeCount,\n messagesPending: this.queue.length,\n messagesFailed: 0,\n };\n }\n\n /**\n * Get the underlying bus (for testing/debugging)\n */\n getBus(): MemoryEventBus {\n return this.bus;\n }\n\n /**\n * Get the underlying queue (for testing/debugging)\n */\n getQueue(): MemoryEventQueue {\n return this.queue;\n }\n}\n\n/**\n * Create an in-memory event publisher\n */\nexport function createMemoryPublisher(): IEventPublisher {\n return new MemoryEventPublisher();\n}\n\n/**\n * Create an in-memory event consumer\n */\nexport function createMemoryConsumer(stream: string, consumer: string): IEventConsumer {\n return new MemoryEventConsumer(stream, consumer);\n}\n\n/**\n * Create a GraphEventEmitter instance (in-memory)\n */\nexport function createGraphEventEmitter(): GraphEventEmitter {\n return new MemoryEventQueue();\n}\n","/**\n * Graph Event Emitter\n *\n * Provides a GraphEventEmitter implementation that works with the event queue system.\n * Uses NATS when available, falls back to in-memory queue otherwise.\n *\n * @module event-queue/graph-emitter\n * @category Events\n */\nimport { logger } from '../logger/index.js';\nimport { EventQueueFactory } from './factory/EventQueueFactory.js';\nimport type { IEventPublisher } from './interfaces/IEventPublisher.js';\nimport { MemoryEventPublisher } from './implementations/memory/MemoryEventQueue.js';\n\nconst uuidv4 = (): string => crypto.randomUUID();\n\n/**\n * Entity event type for graph events\n */\nexport type EntityEventType = 'entity.created' | 'entity.updated' | 'entity.deleted';\n\n/**\n * RBAC metadata included in entity lifecycle events.\n * When present, the RBAC consumer will create/update/delete resources accordingly.\n * When absent, only the graph consumer processes the event (strict mode).\n */\nexport interface EntityEventRbacMetadata {\n /** RBAC resource type name (e.g., 'tag', 'conversation', 'bot') */\n resourceTypeName: string;\n /** Human-readable resource name */\n name?: string;\n /** Resource identifier (defaults to entity.id if not provided) */\n identifier?: string;\n /** Parent resource identifier for hierarchy */\n parentResourceIdentifier?: string;\n /** Whether to create a resource in RBAC (default: true) */\n createResource?: boolean;\n}\n\n/**\n * Graph event emitter interface - compatible with Prisma extension\n */\nexport interface GraphEventEmitter {\n publishEntityEvent(\n eventType: EntityEventType,\n entity: {\n id: string;\n type: string;\n data: Record<string, unknown>;\n },\n context: {\n productName: string;\n organizationId: string;\n actorId?: string;\n workspaceId?: string;\n },\n rbac?: EntityEventRbacMetadata\n ): Promise<void>;\n}\n\n/**\n * NATS-based Graph Event Emitter\n *\n * Publishes graph entity events to NATS JetStream for processing by graph sync workers.\n * Falls back to in-memory publisher if NATS is not configured.\n */\nexport class NatsGraphEventEmitter implements GraphEventEmitter {\n private publisher: IEventPublisher;\n private connected = false;\n private connecting: Promise<void> | null = null;\n\n constructor() {\n // GRAPH_NATS_URL allows global-layer services to publish graph events\n // to the workspace NATS (where graph/RBAC consumers live), while keeping\n // their general event queue on the global NATS.\n const graphNatsUrl = process.env['GRAPH_NATS_URL'];\n const natsServers = graphNatsUrl || process.env['NATS_SERVERS'] || process.env['NATS_URL'];\n if (natsServers) {\n // If GRAPH_NATS_URL is set, temporarily override NATS_SERVERS for this publisher\n const originalNatsServers = process.env['NATS_SERVERS'];\n if (graphNatsUrl) {\n process.env['NATS_SERVERS'] = graphNatsUrl;\n logger.info('[NatsGraphEventEmitter] Using GRAPH_NATS_URL for graph events', { url: graphNatsUrl });\n } else if (!process.env['NATS_SERVERS'] && process.env['NATS_URL']) {\n process.env['NATS_SERVERS'] = process.env['NATS_URL'];\n }\n this.publisher = EventQueueFactory.createPublisherFromEnv();\n // Restore original NATS_SERVERS to not affect other publishers\n if (graphNatsUrl && originalNatsServers !== undefined) {\n process.env['NATS_SERVERS'] = originalNatsServers;\n } else if (graphNatsUrl) {\n delete process.env['NATS_SERVERS'];\n }\n logger.info('[NatsGraphEventEmitter] Using NATS publisher');\n } else {\n this.publisher = new MemoryEventPublisher();\n logger.info('[NatsGraphEventEmitter] Using in-memory publisher (NATS not configured)');\n }\n }\n\n /**\n * Ensure publisher is connected\n */\n private async ensureConnected(): Promise<void> {\n if (this.connected) {\n return;\n }\n\n if (this.connecting) {\n await this.connecting;\n return;\n }\n\n this.connecting = this.publisher.connect().then(() => {\n this.connected = true;\n this.connecting = null;\n logger.info('[NatsGraphEventEmitter] Publisher connected');\n });\n\n await this.connecting;\n }\n\n /**\n * Publish entity event to graph queue\n *\n * @param eventType - The lifecycle event type\n * @param entity - Entity data (id, type, data)\n * @param context - Event context (product, org, user, workspace)\n * @param rbac - Optional RBAC metadata. When present, the RBAC consumer will\n * create/update/delete resources. When absent, only graph consumer processes.\n */\n async publishEntityEvent(\n eventType: EntityEventType,\n entity: {\n id: string;\n type: string;\n data: Record<string, unknown>;\n },\n context: {\n productName: string;\n organizationId: string;\n actorId?: string;\n workspaceId?: string;\n },\n rbac?: EntityEventRbacMetadata\n ): Promise<void> {\n await this.ensureConnected();\n\n const eventId = uuidv4();\n const action = eventType.split('.')[1]; // 'created', 'updated', 'deleted'\n const subject = `graph.${context.productName}.${entity.type}.${action}`;\n\n logger.debug('[NatsGraphEventEmitter] Publishing entity event', {\n eventId,\n eventType,\n entityId: entity.id,\n entityType: entity.type,\n subject,\n hasRbac: !!rbac,\n });\n\n // All graph events go to WSPACE_GRAPH_EVENTS stream (where graph-sync-consumer\n // and rbac-entity-consumer listen). Global services use GRAPH_NATS_URL to connect\n // to the workspace NATS instance for graph event publishing.\n const streamName = 'WSPACE_GRAPH_EVENTS';\n const streamSubjects = ['graph.>'];\n\n await this.publisher.publish({\n subject,\n data: {\n eventId,\n eventType,\n productSource: context.productName,\n organizationId: context.organizationId,\n entity,\n context: {\n actorId: context.actorId,\n workspaceId: context.workspaceId,\n },\n // Include RBAC metadata when configured (consumed by rbac-entity-consumer)\n ...(rbac && { rbac }),\n timestamp: new Date().toISOString(),\n },\n metadata: {\n eventId,\n productName: context.productName,\n organizationId: context.organizationId,\n actorId: context.actorId,\n workspaceId: context.workspaceId,\n entityType: entity.type,\n entityId: entity.id,\n },\n options: {\n stream: streamName,\n streamSubjects,\n },\n });\n }\n\n /**\n * Disconnect the publisher\n */\n async disconnect(): Promise<void> {\n if (this.connected) {\n await this.publisher.disconnect();\n this.connected = false;\n logger.info('[NatsGraphEventEmitter] Publisher disconnected');\n }\n }\n\n /**\n * Get health check status\n */\n async healthCheck(): Promise<{ healthy: boolean; message: string }> {\n const result = await this.publisher.healthCheck();\n const isHealthy = result.status === 'healthy';\n return {\n healthy: isHealthy,\n message: result.error || (isHealthy ? 'Healthy' : 'Unhealthy'),\n };\n }\n}\n\n/**\n * Singleton instance\n */\nlet _graphEventEmitter: NatsGraphEventEmitter | null = null;\n\n/**\n * Get or create the graph event emitter singleton\n *\n * @returns Graph event emitter instance\n */\nexport function getGraphEventEmitter(): GraphEventEmitter {\n if (!_graphEventEmitter) {\n _graphEventEmitter = new NatsGraphEventEmitter();\n }\n return _graphEventEmitter;\n}\n\n/**\n * Create a new graph event emitter instance (non-singleton)\n *\n * @returns New graph event emitter instance\n */\nexport function createGraphEventEmitter(): GraphEventEmitter {\n return new NatsGraphEventEmitter();\n}\n\n/**\n * Reset the singleton (for testing)\n */\nexport async function resetGraphEventEmitter(): Promise<void> {\n if (_graphEventEmitter) {\n await _graphEventEmitter.disconnect();\n _graphEventEmitter = null;\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { shouldSyncRelationship, shouldSyncEntity, parseRelationship, getCollectionForEntity, extractMinimalFields, extractEntityTitle, createRelationshipEvent, createEntityEvent, addGraphExtension, GraphRegistry } from './chunk-TKBD2ONF.js';
2
- import { getGraphEventEmitter, NatsGraphEventEmitter } from './chunk-RUGNI7CR.js';
3
- import { ValidationError } from './chunk-RTQIRGVB.js';
2
+ import { getGraphEventEmitter, NatsGraphEventEmitter } from './chunk-ELLX3K54.js';
3
+ import { ValidationError } from './chunk-SAG6ZYWQ.js';
4
4
  import { logger } from './chunk-CBZNP6RF.js';
5
5
  import { __export, __name } from './chunk-XE4OXN2W.js';
6
6
 
@@ -1871,5 +1871,5 @@ var GraphModule = class {
1871
1871
  };
1872
1872
 
1873
1873
  export { AUDIT_FIELDS, GraphEventsPublisher, GraphExportService, GraphModule, SOFT_DELETE_FIELDS, STANDARD_FIELDS, TENANT_FIELDS, createGraphEventsHelper, createGraphExportService, createPrismaGraphIntegration, createRelationshipFromEntity, defineEntity, defineGraphConfig, defineModuleGraph, defineRelationship, getGraphEventsPublisher, getGraphStats, graph_exports, initializeGraph, isGraphInitialized };
1874
- //# sourceMappingURL=chunk-THTLTTA6.js.map
1875
- //# sourceMappingURL=chunk-THTLTTA6.js.map
1874
+ //# sourceMappingURL=chunk-F5XEAGHQ.js.map
1875
+ //# sourceMappingURL=chunk-F5XEAGHQ.js.map