@nmshd/consumption 3.4.3 → 3.5.1

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 (107) hide show
  1. package/dist/buildInformation.js +4 -4
  2. package/dist/consumption/CoreErrors.d.ts +14 -1
  3. package/dist/consumption/CoreErrors.js +56 -2
  4. package/dist/consumption/CoreErrors.js.map +1 -1
  5. package/dist/modules/attributes/AttributesController.d.ts +37 -6
  6. package/dist/modules/attributes/AttributesController.js +352 -45
  7. package/dist/modules/attributes/AttributesController.js.map +1 -1
  8. package/dist/modules/attributes/events/AttributeSucceededEventData.d.ts +5 -0
  9. package/dist/modules/attributes/events/AttributeSucceededEventData.js +3 -0
  10. package/dist/modules/attributes/events/AttributeSucceededEventData.js.map +1 -0
  11. package/dist/modules/attributes/events/OwnSharedAttributeSucceededEvent.d.ts +7 -0
  12. package/dist/modules/attributes/events/OwnSharedAttributeSucceededEvent.js +12 -0
  13. package/dist/modules/attributes/events/OwnSharedAttributeSucceededEvent.js.map +1 -0
  14. package/dist/modules/attributes/events/PeerSharedAttributeSucceededEvent.d.ts +7 -0
  15. package/dist/modules/attributes/events/PeerSharedAttributeSucceededEvent.js +12 -0
  16. package/dist/modules/attributes/events/PeerSharedAttributeSucceededEvent.js.map +1 -0
  17. package/dist/modules/attributes/events/RepositoryAttributeSucceededEvent.d.ts +7 -0
  18. package/dist/modules/attributes/events/RepositoryAttributeSucceededEvent.js +12 -0
  19. package/dist/modules/attributes/events/RepositoryAttributeSucceededEvent.js.map +1 -0
  20. package/dist/modules/attributes/events/index.d.ts +4 -1
  21. package/dist/modules/attributes/events/index.js +4 -1
  22. package/dist/modules/attributes/events/index.js.map +1 -1
  23. package/dist/modules/attributes/index.d.ts +1 -2
  24. package/dist/modules/attributes/index.js +1 -2
  25. package/dist/modules/attributes/index.js.map +1 -1
  26. package/dist/modules/attributes/local/CreateLocalAttributeParams.d.ts +12 -1
  27. package/dist/modules/attributes/local/CreateLocalAttributeParams.js +18 -2
  28. package/dist/modules/attributes/local/CreateLocalAttributeParams.js.map +1 -1
  29. package/dist/modules/attributes/local/IAttributeSuccessorParams.d.ts +6 -0
  30. package/dist/modules/attributes/local/IAttributeSuccessorParams.js +3 -0
  31. package/dist/modules/attributes/local/IAttributeSuccessorParams.js.map +1 -0
  32. package/dist/modules/attributes/local/LocalAttribute.d.ts +51 -11
  33. package/dist/modules/attributes/local/LocalAttribute.js +45 -11
  34. package/dist/modules/attributes/local/LocalAttribute.js.map +1 -1
  35. package/dist/modules/attributes/local/LocalAttributeShareInfo.d.ts +16 -7
  36. package/dist/modules/attributes/local/LocalAttributeShareInfo.js +21 -2
  37. package/dist/modules/attributes/local/LocalAttributeShareInfo.js.map +1 -1
  38. package/dist/modules/common/ValidationResult.js.map +1 -0
  39. package/dist/modules/common/index.d.ts +1 -0
  40. package/dist/modules/common/index.js +18 -0
  41. package/dist/modules/common/index.js.map +1 -0
  42. package/dist/modules/index.d.ts +1 -0
  43. package/dist/modules/index.js +1 -0
  44. package/dist/modules/index.js.map +1 -1
  45. package/dist/modules/notifications/NotificationsController.js +4 -5
  46. package/dist/modules/notifications/NotificationsController.js.map +1 -1
  47. package/dist/modules/notifications/itemProcessors/AbstractNotificationItemProcessor.d.ts +19 -12
  48. package/dist/modules/notifications/itemProcessors/AbstractNotificationItemProcessor.js.map +1 -1
  49. package/dist/modules/notifications/itemProcessors/attributeSucceeded/AttributeSucceededNotificationItemProcessor.d.ts +10 -4
  50. package/dist/modules/notifications/itemProcessors/attributeSucceeded/AttributeSucceededNotificationItemProcessor.js +67 -7
  51. package/dist/modules/notifications/itemProcessors/attributeSucceeded/AttributeSucceededNotificationItemProcessor.js.map +1 -1
  52. package/dist/modules/requests/incoming/DecideRequestParametersValidator.d.ts +1 -1
  53. package/dist/modules/requests/incoming/DecideRequestParametersValidator.js +1 -1
  54. package/dist/modules/requests/incoming/DecideRequestParametersValidator.js.map +1 -1
  55. package/dist/modules/requests/incoming/IncomingRequestsController.d.ts +1 -1
  56. package/dist/modules/requests/incoming/IncomingRequestsController.js +1 -1
  57. package/dist/modules/requests/incoming/IncomingRequestsController.js.map +1 -1
  58. package/dist/modules/requests/index.d.ts +0 -1
  59. package/dist/modules/requests/index.js +0 -1
  60. package/dist/modules/requests/index.js.map +1 -1
  61. package/dist/modules/requests/itemProcessors/AbstractRequestItemProcessor.d.ts +1 -1
  62. package/dist/modules/requests/itemProcessors/GenericRequestItemProcessor.d.ts +1 -1
  63. package/dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js +1 -1
  64. package/dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js.map +1 -1
  65. package/dist/modules/requests/itemProcessors/IRequestItemProcessor.d.ts +1 -1
  66. package/dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.d.ts +1 -1
  67. package/dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js +6 -3
  68. package/dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js.map +1 -1
  69. package/dist/modules/requests/itemProcessors/freeText/FreeTextRequestItemProcessor.d.ts +1 -1
  70. package/dist/modules/requests/itemProcessors/freeText/FreeTextRequestItemProcessor.js +1 -1
  71. package/dist/modules/requests/itemProcessors/freeText/FreeTextRequestItemProcessor.js.map +1 -1
  72. package/dist/modules/requests/itemProcessors/proposeAttribute/AcceptProposeAttributeRequestItemParameters.js +2 -2
  73. package/dist/modules/requests/itemProcessors/proposeAttribute/AcceptProposeAttributeRequestItemParameters.js.map +1 -1
  74. package/dist/modules/requests/itemProcessors/proposeAttribute/ProposeAttributeRequestItemProcessor.d.ts +1 -1
  75. package/dist/modules/requests/itemProcessors/proposeAttribute/ProposeAttributeRequestItemProcessor.js +1 -1
  76. package/dist/modules/requests/itemProcessors/proposeAttribute/ProposeAttributeRequestItemProcessor.js.map +1 -1
  77. package/dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.js +2 -2
  78. package/dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.js.map +1 -1
  79. package/dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.d.ts +1 -1
  80. package/dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.js +1 -1
  81. package/dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.js.map +1 -1
  82. package/dist/modules/requests/itemProcessors/shareAttribute/ShareAttributeRequestItemProcessor.d.ts +1 -1
  83. package/dist/modules/requests/itemProcessors/shareAttribute/ShareAttributeRequestItemProcessor.js +1 -1
  84. package/dist/modules/requests/itemProcessors/shareAttribute/ShareAttributeRequestItemProcessor.js.map +1 -1
  85. package/dist/modules/requests/itemProcessors/utility/validateQuery.d.ts +1 -1
  86. package/dist/modules/requests/itemProcessors/utility/validateQuery.js +1 -1
  87. package/dist/modules/requests/itemProcessors/utility/validateQuery.js.map +1 -1
  88. package/dist/modules/requests/outgoing/OutgoingRequestsController.d.ts +1 -1
  89. package/dist/modules/requests/outgoing/OutgoingRequestsController.js +1 -1
  90. package/dist/modules/requests/outgoing/OutgoingRequestsController.js.map +1 -1
  91. package/lib-web/nmshd.consumption.js +738 -230
  92. package/lib-web/nmshd.consumption.js.map +1 -1
  93. package/lib-web/nmshd.consumption.min.js +1 -1
  94. package/lib-web/nmshd.consumption.min.js.map +1 -1
  95. package/package.json +2 -2
  96. package/dist/modules/attributes/events/AttributeSucceededEvent.d.ts +0 -6
  97. package/dist/modules/attributes/events/AttributeSucceededEvent.js +0 -12
  98. package/dist/modules/attributes/events/AttributeSucceededEvent.js.map +0 -1
  99. package/dist/modules/attributes/local/SucceedLocalAttributeParams.d.ts +0 -16
  100. package/dist/modules/attributes/local/SucceedLocalAttributeParams.js +0 -32
  101. package/dist/modules/attributes/local/SucceedLocalAttributeParams.js.map +0 -1
  102. package/dist/modules/attributes/local/UpdateLocalAttributeParams.d.ts +0 -16
  103. package/dist/modules/attributes/local/UpdateLocalAttributeParams.js +0 -32
  104. package/dist/modules/attributes/local/UpdateLocalAttributeParams.js.map +0 -1
  105. package/dist/modules/requests/itemProcessors/ValidationResult.js.map +0 -1
  106. /package/dist/modules/{requests/itemProcessors → common}/ValidationResult.d.ts +0 -0
  107. /package/dist/modules/{requests/itemProcessors → common}/ValidationResult.js +0 -0
@@ -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: "3.4.3",
21
- build: "111",
22
- date: "2023-10-20T10:27:10+00:00",
23
- commit: "39c256999ae24a9eab143a39cfe470d69a3c4e40",
20
+ version: "3.5.1",
21
+ build: "113",
22
+ date: "2023-10-31T14:01:53+00:00",
23
+ commit: "b4bf86f640160bfe11c2e1fec16d54ddd43371a1",
24
24
  dependencies: {"@js-soft/docdb-querytranslator":"^1.1.1","@nmshd/iql":"^0.0.4","ts-simple-nameof":"^1.3.1"},
