@cargolift-cdi/util-rabbitmq 0.1.26 → 0.1.28

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.
Files changed (34) hide show
  1. package/README.md +82 -0
  2. package/dist/index.d.ts +6 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +7 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/messaging/auto-publish.interceptor.d.ts +11 -0
  7. package/dist/messaging/auto-publish.interceptor.d.ts.map +1 -0
  8. package/dist/messaging/auto-publish.interceptor.js +52 -0
  9. package/dist/messaging/auto-publish.interceptor.js.map +1 -0
  10. package/dist/messaging/envelope-builder.service.d.ts +14 -0
  11. package/dist/messaging/envelope-builder.service.d.ts.map +1 -0
  12. package/dist/messaging/envelope-builder.service.js +38 -0
  13. package/dist/messaging/envelope-builder.service.js.map +1 -0
  14. package/dist/messaging/message-envelope.d.ts +17 -0
  15. package/dist/messaging/message-envelope.d.ts.map +1 -0
  16. package/dist/messaging/message-envelope.js +2 -0
  17. package/dist/messaging/message-envelope.js.map +1 -0
  18. package/dist/messaging/message-publisher.service.d.ts +20 -0
  19. package/dist/messaging/message-publisher.service.d.ts.map +1 -0
  20. package/dist/messaging/message-publisher.service.js +42 -0
  21. package/dist/messaging/message-publisher.service.js.map +1 -0
  22. package/dist/messaging/messaging.module.d.ts +3 -0
  23. package/dist/messaging/messaging.module.d.ts.map +1 -0
  24. package/dist/messaging/messaging.module.js +30 -0
  25. package/dist/messaging/messaging.module.js.map +1 -0
  26. package/dist/messaging/publish.decorator.d.ts +9 -0
  27. package/dist/messaging/publish.decorator.d.ts.map +1 -0
  28. package/dist/messaging/publish.decorator.js +4 -0
  29. package/dist/messaging/publish.decorator.js.map +1 -0
  30. package/dist/rabbitmq-publisher.service.d.ts +17 -11
  31. package/dist/rabbitmq-publisher.service.d.ts.map +1 -1
  32. package/dist/rabbitmq-publisher.service.js +59 -24
  33. package/dist/rabbitmq-publisher.service.js.map +1 -1
  34. package/package.json +2 -1
package/README.md CHANGED
@@ -1,2 +1,84 @@
1
1
  # @cargolift-cdi/util-rabbitmq
2
2
 
3
+ Utilitários para publicação RabbitMQ com suporte a:
4
+
5
+ 1. Publicação direta (emit) e confirmada (publish) com headers de rastreabilidade
6
+ 2. Envelope padronizado de mensagens (meta + data)
7
+ 3. Decorator `@PublishMessage` + Interceptor automático para reduzir repetição em controllers NestJS
8
+
9
+ ## Envelope
10
+ Estrutura enviada:
11
+ ```jsonc
12
+ {
13
+ "meta": {
14
+ "correlationId": "uuid",
15
+ "eventType": "dominio.recurso.acao",
16
+ "producer": "nome-do-servico",
17
+ "timestamp": "2025-09-26T12:34:56.789Z",
18
+ "http": { "method": "POST", "path": "/demo" },
19
+ "trace": []
20
+ },
21
+ "data": { /* payload original */ }
22
+ }
23
+ ```
24
+
25
+ ## Uso rápido
26
+
27
+ 1. Importe o `MessagingModule` no módulo da API:
28
+ ```ts
29
+ import { Module } from '@nestjs/common';
30
+ import { MessagingModule } from '@cargolift-cdi/util-rabbitmq';
31
+ import { APP_INTERCEPTOR } from '@nestjs/core';
32
+ import { AutoPublishInterceptor } from '@cargolift-cdi/util-rabbitmq';
33
+
34
+ @Module({
35
+ imports: [MessagingModule],
36
+ providers: [
37
+ { provide: APP_INTERCEPTOR, useClass: AutoPublishInterceptor }
38
+ ]
39
+ })
40
+ export class AppModule {}
41
+ ```
42
+
43
+ 2. Em um controller:
44
+ ```ts
45
+ import { Controller, Post, Body } from '@nestjs/common';
46
+ import { PublishMessage } from '@cargolift-cdi/util-rabbitmq';
47
+
48
+ @Controller('demo')
49
+ export class DemoController {
50
+ @Post()
51
+ @PublishMessage({ eventType: 'integration.erp.demo', routingKey: 'integration.erp.demo' })
52
+ create(@Body() body: any) {
53
+ return body; // Interceptor publicará e retornará { message, correlationId, eventType }
54
+ }
55
+ }
56
+ ```
57
+
58
+ ## Headers
59
+
60
+ Os headers adicionados automaticamente:
61
+ ```
62
+ x-correlation-id
63
+ x-trace
64
+ x-event-type
65
+ pattern (routingKey ou pattern)
66
+ ```
67
+
68
+ ## Variáveis de ambiente relevantes
69
+ ```
70
+ RABBITMQ_URL=amqp://user:pass@host:5672/vhost
71
+ RABBITMQ_EXCHANGE=integration.inbound (opcional se usar decorator sem especificar exchange)
72
+ RABBITMQ_EXCHANGE_TYPE=topic (default se não passado no decorator)
73
+ SERVICE_NAME=middleware-api (usado como producer)
74
+ ```
75
+
76
+ ## Extensões futuras sugeridas
77
+ - schemaVersion no envelope
78
+ - Retry com backoff exponencial
79
+ - Dead-letter metadata
80
+ - Enriquecimento com identidade do usuário
81
+
82
+ ## Licença
83
+ MIT
84
+
package/dist/index.d.ts CHANGED
@@ -4,4 +4,10 @@
4
4
  */
