@burdenoff/be-sdk 2026.514.1 → 2026.516.1

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 (46) hide show
  1. package/dist/EventQueueFactory-DGHBOV7I.js +8 -0
  2. package/dist/{EventQueueFactory-TWDDFMQY.js.map → EventQueueFactory-DGHBOV7I.js.map} +1 -1
  3. package/dist/cache/index.d.ts +1 -1
  4. package/dist/cache/index.js +1 -1
  5. package/dist/{chunk-4B765NQA.js → chunk-24VR7PF3.js} +2 -2
  6. package/dist/{chunk-4B765NQA.js.map → chunk-24VR7PF3.js.map} +1 -1
  7. package/dist/{chunk-6JHB4FDQ.js → chunk-462GJL5K.js} +5 -5
  8. package/dist/{chunk-6JHB4FDQ.js.map → chunk-462GJL5K.js.map} +1 -1
  9. package/dist/{chunk-MI72VKNQ.js → chunk-7V6GUNGP.js} +3 -3
  10. package/dist/{chunk-MI72VKNQ.js.map → chunk-7V6GUNGP.js.map} +1 -1
  11. package/dist/{chunk-L72RC2EI.js → chunk-CCV2AVAI.js} +3 -3
  12. package/dist/{chunk-L72RC2EI.js.map → chunk-CCV2AVAI.js.map} +1 -1
  13. package/dist/{chunk-3JBKPVWY.js → chunk-FSTWNBRX.js} +5 -5
  14. package/dist/{chunk-3JBKPVWY.js.map → chunk-FSTWNBRX.js.map} +1 -1
  15. package/dist/{chunk-Q6HJARHV.js → chunk-KLYAIEAX.js} +3 -3
  16. package/dist/{chunk-Q6HJARHV.js.map → chunk-KLYAIEAX.js.map} +1 -1
  17. package/dist/{chunk-EMSON3UD.js → chunk-LRGXT37B.js} +4 -74
  18. package/dist/chunk-LRGXT37B.js.map +1 -0
  19. package/dist/{chunk-Y4TPKRZB.js → chunk-M3PYLAPT.js} +3 -3
  20. package/dist/{chunk-Y4TPKRZB.js.map → chunk-M3PYLAPT.js.map} +1 -1
  21. package/dist/{chunk-QKJR4L7B.js → chunk-N52W3RQA.js} +100 -6
  22. package/dist/chunk-N52W3RQA.js.map +1 -0
  23. package/dist/{chunk-6PKIKOTT.js → chunk-Q6N74R6S.js} +71 -68
  24. package/dist/chunk-Q6N74R6S.js.map +1 -0
  25. package/dist/{chunk-A46X4Y5Q.js → chunk-SNW4BLF2.js} +3 -3
  26. package/dist/{chunk-A46X4Y5Q.js.map → chunk-SNW4BLF2.js.map} +1 -1
  27. package/dist/{chunk-NAOHXHUP.js → chunk-U455UF4O.js} +3 -3
  28. package/dist/{chunk-NAOHXHUP.js.map → chunk-U455UF4O.js.map} +1 -1
  29. package/dist/event-queue/index.d.ts +1 -1
  30. package/dist/event-queue/index.js +4 -4
  31. package/dist/export/index.js +3 -3
  32. package/dist/gateway/index.js +2 -2
  33. package/dist/gateway/security/index.js +1 -1
  34. package/dist/graph/index.js +5 -5
  35. package/dist/graphql/index.js +2 -2
  36. package/dist/{index-BODgvRtL.d.ts → index-B6IwtUb1.d.ts} +3 -1
  37. package/dist/{index-eUvoVdr7.d.ts → index-syMAjErz.d.ts} +1 -0
  38. package/dist/index.d.ts +3 -3
  39. package/dist/index.js +15 -15
  40. package/dist/init/index.js +5 -5
  41. package/dist/prisma/index.js +4 -4
  42. package/package.json +1 -1
  43. package/dist/EventQueueFactory-TWDDFMQY.js +0 -8
  44. package/dist/chunk-6PKIKOTT.js.map +0 -1
  45. package/dist/chunk-EMSON3UD.js.map +0 -1
  46. package/dist/chunk-QKJR4L7B.js.map +0 -1