25
25
  libraries: {
26
26
  transport: transport_1.buildInformation,
@@ -228,8 +228,62 @@ exports.CoreErrors = void 0;
228
228
  const ts_utils_1 = __webpack_require__(/*! @js-soft/ts-utils */ "./node_modules/@js-soft/ts-utils/dist/index.js");
229
229
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
230
230
  class Attributes {
231
- cannotSucceedAttributesWithAParent(parentId) {
232
- return new transport_1.CoreError("error.consumption.attributes.cannotSucceedAttributesWithAParent", `The Attribute you want to succeed has a parent (id: ${parentId.toString()}). You cannot succeed Attributes with a parent. Instead, succeed the parent, which will implicitly succeed all its children.`);
231
+ successionMustNotChangeKey() {
232
+ return new transport_1.CoreError("error.consumption.attributes.successionMustNotChangeKey", "The predecessor attribute's key does not match that of the successor. The succession of a relationship attribute must not change the key.");
233
+ }
234
+ successionPeerIsNotOwner() {
235
+ return new transport_1.CoreError("error.consumption.attributes.successionPeerIsNotOwner", "The peer of the succeeded attribute is not its owner. This may be an attempt of spoofing.");
236
+ }
237
+ invalidSuccessionOfOwnSharedIdentityAttribute(comment) {
238
+ let errorMessage = "Invalid succession of own shared identity attribute.";
239
+ if (comment)
240
+ errorMessage += ` ${comment}`;
241
+ return new transport_1.CoreError("error.consumption.attributes.invalidSuccessionOfOwnSharedIdentityAttribute", errorMessage);
242
+ }
243
+ cannotSucceedPartOfComplexAttribute(parentId) {
244
+ return new transport_1.CoreError("error.consumption.attributes.cannotSucceedPartOfComplexAttribute", `The attribute you want to succeed is part of a complex attribute (id: ${parentId}), and cannot be succeeded on its own. Instead, succeed the parent which will implicitly succeed all its children.`);
245
+ }
246
+ successorMustNotYetExist() {
247
+ return new transport_1.CoreError("error.consumption.attributes.successorMustNotYetExist", "The predecessor attribute's successor must not exist. It will be created by the succession handlers and must not be created manually.");
248
+ }
249
+ successorMustNotHaveASuccessor(comment) {
250
+ let errorMessage = "The successor must not have a successor itself.";
251
+ if (comment)
252
+ errorMessage += ` ${comment}`;
253
+ return new transport_1.CoreError("error.consumption.attributes.successorMustNotHaveASuccessor", errorMessage);
254
+ }
255
+ invalidPredecessor(comment) {
256
+ let errorMessage = "Invalid predecessor.";
257
+ if (comment)
258
+ errorMessage += ` ${comment}`;
259
+ return new transport_1.CoreError("error.consumption.attributes.invalidPredecessor", errorMessage);
260
+ }
261
+ invalidSuccessor(comment) {
262
+ let errorMessage = "Invalid successor.";
263
+ if (comment)
264
+ errorMessage += ` ${comment}`;
265
+ return new transport_1.CoreError("error.consumption.attributes.invalidSuccessor", errorMessage);
266
+ }
267
+ predecessorDoesNotExist() {
268
+ return new transport_1.CoreError("error.consumption.attributes.predecessorDoesNotExist", "The predecessor does not exist.");
269
+ }
270
+ successionMustNotChangeOwner() {
271
+ return new transport_1.CoreError("error.consumption.attributes.successionMustNotChangeOwner", "The successor attribute's owner does not match that of the predecessor. An attribute succession must not change the attribute's owner.");
272
+ }
273
+ successionMustNotChangeValueType() {
274
+ return new transport_1.CoreError("error.consumption.attributes.successionMustNotChangeValueType", "The successor attribute's value type does not match that of the predecessor. An attribute succession must not change the attribute's value type.");
275
+ }
276
+ successionMustNotChangeContentType() {
277
+ return new transport_1.CoreError("error.consumption.attributes.successionMustNotChangeContentType", "The successor attribute's content type does not match that of the predecessor. An attribute succession must not change the attribute's content type, i.e. an identity attribute must not be succeeded by a relationship attribute and v.v.");
278
+ }
279
+ successionMustNotChangePeer(comment) {
280
+ let errorMessage = "The peer of the shared attribute must not change.";
281
+ if (comment)
282
+ errorMessage += ` ${comment}`;
283
+ return new transport_1.CoreError("error.consumption.attributes.successionMustNotChangePeer", errorMessage);
284
+ }
285
+ cannotSucceedAttributesWithASuccessor(successorId) {
286
+ return new transport_1.CoreError("error.consumption.attributes.cannotSucceedAttributesWithASuccessor", `The Attribute you want to succeed has a successor (id: ${successorId}). You cannot succeed Attributes with a successor. Instead, succeed the successor.`);
233
287
  }
234
288
  }
235
289
  class Requests {
@@ -577,23 +631,28 @@ var __importStar = (this && this.__importStar) || function (mod) {
577
631
  __setModuleDefault(result, mod);
578
632
  return result;
579
633
  };
634
+ var __importDefault = (this && this.__importDefault) || function (mod) {
635
+ return (mod && mod.__esModule) ? mod : { "default": mod };
636
+ };
580
637
  Object.defineProperty(exports, "__esModule", ({ value: true }));
581
638
  exports.AttributesController = void 0;
582
639
  const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
583
640
  const Iql = __importStar(__webpack_require__(/*! @nmshd/iql */ "./node_modules/@nmshd/iql/dist/src/index.js"));
584
641
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
642
+ const lodash_1 = __importDefault(__webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js"));
585
643
  const ts_simple_nameof_1 = __webpack_require__(/*! ts-simple-nameof */ "./node_modules/ts-simple-nameof/index.js");
586
644
  const ConsumptionBaseController_1 = __webpack_require__(/*! ../../consumption/ConsumptionBaseController */ "./dist/consumption/ConsumptionBaseController.js");
587
645
  const ConsumptionControllerName_1 = __webpack_require__(/*! ../../consumption/ConsumptionControllerName */ "./dist/consumption/ConsumptionControllerName.js");
588
646
  const ConsumptionError_1 = __webpack_require__(/*! ../../consumption/ConsumptionError */ "./dist/consumption/ConsumptionError.js");
589
647
  const ConsumptionIds_1 = __webpack_require__(/*! ../../consumption/ConsumptionIds */ "./dist/consumption/ConsumptionIds.js");
590
648
  const CoreErrors_1 = __webpack_require__(/*! ../../consumption/CoreErrors */ "./dist/consumption/CoreErrors.js");
649
+ const common_1 = __webpack_require__(/*! ../common */ "./dist/modules/common/index.js");
591
650
  const events_1 = __webpack_require__(/*! ./events */ "./dist/modules/attributes/events/index.js");
651
+ const CreateLocalAttributeParams_1 = __webpack_require__(/*! ./local/CreateLocalAttributeParams */ "./dist/modules/attributes/local/CreateLocalAttributeParams.js");
592
652
  const CreateSharedLocalAttributeCopyParams_1 = __webpack_require__(/*! ./local/CreateSharedLocalAttributeCopyParams */ "./dist/modules/attributes/local/CreateSharedLocalAttributeCopyParams.js");
593
653
  const LocalAttribute_1 = __webpack_require__(/*! ./local/LocalAttribute */ "./dist/modules/attributes/local/LocalAttribute.js");
594
654
  const LocalAttributeShareInfo_1 = __webpack_require__(/*! ./local/LocalAttributeShareInfo */ "./dist/modules/attributes/local/LocalAttributeShareInfo.js");
595
655
  const QueryTranslator_1 = __webpack_require__(/*! ./local/QueryTranslator */ "./dist/modules/attributes/local/QueryTranslator.js");
596
- const SucceedLocalAttributeParams_1 = __webpack_require__(/*! ./local/SucceedLocalAttributeParams */ "./dist/modules/attributes/local/SucceedLocalAttributeParams.js");
597
656
  class AttributesController extends ConsumptionBaseController_1.ConsumptionBaseController {
598
657
  constructor(parent, eventBus, identity) {
599
658
  super(ConsumptionControllerName_1.ConsumptionControllerName.AttributesController, parent);
@@ -739,11 +798,14 @@ class AttributesController extends ConsumptionBaseController_1.ConsumptionBaseCo
739
798
  return this.parseArray(attributes, LocalAttribute_1.LocalAttribute);
740
799
  }
741
800
  async createLocalAttribute(params) {
801
+ const parsedParams = CreateLocalAttributeParams_1.CreateLocalAttributeParams.from(params);
742
802
  const localAttribute = LocalAttribute_1.LocalAttribute.from({
743
- id: await ConsumptionIds_1.ConsumptionIds.attribute.generate(),
803
+ id: parsedParams.id ?? (await ConsumptionIds_1.ConsumptionIds.attribute.generate()),
744
804
  createdAt: transport_1.CoreDate.utc(),
745
- content: params.content,
746
- parentId: params.parentId
805
+ content: parsedParams.content,
806
+ parentId: parsedParams.parentId,
807
+ succeeds: parsedParams.succeeds,
808
+ shareInfo: parsedParams.shareInfo
747
809
  });
748
810
  await this.attributes.create(localAttribute);
749
811
  if (localAttribute.content instanceof content_1.IdentityAttribute && // nested Local Attributes should only be created for Identity Attributes
@@ -766,29 +828,6 @@ class AttributesController extends ConsumptionBaseController_1.ConsumptionBaseCo
766
828
  await this.createLocalAttribute({ content: nestedAttribute, parentId: localAttribute.id });
767
829
  }
768
830
  }
769
- async succeedLocalAttribute(params) {
770
- const parsedParams = SucceedLocalAttributeParams_1.SucceedLocalAttributeParams.from(params);
771
- const currentAttributeDoc = await this.attributes.findOne({
772
- [(0, ts_simple_nameof_1.nameof)((c) => c.id)]: params.succeeds.toString()
773
- });
774
- const currentAttribute = LocalAttribute_1.LocalAttribute.from(currentAttributeDoc);
775
- if (currentAttribute.parentId) {
776
- throw CoreErrors_1.CoreErrors.attributes.cannotSucceedAttributesWithAParent(parsedParams.succeeds.toString());
777
- }
778
- if (!currentAttributeDoc) {
779
- throw transport_1.CoreErrors.general.recordNotFound(LocalAttribute_1.LocalAttribute, parsedParams.succeeds.toString());
780
- }
781
- if (!parsedParams.successorContent.validFrom) {
782
- parsedParams.successorContent.validFrom = transport_1.CoreDate.utc();
783
- }
784
- const validFrom = parsedParams.successorContent.validFrom;
785
- currentAttribute.content.validTo = validFrom.subtract(1);
786
- await this.attributes.update(currentAttributeDoc, currentAttribute);
787
- const successor = await LocalAttribute_1.LocalAttribute.fromAttribute(parsedParams.successorContent, parsedParams.succeeds);
788
- await this.attributes.create(successor);
789
- this.eventBus.publish(new events_1.AttributeSucceededEvent(this.identity.address.toString(), successor));
790
- return successor;
791
- }
792
831
  async createSharedLocalAttributeCopy(params) {
793
832
  const parsedParams = CreateSharedLocalAttributeCopyParams_1.CreateSharedLocalAttributeCopyParams.from(params);
794
833
  const sourceAttribute = await this.getLocalAttribute(parsedParams.sourceAttributeId);
@@ -820,28 +859,350 @@ class AttributesController extends ConsumptionBaseController_1.ConsumptionBaseCo
820
859
  this.eventBus.publish(new events_1.AttributeCreatedEvent(this.identity.address.toString(), peerLocalAttribute));
821
860
  return peerLocalAttribute;
822
861
  }
823
- async updateLocalAttribute(params) {
824
- const current = await this.attributes.findOne({
825
- [(0, ts_simple_nameof_1.nameof)((c) => c.id)]: params.id.toString()
862
+ async deleteAttribute(attribute) {
863
+ await this.deleteAttributeUnsafe(attribute.id);
864
+ this.eventBus.publish(new events_1.AttributeDeletedEvent(this.identity.address.toString(), attribute));
865
+ }
866
+ async succeedRepositoryAttribute(predecessorId, successorParams, validate = true) {
867
+ if (validate) {
868
+ const validationResult = await this.validateRepositoryAttributeSuccession(predecessorId, successorParams);
869
+ if (validationResult.isError()) {
870
+ throw validationResult.error;
871
+ }
872
+ }
873
+ const { predecessor, successor } = await this._succeedAttributeUnsafe(predecessorId, {
874
+ id: successorParams.id,
875
+ content: successorParams.content,
876
+ succeeds: predecessorId,
877
+ shareInfo: successorParams.shareInfo,
878
+ parentId: successorParams.parentId,
879
+ createdAt: successorParams.createdAt,
880
+ succeededBy: successorParams.succeededBy
826
881
  });
827
- if (!current) {
828
- throw transport_1.CoreErrors.general.recordNotFound(LocalAttribute_1.LocalAttribute, params.id.toString());
882
+ this.eventBus.publish(new events_1.RepositoryAttributeSucceededEvent(this.identity.address.toString(), predecessor, successor));
883
+ return { predecessor, successor };
884
+ }
885
+ async succeedOwnSharedIdentityAttribute(predecessorId, successorParams, validate = true) {
886
+ if (validate) {
887
+ const validationResult = await this.validateOwnSharedIdentityAttributeSuccession(predecessorId, successorParams);
888
+ if (validationResult.isError()) {
889
+ throw validationResult.error;
890
+ }
829
891
  }
830
- const updatedLocalAttribute = LocalAttribute_1.LocalAttribute.from({
831
- id: current.id,
832
- content: params.content,
833
- createdAt: current.createdAt,
834
- shareInfo: current.shareInfo,
835
- succeededBy: current.succeededBy,
836
- succeeds: current.succeeds
892
+ const { predecessor, successor } = await this._succeedAttributeUnsafe(predecessorId, {
893
+ id: successorParams.id,
894
+ content: successorParams.content,
895
+ succeeds: predecessorId,
896
+ shareInfo: successorParams.shareInfo,
897
+ parentId: successorParams.parentId,
898
+ createdAt: successorParams.createdAt,
899
+ succeededBy: successorParams.succeededBy
900
+ });
901
+ this.eventBus.publish(new events_1.OwnSharedAttributeSucceededEvent(this.identity.address.toString(), predecessor, successor));
902
+ return { predecessor, successor };
903
+ }
904
+ async succeedOwnSharedRelationshipAttribute(predecessorId, successorParams, validate = true) {
905
+ if (validate) {
906
+ const validationResult = await this.validateOwnSharedRelationshipAttributeSuccession(predecessorId, successorParams);
907
+ if (validationResult.isError()) {
908
+ throw validationResult.error;
909
+ }
910
+ }
911
+ const { predecessor, successor } = await this._succeedAttributeUnsafe(predecessorId, {
912
+ id: successorParams.id,
913
+ content: successorParams.content,
914
+ succeeds: predecessorId,
915
+ shareInfo: successorParams.shareInfo,
916
+ parentId: successorParams.parentId,
917
+ createdAt: successorParams.createdAt,
918
+ succeededBy: successorParams.succeededBy
919
+ });
920
+ this.eventBus.publish(new events_1.OwnSharedAttributeSucceededEvent(this.identity.address.toString(), predecessor, successor));
921
+ return { predecessor, successor };
922
+ }
923
+ async succeedPeerSharedIdentityAttribute(predecessorId, successorParams, validate = true) {
924
+ if (validate) {
925
+ const validationResult = await this.validatePeerSharedIdentityAttributeSuccession(predecessorId, successorParams);
926
+ if (validationResult.isError()) {
927
+ throw validationResult.error;
928
+ }
929
+ }
930
+ const { predecessor, successor } = await this._succeedAttributeUnsafe(predecessorId, {
931
+ id: successorParams.id,
932
+ content: successorParams.content,
933
+ succeeds: predecessorId,
934
+ shareInfo: successorParams.shareInfo,
935
+ parentId: successorParams.parentId,
936
+ createdAt: successorParams.createdAt,
937
+ succeededBy: successorParams.succeededBy
938
+ });
939
+ /* No succeeded attribute event fired here. This is done by the notification system. */
940
+ return { predecessor, successor };
941
+ }
942
+ async succeedPeerSharedRelationshipAttribute(predecessorId, successorParams, validate = true) {
943
+ if (validate) {
944
+ const validationResult = await this.validatePeerSharedRelationshipAttributeSuccession(predecessorId, successorParams);
945
+ if (validationResult.isError()) {
946
+ throw validationResult.error;
947
+ }
948
+ }
949
+ const { predecessor, successor } = await this._succeedAttributeUnsafe(predecessorId, {
950
+ id: successorParams.id,
951
+ content: successorParams.content,
952
+ succeeds: predecessorId,
953
+ shareInfo: successorParams.shareInfo,
954
+ parentId: successorParams.parentId,
955
+ createdAt: successorParams.createdAt,
956
+ succeededBy: successorParams.succeededBy
957
+ });
958
+ /* No succeeded attribute event fired here. This is done by the notification system. */
959
+ return { predecessor, successor };
960
+ }
961
+ async _succeedAttributeUnsafe(predecessorId, successorParams) {
962
+ const successor = await this.createAttributeUnsafe({
963
+ id: successorParams.id,
964
+ content: successorParams.content,
965
+ succeeds: predecessorId,
966
+ shareInfo: successorParams.shareInfo,
967
+ parentId: successorParams.parentId,
968
+ createdAt: successorParams.createdAt,
969
+ succeededBy: successorParams.succeededBy
970
+ });
971
+ const predecessor = (await this.getLocalAttribute(predecessorId));
972
+ predecessor.succeededBy = successor.id;
973
+ await this.updateAttributeUnsafe(predecessor);
974
+ return { predecessor, successor };
975
+ }
976
+ async validateRepositoryAttributeSuccession(predecessorId, successorParams) {
977
+ const commonValidation = await this.validateAttributeSuccessionCommon(predecessorId, successorParams);
978
+ if (commonValidation.isError())
979
+ return commonValidation;
980
+ const predecessor = (await this.getLocalAttribute(predecessorId));
981
+ const successor = LocalAttribute_1.LocalAttribute.from({
982
+ id: transport_1.CoreId.from(successorParams.id ?? "dummy"),
983
+ content: successorParams.content,
984
+ createdAt: successorParams.createdAt ?? transport_1.CoreDate.utc(),
985
+ succeeds: successorParams.succeeds,
986
+ succeededBy: successorParams.succeededBy,
987
+ shareInfo: successorParams.shareInfo,
988
+ parentId: successorParams.parentId
989
+ });
990
+ if (!predecessor.isIdentityAttribute() || predecessor.isShared()) {
991
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.invalidPredecessor("Predecessor is not a valid repository attribute."));
992
+ }
993
+ if (!successor.isIdentityAttribute() || successor.isShared()) {
994
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.invalidPredecessor("Successor is not a valid repository attribute."));
995
+ }
996
+ return common_1.ValidationResult.success();
997
+ }
998
+ async validateOwnSharedIdentityAttributeSuccession(predecessorId, successorParams) {
999
+ const commonValidation = await this.validateAttributeSuccessionCommon(predecessorId, successorParams);
1000
+ if (commonValidation.isError())
1001
+ return commonValidation;
1002
+ const predecessor = (await this.getLocalAttribute(predecessorId));
1003
+ const successor = LocalAttribute_1.LocalAttribute.from({
1004
+ id: transport_1.CoreId.from(successorParams.id ?? "dummy"),
1005
+ content: successorParams.content,
1006
+ createdAt: successorParams.createdAt ?? transport_1.CoreDate.utc(),
1007
+ succeeds: successorParams.succeeds,
1008
+ succeededBy: successorParams.succeededBy,
1009
+ shareInfo: successorParams.shareInfo,
1010
+ parentId: successorParams.parentId
1011
+ });
1012
+ if (!predecessor.isOwnSharedIdentityAttribute(this.identity.address)) {
1013
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.invalidPredecessor("Predecessor is not a valid own shared identity attribute."));
1014
+ }
1015
+ if (!successor.isOwnSharedIdentityAttribute(this.identity.address)) {
1016
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.invalidSuccessor("Successor is not a valid peer shared identity attribute."));
1017
+ }
1018
+ if (!predecessor.shareInfo.peer.equals(successor.shareInfo.peer)) {
1019
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.successionMustNotChangePeer());
1020
+ }
1021
+ /* Succession of own shared identity attribute must be matched by their
1022
+ * respective repository attributes. */
1023
+ const predecessorSource = await this.getLocalAttribute(predecessor.shareInfo.sourceAttribute);
1024
+ const successorSource = await this.getLocalAttribute(successor.shareInfo.sourceAttribute);
1025
+ if (typeof predecessorSource === "undefined" || !predecessorSource.isRepositoryAttribute()) {
1026
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.invalidSuccessionOfOwnSharedIdentityAttribute());
1027
+ }
1028
+ if (typeof successorSource === "undefined" || !successorSource.isRepositoryAttribute()) {
1029
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.invalidSuccessionOfOwnSharedIdentityAttribute("Source attribute is not a valid repository attribute."));
1030
+ }
1031
+ if (typeof successorSource.succeeds === "undefined" ||
1032
+ !successorSource.succeeds.equals(predecessorSource.id) ||
1033
+ typeof predecessorSource.succeededBy === "undefined" ||
1034
+ !predecessorSource.succeededBy.equals(successorSource.id)) {
1035
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.invalidSuccessionOfOwnSharedIdentityAttribute("Prdeecessor source attribute is not succeeded by successor source attribute."));
1036
+ }
1037
+ const repositoryAttributeContentMatchesItsSharedAttribute = lodash_1.default.isEqual(predecessorSource.content, predecessor.content) &&
1038
+ lodash_1.default.isEqual(successorSource.content, successor.content);
1039
+ if (!repositoryAttributeContentMatchesItsSharedAttribute) {
1040
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.invalidSuccessionOfOwnSharedIdentityAttribute("Successor source attribute contents don't match successor shared attribute copy."));
1041
+ }
1042
+ return common_1.ValidationResult.success();
1043
+ }
1044
+ async validateOwnSharedRelationshipAttributeSuccession(predecessorId, successorParams) {
1045
+ const commonValidation = await this.validateAttributeSuccessionCommon(predecessorId, successorParams);
1046
+ if (commonValidation.isError())
1047
+ return commonValidation;
1048
+ const predecessor = (await this.getLocalAttribute(predecessorId));
1049
+ const successor = LocalAttribute_1.LocalAttribute.from({
1050
+ id: transport_1.CoreId.from(successorParams.id ?? "dummy"),
1051
+ content: successorParams.content,
1052
+ createdAt: successorParams.createdAt ?? transport_1.CoreDate.utc(),
1053
+ succeeds: successorParams.succeeds,
1054
+ succeededBy: successorParams.succeededBy,
1055
+ shareInfo: successorParams.shareInfo,
1056
+ parentId: successorParams.parentId
1057
+ });
1058
+ if (!predecessor.isOwnSharedRelationshipAttribute(this.identity.address)) {
1059
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.invalidPredecessor("Predecessor is not a valid own shared relationship attribute."));
1060
+ }
1061
+ if (!successor.isOwnSharedRelationshipAttribute(this.identity.address)) {
1062
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.invalidSuccessor("Successor is not a valid own shared relationship attribute."));
1063
+ }
1064
+ if (successor.content.key !== predecessor.content.key) {
1065
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.successionMustNotChangeKey());
1066
+ }
1067
+ if (!predecessor.shareInfo.peer.equals(successor.shareInfo.peer)) {
1068
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.successionMustNotChangePeer());
1069
+ }
1070
+ return common_1.ValidationResult.success();
1071
+ }
1072
+ async validatePeerSharedIdentityAttributeSuccession(predecessorId, successorParams) {
1073
+ const commonValidation = await this.validateAttributeSuccessionCommon(predecessorId, successorParams);
1074
+ if (commonValidation.isError())
1075
+ return commonValidation;
1076
+ const predecessor = (await this.getLocalAttribute(predecessorId));
1077
+ const successor = LocalAttribute_1.LocalAttribute.from({
1078
+ id: transport_1.CoreId.from(successorParams.id ?? "dummy"),
1079
+ content: successorParams.content,
1080
+ createdAt: successorParams.createdAt ?? transport_1.CoreDate.utc(),
1081
+ succeeds: successorParams.succeeds,
1082
+ succeededBy: successorParams.succeededBy,
1083
+ shareInfo: successorParams.shareInfo,
1084
+ parentId: successorParams.parentId
1085
+ });
1086
+ if (!predecessor.isPeerSharedIdentityAttribute()) {
1087
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.invalidPredecessor("Predecessor is not a valid peer shared identity attribute."));
1088
+ }
1089
+ if (!successor.isPeerSharedIdentityAttribute()) {
1090
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.invalidSuccessor("Successor is not a valid peer shared identity attribute."));
1091
+ }
1092
+ if (!predecessor.shareInfo.peer.equals(successor.shareInfo.peer)) {
1093
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.successionMustNotChangePeer());
1094
+ }
1095
+ return common_1.ValidationResult.success();
1096
+ }
1097
+ async validatePeerSharedRelationshipAttributeSuccession(predecessorId, successorParams) {
1098
+ const commonValidation = await this.validateAttributeSuccessionCommon(predecessorId, successorParams);
1099
+ if (commonValidation.isError())
1100
+ return commonValidation;
1101
+ const predecessor = (await this.getLocalAttribute(predecessorId));
1102
+ const successor = LocalAttribute_1.LocalAttribute.from({
1103
+ id: transport_1.CoreId.from(successorParams.id ?? "dummy"),
1104
+ content: successorParams.content,
1105
+ createdAt: successorParams.createdAt ?? transport_1.CoreDate.utc(),
1106
+ succeeds: successorParams.succeeds,
1107
+ succeededBy: successorParams.succeededBy,
1108
+ shareInfo: successorParams.shareInfo,
1109
+ parentId: successorParams.parentId
837
1110
  });
838
- await this.attributes.update(current, updatedLocalAttribute);
839
- this.eventBus.publish(new events_1.AttributeUpdatedEvent(this.identity.address.toString(), updatedLocalAttribute));
840
- return updatedLocalAttribute;
1111
+ if (!predecessor.isPeerSharedRelationshipAttribute()) {
1112
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.invalidPredecessor("Predecessor is not a valid peer shared relationship attribute."));
1113
+ }
1114
+ if (!successor.isPeerSharedRelationshipAttribute()) {
1115
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.invalidSuccessor("Successor is not a valid peer shared relationship attribute."));
1116
+ }
1117
+ if (successor.content.key !== predecessor.content.key) {
1118
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.successionMustNotChangeKey());
1119
+ }
1120
+ if (!predecessor.shareInfo.peer.equals(successor.shareInfo.peer)) {
1121
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.successionMustNotChangePeer());
1122
+ }
1123
+ return common_1.ValidationResult.success();
841
1124
  }
