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,81 @@
1
+ import { IDLQHandler } from '../interfaces/IDLQ';
2
+ import { IConfiguration } from '../interfaces/IConfiguration';
3
+ import { ConnectionManager } from './ConnectionManager';
4
+ import { ResourceCreator } from './ResourceCreator';
5
+ /**
6
+ * DLQHandler manages Dead Letter Queue functionality
7
+ * Handles DLQ setup, configuration, and failed message routing
8
+ */
9
+ export declare class DLQHandler implements IDLQHandler {
10
+ private config;
11
+ private connectionManager;
12
+ private resourceCreator;
13
+ private dlqSetupCache;
14
+ private logger;
15
+ constructor(config: IConfiguration, connectionManager: ConnectionManager, resourceCreator: ResourceCreator);
16
+ /**
17
+ * Check if DLQ is enabled in configuration
18
+ * @returns boolean indicating if DLQ is active
19
+ */
20
+ isEnabled(): boolean;
21
+ /**
22
+ * Set up DLQ for a given original queue
23
+ * Creates DLQ exchange and queue following naming conventions
24
+ * @param originalQueue Original queue name
25
+ * @returns Promise<string> DLQ queue name
26
+ */
27
+ setupDLQ(originalQueue: string): Promise<string>;
28
+ /**
29
+ * Handle a failed message by routing to DLQ
30
+ * @param message Failed message object
31
+ * @param originalQueue Original queue name where message failed
32
+ */
33
+ handleFailedMessage(message: any, originalQueue: string): Promise<void>;
34
+ /**
35
+ * Get DLQ exchange name following naming convention
36
+ * @param originalQueue Original queue name
37
+ * @returns DLQ exchange name (original-queue.dlq)
38
+ */
39
+ private getDLQExchangeName;
40
+ /**
41
+ * Get DLQ queue name following naming convention
42
+ * @param originalQueue Original queue name
43
+ * @returns DLQ queue name (original-queue.dlq)
44
+ */
45
+ private getDLQQueueName;
46
+ /**
47
+ * Prepare message for DLQ with original metadata
48
+ * @param message Original message
49
+ * @param originalQueue Original queue name
50
+ * @returns Enhanced message with DLQ metadata
51
+ */
52
+ private prepareDLQMessage;
53
+ /**
54
+ * Route message to DLQ exchange
55
+ * @param dlqExchange DLQ exchange name
56
+ * @param routingKey Routing key (original queue name)
57
+ * @param message Message to route
58
+ */
59
+ private routeMessageToDLQ;
60
+ /**
61
+ * Get retry count from message properties
62
+ * @param properties Message properties
63
+ * @returns Current retry count
64
+ */
65
+ private getRetryCount;
66
+ /**
67
+ * Clear DLQ setup cache (useful for testing)
68
+ */
69
+ clearCache(): void;
70
+ /**
71
+ * Get cache statistics for monitoring
72
+ */
73
+ getCacheStats(): {
74
+ setupCache: number;
75
+ };
76
+ /**
77
+ * Get DLQ configuration
78
+ */
79
+ getDLQConfig(): IConfiguration['dlq'];
80
+ }
81
+ //# sourceMappingURL=DLQHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DLQHandler.d.ts","sourceRoot":"","sources":["../../src/components/DLQHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD;;;GAGG;AACH,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,MAAM,CAAS;gBAGrB,MAAM,EAAE,cAAc,EACtB,iBAAiB,EAAE,iBAAiB,EACpC,eAAe,EAAE,eAAe;IAQlC;;;OAGG;IACI,SAAS,IAAI,OAAO;IAI3B;;;;;OAKG;IACU,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4D7D;;;;OAIG;IACU,mBAAmB,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCpF;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAIvB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAwBzB;;;;;OAKG;YACW,iBAAiB;IAmC/B;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACI,UAAU,IAAI,IAAI;IAKzB;;OAEG;IACI,aAAa,IAAI;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE;IAM9C;;OAEG;IACI,YAAY,IAAI,cAAc,CAAC,KAAK,CAAC;CAG7C"}
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DLQHandler = void 0;
4
+ const Logger_1 = require("./Logger");
5
+ /**
6
+ * DLQHandler manages Dead Letter Queue functionality
7
+ * Handles DLQ setup, configuration, and failed message routing
8
+ */
9
+ class DLQHandler {
10
+ constructor(config, connectionManager, resourceCreator) {
11
+ this.dlqSetupCache = new Set();
12
+ this.config = config;
13
+ this.connectionManager = connectionManager;
14
+ this.resourceCreator = resourceCreator;
15
+ this.logger = Logger_1.Logger.createComponentLogger('DLQHandler', config.logging);
16
+ }
17
+ /**
18
+ * Check if DLQ is enabled in configuration
19
+ * @returns boolean indicating if DLQ is active
20
+ */
21
+ isEnabled() {
22
+ return this.config.dlq.active;
23
+ }
24
+ /**
25
+ * Set up DLQ for a given original queue
26
+ * Creates DLQ exchange and queue following naming conventions
27
+ * @param originalQueue Original queue name
28
+ * @returns Promise<string> DLQ queue name
29
+ */
30
+ async setupDLQ(originalQueue) {
31
+ if (!originalQueue) {
32
+ throw new Error('Original queue name is required for DLQ setup');
33
+ }
34
+ if (!this.isEnabled()) {
35
+ throw new Error('DLQ is not enabled in configuration');
36
+ }
37
+ // Check cache to avoid duplicate setup
38
+ if (this.dlqSetupCache.has(originalQueue)) {
39
+ return this.getDLQQueueName(originalQueue);
40
+ }
41
+ const dlqExchangeName = this.getDLQExchangeName(originalQueue);
42
+ const dlqQueueName = this.getDLQQueueName(originalQueue);
43
+ try {
44
+ // Create DLQ exchange
45
+ await this.resourceCreator.ensureExchange(dlqExchangeName, 'direct', {
46
+ durable: true,
47
+ autoDelete: false
48
+ });
49
+ // Create DLQ queue with TTL if configured
50
+ const queueOptions = {
51
+ durable: true,
52
+ exclusive: false,
53
+ autoDelete: false
54
+ };
55
+ // Add TTL if configured
56
+ if (this.config.dlq.ttl && this.config.dlq.ttl > 0) {
57
+ queueOptions.arguments = {
58
+ 'x-message-ttl': this.config.dlq.ttl
59
+ };
60
+ }
61
+ await this.resourceCreator.ensureQueue(dlqQueueName, queueOptions);
62
+ // Bind DLQ queue to DLQ exchange
63
+ await this.resourceCreator.bindQueue(dlqQueueName, dlqExchangeName, originalQueue);
64
+ // Cache successful setup
65
+ this.dlqSetupCache.add(originalQueue);
66
+ this.logger.logOperation('setupDLQ', `DLQ setup completed`, {
67
+ originalQueue,
68
+ dlqExchange: dlqExchangeName,
69
+ dlqQueue: dlqQueueName,
70
+ ttl: this.config.dlq.ttl
71
+ });
72
+ return dlqQueueName;
73
+ }
74
+ catch (error) {
75
+ this.logger.logError(`Failed to setup DLQ`, error, { originalQueue });
76
+ throw error;
77
+ }
78
+ }
79
+ /**
80
+ * Handle a failed message by routing to DLQ
81
+ * @param message Failed message object
82
+ * @param originalQueue Original queue name where message failed
83
+ */
84
+ async handleFailedMessage(message, originalQueue) {
85
+ if (!originalQueue) {
86
+ throw new Error('Original queue name is required for failed message handling');
87
+ }
88
+ if (!message) {
89
+ throw new Error('Message is required for failed message handling');
90
+ }
91
+ if (!this.isEnabled()) {
92
+ this.logger.info(`DLQ is disabled. Acknowledging failed message without reprocessing`, {
93
+ originalQueue
94
+ });
95
+ return;
96
+ }
97
+ try {
98
+ // Ensure DLQ is set up for this queue
99
+ await this.setupDLQ(originalQueue);
100
+ const dlqExchangeName = this.getDLQExchangeName(originalQueue);
101
+ // Prepare message for DLQ with original metadata
102
+ const dlqMessage = this.prepareDLQMessage(message, originalQueue);
103
+ // Route message to DLQ
104
+ await this.routeMessageToDLQ(dlqExchangeName, originalQueue, dlqMessage);
105
+ this.logger.logOperation('routeToDLQ', `Failed message routed to DLQ`, {
106
+ originalQueue,
107
+ dlqExchange: dlqExchangeName
108
+ });
109
+ }
110
+ catch (error) {
111
+ this.logger.logError(`Failed to handle failed message`, error, { originalQueue });
112
+ throw error;
113
+ }
114
+ }
115
+ /**
116
+ * Get DLQ exchange name following naming convention
117
+ * @param originalQueue Original queue name
118
+ * @returns DLQ exchange name (original-queue.dlq)
119
+ */
120
+ getDLQExchangeName(originalQueue) {
121
+ return `${originalQueue}.dlq`;
122
+ }
123
+ /**
124
+ * Get DLQ queue name following naming convention
125
+ * @param originalQueue Original queue name
126
+ * @returns DLQ queue name (original-queue.dlq)
127
+ */
128
+ getDLQQueueName(originalQueue) {
129
+ return `${originalQueue}.dlq`;
130
+ }
131
+ /**
132
+ * Prepare message for DLQ with original metadata
133
+ * @param message Original message
134
+ * @param originalQueue Original queue name
135
+ * @returns Enhanced message with DLQ metadata
136
+ */
137
+ prepareDLQMessage(message, originalQueue) {
138
+ const now = new Date();
139
+ // Extract original message content and metadata
140
+ const originalContent = message.content ? message.content : message;
141
+ const originalProperties = message.properties || {};
142
+ const originalFields = message.fields || {};
143
+ return {
144
+ originalMessage: originalContent,
145
+ dlqMetadata: {
146
+ originalQueue: originalQueue,
147
+ originalExchange: originalFields.exchange || '',
148
+ originalRoutingKey: originalFields.routingKey || '',
149
+ failedAt: now.toISOString(),
150
+ retryCount: this.getRetryCount(originalProperties) + 1,
151
+ maxRetries: this.config.dlq.maxRetries || 3,
152
+ retryDelay: this.config.dlq.retryDelay || 5000
153
+ },
154
+ originalProperties: originalProperties,
155
+ originalFields: originalFields
156
+ };
157
+ }
158
+ /**
159
+ * Route message to DLQ exchange
160
+ * @param dlqExchange DLQ exchange name
161
+ * @param routingKey Routing key (original queue name)
162
+ * @param message Message to route
163
+ */
164
+ async routeMessageToDLQ(dlqExchange, routingKey, message) {
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
+ // Publish message to DLQ exchange
173
+ const messageBuffer = Buffer.from(JSON.stringify(message));
174
+ const publishOptions = {
175
+ persistent: true,
176
+ timestamp: Date.now(),
177
+ headers: {
178
+ 'x-dlq-routed': true,
179
+ 'x-original-queue': routingKey
180
+ }
181
+ };
182
+ const published = channel.publish(dlqExchange, routingKey, messageBuffer, publishOptions);
183
+ if (!published) {
184
+ throw new Error('Failed to publish message to DLQ - channel buffer full');
185
+ }
186
+ await channel.close();
187
+ }
188
+ catch (error) {
189
+ const errorMessage = `Failed to route message to DLQ exchange '${dlqExchange}': ${error instanceof Error ? error.message : 'Unknown error'}`;
190
+ throw new Error(errorMessage);
191
+ }
192
+ });
193
+ }
194
+ /**
195
+ * Get retry count from message properties
196
+ * @param properties Message properties
197
+ * @returns Current retry count
198
+ */
199
+ getRetryCount(properties) {
200
+ if (!properties || !properties.headers) {
201
+ return 0;
202
+ }
203
+ return properties.headers['x-retry-count'] || 0;
204
+ }
205
+ /**
206
+ * Clear DLQ setup cache (useful for testing)
207
+ */
208
+ clearCache() {
209
+ this.dlqSetupCache.clear();
210
+ this.logger.info('DLQHandler cache cleared');
211
+ }
212
+ /**
213
+ * Get cache statistics for monitoring
214
+ */
215
+ getCacheStats() {
216
+ return {
217
+ setupCache: this.dlqSetupCache.size
218
+ };
219
+ }
220
+ /**
221
+ * Get DLQ configuration
222
+ */
223
+ getDLQConfig() {
224
+ return this.config.dlq;
225
+ }
226
+ }
227
+ exports.DLQHandler = DLQHandler;
228
+ //# sourceMappingURL=DLQHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DLQHandler.js","sourceRoot":"","sources":["../../src/components/DLQHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import { ILogger } from '../interfaces/ILogger';
2
+ import { IConfiguration } from '../interfaces/IConfiguration';
3
+ /**
4
+ * Log levels with numeric values for comparison
5
+ */
6
+ export declare enum LogLevel {
7
+ ERROR = 0,
8
+ WARN = 1,
9
+ INFO = 2,
10
+ DEBUG = 3
11
+ }
12
+ /**
13
+ * Logger class that provides structured logging with configurable levels and formats
14
+ */
15
+ export declare class Logger implements ILogger {
16
+ private static instance;
17
+ private logLevel;
18
+ private format;
19
+ private component?;
20
+ /**
21
+ * Private constructor to enforce singleton pattern
22
+ */
23
+ private constructor();
24
+ /**
25
+ * Get singleton instance of Logger
26
+ */
27
+ static getInstance(config?: IConfiguration['logging'], component?: string): Logger;
28
+ /**
29
+ * Create a new logger instance for a specific component
30
+ */
31
+ static createComponentLogger(component: string, config?: IConfiguration['logging']): Logger;
32
+ /**
33
+ * Log error message with optional context
34
+ */
35
+ error(message: string, context?: any): void;
36
+ /**
37
+ * Log warning message with optional context
38
+ */
39
+ warn(message: string, context?: any): void;
40
+ /**
41
+ * Log info message with optional context
42
+ */
43
+ info(message: string, context?: any): void;
44
+ /**
45
+ * Log debug message with optional context
46
+ */
47
+ debug(message: string, context?: any): void;
48
+ /**
49
+ * Log operation with context (for operation tracking)
50
+ */
51
+ logOperation(operation: string, message: string, context?: any): void;
52
+ /**
53
+ * Log error with stack trace
54
+ */
55
+ logError(message: string, error: Error, context?: any): void;
56
+ /**
57
+ * Log connection state changes
58
+ */
59
+ logConnectionState(state: string, context?: any): void;
60
+ /**
61
+ * Internal logging method
62
+ */
63
+ private log;
64
+ /**
65
+ * Parse log level string to enum value
66
+ */
67
+ private parseLogLevel;
68
+ /**
69
+ * Update logger configuration
70
+ */
71
+ updateConfig(config: IConfiguration['logging']): void;
72
+ /**
73
+ * Reset singleton instance (for testing purposes)
74
+ */
75
+ static resetInstance(): void;
76
+ }
77
+ //# sourceMappingURL=Logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../src/components/Logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D;;GAEG;AACH,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAcD;;GAEG;AACH,qBAAa,MAAO,YAAW,OAAO;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAAC,CAAS;IAE3B;;OAEG;IACH,OAAO;IAQP;;OAEG;WACW,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAOzF;;OAEG;WACW,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,MAAM;IAIlG;;OAEG;IACI,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI;IAIlD;;OAEG;IACI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI;IAIjD;;OAEG;IACI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI;IAIjD;;OAEG;IACI,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI;IAIlD;;OAEG;IACI,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI;IAQ5E;;OAEG;IACI,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI;IAYnE;;OAEG;IACI,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,IAAI;IAQ7D;;OAEG;IACH,OAAO,CAAC,GAAG;IA6DX;;OAEG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;IACI,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,IAAI;IAK5D;;OAEG;WACW,aAAa,IAAI,IAAI;CAGpC"}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Logger = exports.LogLevel = void 0;
4
+ /**
5
+ * Log levels with numeric values for comparison
6
+ */
7
+ var LogLevel;
8
+ (function (LogLevel) {
9
+ LogLevel[LogLevel["ERROR"] = 0] = "ERROR";
10
+ LogLevel[LogLevel["WARN"] = 1] = "WARN";
11
+ LogLevel[LogLevel["INFO"] = 2] = "INFO";
12
+ LogLevel[LogLevel["DEBUG"] = 3] = "DEBUG";
13
+ })(LogLevel || (exports.LogLevel = LogLevel = {}));
14
+ /**
15
+ * Logger class that provides structured logging with configurable levels and formats
16
+ */
17
+ class Logger {
18
+ /**
19
+ * Private constructor to enforce singleton pattern
20
+ */
21
+ constructor(config, component) {
22
+ this.logLevel = this.parseLogLevel(config?.level || 'info');
23
+ this.format = config?.format || 'text';
24
+ if (component) {
25
+ this.component = component;
26
+ }
27
+ }
28
+ /**
29
+ * Get singleton instance of Logger
30
+ */
31
+ static getInstance(config, component) {
32
+ if (!Logger.instance) {
33
+ Logger.instance = new Logger(config, component);
34
+ }
35
+ return Logger.instance;
36
+ }
37
+ /**
38
+ * Create a new logger instance for a specific component
39
+ */
40
+ static createComponentLogger(component, config) {
41
+ return new Logger(config, component);
42
+ }
43
+ /**
44
+ * Log error message with optional context
45
+ */
46
+ error(message, context) {
47
+ this.log(LogLevel.ERROR, 'ERROR', message, context);
48
+ }
49
+ /**
50
+ * Log warning message with optional context
51
+ */
52
+ warn(message, context) {
53
+ this.log(LogLevel.WARN, 'WARN', message, context);
54
+ }
55
+ /**
56
+ * Log info message with optional context
57
+ */
58
+ info(message, context) {
59
+ this.log(LogLevel.INFO, 'INFO', message, context);
60
+ }
61
+ /**
62
+ * Log debug message with optional context
63
+ */
64
+ debug(message, context) {
65
+ this.log(LogLevel.DEBUG, 'DEBUG', message, context);
66
+ }
67
+ /**
68
+ * Log operation with context (for operation tracking)
69
+ */
70
+ logOperation(operation, message, context) {
71
+ const operationContext = {
72
+ operation,
73
+ ...context
74
+ };
75
+ this.info(message, operationContext);
76
+ }
77
+ /**
78
+ * Log error with stack trace
79
+ */
80
+ logError(message, error, context) {
81
+ const errorContext = {
82
+ error: {
83
+ name: error.name,
84
+ message: error.message,
85
+ stack: error.stack
86
+ },
87
+ ...context
88
+ };
89
+ this.error(message, errorContext);
90
+ }
91
+ /**
92
+ * Log connection state changes
93
+ */
94
+ logConnectionState(state, context) {
95
+ const connectionContext = {
96
+ connectionState: state,
97
+ ...context
98
+ };
99
+ this.info(`Connection state changed to: ${state}`, connectionContext);
100
+ }
101
+ /**
102
+ * Internal logging method
103
+ */
104
+ log(level, levelName, message, context) {
105
+ // Check if this log level should be output
106
+ if (level > this.logLevel) {
107
+ return;
108
+ }
109
+ const timestamp = new Date().toISOString();
110
+ if (this.format === 'json') {
111
+ const logEntry = {
112
+ timestamp,
113
+ level: levelName,
114
+ message
115
+ };
116
+ if (context) {
117
+ try {
118
+ // Test if context can be serialized
119
+ JSON.stringify(context);
120
+ logEntry.context = context;
121
+ }
122
+ catch (error) {
123
+ logEntry.context = '[Circular Reference]';
124
+ }
125
+ }
126
+ if (this.component) {
127
+ logEntry.component = this.component;
128
+ }
129
+ console.log(JSON.stringify(logEntry));
130
+ }
131
+ else {
132
+ // Text format
133
+ const componentPrefix = this.component ? `[${this.component}] ` : '';
134
+ let contextSuffix = '';
135
+ if (context) {
136
+ try {
137
+ contextSuffix = ` | Context: ${JSON.stringify(context)}`;
138
+ }
139
+ catch (error) {
140
+ contextSuffix = ` | Context: [Circular Reference]`;
141
+ }
142
+ }
143
+ const logMessage = `${timestamp} [${levelName}] ${componentPrefix}${message}${contextSuffix}`;
144
+ // Use appropriate console method based on level
145
+ switch (level) {
146
+ case LogLevel.ERROR:
147
+ console.error(logMessage);
148
+ break;
149
+ case LogLevel.WARN:
150
+ console.warn(logMessage);
151
+ break;
152
+ case LogLevel.DEBUG:
153
+ console.debug(logMessage);
154
+ break;
155
+ default:
156
+ console.log(logMessage);
157
+ }
158
+ }
159
+ }
160
+ /**
161
+ * Parse log level string to enum value
162
+ */
163
+ parseLogLevel(level) {
164
+ switch (level.toLowerCase()) {
165
+ case 'error':
166
+ return LogLevel.ERROR;
167
+ case 'warn':
168
+ return LogLevel.WARN;
169
+ case 'info':
170
+ return LogLevel.INFO;
171
+ case 'debug':
172
+ return LogLevel.DEBUG;
173
+ default:
174
+ return LogLevel.INFO;
175
+ }
176
+ }
177
+ /**
178
+ * Update logger configuration
179
+ */
180
+ updateConfig(config) {
181
+ this.logLevel = this.parseLogLevel(config?.level || 'info');
182
+ this.format = config?.format || 'text';
183
+ }
184
+ /**
185
+ * Reset singleton instance (for testing purposes)
186
+ */
187
+ static resetInstance() {
188
+ Logger.instance = null;
189
+ }
190
+ }
191
+ exports.Logger = Logger;
192
+ Logger.instance = null;
193
+ //# sourceMappingURL=Logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/components/Logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { IMessagePublisher } from '../interfaces/IMessage';
2
+ import { ConnectionManager } from './ConnectionManager';
3
+ import { ResourceCreator } from './ResourceCreator';
4
+ import { IConfiguration } from '../interfaces/IConfiguration';
5
+ /**
6
+ * MessagePublisher handles message publishing to RabbitMQ exchanges
7
+ * Implements parameter validation, JSON serialization, and automatic exchange creation
8
+ */
9
+ export declare class MessagePublisher implements IMessagePublisher {
10
+ private connectionManager;
11
+ private resourceCreator;
12
+ private logger;
13
+ constructor(connectionManager: ConnectionManager, resourceCreator: ResourceCreator, config?: IConfiguration['logging']);
14
+ /**
15
+ * Publish a message to an exchange
16
+ * @param exchange Exchange name (required)
17
+ * @param routingKey Routing key for message routing (required)
18
+ * @param payload Message payload to be JSON serialized (required)
19
+ * @returns Promise<boolean> - true for success, false for failure
20
+ */
21
+ publish(exchange: string, routingKey: string, payload: any): Promise<boolean>;
22
+ /**
23
+ * Validate publish method parameters
24
+ * @param exchange Exchange name
25
+ * @param routingKey Routing key
26
+ * @param payload Message payload
27
+ */
28
+ private validatePublishParameters;
29
+ /**
30
+ * Serialize payload to JSON string
31
+ * @param payload Payload to serialize
32
+ * @returns JSON string representation
33
+ */
34
+ private serializePayload;
35
+ /**
36
+ * Ensure exchange exists before publishing
37
+ * @param exchange Exchange name
38
+ */
39
+ private ensureExchangeExists;
40
+ /**
41
+ * Log publish errors with detailed context
42
+ * @param error The error that occurred
43
+ * @param exchange Exchange name
44
+ * @param routingKey Routing key
45
+ * @param payload Original payload
46
+ */
47
+ private logPublishError;
48
+ }
49
+ //# sourceMappingURL=MessagePublisher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessagePublisher.d.ts","sourceRoot":"","sources":["../../src/components/MessagePublisher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,MAAM,CAAS;gBAEX,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC;IAMtH;;;;;;OAMG;IACU,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IA6D1F;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IA0BjC;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;;OAGG;YACW,oBAAoB;IAalC;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;CAgBxB"}