@burdenoff/be-sdk 2026.512.102 → 2026.512.103
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/EventQueueFactory-FNE7H66N.js +8 -0
- package/dist/{EventQueueFactory-FUSC3YWI.js.map → EventQueueFactory-FNE7H66N.js.map} +1 -1
- package/dist/{chunk-RBGRCYDX.js → chunk-DR5AQJT6.js} +3 -3
- package/dist/{chunk-RBGRCYDX.js.map → chunk-DR5AQJT6.js.map} +1 -1
- package/dist/{chunk-L2F2SCEJ.js → chunk-KSO6QQVD.js} +23 -9
- package/dist/chunk-KSO6QQVD.js.map +1 -0
- package/dist/{chunk-JDXYYJTN.js → chunk-LRL6GKXI.js} +3 -3
- package/dist/{chunk-JDXYYJTN.js.map → chunk-LRL6GKXI.js.map} +1 -1
- package/dist/{chunk-AI5C77XX.js → chunk-S52PJKSW.js} +3 -3
- package/dist/{chunk-AI5C77XX.js.map → chunk-S52PJKSW.js.map} +1 -1
- package/dist/{chunk-ZGLPXNIO.js → chunk-SXIL2AJF.js} +4 -4
- package/dist/{chunk-ZGLPXNIO.js.map → chunk-SXIL2AJF.js.map} +1 -1
- package/dist/{chunk-FPARMFI5.js → chunk-WPGSKLAG.js} +4 -4
- package/dist/{chunk-FPARMFI5.js.map → chunk-WPGSKLAG.js.map} +1 -1
- package/dist/event-queue/index.js +3 -3
- package/dist/graph/index.js +4 -4
- package/dist/index.js +14 -14
- package/dist/init/index.js +2 -2
- package/dist/prisma/index.js +3 -3
- package/package.json +1 -1
- package/dist/EventQueueFactory-FUSC3YWI.js +0 -8
- package/dist/chunk-L2F2SCEJ.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/event-queue/index.ts","../src/event-queue/module-events.ts","../src/event-queue/events.ts"],"names":["createGraphEventEmitter","ModuleEventsService","productSource","subjectPrefix","loggerLabel","publisher","connected","connecting","config","moduleName","charAt","toUpperCase","slice","natsServers","process","env","EventQueueFactory","createPublisherFromEnv","logger","info","MemoryEventPublisher","ensureConnected","connect","then","publish","subject","payload","data","buildPayload","type","action","id","userId","tenantId","workspaceId","correlationId","metadata","timestamp","Date","toISOString","buildSubject","entityType","normalizedType","replace","_match","p1","offset","toLowerCase","publishCreated","publishUpdated","publishDeleted","publishCustom","publishBulkCreated","_entityType","items","close","disconnect","healthCheck","result","isHealthy","status","healthy","message","error","createModuleEventsService","EventPriority","EventsModule","client","context","createStream","name","subjects","options","debug","mutation","variables","input","maxMessages","maxBytes","maxAge","storageType","replicas","response","query","getStreamInfo","deleteStream","purgeStream","sequence","purgedCount","createConsumer","streamName","consumerName","queueGroup","durableName","startPosition","ackMode","maxDeliver","ackWait","deleteConsumer","ackMessage","nakMessage","getConsumerInfo","createPublisher","stream","consumer","MemoryEventConsumer","createConsumerFromEnv"],"mappings":"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","file":"chunk-FPARMFI5.js","sourcesContent":["/**\n * Event Queue - Public API\n *\n * This module provides a complete abstraction over event queue systems (NATS, RabbitMQ, Kafka, SQS, etc.)\n * allowing the application to publish and consume events without direct dependency on any specific queue implementation.\n *\n * Usage:\n *\n * // Publishing events (workspaces-backend)\n * import { createPublisher } from './utils/event-queue';\n *\n * const publisher = createPublisher();\n * await publisher.connect();\n *\n * await publisher.publish({\n * subject: 'workspace.created',\n * data: { workspaceId: '123', name: 'My Workspace' },\n * metadata: { userId: 'user-123', source: 'api' }\n * });\n *\n * // Consuming events (workspaces-workers)\n * import { createConsumer } from './core/event-queue';\n *\n * const consumer = createConsumer('WORKSPACE_EVENTS', 'workspace-consumer');\n * await consumer.connect();\n *\n * await consumer.subscribe({\n * subject: 'workspace.*',\n * handler: async (event) => {\n * logger.log('Received event:', event.data);\n * await event.ack();\n * }\n * });\n */\n// Import factory for use in convenience functions\nimport { EventQueueFactory } from './factory/EventQueueFactory.js';\n// Import implementations for use in convenience functions\nimport { MemoryEventPublisher, MemoryEventConsumer } from './implementations/memory/MemoryEventQueue.js';\n// Import interfaces for type annotations\nimport type { IEventConsumer } from './interfaces/IEventConsumer.js';\nimport type { IEventPublisher } from './interfaces/IEventPublisher.js';\n\n// Export interfaces\nexport type { IEventQueue } from './interfaces/IEventQueue.js';\nexport type { IEventPublisher, PublishOptions } from './interfaces/IEventPublisher.js';\nexport type { IEventConsumer, ISubscription } from './interfaces/IEventConsumer.js';\n\n// Export types\nexport type {\n EventMessage,\n EventMetadata,\n AcknowledgeableEvent,\n EventHandler,\n StreamConfig,\n SubscriptionOptions,\n NATSConsumerOptions,\n} from './types/events.js';\n\nexport { QueueType } from './types/config.js';\n\nexport type {\n BaseQueueConfig,\n PublisherConfig,\n ConsumerConfig,\n EventQueueHealthCheckResult,\n QueueStatistics,\n} from './types/config.js';\n\n// Backwards compatibility alias\nexport type { EventQueueHealthCheckResult as HealthCheckResult } from './types/config.js';\n\n// Export factory\nexport { EventQueueFactory } from './factory/EventQueueFactory.js';\n\n// Export NATS implementations (in case direct access is needed)\nexport { NatsEventPublisher } from './implementations/nats/NatsEventPublisher.js';\nexport { NatsEventConsumer } from './implementations/nats/NatsEventConsumer.js';\n\n// Export Memory implementations (for development/testing or fallback)\nexport {\n MemoryEventBus,\n MemoryEventQueue,\n MemoryEventPublisher,\n MemoryEventConsumer,\n createMemoryPublisher,\n createMemoryConsumer,\n createGraphEventEmitter as createMemoryGraphEventEmitter,\n} from './implementations/memory/MemoryEventQueue.js';\n\n// Export NATS-based Graph Event Emitter (recommended for production)\nexport {\n NatsGraphEventEmitter,\n getGraphEventEmitter,\n createGraphEventEmitter,\n resetGraphEventEmitter,\n} from './graph-emitter.js';\nexport type { GraphEventEmitter, EntityEventType, EntityEventRbacMetadata } from './graph-emitter.js';\n\n// Export Module Events Service\nexport { ModuleEventsService, createModuleEventsService } from './module-events.js';\nexport type { ModuleEventPayload, BulkEventPayload, ModuleEventsConfig } from './module-events.js';\n\n// Export high-level Events Module (GraphQL-based event publishing)\nexport { EventsModule } from './events.js';\nexport {\n EventPriority,\n type PublishEventOptions,\n type SubscribeOptions,\n type EventMessage as GraphQLEventMessage,\n type PublishResult,\n type StreamInfo,\n} from './events.js';\n\n/**\n * Create an event publisher from environment configuration\n * Convenience function for creating a publisher without manual config\n * Falls back to in-memory if NATS is not configured\n */\nexport function createPublisher(): IEventPublisher {\n const natsServers = process.env['NATS_SERVERS'] || process.env['NATS_URL'];\n if (!natsServers) {\n // Fall back to in-memory publisher\n return new MemoryEventPublisher();\n }\n // Ensure NATS_SERVERS is set for downstream factory (uses NATS_URL internally)\n if (!process.env['NATS_SERVERS'] && process.env['NATS_URL']) {\n process.env['NATS_SERVERS'] = process.env['NATS_URL'];\n }\n return EventQueueFactory.createPublisherFromEnv();\n}\n\n/**\n * Create an event consumer from environment configuration\n * Convenience function for creating a consumer without manual config\n * Falls back to in-memory if NATS is not configured\n *\n * @param stream - Stream name to consume from\n * @param consumer - Consumer name (durable name)\n */\nexport function createConsumer(stream: string, consumer: string): IEventConsumer {\n const natsServers = process.env['NATS_SERVERS'] || process.env['NATS_URL'];\n if (!natsServers) {\n // Fall back to in-memory consumer\n return new MemoryEventConsumer(stream, consumer);\n }\n // Ensure NATS_SERVERS is set for downstream factory (uses NATS_URL internally)\n if (!process.env['NATS_SERVERS'] && process.env['NATS_URL']) {\n process.env['NATS_SERVERS'] = process.env['NATS_URL'];\n }\n return EventQueueFactory.createConsumerFromEnv(stream, consumer);\n}\n","/**\n * Module Events Service\n *\n * Generic event publishing service that modules can configure to publish\n * domain-specific events to NATS JetStream.\n *\n * @module event-queue/module-events\n * @category Events\n *\n * @example\n * ```typescript\n * import { createModuleEventsService } from '@burdenoff/be-sdk/event-queue';\n *\n * // Create a configured event service for the tags module\n * const tagsEventsService = createModuleEventsService({\n * moduleName: 'tags',\n * entityTypes: ['Tag', 'Vocabulary', 'Assignment'],\n * });\n *\n * // Publish events\n * await tagsEventsService.publishCreated('Tag', tagId, tagData, userId);\n * await tagsEventsService.publishUpdated('Vocabulary', vocabId, vocabData, userId);\n * ```\n */\nimport { logger } from '../logger/index.js';\nimport type { IEventPublisher } from './interfaces/IEventPublisher.js';\nimport { MemoryEventPublisher } from './implementations/memory/MemoryEventQueue.js';\nimport { EventQueueFactory } from './factory/EventQueueFactory.js';\n\n/**\n * Event payload structure for module events\n */\nexport interface ModuleEventPayload {\n /** Entity ID */\n id: string;\n /** Entity type (e.g., 'UniversalTag', 'UniversalTagVocabulary') */\n type: string;\n /** Action performed */\n action: 'created' | 'updated' | 'deleted' | 'assigned' | 'removed' | string;\n /** Entity data */\n data: Record<string, unknown>;\n /** Event metadata */\n metadata: {\n tenantId?: string;\n workspaceId?: string;\n userId: string;\n timestamp: string;\n productSource: string;\n correlationId?: string;\n };\n}\n\n/**\n * Bulk event payload structure\n */\nexport interface BulkEventPayload {\n /** Items in the bulk operation */\n items: Array<{ id: string; data: Record<string, unknown> }>;\n /** Event metadata */\n metadata: {\n tenantId?: string;\n workspaceId?: string;\n userId: string;\n timestamp: string;\n productSource: string;\n };\n}\n\n/**\n * Configuration for module events service\n */\nexport interface ModuleEventsConfig {\n /** Module name (used as productSource and in subject prefixes) */\n moduleName: string;\n /** Subject prefix override (defaults to moduleName) */\n subjectPrefix?: string;\n /** Custom logger label */\n loggerLabel?: string;\n}\n\n/**\n * Generic Module Events Service\n *\n * Provides a consistent interface for publishing domain events across all modules.\n * Automatically falls back to in-memory publisher when NATS is not configured.\n */\nexport class ModuleEventsService {\n private readonly productSource: string;\n private readonly subjectPrefix: string;\n private readonly loggerLabel: string;\n private publisher: IEventPublisher;\n private connected = false;\n private connecting: Promise<void> | null = null;\n\n constructor(config: ModuleEventsConfig) {\n this.productSource = config.moduleName;\n this.subjectPrefix = config.subjectPrefix || config.moduleName;\n this.loggerLabel =\n config.loggerLabel || `${config.moduleName.charAt(0).toUpperCase()}${config.moduleName.slice(1)}EventsService`;\n\n // Initialize publisher based on environment\n const natsServers = process.env['NATS_SERVERS'] || process.env['NATS_URL'];\n if (natsServers) {\n // Ensure NATS_SERVERS is set for downstream factory\n 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 logger.info(`[${this.loggerLabel}] Using NATS publisher`);\n } else {\n this.publisher = new MemoryEventPublisher();\n logger.info(`[${this.loggerLabel}] Using in-memory publisher (NATS_SERVERS not configured)`);\n }\n }\n\n /**\n * Ensure publisher is connected before publishing\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(`[${this.loggerLabel}] Publisher connected`);\n });\n\n await this.connecting;\n }\n\n /**\n * Publish an event to the queue\n */\n private async publish(subject: string, payload: unknown): Promise<void> {\n await this.ensureConnected();\n await this.publisher.publish({\n subject,\n data: payload as Record<string, unknown>,\n });\n }\n\n /**\n * Build event payload\n */\n private buildPayload(\n type: string,\n action: string,\n id: string,\n data: Record<string, unknown>,\n userId: string,\n tenantId?: string,\n workspaceId?: string,\n correlationId?: string\n ): ModuleEventPayload {\n return {\n id,\n type,\n action,\n data,\n metadata: {\n tenantId,\n workspaceId,\n userId,\n timestamp: new Date().toISOString(),\n productSource: this.productSource,\n ...(correlationId && { correlationId }),\n },\n };\n }\n\n /**\n * Build subject string\n */\n private buildSubject(entityType: string, action: string): string {\n // Convert entityType from PascalCase to lowercase (e.g., UniversalTag -> tag)\n const normalizedType = entityType\n .replace(/^Universal/, '')\n .replace(/([A-Z])/g, (_match, p1, offset) => (offset > 0 ? '_' : '') + (p1 as string).toLowerCase())\n .replace(/^_/, '');\n return `${this.subjectPrefix}.${normalizedType}.${action}`;\n }\n\n /**\n * Publish entity created event\n */\n async publishCreated(\n entityType: string,\n id: string,\n data: Record<string, unknown>,\n userId: string,\n tenantId?: string,\n workspaceId?: string\n ): Promise<void> {\n const payload = this.buildPayload(entityType, 'created', id, data, userId, tenantId, workspaceId);\n await this.publish(this.buildSubject(entityType, 'created'), payload);\n }\n\n /**\n * Publish entity updated event\n */\n async publishUpdated(\n entityType: string,\n id: string,\n data: Record<string, unknown>,\n userId: string,\n tenantId?: string,\n workspaceId?: string\n ): Promise<void> {\n const payload = this.buildPayload(entityType, 'updated', id, data, userId, tenantId, workspaceId);\n await this.publish(this.buildSubject(entityType, 'updated'), payload);\n }\n\n /**\n * Publish entity deleted event\n */\n async publishDeleted(\n entityType: string,\n id: string,\n userId: string,\n tenantId?: string,\n workspaceId?: string\n ): Promise<void> {\n const payload = this.buildPayload(entityType, 'deleted', id, {}, userId, tenantId, workspaceId);\n await this.publish(this.buildSubject(entityType, 'deleted'), payload);\n }\n\n /**\n * Publish custom action event\n */\n async publishCustom(\n entityType: string,\n action: string,\n id: string,\n data: Record<string, unknown>,\n userId: string,\n tenantId?: string,\n workspaceId?: string\n ): Promise<void> {\n const payload = this.buildPayload(entityType, action, id, data, userId, tenantId, workspaceId);\n await this.publish(this.buildSubject(entityType, action), payload);\n }\n\n /**\n * Publish bulk created event\n */\n async publishBulkCreated(\n _entityType: string,\n items: Array<{ id: string; data: Record<string, unknown> }>,\n userId: string,\n tenantId?: string,\n workspaceId?: string\n ): Promise<void> {\n const payload: BulkEventPayload = {\n items,\n metadata: {\n tenantId,\n workspaceId,\n userId,\n timestamp: new Date().toISOString(),\n productSource: this.productSource,\n },\n };\n await this.publish(`${this.subjectPrefix}.bulk.created`, payload);\n }\n\n /**\n * Close event queue connection\n */\n async close(): Promise<void> {\n if (this.connected) {\n await this.publisher.disconnect();\n this.connected = false;\n logger.info(`[${this.loggerLabel}] 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 * Create a module events service instance\n */\nexport function createModuleEventsService(config: ModuleEventsConfig): ModuleEventsService {\n return new ModuleEventsService(config);\n}\n","/**\n * Events Module\n * Helpers for sending events to NATS JetStream queue\n */\n\nimport type { BurdenoffGraphQLClient } from '../client/graphql.js';\nimport type { SDKContext } from '../types/index.js';\nimport { logger } from '../logger/index.js';\n\nexport enum EventPriority {\n LOW = 'low',\n NORMAL = 'normal',\n HIGH = 'high',\n CRITICAL = 'critical',\n}\n\nexport interface PublishEventOptions {\n /** Event subject/topic */\n subject: string;\n /** Event payload */\n data: Record<string, unknown>;\n /** Event priority */\n priority?: EventPriority;\n /** Event metadata */\n metadata?: Record<string, unknown>;\n /** Delay delivery by milliseconds */\n delay?: number;\n /** Message ID (for deduplication) */\n messageId?: string;\n /** Workspace context */\n workspaceId?: string;\n /** Organization context */\n organizationId?: string;\n}\n\nexport interface SubscribeOptions {\n /** Subject pattern to subscribe to */\n subject: string;\n /** Queue group name */\n queueGroup?: string;\n /** Durable consumer name */\n durableName?: string;\n /** Start from specific position */\n startPosition?: 'first' | 'last' | 'new';\n /** Acknowledge mode */\n ackMode?: 'explicit' | 'auto';\n /** Max messages to deliver */\n maxDeliver?: number;\n /** Acknowledgment timeout in milliseconds */\n ackWait?: number;\n}\n\nexport interface EventMessage {\n id: string;\n subject: string;\n data: Record<string, unknown>;\n priority: EventPriority;\n metadata?: Record<string, unknown>;\n workspaceId?: string;\n organizationId?: string;\n publishedAt: string;\n publishedBy?: string;\n}\n\nexport interface PublishResult {\n messageId: string;\n subject: string;\n sequence: number;\n timestamp: string;\n}\n\nexport interface StreamInfo {\n name: string;\n subjects: string[];\n messageCount: number;\n byteCount: number;\n firstSequence: number;\n lastSequence: number;\n consumerCount: number;\n}\n\n/**\n * Events Module\n */\nexport class EventsModule {\n constructor(\n private client: BurdenoffGraphQLClient,\n private context: SDKContext\n ) {}\n\n /**\n * Create stream\n */\n public async createStream(\n name: string,\n subjects: string[],\n options?: {\n maxMessages?: number;\n maxBytes?: number;\n maxAge?: number;\n storageType?: 'file' | 'memory';\n replicas?: number;\n }\n ): Promise<StreamInfo> {\n logger.debug('[Events] Creating stream', { name, subjects });\n\n const mutation = `\n mutation CreateStream($input: CreateStreamInput!) {\n createStream(input: $input) {\n name\n subjects\n messageCount\n byteCount\n firstSequence\n lastSequence\n consumerCount\n }\n }\n `;\n\n const variables = {\n input: {\n name,\n subjects,\n maxMessages: options?.maxMessages,\n maxBytes: options?.maxBytes,\n maxAge: options?.maxAge,\n storageType: options?.storageType || 'file',\n replicas: options?.replicas || 1,\n },\n };\n\n const response = await this.client.query<{ createStream: StreamInfo }>(mutation, variables, this.context);\n\n logger.info('[Events] Stream created', { name });\n\n return response.createStream;\n }\n\n /**\n * Get stream info\n */\n public async getStreamInfo(name: string): Promise<StreamInfo> {\n logger.debug('[Events] Getting stream info', { name });\n\n const query = `\n query GetStreamInfo($name: String!) {\n getStreamInfo(name: $name) {\n name\n subjects\n messageCount\n byteCount\n firstSequence\n lastSequence\n consumerCount\n }\n }\n `;\n\n const response = await this.client.query<{ getStreamInfo: StreamInfo }>(query, { name }, this.context);\n\n return response.getStreamInfo;\n }\n\n /**\n * Delete stream\n */\n public async deleteStream(name: string): Promise<boolean> {\n logger.debug('[Events] Deleting stream', { name });\n\n const mutation = `\n mutation DeleteStream($name: String!) {\n deleteStream(name: $name) {\n success\n }\n }\n `;\n\n await this.client.query(mutation, { name }, this.context);\n\n logger.info('[Events] Stream deleted', { name });\n\n return true;\n }\n\n /**\n * Purge stream messages\n */\n public async purgeStream(name: string, options?: { subject?: string; sequence?: number }): Promise<number> {\n logger.debug('[Events] Purging stream', { name, options });\n\n const mutation = `\n mutation PurgeStream($name: String!, $subject: String, $sequence: Int) {\n purgeStream(name: $name, subject: $subject, sequence: $sequence) {\n purgedCount\n }\n }\n `;\n\n const response = await this.client.query<{ purgeStream: { purgedCount: number } }>(\n mutation,\n { name, subject: options?.subject, sequence: options?.sequence },\n this.context\n );\n\n logger.info('[Events] Stream purged', { name, purgedCount: response.purgeStream.purgedCount });\n\n return response.purgeStream.purgedCount;\n }\n\n /**\n * Create consumer\n */\n public async createConsumer(\n streamName: string,\n consumerName: string,\n options: SubscribeOptions\n ): Promise<{ name: string; pending: number }> {\n logger.debug('[Events] Creating consumer', { streamName, consumerName });\n\n const mutation = `\n mutation CreateConsumer($input: CreateConsumerInput!) {\n createConsumer(input: $input) {\n name\n pending\n }\n }\n `;\n\n const variables = {\n input: {\n streamName,\n consumerName,\n subject: options.subject,\n queueGroup: options.queueGroup,\n durableName: options.durableName,\n startPosition: options.startPosition || 'last',\n ackMode: options.ackMode || 'explicit',\n maxDeliver: options.maxDeliver || 5,\n ackWait: options.ackWait || 30000,\n },\n };\n\n const response = await this.client.query<{ createConsumer: { name: string; pending: number } }>(\n mutation,\n variables,\n this.context\n );\n\n logger.info('[Events] Consumer created', { consumerName });\n\n return response.createConsumer;\n }\n\n /**\n * Delete consumer\n */\n public async deleteConsumer(streamName: string, consumerName: string): Promise<boolean> {\n logger.debug('[Events] Deleting consumer', { streamName, consumerName });\n\n const mutation = `\n mutation DeleteConsumer($streamName: String!, $consumerName: String!) {\n deleteConsumer(streamName: $streamName, consumerName: $consumerName) {\n success\n }\n }\n `;\n\n await this.client.query(mutation, { streamName, consumerName }, this.context);\n\n logger.info('[Events] Consumer deleted', { consumerName });\n\n return true;\n }\n\n /**\n * Acknowledge message\n */\n public async ackMessage(streamName: string, consumerName: string, sequence: number): Promise<boolean> {\n logger.debug('[Events] Acknowledging message', { streamName, consumerName, sequence });\n\n const mutation = `\n mutation AckMessage($streamName: String!, $consumerName: String!, $sequence: Int!) {\n ackMessage(streamName: $streamName, consumerName: $consumerName, sequence: $sequence) {\n success\n }\n }\n `;\n\n await this.client.query(mutation, { streamName, consumerName, sequence }, this.context);\n\n return true;\n }\n\n /**\n * Negative acknowledge message (requeue)\n */\n public async nakMessage(streamName: string, consumerName: string, sequence: number): Promise<boolean> {\n logger.debug('[Events] Negative acknowledging message', { streamName, consumerName, sequence });\n\n const mutation = `\n mutation NakMessage($streamName: String!, $consumerName: String!, $sequence: Int!) {\n nakMessage(streamName: $streamName, consumerName: $consumerName, sequence: $sequence) {\n success\n }\n }\n `;\n\n await this.client.query(mutation, { streamName, consumerName, sequence }, this.context);\n\n return true;\n }\n\n /**\n * Get consumer info\n */\n public async getConsumerInfo(\n streamName: string,\n consumerName: string\n ): Promise<{\n name: string;\n pending: number;\n redelivered: number;\n numAckPending: number;\n }> {\n logger.debug('[Events] Getting consumer info', { streamName, consumerName });\n\n const query = `\n query GetConsumerInfo($streamName: String!, $consumerName: String!) {\n getConsumerInfo(streamName: $streamName, consumerName: $consumerName) {\n name\n pending\n redelivered\n numAckPending\n }\n }\n `;\n\n const response = await this.client.query<{\n getConsumerInfo: {\n name: string;\n pending: number;\n redelivered: number;\n numAckPending: number;\n };\n }>(query, { streamName, consumerName }, this.context);\n\n return response.getConsumerInfo;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/event-queue/index.ts","../src/event-queue/module-events.ts","../src/event-queue/events.ts"],"names":["createGraphEventEmitter","ModuleEventsService","productSource","subjectPrefix","loggerLabel","publisher","connected","connecting","config","moduleName","charAt","toUpperCase","slice","natsServers","process","env","EventQueueFactory","createPublisherFromEnv","logger","info","MemoryEventPublisher","ensureConnected","connect","then","publish","subject","payload","data","buildPayload","type","action","id","userId","tenantId","workspaceId","correlationId","metadata","timestamp","Date","toISOString","buildSubject","entityType","normalizedType","replace","_match","p1","offset","toLowerCase","publishCreated","publishUpdated","publishDeleted","publishCustom","publishBulkCreated","_entityType","items","close","disconnect","healthCheck","result","isHealthy","status","healthy","message","error","createModuleEventsService","EventPriority","EventsModule","client","context","createStream","name","subjects","options","debug","mutation","variables","input","maxMessages","maxBytes","maxAge","storageType","replicas","response","query","getStreamInfo","deleteStream","purgeStream","sequence","purgedCount","createConsumer","streamName","consumerName","queueGroup","durableName","startPosition","ackMode","maxDeliver","ackWait","deleteConsumer","ackMessage","nakMessage","getConsumerInfo","createPublisher","stream","consumer","MemoryEventConsumer","createConsumerFromEnv"],"mappings":"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","file":"chunk-WPGSKLAG.js","sourcesContent":["/**\n * Event Queue - Public API\n *\n * This module provides a complete abstraction over event queue systems (NATS, RabbitMQ, Kafka, SQS, etc.)\n * allowing the application to publish and consume events without direct dependency on any specific queue implementation.\n *\n * Usage:\n *\n * // Publishing events (workspaces-backend)\n * import { createPublisher } from './utils/event-queue';\n *\n * const publisher = createPublisher();\n * await publisher.connect();\n *\n * await publisher.publish({\n * subject: 'workspace.created',\n * data: { workspaceId: '123', name: 'My Workspace' },\n * metadata: { userId: 'user-123', source: 'api' }\n * });\n *\n * // Consuming events (workspaces-workers)\n * import { createConsumer } from './core/event-queue';\n *\n * const consumer = createConsumer('WORKSPACE_EVENTS', 'workspace-consumer');\n * await consumer.connect();\n *\n * await consumer.subscribe({\n * subject: 'workspace.*',\n * handler: async (event) => {\n * logger.log('Received event:', event.data);\n * await event.ack();\n * }\n * });\n */\n// Import factory for use in convenience functions\nimport { EventQueueFactory } from './factory/EventQueueFactory.js';\n// Import implementations for use in convenience functions\nimport { MemoryEventPublisher, MemoryEventConsumer } from './implementations/memory/MemoryEventQueue.js';\n// Import interfaces for type annotations\nimport type { IEventConsumer } from './interfaces/IEventConsumer.js';\nimport type { IEventPublisher } from './interfaces/IEventPublisher.js';\n\n// Export interfaces\nexport type { IEventQueue } from './interfaces/IEventQueue.js';\nexport type { IEventPublisher, PublishOptions } from './interfaces/IEventPublisher.js';\nexport type { IEventConsumer, ISubscription } from './interfaces/IEventConsumer.js';\n\n// Export types\nexport type {\n EventMessage,\n EventMetadata,\n AcknowledgeableEvent,\n EventHandler,\n StreamConfig,\n SubscriptionOptions,\n NATSConsumerOptions,\n} from './types/events.js';\n\nexport { QueueType } from './types/config.js';\n\nexport type {\n BaseQueueConfig,\n PublisherConfig,\n ConsumerConfig,\n EventQueueHealthCheckResult,\n QueueStatistics,\n} from './types/config.js';\n\n// Backwards compatibility alias\nexport type { EventQueueHealthCheckResult as HealthCheckResult } from './types/config.js';\n\n// Export factory\nexport { EventQueueFactory } from './factory/EventQueueFactory.js';\n\n// Export NATS implementations (in case direct access is needed)\nexport { NatsEventPublisher } from './implementations/nats/NatsEventPublisher.js';\nexport { NatsEventConsumer } from './implementations/nats/NatsEventConsumer.js';\n\n// Export Memory implementations (for development/testing or fallback)\nexport {\n MemoryEventBus,\n MemoryEventQueue,\n MemoryEventPublisher,\n MemoryEventConsumer,\n createMemoryPublisher,\n createMemoryConsumer,\n createGraphEventEmitter as createMemoryGraphEventEmitter,\n} from './implementations/memory/MemoryEventQueue.js';\n\n// Export NATS-based Graph Event Emitter (recommended for production)\nexport {\n NatsGraphEventEmitter,\n getGraphEventEmitter,\n createGraphEventEmitter,\n resetGraphEventEmitter,\n} from './graph-emitter.js';\nexport type { GraphEventEmitter, EntityEventType, EntityEventRbacMetadata } from './graph-emitter.js';\n\n// Export Module Events Service\nexport { ModuleEventsService, createModuleEventsService } from './module-events.js';\nexport type { ModuleEventPayload, BulkEventPayload, ModuleEventsConfig } from './module-events.js';\n\n// Export high-level Events Module (GraphQL-based event publishing)\nexport { EventsModule } from './events.js';\nexport {\n EventPriority,\n type PublishEventOptions,\n type SubscribeOptions,\n type EventMessage as GraphQLEventMessage,\n type PublishResult,\n type StreamInfo,\n} from './events.js';\n\n/**\n * Create an event publisher from environment configuration\n * Convenience function for creating a publisher without manual config\n * Falls back to in-memory if NATS is not configured\n */\nexport function createPublisher(): IEventPublisher {\n const natsServers = process.env['NATS_SERVERS'] || process.env['NATS_URL'];\n if (!natsServers) {\n // Fall back to in-memory publisher\n return new MemoryEventPublisher();\n }\n // Ensure NATS_SERVERS is set for downstream factory (uses NATS_URL internally)\n if (!process.env['NATS_SERVERS'] && process.env['NATS_URL']) {\n process.env['NATS_SERVERS'] = process.env['NATS_URL'];\n }\n return EventQueueFactory.createPublisherFromEnv();\n}\n\n/**\n * Create an event consumer from environment configuration\n * Convenience function for creating a consumer without manual config\n * Falls back to in-memory if NATS is not configured\n *\n * @param stream - Stream name to consume from\n * @param consumer - Consumer name (durable name)\n */\nexport function createConsumer(stream: string, consumer: string): IEventConsumer {\n const natsServers = process.env['NATS_SERVERS'] || process.env['NATS_URL'];\n if (!natsServers) {\n // Fall back to in-memory consumer\n return new MemoryEventConsumer(stream, consumer);\n }\n // Ensure NATS_SERVERS is set for downstream factory (uses NATS_URL internally)\n if (!process.env['NATS_SERVERS'] && process.env['NATS_URL']) {\n process.env['NATS_SERVERS'] = process.env['NATS_URL'];\n }\n return EventQueueFactory.createConsumerFromEnv(stream, consumer);\n}\n","/**\n * Module Events Service\n *\n * Generic event publishing service that modules can configure to publish\n * domain-specific events to NATS JetStream.\n *\n * @module event-queue/module-events\n * @category Events\n *\n * @example\n * ```typescript\n * import { createModuleEventsService } from '@burdenoff/be-sdk/event-queue';\n *\n * // Create a configured event service for the tags module\n * const tagsEventsService = createModuleEventsService({\n * moduleName: 'tags',\n * entityTypes: ['Tag', 'Vocabulary', 'Assignment'],\n * });\n *\n * // Publish events\n * await tagsEventsService.publishCreated('Tag', tagId, tagData, userId);\n * await tagsEventsService.publishUpdated('Vocabulary', vocabId, vocabData, userId);\n * ```\n */\nimport { logger } from '../logger/index.js';\nimport type { IEventPublisher } from './interfaces/IEventPublisher.js';\nimport { MemoryEventPublisher } from './implementations/memory/MemoryEventQueue.js';\nimport { EventQueueFactory } from './factory/EventQueueFactory.js';\n\n/**\n * Event payload structure for module events\n */\nexport interface ModuleEventPayload {\n /** Entity ID */\n id: string;\n /** Entity type (e.g., 'UniversalTag', 'UniversalTagVocabulary') */\n type: string;\n /** Action performed */\n action: 'created' | 'updated' | 'deleted' | 'assigned' | 'removed' | string;\n /** Entity data */\n data: Record<string, unknown>;\n /** Event metadata */\n metadata: {\n tenantId?: string;\n workspaceId?: string;\n userId: string;\n timestamp: string;\n productSource: string;\n correlationId?: string;\n };\n}\n\n/**\n * Bulk event payload structure\n */\nexport interface BulkEventPayload {\n /** Items in the bulk operation */\n items: Array<{ id: string; data: Record<string, unknown> }>;\n /** Event metadata */\n metadata: {\n tenantId?: string;\n workspaceId?: string;\n userId: string;\n timestamp: string;\n productSource: string;\n };\n}\n\n/**\n * Configuration for module events service\n */\nexport interface ModuleEventsConfig {\n /** Module name (used as productSource and in subject prefixes) */\n moduleName: string;\n /** Subject prefix override (defaults to moduleName) */\n subjectPrefix?: string;\n /** Custom logger label */\n loggerLabel?: string;\n}\n\n/**\n * Generic Module Events Service\n *\n * Provides a consistent interface for publishing domain events across all modules.\n * Automatically falls back to in-memory publisher when NATS is not configured.\n */\nexport class ModuleEventsService {\n private readonly productSource: string;\n private readonly subjectPrefix: string;\n private readonly loggerLabel: string;\n private publisher: IEventPublisher;\n private connected = false;\n private connecting: Promise<void> | null = null;\n\n constructor(config: ModuleEventsConfig) {\n this.productSource = config.moduleName;\n this.subjectPrefix = config.subjectPrefix || config.moduleName;\n this.loggerLabel =\n config.loggerLabel || `${config.moduleName.charAt(0).toUpperCase()}${config.moduleName.slice(1)}EventsService`;\n\n // Initialize publisher based on environment\n const natsServers = process.env['NATS_SERVERS'] || process.env['NATS_URL'];\n if (natsServers) {\n // Ensure NATS_SERVERS is set for downstream factory\n 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 logger.info(`[${this.loggerLabel}] Using NATS publisher`);\n } else {\n this.publisher = new MemoryEventPublisher();\n logger.info(`[${this.loggerLabel}] Using in-memory publisher (NATS_SERVERS not configured)`);\n }\n }\n\n /**\n * Ensure publisher is connected before publishing\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(`[${this.loggerLabel}] Publisher connected`);\n });\n\n await this.connecting;\n }\n\n /**\n * Publish an event to the queue\n */\n private async publish(subject: string, payload: unknown): Promise<void> {\n await this.ensureConnected();\n await this.publisher.publish({\n subject,\n data: payload as Record<string, unknown>,\n });\n }\n\n /**\n * Build event payload\n */\n private buildPayload(\n type: string,\n action: string,\n id: string,\n data: Record<string, unknown>,\n userId: string,\n tenantId?: string,\n workspaceId?: string,\n correlationId?: string\n ): ModuleEventPayload {\n return {\n id,\n type,\n action,\n data,\n metadata: {\n tenantId,\n workspaceId,\n userId,\n timestamp: new Date().toISOString(),\n productSource: this.productSource,\n ...(correlationId && { correlationId }),\n },\n };\n }\n\n /**\n * Build subject string\n */\n private buildSubject(entityType: string, action: string): string {\n // Convert entityType from PascalCase to lowercase (e.g., UniversalTag -> tag)\n const normalizedType = entityType\n .replace(/^Universal/, '')\n .replace(/([A-Z])/g, (_match, p1, offset) => (offset > 0 ? '_' : '') + (p1 as string).toLowerCase())\n .replace(/^_/, '');\n return `${this.subjectPrefix}.${normalizedType}.${action}`;\n }\n\n /**\n * Publish entity created event\n */\n async publishCreated(\n entityType: string,\n id: string,\n data: Record<string, unknown>,\n userId: string,\n tenantId?: string,\n workspaceId?: string\n ): Promise<void> {\n const payload = this.buildPayload(entityType, 'created', id, data, userId, tenantId, workspaceId);\n await this.publish(this.buildSubject(entityType, 'created'), payload);\n }\n\n /**\n * Publish entity updated event\n */\n async publishUpdated(\n entityType: string,\n id: string,\n data: Record<string, unknown>,\n userId: string,\n tenantId?: string,\n workspaceId?: string\n ): Promise<void> {\n const payload = this.buildPayload(entityType, 'updated', id, data, userId, tenantId, workspaceId);\n await this.publish(this.buildSubject(entityType, 'updated'), payload);\n }\n\n /**\n * Publish entity deleted event\n */\n async publishDeleted(\n entityType: string,\n id: string,\n userId: string,\n tenantId?: string,\n workspaceId?: string\n ): Promise<void> {\n const payload = this.buildPayload(entityType, 'deleted', id, {}, userId, tenantId, workspaceId);\n await this.publish(this.buildSubject(entityType, 'deleted'), payload);\n }\n\n /**\n * Publish custom action event\n */\n async publishCustom(\n entityType: string,\n action: string,\n id: string,\n data: Record<string, unknown>,\n userId: string,\n tenantId?: string,\n workspaceId?: string\n ): Promise<void> {\n const payload = this.buildPayload(entityType, action, id, data, userId, tenantId, workspaceId);\n await this.publish(this.buildSubject(entityType, action), payload);\n }\n\n /**\n * Publish bulk created event\n */\n async publishBulkCreated(\n _entityType: string,\n items: Array<{ id: string; data: Record<string, unknown> }>,\n userId: string,\n tenantId?: string,\n workspaceId?: string\n ): Promise<void> {\n const payload: BulkEventPayload = {\n items,\n metadata: {\n tenantId,\n workspaceId,\n userId,\n timestamp: new Date().toISOString(),\n productSource: this.productSource,\n },\n };\n await this.publish(`${this.subjectPrefix}.bulk.created`, payload);\n }\n\n /**\n * Close event queue connection\n */\n async close(): Promise<void> {\n if (this.connected) {\n await this.publisher.disconnect();\n this.connected = false;\n logger.info(`[${this.loggerLabel}] 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 * Create a module events service instance\n */\nexport function createModuleEventsService(config: ModuleEventsConfig): ModuleEventsService {\n return new ModuleEventsService(config);\n}\n","/**\n * Events Module\n * Helpers for sending events to NATS JetStream queue\n */\n\nimport type { BurdenoffGraphQLClient } from '../client/graphql.js';\nimport type { SDKContext } from '../types/index.js';\nimport { logger } from '../logger/index.js';\n\nexport enum EventPriority {\n LOW = 'low',\n NORMAL = 'normal',\n HIGH = 'high',\n CRITICAL = 'critical',\n}\n\nexport interface PublishEventOptions {\n /** Event subject/topic */\n subject: string;\n /** Event payload */\n data: Record<string, unknown>;\n /** Event priority */\n priority?: EventPriority;\n /** Event metadata */\n metadata?: Record<string, unknown>;\n /** Delay delivery by milliseconds */\n delay?: number;\n /** Message ID (for deduplication) */\n messageId?: string;\n /** Workspace context */\n workspaceId?: string;\n /** Organization context */\n organizationId?: string;\n}\n\nexport interface SubscribeOptions {\n /** Subject pattern to subscribe to */\n subject: string;\n /** Queue group name */\n queueGroup?: string;\n /** Durable consumer name */\n durableName?: string;\n /** Start from specific position */\n startPosition?: 'first' | 'last' | 'new';\n /** Acknowledge mode */\n ackMode?: 'explicit' | 'auto';\n /** Max messages to deliver */\n maxDeliver?: number;\n /** Acknowledgment timeout in milliseconds */\n ackWait?: number;\n}\n\nexport interface EventMessage {\n id: string;\n subject: string;\n data: Record<string, unknown>;\n priority: EventPriority;\n metadata?: Record<string, unknown>;\n workspaceId?: string;\n organizationId?: string;\n publishedAt: string;\n publishedBy?: string;\n}\n\nexport interface PublishResult {\n messageId: string;\n subject: string;\n sequence: number;\n timestamp: string;\n}\n\nexport interface StreamInfo {\n name: string;\n subjects: string[];\n messageCount: number;\n byteCount: number;\n firstSequence: number;\n lastSequence: number;\n consumerCount: number;\n}\n\n/**\n * Events Module\n */\nexport class EventsModule {\n constructor(\n private client: BurdenoffGraphQLClient,\n private context: SDKContext\n ) {}\n\n /**\n * Create stream\n */\n public async createStream(\n name: string,\n subjects: string[],\n options?: {\n maxMessages?: number;\n maxBytes?: number;\n maxAge?: number;\n storageType?: 'file' | 'memory';\n replicas?: number;\n }\n ): Promise<StreamInfo> {\n logger.debug('[Events] Creating stream', { name, subjects });\n\n const mutation = `\n mutation CreateStream($input: CreateStreamInput!) {\n createStream(input: $input) {\n name\n subjects\n messageCount\n byteCount\n firstSequence\n lastSequence\n consumerCount\n }\n }\n `;\n\n const variables = {\n input: {\n name,\n subjects,\n maxMessages: options?.maxMessages,\n maxBytes: options?.maxBytes,\n maxAge: options?.maxAge,\n storageType: options?.storageType || 'file',\n replicas: options?.replicas || 1,\n },\n };\n\n const response = await this.client.query<{ createStream: StreamInfo }>(mutation, variables, this.context);\n\n logger.info('[Events] Stream created', { name });\n\n return response.createStream;\n }\n\n /**\n * Get stream info\n */\n public async getStreamInfo(name: string): Promise<StreamInfo> {\n logger.debug('[Events] Getting stream info', { name });\n\n const query = `\n query GetStreamInfo($name: String!) {\n getStreamInfo(name: $name) {\n name\n subjects\n messageCount\n byteCount\n firstSequence\n lastSequence\n consumerCount\n }\n }\n `;\n\n const response = await this.client.query<{ getStreamInfo: StreamInfo }>(query, { name }, this.context);\n\n return response.getStreamInfo;\n }\n\n /**\n * Delete stream\n */\n public async deleteStream(name: string): Promise<boolean> {\n logger.debug('[Events] Deleting stream', { name });\n\n const mutation = `\n mutation DeleteStream($name: String!) {\n deleteStream(name: $name) {\n success\n }\n }\n `;\n\n await this.client.query(mutation, { name }, this.context);\n\n logger.info('[Events] Stream deleted', { name });\n\n return true;\n }\n\n /**\n * Purge stream messages\n */\n public async purgeStream(name: string, options?: { subject?: string; sequence?: number }): Promise<number> {\n logger.debug('[Events] Purging stream', { name, options });\n\n const mutation = `\n mutation PurgeStream($name: String!, $subject: String, $sequence: Int) {\n purgeStream(name: $name, subject: $subject, sequence: $sequence) {\n purgedCount\n }\n }\n `;\n\n const response = await this.client.query<{ purgeStream: { purgedCount: number } }>(\n mutation,\n { name, subject: options?.subject, sequence: options?.sequence },\n this.context\n );\n\n logger.info('[Events] Stream purged', { name, purgedCount: response.purgeStream.purgedCount });\n\n return response.purgeStream.purgedCount;\n }\n\n /**\n * Create consumer\n */\n public async createConsumer(\n streamName: string,\n consumerName: string,\n options: SubscribeOptions\n ): Promise<{ name: string; pending: number }> {\n logger.debug('[Events] Creating consumer', { streamName, consumerName });\n\n const mutation = `\n mutation CreateConsumer($input: CreateConsumerInput!) {\n createConsumer(input: $input) {\n name\n pending\n }\n }\n `;\n\n const variables = {\n input: {\n streamName,\n consumerName,\n subject: options.subject,\n queueGroup: options.queueGroup,\n durableName: options.durableName,\n startPosition: options.startPosition || 'last',\n ackMode: options.ackMode || 'explicit',\n maxDeliver: options.maxDeliver || 5,\n ackWait: options.ackWait || 30000,\n },\n };\n\n const response = await this.client.query<{ createConsumer: { name: string; pending: number } }>(\n mutation,\n variables,\n this.context\n );\n\n logger.info('[Events] Consumer created', { consumerName });\n\n return response.createConsumer;\n }\n\n /**\n * Delete consumer\n */\n public async deleteConsumer(streamName: string, consumerName: string): Promise<boolean> {\n logger.debug('[Events] Deleting consumer', { streamName, consumerName });\n\n const mutation = `\n mutation DeleteConsumer($streamName: String!, $consumerName: String!) {\n deleteConsumer(streamName: $streamName, consumerName: $consumerName) {\n success\n }\n }\n `;\n\n await this.client.query(mutation, { streamName, consumerName }, this.context);\n\n logger.info('[Events] Consumer deleted', { consumerName });\n\n return true;\n }\n\n /**\n * Acknowledge message\n */\n public async ackMessage(streamName: string, consumerName: string, sequence: number): Promise<boolean> {\n logger.debug('[Events] Acknowledging message', { streamName, consumerName, sequence });\n\n const mutation = `\n mutation AckMessage($streamName: String!, $consumerName: String!, $sequence: Int!) {\n ackMessage(streamName: $streamName, consumerName: $consumerName, sequence: $sequence) {\n success\n }\n }\n `;\n\n await this.client.query(mutation, { streamName, consumerName, sequence }, this.context);\n\n return true;\n }\n\n /**\n * Negative acknowledge message (requeue)\n */\n public async nakMessage(streamName: string, consumerName: string, sequence: number): Promise<boolean> {\n logger.debug('[Events] Negative acknowledging message', { streamName, consumerName, sequence });\n\n const mutation = `\n mutation NakMessage($streamName: String!, $consumerName: String!, $sequence: Int!) {\n nakMessage(streamName: $streamName, consumerName: $consumerName, sequence: $sequence) {\n success\n }\n }\n `;\n\n await this.client.query(mutation, { streamName, consumerName, sequence }, this.context);\n\n return true;\n }\n\n /**\n * Get consumer info\n */\n public async getConsumerInfo(\n streamName: string,\n consumerName: string\n ): Promise<{\n name: string;\n pending: number;\n redelivered: number;\n numAckPending: number;\n }> {\n logger.debug('[Events] Getting consumer info', { streamName, consumerName });\n\n const query = `\n query GetConsumerInfo($streamName: String!, $consumerName: String!) {\n getConsumerInfo(streamName: $streamName, consumerName: $consumerName) {\n name\n pending\n redelivered\n numAckPending\n }\n }\n `;\n\n const response = await this.client.query<{\n getConsumerInfo: {\n name: string;\n pending: number;\n redelivered: number;\n numAckPending: number;\n };\n }>(query, { streamName, consumerName }, this.context);\n\n return response.getConsumerInfo;\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { EventPriority, EventsModule, ModuleEventsService, createConsumer, createModuleEventsService, createPublisher } from '../chunk-
|
|
2
|
-
export { MemoryEventBus, MemoryEventConsumer, MemoryEventPublisher, MemoryEventQueue, NatsGraphEventEmitter, createGraphEventEmitter2 as createGraphEventEmitter, createMemoryConsumer, createGraphEventEmitter as createMemoryGraphEventEmitter, createMemoryPublisher, getGraphEventEmitter, resetGraphEventEmitter } from '../chunk-
|
|
3
|
-
export { EventQueueFactory, NatsEventConsumer, NatsEventPublisher } from '../chunk-
|
|
1
|
+
export { EventPriority, EventsModule, ModuleEventsService, createConsumer, createModuleEventsService, createPublisher } from '../chunk-WPGSKLAG.js';
|
|
2
|
+
export { MemoryEventBus, MemoryEventConsumer, MemoryEventPublisher, MemoryEventQueue, NatsGraphEventEmitter, createGraphEventEmitter2 as createGraphEventEmitter, createMemoryConsumer, createGraphEventEmitter as createMemoryGraphEventEmitter, createMemoryPublisher, getGraphEventEmitter, resetGraphEventEmitter } from '../chunk-S52PJKSW.js';
|
|
3
|
+
export { EventQueueFactory, NatsEventConsumer, NatsEventPublisher } from '../chunk-KSO6QQVD.js';
|
|
4
4
|
export { QueueType } from '../chunk-VOFKF27Q.js';
|
|
5
5
|
import '../chunk-COSUYUCB.js';
|
|
6
6
|
import '../chunk-NGMEI42S.js';
|
package/dist/graph/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { AUDIT_FIELDS, GraphEventsPublisher, GraphExportService, GraphModule, SOFT_DELETE_FIELDS, STANDARD_FIELDS, TENANT_FIELDS, createGraphEventsHelper, createGraphExportService, createPrismaGraphIntegration, createRelationshipFromEntity, defineEntity, defineGraphConfig, defineModuleGraph, defineRelationship, getGraphEventsPublisher, getGraphStats, initializeGraph, isGraphInitialized } from '../chunk-
|
|
1
|
+
export { AUDIT_FIELDS, GraphEventsPublisher, GraphExportService, GraphModule, SOFT_DELETE_FIELDS, STANDARD_FIELDS, TENANT_FIELDS, createGraphEventsHelper, createGraphExportService, createPrismaGraphIntegration, createRelationshipFromEntity, defineEntity, defineGraphConfig, defineModuleGraph, defineRelationship, getGraphEventsPublisher, getGraphStats, initializeGraph, isGraphInitialized } from '../chunk-DR5AQJT6.js';
|
|
2
2
|
export { GraphRegistry, addGraphExtension, createEntityEvent, createRelationshipEvent, extractEntityTitle, extractMinimalFields, getCollectionForEntity, parseRelationship, shouldSyncEntity, shouldSyncRelationship } from '../chunk-TKBD2ONF.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-WPGSKLAG.js';
|
|
4
|
+
import '../chunk-S52PJKSW.js';
|
|
5
|
+
import '../chunk-KSO6QQVD.js';
|
|
6
6
|
import '../chunk-VOFKF27Q.js';
|
|
7
7
|
import '../chunk-COSUYUCB.js';
|
|
8
8
|
import '../chunk-RTQIRGVB.js';
|
package/dist/index.js
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
export { TemporalClient, TemporalClientFactory, TemporalModule, TemporalWorker, TemporalWorkerFactory, TemporalWorkerManager } from './chunk-Z4IRLBWO.js';
|
|
2
2
|
import { ActivityModule, UsageModule, TrackerModule } from './chunk-VGMFFO6N.js';
|
|
3
3
|
export { ActivityModule, TrackerModule, UsageModule } from './chunk-VGMFFO6N.js';
|
|
4
|
-
export {
|
|
4
|
+
export { instrumentation_exports as Instrumentation } from './chunk-4XAEES25.js';
|
|
5
5
|
export { middleware_exports as Middleware } from './chunk-2HANKZZM.js';
|
|
6
6
|
import { TenantNotificationsModule, NotificationsModule } from './chunk-I43B35CP.js';
|
|
7
7
|
export { tenant_notifications_exports as Notifications, NotificationsModule } from './chunk-I43B35CP.js';
|
|
8
8
|
export { observability_exports as Observability } from './chunk-5LXDPGDH.js';
|
|
9
|
-
export { prisma_exports as Prisma } from './chunk-
|
|
9
|
+
export { prisma_exports as Prisma } from './chunk-LRL6GKXI.js';
|
|
10
10
|
import './chunk-GTEMQXCA.js';
|
|
11
11
|
import { RBACModule } from './chunk-ER77ZA7C.js';
|
|
12
12
|
export { RBACModule, createRBACDirective, createRBACDirectiveForLayer, createRBACDirectiveFromEnv } from './chunk-ER77ZA7C.js';
|
|
13
13
|
export { export_exports as Export } from './chunk-FNZEQOJY.js';
|
|
14
14
|
export { feature_flags_exports as FeatureFlags } from './chunk-VWCN5PMD.js';
|
|
15
|
+
import { GraphModule } from './chunk-DR5AQJT6.js';
|
|
16
|
+
export { graph_exports as Graph, GraphModule } from './chunk-DR5AQJT6.js';
|
|
17
|
+
import './chunk-TKBD2ONF.js';
|
|
18
|
+
import { EventsModule } from './chunk-WPGSKLAG.js';
|
|
19
|
+
export { event_queue_exports as EventQueue, EventsModule } from './chunk-WPGSKLAG.js';
|
|
20
|
+
import './chunk-S52PJKSW.js';
|
|
21
|
+
export { graphql_exports as GraphQL } from './chunk-NUZZRJNN.js';
|
|
22
|
+
import './chunk-QLVKMWFA.js';
|
|
23
|
+
export { i18n_exports as I18n, createTranslator, getLanguage, getLocale, hasI18n, t } from './chunk-IYE2NTRX.js';
|
|
24
|
+
export { init_exports as Init } from './chunk-SXIL2AJF.js';
|
|
15
25
|
export { gateway_exports as Gateway } from './chunk-4B43DZIS.js';
|
|
16
26
|
import './chunk-MLW2HPS5.js';
|
|
17
27
|
export { layer_exports as Layer } from './chunk-HIWTWIGQ.js';
|
|
18
|
-
import {
|
|
19
|
-
export { graph_exports as Graph, GraphModule } from './chunk-RBGRCYDX.js';
|
|
20
|
-
import './chunk-TKBD2ONF.js';
|
|
21
|
-
import { EventsModule } from './chunk-FPARMFI5.js';
|
|
22
|
-
export { event_queue_exports as EventQueue, EventsModule } from './chunk-FPARMFI5.js';
|
|
23
|
-
import './chunk-AI5C77XX.js';
|
|
24
|
-
import { EventQueueFactory } from './chunk-L2F2SCEJ.js';
|
|
28
|
+
import { EventQueueFactory } from './chunk-KSO6QQVD.js';
|
|
25
29
|
import './chunk-VOFKF27Q.js';
|
|
26
|
-
export { graphql_exports as GraphQL } from './chunk-NUZZRJNN.js';
|
|
27
|
-
import './chunk-QLVKMWFA.js';
|
|
28
30
|
import './chunk-COSUYUCB.js';
|
|
29
|
-
export { i18n_exports as I18n, createTranslator, getLanguage, getLocale, hasI18n, t } from './chunk-IYE2NTRX.js';
|
|
30
|
-
export { instrumentation_exports as Instrumentation } from './chunk-4XAEES25.js';
|
|
31
31
|
import { AuthModule } from './chunk-WBWM7UY7.js';
|
|
32
32
|
export { AuthModule } from './chunk-WBWM7UY7.js';
|
|
33
33
|
export { utils_exports as Utils } from './chunk-MOCUBSTW.js';
|
|
@@ -35,13 +35,13 @@ export { cache_exports as Cache } from './chunk-4XGGWW36.js';
|
|
|
35
35
|
export { captcha_exports as Captcha, isCaptchaEnabled, verifyCaptcha, verifyCaptchaIfEnabled } from './chunk-YMZEUTD2.js';
|
|
36
36
|
export { createInternalClient, createInternalClientForTenant, createInternalClientForWorkspaces } from './chunk-VI4VSNTI.js';
|
|
37
37
|
export { crypto_exports as Crypto } from './chunk-SBS4S2PJ.js';
|
|
38
|
-
export { dataloader_exports as DataLoader } from './chunk-NUB5GQTU.js';
|
|
39
38
|
import { DatabaseModule } from './chunk-5CAA3JST.js';
|
|
40
39
|
export { DatabaseModule } from './chunk-5CAA3JST.js';
|
|
41
40
|
import { APIError, NetworkError, TimeoutError, ValidationError } from './chunk-RTQIRGVB.js';
|
|
42
41
|
export { DEFAULT_CIRCUIT_BREAKER_CONFIG, DEFAULT_GATEWAY_RETRY_CONFIG, DEFAULT_GATEWAY_ROUTING, DEFAULT_LAYER_RESOURCES, DEFAULT_LAYER_STREAMS } from './chunk-NGMEI42S.js';
|
|
43
42
|
import { logger } from './chunk-CBZNP6RF.js';
|
|
44
43
|
export { logger_exports as Logger } from './chunk-CBZNP6RF.js';
|
|
44
|
+
export { dataloader_exports as DataLoader } from './chunk-NUB5GQTU.js';
|
|
45
45
|
import { __name } from './chunk-XE4OXN2W.js';
|
|
46
46
|
import { GraphQLClient } from 'graphql-request';
|
|
47
47
|
import { AsyncLocalStorage } from 'async_hooks';
|
package/dist/init/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { getSDKState, initializeBurdenoffSDK, isSDKInitialized, resetSDK } from '../chunk-
|
|
1
|
+
export { getSDKState, initializeBurdenoffSDK, isSDKInitialized, resetSDK } from '../chunk-SXIL2AJF.js';
|
|
2
2
|
import '../chunk-4B43DZIS.js';
|
|
3
3
|
import '../chunk-MLW2HPS5.js';
|
|
4
4
|
import '../chunk-HIWTWIGQ.js';
|
|
5
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-KSO6QQVD.js';
|
|
6
6
|
import '../chunk-VOFKF27Q.js';
|
|
7
7
|
import '../chunk-COSUYUCB.js';
|
|
8
8
|
import '../chunk-NGMEI42S.js';
|
package/dist/prisma/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { PrismaClientWrapper, buildContextWhereClause, buildContextWhereConditions, checkDatabaseHealth, configurePrismaLogging, contextMatches, createConnectionPool, createContextFromSDK, createDatabaseClient, createDatabaseClientFromEnv, createPrismaAdapter, createPrismaClient, extractFieldsFromModel, getAllModelNames, getDatabaseManager, getDatabaseProductName, getDatabaseStats, getDatabaseVersion, getDb, getModelFields, hasModel, initializeDatabase, initializeDatabaseWithConfig, isDatabaseInitialized, loadGeneratedFields, mergeContext, parseContext, resetDatabaseManager, testConnection, toContextJson } from '../chunk-
|
|
1
|
+
export { PrismaClientWrapper, buildContextWhereClause, buildContextWhereConditions, checkDatabaseHealth, configurePrismaLogging, contextMatches, createConnectionPool, createContextFromSDK, createDatabaseClient, createDatabaseClientFromEnv, createPrismaAdapter, createPrismaClient, extractFieldsFromModel, getAllModelNames, getDatabaseManager, getDatabaseProductName, getDatabaseStats, getDatabaseVersion, getDb, getModelFields, hasModel, initializeDatabase, initializeDatabaseWithConfig, isDatabaseInitialized, loadGeneratedFields, mergeContext, parseContext, resetDatabaseManager, testConnection, toContextJson } from '../chunk-LRL6GKXI.js';
|
|
2
2
|
export { addWorkspaceExtension, getWorkspaceContext, injectWhereWorkspaceId, setWorkspaceContext, withWorkspaceContext, withWorkspaceContextSync } from '../chunk-GTEMQXCA.js';
|
|
3
3
|
import '../chunk-TKBD2ONF.js';
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-S52PJKSW.js';
|
|
5
|
+
import '../chunk-KSO6QQVD.js';
|
|
6
6
|
import '../chunk-VOFKF27Q.js';
|
|
7
7
|
import '../chunk-COSUYUCB.js';
|
|
8
8
|
import '../chunk-NGMEI42S.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@burdenoff/be-sdk",
|
|
3
|
-
"version": "2026.512.
|
|
3
|
+
"version": "2026.512.103",
|
|
4
4
|
"description": "Backend SDK for Burdenoff products providing unified access to notifications, RBAC, activity tracking, usage monitoring, and more",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export { EventQueueFactory } from './chunk-L2F2SCEJ.js';
|
|
2
|
-
import './chunk-VOFKF27Q.js';
|
|
3
|
-
import './chunk-COSUYUCB.js';
|
|
4
|
-
import './chunk-NGMEI42S.js';
|
|
5
|
-
import './chunk-CBZNP6RF.js';
|
|
6
|
-
import './chunk-XE4OXN2W.js';
|
|
7
|
-
//# sourceMappingURL=EventQueueFactory-FUSC3YWI.js.map
|
|
8
|
-
//# sourceMappingURL=EventQueueFactory-FUSC3YWI.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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","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","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-L2F2SCEJ.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\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\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 * 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 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 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 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\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 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\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 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"]}
|