@geekmidas/events 10.0.0-alpha.9 → 10.0.0-alpha.90
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/README.md +46 -1
- package/dist/SQSSubscriber-BEJBfNTe.mjs +264 -0
- package/dist/SQSSubscriber-BEJBfNTe.mjs.map +1 -0
- package/dist/SQSSubscriber-COTqWvOk.cjs +288 -0
- package/dist/SQSSubscriber-COTqWvOk.cjs.map +1 -0
- package/dist/basic/index.cjs +41 -11
- package/dist/basic/index.cjs.map +1 -1
- package/dist/basic/index.d.cts +11 -10
- package/dist/basic/index.d.cts.map +1 -1
- package/dist/basic/index.d.mts +11 -10
- package/dist/basic/index.d.mts.map +1 -1
- package/dist/basic/index.mjs +39 -10
- package/dist/basic/index.mjs.map +1 -1
- package/dist/index.cjs +47 -151
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +82 -26
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +82 -26
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +34 -151
- package/dist/index.mjs.map +1 -1
- package/dist/pgboss/index.cjs +198 -34
- package/dist/pgboss/index.cjs.map +1 -1
- package/dist/pgboss/index.d.cts +54 -12
- package/dist/pgboss/index.d.cts.map +1 -1
- package/dist/pgboss/index.d.mts +54 -12
- package/dist/pgboss/index.d.mts.map +1 -1
- package/dist/pgboss/index.mjs +193 -34
- package/dist/pgboss/index.mjs.map +1 -1
- package/dist/rabbitmq/index.cjs +173 -27
- package/dist/rabbitmq/index.cjs.map +1 -1
- package/dist/rabbitmq/index.d.cts +19 -10
- package/dist/rabbitmq/index.d.cts.map +1 -1
- package/dist/rabbitmq/index.d.mts +19 -10
- package/dist/rabbitmq/index.d.mts.map +1 -1
- package/dist/rabbitmq/index.mjs +169 -27
- package/dist/rabbitmq/index.mjs.map +1 -1
- package/dist/registry-DIx25Q5s.d.cts +255 -0
- package/dist/registry-DIx25Q5s.d.cts.map +1 -0
- package/dist/registry-DIx25Q5s.d.mts +255 -0
- package/dist/registry-DIx25Q5s.d.mts.map +1 -0
- package/dist/registry-DXLY1Xf6.mjs +99 -0
- package/dist/registry-DXLY1Xf6.mjs.map +1 -0
- package/dist/registry-DlT36229.cjs +122 -0
- package/dist/registry-DlT36229.cjs.map +1 -0
- package/dist/{chunk-CsX-DzYB.cjs → rolldown-runtime-C0BPl7ul.cjs} +17 -16
- package/dist/rolldown-runtime-D7D4PA-g.mjs +13 -0
- package/dist/sns/index.cjs +403 -40
- package/dist/sns/index.cjs.map +1 -1
- package/dist/sns/index.d.cts +175 -11
- package/dist/sns/index.d.cts.map +1 -1
- package/dist/sns/index.d.mts +175 -11
- package/dist/sns/index.d.mts.map +1 -1
- package/dist/sns/index.mjs +372 -24
- package/dist/sns/index.mjs.map +1 -1
- package/dist/sns/snsUrl.cjs +91 -6
- package/dist/sns/snsUrl.cjs.map +1 -0
- package/dist/sns/snsUrl.d.cts +57 -2
- package/dist/sns/snsUrl.d.cts.map +1 -0
- package/dist/sns/snsUrl.d.mts +57 -2
- package/dist/sns/snsUrl.d.mts.map +1 -0
- package/dist/sns/snsUrl.mjs +81 -2
- package/dist/sns/snsUrl.mjs.map +1 -0
- package/dist/sqs/index.cjs +31 -65
- package/dist/sqs/index.cjs.map +1 -1
- package/dist/sqs/index.d.cts +28 -11
- package/dist/sqs/index.d.cts.map +1 -1
- package/dist/sqs/index.d.mts +28 -11
- package/dist/sqs/index.d.mts.map +1 -1
- package/dist/sqs/index.mjs +22 -58
- package/dist/sqs/index.mjs.map +1 -1
- package/dist/sqs/sqsUrl.cjs +92 -6
- package/dist/sqs/sqsUrl.cjs.map +1 -0
- package/dist/sqs/sqsUrl.d.cts +56 -2
- package/dist/sqs/sqsUrl.d.cts.map +1 -0
- package/dist/sqs/sqsUrl.d.mts +56 -2
- package/dist/sqs/sqsUrl.d.mts.map +1 -0
- package/dist/sqs/sqsUrl.mjs +82 -2
- package/dist/sqs/sqsUrl.mjs.map +1 -0
- package/dist/telemetry-DG3l807O.cjs +309 -0
- package/dist/telemetry-DG3l807O.cjs.map +1 -0
- package/dist/telemetry-DjjgJMul.mjs +244 -0
- package/dist/telemetry-DjjgJMul.mjs.map +1 -0
- package/package.json +8 -3
- package/dist/PgBossConnection-23soZ_aM.cjs +0 -80
- package/dist/PgBossConnection-23soZ_aM.cjs.map +0 -1
- package/dist/PgBossConnection-CCXhoNzb.cjs +0 -4
- package/dist/PgBossConnection-DvNbd4Zk.mjs +0 -74
- package/dist/PgBossConnection-DvNbd4Zk.mjs.map +0 -1
- package/dist/PgBossConnection-_gdM40JB.mjs +0 -4
- package/dist/RabbitMQConnection-BKEdCUro.cjs +0 -113
- package/dist/RabbitMQConnection-BKEdCUro.cjs.map +0 -1
- package/dist/RabbitMQConnection-CCOqDDnb.cjs +0 -4
- package/dist/RabbitMQConnection-DJEyM-Bu.mjs +0 -4
- package/dist/RabbitMQConnection-DJgUPc19.mjs +0 -107
- package/dist/RabbitMQConnection-DJgUPc19.mjs.map +0 -1
- package/dist/SNSConnection-B2K86hpz.cjs +0 -75
- package/dist/SNSConnection-B2K86hpz.cjs.map +0 -1
- package/dist/SNSConnection-BVo84FeW.mjs +0 -5
- package/dist/SNSConnection-DIHRjrQF.cjs +0 -5
- package/dist/SNSConnection-v9jjF99w.mjs +0 -69
- package/dist/SNSConnection-v9jjF99w.mjs.map +0 -1
- package/dist/SQSConnection-4tBMkVZE.mjs +0 -69
- package/dist/SQSConnection-4tBMkVZE.mjs.map +0 -1
- package/dist/SQSConnection-BBLAvF-1.cjs +0 -5
- package/dist/SQSConnection-BaC7rGhI.cjs +0 -75
- package/dist/SQSConnection-BaC7rGhI.cjs.map +0 -1
- package/dist/SQSConnection-DbavOq8_.mjs +0 -5
- package/dist/SQSSubscriber-BMWZ3s5q.mjs +0 -114
- package/dist/SQSSubscriber-BMWZ3s5q.mjs.map +0 -1
- package/dist/SQSSubscriber-YXPlg2rm.cjs +0 -120
- package/dist/SQSSubscriber-YXPlg2rm.cjs.map +0 -1
- package/dist/chunk-B9dir_RE.mjs +0 -11
- package/dist/snsUrl-ASdc0D1v.d.cts +0 -61
- package/dist/snsUrl-ASdc0D1v.d.cts.map +0 -1
- package/dist/snsUrl-CifYhPAa.mjs +0 -79
- package/dist/snsUrl-CifYhPAa.mjs.map +0 -1
- package/dist/snsUrl-FRbRcwF0.d.mts +0 -61
- package/dist/snsUrl-FRbRcwF0.d.mts.map +0 -1
- package/dist/snsUrl-f2gU3CzK.cjs +0 -114
- package/dist/snsUrl-f2gU3CzK.cjs.map +0 -1
- package/dist/sqsUrl-BV6zS-mi.d.mts +0 -60
- package/dist/sqsUrl-BV6zS-mi.d.mts.map +0 -1
- package/dist/sqsUrl-CbAsBFHI.mjs +0 -80
- package/dist/sqsUrl-CbAsBFHI.mjs.map +0 -1
- package/dist/sqsUrl-CdisN3GU.cjs +0 -115
- package/dist/sqsUrl-CdisN3GU.cjs.map +0 -1
- package/dist/sqsUrl-DZDPHxIk.d.cts +0 -60
- package/dist/sqsUrl-DZDPHxIk.d.cts.map +0 -1
- package/dist/types-BmixGrOD.d.cts +0 -67
- package/dist/types-BmixGrOD.d.cts.map +0 -1
- package/dist/types-Byv8N9ma.cjs +0 -24
- package/dist/types-Byv8N9ma.cjs.map +0 -1
- package/dist/types-CYDt-2RQ.mjs +0 -18
- package/dist/types-CYDt-2RQ.mjs.map +0 -1
- package/dist/types-DycjsYms.d.mts +0 -67
- package/dist/types-DycjsYms.d.mts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SQSSubscriber-COTqWvOk.cjs","names":["SQSClient","chunk","publishTraced","carrierAsAttributes","SendMessageBatchCommand","ReceiveMessageCommand","consumeTraced","carrierFromAttributes","DeleteMessageCommand"],"sources":["../src/sqs/SQSConnection.ts","../src/sqs/SQSPublisher.ts","../src/sqs/SQSSubscriber.ts"],"sourcesContent":["import { SQSClient, type SQSClientConfig } from '@aws-sdk/client-sqs';\nimport type { EventConnection } from '../types';\nimport { EventPublisherType } from '../types';\nimport * as sqsUrl from './sqsUrl';\n\nexport interface SQSConnectionConfig {\n\tqueueUrl: string;\n\tregion?: string;\n\tendpoint?: string; // Custom endpoint (e.g., for LocalStack)\n\tcredentials?: {\n\t\taccessKeyId: string;\n\t\tsecretAccessKey: string;\n\t\tsessionToken?: string;\n\t};\n}\n\nexport class SQSConnection implements EventConnection {\n\treadonly type = EventPublisherType.SQS;\n\tprivate client: SQSClient;\n\tprivate connected = false;\n\n\tconstructor(readonly config: SQSConnectionConfig) {\n\t\tthis.config = config;\n\n\t\tconst clientConfig: SQSClientConfig = {\n\t\t\tregion: config.region,\n\t\t\tendpoint: config.endpoint,\n\t\t\tcredentials: config.credentials,\n\t\t};\n\n\t\tthis.client = new SQSClient(clientConfig);\n\t}\n\n\t/**\n\t * Create an SQSConnection from a connection string\n\t * Format: sqs://?queueUrl=https://sqs.region.amazonaws.com/accountId/queueName®ion=us-east-1&endpoint=http://localhost:4566\n\t */\n\tstatic async fromConnectionString(\n\t\tconnectionString: string,\n\t): Promise<SQSConnection> {\n\t\t// Through the codec, not a second hand-rolled parse: the deploy target\n\t\t// composes these with `sqsUrl.build`, and a string it cannot read back is\n\t\t// exactly the drift one shared module rules out.\n\t\tconst { queueUrl, region, endpoint } = sqsUrl.parse(connectionString);\n\t\tconst params = new URL(connectionString).searchParams;\n\n\t\tconst config: SQSConnectionConfig = {\n\t\t\tqueueUrl,\n\t\t\tregion,\n\t\t\tendpoint,\n\t\t};\n\n\t\t// Credentials are not part of the address — see `sqsUrl` — but a caller\n\t\t// may still pin them here, so they are read beside it rather than in it.\n\t\tconst accessKeyId = params.get('accessKeyId');\n\t\tconst secretAccessKey = params.get('secretAccessKey');\n\t\tif (accessKeyId && secretAccessKey) {\n\t\t\tconfig.credentials = {\n\t\t\t\taccessKeyId,\n\t\t\t\tsecretAccessKey,\n\t\t\t\tsessionToken: params.get('sessionToken') || undefined,\n\t\t\t};\n\t\t}\n\n\t\tconst connection = new SQSConnection(config);\n\t\tawait connection.connect();\n\t\treturn connection;\n\t}\n\n\tasync connect(): Promise<void> {\n\t\t// SQS doesn't have a traditional connection, but we mark as connected\n\t\tthis.connected = true;\n\t}\n\n\tasync close(): Promise<void> {\n\t\tthis.client.destroy();\n\t\tthis.connected = false;\n\t}\n\n\tisConnected(): boolean {\n\t\treturn this.connected;\n\t}\n\n\t/**\n\t * Get the underlying SQS client\n\t */\n\tget sqsClient(): SQSClient {\n\t\treturn this.client;\n\t}\n\n\t/**\n\t * Get the queue URL for this connection\n\t */\n\tget queueUrl(): string {\n\t\treturn this.config.queueUrl;\n\t}\n}\n","import {\n\tSendMessageBatchCommand,\n\ttype SendMessageBatchCommandInput,\n\ttype SendMessageBatchRequestEntry,\n} from '@aws-sdk/client-sqs';\nimport chunk from 'lodash.chunk';\nimport { carrierAsAttributes, publishTraced } from '../telemetry';\nimport type { EventPublisher, PublishableMessage } from '../types';\nimport type { SQSConnection } from './SQSConnection';\n\nexport interface SQSPublisherOptions {\n\tmaxBatchSize?: number; // Default: 10 (SQS limit)\n}\n\nexport class SQSPublisher<TMessage extends PublishableMessage<string, any>>\n\timplements EventPublisher<TMessage>\n{\n\treadonly options: Required<SQSPublisherOptions>;\n\n\tconstructor(\n\t\treadonly connection: SQSConnection,\n\t\toptions: SQSPublisherOptions = {},\n\t) {\n\t\tthis.options = {\n\t\t\tmaxBatchSize: options.maxBatchSize ?? 10, // SQS limit\n\t\t};\n\t}\n\n\t/**\n\t * Create an SQSPublisher from a connection string\n\t * Format: sqs://?queueUrl=https://sqs.region.amazonaws.com/accountId/queueName®ion=us-east-1&endpoint=http://localhost:4566&maxBatchSize=10\n\t */\n\tstatic async fromConnectionString<\n\t\tTMessage extends PublishableMessage<string, any>,\n\t>(connectionString: string): Promise<SQSPublisher<TMessage>> {\n\t\tconst url = new URL(connectionString);\n\t\tconst params = url.searchParams;\n\n\t\tconst { SQSConnection } = await import('./SQSConnection');\n\t\tconst connection =\n\t\t\tawait SQSConnection.fromConnectionString(connectionString);\n\n\t\tconst options: SQSPublisherOptions = {\n\t\t\tmaxBatchSize: params.get('maxBatchSize')\n\t\t\t\t? Number.parseInt(params.get('maxBatchSize')!, 10)\n\t\t\t\t: undefined,\n\t\t};\n\n\t\treturn new SQSPublisher<TMessage>(connection, options);\n\t}\n\n\tasync publish(messages: TMessage[]): Promise<void> {\n\t\tif (messages.length === 0) return;\n\n\t\tif (!this.connection.isConnected()) {\n\t\t\tawait this.connection.connect();\n\t\t}\n\n\t\t// Split messages into batches (SQS limit is 10 messages per batch)\n\t\tconst batches = chunk(messages, this.options.maxBatchSize);\n\n\t\t// Send all batches\n\t\tawait Promise.all(batches.map((batch) => this.sendBatch(batch)));\n\t}\n\n\tprivate async sendBatch(messages: TMessage[]): Promise<void> {\n\t\tconst destination = sqsQueueName(this.connection.queueUrl);\n\t\tawait publishTraced(\n\t\t\tmessages,\n\t\t\t(message) => ({ system: 'aws_sqs', destination, type: message.type }),\n\t\t\t(carriers) =>\n\t\t\t\tthis.send(\n\t\t\t\t\tmessages.map((message, index) => ({\n\t\t\t\t\t\tId: `${index}`,\n\t\t\t\t\t\tMessageBody: JSON.stringify({\n\t\t\t\t\t\t\ttype: message.type,\n\t\t\t\t\t\t\tpayload: message.payload,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t// The trace context as message attributes — SQS's own header\n\t\t\t\t\t\t// field — beside the type.\n\t\t\t\t\t\tMessageAttributes: {\n\t\t\t\t\t\t\ttype: {\n\t\t\t\t\t\t\t\tDataType: 'String',\n\t\t\t\t\t\t\t\tStringValue: message.type,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t...carrierAsAttributes(carriers[index]),\n\t\t\t\t\t\t},\n\t\t\t\t\t})),\n\t\t\t\t),\n\t\t);\n\t}\n\n\tprivate async send(entries: SendMessageBatchRequestEntry[]): Promise<void> {\n\t\tconst input: SendMessageBatchCommandInput = {\n\t\t\tQueueUrl: this.connection.queueUrl,\n\t\t\tEntries: entries,\n\t\t};\n\n\t\tconst command = new SendMessageBatchCommand(input);\n\t\tconst response = await this.connection.sqsClient.send(command);\n\n\t\t// Check for failures\n\t\tif (response.Failed && response.Failed.length > 0) {\n\t\t\tthrow new SqsBatchPartlyFailed(\n\t\t\t\tresponse.Failed.map((f) => ({\n\t\t\t\t\tid: f.Id,\n\t\t\t\t\tcode: f.Code,\n\t\t\t\t\tmessage: f.Message,\n\t\t\t\t})),\n\t\t\t);\n\t\t}\n\t}\n\n\tasync close(): Promise<void> {\n\t\t// Publisher doesn't own the connection\n\t\t// Connection should be closed by whoever created it\n\t}\n}\n\n/** SQS accepted the batch but refused some of its messages; the rest were sent. */\nexport class SqsBatchPartlyFailed extends Error {\n\tconstructor(\n\t\treadonly failed: readonly {\n\t\t\tid?: string;\n\t\t\tcode?: string;\n\t\t\tmessage?: string;\n\t\t}[],\n\t) {\n\t\tsuper(\n\t\t\t`Failed to send ${failed.length} messages: ${failed.map((f) => `${f.id}: ${f.code} - ${f.message}`).join(', ')}. The others in the batch were sent; retry only these.`,\n\t\t);\n\t\tthis.name = 'SqsBatchPartlyFailed';\n\t}\n}\n\n/** The queue's name, the last segment of its URL. */\nexport function sqsQueueName(queueUrl: string): string {\n\treturn queueUrl.split('/').filter(Boolean).pop() ?? queueUrl;\n}\n","import {\n\tDeleteMessageCommand,\n\ttype Message,\n\tReceiveMessageCommand,\n} from '@aws-sdk/client-sqs';\nimport {\n\tcarrierFromAttributes,\n\tconsumeTraced,\n\ttype TraceCarrier,\n} from '../telemetry';\nimport type { EventSubscriber, PublishableMessage } from '../types';\nimport type { SQSConnection } from './SQSConnection';\nimport { sqsQueueName } from './SQSPublisher';\n\nexport interface SQSSubscriberOptions {\n\twaitTimeSeconds?: number; // SQS long polling (default: 20)\n\tmaxMessages?: number; // Max messages per poll (default: 10)\n\texpectedTopicArn?: string; // Optional: verify messages are from specific SNS topic\n}\n\n/**\n * SQS Subscriber - receives messages from an SQS queue\n *\n * This subscriber can receive:\n * 1. Direct SQS messages\n * 2. SNS messages that were pushed to the queue (SNS → SQS pattern)\n *\n * When receiving SNS messages, it:\n * - Automatically detects and parses the SNS wrapper format\n * - Filters by TopicArn (if expectedTopicArn is provided)\n * - Filters by message type\n * - Processes the actual message payload\n */\nexport class SQSSubscriber<TMessage extends PublishableMessage<string, any>>\n\timplements EventSubscriber<TMessage>\n{\n\tprivate polling = false;\n\tprivate messageTypes: Set<TMessage['type']> = new Set();\n\tprivate listener?: (payload: TMessage) => Promise<void>;\n\tprivate options: Required<SQSSubscriberOptions>;\n\n\tconstructor(\n\t\tprivate connection: SQSConnection,\n\t\toptions: SQSSubscriberOptions = {},\n\t) {\n\t\tthis.options = {\n\t\t\twaitTimeSeconds: options.waitTimeSeconds ?? 20,\n\t\t\tmaxMessages: options.maxMessages ?? 10,\n\t\t\texpectedTopicArn: options.expectedTopicArn ?? '',\n\t\t};\n\t}\n\n\tasync subscribe(\n\t\tmessages: TMessage['type'][],\n\t\tlistener: (payload: TMessage) => Promise<void>,\n\t): Promise<void> {\n\t\tthis.messageTypes = new Set(messages);\n\t\tthis.listener = listener;\n\n\t\tif (!this.connection.isConnected()) {\n\t\t\tawait this.connection.connect();\n\t\t}\n\n\t\tthis.polling = true;\n\t\tthis.poll();\n\t}\n\n\tstop(): void {\n\t\tthis.polling = false;\n\t}\n\n\tprivate async poll(): Promise<void> {\n\t\twhile (this.polling) {\n\t\t\ttry {\n\t\t\t\tconst command = new ReceiveMessageCommand({\n\t\t\t\t\tQueueUrl: this.connection.queueUrl,\n\t\t\t\t\tMaxNumberOfMessages: this.options.maxMessages,\n\t\t\t\t\tWaitTimeSeconds: this.options.waitTimeSeconds,\n\t\t\t\t\tMessageAttributeNames: ['All'],\n\t\t\t\t});\n\n\t\t\t\tconst response = await this.connection.sqsClient.send(command);\n\n\t\t\t\tif (response.Messages && response.Messages.length > 0) {\n\t\t\t\t\tawait this.processMessages(response.Messages);\n\t\t\t\t}\n\t\t\t} catch (_error) {\n\t\t\t\tawait this.sleep(1000);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async processMessages(messages: Message[]): Promise<void> {\n\t\tfor (const message of messages) {\n\t\t\ttry {\n\t\t\t\tif (!message.Body) continue;\n\n\t\t\t\t// Try to parse as SNS message first\n\t\t\t\tconst parsedMessage = this.parseMessage(\n\t\t\t\t\tmessage.Body,\n\t\t\t\t\tmessage.MessageAttributes,\n\t\t\t\t);\n\n\t\t\t\tif (!parsedMessage) {\n\t\t\t\t\t// Not a valid message format\n\t\t\t\t\tawait this.deleteMessage(message.ReceiptHandle!);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst { payload, messageType, topicArn, carrier } = parsedMessage;\n\n\t\t\t\t// If expectedTopicArn is set, verify the message is from that topic\n\t\t\t\tif (this.options.expectedTopicArn && topicArn) {\n\t\t\t\t\tif (topicArn !== this.options.expectedTopicArn) {\n\t\t\t\t\t\tawait this.deleteMessage(message.ReceiptHandle!);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Check if we're subscribed to this message type\n\t\t\t\tif (\n\t\t\t\t\tmessageType &&\n\t\t\t\t\tthis.messageTypes.has(messageType as TMessage['type'])\n\t\t\t\t) {\n\t\t\t\t\t// Call listener\n\t\t\t\t\tconst listener = this.listener;\n\t\t\t\t\tif (listener) {\n\t\t\t\t\t\tawait consumeTraced(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsystem: 'aws_sqs',\n\t\t\t\t\t\t\t\tdestination: sqsQueueName(this.connection.queueUrl),\n\t\t\t\t\t\t\t\ttype: messageType,\n\t\t\t\t\t\t\t\tmessageId: message.MessageId,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcarrier,\n\t\t\t\t\t\t\t() => listener(payload as TMessage),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Delete message after successful processing\n\t\t\t\t\tawait this.deleteMessage(message.ReceiptHandle!);\n\t\t\t\t} else {\n\t\t\t\t\t// Delete messages we're not subscribed to\n\t\t\t\t\tawait this.deleteMessage(message.ReceiptHandle!);\n\t\t\t\t}\n\t\t\t} catch (_error) {\n\t\t\t\t// Message will become visible again\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Parse message body - handles both direct SQS messages and SNS-wrapped messages\n\t */\n\tprivate parseMessage(\n\t\tbody: string,\n\t\tattributes: Record<string, unknown> | undefined,\n\t): {\n\t\tpayload: unknown;\n\t\tmessageType: string | undefined;\n\t\ttopicArn?: string;\n\t\tcarrier?: TraceCarrier;\n\t} | null {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(body);\n\n\t\t\t// Check if this is an SNS notification wrapper\n\t\t\tif (parsed.Type === 'Notification' && parsed.Message) {\n\t\t\t\t// This is an SNS message\n\t\t\t\tconst snsMessage = JSON.parse(parsed.Message);\n\t\t\t\tconst messageType =\n\t\t\t\t\tparsed.MessageAttributes?.type?.Value || snsMessage.type;\n\n\t\t\t\treturn {\n\t\t\t\t\tpayload: snsMessage,\n\t\t\t\t\tmessageType,\n\t\t\t\t\ttopicArn: parsed.TopicArn,\n\t\t\t\t\t// SNS's message attributes, carried in its envelope.\n\t\t\t\t\tcarrier: carrierFromAttributes(parsed.MessageAttributes),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// This is a direct SQS message\n\t\t\treturn {\n\t\t\t\tpayload: parsed,\n\t\t\t\tmessageType: parsed.type,\n\t\t\t\tcarrier: carrierFromAttributes(attributes),\n\t\t\t};\n\t\t} catch (_error) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate async deleteMessage(receiptHandle: string): Promise<void> {\n\t\ttry {\n\t\t\tconst command = new DeleteMessageCommand({\n\t\t\t\tQueueUrl: this.connection.queueUrl,\n\t\t\t\tReceiptHandle: receiptHandle,\n\t\t\t});\n\t\t\tawait this.connection.sqsClient.send(command);\n\t\t} catch (_error) {}\n\t}\n\n\tprivate sleep(ms: number): Promise<void> {\n\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t}\n}\n"],"mappings":"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"}
|
package/dist/basic/index.cjs
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
const
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_telemetry = require("../telemetry-DG3l807O.cjs");
|
|
3
|
+
let node_events = require("node:events");
|
|
5
4
|
//#region src/basic/BasicConnection.ts
|
|
6
5
|
var BasicConnection = class BasicConnection {
|
|
7
|
-
type =
|
|
6
|
+
type = "basic";
|
|
8
7
|
emitter;
|
|
9
8
|
connected = false;
|
|
10
9
|
constructor() {
|
|
@@ -37,35 +36,66 @@ var BasicConnection = class BasicConnection {
|
|
|
37
36
|
return this.emitter;
|
|
38
37
|
}
|
|
39
38
|
};
|
|
40
|
-
|
|
41
39
|
//#endregion
|
|
42
40
|
//#region src/basic/BasicPublisher.ts
|
|
43
41
|
var BasicPublisher = class {
|
|
42
|
+
connection;
|
|
44
43
|
constructor(connection) {
|
|
45
44
|
this.connection = connection;
|
|
46
45
|
}
|
|
47
46
|
async publish(messages) {
|
|
48
47
|
const emitter = this.connection.eventEmitter;
|
|
49
|
-
|
|
48
|
+
await require_telemetry.publishTraced(messages, (message) => ({
|
|
49
|
+
system: "basic",
|
|
50
|
+
destination: message.type,
|
|
51
|
+
type: message.type
|
|
52
|
+
}), async (carriers) => {
|
|
53
|
+
messages.forEach((message, i) => {
|
|
54
|
+
emitter.emit(message.type, message, carriers[i]);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
50
57
|
}
|
|
51
58
|
};
|
|
52
|
-
|
|
53
59
|
//#endregion
|
|
54
60
|
//#region src/basic/BasicSubscriber.ts
|
|
55
61
|
var BasicSubscriber = class {
|
|
62
|
+
connection;
|
|
56
63
|
constructor(connection) {
|
|
57
64
|
this.connection = connection;
|
|
58
65
|
}
|
|
59
66
|
async subscribe(messages, listener) {
|
|
60
67
|
const emitter = this.connection.eventEmitter;
|
|
61
|
-
for (const messageType of messages) emitter.on(messageType, (message) => {
|
|
62
|
-
|
|
68
|
+
for (const messageType of messages) emitter.on(messageType, (message, carrier) => {
|
|
69
|
+
require_telemetry.consumeTraced({
|
|
70
|
+
system: "basic",
|
|
71
|
+
destination: messageType,
|
|
72
|
+
type: messageType
|
|
73
|
+
}, carrier, () => listener(message)).catch((_error) => {});
|
|
63
74
|
});
|
|
64
75
|
}
|
|
65
76
|
};
|
|
66
|
-
|
|
77
|
+
//#endregion
|
|
78
|
+
//#region src/basic/driver.ts
|
|
79
|
+
/**
|
|
80
|
+
* `basic://` — an in-process `EventEmitter`. Register it with
|
|
81
|
+
* `registerEventsDriver(basicEventsDriver)`.
|
|
82
|
+
*/
|
|
83
|
+
const basicEventsDriver = {
|
|
84
|
+
scheme: "basic",
|
|
85
|
+
connect: (url) => BasicConnection.fromConnectionString(url),
|
|
86
|
+
async publisher(url) {
|
|
87
|
+
return new BasicPublisher(await BasicConnection.fromConnectionString(url));
|
|
88
|
+
},
|
|
89
|
+
publisherFor: (connection) => new BasicPublisher(connection),
|
|
90
|
+
async subscriber(url) {
|
|
91
|
+
return new BasicSubscriber(await BasicConnection.fromConnectionString(url));
|
|
92
|
+
},
|
|
93
|
+
subscriberFor: (connection) => new BasicSubscriber(connection)
|
|
94
|
+
};
|
|
67
95
|
//#endregion
|
|
68
96
|
exports.BasicConnection = BasicConnection;
|
|
69
97
|
exports.BasicPublisher = BasicPublisher;
|
|
70
98
|
exports.BasicSubscriber = BasicSubscriber;
|
|
99
|
+
exports.basicEventsDriver = basicEventsDriver;
|
|
100
|
+
|
|
71
101
|
//# sourceMappingURL=index.cjs.map
|
package/dist/basic/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["EventEmitter","publishTraced"],"sources":["../../src/basic/BasicConnection.ts","../../src/basic/BasicPublisher.ts","../../src/basic/BasicSubscriber.ts","../../src/basic/driver.ts"],"sourcesContent":["import { EventEmitter } from 'node:events';\nimport type { EventConnection } from '../types';\nimport { EventPublisherType } from '../types';\n\nexport class BasicConnection implements EventConnection {\n\treadonly type = EventPublisherType.Basic;\n\tprivate emitter: EventEmitter;\n\tprivate connected = false;\n\n\tconstructor() {\n\t\tthis.emitter = new EventEmitter();\n\t}\n\n\t/**\n\t * Create a BasicConnection from a connection string\n\t * Format: basic://\n\t */\n\tstatic async fromConnectionString(\n\t\t_connectionString: string,\n\t): Promise<BasicConnection> {\n\t\t// Basic connection doesn't need any configuration\n\t\tconst connection = new BasicConnection();\n\t\tawait connection.connect();\n\t\treturn connection;\n\t}\n\n\tasync connect(): Promise<void> {\n\t\tthis.connected = true;\n\t}\n\n\tasync close(): Promise<void> {\n\t\tthis.emitter.removeAllListeners();\n\t\tthis.connected = false;\n\t}\n\n\tisConnected(): boolean {\n\t\treturn this.connected;\n\t}\n\n\t/**\n\t * Get the underlying EventEmitter\n\t * Used by BasicPublisher and BasicSubscriber\n\t */\n\tget eventEmitter(): EventEmitter {\n\t\treturn this.emitter;\n\t}\n}\n","import { publishTraced } from '../telemetry';\nimport type { EventPublisher, PublishableMessage } from '../types';\nimport type { BasicConnection } from './BasicConnection';\n\nexport class BasicPublisher<TMessage extends PublishableMessage<string, any>>\n\timplements EventPublisher<TMessage>\n{\n\tconstructor(private connection: BasicConnection) {}\n\n\tasync publish(messages: TMessage[]) {\n\t\tconst emitter = this.connection.eventEmitter;\n\t\t// The trace context rides beside the message, as the emitter's second\n\t\t// argument, so the message a listener receives is the one published.\n\t\tawait publishTraced(\n\t\t\tmessages,\n\t\t\t(message) => ({\n\t\t\t\tsystem: 'basic',\n\t\t\t\tdestination: message.type,\n\t\t\t\ttype: message.type,\n\t\t\t}),\n\t\t\tasync (carriers) => {\n\t\t\t\tmessages.forEach((message, i) => {\n\t\t\t\t\temitter.emit(message.type, message, carriers[i]);\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\t}\n}\n","import { consumeTraced, type TraceCarrier } from '../telemetry';\nimport type { EventSubscriber, PublishableMessage } from '../types';\nimport type { BasicConnection } from './BasicConnection';\n\nexport class BasicSubscriber<TMessage extends PublishableMessage<string, any>>\n\timplements EventSubscriber<TMessage>\n{\n\tconstructor(private connection: BasicConnection) {}\n\n\tasync subscribe(\n\t\tmessages: TMessage['type'][],\n\t\tlistener: (payload: TMessage) => Promise<void>,\n\t): Promise<void> {\n\t\tconst emitter = this.connection.eventEmitter;\n\n\t\tfor (const messageType of messages) {\n\t\t\temitter.on(messageType, (message: TMessage, carrier?: TraceCarrier) => {\n\t\t\t\tconsumeTraced(\n\t\t\t\t\t{ system: 'basic', destination: messageType, type: messageType },\n\t\t\t\t\tcarrier,\n\t\t\t\t\t() => listener(message),\n\t\t\t\t).catch((_error) => {});\n\t\t\t});\n\t\t}\n\t}\n}\n","import type { EventsDriver } from '../registry';\nimport { EventPublisherType } from '../types';\nimport { BasicConnection } from './BasicConnection';\nimport { BasicPublisher } from './BasicPublisher';\nimport { BasicSubscriber } from './BasicSubscriber';\n\n/**\n * `basic://` — an in-process `EventEmitter`. Register it with\n * `registerEventsDriver(basicEventsDriver)`.\n */\nexport const basicEventsDriver: EventsDriver = {\n\tscheme: EventPublisherType.Basic,\n\tconnect: (url) => BasicConnection.fromConnectionString(url),\n\tasync publisher(url) {\n\t\treturn new BasicPublisher(await BasicConnection.fromConnectionString(url));\n\t},\n\tpublisherFor: (connection) =>\n\t\tnew BasicPublisher(connection as BasicConnection),\n\tasync subscriber(url) {\n\t\treturn new BasicSubscriber(await BasicConnection.fromConnectionString(url));\n\t},\n\tsubscriberFor: (connection) =>\n\t\tnew BasicSubscriber(connection as BasicConnection),\n};\n"],"mappings":";;;;AAIA,IAAa,kBAAb,MAAa,gBAA2C;CACvD,OAAS;CACT;CACA,YAAoB;CAEpB,cAAc;EACb,KAAK,UAAU,IAAIA,YAAAA,aAAa;CACjC;;;;;CAMA,aAAa,qBACZ,mBAC2B;EAE3B,MAAM,aAAa,IAAI,gBAAgB;EACvC,MAAM,WAAW,QAAQ;EACzB,OAAO;CACR;CAEA,MAAM,UAAyB;EAC9B,KAAK,YAAY;CAClB;CAEA,MAAM,QAAuB;EAC5B,KAAK,QAAQ,mBAAmB;EAChC,KAAK,YAAY;CAClB;CAEA,cAAuB;EACtB,OAAO,KAAK;CACb;;;;;CAMA,IAAI,eAA6B;EAChC,OAAO,KAAK;CACb;AACD;;;AC1CA,IAAa,iBAAb,MAEA;CACqB;CAApB,YAAY,YAAqC;EAA7B,KAAA,aAAA;CAA8B;CAElD,MAAM,QAAQ,UAAsB;EACnC,MAAM,UAAU,KAAK,WAAW;EAGhC,MAAMC,kBAAAA,cACL,WACC,aAAa;GACb,QAAQ;GACR,aAAa,QAAQ;GACrB,MAAM,QAAQ;EACf,IACA,OAAO,aAAa;GACnB,SAAS,SAAS,SAAS,MAAM;IAChC,QAAQ,KAAK,QAAQ,MAAM,SAAS,SAAS,EAAE;GAChD,CAAC;EACF,CACD;CACD;AACD;;;ACvBA,IAAa,kBAAb,MAEA;CACqB;CAApB,YAAY,YAAqC;EAA7B,KAAA,aAAA;CAA8B;CAElD,MAAM,UACL,UACA,UACgB;EAChB,MAAM,UAAU,KAAK,WAAW;EAEhC,KAAK,MAAM,eAAe,UACzB,QAAQ,GAAG,cAAc,SAAmB,YAA2B;GACtE,kBAAA,cACC;IAAE,QAAQ;IAAS,aAAa;IAAa,MAAM;GAAY,GAC/D,eACM,SAAS,OAAO,CACvB,CAAC,CAAC,OAAO,WAAW,CAAC,CAAC;EACvB,CAAC;CAEH;AACD;;;;;;;ACfA,MAAa,oBAAkC;CAC9C,QAAA;CACA,UAAU,QAAQ,gBAAgB,qBAAqB,GAAG;CAC1D,MAAM,UAAU,KAAK;EACpB,OAAO,IAAI,eAAe,MAAM,gBAAgB,qBAAqB,GAAG,CAAC;CAC1E;CACA,eAAe,eACd,IAAI,eAAe,UAA6B;CACjD,MAAM,WAAW,KAAK;EACrB,OAAO,IAAI,gBAAgB,MAAM,gBAAgB,qBAAqB,GAAG,CAAC;CAC3E;CACA,gBAAgB,eACf,IAAI,gBAAgB,UAA6B;AACnD"}
|
package/dist/basic/index.d.cts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { d as EventPublisher, f as EventPublisherType, g as PublishableMessage, p as EventSubscriber, t as EventsDriver, u as EventConnection } from "../registry-DIx25Q5s.cjs";
|
|
2
2
|
import { EventEmitter } from "node:events";
|
|
3
|
-
|
|
4
3
|
//#region src/basic/BasicConnection.d.ts
|
|
5
|
-
declare class BasicConnection implements EventConnection {
|
|
4
|
+
export declare class BasicConnection implements EventConnection {
|
|
6
5
|
readonly type = EventPublisherType.Basic;
|
|
7
6
|
private emitter;
|
|
8
7
|
private connected;
|
|
@@ -21,24 +20,26 @@ declare class BasicConnection implements EventConnection {
|
|
|
21
20
|
*/
|
|
22
21
|
get eventEmitter(): EventEmitter;
|
|
23
22
|
}
|
|
24
|
-
//# sourceMappingURL=BasicConnection.d.ts.map
|
|
25
23
|
//#endregion
|
|
26
24
|
//#region src/basic/BasicPublisher.d.ts
|
|
27
|
-
declare class BasicPublisher<TMessage extends PublishableMessage<string, any>> implements EventPublisher<TMessage> {
|
|
25
|
+
export declare class BasicPublisher<TMessage extends PublishableMessage<string, any>> implements EventPublisher<TMessage> {
|
|
28
26
|
private connection;
|
|
29
27
|
constructor(connection: BasicConnection);
|
|
30
28
|
publish(messages: TMessage[]): Promise<void>;
|
|
31
29
|
}
|
|
32
|
-
//# sourceMappingURL=BasicPublisher.d.ts.map
|
|
33
30
|
//#endregion
|
|
34
31
|
//#region src/basic/BasicSubscriber.d.ts
|
|
35
|
-
declare class BasicSubscriber<TMessage extends PublishableMessage<string, any>> implements EventSubscriber<TMessage> {
|
|
32
|
+
export declare class BasicSubscriber<TMessage extends PublishableMessage<string, any>> implements EventSubscriber<TMessage> {
|
|
36
33
|
private connection;
|
|
37
34
|
constructor(connection: BasicConnection);
|
|
38
35
|
subscribe(messages: TMessage['type'][], listener: (payload: TMessage) => Promise<void>): Promise<void>;
|
|
39
36
|
}
|
|
40
|
-
//# sourceMappingURL=BasicSubscriber.d.ts.map
|
|
41
|
-
|
|
42
37
|
//#endregion
|
|
43
|
-
|
|
38
|
+
//#region src/basic/driver.d.ts
|
|
39
|
+
/**
|
|
40
|
+
* `basic://` — an in-process `EventEmitter`. Register it with
|
|
41
|
+
* `registerEventsDriver(basicEventsDriver)`.
|
|
42
|
+
*/
|
|
43
|
+
export declare const basicEventsDriver: EventsDriver;
|
|
44
|
+
//#endregion
|
|
44
45
|
//# sourceMappingURL=index.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/basic/BasicConnection.ts","../../src/basic/BasicPublisher.ts","../../src/basic/BasicSubscriber.ts"
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/basic/BasicConnection.ts","../../src/basic/BasicPublisher.ts","../../src/basic/BasicSubscriber.ts","../../src/basic/driver.ts"],"mappings":";;;qBAIa,2BAA2B;WAC9B,OAAI,mBAAA;UACL;UACA;EAER;;;;;SAQa,qBACZ,4BACE,QAAQ;EAOL,WAAW;EAIX,SAAS;EAKf;;;;;MAQI,gBAAgB;;;;qBCvCR,eAAe,iBAAiB,4CACjC,eAAe;UAEN;EAApB,YAAoB,YAAY;EAE1B,QAAQ,UAAU,aAAU;;;;qBCLtB,gBAAgB,iBAAiB,4CAClC,gBAAgB;UAEP;EAApB,YAAoB,YAAY;EAE1B,UACL,UAAU,oBACV,WAAW,SAAS,aAAa,gBAC/B;;;;;;;;qBCFS,mBAAmB"}
|
package/dist/basic/index.d.mts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { d as EventPublisher, f as EventPublisherType, g as PublishableMessage, p as EventSubscriber, t as EventsDriver, u as EventConnection } from "../registry-DIx25Q5s.mjs";
|
|
2
2
|
import { EventEmitter } from "node:events";
|
|
3
|
-
|
|
4
3
|
//#region src/basic/BasicConnection.d.ts
|
|
5
|
-
declare class BasicConnection implements EventConnection {
|
|
4
|
+
export declare class BasicConnection implements EventConnection {
|
|
6
5
|
readonly type = EventPublisherType.Basic;
|
|
7
6
|
private emitter;
|
|
8
7
|
private connected;
|
|
@@ -21,24 +20,26 @@ declare class BasicConnection implements EventConnection {
|
|
|
21
20
|
*/
|
|
22
21
|
get eventEmitter(): EventEmitter;
|
|
23
22
|
}
|
|
24
|
-
//# sourceMappingURL=BasicConnection.d.ts.map
|
|
25
23
|
//#endregion
|
|
26
24
|
//#region src/basic/BasicPublisher.d.ts
|
|
27
|
-
declare class BasicPublisher<TMessage extends PublishableMessage<string, any>> implements EventPublisher<TMessage> {
|
|
25
|
+
export declare class BasicPublisher<TMessage extends PublishableMessage<string, any>> implements EventPublisher<TMessage> {
|
|
28
26
|
private connection;
|
|
29
27
|
constructor(connection: BasicConnection);
|
|
30
28
|
publish(messages: TMessage[]): Promise<void>;
|
|
31
29
|
}
|
|
32
|
-
//# sourceMappingURL=BasicPublisher.d.ts.map
|
|
33
30
|
//#endregion
|
|
34
31
|
//#region src/basic/BasicSubscriber.d.ts
|
|
35
|
-
declare class BasicSubscriber<TMessage extends PublishableMessage<string, any>> implements EventSubscriber<TMessage> {
|
|
32
|
+
export declare class BasicSubscriber<TMessage extends PublishableMessage<string, any>> implements EventSubscriber<TMessage> {
|
|
36
33
|
private connection;
|
|
37
34
|
constructor(connection: BasicConnection);
|
|
38
35
|
subscribe(messages: TMessage['type'][], listener: (payload: TMessage) => Promise<void>): Promise<void>;
|
|
39
36
|
}
|
|
40
|
-
//# sourceMappingURL=BasicSubscriber.d.ts.map
|
|
41
|
-
|
|
42
37
|
//#endregion
|
|
43
|
-
|
|
38
|
+
//#region src/basic/driver.d.ts
|
|
39
|
+
/**
|
|
40
|
+
* `basic://` — an in-process `EventEmitter`. Register it with
|
|
41
|
+
* `registerEventsDriver(basicEventsDriver)`.
|
|
42
|
+
*/
|
|
43
|
+
export declare const basicEventsDriver: EventsDriver;
|
|
44
|
+
//#endregion
|
|
44
45
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/basic/BasicConnection.ts","../../src/basic/BasicPublisher.ts","../../src/basic/BasicSubscriber.ts"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/basic/BasicConnection.ts","../../src/basic/BasicPublisher.ts","../../src/basic/BasicSubscriber.ts","../../src/basic/driver.ts"],"mappings":";;;qBAIa,2BAA2B;WAC9B,OAAI,mBAAA;UACL;UACA;EAER;;;;;SAQa,qBACZ,4BACE,QAAQ;EAOL,WAAW;EAIX,SAAS;EAKf;;;;;MAQI,gBAAgB;;;;qBCvCR,eAAe,iBAAiB,4CACjC,eAAe;UAEN;EAApB,YAAoB,YAAY;EAE1B,QAAQ,UAAU,aAAU;;;;qBCLtB,gBAAgB,iBAAiB,4CAClC,gBAAgB;UAEP;EAApB,YAAoB,YAAY;EAE1B,UACL,UAAU,oBACV,WAAW,SAAS,aAAa,gBAC/B;;;;;;;;qBCFS,mBAAmB"}
|
package/dist/basic/index.mjs
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a as consumeTraced, s as publishTraced } from "../telemetry-DjjgJMul.mjs";
|
|
2
2
|
import { EventEmitter } from "node:events";
|
|
3
|
-
|
|
4
3
|
//#region src/basic/BasicConnection.ts
|
|
5
4
|
var BasicConnection = class BasicConnection {
|
|
6
|
-
type =
|
|
5
|
+
type = "basic";
|
|
7
6
|
emitter;
|
|
8
7
|
connected = false;
|
|
9
8
|
constructor() {
|
|
@@ -36,33 +35,63 @@ var BasicConnection = class BasicConnection {
|
|
|
36
35
|
return this.emitter;
|
|
37
36
|
}
|
|
38
37
|
};
|
|
39
|
-
|
|
40
38
|
//#endregion
|
|
41
39
|
//#region src/basic/BasicPublisher.ts
|
|
42
40
|
var BasicPublisher = class {
|
|
41
|
+
connection;
|
|
43
42
|
constructor(connection) {
|
|
44
43
|
this.connection = connection;
|
|
45
44
|
}
|
|
46
45
|
async publish(messages) {
|
|
47
46
|
const emitter = this.connection.eventEmitter;
|
|
48
|
-
|
|
47
|
+
await publishTraced(messages, (message) => ({
|
|
48
|
+
system: "basic",
|
|
49
|
+
destination: message.type,
|
|
50
|
+
type: message.type
|
|
51
|
+
}), async (carriers) => {
|
|
52
|
+
messages.forEach((message, i) => {
|
|
53
|
+
emitter.emit(message.type, message, carriers[i]);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
49
56
|
}
|
|
50
57
|
};
|
|
51
|
-
|
|
52
58
|
//#endregion
|
|
53
59
|
//#region src/basic/BasicSubscriber.ts
|
|
54
60
|
var BasicSubscriber = class {
|
|
61
|
+
connection;
|
|
55
62
|
constructor(connection) {
|
|
56
63
|
this.connection = connection;
|
|
57
64
|
}
|
|
58
65
|
async subscribe(messages, listener) {
|
|
59
66
|
const emitter = this.connection.eventEmitter;
|
|
60
|
-
for (const messageType of messages) emitter.on(messageType, (message) => {
|
|
61
|
-
|
|
67
|
+
for (const messageType of messages) emitter.on(messageType, (message, carrier) => {
|
|
68
|
+
consumeTraced({
|
|
69
|
+
system: "basic",
|
|
70
|
+
destination: messageType,
|
|
71
|
+
type: messageType
|
|
72
|
+
}, carrier, () => listener(message)).catch((_error) => {});
|
|
62
73
|
});
|
|
63
74
|
}
|
|
64
75
|
};
|
|
65
|
-
|
|
66
76
|
//#endregion
|
|
67
|
-
|
|
77
|
+
//#region src/basic/driver.ts
|
|
78
|
+
/**
|
|
79
|
+
* `basic://` — an in-process `EventEmitter`. Register it with
|
|
80
|
+
* `registerEventsDriver(basicEventsDriver)`.
|
|
81
|
+
*/
|
|
82
|
+
const basicEventsDriver = {
|
|
83
|
+
scheme: "basic",
|
|
84
|
+
connect: (url) => BasicConnection.fromConnectionString(url),
|
|
85
|
+
async publisher(url) {
|
|
86
|
+
return new BasicPublisher(await BasicConnection.fromConnectionString(url));
|
|
87
|
+
},
|
|
88
|
+
publisherFor: (connection) => new BasicPublisher(connection),
|
|
89
|
+
async subscriber(url) {
|
|
90
|
+
return new BasicSubscriber(await BasicConnection.fromConnectionString(url));
|
|
91
|
+
},
|
|
92
|
+
subscriberFor: (connection) => new BasicSubscriber(connection)
|
|
93
|
+
};
|
|
94
|
+
//#endregion
|
|
95
|
+
export { BasicConnection, BasicPublisher, BasicSubscriber, basicEventsDriver };
|
|
96
|
+
|
|
68
97
|
//# sourceMappingURL=index.mjs.map
|
package/dist/basic/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/basic/BasicConnection.ts","../../src/basic/BasicPublisher.ts","../../src/basic/BasicSubscriber.ts","../../src/basic/driver.ts"],"sourcesContent":["import { EventEmitter } from 'node:events';\nimport type { EventConnection } from '../types';\nimport { EventPublisherType } from '../types';\n\nexport class BasicConnection implements EventConnection {\n\treadonly type = EventPublisherType.Basic;\n\tprivate emitter: EventEmitter;\n\tprivate connected = false;\n\n\tconstructor() {\n\t\tthis.emitter = new EventEmitter();\n\t}\n\n\t/**\n\t * Create a BasicConnection from a connection string\n\t * Format: basic://\n\t */\n\tstatic async fromConnectionString(\n\t\t_connectionString: string,\n\t): Promise<BasicConnection> {\n\t\t// Basic connection doesn't need any configuration\n\t\tconst connection = new BasicConnection();\n\t\tawait connection.connect();\n\t\treturn connection;\n\t}\n\n\tasync connect(): Promise<void> {\n\t\tthis.connected = true;\n\t}\n\n\tasync close(): Promise<void> {\n\t\tthis.emitter.removeAllListeners();\n\t\tthis.connected = false;\n\t}\n\n\tisConnected(): boolean {\n\t\treturn this.connected;\n\t}\n\n\t/**\n\t * Get the underlying EventEmitter\n\t * Used by BasicPublisher and BasicSubscriber\n\t */\n\tget eventEmitter(): EventEmitter {\n\t\treturn this.emitter;\n\t}\n}\n","import { publishTraced } from '../telemetry';\nimport type { EventPublisher, PublishableMessage } from '../types';\nimport type { BasicConnection } from './BasicConnection';\n\nexport class BasicPublisher<TMessage extends PublishableMessage<string, any>>\n\timplements EventPublisher<TMessage>\n{\n\tconstructor(private connection: BasicConnection) {}\n\n\tasync publish(messages: TMessage[]) {\n\t\tconst emitter = this.connection.eventEmitter;\n\t\t// The trace context rides beside the message, as the emitter's second\n\t\t// argument, so the message a listener receives is the one published.\n\t\tawait publishTraced(\n\t\t\tmessages,\n\t\t\t(message) => ({\n\t\t\t\tsystem: 'basic',\n\t\t\t\tdestination: message.type,\n\t\t\t\ttype: message.type,\n\t\t\t}),\n\t\t\tasync (carriers) => {\n\t\t\t\tmessages.forEach((message, i) => {\n\t\t\t\t\temitter.emit(message.type, message, carriers[i]);\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\t}\n}\n","import { consumeTraced, type TraceCarrier } from '../telemetry';\nimport type { EventSubscriber, PublishableMessage } from '../types';\nimport type { BasicConnection } from './BasicConnection';\n\nexport class BasicSubscriber<TMessage extends PublishableMessage<string, any>>\n\timplements EventSubscriber<TMessage>\n{\n\tconstructor(private connection: BasicConnection) {}\n\n\tasync subscribe(\n\t\tmessages: TMessage['type'][],\n\t\tlistener: (payload: TMessage) => Promise<void>,\n\t): Promise<void> {\n\t\tconst emitter = this.connection.eventEmitter;\n\n\t\tfor (const messageType of messages) {\n\t\t\temitter.on(messageType, (message: TMessage, carrier?: TraceCarrier) => {\n\t\t\t\tconsumeTraced(\n\t\t\t\t\t{ system: 'basic', destination: messageType, type: messageType },\n\t\t\t\t\tcarrier,\n\t\t\t\t\t() => listener(message),\n\t\t\t\t).catch((_error) => {});\n\t\t\t});\n\t\t}\n\t}\n}\n","import type { EventsDriver } from '../registry';\nimport { EventPublisherType } from '../types';\nimport { BasicConnection } from './BasicConnection';\nimport { BasicPublisher } from './BasicPublisher';\nimport { BasicSubscriber } from './BasicSubscriber';\n\n/**\n * `basic://` — an in-process `EventEmitter`. Register it with\n * `registerEventsDriver(basicEventsDriver)`.\n */\nexport const basicEventsDriver: EventsDriver = {\n\tscheme: EventPublisherType.Basic,\n\tconnect: (url) => BasicConnection.fromConnectionString(url),\n\tasync publisher(url) {\n\t\treturn new BasicPublisher(await BasicConnection.fromConnectionString(url));\n\t},\n\tpublisherFor: (connection) =>\n\t\tnew BasicPublisher(connection as BasicConnection),\n\tasync subscriber(url) {\n\t\treturn new BasicSubscriber(await BasicConnection.fromConnectionString(url));\n\t},\n\tsubscriberFor: (connection) =>\n\t\tnew BasicSubscriber(connection as BasicConnection),\n};\n"],"mappings":";;;AAIA,IAAa,kBAAb,MAAa,gBAA2C;CACvD,OAAS;CACT;CACA,YAAoB;CAEpB,cAAc;EACb,KAAK,UAAU,IAAI,aAAa;CACjC;;;;;CAMA,aAAa,qBACZ,mBAC2B;EAE3B,MAAM,aAAa,IAAI,gBAAgB;EACvC,MAAM,WAAW,QAAQ;EACzB,OAAO;CACR;CAEA,MAAM,UAAyB;EAC9B,KAAK,YAAY;CAClB;CAEA,MAAM,QAAuB;EAC5B,KAAK,QAAQ,mBAAmB;EAChC,KAAK,YAAY;CAClB;CAEA,cAAuB;EACtB,OAAO,KAAK;CACb;;;;;CAMA,IAAI,eAA6B;EAChC,OAAO,KAAK;CACb;AACD;;;AC1CA,IAAa,iBAAb,MAEA;CACqB;CAApB,YAAY,YAAqC;EAA7B,KAAA,aAAA;CAA8B;CAElD,MAAM,QAAQ,UAAsB;EACnC,MAAM,UAAU,KAAK,WAAW;EAGhC,MAAM,cACL,WACC,aAAa;GACb,QAAQ;GACR,aAAa,QAAQ;GACrB,MAAM,QAAQ;EACf,IACA,OAAO,aAAa;GACnB,SAAS,SAAS,SAAS,MAAM;IAChC,QAAQ,KAAK,QAAQ,MAAM,SAAS,SAAS,EAAE;GAChD,CAAC;EACF,CACD;CACD;AACD;;;ACvBA,IAAa,kBAAb,MAEA;CACqB;CAApB,YAAY,YAAqC;EAA7B,KAAA,aAAA;CAA8B;CAElD,MAAM,UACL,UACA,UACgB;EAChB,MAAM,UAAU,KAAK,WAAW;EAEhC,KAAK,MAAM,eAAe,UACzB,QAAQ,GAAG,cAAc,SAAmB,YAA2B;GACtE,cACC;IAAE,QAAQ;IAAS,aAAa;IAAa,MAAM;GAAY,GAC/D,eACM,SAAS,OAAO,CACvB,CAAC,CAAC,OAAO,WAAW,CAAC,CAAC;EACvB,CAAC;CAEH;AACD;;;;;;;ACfA,MAAa,oBAAkC;CAC9C,QAAA;CACA,UAAU,QAAQ,gBAAgB,qBAAqB,GAAG;CAC1D,MAAM,UAAU,KAAK;EACpB,OAAO,IAAI,eAAe,MAAM,gBAAgB,qBAAqB,GAAG,CAAC;CAC1E;CACA,eAAe,eACd,IAAI,eAAe,UAA6B;CACjD,MAAM,WAAW,KAAK;EACrB,OAAO,IAAI,gBAAgB,MAAM,gBAAgB,qBAAqB,GAAG,CAAC;CAC3E;CACA,gBAAgB,eACf,IAAI,gBAAgB,UAA6B;AACnD"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,192 +1,88 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
const require_telemetry = require("./telemetry-DG3l807O.cjs");
|
|
3
|
+
const require_registry = require("./registry-DlT36229.cjs");
|
|
3
4
|
//#region src/EventConnection.ts
|
|
4
5
|
var EventConnectionFactory = class {
|
|
5
6
|
/**
|
|
6
|
-
* Create an EventConnection from a connection string
|
|
7
|
-
*
|
|
7
|
+
* Create an EventConnection from a connection string, through whichever
|
|
8
|
+
* driver is registered for its scheme — see `registerEventsDriver`.
|
|
9
|
+
*
|
|
10
|
+
* @throws {UnregisteredEventsScheme} when the broker's driver is not
|
|
11
|
+
* registered.
|
|
8
12
|
*/
|
|
9
13
|
static async fromConnectionString(connectionStr) {
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
switch (protocol) {
|
|
13
|
-
case require_types.EventPublisherType.Basic: {
|
|
14
|
-
const { BasicConnection } = await Promise.resolve().then(() => require("./basic/index.cjs"));
|
|
15
|
-
return BasicConnection.fromConnectionString(connectionStr);
|
|
16
|
-
}
|
|
17
|
-
case require_types.EventPublisherType.RabbitMQ: {
|
|
18
|
-
const { RabbitMQConnection } = await Promise.resolve().then(() => require("./rabbitmq/index.cjs"));
|
|
19
|
-
return RabbitMQConnection.fromConnectionString(connectionStr);
|
|
20
|
-
}
|
|
21
|
-
case require_types.EventPublisherType.SQS: {
|
|
22
|
-
const { SQSConnection } = await Promise.resolve().then(() => require("./sqs/index.cjs"));
|
|
23
|
-
return SQSConnection.fromConnectionString(connectionStr);
|
|
24
|
-
}
|
|
25
|
-
case require_types.EventPublisherType.SNS: {
|
|
26
|
-
const { SNSConnection } = await Promise.resolve().then(() => require("./sns/index.cjs"));
|
|
27
|
-
return SNSConnection.fromConnectionString(connectionStr);
|
|
28
|
-
}
|
|
29
|
-
case require_types.EventPublisherType.PgBoss: {
|
|
30
|
-
const { PgBossConnection } = await Promise.resolve().then(() => require("./pgboss/index.cjs"));
|
|
31
|
-
return PgBossConnection.fromConnectionString(connectionStr);
|
|
32
|
-
}
|
|
33
|
-
default: throw new Error(`Unsupported connection type: ${protocol}`);
|
|
34
|
-
}
|
|
14
|
+
const scheme = new URL(connectionStr).protocol;
|
|
15
|
+
return require_registry.eventsDriverFor(scheme, "connection").connect(connectionStr);
|
|
35
16
|
}
|
|
36
17
|
};
|
|
37
|
-
|
|
38
18
|
//#endregion
|
|
39
19
|
//#region src/Publisher.ts
|
|
20
|
+
/**
|
|
21
|
+
* Publishers for a connection string or a connection, through whichever
|
|
22
|
+
* driver is registered for its scheme — see `registerEventsDriver`.
|
|
23
|
+
*/
|
|
40
24
|
var Publisher = class {
|
|
41
25
|
/**
|
|
42
26
|
* Create a publisher from a connection string
|
|
43
27
|
* This creates both a connection and a publisher
|
|
28
|
+
*
|
|
29
|
+
* @throws {UnregisteredEventsScheme} when the broker's driver is not
|
|
30
|
+
* registered.
|
|
44
31
|
*/
|
|
45
|
-
static async fromConnectionString(connectionStr) {
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
case require_types.EventPublisherType.Basic: {
|
|
49
|
-
const { BasicConnection, BasicPublisher } = await Promise.resolve().then(() => require("./basic/index.cjs"));
|
|
50
|
-
const connection = await BasicConnection.fromConnectionString(connectionStr);
|
|
51
|
-
return new BasicPublisher(connection);
|
|
52
|
-
}
|
|
53
|
-
case require_types.EventPublisherType.RabbitMQ: {
|
|
54
|
-
const { RabbitMQPublisher } = await Promise.resolve().then(() => require("./rabbitmq/index.cjs"));
|
|
55
|
-
return RabbitMQPublisher.fromConnectionString(connectionStr);
|
|
56
|
-
}
|
|
57
|
-
case require_types.EventPublisherType.SQS: {
|
|
58
|
-
const { SQSPublisher } = await Promise.resolve().then(() => require("./sqs/index.cjs"));
|
|
59
|
-
return SQSPublisher.fromConnectionString(connectionStr);
|
|
60
|
-
}
|
|
61
|
-
case require_types.EventPublisherType.SNS: {
|
|
62
|
-
const { SNSPublisher } = await Promise.resolve().then(() => require("./sns/index.cjs"));
|
|
63
|
-
return SNSPublisher.fromConnectionString(connectionStr);
|
|
64
|
-
}
|
|
65
|
-
case require_types.EventPublisherType.PgBoss: {
|
|
66
|
-
const { PgBossPublisher } = await Promise.resolve().then(() => require("./pgboss/index.cjs"));
|
|
67
|
-
return PgBossPublisher.fromConnectionString(connectionStr);
|
|
68
|
-
}
|
|
69
|
-
default: throw new Error(`Unsupported event publisher type: ${url.protocol}`);
|
|
70
|
-
}
|
|
32
|
+
static async fromConnectionString(connectionStr, options = {}) {
|
|
33
|
+
const scheme = new URL(connectionStr).protocol;
|
|
34
|
+
return require_registry.eventsDriverFor(scheme, "publisher").publisher(connectionStr, options);
|
|
71
35
|
}
|
|
72
36
|
/**
|
|
73
37
|
* Create a publisher from an existing connection
|
|
74
38
|
* This allows sharing connections between publishers and subscribers
|
|
75
39
|
*/
|
|
76
|
-
static async fromConnection(connection) {
|
|
77
|
-
|
|
78
|
-
case require_types.EventPublisherType.Basic: {
|
|
79
|
-
const { BasicPublisher } = await Promise.resolve().then(() => require("./basic/index.cjs"));
|
|
80
|
-
const { BasicConnection } = await Promise.resolve().then(() => require("./basic/index.cjs"));
|
|
81
|
-
return new BasicPublisher(connection);
|
|
82
|
-
}
|
|
83
|
-
case require_types.EventPublisherType.RabbitMQ: {
|
|
84
|
-
const { RabbitMQPublisher } = await Promise.resolve().then(() => require("./rabbitmq/index.cjs"));
|
|
85
|
-
const { RabbitMQConnection } = await Promise.resolve().then(() => require("./rabbitmq/index.cjs"));
|
|
86
|
-
return new RabbitMQPublisher(connection);
|
|
87
|
-
}
|
|
88
|
-
case require_types.EventPublisherType.SQS: {
|
|
89
|
-
const { SQSPublisher } = await Promise.resolve().then(() => require("./sqs/index.cjs"));
|
|
90
|
-
const { SQSConnection } = await Promise.resolve().then(() => require("./sqs/index.cjs"));
|
|
91
|
-
return new SQSPublisher(connection);
|
|
92
|
-
}
|
|
93
|
-
case require_types.EventPublisherType.SNS: {
|
|
94
|
-
const { SNSPublisher } = await Promise.resolve().then(() => require("./sns/index.cjs"));
|
|
95
|
-
const { SNSConnection } = await Promise.resolve().then(() => require("./sns/index.cjs"));
|
|
96
|
-
return new SNSPublisher(connection);
|
|
97
|
-
}
|
|
98
|
-
case require_types.EventPublisherType.PgBoss: {
|
|
99
|
-
const { PgBossPublisher } = await Promise.resolve().then(() => require("./pgboss/index.cjs"));
|
|
100
|
-
const { PgBossConnection } = await Promise.resolve().then(() => require("./pgboss/index.cjs"));
|
|
101
|
-
return new PgBossPublisher(connection);
|
|
102
|
-
}
|
|
103
|
-
default: throw new Error(`Unsupported connection type: ${connection.type}`);
|
|
104
|
-
}
|
|
40
|
+
static async fromConnection(connection, options = {}) {
|
|
41
|
+
return require_registry.eventsDriverFor(connection.type, "publisher").publisherFor(connection, options);
|
|
105
42
|
}
|
|
106
43
|
};
|
|
107
|
-
|
|
108
44
|
//#endregion
|
|
109
45
|
//#region src/Subscriber.ts
|
|
46
|
+
/**
|
|
47
|
+
* Subscribers for a connection string or a connection, through whichever
|
|
48
|
+
* driver is registered for its scheme — see `registerEventsDriver`.
|
|
49
|
+
*/
|
|
110
50
|
var Subscriber = class {
|
|
111
51
|
/**
|
|
112
52
|
* Create a subscriber from a connection string
|
|
113
53
|
* This creates both a connection and a subscriber
|
|
54
|
+
*
|
|
55
|
+
* @throws {UnregisteredEventsScheme} when the broker's driver is not
|
|
56
|
+
* registered.
|
|
114
57
|
*/
|
|
115
58
|
static async fromConnectionString(connectionStr) {
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
case require_types.EventPublisherType.Basic: {
|
|
119
|
-
const { BasicConnection, BasicSubscriber } = await Promise.resolve().then(() => require("./basic/index.cjs"));
|
|
120
|
-
const connection = await BasicConnection.fromConnectionString(connectionStr);
|
|
121
|
-
return new BasicSubscriber(connection);
|
|
122
|
-
}
|
|
123
|
-
case require_types.EventPublisherType.RabbitMQ: {
|
|
124
|
-
const { RabbitMQSubscriber } = await Promise.resolve().then(() => require("./rabbitmq/index.cjs"));
|
|
125
|
-
return RabbitMQSubscriber.fromConnectionString(connectionStr);
|
|
126
|
-
}
|
|
127
|
-
case require_types.EventPublisherType.SNS: {
|
|
128
|
-
const { SNSSubscriber } = await Promise.resolve().then(() => require("./sns/index.cjs"));
|
|
129
|
-
return SNSSubscriber.fromConnectionString(connectionStr);
|
|
130
|
-
}
|
|
131
|
-
case require_types.EventPublisherType.SQS: {
|
|
132
|
-
const url$1 = new URL(connectionStr);
|
|
133
|
-
const topicArn = url$1.searchParams.get("topicArn");
|
|
134
|
-
if (topicArn) {
|
|
135
|
-
const { SNSSubscriber } = await Promise.resolve().then(() => require("./sns/index.cjs"));
|
|
136
|
-
const snsConnectionStr = connectionStr.replace("sqs://", "sns://");
|
|
137
|
-
return SNSSubscriber.fromConnectionString(snsConnectionStr);
|
|
138
|
-
}
|
|
139
|
-
const { SQSSubscriber } = await Promise.resolve().then(() => require("./sqs/index.cjs"));
|
|
140
|
-
const { SQSConnection } = await Promise.resolve().then(() => require("./sqs/index.cjs"));
|
|
141
|
-
const connection = await SQSConnection.fromConnectionString(connectionStr);
|
|
142
|
-
return new SQSSubscriber(connection);
|
|
143
|
-
}
|
|
144
|
-
case require_types.EventPublisherType.PgBoss: {
|
|
145
|
-
const { PgBossSubscriber } = await Promise.resolve().then(() => require("./pgboss/index.cjs"));
|
|
146
|
-
return PgBossSubscriber.fromConnectionString(connectionStr);
|
|
147
|
-
}
|
|
148
|
-
default: throw new Error(`Unsupported event subscriber type: ${url.protocol}`);
|
|
149
|
-
}
|
|
59
|
+
const scheme = new URL(connectionStr).protocol;
|
|
60
|
+
return require_registry.eventsDriverFor(scheme, "subscriber").subscriber(connectionStr);
|
|
150
61
|
}
|
|
151
62
|
/**
|
|
152
63
|
* Create a subscriber from an existing connection
|
|
153
64
|
* This allows sharing connections between publishers and subscribers
|
|
154
65
|
*/
|
|
155
|
-
static async fromConnection(connection) {
|
|
156
|
-
|
|
157
|
-
case require_types.EventPublisherType.Basic: {
|
|
158
|
-
const { BasicSubscriber } = await Promise.resolve().then(() => require("./basic/index.cjs"));
|
|
159
|
-
const { BasicConnection } = await Promise.resolve().then(() => require("./basic/index.cjs"));
|
|
160
|
-
return new BasicSubscriber(connection);
|
|
161
|
-
}
|
|
162
|
-
case require_types.EventPublisherType.RabbitMQ: {
|
|
163
|
-
const { RabbitMQSubscriber } = await Promise.resolve().then(() => require("./rabbitmq/index.cjs"));
|
|
164
|
-
const { RabbitMQConnection } = await Promise.resolve().then(() => require("./rabbitmq/index.cjs"));
|
|
165
|
-
return new RabbitMQSubscriber(connection);
|
|
166
|
-
}
|
|
167
|
-
case require_types.EventPublisherType.SNS: {
|
|
168
|
-
const { SNSSubscriber } = await Promise.resolve().then(() => require("./sns/index.cjs"));
|
|
169
|
-
const { SNSConnection } = await Promise.resolve().then(() => require("./sns/index.cjs"));
|
|
170
|
-
return new SNSSubscriber(connection);
|
|
171
|
-
}
|
|
172
|
-
case require_types.EventPublisherType.SQS: {
|
|
173
|
-
const { SQSSubscriber } = await Promise.resolve().then(() => require("./sqs/index.cjs"));
|
|
174
|
-
const { SQSConnection } = await Promise.resolve().then(() => require("./sqs/index.cjs"));
|
|
175
|
-
return new SQSSubscriber(connection);
|
|
176
|
-
}
|
|
177
|
-
case require_types.EventPublisherType.PgBoss: {
|
|
178
|
-
const { PgBossSubscriber } = await Promise.resolve().then(() => require("./pgboss/index.cjs"));
|
|
179
|
-
const { PgBossConnection } = await Promise.resolve().then(() => require("./pgboss/index.cjs"));
|
|
180
|
-
return new PgBossSubscriber(connection);
|
|
181
|
-
}
|
|
182
|
-
default: throw new Error(`Unsupported connection type: ${connection.type}`);
|
|
183
|
-
}
|
|
66
|
+
static async fromConnection(connection, options = {}) {
|
|
67
|
+
return require_registry.eventsDriverFor(connection.type, "subscriber").subscriberFor(connection, options);
|
|
184
68
|
}
|
|
185
69
|
};
|
|
186
|
-
|
|
187
70
|
//#endregion
|
|
188
71
|
exports.EventConnectionFactory = EventConnectionFactory;
|
|
189
|
-
exports.EventPublisherType =
|
|
72
|
+
exports.EventPublisherType = require_telemetry.EventPublisherType;
|
|
190
73
|
exports.Publisher = Publisher;
|
|
191
74
|
exports.Subscriber = Subscriber;
|
|
75
|
+
exports.TRACE_CONTEXT_KEY = require_telemetry.TRACE_CONTEXT_KEY;
|
|
76
|
+
exports.UnregisteredEventsScheme = require_registry.UnregisteredEventsScheme;
|
|
77
|
+
exports.UnsupportedEventTransport = require_telemetry.UnsupportedEventTransport;
|
|
78
|
+
exports.carrierFromAttributes = require_telemetry.carrierFromAttributes;
|
|
79
|
+
exports.consumeBatchTraced = require_telemetry.consumeBatchTraced;
|
|
80
|
+
exports.consumeTraced = require_telemetry.consumeTraced;
|
|
81
|
+
exports.eventsDriverFor = require_registry.eventsDriverFor;
|
|
82
|
+
exports.extractTraceContext = require_telemetry.extractTraceContext;
|
|
83
|
+
exports.publishTraced = require_telemetry.publishTraced;
|
|
84
|
+
exports.registerEventsDriver = require_registry.registerEventsDriver;
|
|
85
|
+
exports.registeredEventsSchemes = require_registry.registeredEventsSchemes;
|
|
86
|
+
exports.withoutTraceKey = require_telemetry.withoutTraceKey;
|
|
87
|
+
|
|
192
88
|
//# sourceMappingURL=index.cjs.map
|