842
- async deleteAttribute(attribute) {
843
- await this.attributes.delete(attribute);
844
- this.eventBus.publish(new events_1.AttributeDeletedEvent(this.identity.address.toString(), attribute));
1125
+ async validateAttributeSuccessionCommon(predecessorId, successorParams) {
1126
+ const successor = LocalAttribute_1.LocalAttribute.from({
1127
+ id: transport_1.CoreId.from(successorParams.id ?? "dummy"),
1128
+ content: successorParams.content,
1129
+ createdAt: successorParams.createdAt ?? transport_1.CoreDate.utc(),
1130
+ succeeds: successorParams.succeeds,
1131
+ succeededBy: successorParams.succeededBy,
1132
+ shareInfo: successorParams.shareInfo,
1133
+ parentId: successorParams.parentId
1134
+ });
1135
+ if (typeof successorParams.id !== "undefined") {
1136
+ const successor = await this.getLocalAttribute(transport_1.CoreId.from(successorParams.id));
1137
+ if (typeof successor !== "undefined") {
1138
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.successorMustNotYetExist());
1139
+ }
1140
+ }
1141
+ if (typeof successor.succeeds !== "undefined" && !predecessorId.equals(successor.succeeds.toString())) {
1142
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.invalidPredecessor("The predecessor's id and the explicitly set value for the successor's succeeds field don't match."));
1143
+ }
1144
+ if (typeof successor.succeededBy !== "undefined") {
1145
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.successorMustNotHaveASuccessor());
1146
+ }
1147
+ if (typeof successor.parentId !== "undefined") {
1148
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.cannotSucceedPartOfComplexAttribute(predecessorId.toString()));
1149
+ }
1150
+ const predecessor = await this.getLocalAttribute(predecessorId);
1151
+ if (typeof predecessor === "undefined") {
1152
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.predecessorDoesNotExist());
1153
+ }
1154
+ if (typeof predecessor.succeededBy !== "undefined") {
1155
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.cannotSucceedAttributesWithASuccessor(predecessor.succeededBy.toString()));
1156
+ }
1157
+ if (predecessor.parentId) {
1158
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.cannotSucceedPartOfComplexAttribute(predecessorId.toString()));
1159
+ }
1160
+ if (!predecessor.content.owner.equals(transport_1.CoreAddress.from(successor.content.owner))) {
1161
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.successionMustNotChangeOwner());
1162
+ }
1163
+ if (successor.content.constructor !== predecessor.content.constructor) {
1164
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.successionMustNotChangeContentType());
1165
+ }
1166
+ if (predecessor.content.value.constructor !== successor.content.value.constructor) {
1167
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.successionMustNotChangeValueType());
1168
+ }
1169
+ return common_1.ValidationResult.success();
1170
+ }
1171
+ async createAttributeUnsafe(attributeData) {
1172
+ const localAttribute = LocalAttribute_1.LocalAttribute.from({
1173
+ id: attributeData.id ?? (await ConsumptionIds_1.ConsumptionIds.attribute.generate()),
1174
+ content: attributeData.content,
1175
+ createdAt: attributeData.createdAt ?? transport_1.CoreDate.utc(),
1176
+ shareInfo: attributeData.shareInfo,
1177
+ parentId: attributeData.parentId,
1178
+ succeededBy: attributeData.succeededBy,
1179
+ succeeds: attributeData.succeeds
1180
+ });
1181
+ await this.attributes.create(localAttribute);
1182
+ return localAttribute;
1183
+ }
1184
+ async updateAttributeUnsafe(attributeParams) {
1185
+ const doc = await this.attributes.findOne({
1186
+ [(0, ts_simple_nameof_1.nameof)((c) => c.id)]: attributeParams.id.toString()
1187
+ });
1188
+ if (!doc) {
1189
+ throw transport_1.CoreErrors.general.recordNotFound(LocalAttribute_1.LocalAttribute, attributeParams.id.toString());
1190
+ }
1191
+ const params = {
1192
+ id: attributeParams.id,
1193
+ content: attributeParams.content,
1194
+ createdAt: attributeParams.createdAt,
1195
+ parentId: attributeParams.parentId,
1196
+ shareInfo: attributeParams.shareInfo,
1197
+ succeededBy: attributeParams.succeededBy,
1198
+ succeeds: attributeParams.succeeds
1199
+ };
1200
+ const newAttribute = LocalAttribute_1.LocalAttribute.from(params);
1201
+ await this.attributes.update(doc, newAttribute);
1202
+ return newAttribute;
1203
+ }
1204
+ async deleteAttributeUnsafe(id) {
1205
+ await this.attributes.delete({ id: id });
845
1206
  }
