@nmshd/consumption 2.0.0-beta.2 → 2.0.0-beta.5

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 (22) hide show
  1. package/dist/buildInformation.js +4 -4
  2. package/dist/consumption/ConsumptionErrors.d.ts +11 -0
  3. package/dist/consumption/ConsumptionErrors.js +28 -1
  4. package/dist/consumption/ConsumptionErrors.js.map +1 -1
  5. package/dist/modules/requests/incoming/DecideRequestParametersValidator.d.ts +0 -1
  6. package/dist/modules/requests/incoming/DecideRequestParametersValidator.js +10 -13
  7. package/dist/modules/requests/incoming/DecideRequestParametersValidator.js.map +1 -1
  8. package/dist/modules/requests/incoming/IncomingRequestsController.js +14 -14
  9. package/dist/modules/requests/incoming/IncomingRequestsController.js.map +1 -1
  10. package/dist/modules/requests/incoming/complete/CompleteIncomingRequestParameters.d.ts +2 -2
  11. package/dist/modules/requests/incoming/complete/CompleteIncomingRequestParameters.js +1 -1
  12. package/dist/modules/requests/incoming/complete/CompleteIncomingRequestParameters.js.map +1 -1
  13. package/dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.d.ts +1 -2
  14. package/dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js +7 -18
  15. package/dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js.map +1 -1
  16. package/dist/modules/requests/itemProcessors/proposeAttribute/ProposeAttributeRequestItemProcessor.js +2 -2
  17. package/dist/modules/requests/itemProcessors/proposeAttribute/ProposeAttributeRequestItemProcessor.js.map +1 -1
  18. package/lib-web/nmshd.consumption.js +101 -62
  19. package/lib-web/nmshd.consumption.js.map +1 -1
  20. package/lib-web/nmshd.consumption.min.js +1 -1
  21. package/lib-web/nmshd.consumption.min.js.map +1 -1
  22. package/package.json +8 -8
@@ -17,10 +17,10 @@ const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
17
17
  const crypto_1 = __webpack_require__(/*! @nmshd/crypto */ "@nmshd/crypto");
