amqp-resilient 1.0.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.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +257 -0
  3. package/dist/connection/ConnectionManager.d.ts +84 -0
  4. package/dist/connection/ConnectionManager.d.ts.map +1 -0
  5. package/dist/connection/ConnectionManager.js +312 -0
  6. package/dist/connection/ConnectionManager.js.map +1 -0
  7. package/dist/connection/index.d.ts +2 -0
  8. package/dist/connection/index.d.ts.map +1 -0
  9. package/dist/connection/index.js +2 -0
  10. package/dist/connection/index.js.map +1 -0
  11. package/dist/consumer/BaseConsumer.d.ts +131 -0
  12. package/dist/consumer/BaseConsumer.d.ts.map +1 -0
  13. package/dist/consumer/BaseConsumer.js +398 -0
  14. package/dist/consumer/BaseConsumer.js.map +1 -0
  15. package/dist/consumer/index.d.ts +2 -0
  16. package/dist/consumer/index.d.ts.map +1 -0
  17. package/dist/consumer/index.js +2 -0
  18. package/dist/consumer/index.js.map +1 -0
  19. package/dist/health/HealthService.d.ts +46 -0
  20. package/dist/health/HealthService.d.ts.map +1 -0
  21. package/dist/health/HealthService.js +85 -0
  22. package/dist/health/HealthService.js.map +1 -0
  23. package/dist/health/index.d.ts +2 -0
  24. package/dist/health/index.d.ts.map +1 -0
  25. package/dist/health/index.js +2 -0
  26. package/dist/health/index.js.map +1 -0
  27. package/dist/index.d.ts +11 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +17 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/patterns/CircuitBreaker.d.ts +76 -0
  32. package/dist/patterns/CircuitBreaker.d.ts.map +1 -0
  33. package/dist/patterns/CircuitBreaker.js +156 -0
  34. package/dist/patterns/CircuitBreaker.js.map +1 -0
  35. package/dist/patterns/index.d.ts +2 -0
  36. package/dist/patterns/index.d.ts.map +1 -0
  37. package/dist/patterns/index.js +2 -0
  38. package/dist/patterns/index.js.map +1 -0
  39. package/dist/publisher/BasePublisher.d.ts +87 -0
  40. package/dist/publisher/BasePublisher.d.ts.map +1 -0
  41. package/dist/publisher/BasePublisher.js +275 -0
  42. package/dist/publisher/BasePublisher.js.map +1 -0
  43. package/dist/publisher/index.d.ts +2 -0
  44. package/dist/publisher/index.d.ts.map +1 -0
  45. package/dist/publisher/index.js +2 -0
  46. package/dist/publisher/index.js.map +1 -0
  47. package/dist/types.d.ts +184 -0
  48. package/dist/types.d.ts.map +1 -0
  49. package/dist/types.js +35 -0
  50. package/dist/types.js.map +1 -0
  51. package/package.json +81 -0
