@volontariapp/post-processors 3.2.39 → 3.3.0-snap-1ed0a4f
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/CHANGELOG.md +12 -0
- package/dist/core/processors/batch.post-processor.d.ts.map +1 -1
- package/dist/core/processors/batch.post-processor.js +10 -1
- package/dist/core/processors/batch.post-processor.js.map +1 -1
- package/dist/core/processors/single.post-processor.d.ts.map +1 -1
- package/dist/core/processors/single.post-processor.js +10 -1
- package/dist/core/processors/single.post-processor.js.map +1 -1
- package/dist/test/core/processors/unit/post-processor.trace.unit.spec.d.ts +2 -0
- package/dist/test/core/processors/unit/post-processor.trace.unit.spec.d.ts.map +1 -0
- package/dist/test/core/processors/unit/post-processor.trace.unit.spec.js +122 -0
- package/dist/test/core/processors/unit/post-processor.trace.unit.spec.js.map +1 -0
- package/dist/test/utils/helpers/trace-recorder.helper.d.ts +9 -0
- package/dist/test/utils/helpers/trace-recorder.helper.d.ts.map +1 -0
- package/dist/test/utils/helpers/trace-recorder.helper.js +30 -0
- package/dist/test/utils/helpers/trace-recorder.helper.js.map +1 -0
- package/dist/test/utils/index.d.ts +1 -0
- package/dist/test/utils/index.d.ts.map +1 -1
- package/dist/test/utils/index.js +1 -0
- package/dist/test/utils/index.js.map +1 -1
- package/package.json +6 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 3.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Restore the trace context of an asynchronous step. `BaseWorker.process`, `SinglePostProcessor` and `BatchPostProcessor` now extract the `traceparent` carried by the job or the event and run the handler in a child span (`job <type>` / `event <type>`, attributes `type`, `emitter`, `correlation_id`). A batch gets one span per message, in the trace of its own message, plus a batch span linked to them. Adds `runInTraceContext` and `runBatchInTraceContext` to `@volontariapp/database`. A message without a `traceparent` starts a new trace.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies []:
|
|
12
|
+
- @volontariapp/database@3.8.0
|
|
13
|
+
- @volontariapp/outbox@0.10.2
|
|
14
|
+
|
|
3
15
|
## 3.2.39
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch.post-processor.d.ts","sourceRoot":"","sources":["../../../src/core/processors/batch.post-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAA8B,MAAM,yBAAyB,CAAC;AAC9F,OAAO,KAAK,EAAE,gBAAgB,EAA+B,MAAM,sBAAsB,CAAC;AAC1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"batch.post-processor.d.ts","sourceRoot":"","sources":["../../../src/core/processors/batch.post-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAA8B,MAAM,yBAAyB,CAAC;AAC9F,OAAO,KAAK,EAAE,gBAAgB,EAA+B,MAAM,sBAAsB,CAAC;AAC1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAIhE,8BAAsB,kBAAkB,CACtC,SAAS,SAAS,kBAAkB,CACpC,SAAQ,iBAAiB,CAAC,SAAS,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;cAK3D,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAiBrE,kBAAkB;YA0ClB,uBAAuB;YAuCvB,sBAAsB;YAsDtB,4BAA4B;YAgE5B,uBAAuB;CAUtC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BasePostProcessor } from './base.post-processor.js';
|
|
2
2
|
import { RedisStreamHelper } from '../helpers/redis-stream.helper.js';
|
|
3
|
+
import { runBatchInTraceContext } from '@volontariapp/database';
|
|
3
4
|
export class BatchPostProcessor extends BasePostProcessor {
|
|
4
5
|
async processEntries(entries) {
|
|
5
6
|
const items = [];
|
|
@@ -72,7 +73,15 @@ export class BatchPostProcessor extends BasePostProcessor {
|
|
|
72
73
|
async executeBatchProcessing(items, _acquiredMessageIds, useIdempotency) {
|
|
73
74
|
try {
|
|
74
75
|
this.logger.info('Processing batch of events', { count: items.length });
|
|
75
|
-
await this.
|
|
76
|
+
await runBatchInTraceContext(`batch ${this.options.groupName}`, items.map(({ event }) => ({
|
|
77
|
+
traceparent: event.traceparent,
|
|
78
|
+
name: `event ${event.type}`,
|
|
79
|
+
attributes: {
|
|
80
|
+
type: event.type,
|
|
81
|
+
emitter: event.emitter,
|
|
82
|
+
correlation_id: event.correlationId,
|
|
83
|
+
},
|
|
84
|
+
})), () => this.processEvents(items));
|
|
76
85
|
this.circuitBreaker.recordSuccess();
|
|
77
86
|
const messageIds = items.map((item) => item.messageId);
|
|
78
87
|
const startRetry = Date.now();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch.post-processor.js","sourceRoot":"","sources":["../../../src/core/processors/batch.post-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAI7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"batch.post-processor.js","sourceRoot":"","sources":["../../../src/core/processors/batch.post-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single.post-processor.d.ts","sourceRoot":"","sources":["../../../src/core/processors/single.post-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAe,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"single.post-processor.d.ts","sourceRoot":"","sources":["../../../src/core/processors/single.post-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAe,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAI1E,KAAK,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAExE,8BAAsB,mBAAmB,CACvC,SAAS,SAAS,kBAAkB,CACpC,SAAQ,iBAAiB,CAAC,SAAS,CAAC;IAIpC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAC7B,KAAK,EAAE,WAAW,CAAC,cAAc,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAC5D,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;cAKS,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YASrE,kBAAkB;YAsClB,sBAAsB;YAsDtB,uBAAuB;IA4DrC,OAAO,CAAC,kBAAkB;CAkB3B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BasePostProcessor } from './base.post-processor.js';
|
|
2
2
|
import { RedisStreamHelper } from '../helpers/redis-stream.helper.js';
|
|
3
|
+
import { runInTraceContext } from '@volontariapp/database';
|
|
3
4
|
export class SinglePostProcessor extends BasePostProcessor {
|
|
4
5
|
async processEntries(entries) {
|
|
5
6
|
for (const entry of entries) {
|
|
@@ -47,7 +48,15 @@ export class SinglePostProcessor extends BasePostProcessor {
|
|
|
47
48
|
throw new Error('Event payload is missing a valid string type');
|
|
48
49
|
}
|
|
49
50
|
this.logger.info('Processing event', { messageId: id, eventId: event.id, type: event.type });
|
|
50
|
-
await
|
|
51
|
+
await runInTraceContext({
|
|
52
|
+
traceparent: event.traceparent,
|
|
53
|
+
name: `event ${event.type}`,
|
|
54
|
+
attributes: {
|
|
55
|
+
type: event.type,
|
|
56
|
+
emitter: event.emitter,
|
|
57
|
+
correlation_id: event.correlationId,
|
|
58
|
+
},
|
|
59
|
+
}, () => this.processEvent(event, id));
|
|
51
60
|
this.circuitBreaker.recordSuccess();
|
|
52
61
|
await this.retryHelper.clearRetryData(this.redis, this.options.groupName, id);
|
|
53
62
|
await this.acknowledge(id);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"single.post-processor.js","sourceRoot":"","sources":["../../../src/core/processors/single.post-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAQ7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"single.post-processor.js","sourceRoot":"","sources":["../../../src/core/processors/single.post-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-processor.trace.unit.spec.d.ts","sourceRoot":"","sources":["../../../../../src/test/core/processors/unit/post-processor.trace.unit.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it, jest, } from '@jest/globals';
|
|
2
|
+
import { SpanKind, trace } from '@opentelemetry/api';
|
|
3
|
+
import { createMock } from '@volontariapp/testing';
|
|
4
|
+
import { TestPostProcessor, TestBatchPostProcessor, TestMessagingStream, TestMessagingGroup, TestMessagingConsumer, makeTestEvent, mockRedisCall, createTraceRecorder, } from '../../../utils/index.js';
|
|
5
|
+
const TRACE_ID = '0af7651916cd43dd8448eb211c80319c';
|
|
6
|
+
const PARENT_SPAN_ID = 'b7ad6b7169203331';
|
|
7
|
+
const TRACEPARENT = `00-${TRACE_ID}-${PARENT_SPAN_ID}-01`;
|
|
8
|
+
const OTHER_TRACE_ID = '4bf92f3577b34da6a3ce929d0e0e4736';
|
|
9
|
+
const OTHER_PARENT_SPAN_ID = '00f067aa0ba902b7';
|
|
10
|
+
const OTHER_TRACEPARENT = `00-${OTHER_TRACE_ID}-${OTHER_PARENT_SPAN_ID}-01`;
|
|
11
|
+
const OPTIONS = {
|
|
12
|
+
streamName: TestMessagingStream.TEST_STREAM,
|
|
13
|
+
groupName: TestMessagingGroup.TEST_GROUP,
|
|
14
|
+
consumerName: TestMessagingConsumer.TEST_CONSUMER,
|
|
15
|
+
idempotencyTtlSeconds: 0,
|
|
16
|
+
};
|
|
17
|
+
const makeEvent = (id, traceparent) => ({
|
|
18
|
+
...makeTestEvent(id),
|
|
19
|
+
traceparent,
|
|
20
|
+
});
|
|
21
|
+
const toEntry = (event) => ({
|
|
22
|
+
id: `${event.id}-0`,
|
|
23
|
+
fields: { id: event.id, type: event.type, event: JSON.stringify(event) },
|
|
24
|
+
});
|
|
25
|
+
describe('post-processors — trace context (Unit)', () => {
|
|
26
|
+
const recorder = createTraceRecorder();
|
|
27
|
+
let redisMock;
|
|
28
|
+
beforeAll(() => {
|
|
29
|
+
recorder.start();
|
|
30
|
+
});
|
|
31
|
+
afterAll(async () => {
|
|
32
|
+
await recorder.stop();
|
|
33
|
+
});
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
redisMock = createMock();
|
|
36
|
+
redisMock.duplicate.mockReturnValue(redisMock);
|
|
37
|
+
const pipelineMock = createMock();
|
|
38
|
+
pipelineMock.del.mockReturnThis();
|
|
39
|
+
pipelineMock.zrem.mockReturnThis();
|
|
40
|
+
pipelineMock.exec.mockResolvedValue([]);
|
|
41
|
+
redisMock.pipeline.mockReturnValue(pipelineMock);
|
|
42
|
+
mockRedisCall(redisMock);
|
|
43
|
+
});
|
|
44
|
+
afterEach(() => {
|
|
45
|
+
recorder.reset();
|
|
46
|
+
jest.restoreAllMocks();
|
|
47
|
+
});
|
|
48
|
+
describe('SinglePostProcessor', () => {
|
|
49
|
+
class CapturingProcessor extends TestPostProcessor {
|
|
50
|
+
activeTraceId;
|
|
51
|
+
async processEvent(event, messageId) {
|
|
52
|
+
this.activeTraceId = trace.getActiveSpan()?.spanContext().traceId;
|
|
53
|
+
await super.processEvent(event, messageId);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const run = async (event) => {
|
|
57
|
+
const processor = new CapturingProcessor(redisMock, OPTIONS);
|
|
58
|
+
await processor['processEntries']([toEntry(event)]);
|
|
59
|
+
return processor;
|
|
60
|
+
};
|
|
61
|
+
it('should run the handler in a span that is a child of the trace carried by the event', async () => {
|
|
62
|
+
const event = makeEvent('evt-1', TRACEPARENT);
|
|
63
|
+
await run(event);
|
|
64
|
+
const span = recorder.span(`event ${event.type}`);
|
|
65
|
+
expect(span.spanContext().traceId).toBe(TRACE_ID);
|
|
66
|
+
expect(span.parentSpanContext?.spanId).toBe(PARENT_SPAN_ID);
|
|
67
|
+
expect(span.kind).toBe(SpanKind.CONSUMER);
|
|
68
|
+
expect(span.attributes).toMatchObject({
|
|
69
|
+
type: event.type,
|
|
70
|
+
emitter: event.emitter,
|
|
71
|
+
correlation_id: event.correlationId,
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
it('should make that span the active one while the handler runs', async () => {
|
|
75
|
+
const processor = await run(makeEvent('evt-1', TRACEPARENT));
|
|
76
|
+
expect(processor.activeTraceId).toBe(TRACE_ID);
|
|
77
|
+
});
|
|
78
|
+
it('should start a new trace for an event without a trace context', async () => {
|
|
79
|
+
const event = makeEvent('evt-1', '');
|
|
80
|
+
const processor = await run(event);
|
|
81
|
+
expect(processor.processedEvents).toHaveLength(1);
|
|
82
|
+
const span = recorder.span(`event ${event.type}`);
|
|
83
|
+
expect(span.parentSpanContext).toBeUndefined();
|
|
84
|
+
expect(span.spanContext().traceId).not.toBe(TRACE_ID);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('BatchPostProcessor', () => {
|
|
88
|
+
class CapturingBatchProcessor extends TestBatchPostProcessor {
|
|
89
|
+
activeSpanId;
|
|
90
|
+
async processEvents(events) {
|
|
91
|
+
this.activeSpanId = trace.getActiveSpan()?.spanContext().spanId;
|
|
92
|
+
await super.processEvents(events);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const runBatch = async (events) => {
|
|
96
|
+
const processor = new CapturingBatchProcessor(redisMock, OPTIONS);
|
|
97
|
+
await processor['processEntries'](events.map(toEntry));
|
|
98
|
+
return processor;
|
|
99
|
+
};
|
|
100
|
+
it('should open one span per message, each in the trace of its own message', async () => {
|
|
101
|
+
const first = makeEvent('evt-1', TRACEPARENT);
|
|
102
|
+
const second = makeEvent('evt-2', OTHER_TRACEPARENT);
|
|
103
|
+
await runBatch([first, second]);
|
|
104
|
+
const spans = recorder.spans(`event ${first.type}`);
|
|
105
|
+
expect(spans).toHaveLength(2);
|
|
106
|
+
const byTrace = new Map(spans.map((span) => [span.spanContext().traceId, span]));
|
|
107
|
+
expect(byTrace.get(TRACE_ID)?.parentSpanContext?.spanId).toBe(PARENT_SPAN_ID);
|
|
108
|
+
expect(byTrace.get(OTHER_TRACE_ID)?.parentSpanContext?.spanId).toBe(OTHER_PARENT_SPAN_ID);
|
|
109
|
+
expect(byTrace.get(TRACE_ID)?.attributes.correlation_id).toBe(first.correlationId);
|
|
110
|
+
expect(byTrace.get(OTHER_TRACE_ID)?.attributes.correlation_id).toBe(second.correlationId);
|
|
111
|
+
});
|
|
112
|
+
it('should link the batch span to every message span and keep it active during the handler', async () => {
|
|
113
|
+
const events = [makeEvent('evt-1', TRACEPARENT), makeEvent('evt-2', OTHER_TRACEPARENT)];
|
|
114
|
+
const processor = await runBatch(events);
|
|
115
|
+
const batch = recorder.span(`batch ${TestMessagingGroup.TEST_GROUP}`);
|
|
116
|
+
expect(processor.activeSpanId).toBe(batch.spanContext().spanId);
|
|
117
|
+
expect(batch.links).toHaveLength(2);
|
|
118
|
+
expect(batch.attributes['messaging.batch.message_count']).toBe(2);
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
//# sourceMappingURL=post-processor.trace.unit.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-processor.trace.unit.spec.js","sourceRoot":"","sources":["../../../../../src/test/core/processors/unit/post-processor.trace.unit.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ReadableSpan } from '@opentelemetry/sdk-trace-base';
|
|
2
|
+
export declare function createTraceRecorder(): {
|
|
3
|
+
start: () => void;
|
|
4
|
+
stop: () => Promise<void>;
|
|
5
|
+
reset: () => void;
|
|
6
|
+
spans: (name: string) => ReadableSpan[];
|
|
7
|
+
span: (name: string) => ReadableSpan;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=trace-recorder.helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-recorder.helper.d.ts","sourceRoot":"","sources":["../../../../src/test/utils/helpers/trace-recorder.helper.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAOlE,wBAAgB,mBAAmB;iBAKpB,IAAI;gBAGC,OAAO,CAAC,IAAI,CAAC;iBAMlB,IAAI;kBAGD,MAAM,KAAG,YAAY,EAAE;iBAExB,MAAM,KAAG,YAAY;EAQrC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { context, propagation, trace } from '@opentelemetry/api';
|
|
2
|
+
import { InMemorySpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
|
|
3
|
+
import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
|
|
4
|
+
export function createTraceRecorder() {
|
|
5
|
+
const exporter = new InMemorySpanExporter();
|
|
6
|
+
const provider = new NodeTracerProvider({ spanProcessors: [new SimpleSpanProcessor(exporter)] });
|
|
7
|
+
return {
|
|
8
|
+
start: () => {
|
|
9
|
+
provider.register();
|
|
10
|
+
},
|
|
11
|
+
stop: async () => {
|
|
12
|
+
await provider.shutdown();
|
|
13
|
+
trace.disable();
|
|
14
|
+
context.disable();
|
|
15
|
+
propagation.disable();
|
|
16
|
+
},
|
|
17
|
+
reset: () => {
|
|
18
|
+
exporter.reset();
|
|
19
|
+
},
|
|
20
|
+
spans: (name) => exporter.getFinishedSpans().filter((span) => span.name === name),
|
|
21
|
+
span: (name) => {
|
|
22
|
+
const found = exporter.getFinishedSpans().find((span) => span.name === name);
|
|
23
|
+
if (!found) {
|
|
24
|
+
throw new Error(`span ${name} not found`);
|
|
25
|
+
}
|
|
26
|
+
return found;
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=trace-recorder.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-recorder.helper.js","sourceRoot":"","sources":["../../../../src/test/utils/helpers/trace-recorder.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAE1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAMnE,MAAM,UAAU,mBAAmB;IACjC,MAAM,QAAQ,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,EAAE,cAAc,EAAE,CAAC,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;IAEjG,OAAO;QACL,KAAK,EAAE,GAAS,EAAE;YAChB,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,EAAE,KAAK,IAAmB,EAAE;YAC9B,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC1B,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;QACD,KAAK,EAAE,GAAS,EAAE;YAChB,QAAQ,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QACD,KAAK,EAAE,CAAC,IAAY,EAAkB,EAAE,CACtC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;QAClE,IAAI,EAAE,CAAC,IAAY,EAAgB,EAAE;YACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAC7E,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -12,4 +12,5 @@ export * from './helpers/push-db-event.helper.js';
|
|
|
12
12
|
export * from './classes/test-job-outbox-success.post-processor.class.js';
|
|
13
13
|
export * from './classes/test-job-outbox-failed.post-processor.class.js';
|
|
14
14
|
export * from './factories/job-outbox-event.factory.js';
|
|
15
|
+
export * from './helpers/trace-recorder.helper.js';
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/test/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,mCAAmC,CAAC;AAClD,cAAc,2DAA2D,CAAC;AAC1E,cAAc,0DAA0D,CAAC;AACzE,cAAc,yCAAyC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/test/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,mCAAmC,CAAC;AAClD,cAAc,2DAA2D,CAAC;AAC1E,cAAc,0DAA0D,CAAC;AACzE,cAAc,yCAAyC,CAAC;AACxD,cAAc,oCAAoC,CAAC"}
|
package/dist/test/utils/index.js
CHANGED
|
@@ -12,4 +12,5 @@ export * from './helpers/push-db-event.helper.js';
|
|
|
12
12
|
export * from './classes/test-job-outbox-success.post-processor.class.js';
|
|
13
13
|
export * from './classes/test-job-outbox-failed.post-processor.class.js';
|
|
14
14
|
export * from './factories/job-outbox-event.factory.js';
|
|
15
|
+
export * from './helpers/trace-recorder.helper.js';
|
|
15
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,mCAAmC,CAAC;AAClD,cAAc,2DAA2D,CAAC;AAC1E,cAAc,0DAA0D,CAAC;AACzE,cAAc,yCAAyC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,wCAAwC,CAAC;AACvD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,mCAAmC,CAAC;AAClD,cAAc,2DAA2D,CAAC;AAC1E,cAAc,0DAA0D,CAAC;AACzE,cAAc,yCAAyC,CAAC;AACxD,cAAc,oCAAoC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@volontariapp/post-processors",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0-snap-1ed0a4f",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public",
|
|
6
6
|
"provenance": true
|
|
@@ -37,11 +37,11 @@
|
|
|
37
37
|
"test:int:watch": "INTEGRATION=true node --experimental-vm-modules $(yarn bin jest) --watch"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@volontariapp/database": "3.
|
|
40
|
+
"@volontariapp/database": "3.8.0-snap-1ed0a4f",
|
|
41
41
|
"@volontariapp/health-check": "1.0.7",
|
|
42
42
|
"@volontariapp/logger": "0.3.0",
|
|
43
43
|
"@volontariapp/messaging": "2.25.0",
|
|
44
|
-
"@volontariapp/outbox": "0.10.
|
|
44
|
+
"@volontariapp/outbox": "0.10.2-snap-1ed0a4f",
|
|
45
45
|
"@volontariapp/shared": "0.14.0"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
@@ -51,6 +51,9 @@
|
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@jest/globals": "^30.3.0",
|
|
53
53
|
"@nestjs/common": "^11.0.0",
|
|
54
|
+
"@opentelemetry/api": "^1.9.0",
|
|
55
|
+
"@opentelemetry/sdk-trace-base": "^2.7.1",
|
|
56
|
+
"@opentelemetry/sdk-trace-node": "^2.7.1",
|
|
54
57
|
"@types/jest": "^30.0.0",
|
|
55
58
|
"@types/node": "^24.0.0",
|
|
56
59
|
"@volontariapp/contracts": "4.3.14",
|