@schorts/shared-kernel 5.2.5 → 5.3.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.
Files changed (36) hide show
  1. package/README.md +2 -1
  2. package/dist/cjs/event-bus/dead-letter-store.js +3 -0
  3. package/dist/cjs/event-bus/dead-letter-store.js.map +1 -0
  4. package/dist/cjs/event-bus/in-memory/async-in-memory-event-bus.js +13 -4
  5. package/dist/cjs/event-bus/in-memory/async-in-memory-event-bus.js.map +1 -1
  6. package/dist/cjs/event-bus/in-memory/in-memory-dead-letter-store.js +17 -0
  7. package/dist/cjs/event-bus/in-memory/in-memory-dead-letter-store.js.map +1 -0
  8. package/dist/cjs/event-bus/in-memory/index.js +3 -1
  9. package/dist/cjs/event-bus/in-memory/index.js.map +1 -1
  10. package/dist/cjs/event-bus/index.js.map +1 -1
  11. package/dist/cjs/logger/console-logger.js +23 -1
  12. package/dist/cjs/logger/console-logger.js.map +1 -1
  13. package/dist/esm/event-bus/dead-letter-store.js +3 -0
  14. package/dist/esm/event-bus/dead-letter-store.js.map +1 -0
  15. package/dist/esm/event-bus/in-memory/async-in-memory-event-bus.js +13 -4
  16. package/dist/esm/event-bus/in-memory/async-in-memory-event-bus.js.map +1 -1
  17. package/dist/esm/event-bus/in-memory/in-memory-dead-letter-store.js +17 -0
  18. package/dist/esm/event-bus/in-memory/in-memory-dead-letter-store.js.map +1 -0
  19. package/dist/esm/event-bus/in-memory/index.js +3 -1
  20. package/dist/esm/event-bus/in-memory/index.js.map +1 -1
  21. package/dist/esm/event-bus/index.js.map +1 -1
  22. package/dist/esm/logger/console-logger.js +23 -1
  23. package/dist/esm/logger/console-logger.js.map +1 -1
  24. package/dist/types/event-bus/dead-letter-store.d.ts +10 -0
  25. package/dist/types/event-bus/dead-letter-store.d.ts.map +1 -0
  26. package/dist/types/event-bus/in-memory/async-in-memory-event-bus.d.ts +3 -1
  27. package/dist/types/event-bus/in-memory/async-in-memory-event-bus.d.ts.map +1 -1
  28. package/dist/types/event-bus/in-memory/in-memory-dead-letter-store.d.ts +12 -0
  29. package/dist/types/event-bus/in-memory/in-memory-dead-letter-store.d.ts.map +1 -0
  30. package/dist/types/event-bus/in-memory/index.d.ts +1 -0
  31. package/dist/types/event-bus/in-memory/index.d.ts.map +1 -1
  32. package/dist/types/event-bus/index.d.ts +1 -0
  33. package/dist/types/event-bus/index.d.ts.map +1 -1
  34. package/dist/types/logger/console-logger.d.ts +2 -0
  35. package/dist/types/logger/console-logger.d.ts.map +1 -1
  36. package/package.json +1 -1
package/README.md CHANGED
@@ -39,6 +39,7 @@ npm install @schorts/shared-kernel --save
39
39
  - **DomainEventRegistry:** Centralized registry for hydrating polymorphic domain events from serialized primitives.
40
40
  - **EventSubscriber:** Interface for subscribing to specific event types with clean, type-safe handlers.
41
41
  - **InMemoryEventStore:** Simple event store for tracking and replaying events, with retry metadata and bounded requeue support.
42
+ - **DeadLetterStore / InMemoryDeadLetterStore:** Dedicated store for capturing events that failed after max retries. Provides inspection (all()), clearing, and replay support.
42
43
 
43
44
  ### 🧭 CQRS (Command Query Responsibility Segregation)
44
45
  - **Command / CommandHandler:** Define write-side operations that encapsulate intent and state changes. Handlers execute domain logic for commands like CreateUserCommand or SendReportCommand.
