@autofleet/rabbit 3.4.0-beta.9 → 3.4.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.
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
@@ -21,6 +21,8 @@ const types_1 = require("./lib/types");
21
21
  // const debug = nodeDebug('af-rabbitmq')
22
22
  const debug = logger_1.default.debug.bind(logger_1.default);
23
23
  const PUBLISH_TIMEOUT = 1000 * 10;
24
+ // TODO: [QUORUM-PHASE-3] Delete this env var
25
+ const { DISABLE_QUORUM_QUEUES, } = process.env;
24
26
  const HEARTBEAT = '60';
25
27
  class RabbitMq {
26
28
  static parseMsg(msg) {
@@ -136,11 +138,11 @@ class RabbitMq {
136
138
  await this.unlockRedisIfNeeded(releaseLock);
137
139
  if (channel && msg) {
138
140
  if (!skipRetry
139
- && (!msg.properties.headers[consts_1.RETRY_HEADER]
141
+ && (!msg.properties.headers?.[consts_1.RETRY_HEADER]
140
142
  || parseInt(msg.properties.headers[consts_1.RETRY_HEADER], 10) < options.retries)) {
141
143
  await this.sendToQueue(queue, RabbitMq.parseMsg(msg).content, options, {
142
144
  ...msg.properties.headers,
143
- [consts_1.RETRY_HEADER]: msg.properties.headers[consts_1.RETRY_HEADER]
145
+ [consts_1.RETRY_HEADER]: msg.properties.headers?.[consts_1.RETRY_HEADER]
144
146
  ? msg.properties.headers[consts_1.RETRY_HEADER] + 1
145
147
  : 1,
146
148
  });
@@ -149,7 +151,7 @@ class RabbitMq {
149
151
  const deadQueue = `${queue}-dead`;
150
152
  await this.sendToQueue(deadQueue, RabbitMq.parseMsg(msg).content, deadQueueOptions, {
151
153
  ...msg.properties.headers,
152
- [consts_1.RETRY_HEADER]: msg.properties.headers[consts_1.RETRY_HEADER]
154
+ [consts_1.RETRY_HEADER]: msg.properties.headers?.[consts_1.RETRY_HEADER]
153
155
  ? msg.properties.headers[consts_1.RETRY_HEADER] + 1
154
156
  : 1,
155
157
  });
@@ -163,19 +165,29 @@ class RabbitMq {
163
165
  });
164
166
  }
165
167
  };
168
+ this.maskURL = (url) => {
169
+ try {
170
+ const urlObj = new URL(url);
171
+ urlObj.username = '***';
172
+ urlObj.password = '***';
173
+ return urlObj.toString();
174
+ }
175
+ catch {
176
+ return url;
177
+ }
178
+ };
166
179
  this.em = new events_1.EventEmitter();
167
180
  this.publishChannel = null;
168
181
  this.publishChannelSetupPromise = null;
169
- this.connection = null;
170
182
  this.publishConnection = {
171
- connection: null,
183
+ amqpConnection: null,
172
184
  creatingConnection: false,
173
185
  connectionCreatedEventName: 'publishConnectionCreated',
174
186
  connectionFailedEventName: 'publishConnectionFailed',
175
187
  blockReconnect: false,
176
188
  };
177
189
  this.consumeConnection = {
178
- connection: null,
190
+ amqpConnection: null,
179
191
  creatingConnection: false,
180
192
  connectionCreatedEventName: 'consumeConnectionCreated',
181
193
  connectionFailedEventName: 'consumeConnectionFailed',
@@ -207,14 +219,14 @@ class RabbitMq {
207
219
  this.oldPublishChannel = null;
208
220
  this.oldPublishChannelSetupPromise = null;
209
221
  this.oldPublishConnection = {
210
- connection: null,
222
+ amqpConnection: null,
211
223
  creatingConnection: false,
212
224
  connectionCreatedEventName: 'oldPublishConnectionCreated',
213
225
  connectionFailedEventName: 'oldPublishConnectionFailed',
214
226
  blockReconnect: false,
215
227
  };
216
228
  this.oldConsumeConnection = {
217
- connection: null,
229
+ amqpConnection: null,
218
230
  creatingConnection: false,
219
231
  connectionCreatedEventName: 'oldConsumeConnectionCreated',
220
232
  connectionFailedEventName: 'oldConsumeConnectionFailed',
@@ -230,7 +242,7 @@ class RabbitMq {
230
242
  }
231
243
  async getConnection(connection) {
232
244
  return new Promise(async (resolve, reject) => {
233
- const { connection: connectionLocal, creatingConnection, connectionCreatedEventName, connectionFailedEventName, blockReconnect, } = connection;
245
+ const { amqpConnection: connectionLocal, creatingConnection, connectionCreatedEventName, connectionFailedEventName, blockReconnect, } = connection;
234
246
  if (blockReconnect) {
235
247
  debug('rabbit: block reconnect');
236
248
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -268,13 +280,7 @@ class RabbitMq {
268
280
  const newConnection = await (0, amqp_connection_manager_1.connect)(defaultUrls, {
269
281
  findServers,
270
282
  });
271
- connection.connection = newConnection;
272
- if (connection === this.publishConnection) {
273
- debug('rabbit: publishConnection set');
274
- }
275
- else if (connection === this.consumeConnection) {
276
- debug('rabbit: consumeConnection set');
277
- }
283
+ connection.amqpConnection = newConnection;
278
284
  newConnection.on('error', (err) => {
279
285
  logger_1.default.error('rabbit: connection error', { err });
280
286
  if (!isResolved) {
@@ -285,6 +291,9 @@ class RabbitMq {
285
291
  });
286
292
  newConnection.on('connectFailed', (err) => {
287
293
  this.consumersTags = [];
294
+ if (typeof err.url === 'string') {
295
+ err.url = this.maskURL(err.url);
296
+ }
288
297
  logger_1.default.error('rabbit: connection connectFailed', { err, advice: 'Check if the vhost exist', vhost: this.vhost });
289
298
  if (!isResolved) {
290
299
  isResolved = true;
@@ -307,7 +316,7 @@ class RabbitMq {
307
316
  newConnection.once('connect', async () => {
308
317
  debug('rabbit: connection established');
309
318
  connection.creatingConnection = false;
310
- this.em.emit(connectionCreatedEventName, connection);
319
+ this.em.emit(connectionCreatedEventName, newConnection);
311
320
  isResolved = true;
312
321
  resolve(newConnection);
313
322
  });
@@ -380,7 +389,7 @@ class RabbitMq {
380
389
  if (!channel) {
381
390
  throw new rabbitError_1.default('channel is not defined');
382
391
  }
383
- debug('rabbit: getting queue length', { queue, connected: this.connection?.isConnected() });
392
+ debug('rabbit: getting queue length', { queue, connected: this.oldPublishConnection.amqpConnection?.isConnected() });
384
393
  return channel?.checkQueue(queue);
385
394
  }
386
395
  async deleteQueue(queue, connection) {
@@ -474,7 +483,7 @@ class RabbitMq {
474
483
  // Used by the microservices to consume messages from the queue
475
484
  async consume(queue, callback, options) {
476
485
  // TODO: [QUORUM-PHASE-3] Use only the implementation of consumeNew and delete consumeNew and consumeOld
477
- if (options?.isQuorumQueue !== false) {
486
+ if (options?.isQuorumQueue !== false && DISABLE_QUORUM_QUEUES !== 'true') {
478
487
  await this.assertVHost();
479
488
  await this.consumeNew(queue, callback, options);
480
489
  }
@@ -599,7 +608,7 @@ class RabbitMq {
599
608
  RabbitMq.validateName('queue', queue);
600
609
  const { limit, deadMessageTtl } = optionsWithDefaults;
601
610
  // TODO: [QUORUM-PHASE-3] Delete the if statement after all the queues are created as quorum queues
602
- if (options?.isQuorumQueue !== false) {
611
+ if (options?.isQuorumQueue !== false && DISABLE_QUORUM_QUEUES !== 'true') {
603
612
  await this.assertVHost();
604
613
  await this.saveConsumer(queue, callback, options);
605
614
  const channel = await this.getNewChannel({
@@ -617,24 +626,22 @@ class RabbitMq {
617
626
  ]);
618
627
  });
619
628
  }
620
- else {
621
- // TODO: [QUORUM-PHASE-3] Delete the old implementation
622
- await this.saveConsumerOld(queue, callback, options);
623
- const channelOld = await this.getNewChannelOld({
624
- name: `consume-exchange-${exchange}-queue-${queue}-old`,
625
- connection: this.oldConsumeConnection,
626
- });
627
- await channelOld.addSetup(async (c) => {
628
- const assertExchange = await (0, utils_1.assertExchangeFanout)(c, exchange);
629
- await c.assertQueue(queue);
630
- this.oldExchanges[exchange] = assertExchange;
631
- await c.prefetch(limit, false);
632
- return Promise.all([
633
- c.bindQueue(queue, exchange, ''),
634
- this.consumeOld(queue, callback, options),
635
- ]);
636
- });
637
- }
629
+ // TODO: [QUORUM-PHASE-3] Delete the old implementation
630
+ await this.saveConsumerOld(queue, callback, options);
631
+ const channelOld = await this.getNewChannelOld({
632
+ name: `consume-exchange-${exchange}-queue-${queue}-old`,
633
+ connection: this.oldConsumeConnection,
634
+ });
635
+ await channelOld.addSetup(async (c) => {
636
+ const assertExchange = await (0, utils_1.assertExchangeFanout)(c, exchange);
637
+ await c.assertQueue(queue);
638
+ this.oldExchanges[exchange] = assertExchange;
639
+ await c.prefetch(limit, false);
640
+ return Promise.all([
641
+ c.bindQueue(queue, exchange, ''),
642
+ this.consumeOld(queue, callback, options),
643
+ ]);
644
+ });
638
645
  }
639
646
  // Used by the microservices to publish messages to the exchange
640
647
  // TODO: [QUORUM-PHASE-2] Change the implementation to the new one
@@ -682,7 +689,7 @@ class RabbitMq {
682
689
  const oldPublishConnection = await this.getConnectionOld(this.oldPublishConnection);
683
690
  const oldIsConnected = oldConsumeConnection.isConnected() && oldPublishConnection.isConnected();
684
691
  if (!oldIsConnected) {
685
- logger_1.default.error('rabbit: isConnected - false');
692
+ logger_1.default.error('rabbit: old isConnected - false');
686
693
  return false;
687
694
  }
688
695
  const oldChannel = await this.assertChannelOld({ connection: this.oldPublishConnection });
@@ -693,30 +700,10 @@ class RabbitMq {
693
700
  ]);
694
701
  }
695
702
  catch (e) {
696
- logger_1.default.error('rabbit: isConnected - false');
703
+ logger_1.default.error('rabbit: old isConnected - false');
697
704
  return false;
698
705
  }
699
706
  logger_1.default.debug('rabbit: old isConnected - true');
700
- debug('rabbit: start is connected');
701
- const consumeConnection = await this.getConnectionOld(this.oldConsumeConnection);
702
- const publishConnection = await this.getConnectionOld(this.oldPublishConnection);
703
- const isConnected = consumeConnection.isConnected() && publishConnection.isConnected();
704
- if (!isConnected) {
705
- logger_1.default.error('rabbit: isConnected - false');
706
- return false;
707
- }
708
- const channel = await this.assertChannelOld({ connection: this.oldPublishConnection });
709
- try {
710
- await Promise.all([
711
- channel.waitForConnect(),
712
- ...this.oldConsumers.map((c) => channel.checkQueue(c.queue)),
713
- ]);
714
- }
715
- catch (e) {
716
- logger_1.default.error('rabbit: isConnected - false');
717
- return false;
718
- }
719
- logger_1.default.debug('rabbit: isConnected - true');
720
707
  return true;
721
708
  }
722
709
  async gracefulShutdown(signal) {
@@ -739,7 +726,6 @@ class RabbitMq {
739
726
  }
740
727
  async consumeFromRabbitOld(queue, callback, options) {
741
728
  const optionsWithDefaults = { ...consts_1.DEFAULT_OPTIONS, ...options };
742
- debug('rabbit: consumeFromRabbitOld', { queue });
743
729
  RabbitMq.validateName('queue', queue);
744
730
  this.saveConsumerOld(queue, callback, options);
745
731
  const uniqueId = (0, node_crypto_1.randomUUID)();
@@ -831,12 +817,6 @@ class RabbitMq {
831
817
  // TODO: [QUORUM-PHASE-3] Delete all the function under this line (getNewChannelOld, getConnectionOld, assertQueueOld, setupQueueOld, saveConsumerOld)
832
818
  async getNewChannelOld({ name = (0, utils_1.rand)().toString(), onClose = null, options = {}, connection, }) {
833
819
  let localConnection;
834
- if (connection === this.oldPublishConnection) {
835
- debug('rabbit: getConnectionOld publish', { connection });
836
- }
837
- else if (connection === this.oldConsumeConnection) {
838
- debug('rabbit: getConnectionOld consume', { connection });
839
- }
840
820
  try {
841
821
  localConnection = await this.getConnectionOld(connection);
842
822
  }
@@ -847,7 +827,6 @@ class RabbitMq {
847
827
  if (!localConnection) {
848
828
  throw new Error(`rabbit: couldnt get connection for new channel ${name}`);
849
829
  }
850
- debug('rabbit: getNewChannelOld', { localConnection });
851
830
  const channel = localConnection?.createChannel({ ...options });
852
831
  (0, events_1.once)(channel, 'close').then((args) => {
853
832
  logger_1.default.error(`rabbit: channel ${name} closed`);
@@ -865,13 +844,7 @@ class RabbitMq {
865
844
  }
866
845
  async getConnectionOld(connection) {
867
846
  return new Promise(async (resolve, reject) => {
868
- const { connection: connectionLocal, creatingConnection, connectionCreatedEventName, connectionFailedEventName, blockReconnect, } = connection;
869
- if (connection === this.oldPublishConnection) {
870
- debug('rabbit: getConnectionOld publish', { connectionLocal, creatingConnection, blockReconnect });
871
- }
872
- else if (connection === this.oldConsumeConnection) {
873
- debug('rabbit: getConnectionOld consume', { connectionLocal, creatingConnection, blockReconnect });
874
- }
847
+ const { amqpConnection: connectionLocal, creatingConnection, connectionCreatedEventName, connectionFailedEventName, blockReconnect, } = connection;
875
848
  if (blockReconnect) {
876
849
  debug('rabbit: block reconnect');
877
850
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -909,13 +882,7 @@ class RabbitMq {
909
882
  const newConnection = await (0, amqp_connection_manager_1.connect)(defaultUrls, {
910
883
  findServers,
911
884
  });
912
- connection.connection = newConnection;
913
- if (connection === this.oldPublishConnection) {
914
- debug('rabbit: oldPublishConnection set');
915
- }
916
- else if (connection === this.oldConsumeConnection) {
917
- debug('rabbit: oldConsumeConnection set');
918
- }
885
+ connection.amqpConnection = newConnection;
919
886
  newConnection.on('error', (err) => {
920
887
  logger_1.default.error('rabbit: connection error', { err });
921
888
  if (!isResolved) {
@@ -926,6 +893,9 @@ class RabbitMq {
926
893
  });
927
894
  newConnection.on('connectFailed', (err) => {
928
895
  this.oldConsumersTags = [];
896
+ if (typeof err.url === 'string') {
897
+ err.url = this.maskURL(err.url);
898
+ }
929
899
  logger_1.default.error('rabbit: connection connectFailed', { err });
930
900
  if (!isResolved) {
931
901
  isResolved = true;
@@ -947,7 +917,7 @@ class RabbitMq {
947
917
  newConnection.once('connect', async () => {
948
918
  debug('rabbit: connection established');
949
919
  connection.creatingConnection = false;
950
- this.oldEm.emit(connectionCreatedEventName, connection);
920
+ this.oldEm.emit(connectionCreatedEventName, newConnection);
951
921
  isResolved = true;
952
922
  resolve(newConnection);
953
923
  });
@@ -1015,12 +985,6 @@ class RabbitMq {
1015
985
  return queue;
1016
986
  }
1017
987
  async assertChannelOld({ force = false, connection }) {
1018
- if (connection === this.oldPublishConnection) {
1019
- debug('rabbit: assertChannelOld publish', { force, promiseSetup: this.oldPublishChannelSetupPromise });
1020
- }
1021
- else if (connection === this.oldConsumeConnection) {
1022
- debug('rabbit: assertChannelOld consume', { force, promiseSetup: this.oldPublishChannelSetupPromise });
1023
- }
1024
988
  if (!this.oldPublishChannelSetupPromise) {
1025
989
  this.oldPublishChannelSetupPromise = new Promise(async (resolve, reject) => {
1026
990
  if (this.oldPublishChannel && !force) {
@@ -1028,17 +992,10 @@ class RabbitMq {
1028
992
  }
1029
993
  try {
1030
994
  const channel = await this.getNewChannelOld({ connection });
1031
- if (connection === this.oldPublishConnection) {
1032
- debug('rabbit: old new channel got publish', { force, channel });
1033
- }
1034
- else if (connection === this.oldConsumeConnection) {
1035
- debug('rabbit: old new channel got consume', { force, channel });
1036
- }
1037
995
  channel.on('error', (err) => {
1038
996
  logger_1.default.error('rabbit: channel error', { err });
1039
997
  });
1040
998
  if (this.oldPublishConnection === connection) {
1041
- debug('rabbit: a new channel assigned to the oldPublishChannel', { connection });
1042
999
  this.oldPublishChannel = channel;
1043
1000
  }
1044
1001
  resolve(channel);
@@ -1075,3 +1032,4 @@ class RabbitMq {
1075
1032
  exports.default = RabbitMq;
1076
1033
  var celery_1 = require("./lib/celery");
1077
1034
  Object.defineProperty(exports, "sendCeleryTaskViaHttp", { enumerable: true, get: function () { return celery_1.sendCeleryTaskViaHttp; } });
1035
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -52,3 +52,4 @@ async function sendCeleryTaskViaHttp(data, { taskName, queueName }) {
52
52
  }
53
53
  }
54
54
  exports.sendCeleryTaskViaHttp = sendCeleryTaskViaHttp;
55
+ //# sourceMappingURL=celery.js.map
@@ -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"}
@@ -18,3 +18,4 @@ exports.DEFAULT_OPTIONS = {
18
18
  auditContext: null,
19
19
  enableRabbitTrace: false,
20
20
  };
21
+ //# sourceMappingURL=consts.js.map
@@ -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"}
@@ -7,3 +7,4 @@ class RabbitError extends Error {
7
7
  }
8
8
  }
9
9
  exports.default = RabbitError;
10
+ //# sourceMappingURL=rabbitError.js.map
@@ -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
@@ -9,3 +9,4 @@ bluebird_1.default.promisifyAll(redis.RedisClient.prototype);
9
9
  bluebird_1.default.promisifyAll(redis.Multi.prototype);
10
10
  const getRedisInstance = (config) => redis.createClient(config);
11
11
  exports.default = getRedisInstance;
12
+ //# sourceMappingURL=redis.js.map
@@ -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"}
@@ -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
- connection: AmqpConnectionManager | null;
47
+ amqpConnection: AmqpConnectionManager | null;
48
48
  creatingConnection: boolean;
49
49
  connectionCreatedEventName: string;
50
50
  connectionFailedEventName: string;
package/dist/lib/types.js CHANGED
@@ -9,3 +9,4 @@ exports.CONSUMER_DEFAULT_OPTIONS = {
9
9
  [HA_PROMOTE_ON_SHUTDOWN]: 'always',
10
10
  },
11
11
  };
12
+ //# sourceMappingURL=types.js.map
@@ -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
@@ -17,3 +17,4 @@ const wrapSetImmediate = (callback) => new Promise((resolve, reject) => {
17
17
  exports.wrapSetImmediate = wrapSetImmediate;
18
18
  const rand = () => Math.floor(Math.random() * 100000);
19
19
  exports.rand = rand;
20
+ //# sourceMappingURL=utils.js.map
@@ -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
@@ -6,3 +6,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const logger_1 = __importDefault(require("@autofleet/logger"));
7
7
  const logger = (0, logger_1.default)();
8
8
  exports.default = logger;
9
+ //# sourceMappingURL=logger.js.map
@@ -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,5 +1,5 @@
1
1
  import 'jest';
2
- import { IAfRabbitMq } from './index';
2
+ import type { IAfRabbitMq } from '../index';
3
3
  declare class RabbitMq implements IAfRabbitMq {
4
4
  ack: any;
5
5
  nack: any;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- // eslint-disable-next-line import/no-extraneous-dependencies
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.9",
3
+ "version": "3.4.0",
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": "./node_modules/.bin/eslint .",
15
- "test": "jest --runInBand --forceExit",
16
- "test-local": "RABBITMQ_SERVICE_HOST=localhost:5672 jest --forceExit",
17
- "coverage": "jest --coverage --forceExit && rm -rf ./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.9",
23
- "amqplib": "0.10.3",
22
+ "amqp-connection-manager": "4.1.14",
23
+ "amqplib": "0.10.5",
24
24
  "bluebird": "^3.7.2",
25
- "moment": "^2.29.1",
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.8.2",
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": "ISC"
55
+ "license": "Proprietary"
49
56
  }
package/src/index.ts CHANGED
@@ -45,6 +45,11 @@ const debug = logger.debug.bind(logger);
45
45
 
46
46
  const PUBLISH_TIMEOUT = 1000 * 10;
47
47
 
48
+ // TODO: [QUORUM-PHASE-3] Delete this env var
49
+ const {
50
+ DISABLE_QUORUM_QUEUES,
51
+ } = process.env;
52
+
48
53
  export interface IAfRabbitMq {
49
54
  ack: any;
50
55
  nack: any;
@@ -149,8 +154,6 @@ class RabbitMq implements IAfRabbitMq {
149
154
 
150
155
  blockReconnect: boolean | null | undefined
151
156
 
152
- connection: AmqpConnectionManager | null | undefined
153
-
154
157
  publishConnection: ConnectionData
155
158
 
156
159
  consumeConnection: ConnectionData
@@ -213,16 +216,15 @@ class RabbitMq implements IAfRabbitMq {
213
216
  this.em = new EventEmitter();
214
217
  this.publishChannel = null;
215
218
  this.publishChannelSetupPromise = null;
216
- this.connection = null;
217
219
  this.publishConnection = {
218
- connection: null,
220
+ amqpConnection: null,
219
221
  creatingConnection: false,
220
222
  connectionCreatedEventName: 'publishConnectionCreated',
221
223
  connectionFailedEventName: 'publishConnectionFailed',
222
224
  blockReconnect: false,
223
225
  };
224
226
  this.consumeConnection = {
225
- connection: null,
227
+ amqpConnection: null,
226
228
  creatingConnection: false,
227
229
  connectionCreatedEventName: 'consumeConnectionCreated',
228
230
  connectionFailedEventName: 'consumeConnectionFailed',
@@ -256,14 +258,14 @@ class RabbitMq implements IAfRabbitMq {
256
258
  this.oldPublishChannel = null;
257
259
  this.oldPublishChannelSetupPromise = null;
258
260
  this.oldPublishConnection = {
259
- connection: null,
261
+ amqpConnection: null,
260
262
  creatingConnection: false,
261
263
  connectionCreatedEventName: 'oldPublishConnectionCreated',
262
264
  connectionFailedEventName: 'oldPublishConnectionFailed',
263
265
  blockReconnect: false,
264
266
  };
265
267
  this.oldConsumeConnection = {
266
- connection: null,
268
+ amqpConnection: null,
267
269
  creatingConnection: false,
268
270
  connectionCreatedEventName: 'oldConsumeConnectionCreated',
269
271
  connectionFailedEventName: 'oldConsumeConnectionFailed',
@@ -378,13 +380,13 @@ class RabbitMq implements IAfRabbitMq {
378
380
  if (
379
381
  !skipRetry
380
382
  && (
381
- !msg.properties.headers[RETRY_HEADER]
383
+ !msg.properties.headers?.[RETRY_HEADER]
382
384
  || parseInt(msg.properties.headers[RETRY_HEADER], 10) < options.retries
383
385
  )
384
386
  ) {
385
387
  await this.sendToQueue(queue, RabbitMq.parseMsg(msg).content, options, {
386
388
  ...msg.properties.headers,
387
- [RETRY_HEADER]: msg.properties.headers[RETRY_HEADER]
389
+ [RETRY_HEADER]: msg.properties.headers?.[RETRY_HEADER]
388
390
  ? msg.properties.headers[RETRY_HEADER] + 1
389
391
  : 1,
390
392
  });
@@ -392,7 +394,7 @@ class RabbitMq implements IAfRabbitMq {
392
394
  const deadQueue = `${queue}-dead`;
393
395
  await this.sendToQueue(deadQueue, RabbitMq.parseMsg(msg).content, deadQueueOptions, {
394
396
  ...msg.properties.headers,
395
- [RETRY_HEADER]: msg.properties.headers[RETRY_HEADER]
397
+ [RETRY_HEADER]: msg.properties.headers?.[RETRY_HEADER]
396
398
  ? msg.properties.headers[RETRY_HEADER] + 1
397
399
  : 1,
398
400
  });
@@ -409,12 +411,13 @@ class RabbitMq implements IAfRabbitMq {
409
411
  async getConnection(connection: ConnectionData) {
410
412
  return new Promise<AmqpConnectionManager>(async (resolve, reject) => {
411
413
  const {
412
- connection: connectionLocal,
414
+ amqpConnection: connectionLocal,
413
415
  creatingConnection,
414
416
  connectionCreatedEventName,
415
417
  connectionFailedEventName,
416
418
  blockReconnect,
417
419
  } = connection;
420
+
418
421
  if (blockReconnect) {
419
422
  debug('rabbit: block reconnect');
420
423
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -456,12 +459,7 @@ class RabbitMq implements IAfRabbitMq {
456
459
  findServers,
457
460
  });
458
461
 
459
- connection.connection = newConnection;
460
- if (connection === this.publishConnection) {
461
- debug('rabbit: publishConnection set');
462
- } else if (connection === this.consumeConnection) {
463
- debug('rabbit: consumeConnection set');
464
- }
462
+ connection.amqpConnection = newConnection;
465
463
  newConnection.on('error', (err) => {
466
464
  logger.error('rabbit: connection error', { err });
467
465
  if (!isResolved) {
@@ -473,6 +471,9 @@ class RabbitMq implements IAfRabbitMq {
473
471
 
474
472
  newConnection.on('connectFailed', (err) => {
475
473
  this.consumersTags = [];
474
+ if (typeof err.url === 'string') {
475
+ err.url = this.maskURL(err.url);
476
+ }
476
477
  logger.error('rabbit: connection connectFailed', { err, advice: 'Check if the vhost exist', vhost: this.vhost });
477
478
  if (!isResolved) {
478
479
  isResolved = true;
@@ -496,7 +497,7 @@ class RabbitMq implements IAfRabbitMq {
496
497
  newConnection.once('connect', async () => {
497
498
  debug('rabbit: connection established');
498
499
  connection.creatingConnection = false;
499
- this.em.emit(connectionCreatedEventName, connection);
500
+ this.em.emit(connectionCreatedEventName, newConnection);
500
501
  isResolved = true;
501
502
  resolve(newConnection);
502
503
  });
@@ -576,7 +577,7 @@ class RabbitMq implements IAfRabbitMq {
576
577
  if (!channel) {
577
578
  throw new RabbitError('channel is not defined');
578
579
  }
579
- debug('rabbit: getting queue length', { queue, connected: this.connection?.isConnected() });
580
+ debug('rabbit: getting queue length', { queue, connected: this.oldPublishConnection.amqpConnection?.isConnected() });
580
581
  return channel?.checkQueue(queue);
581
582
  }
582
583
 
@@ -682,7 +683,7 @@ class RabbitMq implements IAfRabbitMq {
682
683
  // Used by the microservices to consume messages from the queue
683
684
  async consume(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise<any> {
684
685
  // TODO: [QUORUM-PHASE-3] Use only the implementation of consumeNew and delete consumeNew and consumeOld
685
- if (options?.isQuorumQueue !== false) {
686
+ if (options?.isQuorumQueue !== false && DISABLE_QUORUM_QUEUES !== 'true') {
686
687
  await this.assertVHost();
687
688
  await this.consumeNew(queue, callback, options);
688
689
  }
@@ -745,9 +746,9 @@ class RabbitMq implements IAfRabbitMq {
745
746
  return null;
746
747
  }
747
748
 
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];
749
+ const traceId = msg.properties.headers![TRACING_HEADER];
750
+ const userId = msg.properties.headers![USER_TRACING_HEADER];
751
+ const automationId = msg.properties.headers![AUTOMATION_ID_HEADER];
751
752
  const parsedMessage = RabbitMq.parseMsg(msg);
752
753
  const releaseLock = await this.lockRedisIfNeeded(parsedMessage, optionsWithDefaults);
753
754
  const trace = newTrace(traceTypes.RABBIT);
@@ -831,7 +832,7 @@ class RabbitMq implements IAfRabbitMq {
831
832
  RabbitMq.validateName('queue', queue);
832
833
  const { limit, deadMessageTtl } = optionsWithDefaults;
833
834
  // TODO: [QUORUM-PHASE-3] Delete the if statement after all the queues are created as quorum queues
834
- if (options?.isQuorumQueue !== false) {
835
+ if (options?.isQuorumQueue !== false && DISABLE_QUORUM_QUEUES !== 'true') {
835
836
  await this.assertVHost();
836
837
  await this.saveConsumer(queue, callback, options);
837
838
  const channel: ChannelWrapper = await this.getNewChannel({
@@ -853,28 +854,27 @@ class RabbitMq implements IAfRabbitMq {
853
854
  ),
854
855
  ]);
855
856
  });
856
- } else {
857
- // TODO: [QUORUM-PHASE-3] Delete the old implementation
858
- await this.saveConsumerOld(queue, callback, options);
859
- const channelOld: ChannelWrapper = await this.getNewChannelOld({
860
- name: `consume-exchange-${exchange}-queue-${queue}-old`,
861
- connection: this.oldConsumeConnection,
862
- });
863
- await channelOld.addSetup(async (c: ConfirmChannel) => {
864
- const assertExchange = await assertExchangeFanout(c, exchange);
865
- await c.assertQueue(queue);
866
- this.oldExchanges[exchange] = assertExchange;
867
- await c.prefetch(limit, false);
868
- return Promise.all([
869
- c.bindQueue(queue, exchange, ''),
870
- this.consumeOld(
871
- queue,
872
- callback,
873
- options,
874
- ),
875
- ]);
876
- });
877
857
  }
858
+ // TODO: [QUORUM-PHASE-3] Delete the old implementation
859
+ await this.saveConsumerOld(queue, callback, options);
860
+ const channelOld: ChannelWrapper = await this.getNewChannelOld({
861
+ name: `consume-exchange-${exchange}-queue-${queue}-old`,
862
+ connection: this.oldConsumeConnection,
863
+ });
864
+ await channelOld.addSetup(async (c: ConfirmChannel) => {
865
+ const assertExchange = await assertExchangeFanout(c, exchange);
866
+ await c.assertQueue(queue);
867
+ this.oldExchanges[exchange] = assertExchange;
868
+ await c.prefetch(limit, false);
869
+ return Promise.all([
870
+ c.bindQueue(queue, exchange, ''),
871
+ this.consumeOld(
872
+ queue,
873
+ callback,
874
+ options,
875
+ ),
876
+ ]);
877
+ });
878
878
  }
879
879
 
880
880
  // Used by the microservices to publish messages to the exchange
@@ -927,13 +927,13 @@ class RabbitMq implements IAfRabbitMq {
927
927
  }
928
928
 
929
929
  // TODO: [QUORUM-PHASE-2] After changing the publish from old to new change from the old to the new implementation
930
- async isConnected() : Promise<boolean> {
930
+ async isConnected(): Promise<boolean> {
931
931
  debug('rabbit: start old is connected');
932
932
  const oldConsumeConnection = await this.getConnectionOld(this.oldConsumeConnection);
933
933
  const oldPublishConnection = await this.getConnectionOld(this.oldPublishConnection);
934
934
  const oldIsConnected = oldConsumeConnection.isConnected() && oldPublishConnection.isConnected();
935
935
  if (!oldIsConnected) {
936
- logger.error('rabbit: isConnected - false');
936
+ logger.error('rabbit: old isConnected - false');
937
937
  return false;
938
938
  }
939
939
  const oldChannel: any = await this.assertChannelOld({ connection: this.oldPublishConnection });
@@ -943,30 +943,10 @@ class RabbitMq implements IAfRabbitMq {
943
943
  ...this.oldConsumers.map((c: AfConsumer) => oldChannel.checkQueue(c.queue)),
944
944
  ]);
945
945
  } catch (e) {
946
- logger.error('rabbit: isConnected - false');
946
+ logger.error('rabbit: old isConnected - false');
947
947
  return false;
948
948
  }
949
949
  logger.debug('rabbit: old isConnected - true');
950
-
951
- debug('rabbit: start is connected');
952
- const consumeConnection = await this.getConnectionOld(this.oldConsumeConnection);
953
- const publishConnection = await this.getConnectionOld(this.oldPublishConnection);
954
- const isConnected = consumeConnection.isConnected() && publishConnection.isConnected();
955
- if (!isConnected) {
956
- logger.error('rabbit: isConnected - false');
957
- return false;
958
- }
959
- const channel: any = await this.assertChannelOld({ connection: this.oldPublishConnection });
960
- try {
961
- await Promise.all([
962
- channel.waitForConnect(),
963
- ...this.oldConsumers.map((c: AfConsumer) => channel.checkQueue(c.queue)),
964
- ]);
965
- } catch (e) {
966
- logger.error('rabbit: isConnected - false');
967
- return false;
968
- }
969
- logger.debug('rabbit: isConnected - true');
970
950
  return true;
971
951
  }
972
952
 
@@ -990,7 +970,6 @@ class RabbitMq implements IAfRabbitMq {
990
970
 
991
971
  private async consumeFromRabbitOld(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise<any> {
992
972
  const optionsWithDefaults = { ...DEFAULT_OPTIONS, ...options };
993
- debug('rabbit: consumeFromRabbitOld', { queue });
994
973
  RabbitMq.validateName('queue', queue);
995
974
  this.saveConsumerOld(queue, callback, options);
996
975
  const uniqueId = randomUUID();
@@ -1014,9 +993,9 @@ class RabbitMq implements IAfRabbitMq {
1014
993
  return null;
1015
994
  }
1016
995
 
1017
- const traceId = msg.properties.headers[TRACING_HEADER];
1018
- const userId = msg.properties.headers[USER_TRACING_HEADER];
1019
- const automationId = msg.properties.headers[AUTOMATION_ID_HEADER];
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];
1020
999
  const parsedMessage = RabbitMq.parseMsg(msg);
1021
1000
  const releaseLock = await this.lockRedisIfNeeded(parsedMessage, optionsWithDefaults);
1022
1001
  const trace = newTrace(traceTypes.RABBIT);
@@ -1098,11 +1077,6 @@ class RabbitMq implements IAfRabbitMq {
1098
1077
  name = rand().toString(), onClose = null, options = {}, connection,
1099
1078
  }: newChannelOpts) {
1100
1079
  let localConnection!: AmqpConnectionManager;
1101
- if (connection === this.oldPublishConnection) {
1102
- debug('rabbit: getConnectionOld publish', { connection });
1103
- } else if (connection === this.oldConsumeConnection) {
1104
- debug('rabbit: getConnectionOld consume', { connection });
1105
- }
1106
1080
  try {
1107
1081
  localConnection = await this.getConnectionOld(connection);
1108
1082
  } catch (e) {
@@ -1114,7 +1088,6 @@ class RabbitMq implements IAfRabbitMq {
1114
1088
  throw new Error(`rabbit: couldnt get connection for new channel ${name}`);
1115
1089
  }
1116
1090
 
1117
- debug('rabbit: getNewChannelOld', { localConnection });
1118
1091
  const channel = localConnection?.createChannel({ ...options });
1119
1092
  once(channel, 'close').then((args) => {
1120
1093
  logger.error(`rabbit: channel ${name} closed`);
@@ -1133,18 +1106,13 @@ class RabbitMq implements IAfRabbitMq {
1133
1106
  async getConnectionOld(connection: ConnectionData) {
1134
1107
  return new Promise<AmqpConnectionManager>(async (resolve, reject) => {
1135
1108
  const {
1136
- connection: connectionLocal,
1109
+ amqpConnection: connectionLocal,
1137
1110
  creatingConnection,
1138
1111
  connectionCreatedEventName,
1139
1112
  connectionFailedEventName,
1140
1113
  blockReconnect,
1141
1114
  } = connection;
1142
1115
 
1143
- if (connection === this.oldPublishConnection) {
1144
- debug('rabbit: getConnectionOld publish', { connectionLocal, creatingConnection, blockReconnect });
1145
- } else if (connection === this.oldConsumeConnection) {
1146
- debug('rabbit: getConnectionOld consume', { connectionLocal, creatingConnection, blockReconnect });
1147
- }
1148
1116
  if (blockReconnect) {
1149
1117
  debug('rabbit: block reconnect');
1150
1118
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -1187,12 +1155,7 @@ class RabbitMq implements IAfRabbitMq {
1187
1155
  findServers,
1188
1156
  });
1189
1157
 
1190
- connection.connection = newConnection;
1191
- if (connection === this.oldPublishConnection) {
1192
- debug('rabbit: oldPublishConnection set');
1193
- } else if (connection === this.oldConsumeConnection) {
1194
- debug('rabbit: oldConsumeConnection set');
1195
- }
1158
+ connection.amqpConnection = newConnection;
1196
1159
  newConnection.on('error', (err) => {
1197
1160
  logger.error('rabbit: connection error', { err });
1198
1161
  if (!isResolved) {
@@ -1204,6 +1167,9 @@ class RabbitMq implements IAfRabbitMq {
1204
1167
 
1205
1168
  newConnection.on('connectFailed', (err) => {
1206
1169
  this.oldConsumersTags = [];
1170
+ if (typeof err.url === 'string') {
1171
+ err.url = this.maskURL(err.url);
1172
+ }
1207
1173
  logger.error('rabbit: connection connectFailed', { err });
1208
1174
  if (!isResolved) {
1209
1175
  isResolved = true;
@@ -1226,7 +1192,7 @@ class RabbitMq implements IAfRabbitMq {
1226
1192
  newConnection.once('connect', async () => {
1227
1193
  debug('rabbit: connection established');
1228
1194
  connection.creatingConnection = false;
1229
- this.oldEm.emit(connectionCreatedEventName, connection);
1195
+ this.oldEm.emit(connectionCreatedEventName, newConnection);
1230
1196
  isResolved = true;
1231
1197
  resolve(newConnection);
1232
1198
  });
@@ -1300,11 +1266,6 @@ class RabbitMq implements IAfRabbitMq {
1300
1266
  }
1301
1267
 
1302
1268
  async assertChannelOld({ force = false, connection }: assertChannelOpts): Promise<ChannelWrapper> {
1303
- if (connection === this.oldPublishConnection) {
1304
- debug('rabbit: assertChannelOld publish', { force, promiseSetup: this.oldPublishChannelSetupPromise });
1305
- } else if (connection === this.oldConsumeConnection) {
1306
- debug('rabbit: assertChannelOld consume', { force, promiseSetup: this.oldPublishChannelSetupPromise });
1307
- }
1308
1269
  if (!this.oldPublishChannelSetupPromise) {
1309
1270
  this.oldPublishChannelSetupPromise = new Promise<ChannelWrapper>(async (resolve, reject) => {
1310
1271
  if (this.oldPublishChannel && !force) {
@@ -1313,16 +1274,10 @@ class RabbitMq implements IAfRabbitMq {
1313
1274
 
1314
1275
  try {
1315
1276
  const channel = await this.getNewChannelOld({ connection });
1316
- if (connection === this.oldPublishConnection) {
1317
- debug('rabbit: old new channel got publish', { force, channel });
1318
- } else if (connection === this.oldConsumeConnection) {
1319
- debug('rabbit: old new channel got consume', { force, channel });
1320
- }
1321
1277
  channel.on('error', (err) => {
1322
1278
  logger.error('rabbit: channel error', { err });
1323
1279
  });
1324
1280
  if (this.oldPublishConnection === connection) {
1325
- debug('rabbit: a new channel assigned to the oldPublishChannel', { connection });
1326
1281
  this.oldPublishChannel = channel;
1327
1282
  }
1328
1283
  resolve(channel);
@@ -1359,6 +1314,17 @@ class RabbitMq implements IAfRabbitMq {
1359
1314
  this.oldExchanges[exchangeName] = await this.oldAssertExchangePromises[exchangeName];
1360
1315
  return this.oldExchanges[exchangeName];
1361
1316
  }
1317
+
1318
+ private maskURL = (url: string): string => {
1319
+ try {
1320
+ const urlObj = new URL(url);
1321
+ urlObj.username = '***';
1322
+ urlObj.password = '***';
1323
+ return urlObj.toString();
1324
+ } catch {
1325
+ return url;
1326
+ }
1327
+ }
1362
1328
  }
1363
1329
 
1364
1330
  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
- connection: AmqpConnectionManager | null;
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-extraneous-dependencies
1
+ // eslint-disable-next-line import/no-unresolved
2
2
  import 'jest';
3
- import { IAfRabbitMq } from './index';
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;
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "include": ["src"],
4
+ "exclude": ["node_modules", "dist", "src/example.ts", "**/*.test.ts"],
5
+ }
package/tsconfig.json CHANGED
@@ -9,8 +9,8 @@
9
9
  "experimentalDecorators": true,
10
10
  "emitDecoratorMetadata": true,
11
11
  "skipLibCheck": true,
12
- "types": ["@types/jest"]
12
+ "sourceMap": true,
13
13
  },
14
14
  "exclude": ["node_modules"],
15
- "include": ["src/**/*.ts"]
15
+ "include": ["src/", "vitest.config.ts"],
16
16
  }
@@ -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
+ });