@cargolift-cdi/util-rabbitmq 0.2.47 → 0.2.50
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/rabbitmq-event-publisher.service.d.ts.map +1 -1
- package/dist/rabbitmq-event-publisher.service.js +1 -0
- package/dist/rabbitmq-event-publisher.service.js.map +1 -1
- package/dist/rabbitmq-message.handlers.d.ts.map +1 -1
- package/dist/rabbitmq-message.handlers.js +51 -18
- package/dist/rabbitmq-message.handlers.js.map +1 -1
- package/dist/rabbitmq-retry.helper.js +8 -4
- package/dist/rabbitmq-retry.helper.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq-event-publisher.service.d.ts","sourceRoot":"","sources":["../src/rabbitmq-event-publisher.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAkB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvE,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,GAAG,CAAC,EAAE;QACJ,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,qBAAqB,CAAC,EAAE,GAAG,CAAC;QAC5B,cAAc,CAAC,EAAE,GAAG,CAAC;QACrB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;CACH;AAED,qBACa,6BAA6B;IAG5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAA4B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFzF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAW;gBAElB,SAAS,EAAE,wBAAwB,EAAmB,MAAM,EAAE,oBAAoB;IAEzG,OAAO,CAAC,IAAI,EAAE,8BAA8B,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"rabbitmq-event-publisher.service.d.ts","sourceRoot":"","sources":["../src/rabbitmq-event-publisher.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAkB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvE,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,GAAG,CAAC,EAAE;QACJ,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,qBAAqB,CAAC,EAAE,GAAG,CAAC;QAC5B,cAAc,CAAC,EAAE,GAAG,CAAC;QACrB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;CACH;AAED,qBACa,6BAA6B;IAG5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAA4B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFzF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAW;gBAElB,SAAS,EAAE,wBAAwB,EAAmB,MAAM,EAAE,oBAAoB;IAEzG,OAAO,CAAC,IAAI,EAAE,8BAA8B,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC;CAgDzE"}
|
|
@@ -36,6 +36,7 @@ let RabbitMQEventPublisherService = class RabbitMQEventPublisherService {
|
|
|
36
36
|
eventType: opts.envelope?.eventType || routingKey,
|
|
37
37
|
source: mergedSource,
|
|
38
38
|
timestamp: opts.envelope?.timestamp,
|
|
39
|
+
sourceHeaders: opts.envelope?.sourceHeaders || opts.req?.headers || undefined,
|
|
39
40
|
};
|
|
40
41
|
const headers = {
|
|
41
42
|
"x-correlation-id": envelope.correlation_id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq-event-publisher.service.js","sourceRoot":"","sources":["../src/rabbitmq-event-publisher.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAsBpE,IAAM,6BAA6B,GAAnC,MAAM,6BAA6B;IAGxC,YAA6B,SAAmC,EAAmB,MAA4B;QAAlF,cAAS,GAAT,SAAS,CAA0B;QAAmB,WAAM,GAAN,MAAM,CAAsB;QAF9F,wBAAmB,GAAG,OAAO,CAAC;IAEmE,CAAC;IAEnH,KAAK,CAAC,OAAO,CAAC,IAAoC;QAChD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAoB,CAAC;QACvD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,MAAM,SAAS,GAAI,IAAI,CAAC,GAAW,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC;QAC1E,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,GAAU,CAAC,CAAC;QAEtC,MAAM,YAAY,GAAG;YACnB,GAAG,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAC;YAChC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE;YACtD,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,IAAI,GAAG,EAAE,MAAM,EAAE,UAAU,IAAI,SAAS;SACtF,CAAC;QAEF,MAAM,QAAQ,GAAoB;YAChC,GAAG,IAAI,CAAC,QAAQ;YAChB,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,IAAI,GAAG,EAAE,cAAc;YACpE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,IAAI,UAAU;YACjD,MAAM,EAAE,YAAY;YACpB,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"rabbitmq-event-publisher.service.js","sourceRoot":"","sources":["../src/rabbitmq-event-publisher.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq-message.handlers.d.ts","sourceRoot":"","sources":["../src/rabbitmq-message.handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAKL,oBAAoB,EAErB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"rabbitmq-message.handlers.d.ts","sourceRoot":"","sources":["../src/rabbitmq-message.handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAKL,oBAAoB,EAErB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,oBAAoB,CAAC;IACpC,SAAS,EAAE;QACT,OAAO,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/D,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QACvH,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACxH,CAAC;IACF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAUD,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;;;;;;EAaA;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,qBAAqB,IACvD,KAAK;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,mBA0LhF"}
|
|
@@ -50,6 +50,7 @@ export function createDefaultMessageHandler(opts) {
|
|
|
50
50
|
payload: msg.content.toString("utf8"),
|
|
51
51
|
},
|
|
52
52
|
});
|
|
53
|
+
// Processa a mensagem usando o processador
|
|
53
54
|
await opts.processor.process({
|
|
54
55
|
system,
|
|
55
56
|
event,
|
|
@@ -61,18 +62,24 @@ export function createDefaultMessageHandler(opts) {
|
|
|
61
62
|
routingKey,
|
|
62
63
|
retries,
|
|
63
64
|
});
|
|
65
|
+
// Acknowledges a mensagem após processamento bem-sucedido
|
|
64
66
|
channel.ack(msg);
|
|
67
|
+
// Chama onSuccess no processador da fila
|
|
65
68
|
if (opts.processor.onSuccess) {
|
|
66
69
|
await opts.processor.onSuccess(`Mensagem processada com sucesso.`);
|
|
67
70
|
}
|
|
68
71
|
}
|
|
69
72
|
catch (error) {
|
|
70
73
|
const errorClassification = classifyError(error);
|
|
74
|
+
// -----------------------------------------------------------
|
|
75
|
+
// Agendamento de retry para erros transientes (application e business)
|
|
76
|
+
// -----------------------------------------------------------
|
|
71
77
|
if (errorClassification === "application" || errorClassification === "business") {
|
|
72
78
|
const scheduled = scheduleTransientRetry(channel, msg, opts.loggerContext, {
|
|
73
79
|
inboundExchange: opts.exchange,
|
|
74
80
|
});
|
|
75
81
|
if (scheduled.success) {
|
|
82
|
+
// Chama onRetry no processador da fila
|
|
76
83
|
if (opts.processor.onRetry) {
|
|
77
84
|
await opts.processor.onRetry(error?.message, error?.cause || undefined, error?.stack || undefined, errorClassification);
|
|
78
85
|
}
|
|
@@ -92,6 +99,10 @@ export function createDefaultMessageHandler(opts) {
|
|
|
92
99
|
return;
|
|
93
100
|
}
|
|
94
101
|
}
|
|
102
|
+
// -----------------------------------------------------------
|
|
103
|
+
// Se não for possível agendar retry, envia para DLQ
|
|
104
|
+
// -----------------------------------------------------------
|
|
105
|
+
// Deriva informações da DLQ
|
|
95
106
|
const { dlxExchange, dlqRoutingKey, system, event, action } = buildDlqInfo({
|
|
96
107
|
baseExchange: opts.exchange,
|
|
97
108
|
queueName,
|
|
@@ -111,28 +122,50 @@ export function createDefaultMessageHandler(opts) {
|
|
|
111
122
|
default:
|
|
112
123
|
msgAction = `${error.message} [Todas tentativas falharam, encaminhando para DLQ.]`;
|
|
113
124
|
}
|
|
114
|
-
//
|
|
125
|
+
// Chama onError no processador da fila antes de publicar na DLQ
|
|
115
126
|
if (opts.processor.onError) {
|
|
116
127
|
await opts.processor.onError(msgAction, error?.cause || undefined, error?.stack || undefined, errorClassification);
|
|
117
128
|
}
|
|
118
|
-
//
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
129
|
+
// Loga o erro antes de enviar para DLQ
|
|
130
|
+
if (errorClassification === "business" || errorClassification === "business_fatal") {
|
|
131
|
+
opts.loggerContext.businessError(`[${queueName}] ${msgAction}`, {
|
|
132
|
+
data: {
|
|
133
|
+
rabbit: {
|
|
134
|
+
exchange: dlxExchange,
|
|
135
|
+
routing_key: dlqRoutingKey,
|
|
136
|
+
system,
|
|
137
|
+
event,
|
|
138
|
+
action,
|
|
139
|
+
},
|
|
127
140
|
},
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
141
|
+
error: {
|
|
142
|
+
message: error?.toString() || String(error),
|
|
143
|
+
cause: error?.cause || undefined,
|
|
144
|
+
type: errorClassification,
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
opts.loggerContext.error(`[${queueName}] ${msgAction}`, {
|
|
150
|
+
data: {
|
|
151
|
+
rabbit: {
|
|
152
|
+
exchange: dlxExchange,
|
|
153
|
+
routing_key: dlqRoutingKey,
|
|
154
|
+
system,
|
|
155
|
+
event,
|
|
156
|
+
action,
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
error: {
|
|
160
|
+
message: error?.toString() || String(error),
|
|
161
|
+
cause: error?.cause || undefined,
|
|
162
|
+
type: errorClassification,
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
// -----------------------------------------------------------
|
|
167
|
+
// Publica na DLQ
|
|
168
|
+
// -----------------------------------------------------------
|
|
136
169
|
try {
|
|
137
170
|
publishToDlqAndAck(channel, msg, opts.loggerContext, error, dlxExchange, dlqRoutingKey, {
|
|
138
171
|
noLoggerError: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq-message.handlers.js","sourceRoot":"","sources":["../src/rabbitmq-message.handlers.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAElB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAkB,sBAAsB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"rabbitmq-message.handlers.js","sourceRoot":"","sources":["../src/rabbitmq-message.handlers.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,21 +25,22 @@ export function scheduleTransientRetry(channel, msg, logger, opts) {
|
|
|
25
25
|
let targetExchange = "";
|
|
26
26
|
let schedule = "none";
|
|
27
27
|
if (currentRetry < maxShort) {
|
|
28
|
-
targetExchange = `${inbound}.retry.short`;
|
|
29
28
|
schedule = "short";
|
|
30
29
|
}
|
|
31
30
|
else if (currentRetry < maxShort + maxLong) {
|
|
32
|
-
targetExchange = `${inbound}.retry.long`;
|
|
33
31
|
schedule = "long";
|
|
34
32
|
}
|
|
35
|
-
|
|
33
|
+
targetExchange = `${inbound}.retry.${schedule}`;
|
|
34
|
+
if (schedule === "none") {
|
|
36
35
|
return { success: false, queue: "none", currentRetry, maxRetries: maxShort + maxLong };
|
|
36
|
+
}
|
|
37
37
|
const nextHeaders = {
|
|
38
38
|
...headers,
|
|
39
39
|
"x-retry-count": currentRetry + 1,
|
|
40
40
|
"x-retry-schedule": schedule,
|
|
41
41
|
};
|
|
42
42
|
try {
|
|
43
|
+
// Publica a mensagem no exchange de retry apropriado (short/long)
|
|
43
44
|
const ok = channel.publish(targetExchange, routingKey, msg.content, {
|
|
44
45
|
headers: nextHeaders,
|
|
45
46
|
persistent: true,
|
|
@@ -53,11 +54,14 @@ export function scheduleTransientRetry(channel, msg, logger, opts) {
|
|
|
53
54
|
// backpressure sinalizado; sem callback em channel normal
|
|
54
55
|
logger.warn?.(`[retry] Backpressure ao publicar retry (${schedule}). Mensagem será confirmada pelo broker de forma assíncrona.`);
|
|
55
56
|
}
|
|
57
|
+
// Acknowledges a mensagem original após reagendamento
|
|
56
58
|
channel.ack(msg);
|
|
57
59
|
return { success: true, queue: schedule, currentRetry: currentRetry + 1, maxRetries: maxShort + maxLong };
|
|
58
60
|
}
|
|
59
61
|
catch (e) {
|
|
60
|
-
logger.error?.(`[retry] Falha ao publicar retry (${schedule}). Motivo: ${e?.message}`, {
|
|
62
|
+
logger.error?.(`[retry] Falha ao publicar retry (${schedule}). Motivo: ${e?.message}`, {
|
|
63
|
+
data: { rabbitmq: { exchange: targetExchange, routingKey } },
|
|
64
|
+
});
|
|
61
65
|
throw new ApplicationError(`[retry] Falha ao publicar retry (${schedule}). Motivo: ${e?.message}`);
|
|
62
66
|
}
|
|
63
67
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rabbitmq-retry.helper.js","sourceRoot":"","sources":["../src/rabbitmq-retry.helper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAA6B,MAAM,uBAAuB,CAAC;AAwBpF;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAoB,EACpB,GAAmB,EACnB,MAA4B,EAC5B,IAA0B;IAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,SAAS,CAAC;IAC3F,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;IAE/E,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,IAAI,EAAE,CAAwB,CAAC;IAC3E,MAAM,OAAO,GAAwB,EAAE,GAAG,WAAW,EAAE,CAAC;IACxD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,KAAK,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,2BAA2B;IAClG,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAK,GAAG,CAAC,MAAc,EAAE,UAAU,CAAC;IAEtE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,uDAAuD,EAAE;YACpE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;SACnC,CAAC,CAAC;QACV,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,EAAE,CAAC;IACzF,CAAC;IAED,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,QAAQ,GAAkB,MAAM,CAAC;IACrC,IAAI,YAAY,GAAG,QAAQ,EAAE,CAAC;QAC5B,
|
|
1
|
+
{"version":3,"file":"rabbitmq-retry.helper.js","sourceRoot":"","sources":["../src/rabbitmq-retry.helper.ts"],"names":[],"mappings":"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"}
|