@message-queue-toolkit/core 12.0.0 → 13.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.
Files changed (33) hide show
  1. package/dist/index.d.ts +4 -2
  2. package/dist/index.js +4 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/events/DomainEventEmitter.js +2 -2
  5. package/dist/lib/events/DomainEventEmitter.js.map +1 -1
  6. package/dist/lib/events/EventRegistry.js +2 -2
  7. package/dist/lib/events/EventRegistry.js.map +1 -1
  8. package/dist/lib/events/baseEventSchemas.d.ts +76 -7
  9. package/dist/lib/events/baseEventSchemas.js +33 -8
  10. package/dist/lib/events/baseEventSchemas.js.map +1 -1
  11. package/dist/lib/events/eventTypes.d.ts +6 -3
  12. package/dist/lib/events/fakes/FakeListener.d.ts +2 -2
  13. package/dist/lib/events/fakes/FakeListener.js.map +1 -1
  14. package/dist/lib/messages/MetadataFiller.d.ts +3 -3
  15. package/dist/lib/messages/MetadataFiller.js.map +1 -1
  16. package/dist/lib/messages/baseMessageSchemas.d.ts +53 -3
  17. package/dist/lib/messages/baseMessageSchemas.js +17 -3
  18. package/dist/lib/messages/baseMessageSchemas.js.map +1 -1
  19. package/dist/lib/queues/AbstractPublisherManager.d.ts +48 -0
  20. package/dist/lib/queues/AbstractPublisherManager.js +119 -0
  21. package/dist/lib/queues/AbstractPublisherManager.js.map +1 -0
  22. package/dist/lib/queues/AbstractQueueService.d.ts +4 -1
  23. package/dist/lib/queues/AbstractQueueService.js +19 -2
  24. package/dist/lib/queues/AbstractQueueService.js.map +1 -1
  25. package/dist/lib/types/MessageQueueTypes.d.ts +6 -3
  26. package/dist/lib/types/queueOptionsTypes.d.ts +3 -1
  27. package/dist/lib/utils/dateUtils.d.ts +7 -0
  28. package/dist/lib/utils/dateUtils.js +15 -0
  29. package/dist/lib/utils/dateUtils.js.map +1 -0
  30. package/dist/lib/utils/parseUtils.d.ts +21 -1
  31. package/dist/lib/utils/parseUtils.js +18 -3
  32. package/dist/lib/utils/parseUtils.js.map +1 -1
  33. package/package.json +2 -2
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@ export { isMessageError, MessageValidationError, MessageInvalidFormatError, } fr
5
5
  export { isShallowSubset, objectMatches } from './lib/utils/matchUtils';
6
6
  export { RetryMessageLaterError } from './lib/errors/RetryMessageLaterError';
7
7
  export { DoNotProcessMessageError } from './lib/errors/DoNotProcessError';
8
- export { HandlerContainer, MessageHandlerConfig, MessageHandlerConfigBuilder, } from './lib/queues/HandlerContainer';
8
+ export { PrehandlerResult, HandlerContainer, MessageHandlerConfig, MessageHandlerConfigBuilder, } from './lib/queues/HandlerContainer';
9
9
  export type { BarrierCallback, BarrierResult, BarrierResultPositive, BarrierResultNegative, HandlerContainerOptions, Handler, Prehandler, PreHandlingOutputs, } from './lib/queues/HandlerContainer';
10
10
  export { HandlerSpy } from './lib/queues/HandlerSpy';
11
11
  export type { SpyResult, HandlerSpyParams, PublicHandlerSpy } from './lib/queues/HandlerSpy';
@@ -13,7 +13,8 @@ export { MessageSchemaContainer } from './lib/queues/MessageSchemaContainer';
13
13
  export type { MessageSchemaContainerOptions } from './lib/queues/MessageSchemaContainer';
14
14
  export { objectToBuffer } from './lib/utils/queueUtils';
15
15
  export { waitAndRetry } from './lib/utils/waitUtils';
16
- export { parseMessage } from './lib/utils/parseUtils';
16
+ export { type ParseMessageResult, parseMessage } from './lib/utils/parseUtils';
17
+ export { isRetryDateExceeded } from './lib/utils/dateUtils';
17
18
  export { toDatePreprocessor } from './lib/utils/toDateProcessor';
18
19
  export { reloadConfig, isProduction } from './lib/utils/envUtils';
19
20
  export { DomainEventEmitter } from './lib/events/DomainEventEmitter';
@@ -23,3 +24,4 @@ export * from './lib/events/eventTypes';
23
24
  export * from './lib/events/baseEventSchemas';
24
25
  export * from './lib/messages/baseMessageSchemas';
25
26
  export * from './lib/messages/MetadataFiller';
27
+ export * from './lib/queues/AbstractPublisherManager';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FakeListener = exports.EventRegistry = exports.DomainEventEmitter = exports.isProduction = exports.reloadConfig = exports.toDatePreprocessor = exports.parseMessage = exports.waitAndRetry = exports.objectToBuffer = exports.MessageSchemaContainer = exports.HandlerSpy = exports.MessageHandlerConfigBuilder = exports.MessageHandlerConfig = exports.HandlerContainer = exports.DoNotProcessMessageError = exports.RetryMessageLaterError = exports.objectMatches = exports.isShallowSubset = exports.MessageInvalidFormatError = exports.MessageValidationError = exports.isMessageError = exports.AbstractQueueService = void 0;
3
+ exports.FakeListener = exports.EventRegistry = exports.DomainEventEmitter = exports.isProduction = exports.reloadConfig = exports.toDatePreprocessor = exports.isRetryDateExceeded = exports.parseMessage = exports.waitAndRetry = exports.objectToBuffer = exports.MessageSchemaContainer = exports.HandlerSpy = exports.MessageHandlerConfigBuilder = exports.MessageHandlerConfig = exports.HandlerContainer = exports.DoNotProcessMessageError = exports.RetryMessageLaterError = exports.objectMatches = exports.isShallowSubset = exports.MessageInvalidFormatError = exports.MessageValidationError = exports.isMessageError = exports.AbstractQueueService = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  var AbstractQueueService_1 = require("./lib/queues/AbstractQueueService");
6
6
  Object.defineProperty(exports, "AbstractQueueService", { enumerable: true, get: function () { return AbstractQueueService_1.AbstractQueueService; } });
@@ -30,6 +30,8 @@ var waitUtils_1 = require("./lib/utils/waitUtils");
30
30
  Object.defineProperty(exports, "waitAndRetry", { enumerable: true, get: function () { return waitUtils_1.waitAndRetry; } });
31
31
  var parseUtils_1 = require("./lib/utils/parseUtils");
32
32
  Object.defineProperty(exports, "parseMessage", { enumerable: true, get: function () { return parseUtils_1.parseMessage; } });
33
+ var dateUtils_1 = require("./lib/utils/dateUtils");
34
+ Object.defineProperty(exports, "isRetryDateExceeded", { enumerable: true, get: function () { return dateUtils_1.isRetryDateExceeded; } });
33
35
  var toDateProcessor_1 = require("./lib/utils/toDateProcessor");
34
36
  Object.defineProperty(exports, "toDatePreprocessor", { enumerable: true, get: function () { return toDateProcessor_1.toDatePreprocessor; } });
35
37
  var envUtils_1 = require("./lib/utils/envUtils");
@@ -45,4 +47,5 @@ tslib_1.__exportStar(require("./lib/events/eventTypes"), exports);
45
47
  tslib_1.__exportStar(require("./lib/events/baseEventSchemas"), exports);
46
48
  tslib_1.__exportStar(require("./lib/messages/baseMessageSchemas"), exports);
47
49
  tslib_1.__exportStar(require("./lib/messages/MetadataFiller"), exports);
