@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.
- package/README.md +82 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/messaging/auto-publish.interceptor.d.ts +11 -0
- package/dist/messaging/auto-publish.interceptor.d.ts.map +1 -0
- package/dist/messaging/auto-publish.interceptor.js +52 -0
- package/dist/messaging/auto-publish.interceptor.js.map +1 -0
- package/dist/messaging/envelope-builder.service.d.ts +14 -0
- package/dist/messaging/envelope-builder.service.d.ts.map +1 -0
- package/dist/messaging/envelope-builder.service.js +38 -0
- package/dist/messaging/envelope-builder.service.js.map +1 -0
- package/dist/messaging/message-envelope.d.ts +17 -0
- package/dist/messaging/message-envelope.d.ts.map +1 -0
- package/dist/messaging/message-envelope.js +2 -0
- package/dist/messaging/message-envelope.js.map +1 -0
- package/dist/messaging/message-publisher.service.d.ts +20 -0
- package/dist/messaging/message-publisher.service.d.ts.map +1 -0
- package/dist/messaging/message-publisher.service.js +42 -0
- package/dist/messaging/message-publisher.service.js.map +1 -0
- package/dist/messaging/messaging.module.d.ts +3 -0
- package/dist/messaging/messaging.module.d.ts.map +1 -0
- package/dist/messaging/messaging.module.js +30 -0
- package/dist/messaging/messaging.module.js.map +1 -0
- package/dist/messaging/publish.decorator.d.ts +9 -0
- package/dist/messaging/publish.decorator.d.ts.map +1 -0
- package/dist/messaging/publish.decorator.js +4 -0
- package/dist/messaging/publish.decorator.js.map +1 -0
- package/dist/rabbitmq-publisher.service.d.ts +17 -11
- package/dist/rabbitmq-publisher.service.d.ts.map +1 -1
- package/dist/rabbitmq-publisher.service.js +59 -24
- package/dist/rabbitmq-publisher.service.js.map +1 -1
- 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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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
|
|
19
|
-
*
|
|
20
|
-
*
|
|
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
|
|
23
|
-
* @param routingKey Routing key
|
|
24
|
-
* @param payload
|
|
25
|
-
* @param opts Opções
|
|
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":"
|
|
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
|
|
140
|
-
*
|
|
141
|
-
*
|
|
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
|
|
144
|
-
* @param routingKey Routing key
|
|
145
|
-
* @param payload
|
|
146
|
-
* @param opts Opções
|
|
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: '
|
|
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.
|
|
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
|
-
|
|
185
|
-
|
|
186
|
-
const
|
|
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
|
-
|
|
191
|
-
|
|
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 (
|
|
200
|
-
application: { name: 'util-rabbitmq', function: 'RabbitMQPublisherService', action: '
|
|
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.
|
|
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
|
},
|