rabbitmq-sdk 0.0.1-security → 1.2.0

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.

Potentially problematic release.


This version of rabbitmq-sdk might be problematic. Click here for more details.

Files changed (140) hide show
  1. package/.eslintrc.js +23 -0
  2. package/.kiro/specs/sdk-rabbitmq/design.md +369 -0
  3. package/.kiro/specs/sdk-rabbitmq/requirements.md +97 -0
  4. package/.kiro/specs/sdk-rabbitmq/tasks.md +248 -0
  5. package/README.md +273 -5
  6. package/bun.lock +790 -0
  7. package/config.example.json +13 -0
  8. package/dist/components/ConfigurationManager.d.ts +35 -0
  9. package/dist/components/ConfigurationManager.d.ts.map +1 -0
  10. package/dist/components/ConfigurationManager.js +118 -0
  11. package/dist/components/ConfigurationManager.js.map +1 -0
  12. package/dist/components/ConnectionManager.d.ts +93 -0
  13. package/dist/components/ConnectionManager.d.ts.map +1 -0
  14. package/dist/components/ConnectionManager.js +349 -0
  15. package/dist/components/ConnectionManager.js.map +1 -0
  16. package/dist/components/DLQHandler.d.ts +81 -0
  17. package/dist/components/DLQHandler.d.ts.map +1 -0
  18. package/dist/components/DLQHandler.js +228 -0
  19. package/dist/components/DLQHandler.js.map +1 -0
  20. package/dist/components/Logger.d.ts +77 -0
  21. package/dist/components/Logger.d.ts.map +1 -0
  22. package/dist/components/Logger.js +193 -0
  23. package/dist/components/Logger.js.map +1 -0
  24. package/dist/components/MessagePublisher.d.ts +49 -0
  25. package/dist/components/MessagePublisher.d.ts.map +1 -0
  26. package/dist/components/MessagePublisher.js +158 -0
  27. package/dist/components/MessagePublisher.js.map +1 -0
  28. package/dist/components/MessageSubscriber.d.ts +108 -0
  29. package/dist/components/MessageSubscriber.d.ts.map +1 -0
  30. package/dist/components/MessageSubscriber.js +503 -0
  31. package/dist/components/MessageSubscriber.js.map +1 -0
  32. package/dist/components/ResourceCreator.d.ts +89 -0
  33. package/dist/components/ResourceCreator.d.ts.map +1 -0
  34. package/dist/components/ResourceCreator.js +352 -0
  35. package/dist/components/ResourceCreator.js.map +1 -0
  36. package/dist/components/SdkRabbitmq.d.ts +103 -0
  37. package/dist/components/SdkRabbitmq.d.ts.map +1 -0
  38. package/dist/components/SdkRabbitmq.js +364 -0
  39. package/dist/components/SdkRabbitmq.js.map +1 -0
  40. package/dist/components/index.d.ts +9 -0
  41. package/dist/components/index.d.ts.map +1 -0
  42. package/dist/components/index.js +20 -0
  43. package/dist/components/index.js.map +1 -0
  44. package/dist/index.d.ts +5 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +27 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/interfaces/IConfiguration.d.ts +35 -0
  49. package/dist/interfaces/IConfiguration.d.ts.map +1 -0
  50. package/dist/interfaces/IConfiguration.js +3 -0
  51. package/dist/interfaces/IConfiguration.js.map +1 -0
  52. package/dist/interfaces/IConnection.d.ts +21 -0
  53. package/dist/interfaces/IConnection.d.ts.map +1 -0
  54. package/dist/interfaces/IConnection.js +3 -0
  55. package/dist/interfaces/IConnection.js.map +1 -0
  56. package/dist/interfaces/IDLQ.d.ts +12 -0
  57. package/dist/interfaces/IDLQ.d.ts.map +1 -0
  58. package/dist/interfaces/IDLQ.js +3 -0
  59. package/dist/interfaces/IDLQ.js.map +1 -0
  60. package/dist/interfaces/IErrors.d.ts +33 -0
  61. package/dist/interfaces/IErrors.d.ts.map +1 -0
  62. package/dist/interfaces/IErrors.js +56 -0
  63. package/dist/interfaces/IErrors.js.map +1 -0
  64. package/dist/interfaces/ILogger.d.ts +14 -0
  65. package/dist/interfaces/ILogger.d.ts.map +1 -0
  66. package/dist/interfaces/ILogger.js +3 -0
  67. package/dist/interfaces/ILogger.js.map +1 -0
  68. package/dist/interfaces/IMessage.d.ts +52 -0
  69. package/dist/interfaces/IMessage.d.ts.map +1 -0
  70. package/dist/interfaces/IMessage.js +3 -0
  71. package/dist/interfaces/IMessage.js.map +1 -0
  72. package/dist/interfaces/IResource.d.ts +31 -0
  73. package/dist/interfaces/IResource.d.ts.map +1 -0
  74. package/dist/interfaces/IResource.js +3 -0
  75. package/dist/interfaces/IResource.js.map +1 -0
  76. package/dist/interfaces/ISdkRabbitmq.d.ts +17 -0
  77. package/dist/interfaces/ISdkRabbitmq.d.ts.map +1 -0
  78. package/dist/interfaces/ISdkRabbitmq.js +3 -0
  79. package/dist/interfaces/ISdkRabbitmq.js.map +1 -0
  80. package/dist/interfaces/index.d.ts +9 -0
  81. package/dist/interfaces/index.d.ts.map +1 -0
  82. package/dist/interfaces/index.js +33 -0
  83. package/dist/interfaces/index.js.map +1 -0
  84. package/dist/utils/configSchema.d.ts +8 -0
  85. package/dist/utils/configSchema.d.ts.map +1 -0
  86. package/dist/utils/configSchema.js +51 -0
  87. package/dist/utils/configSchema.js.map +1 -0
  88. package/docker-compose.yml +24 -0
  89. package/example.ts +65 -0
  90. package/examples/README-dynamic-routing.md +155 -0
  91. package/examples/bind-unbind-example.js +56 -0
  92. package/examples/test-chatbot-exchange.ts +83 -0
  93. package/examples/test-dynamic-routing-flow.js +299 -0
  94. package/examples/test-dynamic-routing-flow.ts +355 -0
  95. package/examples/test-no-disconnect.ts +0 -0
  96. package/examples/test-raw-rabbitmq.js +68 -0
  97. package/examples/test-same-channel.ts +81 -0
  98. package/examples/test-schedule-flow.ts +713 -0
  99. package/examples/test-simple-greeting.ts +66 -0
  100. package/examples/test-simple-schedule.ts +76 -0
  101. package/examples/test-wildcard.ts +364 -0
  102. package/jest.config.js +17 -0
  103. package/package.json +42 -4
  104. package/preinstall.js +1 -0
  105. package/prompts/test-dynamic-routing-flow.md +46 -0
  106. package/run.js +4 -0
  107. package/scripts/run-dynamic-routing-test.ts +31 -0
  108. package/src/.gitkeep +1 -0
  109. package/src/components/.gitkeep +1 -0
  110. package/src/components/ConfigurationManager.ts +104 -0
  111. package/src/components/ConnectionManager.ts +357 -0
  112. package/src/components/DLQHandler.ts +271 -0
  113. package/src/components/Logger.ts +224 -0
  114. package/src/components/MessagePublisher.ts +180 -0
  115. package/src/components/MessageSubscriber.ts +597 -0
  116. package/src/components/ResourceCreator.ts +411 -0
  117. package/src/components/SdkRabbitmq.ts +443 -0
  118. package/src/components/__tests__/ConfigurationManager.test.ts +357 -0
  119. package/src/components/__tests__/ConnectionManager.test.ts +387 -0
  120. package/src/components/__tests__/DLQHandler.test.ts +399 -0
  121. package/src/components/__tests__/Logger.test.ts +354 -0
  122. package/src/components/__tests__/MessagePublisher.test.ts +337 -0
  123. package/src/components/__tests__/MessageSubscriber.test.ts +542 -0
  124. package/src/components/__tests__/ResourceCreator.test.ts +465 -0
  125. package/src/components/__tests__/SdkRabbitmq.integration.test.ts +433 -0
  126. package/src/components/index.ts +8 -0
  127. package/src/index.ts +11 -0
  128. package/src/interfaces/.gitkeep +1 -0
  129. package/src/interfaces/IConfiguration.ts +38 -0
  130. package/src/interfaces/IConnection.ts +27 -0
  131. package/src/interfaces/IDLQ.ts +13 -0
  132. package/src/interfaces/IErrors.ts +53 -0
  133. package/src/interfaces/ILogger.ts +16 -0
  134. package/src/interfaces/IMessage.ts +65 -0
  135. package/src/interfaces/IResource.ts +35 -0
  136. package/src/interfaces/ISdkRabbitmq.ts +26 -0
  137. package/src/interfaces/index.ts +23 -0
  138. package/src/utils/.gitkeep +1 -0
  139. package/src/utils/configSchema.ts +58 -0
  140. package/tsconfig.json +34 -0