5
5
  export * from './rabbitmq-publisher.service.js';
6
6
  export * from './rabbitmq-publisher-dlq.service.js';
7
+ export * from './messaging/message-envelope.js';
8
+ export * from './messaging/publish.decorator.js';
9
+ export * from './messaging/envelope-builder.service.js';
10
+ export * from './messaging/message-publisher.service.js';
11
+ export * from './messaging/auto-publish.interceptor.js';
12
+ export * from './messaging/messaging.module.js';
7
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,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AAEpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,yCAAyC,CAAC;AACxD,cAAc,0CAA0C,CAAC;AACzD,cAAc,yCAAyC,CAAC;AACxD,cAAc,iCAAiC,CAAC"}
package/dist/index.js CHANGED
@@ -4,4 +4,11 @@
4
4
  */
5
5
  export * from './rabbitmq-publisher.service.js';
6
6
  export * from './rabbitmq-publisher-dlq.service.js';
7
+ // messaging
8
+ export * from './messaging/message-envelope.js';
9
+ export * from './messaging/publish.decorator.js';
10
+ export * from './messaging/envelope-builder.service.js';
11
+ export * from './messaging/message-publisher.service.js';
12
+ export * from './messaging/auto-publish.interceptor.js';
13
+ export * from './messaging/messaging.module.js';
7
14
  //# 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,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,iCAAiC,CAAC;AAChD,cAAc,qCAAqC,CAAC;AACpD,YAAY;AACZ,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,yCAAyC,CAAC;AACxD,cAAc,0CAA0C,CAAC;AACzD,cAAc,yCAAyC,CAAC;AACxD,cAAc,iCAAiC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { CallHandler, ExecutionContext, NestInterceptor } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ import { Observable } from 'rxjs';
