@cargolift-cdi/util-rabbitmq 0.2.12 → 0.2.13

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/README.md CHANGED
@@ -8,6 +8,7 @@ Utilitários para publicação de mensagens RabbitMQ com confirmação (publishe
8
8
  - `IntegrationEventPublisher`: fachada de alto nível para eventos de integração HTTP → RabbitMQ.
9
9
  - `publishToDlqAndAck`: envia mensagem original (enriquecida) para DLQ e faz ack.
10
10
  - `RabbitMQConnectionManager`: reutiliza conexão evitando overhead de conexão por mensagem.
11
+ - `RabbitMQTopologyService`: criação padronizada de exchanges (AE, DLX, retries) e filas dinâmicas por sistema.
11
12
 
12
13
  ## Exemplo Rápido (NestJS)
13
14
 
@@ -91,6 +92,23 @@ Header `x-dlq-enriched` indica `1` (sucesso) ou `0` (fallback raw).
91
92
  | `RABBITMQ_EXCHANGE_TYPE` | Tipo do exchange | `topic` |
92
93
  | `RABBITMQ_PUBLISH_TIMEOUT_MS` | Timeout confirmação | `5000` |
93
94
 
95
+ ### Topologia (opcional)
96
+ | Nome | Descrição | Default |
97
+ |------|-----------|---------|
98
+ | `RABBITMQ_EXCHANGE_INBOUND` | Exchange inbound (preferencial) | `integration.inbound` |
99
+ | `RABBITMQ_EXCHANGE_OUTBOUND` | Exchange outbound (preferencial) | `integration.outbound` |
100
+ | `RABBITMQ_AE_EXCHANGE` | Sufixo da AE (compat) | `ae` |
101
+ | `RABBITMQ_EXCHANGE_AE` | Sufixo da AE (preferencial) | `ae` |
102
+ | `RABBITMQ_DLX` | Sufixo da DLX (preferencial) | `dlx` |
103
+ | `RABBITMQ_DLX_NAME` | Sufixo da DLX (compat) | `dlx` |
104
+ | `RABBITMQ_UNROUTABLE_QUEUE` | Nome da fila de unroutable (sem prefixo) | `unroutable` |
105
+ | `RABBITMQ_RETRY_POLICY_SHORT_MS` | TTL retry curto | `120000` |
106
+ | `RABBITMQ_RETRY_POLICY_LONG_MS` | TTL retry longo | `3600000` |
107
+
108
+ Notas:
109
+ - As variáveis com sufixo “preferencial” são a convenção nova. As chaves “compat” continuam funcionais para serviços existentes.
110
+ - `RabbitMQTopologyService` usa estas variáveis para criar: AE (fanout), DLX (topic), retries (topic) e filas `integration.<system>.*` com DLQ e binds.
111
+
94
112
  ## Boas Práticas
95
113
  - Reutilize a instância injetada (não crie manualmente o publisher baixo nível).
96
114
  - Evite payloads muito grandes (considerar compressão se `sizeBytes > ~256KB`).
package/dist/index.d.ts CHANGED
@@ -5,7 +5,9 @@
5
5
  export * from './rabbitmq.constants.js';
6
6
  export * from './rabbitmq-connection.manager.js';
7
7
  export * from './rabbitmq-publisher.service.js';
8
+ export { RabbitMQPublisherService as RmqPublisherService } from './rabbitmq-publisher.service.js';
8
9
  export * from './rabbitmq-publisher-dlq.service.js';
9
10
  export * from './integration-event.publisher.js';
10
11
  export * from './rabbitmq.module.js';
12
+ export * from './rabbitmq-topology.service.js';
11
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,wBAAwB,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAClG,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC"}
package/dist/index.js CHANGED
@@ -5,7 +5,9 @@
5
5
  export * from './rabbitmq.constants.js';
6
6
  export * from './rabbitmq-connection.manager.js';
7
7
  export * from './rabbitmq-publisher.service.js';
8
+ export { RabbitMQPublisherService as RmqPublisherService } from './rabbitmq-publisher.service.js';
8
9
  export * from './rabbitmq-publisher-dlq.service.js';
9
10
  export * from './integration-event.publisher.js';
10
11
  export * from './rabbitmq.module.js';
12
+ export * from './rabbitmq-topology.service.js';
11
13
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,yBAAyB,CAAC;AACxC,cAAc,kCAAkC,CAAC;AACjD,cAAc,iCAAiC,CAAC;AAChD,OAAO,EAAE,wBAAwB,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAClG,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sBAAsB,CAAC;AACrC,cAAc,gCAAgC,CAAC"}
@@ -13,6 +13,11 @@ export declare class RabbitMQConnectionManager {
13
13
  static get(url: string, logger?: LoggerContextService): RabbitMQConnectionManager;
14
14
  getConnection(): Promise<any>;
15
15
  createConfirmChannel(): Promise<any>;
16
+ /**
17
+ * Cria um canal simples (não-confirmável) para operações administrativas/topologia
18
+ * como assertExchange/assertQueue/bind. Use canais confirmáveis apenas para publicação.
19
+ */
20
+ createChannel(): Promise<any>;
16
21
  close(force?: boolean): Promise<void>;
17
22
  }
18
23
  export declare function getRabbitConnectionManager(logger?: LoggerContextService): RabbitMQConnectionManager;
@@ -1 +1 @@
1
- {"version":3,"file":"rabbitmq-connection.manager.d.ts","sourceRoot":"","sources":["../src/rabbitmq-connection.manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAG7D;;;GAGG;AACH,qBAAa,yBAAyB;IAOhB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAN1E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IAGnD,OAAO,CAAC,UAAU,CAAC,CAAM;IACzB,OAAO,CAAC,UAAU,CAAC,CAAe;IAElC,OAAO;IAEP,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,oBAAoB;IAK/C,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IAkB7B,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC;IAMpC,KAAK,CAAC,KAAK,UAAQ;CAM1B;AAED,wBAAgB,0BAA0B,CAAC,MAAM,CAAC,EAAE,oBAAoB,6BAIvE"}
1
+ {"version":3,"file":"rabbitmq-connection.manager.d.ts","sourceRoot":"","sources":["../src/rabbitmq-connection.manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAG7D;;;GAGG;AACH,qBAAa,yBAAyB;IAOhB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAN1E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA4B;IAGnD,OAAO,CAAC,UAAU,CAAC,CAAM;IACzB,OAAO,CAAC,UAAU,CAAC,CAAe;IAElC,OAAO;IAEP,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,oBAAoB;IAK/C,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IAkB7B,oBAAoB,IAAI,OAAO,CAAC,GAAG,CAAC;IAM1C;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IAM7B,KAAK,CAAC,KAAK,UAAQ;CAM1B;AAED,wBAAgB,0BAA0B,CAAC,MAAM,CAAC,EAAE,oBAAoB,6BAIvE"}
@@ -39,6 +39,15 @@ export class RabbitMQConnectionManager {
39
39
  const channel = await conn.createConfirmChannel();
40
40
  return channel;
41
41
  }
42
+ /**
43
+ * Cria um canal simples (não-confirmável) para operações administrativas/topologia
44
+ * como assertExchange/assertQueue/bind. Use canais confirmáveis apenas para publicação.
45
+ */
46
+ async createChannel() {
47
+ const conn = await this.getConnection();
48
+ const channel = await conn.createChannel();
49
+ return channel;
50
+ }
42
51
  async close(force = false) {
43
52
  if (force && this.connection) {
44
53
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"rabbitmq-connection.manager.js","sourceRoot":"","sources":["../src/rabbitmq-connection.manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;GAGG;AACH,MAAM,OAAO,yBAAyB;IAOpC,YAAqC,GAAW,EAAmB,MAA6B;QAA3D,QAAG,GAAH,GAAG,CAAQ;QAAmB,WAAM,GAAN,MAAM,CAAuB;IAAG,CAAC;IAEpG,MAAM,CAAC,GAAG,CAAC,GAAW,EAAE,MAA6B;QACnD,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,yBAAyB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAC5C,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAE5C,IAAI,CAAC,UAAU,GAAI,OAAe,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE;YACtE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;gBACxB,IAAI,CAAC;oBAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,2BAA2B,EAAE,GAAU,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,2BAA2B,EAAE,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YAClK,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC9B,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;QACvB,IAAI,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC;gBAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAC/C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,0BAA0B,CAAC,MAA6B;IACtE,eAAe,CAAC,MAAM,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC;IACtC,OAAO,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"rabbitmq-connection.manager.js","sourceRoot":"","sources":["../src/rabbitmq-connection.manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;GAGG;AACH,MAAM,OAAO,yBAAyB;IAOpC,YAAqC,GAAW,EAAmB,MAA6B;QAA3D,QAAG,GAAH,GAAG,CAAQ;QAAmB,WAAM,GAAN,MAAM,CAAuB;IAAG,CAAC;IAEpG,MAAM,CAAC,GAAG,CAAC,GAAW,EAAE,MAA6B;QACnD,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,yBAAyB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAC5C,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAE5C,IAAI,CAAC,UAAU,GAAI,OAAe,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE;YACtE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;gBACxB,IAAI,CAAC;oBAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,2BAA2B,EAAE,GAAU,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,2BAA2B,EAAE,EAAE,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YAClK,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC9B,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,oBAAoB;QACxB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK;QACvB,IAAI,KAAK,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC;gBAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YAC/C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC9B,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,0BAA0B,CAAC,MAA6B;IACtE,eAAe,CAAC,MAAM,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAa,CAAC;IACtC,OAAO,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC"}
@@ -1,5 +1,10 @@
1
1
  import type { RabbitMQChannel, RabbitMQMessage } from "@cargolift-cdi/types";
2
- import { LoggerContextService } from "@cargolift-cdi/common";
2
+ type LoggerLike = {
3
+ getContext: () => any;
4
+ error: (message: any, meta?: any) => any;
5
+ businessError?: (message: any, meta?: any) => any;
6
+ warn?: (message: any, meta?: any) => any;
7
+ };
3
8
  /**
4
9
  * Publica mensagens com erro na Dead Letter Queue (DLQ) do RabbitMQ e faz ack da mensagem original.
5
10
  * @param channel Canal do RabbitMQ
@@ -8,7 +13,8 @@ import { LoggerContextService } from "@cargolift-cdi/common";
8
13
  * @param dlqExchange Exchange da DLQ (opcional)
9
14
  * @param dlqRoutingKey Routing key da DLQ (opcional)
10
15
  */
11
- export declare function publishToDlqAndAck(channel: RabbitMQChannel, originalMsg: RabbitMQMessage, logger: LoggerContextService, error: unknown, dlqExchange?: string, dlqRoutingKey?: string, options?: {
16
+ export declare function publishToDlqAndAck(channel: RabbitMQChannel, originalMsg: RabbitMQMessage, logger: LoggerLike, error: unknown, dlqExchange?: string, dlqRoutingKey?: string, options?: {
12
17
  noLoggerError: boolean;
13
18
  }): void;
19
+ export {};
14
20
  //# sourceMappingURL=rabbitmq-publisher-dlq.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rabbitmq-publisher-dlq.service.d.ts","sourceRoot":"","sources":["../src/rabbitmq-publisher-dlq.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAiB,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE5E;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,eAAe,EAC5B,MAAM,EAAE,oBAAoB,EAC5B,KAAK,EAAE,OAAO,EACd,WAAW,SAAc,EACzB,aAAa,SAAmB,EAChC,OAAO,CAAC,EAAE;IAAE,aAAa,EAAE,OAAO,CAAA;CAAE,QAqFrC"}
1
+ {"version":3,"file":"rabbitmq-publisher-dlq.service.d.ts","sourceRoot":"","sources":["../src/rabbitmq-publisher-dlq.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG7E,KAAK,UAAU,GAAG;IAChB,UAAU,EAAE,MAAM,GAAG,CAAC;IACtB,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IACzC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;IAClD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC;CAC1C,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,eAAe,EACxB,WAAW,EAAE,eAAe,EAC5B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,OAAO,EACd,WAAW,SAAc,EACzB,aAAa,SAAmB,EAChC,OAAO,CAAC,EAAE;IAAE,aAAa,EAAE,OAAO,CAAA;CAAE,QAqFrC"}
@@ -34,7 +34,7 @@ export function publishToDlqAndAck(channel, originalMsg, logger, error, dlqExcha
34
34
  catch { }
35
35
  }
36
36
  if (options?.noLoggerError === false) {
37
- if (error instanceof BusinessError) {
37
+ if (error instanceof BusinessError && logger.businessError) {
38
38
  logger.businessError(normalized.message, {
39
39
  error: normalized.message,
40
40
  name: normalized.name,
@@ -52,7 +52,7 @@ export function publishToDlqAndAck(channel, originalMsg, logger, error, dlqExcha
52
52
  const originalHeaders = originalMsg.properties.headers || {};
53
53
  const headers = {
54
54
  ...originalHeaders,
55
- "x-trace": logger.getContext().trace ||
55
+ "x-trace": logger.getContext()?.trace ||
56
56
  originalHeaders["x-trace"] ||
57
57
  `trace-missing:${process.env.npm_package_name}`,
58
58
  "x-error-reason": normalized.message,
@@ -1 +1 @@
1
- {"version":3,"file":"rabbitmq-publisher-dlq.service.js","sourceRoot":"","sources":["../src/rabbitmq-publisher-dlq.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rabbitmq-publisher-dlq.service.js","sourceRoot":"","sources":["../src/rabbitmq-publisher-dlq.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * RabbitMQTopologyService
3
+ * Padroniza criação de exchanges, DLX, AE e filas dinâmicas por sistema.
4
+ * Compatível com a topologia usada no middleware-esb.
5
+ */
6
+ export declare class RabbitMQTopologyService {
7
+ private readonly logger;
8
+ /**
9
+ * Cria exchanges base (inbound/outbound), AE (fanout), DLX (topic), unrouteable queue e exchanges de retry (inbound).
10
+ */
11
+ setupBaseTopology(): Promise<void>;
12
+ /**
13
+ * Cria filas por sistema e faz binds necessários. Para inbound, cria filas de retry com TTLs.
14
+ */
15
+ setupQueue(system: string, way: 'inbound' | 'outbound'): Promise<string>;
16
+ }
17
+ //# sourceMappingURL=rabbitmq-topology.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rabbitmq-topology.service.d.ts","sourceRoot":"","sources":["../src/rabbitmq-topology.service.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,qBACa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;IAEnE;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCxC;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;CAoE/E"}
@@ -0,0 +1,136 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var RabbitMQTopologyService_1;
8
+ import { Injectable, Logger } from '@nestjs/common';
9
+ import { getRabbitConnectionManager } from './rabbitmq-connection.manager.js';
10
+ /**
11
+ * RabbitMQTopologyService
12
+ * Padroniza criação de exchanges, DLX, AE e filas dinâmicas por sistema.
13
+ * Compatível com a topologia usada no middleware-esb.
14
+ */
15
+ let RabbitMQTopologyService = RabbitMQTopologyService_1 = class RabbitMQTopologyService {
16
+ constructor() {
17
+ this.logger = new Logger(RabbitMQTopologyService_1.name);
18
+ }
19
+ /**
20
+ * Cria exchanges base (inbound/outbound), AE (fanout), DLX (topic), unrouteable queue e exchanges de retry (inbound).
21
+ */
22
+ async setupBaseTopology() {
23
+ const ch = await getRabbitConnectionManager().createChannel();
24
+ try {
25
+ const inbound = getEnv('RABBITMQ_EXCHANGE_INBOUND') || getEnv('RABBITMQ_INBOUND_EXCHANGE') || 'integration.inbound';
26
+ const outbound = getEnv('RABBITMQ_EXCHANGE_OUTBOUND') || getEnv('RABBITMQ_OUTBOUND_EXCHANGE') || 'integration.outbound';
27
+ const ae = getEnv('RABBITMQ_EXCHANGE_AE') || getEnv('RABBITMQ_AE_EXCHANGE') || 'ae';
28
+ const unroutable = getEnv('RABBITMQ_UNROUTABLE_QUEUE') || 'unroutable';
29
+ const dlx = getEnv('RABBITMQ_DLX') || getEnv('RABBITMQ_DLX_NAME') || 'dlx';
30
+ // AE fanout
31
+ await ch.assertExchange(`${inbound}.${ae}`, 'fanout', { durable: true });
32
+ await ch.assertExchange(`${outbound}.${ae}`, 'fanout', { durable: true });
33
+ // DLX topic
34
+ await ch.assertExchange(`${inbound}.${dlx}`, 'topic', { durable: true });
35
+ await ch.assertExchange(`${outbound}.${dlx}`, 'topic', { durable: true });
36
+ // Exchanges de retry (topic) para inbound
37
+ await ch.assertExchange(`${inbound}.retry.short`, 'topic', { durable: true });
38
+ await ch.assertExchange(`${inbound}.retry.long`, 'topic', { durable: true });
39
+ // Exchanges principais (topic) com AE
40
+ await ch.assertExchange(inbound, 'topic', { durable: true, arguments: { 'alternate-exchange': `${inbound}.${ae}` } });
41
+ await ch.assertExchange(outbound, 'topic', { durable: true, arguments: { 'alternate-exchange': `${outbound}.${ae}` } });
42
+ // Unroutable queues bound to AE
43
+ await ch.assertQueue(`${inbound}.${unroutable}`, { durable: true });
44
+ await ch.bindQueue(`${inbound}.${unroutable}`, `${inbound}.${ae}`, '');
45
+ await ch.assertQueue(`${outbound}.${unroutable}`, { durable: true });
46
+ await ch.bindQueue(`${outbound}.${unroutable}`, `${outbound}.${ae}`, '');
47
+ this.logger.log(`Topology ready => inbound: ${inbound} | outbound: ${outbound} | AE: ${ae} | DLX: ${dlx} | retries: [${inbound}.retry.short, ${inbound}.retry.long] | unroutable: ${unroutable}`);
48
+ }
49
+ finally {
50
+ try {
51
+ await ch.close();
52
+ }
53
+ catch { }
54
+ }
55
+ }
56
+ /**
57
+ * Cria filas por sistema e faz binds necessários. Para inbound, cria filas de retry com TTLs.
58
+ */
59
+ async setupQueue(system, way) {
60
+ const ch = await getRabbitConnectionManager().createChannel();
61
+ try {
62
+ const exchange = way === 'inbound'
63
+ ? (getEnv('RABBITMQ_EXCHANGE_INBOUND') || getEnv('RABBITMQ_INBOUND_EXCHANGE') || 'integration.inbound')
64
+ : (getEnv('RABBITMQ_EXCHANGE_OUTBOUND') || getEnv('RABBITMQ_OUTBOUND_EXCHANGE') || 'integration.outbound');
65
+ const dlx = getEnv('RABBITMQ_DLX') || getEnv('RABBITMQ_DLX_NAME') || 'dlx';
66
+ const retryShortMs = toInt(getEnv('RABBITMQ_RETRY_POLICY_SHORT_MS'), 120_000);
67
+ const retryLongMs = toInt(getEnv('RABBITMQ_RETRY_POLICY_LONG_MS'), 3_600_000);
68
+ const queueName = `${exchange}.${system}`;
69
+ const routing = `integration.${system}.*`;
70
+ await ch.assertQueue(`${exchange}.${system}.dlq`, { durable: true });
71
+ await ch.assertQueue(queueName, {
72
+ durable: true,
73
+ arguments: {
74
+ 'x-dead-letter-exchange': `${exchange}.${dlx}`,
75
+ 'x-dead-letter-routing-key': `integration.${system}.dead`,
76
+ },
77
+ });
78
+ await ch.bindQueue(queueName, exchange, routing);
79
+ await ch.bindQueue(`${exchange}.${system}.dlq`, `${exchange}.${dlx}`, `integration.${system}.#`);
80
+ if (way === 'inbound') {
81
+ const retryShortQueue = `${exchange}.${system}.retry.short`;
82
+ const retryLongQueue = `${exchange}.${system}.retry.long`;
83
+ try {
84
+ await ch.assertQueue(retryShortQueue, {
85
+ durable: true,
86
+ arguments: {
87
+ 'x-message-ttl': retryShortMs,
88
+ 'x-dead-letter-exchange': exchange,
89
+ },
90
+ });
91
+ await ch.assertQueue(retryLongQueue, {
92
+ durable: true,
93
+ arguments: {
94
+ 'x-message-ttl': retryLongMs,
95
+ 'x-dead-letter-exchange': exchange,
96
+ },
97
+ });
98
+ }
99
+ catch (e) {
100
+ const msg = String(e?.message ?? e ?? '');
101
+ if (/PRECONDITION[_-]FAILED|inequivalent arg/i.test(msg)) {
102
+ // Sinaliza claramente drift de topologia
103
+ throw new Error(`RabbitMQ topology drift: ${msg}. Filas de retry existentes para '${system}' com TTL/args diferentes dos configurados. Alinhe variáveis ou remova filas manualmente.`);
104
+ }
105
+ throw e;
106
+ }
107
+ await ch.bindQueue(retryShortQueue, `${exchange}.retry.short`, routing);
108
+ await ch.bindQueue(retryLongQueue, `${exchange}.retry.long`, routing);
109
+ }
110
+ this.logger.log(`Queue ready: ${queueName} | DLQ: ${exchange}.${system}.dlq | exchange: ${exchange} | bind: ${routing}` +
111
+ (way === 'inbound' ? ` | retries: ${exchange}.${system}.retry.short, ${exchange}.${system}.retry.long` : ''));
112
+ return queueName;
113
+ }
114
+ finally {
115
+ try {
116
+ await ch.close();
117
+ }
118
+ catch { }
119
+ }
120
+ }
121
+ };
122
+ RabbitMQTopologyService = RabbitMQTopologyService_1 = __decorate([
123
+ Injectable()
124
+ ], RabbitMQTopologyService);
125
+ export { RabbitMQTopologyService };
126
+ // Backwards-compatible alias for existing code that uses the older naming convention
127
+ // Compat alias removido: use apenas RabbitMQTopologyService diretamente.
128
+ function getEnv(name) {
129
+ const v = process.env[name];
130
+ return v == null ? undefined : String(v);
131
+ }
132
+ function toInt(v, def) {
133
+ const n = Number(v);
134
+ return Number.isFinite(n) && n > 0 ? Math.floor(n) : def;
135
+ }
136
+ //# sourceMappingURL=rabbitmq-topology.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rabbitmq-topology.service.js","sourceRoot":"","sources":["../src/rabbitmq-topology.service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rabbitmq.constants.d.ts","sourceRoot":"","sources":["../src/rabbitmq.constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,eAAO,MAAM,gBAAgB,QAAyD,CAAC;AACvF,eAAO,MAAM,qBAAqB,QAAgD,CAAC;AACnF,eAAO,MAAM,0BAA0B,QAAsE,CAAC;AAC9G,eAAO,MAAM,0BAA0B,QAA0D,CAAC;AAElG,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,oBAAoB,QAQ5D"}
1
+ {"version":3,"file":"rabbitmq.constants.d.ts","sourceRoot":"","sources":["../src/rabbitmq.constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAG7D,eAAO,MAAM,gBAAgB,QAAyD,CAAC;AACvF,eAAO,MAAM,qBAAqB,QAAgD,CAAC;AACnF,eAAO,MAAM,0BAA0B,QAAsE,CAAC;AAC9G,eAAO,MAAM,0BAA0B,QAA0D,CAAC;AAElG,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,oBAAoB,QAY5D"}
@@ -1,8 +1,13 @@
1
+ // Defaults para publicação (alto nível pode sobrescrever)
1
2
  export const DEFAULT_EXCHANGE = process.env.RABBITMQ_EXCHANGE || 'integration.inbound';
2
3
  export const DEFAULT_EXCHANGE_TYPE = process.env.RABBITMQ_EXCHANGE_TYPE || 'topic';
3
4
  export const DEFAULT_ALTERNATE_EXCHANGE = process.env.RABBITMQ_ALTERNATE_EXCHANGE || 'integration.inbound.ae';
4
5
  export const DEFAULT_PUBLISH_TIMEOUT_MS = Number(process.env.RABBITMQ_PUBLISH_TIMEOUT_MS || 5000);
5
6
  export function assertRabbitEnv(logger) {
7
+ // Compat: aceita RABBITMQ_URI e faz fallback para RABBITMQ_URL
8
+ if (!process.env.RABBITMQ_URL && process.env.RABBITMQ_URI) {
9
+ process.env.RABBITMQ_URL = process.env.RABBITMQ_URI;
10
+ }
6
11
  const required = ['RABBITMQ_URL'];
7
12
  const missing = required.filter((k) => !process.env[k]);
8
13
  if (missing.length) {
@@ -1 +1 @@
1
- {"version":3,"file":"rabbitmq.constants.js","sourceRoot":"","sources":["../src/rabbitmq.constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,qBAAqB,CAAC;AACvF,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC;AACnF,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,wBAAwB,CAAC;AAC9G,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,IAAI,CAAC,CAAC;AAElG,MAAM,UAAU,eAAe,CAAC,MAA6B;IAC3D,MAAM,QAAQ,GAAG,CAAC,cAAc,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,iDAAiD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClF,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC9F,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"rabbitmq.constants.js","sourceRoot":"","sources":["../src/rabbitmq.constants.ts"],"names":[],"mappings":"AAEA,0DAA0D;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,qBAAqB,CAAC;AACvF,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC;AACnF,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,wBAAwB,CAAC;AAC9G,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,IAAI,CAAC,CAAC;AAElG,MAAM,UAAU,eAAe,CAAC,MAA6B;IAC3D,+DAA+D;IAC/D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACtD,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,cAAc,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,iDAAiD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClF,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC9F,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cargolift-cdi/util-rabbitmq",
3
- "version": "0.2.12",
3
+ "version": "0.2.13",
4
4
  "description": "Funções utilitárias para trabalhar com RabbitMQ",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",