846
1207
  }
847
1208
  exports.AttributesController = AttributesController;
@@ -893,25 +1254,16 @@ AttributeDeletedEvent.namespace = "consumption.attributeDeleted";
893
1254
 
894
1255
  /***/ }),
895
1256
 
896
- /***/ "./dist/modules/attributes/events/AttributeSucceededEvent.js":
897
- /*!*******************************************************************!*\
898
- !*** ./dist/modules/attributes/events/AttributeSucceededEvent.js ***!
899
- \*******************************************************************/
900
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1257
+ /***/ "./dist/modules/attributes/events/AttributeSucceededEventData.js":
1258
+ /*!***********************************************************************!*\
1259
+ !*** ./dist/modules/attributes/events/AttributeSucceededEventData.js ***!
1260
+ \***********************************************************************/
1261
+ /***/ ((__unused_webpack_module, exports) => {
901
1262
 
902
1263
  "use strict";
903
1264
 
904
1265
  Object.defineProperty(exports, "__esModule", ({ value: true }));
905
- exports.AttributeSucceededEvent = void 0;
906
- const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
907
- class AttributeSucceededEvent extends transport_1.TransportDataEvent {
908
- constructor(eventTargetAddress, data) {
909
- super(AttributeSucceededEvent.namespace, eventTargetAddress, data);
910
- }
911
- }
912
- exports.AttributeSucceededEvent = AttributeSucceededEvent;
913
- AttributeSucceededEvent.namespace = "consumption.attributeSucceded";
914
- //# sourceMappingURL=AttributeSucceededEvent.js.map
1266
+ //# sourceMappingURL=AttributeSucceededEventData.js.map
915
1267
 
916
1268
  /***/ }),
917
1269
 
@@ -937,6 +1289,72 @@ AttributeUpdatedEvent.namespace = "consumption.attributeUpdated";
937
1289
 
938
1290
  /***/ }),
939
1291
 
1292
+ /***/ "./dist/modules/attributes/events/OwnSharedAttributeSucceededEvent.js":
1293
+ /*!****************************************************************************!*\
1294
+ !*** ./dist/modules/attributes/events/OwnSharedAttributeSucceededEvent.js ***!
1295
+ \****************************************************************************/
1296
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1297
+
1298
+ "use strict";
1299
+
1300
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
1301
+ exports.OwnSharedAttributeSucceededEvent = void 0;
1302
+ const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
1303
+ class OwnSharedAttributeSucceededEvent extends transport_1.TransportDataEvent {
1304
+ constructor(eventTargetAddress, predecessor, successor) {
1305
+ super(OwnSharedAttributeSucceededEvent.namespace, eventTargetAddress, { predecessor, successor });
1306
+ }
1307
+ }
1308
+ exports.OwnSharedAttributeSucceededEvent = OwnSharedAttributeSucceededEvent;
1309
+ OwnSharedAttributeSucceededEvent.namespace = "consumption.ownSharedAttributeSucceded";
1310
+ //# sourceMappingURL=OwnSharedAttributeSucceededEvent.js.map
1311
+
1312
+ /***/ }),
1313
+
1314
+ /***/ "./dist/modules/attributes/events/PeerSharedAttributeSucceededEvent.js":
1315
+ /*!*****************************************************************************!*\
1316
+ !*** ./dist/modules/attributes/events/PeerSharedAttributeSucceededEvent.js ***!
1317
+ \*****************************************************************************/
1318
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1319
+
1320
+ "use strict";
1321
+
1322
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
1323
+ exports.PeerSharedAttributeSucceededEvent = void 0;
1324
+ const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
1325
+ class PeerSharedAttributeSucceededEvent extends transport_1.TransportDataEvent {
1326
+ constructor(eventTargetAddress, predecessor, successor) {
1327
+ super(PeerSharedAttributeSucceededEvent.namespace, eventTargetAddress, { predecessor, successor });
1328
+ }
1329
+ }
1330
+ exports.PeerSharedAttributeSucceededEvent = PeerSharedAttributeSucceededEvent;
1331
+ PeerSharedAttributeSucceededEvent.namespace = "consumption.peerSharedAttributeSucceded";
1332
+ //# sourceMappingURL=PeerSharedAttributeSucceededEvent.js.map
1333
+
1334
+ /***/ }),
1335
+
1336
+ /***/ "./dist/modules/attributes/events/RepositoryAttributeSucceededEvent.js":
1337
+ /*!*****************************************************************************!*\
1338
+ !*** ./dist/modules/attributes/events/RepositoryAttributeSucceededEvent.js ***!
1339
+ \*****************************************************************************/
1340
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1341
+
1342
+ "use strict";
1343
+
1344
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
1345
+ exports.RepositoryAttributeSucceededEvent = void 0;
1346
+ const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
1347
+ class RepositoryAttributeSucceededEvent extends transport_1.TransportDataEvent {
1348
+ constructor(eventTargetAddress, predecessor, successor) {
1349
+ super(RepositoryAttributeSucceededEvent.namespace, eventTargetAddress, { predecessor, successor });
1350
+ }
1351
+ }
1352
+ exports.RepositoryAttributeSucceededEvent = RepositoryAttributeSucceededEvent;
1353
+ RepositoryAttributeSucceededEvent.namespace = "consumption.repositoryAttributeSucceded";
1354
+ //# sourceMappingURL=RepositoryAttributeSucceededEvent.js.map
1355
+
1356
+ /***/ }),
1357
+
940
1358
  /***/ "./dist/modules/attributes/events/SharedAttributeCopyCreatedEvent.js":
941
1359
  /*!***************************************************************************!*\
942
1360
  !*** ./dist/modules/attributes/events/SharedAttributeCopyCreatedEvent.js ***!
@@ -984,8 +1402,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
984
1402
  Object.defineProperty(exports, "__esModule", ({ value: true }));
985
1403
  __exportStar(__webpack_require__(/*! ./AttributeCreatedEvent */ "./dist/modules/attributes/events/AttributeCreatedEvent.js"), exports);