4
+ import { MessagePublisherService } from './message-publisher.service.js';
5
+ export declare class AutoPublishInterceptor implements NestInterceptor {
6
+ private readonly reflector;
7
+ private readonly publisher;
8
+ constructor(reflector: Reflector, publisher: MessagePublisherService);
9
+ intercept(context: ExecutionContext, next: CallHandler): Observable<any>;
10
+ }
11
+ //# sourceMappingURL=auto-publish.interceptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-publish.interceptor.d.ts","sourceRoot":"","sources":["../../src/messaging/auto-publish.interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAc,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAQ,MAAM,MAAM,CAAC;AAGxC,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,qBACa,sBAAuB,YAAW,eAAe;IAE1D,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,uBAAuB;IAGrD,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC;CA6BzE"}
@@ -0,0 +1,52 @@
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 __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Injectable } from '@nestjs/common';
11
+ import { Reflector } from '@nestjs/core';
12
+ import { from } from 'rxjs';
13
+ import { mergeMap, map } from 'rxjs/operators';
14
+ import { PUBLISH_METADATA_KEY } from './publish.decorator.js';
15
+ import { MessagePublisherService } from './message-publisher.service.js';
16
+ let AutoPublishInterceptor = class AutoPublishInterceptor {
17
+ constructor(reflector, publisher) {
18
+ this.reflector = reflector;
19
+ this.publisher = publisher;
20
+ }
21
+ intercept(context, next) {
22
+ const publishOptions = this.reflector.get(PUBLISH_METADATA_KEY, context.getHandler());
23
+ if (!publishOptions) {
24
+ return next.handle();
25
+ }
26
+ const http = context.switchToHttp();
27
+ const req = http.getRequest();
28
+ return next.handle().pipe(mergeMap((controllerResult) => {
29
+ const payload = controllerResult?.payload !== undefined ? controllerResult.payload : controllerResult;
30
+ const exchange = publishOptions.exchange || process.env.RABBITMQ_EXCHANGE || 'integration.inbound';
31
+ return from(this.publisher.publish({
32
+ req,
33
+ eventType: publishOptions.eventType,
34
+ exchange,
35
+ routingKey: publishOptions.routingKey,
36
+ payload,
37
+ exchangeType: publishOptions.exchangeType,
38
+ })).pipe(map((envelope) => ({
39
+ message: 'Mensagem publicada com sucesso',
40
+ correlationId: envelope.meta.correlationId,
41
+ eventType: envelope.meta.eventType,
42
+ })));
43
+ }));
44
+ }
45
+ };
46
+ AutoPublishInterceptor = __decorate([
47
+ Injectable(),
48
+ __metadata("design:paramtypes", [Reflector,
49
+ MessagePublisherService])
50
+ ], AutoPublishInterceptor);
51
+ export { AutoPublishInterceptor };
52
+ //# sourceMappingURL=auto-publish.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-publish.interceptor.js","sourceRoot":"","sources":["../../src/messaging/auto-publish.interceptor.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAiC,UAAU,EAAmB,MAAM,gBAAgB,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAc,IAAI,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAkB,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAGlE,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACjC,YACmB,SAAoB,EACpB,SAAkC;QADlC,cAAS,GAAT,SAAS,CAAW;QACpB,cAAS,GAAT,SAAS,CAAyB;IAClD,CAAC;IAEJ,SAAS,CAAC,OAAyB,EAAE,IAAiB;QACpD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAA6B,oBAAoB,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAClH,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAE9B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACvB,QAAQ,CAAC,CAAC,gBAAgB,EAAE,EAAE;YAC5B,MAAM,OAAO,GAAG,gBAAgB,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC;YACtG,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,qBAAqB,CAAC;YACnG,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBACjC,GAAG;gBACH,SAAS,EAAE,cAAc,CAAC,SAAS;gBACnC,QAAQ;gBACR,UAAU,EAAE,cAAc,CAAC,UAAU;gBACrC,OAAO;gBACP,YAAY,EAAE,cAAc,CAAC,YAAY;aAC1C,CAAC,CAAC,CAAC,IAAI,CACN,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACjB,OAAO,EAAE,gCAAgC;gBACzC,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa;gBAC1C,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS;aACnC,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF,CAAA;AAnCY,sBAAsB;IADlC,UAAU,EAAE;qCAGmB,SAAS;QACT,uBAAuB;GAH1C,sBAAsB,CAmClC"}
@@ -0,0 +1,14 @@
1
+ import type { Request } from 'express';
2
+ import { MessageEnvelope } from './message-envelope.js';
3
+ import { LoggerContextService } from '@cargolift-cdi/common';
4
+ export declare class EnvelopeBuilderService {
5
+ private readonly loggerCtx;
6
+ constructor(loggerCtx: LoggerContextService);
7
+ build<T>(params: {
8
+ req?: Request;
9
+ eventType: string;
10
+ payload: T;
11
+ producer?: string;
12
+ }): MessageEnvelope<T>;
13
+ }
14
+ //# sourceMappingURL=envelope-builder.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope-builder.service.d.ts","sourceRoot":"","sources":["../../src/messaging/envelope-builder.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,qBACa,sBAAsB;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,oBAAoB;IAE5D,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE;QAAE,GAAG,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,eAAe,CAAC,CAAC,CAAC;CAiB1G"}
@@ -0,0 +1,38 @@
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 __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Injectable } from '@nestjs/common';
11
+ import { LoggerContextService } from '@cargolift-cdi/common';
12
+ let EnvelopeBuilderService = class EnvelopeBuilderService {
13
+ constructor(loggerCtx) {
14
+ this.loggerCtx = loggerCtx;
15
+ }
16
+ build(params) {
17
+ const { req, eventType, payload } = params;
18
+ const producer = params.producer || process.env.SERVICE_NAME || process.env.npm_package_name || 'unknown-service';
19
+ const ctx = this.loggerCtx.getContext();
20
+ return {
21
+ meta: {
22
+ correlationId: ctx.correlation_id || crypto.randomUUID(),
23
+ trace: ctx.trace,
24
+ eventType,
25
+ producer,
26
+ timestamp: new Date().toISOString(),
27
+ http: req ? { method: req.method, path: (req.route?.path || req.path) } : undefined,
28
+ },
29
+ data: payload,
30
+ };
31
+ }
32
+ };
33
+ EnvelopeBuilderService = __decorate([
34
+ Injectable(),
35
+ __metadata("design:paramtypes", [LoggerContextService])
36
+ ], EnvelopeBuilderService);
37
+ export { EnvelopeBuilderService };
38
+ //# sourceMappingURL=envelope-builder.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envelope-builder.service.js","sourceRoot":"","sources":["../../src/messaging/envelope-builder.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAGtD,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IACjC,YAA6B,SAA+B;QAA/B,cAAS,GAAT,SAAS,CAAsB;IAAG,CAAC;IAEhE,KAAK,CAAI,MAA2E;QAClF,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,iBAAiB,CAAC;QAClH,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;QAExC,OAAO;YACL,IAAI,EAAE;gBACJ,aAAa,EAAG,GAAG,CAAC,cAAyB,IAAI,MAAM,CAAC,UAAU,EAAE;gBACpE,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,SAAS;gBACT,QAAQ;gBACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;aACpF;YACD,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;CACF,CAAA;AApBY,sBAAsB;IADlC,UAAU,EAAE;qCAE6B,oBAAoB;GADjD,sBAAsB,CAoBlC"}
@@ -0,0 +1,17 @@
1
+ export interface MessageMeta {
2
+ correlationId: string;
3
+ eventType: string;
4
+ producer: string;
5
+ timestamp: string;
6
+ http?: {
7
+ method: string;
8
+ path: string;
9
+ };
10
+ trace?: any;
11
+ [key: string]: any;
12
+ }
13
+ export interface MessageEnvelope<T = any> {
14
+ meta: MessageMeta;
15
+ data: T;
16
+ }
17
+ //# sourceMappingURL=message-envelope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-envelope.d.ts","sourceRoot":"","sources":["../../src/messaging/message-envelope.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,GAAG;IACtC,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,CAAC,CAAC;CACT"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=message-envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-envelope.js","sourceRoot":"","sources":["../../src/messaging/message-envelope.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import type { Request } from 'express';
2
+ import { EnvelopeBuilderService } from './envelope-builder.service.js';
3
+ import { RabbitMQPublisherService } from '../rabbitmq-publisher.service.js';
4
+ import { MessageEnvelope } from './message-envelope.js';
5
+ export interface PublishMessageParams<T = any> {
6
+ req?: Request;
7
+ eventType: string;
8
+ exchange: string;
9
+ routingKey: string;
10
+ payload: T;
11
+ exchangeType?: 'topic' | 'direct' | 'fanout' | 'headers';
12
+ headers?: Record<string, any>;
13
+ }
14
+ export declare class MessagePublisherService {
15
+ private readonly envelopeBuilder;
16
+ private readonly publisher;
17
+ constructor(envelopeBuilder: EnvelopeBuilderService, publisher: RabbitMQPublisherService);
18
+ publish<T>(params: PublishMessageParams<T>): Promise<MessageEnvelope<T>>;
19
+ }
20
+ //# sourceMappingURL=message-publisher.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-publisher.service.d.ts","sourceRoot":"","sources":["../../src/messaging/message-publisher.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,WAAW,oBAAoB,CAAC,CAAC,GAAC,GAAG;IACzC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,CAAC,CAAC;IACX,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED,qBACa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,eAAe,EAAE,sBAAsB,EACvC,SAAS,EAAE,wBAAwB;IAGhD,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;CAwB/E"}
@@ -0,0 +1,42 @@
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 __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Injectable } from '@nestjs/common';
11
+ import { EnvelopeBuilderService } from './envelope-builder.service.js';
12
+ import { RabbitMQPublisherService } from '../rabbitmq-publisher.service.js';
13
+ let MessagePublisherService = class MessagePublisherService {
14
+ constructor(envelopeBuilder, publisher) {
15
+ this.envelopeBuilder = envelopeBuilder;
16
+ this.publisher = publisher;
17
+ }
18
+ async publish(params) {
19
+ const envelope = this.envelopeBuilder.build({
20
+ req: params.req,
21
+ eventType: params.eventType,
22
+ payload: params.payload,
23
+ });
24
+ await this.publisher.publish(params.exchange, params.routingKey, envelope, {
25
+ exchangeType: params.exchangeType,
26
+ headers: {
27
+ 'x-correlation-id': envelope.meta.correlationId,
28
+ 'x-trace': JSON.stringify(envelope.meta.trace || []),
29
+ 'x-event-type': envelope.meta.eventType,
30
+ ...(params.headers || {}),
31
+ },
32
+ });
33
+ return envelope;
34
+ }
35
+ };
36
+ MessagePublisherService = __decorate([
37
+ Injectable(),
38
+ __metadata("design:paramtypes", [EnvelopeBuilderService,
39
+ RabbitMQPublisherService])
40
+ ], MessagePublisherService);
41
+ export { MessagePublisherService };
42
+ //# sourceMappingURL=message-publisher.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-publisher.service.js","sourceRoot":"","sources":["../../src/messaging/message-publisher.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAcrE,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClC,YACmB,eAAuC,EACvC,SAAmC;QADnC,oBAAe,GAAf,eAAe,CAAwB;QACvC,cAAS,GAAT,SAAS,CAA0B;IACnD,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAI,MAA+B;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAC1C,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAC1B,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,UAAU,EACjB,QAAQ,EACR;YACE,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,OAAO,EAAE;gBACP,kBAAkB,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa;gBAC/C,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACpD,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS;gBACvC,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;aAC1B;SACF,CACF,CAAC;QAEF,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAA;AA9BY,uBAAuB;IADnC,UAAU,EAAE;qCAGyB,sBAAsB;QAC5B,wBAAwB;GAH3C,uBAAuB,CA8BnC"}
@@ -0,0 +1,3 @@
1
+ export declare class MessagingModule {
2
+ }
3
+ //# sourceMappingURL=messaging.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging.module.d.ts","sourceRoot":"","sources":["../../src/messaging/messaging.module.ts"],"names":[],"mappings":"AAMA,qBAaa,eAAe;CAAG"}
@@ -0,0 +1,30 @@
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
+ import { Module } from '@nestjs/common';
8
+ import { EnvelopeBuilderService } from './envelope-builder.service.js';
9
+ import { MessagePublisherService } from './message-publisher.service.js';
10
+ import { AutoPublishInterceptor } from './auto-publish.interceptor.js';
11
+ import { LoggerContextService } from '@cargolift-cdi/common';
12
+ let MessagingModule = class MessagingModule {
13
+ };
14
+ MessagingModule = __decorate([
15
+ Module({
16
+ providers: [
17
+ LoggerContextService,
18
+ EnvelopeBuilderService,
19
+ MessagePublisherService,
20
+ AutoPublishInterceptor,
21
+ ],
22
+ exports: [
23
+ EnvelopeBuilderService,
24
+ MessagePublisherService,
25
+ AutoPublishInterceptor,
26
+ ],
27
+ })
28
+ ], MessagingModule);
29
+ export { MessagingModule };
30
+ //# sourceMappingURL=messaging.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messaging.module.js","sourceRoot":"","sources":["../../src/messaging/messaging.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAetD,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,eAAe;IAb3B,MAAM,CAAC;QACN,SAAS,EAAE;YACT,oBAAoB;YACpB,sBAAsB;YACtB,uBAAuB;YACvB,sBAAsB;SACvB;QACD,OAAO,EAAE;YACP,sBAAsB;YACtB,uBAAuB;YACvB,sBAAsB;SACvB;KACF,CAAC;GACW,eAAe,CAAG"}
@@ -0,0 +1,9 @@
1
+ export interface PublishOptions {
2
+ eventType: string;
3
+ routingKey: string;
4
+ exchange?: string;
5
+ exchangeType?: 'topic' | 'direct' | 'fanout' | 'headers';
6
+ }
7
+ export declare const PUBLISH_METADATA_KEY = "publish:options";
8
+ export declare const PublishMessage: (options: PublishOptions) => MethodDecorator;
9
+ //# sourceMappingURL=publish.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.decorator.d.ts","sourceRoot":"","sources":["../../src/messaging/publish.decorator.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC1D;AAED,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AACtD,eAAO,MAAM,cAAc,GAAI,SAAS,cAAc,KAAG,eAA6D,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { SetMetadata } from '@nestjs/common';
2
+ export const PUBLISH_METADATA_KEY = 'publish:options';
3
+ export const PublishMessage = (options) => SetMetadata(PUBLISH_METADATA_KEY, options);
4
+ //# sourceMappingURL=publish.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.decorator.js","sourceRoot":"","sources":["../../src/messaging/publish.decorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAS7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AACtD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAuB,EAAmB,EAAE,CAAC,WAAW,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC"}
@@ -1,3 +1,4 @@
1
+ import * as amqp from 'amqplib';
1
2
  import { LoggerContextService } from '@cargolift-cdi/common';
