@autofleet/rabbit 3.4.0-beta.2 → 3.4.0-beta.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +3 -3
- package/dist/index.js +54 -54
- package/dist/index.js.map +1 -0
- package/dist/lib/celery.js +1 -0
- package/dist/lib/celery.js.map +1 -0
- package/dist/lib/consts.js +1 -0
- package/dist/lib/consts.js.map +1 -0
- package/dist/lib/rabbitError.js +1 -0
- package/dist/lib/rabbitError.js.map +1 -0
- package/dist/lib/redis.js +1 -0
- package/dist/lib/redis.js.map +1 -0
- package/dist/lib/types.d.ts +1 -1
- package/dist/lib/types.js +1 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utils.js +1 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/logger.js +1 -0
- package/dist/logger.js.map +1 -0
- package/dist/{mock.d.ts → mock/index.d.ts} +1 -1
- package/dist/{mock.js → mock/index.js} +2 -1
- package/dist/mock/index.js.map +1 -0
- package/dist/mock/vitest.d.ts +13 -0
- package/dist/mock/vitest.js +18 -0
- package/dist/mock/vitest.js.map +1 -0
- package/package.json +22 -15
- package/src/index.ts +63 -61
- package/src/lib/types.ts +1 -1
- package/src/{mock.ts → mock/index.ts} +2 -2
- package/src/mock/vitest.ts +24 -0
- package/tsconfig.build.json +5 -0
- package/tsconfig.json +2 -2
- package/vitest.config.ts +16 -0
package/dist/index.d.ts
CHANGED
|
@@ -62,7 +62,6 @@ declare class RabbitMq implements IAfRabbitMq {
|
|
|
62
62
|
publishChannel: ChannelWrapper | null;
|
|
63
63
|
publishChannelSetupPromise: Promise<ChannelWrapper> | null;
|
|
64
64
|
blockReconnect: boolean | null | undefined;
|
|
65
|
-
connection: AmqpConnectionManager | null | undefined;
|
|
66
65
|
publishConnection: ConnectionData;
|
|
67
66
|
consumeConnection: ConnectionData;
|
|
68
67
|
em: EventEmitter;
|
|
@@ -98,7 +97,7 @@ declare class RabbitMq implements IAfRabbitMq {
|
|
|
98
97
|
ack: (channel: ConfirmChannel, msg: ConsumeMessageOrNull, shouldUpdateRedisTimestamp?: boolean, releaseLock?: null) => (userMsg: ConsumeMessage) => Promise<any>;
|
|
99
98
|
nack: (channel: ConfirmChannel, queue: string, options: any, deadQueueOptions: Options.AssertQueue, msg: ConsumeMessageOrNull, releaseLock: any) => (userMsg: ConsumeMessageOrNull, { skipRetry, }?: NackOptions) => Promise<any>;
|
|
100
99
|
getConnection(connection: ConnectionData): Promise<AmqpConnectionManager>;
|
|
101
|
-
getNewChannel({ name, onClose, options, connection, }: newChannelOpts): Promise<ChannelWrapper>;
|
|
100
|
+
getNewChannel({ name, onClose, options, connection, }: newChannelOpts): Promise<import("amqp-connection-manager/dist/types/ChannelWrapper").default>;
|
|
102
101
|
assertChannel({ force, connection }: assertChannelOpts): Promise<ChannelWrapper>;
|
|
103
102
|
assertExchange(exchangeName: string, connection: ConnectionData): Promise<any>;
|
|
104
103
|
getQueueLength(queue: string): Promise<Replies.AssertQueue>;
|
|
@@ -120,7 +119,7 @@ declare class RabbitMq implements IAfRabbitMq {
|
|
|
120
119
|
isConnected(): Promise<boolean>;
|
|
121
120
|
gracefulShutdown(signal: string): Promise<void>;
|
|
122
121
|
private consumeFromRabbitOld;
|
|
123
|
-
getNewChannelOld({ name, onClose, options, connection, }: newChannelOpts): Promise<ChannelWrapper>;
|
|
122
|
+
getNewChannelOld({ name, onClose, options, connection, }: newChannelOpts): Promise<import("amqp-connection-manager/dist/types/ChannelWrapper").default>;
|
|
124
123
|
getConnectionOld(connection: ConnectionData): Promise<AmqpConnectionManager>;
|
|
125
124
|
private saveConsumerOld;
|
|
126
125
|
assertQueueOld(queueName: string, options?: Options.AssertQueue): Promise<any>;
|
|
@@ -128,6 +127,7 @@ declare class RabbitMq implements IAfRabbitMq {
|
|
|
128
127
|
assertChannelOld({ force, connection }: assertChannelOpts): Promise<ChannelWrapper>;
|
|
129
128
|
private deleteQueueOld;
|
|
130
129
|
assertExchangeOld(exchangeName: string, connection: ConnectionData): Promise<any>;
|
|
130
|
+
private maskURL;
|
|
131
131
|
}
|
|
132
132
|
export default RabbitMq;
|
|
133
133
|
export { sendCeleryTaskViaHttp, } from './lib/celery';
|
package/dist/index.js
CHANGED
|
@@ -136,11 +136,11 @@ class RabbitMq {
|
|
|
136
136
|
await this.unlockRedisIfNeeded(releaseLock);
|
|
137
137
|
if (channel && msg) {
|
|
138
138
|
if (!skipRetry
|
|
139
|
-
&& (!msg.properties.headers[consts_1.RETRY_HEADER]
|
|
139
|
+
&& (!msg.properties.headers?.[consts_1.RETRY_HEADER]
|
|
140
140
|
|| parseInt(msg.properties.headers[consts_1.RETRY_HEADER], 10) < options.retries)) {
|
|
141
141
|
await this.sendToQueue(queue, RabbitMq.parseMsg(msg).content, options, {
|
|
142
142
|
...msg.properties.headers,
|
|
143
|
-
[consts_1.RETRY_HEADER]: msg.properties.headers[consts_1.RETRY_HEADER]
|
|
143
|
+
[consts_1.RETRY_HEADER]: msg.properties.headers?.[consts_1.RETRY_HEADER]
|
|
144
144
|
? msg.properties.headers[consts_1.RETRY_HEADER] + 1
|
|
145
145
|
: 1,
|
|
146
146
|
});
|
|
@@ -149,7 +149,7 @@ class RabbitMq {
|
|
|
149
149
|
const deadQueue = `${queue}-dead`;
|
|
150
150
|
await this.sendToQueue(deadQueue, RabbitMq.parseMsg(msg).content, deadQueueOptions, {
|
|
151
151
|
...msg.properties.headers,
|
|
152
|
-
[consts_1.RETRY_HEADER]: msg.properties.headers[consts_1.RETRY_HEADER]
|
|
152
|
+
[consts_1.RETRY_HEADER]: msg.properties.headers?.[consts_1.RETRY_HEADER]
|
|
153
153
|
? msg.properties.headers[consts_1.RETRY_HEADER] + 1
|
|
154
154
|
: 1,
|
|
155
155
|
});
|
|
@@ -163,19 +163,29 @@ class RabbitMq {
|
|
|
163
163
|
});
|
|
164
164
|
}
|
|
165
165
|
};
|
|
166
|
+
this.maskURL = (url) => {
|
|
167
|
+
try {
|
|
168
|
+
const urlObj = new URL(url);
|
|
169
|
+
urlObj.username = '***';
|
|
170
|
+
urlObj.password = '***';
|
|
171
|
+
return urlObj.toString();
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return url;
|
|
175
|
+
}
|
|
176
|
+
};
|
|
166
177
|
this.em = new events_1.EventEmitter();
|
|
167
178
|
this.publishChannel = null;
|
|
168
179
|
this.publishChannelSetupPromise = null;
|
|
169
|
-
this.connection = null;
|
|
170
180
|
this.publishConnection = {
|
|
171
|
-
|
|
181
|
+
amqpConnection: null,
|
|
172
182
|
creatingConnection: false,
|
|
173
183
|
connectionCreatedEventName: 'publishConnectionCreated',
|
|
174
184
|
connectionFailedEventName: 'publishConnectionFailed',
|
|
175
185
|
blockReconnect: false,
|
|
176
186
|
};
|
|
177
187
|
this.consumeConnection = {
|
|
178
|
-
|
|
188
|
+
amqpConnection: null,
|
|
179
189
|
creatingConnection: false,
|
|
180
190
|
connectionCreatedEventName: 'consumeConnectionCreated',
|
|
181
191
|
connectionFailedEventName: 'consumeConnectionFailed',
|
|
@@ -207,17 +217,17 @@ class RabbitMq {
|
|
|
207
217
|
this.oldPublishChannel = null;
|
|
208
218
|
this.oldPublishChannelSetupPromise = null;
|
|
209
219
|
this.oldPublishConnection = {
|
|
210
|
-
|
|
220
|
+
amqpConnection: null,
|
|
211
221
|
creatingConnection: false,
|
|
212
|
-
connectionCreatedEventName: '
|
|
213
|
-
connectionFailedEventName: '
|
|
222
|
+
connectionCreatedEventName: 'oldPublishConnectionCreated',
|
|
223
|
+
connectionFailedEventName: 'oldPublishConnectionFailed',
|
|
214
224
|
blockReconnect: false,
|
|
215
225
|
};
|
|
216
226
|
this.oldConsumeConnection = {
|
|
217
|
-
|
|
227
|
+
amqpConnection: null,
|
|
218
228
|
creatingConnection: false,
|
|
219
|
-
connectionCreatedEventName: '
|
|
220
|
-
connectionFailedEventName: '
|
|
229
|
+
connectionCreatedEventName: 'oldConsumeConnectionCreated',
|
|
230
|
+
connectionFailedEventName: 'oldConsumeConnectionFailed',
|
|
221
231
|
blockReconnect: false,
|
|
222
232
|
};
|
|
223
233
|
this.oldCreatingConnection = false;
|
|
@@ -230,7 +240,7 @@ class RabbitMq {
|
|
|
230
240
|
}
|
|
231
241
|
async getConnection(connection) {
|
|
232
242
|
return new Promise(async (resolve, reject) => {
|
|
233
|
-
const {
|
|
243
|
+
const { amqpConnection: connectionLocal, creatingConnection, connectionCreatedEventName, connectionFailedEventName, blockReconnect, } = connection;
|
|
234
244
|
if (blockReconnect) {
|
|
235
245
|
debug('rabbit: block reconnect');
|
|
236
246
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -268,13 +278,7 @@ class RabbitMq {
|
|
|
268
278
|
const newConnection = await (0, amqp_connection_manager_1.connect)(defaultUrls, {
|
|
269
279
|
findServers,
|
|
270
280
|
});
|
|
271
|
-
connection.
|
|
272
|
-
if (connection === this.publishConnection) {
|
|
273
|
-
debug('rabbit: publishConnection set');
|
|
274
|
-
}
|
|
275
|
-
else if (connection === this.consumeConnection) {
|
|
276
|
-
debug('rabbit: consumeConnection set');
|
|
277
|
-
}
|
|
281
|
+
connection.amqpConnection = newConnection;
|
|
278
282
|
newConnection.on('error', (err) => {
|
|
279
283
|
logger_1.default.error('rabbit: connection error', { err });
|
|
280
284
|
if (!isResolved) {
|
|
@@ -285,6 +289,9 @@ class RabbitMq {
|
|
|
285
289
|
});
|
|
286
290
|
newConnection.on('connectFailed', (err) => {
|
|
287
291
|
this.consumersTags = [];
|
|
292
|
+
if (typeof err.url === 'string') {
|
|
293
|
+
err.url = this.maskURL(err.url);
|
|
294
|
+
}
|
|
288
295
|
logger_1.default.error('rabbit: connection connectFailed', { err, advice: 'Check if the vhost exist', vhost: this.vhost });
|
|
289
296
|
if (!isResolved) {
|
|
290
297
|
isResolved = true;
|
|
@@ -307,7 +314,7 @@ class RabbitMq {
|
|
|
307
314
|
newConnection.once('connect', async () => {
|
|
308
315
|
debug('rabbit: connection established');
|
|
309
316
|
connection.creatingConnection = false;
|
|
310
|
-
this.em.emit(connectionCreatedEventName,
|
|
317
|
+
this.em.emit(connectionCreatedEventName, newConnection);
|
|
311
318
|
isResolved = true;
|
|
312
319
|
resolve(newConnection);
|
|
313
320
|
});
|
|
@@ -322,7 +329,7 @@ class RabbitMq {
|
|
|
322
329
|
logger_1.default.error(`rabbit: error on get connection for new channel ${name} `, { e });
|
|
323
330
|
throw e;
|
|
324
331
|
}
|
|
325
|
-
const channel = localConnection
|
|
332
|
+
const channel = localConnection?.createChannel({ ...options });
|
|
326
333
|
(0, events_1.once)(channel, 'close').then((args) => {
|
|
327
334
|
logger_1.default.error(`rabbit: channel ${name} closed`);
|
|
328
335
|
onClose?.(args);
|
|
@@ -380,7 +387,7 @@ class RabbitMq {
|
|
|
380
387
|
if (!channel) {
|
|
381
388
|
throw new rabbitError_1.default('channel is not defined');
|
|
382
389
|
}
|
|
383
|
-
debug('rabbit: getting queue length', { queue, connected: this.
|
|
390
|
+
debug('rabbit: getting queue length', { queue, connected: this.oldPublishConnection.amqpConnection?.isConnected() });
|
|
384
391
|
return channel?.checkQueue(queue);
|
|
385
392
|
}
|
|
386
393
|
async deleteQueue(queue, connection) {
|
|
@@ -474,7 +481,7 @@ class RabbitMq {
|
|
|
474
481
|
// Used by the microservices to consume messages from the queue
|
|
475
482
|
async consume(queue, callback, options) {
|
|
476
483
|
// TODO: [QUORUM-PHASE-3] Use only the implementation of consumeNew and delete consumeNew and consumeOld
|
|
477
|
-
if (options?.isQuorumQueue !== false) {
|
|
484
|
+
if (options?.isQuorumQueue !== false && process.env.DISABLE_QUORUM_QUEUES !== 'true') {
|
|
478
485
|
await this.assertVHost();
|
|
479
486
|
await this.consumeNew(queue, callback, options);
|
|
480
487
|
}
|
|
@@ -599,7 +606,7 @@ class RabbitMq {
|
|
|
599
606
|
RabbitMq.validateName('queue', queue);
|
|
600
607
|
const { limit, deadMessageTtl } = optionsWithDefaults;
|
|
601
608
|
// TODO: [QUORUM-PHASE-3] Delete the if statement after all the queues are created as quorum queues
|
|
602
|
-
if (options?.isQuorumQueue !== false) {
|
|
609
|
+
if (options?.isQuorumQueue !== false && process.env.DISABLE_QUORUM_QUEUES !== 'true') {
|
|
603
610
|
await this.assertVHost();
|
|
604
611
|
await this.saveConsumer(queue, callback, options);
|
|
605
612
|
const channel = await this.getNewChannel({
|
|
@@ -675,26 +682,26 @@ class RabbitMq {
|
|
|
675
682
|
}
|
|
676
683
|
// TODO: [QUORUM-PHASE-2] After changing the publish from old to new change from the old to the new implementation
|
|
677
684
|
async isConnected() {
|
|
678
|
-
debug('rabbit: start is connected');
|
|
679
|
-
const
|
|
680
|
-
const
|
|
681
|
-
const
|
|
682
|
-
if (!
|
|
683
|
-
logger_1.default.error('rabbit: isConnected - false');
|
|
685
|
+
debug('rabbit: start old is connected');
|
|
686
|
+
const oldConsumeConnection = await this.getConnectionOld(this.oldConsumeConnection);
|
|
687
|
+
const oldPublishConnection = await this.getConnectionOld(this.oldPublishConnection);
|
|
688
|
+
const oldIsConnected = oldConsumeConnection.isConnected() && oldPublishConnection.isConnected();
|
|
689
|
+
if (!oldIsConnected) {
|
|
690
|
+
logger_1.default.error('rabbit: old isConnected - false');
|
|
684
691
|
return false;
|
|
685
692
|
}
|
|
686
|
-
const
|
|
693
|
+
const oldChannel = await this.assertChannelOld({ connection: this.oldPublishConnection });
|
|
687
694
|
try {
|
|
688
695
|
await Promise.all([
|
|
689
|
-
|
|
690
|
-
...this.oldConsumers.map((c) =>
|
|
696
|
+
oldChannel.waitForConnect(),
|
|
697
|
+
...this.oldConsumers.map((c) => oldChannel.checkQueue(c.queue)),
|
|
691
698
|
]);
|
|
692
699
|
}
|
|
693
700
|
catch (e) {
|
|
694
|
-
logger_1.default.error('rabbit: isConnected - false');
|
|
701
|
+
logger_1.default.error('rabbit: old isConnected - false');
|
|
695
702
|
return false;
|
|
696
703
|
}
|
|
697
|
-
logger_1.default.debug('rabbit: isConnected - true');
|
|
704
|
+
logger_1.default.debug('rabbit: old isConnected - true');
|
|
698
705
|
return true;
|
|
699
706
|
}
|
|
700
707
|
async gracefulShutdown(signal) {
|
|
@@ -815,8 +822,10 @@ class RabbitMq {
|
|
|
815
822
|
logger_1.default.error(`rabbit: error on get connection for new channel ${name} `, { e });
|
|
816
823
|
throw e;
|
|
817
824
|
}
|
|
818
|
-
|
|
819
|
-
|
|
825
|
+
if (!localConnection) {
|
|
826
|
+
throw new Error(`rabbit: couldnt get connection for new channel ${name}`);
|
|
827
|
+
}
|
|
828
|
+
const channel = localConnection?.createChannel({ ...options });
|
|
820
829
|
(0, events_1.once)(channel, 'close').then((args) => {
|
|
821
830
|
logger_1.default.error(`rabbit: channel ${name} closed`);
|
|
822
831
|
onClose?.(args);
|
|
@@ -833,13 +842,7 @@ class RabbitMq {
|
|
|
833
842
|
}
|
|
834
843
|
async getConnectionOld(connection) {
|
|
835
844
|
return new Promise(async (resolve, reject) => {
|
|
836
|
-
const {
|
|
837
|
-
if (connection === this.oldPublishConnection) {
|
|
838
|
-
debug('rabbit: getConnectionOld publish', { connectionLocal, creatingConnection, blockReconnect });
|
|
839
|
-
}
|
|
840
|
-
else if (connection === this.oldConsumeConnection) {
|
|
841
|
-
debug('rabbit: getConnectionOld consume', { connectionLocal, creatingConnection, blockReconnect });
|
|
842
|
-
}
|
|
845
|
+
const { amqpConnection: connectionLocal, creatingConnection, connectionCreatedEventName, connectionFailedEventName, blockReconnect, } = connection;
|
|
843
846
|
if (blockReconnect) {
|
|
844
847
|
debug('rabbit: block reconnect');
|
|
845
848
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -877,13 +880,7 @@ class RabbitMq {
|
|
|
877
880
|
const newConnection = await (0, amqp_connection_manager_1.connect)(defaultUrls, {
|
|
878
881
|
findServers,
|
|
879
882
|
});
|
|
880
|
-
connection.
|
|
881
|
-
if (connection === this.oldPublishConnection) {
|
|
882
|
-
debug('rabbit: oldPublishConnection set');
|
|
883
|
-
}
|
|
884
|
-
else if (connection === this.oldConsumeConnection) {
|
|
885
|
-
debug('rabbit: oldConsumeConnection set');
|
|
886
|
-
}
|
|
883
|
+
connection.amqpConnection = newConnection;
|
|
887
884
|
newConnection.on('error', (err) => {
|
|
888
885
|
logger_1.default.error('rabbit: connection error', { err });
|
|
889
886
|
if (!isResolved) {
|
|
@@ -894,6 +891,9 @@ class RabbitMq {
|
|
|
894
891
|
});
|
|
895
892
|
newConnection.on('connectFailed', (err) => {
|
|
896
893
|
this.oldConsumersTags = [];
|
|
894
|
+
if (typeof err.url === 'string') {
|
|
895
|
+
err.url = this.maskURL(err.url);
|
|
896
|
+
}
|
|
897
897
|
logger_1.default.error('rabbit: connection connectFailed', { err });
|
|
898
898
|
if (!isResolved) {
|
|
899
899
|
isResolved = true;
|
|
@@ -915,7 +915,7 @@ class RabbitMq {
|
|
|
915
915
|
newConnection.once('connect', async () => {
|
|
916
916
|
debug('rabbit: connection established');
|
|
917
917
|
connection.creatingConnection = false;
|
|
918
|
-
this.oldEm.emit(connectionCreatedEventName,
|
|
918
|
+
this.oldEm.emit(connectionCreatedEventName, newConnection);
|
|
919
919
|
isResolved = true;
|
|
920
920
|
resolve(newConnection);
|
|
921
921
|
});
|
|
@@ -994,7 +994,6 @@ class RabbitMq {
|
|
|
994
994
|
logger_1.default.error('rabbit: channel error', { err });
|
|
995
995
|
});
|
|
996
996
|
if (this.oldPublishConnection === connection) {
|
|
997
|
-
debug('rabbit: a new channel assigned to the oldPublishChannel', { connection });
|
|
998
997
|
this.oldPublishChannel = channel;
|
|
999
998
|
}
|
|
1000
999
|
resolve(channel);
|
|
@@ -1031,3 +1030,4 @@ class RabbitMq {
|
|
|
1031
1030
|
exports.default = RabbitMq;
|
|
1032
1031
|
var celery_1 = require("./lib/celery");
|
|
1033
1032
|
Object.defineProperty(exports, "sendCeleryTaskViaHttp", { enumerable: true, get: function () { return celery_1.sendCeleryTaskViaHttp; } });
|
|
1033
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/celery.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"celery.js","sourceRoot":"","sources":["../../src/lib/celery.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAyC;AACzC,uDAA+B;AAC/B,4BAA4B;AAC5B,MAAM,MAAM,GAAG;IACb,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,WAAW;IACtD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO;IAClD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO;CAC1C,CAAC;AAoCX,KAAK,UAAU,qBAAqB,CAClC,IAAc,EACd,EAAE,QAAQ,EAAE,SAAS,EAAmB;IAExC,MAAM,MAAM,GAAG,UAAU,MAAM,CAAC,IAAI,8CAA8C,CAAC;IAEnF,MAAM,OAAO,GAAgB;QAC3B,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,IAAA,wBAAU,GAAE;QAChB,IAAI,EAAE,CAAC,IAAI,CAAC;KACb,CAAC;IAEF,MAAM,OAAO,GAAmB;QAC9B,UAAU,EAAE;YACV,aAAa,EAAE,CAAC;YAChB,YAAY,EAAE,kBAAkB;SACjC;QACD,WAAW,EAAE,SAAS;QACtB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAChC,gBAAgB,EAAE,QAAQ;KAC3B,CAAC;IAEF,IAAI;QACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;YACnC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;aAClG;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,EAAE,EAAE;YACf,MAAM,MAAM,GAAoB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtD,gBAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;SACxD;aAAM;YACL,gBAAM,CAAC,KAAK,CAAC,2CAA2C,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3E,gBAAM,CAAC,KAAK,CAAC,aAAa,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;SACpD;KACF;IAAC,OAAO,KAAK,EAAE;QACd,gBAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/F,MAAM,KAAK,CAAC;KACb;AACH,CAAC;AAEQ,sDAAqB"}
|
package/dist/lib/consts.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/lib/consts.ts"],"names":[],"mappings":";;;AAAa,QAAA,yBAAyB,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;AAC5C,QAAA,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC;AAChC,QAAA,YAAY,GAAG,eAAe,CAAC;AAC/B,QAAA,cAAc,GAAG,YAAY,CAAC;AAC9B,QAAA,mBAAmB,GAAG,cAAc,CAAC;AACrC,QAAA,oBAAoB,GAAG,oBAAoB,CAAC;AAC5C,QAAA,WAAW,GAAG,YAAY,CAAC;AAC3B,QAAA,6BAA6B,GAAG,KAAK,CAAC;AACtC,QAAA,eAAe,GAAG;IAC7B,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,cAAc,EAAE,iCAAyB;IACzC,WAAW,EAAE,4BAAoB;IACjC,kBAAkB,EAAE,qCAA6B;IACjD,YAAY,EAAE,IAAI;IAClB,iBAAiB,EAAE,KAAK;CACzB,CAAC"}
|
package/dist/lib/rabbitError.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rabbitError.js","sourceRoot":"","sources":["../../src/lib/rabbitError.ts"],"names":[],"mappings":";;AAAA,MAAqB,WAAY,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AALD,8BAKC"}
|
package/dist/lib/redis.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/lib/redis.ts"],"names":[],"mappings":";;;;;AAAA,wDAAgC;AAEhC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAE/B,kBAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACnD,kBAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAQ7C,MAAM,gBAAgB,GAAG,CAAC,MAAmB,EAAO,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAElF,kBAAe,gBAAgB,CAAC"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ export type AfConsumer = {
|
|
|
44
44
|
};
|
|
45
45
|
export declare const CONSUMER_DEFAULT_OPTIONS: Options.Consume;
|
|
46
46
|
export type ConnectionData = {
|
|
47
|
-
|
|
47
|
+
amqpConnection: AmqpConnectionManager | null;
|
|
48
48
|
creatingConnection: boolean;
|
|
49
49
|
connectionCreatedEventName: string;
|
|
50
50
|
connectionFailedEventName: string;
|
package/dist/lib/types.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":";;;AAsDA,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAEtD,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAE3C,QAAA,wBAAwB,GAAoB;IACvD,SAAS,EAAE;QACT,CAAC,qBAAqB,CAAC,EAAE,QAAQ;QACjC,CAAC,sBAAsB,CAAC,EAAE,QAAQ;KACnC;CACF,CAAC"}
|
package/dist/lib/utils.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":";;;AAGO,MAAM,oBAAoB,GAAG,KAAK,EACvC,CAAkC,EAClC,YAAoB,EACa,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AAHlE,QAAA,oBAAoB,wBAG8C;AAExE,MAAM,gBAAgB,GAAG,CAAC,QAAmB,EAAE,EAAE,CAAC,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC5F,YAAY,CAAC,KAAK,IAAI,EAAE;QACtB,IAAI;YACF,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,CAAC;SAChB;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,CAAC,KAAK,CAAC,CAAC;SACf;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AATU,QAAA,gBAAgB,oBAS1B;AACI,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;AAAhD,QAAA,IAAI,QAA4C"}
|
package/dist/logger.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;;;AAAA,+DAAuC;AAEvC,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AAExB,kBAAe,MAAM,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
// eslint-disable-next-line import/no-
|
|
3
|
+
// eslint-disable-next-line import/no-unresolved
|
|
4
4
|
require("jest");
|
|
5
5
|
class RabbitMq {
|
|
6
6
|
constructor() {
|
|
@@ -16,3 +16,4 @@ class RabbitMq {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
exports.default = RabbitMq;
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mock/index.ts"],"names":[],"mappings":";;AAAA,gDAAgD;AAChD,gBAAc;AAGd,MAAM,QAAQ;IAAd;QACE,QAAG,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;QAErB,SAAI,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;QAEtB,kBAAa,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;QAE/B,mBAAc,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;QAEhC,gBAAW,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;QAE7B,YAAO,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;QAEzB,wBAAmB,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;QAErC,YAAO,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;QAEzB,gBAAW,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;IAC/B,CAAC;CAAA;AAED,kBAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IAfRabbitMq } from '../index';
|
|
2
|
+
declare class RabbitMq implements IAfRabbitMq {
|
|
3
|
+
ack: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
4
|
+
nack: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
5
|
+
assertChannel: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
6
|
+
assertExchange: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
7
|
+
assertQueue: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
8
|
+
consume: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
9
|
+
consumeFromExchange: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
10
|
+
publish: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
11
|
+
sendToQueue: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
12
|
+
}
|
|
13
|
+
export default RabbitMq;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
class RabbitMq {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.ack = vitest_1.vi.fn();
|
|
7
|
+
this.nack = vitest_1.vi.fn();
|
|
8
|
+
this.assertChannel = vitest_1.vi.fn();
|
|
9
|
+
this.assertExchange = vitest_1.vi.fn();
|
|
10
|
+
this.assertQueue = vitest_1.vi.fn();
|
|
11
|
+
this.consume = vitest_1.vi.fn();
|
|
12
|
+
this.consumeFromExchange = vitest_1.vi.fn();
|
|
13
|
+
this.publish = vitest_1.vi.fn();
|
|
14
|
+
this.sendToQueue = vitest_1.vi.fn();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.default = RabbitMq;
|
|
18
|
+
//# sourceMappingURL=vitest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../src/mock/vitest.ts"],"names":[],"mappings":";;AAAA,mCAA4B;AAG5B,MAAM,QAAQ;IAAd;QACE,QAAG,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAEd,SAAI,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAEf,kBAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAExB,mBAAc,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAEzB,gBAAW,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAEtB,YAAO,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAElB,wBAAmB,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAE9B,YAAO,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAElB,gBAAW,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;IACxB,CAAC;CAAA;AAED,kBAAe,QAAQ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autofleet/rabbit",
|
|
3
|
-
"version": "3.4.0-beta.
|
|
3
|
+
"version": "3.4.0-beta.20",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"engines": {
|
|
@@ -10,40 +10,47 @@
|
|
|
10
10
|
"postinstall": "echo '\\033[0;31m\nWARNING: in case of migrating to new version of @autofleet/rabbit \nyou might have to delete existing queues or the deployment will fail.\\033[0m\n'",
|
|
11
11
|
"start": "ts-node src/index.ts",
|
|
12
12
|
"example": "ts-node src/example.ts",
|
|
13
|
-
"build": "rm -rf dist && tsc",
|
|
14
|
-
"linter": "
|
|
15
|
-
"test": "
|
|
16
|
-
"test-local": "RABBITMQ_SERVICE_HOST=localhost:5672
|
|
17
|
-
"coverage": "
|
|
13
|
+
"build": "rm -rf dist && tsc -p tsconfig.build.json",
|
|
14
|
+
"linter": "eslint .",
|
|
15
|
+
"test": "vitest",
|
|
16
|
+
"test-local": "RABBITMQ_SERVICE_HOST=localhost:5672 node --inspect-brk ./node_modules/.bin/vitest --testTimeout=10000000000",
|
|
17
|
+
"coverage": "vitest --coverage",
|
|
18
18
|
"dev": "nodemon"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@autofleet/zehut": "^3.1.2",
|
|
22
|
-
"amqp-connection-manager": "4.1.
|
|
23
|
-
"amqplib": "0.10.
|
|
22
|
+
"amqp-connection-manager": "4.1.14",
|
|
23
|
+
"amqplib": "0.10.5",
|
|
24
24
|
"bluebird": "^3.7.2",
|
|
25
|
-
"moment": "^2.
|
|
25
|
+
"moment": "^2.30.1",
|
|
26
26
|
"redis": "^3.1.2",
|
|
27
27
|
"redis-lock": "^0.1.4"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
|
-
"@autofleet/logger": "*"
|
|
30
|
+
"@autofleet/logger": "*",
|
|
31
|
+
"jest": "*"
|
|
32
|
+
},
|
|
33
|
+
"peerDependenciesMeta": {
|
|
34
|
+
"jest": {
|
|
35
|
+
"optional": true
|
|
36
|
+
}
|
|
31
37
|
},
|
|
32
38
|
"devDependencies": {
|
|
33
39
|
"@autofleet/logger": "4.0.6",
|
|
34
|
-
"@types/amqplib": "0.
|
|
40
|
+
"@types/amqplib": "0.10.7",
|
|
41
|
+
"@types/bluebird": "^3.5.42",
|
|
35
42
|
"@types/jest": "^29.5.12",
|
|
36
43
|
"@types/node": "^20.14.11",
|
|
37
44
|
"@typescript-eslint/eslint-plugin": "^4.8.1",
|
|
45
|
+
"@vitest/coverage-v8": "^3.1.3",
|
|
38
46
|
"eslint": "^7.13.0",
|
|
39
47
|
"eslint-config-airbnb-typescript": "^12.0.0",
|
|
40
48
|
"eslint-plugin-import": "^2.22.1",
|
|
41
|
-
"jest": "^29.7.0",
|
|
42
49
|
"node-tcp-proxy": "^0.0.28",
|
|
43
|
-
"ts-jest": "^29.2.3",
|
|
44
50
|
"ts-node": "^8.6.2",
|
|
45
|
-
"typescript": "^4.9.5"
|
|
51
|
+
"typescript": "^4.9.5",
|
|
52
|
+
"vitest": "^3.1.3"
|
|
46
53
|
},
|
|
47
54
|
"author": "",
|
|
48
|
-
"license": "
|
|
55
|
+
"license": "Proprietary"
|
|
49
56
|
}
|
package/src/index.ts
CHANGED
|
@@ -149,8 +149,6 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
149
149
|
|
|
150
150
|
blockReconnect: boolean | null | undefined
|
|
151
151
|
|
|
152
|
-
connection: AmqpConnectionManager | null | undefined
|
|
153
|
-
|
|
154
152
|
publishConnection: ConnectionData
|
|
155
153
|
|
|
156
154
|
consumeConnection: ConnectionData
|
|
@@ -213,16 +211,15 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
213
211
|
this.em = new EventEmitter();
|
|
214
212
|
this.publishChannel = null;
|
|
215
213
|
this.publishChannelSetupPromise = null;
|
|
216
|
-
this.connection = null;
|
|
217
214
|
this.publishConnection = {
|
|
218
|
-
|
|
215
|
+
amqpConnection: null,
|
|
219
216
|
creatingConnection: false,
|
|
220
217
|
connectionCreatedEventName: 'publishConnectionCreated',
|
|
221
218
|
connectionFailedEventName: 'publishConnectionFailed',
|
|
222
219
|
blockReconnect: false,
|
|
223
220
|
};
|
|
224
221
|
this.consumeConnection = {
|
|
225
|
-
|
|
222
|
+
amqpConnection: null,
|
|
226
223
|
creatingConnection: false,
|
|
227
224
|
connectionCreatedEventName: 'consumeConnectionCreated',
|
|
228
225
|
connectionFailedEventName: 'consumeConnectionFailed',
|
|
@@ -256,17 +253,17 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
256
253
|
this.oldPublishChannel = null;
|
|
257
254
|
this.oldPublishChannelSetupPromise = null;
|
|
258
255
|
this.oldPublishConnection = {
|
|
259
|
-
|
|
256
|
+
amqpConnection: null,
|
|
260
257
|
creatingConnection: false,
|
|
261
|
-
connectionCreatedEventName: '
|
|
262
|
-
connectionFailedEventName: '
|
|
258
|
+
connectionCreatedEventName: 'oldPublishConnectionCreated',
|
|
259
|
+
connectionFailedEventName: 'oldPublishConnectionFailed',
|
|
263
260
|
blockReconnect: false,
|
|
264
261
|
};
|
|
265
262
|
this.oldConsumeConnection = {
|
|
266
|
-
|
|
263
|
+
amqpConnection: null,
|
|
267
264
|
creatingConnection: false,
|
|
268
|
-
connectionCreatedEventName: '
|
|
269
|
-
connectionFailedEventName: '
|
|
265
|
+
connectionCreatedEventName: 'oldConsumeConnectionCreated',
|
|
266
|
+
connectionFailedEventName: 'oldConsumeConnectionFailed',
|
|
270
267
|
blockReconnect: false,
|
|
271
268
|
};
|
|
272
269
|
this.oldCreatingConnection = false;
|
|
@@ -378,13 +375,13 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
378
375
|
if (
|
|
379
376
|
!skipRetry
|
|
380
377
|
&& (
|
|
381
|
-
!msg.properties.headers[RETRY_HEADER]
|
|
378
|
+
!msg.properties.headers?.[RETRY_HEADER]
|
|
382
379
|
|| parseInt(msg.properties.headers[RETRY_HEADER], 10) < options.retries
|
|
383
380
|
)
|
|
384
381
|
) {
|
|
385
382
|
await this.sendToQueue(queue, RabbitMq.parseMsg(msg).content, options, {
|
|
386
383
|
...msg.properties.headers,
|
|
387
|
-
[RETRY_HEADER]: msg.properties.headers[RETRY_HEADER]
|
|
384
|
+
[RETRY_HEADER]: msg.properties.headers?.[RETRY_HEADER]
|
|
388
385
|
? msg.properties.headers[RETRY_HEADER] + 1
|
|
389
386
|
: 1,
|
|
390
387
|
});
|
|
@@ -392,7 +389,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
392
389
|
const deadQueue = `${queue}-dead`;
|
|
393
390
|
await this.sendToQueue(deadQueue, RabbitMq.parseMsg(msg).content, deadQueueOptions, {
|
|
394
391
|
...msg.properties.headers,
|
|
395
|
-
[RETRY_HEADER]: msg.properties.headers[RETRY_HEADER]
|
|
392
|
+
[RETRY_HEADER]: msg.properties.headers?.[RETRY_HEADER]
|
|
396
393
|
? msg.properties.headers[RETRY_HEADER] + 1
|
|
397
394
|
: 1,
|
|
398
395
|
});
|
|
@@ -409,12 +406,13 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
409
406
|
async getConnection(connection: ConnectionData) {
|
|
410
407
|
return new Promise<AmqpConnectionManager>(async (resolve, reject) => {
|
|
411
408
|
const {
|
|
412
|
-
|
|
409
|
+
amqpConnection: connectionLocal,
|
|
413
410
|
creatingConnection,
|
|
414
411
|
connectionCreatedEventName,
|
|
415
412
|
connectionFailedEventName,
|
|
416
413
|
blockReconnect,
|
|
417
414
|
} = connection;
|
|
415
|
+
|
|
418
416
|
if (blockReconnect) {
|
|
419
417
|
debug('rabbit: block reconnect');
|
|
420
418
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -456,12 +454,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
456
454
|
findServers,
|
|
457
455
|
});
|
|
458
456
|
|
|
459
|
-
connection.
|
|
460
|
-
if (connection === this.publishConnection) {
|
|
461
|
-
debug('rabbit: publishConnection set');
|
|
462
|
-
} else if (connection === this.consumeConnection) {
|
|
463
|
-
debug('rabbit: consumeConnection set');
|
|
464
|
-
}
|
|
457
|
+
connection.amqpConnection = newConnection;
|
|
465
458
|
newConnection.on('error', (err) => {
|
|
466
459
|
logger.error('rabbit: connection error', { err });
|
|
467
460
|
if (!isResolved) {
|
|
@@ -473,6 +466,9 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
473
466
|
|
|
474
467
|
newConnection.on('connectFailed', (err) => {
|
|
475
468
|
this.consumersTags = [];
|
|
469
|
+
if (typeof err.url === 'string') {
|
|
470
|
+
err.url = this.maskURL(err.url);
|
|
471
|
+
}
|
|
476
472
|
logger.error('rabbit: connection connectFailed', { err, advice: 'Check if the vhost exist', vhost: this.vhost });
|
|
477
473
|
if (!isResolved) {
|
|
478
474
|
isResolved = true;
|
|
@@ -496,7 +492,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
496
492
|
newConnection.once('connect', async () => {
|
|
497
493
|
debug('rabbit: connection established');
|
|
498
494
|
connection.creatingConnection = false;
|
|
499
|
-
this.em.emit(connectionCreatedEventName,
|
|
495
|
+
this.em.emit(connectionCreatedEventName, newConnection);
|
|
500
496
|
isResolved = true;
|
|
501
497
|
resolve(newConnection);
|
|
502
498
|
});
|
|
@@ -513,7 +509,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
513
509
|
logger.error(`rabbit: error on get connection for new channel ${name} `, { e });
|
|
514
510
|
throw e;
|
|
515
511
|
}
|
|
516
|
-
const channel = localConnection
|
|
512
|
+
const channel = localConnection?.createChannel({ ...options });
|
|
517
513
|
once(channel, 'close').then((args) => {
|
|
518
514
|
logger.error(`rabbit: channel ${name} closed`);
|
|
519
515
|
onClose?.(args);
|
|
@@ -576,7 +572,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
576
572
|
if (!channel) {
|
|
577
573
|
throw new RabbitError('channel is not defined');
|
|
578
574
|
}
|
|
579
|
-
debug('rabbit: getting queue length', { queue, connected: this.
|
|
575
|
+
debug('rabbit: getting queue length', { queue, connected: this.oldPublishConnection.amqpConnection?.isConnected() });
|
|
580
576
|
return channel?.checkQueue(queue);
|
|
581
577
|
}
|
|
582
578
|
|
|
@@ -682,7 +678,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
682
678
|
// Used by the microservices to consume messages from the queue
|
|
683
679
|
async consume(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise<any> {
|
|
684
680
|
// TODO: [QUORUM-PHASE-3] Use only the implementation of consumeNew and delete consumeNew and consumeOld
|
|
685
|
-
if (options?.isQuorumQueue !== false) {
|
|
681
|
+
if (options?.isQuorumQueue !== false && process.env.DISABLE_QUORUM_QUEUES !== 'true') {
|
|
686
682
|
await this.assertVHost();
|
|
687
683
|
await this.consumeNew(queue, callback, options);
|
|
688
684
|
}
|
|
@@ -745,9 +741,9 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
745
741
|
return null;
|
|
746
742
|
}
|
|
747
743
|
|
|
748
|
-
const traceId = msg.properties.headers[TRACING_HEADER];
|
|
749
|
-
const userId = msg.properties.headers[USER_TRACING_HEADER];
|
|
750
|
-
const automationId = msg.properties.headers[AUTOMATION_ID_HEADER];
|
|
744
|
+
const traceId = msg.properties.headers![TRACING_HEADER];
|
|
745
|
+
const userId = msg.properties.headers![USER_TRACING_HEADER];
|
|
746
|
+
const automationId = msg.properties.headers![AUTOMATION_ID_HEADER];
|
|
751
747
|
const parsedMessage = RabbitMq.parseMsg(msg);
|
|
752
748
|
const releaseLock = await this.lockRedisIfNeeded(parsedMessage, optionsWithDefaults);
|
|
753
749
|
const trace = newTrace(traceTypes.RABBIT);
|
|
@@ -831,7 +827,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
831
827
|
RabbitMq.validateName('queue', queue);
|
|
832
828
|
const { limit, deadMessageTtl } = optionsWithDefaults;
|
|
833
829
|
// TODO: [QUORUM-PHASE-3] Delete the if statement after all the queues are created as quorum queues
|
|
834
|
-
if (options?.isQuorumQueue !== false) {
|
|
830
|
+
if (options?.isQuorumQueue !== false && process.env.DISABLE_QUORUM_QUEUES !== 'true') {
|
|
835
831
|
await this.assertVHost();
|
|
836
832
|
await this.saveConsumer(queue, callback, options);
|
|
837
833
|
const channel: ChannelWrapper = await this.getNewChannel({
|
|
@@ -854,7 +850,6 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
854
850
|
]);
|
|
855
851
|
});
|
|
856
852
|
}
|
|
857
|
-
|
|
858
853
|
// TODO: [QUORUM-PHASE-3] Delete the old implementation
|
|
859
854
|
await this.saveConsumerOld(queue, callback, options);
|
|
860
855
|
const channelOld: ChannelWrapper = await this.getNewChannelOld({
|
|
@@ -927,26 +922,26 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
927
922
|
}
|
|
928
923
|
|
|
929
924
|
// TODO: [QUORUM-PHASE-2] After changing the publish from old to new change from the old to the new implementation
|
|
930
|
-
async isConnected()
|
|
931
|
-
debug('rabbit: start is connected');
|
|
932
|
-
const
|
|
933
|
-
const
|
|
934
|
-
const
|
|
935
|
-
if (!
|
|
936
|
-
logger.error('rabbit: isConnected - false');
|
|
925
|
+
async isConnected(): Promise<boolean> {
|
|
926
|
+
debug('rabbit: start old is connected');
|
|
927
|
+
const oldConsumeConnection = await this.getConnectionOld(this.oldConsumeConnection);
|
|
928
|
+
const oldPublishConnection = await this.getConnectionOld(this.oldPublishConnection);
|
|
929
|
+
const oldIsConnected = oldConsumeConnection.isConnected() && oldPublishConnection.isConnected();
|
|
930
|
+
if (!oldIsConnected) {
|
|
931
|
+
logger.error('rabbit: old isConnected - false');
|
|
937
932
|
return false;
|
|
938
933
|
}
|
|
939
|
-
const
|
|
934
|
+
const oldChannel: any = await this.assertChannelOld({ connection: this.oldPublishConnection });
|
|
940
935
|
try {
|
|
941
936
|
await Promise.all([
|
|
942
|
-
|
|
943
|
-
...this.oldConsumers.map((c: AfConsumer) =>
|
|
937
|
+
oldChannel.waitForConnect(),
|
|
938
|
+
...this.oldConsumers.map((c: AfConsumer) => oldChannel.checkQueue(c.queue)),
|
|
944
939
|
]);
|
|
945
940
|
} catch (e) {
|
|
946
|
-
logger.error('rabbit: isConnected - false');
|
|
941
|
+
logger.error('rabbit: old isConnected - false');
|
|
947
942
|
return false;
|
|
948
943
|
}
|
|
949
|
-
logger.debug('rabbit: isConnected - true');
|
|
944
|
+
logger.debug('rabbit: old isConnected - true');
|
|
950
945
|
return true;
|
|
951
946
|
}
|
|
952
947
|
|
|
@@ -993,9 +988,9 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
993
988
|
return null;
|
|
994
989
|
}
|
|
995
990
|
|
|
996
|
-
const traceId = msg.properties.headers[TRACING_HEADER];
|
|
997
|
-
const userId = msg.properties.headers[USER_TRACING_HEADER];
|
|
998
|
-
const automationId = msg.properties.headers[AUTOMATION_ID_HEADER];
|
|
991
|
+
const traceId = msg.properties.headers![TRACING_HEADER];
|
|
992
|
+
const userId = msg.properties.headers![USER_TRACING_HEADER];
|
|
993
|
+
const automationId = msg.properties.headers![AUTOMATION_ID_HEADER];
|
|
999
994
|
const parsedMessage = RabbitMq.parseMsg(msg);
|
|
1000
995
|
const releaseLock = await this.lockRedisIfNeeded(parsedMessage, optionsWithDefaults);
|
|
1001
996
|
const trace = newTrace(traceTypes.RABBIT);
|
|
@@ -1083,8 +1078,12 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
1083
1078
|
logger.error(`rabbit: error on get connection for new channel ${name} `, { e });
|
|
1084
1079
|
throw e;
|
|
1085
1080
|
}
|
|
1086
|
-
|
|
1087
|
-
|
|
1081
|
+
|
|
1082
|
+
if (!localConnection) {
|
|
1083
|
+
throw new Error(`rabbit: couldnt get connection for new channel ${name}`);
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
const channel = localConnection?.createChannel({ ...options });
|
|
1088
1087
|
once(channel, 'close').then((args) => {
|
|
1089
1088
|
logger.error(`rabbit: channel ${name} closed`);
|
|
1090
1089
|
onClose?.(args);
|
|
@@ -1102,18 +1101,13 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
1102
1101
|
async getConnectionOld(connection: ConnectionData) {
|
|
1103
1102
|
return new Promise<AmqpConnectionManager>(async (resolve, reject) => {
|
|
1104
1103
|
const {
|
|
1105
|
-
|
|
1104
|
+
amqpConnection: connectionLocal,
|
|
1106
1105
|
creatingConnection,
|
|
1107
1106
|
connectionCreatedEventName,
|
|
1108
1107
|
connectionFailedEventName,
|
|
1109
1108
|
blockReconnect,
|
|
1110
1109
|
} = connection;
|
|
1111
1110
|
|
|
1112
|
-
if (connection === this.oldPublishConnection) {
|
|
1113
|
-
debug('rabbit: getConnectionOld publish', { connectionLocal, creatingConnection, blockReconnect });
|
|
1114
|
-
} else if (connection === this.oldConsumeConnection) {
|
|
1115
|
-
debug('rabbit: getConnectionOld consume', { connectionLocal, creatingConnection, blockReconnect });
|
|
1116
|
-
}
|
|
1117
1111
|
if (blockReconnect) {
|
|
1118
1112
|
debug('rabbit: block reconnect');
|
|
1119
1113
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -1156,12 +1150,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
1156
1150
|
findServers,
|
|
1157
1151
|
});
|
|
1158
1152
|
|
|
1159
|
-
connection.
|
|
1160
|
-
if (connection === this.oldPublishConnection) {
|
|
1161
|
-
debug('rabbit: oldPublishConnection set');
|
|
1162
|
-
} else if (connection === this.oldConsumeConnection) {
|
|
1163
|
-
debug('rabbit: oldConsumeConnection set');
|
|
1164
|
-
}
|
|
1153
|
+
connection.amqpConnection = newConnection;
|
|
1165
1154
|
newConnection.on('error', (err) => {
|
|
1166
1155
|
logger.error('rabbit: connection error', { err });
|
|
1167
1156
|
if (!isResolved) {
|
|
@@ -1173,6 +1162,9 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
1173
1162
|
|
|
1174
1163
|
newConnection.on('connectFailed', (err) => {
|
|
1175
1164
|
this.oldConsumersTags = [];
|
|
1165
|
+
if (typeof err.url === 'string') {
|
|
1166
|
+
err.url = this.maskURL(err.url);
|
|
1167
|
+
}
|
|
1176
1168
|
logger.error('rabbit: connection connectFailed', { err });
|
|
1177
1169
|
if (!isResolved) {
|
|
1178
1170
|
isResolved = true;
|
|
@@ -1195,7 +1187,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
1195
1187
|
newConnection.once('connect', async () => {
|
|
1196
1188
|
debug('rabbit: connection established');
|
|
1197
1189
|
connection.creatingConnection = false;
|
|
1198
|
-
this.oldEm.emit(connectionCreatedEventName,
|
|
1190
|
+
this.oldEm.emit(connectionCreatedEventName, newConnection);
|
|
1199
1191
|
isResolved = true;
|
|
1200
1192
|
resolve(newConnection);
|
|
1201
1193
|
});
|
|
@@ -1281,7 +1273,6 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
1281
1273
|
logger.error('rabbit: channel error', { err });
|
|
1282
1274
|
});
|
|
1283
1275
|
if (this.oldPublishConnection === connection) {
|
|
1284
|
-
debug('rabbit: a new channel assigned to the oldPublishChannel', { connection });
|
|
1285
1276
|
this.oldPublishChannel = channel;
|
|
1286
1277
|
}
|
|
1287
1278
|
resolve(channel);
|
|
@@ -1318,6 +1309,17 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
1318
1309
|
this.oldExchanges[exchangeName] = await this.oldAssertExchangePromises[exchangeName];
|
|
1319
1310
|
return this.oldExchanges[exchangeName];
|
|
1320
1311
|
}
|
|
1312
|
+
|
|
1313
|
+
private maskURL = (url: string): string => {
|
|
1314
|
+
try {
|
|
1315
|
+
const urlObj = new URL(url);
|
|
1316
|
+
urlObj.username = '***';
|
|
1317
|
+
urlObj.password = '***';
|
|
1318
|
+
return urlObj.toString();
|
|
1319
|
+
} catch {
|
|
1320
|
+
return url;
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1321
1323
|
}
|
|
1322
1324
|
|
|
1323
1325
|
export default RabbitMq;
|
package/src/lib/types.ts
CHANGED
|
@@ -64,7 +64,7 @@ export const CONSUMER_DEFAULT_OPTIONS: Options.Consume = {
|
|
|
64
64
|
};
|
|
65
65
|
|
|
66
66
|
export type ConnectionData = {
|
|
67
|
-
|
|
67
|
+
amqpConnection: AmqpConnectionManager | null;
|
|
68
68
|
creatingConnection: boolean;
|
|
69
69
|
connectionCreatedEventName: string;
|
|
70
70
|
connectionFailedEventName: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// eslint-disable-next-line import/no-
|
|
1
|
+
// eslint-disable-next-line import/no-unresolved
|
|
2
2
|
import 'jest';
|
|
3
|
-
import { IAfRabbitMq } from '
|
|
3
|
+
import type { IAfRabbitMq } from '../index';
|
|
4
4
|
|
|
5
5
|
class RabbitMq implements IAfRabbitMq {
|
|
6
6
|
ack: any = jest.fn();
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { vi } from 'vitest';
|
|
2
|
+
import { IAfRabbitMq } from '../index';
|
|
3
|
+
|
|
4
|
+
class RabbitMq implements IAfRabbitMq {
|
|
5
|
+
ack = vi.fn();
|
|
6
|
+
|
|
7
|
+
nack = vi.fn();
|
|
8
|
+
|
|
9
|
+
assertChannel = vi.fn();
|
|
10
|
+
|
|
11
|
+
assertExchange = vi.fn();
|
|
12
|
+
|
|
13
|
+
assertQueue = vi.fn();
|
|
14
|
+
|
|
15
|
+
consume = vi.fn();
|
|
16
|
+
|
|
17
|
+
consumeFromExchange = vi.fn();
|
|
18
|
+
|
|
19
|
+
publish = vi.fn();
|
|
20
|
+
|
|
21
|
+
sendToQueue = vi.fn();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export default RabbitMq;
|
package/tsconfig.json
CHANGED
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"experimentalDecorators": true,
|
|
10
10
|
"emitDecoratorMetadata": true,
|
|
11
11
|
"skipLibCheck": true,
|
|
12
|
-
"
|
|
12
|
+
"sourceMap": true,
|
|
13
13
|
},
|
|
14
14
|
"exclude": ["node_modules"],
|
|
15
|
-
"include": ["src
|
|
15
|
+
"include": ["src/", "vitest.config.ts"],
|
|
16
16
|
}
|
package/vitest.config.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// eslint-disable-next-line import/no-unresolved
|
|
2
|
+
import { defineConfig } from 'vitest/config';
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
test: {
|
|
6
|
+
coverage: {
|
|
7
|
+
provider: 'v8',
|
|
8
|
+
include: ['src/**/*.ts'],
|
|
9
|
+
exclude: ['src/example.ts', 'src/mock/*.ts'],
|
|
10
|
+
reporter: 'text',
|
|
11
|
+
thresholds: {
|
|
12
|
+
lines: 75,
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
});
|