@message-queue-toolkit/core 16.0.1 → 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.
@@ -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 _handlerSpy;
12
- constructor({ eventRegistry, metadataFiller, }: {
13
- eventRegistry: EventRegistry<SupportedEvents>;
14
- metadataFiller: MetadataFiller;
15
- }, options?: {
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>): void;
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>): void;
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>): void;
32
- private addOnHandler;
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
- constructor({ eventRegistry, metadataFiller, }, options = {}) {
13
- this.eventRegistry = eventRegistry;
14
- this.metadataFiller = metadataFiller;
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,20 +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 = this.metadataFiller.produceMetadata(
33
- // @ts-ignore
34
- data, supportedEvent, precedingMessageMetadata ?? {});
35
- }
36
- if (!data.metadata.correlationId) {
37
- data.metadata.correlationId = this.metadataFiller.produceId();
38
- }
39
32
  const eventTypeName = supportedEvent.publisherSchema.shape.type.value;
40
33
  if (!this.eventRegistry.isSupportedEvent(eventTypeName)) {
41
34
  throw new node_core_1.InternalError({
@@ -43,32 +36,25 @@ class DomainEventEmitter {
43
36
  message: `Unknown event ${eventTypeName}`,
44
37
  });
45
38
  }
46
- const eventHandlers = this.eventHandlerMap[eventTypeName];
47
- // No relevant handlers are registered, we can stop processing
48
- if (!eventHandlers && this.anyHandlers.length === 0) {
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(
49
45
  // @ts-ignore
50
- return data;
46
+ data, supportedEvent, precedingMessageMetadata ?? {});
51
47
  }
48
+ if (!data.metadata.correlationId)
49
+ data.metadata.correlationId = this.metadataFiller.produceId();
52
50
  const validatedEvent = this.eventRegistry
53
51
  .getEventDefinitionByTypeName(eventTypeName)
54
- .publisherSchema.parse({
55
- type: eventTypeName,
56
- ...data,
57
- });
58
- if (eventHandlers) {
59
- for (const handler of eventHandlers) {
60
- await handler.handleEvent(validatedEvent);
61
- }
62
- }
63
- for (const handler of this.anyHandlers) {
64
- await handler.handleEvent(validatedEvent);
65
- }
52
+ .publisherSchema.parse({ type: eventTypeName, ...data });
53
+ await this.handleEvent(validatedEvent);
66
54
  if (this._handlerSpy) {
67
55
  this._handlerSpy.addProcessedMessage({
68
56
  // @ts-ignore
69
- message: {
70
- ...validatedEvent,
71
- },
57
+ message: validatedEvent,
72
58
  processingResult: 'consumed',
73
59
  }, validatedEvent.id);
74
60
  }
@@ -78,28 +64,72 @@ class DomainEventEmitter {
78
64
  /**
79
65
  * Register handler for a specific event
80
66
  */
81
- on(eventTypeName, handler) {
82
- this.addOnHandler(eventTypeName, handler);
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);
83
75
  }
84
76
  /**
85
77
  * Register handler for multiple events
86
78
  */
87
- onMany(eventTypeNames, handler) {
79
+ onMany(eventTypeNames, handler, isBackgroundHandler = false) {
88
80
  for (const eventTypeName of eventTypeNames) {
89
- this.on(eventTypeName, handler);
81
+ this.on(eventTypeName, handler, isBackgroundHandler);
90
82
  }
91
83
  }
92
84
  /**
93
85
  * Register handler for all events supported by the emitter
94
86
  */
95
- onAny(handler) {
96
- this.anyHandlers.push(handler);
87
+ onAny(handler, isBackgroundHandler = false) {
88
+ for (const supportedEvent of this.eventRegistry.supportedEvents) {
89
+ this.on(supportedEvent.consumerSchema.shape.type.value, handler, isBackgroundHandler);
90
+ }
97
91
  }
98
- addOnHandler(eventTypeName, handler) {
99
- if (!this.eventHandlerMap[eventTypeName]) {
100
- this.eventHandlerMap[eventTypeName] = [];
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
+ }
101
108
  }
102
- this.eventHandlerMap[eventTypeName].push(handler);
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
+ });
129
+ }
130
+ }
131
+ buildTransactionKey(event, handler, isBackgroundHandler) {
132
+ return `${isBackgroundHandler ? 'bg' : 'fg'}_event_listener:${event.type}:${handler.eventHandlerId}`;
103
133
  }
104
134
  }
105
135
  exports.DomainEventEmitter = DomainEventEmitter;
@@ -1 +1 @@
1
- {"version":3,"file":"DomainEventEmitter.js","sourceRoot":"","sources":["../../../lib/events/DomainEventEmitter.ts"],"names":[],"mappings":"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"}
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
- constructor(_supportedEvents: SupportedEvents);
5
- handleEvent(event: SupportedEvents[number]['publisherSchema']['_output']): void | Promise<void>;
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
- constructor(_supportedEvents) {
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":";;;AAEA,MAAa,YAAY;IAGhB,cAAc,GAA4D,EAAE,CAAA;IAEnF,YAAY,gBAAiC;QAC3C,IAAI,CAAC,cAAc,GAAG,EAAE,CAAA;IAC1B,CAAC;IAED,WAAW,CAAC,KAA4D;QACtE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;CACF;AAZD,oCAYC"}
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": "16.0.1",
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": "^11.2.0",
29
- "@message-queue-toolkit/schemas": "^3.0.0",
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": "^20.12.8",
39
+ "@types/node": "^22.0.0",
40
40
  "@types/tmp": "^0.2.6",
41
41
  "@vitest/coverage-v8": "^2.0.4",
42
- "awilix": "^10.0.2",
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",