2
3
  export declare class RabbitMQPublisherService {
3
4
  private readonly logger;
@@ -15,24 +16,29 @@ export declare class RabbitMQPublisherService {
15
16
  headers?: Record<string, any>;
16
17
  }): Promise<void>;
17
18
  /**
18
- * Publica usando diretamente `channel.publish` do amqplib.
19
- * Diferente de `emit`, este método SEMPRE exige um exchange explícito e nunca faz fallback para `sendToQueue`.
20
- * Pode ser útil quando se quer garantir o fluxo via exchange ou quando o pattern difere de routingKey.
19
+ * Publica mensagem em exchange usando ConfirmChannel para garantir confirmação (publisher confirms).
20
+ * Boas práticas amqplib aplicadas:
21
+ * - Uso de createConfirmChannel para confirmação de publicação (ack/nack)
22
+ * - Tratamento de backpressure via retorno boolean do publish e evento 'drain'
23
+ * - Timeout configurável para confirmação
24
+ * - Opções de publicação (contentType, contentEncoding, expiration, priority, etc.) expostas
25
+ * - Possibilidade de customizar opções de assertExchange
26
+ * - Preserva contexto (correlation id, trace) e adiciona pattern no header e body
21
27
  *
22
- * @param exchange Exchange onde publicar
23
- * @param routingKey Routing key (binding) usada na publicação
24
- * @param payload Corpo da mensagem (objeto será serializado em JSON)
25
- * @param opts Opções adicionais
26
- * - exchangeType (default: direct)
27
- * - headers (headers adicionais)
28
- * - pattern (default: routingKey) inserido no body { pattern, data }
29
- * - persistent (default: true)
28
+ * @param exchange Exchange alvo
29
+ * @param routingKey Routing key
30
+ * @param payload Payload (serializado em JSON por padrão)
31
+ * @param opts Opções avançadas
30
32
  */