18
18
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
19
19
  exports.buildInformation = {
20
- version: "2.0.0-beta.2",
21
- build: "52",
22
- date: "2022-07-21T12:41:03+00:00",
23
- commit: "5ae49a7cb3ded2b90958e44e4f3e03599ba6cc9c",
20
+ version: "2.0.0-beta.5",
21
+ build: "55",
22
+ date: "2022-08-02T14:10:27+00:00",
23
+ commit: "a910348a6c8c7ba541017cbc90d2fba2add16b68",
24
24
  dependencies: {"@js-soft/docdb-querytranslator":"^1.1.0","ts-simple-nameof":"^1.3.1"},
25
25
  libraries: {
26
26
  transport: transport_1.buildInformation,
@@ -168,6 +168,7 @@ var ConsumptionControllerName;
168
168
 
169
169
  Object.defineProperty(exports, "__esModule", ({ value: true }));
170
170
  exports.ConsumptionErrors = void 0;
171
+ const ts_utils_1 = __webpack_require__(/*! @js-soft/ts-utils */ "./node_modules/@js-soft/ts-utils/dist/index.js");
171
172
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
172
173
  class Attributes {
173
174
  attributeExists(id) {
@@ -178,16 +179,42 @@ class Attributes {
178
179
  }
179
180
  }
180
181
  class Requests {
182
+ constructor() {
183
+ this.decideValidation = new Requests._decideValidation();
184
+ }
181
185
  requestExists(id) {
182
186
  return new transport_1.CoreError("error.consumption.requests.requestExists", `Request with id ${id} already exists and can't be created.`);
183
187
  }
184
188
  unexpectedErrorDuringRequestItemProcessing(error) {
185
- return new transport_1.CoreError("error.consumption.requests.unexpectedErrorDuringRequestItemProcessing", error instanceof Error ? error.message : "Unknown error: '${JSON.stringify(e)'");
189
+ return new transport_1.CoreError("error.consumption.requests.unexpectedErrorDuringRequestItemProcessing", error instanceof Error ? error.message : "Unknown error: '${JSON.stringify(e)'", undefined, undefined, error);
190
+ }
191
+ servalErrorDuringRequestItemProcessing(error) {
192
+ return new transport_1.CoreError("error.consumption.requests.servalErrorDuringRequestItemProcessing", error instanceof Error ? error.message : "Serval error: '${JSON.stringify(e)'", undefined, undefined, error);
186
193
  }
187
194
  invalidRequestItem(message) {
188
195
  return new transport_1.CoreError("error.consumption.requests.invalidRequestItem", message);
189
196
  }
190
197
  }
198
+ Requests._decideValidation = class {
199
+ invalidRequestId() {
200
+ return new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidRequestId", "The id of the Request does not match the id of the Response");
201
+ }
202
+ invalidNumberOfItems(message) {
203
+ return new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidNumberOfItems", message);
204
+ }
205
+ itemAcceptedButParentNotAccepted(message) {
206
+ return new ts_utils_1.ApplicationError("error.requests.decide.validation.itemAcceptedButParentNotAccepted", message);
207
+ }
208
+ mustBeAcceptedItemNotAccepted(message) {
209
+ return new ts_utils_1.ApplicationError("error.requests.decide.validation.mustBeAcceptedItemNotAccepted", message);
210
+ }
211
+ requestItemAnsweredAsRequestItemGroup() {
212
+ return new ts_utils_1.ApplicationError("error.requests.decide.validation.requestItemAnsweredAsRequestItemGroup", "The RequestItem was answered as a RequestItemGroup.");
213
+ }
214
+ requestItemGroupAnsweredAsRequestItem() {
215
+ return new ts_utils_1.ApplicationError("error.requests.decide.validation.requestItemGroupAnsweredAsRequestItem", "The RequestItemGroup was answered as a RequestItem.");
216
+ }
217
+ };
191
218
  class RelationshipInfo {
192
219
  relationshipInfoExists(relationshipId) {
193
220
  return new transport_1.CoreError("error.consumption.relationshipInfos.relationshipInfoExists", `RelationshipInfo for Relationship ${relationshipId} already exists.`);
@@ -1498,19 +1525,19 @@ __exportStar(__webpack_require__(/*! ./OutgoingRequestStatusChangedEvent */ "./d
1498
1525
 
1499
1526
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1500
1527
  exports.DecideRequestParametersValidator = void 0;
1501
- const ts_utils_1 = __webpack_require__(/*! @js-soft/ts-utils */ "./node_modules/@js-soft/ts-utils/dist/index.js");
1502
1528
  const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
1503
1529
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
1530
+ const consumption_1 = __webpack_require__(/*! ../../../consumption */ "./dist/consumption/index.js");
1504
1531
  const ValidationResult_1 = __webpack_require__(/*! ../itemProcessors/ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
1505
1532
  const DecideRequestItemGroupParameters_1 = __webpack_require__(/*! ./decide/DecideRequestItemGroupParameters */ "./dist/modules/requests/incoming/decide/DecideRequestItemGroupParameters.js");
1506
1533
  const DecideRequestItemParameters_1 = __webpack_require__(/*! ./decide/DecideRequestItemParameters */ "./dist/modules/requests/incoming/decide/DecideRequestItemParameters.js");
1507
1534
  class DecideRequestParametersValidator {
1508
1535
  validate(params, request) {
1509
1536
  if (!request.id.equals(transport_1.CoreId.from(params.requestId))) {
1510
- return ValidationResult_1.ValidationResult.error(new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidRequestId", "The id of the Request does not match the id of the Response"));
1537
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.invalidRequestId());
1511
1538
  }
1512
1539
  if (params.items.length !== request.content.items.length) {
1513
- return ValidationResult_1.ValidationResult.error(this.invalidNumberOfItemsError("Number of items in Request and Response do not match"));
1540
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.invalidNumberOfItems("Number of items in Request and Response do not match"));
1514
1541
  }
1515
1542
  const validationResults = request.content.items.map((requestItem, index) => this.checkItemOrGroup(requestItem, params.items[index], params.accept));
1516
1543
  return ValidationResult_1.ValidationResult.fromItems(validationResults);
@@ -1523,36 +1550,33 @@ class DecideRequestParametersValidator {
1523
1550
  }
1524
1551
  checkItem(requestItem, response, isParentAccepted) {
1525
1552
  if ((0, DecideRequestItemGroupParameters_1.isDecideRequestItemGroupParametersJSON)(response)) {
1526
- return ValidationResult_1.ValidationResult.error(new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidResponseItemForRequestItem", "The RequestItem was answered as a RequestItemGroup."));
1553
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.requestItemAnsweredAsRequestItemGroup());
1527
1554
  }
1528
1555
  if (!isParentAccepted && response.accept) {
1529
- return ValidationResult_1.ValidationResult.error(new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidResponseItemForRequestItem", "The RequestItem was accepted, but the parent was not accepted."));
1556
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.itemAcceptedButParentNotAccepted("The RequestItem was accepted, but the parent was not accepted."));
1530
1557
  }
1531
1558
  if (isParentAccepted && requestItem.mustBeAccepted && !response.accept) {
1532
- return ValidationResult_1.ValidationResult.error(new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidResponseItemForRequestItem", "The RequestItem is flagged as 'mustBeAccepted', but it was not accepted."));
1559
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.mustBeAcceptedItemNotAccepted("The RequestItem is flagged as 'mustBeAccepted', but it was not accepted."));
1533
1560
  }
1534
1561
  return ValidationResult_1.ValidationResult.success();
1535
1562
  }
1536
1563
  checkItemGroup(requestItemGroup, responseItemGroup, isParentAccepted) {
1537
1564
  if ((0, DecideRequestItemParameters_1.isDecideRequestItemParametersJSON)(responseItemGroup)) {
1538
- return ValidationResult_1.ValidationResult.error(new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidResponseItemForRequestItem", "The RequestItemGroup was answered as a RequestItem."));
1565
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.requestItemGroupAnsweredAsRequestItem());
1539
1566
  }
1540
1567
  if (responseItemGroup.items.length !== requestItemGroup.items.length) {
1541
- return ValidationResult_1.ValidationResult.error(this.invalidNumberOfItemsError("Number of items in RequestItemGroup and ResponseItemGroup do not match"));
1568
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.invalidNumberOfItems("Number of items in RequestItemGroup and ResponseItemGroup do not match"));
1542
1569
  }
1543
1570
  const isGroupAccepted = responseItemGroup.items.some((value) => value.accept);
1544
1571
  if (!isParentAccepted && isGroupAccepted) {
1545
- return ValidationResult_1.ValidationResult.error(new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidResponseItemForRequestItem", "The RequestItemGroup was accepted, but the parent was not accepted."));
1572
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.itemAcceptedButParentNotAccepted("The RequestItemGroup was accepted, but the parent was not accepted."));
1546
1573
  }
1547
1574
  if (isParentAccepted && requestItemGroup.mustBeAccepted && !isGroupAccepted) {
1548
- return ValidationResult_1.ValidationResult.error(new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidResponseItemForRequestItem", "The RequestItemGroup is flagged as 'mustBeAccepted', but it was not accepted. Please accept all 'mustBeAccepted' items in this group."));
1575
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.mustBeAcceptedItemNotAccepted("The RequestItemGroup is flagged as 'mustBeAccepted', but it was not accepted. Please accept all 'mustBeAccepted' items in this group."));
1549
1576
  }
1550
1577
  const validationResults = requestItemGroup.items.map((requestItem, index) => this.checkItem(requestItem, responseItemGroup.items[index], isGroupAccepted));
1551
1578
  return ValidationResult_1.ValidationResult.fromItems(validationResults);
1552
1579
  }
1553
- invalidNumberOfItemsError(message) {
1554
- return new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidNumberOfItems", message);
1555
- }
1556
1580
  }
1557
1581
  exports.DecideRequestParametersValidator = DecideRequestParametersValidator;
1558
1582
  //# sourceMappingURL=DecideRequestParametersValidator.js.map
@@ -1569,6 +1593,7 @@ exports.DecideRequestParametersValidator = DecideRequestParametersValidator;
1569
1593
 
1570
1594
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1571
1595
  exports.IncomingRequestsController = void 0;
1596
+ const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
1572
1597
  const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
1573
1598
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
1574
1599
  const consumption_1 = __webpack_require__(/*! ../../../consumption */ "./dist/consumption/index.js");
@@ -1721,12 +1746,14 @@ class IncomingRequestsController extends consumption_1.ConsumptionBaseController
1721
1746
  async canDecideItem(params, requestItem, request) {
1722
1747
  const processor = this.processorRegistry.getProcessorForItem(requestItem);
1723
1748
  try {
1724
- if (params.accept) {
1749
+ if (params.accept)
1725
1750
  return await processor.canAccept(requestItem, params, request);
1726
- }
1727
1751
  return await processor.canReject(requestItem, params, request);
1728
1752
  }
1729
1753
  catch (e) {
1754
+ if (e instanceof ts_serval_1.ServalError) {
1755
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.servalErrorDuringRequestItemProcessing(e));
1756
+ }
1730
1757
  return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.unexpectedErrorDuringRequestItemProcessing(e));
1731
1758
  }
1732
1759
  }
@@ -1815,20 +1842,17 @@ class IncomingRequestsController extends consumption_1.ConsumptionBaseController
1815
1842
  throw new Error("Cannot decide own Request");
1816
1843
  }
1817
1844
  this.assertRequestStatus(request, LocalRequestStatus_1.LocalRequestStatus.Decided);
1818
- let responseSource;
1819
- if (parsedParams.responseSourceObject instanceof transport_1.Message) {
1820
- responseSource = "Message";
1845
+ const requestIsRejected = request.response.content.result === content_1.ResponseResult.Rejected;
1846
+ const requestIsFromTemplate = request.source.type === "RelationshipTemplate";
1847
+ if (parsedParams.responseSourceObject) {
1848
+ request.response.source = LocalResponse_1.LocalResponseSource.from({
1849
+ type: parsedParams.responseSourceObject instanceof transport_1.Message ? "Message" : "RelationshipChange",
1850
+ reference: parsedParams.responseSourceObject.id
1851
+ });
1821
1852
  }
1822
- else if (parsedParams.responseSourceObject instanceof transport_1.RelationshipChange) {
1823
- responseSource = "RelationshipChange";
1853
+ else if (!requestIsRejected || !requestIsFromTemplate) {
1854
+ throw new Error("A Request can only be completed without a responseSource if the Request is rejected and the Request is from a Relationship Template");
1824
1855
  }
1825
- else {
1826
- throw new Error("Unknown response source");
1827
- }
1828
- request.response.source = LocalResponse_1.LocalResponseSource.from({
1829
- type: responseSource,
1830
- reference: parsedParams.responseSourceObject.id
1831
- });
1832
1856
  request.changeStatus(LocalRequestStatus_1.LocalRequestStatus.Completed);
1833
1857
  await this.update(request);
1834
1858
  this.eventBus.publish(new events_1.IncomingRequestStatusChangedEvent(this.identity.address.toString(), {
@@ -1947,7 +1971,7 @@ __decorate([
1947
1971
  ], CompleteIncomingRequestParameters.prototype, "requestId", void 0);
1948
1972
  __decorate([
1949
1973
  (0, ts_serval_1.serialize)({ unionTypes: [transport_1.Message, transport_1.RelationshipChange] }),
1950
- (0, ts_serval_1.validate)(),
1974
+ (0, ts_serval_1.validate)({ nullable: true }),
1951
1975
  __metadata("design:type", Object)
1952
1976
  ], CompleteIncomingRequestParameters.prototype, "responseSourceObject", void 0);
1953
1977
  exports.CompleteIncomingRequestParameters = CompleteIncomingRequestParameters;
@@ -2399,30 +2423,19 @@ const consumption_1 = __webpack_require__(/*! ../../../../consumption */ "./dist
2399
2423
  const GenericRequestItemProcessor_1 = __webpack_require__(/*! ../GenericRequestItemProcessor */ "./dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js");
2400
2424
  const ValidationResult_1 = __webpack_require__(/*! ../ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
2401
2425
  class CreateAttributeRequestItemProcessor extends GenericRequestItemProcessor_1.GenericRequestItemProcessor {
2402
- canCreateOutgoingRequestItem(requestItem, _request, recipient) {
2403
- const recipientIsOwnerOfTheAttribute = requestItem.attribute.owner.equals(recipient);
2404
- // When the owner of the Attribute is not the recipient of the Request, this means that
2405
- // we need to set the sourceAttributeId, because we have to set shareInfo as soon as the
2406
- // RequestItem was accepted.
2407
- if (!recipientIsOwnerOfTheAttribute && !requestItem.sourceAttributeId) {
2408
- return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("'sourceAttributeId' cannot be undefined when sending an attribute that is not owned by the recipient."));
2426
+ canCreateOutgoingRequestItem(requestItem, _request, _recipient) {
2427
+ if (requestItem.attribute.owner.toString() !== "" &&
2428
+ !requestItem.attribute.owner.equals(this.currentIdentityAddress)) {
2429
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("The owner of the given `attribute` can only be an empty string. This is because you can only send Attributes where the recipient of the Request is the owner anyway. And in order to avoid mistakes, the owner will be automatically filled for you."));
2409
2430
  }
2410
2431
  if (requestItem.attribute instanceof content_1.IdentityAttribute) {
2411
2432
  return this.canCreateRequestItemWithIdentityAttribute(requestItem);
2412
2433
  }
2413
- return this.canCreateRequestItemWithRelationshipAttribute(requestItem);
2414
- }
2415
- canCreateRequestItemWithIdentityAttribute(requestItem) {
2416
- const iAmOwnerOfTheAttribute = this.accountController.identity.isMe(requestItem.attribute.owner);
2417
- if (!iAmOwnerOfTheAttribute) {
2418
- return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem(`Cannot send Identity Attributes of which you are not the owner via ${content_1.CreateAttributeRequestItem.name}. Consider using a ${content_1.ProposeAttributeRequestItem.name} instead.`));
2419
- }
2420
2434
  return ValidationResult_1.ValidationResult.success();
2421
2435
  }
2422
- canCreateRequestItemWithRelationshipAttribute(requestItem) {
2423
- const iAmOwnerOfTheAttribute = this.accountController.identity.isMe(requestItem.attribute.owner);
2424
- if (!iAmOwnerOfTheAttribute) {
2425
- return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("Cannot send Relationship Attributes of which you are not the owner."));
2436
+ canCreateRequestItemWithIdentityAttribute(requestItem) {
2437
+ if (!requestItem.sourceAttributeId) {
2438
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("'sourceAttributeId' cannot be undefined when sending an Identity Attribute."));
2426
2439
  }
2427
2440
  return ValidationResult_1.ValidationResult.success();
2428
2441
  }
@@ -2557,7 +2570,7 @@ class ProposeAttributeRequestItemProcessor extends GenericRequestItemProcessor_1
2557
2570
  }
2558
2571
  validateAttribute(attribute) {
2559
2572
  if (attribute.owner.toString() !== "") {
2560
- return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("The owner of the given attribute can only be an empty string. This is because you can only propose Attributes where the recipient of the Request is the owner anyway. And in order to avoid mistakes, the owner will be automatically filled for you."));
2573
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("The owner of the given `attribute` can only be an empty string. This is because you can only propose Attributes where the recipient of the Request is the owner anyway. And in order to avoid mistakes, the owner will be automatically filled for you."));
2561
2574
  }
2562
2575
  return ValidationResult_1.ValidationResult.success();
2563
2576
  }
@@ -2567,7 +2580,7 @@ class ProposeAttributeRequestItemProcessor extends GenericRequestItemProcessor_1
2567
2580
  return commonQueryValidationResult;
2568
2581
  }
2569
2582
  if (requestItem.query instanceof content_1.RelationshipAttributeQuery && requestItem.query.owner.toString() !== "") {
2570
- return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("The owner of the given query can only be an empty string. This is because you can only propose Attributes where the recipient of the Request is the owner anyway. And in order to avoid mistakes, the owner will be automatically filled for you."));
2583
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("The owner of the given `query` can only be an empty string. This is because you can only propose Attributes where the recipient of the Request is the owner anyway. And in order to avoid mistakes, the owner will be automatically filled for you."));
2571
2584
  }
2572
2585
  return ValidationResult_1.ValidationResult.success();
2573
2586
  }
@@ -4184,12 +4197,19 @@ __webpack_require__(/*! reflect-metadata */ "./node_modules/reflect-metadata/Ref
4184
4197
  const EventBus_1 = __webpack_require__(/*! ../EventBus */ "./node_modules/@js-soft/ts-utils/dist/eventBus/EventBus.js");
4185
4198
  const SubscriptionTargetInfo_1 = __webpack_require__(/*! ../SubscriptionTargetInfo */ "./node_modules/@js-soft/ts-utils/dist/eventBus/SubscriptionTargetInfo.js");
4186
4199
  class EventEmitter2EventBus {
4200
+ errorCallback;
4187
4201
  emitter;
4188
4202
  listeners = new Map();
4189
4203
  nextId = 0;
4190
4204
  invocationPromises = [];
4191
- constructor(options) {
4192
- this.emitter = new eventemitter2_1.EventEmitter2({ ...options, wildcard: true, maxListeners: 50, verboseMemoryLeak: true });
4205
+ constructor(errorCallback, eventEmitter2Options) {
4206
+ this.errorCallback = errorCallback;
4207
+ this.emitter = new eventemitter2_1.EventEmitter2({
4208
+ maxListeners: 50,
4209
+ verboseMemoryLeak: true,
4210
+ ...eventEmitter2Options,
4211
+ wildcard: true
4212
+ });
4193
4213
  }
4194
4214
  subscribe(subscriptionTarget, handler) {
4195
4215
  return this.registerHandler(subscriptionTarget, handler);
@@ -4209,7 +4229,7 @@ class EventEmitter2EventBus {
4209
4229
  }
4210
4230
  const invocationPromise = (async () => await handler(event))();
4211
4231
  this.invocationPromises.push(invocationPromise);
4212
- await invocationPromise;
4232
+ await invocationPromise.catch((e) => this.errorCallback(e, subscriptionTargetInfo.namespace));
4213
4233
  this.invocationPromises = this.invocationPromises.filter((p) => p !== invocationPromise);
4214
4234
  if (isOneTimeHandler)
4215
4235
  this.listeners.delete(listenerId);
@@ -4273,7 +4293,11 @@ exports.EventEmitter2EventBus = EventEmitter2EventBus;
4273
4293
 
4274
4294
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4275
4295
  if (k2 === undefined) k2 = k;
4276
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4296
+ var desc = Object.getOwnPropertyDescriptor(m, k);
4297
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
4298
+ desc = { enumerable: true, get: function() { return m[k]; } };
4299
+ }
4300
+ Object.defineProperty(o, k2, desc);
4277
4301
  }) : (function(o, m, k, k2) {
4278
4302
  if (k2 === undefined) k2 = k;
4279
4303
  o[k2] = m[k];
@@ -4342,7 +4366,11 @@ exports.Event = Event;
4342
4366
 
4343
4367
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4344
4368
  if (k2 === undefined) k2 = k;
4345
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4369
+ var desc = Object.getOwnPropertyDescriptor(m, k);
4370
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
4371
+ desc = { enumerable: true, get: function() { return m[k]; } };
4372
+ }
4373
+ Object.defineProperty(o, k2, desc);
4346
4374
  }) : (function(o, m, k, k2) {
4347
4375
  if (k2 === undefined) k2 = k;
4348
4376
  o[k2] = m[k];
@@ -4367,7 +4395,11 @@ __exportStar(__webpack_require__(/*! ./Event */ "./node_modules/@js-soft/ts-util
4367
4395
 
4368
4396
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4369
4397
  if (k2 === undefined) k2 = k;
4370
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4398
+ var desc = Object.getOwnPropertyDescriptor(m, k);
4399
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
4400
+ desc = { enumerable: true, get: function() { return m[k]; } };
4401
+ }
4402
+ Object.defineProperty(o, k2, desc);
4371
4403
  }) : (function(o, m, k, k2) {
4372
4404
  if (k2 === undefined) k2 = k;
4373
4405
  o[k2] = m[k];
@@ -4492,6 +4524,9 @@ class ApplicationError extends Error {
4492
4524
  equals(error) {
4493
4525
  return this.code === error.code;
4494
4526
  }
4527
+ toString() {
4528
+ return JSON.stringify(this, undefined, 2);
4529
+ }
4495
4530
  }
4496
4531
  exports.ApplicationError = ApplicationError;
4497
4532
  //# sourceMappingURL=ApplicationError.js.map
@@ -4537,7 +4572,7 @@ class Result {
4537
4572
  }
4538
4573
  get value() {
4539
4574
  if (!this.isSuccess) {
4540
- throw new Error("Can't get the value of an error result. Use 'error' instead.");
4575
+ throw new Error(`Can't get the value of an error result. Use 'error' instead. Root error: \r\n${this.error}`);
4541
4576
  }
4542
4577
  return this._value;
4543
4578
  }
@@ -4563,7 +4598,11 @@ exports.Result = Result;
4563
4598
 
4564
4599
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4565
4600
  if (k2 === undefined) k2 = k;
4566
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4601
+ var desc = Object.getOwnPropertyDescriptor(m, k);
4602
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
4603
+ desc = { enumerable: true, get: function() { return m[k]; } };
4604
+ }
4605
+ Object.defineProperty(o, k2, desc);
4567
4606
  }) : (function(o, m, k, k2) {
4568
4607
  if (k2 === undefined) k2 = k;
4569
4608
  o[k2] = m[k];
@@ -4705,7 +4744,7 @@ var __WEBPACK_AMD_DEFINE_RESULT__;/*!
4705
4744
  var obj = {};
4706
4745
  var key;
4707
4746
  var len = keys.length;
4708
- var valuesCount = values ? value.length : 0;
4747
+ var valuesCount = values ? values.length : 0;
4709
4748
  for (var i = 0; i < len; i++) {
4710
4749
  key = keys[i];
4711
4750
  obj[key] = i < valuesCount ? values[i] : undefined;