986
1404
  __exportStar(__webpack_require__(/*! ./AttributeDeletedEvent */ "./dist/modules/attributes/events/AttributeDeletedEvent.js"), exports);
987
- __exportStar(__webpack_require__(/*! ./AttributeSucceededEvent */ "./dist/modules/attributes/events/AttributeSucceededEvent.js"), exports);
1405
+ __exportStar(__webpack_require__(/*! ./AttributeSucceededEventData */ "./dist/modules/attributes/events/AttributeSucceededEventData.js"), exports);
988
1406
  __exportStar(__webpack_require__(/*! ./AttributeUpdatedEvent */ "./dist/modules/attributes/events/AttributeUpdatedEvent.js"), exports);
1407
+ __exportStar(__webpack_require__(/*! ./OwnSharedAttributeSucceededEvent */ "./dist/modules/attributes/events/OwnSharedAttributeSucceededEvent.js"), exports);
1408
+ __exportStar(__webpack_require__(/*! ./PeerSharedAttributeSucceededEvent */ "./dist/modules/attributes/events/PeerSharedAttributeSucceededEvent.js"), exports);
1409
+ __exportStar(__webpack_require__(/*! ./RepositoryAttributeSucceededEvent */ "./dist/modules/attributes/events/RepositoryAttributeSucceededEvent.js"), exports);
989
1410
  __exportStar(__webpack_require__(/*! ./SharedAttributeCopyCreatedEvent */ "./dist/modules/attributes/events/SharedAttributeCopyCreatedEvent.js"), exports);
990
1411
  //# sourceMappingURL=index.js.map
991
1412
 
@@ -1019,10 +1440,9 @@ __exportStar(__webpack_require__(/*! ./events */ "./dist/modules/attributes/even
1019
1440
  __exportStar(__webpack_require__(/*! ./local/CreateLocalAttributeParams */ "./dist/modules/attributes/local/CreateLocalAttributeParams.js"), exports);
1020
1441
  __exportStar(__webpack_require__(/*! ./local/CreatePeerLocalAttributeParams */ "./dist/modules/attributes/local/CreatePeerLocalAttributeParams.js"), exports);
1021
1442
  __exportStar(__webpack_require__(/*! ./local/CreateSharedLocalAttributeCopyParams */ "./dist/modules/attributes/local/CreateSharedLocalAttributeCopyParams.js"), exports);
1443
+ __exportStar(__webpack_require__(/*! ./local/IAttributeSuccessorParams */ "./dist/modules/attributes/local/IAttributeSuccessorParams.js"), exports);
1022
1444
  __exportStar(__webpack_require__(/*! ./local/LocalAttribute */ "./dist/modules/attributes/local/LocalAttribute.js"), exports);
1023
1445
  __exportStar(__webpack_require__(/*! ./local/LocalAttributeShareInfo */ "./dist/modules/attributes/local/LocalAttributeShareInfo.js"), exports);
1024
- __exportStar(__webpack_require__(/*! ./local/SucceedLocalAttributeParams */ "./dist/modules/attributes/local/SucceedLocalAttributeParams.js"), exports);
1025
- __exportStar(__webpack_require__(/*! ./local/UpdateLocalAttributeParams */ "./dist/modules/attributes/local/UpdateLocalAttributeParams.js"), exports);
1026
1446
  //# sourceMappingURL=index.js.map
1027
1447
 
1028
1448
  /***/ }),
@@ -1049,22 +1469,38 @@ exports.CreateLocalAttributeParams = void 0;
1049
1469
  const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
1050
1470
  const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
1051
1471
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
1472
+ const LocalAttributeShareInfo_1 = __webpack_require__(/*! ./LocalAttributeShareInfo */ "./dist/modules/attributes/local/LocalAttributeShareInfo.js");
1052
1473
  class CreateLocalAttributeParams extends ts_serval_1.Serializable {
1053
1474
  static from(value) {
1054
1475
  return this.fromAny(value);
1055
1476
  }
1056
1477
  }
1057
1478
  exports.CreateLocalAttributeParams = CreateLocalAttributeParams;
1479
+ __decorate([
1480
+ (0, ts_serval_1.serialize)(),
1481
+ (0, ts_serval_1.validate)({ nullable: true }),
1482
+ __metadata("design:type", transport_1.CoreId)
1483
+ ], CreateLocalAttributeParams.prototype, "id", void 0);
1058
1484
  __decorate([
1059
1485
  (0, ts_serval_1.serialize)({ unionTypes: [content_1.IdentityAttribute, content_1.RelationshipAttribute] }),
1060
1486
  (0, ts_serval_1.validate)(),
1061
1487
  __metadata("design:type", Object)
1062
1488
  ], CreateLocalAttributeParams.prototype, "content", void 0);
1063
1489
  __decorate([
1064
- (0, ts_serval_1.serialize)({ optional: true }),
1065
- (0, ts_serval_1.validate)(),
1490
+ (0, ts_serval_1.serialize)(),
1491
+ (0, ts_serval_1.validate)({ nullable: true }),
1066
1492
  __metadata("design:type", transport_1.CoreId)
1067
1493
  ], CreateLocalAttributeParams.prototype, "parentId", void 0);
1494
+ __decorate([
1495
+ (0, ts_serval_1.serialize)(),
1496
+ (0, ts_serval_1.validate)({ nullable: true }),
1497
+ __metadata("design:type", transport_1.CoreId)
1498
+ ], CreateLocalAttributeParams.prototype, "succeeds", void 0);
1499
+ __decorate([
1500
+ (0, ts_serval_1.serialize)(),
1501
+ (0, ts_serval_1.validate)({ nullable: true }),
1502
+ __metadata("design:type", LocalAttributeShareInfo_1.LocalAttributeShareInfo)
1503
+ ], CreateLocalAttributeParams.prototype, "shareInfo", void 0);
1068
1504
  //# sourceMappingURL=CreateLocalAttributeParams.js.map
1069
1505
 
1070
1506
  /***/ }),
@@ -1172,6 +1608,19 @@ __decorate([
1172
1608
 
1173
1609
  /***/ }),
1174
1610
 
1611
+ /***/ "./dist/modules/attributes/local/IAttributeSuccessorParams.js":
1612
+ /*!********************************************************************!*\
1613
+ !*** ./dist/modules/attributes/local/IAttributeSuccessorParams.js ***!
1614
+ \********************************************************************/
1615
+ /***/ ((__unused_webpack_module, exports) => {
1616
+
1617
+ "use strict";
1618
+
1619
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
1620
+ //# sourceMappingURL=IAttributeSuccessorParams.js.map
1621
+
1622
+ /***/ }),
1623
+
1175
1624
  /***/ "./dist/modules/attributes/local/LocalAttribute.js":
1176
1625
  /*!*********************************************************!*\
1177
1626
  !*** ./dist/modules/attributes/local/LocalAttribute.js ***!
@@ -1211,26 +1660,60 @@ let LocalAttribute = class LocalAttribute extends transport_1.CoreSynchronizable
1211
1660
  ];
1212
1661
  this.userdataProperties = [(0, ts_simple_nameof_1.nameof)((r) => r.content)];
1213
1662
  }
1663
+ isOwnSharedIdentityAttribute(ownAddress, peerAddress) {
1664
+ return this.isIdentityAttribute() && this.isOwnSharedAttribute(ownAddress, peerAddress);
1665
+ }
1666
+ isOwnSharedRelationshipAttribute(ownAddress, peerAddress) {
1667
+ return this.isRelationshipAttribute() && this.isOwnSharedAttribute(ownAddress, peerAddress);
1668
+ }
1669
+ isPeerSharedIdentityAttribute(peerAddress) {
1670
+ return this.isIdentityAttribute() && this.isPeerSharedAttribute(peerAddress);
1671
+ }
1672
+ isPeerSharedRelationshipAttribute(peerAddress) {
1673
+ return this.isRelationshipAttribute() && this.isPeerSharedAttribute(peerAddress);
1674
+ }
1675
+ isRepositoryAttribute() {
1676
+ return this.isIdentityAttribute() && !this.isShared();
1677
+ }
1678
+ isOwnSharedAttribute(ownAddress, peerAddress) {
1679
+ let isOwnSharedAttribute = this.isShared() && this.isOwnedBy(ownAddress);
1680
+ if (!isOwnSharedAttribute) {
1681
+ return isOwnSharedAttribute;
1682
+ }
1683
+ if (this.isIdentityAttribute()) {
1684
+ isOwnSharedAttribute &&= typeof this.shareInfo.sourceAttribute !== "undefined";
1685
+ }
1686
+ if (typeof peerAddress !== "undefined") {
1687
+ isOwnSharedAttribute &&= this.shareInfo.peer.equals(ownAddress);
1688
+ }
1689
+ return isOwnSharedAttribute;
1690
+ }
1691
+ isPeerSharedAttribute(peerAddress) {
1692
+ let isPeerSharedAttribute = this.isShared() && this.isOwnedBy(this.shareInfo.peer);
1693
+ if (!isPeerSharedAttribute) {
1694
+ return isPeerSharedAttribute;
1695
+ }
1696
+ if (this.isIdentityAttribute()) {
1697
+ isPeerSharedAttribute &&= typeof this.shareInfo.sourceAttribute === "undefined";
1698
+ }
1699
+ if (typeof peerAddress !== "undefined") {
1700
+ isPeerSharedAttribute &&= this.isOwnedBy(peerAddress);
1701
+ }
1702
+ return isPeerSharedAttribute;
1703
+ }
1214
1704
  isIdentityAttribute() {
1215
1705
  return this.content instanceof content_1.IdentityAttribute;
1216
1706
  }
1217
1707
  isRelationshipAttribute() {
1218
- return this.content instanceof content_1.RelationshipAttribute;
1708
+ return (this.content instanceof content_1.RelationshipAttribute &&
1709
+ this.isShared() &&
1710
+ typeof this.shareInfo.sourceAttribute === "undefined");
1219
1711
  }
1220
1712
  isOwnedBy(identity) {
1221
1713
  return this.content.owner.equals(identity);
1222
1714
  }
1223
- isRepositoryAttribute() {
1224
- return this.isIdentityAttribute() && !this.isShared();
1225
- }
1226
1715
  isShared() {
1227
- return this.shareInfo !== undefined;
1228
- }
1229
- isSharedWith(address) {
1230
- if (!this.isShared()) {
1231
- return false;
1232
- }
1233
- return this.shareInfo.peer === address;
1716
+ return typeof this.shareInfo !== "undefined";
1234
1717
  }
1235
1718
  static from(value) {
1236
1719
  return this.fromAny(value);
@@ -1305,25 +1788,44 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
1305
1788
  exports.LocalAttributeShareInfo = void 0;
1306
1789
  const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
1307
1790
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
1791
+ const ts_simple_nameof_1 = __webpack_require__(/*! ts-simple-nameof */ "./node_modules/ts-simple-nameof/index.js");
1792
+ const ConsumptionError_1 = __webpack_require__(/*! ../../../consumption/ConsumptionError */ "./dist/consumption/ConsumptionError.js");
1308
1793
  class LocalAttributeShareInfo extends transport_1.CoreSerializable {
1309
1794
  static from(value) {
1310
1795
  return super.fromAny(value);
1311
1796
  }
1797
+ static postFrom(value) {
1798
+ if (!(value instanceof LocalAttributeShareInfo)) {
1799
+ throw new ConsumptionError_1.ConsumptionError("this should never happen");
1800
+ }
1801
+ if (typeof value.requestReference === "undefined" && typeof value.notificationReference === "undefined") {
1802
+ throw new ts_serval_1.ValidationError(LocalAttributeShareInfo.name, (0, ts_simple_nameof_1.nameof)((x) => x.requestReference), `One of ${(0, ts_simple_nameof_1.nameof)((x) => x.requestReference)} or ${(0, ts_simple_nameof_1.nameof)((x) => x.notificationReference)} must be set.`);
1803
+ }
1804
+ if (typeof value.requestReference !== "undefined" && typeof value.notificationReference !== "undefined") {
1805
+ throw new ts_serval_1.ValidationError(LocalAttributeShareInfo.name, (0, ts_simple_nameof_1.nameof)((x) => x.requestReference), `Both of ${(0, ts_simple_nameof_1.nameof)((x) => x.requestReference)} or ${(0, ts_simple_nameof_1.nameof)((x) => x.notificationReference)} must not be set.`);
1806
+ }
1807
+ return value;
1808
+ }
1312
1809
  }