31
33
  publish(exchange: string, routingKey: string, payload: any, opts?: {
32
34
  exchangeType?: string;
35
+ assertExchangeOptions?: amqp.Options.AssertExchange;
36
+ publishOptions?: amqp.Options.Publish;
33
37
  headers?: Record<string, any>;
34
38
  pattern?: string;
35
39
  persistent?: boolean;
40
+ timeoutMs?: number;
41
+ serialize?: (data: any) => Buffer;
36
42
  }): Promise<void>;
37
43
  }
38
44
  //# sourceMappingURL=rabbitmq-publisher.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rabbitmq-publisher.service.d.ts","sourceRoot":"","sources":["../src/rabbitmq-publisher.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAI7D,qBACa,wBAAwB;IAEO,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,oBAAoB;IAEvF;;;;;OAKG;IAEG,IAAI,CACR,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,GAAG,EACZ,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC/B,GACA,OAAO,CAAC,IAAI,CAAC;IAqHhB;;;;;;;;;;;;;OAaG;IACG,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,GAAG,EACZ,IAAI,CAAC,EAAE;QACL,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,GACA,OAAO,CAAC,IAAI,CAAC;CA+DjB"}
1
+ {"version":3,"file":"rabbitmq-publisher.service.d.ts","sourceRoot":"","sources":["../src/rabbitmq-publisher.service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAI7D,qBACa,wBAAwB;IAEO,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,oBAAoB;IAEvF;;;;;OAKG;IAEG,IAAI,CACR,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,GAAG,EACZ,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC/B,GACA,OAAO,CAAC,IAAI,CAAC;IAqHhB;;;;;;;;;;;;;;OAcG;IACG,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,GAAG,EACZ,IAAI,CAAC,EAAE;QACL,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,qBAAqB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QACpD,cAAc,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QACtC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC;KACnC,GACA,OAAO,CAAC,IAAI,CAAC;CAgGjB"}
@@ -136,18 +136,19 @@ let RabbitMQPublisherService = class RabbitMQPublisherService {
136
136
  }
137
137
  }
