@autofleet/rabbit 3.4.0-beta.17 → 3.4.0-beta.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +3 -3
- package/dist/index.js +30 -35
- package/dist/index.js.map +1 -0
- package/dist/lib/celery.js +1 -0
- package/dist/lib/celery.js.map +1 -0
- package/dist/lib/consts.js +1 -0
- package/dist/lib/consts.js.map +1 -0
- package/dist/lib/rabbitError.js +1 -0
- package/dist/lib/rabbitError.js.map +1 -0
- package/dist/lib/redis.js +1 -0
- package/dist/lib/redis.js.map +1 -0
- package/dist/lib/types.d.ts +1 -1
- package/dist/lib/types.js +1 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utils.js +1 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/logger.js +1 -0
- package/dist/logger.js.map +1 -0
- package/dist/{mock.d.ts → mock/index.d.ts} +1 -1
- package/dist/{mock.js → mock/index.js} +2 -1
- package/dist/mock/index.js.map +1 -0
- package/dist/mock/vitest.d.ts +13 -0
- package/dist/mock/vitest.js +18 -0
- package/dist/mock/vitest.js.map +1 -0
- package/package.json +22 -15
- package/src/index.ts +38 -46
- package/src/lib/types.ts +1 -1
- package/src/{mock.ts → mock/index.ts} +2 -2
- package/src/mock/vitest.ts +24 -0
- package/tsconfig.build.json +5 -0
- package/tsconfig.json +2 -2
- package/vitest.config.ts +16 -0
package/dist/index.d.ts
CHANGED
|
@@ -62,7 +62,6 @@ declare class RabbitMq implements IAfRabbitMq {
|
|
|
62
62
|
publishChannel: ChannelWrapper | null;
|
|
63
63
|
publishChannelSetupPromise: Promise<ChannelWrapper> | null;
|
|
64
64
|
blockReconnect: boolean | null | undefined;
|
|
65
|
-
connection: AmqpConnectionManager | null | undefined;
|
|
66
65
|
publishConnection: ConnectionData;
|
|
67
66
|
consumeConnection: ConnectionData;
|
|
68
67
|
em: EventEmitter;
|
|
@@ -98,7 +97,7 @@ declare class RabbitMq implements IAfRabbitMq {
|
|
|
98
97
|
ack: (channel: ConfirmChannel, msg: ConsumeMessageOrNull, shouldUpdateRedisTimestamp?: boolean, releaseLock?: null) => (userMsg: ConsumeMessage) => Promise<any>;
|
|
99
98
|
nack: (channel: ConfirmChannel, queue: string, options: any, deadQueueOptions: Options.AssertQueue, msg: ConsumeMessageOrNull, releaseLock: any) => (userMsg: ConsumeMessageOrNull, { skipRetry, }?: NackOptions) => Promise<any>;
|
|
100
99
|
getConnection(connection: ConnectionData): Promise<AmqpConnectionManager>;
|
|
101
|
-
getNewChannel({ name, onClose, options, connection, }: newChannelOpts): Promise<ChannelWrapper>;
|
|
100
|
+
getNewChannel({ name, onClose, options, connection, }: newChannelOpts): Promise<import("amqp-connection-manager/dist/types/ChannelWrapper").default>;
|
|
102
101
|
assertChannel({ force, connection }: assertChannelOpts): Promise<ChannelWrapper>;
|
|
103
102
|
assertExchange(exchangeName: string, connection: ConnectionData): Promise<any>;
|
|
104
103
|
getQueueLength(queue: string): Promise<Replies.AssertQueue>;
|
|
@@ -120,7 +119,7 @@ declare class RabbitMq implements IAfRabbitMq {
|
|
|
120
119
|
isConnected(): Promise<boolean>;
|
|
121
120
|
gracefulShutdown(signal: string): Promise<void>;
|
|
122
121
|
private consumeFromRabbitOld;
|
|
123
|
-
getNewChannelOld({ name, onClose, options, connection, }: newChannelOpts): Promise<ChannelWrapper>;
|
|
122
|
+
getNewChannelOld({ name, onClose, options, connection, }: newChannelOpts): Promise<import("amqp-connection-manager/dist/types/ChannelWrapper").default>;
|
|
124
123
|
getConnectionOld(connection: ConnectionData): Promise<AmqpConnectionManager>;
|
|
125
124
|
private saveConsumerOld;
|
|
126
125
|
assertQueueOld(queueName: string, options?: Options.AssertQueue): Promise<any>;
|
|
@@ -128,6 +127,7 @@ declare class RabbitMq implements IAfRabbitMq {
|
|
|
128
127
|
assertChannelOld({ force, connection }: assertChannelOpts): Promise<ChannelWrapper>;
|
|
129
128
|
private deleteQueueOld;
|
|
130
129
|
assertExchangeOld(exchangeName: string, connection: ConnectionData): Promise<any>;
|
|
130
|
+
private maskURL;
|
|
131
131
|
}
|
|
132
132
|
export default RabbitMq;
|
|
133
133
|
export { sendCeleryTaskViaHttp, } from './lib/celery';
|
package/dist/index.js
CHANGED
|
@@ -136,11 +136,11 @@ class RabbitMq {
|
|
|
136
136
|
await this.unlockRedisIfNeeded(releaseLock);
|
|
137
137
|
if (channel && msg) {
|
|
138
138
|
if (!skipRetry
|
|
139
|
-
&& (!msg.properties.headers[consts_1.RETRY_HEADER]
|
|
139
|
+
&& (!msg.properties.headers?.[consts_1.RETRY_HEADER]
|
|
140
140
|
|| parseInt(msg.properties.headers[consts_1.RETRY_HEADER], 10) < options.retries)) {
|
|
141
141
|
await this.sendToQueue(queue, RabbitMq.parseMsg(msg).content, options, {
|
|
142
142
|
...msg.properties.headers,
|
|
143
|
-
[consts_1.RETRY_HEADER]: msg.properties.headers[consts_1.RETRY_HEADER]
|
|
143
|
+
[consts_1.RETRY_HEADER]: msg.properties.headers?.[consts_1.RETRY_HEADER]
|
|
144
144
|
? msg.properties.headers[consts_1.RETRY_HEADER] + 1
|
|
145
145
|
: 1,
|
|
146
146
|
});
|
|
@@ -149,7 +149,7 @@ class RabbitMq {
|
|
|
149
149
|
const deadQueue = `${queue}-dead`;
|
|
150
150
|
await this.sendToQueue(deadQueue, RabbitMq.parseMsg(msg).content, deadQueueOptions, {
|
|
151
151
|
...msg.properties.headers,
|
|
152
|
-
[consts_1.RETRY_HEADER]: msg.properties.headers[consts_1.RETRY_HEADER]
|
|
152
|
+
[consts_1.RETRY_HEADER]: msg.properties.headers?.[consts_1.RETRY_HEADER]
|
|
153
153
|
? msg.properties.headers[consts_1.RETRY_HEADER] + 1
|
|
154
154
|
: 1,
|
|
155
155
|
});
|
|
@@ -163,19 +163,29 @@ class RabbitMq {
|
|
|
163
163
|
});
|
|
164
164
|
}
|
|
165
165
|
};
|
|
166
|
+
this.maskURL = (url) => {
|
|
167
|
+
try {
|
|
168
|
+
const urlObj = new URL(url);
|
|
169
|
+
urlObj.username = '***';
|
|
170
|
+
urlObj.password = '***';
|
|
171
|
+
return urlObj.toString();
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return url;
|
|
175
|
+
}
|
|
176
|
+
};
|
|
166
177
|
this.em = new events_1.EventEmitter();
|
|
167
178
|
this.publishChannel = null;
|
|
168
179
|
this.publishChannelSetupPromise = null;
|
|
169
|
-
this.connection = null;
|
|
170
180
|
this.publishConnection = {
|
|
171
|
-
|
|
181
|
+
amqpConnection: null,
|
|
172
182
|
creatingConnection: false,
|
|
173
183
|
connectionCreatedEventName: 'publishConnectionCreated',
|
|
174
184
|
connectionFailedEventName: 'publishConnectionFailed',
|
|
175
185
|
blockReconnect: false,
|
|
176
186
|
};
|
|
177
187
|
this.consumeConnection = {
|
|
178
|
-
|
|
188
|
+
amqpConnection: null,
|
|
179
189
|
creatingConnection: false,
|
|
180
190
|
connectionCreatedEventName: 'consumeConnectionCreated',
|
|
181
191
|
connectionFailedEventName: 'consumeConnectionFailed',
|
|
@@ -207,14 +217,14 @@ class RabbitMq {
|
|
|
207
217
|
this.oldPublishChannel = null;
|
|
208
218
|
this.oldPublishChannelSetupPromise = null;
|
|
209
219
|
this.oldPublishConnection = {
|
|
210
|
-
|
|
220
|
+
amqpConnection: null,
|
|
211
221
|
creatingConnection: false,
|
|
212
222
|
connectionCreatedEventName: 'oldPublishConnectionCreated',
|
|
213
223
|
connectionFailedEventName: 'oldPublishConnectionFailed',
|
|
214
224
|
blockReconnect: false,
|
|
215
225
|
};
|
|
216
226
|
this.oldConsumeConnection = {
|
|
217
|
-
|
|
227
|
+
amqpConnection: null,
|
|
218
228
|
creatingConnection: false,
|
|
219
229
|
connectionCreatedEventName: 'oldConsumeConnectionCreated',
|
|
220
230
|
connectionFailedEventName: 'oldConsumeConnectionFailed',
|
|
@@ -230,7 +240,7 @@ class RabbitMq {
|
|
|
230
240
|
}
|
|
231
241
|
async getConnection(connection) {
|
|
232
242
|
return new Promise(async (resolve, reject) => {
|
|
233
|
-
const {
|
|
243
|
+
const { amqpConnection: connectionLocal, creatingConnection, connectionCreatedEventName, connectionFailedEventName, blockReconnect, } = connection;
|
|
234
244
|
if (blockReconnect) {
|
|
235
245
|
debug('rabbit: block reconnect');
|
|
236
246
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -268,7 +278,7 @@ class RabbitMq {
|
|
|
268
278
|
const newConnection = await (0, amqp_connection_manager_1.connect)(defaultUrls, {
|
|
269
279
|
findServers,
|
|
270
280
|
});
|
|
271
|
-
connection.
|
|
281
|
+
connection.amqpConnection = newConnection;
|
|
272
282
|
newConnection.on('error', (err) => {
|
|
273
283
|
logger_1.default.error('rabbit: connection error', { err });
|
|
274
284
|
if (!isResolved) {
|
|
@@ -279,6 +289,9 @@ class RabbitMq {
|
|
|
279
289
|
});
|
|
280
290
|
newConnection.on('connectFailed', (err) => {
|
|
281
291
|
this.consumersTags = [];
|
|
292
|
+
if (typeof err.url === 'string') {
|
|
293
|
+
err.url = this.maskURL(err.url);
|
|
294
|
+
}
|
|
282
295
|
logger_1.default.error('rabbit: connection connectFailed', { err, advice: 'Check if the vhost exist', vhost: this.vhost });
|
|
283
296
|
if (!isResolved) {
|
|
284
297
|
isResolved = true;
|
|
@@ -374,7 +387,7 @@ class RabbitMq {
|
|
|
374
387
|
if (!channel) {
|
|
375
388
|
throw new rabbitError_1.default('channel is not defined');
|
|
376
389
|
}
|
|
377
|
-
debug('rabbit: getting queue length', { queue, connected: this.
|
|
390
|
+
debug('rabbit: getting queue length', { queue, connected: this.oldPublishConnection.amqpConnection?.isConnected() });
|
|
378
391
|
return channel?.checkQueue(queue);
|
|
379
392
|
}
|
|
380
393
|
async deleteQueue(queue, connection) {
|
|
@@ -669,7 +682,6 @@ class RabbitMq {
|
|
|
669
682
|
}
|
|
670
683
|
// TODO: [QUORUM-PHASE-2] After changing the publish from old to new change from the old to the new implementation
|
|
671
684
|
async isConnected() {
|
|
672
|
-
// TODO: OLD IMPLEMENTATION
|
|
673
685
|
debug('rabbit: start old is connected');
|
|
674
686
|
const oldConsumeConnection = await this.getConnectionOld(this.oldConsumeConnection);
|
|
675
687
|
const oldPublishConnection = await this.getConnectionOld(this.oldPublishConnection);
|
|
@@ -690,27 +702,6 @@ class RabbitMq {
|
|
|
690
702
|
return false;
|
|
691
703
|
}
|
|
692
704
|
logger_1.default.debug('rabbit: old isConnected - true');
|
|
693
|
-
// TODO: NEW IMPLEMENTATION
|
|
694
|
-
debug('rabbit: start is connected');
|
|
695
|
-
const consumeConnection = await this.getConnection(this.consumeConnection);
|
|
696
|
-
const publishConnection = await this.getConnection(this.publishConnection);
|
|
697
|
-
const isConnected = consumeConnection.isConnected() && publishConnection.isConnected();
|
|
698
|
-
if (!isConnected) {
|
|
699
|
-
logger_1.default.error('rabbit: isConnected - false');
|
|
700
|
-
return false;
|
|
701
|
-
}
|
|
702
|
-
const channel = await this.assertChannel({ connection: this.publishConnection });
|
|
703
|
-
try {
|
|
704
|
-
await Promise.all([
|
|
705
|
-
channel.waitForConnect(),
|
|
706
|
-
...this.consumers.map((c) => channel.checkQueue(c.queue)),
|
|
707
|
-
]);
|
|
708
|
-
}
|
|
709
|
-
catch (e) {
|
|
710
|
-
logger_1.default.error('rabbit: isConnected - false');
|
|
711
|
-
return false;
|
|
712
|
-
}
|
|
713
|
-
logger_1.default.debug('rabbit: isConnected - true');
|
|
714
705
|
return true;
|
|
715
706
|
}
|
|
716
707
|
async gracefulShutdown(signal) {
|
|
@@ -851,7 +842,7 @@ class RabbitMq {
|
|
|
851
842
|
}
|
|
852
843
|
async getConnectionOld(connection) {
|
|
853
844
|
return new Promise(async (resolve, reject) => {
|
|
854
|
-
const {
|
|
845
|
+
const { amqpConnection: connectionLocal, creatingConnection, connectionCreatedEventName, connectionFailedEventName, blockReconnect, } = connection;
|
|
855
846
|
if (blockReconnect) {
|
|
856
847
|
debug('rabbit: block reconnect');
|
|
857
848
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -889,7 +880,7 @@ class RabbitMq {
|
|
|
889
880
|
const newConnection = await (0, amqp_connection_manager_1.connect)(defaultUrls, {
|
|
890
881
|
findServers,
|
|
891
882
|
});
|
|
892
|
-
connection.
|
|
883
|
+
connection.amqpConnection = newConnection;
|
|
893
884
|
newConnection.on('error', (err) => {
|
|
894
885
|
logger_1.default.error('rabbit: connection error', { err });
|
|
895
886
|
if (!isResolved) {
|
|
@@ -900,6 +891,9 @@ class RabbitMq {
|
|
|
900
891
|
});
|
|
901
892
|
newConnection.on('connectFailed', (err) => {
|
|
902
893
|
this.oldConsumersTags = [];
|
|
894
|
+
if (typeof err.url === 'string') {
|
|
895
|
+
err.url = this.maskURL(err.url);
|
|
896
|
+
}
|
|
903
897
|
logger_1.default.error('rabbit: connection connectFailed', { err });
|
|
904
898
|
if (!isResolved) {
|
|
905
899
|
isResolved = true;
|
|
@@ -1036,3 +1030,4 @@ class RabbitMq {
|
|
|
1036
1030
|
exports.default = RabbitMq;
|
|
1037
1031
|
var celery_1 = require("./lib/celery");
|
|
1038
1032
|
Object.defineProperty(exports, "sendCeleryTaskViaHttp", { enumerable: true, get: function () { return celery_1.sendCeleryTaskViaHttp; } });
|
|
1033
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/celery.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"celery.js","sourceRoot":"","sources":["../../src/lib/celery.ts"],"names":[],"mappings":";;;;;;AAAA,6CAAyC;AACzC,uDAA+B;AAC/B,4BAA4B;AAC5B,MAAM,MAAM,GAAG;IACb,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,WAAW;IACtD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO;IAClD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,OAAO;CAC1C,CAAC;AAoCX,KAAK,UAAU,qBAAqB,CAClC,IAAc,EACd,EAAE,QAAQ,EAAE,SAAS,EAAmB;IAExC,MAAM,MAAM,GAAG,UAAU,MAAM,CAAC,IAAI,8CAA8C,CAAC;IAEnF,MAAM,OAAO,GAAgB;QAC3B,IAAI,EAAE,QAAQ;QACd,EAAE,EAAE,IAAA,wBAAU,GAAE;QAChB,IAAI,EAAE,CAAC,IAAI,CAAC;KACb,CAAC;IAEF,MAAM,OAAO,GAAmB;QAC9B,UAAU,EAAE;YACV,aAAa,EAAE,CAAC;YAChB,YAAY,EAAE,kBAAkB;SACjC;QACD,WAAW,EAAE,SAAS;QACtB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAChC,gBAAgB,EAAE,QAAQ;KAC3B,CAAC;IAEF,IAAI;QACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;YACnC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;aAClG;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,EAAE,EAAE;YACf,MAAM,MAAM,GAAoB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtD,gBAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;SACxD;aAAM;YACL,gBAAM,CAAC,KAAK,CAAC,2CAA2C,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3E,gBAAM,CAAC,KAAK,CAAC,aAAa,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;SACpD;KACF;IAAC,OAAO,KAAK,EAAE;QACd,gBAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/F,MAAM,KAAK,CAAC;KACb;AACH,CAAC;AAEQ,sDAAqB"}
|
package/dist/lib/consts.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/lib/consts.ts"],"names":[],"mappings":";;;AAAa,QAAA,yBAAyB,GAAG,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;AAC5C,QAAA,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC;AAChC,QAAA,YAAY,GAAG,eAAe,CAAC;AAC/B,QAAA,cAAc,GAAG,YAAY,CAAC;AAC9B,QAAA,mBAAmB,GAAG,cAAc,CAAC;AACrC,QAAA,oBAAoB,GAAG,oBAAoB,CAAC;AAC5C,QAAA,WAAW,GAAG,YAAY,CAAC;AAC3B,QAAA,6BAA6B,GAAG,KAAK,CAAC;AACtC,QAAA,eAAe,GAAG;IAC7B,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,cAAc,EAAE,iCAAyB;IACzC,WAAW,EAAE,4BAAoB;IACjC,kBAAkB,EAAE,qCAA6B;IACjD,YAAY,EAAE,IAAI;IAClB,iBAAiB,EAAE,KAAK;CACzB,CAAC"}
|
package/dist/lib/rabbitError.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rabbitError.js","sourceRoot":"","sources":["../../src/lib/rabbitError.ts"],"names":[],"mappings":";;AAAA,MAAqB,WAAY,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AALD,8BAKC"}
|
package/dist/lib/redis.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/lib/redis.ts"],"names":[],"mappings":";;;;;AAAA,wDAAgC;AAEhC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAE/B,kBAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACnD,kBAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAQ7C,MAAM,gBAAgB,GAAG,CAAC,MAAmB,EAAO,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAElF,kBAAe,gBAAgB,CAAC"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ export type AfConsumer = {
|
|
|
44
44
|
};
|
|
45
45
|
export declare const CONSUMER_DEFAULT_OPTIONS: Options.Consume;
|
|
46
46
|
export type ConnectionData = {
|
|
47
|
-
|
|
47
|
+
amqpConnection: AmqpConnectionManager | null;
|
|
48
48
|
creatingConnection: boolean;
|
|
49
49
|
connectionCreatedEventName: string;
|
|
50
50
|
connectionFailedEventName: string;
|
package/dist/lib/types.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":";;;AAsDA,MAAM,qBAAqB,GAAG,uBAAuB,CAAC;AAEtD,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAE3C,QAAA,wBAAwB,GAAoB;IACvD,SAAS,EAAE;QACT,CAAC,qBAAqB,CAAC,EAAE,QAAQ;QACjC,CAAC,sBAAsB,CAAC,EAAE,QAAQ;KACnC;CACF,CAAC"}
|
package/dist/lib/utils.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":";;;AAGO,MAAM,oBAAoB,GAAG,KAAK,EACvC,CAAkC,EAClC,YAAoB,EACa,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AAHlE,QAAA,oBAAoB,wBAG8C;AAExE,MAAM,gBAAgB,GAAG,CAAC,QAAmB,EAAE,EAAE,CAAC,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC5F,YAAY,CAAC,KAAK,IAAI,EAAE;QACtB,IAAI;YACF,MAAM,KAAK,GAAG,MAAM,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,CAAC;SAChB;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,CAAC,KAAK,CAAC,CAAC;SACf;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AATU,QAAA,gBAAgB,oBAS1B;AACI,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;AAAhD,QAAA,IAAI,QAA4C"}
|
package/dist/logger.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;;;AAAA,+DAAuC;AAEvC,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;AAExB,kBAAe,MAAM,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
// eslint-disable-next-line import/no-
|
|
3
|
+
// eslint-disable-next-line import/no-unresolved
|
|
4
4
|
require("jest");
|
|
5
5
|
class RabbitMq {
|
|
6
6
|
constructor() {
|
|
@@ -16,3 +16,4 @@ class RabbitMq {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
exports.default = RabbitMq;
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mock/index.ts"],"names":[],"mappings":";;AAAA,gDAAgD;AAChD,gBAAc;AAGd,MAAM,QAAQ;IAAd;QACE,QAAG,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;QAErB,SAAI,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;QAEtB,kBAAa,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;QAE/B,mBAAc,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;QAEhC,gBAAW,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;QAE7B,YAAO,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;QAEzB,wBAAmB,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;QAErC,YAAO,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;QAEzB,gBAAW,GAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;IAC/B,CAAC;CAAA;AAED,kBAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IAfRabbitMq } from '../index';
|
|
2
|
+
declare class RabbitMq implements IAfRabbitMq {
|
|
3
|
+
ack: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
4
|
+
nack: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
5
|
+
assertChannel: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
6
|
+
assertExchange: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
7
|
+
assertQueue: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
8
|
+
consume: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
9
|
+
consumeFromExchange: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
10
|
+
publish: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
11
|
+
sendToQueue: import("@vitest/spy").Mock<(...args: any[]) => any>;
|
|
12
|
+
}
|
|
13
|
+
export default RabbitMq;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
class RabbitMq {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.ack = vitest_1.vi.fn();
|
|
7
|
+
this.nack = vitest_1.vi.fn();
|
|
8
|
+
this.assertChannel = vitest_1.vi.fn();
|
|
9
|
+
this.assertExchange = vitest_1.vi.fn();
|
|
10
|
+
this.assertQueue = vitest_1.vi.fn();
|
|
11
|
+
this.consume = vitest_1.vi.fn();
|
|
12
|
+
this.consumeFromExchange = vitest_1.vi.fn();
|
|
13
|
+
this.publish = vitest_1.vi.fn();
|
|
14
|
+
this.sendToQueue = vitest_1.vi.fn();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.default = RabbitMq;
|
|
18
|
+
//# sourceMappingURL=vitest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.js","sourceRoot":"","sources":["../../src/mock/vitest.ts"],"names":[],"mappings":";;AAAA,mCAA4B;AAG5B,MAAM,QAAQ;IAAd;QACE,QAAG,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAEd,SAAI,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAEf,kBAAa,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAExB,mBAAc,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAEzB,gBAAW,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAEtB,YAAO,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAElB,wBAAmB,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAE9B,YAAO,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;QAElB,gBAAW,GAAG,WAAE,CAAC,EAAE,EAAE,CAAC;IACxB,CAAC;CAAA;AAED,kBAAe,QAAQ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autofleet/rabbit",
|
|
3
|
-
"version": "3.4.0-beta.
|
|
3
|
+
"version": "3.4.0-beta.19",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"engines": {
|
|
@@ -10,40 +10,47 @@
|
|
|
10
10
|
"postinstall": "echo '\\033[0;31m\nWARNING: in case of migrating to new version of @autofleet/rabbit \nyou might have to delete existing queues or the deployment will fail.\\033[0m\n'",
|
|
11
11
|
"start": "ts-node src/index.ts",
|
|
12
12
|
"example": "ts-node src/example.ts",
|
|
13
|
-
"build": "rm -rf dist && tsc",
|
|
14
|
-
"linter": "
|
|
15
|
-
"test": "
|
|
16
|
-
"test-local": "RABBITMQ_SERVICE_HOST=localhost:5672
|
|
17
|
-
"coverage": "
|
|
13
|
+
"build": "rm -rf dist && tsc -p tsconfig.build.json",
|
|
14
|
+
"linter": "eslint .",
|
|
15
|
+
"test": "vitest",
|
|
16
|
+
"test-local": "RABBITMQ_SERVICE_HOST=localhost:5672 node --inspect-brk ./node_modules/.bin/vitest --testTimeout=10000000000",
|
|
17
|
+
"coverage": "vitest --coverage",
|
|
18
18
|
"dev": "nodemon"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@autofleet/zehut": "^3.1.2",
|
|
22
|
-
"amqp-connection-manager": "4.1.
|
|
23
|
-
"amqplib": "0.10.
|
|
22
|
+
"amqp-connection-manager": "4.1.14",
|
|
23
|
+
"amqplib": "0.10.5",
|
|
24
24
|
"bluebird": "^3.7.2",
|
|
25
|
-
"moment": "^2.
|
|
25
|
+
"moment": "^2.30.1",
|
|
26
26
|
"redis": "^3.1.2",
|
|
27
27
|
"redis-lock": "^0.1.4"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|
|
30
|
-
"@autofleet/logger": "*"
|
|
30
|
+
"@autofleet/logger": "*",
|
|
31
|
+
"jest": "*"
|
|
32
|
+
},
|
|
33
|
+
"peerDependenciesMeta": {
|
|
34
|
+
"jest": {
|
|
35
|
+
"optional": true
|
|
36
|
+
}
|
|
31
37
|
},
|
|
32
38
|
"devDependencies": {
|
|
33
39
|
"@autofleet/logger": "4.0.6",
|
|
34
|
-
"@types/amqplib": "0.
|
|
40
|
+
"@types/amqplib": "0.10.7",
|
|
41
|
+
"@types/bluebird": "^3.5.42",
|
|
35
42
|
"@types/jest": "^29.5.12",
|
|
36
43
|
"@types/node": "^20.14.11",
|
|
37
44
|
"@typescript-eslint/eslint-plugin": "^4.8.1",
|
|
45
|
+
"@vitest/coverage-v8": "^3.1.3",
|
|
38
46
|
"eslint": "^7.13.0",
|
|
39
47
|
"eslint-config-airbnb-typescript": "^12.0.0",
|
|
40
48
|
"eslint-plugin-import": "^2.22.1",
|
|
41
|
-
"jest": "^29.7.0",
|
|
42
49
|
"node-tcp-proxy": "^0.0.28",
|
|
43
|
-
"ts-jest": "^29.2.3",
|
|
44
50
|
"ts-node": "^8.6.2",
|
|
45
|
-
"typescript": "^4.9.5"
|
|
51
|
+
"typescript": "^4.9.5",
|
|
52
|
+
"vitest": "^3.1.3"
|
|
46
53
|
},
|
|
47
54
|
"author": "",
|
|
48
|
-
"license": "
|
|
55
|
+
"license": "Proprietary"
|
|
49
56
|
}
|
package/src/index.ts
CHANGED
|
@@ -149,8 +149,6 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
149
149
|
|
|
150
150
|
blockReconnect: boolean | null | undefined
|
|
151
151
|
|
|
152
|
-
connection: AmqpConnectionManager | null | undefined
|
|
153
|
-
|
|
154
152
|
publishConnection: ConnectionData
|
|
155
153
|
|
|
156
154
|
consumeConnection: ConnectionData
|
|
@@ -213,16 +211,15 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
213
211
|
this.em = new EventEmitter();
|
|
214
212
|
this.publishChannel = null;
|
|
215
213
|
this.publishChannelSetupPromise = null;
|
|
216
|
-
this.connection = null;
|
|
217
214
|
this.publishConnection = {
|
|
218
|
-
|
|
215
|
+
amqpConnection: null,
|
|
219
216
|
creatingConnection: false,
|
|
220
217
|
connectionCreatedEventName: 'publishConnectionCreated',
|
|
221
218
|
connectionFailedEventName: 'publishConnectionFailed',
|
|
222
219
|
blockReconnect: false,
|
|
223
220
|
};
|
|
224
221
|
this.consumeConnection = {
|
|
225
|
-
|
|
222
|
+
amqpConnection: null,
|
|
226
223
|
creatingConnection: false,
|
|
227
224
|
connectionCreatedEventName: 'consumeConnectionCreated',
|
|
228
225
|
connectionFailedEventName: 'consumeConnectionFailed',
|
|
@@ -256,14 +253,14 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
256
253
|
this.oldPublishChannel = null;
|
|
257
254
|
this.oldPublishChannelSetupPromise = null;
|
|
258
255
|
this.oldPublishConnection = {
|
|
259
|
-
|
|
256
|
+
amqpConnection: null,
|
|
260
257
|
creatingConnection: false,
|
|
261
258
|
connectionCreatedEventName: 'oldPublishConnectionCreated',
|
|
262
259
|
connectionFailedEventName: 'oldPublishConnectionFailed',
|
|
263
260
|
blockReconnect: false,
|
|
264
261
|
};
|
|
265
262
|
this.oldConsumeConnection = {
|
|
266
|
-
|
|
263
|
+
amqpConnection: null,
|
|
267
264
|
creatingConnection: false,
|
|
268
265
|
connectionCreatedEventName: 'oldConsumeConnectionCreated',
|
|
269
266
|
connectionFailedEventName: 'oldConsumeConnectionFailed',
|
|
@@ -378,13 +375,13 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
378
375
|
if (
|
|
379
376
|
!skipRetry
|
|
380
377
|
&& (
|
|
381
|
-
!msg.properties.headers[RETRY_HEADER]
|
|
378
|
+
!msg.properties.headers?.[RETRY_HEADER]
|
|
382
379
|
|| parseInt(msg.properties.headers[RETRY_HEADER], 10) < options.retries
|
|
383
380
|
)
|
|
384
381
|
) {
|
|
385
382
|
await this.sendToQueue(queue, RabbitMq.parseMsg(msg).content, options, {
|
|
386
383
|
...msg.properties.headers,
|
|
387
|
-
[RETRY_HEADER]: msg.properties.headers[RETRY_HEADER]
|
|
384
|
+
[RETRY_HEADER]: msg.properties.headers?.[RETRY_HEADER]
|
|
388
385
|
? msg.properties.headers[RETRY_HEADER] + 1
|
|
389
386
|
: 1,
|
|
390
387
|
});
|
|
@@ -392,7 +389,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
392
389
|
const deadQueue = `${queue}-dead`;
|
|
393
390
|
await this.sendToQueue(deadQueue, RabbitMq.parseMsg(msg).content, deadQueueOptions, {
|
|
394
391
|
...msg.properties.headers,
|
|
395
|
-
[RETRY_HEADER]: msg.properties.headers[RETRY_HEADER]
|
|
392
|
+
[RETRY_HEADER]: msg.properties.headers?.[RETRY_HEADER]
|
|
396
393
|
? msg.properties.headers[RETRY_HEADER] + 1
|
|
397
394
|
: 1,
|
|
398
395
|
});
|
|
@@ -409,7 +406,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
409
406
|
async getConnection(connection: ConnectionData) {
|
|
410
407
|
return new Promise<AmqpConnectionManager>(async (resolve, reject) => {
|
|
411
408
|
const {
|
|
412
|
-
|
|
409
|
+
amqpConnection: connectionLocal,
|
|
413
410
|
creatingConnection,
|
|
414
411
|
connectionCreatedEventName,
|
|
415
412
|
connectionFailedEventName,
|
|
@@ -457,7 +454,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
457
454
|
findServers,
|
|
458
455
|
});
|
|
459
456
|
|
|
460
|
-
connection.
|
|
457
|
+
connection.amqpConnection = newConnection;
|
|
461
458
|
newConnection.on('error', (err) => {
|
|
462
459
|
logger.error('rabbit: connection error', { err });
|
|
463
460
|
if (!isResolved) {
|
|
@@ -469,6 +466,9 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
469
466
|
|
|
470
467
|
newConnection.on('connectFailed', (err) => {
|
|
471
468
|
this.consumersTags = [];
|
|
469
|
+
if (typeof err.url === 'string') {
|
|
470
|
+
err.url = this.maskURL(err.url);
|
|
471
|
+
}
|
|
472
472
|
logger.error('rabbit: connection connectFailed', { err, advice: 'Check if the vhost exist', vhost: this.vhost });
|
|
473
473
|
if (!isResolved) {
|
|
474
474
|
isResolved = true;
|
|
@@ -572,7 +572,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
572
572
|
if (!channel) {
|
|
573
573
|
throw new RabbitError('channel is not defined');
|
|
574
574
|
}
|
|
575
|
-
debug('rabbit: getting queue length', { queue, connected: this.
|
|
575
|
+
debug('rabbit: getting queue length', { queue, connected: this.oldPublishConnection.amqpConnection?.isConnected() });
|
|
576
576
|
return channel?.checkQueue(queue);
|
|
577
577
|
}
|
|
578
578
|
|
|
@@ -678,7 +678,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
678
678
|
// Used by the microservices to consume messages from the queue
|
|
679
679
|
async consume(queue: string, callback: CallbackFunction, options?: ConsumeOptions): Promise<any> {
|
|
680
680
|
// TODO: [QUORUM-PHASE-3] Use only the implementation of consumeNew and delete consumeNew and consumeOld
|
|
681
|
-
if (options?.isQuorumQueue !== false) {
|
|
681
|
+
if (options?.isQuorumQueue !== false || process.env.DISABLE_QUORUM_QUEUES === 'true') {
|
|
682
682
|
await this.assertVHost();
|
|
683
683
|
await this.consumeNew(queue, callback, options);
|
|
684
684
|
}
|
|
@@ -741,9 +741,9 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
741
741
|
return null;
|
|
742
742
|
}
|
|
743
743
|
|
|
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];
|
|
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];
|
|
747
747
|
const parsedMessage = RabbitMq.parseMsg(msg);
|
|
748
748
|
const releaseLock = await this.lockRedisIfNeeded(parsedMessage, optionsWithDefaults);
|
|
749
749
|
const trace = newTrace(traceTypes.RABBIT);
|
|
@@ -827,7 +827,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
827
827
|
RabbitMq.validateName('queue', queue);
|
|
828
828
|
const { limit, deadMessageTtl } = optionsWithDefaults;
|
|
829
829
|
// TODO: [QUORUM-PHASE-3] Delete the if statement after all the queues are created as quorum queues
|
|
830
|
-
if (options?.isQuorumQueue !== false) {
|
|
830
|
+
if (options?.isQuorumQueue !== false || process.env.DISABLE_QUORUM_QUEUES === 'true') {
|
|
831
831
|
await this.assertVHost();
|
|
832
832
|
await this.saveConsumer(queue, callback, options);
|
|
833
833
|
const channel: ChannelWrapper = await this.getNewChannel({
|
|
@@ -922,8 +922,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
922
922
|
}
|
|
923
923
|
|
|
924
924
|
// TODO: [QUORUM-PHASE-2] After changing the publish from old to new change from the old to the new implementation
|
|
925
|
-
async isConnected()
|
|
926
|
-
// TODO: OLD IMPLEMENTATION
|
|
925
|
+
async isConnected(): Promise<boolean> {
|
|
927
926
|
debug('rabbit: start old is connected');
|
|
928
927
|
const oldConsumeConnection = await this.getConnectionOld(this.oldConsumeConnection);
|
|
929
928
|
const oldPublishConnection = await this.getConnectionOld(this.oldPublishConnection);
|
|
@@ -943,27 +942,6 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
943
942
|
return false;
|
|
944
943
|
}
|
|
945
944
|
logger.debug('rabbit: old isConnected - true');
|
|
946
|
-
|
|
947
|
-
// TODO: NEW IMPLEMENTATION
|
|
948
|
-
debug('rabbit: start is connected');
|
|
949
|
-
const consumeConnection = await this.getConnection(this.consumeConnection);
|
|
950
|
-
const publishConnection = await this.getConnection(this.publishConnection);
|
|
951
|
-
const isConnected = consumeConnection.isConnected() && publishConnection.isConnected();
|
|
952
|
-
if (!isConnected) {
|
|
953
|
-
logger.error('rabbit: isConnected - false');
|
|
954
|
-
return false;
|
|
955
|
-
}
|
|
956
|
-
const channel: any = await this.assertChannel({ connection: this.publishConnection });
|
|
957
|
-
try {
|
|
958
|
-
await Promise.all([
|
|
959
|
-
channel.waitForConnect(),
|
|
960
|
-
...this.consumers.map((c: AfConsumer) => channel.checkQueue(c.queue)),
|
|
961
|
-
]);
|
|
962
|
-
} catch (e) {
|
|
963
|
-
logger.error('rabbit: isConnected - false');
|
|
964
|
-
return false;
|
|
965
|
-
}
|
|
966
|
-
logger.debug('rabbit: isConnected - true');
|
|
967
945
|
return true;
|
|
968
946
|
}
|
|
969
947
|
|
|
@@ -1010,9 +988,9 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
1010
988
|
return null;
|
|
1011
989
|
}
|
|
1012
990
|
|
|
1013
|
-
const traceId = msg.properties.headers[TRACING_HEADER];
|
|
1014
|
-
const userId = msg.properties.headers[USER_TRACING_HEADER];
|
|
1015
|
-
const automationId = msg.properties.headers[AUTOMATION_ID_HEADER];
|
|
991
|
+
const traceId = msg.properties.headers![TRACING_HEADER];
|
|
992
|
+
const userId = msg.properties.headers![USER_TRACING_HEADER];
|
|
993
|
+
const automationId = msg.properties.headers![AUTOMATION_ID_HEADER];
|
|
1016
994
|
const parsedMessage = RabbitMq.parseMsg(msg);
|
|
1017
995
|
const releaseLock = await this.lockRedisIfNeeded(parsedMessage, optionsWithDefaults);
|
|
1018
996
|
const trace = newTrace(traceTypes.RABBIT);
|
|
@@ -1123,7 +1101,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
1123
1101
|
async getConnectionOld(connection: ConnectionData) {
|
|
1124
1102
|
return new Promise<AmqpConnectionManager>(async (resolve, reject) => {
|
|
1125
1103
|
const {
|
|
1126
|
-
|
|
1104
|
+
amqpConnection: connectionLocal,
|
|
1127
1105
|
creatingConnection,
|
|
1128
1106
|
connectionCreatedEventName,
|
|
1129
1107
|
connectionFailedEventName,
|
|
@@ -1172,7 +1150,7 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
1172
1150
|
findServers,
|
|
1173
1151
|
});
|
|
1174
1152
|
|
|
1175
|
-
connection.
|
|
1153
|
+
connection.amqpConnection = newConnection;
|
|
1176
1154
|
newConnection.on('error', (err) => {
|
|
1177
1155
|
logger.error('rabbit: connection error', { err });
|
|
1178
1156
|
if (!isResolved) {
|
|
@@ -1184,6 +1162,9 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
1184
1162
|
|
|
1185
1163
|
newConnection.on('connectFailed', (err) => {
|
|
1186
1164
|
this.oldConsumersTags = [];
|
|
1165
|
+
if (typeof err.url === 'string') {
|
|
1166
|
+
err.url = this.maskURL(err.url);
|
|
1167
|
+
}
|
|
1187
1168
|
logger.error('rabbit: connection connectFailed', { err });
|
|
1188
1169
|
if (!isResolved) {
|
|
1189
1170
|
isResolved = true;
|
|
@@ -1328,6 +1309,17 @@ class RabbitMq implements IAfRabbitMq {
|
|
|
1328
1309
|
this.oldExchanges[exchangeName] = await this.oldAssertExchangePromises[exchangeName];
|
|
1329
1310
|
return this.oldExchanges[exchangeName];
|
|
1330
1311
|
}
|
|
1312
|
+
|
|
1313
|
+
private maskURL = (url: string): string => {
|
|
1314
|
+
try {
|
|
1315
|
+
const urlObj = new URL(url);
|
|
1316
|
+
urlObj.username = '***';
|
|
1317
|
+
urlObj.password = '***';
|
|
1318
|
+
return urlObj.toString();
|
|
1319
|
+
} catch {
|
|
1320
|
+
return url;
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1331
1323
|
}
|
|
1332
1324
|
|
|
1333
1325
|
export default RabbitMq;
|
package/src/lib/types.ts
CHANGED
|
@@ -64,7 +64,7 @@ export const CONSUMER_DEFAULT_OPTIONS: Options.Consume = {
|
|
|
64
64
|
};
|
|
65
65
|
|
|
66
66
|
export type ConnectionData = {
|
|
67
|
-
|
|
67
|
+
amqpConnection: AmqpConnectionManager | null;
|
|
68
68
|
creatingConnection: boolean;
|
|
69
69
|
connectionCreatedEventName: string;
|
|
70
70
|
connectionFailedEventName: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// eslint-disable-next-line import/no-
|
|
1
|
+
// eslint-disable-next-line import/no-unresolved
|
|
2
2
|
import 'jest';
|
|
3
|
-
import { IAfRabbitMq } from '
|
|
3
|
+
import type { IAfRabbitMq } from '../index';
|
|
4
4
|
|
|
5
5
|
class RabbitMq implements IAfRabbitMq {
|
|
6
6
|
ack: any = jest.fn();
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { vi } from 'vitest';
|
|
2
|
+
import { IAfRabbitMq } from '../index';
|
|
3
|
+
|
|
4
|
+
class RabbitMq implements IAfRabbitMq {
|
|
5
|
+
ack = vi.fn();
|
|
6
|
+
|
|
7
|
+
nack = vi.fn();
|
|
8
|
+
|
|
9
|
+
assertChannel = vi.fn();
|
|
10
|
+
|
|
11
|
+
assertExchange = vi.fn();
|
|
12
|
+
|
|
13
|
+
assertQueue = vi.fn();
|
|
14
|
+
|
|
15
|
+
consume = vi.fn();
|
|
16
|
+
|
|
17
|
+
consumeFromExchange = vi.fn();
|
|
18
|
+
|
|
19
|
+
publish = vi.fn();
|
|
20
|
+
|
|
21
|
+
sendToQueue = vi.fn();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export default RabbitMq;
|
package/tsconfig.json
CHANGED
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"experimentalDecorators": true,
|
|
10
10
|
"emitDecoratorMetadata": true,
|
|
11
11
|
"skipLibCheck": true,
|
|
12
|
-
"
|
|
12
|
+
"sourceMap": true,
|
|
13
13
|
},
|
|
14
14
|
"exclude": ["node_modules"],
|
|
15
|
-
"include": ["src
|
|
15
|
+
"include": ["src/", "vitest.config.ts"],
|
|
16
16
|
}
|
package/vitest.config.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
// eslint-disable-next-line import/no-unresolved
|
|
2
|
+
import { defineConfig } from 'vitest/config';
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
test: {
|
|
6
|
+
coverage: {
|
|
7
|
+
provider: 'v8',
|
|
8
|
+
include: ['src/**/*.ts'],
|
|
9
|
+
exclude: ['src/example.ts', 'src/mock/*.ts'],
|
|
10
|
+
reporter: 'text',
|
|
11
|
+
thresholds: {
|
|
12
|
+
lines: 75,
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
});
|