1313
1810
  exports.LocalAttributeShareInfo = LocalAttributeShareInfo;
1314
1811
  __decorate([
1315
- (0, ts_serval_1.validate)(),
1316
1812
  (0, ts_serval_1.serialize)(),
1813
+ (0, ts_serval_1.validate)({ nullable: true }),
1317
1814
  __metadata("design:type", transport_1.CoreId)
1318
1815
  ], LocalAttributeShareInfo.prototype, "requestReference", void 0);
1816
+ __decorate([
1817
+ (0, ts_serval_1.serialize)(),
1818
+ (0, ts_serval_1.validate)({ nullable: true }),
1819
+ __metadata("design:type", transport_1.CoreId)
1820
+ ], LocalAttributeShareInfo.prototype, "notificationReference", void 0);
1319
1821
  __decorate([
1320
1822
  (0, ts_serval_1.validate)(),
1321
1823
  (0, ts_serval_1.serialize)(),
1322
1824
  __metadata("design:type", transport_1.CoreAddress)
1323
1825
  ], LocalAttributeShareInfo.prototype, "peer", void 0);
1324
1826
  __decorate([
1325
- (0, ts_serval_1.validate)({ nullable: true }),
1326
1827
  (0, ts_serval_1.serialize)(),
1828
+ (0, ts_serval_1.validate)({ nullable: true }),
1327
1829
  __metadata("design:type", transport_1.CoreId)
1328
1830
  ], LocalAttributeShareInfo.prototype, "sourceAttribute", void 0);
1329
1831
  //# sourceMappingURL=LocalAttributeShareInfo.js.map
@@ -1510,87 +2012,82 @@ ThirdPartyRelationshipAttributeQueryTranslator.translator = new docdb_querytrans
1510
2012
 
1511
2013
  /***/ }),
1512
2014
 
1513
- /***/ "./dist/modules/attributes/local/SucceedLocalAttributeParams.js":
1514
- /*!**********************************************************************!*\
1515
- !*** ./dist/modules/attributes/local/SucceedLocalAttributeParams.js ***!
1516
- \**********************************************************************/
1517
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
2015
+ /***/ "./dist/modules/common/ValidationResult.js":
2016
+ /*!*************************************************!*\
2017
+ !*** ./dist/modules/common/ValidationResult.js ***!
2018
+ \*************************************************/
2019
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1518
2020
 
1519
2021
  "use strict";
1520
2022
 
1521
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
1522
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1523
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1524
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1525
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1526
- };
1527
- var __metadata = (this && this.__metadata) || function (k, v) {
1528
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
1529
- };
1530
2023
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1531
- exports.SucceedLocalAttributeParams = void 0;
1532
- const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
1533
- const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
1534
- const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
1535
- class SucceedLocalAttributeParams extends ts_serval_1.Serializable {
1536
- static from(value) {
1537
- return this.fromAny(value);
2024
+ exports.ErrorValidationResult = exports.SuccessfulValidationResult = exports.ValidationResult = void 0;
2025
+ const ts_utils_1 = __webpack_require__(/*! @js-soft/ts-utils */ "./node_modules/@js-soft/ts-utils/dist/index.js");
2026
+ class ValidationResult {
2027
+ constructor(items) {
2028
+ this.items = items;
2029
+ }
2030
+ isSuccess() {
2031
+ return this instanceof SuccessfulValidationResult;
2032
+ }
2033
+ isError() {
2034
+ return this instanceof ErrorValidationResult;
2035
+ }
2036
+ static success(items = []) {
2037
+ return new SuccessfulValidationResult(items);
2038
+ }
2039
+ static error(error, items = []) {
2040
+ return new ErrorValidationResult(error, items);
2041
+ }
2042
+ static fromItems(items) {
2043
+ return items.some((r) => r.isError())
2044
+ ? ValidationResult.error(new ts_utils_1.ApplicationError("inheritedFromItem", "Some child items have errors."), items)
2045
+ : ValidationResult.success(items);
1538
2046
  }
1539
2047
  }
1540
- exports.SucceedLocalAttributeParams = SucceedLocalAttributeParams;
1541
- __decorate([
1542
- (0, ts_serval_1.serialize)({ unionTypes: [content_1.IdentityAttribute, content_1.RelationshipAttribute] }),
1543
- (0, ts_serval_1.validate)(),
1544
- __metadata("design:type", Object)
1545
- ], SucceedLocalAttributeParams.prototype, "successorContent", void 0);
1546
- __decorate([
1547
- (0, ts_serval_1.serialize)(),
1548
- (0, ts_serval_1.validate)(),
1549
- __metadata("design:type", transport_1.CoreId)
1550
- ], SucceedLocalAttributeParams.prototype, "succeeds", void 0);
1551
- //# sourceMappingURL=SucceedLocalAttributeParams.js.map
2048
+ exports.ValidationResult = ValidationResult;
2049
+ class SuccessfulValidationResult extends ValidationResult {
2050
+ constructor(items) {
2051
+ super(items);
2052
+ }
2053
+ }
2054
+ exports.SuccessfulValidationResult = SuccessfulValidationResult;
2055
+ class ErrorValidationResult extends ValidationResult {
2056
+ constructor(error, items) {
2057
+ super(items);
2058
+ this.error = error;
2059
+ }
2060
+ }
2061
+ exports.ErrorValidationResult = ErrorValidationResult;
2062
+ //# sourceMappingURL=ValidationResult.js.map
1552
2063
 
1553
2064
  /***/ }),
1554
2065
 
1555
- /***/ "./dist/modules/attributes/local/UpdateLocalAttributeParams.js":
1556
- /*!*********************************************************************!*\
1557
- !*** ./dist/modules/attributes/local/UpdateLocalAttributeParams.js ***!
1558
- \*********************************************************************/
2066
+ /***/ "./dist/modules/common/index.js":
2067
+ /*!**************************************!*\
2068
+ !*** ./dist/modules/common/index.js ***!
2069
+ \**************************************/
1559
2070
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
1560
2071
 
1561
2072
  "use strict";
1562
2073
 
1563
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
1564
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1565
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1566
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1567
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1568
- };
1569
- var __metadata = (this && this.__metadata) || function (k, v) {
1570
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
2074
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
2075
+ if (k2 === undefined) k2 = k;
2076
+ var desc = Object.getOwnPropertyDescriptor(m, k);
2077
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
2078
+ desc = { enumerable: true, get: function() { return m[k]; } };
2079
+ }
2080
+ Object.defineProperty(o, k2, desc);
2081
+ }) : (function(o, m, k, k2) {
2082
+ if (k2 === undefined) k2 = k;
2083
+ o[k2] = m[k];
2084
+ }));
2085
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
2086
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
1571
2087
  };
1572
2088
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1573
- exports.UpdateLocalAttributeParams = void 0;
1574
- const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
1575
- const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
1576
- const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
1577
- class UpdateLocalAttributeParams extends ts_serval_1.Serializable {
1578
- static from(value) {
1579
- return this.fromAny(value);
1580
- }
1581
- }
1582
- exports.UpdateLocalAttributeParams = UpdateLocalAttributeParams;
1583
- __decorate([
1584
- (0, ts_serval_1.serialize)(),
1585
- (0, ts_serval_1.validate)(),
1586
- __metadata("design:type", transport_1.CoreId)
1587
- ], UpdateLocalAttributeParams.prototype, "id", void 0);
1588
- __decorate([
1589
- (0, ts_serval_1.serialize)({ unionTypes: [content_1.IdentityAttribute, content_1.RelationshipAttribute] }),
1590
- (0, ts_serval_1.validate)(),
1591
- __metadata("design:type", Object)
1592
- ], UpdateLocalAttributeParams.prototype, "content", void 0);
1593
- //# sourceMappingURL=UpdateLocalAttributeParams.js.map
2089
+ __exportStar(__webpack_require__(/*! ./ValidationResult */ "./dist/modules/common/ValidationResult.js"), exports);
2090
+ //# sourceMappingURL=index.js.map
1594
2091
 
1595
2092
  /***/ }),
1596
2093
 
@@ -1788,6 +2285,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
1788
2285
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1789
2286
  __exportStar(__webpack_require__(/*! ./attributeListeners */ "./dist/modules/attributeListeners/index.js"), exports);
1790
2287
  __exportStar(__webpack_require__(/*! ./attributes */ "./dist/modules/attributes/index.js"), exports);
2288
+ __exportStar(__webpack_require__(/*! ./common */ "./dist/modules/common/index.js"), exports);
1791
2289
  __exportStar(__webpack_require__(/*! ./drafts */ "./dist/modules/drafts/index.js"), exports);
1792
2290
  __exportStar(__webpack_require__(/*! ./notifications */ "./dist/modules/notifications/index.js"), exports);
1793
2291
  __exportStar(__webpack_require__(/*! ./requests */ "./dist/modules/requests/index.js"), exports);