138
138
  /**
139
- * Publica usando diretamente `channel.publish` do amqplib.
140
- * Diferente de `emit`, este método SEMPRE exige um exchange explícito e nunca faz fallback para `sendToQueue`.
141
- * Pode ser útil quando se quer garantir o fluxo via exchange ou quando o pattern difere de routingKey.
139
+ * Publica mensagem em exchange usando ConfirmChannel para garantir confirmação (publisher confirms).
140
+ * Boas práticas amqplib aplicadas:
141
+ * - Uso de createConfirmChannel para confirmação de publicação (ack/nack)
142
+ * - Tratamento de backpressure via retorno boolean do publish e evento 'drain'
143
+ * - Timeout configurável para confirmação
144
+ * - Opções de publicação (contentType, contentEncoding, expiration, priority, etc.) expostas
145
+ * - Possibilidade de customizar opções de assertExchange
146
+ * - Preserva contexto (correlation id, trace) e adiciona pattern no header e body
142
147
  *
143
- * @param exchange Exchange onde publicar
144
- * @param routingKey Routing key (binding) usada na publicação
145
- * @param payload Corpo da mensagem (objeto será serializado em JSON)
146
- * @param opts Opções adicionais
147
- * - exchangeType (default: direct)
148
- * - headers (headers adicionais)
149
- * - pattern (default: routingKey) inserido no body { pattern, data }
150
- * - persistent (default: true)
148
+ * @param exchange Exchange alvo
149
+ * @param routingKey Routing key
150
+ * @param payload Payload (serializado em JSON por padrão)
151
+ * @param opts Opções avançadas
151
152
  */