@@ -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/implementations/redis-streams/trace-context.ts","../src/event-queue/implementations/redis-streams/RedisStreamsEventConsumer.ts","../src/event-queue/implementations/redis-streams/RedisStreamsEventPublisher.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","DEFAULT_STREAM_MAX_BYTES","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","creds","credsFile","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","errorMessage","find","requestedStream","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","TRACE_KEYS","injectTraceFields","c","k","v","extractTraceContext","fields","DEFAULT_BLOCK_MS","DEFAULT_BATCH","REGISTRY_REFRESH_MS","DEFAULT_ACK_WAIT_MS","DEFAULT_MAX_DELIVER","SWEEP_INTERVAL_MS","DELAYQ_INTERVAL_MS","RedisStreamsSubscription","receivedCount","processedCount","failedCount","unsubscribeFn","recordReceived","recordProcessed","recordFailed","RedisStreamsEventConsumer","connection","subscriptionLoops","Set","keyPrefix","group","ackWaitMs","consumedCount","stopped","sweepTimer","delayqTimer","knownStreams","RedisStreamsConnection","process","env","hostname","pid","Math","max","round","t","setInterval","sweepPending","unref","drainDelayQueues","clearInterval","t0","pong","ping","latencyMs","_config","opts","sub","filter","s","startId","resolveStartId","wildcard","isWildcard","handlerFn","streamKey","prefix","ensureGroup","spawnLoop","boundary","boundaryOf","refresh","client","getClient","smembers","registryKey","matchSubject","has","out","raw","xreadgroup","rawFields","parsed","parseEntry","toAcknowledgeable","dlqGroup","dlq","dlqKey","xgroup","res","evt","_stream","seen","members","m","loop","makeBlockingClient","setTimeout","i","val","acked","xack","xdel","score","payload","zadd","delayQueueKey","flat","xadd","claimed","xautoclaim","pending","xpending","isArray","lockKey","delayLockKey","got","due","zrangebyscore","member","indexOf","slice","zrem","del","RedisStreamsEventPublisher","maxLen","dedupTtl","parseInt","dedupTtlSeconds","publishInternal","msgId","enableDedup","ok","dedupKey","tenantId","sadd","e","reply","replyKey","replyTo","timeoutMs","xrange","last","payloadIdx","sendReply","expire","resolveQueueType","QueueType","REDIS_STREAMS","NATS","EventQueueFactory","createPublisher","createConsumer","createPublisherFromEnv","defaultTTL","createConsumerFromEnv","createPublisherForLayer","layer","serviceName","envPrefix","defaults","DEFAULT_LAYER_RESOURCES","natsUrl","createConsumerForLayer"],"mappings":"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","file":"chunk-LRGXT37B.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\nconst DEFAULT_STREAM_MAX_BYTES = 10 * 1024 * 1024;\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 creds: config.creds,\n credsFile: config.credsFile,\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 ?? DEFAULT_STREAM_MAX_BYTES,\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 const jsm = this.connectionManager.getJetStreamManager();\n\n try {\n let 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 try {\n await this.ensureStream({\n name: streamName,\n subjects: streamSubjects,\n retention: options.options?.retention || 'limits',\n storage: options.options?.storage || 'file',\n });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n if (!errorMessage.includes('subjects overlap')) {\n throw error;\n }\n\n streamName = await jsm.streams.find(options.subject);\n logger.info('[NatsEventConsumer] Using existing stream for overlapping subject', {\n requestedStream: options.options?.stream || this.config.stream,\n stream: streamName,\n subject: options.subject,\n });\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\nconst DEFAULT_STREAM_MAX_BYTES = 10 * 1024 * 1024;\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 ?? DEFAULT_STREAM_MAX_BYTES,\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 * W3C trace context propagation for Redis Streams entries.\n *\n * Stream entries carry trace context as ordinary fields (`traceparent`,\n * `tracestate`, `baggage`). When `@opentelemetry/api` isn't installed at the\n * consumer, these helpers degrade to no-ops.\n */\nimport { logger } from '../../../logger/index.js';\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) return otelApiPromise;\n otelApiPromise = (async () => {\n try {\n const mod = (await import('@opentelemetry/api')) as unknown as OtelApi;\n return mod;\n } catch {\n logger.debug('[redis-streams/trace-context] @opentelemetry/api not available; tracing disabled');\n return null;\n }\n })();\n return otelApiPromise;\n}\n\nconst TRACE_KEYS = ['traceparent', 'tracestate', 'baggage'] as const;\n\n/** Inject the active OTel context into a plain record of stream fields. */\nexport async function injectTraceFields(): Promise<Record<string, string>> {\n const api = await loadOtelApi();\n if (!api) return {};\n const carrier: Record<string, string> = {};\n try {\n api.propagation.inject(\n api.context.active(),\n carrier,\n {\n set(c, k, v) {\n c[k] = v;\n },\n }\n );\n } catch (err) {\n logger.debug('[redis-streams/trace-context] inject failed', {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n return carrier;\n}\n\n/** Extract OTel context from stream-entry fields. */\nexport async function extractTraceContext(fields: Record<string, string>): Promise<unknown> {\n const api = await loadOtelApi();\n if (!api) return undefined;\n const carrier: Record<string, string> = {};\n for (const key of TRACE_KEYS) {\n const value = fields[key];\n if (value) carrier[key] = value;\n }\n try {\n return api.propagation.extract(api.context.active(), carrier, {\n get(c, k) {\n return c[k];\n },\n keys(c) {\n return Object.keys(c);\n },\n });\n } catch {\n return undefined;\n }\n}\n\n/** Wrap a consumer handler in a CONSUMER-kind span rooted at the carried trace. */\nexport async function runWithConsumerSpan<T>(\n subject: string,\n fields: Record<string, string>,\n handler: () => Promise<T>\n): Promise<T> {\n const api = await loadOtelApi();\n if (!api) return handler();\n try {\n const parentCtx = await extractTraceContext(fields);\n const tracer = api.trace.getTracer('@burdenoff/be-sdk/redis-streams');\n return await new Promise<T>((resolve, reject) => {\n tracer.startActiveSpan(\n `redis-streams.consume ${subject}`,\n {\n kind: 5,\n attributes: { 'messaging.system': 'redis', 'messaging.destination.name': subject },\n },\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 {\n return handler();\n }\n}\n","/**\n * Redis Streams implementation of IEventConsumer.\n *\n * One ioredis client per active subscription handles `XREADGROUP BLOCK` in a\n * background loop, with periodic XAUTOCLAIM reclaiming abandoned pending\n * entries and a small ZSET-based delay queue draining NAK'd messages back\n * into the stream when their delay expires.\n */\nimport { randomUUID } from 'node:crypto';\nimport { hostname } from 'node:os';\nimport { logger } from '../../../logger/index.js';\nimport type {\n IEventConsumer,\n ISubscription,\n} from '../../interfaces/IEventConsumer.js';\nimport type {\n ConsumerConfig,\n EventQueueHealthCheckResult,\n QueueStatistics,\n} from '../../types/config.js';\nimport type {\n AcknowledgeableEvent,\n EventHandler,\n EventMetadata,\n StreamConfig,\n SubscriptionOptions,\n} from '../../types/events.js';\nimport { RedisStreamsConnection, type IoRedis } from './RedisStreamsConnection.js';\nimport {\n boundaryOf,\n delayLockKey,\n delayQueueKey,\n dlqKey,\n isWildcard,\n matchSubject,\n registryKey,\n streamKey,\n} from './keyspace.js';\nimport { runWithConsumerSpan } from './trace-context.js';\n\ninterface ParsedEntry<T = unknown> {\n id: string;\n stream: string;\n subject: string;\n data: T;\n metadata: EventMetadata;\n timestamp: string;\n fields: Record<string, string>;\n deliveryCount: number;\n}\n\nconst DEFAULT_BLOCK_MS = 5000;\nconst DEFAULT_BATCH = 10;\nconst REGISTRY_REFRESH_MS = 10_000;\nconst DEFAULT_ACK_WAIT_MS = 30_000;\nconst DEFAULT_MAX_DELIVER = 3;\nconst SWEEP_INTERVAL_MS = 15_000;\nconst DELAYQ_INTERVAL_MS = 1_000;\n\nclass RedisStreamsSubscription implements ISubscription {\n readonly id = randomUUID();\n private active = true;\n private receivedCount = 0;\n private processedCount = 0;\n private failedCount = 0;\n private lastActivity = new Date().toISOString();\n\n constructor(\n readonly subject: string,\n private readonly unsubscribeFn: () => Promise<void>\n ) {}\n\n async unsubscribe(): Promise<void> {\n if (!this.active) return;\n this.active = false;\n await this.unsubscribeFn();\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.receivedCount,\n messagesProcessed: this.processedCount,\n messagesFailed: this.failedCount,\n lastActivity: this.lastActivity,\n };\n }\n\n recordReceived(): void {\n this.receivedCount++;\n this.lastActivity = new Date().toISOString();\n }\n recordProcessed(): void {\n this.processedCount++;\n this.lastActivity = new Date().toISOString();\n }\n recordFailed(): void {\n this.failedCount++;\n this.lastActivity = new Date().toISOString();\n }\n}\n\nexport interface RedisStreamsConsumerConfig extends ConsumerConfig {\n keyPrefix?: string;\n}\n\nexport class RedisStreamsEventConsumer implements IEventConsumer {\n private readonly connection: RedisStreamsConnection;\n private subscriptions: RedisStreamsSubscription[] = [];\n private readonly subscriptionLoops: Set<() => Promise<void>> = new Set();\n private readonly keyPrefix: string;\n private readonly consumerName: string;\n private readonly group: string;\n private readonly maxDeliver: number;\n private readonly ackWaitMs: number;\n private readonly maxConcurrent: number;\n private consumedCount = 0;\n private failedCount = 0;\n private lastActivity: Date | null = null;\n private stopped = false;\n private sweepTimer: ReturnType<typeof setInterval> | null = null;\n private delayqTimer: ReturnType<typeof setInterval> | null = null;\n private knownStreams: Map<string, string> = new Map(); // streamKey -> subject\n\n constructor(config: RedisStreamsConsumerConfig) {\n this.connection = new RedisStreamsConnection({\n type: 'redis-streams',\n url: config.url ?? process.env['REDIS_URL'] ?? 'redis://localhost:6379',\n user: config.user,\n password: config.password,\n name: config.name,\n connectionTimeout: config.connectionTimeout,\n });\n this.keyPrefix = config.keyPrefix ?? process.env['REDIS_STREAMS_KEY_PREFIX'] ?? 'boff:events';\n this.group = config.consumer || config.name || 'default-consumer';\n this.consumerName = `${this.group}:${hostname()}:${process.pid}`;\n this.maxDeliver = config.maxDeliver ?? DEFAULT_MAX_DELIVER;\n this.ackWaitMs = config.ackWait\n ? Math.max(1000, Math.round(config.ackWait / 1_000_000))\n : DEFAULT_ACK_WAIT_MS;\n this.maxConcurrent = config.maxConcurrent ?? 5;\n }\n\n async connect(): Promise<void> {\n await this.connection.connect();\n if (!this.sweepTimer) {\n const t = setInterval(() => {\n void this.sweepPending().catch((err) => {\n logger.debug('[RedisStreamsEventConsumer] sweep error', {\n error: err instanceof Error ? err.message : String(err),\n });\n });\n }, SWEEP_INTERVAL_MS);\n t.unref?.();\n this.sweepTimer = t;\n }\n if (!this.delayqTimer) {\n const t = setInterval(() => {\n void this.drainDelayQueues().catch(() => undefined);\n }, DELAYQ_INTERVAL_MS);\n t.unref?.();\n this.delayqTimer = t;\n }\n }\n\n async disconnect(): Promise<void> {\n this.stopped = true;\n if (this.sweepTimer) clearInterval(this.sweepTimer);\n if (this.delayqTimer) clearInterval(this.delayqTimer);\n await this.unsubscribeAll();\n await this.connection.disconnect();\n }\n\n isConnected(): boolean {\n return this.connection.isConnected();\n }\n\n async healthCheck(): Promise<EventQueueHealthCheckResult> {\n try {\n const t0 = Date.now();\n const pong = await this.connection.ping();\n return {\n status: pong === 'PONG' ? 'healthy' : 'degraded',\n timestamp: new Date().toISOString(),\n connected: this.isConnected(),\n latencyMs: Date.now() - t0,\n details: {\n type: 'redis-streams',\n subscriptions: this.subscriptions.length,\n },\n };\n } catch (err) {\n return {\n status: 'unhealthy',\n timestamp: new Date().toISOString(),\n connected: false,\n details: { type: 'redis-streams' },\n error: err instanceof Error ? err.message : String(err),\n };\n }\n }\n\n async getStatistics(): Promise<QueueStatistics> {\n return Promise.resolve({\n messagesConsumed: this.consumedCount,\n messagesFailed: this.failedCount,\n messagesPublished: 0,\n activeConsumers: this.subscriptions.length,\n lastActivity: this.lastActivity?.toISOString() ?? null,\n details: { type: 'redis-streams', group: this.group },\n });\n }\n\n async ensureStream(_config: StreamConfig): Promise<void> {\n return Promise.resolve();\n }\n\n async ensureConsumer(_config: ConsumerConfig): Promise<void> {\n return Promise.resolve();\n }\n\n async subscribe<T = unknown>(opts: {\n subject: string;\n handler: EventHandler<T>;\n options?: SubscriptionOptions;\n }): Promise<ISubscription> {\n await this.connect();\n const sub = new RedisStreamsSubscription(opts.subject, async () => {\n this.subscriptions = this.subscriptions.filter((s) => s !== sub);\n });\n this.subscriptions.push(sub);\n\n const startId = this.resolveStartId(opts.options?.deliverPolicy);\n const wildcard = isWildcard(opts.subject);\n const handlerFn = opts.handler as EventHandler<unknown>;\n\n if (!wildcard) {\n const stream = streamKey(opts.subject, { prefix: this.keyPrefix });\n await this.ensureGroup(stream, startId);\n this.knownStreams.set(stream, opts.subject);\n this.spawnLoop(sub, stream, opts.subject, handlerFn);\n } else {\n const boundary = boundaryOf(opts.subject);\n const refresh = async (): Promise<void> => {\n const client = this.connection.getClient();\n const subjects = await client.smembers(registryKey(boundary));\n for (const s of subjects) {\n if (!matchSubject(opts.subject, s)) continue;\n const stream = streamKey(s, { prefix: this.keyPrefix });\n if (this.knownStreams.has(stream)) continue;\n await this.ensureGroup(stream, startId);\n this.knownStreams.set(stream, s);\n this.spawnLoop(sub, stream, s, handlerFn);\n }\n };\n await refresh();\n const t = setInterval(() => {\n if (this.stopped || !sub.isActive()) {\n clearInterval(t);\n return;\n }\n void refresh().catch(() => undefined);\n }, REGISTRY_REFRESH_MS);\n t.unref?.();\n }\n\n return sub;\n }\n\n async subscribeMultiple<T = unknown>(\n subjects: string[],\n handler: EventHandler<T>,\n options?: SubscriptionOptions\n ): Promise<ISubscription[]> {\n const out: ISubscription[] = [];\n for (const subject of subjects) {\n out.push(await this.subscribe({ subject, handler, options }));\n }\n return out;\n }\n\n async pull<T = unknown>(opts: {\n subject: string;\n batch?: number;\n timeout?: number;\n }): Promise<AcknowledgeableEvent<T>[]> {\n await this.connect();\n const stream = streamKey(opts.subject, { prefix: this.keyPrefix });\n await this.ensureGroup(stream, '$');\n const client = this.connection.getClient();\n const raw = (await client.xreadgroup(\n 'GROUP',\n this.group,\n this.consumerName,\n 'COUNT',\n opts.batch ?? DEFAULT_BATCH,\n 'BLOCK',\n opts.timeout ?? DEFAULT_BLOCK_MS,\n 'STREAMS',\n stream,\n '>'\n )) as Array<[string, Array<[string, string[]]>]> | null;\n if (!raw) return [];\n const out: AcknowledgeableEvent<T>[] = [];\n for (const [streamName, entries] of raw) {\n for (const [id, rawFields] of entries) {\n const parsed = this.parseEntry<T>(streamName, id, rawFields);\n out.push(this.toAcknowledgeable(streamName, id, parsed));\n }\n }\n return out;\n }\n\n async unsubscribeAll(): Promise<void> {\n for (const sub of [...this.subscriptions]) {\n await sub.unsubscribe();\n }\n this.subscriptions = [];\n this.subscriptionLoops.clear();\n }\n\n getSubscriptions(): ISubscription[] {\n return [...this.subscriptions];\n }\n\n async processDLQ<T = unknown>(handler: EventHandler<T>): Promise<void> {\n await this.connect();\n const client = this.connection.getClient();\n const dlqGroup = `${this.group}-dlq`;\n for (const [stream] of this.knownStreams) {\n const dlq = dlqKey(stream);\n try {\n await client.xgroup('CREATE', dlq, dlqGroup, '0', 'MKSTREAM');\n } catch {\n /* already exists */\n }\n const res = (await client.xreadgroup(\n 'GROUP',\n dlqGroup,\n this.consumerName,\n 'COUNT',\n 50,\n 'BLOCK',\n 100,\n 'STREAMS',\n dlq,\n '>'\n )) as Array<[string, Array<[string, string[]]>]> | null;\n if (!res) continue;\n for (const [, entries] of res) {\n for (const [id, rawFields] of entries) {\n const parsed = this.parseEntry<T>(dlq, id, rawFields);\n const evt = this.toAcknowledgeable<T>(dlq, id, parsed, dlqGroup);\n try {\n await handler(evt);\n } catch (err) {\n logger.error('[RedisStreamsEventConsumer] DLQ handler error', {\n error: err instanceof Error ? err.message : String(err),\n });\n }\n }\n }\n }\n }\n\n async listSubjects(_stream?: string): Promise<string[]> {\n await this.connect();\n const client = this.connection.getClient();\n const seen = new Set<string>();\n for (const subject of this.knownStreams.values()) {\n const members = await client.smembers(registryKey(boundaryOf(subject)));\n for (const m of members) seen.add(m);\n }\n return [...seen];\n }\n\n // ---- internals ----\n\n private resolveStartId(policy: SubscriptionOptions['deliverPolicy'] | undefined): string {\n switch (policy) {\n case 'all':\n return '0';\n case 'new':\n return '$';\n case 'last':\n return '$';\n default:\n return '$';\n }\n }\n\n private async ensureGroup(stream: string, startId: string): Promise<void> {\n const client = this.connection.getClient();\n try {\n await client.xgroup('CREATE', stream, this.group, startId, 'MKSTREAM');\n logger.debug('[RedisStreamsEventConsumer] group created', {\n stream,\n group: this.group,\n startId,\n });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (!msg.includes('BUSYGROUP')) {\n throw err;\n }\n }\n }\n\n private spawnLoop(\n sub: RedisStreamsSubscription,\n stream: string,\n subject: string,\n handler: EventHandler<unknown>\n ): void {\n const loop = async (): Promise<void> => {\n const client = await this.connection.makeBlockingClient();\n try {\n while (!this.stopped && sub.isActive()) {\n let raw: Array<[string, Array<[string, string[]]>]> | null = null;\n try {\n raw = (await client.xreadgroup(\n 'GROUP',\n this.group,\n this.consumerName,\n 'COUNT',\n this.maxConcurrent,\n 'BLOCK',\n DEFAULT_BLOCK_MS,\n 'STREAMS',\n stream,\n '>'\n )) as Array<[string, Array<[string, string[]]>]> | null;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes('NOGROUP')) {\n await this.ensureGroup(stream, '$');\n continue;\n }\n logger.warn('[RedisStreamsEventConsumer] read error', { stream, error: msg });\n await new Promise((res) => setTimeout(res, 1000));\n continue;\n }\n if (!raw) continue;\n for (const [, entries] of raw) {\n for (const [id, rawFields] of entries) {\n sub.recordReceived();\n this.consumedCount++;\n this.lastActivity = new Date();\n const parsed = this.parseEntry(stream, id, rawFields);\n const evt = this.toAcknowledgeable(stream, id, parsed);\n try {\n await runWithConsumerSpan(subject, parsed.fields, () => handler(evt));\n sub.recordProcessed();\n } catch (err) {\n sub.recordFailed();\n this.failedCount++;\n logger.error('[RedisStreamsEventConsumer] handler error', {\n subject,\n id,\n error: err instanceof Error ? err.message : String(err),\n });\n // Auto-nak on uncaught throw (re-deliver after ackWait).\n try {\n await evt.nak();\n } catch {\n /* ignore */\n }\n }\n }\n }\n }\n } finally {\n try {\n client.disconnect();\n } catch {\n /* ignore */\n }\n }\n };\n void loop().catch((err) => {\n logger.error('[RedisStreamsEventConsumer] loop crashed', {\n stream,\n error: err instanceof Error ? err.message : String(err),\n });\n });\n }\n\n private parseEntry<T>(stream: string, id: string, rawFields: string[]): ParsedEntry<T> {\n const fields: Record<string, string> = {};\n for (let i = 0; i + 1 < rawFields.length; i += 2) {\n const key = rawFields[i];\n const val = rawFields[i + 1];\n if (key === undefined || val === undefined) continue;\n fields[key] = val;\n }\n let data: T;\n try {\n data = JSON.parse(fields['payload'] ?? 'null') as T;\n } catch {\n data = fields['payload'] as unknown as T;\n }\n let metadata: EventMetadata;\n try {\n metadata = JSON.parse(fields['metadata'] ?? '{}') as EventMetadata;\n } catch {\n metadata = { correlationId: fields['correlation-id'] ?? '' };\n }\n if (!metadata.correlationId) metadata.correlationId = fields['correlation-id'] ?? '';\n return {\n id,\n stream,\n subject: fields['subject'] ?? '',\n data,\n metadata,\n timestamp: fields['timestamp'] ?? new Date().toISOString(),\n fields,\n deliveryCount: 1,\n };\n }\n\n private toAcknowledgeable<T>(\n stream: string,\n id: string,\n parsed: ParsedEntry<T>,\n group: string = this.group\n ): AcknowledgeableEvent<T> {\n const connection = this.connection;\n let acked = false;\n return {\n id,\n subject: parsed.subject,\n data: parsed.data,\n metadata: parsed.metadata,\n timestamp: parsed.timestamp,\n async ack(): Promise<void> {\n if (acked) return;\n acked = true;\n const client = connection.getClient();\n await client.xack(stream, group, id);\n await client.xdel(stream, id).catch(() => undefined);\n },\n async nak(delay = 0): Promise<void> {\n if (acked) return;\n acked = true;\n const client = connection.getClient();\n if (delay > 0) {\n // Park in delay queue; worker will re-XADD and ACK original.\n const score = Date.now() + delay;\n const payload = JSON.stringify(parsed.fields);\n await client.zadd(delayQueueKey(stream), score, `${id}|${payload}`);\n await client.xack(stream, group, id);\n await client.xdel(stream, id).catch(() => undefined);\n }\n // delay=0: do nothing — XAUTOCLAIM will reclaim after ackWait.\n },\n async term(): Promise<void> {\n if (acked) return;\n acked = true;\n const client = connection.getClient();\n const dlq = dlqKey(stream);\n const flat: string[] = [];\n for (const [k, v] of Object.entries(parsed.fields)) flat.push(k, v);\n await client.xadd(dlq, 'MAXLEN', '~', 10_000, '*', ...flat);\n await client.xack(stream, group, id);\n await client.xdel(stream, id).catch(() => undefined);\n },\n isRedelivered(): boolean {\n return parsed.deliveryCount > 1;\n },\n getDeliveryAttempt(): number {\n return parsed.deliveryCount;\n },\n };\n }\n\n private async sweepPending(): Promise<void> {\n if (this.stopped || this.knownStreams.size === 0) return;\n const client = this.connection.getClient();\n for (const [stream] of this.knownStreams) {\n try {\n const claimed = (await client.xautoclaim(\n stream,\n this.group,\n this.consumerName,\n this.ackWaitMs,\n '0',\n 'COUNT',\n 50\n )) as [string, Array<[string, string[]]>, string[]] | null;\n if (!claimed) continue;\n const entries = claimed[1] ?? [];\n for (const [id, rawFields] of entries) {\n const pending = (await client.xpending(\n stream,\n this.group,\n 'IDLE',\n 0,\n '-',\n '+',\n 1,\n this.consumerName\n )) as Array<[string, string, number, number]>;\n const deliveryCount = Array.isArray(pending) && pending[0] ? pending[0][3] : 1;\n if (deliveryCount > this.maxDeliver) {\n const flat: string[] = [];\n for (let i = 0; i + 1 < rawFields.length; i += 2) {\n flat.push(rawFields[i]!, rawFields[i + 1]!);\n }\n flat.push('dlq-reason', 'max-deliver-exceeded');\n flat.push('dlq-deliveries', String(deliveryCount));\n await client.xadd(dlqKey(stream), 'MAXLEN', '~', 10_000, '*', ...flat);\n await client.xack(stream, this.group, id);\n await client.xdel(stream, id).catch(() => undefined);\n logger.warn('[RedisStreamsEventConsumer] message moved to DLQ', {\n stream,\n id,\n deliveryCount,\n });\n }\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes('NOGROUP')) continue;\n logger.debug('[RedisStreamsEventConsumer] sweep iteration error', { stream, error: msg });\n }\n }\n }\n\n private async drainDelayQueues(): Promise<void> {\n if (this.stopped || this.knownStreams.size === 0) return;\n const client = this.connection.getClient();\n for (const [stream] of this.knownStreams) {\n const lockKey = delayLockKey(stream);\n const got = await client.set(lockKey, this.consumerName, 'NX', 'EX', 30).catch(() => null);\n if (got !== 'OK') continue;\n try {\n const due = await client.zrangebyscore(\n delayQueueKey(stream),\n 0,\n Date.now(),\n 'LIMIT',\n 0,\n 50\n );\n for (const member of due) {\n const split = member.indexOf('|');\n if (split < 0) continue;\n const payload = member.slice(split + 1);\n let fields: Record<string, string> = {};\n try {\n fields = JSON.parse(payload) as Record<string, string>;\n } catch {\n continue;\n }\n const flat: string[] = [];\n for (const [k, v] of Object.entries(fields)) flat.push(k, v);\n await client.xadd(stream, 'MAXLEN', '~', 100_000, '*', ...flat);\n await client.zrem(delayQueueKey(stream), member);\n }\n } finally {\n await client.del(lockKey).catch(() => undefined);\n }\n }\n }\n}\n\nexport type { IoRedis };\n","/**\n * Redis Streams implementation of IEventPublisher.\n *\n * Each subject is its own stream (`boff:events:<subject-with-colons>`); MAXLEN\n * trimming keeps each stream bounded; dedup is enforced by `SET NX EX` on a\n * per-message-id key before XADD.\n */\nimport { randomUUID } from 'node:crypto';\nimport { logger } from '../../../logger/index.js';\nimport type { IEventPublisher, PublishOptions } from '../../interfaces/IEventPublisher.js';\nimport type { PublisherConfig, EventQueueHealthCheckResult, QueueStatistics } from '../../types/config.js';\nimport type { EventMetadata, StreamConfig } from '../../types/events.js';\nimport { RedisStreamsConnection, type IoRedis } from './RedisStreamsConnection.js';\nimport {\n boundaryOf,\n dedupKey,\n registryKey,\n replyKey,\n streamKey,\n} from './keyspace.js';\nimport { injectTraceFields } from './trace-context.js';\n\nexport interface RedisStreamsPublisherConfig extends PublisherConfig {\n /** Approximate MAXLEN trim threshold per stream. Default 100_000. */\n maxLen?: number;\n /** Dedup TTL window in seconds. Default 120. */\n dedupTtlSeconds?: number;\n /** Key namespace override. Default `boff:events`. */\n keyPrefix?: string;\n}\n\nexport class RedisStreamsEventPublisher implements IEventPublisher {\n private connection: RedisStreamsConnection;\n private publishCount = 0;\n private lastPublishTime: Date | null = null;\n private readonly maxLen: number;\n private readonly dedupTtl: number;\n private readonly keyPrefix: string;\n\n constructor(private config: RedisStreamsPublisherConfig) {\n this.connection = new RedisStreamsConnection(config);\n this.maxLen = config.maxLen ?? parseInt(process.env['REDIS_STREAMS_MAXLEN'] ?? '100000', 10);\n this.dedupTtl = config.dedupTtlSeconds ?? parseInt(process.env['REDIS_STREAMS_DEDUP_TTL'] ?? '120', 10);\n this.keyPrefix = config.keyPrefix ?? process.env['REDIS_STREAMS_KEY_PREFIX'] ?? 'boff:events';\n }\n\n async connect(): Promise<void> {\n await this.connection.connect();\n }\n\n async disconnect(): Promise<void> {\n await this.connection.disconnect();\n }\n\n isConnected(): boolean {\n return this.connection.isConnected();\n }\n\n async healthCheck(): Promise<EventQueueHealthCheckResult> {\n try {\n const t0 = Date.now();\n const pong = await this.connection.ping();\n return {\n status: pong === 'PONG' ? 'healthy' : 'degraded',\n timestamp: new Date().toISOString(),\n connected: this.isConnected(),\n latencyMs: Date.now() - t0,\n details: { type: 'redis-streams', url: this.config.url },\n };\n } catch (err) {\n return {\n status: 'unhealthy',\n timestamp: new Date().toISOString(),\n connected: false,\n details: { type: 'redis-streams' },\n error: err instanceof Error ? err.message : String(err),\n };\n }\n }\n\n async getStatistics(): Promise<QueueStatistics> {\n return {\n messagesPublished: this.publishCount,\n messagesConsumed: 0,\n messagesFailed: 0,\n activePublishers: 1,\n activeConsumers: 0,\n lastActivity: this.lastPublishTime?.toISOString() ?? null,\n details: { type: 'redis-streams' },\n };\n }\n\n async ensureStream(_config: StreamConfig): Promise<void> {\n // Streams are created lazily by XADD; no-op here.\n return Promise.resolve();\n }\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 return this.publishInternal(options);\n }\n\n private async publishInternal<T>(opts: {\n subject: string;\n data: T;\n metadata?: Partial<EventMetadata>;\n options?: PublishOptions;\n }): Promise<string> {\n await this.connect();\n const client = this.connection.getClient();\n const stream = streamKey(opts.subject, { prefix: this.keyPrefix });\n const msgId = opts.options?.messageId ?? randomUUID();\n const correlationId = opts.metadata?.correlationId ?? randomUUID();\n const enableDedup =\n this.config.enableDeduplication === true || opts.options?.messageId !== undefined;\n\n if (enableDedup) {\n const ok = await client.set(dedupKey(stream, msgId), '1', 'NX', 'EX', this.dedupTtl);\n if (ok !== 'OK') {\n logger.debug('[RedisStreamsEventPublisher] dedup hit; skipping publish', {\n subject: opts.subject,\n msgId,\n });\n return msgId;\n }\n }\n\n const trace = await injectTraceFields();\n const fields: Record<string, string> = {\n 'msg-id': msgId,\n subject: opts.subject,\n 'correlation-id': correlationId,\n timestamp: new Date().toISOString(),\n priority: opts.options?.priority ?? this.config.defaultPriority ?? 'normal',\n source: opts.metadata?.source ?? this.config.name ?? 'unknown',\n payload: JSON.stringify(opts.data ?? null),\n metadata: JSON.stringify(opts.metadata ?? {}),\n ...trace,\n };\n if (opts.metadata?.userId) fields['user-id'] = String(opts.metadata.userId);\n if (opts.metadata?.workspaceId) fields['workspace-id'] = String(opts.metadata.workspaceId);\n if (opts.metadata?.tenantId) fields['tenant-id'] = String(opts.metadata.tenantId);\n\n const flat: string[] = [];\n for (const [k, v] of Object.entries(fields)) {\n flat.push(k, v);\n }\n\n const id = await client.xadd(stream, 'MAXLEN', '~', this.maxLen, '*', ...flat);\n\n // Async fire-and-forget registry update\n void client.sadd(registryKey(boundaryOf(opts.subject)), opts.subject).catch(() => undefined);\n\n this.publishCount++;\n this.lastPublishTime = new Date();\n logger.debug('[RedisStreamsEventPublisher] published', {\n subject: opts.subject,\n stream,\n id,\n });\n return id;\n }\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 out: string[] = [];\n for (const e of events) {\n out.push(await this.publishInternal(e));\n }\n return out;\n }\n\n /**\n * Emulated request/response: writer XADDs onto its own subject, then\n * blocks on a one-shot reply stream keyed by correlationId.\n */\n async publishWithAck<T = unknown, R = unknown>(opts: {\n subject: string;\n data: T;\n metadata?: Partial<EventMetadata>;\n timeout?: number;\n }): Promise<R> {\n await this.connect();\n const client = this.connection.getClient();\n const correlationId = opts.metadata?.correlationId ?? randomUUID();\n const reply = replyKey(correlationId);\n await this.publishInternal({\n subject: opts.subject,\n data: opts.data,\n metadata: { ...opts.metadata, correlationId, replyTo: reply },\n });\n\n const timeoutMs = opts.timeout ?? 5000;\n const t0 = Date.now();\n while (Date.now() - t0 < timeoutMs) {\n const entries = (await client.xrange(reply, '-', '+')) as Array<[string, string[]]>;\n if (Array.isArray(entries) && entries.length > 0) {\n const last = entries[entries.length - 1];\n if (!last) break;\n const rawFields = last[1];\n const payloadIdx = rawFields.indexOf('payload');\n const payload = payloadIdx >= 0 ? rawFields[payloadIdx + 1] : '{}';\n await client.del(reply);\n return JSON.parse(payload ?? '{}') as R;\n }\n await new Promise((res) => setTimeout(res, 50));\n }\n await client.del(reply).catch(() => undefined);\n throw new Error(`[RedisStreamsEventPublisher] publishWithAck timed out for subject=${opts.subject}`);\n }\n\n /** Internal helper used by the consumer's reply path. */\n async sendReply(correlationId: string, data: unknown): Promise<void> {\n await this.connect();\n const client = this.connection.getClient();\n const key = replyKey(correlationId);\n await client.xadd(key, '*', 'payload', JSON.stringify(data ?? null));\n await client.expire(key, 60);\n }\n}\n\nexport type { IoRedis };\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 { RedisStreamsEventConsumer } from '../implementations/redis-streams/RedisStreamsEventConsumer.js';\nimport { RedisStreamsEventPublisher } from '../implementations/redis-streams/RedisStreamsEventPublisher.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\nfunction resolveQueueType(): QueueType {\n const raw = (process.env['EVENT_QUEUE_TYPE'] ?? process.env['QUEUE_TYPE'] ?? '').toLowerCase();\n if (raw === 'redis-streams' || raw === 'redis' || raw === 'streams') return QueueType.REDIS_STREAMS;\n if (raw === 'nats') return QueueType.NATS;\n // Default: if REDIS_URL is set and NATS is not, prefer redis-streams.\n if (!process.env['NATS_URL'] && !process.env['NATS_SERVERS'] && process.env['REDIS_URL']) {\n return QueueType.REDIS_STREAMS;\n }\n return QueueType.NATS;\n}\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 if (config.type === QueueType.REDIS_STREAMS) {\n return new RedisStreamsEventPublisher(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 if (config.type === QueueType.REDIS_STREAMS) {\n return new RedisStreamsEventConsumer(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 type = resolveQueueType();\n if (type === QueueType.REDIS_STREAMS) {\n return EventQueueFactory.createPublisher({\n type,\n url: process.env['REDIS_URL'] ?? 'redis://localhost:6379',\n password: process.env['REDIS_PASSWORD'],\n name: process.env['QUEUE_CLIENT_NAME'] ?? process.env['SERVICE_NAME'] ?? 'be-sdk-publisher',\n enableDeduplication: process.env['QUEUE_ENABLE_DEDUPLICATION'] === 'true',\n defaultPriority: (process.env['QUEUE_DEFAULT_PRIORITY'] as 'low' | 'normal' | 'high') ?? 'normal',\n });\n }\n const config: PublisherConfig = {\n type,\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 creds: process.env['NATS_CREDS'],\n credsFile: process.env['NATS_CREDS_FILE'],\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 type = resolveQueueType();\n if (type === QueueType.REDIS_STREAMS) {\n return EventQueueFactory.createConsumer({\n type,\n url: process.env['REDIS_URL'] ?? 'redis://localhost:6379',\n password: process.env['REDIS_PASSWORD'],\n name: process.env['QUEUE_CLIENT_NAME'] ?? process.env['SERVICE_NAME'] ?? consumer,\n stream,\n consumer,\n maxConcurrent: process.env['QUEUE_MAX_CONCURRENT']\n ? parseInt(process.env['QUEUE_MAX_CONCURRENT'], 10)\n : 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 const config: ConsumerConfig = {\n type,\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 creds: process.env['NATS_CREDS'],\n credsFile: process.env['NATS_CREDS_FILE'],\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 const type = resolveQueueType();\n if (type === QueueType.REDIS_STREAMS) {\n return EventQueueFactory.createPublisher({\n type,\n url: process.env['REDIS_URL'] ?? 'redis://localhost:6379',\n password: process.env['REDIS_PASSWORD'],\n name: serviceName,\n enableDeduplication: process.env['QUEUE_ENABLE_DEDUPLICATION'] === 'true',\n defaultPriority: (process.env['QUEUE_DEFAULT_PRIORITY'] as 'low' | 'normal' | 'high') || 'normal',\n });\n }\n\n const config: PublisherConfig = {\n type,\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 creds: process.env['NATS_CREDS'],\n credsFile: process.env['NATS_CREDS_FILE'],\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 const type = resolveQueueType();\n if (type === QueueType.REDIS_STREAMS) {\n return EventQueueFactory.createConsumer({\n type,\n url: process.env['REDIS_URL'] ?? 'redis://localhost:6379',\n password: process.env['REDIS_PASSWORD'],\n name: serviceName,\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\n const config: ConsumerConfig = {\n type,\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 creds: process.env['NATS_CREDS'],\n credsFile: process.env['NATS_CREDS_FILE'],\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,5 +1,5 @@
1
1
  import { shouldSyncRelationship, shouldSyncEntity, parseRelationship, getCollectionForEntity, extractMinimalFields, extractEntityTitle, createRelationshipEvent, createEntityEvent, addGraphExtension, GraphRegistry } from './chunk-TKBD2ONF.js';
2
- import { getGraphEventEmitter, NatsGraphEventEmitter } from './chunk-Q6HJARHV.js';
2
+ import { getGraphEventEmitter, NatsGraphEventEmitter } from './chunk-KLYAIEAX.js';
3
3
  import { ValidationError } from './chunk-RTQIRGVB.js';
4
4
  import { logger } from './chunk-CBZNP6RF.js';
5
5
  import { __export, __name } from './chunk-XE4OXN2W.js';
@@ -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-Y4TPKRZB.js.map
1875
- //# sourceMappingURL=chunk-Y4TPKRZB.js.map
1874
+ //# sourceMappingURL=chunk-M3PYLAPT.js.map
1875
+ //# sourceMappingURL=chunk-M3PYLAPT.js.map