@@ -1906,14 +2404,13 @@ class NotificationsController extends ConsumptionBaseController_1.ConsumptionBas
1906
2404
  try {
1907
2405
  for (const item of notification.content.items) {
1908
2406
  const processor = this.processorRegistry.getProcessorForItem(item);
1909
- const prerequisitesMatched = await processor.checkPrerequisitesOfIncomingNotificationItem(item);
1910
- if (!prerequisitesMatched) {
2407
+ const checkResult = await processor.checkPrerequisitesOfIncomingNotificationItem(item, notification);
2408
+ if (checkResult.isError()) {
1911
2409
  const index = notification.content.items.indexOf(item);
1912
2410
  throw new Error(`Prerequisites of notificationItem with index '${index}' of Notification ${notification.id} not met.`);
1913
2411
  }
1914
- // we should also rollback the item that failed, therefore we need to push before processing
2412
+ const event = await processor.process(item, notification);
1915
2413
  processedItems.push(item);
1916
- const event = await processor.process(item);
1917
2414
  if (event)
1918
2415
  events.push(event);
1919
2416
  }
@@ -1922,7 +2419,7 @@ class NotificationsController extends ConsumptionBaseController_1.ConsumptionBas
1922
2419
  this._log.error(`Error while processing notification ${notification.id}: ${e}`);
1923
2420
  for (const item of processedItems.reverse()) {
1924
2421
  const processor = this.processorRegistry.getProcessorForItem(item);
1925
- await processor.rollback(item);
2422
+ await processor.rollback(item, notification);
1926
2423
  }
1927
2424
  notification.status = LocalNotification_1.LocalNotificationStatus.Error;
1928
2425
  await this.localNotifications.update(oldDoc, notification);
@@ -2071,17 +2568,77 @@ exports.NotificationItemProcessorRegistry = NotificationItemProcessorRegistry;
2071
2568
 
2072
2569
  Object.defineProperty(exports, "__esModule", ({ value: true }));
2073
2570
  exports.AttributeSucceededNotificationItemProcessor = void 0;
2571
+ const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
2572
+ const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
2573
+ const CoreErrors_1 = __webpack_require__(/*! ../../../../consumption/CoreErrors */ "./dist/consumption/CoreErrors.js");
2574
+ const attributes_1 = __webpack_require__(/*! ../../../attributes */ "./dist/modules/attributes/index.js");
2575
+ const common_1 = __webpack_require__(/*! ../../../common */ "./dist/modules/common/index.js");
2074
2576
  const AbstractNotificationItemProcessor_1 = __webpack_require__(/*! ../AbstractNotificationItemProcessor */ "./dist/modules/notifications/itemProcessors/AbstractNotificationItemProcessor.js");
2075
2577
  class AttributeSucceededNotificationItemProcessor extends AbstractNotificationItemProcessor_1.AbstractNotificationItemProcessor {
2076
- checkPrerequisitesOfIncomingNotificationItem(_notificationItem) {
2077
- throw new Error("Method not implemented.");
2578
+ constructor(consumptionController) {
2579
+ super(consumptionController);
2580
+ this._logger = transport_1.TransportLoggerFactory.getLogger(AttributeSucceededNotificationItemProcessor);
2581
+ }
2582
+ async checkPrerequisitesOfIncomingNotificationItem(notificationItem, notification) {
2583
+ if (!notification.peer.equals(notificationItem.attribute.owner)) {
2584
+ return common_1.ValidationResult.error(CoreErrors_1.CoreErrors.attributes.successionPeerIsNotOwner());
2585
+ }
2586
+ const successorParams = {
2587
+ id: notificationItem.newAttributeId,
2588
+ content: notificationItem.attribute,
2589
+ shareInfo: { requestReference: notification.id, peer: notification.peer }
2590
+ };
2591
+ if (notificationItem.attribute instanceof content_1.IdentityAttribute) {
2592
+ const validationResult = await this.consumptionController.attributes.validatePeerSharedIdentityAttributeSuccession(notificationItem.succeededAttributeId, successorParams);
2593
+ return validationResult;
2594
+ }
2595
+ const validationResult = await this.consumptionController.attributes.validatePeerSharedRelationshipAttributeSuccession(notificationItem.succeededAttributeId, successorParams);
2596
+ return validationResult;
2597
+ }
2598
+ async process(notificationItem, notification) {
2599
+ const successorParams = {
2600
+ id: notificationItem.newAttributeId,
2601
+ content: notificationItem.attribute,
2602
+ shareInfo: { requestReference: notification.id, peer: notification.peer }
2603
+ };
2604
+ let predecessor;
2605
+ let successor;
2606
+ try {
2607
+ if (notificationItem.attribute instanceof content_1.IdentityAttribute) {
2608
+ ;
2609
+ ({ predecessor, successor } =
2610
+ await this.consumptionController.attributes.succeedPeerSharedIdentityAttribute(notificationItem.succeededAttributeId, successorParams, false));
2611
+ }
2612
+ else {
2613
+ ;
2614
+ ({ predecessor, successor } =
2615
+ await this.consumptionController.attributes.succeedPeerSharedRelationshipAttribute(notificationItem.succeededAttributeId, successorParams, false));
2616
+ }
2617
+ }
2618
+ catch (e) {
2619
+ await this.rollbackPartialWork(notificationItem, notification).catch((e) => this._logger.error(`Rollback failed for notification item (notification id: ${notification.id}).`, e));
2620
+ throw e;
2621
+ }
2622
+ const myAddress = this.consumptionController.accountController.identity.address;
2623
+ return new attributes_1.PeerSharedAttributeSucceededEvent(myAddress.toString(), predecessor, successor);
2078
2624
  }
2079
- // eslint-disable-next-line @typescript-eslint/require-await
2080
- async process(_notificationItem) {
2081
- throw new Error("Method not implemented.");
2625
+ async rollback(notificationItem, notification) {
2626
+ await this.rollbackPartialWork(notificationItem, notification);
2082
2627
  }
2083
- rollback() {
2084
- throw new Error("Method not implemented.");
2628
+ async rollbackPartialWork(notificationItem, _notification) {
2629
+ const successor = await this.consumptionController.attributes.getLocalAttribute(notificationItem.newAttributeId);
2630
+ if (typeof successor !== "undefined") {
2631
+ await this.consumptionController.attributes
2632
+ .deleteAttributeUnsafe(successor.id)
2633
+ .catch((e) => this._logger.error(`Deletion failed for attribute (attribute id: ${successor.id}).`, e));
2634
+ }
2635
+ const predecessor = await this.consumptionController.attributes.getLocalAttribute(notificationItem.succeededAttributeId);
2636
+ if (typeof predecessor?.succeededBy !== "undefined") {
2637
+ predecessor.succeededBy = undefined;
2638
+ await this.consumptionController.attributes
2639
+ .updateAttributeUnsafe(predecessor)
2640
+ .catch((e) => this._logger.error(`Update failed for attribute (attribute id: ${notificationItem.succeededAttributeId}).`, e));
2641
+ }
2085
2642
  }
2086
2643
  }
2087
2644
  exports.AttributeSucceededNotificationItemProcessor = AttributeSucceededNotificationItemProcessor;
@@ -2417,7 +2974,7 @@ exports.DecideRequestParametersValidator = void 0;
2417
2974
  const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
2418
2975
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
2419
2976
  const CoreErrors_1 = __webpack_require__(/*! ../../../consumption/CoreErrors */ "./dist/consumption/CoreErrors.js");
2420
- const ValidationResult_1 = __webpack_require__(/*! ../itemProcessors/ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
2977
+ const ValidationResult_1 = __webpack_require__(/*! ../../common/ValidationResult */ "./dist/modules/common/ValidationResult.js");
2421
2978
  const DecideRequestItemGroupParameters_1 = __webpack_require__(/*! ./decide/DecideRequestItemGroupParameters */ "./dist/modules/requests/incoming/decide/DecideRequestItemGroupParameters.js");
2422
2979
  const DecideRequestItemParameters_1 = __webpack_require__(/*! ./decide/DecideRequestItemParameters */ "./dist/modules/requests/incoming/decide/DecideRequestItemParameters.js");
2423
2980
  class DecideRequestParametersValidator {
@@ -2490,8 +3047,8 @@ const ConsumptionControllerName_1 = __webpack_require__(/*! ../../../consumption
2490
3047
  const ConsumptionError_1 = __webpack_require__(/*! ../../../consumption/ConsumptionError */ "./dist/consumption/ConsumptionError.js");
2491
3048
  const ConsumptionIds_1 = __webpack_require__(/*! ../../../consumption/ConsumptionIds */ "./dist/consumption/ConsumptionIds.js");
2492
3049
  const CoreErrors_1 = __webpack_require__(/*! ../../../consumption/CoreErrors */ "./dist/consumption/CoreErrors.js");
3050
+ const ValidationResult_1 = __webpack_require__(/*! ../../common/ValidationResult */ "./dist/modules/common/ValidationResult.js");
2493
3051
  const events_1 = __webpack_require__(/*! ../events */ "./dist/modules/requests/events/index.js");
2494
- const ValidationResult_1 = __webpack_require__(/*! ../itemProcessors/ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
2495
3052
  const LocalRequest_1 = __webpack_require__(/*! ../local/LocalRequest */ "./dist/modules/requests/local/LocalRequest.js");
2496
3053
  const LocalRequestStatus_1 = __webpack_require__(/*! ../local/LocalRequestStatus */ "./dist/modules/requests/local/LocalRequestStatus.js");
2497
3054
  const LocalResponse_1 = __webpack_require__(/*! ../local/LocalResponse */ "./dist/modules/requests/local/LocalResponse.js");
@@ -3127,7 +3684,6 @@ __exportStar(__webpack_require__(/*! ./itemProcessors/IRequestItemProcessor */ "
3127
3684
  __exportStar(__webpack_require__(/*! ./itemProcessors/RequestItemConstructor */ "./dist/modules/requests/itemProcessors/RequestItemConstructor.js"), exports);
3128
3685
  __exportStar(__webpack_require__(/*! ./itemProcessors/RequestItemProcessorConstructor */ "./dist/modules/requests/itemProcessors/RequestItemProcessorConstructor.js"), exports);
3129
3686
  __exportStar(__webpack_require__(/*! ./itemProcessors/RequestItemProcessorRegistry */ "./dist/modules/requests/itemProcessors/RequestItemProcessorRegistry.js"), exports);
3130
- __exportStar(__webpack_require__(/*! ./itemProcessors/ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js"), exports);
3131
3687
  __exportStar(__webpack_require__(/*! ./itemProcessors/createAttribute/CreateAttributeRequestItemProcessor */ "./dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js"), exports);
3132
3688
  __exportStar(__webpack_require__(/*! ./itemProcessors/freeText/AcceptFreeTextRequestItemParameters */ "./dist/modules/requests/itemProcessors/freeText/AcceptFreeTextRequestItemParameters.js"), exports);
3133
3689
  __exportStar(__webpack_require__(/*! ./itemProcessors/freeText/FreeTextRequestItemProcessor */ "./dist/modules/requests/itemProcessors/freeText/FreeTextRequestItemProcessor.js"), exports);
@@ -3184,8 +3740,8 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
3184
3740
  exports.GenericRequestItemProcessor = void 0;
3185
3741
  /* eslint-disable @typescript-eslint/no-unused-vars */
3186
3742
  const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
3743
+ const ValidationResult_1 = __webpack_require__(/*! ../../common/ValidationResult */ "./dist/modules/common/ValidationResult.js");
3187
3744
  const AbstractRequestItemProcessor_1 = __webpack_require__(/*! ./AbstractRequestItemProcessor */ "./dist/modules/requests/itemProcessors/AbstractRequestItemProcessor.js");
3188
- const ValidationResult_1 = __webpack_require__(/*! ./ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
3189
3745
  class GenericRequestItemProcessor extends AbstractRequestItemProcessor_1.AbstractRequestItemProcessor {
3190
3746
  checkPrerequisitesOfIncomingRequestItem(requestItem, requestInfo) {
3191
3747
  return true;
@@ -3294,57 +3850,6 @@ exports.RequestItemProcessorRegistry = RequestItemProcessorRegistry;
3294
3850
 
3295
3851
  /***/ }),
3296
3852
 
3297
- /***/ "./dist/modules/requests/itemProcessors/ValidationResult.js":
3298
- /*!******************************************************************!*\
3299
- !*** ./dist/modules/requests/itemProcessors/ValidationResult.js ***!
3300
- \******************************************************************/
3301
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
3302
-
3303
- "use strict";
3304
-
3305
- Object.defineProperty(exports, "__esModule", ({ value: true }));
3306
- exports.ErrorValidationResult = exports.SuccessfulValidationResult = exports.ValidationResult = void 0;
3307
- const ts_utils_1 = __webpack_require__(/*! @js-soft/ts-utils */ "./node_modules/@js-soft/ts-utils/dist/index.js");
3308
- class ValidationResult {
3309
- constructor(items) {
3310
- this.items = items;
3311
- }
3312
- isSuccess() {
3313
- return this instanceof SuccessfulValidationResult;
3314
- }
3315
- isError() {
3316
- return this instanceof ErrorValidationResult;
3317
- }
3318
- static success(items = []) {
3319
- return new SuccessfulValidationResult(items);
3320
- }
3321
- static error(error, items = []) {
3322
- return new ErrorValidationResult(error, items);
3323
- }
3324
- static fromItems(items) {
3325
- return items.some((r) => r.isError())
3326
- ? ValidationResult.error(new ts_utils_1.ApplicationError("inheritedFromItem", "Some child items have errors."), items)
3327
- : ValidationResult.success(items);
3328
- }
3329
- }
3330
- exports.ValidationResult = ValidationResult;
3331
- class SuccessfulValidationResult extends ValidationResult {
3332
- constructor(items) {
3333
- super(items);
3334
- }
3335
- }
3336
- exports.SuccessfulValidationResult = SuccessfulValidationResult;
3337
- class ErrorValidationResult extends ValidationResult {
3338
- constructor(error, items) {
3339
- super(items);
3340
- this.error = error;
3341
- }
3342
- }
3343
- exports.ErrorValidationResult = ErrorValidationResult;
3344
- //# sourceMappingURL=ValidationResult.js.map
3345
-
3346
- /***/ }),
3347
-
3348
3853
  /***/ "./dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js":
3349
3854
  /*!*****************************************************************************************************!*\
3350
3855
  !*** ./dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js ***!
@@ -3357,8 +3862,8 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
3357
3862
  exports.CreateAttributeRequestItemProcessor = void 0;
3358
3863
  const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
3359
3864
  const CoreErrors_1 = __webpack_require__(/*! ../../../../consumption/CoreErrors */ "./dist/consumption/CoreErrors.js");
3865
+ const ValidationResult_1 = __webpack_require__(/*! ../../../common/ValidationResult */ "./dist/modules/common/ValidationResult.js");
3360
3866
  const GenericRequestItemProcessor_1 = __webpack_require__(/*! ../GenericRequestItemProcessor */ "./dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js");
3361
- const ValidationResult_1 = __webpack_require__(/*! ../ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
3362
3867
  class CreateAttributeRequestItemProcessor extends GenericRequestItemProcessor_1.GenericRequestItemProcessor {
3363
3868
  canCreateOutgoingRequestItem(requestItem, _request, recipient) {
3364
3869
  const recipientIsAttributeOwner = requestItem.attribute.owner.equals(recipient);
@@ -3368,12 +3873,15 @@ class CreateAttributeRequestItemProcessor extends GenericRequestItemProcessor_1.
3368
3873
  if (senderIsAttributeOwner) {
3369
3874
  return ValidationResult_1.ValidationResult.error(CoreErrors_1.CoreErrors.requests.invalidRequestItem("Cannot create own Attributes with a CreateAttributeRequestItem. Use a ShareAttributeRequestItem instead."));
3370
3875
  }
3371
- if (recipientIsAttributeOwner || ownerIsEmptyString || recipient === undefined) {
3876
+ if (recipientIsAttributeOwner || ownerIsEmptyString || typeof recipient === "undefined") {
3372
3877
  return ValidationResult_1.ValidationResult.success();
3373
3878
  }
3374
3879
  return ValidationResult_1.ValidationResult.error(CoreErrors_1.CoreErrors.requests.invalidRequestItem("The owner of the given `attribute` can only be the recipient's address or an empty string. The latter will default to the recipient's address."));
3375
3880
  }
3376
- if (recipientIsAttributeOwner || senderIsAttributeOwner || ownerIsEmptyString || recipient === undefined) {
3881
+ if (recipientIsAttributeOwner ||
3882
+ senderIsAttributeOwner ||
3883
+ ownerIsEmptyString ||
3884
+ typeof recipient === "undefined") {
3377
3885
  return ValidationResult_1.ValidationResult.success();
3378
3886
  }
3379
3887
  return ValidationResult_1.ValidationResult.error(CoreErrors_1.CoreErrors.requests.invalidRequestItem("The owner of the given 'attribute' can only be the sender's address, the recipient's address or an empty string. The latter will default to the recipient's address."));
@@ -3475,8 +3983,8 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
3475
3983
  exports.FreeTextRequestItemProcessor = void 0;
3476
3984
  const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
3477
3985
  const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
3986
+ const ValidationResult_1 = __webpack_require__(/*! ../../../common/ValidationResult */ "./dist/modules/common/ValidationResult.js");
3478
3987
  const GenericRequestItemProcessor_1 = __webpack_require__(/*! ../GenericRequestItemProcessor */ "./dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js");
3479
- const ValidationResult_1 = __webpack_require__(/*! ../ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
3480
3988
  const CoreErrors_1 = __webpack_require__(/*! ../../../../consumption/CoreErrors */ "./dist/consumption/CoreErrors.js");
3481
3989
  const AcceptFreeTextRequestItemParameters_1 = __webpack_require__(/*! ./AcceptFreeTextRequestItemParameters */ "./dist/modules/requests/itemProcessors/freeText/AcceptFreeTextRequestItemParameters.js");
3482
3990
  class FreeTextRequestItemProcessor extends GenericRequestItemProcessor_1.GenericRequestItemProcessor {
@@ -3531,10 +4039,10 @@ const ts_simple_nameof_1 = __webpack_require__(/*! ts-simple-nameof */ "./node_m
3531
4039
  const ConsumptionError_1 = __webpack_require__(/*! ../../../../consumption/ConsumptionError */ "./dist/consumption/ConsumptionError.js");
3532
4040
  let AcceptProposeAttributeRequestItemParameters = AcceptProposeAttributeRequestItemParameters_1 = class AcceptProposeAttributeRequestItemParameters extends ts_serval_1.Serializable {
3533
4041
  isWithExistingAttribute() {
3534
- return this.attributeId !== undefined;
4042
+ return typeof this.attributeId !== "undefined";
3535
4043
  }
3536
4044
  isWithNewAttribute() {
3537
- return this.attribute !== undefined;
4045
+ return typeof this.attribute !== "undefined";
3538
4046
  }
3539
4047
  static from(value) {
3540
4048
  return this.fromAny(value);
@@ -3587,8 +4095,8 @@ const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
3587
4095
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
3588
4096
  const CoreErrors_1 = __webpack_require__(/*! ../../../../consumption/CoreErrors */ "./dist/consumption/CoreErrors.js");
3589
4097
  const LocalAttribute_1 = __webpack_require__(/*! ../../../attributes/local/LocalAttribute */ "./dist/modules/attributes/local/LocalAttribute.js");
4098
+ const ValidationResult_1 = __webpack_require__(/*! ../../../common/ValidationResult */ "./dist/modules/common/ValidationResult.js");
3590
4099
  const GenericRequestItemProcessor_1 = __webpack_require__(/*! ../GenericRequestItemProcessor */ "./dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js");
3591
- const ValidationResult_1 = __webpack_require__(/*! ../ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
3592
4100
  const validateQuery_1 = __importDefault(__webpack_require__(/*! ../utility/validateQuery */ "./dist/modules/requests/itemProcessors/utility/validateQuery.js"));
3593
4101
  const AcceptProposeAttributeRequestItemParameters_1 = __webpack_require__(/*! ./AcceptProposeAttributeRequestItemParameters */ "./dist/modules/requests/itemProcessors/proposeAttribute/AcceptProposeAttributeRequestItemParameters.js");
3594
4102
  class ProposeAttributeRequestItemProcessor extends GenericRequestItemProcessor_1.GenericRequestItemProcessor {
@@ -3719,10 +4227,10 @@ const ts_simple_nameof_1 = __webpack_require__(/*! ts-simple-nameof */ "./node_m
3719
4227
  const ConsumptionError_1 = __webpack_require__(/*! ../../../../consumption/ConsumptionError */ "./dist/consumption/ConsumptionError.js");
3720
4228
  let AcceptReadAttributeRequestItemParameters = AcceptReadAttributeRequestItemParameters_1 = class AcceptReadAttributeRequestItemParameters extends ts_serval_1.Serializable {
3721
4229
  isWithExistingAttribute() {
3722
- return this.existingAttributeId !== undefined;
4230
+ return typeof this.existingAttributeId !== "undefined";
3723
4231
  }
3724
4232
  isWithNewAttribute() {
3725
- return this.newAttribute !== undefined;
4233
+ return typeof this.newAttribute !== "undefined";
3726
4234
  }
3727
4235
  static from(value) {
3728
4236
  return this.fromAny(value);
@@ -3775,8 +4283,8 @@ const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
3775
4283
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
3776
4284
  const CoreErrors_1 = __webpack_require__(/*! ../../../../consumption/CoreErrors */ "./dist/consumption/CoreErrors.js");
3777
4285
  const LocalAttribute_1 = __webpack_require__(/*! ../../../attributes/local/LocalAttribute */ "./dist/modules/attributes/local/LocalAttribute.js");
4286
+ const ValidationResult_1 = __webpack_require__(/*! ../../../common/ValidationResult */ "./dist/modules/common/ValidationResult.js");
3778
4287
  const GenericRequestItemProcessor_1 = __webpack_require__(/*! ../GenericRequestItemProcessor */ "./dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js");
3779
- const ValidationResult_1 = __webpack_require__(/*! ../ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
3780
4288
  const validateQuery_1 = __importDefault(__webpack_require__(/*! ../utility/validateQuery */ "./dist/modules/requests/itemProcessors/utility/validateQuery.js"));
3781
4289
  const AcceptReadAttributeRequestItemParameters_1 = __webpack_require__(/*! ./AcceptReadAttributeRequestItemParameters */ "./dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.js");
3782
4290
  class ReadAttributeRequestItemProcessor extends GenericRequestItemProcessor_1.GenericRequestItemProcessor {
@@ -3902,8 +4410,8 @@ exports.ShareAttributeRequestItemProcessor = void 0;
3902
4410
  const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
3903
4411
  const lodash_1 = __importDefault(__webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js"));
3904
4412
  const CoreErrors_1 = __webpack_require__(/*! ../../../../consumption/CoreErrors */ "./dist/consumption/CoreErrors.js");
4413
+ const ValidationResult_1 = __webpack_require__(/*! ../../../common/ValidationResult */ "./dist/modules/common/ValidationResult.js");
3905
4414
  const GenericRequestItemProcessor_1 = __webpack_require__(/*! ../GenericRequestItemProcessor */ "./dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js");
3906
- const ValidationResult_1 = __webpack_require__(/*! ../ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
3907
4415
  class ShareAttributeRequestItemProcessor extends GenericRequestItemProcessor_1.GenericRequestItemProcessor {
3908
4416
  async canCreateOutgoingRequestItem(requestItem, _request, recipient) {
3909
4417
  const attribute = await this.consumptionController.attributes.getLocalAttribute(requestItem.sourceAttributeId);
@@ -3982,7 +4490,7 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
3982
4490
  const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
3983
4491
  const iql_1 = __webpack_require__(/*! @nmshd/iql */ "./node_modules/@nmshd/iql/dist/src/index.js");
3984
4492
  const CoreErrors_1 = __webpack_require__(/*! ../../../../consumption/CoreErrors */ "./dist/consumption/CoreErrors.js");
3985
- const ValidationResult_1 = __webpack_require__(/*! ../ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
4493
+ const ValidationResult_1 = __webpack_require__(/*! ../../../common/ValidationResult */ "./dist/modules/common/ValidationResult.js");
3986
4494
  function validateQuery(query, sender, recipient) {
3987
4495
  if (query instanceof content_1.ThirdPartyRelationshipAttributeQuery) {
3988
4496
  for (const thirdParty of query.thirdParty) {
@@ -4333,8 +4841,8 @@ const ConsumptionBaseController_1 = __webpack_require__(/*! ../../../consumption
4333
4841
  const ConsumptionControllerName_1 = __webpack_require__(/*! ../../../consumption/ConsumptionControllerName */ "./dist/consumption/ConsumptionControllerName.js");
4334
4842
  const ConsumptionError_1 = __webpack_require__(/*! ../../../consumption/ConsumptionError */ "./dist/consumption/ConsumptionError.js");
4335
4843
  const ConsumptionIds_1 = __webpack_require__(/*! ../../../consumption/ConsumptionIds */ "./dist/consumption/ConsumptionIds.js");
4844
+ const ValidationResult_1 = __webpack_require__(/*! ../../common/ValidationResult */ "./dist/modules/common/ValidationResult.js");
4336
4845
  const events_1 = __webpack_require__(/*! ../events */ "./dist/modules/requests/events/index.js");
4337
- const ValidationResult_1 = __webpack_require__(/*! ../itemProcessors/ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
4338
4846
  const LocalRequest_1 = __webpack_require__(/*! ../local/LocalRequest */ "./dist/modules/requests/local/LocalRequest.js");
4339
4847
  const LocalRequestStatus_1 = __webpack_require__(/*! ../local/LocalRequestStatus */ "./dist/modules/requests/local/LocalRequestStatus.js");
4340
4848
  const LocalResponse_1 = __webpack_require__(/*! ../local/LocalResponse */ "./dist/modules/requests/local/LocalResponse.js");