152
153
  async publish(exchange, routingKey, payload, opts) {
153
154
  if (!exchange)
@@ -161,6 +162,8 @@ let RabbitMQPublisherService = class RabbitMQPublisherService {
161
162
  const pattern = opts?.pattern || routingKey;
162
163
  headers['pattern'] = pattern;
163
164
  const messageBody = { pattern, data: payload };
165
+ const serialize = opts?.serialize || ((data) => Buffer.from(JSON.stringify(data)));
166
+ const content = serialize(messageBody);
164
167
  const url = process.env.RABBITMQ_URL;
165
168
  if (!url)
166
169
  throw new Error('RABBITMQ_URL não definido');
@@ -168,7 +171,7 @@ let RabbitMQPublisherService = class RabbitMQPublisherService {
168
171
  connection.on('error', (err) => {
169
172
  try {
170
173
  this.logger?.error('AMQP connection error', err, {
171
- application: { name: 'util-rabbitmq', function: 'RabbitMQPublisherService', action: 'publish' },
174
+ application: { name: 'util-rabbitmq', function: 'RabbitMQPublisherService', action: 'publishConfirm' },
172
175
  data: { rabbitmq: { url, exchange, routingKey } },
173
176
  });
174
177
  }
@@ -177,27 +180,59 @@ let RabbitMQPublisherService = class RabbitMQPublisherService {
177
180
  connection.on('close', () => { });
178
181
  let channel = null;
179
182
  try {
180
- channel = await connection.createChannel();
181
- channel.on('error', () => { });
183
+ channel = await connection.createConfirmChannel();
184
+ channel.on('error', (err) => {
185
+ this.logger.error('Erro no ConfirmChannel', err, {
186
+ application: { name: 'util-rabbitmq', function: 'RabbitMQPublisherService', action: 'publishConfirm' },
187
+ data: { rabbitmq: { exchange, routingKey } },
188
+ });
189
+ });
182
190
  channel.on('close', () => { });
183
191
  const exchangeType = opts?.exchangeType || process.env.RABBITMQ_EXCHANGE_TYPE || 'direct';
184
- await channel.assertExchange(exchange, exchangeType, { durable: true });
185
- const content = Buffer.from(JSON.stringify(messageBody));
186
- const published = channel.publish(exchange, routingKey, content, {
192
+ const assertOptions = { durable: true, ...(opts?.assertExchangeOptions || {}) };
193
+ await channel.assertExchange(exchange, exchangeType, assertOptions);
194
+ const publishOptions = {
187
195
  persistent: opts?.persistent !== false,
188
196
  headers,
197
+ contentType: 'application/json',
198
+ ...opts?.publishOptions,
199
+ };
200
+ const timeoutMs = opts?.timeoutMs ?? 5000;
201
+ await new Promise((resolve, reject) => {
202
+ let settled = false;
203
+ const timer = setTimeout(() => {
204
+ if (!settled) {
205
+ settled = true;
206
+ reject(new Error(`Timeout aguardando confirmação de publicação (>${timeoutMs}ms)`));
207
+ }
208
+ }, timeoutMs);
209
+ const ok = channel.publish(exchange, routingKey, content, publishOptions, (err) => {
210
+ if (settled)
211
+ return;
212
+ settled = true;
213
+ clearTimeout(timer);
214
+ if (err)
215
+ return reject(err);
216
+ resolve();
217
+ });
218
+ if (!ok) {
219
+ channel.once('drain', () => {
220
+ // apenas log informativo; a confirmação ainda é aguardada via callback
221
+ this.logger.info('Backpressure aliviado após drain', {
222
+ application: { name: 'util-rabbitmq', function: 'RabbitMQPublisherService', action: 'publishConfirm' },
223
+ data: { rabbitmq: { exchange, routingKey } },
224
+ });
225
+ });
226
+ }
189
227
  });
190
- if (!published) {
191
- await new Promise((res) => channel.once('drain', () => res()));
192
- }
193
- this.logger.info(`Mensagem publicada (publish) no exchange "${exchange}" routingKey "${routingKey}"`, {
194
- application: { name: 'util-rabbitmq', function: 'RabbitMQPublisherService', action: 'publish' },
228
+ this.logger.info(`Mensagem publicada (publishConfirm) confirmada no exchange "${exchange}" routingKey "${routingKey}"`, {
229
+ application: { name: 'util-rabbitmq', function: 'RabbitMQPublisherService', action: 'publishConfirm' },
195
230
  data: { rabbitmq: { exchange, routingKey, pattern } },
196
231
  });
197
232
  }
198
233
  catch (err) {
199
- this.logger.error(`Erro ao publicar (publish) no exchange "${exchange}"`, err, {
200
- application: { name: 'util-rabbitmq', function: 'RabbitMQPublisherService', action: 'publish' },
234
+ this.logger.error(`Erro ao publicar (publishConfirm) no exchange "${exchange}"`, err, {
235
+ application: { name: 'util-rabbitmq', function: 'RabbitMQPublisherService', action: 'publishConfirm' },
201
236
  data: { rabbitmq: { exchange, routingKey } },
202
237
  });
203
238
  throw err;
@@ -1 +1 @@
1
- {"version":3,"file":"rabbitmq-publisher.service.js","sourceRoot":"","sources":["../src/rabbitmq-publisher.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rabbitmq-publisher.service.js","sourceRoot":"","sources":["../src/rabbitmq-publisher.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE3D,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAKtD,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACnC,gEAAgE;IAChE,YAA2D,MAA4B;QAA5B,WAAM,GAAN,MAAM,CAAsB;IAAI,CAAC;IAE5F;;;;;OAKG;IAEH,KAAK,CAAC,IAAI,CACR,OAAe,EACf,OAAY,EACZ,IAKC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,OAAO,GAAwB,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAElE,IAAI,GAAG,EAAE,cAAc;YAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC;QAC1E,IAAI,GAAG,EAAE,KAAK;YAAE,OAAO,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;QAE/C,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;QAC7B,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAE/C,0DAA0D;QAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAEvD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE3C,6EAA6E;QAC7E,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC7B,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,uBAAuB,EAAE,GAAU,EACpD;oBACE,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,EAAE,MAAM,EAAE;oBAC5F,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;iBAC5C,CAAC,CAAC;YACP,CAAC;YAAC,MAAM,CAAC,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1B,8BAA8B;QAChC,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,GAAwB,IAAI,CAAC;QAExC,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE,CAAC;YAE3C,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC1B,8BAA8B;YAChC,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACvB,8BAA8B;YAChC,CAAC,CAAC,CAAC;YAEH,kFAAkF;YAClF,MAAM,SAAS,GAAwB,EAAE,CAAC;YAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;gBAC7B,SAAS,CAAC,wBAAwB,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;YACjE,CAAC;YAED,sFAAsF;YACtF,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM;gBAChD,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE;gBACzC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAEtB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;YAEzD,+FAA+F;YAC/F,MAAM,aAAa,GAAG,IAAI,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACtE,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAK,OAAO,CAAC,GAAG,CAAC,sBAA8B,IAAI,QAAQ,CAAC;YACnG,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,OAAO,CAAC;YAE/C,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,OAAO,CAAC,cAAc,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7E,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE;oBACpE,UAAU,EAAE,IAAI;oBAChB,OAAO;iBACR,CAAC,CAAC;gBACH,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,8DAA8D;oBAC9D,MAAM,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE,CAAC,OAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACxE,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,aAAa,qBAAqB,UAAU,GAAG,EAAE;oBACnG,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,EAAE,MAAM,EAAE;oBAC5F,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE;iBAC5E,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,0DAA0D;gBAC1D;;;;;;kBAME;gBACF,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE;oBACpC,UAAU,EAAE,IAAI;oBAChB,OAAO;iBACR,CAAC,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2CAA2C,OAAO,GAAG,EAAE;oBACtE,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,EAAE,MAAM,EAAE;oBAC5F,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;iBACvC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mEAAmE;YACnE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,OAAO,GAAG,EAAE,GAAU,EAAE;gBAClF,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,EAAE,MAAM,EAAE;gBAC5F,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;aACvC,CAAC,CAAC;YACH,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC;gBACH,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC;wBACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;oBACxB,CAAC;oBAAC,MAAM,CAAC,CAAC,CAAC;gBACb,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAC,CAAC;YACX,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,iCAAiC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,OAAO,CACX,QAAgB,EAChB,UAAkB,EAClB,OAAY,EACZ,IASC;QAED,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAEzD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,OAAO,GAAwB,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;QAClE,IAAI,GAAG,EAAE,cAAc;YAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC;QAC1E,IAAI,GAAG,EAAE,KAAK;YAAE,OAAO,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;QAE/C,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,UAAU,CAAC;QAC5C,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;QAE7B,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxF,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;QAEvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAEvD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC7B,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,uBAAuB,EAAE,GAAU,EAAE;oBACtD,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACtG,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE;iBAClD,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAe,CAAC,CAAC,CAAC;QAE9C,IAAI,OAAO,GAA+B,IAAI,CAAC;QAC/C,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,UAAU,CAAC,oBAAoB,EAAE,CAAC;YAClD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAU,EAAE;oBACtD,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,EAAE,gBAAgB,EAAE;oBACtG,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE;iBAC7C,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAe,CAAC,CAAC,CAAC;YAE3C,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY,IAAK,OAAO,CAAC,GAAG,CAAC,sBAA8B,IAAI,QAAQ,CAAC;YACnG,MAAM,aAAa,GAAgC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,qBAAqB,IAAI,EAAE,CAAC,EAAE,CAAC;YAC7G,MAAM,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;YAEpE,MAAM,cAAc,GAAyB;gBAC3C,UAAU,EAAE,IAAI,EAAE,UAAU,KAAK,KAAK;gBACtC,OAAO;gBACP,WAAW,EAAE,kBAAkB;gBAC/B,GAAG,IAAI,EAAE,cAAc;aACxB,CAAC;YAEF,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC;YAE1C,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,OAAO,GAAG,IAAI,CAAC;wBACf,MAAM,CAAC,IAAI,KAAK,CAAC,kDAAkD,SAAS,KAAK,CAAC,CAAC,CAAC;oBACtF,CAAC;gBACH,CAAC,EAAE,SAAS,CAAC,CAAC;gBAEd,MAAM,EAAE,GAAG,OAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE;oBACjF,IAAI,OAAO;wBAAE,OAAO;oBAClB,OAAO,GAAG,IAAI,CAAC;oBACf,YAAY,CAAC,KAAK,CAAC,CAAC;oBACpB,IAAI,GAAG;wBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC5B,OAAO,EAAE,CAAC;gBACd,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,EAAE,EAAE,CAAC;oBACR,OAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;wBAC1B,uEAAuE;wBACvE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE;4BACnD,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,EAAE,gBAAgB,EAAE;4BACtG,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE;yBAC7C,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+DAA+D,QAAQ,iBAAiB,UAAU,GAAG,EAAE;gBACtH,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,EAAE,gBAAgB,EAAE;gBACtG,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;aACtD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kDAAkD,QAAQ,GAAG,EAAE,GAAU,EAAE;gBAC3F,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,EAAE,gBAAgB,EAAE;gBACtG,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE;aAC7C,CAAC,CAAC;YACH,MAAM,GAAG,CAAC;QACZ,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC;gBAAC,IAAI,OAAO,EAAE,CAAC;oBAAC,IAAI,CAAC;wBAAC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC,CAAA,CAAC;gBAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACzE,IAAI,CAAC;gBAAC,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QAC5C,CAAC;IACH,CAAC;CAEF,CAAA;AAtQY,wBAAwB;IADpC,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IAGtB,WAAA,MAAM,CAAC,oBAAoB,CAAC,CAAA;qCAA0B,oBAAoB;GAF5E,wBAAwB,CAsQpC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cargolift-cdi/util-rabbitmq",
3
- "version": "0.1.26",
3
+ "version": "0.1.28",
4
4
  "description": "Funções utilitárias para trabalhar com RabbitMQ",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -41,6 +41,7 @@
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/amqplib": "^0.10.7",
44
+ "@types/express": "^5.0.3",
44
45
  "@types/node": "^24.3.1",
45
46
  "typescript": "^5.6.2"
46
47
  },