50
+ tslib_1.__exportStar(require("./lib/queues/AbstractPublisherManager"), exports);
48
51
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;AAWA,0EAAsF;AAA7E,4HAAA,oBAAoB,OAAA;AAC7B,wEAA6C;AAE7C,8CAI4B;AAH1B,wGAAA,cAAc,OAAA;AACd,gHAAA,sBAAsB,OAAA;AACtB,mHAAA,yBAAyB,OAAA;AAG3B,qDAAuE;AAA9D,6GAAA,eAAe,OAAA;AAAE,2GAAA,aAAa,OAAA;AAEvC,8EAA4E;AAAnE,gIAAA,sBAAsB,OAAA;AAE/B,oEAAyE;AAAhE,6HAAA,wBAAwB,OAAA;AAEjC,kEAIsC;AAHpC,oHAAA,gBAAgB,OAAA;AAChB,wHAAA,oBAAoB,OAAA;AACpB,+HAAA,2BAA2B,OAAA;AAY7B,sDAAoD;AAA3C,wGAAA,UAAU,OAAA;AAGnB,8EAA4E;AAAnE,gIAAA,sBAAsB,OAAA;AAG/B,qDAAuD;AAA9C,4GAAA,cAAc,OAAA;AACvB,mDAAoD;AAA3C,yGAAA,YAAY,OAAA;AACrB,qDAAqD;AAA5C,0GAAA,YAAY,OAAA;AACrB,+DAAgE;AAAvD,qHAAA,kBAAkB,OAAA;AAE3B,iDAAiE;AAAxD,wGAAA,YAAY,OAAA;AAAE,wGAAA,YAAY,OAAA;AAEnC,sEAAoE;AAA3D,wHAAA,kBAAkB,OAAA;AAC3B,4DAA0D;AAAjD,8GAAA,aAAa,OAAA;AACtB,gEAA8D;AAArD,4GAAA,YAAY,OAAA;AAErB,kEAAuC;AACvC,wEAA6C;AAC7C,4EAAiD;AAEjD,wEAA6C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;AAWA,0EAAsF;AAA7E,4HAAA,oBAAoB,OAAA;AAC7B,wEAA6C;AAE7C,8CAI4B;AAH1B,wGAAA,cAAc,OAAA;AACd,gHAAA,sBAAsB,OAAA;AACtB,mHAAA,yBAAyB,OAAA;AAG3B,qDAAuE;AAA9D,6GAAA,eAAe,OAAA;AAAE,2GAAA,aAAa,OAAA;AAEvC,8EAA4E;AAAnE,gIAAA,sBAAsB,OAAA;AAE/B,oEAAyE;AAAhE,6HAAA,wBAAwB,OAAA;AAEjC,kEAKsC;AAHpC,oHAAA,gBAAgB,OAAA;AAChB,wHAAA,oBAAoB,OAAA;AACpB,+HAAA,2BAA2B,OAAA;AAY7B,sDAAoD;AAA3C,wGAAA,UAAU,OAAA;AAGnB,8EAA4E;AAAnE,gIAAA,sBAAsB,OAAA;AAG/B,qDAAuD;AAA9C,4GAAA,cAAc,OAAA;AACvB,mDAAoD;AAA3C,yGAAA,YAAY,OAAA;AACrB,qDAA8E;AAA5C,0GAAA,YAAY,OAAA;AAC9C,mDAA2D;AAAlD,gHAAA,mBAAmB,OAAA;AAC5B,+DAAgE;AAAvD,qHAAA,kBAAkB,OAAA;AAE3B,iDAAiE;AAAxD,wGAAA,YAAY,OAAA;AAAE,wGAAA,YAAY,OAAA;AAEnC,sEAAoE;AAA3D,wHAAA,kBAAkB,OAAA;AAC3B,4DAA0D;AAAjD,8GAAA,aAAa,OAAA;AACtB,gEAA8D;AAArD,4GAAA,YAAY,OAAA;AAErB,kEAAuC;AACvC,wEAA6C;AAC7C,4EAAiD;AAEjD,wEAA6C;AAE7C,gFAAqD"}
@@ -10,7 +10,7 @@ class DomainEventEmitter {
10
10
  this.eventRegistry = eventRegistry;
11
11
  }