@@ -0,0 +1,275 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { CircuitBreaker, CircuitBreakerOpenError } from '../patterns/CircuitBreaker.js';
3
+ /** Default retry configuration */
4
+ const DEFAULTS = {
5
+ MAX_RETRIES: 3,
6
+ INITIAL_RETRY_DELAY: 100,
7
+ MAX_RETRY_DELAY: 5000,
8
+ CIRCUIT_BREAKER_THRESHOLD: 5,
9
+ };
10
+ /**
11
+ * BasePublisher - Base class for AMQP publishers
12
+ * Use this class directly or extend it for specific publishers
13
+ */
14
+ export class BasePublisher {
15
+ connection;
16
+ channel = null;
17
+ isInitialized = false;
18
+ circuitBreaker = null;
19
+ logger;
20
+ exchange;
21
+ exchangeType;
22
+ confirm;
23
+ maxRetries;
24
+ initialRetryDelay;
25
+ maxRetryDelay;
26
+ useCircuitBreaker;
27
+ constructor(connection, options) {
28
+ this.connection = connection;
29
+ this.exchange = options.exchange;
30
+ this.exchangeType = options.exchangeType ?? 'topic';
31
+ this.confirm = options.confirm ?? true;
32
+ this.maxRetries = options.maxRetries ?? DEFAULTS.MAX_RETRIES;
33
+ this.initialRetryDelay = options.initialRetryDelay ?? DEFAULTS.INITIAL_RETRY_DELAY;
34
+ this.maxRetryDelay = options.maxRetryDelay ?? DEFAULTS.MAX_RETRY_DELAY;
35
+ this.useCircuitBreaker = options.useCircuitBreaker ?? true;
36
+ this.logger = options.logger ?? connection.getLogger();
37
+ // Initialize circuit breaker if enabled
38
+ if (this.useCircuitBreaker) {
39
+ this.circuitBreaker = new CircuitBreaker({
40
+ name: `publisher-${this.exchange}`,
41
+ failureThreshold: options.circuitBreakerThreshold ?? DEFAULTS.CIRCUIT_BREAKER_THRESHOLD,
42
+ resetTimeout: 30000,
43
+ successThreshold: 3,
44
+ logger: this.logger,
45
+ });
46
+ }
47
+ }
48
+ /**
49
+ * Initialize the publisher - setup exchange
50
+ */
51
+ async initialize() {
52
+ if (this.isInitialized)
53
+ return;
54
+ try {
55
+ // Get appropriate channel type
56
+ if (this.confirm) {
57
+ this.channel = await this.connection.getConfirmChannel();
58
+ }
59
+ else {
60
+ this.channel = await this.connection.getChannel();
61
+ }
62
+ // Assert the exchange
63
+ await this.channel.assertExchange(this.exchange, this.exchangeType, { durable: true });
64
+ this.isInitialized = true;
65
+ this.logger.info({ exchange: this.exchange, type: this.exchangeType, confirms: this.confirm }, 'Publisher initialized');
66
+ }
67
+ catch (error) {
68
+ this.logger.error({ err: error, exchange: this.exchange }, 'Failed to initialize publisher');
69
+ throw error;
70
+ }
71
+ }
72
+ /**
73
+ * Execute single publish attempt
74
+ */
75
+ async executePublishAttempt(routingKey, message, options) {
76
+ if (this.circuitBreaker) {
77
+ await this.circuitBreaker.execute(() => this.doPublish(routingKey, message, options));
78
+ }
79
+ else {
80
+ await this.doPublish(routingKey, message, options);
81
+ }
82
+ }
83
+ /**
84
+ * Handle publish retry logic
85
+ */
86
+ async handlePublishRetry(routingKey, messageId, retries, lastError) {
87
+ if (retries > this.maxRetries)
88
+ return false;
89
+ const delay = this.calculateRetryDelay(retries);
90
+ this.logger.warn({
91
+ exchange: this.exchange,
92
+ routingKey,
93
+ messageId,
94
+ retry: retries,
95
+ maxRetries: this.maxRetries,
96
+ delayMs: delay,
97
+ error: lastError.message,
98
+ }, 'Retrying publish after failure');
99
+ await this.sleep(delay);
100
+ return true;
101
+ }
102
+ /**
103
+ * Log publish failure after all retries exhausted
104
+ */
105
+ logPublishFailure(routingKey, messageId, retries, error) {
106
+ this.logger.error({
107
+ exchange: this.exchange,
108
+ routingKey,
109
+ messageId,
110
+ retries,
111
+ error: error?.message,
112
+ }, 'Failed to publish message after all retries');
113
+ }
114
+ /**
115
+ * Handle circuit breaker error during publish
116
+ */
117
+ handleCircuitBreakerError(error, routingKey, messageId) {
118
+ this.logger.warn({
119
+ exchange: this.exchange,
120
+ routingKey,
121
+ messageId,
122
+ remainingResetTime: error.remainingResetTime,
123
+ }, 'Publish blocked by circuit breaker');
124
+ throw error;
125
+ }
126
+ /**
127
+ * Publish a message to the exchange
128
+ */
129
+ async publish(routingKey, message, options = {}) {
130
+ const messageId = options.messageId ?? randomUUID();
131
+ const correlationId = options.correlationId ?? randomUUID();
132
+ const publishOptions = { ...options, messageId, correlationId };
133
+ let retries = 0;
134
+ let lastError;
135
+ while (retries <= this.maxRetries) {
136
+ try {
137
+ await this.executePublishAttempt(routingKey, message, publishOptions);
138
+ if (retries > 0) {
139
+ this.logger.info({ exchange: this.exchange, routingKey, messageId, retries }, 'Message published after retry');
140
+ }
141
+ return { success: true, messageId, correlationId, retries };
142
+ }
143
+ catch (error) {
144
+ lastError = error instanceof Error ? error : new Error(String(error));
145
+ if (error instanceof CircuitBreakerOpenError) {
146
+ this.handleCircuitBreakerError(error, routingKey, messageId);
147
+ }
148
+ retries++;
149
+ if (!(await this.handlePublishRetry(routingKey, messageId, retries, lastError))) {
150
+ break;
151
+ }
152
+ }
153
+ }
154
+ this.logPublishFailure(routingKey, messageId, retries, lastError);
155
+ return { success: false, messageId, correlationId, retries, error: lastError };
156
+ }
157
+ /**
158
+ * Publish a message and throw on failure (for critical messages)
159
+ */
160
+ async publishOrThrow(routingKey, message, options = {}) {
161
+ const result = await this.publish(routingKey, message, options);
162
+ if (!result.success) {
163
+ throw result.error ?? new Error('Failed to publish message');
164
+ }
165
+ return result;
166
+ }
167
+ /**
168
+ * Build publish options
169
+ */
170
+ buildPublishOptions(options) {
171
+ return {
172
+ messageId: options.messageId,
173
+ correlationId: options.correlationId,
174
+ persistent: options.persistent ?? true,
175
+ contentType: options.contentType ?? 'application/json',
176
+ timestamp: Date.now(),
177
+ priority: options.priority,
178
+ expiration: options.expiration,
179
+ replyTo: options.replyTo,
180
+ headers: {
181
+ ...options.headers,
182
+ 'x-published-at': new Date().toISOString(),
183
+ 'x-publisher': this.exchange,
184
+ },
185
+ };
186
+ }
187
+ /**
188
+ * Publish with confirm channel (guaranteed delivery)
189
+ */
190
+ async publishWithConfirm(routingKey, content, publishOptions) {
191
+ await new Promise((resolve, reject) => {
192
+ this.channel.publish(this.exchange, routingKey, content, publishOptions, (err) => {
193
+ if (err) {
194
+ reject(err instanceof Error ? err : new Error(String(err)));
195
+ }
196
+ else {
197
+ resolve();
198
+ }
199
+ });
200
+ });
201
+ }
202
+ /**
203
+ * Publish without confirmation (fire and forget)
204
+ */
205
+ async publishWithoutConfirm(routingKey, content, publishOptions) {
206
+ if (!this.channel) {
207
+ throw new Error('Channel not available for publishing');
208
+ }
209
+ const published = this.channel.publish(this.exchange, routingKey, content, publishOptions);
210
+ if (!published) {
211
+ await new Promise((resolve) => {
212
+ this.channel?.once('drain', resolve);
213
+ });
214
+ }
215
+ }
216
+ /**
217
+ * Internal publish implementation
218
+ */
219
+ async doPublish(routingKey, message, options) {
220
+ if (!this.isInitialized) {
221
+ await this.initialize();
222
+ }
223
+ if (!this.channel) {
224
+ throw new Error('Publisher not initialized');
225
+ }
226
+ const content = Buffer.from(JSON.stringify(message));
227
+ const publishOptions = this.buildPublishOptions(options);
228
+ if (this.confirm) {
229
+ await this.publishWithConfirm(routingKey, content, publishOptions);
230
+ }
231
+ else {
232
+ await this.publishWithoutConfirm(routingKey, content, publishOptions);
233
+ }
234
+ this.logger.debug({
235
+ exchange: this.exchange,
236
+ routingKey,
237
+ messageId: options.messageId,
238
+ correlationId: options.correlationId,
239
+ confirms: this.confirm,
240
+ }, 'Message published');
241
+ }
242
+ /**
243
+ * Calculate retry delay with exponential backoff
244
+ */
245
+ calculateRetryDelay(retryCount) {
246
+ const delay = Math.min(this.initialRetryDelay * Math.pow(2, retryCount - 1), this.maxRetryDelay);
247
+ // Add jitter (0-25%)
248
+ const jitter = delay * Math.random() * 0.25;
249
+ return Math.floor(delay + jitter);
250
+ }
251
+ /**
252
+ * Sleep for specified milliseconds
253
+ */
254
+ sleep(ms) {
255
+ return new Promise((resolve) => setTimeout(resolve, ms));
256
+ }
257
+ /**
258
+ * Get publisher stats
259
+ */
260
+ getStats() {
261
+ return {
262
+ exchange: this.exchange,
263
+ isInitialized: this.isInitialized,
264
+ confirm: this.confirm,
265
+ circuitBreakerState: this.circuitBreaker?.getState(),
266
+ };
267
+ }
268
+ /**
269
+ * Reset circuit breaker (useful for testing or manual recovery)
270
+ */
271
+ resetCircuitBreaker() {
272
+ this.circuitBreaker?.reset();
273
+ }
274
+ }
275
+ //# sourceMappingURL=BasePublisher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BasePublisher.js","sourceRoot":"","sources":["../../src/publisher/BasePublisher.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAGxF,kCAAkC;AAClC,MAAM,QAAQ,GAAG;IACf,WAAW,EAAE,CAAC;IACd,mBAAmB,EAAE,GAAG;IACxB,eAAe,EAAE,IAAI;IACrB,yBAAyB,EAAE,CAAC;CAC7B,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,aAAa;IAeH;IAdb,OAAO,GAAoC,IAAI,CAAC;IAChD,aAAa,GAAG,KAAK,CAAC;IACtB,cAAc,GAA0B,IAAI,CAAC;IAClC,MAAM,CAAa;IAErB,QAAQ,CAAS;IACjB,YAAY,CAA4C;IACxD,OAAO,CAAU;IACjB,UAAU,CAAS;IACnB,iBAAiB,CAAS;IAC1B,aAAa,CAAS;IACtB,iBAAiB,CAAU;IAE5C,YACqB,UAA6B,EAChD,OAAyB;QADN,eAAU,GAAV,UAAU,CAAmB;QAGhD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC;QACpD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,QAAQ,CAAC,WAAW,CAAC;QAC7D,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,QAAQ,CAAC,mBAAmB,CAAC;QACnF,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,QAAQ,CAAC,eAAe,CAAC;QACvE,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC;QAC3D,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;QAEvD,wCAAwC;QACxC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC;gBACvC,IAAI,EAAE,aAAa,IAAI,CAAC,QAAQ,EAAE;gBAClC,gBAAgB,EAAE,OAAO,CAAC,uBAAuB,IAAI,QAAQ,CAAC,yBAAyB;gBACvF,YAAY,EAAE,KAAK;gBACnB,gBAAgB,EAAE,CAAC;gBACnB,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO;QAE/B,IAAI,CAAC;YACH,+BAA+B;YAC/B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;YACpD,CAAC;YAED,sBAAsB;YACtB,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAEvF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,EAC5E,uBAAuB,CACxB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,gCAAgC,CAAC,CAAC;YAC7F,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,qBAAqB,CACjC,UAAkB,EAClB,OAAe,EACf,OAAuF;QAEvF,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACxF,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAC9B,UAAkB,EAClB,SAAiB,EACjB,OAAe,EACf,SAAgB;QAEhB,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAE5C,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CACd;YACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU;YACV,SAAS;YACT,KAAK,EAAE,OAAO;YACd,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,SAAS,CAAC,OAAO;SACzB,EACD,gCAAgC,CACjC,CAAC;QACF,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,iBAAiB,CACvB,UAAkB,EAClB,SAAiB,EACjB,OAAe,EACf,KAAa;QAEb,IAAI,CAAC,MAAM,CAAC,KAAK,CACf;YACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU;YACV,SAAS;YACT,OAAO;YACP,KAAK,EAAE,KAAK,EAAE,OAAO;SACtB,EACD,6CAA6C,CAC9C,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,yBAAyB,CAC/B,KAA8B,EAC9B,UAAkB,EAClB,SAAiB;QAEjB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd;YACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU;YACV,SAAS;YACT,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;SAC7C,EACD,oCAAoC,CACrC,CAAC;QACF,MAAM,KAAK,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,UAAkB,EAClB,OAAe,EACf,UAA0B,EAAE;QAE5B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU,EAAE,CAAC;QACpD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,UAAU,EAAE,CAAC;QAC5D,MAAM,cAAc,GAAG,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;QAChE,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,SAA4B,CAAC;QAEjC,OAAO,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;gBACtE,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;oBAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,EAC3D,+BAA+B,CAChC,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;YAC9D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtE,IAAI,KAAK,YAAY,uBAAuB,EAAE,CAAC;oBAC7C,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBAC/D,CAAC;gBACD,OAAO,EAAE,CAAC;gBACV,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;oBAChF,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAClE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACjF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAClB,UAAkB,EAClB,OAAe,EACf,UAA0B,EAAE;QAE5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,OAAuF;QAYvF,OAAO;YACL,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;YACtC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,kBAAkB;YACtD,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE;gBACP,GAAG,OAAO,CAAC,OAAO;gBAClB,gBAAgB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAC1C,aAAa,EAAE,IAAI,CAAC,QAAQ;aAC7B;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAC9B,UAAkB,EAClB,OAAe,EACf,cAAsB;QAEtB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,IAAI,CAAC,OAA0B,CAAC,OAAO,CACtC,IAAI,CAAC,QAAQ,EACb,UAAU,EACV,OAAO,EACP,cAAc,EACd,CAAC,GAAG,EAAE,EAAE;gBACN,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC9D,CAAC;qBAAM,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,qBAAqB,CACjC,UAAkB,EAClB,OAAe,EACf,cAAsB;QAEtB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QAC3F,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS,CACrB,UAAkB,EAClB,OAAe,EACf,OAAuF;QAEvF,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QACrD,MAAM,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAEzD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,CACf;YACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU;YACV,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,QAAQ,EAAE,IAAI,CAAC,OAAO;SACvB,EACD,mBAAmB,CACpB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,UAAkB;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,EACpD,IAAI,CAAC,aAAa,CACnB,CAAC;QACF,qBAAqB;QACrB,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,QAAQ;QAMN,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,mBAAmB,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE;SACrD,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export { BasePublisher } from './BasePublisher.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/publisher/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { BasePublisher } from './BasePublisher.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/publisher/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Core types for amqp-resilient
3
+ */
4
+ /**
5
+ * Logger interface - inject your own logger implementation
6
+ * Compatible with pino, winston, bunyan, console, etc.
7
+ */
8
+ export interface AmqpLogger {
9
+ info(obj: object, msg?: string): void;
10
+ warn(obj: object, msg?: string): void;
11
+ error(obj: object, msg?: string): void;
12
+ debug(obj: object, msg?: string): void;
13
+ }
14
+ /**
15
+ * Connection options
16
+ */
17
+ export interface ConnectionOptions {
18
+ /** Full AMQP URL (alternative to individual params) */
19
+ url?: string;
20
+ /** RabbitMQ host */
21
+ host?: string;
22
+ /** RabbitMQ port (default: 5672) */
23
+ port?: number;
24
+ /** RabbitMQ username */
25
+ username?: string;
26
+ /** RabbitMQ password */
27
+ password?: string;
28
+ /** RabbitMQ virtual host (default: /) */
29
+ vhost?: string;
30
+ /** Connection name for identification (default: default) */
31
+ connectionName?: string;
32
+ /** Prefetch count for channels (default: 10) */
33
+ prefetch?: number;
34
+ /** Connection heartbeat in seconds (default: 60) */
35
+ heartbeat?: number;
36
+ /** Maximum reconnection attempts (0 = unlimited, default: 0) */
37
+ maxReconnectAttempts?: number;
38
+ /** Initial reconnection delay in ms (default: 1000) */
39
+ initialReconnectDelay?: number;
40
+ /** Maximum reconnection delay in ms (default: 60000) */
41
+ maxReconnectDelay?: number;
42
+ /** Logger instance (optional) */
43
+ logger?: AmqpLogger;
44
+ }
45
+ /**
46
+ * Connection status
47
+ */
48
+ export declare enum ConnectionStatus {
49
+ DISCONNECTED = "disconnected",
50
+ CONNECTING = "connecting",
51
+ CONNECTED = "connected",
52
+ RECONNECTING = "reconnecting",
53
+ DEAD = "dead"
54
+ }
55
+ /**
56
+ * Consumer options
57
+ */
58
+ export interface ConsumerOptions {
59
+ /** Queue name to consume from */
60
+ queue: string;
61
+ /** Exchange to bind to */
62
+ exchange: string;
63
+ /** Routing keys for binding */
64
+ routingKeys: string[];
65
+ /** Prefetch count (default: 10) */
66
+ prefetch?: number;
67
+ /** Maximum number of retries (default: 3) */
68
+ maxRetries?: number;
69
+ /** Initial retry delay in ms (default: 1000) */
70
+ initialRetryDelay?: number;
71
+ /** Maximum retry delay in ms (default: 30000) */
72
+ maxRetryDelay?: number;
73
+ /** Whether to use circuit breaker (default: true) */
74
+ useCircuitBreaker?: boolean;
75
+ /** Circuit breaker failure threshold (default: 5) */
76
+ circuitBreakerThreshold?: number;
77
+ /** Exchange type (default: topic) */
78
+ exchangeType?: 'direct' | 'topic' | 'fanout' | 'headers';
79
+ /** Logger instance (optional, inherits from connection if not provided) */
80
+ logger?: AmqpLogger;
81
+ }
82
+ /**
83
+ * Message context passed to consumer handler
84
+ */
85
+ export interface MessageContext {
86
+ /** Routing key */
87
+ routingKey: string;
88
+ /** Message ID */
89
+ messageId: string;
90
+ /** Correlation ID for tracing */
91
+ correlationId?: string;
92
+ /** Current retry count */
93
+ retryCount: number;
94
+ /** Timestamp when message was received */
95
+ receivedAt: Date;
96
+ /** Raw message headers */
97
+ headers: Record<string, unknown>;
98
+ }
99
+ /**
100
+ * Publisher options
101
+ */
102
+ export interface PublisherOptions {
103
+ /** Exchange name to publish to */
104
+ exchange: string;
105
+ /** Exchange type (default: topic) */
106
+ exchangeType?: 'direct' | 'topic' | 'fanout' | 'headers';
107
+ /** Whether to use publisher confirms (default: true) */
108
+ confirm?: boolean;
109
+ /** Maximum number of publish retries (default: 3) */
110
+ maxRetries?: number;
111
+ /** Initial retry delay in ms (default: 100) */
112
+ initialRetryDelay?: number;
113
+ /** Maximum retry delay in ms (default: 5000) */
114
+ maxRetryDelay?: number;
115
+ /** Whether to use circuit breaker (default: true) */
116
+ useCircuitBreaker?: boolean;
117
+ /** Circuit breaker failure threshold (default: 5) */
118
+ circuitBreakerThreshold?: number;
119
+ /** Logger instance (optional, inherits from connection if not provided) */
120
+ logger?: AmqpLogger;
121
+ }
122
+ /**
123
+ * Publish options for individual messages
124
+ */
125
+ export interface PublishOptions {
126
+ /** Correlation ID for message tracing */
127
+ correlationId?: string;
128
+ /** Message ID (auto-generated if not provided) */
129
+ messageId?: string;
130
+ /** Message priority (0-9, higher = more important) */
131
+ priority?: number;
132
+ /** Message expiration in milliseconds */
133
+ expiration?: string;
134
+ /** Custom headers */
135
+ headers?: Record<string, unknown>;
136
+ /** Whether message should be persistent (default: true) */
137
+ persistent?: boolean;
138
+ /** Reply-to queue for RPC patterns */
139
+ replyTo?: string;
140
+ /** Content type (default: application/json) */
141
+ contentType?: string;
142
+ }
143
+ /**
144
+ * Publish result
145
+ */
146
+ export interface PublishResult {
147
+ /** Whether the publish was successful */
148
+ success: boolean;
149
+ /** Message ID */
150
+ messageId: string;
151
+ /** Correlation ID */
152
+ correlationId: string;
153
+ /** Number of retries needed */
154
+ retries: number;
155
+ /** Error if publish failed */
156
+ error?: Error;
157
+ }
158
+ /**
159
+ * Circuit breaker options
160
+ */
161
+ export interface CircuitBreakerOptions {
162
+ /** Name for logging purposes */
163
+ name: string;
164
+ /** Number of failures before opening circuit (default: 5) */
165
+ failureThreshold?: number;
166
+ /** Time in ms to wait before attempting recovery (default: 30000) */
167
+ resetTimeout?: number;
168
+ /** Number of successful calls in half-open state before closing (default: 3) */
169
+ successThreshold?: number;
170
+ /** Time window in ms to count failures (default: 60000) */
171
+ failureWindow?: number;
172
+ /** Logger instance (optional) */
173
+ logger?: AmqpLogger;
174
+ }
175
+ /**
176
+ * Circuit breaker state
177
+ */
178
+ export declare enum CircuitState {
179
+ CLOSED = "CLOSED",
180
+ OPEN = "OPEN",
181
+ HALF_OPEN = "HALF_OPEN"
182
+ }
183
+ export declare const noopLogger: AmqpLogger;
184
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Core types for amqp-resilient
3
+ */
4
+ /**
5
+ * Connection status
6
+ */
7
+ export var ConnectionStatus;
8
+ (function (ConnectionStatus) {
9
+ ConnectionStatus["DISCONNECTED"] = "disconnected";
10
+ ConnectionStatus["CONNECTING"] = "connecting";
11
+ ConnectionStatus["CONNECTED"] = "connected";
12
+ ConnectionStatus["RECONNECTING"] = "reconnecting";
13
+ ConnectionStatus["DEAD"] = "dead";
14
+ })(ConnectionStatus || (ConnectionStatus = {}));
15
+ /**
16
+ * Circuit breaker state
17
+ */
18
+ export var CircuitState;
19
+ (function (CircuitState) {
20
+ CircuitState["CLOSED"] = "CLOSED";
21
+ CircuitState["OPEN"] = "OPEN";
22
+ CircuitState["HALF_OPEN"] = "HALF_OPEN";
23
+ })(CircuitState || (CircuitState = {}));
24
+ /**
25
+ * No-op logger for when no logger is provided
26
+ */
27
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
28
+ const noop = () => { };
29
+ export const noopLogger = {
30
+ info: noop,
31
+ warn: noop,
32
+ error: noop,
33
+ debug: noop,
34
+ };
35
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA6CH;;GAEG;AACH,MAAM,CAAN,IAAY,gBAMX;AAND,WAAY,gBAAgB;IAC1B,iDAA6B,CAAA;IAC7B,6CAAyB,CAAA;IACzB,2CAAuB,CAAA;IACvB,iDAA6B,CAAA;IAC7B,iCAAa,CAAA;AACf,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,QAM3B;AAgID;;GAEG;AACH,MAAM,CAAN,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,iCAAiB,CAAA;IACjB,6BAAa,CAAA;IACb,uCAAuB,CAAA;AACzB,CAAC,EAJW,YAAY,KAAZ,YAAY,QAIvB;AAED;;GAEG;AACH,gEAAgE;AAChE,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;AACtB,MAAM,CAAC,MAAM,UAAU,GAAe;IACpC,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;CACZ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,81 @@
1
+ {
2
+ "name": "amqp-resilient",
3
+ "version": "1.0.0",
4
+ "description": "Production-ready AMQP client with retry, reconnection, and resilience patterns for Node.js",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc -p tsconfig.build.json",
19
+ "dev": "tsc -p tsconfig.build.json --watch",
20
+ "test": "vitest run --exclude tests/integration.test.ts",
21
+ "test:unit": "vitest run --exclude tests/integration.test.ts",
22
+ "test:integration": "vitest run tests/integration.test.ts",
23
+ "test:all": "vitest run",
24
+ "test:watch": "vitest",
25
+ "test:coverage": "vitest run --coverage",
26
+ "lint": "eslint src",
27
+ "lint:fix": "eslint src --fix",
28
+ "format": "prettier --write \"src/**/*.ts\"",
29
+ "format:check": "prettier --check \"src/**/*.ts\"",
30
+ "typecheck": "tsc --noEmit",
31
+ "prepare": "husky",
32
+ "prepublishOnly": "npm run lint && npm run typecheck && npm run test && npm run build"
33
+ },
34
+ "keywords": [
35
+ "amqp",
36
+ "rabbitmq",
37
+ "queue",
38
+ "message-queue",
39
+ "resilient",
40
+ "retry",
41
+ "reconnection",
42
+ "circuit-breaker",
43
+ "consumer",
44
+ "publisher",
45
+ "microservices",
46
+ "typescript",
47
+ "nodejs"
48
+ ],
49
+ "author": "berkeerdo",
50
+ "license": "MIT",
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "git+https://github.com/berkeerdo/amqp-resilient.git"
54
+ },
55
+ "bugs": {
56
+ "url": "https://github.com/berkeerdo/amqp-resilient/issues"
57
+ },
58
+ "homepage": "https://github.com/berkeerdo/amqp-resilient#readme",
59
+ "engines": {
60
+ "node": ">=18.0.0"
61
+ },
62
+ "peerDependencies": {
63
+ "amqplib": ">=0.10.0"
64
+ },
65
+ "devDependencies": {
66
+ "@commitlint/cli": "^19.6.1",
67
+ "@commitlint/config-conventional": "^19.6.0",
68
+ "@eslint/js": "^9.18.0",
69
+ "@types/amqplib": "^0.10.5",
70
+ "@types/node": "^22.0.0",
71
+ "@vitest/coverage-v8": "^2.0.0",
72
+ "amqplib": "^0.10.5",
73
+ "eslint": "^9.18.0",
74
+ "husky": "^9.1.7",
75
+ "lint-staged": "^15.3.0",
76
+ "prettier": "^3.4.2",
77
+ "typescript": "^5.7.0",
78
+ "typescript-eslint": "^8.20.0",
79
+ "vitest": "^2.0.0"
80
+ }
81
+ }