@warlock.js/herald 4.0.161 → 4.0.163

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/cjs/communicators/communicator-registry.d.ts +155 -0
  2. package/cjs/communicators/communicator-registry.d.ts.map +1 -0
  3. package/cjs/communicators/communicator-registry.js +206 -0
  4. package/cjs/communicators/communicator-registry.js.map +1 -0
  5. package/cjs/communicators/communicator.d.ts +100 -0
  6. package/cjs/communicators/communicator.d.ts.map +1 -0
  7. package/cjs/communicators/communicator.js +105 -0
  8. package/cjs/communicators/communicator.js.map +1 -0
  9. package/cjs/communicators/index.d.ts +3 -0
  10. package/cjs/communicators/index.d.ts.map +1 -0
  11. package/cjs/contracts/channel.contract.d.ts +186 -0
  12. package/cjs/contracts/channel.contract.d.ts.map +1 -0
  13. package/cjs/contracts/communicator-driver.contract.d.ts +196 -0
  14. package/cjs/contracts/communicator-driver.contract.d.ts.map +1 -0
  15. package/cjs/contracts/index.d.ts +3 -0
  16. package/cjs/contracts/index.d.ts.map +1 -0
  17. package/cjs/decorators/consumable.d.ts +13 -0
  18. package/cjs/decorators/consumable.d.ts.map +1 -0
  19. package/cjs/decorators/consumable.js +33 -0
  20. package/cjs/decorators/consumable.js.map +1 -0
  21. package/cjs/decorators/index.d.ts +2 -0
  22. package/cjs/decorators/index.d.ts.map +1 -0
  23. package/cjs/drivers/index.d.ts +2 -0
  24. package/cjs/drivers/index.d.ts.map +1 -0
  25. package/cjs/drivers/rabbitmq/index.d.ts +3 -0
  26. package/cjs/drivers/rabbitmq/index.d.ts.map +1 -0
  27. package/cjs/drivers/rabbitmq/rabbitmq-channel.d.ts +78 -0
  28. package/cjs/drivers/rabbitmq/rabbitmq-channel.d.ts.map +1 -0
  29. package/cjs/drivers/rabbitmq/rabbitmq-channel.js +412 -0
  30. package/cjs/drivers/rabbitmq/rabbitmq-channel.js.map +1 -0
  31. package/cjs/drivers/rabbitmq/rabbitmq-driver.d.ts +122 -0
  32. package/cjs/drivers/rabbitmq/rabbitmq-driver.d.ts.map +1 -0
  33. package/cjs/drivers/rabbitmq/rabbitmq-driver.js +346 -0
  34. package/cjs/drivers/rabbitmq/rabbitmq-driver.js.map +1 -0
  35. package/cjs/index.d.ts +47 -0
  36. package/cjs/index.d.ts.map +1 -0
  37. package/cjs/index.js +1 -0
  38. package/cjs/index.js.map +1 -0
  39. package/cjs/message-managers/event-consumer.d.ts +63 -0
  40. package/cjs/message-managers/event-consumer.d.ts.map +1 -0
  41. package/cjs/message-managers/event-consumer.js +65 -0
  42. package/cjs/message-managers/event-consumer.js.map +1 -0
  43. package/cjs/message-managers/event-message.d.ts +87 -0
  44. package/cjs/message-managers/event-message.d.ts.map +1 -0
  45. package/cjs/message-managers/event-message.js +84 -0
  46. package/cjs/message-managers/event-message.js.map +1 -0
  47. package/cjs/message-managers/index.d.ts +4 -0
  48. package/cjs/message-managers/index.d.ts.map +1 -0
  49. package/cjs/message-managers/prepare-consumer-subscription.d.ts +4 -0
  50. package/cjs/message-managers/prepare-consumer-subscription.d.ts.map +1 -0
  51. package/cjs/message-managers/prepare-consumer-subscription.js +39 -0
  52. package/cjs/message-managers/prepare-consumer-subscription.js.map +1 -0
  53. package/cjs/message-managers/types.d.ts +20 -0
  54. package/cjs/message-managers/types.d.ts.map +1 -0
  55. package/cjs/types.d.ts +399 -0
  56. package/cjs/types.d.ts.map +1 -0
  57. package/cjs/utils/connect-to-communicator.d.ts +129 -0
  58. package/cjs/utils/connect-to-communicator.d.ts.map +1 -0
  59. package/cjs/utils/connect-to-communicator.js +169 -0
  60. package/cjs/utils/connect-to-communicator.js.map +1 -0
  61. package/cjs/utils/index.d.ts +2 -0
  62. package/cjs/utils/index.d.ts.map +1 -0
  63. package/esm/communicators/communicator-registry.d.ts +155 -0
  64. package/esm/communicators/communicator-registry.d.ts.map +1 -0
  65. package/esm/communicators/communicator-registry.js +206 -0
  66. package/esm/communicators/communicator-registry.js.map +1 -0
  67. package/esm/communicators/communicator.d.ts +100 -0
  68. package/esm/communicators/communicator.d.ts.map +1 -0
  69. package/esm/communicators/communicator.js +105 -0
  70. package/esm/communicators/communicator.js.map +1 -0
  71. package/esm/communicators/index.d.ts +3 -0
  72. package/esm/communicators/index.d.ts.map +1 -0
  73. package/esm/contracts/channel.contract.d.ts +186 -0
  74. package/esm/contracts/channel.contract.d.ts.map +1 -0
  75. package/esm/contracts/communicator-driver.contract.d.ts +196 -0
  76. package/esm/contracts/communicator-driver.contract.d.ts.map +1 -0
  77. package/esm/contracts/index.d.ts +3 -0
  78. package/esm/contracts/index.d.ts.map +1 -0
  79. package/esm/decorators/consumable.d.ts +13 -0
  80. package/esm/decorators/consumable.d.ts.map +1 -0
  81. package/esm/decorators/consumable.js +33 -0
  82. package/esm/decorators/consumable.js.map +1 -0
  83. package/esm/decorators/index.d.ts +2 -0
  84. package/esm/decorators/index.d.ts.map +1 -0
  85. package/esm/drivers/index.d.ts +2 -0
  86. package/esm/drivers/index.d.ts.map +1 -0
  87. package/esm/drivers/rabbitmq/index.d.ts +3 -0
  88. package/esm/drivers/rabbitmq/index.d.ts.map +1 -0
  89. package/esm/drivers/rabbitmq/rabbitmq-channel.d.ts +78 -0
  90. package/esm/drivers/rabbitmq/rabbitmq-channel.d.ts.map +1 -0
  91. package/esm/drivers/rabbitmq/rabbitmq-channel.js +412 -0
  92. package/esm/drivers/rabbitmq/rabbitmq-channel.js.map +1 -0
  93. package/esm/drivers/rabbitmq/rabbitmq-driver.d.ts +122 -0
  94. package/esm/drivers/rabbitmq/rabbitmq-driver.d.ts.map +1 -0
  95. package/esm/drivers/rabbitmq/rabbitmq-driver.js +346 -0
  96. package/esm/drivers/rabbitmq/rabbitmq-driver.js.map +1 -0
  97. package/esm/index.d.ts +47 -0
  98. package/esm/index.d.ts.map +1 -0
  99. package/esm/index.js +1 -0
  100. package/esm/index.js.map +1 -0
  101. package/esm/message-managers/event-consumer.d.ts +63 -0
  102. package/esm/message-managers/event-consumer.d.ts.map +1 -0
  103. package/esm/message-managers/event-consumer.js +65 -0
  104. package/esm/message-managers/event-consumer.js.map +1 -0
  105. package/esm/message-managers/event-message.d.ts +87 -0
  106. package/esm/message-managers/event-message.d.ts.map +1 -0
  107. package/esm/message-managers/event-message.js +84 -0
  108. package/esm/message-managers/event-message.js.map +1 -0
  109. package/esm/message-managers/index.d.ts +4 -0
  110. package/esm/message-managers/index.d.ts.map +1 -0
  111. package/esm/message-managers/prepare-consumer-subscription.d.ts +4 -0
  112. package/esm/message-managers/prepare-consumer-subscription.d.ts.map +1 -0
  113. package/esm/message-managers/prepare-consumer-subscription.js +39 -0
  114. package/esm/message-managers/prepare-consumer-subscription.js.map +1 -0
  115. package/esm/message-managers/types.d.ts +20 -0
  116. package/esm/message-managers/types.d.ts.map +1 -0
  117. package/esm/types.d.ts +399 -0
  118. package/esm/types.d.ts.map +1 -0
  119. package/esm/utils/connect-to-communicator.d.ts +129 -0
  120. package/esm/utils/connect-to-communicator.d.ts.map +1 -0
  121. package/esm/utils/connect-to-communicator.js +169 -0
  122. package/esm/utils/connect-to-communicator.js.map +1 -0
  123. package/esm/utils/index.d.ts +2 -0
  124. package/esm/utils/index.d.ts.map +1 -0
  125. package/package.json +3 -3
