@autofleet/rabbit 3.4.0-beta.19 → 3.4.0-beta.2

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,6 +62,7 @@ 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;
65
66
  publishConnection: ConnectionData;
66
67
  consumeConnection: ConnectionData;
67
68
  em: EventEmitter;
@@ -97,7 +98,7 @@ declare class RabbitMq implements IAfRabbitMq {
97
98
  ack: (channel: ConfirmChannel, msg: ConsumeMessageOrNull, shouldUpdateRedisTimestamp?: boolean, releaseLock?: null) => (userMsg: ConsumeMessage) => Promise<any>;
98
99
  nack: (channel: ConfirmChannel, queue: string, options: any, deadQueueOptions: Options.AssertQueue, msg: ConsumeMessageOrNull, releaseLock: any) => (userMsg: ConsumeMessageOrNull, { skipRetry, }?: NackOptions) => Promise<any>;
99
100
  getConnection(connection: ConnectionData): Promise<AmqpConnectionManager>;
100
- getNewChannel({ name, onClose, options, connection, }: newChannelOpts): Promise<import("amqp-connection-manager/dist/types/ChannelWrapper").default>;
101
+ getNewChannel({ name, onClose, options, connection, }: newChannelOpts): Promise<ChannelWrapper>;
101
102
  assertChannel({ force, connection }: assertChannelOpts): Promise<ChannelWrapper>;
102
103
  assertExchange(exchangeName: string, connection: ConnectionData): Promise<any>;
103
104
  getQueueLength(queue: string): Promise<Replies.AssertQueue>;
@@ -119,7 +120,7 @@ declare class RabbitMq implements IAfRabbitMq {
119
120
  isConnected(): Promise<boolean>;
120
121
  gracefulShutdown(signal: string): Promise<void>;
121
122
  private consumeFromRabbitOld;
122
- getNewChannelOld({ name, onClose, options, connection, }: newChannelOpts): Promise<import("amqp-connection-manager/dist/types/ChannelWrapper").default>;
123
+ getNewChannelOld({ name, onClose, options, connection, }: newChannelOpts): Promise<ChannelWrapper>;
123
124
  getConnectionOld(connection: ConnectionData): Promise<AmqpConnectionManager>;
124
125
  private saveConsumerOld;
125
126
  assertQueueOld(queueName: string, options?: Options.AssertQueue): Promise<any>;
@@ -127,7 +128,6 @@ declare class RabbitMq implements IAfRabbitMq {
127
128
  assertChannelOld({ force, connection }: assertChannelOpts): Promise<ChannelWrapper>;
128
129
  private deleteQueueOld;
129
130
  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,29 +163,19 @@ 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
- };
177
166
  this.em = new events_1.EventEmitter();
178
167
  this.publishChannel = null;
179
168
  this.publishChannelSetupPromise = null;
169
+ this.connection = null;
180
170
  this.publishConnection = {
181
- amqpConnection: null,
171
+ connection: null,
182
172
  creatingConnection: false,
183
173
  connectionCreatedEventName: 'publishConnectionCreated',
184
174
  connectionFailedEventName: 'publishConnectionFailed',
185
175
  blockReconnect: false,
186
176
  };
187
177
  this.consumeConnection = {
188
- amqpConnection: null,
178
+ connection: null,
189
179
  creatingConnection: false,
190
180
  connectionCreatedEventName: 'consumeConnectionCreated',
191
181
  connectionFailedEventName: 'consumeConnectionFailed',
@@ -217,17 +207,17 @@ class RabbitMq {
217
207
  this.oldPublishChannel = null;
218
208
  this.oldPublishChannelSetupPromise = null;
219
209
  this.oldPublishConnection = {
220
- amqpConnection: null,
210
+ connection: null,
221
211
  creatingConnection: false,
222
- connectionCreatedEventName: 'oldPublishConnectionCreated',
223
- connectionFailedEventName: 'oldPublishConnectionFailed',
212
+ connectionCreatedEventName: 'publishConnectionCreated',
213
+ connectionFailedEventName: 'publishConnectionFailed',
224
214
  blockReconnect: false,
225
215
  };
226
216
  this.oldConsumeConnection = {
227
- amqpConnection: null,
217
+ connection: null,
228
218
  creatingConnection: false,
229
- connectionCreatedEventName: 'oldConsumeConnectionCreated',
230
- connectionFailedEventName: 'oldConsumeConnectionFailed',
219
+ connectionCreatedEventName: 'consumeConnectionCreated',
220
+ connectionFailedEventName: 'consumeConnectionFailed',
231
221
  blockReconnect: false,
232
222
  };
233
223
  this.oldCreatingConnection = false;
@@ -240,7 +230,7 @@ class RabbitMq {
240
230
  }
241
231
  async getConnection(connection) {
242
232
  return new Promise(async (resolve, reject) => {
243
- const { amqpConnection: connectionLocal, creatingConnection, connectionCreatedEventName, connectionFailedEventName, blockReconnect, } = connection;
233
+ const { connection: connectionLocal, creatingConnection, connectionCreatedEventName, connectionFailedEventName, blockReconnect, } = connection;
244
234
  if (blockReconnect) {
245
235
  debug('rabbit: block reconnect');
246
236
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -278,7 +268,13 @@ class RabbitMq {
278
268
  const newConnection = await (0, amqp_connection_manager_1.connect)(defaultUrls, {
279
269
  findServers,
280
270
  });
281
- connection.amqpConnection = newConnection;
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
+ }
282
278
  newConnection.on('error', (err) => {
283
279
  logger_1.default.error('rabbit: connection error', { err });
284
280
  if (!isResolved) {
@@ -289,9 +285,6 @@ class RabbitMq {
289
285
  });
290
286
  newConnection.on('connectFailed', (err) => {
291
287
  this.consumersTags = [];
292
- if (typeof err.url === 'string') {
293
- err.url = this.maskURL(err.url);
294
- }
295
288
  logger_1.default.error('rabbit: connection connectFailed', { err, advice: 'Check if the vhost exist', vhost: this.vhost });
296
289
  if (!isResolved) {
297
290
  isResolved = true;
@@ -314,7 +307,7 @@ class RabbitMq {
314
307
  newConnection.once('connect', async () => {
315
308
  debug('rabbit: connection established');
316
309
  connection.creatingConnection = false;
317
- this.em.emit(connectionCreatedEventName, newConnection);
310
+ this.em.emit(connectionCreatedEventName, connection);
318
311
  isResolved = true;
319
312
  resolve(newConnection);
320
313
  });
@@ -329,7 +322,7 @@ class RabbitMq {
329
322
  logger_1.default.error(`rabbit: error on get connection for new channel ${name} `, { e });
330
323
  throw e;
331
324
  }
332
- const channel = localConnection?.createChannel({ ...options });
325
+ const channel = localConnection.createChannel({ ...options });
333
326
  (0, events_1.once)(channel, 'close').then((args) => {
334
327
  logger_1.default.error(`rabbit: channel ${name} closed`);
335
328
  onClose?.(args);
@@ -387,7 +380,7 @@ class RabbitMq {
387
380
  if (!channel) {
388
381
  throw new rabbitError_1.default('channel is not defined');
389
382
  }
390
- debug('rabbit: getting queue length', { queue, connected: this.oldPublishConnection.amqpConnection?.isConnected() });
383
+ debug('rabbit: getting queue length', { queue, connected: this.connection?.isConnected() });
391
384
  return channel?.checkQueue(queue);
392
385
  }
393
386
  async deleteQueue(queue, connection) {
@@ -682,26 +675,26 @@ class RabbitMq {
682
675
  }
683
676
  // TODO: [QUORUM-PHASE-2] After changing the publish from old to new change from the old to the new implementation
684
677
  async isConnected() {
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');
678
+ debug('rabbit: start is connected');
679
+ const consumeConnection = await this.getConnectionOld(this.oldConsumeConnection);
680
+ const publishConnection = await this.getConnectionOld(this.oldPublishConnection);
681
+ const isConnected = consumeConnection.isConnected() && publishConnection.isConnected();
682
+ if (!isConnected) {
683
+ logger_1.default.error('rabbit: isConnected - false');
691
684
  return false;
692
685
  }
693
- const oldChannel = await this.assertChannelOld({ connection: this.oldPublishConnection });
686
+ const channel = await this.assertChannelOld({ connection: this.oldPublishConnection });
694
687
  try {
695
688
  await Promise.all([
696
- oldChannel.waitForConnect(),
697
- ...this.oldConsumers.map((c) => oldChannel.checkQueue(c.queue)),
689
+ channel.waitForConnect(),
690
+ ...this.oldConsumers.map((c) => channel.checkQueue(c.queue)),
698
691
  ]);
699
692
  }
700
693
  catch (e) {
701
- logger_1.default.error('rabbit: old isConnected - false');
694
+ logger_1.default.error('rabbit: isConnected - false');
702
695
  return false;
703
696
  }
704
- logger_1.default.debug('rabbit: old isConnected - true');
697
+ logger_1.default.debug('rabbit: isConnected - true');
705
698
  return true;
706
699
  }
707
700
  async gracefulShutdown(signal) {
@@ -822,10 +815,8 @@ class RabbitMq {
822
815
  logger_1.default.error(`rabbit: error on get connection for new channel ${name} `, { e });
823
816
  throw e;
824
817
  }
825
- if (!localConnection) {
826
- throw new Error(`rabbit: couldnt get connection for new channel ${name}`);
827
- }
828
- const channel = localConnection?.createChannel({ ...options });
818
+ debug('rabbit: getNewChannelOld', { localConnection });
819
+ const channel = localConnection.createChannel({ ...options });
829
820
  (0, events_1.once)(channel, 'close').then((args) => {
830
821
  logger_1.default.error(`rabbit: channel ${name} closed`);
831
822
  onClose?.(args);
@@ -842,7 +833,13 @@ class RabbitMq {
842
833
  }
843
834
  async getConnectionOld(connection) {
844
835
  return new Promise(async (resolve, reject) => {
845
- const { amqpConnection: connectionLocal, creatingConnection, connectionCreatedEventName, connectionFailedEventName, blockReconnect, } = connection;
836
+ const { connection: connectionLocal, creatingConnection, connectionCreatedEventName, connectionFailedEventName, blockReconnect, } = connection;
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
+ }
846
843
  if (blockReconnect) {
847
844
  debug('rabbit: block reconnect');
848
845
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -880,7 +877,13 @@ class RabbitMq {
880
877
  const newConnection = await (0, amqp_connection_manager_1.connect)(defaultUrls, {
881
878
  findServers,
882
879
  });
883
- connection.amqpConnection = newConnection;
880
+ connection.connection = newConnection;
881
+ if (connection === this.oldPublishConnection) {
882
+ debug('rabbit: oldPublishConnection set');
883
+ }
884
+ else if (connection === this.oldConsumeConnection) {
885
+ debug('rabbit: oldConsumeConnection set');
886
+ }
884
887
  newConnection.on('error', (err) => {
885
888
  logger_1.default.error('rabbit: connection error', { err });
886
889
  if (!isResolved) {
@@ -891,9 +894,6 @@ class RabbitMq {
891
894
  });
892
895
  newConnection.on('connectFailed', (err) => {
893
896
  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, newConnection);
918
+ this.oldEm.emit(connectionCreatedEventName, connection);
919
919
  isResolved = true;
920
920
  resolve(newConnection);
921
921
  });
@@ -994,6 +994,7 @@ 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 });
997
998
  this.oldPublishChannel = channel;
998
999
  }
999
1000
  resolve(channel);
@@ -1030,4 +1031,3 @@ class RabbitMq {
1030
1031
  exports.default = RabbitMq;
1031
1032
  var celery_1 = require("./lib/celery");
1032
1033
  Object.defineProperty(exports, "sendCeleryTaskViaHttp", { enumerable: true, get: function () { return celery_1.sendCeleryTaskViaHttp; } });
1033
- //# sourceMappingURL=index.js.map
@@ -52,4 +52,3 @@ async function sendCeleryTaskViaHttp(data, { taskName, queueName }) {
52
52
  }
53
53
  }
54
54
  exports.sendCeleryTaskViaHttp = sendCeleryTaskViaHttp;
55
- //# sourceMappingURL=celery.js.map
@@ -18,4 +18,3 @@ exports.DEFAULT_OPTIONS = {
18
18
  auditContext: null,
19
19
  enableRabbitTrace: false,
20
20
  };
21
- //# sourceMappingURL=consts.js.map
@@ -7,4 +7,3 @@ class RabbitError extends Error {
7
7
  }
8
8
  }
9
9
  exports.default = RabbitError;
10
- //# sourceMappingURL=rabbitError.js.map
package/dist/lib/redis.js CHANGED
@@ -9,4 +9,3 @@ 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
@@ -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
- amqpConnection: AmqpConnectionManager | null;
47
+ connection: AmqpConnectionManager | null;
48
48
  creatingConnection: boolean;
49
49
  connectionCreatedEventName: string;
50
50
  connectionFailedEventName: string;
package/dist/lib/types.js CHANGED
@@ -9,4 +9,3 @@ exports.CONSUMER_DEFAULT_OPTIONS = {
9
9
  [HA_PROMOTE_ON_SHUTDOWN]: 'always',
10
10
  },
11
11
  };
12
- //# sourceMappingURL=types.js.map
package/dist/lib/utils.js CHANGED
@@ -17,4 +17,3 @@ 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
package/dist/logger.js CHANGED
@@ -6,4 +6,3 @@ 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
@@ -1,5 +1,5 @@
1
1
  import 'jest';
2
- import type { IAfRabbitMq } from '../index';
2
+ import { 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-unresolved
3
+ // eslint-disable-next-line import/no-extraneous-dependencies
4
4
  require("jest");
5
5
  class RabbitMq {
6
6
  constructor() {
@@ -16,4 +16,3 @@ class RabbitMq {
16
16
  }
17
17
  }
18
18
  exports.default = RabbitMq;
19
- //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autofleet/rabbit",
3
- "version": "3.4.0-beta.19",
3
+ "version": "3.4.0-beta.2",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "engines": {
@@ -10,47 +10,40 @@
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 -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",
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",
18
18
  "dev": "nodemon"
19
19
  },
20
20
  "dependencies": {
21
21
  "@autofleet/zehut": "^3.1.2",
22
- "amqp-connection-manager": "4.1.14",
23
- "amqplib": "0.10.5",
22
+ "amqp-connection-manager": "4.1.9",
23
+ "amqplib": "0.10.3",
24
24
  "bluebird": "^3.7.2",
25
- "moment": "^2.30.1",
25
+ "moment": "^2.29.1",
26
26
  "redis": "^3.1.2",
27
27
  "redis-lock": "^0.1.4"
28
28
  },
29
29
  "peerDependencies": {
30
- "@autofleet/logger": "*",
31
- "jest": "*"
32
- },
33
- "peerDependenciesMeta": {
34
- "jest": {
35
- "optional": true
36
- }
30
+ "@autofleet/logger": "*"
37
31
  },
38
32
  "devDependencies": {
39
33
  "@autofleet/logger": "4.0.6",
40
- "@types/amqplib": "0.10.7",
41
- "@types/bluebird": "^3.5.42",
34
+ "@types/amqplib": "0.8.2",
42
35
  "@types/jest": "^29.5.12",
43
36
  "@types/node": "^20.14.11",
44
37
  "@typescript-eslint/eslint-plugin": "^4.8.1",
45
- "@vitest/coverage-v8": "^3.1.3",
46
38
  "eslint": "^7.13.0",
47
39
  "eslint-config-airbnb-typescript": "^12.0.0",
48
40
  "eslint-plugin-import": "^2.22.1",
41
+ "jest": "^29.7.0",
49
42
  "node-tcp-proxy": "^0.0.28",
43
+ "ts-jest": "^29.2.3",
50
44
  "ts-node": "^8.6.2",
51
- "typescript": "^4.9.5",
52
- "vitest": "^3.1.3"
45
+ "typescript": "^4.9.5"
53
46
  },
54
47
  "author": "",
55
- "license": "Proprietary"
48
+ "license": "ISC"
56
49
  }
package/src/index.ts CHANGED
@@ -149,6 +149,8 @@ class RabbitMq implements IAfRabbitMq {
149
149
 
150
150
  blockReconnect: boolean | null | undefined
151
151
 
152
+ connection: AmqpConnectionManager | null | undefined
153
+
152
154
  publishConnection: ConnectionData
153
155
 
154
156
  consumeConnection: ConnectionData
@@ -211,15 +213,16 @@ class RabbitMq implements IAfRabbitMq {
211
213
  this.em = new EventEmitter();
212
214
  this.publishChannel = null;
213
215
  this.publishChannelSetupPromise = null;
216
+ this.connection = null;
214
217
  this.publishConnection = {
215
- amqpConnection: null,
218
+ connection: null,
216
219
  creatingConnection: false,
217
220
  connectionCreatedEventName: 'publishConnectionCreated',
218
221
  connectionFailedEventName: 'publishConnectionFailed',
219
222
  blockReconnect: false,
220
223
  };
221
224
  this.consumeConnection = {
222
- amqpConnection: null,
225
+ connection: null,
223
226
  creatingConnection: false,
224
227
  connectionCreatedEventName: 'consumeConnectionCreated',
225
228
  connectionFailedEventName: 'consumeConnectionFailed',
@@ -253,17 +256,17 @@ class RabbitMq implements IAfRabbitMq {
253
256
  this.oldPublishChannel = null;
254
257
  this.oldPublishChannelSetupPromise = null;
255
258
  this.oldPublishConnection = {
256
- amqpConnection: null,
259
+ connection: null,
257
260
  creatingConnection: false,
258
- connectionCreatedEventName: 'oldPublishConnectionCreated',
259
- connectionFailedEventName: 'oldPublishConnectionFailed',
261
+ connectionCreatedEventName: 'publishConnectionCreated',
262
+ connectionFailedEventName: 'publishConnectionFailed',
260
263
  blockReconnect: false,
261
264
  };
262
265
  this.oldConsumeConnection = {
263
- amqpConnection: null,
266
+ connection: null,
264
267
  creatingConnection: false,
265
- connectionCreatedEventName: 'oldConsumeConnectionCreated',
266
- connectionFailedEventName: 'oldConsumeConnectionFailed',
268
+ connectionCreatedEventName: 'consumeConnectionCreated',
269
+ connectionFailedEventName: 'consumeConnectionFailed',
267
270
  blockReconnect: false,
268
271
  };
269
272
  this.oldCreatingConnection = false;
@@ -375,13 +378,13 @@ class RabbitMq implements IAfRabbitMq {
375
378
  if (
376
379
  !skipRetry
377
380
  && (
378
- !msg.properties.headers?.[RETRY_HEADER]
381
+ !msg.properties.headers[RETRY_HEADER]
379
382
  || parseInt(msg.properties.headers[RETRY_HEADER], 10) < options.retries
380
383
  )
381
384
  ) {
382
385
  await this.sendToQueue(queue, RabbitMq.parseMsg(msg).content, options, {
383
386
  ...msg.properties.headers,
384
- [RETRY_HEADER]: msg.properties.headers?.[RETRY_HEADER]
387
+ [RETRY_HEADER]: msg.properties.headers[RETRY_HEADER]
385
388
  ? msg.properties.headers[RETRY_HEADER] + 1
386
389
  : 1,
387
390
  });
@@ -389,7 +392,7 @@ class RabbitMq implements IAfRabbitMq {
389
392
  const deadQueue = `${queue}-dead`;
390
393
  await this.sendToQueue(deadQueue, RabbitMq.parseMsg(msg).content, deadQueueOptions, {
391
394
  ...msg.properties.headers,
392
- [RETRY_HEADER]: msg.properties.headers?.[RETRY_HEADER]
395
+ [RETRY_HEADER]: msg.properties.headers[RETRY_HEADER]
393
396
  ? msg.properties.headers[RETRY_HEADER] + 1
394
397
  : 1,
395
398
  });
@@ -406,13 +409,12 @@ class RabbitMq implements IAfRabbitMq {
406
409
  async getConnection(connection: ConnectionData) {
407
410
  return new Promise<AmqpConnectionManager>(async (resolve, reject) => {
408
411
  const {
409
- amqpConnection: connectionLocal,
412
+ connection: connectionLocal,
410
413
  creatingConnection,
411
414
  connectionCreatedEventName,
412
415
  connectionFailedEventName,
413
416
  blockReconnect,
414
417
  } = connection;
415
-
416
418
  if (blockReconnect) {
417
419
  debug('rabbit: block reconnect');
418
420
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -454,7 +456,12 @@ class RabbitMq implements IAfRabbitMq {
454
456
  findServers,
455
457
  });
456
458
 
457
- connection.amqpConnection = newConnection;
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
+ }
458
465
  newConnection.on('error', (err) => {
459
466
  logger.error('rabbit: connection error', { err });
460
467
  if (!isResolved) {
@@ -466,9 +473,6 @@ class RabbitMq implements IAfRabbitMq {
466
473
 
467
474
  newConnection.on('connectFailed', (err) => {
468
475
  this.consumersTags = [];
469
- if (typeof err.url === 'string') {
470
- err.url = this.maskURL(err.url);
471
- }
472
476
  logger.error('rabbit: connection connectFailed', { err, advice: 'Check if the vhost exist', vhost: this.vhost });
473
477
  if (!isResolved) {
474
478
  isResolved = true;
@@ -492,7 +496,7 @@ class RabbitMq implements IAfRabbitMq {
492
496
  newConnection.once('connect', async () => {
493
497
  debug('rabbit: connection established');
494
498
  connection.creatingConnection = false;
495
- this.em.emit(connectionCreatedEventName, newConnection);
499
+ this.em.emit(connectionCreatedEventName, connection);
496
500
  isResolved = true;
497
501
  resolve(newConnection);
498
502
  });
@@ -509,7 +513,7 @@ class RabbitMq implements IAfRabbitMq {
509
513
  logger.error(`rabbit: error on get connection for new channel ${name} `, { e });
510
514
  throw e;
511
515
  }
512
- const channel = localConnection?.createChannel({ ...options });
516
+ const channel = localConnection.createChannel({ ...options });
513
517
  once(channel, 'close').then((args) => {
514
518
  logger.error(`rabbit: channel ${name} closed`);
515
519
  onClose?.(args);
@@ -572,7 +576,7 @@ class RabbitMq implements IAfRabbitMq {
572
576
  if (!channel) {
573
577
  throw new RabbitError('channel is not defined');
574
578
  }
575
- debug('rabbit: getting queue length', { queue, connected: this.oldPublishConnection.amqpConnection?.isConnected() });
579
+ debug('rabbit: getting queue length', { queue, connected: this.connection?.isConnected() });
576
580
  return channel?.checkQueue(queue);
577
581
  }
578
582
 
@@ -678,7 +682,7 @@ class RabbitMq implements IAfRabbitMq {
678
682
  // Used by the microservices to consume messages from the queue
679
683
  async consume(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise<any> {
680
684
  // TODO: [QUORUM-PHASE-3] Use only the implementation of consumeNew and delete consumeNew and consumeOld
681
- if (options?.isQuorumQueue !== false || process.env.DISABLE_QUORUM_QUEUES === 'true') {
685
+ if (options?.isQuorumQueue !== false) {
682
686
  await this.assertVHost();
683
687
  await this.consumeNew(queue, callback, options);
684
688
  }
@@ -741,9 +745,9 @@ class RabbitMq implements IAfRabbitMq {
741
745
  return null;
742
746
  }
743
747
 
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];
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];
747
751
  const parsedMessage = RabbitMq.parseMsg(msg);
748
752
  const releaseLock = await this.lockRedisIfNeeded(parsedMessage, optionsWithDefaults);
749
753
  const trace = newTrace(traceTypes.RABBIT);
@@ -827,7 +831,7 @@ class RabbitMq implements IAfRabbitMq {
827
831
  RabbitMq.validateName('queue', queue);
828
832
  const { limit, deadMessageTtl } = optionsWithDefaults;
829
833
  // TODO: [QUORUM-PHASE-3] Delete the if statement after all the queues are created as quorum queues
830
- if (options?.isQuorumQueue !== false || process.env.DISABLE_QUORUM_QUEUES === 'true') {
834
+ if (options?.isQuorumQueue !== false) {
831
835
  await this.assertVHost();
832
836
  await this.saveConsumer(queue, callback, options);
833
837
  const channel: ChannelWrapper = await this.getNewChannel({
@@ -850,6 +854,7 @@ class RabbitMq implements IAfRabbitMq {
850
854
  ]);
851
855
  });
852
856
  }
857
+
853
858
  // TODO: [QUORUM-PHASE-3] Delete the old implementation
854
859
  await this.saveConsumerOld(queue, callback, options);
855
860
  const channelOld: ChannelWrapper = await this.getNewChannelOld({
@@ -922,26 +927,26 @@ class RabbitMq implements IAfRabbitMq {
922
927
  }
923
928
 
924
929
  // TODO: [QUORUM-PHASE-2] After changing the publish from old to new change from the old to the new implementation
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');
930
+ async isConnected() : Promise<boolean> {
931
+ debug('rabbit: start is connected');
932
+ const consumeConnection = await this.getConnectionOld(this.oldConsumeConnection);
933
+ const publishConnection = await this.getConnectionOld(this.oldPublishConnection);
934
+ const isConnected = consumeConnection.isConnected() && publishConnection.isConnected();
935
+ if (!isConnected) {
936
+ logger.error('rabbit: isConnected - false');
932
937
  return false;
933
938
  }
934
- const oldChannel: any = await this.assertChannelOld({ connection: this.oldPublishConnection });
939
+ const channel: any = await this.assertChannelOld({ connection: this.oldPublishConnection });
935
940
  try {
936
941
  await Promise.all([
937
- oldChannel.waitForConnect(),
938
- ...this.oldConsumers.map((c: AfConsumer) => oldChannel.checkQueue(c.queue)),
942
+ channel.waitForConnect(),
943
+ ...this.oldConsumers.map((c: AfConsumer) => channel.checkQueue(c.queue)),
939
944
  ]);
940
945
  } catch (e) {
941
- logger.error('rabbit: old isConnected - false');
946
+ logger.error('rabbit: isConnected - false');
942
947
  return false;
943
948
  }
944
- logger.debug('rabbit: old isConnected - true');
949
+ logger.debug('rabbit: isConnected - true');
945
950
  return true;
946
951
  }
947
952
 
@@ -988,9 +993,9 @@ class RabbitMq implements IAfRabbitMq {
988
993
  return null;
989
994
  }
990
995
 
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];
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];
994
999
  const parsedMessage = RabbitMq.parseMsg(msg);
995
1000
  const releaseLock = await this.lockRedisIfNeeded(parsedMessage, optionsWithDefaults);
996
1001
  const trace = newTrace(traceTypes.RABBIT);
@@ -1078,12 +1083,8 @@ class RabbitMq implements IAfRabbitMq {
1078
1083
  logger.error(`rabbit: error on get connection for new channel ${name} `, { e });
1079
1084
  throw e;
1080
1085
  }
1081
-
1082
- if (!localConnection) {
1083
- throw new Error(`rabbit: couldnt get connection for new channel ${name}`);
1084
- }
1085
-
1086
- const channel = localConnection?.createChannel({ ...options });
1086
+ debug('rabbit: getNewChannelOld', { localConnection });
1087
+ const channel = localConnection.createChannel({ ...options });
1087
1088
  once(channel, 'close').then((args) => {
1088
1089
  logger.error(`rabbit: channel ${name} closed`);
1089
1090
  onClose?.(args);
@@ -1101,13 +1102,18 @@ class RabbitMq implements IAfRabbitMq {
1101
1102
  async getConnectionOld(connection: ConnectionData) {
1102
1103
  return new Promise<AmqpConnectionManager>(async (resolve, reject) => {
1103
1104
  const {
1104
- amqpConnection: connectionLocal,
1105
+ connection: connectionLocal,
1105
1106
  creatingConnection,
1106
1107
  connectionCreatedEventName,
1107
1108
  connectionFailedEventName,
1108
1109
  blockReconnect,
1109
1110
  } = connection;
1110
1111
 
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
+ }
1111
1117
  if (blockReconnect) {
1112
1118
  debug('rabbit: block reconnect');
1113
1119
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -1150,7 +1156,12 @@ class RabbitMq implements IAfRabbitMq {
1150
1156
  findServers,
1151
1157
  });
1152
1158
 
1153
- connection.amqpConnection = newConnection;
1159
+ connection.connection = newConnection;
1160
+ if (connection === this.oldPublishConnection) {
1161
+ debug('rabbit: oldPublishConnection set');
1162
+ } else if (connection === this.oldConsumeConnection) {
1163
+ debug('rabbit: oldConsumeConnection set');
1164
+ }
1154
1165
  newConnection.on('error', (err) => {
1155
1166
  logger.error('rabbit: connection error', { err });
1156
1167
  if (!isResolved) {
@@ -1162,9 +1173,6 @@ class RabbitMq implements IAfRabbitMq {
1162
1173
 
1163
1174
  newConnection.on('connectFailed', (err) => {
1164
1175
  this.oldConsumersTags = [];
1165
- if (typeof err.url === 'string') {
1166
- err.url = this.maskURL(err.url);
1167
- }
1168
1176
  logger.error('rabbit: connection connectFailed', { err });
1169
1177
  if (!isResolved) {
1170
1178
  isResolved = true;
@@ -1187,7 +1195,7 @@ class RabbitMq implements IAfRabbitMq {
1187
1195
  newConnection.once('connect', async () => {
1188
1196
  debug('rabbit: connection established');
1189
1197
  connection.creatingConnection = false;
1190
- this.oldEm.emit(connectionCreatedEventName, newConnection);
1198
+ this.oldEm.emit(connectionCreatedEventName, connection);
1191
1199
  isResolved = true;
1192
1200
  resolve(newConnection);
1193
1201
  });
@@ -1273,6 +1281,7 @@ class RabbitMq implements IAfRabbitMq {
1273
1281
  logger.error('rabbit: channel error', { err });
1274
1282
  });
1275
1283
  if (this.oldPublishConnection === connection) {
1284
+ debug('rabbit: a new channel assigned to the oldPublishChannel', { connection });
1276
1285
  this.oldPublishChannel = channel;
1277
1286
  }
1278
1287
  resolve(channel);
@@ -1309,17 +1318,6 @@ class RabbitMq implements IAfRabbitMq {
1309
1318
  this.oldExchanges[exchangeName] = await this.oldAssertExchangePromises[exchangeName];
1310
1319
  return this.oldExchanges[exchangeName];
1311
1320
  }
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
- }
1323
1321
  }
1324
1322
 
1325
1323
  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
- amqpConnection: AmqpConnectionManager | null;
67
+ connection: 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-unresolved
1
+ // eslint-disable-next-line import/no-extraneous-dependencies
2
2
  import 'jest';
3
- import type { IAfRabbitMq } from '../index';
3
+ import { IAfRabbitMq } from './index';
4
4
 
5
5
  class RabbitMq implements IAfRabbitMq {
6
6
  ack: any = jest.fn();
package/tsconfig.json CHANGED
@@ -9,8 +9,8 @@
9
9
  "experimentalDecorators": true,
10
10
  "emitDecoratorMetadata": true,
11
11
  "skipLibCheck": true,
12
- "sourceMap": true,
12
+ "types": ["@types/jest"]
13
13
  },
14
14
  "exclude": ["node_modules"],
15
- "include": ["src/", "vitest.config.ts"],
15
+ "include": ["src/**/*.ts"]
16
16
  }
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
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 +0,0 @@
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"}
@@ -1,13 +0,0 @@
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;
@@ -1,18 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,24 +0,0 @@
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;
@@ -1,5 +0,0 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "include": ["src"],
4
- "exclude": ["node_modules", "dist", "src/example.ts", "**/*.test.ts"],
5
- }
package/vitest.config.ts DELETED
@@ -1,16 +0,0 @@
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
- });