@@ -105,7 +106,7 @@ Translation keys are centralized in registries for discoverability and tooling,
105
106
  ### 📣 Logger
106
107
 
107
108
  - **Logger:** Abstract base class for structured, context-aware logging across environments. Supports scoped logging via child() method, enabling per-module or per-request diagnostics. Each method (log, info, debug, warn, error) accepts optional context metadata and variadic arguments for flexible message composition.
108
- - **ConsoleLogger:** Concrete implementation of Logger that writes to native console methods (console.log, console.info, etc.). Automatically injects timestamps and supports scoped logging via child().
109
+ - **ConsoleLogger:** Concrete implementation with log levels (LOG, INFO, DEBUG, WARN, ERROR) and contextual metadata injection (e.g., timestamps, custom context). Provides consistent filtering and structured output across environments.
109
110
  - **ScopedLogger:** Internal utility class returned by Logger.child(). Merges base context with per-call context, enabling nested, composable logging scopes.
110
111
 
111
112
  ### 📈 Telemetry
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=dead-letter-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dead-letter-store.js","sourceRoot":"","sources":["../../../src/event-bus/dead-letter-store.ts"],"names":[],"mappings":""}
@@ -7,9 +7,11 @@ class AsyncInMemoryEventBus {
7
7
  subscribers = new Map();
8
8
  store;
9
9
  maxRetries;
10
- constructor(store = new in_memory_event_store_1.InMemoryEventStore(), maxRetries = 3) {
10
+ deadLetterStore;
11
+ constructor(store = new in_memory_event_store_1.InMemoryEventStore(), maxRetries = 3, deadLetterStore) {
11
12
  this.store = store;
12
13
  this.maxRetries = maxRetries;
14
+ this.deadLetterStore = deadLetterStore;
13
15
  }
14
16
  subscribe(eventName, subscriber) {
15
17
  if (!this.subscribers.has(eventName)) {
@@ -37,12 +39,19 @@ class AsyncInMemoryEventBus {
37
39
  this.store.requeue(updatedPrimitives);
38
40
  this.publish(domain_events_1.DomainEventRegistry.create(updatedPrimitives));
39
41
  }
40
- else {
41
- console.warn(`Event ${event.id} exceeded max retries (${this.maxRetries}). Dropping.`);
42
+ else if (this.deadLetterStore) {
43
+ const reason = `Exceeded max retries (${this.maxRetries})`;
44
+ this.deadLetterStore.add(primitives, reason);
45
+ console.warn(`Event ${event.id} moved to DLQ: ${reason}`);
42
46
  }
43
47
  };
44
48
  for (const sub of subs) {
45
- await sub.handle(event);
49
+ try {
50
+ await sub.handle(event);
51
+ }
52
+ catch (err) {
53
+ event.requeue?.();
54
+ }
46
55
  }
47
56
  }
48
57
  async replay() {
@@ -1 +1 @@
1
- {"version":3,"file":"async-in-memory-event-bus.js","sourceRoot":"","sources":["../../../../src/event-bus/in-memory/async-in-memory-event-bus.ts"],"names":[],"mappings":";;;AAAA,uDAAuE;AACvE,mEAA6D;AAK7D,MAAa,qBAAqB;IACf,WAAW,GAAG,IAAI,GAAG,EAA6B,CAAC;IACnD,KAAK,CAAa;IAClB,UAAU,CAAS;IAEpC,YAAY,QAAoB,IAAI,0CAAkB,EAAE,EAAE,UAAU,GAAG,CAAC;QACtE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,SAAS,CAA4B,SAAiB,EAAE,UAAkC;QACxF,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,OAAO,CAA4B,KAAY;QACnD,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QAExC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE5B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,KAAkB;QACvC,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QAExC,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9C,KAAK,CAAC,OAAO,GAAG,GAAG,EAAE;YACnB,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;YAEd,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACzC,MAAM,iBAAiB,GAAG;oBACxB,GAAG,UAAU;oBACb,IAAI,EAAE,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE;iBAC9D,CAAC;gBAEF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,mCAAmB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE,0BAA0B,IAAI,CAAC,UAAU,cAAc,CAAC,CAAC;YACzF,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAEhC,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,mCAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;CACF;AA7DD,sDA6DC"}
1
+ {"version":3,"file":"async-in-memory-event-bus.js","sourceRoot":"","sources":["../../../../src/event-bus/in-memory/async-in-memory-event-bus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InMemoryDeadLetterStore = void 0;
4
+ class InMemoryDeadLetterStore {
5
+ failed = [];
6
+ add(primitives, reason) {
7
+ this.failed.push({ primitives, reason });
8
+ }
9
+ all() {
10
+ return [...this.failed];
11
+ }
12
+ clear() {
13
+ this.failed.length = 0;
14
+ }
15
+ }
16
+ exports.InMemoryDeadLetterStore = InMemoryDeadLetterStore;
17
+ //# sourceMappingURL=in-memory-dead-letter-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-dead-letter-store.js","sourceRoot":"","sources":["../../../../src/event-bus/in-memory/in-memory-dead-letter-store.ts"],"names":[],"mappings":";;;AAGA,MAAa,uBAAuB;IACjB,MAAM,GAAiE,EAAE,CAAC;IAE3F,GAAG,CAAC,UAAiC,EAAE,MAAc;QACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,GAAG;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACzB,CAAC;CACF;AAdD,0DAcC"}
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AsyncInMemoryEventBus = exports.InMemoryEventStore = void 0;
3
+ exports.InMemoryDeadLetterStore = exports.AsyncInMemoryEventBus = exports.InMemoryEventStore = void 0;
4
4
  var in_memory_event_store_1 = require("./in-memory-event-store");
5
5
  Object.defineProperty(exports, "InMemoryEventStore", { enumerable: true, get: function () { return in_memory_event_store_1.InMemoryEventStore; } });
6
6
  var async_in_memory_event_bus_1 = require("./async-in-memory-event-bus");
7
7
  Object.defineProperty(exports, "AsyncInMemoryEventBus", { enumerable: true, get: function () { return async_in_memory_event_bus_1.AsyncInMemoryEventBus; } });
8
+ var in_memory_dead_letter_store_1 = require("./in-memory-dead-letter-store");
9
+ Object.defineProperty(exports, "InMemoryDeadLetterStore", { enumerable: true, get: function () { return in_memory_dead_letter_store_1.InMemoryDeadLetterStore; } });
8
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/event-bus/in-memory/index.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAApD,2HAAA,kBAAkB,OAAA;AAC3B,yEAAmE;AAA1D,kIAAA,qBAAqB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/event-bus/in-memory/index.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAApD,2HAAA,kBAAkB,OAAA;AAC3B,yEAAmE;AAA1D,kIAAA,qBAAqB,OAAA;AAC9B,6EAAwE;AAA/D,sIAAA,uBAAuB,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/event-bus/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/event-bus/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAIA,8CAA4B"}
@@ -2,25 +2,47 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ConsoleLogger = void 0;
4
4
  const _1 = require("./");
5
+ const LOG_LEVELS = {
6
+ ERROR: 5,
7
+ WARN: 4,
8
+ DEBUG: 3,
9
+ INFO: 2,
10
+ LOG: 1,
11
+ };
5
12
  class ConsoleLogger extends _1.Logger {
13
+ level;
14
+ constructor(level = "ERROR") {
15
+ super();
16
+ this.level = level;
17
+ }
6
18
  log(context, ...args) {
19
+ if (LOG_LEVELS[this.level] < LOG_LEVELS["LOG"])
20
+ return;
7
21
  console.log(this.context(context), ...args);
8
22
  }
9
23
  info(context, ...args) {
24
+ if (LOG_LEVELS[this.level] < LOG_LEVELS["INFO"])
25
+ return;
10
26
  console.info(this.context(context), ...args);
11
27
  }
12
28
  debug(context, ...args) {
29
+ if (LOG_LEVELS[this.level] < LOG_LEVELS["DEBUG"])
30
+ return;
13
31
  console.debug(this.context(context), ...args);
14
32
  }
15
33
  warn(context, ...args) {
34
+ if (LOG_LEVELS[this.level] < LOG_LEVELS["WARN"])
35
+ return;
16
36
  console.warn(this.context(context), ...args);
17
37
  }
18
38
  error(context, ...args) {
39
+ if (LOG_LEVELS[this.level] < LOG_LEVELS["ERROR"])
40
+ return;
19
41
  console.error(this.context(context), ...args);
20
42
  }
21
43
  context(customContext) {
22
44
  return {
23
- timestamp: new Date(),
45
+ timestamp: Date.now(),
24
46
  ...customContext,
25
47
  };
26
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"console-logger.js","sourceRoot":"","sources":["../../../src/logger/console-logger.ts"],"names":[],"mappings":";;;AAAA,yBAA4B;AAE5B,MAAa,aAAc,SAAQ,SAAM;IACvC,GAAG,CAAC,OAAiC,EAAE,GAAG,IAAW;QACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,OAAiC,EAAE,GAAG,IAAW;QACpD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAiC,EAAE,GAAG,IAAW;QACrD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,CAAC,OAAiC,EAAE,GAAG,IAAW;QACpD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAiC,EAAE,GAAG,IAAW;QACrD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,CAAC;IAEO,OAAO,CAAC,aAAuC;QACrD,OAAO;YACL,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,GAAG,aAAa;SACjB,CAAC;IACJ,CAAC;CACF;AA3BD,sCA2BC"}
1
+ {"version":3,"file":"console-logger.js","sourceRoot":"","sources":["../../../src/logger/console-logger.ts"],"names":[],"mappings":";;;AAAA,yBAA4B;AAE5B,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;CACP,CAAC;AAEF,MAAa,aAAc,SAAQ,SAAM;IAEpB;IADnB,YACmB,QAAqD,OAAO;QAE7E,KAAK,EAAE,CAAC;QAFS,UAAK,GAAL,KAAK,CAAuD;IAG/E,CAAC;IAED,GAAG,CAAC,OAAiC,EAAE,GAAG,IAAW;QACnD,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO;QAEvD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,OAAiC,EAAE,GAAG,IAAW;QACpD,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO;QAExD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAiC,EAAE,GAAG,IAAW;QACrD,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO;QAEzD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,CAAC,OAAiC,EAAE,GAAG,IAAW;QACpD,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO;QAExD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAiC,EAAE,GAAG,IAAW;QACrD,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO;QAEzD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,CAAC;IAEO,OAAO,CAAC,aAAuC;QACrD,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,GAAG,aAAa;SACjB,CAAC;IACJ,CAAC;CACF;AA3CD,sCA2CC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=dead-letter-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dead-letter-store.js","sourceRoot":"","sources":["../../../src/event-bus/dead-letter-store.ts"],"names":[],"mappings":""}
@@ -7,9 +7,11 @@ class AsyncInMemoryEventBus {
7
7
  subscribers = new Map();
8
8
  store;
9
9
  maxRetries;
10
- constructor(store = new in_memory_event_store_1.InMemoryEventStore(), maxRetries = 3) {
10
+ deadLetterStore;
11
+ constructor(store = new in_memory_event_store_1.InMemoryEventStore(), maxRetries = 3, deadLetterStore) {
11
12
  this.store = store;
12
13
  this.maxRetries = maxRetries;
14
+ this.deadLetterStore = deadLetterStore;
13
15
  }
14
16
  subscribe(eventName, subscriber) {
15
17
  if (!this.subscribers.has(eventName)) {
@@ -37,12 +39,19 @@ class AsyncInMemoryEventBus {
37
39
  this.store.requeue(updatedPrimitives);
38
40
  this.publish(domain_events_1.DomainEventRegistry.create(updatedPrimitives));
39
41
  }
40
- else {
41
- console.warn(`Event ${event.id} exceeded max retries (${this.maxRetries}). Dropping.`);
42
+ else if (this.deadLetterStore) {
43
+ const reason = `Exceeded max retries (${this.maxRetries})`;
44
+ this.deadLetterStore.add(primitives, reason);
45
+ console.warn(`Event ${event.id} moved to DLQ: ${reason}`);
42
46
  }
43
47
  };
44
48
  for (const sub of subs) {
45
- await sub.handle(event);
49
+ try {
50
+ await sub.handle(event);
51
+ }
52
+ catch (err) {
53
+ event.requeue?.();
54
+ }
46
55
  }
47
56
  }
48
57
  async replay() {
@@ -1 +1 @@
1
- {"version":3,"file":"async-in-memory-event-bus.js","sourceRoot":"","sources":["../../../../src/event-bus/in-memory/async-in-memory-event-bus.ts"],"names":[],"mappings":";;;AAAA,uDAAuE;AACvE,mEAA6D;AAK7D,MAAa,qBAAqB;IACf,WAAW,GAAG,IAAI,GAAG,EAA6B,CAAC;IACnD,KAAK,CAAa;IAClB,UAAU,CAAS;IAEpC,YAAY,QAAoB,IAAI,0CAAkB,EAAE,EAAE,UAAU,GAAG,CAAC;QACtE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,SAAS,CAA4B,SAAiB,EAAE,UAAkC;QACxF,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,OAAO,CAA4B,KAAY;QACnD,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QAExC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE5B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,KAAkB;QACvC,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QAExC,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9C,KAAK,CAAC,OAAO,GAAG,GAAG,EAAE;YACnB,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;YAEd,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACzC,MAAM,iBAAiB,GAAG;oBACxB,GAAG,UAAU;oBACb,IAAI,EAAE,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE;iBAC9D,CAAC;gBAEF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,mCAAmB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE,0BAA0B,IAAI,CAAC,UAAU,cAAc,CAAC,CAAC;YACzF,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAEhC,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,mCAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;CACF;AA7DD,sDA6DC"}
1
+ {"version":3,"file":"async-in-memory-event-bus.js","sourceRoot":"","sources":["../../../../src/event-bus/in-memory/async-in-memory-event-bus.ts"],"names":[],"mappings":";;;AAAA,uDAAuE;AACvE,mEAA6D;AAM7D,MAAa,qBAAqB;IACf,WAAW,GAAG,IAAI,GAAG,EAA6B,CAAC;IACnD,KAAK,CAAa;IAClB,UAAU,CAAS;IACnB,eAAe,CAA8B;IAE9D,YACE,QAAoB,IAAI,0CAAkB,EAAE,EAC5C,UAAU,GAAG,CAAC,EACd,eAAiC;QAEjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED,SAAS,CAA4B,SAAiB,EAAE,UAAkC;QACxF,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,OAAO,CAA4B,KAAY;QACnD,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QAExC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE5B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,KAAkB;QACvC,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,UAAU,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QAExC,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9C,KAAK,CAAC,OAAO,GAAG,GAAG,EAAE;YACnB,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;YAEd,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;gBACzC,MAAM,iBAAiB,GAAG;oBACxB,GAAG,UAAU;oBACb,IAAI,EAAE,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE;iBAC9D,CAAC;gBAEF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;gBACtC,IAAI,CAAC,OAAO,CAAC,mCAAmB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBAChC,MAAM,MAAM,GAAG,yBAAyB,IAAI,CAAC,UAAU,GAAG,CAAC;gBAE3D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE,kBAAkB,MAAM,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAEhC,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,mCAAmB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;CACF;AA1ED,sDA0EC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InMemoryDeadLetterStore = void 0;
4
+ class InMemoryDeadLetterStore {
5
+ failed = [];
6
+ add(primitives, reason) {
7
+ this.failed.push({ primitives, reason });
8
+ }
9
+ all() {
10
+ return [...this.failed];
11
+ }
12
+ clear() {
13
+ this.failed.length = 0;
14
+ }
15
+ }
16
+ exports.InMemoryDeadLetterStore = InMemoryDeadLetterStore;
17
+ //# sourceMappingURL=in-memory-dead-letter-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-dead-letter-store.js","sourceRoot":"","sources":["../../../../src/event-bus/in-memory/in-memory-dead-letter-store.ts"],"names":[],"mappings":";;;AAGA,MAAa,uBAAuB;IACjB,MAAM,GAAiE,EAAE,CAAC;IAE3F,GAAG,CAAC,UAAiC,EAAE,MAAc;QACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,GAAG;QACD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACzB,CAAC;CACF;AAdD,0DAcC"}
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AsyncInMemoryEventBus = exports.InMemoryEventStore = void 0;
3
+ exports.InMemoryDeadLetterStore = exports.AsyncInMemoryEventBus = exports.InMemoryEventStore = void 0;
4
4
  var in_memory_event_store_1 = require("./in-memory-event-store");
5
5
  Object.defineProperty(exports, "InMemoryEventStore", { enumerable: true, get: function () { return in_memory_event_store_1.InMemoryEventStore; } });
6
6
  var async_in_memory_event_bus_1 = require("./async-in-memory-event-bus");
7
7
  Object.defineProperty(exports, "AsyncInMemoryEventBus", { enumerable: true, get: function () { return async_in_memory_event_bus_1.AsyncInMemoryEventBus; } });
8
+ var in_memory_dead_letter_store_1 = require("./in-memory-dead-letter-store");
9
+ Object.defineProperty(exports, "InMemoryDeadLetterStore", { enumerable: true, get: function () { return in_memory_dead_letter_store_1.InMemoryDeadLetterStore; } });
8
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/event-bus/in-memory/index.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAApD,2HAAA,kBAAkB,OAAA;AAC3B,yEAAmE;AAA1D,kIAAA,qBAAqB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/event-bus/in-memory/index.ts"],"names":[],"mappings":";;;AAAA,iEAA6D;AAApD,2HAAA,kBAAkB,OAAA;AAC3B,yEAAmE;AAA1D,kIAAA,qBAAqB,OAAA;AAC9B,6EAAwE;AAA/D,sIAAA,uBAAuB,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/event-bus/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/event-bus/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAIA,8CAA4B"}
@@ -2,25 +2,47 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ConsoleLogger = void 0;
4
4
  const _1 = require("./");
5
+ const LOG_LEVELS = {
6
+ ERROR: 5,
7
+ WARN: 4,
8
+ DEBUG: 3,
9
+ INFO: 2,
10
+ LOG: 1,
11
+ };
5
12
  class ConsoleLogger extends _1.Logger {
13
+ level;
14
+ constructor(level = "ERROR") {
15
+ super();
16
+ this.level = level;
17
+ }
6
18
  log(context, ...args) {
19
+ if (LOG_LEVELS[this.level] < LOG_LEVELS["LOG"])
20
+ return;
7
21
  console.log(this.context(context), ...args);
8
22
  }
9
23
  info(context, ...args) {
24
+ if (LOG_LEVELS[this.level] < LOG_LEVELS["INFO"])
25
+ return;
10
26
  console.info(this.context(context), ...args);
11
27
  }
12
28
  debug(context, ...args) {
29
+ if (LOG_LEVELS[this.level] < LOG_LEVELS["DEBUG"])
30
+ return;
13
31
  console.debug(this.context(context), ...args);
14
32
  }
15
33
  warn(context, ...args) {
34
+ if (LOG_LEVELS[this.level] < LOG_LEVELS["WARN"])
35
+ return;
16
36
  console.warn(this.context(context), ...args);
17
37
  }
18
38
  error(context, ...args) {
39
+ if (LOG_LEVELS[this.level] < LOG_LEVELS["ERROR"])
40
+ return;
19
41
  console.error(this.context(context), ...args);
20
42
  }
21
43
  context(customContext) {
22
44
  return {
23
- timestamp: new Date(),
45
+ timestamp: Date.now(),
24
46
  ...customContext,
25
47
  };
26
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"console-logger.js","sourceRoot":"","sources":["../../../src/logger/console-logger.ts"],"names":[],"mappings":";;;AAAA,yBAA4B;AAE5B,MAAa,aAAc,SAAQ,SAAM;IACvC,GAAG,CAAC,OAAiC,EAAE,GAAG,IAAW;QACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,OAAiC,EAAE,GAAG,IAAW;QACpD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAiC,EAAE,GAAG,IAAW;QACrD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,CAAC,OAAiC,EAAE,GAAG,IAAW;QACpD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAiC,EAAE,GAAG,IAAW;QACrD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,CAAC;IAEO,OAAO,CAAC,aAAuC;QACrD,OAAO;YACL,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,GAAG,aAAa;SACjB,CAAC;IACJ,CAAC;CACF;AA3BD,sCA2BC"}
1
+ {"version":3,"file":"console-logger.js","sourceRoot":"","sources":["../../../src/logger/console-logger.ts"],"names":[],"mappings":";;;AAAA,yBAA4B;AAE5B,MAAM,UAAU,GAAG;IACjB,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,GAAG,EAAE,CAAC;CACP,CAAC;AAEF,MAAa,aAAc,SAAQ,SAAM;IAEpB;IADnB,YACmB,QAAqD,OAAO;QAE7E,KAAK,EAAE,CAAC;QAFS,UAAK,GAAL,KAAK,CAAuD;IAG/E,CAAC;IAED,GAAG,CAAC,OAAiC,EAAE,GAAG,IAAW;QACnD,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO;QAEvD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,OAAiC,EAAE,GAAG,IAAW;QACpD,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO;QAExD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAiC,EAAE,GAAG,IAAW;QACrD,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO;QAEzD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,CAAC,OAAiC,EAAE,GAAG,IAAW;QACpD,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO;QAExD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAiC,EAAE,GAAG,IAAW;QACrD,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO;QAEzD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,CAAC;IAEO,OAAO,CAAC,aAAuC;QACrD,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,GAAG,aAAa;SACjB,CAAC;IACJ,CAAC;CACF;AA3CD,sCA2CC"}
@@ -0,0 +1,10 @@
1
+ import { DomainEventPrimitives } from "../domain-events";
2
+ export interface DeadLetterStore {
3
+ add(primitives: DomainEventPrimitives, reason: string): void;
4
+ all(): Array<{
5
+ primitives: DomainEventPrimitives;
6
+ reason: string;
7
+ }>;
8
+ clear(): void;
9
+ }
10
+ //# sourceMappingURL=dead-letter-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dead-letter-store.d.ts","sourceRoot":"","sources":["../../../src/event-bus/dead-letter-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,UAAU,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7D,GAAG,IAAI,KAAK,CAAC;QAAE,UAAU,EAAE,qBAAqB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,KAAK,IAAI,IAAI,CAAC;CACf"}
@@ -2,11 +2,13 @@ import { DomainEvent } from "../../domain-events";
2
2
  import { EventStore } from "../event-store";
3
3
  import { EventSubscriber } from "../event-subscriber";
4
4
  import { EventBus } from "../event-bus";
5
+ import { DeadLetterStore } from "../dead-letter-store";
5
6
  export declare class AsyncInMemoryEventBus implements EventBus {
6
7
  private readonly subscribers;
7
8
  private readonly store;
8
9
  private readonly maxRetries;
9
- constructor(store?: EventStore, maxRetries?: number);
10
+ private readonly deadLetterStore;
11
+ constructor(store?: EventStore, maxRetries?: number, deadLetterStore?: DeadLetterStore);
10
12
  subscribe<Event extends DomainEvent>(eventName: string, subscriber: EventSubscriber<Event>): void;
11
13
  publish<Event extends DomainEvent>(event: Event): Promise<void>;
12
14
  private dispatch;
@@ -1 +1 @@
1
- {"version":3,"file":"async-in-memory-event-bus.d.ts","sourceRoot":"","sources":["../../../../src/event-bus/in-memory/async-in-memory-event-bus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAuB,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,qBAAa,qBAAsB,YAAW,QAAQ;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwC;IACpE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,KAAK,GAAE,UAAqC,EAAE,UAAU,SAAI;IAKxE,SAAS,CAAC,KAAK,SAAS,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,IAAI;IAQ3F,OAAO,CAAC,KAAK,SAAS,WAAW,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;YAQvD,QAAQ;IA2BhB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ9B"}
1
+ {"version":3,"file":"async-in-memory-event-bus.d.ts","sourceRoot":"","sources":["../../../../src/event-bus/in-memory/async-in-memory-event-bus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAuB,MAAM,qBAAqB,CAAC;AAEvE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,qBAAa,qBAAsB,YAAW,QAAQ;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwC;IACpE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA8B;gBAG5D,KAAK,GAAE,UAAqC,EAC5C,UAAU,SAAI,EACd,eAAe,CAAC,EAAE,eAAe;IAOnC,SAAS,CAAC,KAAK,SAAS,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,IAAI;IAQ3F,OAAO,CAAC,KAAK,SAAS,WAAW,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;YAQvD,QAAQ;IAkChB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ9B"}
@@ -0,0 +1,12 @@
1
+ import { DeadLetterStore } from "../dead-letter-store";
2
+ import { DomainEventPrimitives } from "../../domain-events";
3
+ export declare class InMemoryDeadLetterStore implements DeadLetterStore {
4
+ private readonly failed;
5
+ add(primitives: DomainEventPrimitives, reason: string): void;
6
+ all(): Array<{
7
+ primitives: DomainEventPrimitives;
8
+ reason: string;
9
+ }>;
10
+ clear(): void;
11
+ }
12
+ //# sourceMappingURL=in-memory-dead-letter-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-dead-letter-store.d.ts","sourceRoot":"","sources":["../../../../src/event-bus/in-memory/in-memory-dead-letter-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,qBAAa,uBAAwB,YAAW,eAAe;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoE;IAE3F,GAAG,CAAC,UAAU,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5D,GAAG,IAAI,KAAK,CAAC;QAAE,UAAU,EAAE,qBAAqB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAInE,KAAK,IAAI,IAAI;CAGd"}
@@ -1,3 +1,4 @@
1
1
  export { InMemoryEventStore } from "./in-memory-event-store";
2
2
  export { AsyncInMemoryEventBus } from "./async-in-memory-event-bus";
3
+ export { InMemoryDeadLetterStore } from "./in-memory-dead-letter-store";
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/event-bus/in-memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/event-bus/in-memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAA;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC"}
@@ -1,5 +1,6 @@
1
1
  export type { EventSubscriber } from "./event-subscriber";
2
2
  export type { EventStore } from "./event-store";
3
3
  export type { EventBus } from "./event-bus";
4
+ export type { DeadLetterStore } from "./dead-letter-store";
4
5
  export * from "./in-memory";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/event-bus/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/event-bus/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,cAAc,aAAa,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import { Logger } from "./";
2
2
  export declare class ConsoleLogger extends Logger {
3
+ private readonly level;
4
+ constructor(level?: "LOG" | "ERROR" | "WARN" | "INFO" | "DEBUG");
3
5
  log(context?: Record<string, unknown>, ...args: any[]): void;
4
6
  info(context?: Record<string, unknown>, ...args: any[]): void;
5
7
  debug(context?: Record<string, unknown>, ...args: any[]): void;
@@ -1 +1 @@
1
- {"version":3,"file":"console-logger.d.ts","sourceRoot":"","sources":["../../../src/logger/console-logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAE5B,qBAAa,aAAc,SAAQ,MAAM;IACvC,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAI5D,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAI7D,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAI9D,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAI7D,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAI9D,OAAO,CAAC,OAAO;CAMhB"}
1
+ {"version":3,"file":"console-logger.d.ts","sourceRoot":"","sources":["../../../src/logger/console-logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAU5B,qBAAa,aAAc,SAAQ,MAAM;IAErC,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,GAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAiB;IAK/E,GAAG,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM5D,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM7D,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM9D,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM7D,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAM9D,OAAO,CAAC,OAAO;CAMhB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schorts/shared-kernel",
3
- "version": "5.2.5",
3
+ "version": "5.3.0",
4
4
  "description": "A modular, type-safe foundation for building expressive, maintainable applications. This package provides core abstractions for domain modeling, HTTP integration, authentication, state management, and more — designed to be framework-agnostic and highly extensible.",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",