@@ -0,0 +1,412 @@
1
+ 'use strict';var seal=require('@warlock.js/seal'),node_crypto=require('node:crypto');/**
2
+ * RabbitMQ Channel Implementation
3
+ *
4
+ * Wraps a RabbitMQ queue/exchange with a unified API.
5
+ *
6
+ * @template TPayload - The typed payload
7
+ */
8
+ class RabbitMQChannel {
9
+ name;
10
+ options;
11
+ amqpChannel;
12
+ subscriptions = new Map();
13
+ asserted = false;
14
+ /**
15
+ * Create a new RabbitMQ channel
16
+ */
17
+ constructor(name, amqpChannel, options) {
18
+ this.name = name;
19
+ this.amqpChannel = amqpChannel;
20
+ this.options = options ?? {};
21
+ }
22
+ /**
23
+ * Assert the queue exists
24
+ */
25
+ async assert() {
26
+ if (this.asserted)
27
+ return;
28
+ const queueOptions = {
29
+ durable: this.options.durable ?? true,
30
+ autoDelete: this.options.autoDelete ?? false,
31
+ exclusive: this.options.exclusive ?? false,
32
+ messageTtl: this.options.messageTtl,
33
+ maxLength: this.options.maxLength,
34
+ deadLetterExchange: this.options.deadLetter?.channel ? "" : undefined,
35
+ deadLetterRoutingKey: this.options.deadLetter?.channel,
36
+ };
37
+ await this.amqpChannel.assertQueue(this.name, queueOptions);
38
+ this.asserted = true;
39
+ }
40
+ /**
41
+ * Publish a message
42
+ */
43
+ async publish(payload, options) {
44
+ await this.assert();
45
+ // Validate with schema if provided
46
+ if (this.options.schema) {
47
+ const context = {
48
+ allValues: payload,
49
+ value: payload,
50
+ };
51
+ const result = await seal.v.validate(this.options.schema, payload, { context });
52
+ if (!result.isValid) {
53
+ throw new Error(`Message validation failed: ${JSON.stringify(result.errors)}`);
54
+ }
55
+ payload = result.data;
56
+ }
57
+ const messageId = node_crypto.randomUUID();
58
+ const timestamp = new Date();
59
+ const messageContent = JSON.stringify({
60
+ payload,
61
+ metadata: {
62
+ messageId,
63
+ timestamp: timestamp.toISOString(),
64
+ correlationId: options?.correlationId,
65
+ headers: options?.headers,
66
+ },
67
+ });
68
+ const publishOptions = {
69
+ persistent: options?.persistent ?? true,
70
+ messageId,
71
+ timestamp: timestamp.getTime(),
72
+ correlationId: options?.correlationId,
73
+ expiration: options?.expiration?.toString(),
74
+ priority: options?.priority,
75
+ headers: options?.headers,
76
+ };
77
+ // Handle delayed messages (requires rabbitmq-delayed-message-exchange plugin)
78
+ if (options?.delay) {
79
+ publishOptions.headers = {
80
+ ...publishOptions.headers,
81
+ "x-delay": options.delay,
82
+ };
83
+ }
84
+ this.amqpChannel.sendToQueue(this.name, Buffer.from(messageContent), publishOptions);
85
+ }
86
+ /**
87
+ * Publish multiple messages
88
+ */
89
+ async publishBatch(messages, options) {
90
+ for (const payload of messages) {
91
+ await this.publish(payload, options);
92
+ }
93
+ }
94
+ /**
95
+ * Subscribe to messages
96
+ *
97
+ * Smart auto-ack behavior (when autoAck is not true):
98
+ * - If handler completes successfully without explicit ack/nack/reject → auto-ack
99
+ * - If handler throws an error → auto-nack (with retry if configured)
100
+ * - If handler explicitly calls ack/nack/reject → respects that call
101
+ */
102
+ async subscribe(handler, options) {
103
+ await this.assert();
104
+ // Use consumerId from options if provided, otherwise generate a random one
105
+ const subscriptionId = options?.consumerId ?? node_crypto.randomUUID();
106
+ // Set prefetch if specified
107
+ if (options?.prefetch) {
108
+ await this.amqpChannel.prefetch(options.prefetch);
109
+ }
110
+ // If autoAck is true, RabbitMQ handles ack immediately (fire-and-forget)
111
+ const isFireAndForget = options?.autoAck === true;
112
+ const consumerOptions = {
113
+ noAck: isFireAndForget,
114
+ exclusive: options?.exclusive ?? false,
115
+ consumerTag: options?.group ?? subscriptionId,
116
+ };
117
+ const { consumerTag } = await this.amqpChannel.consume(this.name, async (msg) => {
118
+ if (!msg)
119
+ return;
120
+ // Track if acknowledgment was handled explicitly
121
+ let ackHandled = isFireAndForget;
122
+ try {
123
+ const content = JSON.parse(msg.content.toString());
124
+ let payload = content.payload;
125
+ // Validate with schema if provided
126
+ if (this.options.schema) {
127
+ const context = {
128
+ allValues: payload,
129
+ value: payload,
130
+ };
131
+ const result = await seal.v.validate(this.options.schema, payload, { context });
132
+ if (!result.isValid) {
133
+ // Reject invalid messages
134
+ this.amqpChannel.nack(msg, false, false);
135
+ return;
136
+ }
137
+ payload = result.data;
138
+ }
139
+ const metadata = {
140
+ messageId: msg.properties.messageId || content.metadata?.messageId || node_crypto.randomUUID(),
141
+ timestamp: new Date(msg.properties.timestamp || content.metadata?.timestamp),
142
+ correlationId: msg.properties.correlationId || content.metadata?.correlationId,
143
+ replyTo: msg.properties.replyTo,
144
+ priority: msg.properties.priority,
145
+ headers: msg.properties.headers,
146
+ retryCount: msg.properties.headers?.["x-retry-count"] || 0,
147
+ originalChannel: this.name,
148
+ };
149
+ const message = {
150
+ metadata,
151
+ payload,
152
+ raw: msg,
153
+ };
154
+ const context = {
155
+ ack: async () => {
156
+ if (!ackHandled) {
157
+ ackHandled = true;
158
+ this.amqpChannel.ack(msg);
159
+ }
160
+ },
161
+ nack: async (requeue = true) => {
162
+ if (!ackHandled) {
163
+ ackHandled = true;
164
+ this.amqpChannel.nack(msg, false, requeue);
165
+ }
166
+ },
167
+ reject: async () => {
168
+ if (!ackHandled) {
169
+ ackHandled = true;
170
+ this.amqpChannel.reject(msg, false);
171
+ }
172
+ },
173
+ reply: async (replyPayload) => {
174
+ if (msg.properties.replyTo) {
175
+ const replyContent = JSON.stringify({
176
+ payload: replyPayload,
177
+ metadata: {
178
+ messageId: node_crypto.randomUUID(),
179
+ timestamp: new Date().toISOString(),
180
+ correlationId: msg.properties.correlationId,
181
+ },
182
+ });
183
+ this.amqpChannel.sendToQueue(msg.properties.replyTo, Buffer.from(replyContent), {
184
+ correlationId: msg.properties.correlationId,
185
+ });
186
+ }
187
+ },
188
+ retry: async (delay) => {
189
+ if (ackHandled)
190
+ return;
191
+ ackHandled = true;
192
+ const retryCount = (metadata.retryCount || 0) + 1;
193
+ const maxRetries = options?.retry?.maxRetries ?? 3;
194
+ if (retryCount > maxRetries) {
195
+ // Send to dead-letter if configured
196
+ if (options?.deadLetter) {
197
+ await this.sendToDeadLetter(message, options.deadLetter.channel);
198
+ }
199
+ this.amqpChannel.ack(msg);
200
+ return;
201
+ }
202
+ // Republish with retry count
203
+ const headers = {
204
+ ...msg.properties.headers,
205
+ "x-retry-count": retryCount,
206
+ };
207
+ if (delay) {
208
+ headers["x-delay"] = delay;
209
+ }
210
+ this.amqpChannel.sendToQueue(this.name, msg.content, { ...msg.properties, headers });
211
+ this.amqpChannel.ack(msg);
212
+ },
213
+ };
214
+ // Execute handler
215
+ await handler(message, context);
216
+ // Smart auto-ack: if handler succeeded and didn't explicitly handle ack
217
+ if (!ackHandled) {
218
+ this.amqpChannel.ack(msg);
219
+ }
220
+ }
221
+ catch (error) {
222
+ // Smart auto-nack: if handler threw and didn't explicitly handle ack
223
+ if (ackHandled)
224
+ return;
225
+ // Handle errors - nack and potentially retry
226
+ if (options?.retry) {
227
+ const retryCount = msg.properties.headers?.["x-retry-count"] || 0;
228
+ if (retryCount < options.retry.maxRetries) {
229
+ // Requeue for retry
230
+ this.amqpChannel.nack(msg, false, true);
231
+ }
232
+ else if (options.deadLetter) {
233
+ // Send to dead-letter
234
+ this.amqpChannel.nack(msg, false, false);
235
+ }
236
+ else {
237
+ this.amqpChannel.reject(msg, false);
238
+ }
239
+ }
240
+ else {
241
+ // No retry configured - reject without requeue
242
+ this.amqpChannel.nack(msg, false, false);
243
+ }
244
+ }
245
+ }, consumerOptions);
246
+ const subscription = new RabbitMQSubscription(subscriptionId, this.name, consumerTag, this.amqpChannel);
247
+ this.subscriptions.set(subscriptionId, subscription);
248
+ return subscription;
249
+ }
250
+ /**
251
+ * Unsubscribe by consumer ID
252
+ */
253
+ async unsubscribeById(consumerId) {
254
+ const subscription = this.subscriptions.get(consumerId);
255
+ if (subscription) {
256
+ await subscription.unsubscribe();
257
+ this.subscriptions.delete(consumerId);
258
+ }
259
+ }
260
+ /**
261
+ * Stop consuming subscriptions
262
+ */
263
+ async stopConsuming() {
264
+ this.amqpChannel.pauseAllSubscriptions();
265
+ }
266
+ /**
267
+ * Send message to dead-letter queue
268
+ */
269
+ async sendToDeadLetter(message, deadLetterChannel) {
270
+ const content = JSON.stringify({
271
+ payload: message.payload,
272
+ metadata: {
273
+ ...message.metadata,
274
+ originalChannel: this.name,
275
+ },
276
+ });
277
+ this.amqpChannel.sendToQueue(deadLetterChannel, Buffer.from(content), { persistent: true });
278
+ }
279
+ /**
280
+ * Request-response pattern
281
+ */
282
+ async request(payload, options) {
283
+ await this.assert();
284
+ const correlationId = node_crypto.randomUUID();
285
+ const timeout = options?.timeout ?? 30000;
286
+ // Create exclusive reply queue
287
+ const { queue: replyQueue } = await this.amqpChannel.assertQueue("", {
288
+ exclusive: true,
289
+ autoDelete: true,
290
+ });
291
+ return new Promise((resolve, reject) => {
292
+ const timeoutId = setTimeout(() => {
293
+ reject(new Error(`Request timeout after ${timeout}ms`));
294
+ }, timeout);
295
+ // Consume reply
296
+ this.amqpChannel.consume(replyQueue, (msg) => {
297
+ if (msg?.properties.correlationId === correlationId) {
298
+ clearTimeout(timeoutId);
299
+ const content = JSON.parse(msg.content.toString());
300
+ resolve(content.payload);
301
+ }
302
+ }, { noAck: true });
303
+ // Send request
304
+ const messageContent = JSON.stringify({
305
+ payload,
306
+ metadata: {
307
+ messageId: node_crypto.randomUUID(),
308
+ timestamp: new Date().toISOString(),
309
+ correlationId,
310
+ },
311
+ });
312
+ this.amqpChannel.sendToQueue(this.name, Buffer.from(messageContent), {
313
+ correlationId,
314
+ replyTo: replyQueue,
315
+ expiration: timeout.toString(),
316
+ ...options,
317
+ });
318
+ });
319
+ }
320
+ /**
321
+ * Register response handler for RPC
322
+ */
323
+ async respond(handler) {
324
+ return this.subscribe(async (message, ctx) => {
325
+ const response = await handler(message, ctx);
326
+ await ctx.reply(response);
327
+ await ctx.ack();
328
+ });
329
+ }
330
+ /**
331
+ * Get queue statistics
332
+ */
333
+ async stats() {
334
+ await this.assert();
335
+ const queueInfo = await this.amqpChannel.checkQueue(this.name);
336
+ return {
337
+ name: this.name,
338
+ messageCount: queueInfo.messageCount,
339
+ consumerCount: queueInfo.consumerCount,
340
+ };
341
+ }
342
+ /**
343
+ * Purge all messages
344
+ */
345
+ async purge() {
346
+ await this.assert();
347
+ const result = await this.amqpChannel.purgeQueue(this.name);
348
+ return result.messageCount;
349
+ }
350
+ /**
351
+ * Check if queue exists
352
+ */
353
+ async exists() {
354
+ try {
355
+ await this.amqpChannel.checkQueue(this.name);
356
+ return true;
357
+ }
358
+ catch {
359
+ return false;
360
+ }
361
+ }
362
+ /**
363
+ * Delete the queue
364
+ */
365
+ async delete() {
366
+ // Cancel all subscriptions
367
+ for (const subscription of this.subscriptions.values()) {
368
+ await subscription.unsubscribe();
369
+ }
370
+ this.subscriptions.clear();
371
+ try {
372
+ await this.amqpChannel.deleteQueue(this.name);
373
+ }
374
+ catch {
375
+ // Ignore if queue doesn't exist
376
+ }
377
+ this.asserted = false;
378
+ }
379
+ }
380
+ /**
381
+ * RabbitMQ Subscription Implementation
382
+ */
383
+ class RabbitMQSubscription {
384
+ id;
385
+ channel;
386
+ consumerTag;
387
+ amqpChannel;
388
+ _isActive = true;
389
+ constructor(id, channel, consumerTag, amqpChannel) {
390
+ this.id = id;
391
+ this.channel = channel;
392
+ this.consumerTag = consumerTag;
393
+ this.amqpChannel = amqpChannel;
394
+ }
395
+ async unsubscribe() {
396
+ if (!this._isActive)
397
+ return;
398
+ await this.amqpChannel.cancel(this.consumerTag);
399
+ this._isActive = false;
400
+ }
401
+ async pause() {
402
+ // RabbitMQ doesn't have native pause, cancel consumer
403
+ await this.amqpChannel.cancel(this.consumerTag);
404
+ }
405
+ async resume() {
406
+ // Would need to re-subscribe - not directly supported
407
+ throw new Error("Resume is not supported for RabbitMQ. Please create a new subscription.");
408
+ }
409
+ isActive() {
410
+ return this._isActive;
411
+ }
412
+ }exports.RabbitMQChannel=RabbitMQChannel;//# sourceMappingURL=rabbitmq-channel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rabbitmq-channel.js","sources":["../../../src/drivers/rabbitmq/rabbitmq-channel.ts"],"sourcesContent":[null],"names":["v","randomUUID"],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ import type { ChannelContract, CommunicatorDriverContract } from "../../contracts";
2
+ import { EventMessage } from "../../message-managers/event-message";
3
+ import { EventConsumerClass } from "../../message-managers/types";
4
+ import type { ChannelOptions, CommunicatorEvent, CommunicatorEventListener, HealthCheckResult, RabbitMQConnectionOptions } from "../../types";
5
+ /**
6
+ * RabbitMQ Driver
7
+ *
8
+ * Implementation of CommunicatorDriverContract for RabbitMQ/AMQP.
9
+ *
10
+ * **Important:** This driver requires the `amqplib` package to be installed.
11
+ * Install it with: `npx warlock add herald --driver=rabbitmq` or `npm install amqplib`
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const driver = new RabbitMQDriver({
16
+ * driver: "rabbitmq",
17
+ * host: "localhost",
18
+ * port: 5672,
19
+ * username: "guest",
20
+ * password: "guest",
21
+ * });
22
+ *
23
+ * await driver.connect();
24
+ * const channel = driver.channel("user.created");
25
+ * ```
26
+ */
27
+ export declare class RabbitMQDriver implements CommunicatorDriverContract {
28
+ readonly name: "rabbitmq";
29
+ readonly consumers: EventConsumerClass[];
30
+ private readonly options;
31
+ private readonly events;
32
+ private readonly channels;
33
+ private connection;
34
+ private amqpChannel;
35
+ private _isConnected;
36
+ /**
37
+ * Create a new RabbitMQ driver
38
+ *
39
+ * @param options - RabbitMQ connection options
40
+ */
41
+ constructor(options: RabbitMQConnectionOptions);
42
+ /**
43
+ * Whether connected to RabbitMQ
44
+ */
45
+ get isConnected(): boolean;
46
+ /**
47
+ * Subscribe the given consumer class to the driver
48
+ *
49
+ * @param consumer - Consumer class to subscribe
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * driver.subscribe(UserUpdatedConsumer);
54
+ * ```
55
+ */
56
+ subscribe(Consumer: EventConsumerClass): () => void;
57
+ /**
58
+ * Unsubscribe the given consumer
59
+ */
60
+ unsubscribe(Consumer: EventConsumerClass): void;
61
+ /**
62
+ * Publish the given event message
63
+ */
64
+ publish<TPayload = Record<string, any>>(event: EventMessage<TPayload>): void;
65
+ /**
66
+ * Connect to RabbitMQ
67
+ */
68
+ connect(): Promise<void>;
69
+ /**
70
+ * Build connection URL from options
71
+ */
72
+ private buildConnectionUrl;
73
+ /**
74
+ * Handle reconnection
75
+ */
76
+ private handleReconnect;
77
+ /**
78
+ * Disconnect from RabbitMQ
79
+ */
80
+ disconnect(): Promise<void>;
81
+ /**
82
+ * Register event listener
83
+ */
84
+ on(event: CommunicatorEvent, listener: CommunicatorEventListener): void;
85
+ /**
86
+ * Remove event listener
87
+ */
88
+ off(event: CommunicatorEvent, listener: CommunicatorEventListener): void;
89
+ /**
90
+ * Get or create a channel
91
+ */
92
+ channel<TPayload = unknown>(name: string, options?: ChannelOptions<TPayload>): ChannelContract<TPayload>;
93
+ /**
94
+ * Start consuming messages
95
+ */
96
+ startConsuming(): Promise<void>;
97
+ /**
98
+ * Stop consuming messages
99
+ */
100
+ stopConsuming(): Promise<void>;
101
+ /**
102
+ * Health check
103
+ */
104
+ healthCheck(): Promise<HealthCheckResult>;
105
+ /**
106
+ * Get all channel names
107
+ */
108
+ getChannelNames(): string[];
109
+ /**
110
+ * Close a specific channel
111
+ */
112
+ closeChannel(name: string): Promise<void>;
113
+ /**
114
+ * Get the raw AMQP channel (for advanced use)
115
+ */
116
+ getRawChannel(): any;
117
+ /**
118
+ * Get the raw connection (for advanced use)
119
+ */
120
+ getRawConnection(): any;
121
+ }
122
+ //# sourceMappingURL=rabbitmq-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rabbitmq-driver.d.ts","sourceRoot":"","sources":["../../../src/drivers/rabbitmq/rabbitmq-driver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,yBAAyB,EACzB,iBAAiB,EACjB,yBAAyB,EAC1B,MAAM,aAAa,CAAC;AAqDrB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,cAAe,YAAW,0BAA0B;IAC/D,SAAgB,IAAI,aAAuB;IAE3C,SAAgB,SAAS,EAAE,kBAAkB,EAAE,CAAM;IAErD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IAEpE,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,YAAY,CAAS;IAE7B;;;;OAIG;gBACgB,OAAO,EAAE,yBAAyB;IAIrD;;OAEG;IACH,IAAW,WAAW,IAAI,OAAO,CAEhC;IAED;;;;;;;;;OASG;IACI,SAAS,CAAC,QAAQ,EAAE,kBAAkB;IAc7C;;OAEG;IACI,WAAW,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI;IAUtD;;OAEG;IACI,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,IAAI;IAInF;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAoErC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;YACW,eAAe;IAkB7B;;OAEG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBxC;;OAEG;IACI,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,yBAAyB,GAAG,IAAI;IAI9E;;OAEG;IACI,GAAG,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,yBAAyB,GAAG,IAAI;IAI/E;;OAEG;IACI,OAAO,CAAC,QAAQ,GAAG,OAAO,EAC/B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,GACjC,eAAe,CAAC,QAAQ,CAAC;IAc5B;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5C;;OAEG;IACU,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3C;;OAEG;IACU,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IA6BtD;;OAEG;IACI,eAAe,IAAI,MAAM,EAAE;IAIlC;;OAEG;IACU,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtD;;OAEG;IACI,aAAa,IAAI,GAAG;IAI3B;;OAEG;IACI,gBAAgB,IAAI,GAAG;CAG/B"}