12
12
  async emit(supportedEvent, data) {
13
- const eventTypeName = supportedEvent.schema.shape.type.value;
13
+ const eventTypeName = supportedEvent.consumerSchema.shape.type.value;
14
14
  if (!this.eventRegistry.isSupportedEvent(eventTypeName)) {
15
15
  throw new node_core_1.InternalError({
16
16
  errorCode: 'UNKNOWN_EVENT',
@@ -24,7 +24,7 @@ class DomainEventEmitter {
24
24
  }
25
25
  const validatedEvent = this.eventRegistry
26
26
  .getEventDefinitionByTypeName(eventTypeName)
27
- .schema.parse({
27
+ .consumerSchema.parse({
28
28
  type: eventTypeName,
29
29
  ...data,
30
30
  });
@@ -1 +1 @@
1
- {"version":3,"file":"DomainEventEmitter.js","sourceRoot":"","sources":["../../../lib/events/DomainEventEmitter.ts"],"names":[],"mappings":";;;AAAA,mDAAmD;AAYnD,MAAa,kBAAkB;IACZ,aAAa,CAAgC;IAE7C,eAAe,GAG5B,EAAE,CAAA;IACW,WAAW,GAAuC,EAAE,CAAA;IAErE,YAAY,EAAE,aAAa,EAAqD;QAC9E,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;IACpC,CAAC;IAEM,KAAK,CAAC,IAAI,CACf,cAA8B,EAC9B,IAAmE;QAEnE,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAA;QAE5D,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,yBAAa,CAAC;gBACtB,SAAS,EAAE,eAAe;gBAC1B,OAAO,EAAE,iBAAiB,aAAa,EAAE;aAC1C,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAA;QAEzD,8DAA8D;QAC9D,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpD,OAAM;QACR,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa;aACtC,4BAA4B,CAAC,aAAa,CAAC;aAC3C,MAAM,CAAC,KAAK,CAAC;YACZ,IAAI,EAAE,aAAa;YACnB,GAAG,IAAI;SACR,CAAC,CAAA;QAEJ,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;gBACpC,MAAM,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;YAC3C,CAAC;QACH,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,MAAM,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAED;;OAEG;IACI,EAAE,CACP,aAA4B,EAC5B,OAA2D;QAE3D,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;IAC3C,CAAC;IAED;;OAEG;IACI,MAAM,CACX,cAA+B,EAC/B,OAA2D;QAE3D,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC3C,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAyC;QACpD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;IAEO,YAAY,CAClB,aAAsD,EACtD,OAAqB;QAErB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,GAAG,EAAE,CAAA;QAC1C,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACnD,CAAC;CACF;AA1FD,gDA0FC"}
1
+ {"version":3,"file":"DomainEventEmitter.js","sourceRoot":"","sources":["../../../lib/events/DomainEventEmitter.ts"],"names":[],"mappings":";;;AAAA,mDAAmD;AAYnD,MAAa,kBAAkB;IACZ,aAAa,CAAgC;IAE7C,eAAe,GAG5B,EAAE,CAAA;IACW,WAAW,GAAuC,EAAE,CAAA;IAErE,YAAY,EAAE,aAAa,EAAqD;QAC9E,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;IACpC,CAAC;IAEM,KAAK,CAAC,IAAI,CACf,cAA8B,EAC9B,IAAmE;QAEnE,MAAM,aAAa,GAAG,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAA;QAEpE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,yBAAa,CAAC;gBACtB,SAAS,EAAE,eAAe;gBAC1B,OAAO,EAAE,iBAAiB,aAAa,EAAE;aAC1C,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAA;QAEzD,8DAA8D;QAC9D,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpD,OAAM;QACR,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa;aACtC,4BAA4B,CAAC,aAAa,CAAC;aAC3C,cAAc,CAAC,KAAK,CAAC;YACpB,IAAI,EAAE,aAAa;YACnB,GAAG,IAAI;SACR,CAAC,CAAA;QAEJ,IAAI,aAAa,EAAE,CAAC;YAClB,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;gBACpC,MAAM,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;YAC3C,CAAC;QACH,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,MAAM,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;IAED;;OAEG;IACI,EAAE,CACP,aAA4B,EAC5B,OAA2D;QAE3D,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;IAC3C,CAAC;IAED;;OAEG;IACI,MAAM,CACX,cAA+B,EAC/B,OAA2D;QAE3D,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC3C,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAyC;QACpD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;IAEO,YAAY,CAClB,aAAsD,EACtD,OAAqB;QAErB,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,GAAG,EAAE,CAAA;QAC1C,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACnD,CAAC;CACF;AA1FD,gDA0FC"}
@@ -9,8 +9,8 @@ class EventRegistry {
9
9
  this.supportedEvents = supportedEvents;
10
10
  this.supportedEventsSet = new Set();
11
11
  for (const supportedEvent of supportedEvents) {
12
- this.supportedEventMap[supportedEvent.schema.shape.type.value] = supportedEvent;
13
- this.supportedEventsSet.add(supportedEvent.schema.shape.type.value);
12
+ this.supportedEventMap[supportedEvent.consumerSchema.shape.type.value] = supportedEvent;
13
+ this.supportedEventsSet.add(supportedEvent.consumerSchema.shape.type.value);
14
14
  }
15
15
  }
16
16
  getEventDefinitionByTypeName = (eventTypeName) => {
@@ -1 +1 @@
1
- {"version":3,"file":"EventRegistry.js","sourceRoot":"","sources":["../../../lib/events/EventRegistry.ts"],"names":[],"mappings":";;;AAEA,MAAa,aAAa;IACR,eAAe,CAAiB;IAC/B,kBAAkB,CAAa;IAC/B,iBAAiB,GAA0C,EAAE,CAAA;IAE9E,YAAY,eAAgC;QAC1C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAA;QAE3C,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE,CAAC;YAC7C,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,cAAc,CAAA;YAC/E,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACrE,CAAC;IACH,CAAC;IAEM,4BAA4B,GAAG,CAGpC,aAA4B,EACL,EAAE;QACzB,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAA;IAC9C,CAAC,CAAA;IAEM,gBAAgB,CAAC,aAAqB;QAC3C,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IACnD,CAAC;CACF;AA1BD,sCA0BC"}
1
+ {"version":3,"file":"EventRegistry.js","sourceRoot":"","sources":["../../../lib/events/EventRegistry.ts"],"names":[],"mappings":";;;AAEA,MAAa,aAAa;IACR,eAAe,CAAiB;IAC/B,kBAAkB,CAAa;IAC/B,iBAAiB,GAA0C,EAAE,CAAA;IAE9E,YAAY,eAAgC;QAC1C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAA;QAE3C,KAAK,MAAM,cAAc,IAAI,eAAe,EAAE,CAAC;YAC7C,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,cAAc,CAAA;YACvF,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7E,CAAC;IACH,CAAC;IAEM,4BAA4B,GAAG,CAGpC,aAA4B,EACL,EAAE;QACzB,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAA;IAC9C,CAAC,CAAA;IAEM,gBAAgB,CAAC,aAAqB;QAC3C,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IACnD,CAAC;CACF;AA1BD,sCA0BC"}
@@ -1,12 +1,45 @@
1
- import { z } from 'zod';
2
- export declare const BASE_EVENT_SCHEMA: z.ZodObject<{
3
- id: z.ZodString;
4
- timestamp: z.ZodString;
5
- type: z.ZodLiteral<string>;
6
- payload: z.ZodOptional<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
1
+ import type { ZodLiteral, ZodObject, ZodOptional, ZodString } from 'zod';
2
+ import z from 'zod';
3
+ import type { ZodRawShape } from 'zod/lib/types';
4
+ export declare const GENERATED_BASE_EVENT_SCHEMA: ZodObject<{
5
+ id: ZodString;
6
+ timestamp: ZodString;
7
7
  }, "strip", z.ZodTypeAny, {
8
8
  id: string;
9
9
  timestamp: string;
10
+ }, {
11
+ id: string;
12
+ timestamp: string;
13
+ }>;
14
+ export declare const OPTIONAL_GENERATED_BASE_EVENT_SCHEMA: ZodObject<{
15
+ id: ZodOptional<ZodString>;
16
+ timestamp: ZodOptional<ZodString>;
17
+ }, "strip", z.ZodTypeAny, {
18
+ id?: string | undefined;
19
+ timestamp?: string | undefined;
20
+ }, {
21
+ id?: string | undefined;
22
+ timestamp?: string | undefined;
23
+ }>;
24
+ export declare const CORE_EVENT_SCHEMA: ZodObject<{
25
+ type: ZodLiteral<string>;
26
+ payload: ZodOptional<ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
27
+ }, "strip", z.ZodTypeAny, {
28
+ type: string;
29
+ payload?: {} | undefined;
30
+ }, {
31
+ type: string;
32
+ payload?: {} | undefined;
33
+ }>;
34
+ export declare const CONSUMER_BASE_EVENT_SCHEMA: ZodObject<z.objectUtil.extendShape<{
35
+ id: ZodString;
36
+ timestamp: ZodString;
37
+ }, {
38
+ type: ZodLiteral<string>;
39
+ payload: ZodOptional<ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
40
+ }>, "strip", z.ZodTypeAny, {
41
+ id: string;
42
+ timestamp: string;
10
43
  type: string;
11
44
  payload?: {} | undefined;
12
45
  }, {
@@ -15,4 +48,40 @@ export declare const BASE_EVENT_SCHEMA: z.ZodObject<{
15
48
  type: string;
16
49
  payload?: {} | undefined;
17
50
  }>;
18
- export type BaseEventType = z.infer<typeof BASE_EVENT_SCHEMA>;
51
+ export declare const PUBLISHER_BASE_EVENT_SCHEMA: ZodObject<z.objectUtil.extendShape<{
52
+ id: ZodOptional<ZodString>;
53
+ timestamp: ZodOptional<ZodString>;
54
+ }, {
55
+ type: ZodLiteral<string>;
56
+ payload: ZodOptional<ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
57
+ }>, "strip", z.ZodTypeAny, {
58
+ type: string;
59
+ id?: string | undefined;
60
+ timestamp?: string | undefined;
61
+ payload?: {} | undefined;
62
+ }, {
63
+ type: string;
64
+ id?: string | undefined;
65
+ timestamp?: string | undefined;
66
+ payload?: {} | undefined;
67
+ }>;
68
+ export type ConsumerBaseEventType = z.infer<typeof CONSUMER_BASE_EVENT_SCHEMA>;
69
+ export type PublisherBaseEventType = z.infer<typeof PUBLISHER_BASE_EVENT_SCHEMA>;
70
+ export type CoreEventType = z.infer<typeof CORE_EVENT_SCHEMA>;
71
+ export type GeneratedBaseEventType = z.infer<typeof GENERATED_BASE_EVENT_SCHEMA>;
72
+ type ReturnType<T extends ZodObject<Y>, Y extends ZodRawShape, Z extends string> = {
73
+ consumerSchema: ZodObject<{
74
+ id: ZodString;
75
+ timestamp: ZodString;
76
+ type: ZodLiteral<Z>;
77
+ payload: T;
78
+ }>;
79
+ publisherSchema: ZodObject<{
80
+ id: ZodOptional<ZodString>;
81
+ timestamp: ZodOptional<ZodString>;
82
+ type: ZodLiteral<Z>;
83
+ payload: T;
84
+ }>;
85
+ };
86
+ export declare function enrichEventSchemaWithBase<T extends ZodObject<Y>, Y extends ZodRawShape, Z extends string>(type: Z, payloadSchema: T): ReturnType<T, Y, Z>;
87
+ export {};
@@ -1,12 +1,37 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BASE_EVENT_SCHEMA = void 0;
4
- const zod_1 = require("zod");
5
- // Core fields that describe either internal event or external message
6
- exports.BASE_EVENT_SCHEMA = zod_1.z.object({
7
- id: zod_1.z.string().describe('event unique identifier'),
8
- timestamp: zod_1.z.string().datetime().describe('iso 8601 datetime'),
9
- type: zod_1.z.literal('<replace.me>').describe('event type name'),
10
- payload: zod_1.z.optional(zod_1.z.object({})).describe('event payload based on type'),
3
+ exports.enrichEventSchemaWithBase = exports.PUBLISHER_BASE_EVENT_SCHEMA = exports.CONSUMER_BASE_EVENT_SCHEMA = exports.CORE_EVENT_SCHEMA = exports.OPTIONAL_GENERATED_BASE_EVENT_SCHEMA = exports.GENERATED_BASE_EVENT_SCHEMA = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const zod_1 = tslib_1.__importDefault(require("zod"));
6
+ // Base event fields that are typically autogenerated
7
+ exports.GENERATED_BASE_EVENT_SCHEMA = zod_1.default.object({
8
+ id: zod_1.default.string().describe('event unique identifier'),
9
+ timestamp: zod_1.default.string().datetime().describe('iso 8601 datetime'),
10
+ });
11
+ // Base event fields that are typically autogenerated, marked as optional
12
+ exports.OPTIONAL_GENERATED_BASE_EVENT_SCHEMA = zod_1.default.object({
13
+ id: zod_1.default.string().describe('event unique identifier').optional(),
14
+ timestamp: zod_1.default.string().datetime().describe('iso 8601 datetime').optional(),
11
15
  });
16
+ // Base event fields that are always defined manually
17
+ exports.CORE_EVENT_SCHEMA = zod_1.default.object({
18
+ type: zod_1.default.literal('<replace.me>').describe('event type name'),
19
+ payload: zod_1.default.optional(zod_1.default.object({})).describe('event payload based on type'),
20
+ });
21
+ // Core fields that describe either internal event or external message
22
+ exports.CONSUMER_BASE_EVENT_SCHEMA = exports.GENERATED_BASE_EVENT_SCHEMA.extend(exports.CORE_EVENT_SCHEMA.shape);
23
+ exports.PUBLISHER_BASE_EVENT_SCHEMA = exports.OPTIONAL_GENERATED_BASE_EVENT_SCHEMA.extend(exports.CORE_EVENT_SCHEMA.shape);
24
+ function enrichEventSchemaWithBase(type, payloadSchema) {
25
+ const baseSchema = zod_1.default.object({
26
+ type: zod_1.default.literal(type),
27
+ payload: payloadSchema,
28
+ });
29
+ const consumerSchema = exports.GENERATED_BASE_EVENT_SCHEMA.merge(baseSchema);
30
+ const publisherSchema = exports.OPTIONAL_GENERATED_BASE_EVENT_SCHEMA.merge(baseSchema);
31
+ return {
32
+ consumerSchema: consumerSchema,
33
+ publisherSchema: publisherSchema,
34
+ };
35
+ }
36
+ exports.enrichEventSchemaWithBase = enrichEventSchemaWithBase;
12
37
  //# sourceMappingURL=baseEventSchemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"baseEventSchemas.js","sourceRoot":"","sources":["../../../lib/events/baseEventSchemas.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEvB,sEAAsE;AACzD,QAAA,iBAAiB,GAAG,OAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAClD,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC9D,IAAI,EAAE,OAAC,CAAC,OAAO,CAAS,cAAc,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACnE,OAAO,EAAE,OAAC,CAAC,QAAQ,CAAC,OAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;CAC1E,CAAC,CAAA"}
1
+ {"version":3,"file":"baseEventSchemas.js","sourceRoot":"","sources":["../../../lib/events/baseEventSchemas.ts"],"names":[],"mappings":";;;;AACA,sDAAmB;AAGnB,qDAAqD;AACxC,QAAA,2BAA2B,GAAG,aAAC,CAAC,MAAM,CAAC;IAClD,EAAE,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAClD,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;CAC/D,CAAC,CAAA;AAEF,yEAAyE;AAC5D,QAAA,oCAAoC,GAAG,aAAC,CAAC,MAAM,CAAC;IAC3D,EAAE,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,QAAQ,EAAE;IAC7D,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE;CAC1E,CAAC,CAAA;AAEF,qDAAqD;AACxC,QAAA,iBAAiB,GAAG,aAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,aAAC,CAAC,OAAO,CAAS,cAAc,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACnE,OAAO,EAAE,aAAC,CAAC,QAAQ,CAAC,aAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;CAC1E,CAAC,CAAA;AAEF,sEAAsE;AACzD,QAAA,0BAA0B,GAAG,mCAA2B,CAAC,MAAM,CAC1E,yBAAiB,CAAC,KAAK,CACxB,CAAA;AACY,QAAA,2BAA2B,GAAG,4CAAoC,CAAC,MAAM,CACpF,yBAAiB,CAAC,KAAK,CACxB,CAAA;AAuBD,SAAgB,yBAAyB,CAIvC,IAAO,EAAE,aAAgB;IACzB,MAAM,UAAU,GAAG,aAAC,CAAC,MAAM,CAAC;QAC1B,IAAI,EAAE,aAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACrB,OAAO,EAAE,aAAa;KACvB,CAAC,CAAA;IAEF,MAAM,cAAc,GAAG,mCAA2B,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IACpE,MAAM,eAAe,GAAG,4CAAoC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IAE9E,OAAO;QACL,cAAc,EAAE,cAAc;QAC9B,eAAe,EAAE,eAAe;KACjC,CAAA;AACH,CAAC;AAjBD,8DAiBC"}
@@ -1,14 +1,17 @@
1
1
  import type { ZodObject, ZodTypeAny } from 'zod';
2
2
  import type z from 'zod';
3
- import type { BASE_EVENT_SCHEMA } from './baseEventSchemas';
3
+ import type { CONSUMER_BASE_EVENT_SCHEMA, PUBLISHER_BASE_EVENT_SCHEMA } from './baseEventSchemas';
4
4
  export type EventTypeNames<EventDefinition extends CommonEventDefinition> = CommonEventDefinitionSchemaType<EventDefinition>['type'];
5
5
  export type CommonEventDefinition = {
6
- schema: ZodObject<Omit<(typeof BASE_EVENT_SCHEMA)['shape'], 'payload'> & {
6
+ consumerSchema: ZodObject<Omit<(typeof CONSUMER_BASE_EVENT_SCHEMA)['shape'], 'payload'> & {
7
+ payload: ZodTypeAny;
8
+ }>;
9
+ publisherSchema: ZodObject<Omit<(typeof PUBLISHER_BASE_EVENT_SCHEMA)['shape'], 'payload'> & {
7
10
  payload: ZodTypeAny;
8
11
  }>;
9
12
  schemaVersion?: string;
10
13
  };
11
- export type CommonEventDefinitionSchemaType<T extends CommonEventDefinition> = z.infer<T['schema']>;
14
+ export type CommonEventDefinitionSchemaType<T extends CommonEventDefinition> = z.infer<T['consumerSchema']>;
12
15
  export type EventHandler<EventDefinitionSchema extends CommonEventDefinitionSchemaType<CommonEventDefinition> = CommonEventDefinitionSchemaType<CommonEventDefinition>> = {
13
16
  handleEvent(event: EventDefinitionSchema): void | Promise<void>;
14
17
  };
@@ -1,6 +1,6 @@
1
1
  import type { AnyEventHandler, CommonEventDefinition } from '../eventTypes';
2
2
  export declare class FakeListener<SupportedEvents extends CommonEventDefinition[]> implements AnyEventHandler<SupportedEvents> {
3
- receivedEvents: SupportedEvents[number]['schema']['_output'][];
3
+ receivedEvents: SupportedEvents[number]['consumerSchema']['_output'][];
4
4
  constructor(_supportedEvents: SupportedEvents);
5
- handleEvent(event: SupportedEvents[number]['schema']['_output']): void | Promise<void>;
5
+ handleEvent(event: SupportedEvents[number]['consumerSchema']['_output']): void | Promise<void>;
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FakeListener.js","sourceRoot":"","sources":["../../../../lib/events/fakes/FakeListener.ts"],"names":[],"mappings":";;;AAEA,MAAa,YAAY;IAGhB,cAAc,GAAmD,EAAE,CAAA;IAE1E,YAAY,gBAAiC;QAC3C,IAAI,CAAC,cAAc,GAAG,EAAE,CAAA;IAC1B,CAAC;IAED,WAAW,CAAC,KAAmD;QAC7D,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":";;;AAEA,MAAa,YAAY;IAGhB,cAAc,GAA2D,EAAE,CAAA;IAElF,YAAY,gBAAiC;QAC3C,IAAI,CAAC,cAAc,GAAG,EAAE,CAAA;IAC1B,CAAC;IAED,WAAW,CAAC,KAA2D;QACrE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;CACF;AAZD,oCAYC"}
@@ -1,4 +1,4 @@
1
- import type { BaseEventType } from '../events/baseEventSchemas';
1
+ import type { PublisherBaseEventType } from '../events/baseEventSchemas';
2
2
  import type { CommonEventDefinition } from '../events/eventTypes';
3
3
  import type { MessageMetadataType } from './baseMessageSchemas';
4
4
  export type IdGenerator = () => string;
@@ -10,7 +10,7 @@ export type MetadataFillerOptions = {
10
10
  timestampGenerator?: TimestampGenerator;
11
11
  defaultVersion?: string;
12
12
  };
13
- export type MetadataFiller<T extends BaseEventType = BaseEventType, D = CommonEventDefinition, M = MessageMetadataType> = {
13
+ export type MetadataFiller<T extends PublisherBaseEventType = PublisherBaseEventType, D = CommonEventDefinition, M = MessageMetadataType> = {
14
14
  produceMetadata(currentMessage: T, eventDefinition: D, precedingMessageMetadata?: M): M;
15
15
  produceId(): string;
16
16
  produceTimestamp(): string;
@@ -21,5 +21,5 @@ export declare class CommonMetadataFiller implements MetadataFiller {
21
21
  readonly produceTimestamp: TimestampGenerator;
22
22
  private readonly defaultVersion;
23
23
  constructor(options: MetadataFillerOptions);
24
- produceMetadata(_currentMessage: BaseEventType, eventDefinition: CommonEventDefinition, precedingMessageMetadata?: MessageMetadataType): MessageMetadataType;
24
+ produceMetadata(_currentMessage: PublisherBaseEventType, eventDefinition: CommonEventDefinition, precedingMessageMetadata?: MessageMetadataType): MessageMetadataType;
25
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MetadataFiller.js","sourceRoot":"","sources":["../../../lib/messages/MetadataFiller.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AA4BxC,MAAa,oBAAoB;IACd,SAAS,CAAQ;IAClB,SAAS,CAAa;IACtB,gBAAgB,CAAoB;IACnC,cAAc,CAAQ;IAEvC,YAAY,OAA8B;QACxC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QAClC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,OAAO,CAAA;QACvD,IAAI,CAAC,SAAS;YACZ,OAAO,CAAC,WAAW;gBACnB,CAAC,GAAG,EAAE;oBACJ,OAAO,IAAA,wBAAU,GAAE,CAAA;gBACrB,CAAC,CAAC,CAAA;QACJ,IAAI,CAAC,gBAAgB;YACnB,OAAO,CAAC,kBAAkB;gBAC1B,CAAC,GAAG,EAAE;oBACJ,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;gBACjC,CAAC,CAAC,CAAA;IACN,CAAC;IAED,eAAe,CACb,eAA8B,EAC9B,eAAsC,EACtC,wBAA8C;QAE9C,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,cAAc,EAAE,wBAAwB,EAAE,cAAc,IAAI,IAAI,CAAC,SAAS;YAC1E,aAAa,EAAE,eAAe,CAAC,aAAa,IAAI,IAAI,CAAC,cAAc;YACnE,aAAa,EAAE,wBAAwB,EAAE,aAAa,IAAI,IAAI,CAAC,SAAS,EAAE;SAC3E,CAAA;IACH,CAAC;CACF;AAjCD,oDAiCC"}
1
+ {"version":3,"file":"MetadataFiller.js","sourceRoot":"","sources":["../../../lib/messages/MetadataFiller.ts"],"names":[],"mappings":";;;AAAA,6CAAwC;AA4BxC,MAAa,oBAAoB;IACd,SAAS,CAAQ;IAClB,SAAS,CAAa;IACtB,gBAAgB,CAAoB;IACnC,cAAc,CAAQ;IAEvC,YAAY,OAA8B;QACxC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QAClC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,OAAO,CAAA;QACvD,IAAI,CAAC,SAAS;YACZ,OAAO,CAAC,WAAW;gBACnB,CAAC,GAAG,EAAE;oBACJ,OAAO,IAAA,wBAAU,GAAE,CAAA;gBACrB,CAAC,CAAC,CAAA;QACJ,IAAI,CAAC,gBAAgB;YACnB,OAAO,CAAC,kBAAkB;gBAC1B,CAAC,GAAG,EAAE;oBACJ,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;gBACjC,CAAC,CAAC,CAAA;IACN,CAAC;IAED,eAAe,CACb,eAAuC,EACvC,eAAsC,EACtC,wBAA8C;QAE9C,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,cAAc,EAAE,wBAAwB,EAAE,cAAc,IAAI,IAAI,CAAC,SAAS;YAC1E,aAAa,EAAE,eAAe,CAAC,aAAa,IAAI,IAAI,CAAC,cAAc;YACnE,aAAa,EAAE,wBAAwB,EAAE,aAAa,IAAI,IAAI,CAAC,SAAS,EAAE;SAC3E,CAAA;IACH,CAAC;CACF;AAjCD,oDAiCC"}
@@ -1,4 +1,6 @@
1
- import z from 'zod';
1
+ import z, { type ZodLiteral, type ZodObject, type ZodOptional, type ZodString } from 'zod';
2
+ import type { ZodRawShape } from 'zod/lib/types';
3
+ import type { CommonEventDefinition } from '../events/eventTypes';
2
4
  export declare const MESSAGE_METADATA_SCHEMA: z.ZodObject<{
3
5
  schemaVersion: z.ZodString;
4
6
  producedBy: z.ZodString;
@@ -15,12 +17,31 @@ export declare const MESSAGE_METADATA_SCHEMA: z.ZodObject<{
15
17
  originatedFrom: string;
16
18
  correlationId: string;
17
19
  }>;
18
- export declare const BASE_MESSAGE_SCHEMA: z.ZodObject<z.objectUtil.extendShape<{
20
+ export declare const MESSAGE_SCHEMA_EXTENSION: {
21
+ metadata: z.ZodOptional<z.ZodObject<{
22
+ schemaVersion: z.ZodString;
23
+ producedBy: z.ZodString;
24
+ originatedFrom: z.ZodString;
25
+ correlationId: z.ZodString;
26
+ }, "strip", z.ZodTypeAny, {
27
+ schemaVersion: string;
28
+ producedBy: string;
29
+ originatedFrom: string;
30
+ correlationId: string;
31
+ }, {
32
+ schemaVersion: string;
33
+ producedBy: string;
34
+ originatedFrom: string;
35
+ correlationId: string;
36
+ }>>;
37
+ };
38
+ export declare const BASE_MESSAGE_SCHEMA: z.ZodObject<z.objectUtil.extendShape<z.objectUtil.extendShape<{
19
39
  id: z.ZodString;
20
40
  timestamp: z.ZodString;
41
+ }, {
21
42
  type: z.ZodLiteral<string>;
22
43
  payload: z.ZodOptional<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
23
- }, {
44
+ }>, {
24
45
  metadata: z.ZodOptional<z.ZodObject<{
25
46
  schemaVersion: z.ZodString;
26
47
  producedBy: z.ZodString;
@@ -62,3 +83,32 @@ export declare const BASE_MESSAGE_SCHEMA: z.ZodObject<z.objectUtil.extendShape<{
62
83
  }>;
63
84
  export type BaseMessageType = z.infer<typeof BASE_MESSAGE_SCHEMA>;
64
85
  export type MessageMetadataType = z.infer<typeof MESSAGE_METADATA_SCHEMA>;
86
+ export type CommonMessageDefinitionSchemaType<T extends CommonEventDefinition> = z.infer<T['consumerSchema']>;
87
+ type ReturnType<T extends ZodObject<Y>, Y extends ZodRawShape, Z extends string> = {
88
+ consumerSchema: ZodObject<{
89
+ id: ZodString;
90
+ timestamp: ZodString;
91
+ type: ZodLiteral<Z>;
92
+ payload: T;
93
+ metadata: ZodOptional<ZodObject<{
94
+ schemaVersion: ZodString;
95
+ producedBy: ZodString;
96
+ originatedFrom: ZodString;
97
+ correlationId: ZodString;
98
+ }>>;
99
+ }>;
100
+ publisherSchema: ZodObject<{
101
+ id: ZodOptional<ZodString>;
102
+ timestamp: ZodOptional<ZodString>;
103
+ type: ZodLiteral<Z>;
104
+ payload: T;
105
+ metadata: ZodOptional<ZodObject<{
106
+ schemaVersion: ZodString;
107
+ producedBy: ZodString;
108
+ originatedFrom: ZodString;
109
+ correlationId: ZodString;
110
+ }>>;
111
+ }>;
112
+ };
113
+ export declare function enrichMessageSchemaWithBase<T extends ZodObject<Y>, Y extends ZodRawShape, Z extends string>(type: Z, payloadSchema: T): ReturnType<T, Y, Z>;
114
+ export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BASE_MESSAGE_SCHEMA = exports.MESSAGE_METADATA_SCHEMA = void 0;
3
+ exports.enrichMessageSchemaWithBase = exports.BASE_MESSAGE_SCHEMA = exports.MESSAGE_SCHEMA_EXTENSION = exports.MESSAGE_METADATA_SCHEMA = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const zod_1 = tslib_1.__importDefault(require("zod"));
6
6
  const baseEventSchemas_1 = require("../events/baseEventSchemas");
@@ -19,8 +19,22 @@ exports.MESSAGE_METADATA_SCHEMA = zod_1.default
19
19
  correlationId: zod_1.default.string().describe('unique identifier passed to all events in workflow chain'),
20
20
  })
21
21
  .describe('external message metadata');
22
- exports.BASE_MESSAGE_SCHEMA = baseEventSchemas_1.BASE_EVENT_SCHEMA.extend({
22
+ exports.MESSAGE_SCHEMA_EXTENSION = {
23
23
  // For internal domain events that did not originate within a message chain metadata field can be omitted, producer should then assume it is initiating a new chain
24
24
  metadata: exports.MESSAGE_METADATA_SCHEMA.optional(),
25
- });
25
+ };
26
+ exports.BASE_MESSAGE_SCHEMA = baseEventSchemas_1.CONSUMER_BASE_EVENT_SCHEMA.extend(exports.MESSAGE_SCHEMA_EXTENSION);
27
+ function enrichMessageSchemaWithBase(type, payloadSchema) {
28
+ const baseSchema = zod_1.default.object({
29
+ type: zod_1.default.literal(type),
30
+ payload: payloadSchema,
31
+ });
32
+ const consumerSchema = baseEventSchemas_1.GENERATED_BASE_EVENT_SCHEMA.merge(baseSchema).extend(exports.MESSAGE_SCHEMA_EXTENSION);
33
+ const publisherSchema = baseEventSchemas_1.OPTIONAL_GENERATED_BASE_EVENT_SCHEMA.merge(baseSchema).extend(exports.MESSAGE_SCHEMA_EXTENSION);
34
+ return {
35
+ consumerSchema: consumerSchema,
36
+ publisherSchema: publisherSchema,
37
+ };
38
+ }
39
+ exports.enrichMessageSchemaWithBase = enrichMessageSchemaWithBase;
26
40
  //# sourceMappingURL=baseMessageSchemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"baseMessageSchemas.js","sourceRoot":"","sources":["../../../lib/messages/baseMessageSchemas.ts"],"names":[],"mappings":";;;;AAAA,sDAAmB;AAEnB,iEAA8D;AAE9D,8HAA8H;AACjH,QAAA,uBAAuB,GAAG,aAAC;KACrC,MAAM,CAAC;IACN,aAAa,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACnE,2DAA2D;IAC3D,UAAU,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC/E,qHAAqH;IACrH,cAAc,EAAE,aAAC;SACd,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,8EAA8E,CAAC;IAC3F,sDAAsD;IACtD,aAAa,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;CAC/F,CAAC;KACD,QAAQ,CAAC,2BAA2B,CAAC,CAAA;AAE3B,QAAA,mBAAmB,GAAG,oCAAiB,CAAC,MAAM,CAAC;IAC1D,mKAAmK;IACnK,QAAQ,EAAE,+BAAuB,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAA"}
1
+ {"version":3,"file":"baseMessageSchemas.js","sourceRoot":"","sources":["../../../lib/messages/baseMessageSchemas.ts"],"names":[],"mappings":";;;;AAAA,sDAA0F;AAG1F,iEAImC;AAGnC,8HAA8H;AACjH,QAAA,uBAAuB,GAAG,aAAC;KACrC,MAAM,CAAC;IACN,aAAa,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACnE,2DAA2D;IAC3D,UAAU,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAC/E,qHAAqH;IACrH,cAAc,EAAE,aAAC;SACd,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,8EAA8E,CAAC;IAC3F,sDAAsD;IACtD,aAAa,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;CAC/F,CAAC;KACD,QAAQ,CAAC,2BAA2B,CAAC,CAAA;AAE3B,QAAA,wBAAwB,GAAG;IACtC,mKAAmK;IACnK,QAAQ,EAAE,+BAAuB,CAAC,QAAQ,EAAE;CAC7C,CAAA;AAEY,QAAA,mBAAmB,GAAG,6CAA0B,CAAC,MAAM,CAAC,gCAAwB,CAAC,CAAA;AA0C9F,SAAgB,2BAA2B,CAIzC,IAAO,EAAE,aAAgB;IACzB,MAAM,UAAU,GAAG,aAAC,CAAC,MAAM,CAAC;QAC1B,IAAI,EAAE,aAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACrB,OAAO,EAAE,aAAa;KACvB,CAAC,CAAA;IAEF,MAAM,cAAc,GAClB,8CAA2B,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,gCAAwB,CAAC,CAAA;IAChF,MAAM,eAAe,GACnB,uDAAoC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,gCAAwB,CAAC,CAAA;IAEzF,OAAO;QACL,cAAc,EAAE,cAAc;QAC9B,eAAe,EAAE,eAAe;KACjC,CAAA;AACH,CAAC;AAnBD,kEAmBC"}
@@ -0,0 +1,48 @@
1
+ import type { TypeOf, z } from 'zod';
2
+ import type { EventRegistry } from '../events/EventRegistry';
3
+ import type { PublisherBaseEventType } from '../events/baseEventSchemas';
4
+ import type { CommonEventDefinition } from '../events/eventTypes';
5
+ import type { MetadataFiller } from '../messages/MetadataFiller';
6
+ import type { AsyncPublisher, SyncPublisher } from '../types/MessageQueueTypes';
7
+ import type { CommonCreationConfigType, QueuePublisherOptions } from '../types/queueOptionsTypes';
8
+ export type MessagePublishType<T extends CommonEventDefinition> = z.infer<T['publisherSchema']>;
9
+ export type MessageSchemaType<T extends CommonEventDefinition> = z.infer<T['consumerSchema']>;
10
+ export type AbstractPublisherFactory<PublisherType extends AsyncPublisher<object, unknown> | SyncPublisher<object, unknown>, DependenciesType, CreationConfigType extends CommonCreationConfigType, QueueLocatorType extends object, EventType extends PublisherBaseEventType, OptionsType extends Omit<QueuePublisherOptions<CreationConfigType, QueueLocatorType, EventType>, 'messageSchemas' | 'creationConfig' | 'locatorConfig'>> = {
11
+ buildPublisher(dependencies: DependenciesType, options: OptionsType): PublisherType;
12
+ };
13
+ export declare abstract class AbstractPublisherManager<EventDefinitionType extends CommonEventDefinition, EventTargets extends string, PublisherType extends AsyncPublisher<object, unknown> | SyncPublisher<object, unknown>, DependenciesType, CreationConfigType extends CommonCreationConfigType, QueueLocatorType extends object, EventType extends PublisherBaseEventType, OptionsType extends Omit<QueuePublisherOptions<CreationConfigType, QueueLocatorType, EventType>, 'messageSchemas' | 'creationConfig' | 'locatorConfig'>, SupportedEventDefinitions extends EventDefinitionType[], MetadataType, MessageOptionsType> {
14
+ private readonly publisherFactory;
15
+ protected readonly newPublisherOptions: OptionsType;
16
+ protected readonly metadataFiller: MetadataFiller<z.infer<SupportedEventDefinitions[number]['consumerSchema']>, MetadataType>;
17
+ protected readonly metadataField: string;
18
+ protected readonly targetToEventMap: Record<EventTargets, EventDefinitionType[]>;
19
+ protected readonly isAsync: boolean;
20
+ protected targetToPublisherMap: Record<EventTargets, PublisherType>;
21
+ private readonly publisherDependencies;
22
+ protected constructor({ publisherFactory, newPublisherOptions, publisherDependencies, metadataFiller, eventRegistry, metadataField, isAsync, }: {
23
+ publisherFactory: AbstractPublisherFactory<PublisherType, DependenciesType, CreationConfigType, QueueLocatorType, EventType, OptionsType>;
24
+ newPublisherOptions: OptionsType;
25
+ publisherDependencies: DependenciesType;
26
+ metadataFiller: MetadataFiller<TypeOf<SupportedEventDefinitions[number]['consumerSchema']>, MetadataType>;
27
+ eventRegistry: EventRegistry<SupportedEventDefinitions>;
28
+ metadataField: string;
29
+ isAsync: boolean;
30
+ });
31
+ protected abstract resolveEventTarget(event: EventDefinitionType): EventTargets | undefined;
32
+ protected abstract resolveCreationConfig(eventTarget: string): CreationConfigType;
33
+ protected resolvePublisherConfigOverrides(_eventTarget: string): Partial<OptionsType>;
34
+ private registerEvents;
35
+ private registerPublishers;
36
+ injectPublisher(eventTarget: EventTargets, publisher: PublisherType): void;
37
+ injectEventDefinition(eventDefinition: EventDefinitionType): void;
38
+ publish(eventTarget: EventTargets, message: MessagePublishType<SupportedEventDefinitions[number]>, precedingEventMetadata?: MetadataType, messageOptions?: MessageOptionsType): Promise<MessageSchemaType<SupportedEventDefinitions[number]>>;
39
+ protected resolveMessage(messageDefinition: EventDefinitionType | undefined, message: MessagePublishType<SupportedEventDefinitions[number]>, precedingEventMetadata?: MetadataType): MessageSchemaType<SupportedEventDefinitions[number]>;
40
+ resolveBaseFields(): {
41
+ id: string;
42
+ timestamp: string;
43
+ };
44
+ /**
45
+ * @param eventTarget - topic or exchange
46
+ */
47
+ handlerSpy(eventTarget: EventTargets): import("./HandlerSpy").PublicHandlerSpy<object>;
48
+ }
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AbstractPublisherManager = void 0;
4
+ class AbstractPublisherManager {
5
+ publisherFactory;
6
+ newPublisherOptions;
7
+ metadataFiller;
8
+ metadataField;
9
+ // In this context "target" can be a topic or an exchange, depending on the transport
10
+ targetToEventMap = {};
11
+ isAsync;
12
+ targetToPublisherMap = {};
13
+ publisherDependencies;
14
+ constructor({ publisherFactory, newPublisherOptions, publisherDependencies, metadataFiller, eventRegistry, metadataField, isAsync, }) {
15
+ this.publisherFactory = publisherFactory;
16
+ this.newPublisherOptions = newPublisherOptions;
17
+ this.metadataFiller = metadataFiller;
18
+ this.metadataField = metadataField;
19
+ this.isAsync = isAsync;
20
+ this.publisherDependencies = publisherDependencies;
21
+ this.registerEvents(eventRegistry.supportedEvents);
22
+ this.registerPublishers();
23
+ }
24
+ resolvePublisherConfigOverrides(_eventTarget) {
25
+ return {};
26
+ }
27
+ registerEvents(events) {
28
+ for (const supportedEvent of events) {
29
+ const eventTarget = this.resolveEventTarget(supportedEvent);
30
+ if (!eventTarget) {
31
+ continue;
32
+ }
33
+ if (!this.targetToEventMap[eventTarget]) {
34
+ this.targetToEventMap[eventTarget] = [];
35
+ }
36
+ this.targetToEventMap[eventTarget].push(supportedEvent);
37
+ }
38
+ }
39
+ registerPublishers() {
40
+ for (const eventTarget in this.targetToEventMap) {
41
+ if (this.targetToPublisherMap[eventTarget]) {
42
+ continue;
43
+ }
44
+ const messageSchemas = this.targetToEventMap[eventTarget].map((entry) => {
45
+ return entry.consumerSchema;
46
+ });
47
+ const creationConfig = this.resolveCreationConfig(eventTarget);
48
+ const configOverrides = this.resolvePublisherConfigOverrides(eventTarget);
49
+ this.targetToPublisherMap[eventTarget] = this.publisherFactory.buildPublisher(this.publisherDependencies, {
50
+ ...this.newPublisherOptions,
51
+ creationConfig,
52
+ messageSchemas,
53
+ ...configOverrides,
54
+ });
55
+ }
56
+ }
57
+ injectPublisher(eventTarget, publisher) {
58
+ this.targetToPublisherMap[eventTarget] = publisher;
59
+ }
60
+ injectEventDefinition(eventDefinition) {
61
+ const eventTarget = this.resolveEventTarget(eventDefinition);
62
+ if (!eventTarget) {
63
+ throw new Error('eventTarget could not be resolved for the event');
64
+ }
65
+ if (!this.targetToEventMap[eventTarget]) {
66
+ this.targetToEventMap[eventTarget] = [];
67
+ }
68
+ this.targetToEventMap[eventTarget].push(eventDefinition);
69
+ }
70
+ async publish(eventTarget, message, precedingEventMetadata, messageOptions) {
71
+ const publisher = this.targetToPublisherMap[eventTarget];
72
+ if (!publisher) {
73
+ throw new Error(`No publisher for target ${eventTarget}`);
74
+ }
75
+ // ToDo optimize the lookup
76
+ const messageDefinition = this.targetToEventMap[eventTarget].find((entry) => entry.consumerSchema.shape.type.value === message.type);
77
+ const resolvedMessage = this.resolveMessage(messageDefinition, message, precedingEventMetadata);
78
+ if (this.isAsync) {
79
+ await publisher.publish(resolvedMessage, messageOptions);
80
+ }
81
+ else {
82
+ publisher.publish(resolvedMessage, messageOptions);
83
+ }
84
+ return resolvedMessage;
85
+ }
86
+ resolveMessage(messageDefinition, message, precedingEventMetadata) {
87
+ // @ts-ignore
88
+ const resolvedMetadata = message[this.metadataField]
89
+ ? // @ts-ignore
90
+ message[this.metadataField]
91
+ : // @ts-ignore
92
+ this.metadataFiller.produceMetadata(message, messageDefinition, precedingEventMetadata);
93
+ // @ts-ignore
94
+ return {
95
+ id: this.metadataFiller.produceId(),
96
+ timestamp: this.metadataFiller.produceTimestamp(),
97
+ ...message,
98
+ metadata: resolvedMetadata,
99
+ };
100
+ }
101
+ resolveBaseFields() {
102
+ return {
103
+ id: this.metadataFiller.produceId(),
104
+ timestamp: this.metadataFiller.produceTimestamp(),
105
+ };
106
+ }
107
+ /**
108
+ * @param eventTarget - topic or exchange
109
+ */
110
+ handlerSpy(eventTarget) {
111
+ const publisher = this.targetToPublisherMap[eventTarget];
112
+ if (!publisher) {
113
+ throw new Error(`No publisher for target ${eventTarget}`);
114
+ }
115
+ return publisher.handlerSpy;
116
+ }
117
+ }
118
+ exports.AbstractPublisherManager = AbstractPublisherManager;
119
+ //# sourceMappingURL=AbstractPublisherManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractPublisherManager.js","sourceRoot":"","sources":["../../../lib/queues/AbstractPublisherManager.ts"],"names":[],"mappings":"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"}
@@ -12,13 +12,15 @@ type CommonQueueLocator = {
12
12
  export declare abstract class AbstractQueueService<MessagePayloadSchemas extends object, MessageEnvelopeType extends object, DependenciesType extends QueueDependencies, QueueConfiguration extends object, QueueLocatorType extends object = CommonQueueLocator, OptionsType extends QueueOptions<QueueConfiguration, QueueLocatorType> = QueueOptions<QueueConfiguration, QueueLocatorType>, ExecutionContext = undefined, PrehandlerOutput = undefined> {
13
13
  protected readonly errorReporter: ErrorReporter;
14
14
  readonly logger: Logger;
15
- protected readonly messageTypeField: string;
16
15
  protected readonly messageIdField: string;
16
+ protected readonly messageTypeField: string;
17
+ protected readonly messageTimestampField: string;
17
18
  protected readonly logMessages: boolean;
18
19
  protected readonly creationConfig?: QueueConfiguration;
19
20
  protected readonly locatorConfig?: QueueLocatorType;
20
21
  protected readonly deletionConfig?: DeletionConfig;
21
22
  protected readonly _handlerSpy?: HandlerSpy<MessagePayloadSchemas>;
23
+ protected isInitted: boolean;
22
24
  get handlerSpy(): PublicHandlerSpy<MessagePayloadSchemas>;
23
25
  constructor({ errorReporter, logger }: DependenciesType, options: OptionsType);
24
26
  protected abstract resolveSchema(message: MessagePayloadSchemas): Either<Error, ZodSchema<MessagePayloadSchemas>>;
@@ -36,6 +38,7 @@ export declare abstract class AbstractQueueService<MessagePayloadSchemas extends
36
38
  protected handleMessageProcessed(message: MessagePayloadSchemas | null, processingResult: MessageProcessingResult, messageId?: string): void;
37
39
  protected processPrehandlersInternal(preHandlers: Prehandler<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>[], message: MessagePayloadSchemas): Promise<PrehandlerOutput>;
38
40
  protected preHandlerBarrierInternal<BarrierOutput>(barrier: BarrierCallback<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput, BarrierOutput> | undefined, message: MessagePayloadSchemas, executionContext: ExecutionContext, preHandlerOutput: PrehandlerOutput): Promise<BarrierResult<BarrierOutput>>;
41
+ protected tryToExtractTimestamp(message: MessagePayloadSchemas): Date | undefined;
39
42
  protected abstract resolveNextFunction(preHandlers: Prehandler<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>[], message: MessagePayloadSchemas, index: number, preHandlerOutput: PrehandlerOutput, resolve: (value: PrehandlerOutput | PromiseLike<PrehandlerOutput>) => void, reject: (err: Error) => void): (preHandlerResult: PrehandlerResult) => void;
40
43
  protected resolveNextPreHandlerFunctionInternal(preHandlers: Prehandler<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>[], executionContext: ExecutionContext, message: MessagePayloadSchemas, index: number, preHandlerOutput: PrehandlerOutput, resolve: (value: PrehandlerOutput | PromiseLike<PrehandlerOutput>) => void, reject: (err: Error) => void): (preHandlerResult: PrehandlerResult) => void;
41
44
  protected abstract processPrehandlers(message: MessagePayloadSchemas, messageType: string): Promise<PrehandlerOutput>;
@@ -3,17 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AbstractQueueService = void 0;
4
4
  const node_util_1 = require("node:util");
5
5
  const node_core_1 = require("@lokalise/node-core");
6
+ const toDateProcessor_1 = require("../utils/toDateProcessor");
6
7
  const HandlerSpy_1 = require("./HandlerSpy");
7
8
  class AbstractQueueService {
8
9
  errorReporter;
9
10
  logger;
10
- messageTypeField;
11
11
  messageIdField;
12
+ messageTypeField;
13
+ messageTimestampField;
12
14
  logMessages;
13
15
  creationConfig;
14
16
  locatorConfig;
15
17
  deletionConfig;
16
18
  _handlerSpy;
19
+ isInitted;
17
20
  get handlerSpy() {
18
21
  if (!this._handlerSpy) {
19
22
  throw new Error('HandlerSpy was not instantiated, please pass `handlerSpy` parameter during queue service creation.');
@@ -23,13 +26,15 @@ class AbstractQueueService {
23
26
  constructor({ errorReporter, logger }, options) {
24
27
  this.errorReporter = errorReporter;
25
28
  this.logger = logger;
26
- this.messageTypeField = options.messageTypeField;
27
29
  this.messageIdField = options.messageIdField ?? 'id';
30
+ this.messageTypeField = options.messageTypeField;
31
+ this.messageTimestampField = options.messageTimestampField ?? 'timestamp';
28
32
  this.creationConfig = options.creationConfig;
29
33
  this.locatorConfig = options.locatorConfig;
30
34
  this.deletionConfig = options.deletionConfig;
31
35
  this.logMessages = options.logMessages ?? false;
32
36
  this._handlerSpy = (0, HandlerSpy_1.resolveHandlerSpy)(options);
37
+ this.isInitted = false;
33
38
  }
34
39
  /**
35
40
  * Format message for logging
@@ -103,6 +108,18 @@ class AbstractQueueService {
103
108
  // @ts-ignore
104
109
  return await barrier(message, executionContext, preHandlerOutput);
105
110
  }
111
+ tryToExtractTimestamp(message) {
112
+ // @ts-ignore
113
+ if (this.messageTimestampField in message) {
114
+ // @ts-ignore
115
+ const res = (0, toDateProcessor_1.toDatePreprocessor)(message[this.messageTimestampField]);
116
+ if (!(res instanceof Date)) {
117
+ throw new Error(`${this.messageTimestampField} invalid type`);
118
+ }
119
+ return res;
120
+ }
121
+ return undefined;
122
+ }
106
123
  // eslint-disable-next-line max-params
107
124
  resolveNextPreHandlerFunctionInternal(preHandlers, executionContext, message, index, preHandlerOutput, resolve, reject) {
108
125
  return (preHandlerResult) => {
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractQueueService.js","sourceRoot":"","sources":["../../../lib/queues/AbstractQueueService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AbstractQueueService.js","sourceRoot":"","sources":["../../../lib/queues/AbstractQueueService.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,17 @@
1
1
  import type { TransactionObservabilityManager } from '@lokalise/node-core';
2
2
  import type { ZodSchema } from 'zod';
3
+ import type { PublicHandlerSpy } from '../queues/HandlerSpy';
3
4
  export interface QueueConsumer {
4
5
  start(): Promise<unknown>;
5
6
  close(): Promise<unknown>;
6
7
  }
7
8
  export type MessageProcessingResult = 'retryLater' | 'consumed' | 'published' | 'error' | 'invalid_message';
8
- export interface SyncPublisher<MessagePayloadType> {
9
- publish(message: MessagePayloadType): void;
9
+ export interface SyncPublisher<MessagePayloadType extends object, MessageOptions> {
10
+ handlerSpy: PublicHandlerSpy<MessagePayloadType>;
11
+ publish(message: MessagePayloadType, options: MessageOptions): void;
10
12
  }
11
- export interface AsyncPublisher<MessagePayloadType, MessageOptions> {
13
+ export interface AsyncPublisher<MessagePayloadType extends object, MessageOptions> {
14
+ handlerSpy: PublicHandlerSpy<MessagePayloadType>;
12
15
  publish(message: MessagePayloadType, options: MessageOptions): Promise<unknown>;
13
16
  }
14
17
  export { TransactionObservabilityManager };
@@ -14,11 +14,12 @@ export type QueueConsumerDependencies = {
14
14
  export type CommonQueueOptions = {
15
15
  messageTypeField: string;
16
16
  messageIdField?: string;
17
+ messageTimestampField?: string;
17
18
  handlerSpy?: HandlerSpy<object> | HandlerSpyParams | boolean;
18
19
  logMessages?: boolean;
19
20
  deletionConfig?: DeletionConfig;
20
21
  };
21
- type CommonCreationConfigType = {
22
+ export type CommonCreationConfigType = {
22
23
  updateAttributesIfExists?: boolean;
23
24
  };
24
25
  export type DeletionConfig = {
@@ -44,5 +45,6 @@ export type DeadLetterQueueOptions<CreationConfigType extends object, QueueLocat
44
45
  export type QueueConsumerOptions<CreationConfigType extends object, QueueLocatorType extends object, DeadLetterQueueIntegrationOptions extends object, MessagePayloadSchemas extends object, ExecutionContext, PrehandlerOutput = undefined, DeadLetterQueueCreationConfigType extends object = CreationConfigType, DeadLetterQueueQueueLocatorType extends object = QueueLocatorType> = QueueOptions<CreationConfigType, QueueLocatorType> & {
45
46
  handlers: MessageHandlerConfig<MessagePayloadSchemas, ExecutionContext, PrehandlerOutput>[];
46
47
  deadLetterQueue?: DeadLetterQueueOptions<DeadLetterQueueCreationConfigType, DeadLetterQueueQueueLocatorType, DeadLetterQueueIntegrationOptions>;
48
+ maxRetryDuration?: number;
47
49
  };
48
50
  export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Check if the retry date is exceeded
3
+ *
4
+ * @param timestamp
5
+ * @param maxRetryDuration max retry duration in seconds
6
+ */
7
+ export declare const isRetryDateExceeded: (timestamp: Date, maxRetryDuration: number) => boolean;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isRetryDateExceeded = void 0;
4
+ /**
5
+ * Check if the retry date is exceeded
6
+ *
7
+ * @param timestamp
8
+ * @param maxRetryDuration max retry duration in seconds
9
+ */
10
+ const isRetryDateExceeded = (timestamp, maxRetryDuration) => {
11
+ const lastRetryDate = new Date(timestamp.getTime() + maxRetryDuration * 1000);
12
+ return new Date() > lastRetryDate;
13
+ };
14
+ exports.isRetryDateExceeded = isRetryDateExceeded;
15
+ //# sourceMappingURL=dateUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateUtils.js","sourceRoot":"","sources":["../../../lib/utils/dateUtils.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACI,MAAM,mBAAmB,GAAG,CAAC,SAAe,EAAE,gBAAwB,EAAW,EAAE;IACxF,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,gBAAgB,GAAG,IAAI,CAAC,CAAA;IAC7E,OAAO,IAAI,IAAI,EAAE,GAAG,aAAa,CAAA;AACnC,CAAC,CAAA;AAHY,QAAA,mBAAmB,uBAG/B"}
@@ -1,4 +1,24 @@
1
1
  import type { Either, ErrorResolver } from '@lokalise/node-core';
2
2
  import type { ZodSchema } from 'zod';
3
3
  import type { MessageInvalidFormatError, MessageValidationError } from '../errors/Errors';
4
- export declare function parseMessage<T extends object>(messagePayload: unknown, schema: ZodSchema<T>, errorProcessor: ErrorResolver): Either<MessageInvalidFormatError | MessageValidationError, T>;
4
+ export type ParseMessageResult<T> = {
5
+ originalMessage: T;
6
+ parsedMessage: T;
7
+ };
8
+ /**
9
+ * Parses a message payload using the provided schema and error processor to handle validation.
10
+ * The function attempts to parse the message payload based on the provided schema.
11
+ * If successful, it returns a success object containing the parsed message along with the original message.
12
+ * If an error occurs during parsing, it returns an error object processed by the error processor.
13
+ *
14
+ * In success case, it returns original and parsed messages because zod is cutting off additional fields that are not
15
+ * defined in the schema, and we might add extra fields on publish to be used on the consumer side.
16
+ * eg: timestamp to avoid infinite retries on the same message.
17
+ *
18
+ * @param messagePayload The message payload to be parsed.
19
+ * @param schema The Zod schema used for parsing the message payload.
20
+ * @param errorProcessor An error resolver function used to process any validation errors encountered during parsing.
21
+ *
22
+ * @returns Either an object indicating a successful parsing result or an error encountered during parsing.
23
+ */
24
+ export declare function parseMessage<T extends object>(messagePayload: unknown, schema: ZodSchema<T>, errorProcessor: ErrorResolver): Either<MessageInvalidFormatError | MessageValidationError, ParseMessageResult<T>>;
@@ -1,11 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseMessage = void 0;
4
+ /**
5
+ * Parses a message payload using the provided schema and error processor to handle validation.
6
+ * The function attempts to parse the message payload based on the provided schema.
7
+ * If successful, it returns a success object containing the parsed message along with the original message.
8
+ * If an error occurs during parsing, it returns an error object processed by the error processor.
9
+ *
10
+ * In success case, it returns original and parsed messages because zod is cutting off additional fields that are not
11
+ * defined in the schema, and we might add extra fields on publish to be used on the consumer side.
12
+ * eg: timestamp to avoid infinite retries on the same message.
13
+ *
14
+ * @param messagePayload The message payload to be parsed.
15
+ * @param schema The Zod schema used for parsing the message payload.
16
+ * @param errorProcessor An error resolver function used to process any validation errors encountered during parsing.
17
+ *
18
+ * @returns Either an object indicating a successful parsing result or an error encountered during parsing.
19
+ */
4
20
  function parseMessage(messagePayload, schema, errorProcessor) {
5
21
  try {
6
- return {
7
- result: schema.parse(messagePayload),
8
- };
22
+ const parsedMessage = schema.parse(messagePayload);
23
+ return { result: { parsedMessage, originalMessage: messagePayload } };
9
24
  }
10
25
  catch (exception) {
11
26
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"parseUtils.js","sourceRoot":"","sources":["../../../lib/utils/parseUtils.ts"],"names":[],"mappings":";;;AAKA,SAAgB,YAAY,CAC1B,cAAuB,EACvB,MAAoB,EACpB,cAA6B;IAE7B,IAAI,CAAC;QACH,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC;SACrC,CAAA;IACH,CAAC;IAAC,OAAO,SAAS,EAAE,CAAC;QACnB,OAAO;YACL,KAAK,EAAE,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC;SAC9C,CAAA;IACH,CAAC;AACH,CAAC;AAdD,oCAcC"}
1
+ {"version":3,"file":"parseUtils.js","sourceRoot":"","sources":["../../../lib/utils/parseUtils.ts"],"names":[],"mappings":";;;AAUA;;;;;;;;;;;;;;;GAeG;AACH,SAAgB,YAAY,CAC1B,cAAuB,EACvB,MAAoB,EACpB,cAA6B;IAE7B,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;QAElD,OAAO,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE,cAAmB,EAAE,EAAE,CAAA;IAC5E,CAAC;IAAC,OAAO,SAAS,EAAE,CAAC;QACnB,OAAO;YACL,KAAK,EAAE,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC;SAC9C,CAAA;IACH,CAAC;AACH,CAAC;AAdD,oCAcC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@message-queue-toolkit/core",
3
- "version": "12.0.0",
3
+ "version": "13.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",
@@ -28,7 +28,7 @@
28
28
  "@lokalise/node-core": "^9.17.0",
29
29
  "fast-equals": "^5.0.1",
30
30
  "toad-cache": "^3.7.0",
31
- "zod": "^3.23.6"
31
+ "zod": "^3.23.8"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@types/node": "^20.12.8",