@@ -0,0 +1,352 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResourceCreator = void 0;
4
+ const Logger_1 = require("./Logger");
5
+ /**
6
+ * ResourceCreator handles automatic creation of exchanges, queues, and bindings
7
+ * Implements caching and existence checking to avoid duplicate creation attempts
8
+ */
9
+ class ResourceCreator {
10
+ constructor(connectionManager, config) {
11
+ this.createdExchanges = new Set();
12
+ this.createdQueues = new Set();
13
+ this.createdBindings = new Set();
14
+ this.existingExchanges = new Set();
15
+ this.existingQueues = new Set();
16
+ this.connectionManager = connectionManager;
17
+ this.logger = Logger_1.Logger.createComponentLogger('ResourceCreator', config);
18
+ }
19
+ /**
20
+ * Check if exchange exists without creating it
21
+ * @param exchange Exchange name
22
+ * @returns Promise<boolean> indicating if exchange exists
23
+ */
24
+ async checkExchangeExists(exchange) {
25
+ if (this.existingExchanges.has(exchange)) {
26
+ return true;
27
+ }
28
+ return this.connectionManager.executeOperation(async () => {
29
+ const connection = this.connectionManager.getConnection();
30
+ if (!connection) {
31
+ throw new Error('No active connection to RabbitMQ');
32
+ }
33
+ try {
34
+ const channel = await connection.createChannel();
35
+ // Use checkExchange to verify existence without creating
36
+ await channel.checkExchange(exchange);
37
+ await channel.close();
38
+ // Cache that exchange exists
39
+ this.existingExchanges.add(exchange);
40
+ return true;
41
+ }
42
+ catch (error) {
43
+ // Exchange doesn't exist or other error
44
+ return false;
45
+ }
46
+ });
47
+ }
48
+ /**
49
+ * Check if queue exists without creating it
50
+ * @param queue Queue name
51
+ * @returns Promise<boolean> indicating if queue exists
52
+ */
53
+ async checkQueueExists(queue) {
54
+ if (this.existingQueues.has(queue)) {
55
+ return true;
56
+ }
57
+ return this.connectionManager.executeOperation(async () => {
58
+ const connection = this.connectionManager.getConnection();
59
+ if (!connection) {
60
+ throw new Error('No active connection to RabbitMQ');
61
+ }
62
+ try {
63
+ const channel = await connection.createChannel();
64
+ // Use checkQueue to verify existence without creating
65
+ await channel.checkQueue(queue);
66
+ await channel.close();
67
+ // Cache that queue exists
68
+ this.existingQueues.add(queue);
69
+ return true;
70
+ }
71
+ catch (error) {
72
+ // Queue doesn't exist or other error
73
+ return false;
74
+ }
75
+ });
76
+ }
77
+ /**
78
+ * Ensure exchange exists, create if it doesn't
79
+ * @param exchange Exchange name
80
+ * @param type Exchange type (default: 'direct')
81
+ * @param options Exchange options
82
+ */
83
+ async ensureExchange(exchange, type = 'topic', options = {}) {
84
+ if (!exchange) {
85
+ throw new Error('Exchange name is required');
86
+ }
87
+ const exchangeKey = `${exchange}:${type}`;
88
+ // Check cache first
89
+ if (this.createdExchanges.has(exchangeKey)) {
90
+ return;
91
+ }
92
+ // Check if exchange already exists
93
+ try {
94
+ const exists = await this.checkExchangeExists(exchange);
95
+ if (exists) {
96
+ this.createdExchanges.add(exchangeKey);
97
+ this.logger.info(`Exchange already exists`, { exchange, type });
98
+ return;
99
+ }
100
+ }
101
+ catch (error) {
102
+ this.logger.warn(`Could not check exchange existence`, {
103
+ exchange,
104
+ error: error instanceof Error ? error.message : 'Unknown error'
105
+ });
106
+ }
107
+ return this.connectionManager.executeOperation(async () => {
108
+ const connection = this.connectionManager.getConnection();
109
+ if (!connection) {
110
+ throw new Error('No active connection to RabbitMQ');
111
+ }
112
+ try {
113
+ const channel = await connection.createChannel();
114
+ // Set default options
115
+ const exchangeOptions = {
116
+ durable: true,
117
+ autoDelete: false,
118
+ ...options
119
+ };
120
+ await channel.assertExchange(exchange, type, exchangeOptions);
121
+ await channel.close();
122
+ // Cache successful creation
123
+ this.createdExchanges.add(exchangeKey);
124
+ this.existingExchanges.add(exchange);
125
+ this.logger.logOperation('createExchange', `Exchange created successfully`, {
126
+ exchange,
127
+ type,
128
+ options: exchangeOptions
129
+ });
130
+ }
131
+ catch (error) {
132
+ this.logger.logError(`Failed to ensure exchange`, error, { exchange, type });
133
+ throw error;
134
+ }
135
+ });
136
+ }
137
+ /**
138
+ * Ensure queue exists, create if it doesn't
139
+ * @param queue Queue name
140
+ * @param options Queue options
141
+ */
142
+ async ensureQueue(queue, options = {}) {
143
+ if (!queue) {
144
+ throw new Error('Queue name is required');
145
+ }
146
+ // Check cache first
147
+ if (this.createdQueues.has(queue)) {
148
+ return;
149
+ }
150
+ // Check if queue already exists
151
+ try {
152
+ const exists = await this.checkQueueExists(queue);
153
+ if (exists) {
154
+ this.createdQueues.add(queue);
155
+ this.logger.info(`Queue already exists`, { queue });
156
+ return;
157
+ }
158
+ }
159
+ catch (error) {
160
+ this.logger.warn(`Could not check queue existence`, {
161
+ queue,
162
+ error: error instanceof Error ? error.message : 'Unknown error'
163
+ });
164
+ }
165
+ return this.connectionManager.executeOperation(async () => {
166
+ const connection = this.connectionManager.getConnection();
167
+ if (!connection) {
168
+ throw new Error('No active connection to RabbitMQ');
169
+ }
170
+ try {
171
+ const channel = await connection.createChannel();
172
+ // Set default options
173
+ const queueOptions = {
174
+ durable: true,
175
+ exclusive: false,
176
+ autoDelete: false,
177
+ ...options
178
+ };
179
+ await channel.assertQueue(queue, queueOptions);
180
+ await channel.close();
181
+ // Cache successful creation
182
+ this.createdQueues.add(queue);
183
+ this.existingQueues.add(queue);
184
+ this.logger.logOperation('createQueue', `Queue created successfully`, {
185
+ queue,
186
+ options: queueOptions
187
+ });
188
+ }
189
+ catch (error) {
190
+ this.logger.logError(`Failed to ensure queue`, error, { queue });
191
+ throw error;
192
+ }
193
+ });
194
+ }
195
+ /**
196
+ * Bind queue to exchange with routing key
197
+ * @param queue Queue name
198
+ * @param exchange Exchange name
199
+ * @param routingKey Routing key for binding
200
+ */
201
+ async bindQueue(queue, exchange, routingKey) {
202
+ if (!queue) {
203
+ throw new Error('Queue name is required');
204
+ }
205
+ if (!exchange) {
206
+ throw new Error('Exchange name is required');
207
+ }
208
+ if (!routingKey) {
209
+ throw new Error('Routing key is required');
210
+ }
211
+ const bindingKey = `${queue}:${exchange}:${routingKey}`;
212
+ // Check cache first
213
+ if (this.createdBindings.has(bindingKey)) {
214
+ return;
215
+ }
216
+ return this.connectionManager.executeOperation(async () => {
217
+ const connection = this.connectionManager.getConnection();
218
+ if (!connection) {
219
+ throw new Error('No active connection to RabbitMQ');
220
+ }
221
+ try {
222
+ const channel = await connection.createChannel();
223
+ await channel.bindQueue(queue, exchange, routingKey);
224
+ await channel.close();
225
+ // Cache successful binding
226
+ this.createdBindings.add(bindingKey);
227
+ this.logger.logOperation('bindQueue', `Queue bound to exchange successfully`, {
228
+ queue,
229
+ exchange,
230
+ routingKey
231
+ });
232
+ }
233
+ catch (error) {
234
+ this.logger.logError(`Failed to bind queue to exchange`, error, {
235
+ queue,
236
+ exchange,
237
+ routingKey
238
+ });
239
+ throw error;
240
+ }
241
+ });
242
+ }
243
+ /**
244
+ * Unbind queue from exchange with routing key
245
+ * @param queue Queue name
246
+ * @param exchange Exchange name
247
+ * @param routingKey Routing key for unbinding
248
+ */
249
+ async unbindQueue(queue, exchange, routingKey) {
250
+ if (!queue) {
251
+ throw new Error('Queue name is required');
252
+ }
253
+ if (!exchange) {
254
+ throw new Error('Exchange name is required');
255
+ }
256
+ if (!routingKey) {
257
+ throw new Error('Routing key is required');
258
+ }
259
+ const bindingKey = `${queue}:${exchange}:${routingKey}`;
260
+ return this.connectionManager.executeOperation(async () => {
261
+ const connection = this.connectionManager.getConnection();
262
+ if (!connection) {
263
+ throw new Error('No active connection to RabbitMQ');
264
+ }
265
+ try {
266
+ const channel = await connection.createChannel();
267
+ await channel.unbindQueue(queue, exchange, routingKey);
268
+ await channel.close();
269
+ // Remove from cache if it exists
270
+ this.createdBindings.delete(bindingKey);
271
+ this.logger.logOperation('unbindQueue', `Queue unbound from exchange successfully`, {
272
+ queue,
273
+ exchange,
274
+ routingKey
275
+ });
276
+ }
277
+ catch (error) {
278
+ this.logger.logError(`Failed to unbind queue from exchange`, error, {
279
+ queue,
280
+ exchange,
281
+ routingKey
282
+ });
283
+ throw error;
284
+ }
285
+ });
286
+ }
287
+ /**
288
+ * Clear all caches (useful for testing or reset scenarios)
289
+ */
290
+ clearCache() {
291
+ this.createdExchanges.clear();
292
+ this.createdQueues.clear();
293
+ this.createdBindings.clear();
294
+ this.existingExchanges.clear();
295
+ this.existingQueues.clear();
296
+ this.logger.info('ResourceCreator cache cleared');
297
+ }
298
+ /**
299
+ * Get cache statistics for monitoring
300
+ */
301
+ getCacheStats() {
302
+ return {
303
+ created: {
304
+ exchanges: this.createdExchanges.size,
305
+ queues: this.createdQueues.size,
306
+ bindings: this.createdBindings.size
307
+ },
308
+ existing: {
309
+ exchanges: this.existingExchanges.size,
310
+ queues: this.existingQueues.size
311
+ }
312
+ };
313
+ }
314
+ /**
315
+ * Validate resource name format
316
+ * @param name Resource name to validate
317
+ * @param type Resource type for error messages
318
+ */
319
+ validateResourceName(name, type) {
320
+ if (!name || typeof name !== 'string') {
321
+ throw new Error(`${type} name must be a non-empty string`);
322
+ }
323
+ if (name.length > 255) {
324
+ throw new Error(`${type} name cannot exceed 255 characters`);
325
+ }
326
+ // RabbitMQ naming conventions
327
+ const invalidChars = /[^a-zA-Z0-9._-]/;
328
+ if (invalidChars.test(name)) {
329
+ throw new Error(`${type} name contains invalid characters. Only alphanumeric, dots, hyphens, and underscores are allowed`);
330
+ }
331
+ }
332
+ /**
333
+ * Enhanced ensure exchange with validation
334
+ */
335
+ async ensureExchangeWithValidation(exchange, type = 'topic', options = {}) {
336
+ this.validateResourceName(exchange, 'Exchange');
337
+ const validTypes = ['direct', 'topic', 'fanout', 'headers'];
338
+ if (!validTypes.includes(type)) {
339
+ throw new Error(`Invalid exchange type '${type}'. Valid types: ${validTypes.join(', ')}`);
340
+ }
341
+ return this.ensureExchange(exchange, type, options);
342
+ }
343
+ /**
344
+ * Enhanced ensure queue with validation
345
+ */
346
+ async ensureQueueWithValidation(queue, options = {}) {
347
+ this.validateResourceName(queue, 'Queue');
348
+ return this.ensureQueue(queue, options);
349
+ }
350
+ }
351
+ exports.ResourceCreator = ResourceCreator;
352
+ //# sourceMappingURL=ResourceCreator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceCreator.js","sourceRoot":"","sources":["../../src/components/ResourceCreator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { ISdkRabbitmq } from '../interfaces/ISdkRabbitmq';
2
+ import { MessageCallback } from '../interfaces/IMessage';
3
+ /**
4
+ * Main SdkRabbitmq singleton class that provides the public API
5
+ * Implements singleton pattern to ensure single connection per application
6
+ */
7
+ export declare class SdkRabbitmq implements ISdkRabbitmq {
8
+ private static instance;
9
+ private static isInitializing;
10
+ private configurationManager;
11
+ private connectionManager;
12
+ private messagePublisher;
13
+ private messageSubscriber;
14
+ private resourceCreator;
15
+ private dlqHandler;
16
+ private logger;
17
+ private config;
18
+ private isInitialized;
19
+ /**
20
+ * Private constructor to enforce singleton pattern
21
+ */
22
+ private constructor();
23
+ /**
24
+ * Get singleton instance of SdkRabbitmq
25
+ * Returns existing instance if available, creates new one otherwise
26
+ */
27
+ static getInstance(): Promise<SdkRabbitmq>;
28
+ /**
29
+ * Initialize all SDK components and establish connection
30
+ */
31
+ private initializeComponents;
32
+ /**
33
+
34
+ * Publish a message to an exchange
35
+ * @param exchange Exchange name (required)
36
+ * @param routingKey Routing key for message routing (required)
37
+ * @param payload Message payload to be JSON serialized (required)
38
+ * @returns Promise<boolean> - true for success, false for failure
39
+ */
40
+ publish(exchange: string, routingKey: string, payload: any): Promise<boolean>;
41
+ /**
42
+ * Subscribe to messages from a queue
43
+ * @param exchange Exchange name (required)
44
+ * @param queue Queue name (required)
45
+ * @param routingKey Routing key for binding (required)
46
+ * @param callback Message callback function (required)
47
+ */
48
+ subscribe(exchange: string, queue: string, routingKey: string, callback: MessageCallback): Promise<void>;
49
+ /**
50
+ * Disconnect from RabbitMQ gracefully
51
+ * Performs cleanup of all components and closes connection
52
+ */
53
+ disconnect(): Promise<void>;
54
+ /**
55
+ * Validate publish method parameters
56
+ * @param exchange Exchange name
57
+ * @param routingKey Routing key
58
+ * @param payload Message payload
59
+ */
60
+ private validatePublishParameters;
61
+ /**
62
+ * Validate subscribe method parameters
63
+ * @param exchange Exchange name
64
+ * @param queue Queue name
65
+ * @param routingKey Routing key
66
+ * @param callback Message callback function
67
+ */
68
+ private validateSubscribeParameters;
69
+ /**
70
+ * Validate bind/unbind method parameters
71
+ * @param queue Queue name
72
+ * @param exchange Exchange name
73
+ * @param routingKey Routing key
74
+ */
75
+ private validateBindParameters;
76
+ /**
77
+ * Get SDK initialization status
78
+ */
79
+ isReady(): boolean;
80
+ /**
81
+ * Bind a queue to an exchange with a routing key
82
+ * @param queue Queue name (required)
83
+ * @param exchange Exchange name (required)
84
+ * @param routingKey Routing key for binding (required)
85
+ */
86
+ bind(queue: string, exchange: string, routingKey: string): Promise<void>;
87
+ /**
88
+ * Unbind a queue from an exchange with a routing key
89
+ * @param queue Queue name (required)
90
+ * @param exchange Exchange name (required)
91
+ * @param routingKey Routing key for unbinding (required)
92
+ */
93
+ unbind(queue: string, exchange: string, routingKey: string): Promise<void>;
94
+ /**
95
+ * Get active consumers for monitoring
96
+ */
97
+ getActiveConsumers(): string[];
98
+ /**
99
+ * Reset singleton instance (for testing purposes)
100
+ */
101
+ static resetInstance(): void;
102
+ }
103
+ //# sourceMappingURL=SdkRabbitmq.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SdkRabbitmq.d.ts","sourceRoot":"","sources":["../../src/components/SdkRabbitmq.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAUzD;;;GAGG;AACH,qBAAa,WAAY,YAAW,YAAY;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IACnD,OAAO,CAAC,MAAM,CAAC,cAAc,CAAS;IAEtC,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,gBAAgB,CAAoB;IAC5C,OAAO,CAAC,iBAAiB,CAAqB;IAC9C,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,aAAa,CAAS;IAE9B;;OAEG;IACH,OAAO;IAgBP;;;OAGG;WACiB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IA2CvD;;OAEG;YACW,oBAAoB;IAqClC;;;;;;;OAOG;IACU,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAmC1F;;;;;;OAMG;IACU,SAAS,CACpB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC;IAiChB;;;OAGG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsCxC;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAcjC;;;;;;OAMG;IACH,OAAO,CAAC,2BAA2B;IAuBnC;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAc9B;;OAEG;IACI,OAAO,IAAI,OAAO;IAIzB;;;;;OAKG;IACU,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCrF;;;;;OAKG;IACU,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCvF;;OAEG;IACI,kBAAkB,IAAI,MAAM,EAAE;IAOrC;;OAEG;WACW,aAAa,IAAI,IAAI;CASpC"}