@message-queue-toolkit/core 16.0.0 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/events/DomainEventEmitter.d.ts +20 -11
- package/dist/lib/events/DomainEventEmitter.js +78 -54
- package/dist/lib/events/DomainEventEmitter.js.map +1 -1
- package/dist/lib/events/fakes/FakeListener.d.ts +4 -2
- package/dist/lib/events/fakes/FakeListener.js +8 -2
- package/dist/lib/events/fakes/FakeListener.js.map +1 -1
- package/package.json +5 -5
|
@@ -1,18 +1,26 @@
|
|
|
1
|
+
import { type ErrorReporter, type TransactionObservabilityManager } from '@lokalise/node-core';
|
|
1
2
|
import type { MetadataFiller } from '../messages/MetadataFiller';
|
|
2
3
|
import type { HandlerSpy, HandlerSpyParams, PublicHandlerSpy } from '../queues/HandlerSpy';
|
|
3
4
|
import type { ConsumerMessageMetadataType } from '@message-queue-toolkit/schemas';
|
|
5
|
+
import type { Logger } from '../types/MessageQueueTypes';
|
|
4
6
|
import type { EventRegistry } from './EventRegistry';
|
|
5
7
|
import type { AnyEventHandler, CommonEventDefinition, CommonEventDefinitionConsumerSchemaType, CommonEventDefinitionPublisherSchemaType, EventTypeNames, SingleEventHandler } from './eventTypes';
|
|
8
|
+
export type DomainEventEmitterDependencies<SupportedEvents extends CommonEventDefinition[]> = {
|
|
9
|
+
eventRegistry: EventRegistry<SupportedEvents>;
|
|
10
|
+
metadataFiller: MetadataFiller;
|
|
11
|
+
logger: Logger;
|
|
12
|
+
errorReporter?: ErrorReporter;
|
|
13
|
+
transactionObservabilityManager?: TransactionObservabilityManager;
|
|
14
|
+
};
|
|
6
15
|
export declare class DomainEventEmitter<SupportedEvents extends CommonEventDefinition[]> {
|
|
7
16
|
private readonly eventRegistry;
|
|
8
|
-
private readonly eventHandlerMap;
|
|
9
|
-
private readonly anyHandlers;
|
|
10
17
|
private readonly metadataFiller;
|
|
11
|
-
private
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
18
|
+
private readonly logger;
|
|
19
|
+
private readonly errorReporter?;
|
|
20
|
+
private readonly transactionObservabilityManager?;
|
|
21
|
+
private readonly _handlerSpy?;
|
|
22
|
+
private readonly eventHandlerMap;
|
|
23
|
+
constructor(deps: DomainEventEmitterDependencies<SupportedEvents>, options?: {
|
|
16
24
|
handlerSpy?: HandlerSpy<object> | HandlerSpyParams | boolean;
|
|
17
25
|
});
|
|
18
26
|
get handlerSpy(): PublicHandlerSpy<CommonEventDefinitionPublisherSchemaType<SupportedEvents[number]>>;
|
|
@@ -20,14 +28,15 @@ export declare class DomainEventEmitter<SupportedEvents extends CommonEventDefin
|
|
|
20
28
|
/**
|
|
21
29
|
* Register handler for a specific event
|
|
22
30
|
*/
|
|
23
|
-
on<EventTypeName extends EventTypeNames<SupportedEvents[number]>>(eventTypeName: EventTypeName, handler: SingleEventHandler<SupportedEvents, EventTypeName
|
|
31
|
+
on<EventTypeName extends EventTypeNames<SupportedEvents[number]>>(eventTypeName: EventTypeName, handler: SingleEventHandler<SupportedEvents, EventTypeName>, isBackgroundHandler?: boolean): void;
|
|
24
32
|
/**
|
|
25
33
|
* Register handler for multiple events
|
|
26
34
|
*/
|
|
27
|
-
onMany<EventTypeName extends EventTypeNames<SupportedEvents[number]>>(eventTypeNames: EventTypeName[], handler: SingleEventHandler<SupportedEvents, EventTypeName
|
|
35
|
+
onMany<EventTypeName extends EventTypeNames<SupportedEvents[number]>>(eventTypeNames: EventTypeName[], handler: SingleEventHandler<SupportedEvents, EventTypeName>, isBackgroundHandler?: boolean): void;
|
|
28
36
|
/**
|
|
29
37
|
* Register handler for all events supported by the emitter
|
|
30
38
|
*/
|
|
31
|
-
onAny(handler: AnyEventHandler<SupportedEvents
|
|
32
|
-
private
|
|
39
|
+
onAny(handler: AnyEventHandler<SupportedEvents>, isBackgroundHandler?: boolean): void;
|
|
40
|
+
private handleEvent;
|
|
41
|
+
private buildTransactionKey;
|
|
33
42
|
}
|
|
@@ -3,17 +3,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DomainEventEmitter = void 0;
|
|
4
4
|
const node_core_1 = require("@lokalise/node-core");
|
|
5
5
|
const HandlerSpy_1 = require("../queues/HandlerSpy");
|
|
6
|
+
const node_crypto_1 = require("node:crypto");
|
|
6
7
|
class DomainEventEmitter {
|
|
7
8
|
eventRegistry;
|
|
8
|
-
eventHandlerMap = {};
|
|
9
|
-
anyHandlers = [];
|
|
10
9
|
metadataFiller;
|
|
10
|
+
logger;
|
|
11
|
+
errorReporter;
|
|
12
|
+
transactionObservabilityManager;
|
|
11
13
|
_handlerSpy;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
this.
|
|
14
|
+
eventHandlerMap;
|
|
15
|
+
constructor(deps, options = {}) {
|
|
16
|
+
this.eventRegistry = deps.eventRegistry;
|
|
17
|
+
this.metadataFiller = deps.metadataFiller;
|
|
18
|
+
this.logger = deps.logger;
|
|
19
|
+
this.errorReporter = deps.errorReporter;
|
|
20
|
+
this.transactionObservabilityManager = deps.transactionObservabilityManager;
|
|
15
21
|
this._handlerSpy =
|
|
16
22
|
(0, HandlerSpy_1.resolveHandlerSpy)(options);
|
|
23
|
+
this.eventHandlerMap = {};
|
|
17
24
|
}
|
|
18
25
|
get handlerSpy() {
|
|
19
26
|
if (!this._handlerSpy) {
|
|
@@ -22,26 +29,6 @@ class DomainEventEmitter {
|
|
|
22
29
|
return this._handlerSpy;
|
|
23
30
|
}
|
|
24
31
|
async emit(supportedEvent, data, precedingMessageMetadata) {
|
|
25
|
-
if (!data.timestamp) {
|
|
26
|
-
data.timestamp = this.metadataFiller.produceTimestamp();
|
|
27
|
-
}
|
|
28
|
-
if (!data.id) {
|
|
29
|
-
data.id = this.metadataFiller.produceId();
|
|
30
|
-
}
|
|
31
|
-
if (!data.metadata) {
|
|
32
|
-
data.metadata = precedingMessageMetadata
|
|
33
|
-
? // @ts-ignore
|
|
34
|
-
this.metadataFiller.produceMetadata(data, supportedEvent, precedingMessageMetadata)
|
|
35
|
-
: {
|
|
36
|
-
correlationId: this.metadataFiller.produceId(),
|
|
37
|
-
schemaVersion: supportedEvent.schemaVersion,
|
|
38
|
-
producedBy: this.metadataFiller.produceCurrentServiceId(),
|
|
39
|
-
originatedFrom: this.metadataFiller.produceCurrentServiceId(),
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
if (!data.metadata.correlationId) {
|
|
43
|
-
data.metadata.correlationId = this.metadataFiller.produceId();
|
|
44
|
-
}
|
|
45
32
|
const eventTypeName = supportedEvent.publisherSchema.shape.type.value;
|
|
46
33
|
if (!this.eventRegistry.isSupportedEvent(eventTypeName)) {
|
|
47
34
|
throw new node_core_1.InternalError({
|
|
@@ -49,32 +36,25 @@ class DomainEventEmitter {
|
|
|
49
36
|
message: `Unknown event ${eventTypeName}`,
|
|
50
37
|
});
|
|
51
38
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if (!
|
|
39
|
+
if (!data.timestamp)
|
|
40
|
+
data.timestamp = this.metadataFiller.produceTimestamp();
|
|
41
|
+
if (!data.id)
|
|
42
|
+
data.id = this.metadataFiller.produceId();
|
|
43
|
+
if (!data.metadata) {
|
|
44
|
+
data.metadata = this.metadataFiller.produceMetadata(
|
|
55
45
|
// @ts-ignore
|
|
56
|
-
|
|
46
|
+
data, supportedEvent, precedingMessageMetadata ?? {});
|
|
57
47
|
}
|
|
48
|
+
if (!data.metadata.correlationId)
|
|
49
|
+
data.metadata.correlationId = this.metadataFiller.produceId();
|
|
58
50
|
const validatedEvent = this.eventRegistry
|
|
59
51
|
.getEventDefinitionByTypeName(eventTypeName)
|
|
60
|
-
.publisherSchema.parse({
|
|
61
|
-
|
|
62
|
-
...data,
|
|
63
|
-
});
|
|
64
|
-
if (eventHandlers) {
|
|
65
|
-
for (const handler of eventHandlers) {
|
|
66
|
-
await handler.handleEvent(validatedEvent);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
for (const handler of this.anyHandlers) {
|
|
70
|
-
await handler.handleEvent(validatedEvent);
|
|
71
|
-
}
|
|
52
|
+
.publisherSchema.parse({ type: eventTypeName, ...data });
|
|
53
|
+
await this.handleEvent(validatedEvent);
|
|
72
54
|
if (this._handlerSpy) {
|
|
73
55
|
this._handlerSpy.addProcessedMessage({
|
|
74
56
|
// @ts-ignore
|
|
75
|
-
message:
|
|
76
|
-
...validatedEvent,
|
|
77
|
-
},
|
|
57
|
+
message: validatedEvent,
|
|
78
58
|
processingResult: 'consumed',
|
|
79
59
|
}, validatedEvent.id);
|
|
80
60
|
}
|
|
@@ -84,28 +64,72 @@ class DomainEventEmitter {
|
|
|
84
64
|
/**
|
|
85
65
|
* Register handler for a specific event
|
|
86
66
|
*/
|
|
87
|
-
on(eventTypeName, handler) {
|
|
88
|
-
this.
|
|
67
|
+
on(eventTypeName, handler, isBackgroundHandler = false) {
|
|
68
|
+
if (!this.eventHandlerMap[eventTypeName]) {
|
|
69
|
+
this.eventHandlerMap[eventTypeName] = { foreground: [], background: [] };
|
|
70
|
+
}
|
|
71
|
+
if (isBackgroundHandler)
|
|
72
|
+
this.eventHandlerMap[eventTypeName].background.push(handler);
|
|
73
|
+
else
|
|
74
|
+
this.eventHandlerMap[eventTypeName].foreground.push(handler);
|
|
89
75
|
}
|
|
90
76
|
/**
|
|
91
77
|
* Register handler for multiple events
|
|
92
78
|
*/
|
|
93
|
-
onMany(eventTypeNames, handler) {
|
|
79
|
+
onMany(eventTypeNames, handler, isBackgroundHandler = false) {
|
|
94
80
|
for (const eventTypeName of eventTypeNames) {
|
|
95
|
-
this.on(eventTypeName, handler);
|
|
81
|
+
this.on(eventTypeName, handler, isBackgroundHandler);
|
|
96
82
|
}
|
|
97
83
|
}
|
|
98
84
|
/**
|
|
99
85
|
* Register handler for all events supported by the emitter
|
|
100
86
|
*/
|
|
101
|
-
onAny(handler) {
|
|
102
|
-
this.
|
|
87
|
+
onAny(handler, isBackgroundHandler = false) {
|
|
88
|
+
for (const supportedEvent of this.eventRegistry.supportedEvents) {
|
|
89
|
+
this.on(supportedEvent.consumerSchema.shape.type.value, handler, isBackgroundHandler);
|
|
90
|
+
}
|
|
103
91
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
92
|
+
async handleEvent(event) {
|
|
93
|
+
const eventHandlers = this.eventHandlerMap[event.type] ?? {
|
|
94
|
+
foreground: [],
|
|
95
|
+
background: [],
|
|
96
|
+
};
|
|
97
|
+
for (const handler of eventHandlers.foreground) {
|
|
98
|
+
const transactionId = (0, node_crypto_1.randomUUID)();
|
|
99
|
+
let isSuccessfull = false;
|
|
100
|
+
try {
|
|
101
|
+
this.transactionObservabilityManager?.startWithGroup(this.buildTransactionKey(event, handler, false), transactionId, event.type);
|
|
102
|
+
await handler.handleEvent(event);
|
|
103
|
+
isSuccessfull = true;
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
this.transactionObservabilityManager?.stop(transactionId, isSuccessfull);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
for (const handler of eventHandlers.background) {
|
|
110
|
+
const transactionId = (0, node_crypto_1.randomUUID)();
|
|
111
|
+
this.transactionObservabilityManager?.startWithGroup(this.buildTransactionKey(event, handler, true), transactionId, event.type);
|
|
112
|
+
Promise.resolve(handler.handleEvent(event))
|
|
113
|
+
.then(() => {
|
|
114
|
+
this.transactionObservabilityManager?.stop(transactionId, true);
|
|
115
|
+
})
|
|
116
|
+
.catch((error) => {
|
|
117
|
+
this.transactionObservabilityManager?.stop(transactionId, false);
|
|
118
|
+
const context = {
|
|
119
|
+
event: JSON.stringify(event),
|
|
120
|
+
eventHandlerId: handler.eventHandlerId,
|
|
121
|
+
'x-request-id': event.metadata?.correlationId,
|
|
122
|
+
};
|
|
123
|
+
this.logger.error({
|
|
124
|
+
...(0, node_core_1.resolveGlobalErrorLogObject)(error),
|
|
125
|
+
...context,
|
|
126
|
+
});
|
|
127
|
+
this.errorReporter?.report({ error: error, context });
|
|
128
|
+
});
|
|
107
129
|
}
|
|
108
|
-
|
|
130
|
+
}
|
|
131
|
+
buildTransactionKey(event, handler, isBackgroundHandler) {
|
|
132
|
+
return `${isBackgroundHandler ? 'bg' : 'fg'}_event_listener:${event.type}:${handler.eventHandlerId}`;
|
|
109
133
|
}
|
|
110
134
|
}
|
|
111
135
|
exports.DomainEventEmitter = DomainEventEmitter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DomainEventEmitter.js","sourceRoot":"","sources":["../../../lib/events/DomainEventEmitter.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"DomainEventEmitter.js","sourceRoot":"","sources":["../../../lib/events/DomainEventEmitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { AnyEventHandler, CommonEventDefinition } from '../eventTypes';
|
|
2
2
|
export declare class FakeListener<SupportedEvents extends CommonEventDefinition[]> implements AnyEventHandler<SupportedEvents> {
|
|
3
|
+
readonly eventHandlerId: string;
|
|
3
4
|
receivedEvents: SupportedEvents[number]['publisherSchema']['_output'][];
|
|
4
|
-
|
|
5
|
-
|
|
5
|
+
private readonly delay;
|
|
6
|
+
constructor(delayMs?: number);
|
|
7
|
+
handleEvent(event: SupportedEvents[number]['publisherSchema']['_output']): Promise<void>;
|
|
6
8
|
}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.FakeListener = void 0;
|
|
4
|
+
const promises_1 = require("node:timers/promises");
|
|
4
5
|
class FakeListener {
|
|
6
|
+
eventHandlerId = this.constructor.name;
|
|
5
7
|
receivedEvents = [];
|
|
6
|
-
|
|
8
|
+
delay;
|
|
9
|
+
constructor(delayMs) {
|
|
7
10
|
this.receivedEvents = [];
|
|
11
|
+
this.delay = delayMs ?? 0;
|
|
8
12
|
}
|
|
9
|
-
handleEvent(event) {
|
|
13
|
+
async handleEvent(event) {
|
|
14
|
+
if (this.delay > 0)
|
|
15
|
+
await (0, promises_1.setTimeout)(this.delay);
|
|
10
16
|
this.receivedEvents.push(event);
|
|
11
17
|
}
|
|
12
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FakeListener.js","sourceRoot":"","sources":["../../../../lib/events/fakes/FakeListener.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"FakeListener.js","sourceRoot":"","sources":["../../../../lib/events/fakes/FakeListener.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AAGjD,MAAa,YAAY;IAGd,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA;IAExC,cAAc,GAA4D,EAAE,CAAA;IAClE,KAAK,CAAQ;IAE9B,YAAY,OAAgB;QAC1B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAA;QACxB,IAAI,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAA4D;QAC5E,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC;YAAE,MAAM,IAAA,qBAAU,EAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;CACF;AAjBD,oCAiBC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@message-queue-toolkit/core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "17.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Useful utilities, interfaces and base classes for message queue handling. Supports AMQP and SQS with a common abstraction on top currently",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"prepublishOnly": "npm run build:release"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@lokalise/node-core": "^
|
|
29
|
-
"@message-queue-toolkit/schemas": "^
|
|
28
|
+
"@lokalise/node-core": "^12.1.0",
|
|
29
|
+
"@message-queue-toolkit/schemas": "^4.0.0",
|
|
30
30
|
"fast-equals": "^5.0.1",
|
|
31
31
|
"json-stream-stringify": "^3.1.4",
|
|
32
32
|
"tmp": "^0.2.3",
|
|
@@ -36,10 +36,10 @@
|
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@biomejs/biome": "1.8.3",
|
|
38
38
|
"@kibertoad/biome-config": "^1.2.1",
|
|
39
|
-
"@types/node": "^
|
|
39
|
+
"@types/node": "^22.0.0",
|
|
40
40
|
"@types/tmp": "^0.2.6",
|
|
41
41
|
"@vitest/coverage-v8": "^2.0.4",
|
|
42
|
-
"awilix": "^
|
|
42
|
+
"awilix": "^11.0.0",
|
|
43
43
|
"awilix-manager": "^5.4.0",
|
|
44
44
|
"del-cli": "^5.1.0",
|
|
45
45
|
"typescript": "^5.5.4",
|