@nmshd/consumption 2.0.0-beta.4 → 2.0.0-beta.7

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 (35) hide show
  1. package/dist/buildInformation.js +4 -4
  2. package/dist/consumption/ConsumptionController.js +3 -2
  3. package/dist/consumption/ConsumptionController.js.map +1 -1
  4. package/dist/consumption/ConsumptionErrors.d.ts +11 -0
  5. package/dist/consumption/ConsumptionErrors.js +28 -1
  6. package/dist/consumption/ConsumptionErrors.js.map +1 -1
  7. package/dist/modules/index.d.ts +2 -2
  8. package/dist/modules/index.js +2 -2
  9. package/dist/modules/index.js.map +1 -1
  10. package/dist/modules/requests/incoming/DecideRequestParametersValidator.d.ts +0 -1
  11. package/dist/modules/requests/incoming/DecideRequestParametersValidator.js +10 -13
  12. package/dist/modules/requests/incoming/DecideRequestParametersValidator.js.map +1 -1
  13. package/dist/modules/requests/incoming/IncomingRequestsController.js +5 -2
  14. package/dist/modules/requests/incoming/IncomingRequestsController.js.map +1 -1
  15. package/dist/modules/requests/itemProcessors/createRelationshipAttribute/AcceptCreateRelationshipAttributeRequestItemParameters.d.ts +7 -0
  16. package/dist/modules/requests/itemProcessors/{createAttribute/AcceptCreateAttributeRequestItemParameters.js → createRelationshipAttribute/AcceptCreateRelationshipAttributeRequestItemParameters.js} +7 -7
  17. package/dist/modules/requests/itemProcessors/createRelationshipAttribute/AcceptCreateRelationshipAttributeRequestItemParameters.js.map +1 -0
  18. package/dist/modules/requests/itemProcessors/createRelationshipAttribute/CreateRelationshipAttributeRequestItemProcessor.d.ts +11 -0
  19. package/dist/modules/requests/itemProcessors/createRelationshipAttribute/CreateRelationshipAttributeRequestItemProcessor.js +44 -0
  20. package/dist/modules/requests/itemProcessors/createRelationshipAttribute/CreateRelationshipAttributeRequestItemProcessor.js.map +1 -0
  21. package/dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.js +2 -1
  22. package/dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.js.map +1 -1
  23. package/dist/modules/requests/itemProcessors/shareAttribute/ShareAttributeRequestItemProcessor.d.ts +6 -8
  24. package/dist/modules/requests/itemProcessors/shareAttribute/ShareAttributeRequestItemProcessor.js +34 -72
  25. package/dist/modules/requests/itemProcessors/shareAttribute/ShareAttributeRequestItemProcessor.js.map +1 -1
  26. package/lib-web/nmshd.consumption.js +120 -145
  27. package/lib-web/nmshd.consumption.js.map +1 -1
  28. package/lib-web/nmshd.consumption.min.js +1 -1
  29. package/lib-web/nmshd.consumption.min.js.map +1 -1
  30. package/package.json +9 -9
  31. package/dist/modules/requests/itemProcessors/createAttribute/AcceptCreateAttributeRequestItemParameters.d.ts +0 -7
  32. package/dist/modules/requests/itemProcessors/createAttribute/AcceptCreateAttributeRequestItemParameters.js.map +0 -1
  33. package/dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.d.ts +0 -12
  34. package/dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js +0 -60
  35. package/dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js.map +0 -1
@@ -2,91 +2,53 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ShareAttributeRequestItemProcessor = void 0;
4
4
  const content_1 = require("@nmshd/content");
5
- const transport_1 = require("@nmshd/transport");
6
5
  const consumption_1 = require("../../../../consumption");
7
6
  const GenericRequestItemProcessor_1 = require("../GenericRequestItemProcessor");
8
7
  const ValidationResult_1 = require("../ValidationResult");
9
8
  class ShareAttributeRequestItemProcessor extends GenericRequestItemProcessor_1.GenericRequestItemProcessor {
10
- async canCreateOutgoingRequestItem(requestItem, _request, recipient) {
11
- const attribute = await this.consumptionController.attributes.getLocalAttribute(requestItem.attributeId);
12
- if (!attribute) {
13
- return ValidationResult_1.ValidationResult.error(transport_1.TransportErrors.general.recordNotFound(content_1.Attribute, requestItem.attributeId.toString()));
9
+ canCreateOutgoingRequestItem(requestItem, _request, _recipient) {
10
+ if (requestItem.attribute instanceof content_1.IdentityAttribute) {
11
+ return this.canCreateWithIdentityAttribute(requestItem);
14
12
  }
15
- const attributeOwnerValidationResult = this.validateAttributeOwner(attribute.content, this.currentIdentityAddress, recipient);
16
- if (attributeOwnerValidationResult.isError()) {
17
- return attributeOwnerValidationResult;
18
- }
19
- return ValidationResult_1.ValidationResult.success();
13
+ return this.canCreateWithRelationshipAttribute(requestItem.attribute);
20
14
  }
21
- async checkPrerequisitesOfIncomingRequestItem(requestItem, requestInfo) {
22
- const relationshipToShareWith = await this.accountController.relationships.getRelationshipToIdentity(requestItem.shareWith);
23
- if (!relationshipToShareWith) {
24
- return false; // Should the containing Request move to Error state?
25
- }
26
- const attribute = await this.consumptionController.attributes.getLocalAttribute(requestItem.attributeId);
27
- if (!attribute) {
28
- return false; // Should the containing Request move to Error state?
29
- }
30
- if (this.validateAttributeOwner(attribute.content, requestInfo.peer, this.currentIdentityAddress).isError()) {
31
- return false;
32
- }
33
- return true;
34
- }
35
- validateAttributeOwner(attribute, sender, recipient) {
36
- const attributeOwner = attribute.owner;
37
- if (attribute instanceof content_1.IdentityAttribute) {
38
- if (!attributeOwner.equals(recipient)) {
39
- return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("Can only request sharing of identity attributes owned by the recipient."));
40
- }
41
- }
42
- if (attribute instanceof content_1.RelationshipAttribute) {
43
- if (!attributeOwner.equals(recipient) && !attributeOwner.equals(sender)) {
44
- return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("Cannot request sharing of relationship attributes not owned by recipient or sender."));
45
- }
15
+ canCreateWithIdentityAttribute(requestItem) {
16
+ const ownerIsEmpty = requestItem.attribute.owner.toString() === "";
17
+ const ownerIsCurrentIdentity = requestItem.attribute.owner.equals(this.currentIdentityAddress);
18
+ if (!ownerIsEmpty && !ownerIsCurrentIdentity) {
19
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("The owner of the given `attribute` can only be an empty string. This is because you can only send Attributes where the recipient of the Request is the owner anyway. And in order to avoid mistakes, the owner will be automatically filled for you."));
46
20
  }
47
21
  return ValidationResult_1.ValidationResult.success();
48
22
  }
49
- canAccept(_requestItem, _params, _requestInfo) {
50
- return ValidationResult_1.ValidationResult.success();
51
- }
52
- async accept(requestItem, _params, _requestInfo) {
53
- const attribute = (await this.consumptionController.attributes.getLocalAttribute(requestItem.attributeId));
54
- if (!(await this.isAttributeAlreadyShared(attribute, requestItem.shareWith))) {
55
- await this.shareAttribute(attribute, requestItem.shareWith);
56
- }
57
- return content_1.AcceptResponseItem.from({ result: content_1.ResponseItemResult.Accepted });
58
- }
59
- async isAttributeAlreadyShared(attribute, shareWith) {
60
- if (attribute.content instanceof content_1.IdentityAttribute) {
61
- return ((await this.consumptionController.attributes.getLocalAttributes({
62
- "shareInfo.sourceAttribute": attribute.shareInfo.sourceAttribute.toString(),
63
- "shareInfo.peer": shareWith.toString()
64
- })).length > 0);
23
+ canCreateWithRelationshipAttribute(attribute) {
24
+ if (attribute.confidentiality === content_1.RelationshipAttributeConfidentiality.Private) {
25
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("The confidentiality of the given `attribute` is private. Therefore you are not allowed to share it."));
65
26
  }
66
- return ((await this.consumptionController.attributes.getLocalAttributes({
67
- "shareInfo.sourceAttribute": attribute.id.toString(),
68
- "shareInfo.peer": shareWith.toString()
69
- })).length > 0);
27
+ return ValidationResult_1.ValidationResult.success();
70
28
  }
71
- async shareAttribute(attribute, shareWith) {
72
- const createAttributeRequestItem = content_1.CreateAttributeRequestItem.from({
73
- attribute: attribute.content,
74
- mustBeAccepted: true,
75
- sourceAttributeId: attribute.id
76
- });
77
- const createAttributeRequest = await this.consumptionController.outgoingRequests.create({
78
- peer: shareWith,
79
- content: content_1.Request.from({
80
- items: [createAttributeRequestItem]
81
- })
29
+ async accept(requestItem, _params, requestInfo) {
30
+ if (requestItem.attribute.owner.toString() === "") {
31
+ requestItem.attribute.owner = requestInfo.peer;
32
+ }
33
+ const localAttribute = await this.consumptionController.attributes.createPeerLocalAttribute({
34
+ content: requestItem.attribute,
35
+ peer: requestInfo.peer,
36
+ requestReference: requestInfo.id
82
37
  });
83
- const message = await this.accountController.messages.sendMessage({
84
- recipients: [shareWith],
85
- content: createAttributeRequest.content
38
+ return content_1.ShareAttributeAcceptResponseItem.from({
39
+ attributeId: localAttribute.id,
40
+ result: content_1.ResponseItemResult.Accepted
86
41
  });
87
- await this.consumptionController.outgoingRequests.sent({
88
- requestId: createAttributeRequest.id,
89
- requestSourceObject: message
42
+ }
43
+ async applyIncomingResponseItem(responseItem, requestItem, requestInfo) {
44
+ if (!(responseItem instanceof content_1.ShareAttributeAcceptResponseItem)) {
45
+ return;
46
+ }
47
+ await this.consumptionController.attributes.createSharedLocalAttributeCopy({
48
+ attributeId: responseItem.attributeId,
49
+ sourceAttributeId: requestItem.sourceAttributeId,
50
+ peer: requestInfo.peer,
51
+ requestReference: requestInfo.id
90
52
  });
91
53
  }
92
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ShareAttributeRequestItemProcessor.js","sourceRoot":"","sources":["../../../../../src/modules/requests/itemProcessors/shareAttribute/ShareAttributeRequestItemProcessor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ShareAttributeRequestItemProcessor.js","sourceRoot":"","sources":["../../../../../src/modules/requests/itemProcessors/shareAttribute/ShareAttributeRequestItemProcessor.ts"],"names":[],"mappings":";;;AAAA,4CASuB;AAEvB,yDAA2D;AAC3D,gFAA4E;AAE5E,0DAAsD;AAGtD,MAAa,kCAAmC,SAAQ,yDAGvD;IACmB,4BAA4B,CACxC,WAAsC,EACtC,QAAiB,EACjB,UAAuB;QAEvB,IAAI,WAAW,CAAC,SAAS,YAAY,2BAAiB,EAAE;YACpD,OAAO,IAAI,CAAC,8BAA8B,CAAC,WAAW,CAAC,CAAA;SAC1D;QAED,OAAO,IAAI,CAAC,kCAAkC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;IACzE,CAAC;IAEO,8BAA8B,CAAC,WAAsC;QACzE,MAAM,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAA;QAClE,MAAM,sBAAsB,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;QAC9F,IAAI,CAAC,YAAY,IAAI,CAAC,sBAAsB,EAAE;YAC1C,OAAO,mCAAgB,CAAC,KAAK,CACzB,+BAAiB,CAAC,QAAQ,CAAC,kBAAkB,CACzC,sPAAsP,CACzP,CACJ,CAAA;SACJ;QAED,OAAO,mCAAgB,CAAC,OAAO,EAAE,CAAA;IACrC,CAAC;IAEO,kCAAkC,CAAC,SAAgC;QACvE,IAAI,SAAS,CAAC,eAAe,KAAK,8CAAoC,CAAC,OAAO,EAAE;YAC5E,OAAO,mCAAgB,CAAC,KAAK,CACzB,+BAAiB,CAAC,QAAQ,CAAC,kBAAkB,CACzC,qGAAqG,CACxG,CACJ,CAAA;SACJ;QAED,OAAO,mCAAgB,CAAC,OAAO,EAAE,CAAA;IACrC,CAAC;IAEe,KAAK,CAAC,MAAM,CACxB,WAAsC,EACtC,OAAsD,EACtD,WAA6B;QAE7B,IAAI,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;YAC/C,WAAW,CAAC,SAAS,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAA;SACjD;QAED,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,wBAAwB,CAAC;YACxF,OAAO,EAAE,WAAW,CAAC,SAAS;YAC9B,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,gBAAgB,EAAE,WAAW,CAAC,EAAE;SACnC,CAAC,CAAA;QAEF,OAAO,0CAAgC,CAAC,IAAI,CAAC;YACzC,WAAW,EAAE,cAAc,CAAC,EAAE;YAC9B,MAAM,EAAE,4BAAkB,CAAC,QAAQ;SACtC,CAAC,CAAA;IACN,CAAC;IAEe,KAAK,CAAC,yBAAyB,CAC3C,YAAmE,EACnE,WAAsC,EACtC,WAA6B;QAE7B,IAAI,CAAC,CAAC,YAAY,YAAY,0CAAgC,CAAC,EAAE;YAC7D,OAAM;SACT;QAED,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,8BAA8B,CAAC;YACvE,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,iBAAiB,EAAE,WAAW,CAAC,iBAAiB;YAChD,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,gBAAgB,EAAE,WAAW,CAAC,EAAE;SACnC,CAAC,CAAA;IACN,CAAC;CACJ;AA/ED,gFA+EC"}
@@ -17,10 +17,10 @@ const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
17
17
  const crypto_1 = __webpack_require__(/*! @nmshd/crypto */ "@nmshd/crypto");
18
18
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
19
19
  exports.buildInformation = {
20
- version: "2.0.0-beta.4",
21
- build: "54",
22
- date: "2022-07-26T10:53:29+00:00",
23
- commit: "96c5bb0818fb7a65fb2c9af8fbdd6ea34d064bb4",
20
+ version: "2.0.0-beta.7",
21
+ build: "57",
22
+ date: "2022-08-05T14:52:40+00:00",
23
+ commit: "c807245adfc9a9d69e8907f9f604770d2b6f7c6b",
24
24
  dependencies: {"@js-soft/docdb-querytranslator":"^1.1.0","ts-simple-nameof":"^1.3.1"},
25
25
  libraries: {
26
26
  transport: transport_1.buildInformation,
@@ -120,10 +120,11 @@ class ConsumptionController {
120
120
  }
121
121
  getDefaultProcessors() {
122
122
  return new Map([
123
- [content_1.CreateAttributeRequestItem, modules_1.CreateAttributeRequestItemProcessor],
123
+ [content_1.ShareAttributeRequestItem, modules_1.ShareAttributeRequestItemProcessor],
124
+ [content_1.CreateRelationshipAttributeRequestItem, modules_1.CreateRelationshipAttributeRequestItemProcessor],
124
125
  [content_1.ReadAttributeRequestItem, modules_1.ReadAttributeRequestItemProcessor],
125
126
  [content_1.ProposeAttributeRequestItem, modules_1.ProposeAttributeRequestItemProcessor],
126
- [content_1.ShareAttributeRequestItem, modules_1.ShareAttributeRequestItemProcessor]
127
+ [content_1.ConsentRequestItem, modules_1.GenericRequestItemProcessor]
127
128
  ]);
128
129
  }
129
130
  }
@@ -168,6 +169,7 @@ var ConsumptionControllerName;
168
169
 
169
170
  Object.defineProperty(exports, "__esModule", ({ value: true }));
170
171
  exports.ConsumptionErrors = void 0;
172
+ const ts_utils_1 = __webpack_require__(/*! @js-soft/ts-utils */ "./node_modules/@js-soft/ts-utils/dist/index.js");
171
173
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
172
174
  class Attributes {
173
175
  attributeExists(id) {
@@ -178,16 +180,42 @@ class Attributes {
178
180
  }
179
181
  }
180
182
  class Requests {
183
+ constructor() {
184
+ this.decideValidation = new Requests._decideValidation();
185
+ }
181
186
  requestExists(id) {
182
187
  return new transport_1.CoreError("error.consumption.requests.requestExists", `Request with id ${id} already exists and can't be created.`);
183
188
  }
184
189
  unexpectedErrorDuringRequestItemProcessing(error) {
185
- return new transport_1.CoreError("error.consumption.requests.unexpectedErrorDuringRequestItemProcessing", error instanceof Error ? error.message : "Unknown error: '${JSON.stringify(e)'");
190
+ return new transport_1.CoreError("error.consumption.requests.unexpectedErrorDuringRequestItemProcessing", error instanceof Error ? error.message : "Unknown error: '${JSON.stringify(e)'", undefined, undefined, error);
191
+ }
192
+ servalErrorDuringRequestItemProcessing(error) {
193
+ return new transport_1.CoreError("error.consumption.requests.servalErrorDuringRequestItemProcessing", error instanceof Error ? error.message : "Serval error: '${JSON.stringify(e)'", undefined, undefined, error);
186
194
  }
187
195
  invalidRequestItem(message) {
188
196
  return new transport_1.CoreError("error.consumption.requests.invalidRequestItem", message);
189
197
  }
190
198
  }
199
+ Requests._decideValidation = class {
200
+ invalidRequestId() {
201
+ return new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidRequestId", "The id of the Request does not match the id of the Response");
202
+ }
203
+ invalidNumberOfItems(message) {
204
+ return new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidNumberOfItems", message);
205
+ }
206
+ itemAcceptedButParentNotAccepted(message) {
207
+ return new ts_utils_1.ApplicationError("error.requests.decide.validation.itemAcceptedButParentNotAccepted", message);
208
+ }
209
+ mustBeAcceptedItemNotAccepted(message) {
210
+ return new ts_utils_1.ApplicationError("error.requests.decide.validation.mustBeAcceptedItemNotAccepted", message);
211
+ }
212
+ requestItemAnsweredAsRequestItemGroup() {
213
+ return new ts_utils_1.ApplicationError("error.requests.decide.validation.requestItemAnsweredAsRequestItemGroup", "The RequestItem was answered as a RequestItemGroup.");
214
+ }
215
+ requestItemGroupAnsweredAsRequestItem() {
216
+ return new ts_utils_1.ApplicationError("error.requests.decide.validation.requestItemGroupAnsweredAsRequestItem", "The RequestItemGroup was answered as a RequestItem.");
217
+ }
218
+ };
191
219
  class RelationshipInfo {
192
220
  relationshipInfoExists(relationshipId) {
193
221
  return new transport_1.CoreError("error.consumption.relationshipInfos.relationshipInfoExists", `RelationshipInfo for Relationship ${relationshipId} already exists.`);
@@ -1307,8 +1335,8 @@ __exportStar(__webpack_require__(/*! ./requests/incoming/IncomingRequestsControl
1307
1335
  __exportStar(__webpack_require__(/*! ./requests/incoming/received/ReceivedIncomingRequestParameters */ "./dist/modules/requests/incoming/received/ReceivedIncomingRequestParameters.js"), exports);
1308
1336
  __exportStar(__webpack_require__(/*! ./requests/incoming/requireManualDecision/RequireManualDecisionOfIncomingRequestParameters */ "./dist/modules/requests/incoming/requireManualDecision/RequireManualDecisionOfIncomingRequestParameters.js"), exports);
1309
1337
  __exportStar(__webpack_require__(/*! ./requests/itemProcessors/AbstractRequestItemProcessor */ "./dist/modules/requests/itemProcessors/AbstractRequestItemProcessor.js"), exports);
1310
- __exportStar(__webpack_require__(/*! ./requests/itemProcessors/createAttribute/AcceptCreateAttributeRequestItemParameters */ "./dist/modules/requests/itemProcessors/createAttribute/AcceptCreateAttributeRequestItemParameters.js"), exports);
1311
- __exportStar(__webpack_require__(/*! ./requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor */ "./dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js"), exports);
1338
+ __exportStar(__webpack_require__(/*! ./requests/itemProcessors/createRelationshipAttribute/AcceptCreateRelationshipAttributeRequestItemParameters */ "./dist/modules/requests/itemProcessors/createRelationshipAttribute/AcceptCreateRelationshipAttributeRequestItemParameters.js"), exports);
1339
+ __exportStar(__webpack_require__(/*! ./requests/itemProcessors/createRelationshipAttribute/CreateRelationshipAttributeRequestItemProcessor */ "./dist/modules/requests/itemProcessors/createRelationshipAttribute/CreateRelationshipAttributeRequestItemProcessor.js"), exports);
1312
1340
  __exportStar(__webpack_require__(/*! ./requests/itemProcessors/GenericRequestItemProcessor */ "./dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js"), exports);
1313
1341
  __exportStar(__webpack_require__(/*! ./requests/itemProcessors/IRequestItemProcessor */ "./dist/modules/requests/itemProcessors/IRequestItemProcessor.js"), exports);
1314
1342
  __exportStar(__webpack_require__(/*! ./requests/itemProcessors/ProcessorConstructor */ "./dist/modules/requests/itemProcessors/ProcessorConstructor.js"), exports);
@@ -1498,19 +1526,19 @@ __exportStar(__webpack_require__(/*! ./OutgoingRequestStatusChangedEvent */ "./d
1498
1526
 
1499
1527
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1500
1528
  exports.DecideRequestParametersValidator = void 0;
1501
- const ts_utils_1 = __webpack_require__(/*! @js-soft/ts-utils */ "./node_modules/@js-soft/ts-utils/dist/index.js");
1502
1529
  const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
1503
1530
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
1531
+ const consumption_1 = __webpack_require__(/*! ../../../consumption */ "./dist/consumption/index.js");
1504
1532
  const ValidationResult_1 = __webpack_require__(/*! ../itemProcessors/ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
1505
1533
  const DecideRequestItemGroupParameters_1 = __webpack_require__(/*! ./decide/DecideRequestItemGroupParameters */ "./dist/modules/requests/incoming/decide/DecideRequestItemGroupParameters.js");
1506
1534
  const DecideRequestItemParameters_1 = __webpack_require__(/*! ./decide/DecideRequestItemParameters */ "./dist/modules/requests/incoming/decide/DecideRequestItemParameters.js");
1507
1535
  class DecideRequestParametersValidator {
1508
1536
  validate(params, request) {
1509
1537
  if (!request.id.equals(transport_1.CoreId.from(params.requestId))) {
1510
- return ValidationResult_1.ValidationResult.error(new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidRequestId", "The id of the Request does not match the id of the Response"));
1538
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.invalidRequestId());
1511
1539
  }
1512
1540
  if (params.items.length !== request.content.items.length) {
1513
- return ValidationResult_1.ValidationResult.error(this.invalidNumberOfItemsError("Number of items in Request and Response do not match"));
1541
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.invalidNumberOfItems("Number of items in Request and Response do not match"));
1514
1542
  }
1515
1543
  const validationResults = request.content.items.map((requestItem, index) => this.checkItemOrGroup(requestItem, params.items[index], params.accept));
1516
1544
  return ValidationResult_1.ValidationResult.fromItems(validationResults);
@@ -1523,36 +1551,33 @@ class DecideRequestParametersValidator {
1523
1551
  }
1524
1552
  checkItem(requestItem, response, isParentAccepted) {
1525
1553
  if ((0, DecideRequestItemGroupParameters_1.isDecideRequestItemGroupParametersJSON)(response)) {
1526
- return ValidationResult_1.ValidationResult.error(new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidResponseItemForRequestItem", "The RequestItem was answered as a RequestItemGroup."));
1554
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.requestItemAnsweredAsRequestItemGroup());
1527
1555
  }
1528
1556
  if (!isParentAccepted && response.accept) {
1529
- return ValidationResult_1.ValidationResult.error(new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidResponseItemForRequestItem", "The RequestItem was accepted, but the parent was not accepted."));
1557
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.itemAcceptedButParentNotAccepted("The RequestItem was accepted, but the parent was not accepted."));
1530
1558
  }
1531
1559
  if (isParentAccepted && requestItem.mustBeAccepted && !response.accept) {
1532
- return ValidationResult_1.ValidationResult.error(new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidResponseItemForRequestItem", "The RequestItem is flagged as 'mustBeAccepted', but it was not accepted."));
1560
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.mustBeAcceptedItemNotAccepted("The RequestItem is flagged as 'mustBeAccepted', but it was not accepted."));
1533
1561
  }
1534
1562
  return ValidationResult_1.ValidationResult.success();
1535
1563
  }
1536
1564
  checkItemGroup(requestItemGroup, responseItemGroup, isParentAccepted) {
1537
1565
  if ((0, DecideRequestItemParameters_1.isDecideRequestItemParametersJSON)(responseItemGroup)) {
1538
- return ValidationResult_1.ValidationResult.error(new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidResponseItemForRequestItem", "The RequestItemGroup was answered as a RequestItem."));
1566
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.requestItemGroupAnsweredAsRequestItem());
1539
1567
  }
1540
1568
  if (responseItemGroup.items.length !== requestItemGroup.items.length) {
1541
- return ValidationResult_1.ValidationResult.error(this.invalidNumberOfItemsError("Number of items in RequestItemGroup and ResponseItemGroup do not match"));
1569
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.invalidNumberOfItems("Number of items in RequestItemGroup and ResponseItemGroup do not match"));
1542
1570
  }
1543
1571
  const isGroupAccepted = responseItemGroup.items.some((value) => value.accept);
1544
1572
  if (!isParentAccepted && isGroupAccepted) {
1545
- return ValidationResult_1.ValidationResult.error(new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidResponseItemForRequestItem", "The RequestItemGroup was accepted, but the parent was not accepted."));
1573
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.itemAcceptedButParentNotAccepted("The RequestItemGroup was accepted, but the parent was not accepted."));
1546
1574
  }
1547
1575
  if (isParentAccepted && requestItemGroup.mustBeAccepted && !isGroupAccepted) {
1548
- return ValidationResult_1.ValidationResult.error(new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidResponseItemForRequestItem", "The RequestItemGroup is flagged as 'mustBeAccepted', but it was not accepted. Please accept all 'mustBeAccepted' items in this group."));
1576
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.decideValidation.mustBeAcceptedItemNotAccepted("The RequestItemGroup is flagged as 'mustBeAccepted', but it was not accepted. Please accept all 'mustBeAccepted' items in this group."));
1549
1577
  }
1550
1578
  const validationResults = requestItemGroup.items.map((requestItem, index) => this.checkItem(requestItem, responseItemGroup.items[index], isGroupAccepted));
1551
1579
  return ValidationResult_1.ValidationResult.fromItems(validationResults);
1552
1580
  }
1553
- invalidNumberOfItemsError(message) {
1554
- return new ts_utils_1.ApplicationError("error.requests.decide.validation.invalidNumberOfItems", message);
1555
- }
1556
1581
  }
1557
1582
  exports.DecideRequestParametersValidator = DecideRequestParametersValidator;
1558
1583
  //# sourceMappingURL=DecideRequestParametersValidator.js.map
@@ -1569,6 +1594,7 @@ exports.DecideRequestParametersValidator = DecideRequestParametersValidator;
1569
1594
 
1570
1595
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1571
1596
  exports.IncomingRequestsController = void 0;
1597
+ const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
1572
1598
  const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
1573
1599
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
1574
1600
  const consumption_1 = __webpack_require__(/*! ../../../consumption */ "./dist/consumption/index.js");
@@ -1721,12 +1747,14 @@ class IncomingRequestsController extends consumption_1.ConsumptionBaseController
1721
1747
  async canDecideItem(params, requestItem, request) {
1722
1748
  const processor = this.processorRegistry.getProcessorForItem(requestItem);
1723
1749
  try {
1724
- if (params.accept) {
1750
+ if (params.accept)
1725
1751
  return await processor.canAccept(requestItem, params, request);
1726
- }
1727
1752
  return await processor.canReject(requestItem, params, request);
1728
1753
  }
1729
1754
  catch (e) {
1755
+ if (e instanceof ts_serval_1.ServalError) {
1756
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.servalErrorDuringRequestItemProcessing(e));
1757
+ }
1730
1758
  return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.unexpectedErrorDuringRequestItemProcessing(e));
1731
1759
  }
1732
1760
  }
@@ -2351,10 +2379,10 @@ exports.ErrorValidationResult = ErrorValidationResult;
2351
2379
 
2352
2380
  /***/ }),
2353
2381
 
2354
- /***/ "./dist/modules/requests/itemProcessors/createAttribute/AcceptCreateAttributeRequestItemParameters.js":
2355
- /*!************************************************************************************************************!*\
2356
- !*** ./dist/modules/requests/itemProcessors/createAttribute/AcceptCreateAttributeRequestItemParameters.js ***!
2357
- \************************************************************************************************************/
2382
+ /***/ "./dist/modules/requests/itemProcessors/createRelationshipAttribute/AcceptCreateRelationshipAttributeRequestItemParameters.js":
2383
+ /*!************************************************************************************************************************************!*\
2384
+ !*** ./dist/modules/requests/itemProcessors/createRelationshipAttribute/AcceptCreateRelationshipAttributeRequestItemParameters.js ***!
2385
+ \************************************************************************************************************************************/
2358
2386
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
2359
2387
 
2360
2388
  "use strict";
@@ -2366,88 +2394,72 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
2366
2394
  return c > 3 && r && Object.defineProperty(target, key, r), r;
2367
2395
  };
2368
2396
  Object.defineProperty(exports, "__esModule", ({ value: true }));
2369
- exports.AcceptCreateAttributeRequestItemParameters = void 0;
2397
+ exports.AcceptCreateRelationshipAttributeRequestItemParameters = void 0;
2370
2398
  const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
2371
- let AcceptCreateAttributeRequestItemParameters = class AcceptCreateAttributeRequestItemParameters extends ts_serval_1.Serializable {
2399
+ let AcceptCreateRelationshipAttributeRequestItemParameters = class AcceptCreateRelationshipAttributeRequestItemParameters extends ts_serval_1.Serializable {
2372
2400
  static from(value) {
2373
2401
  return this.fromAny(value);
2374
2402
  }
2375
2403
  };
2376
- AcceptCreateAttributeRequestItemParameters = __decorate([
2377
- (0, ts_serval_1.type)("AcceptCreateAttributeRequestItemParameters")
2378
- ], AcceptCreateAttributeRequestItemParameters);
2379
- exports.AcceptCreateAttributeRequestItemParameters = AcceptCreateAttributeRequestItemParameters;
2380
- //# sourceMappingURL=AcceptCreateAttributeRequestItemParameters.js.map
2404
+ AcceptCreateRelationshipAttributeRequestItemParameters = __decorate([
2405
+ (0, ts_serval_1.type)("AcceptCreateRelationshipAttributeRequestItemParameters")
2406
+ ], AcceptCreateRelationshipAttributeRequestItemParameters);
2407
+ exports.AcceptCreateRelationshipAttributeRequestItemParameters = AcceptCreateRelationshipAttributeRequestItemParameters;
2408
+ //# sourceMappingURL=AcceptCreateRelationshipAttributeRequestItemParameters.js.map
2381
2409
 
2382
2410
  /***/ }),
2383
2411
 
2384
- /***/ "./dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js":
2385
- /*!*****************************************************************************************************!*\
2386
- !*** ./dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js ***!
2387
- \*****************************************************************************************************/
2412
+ /***/ "./dist/modules/requests/itemProcessors/createRelationshipAttribute/CreateRelationshipAttributeRequestItemProcessor.js":
2413
+ /*!*****************************************************************************************************************************!*\
2414
+ !*** ./dist/modules/requests/itemProcessors/createRelationshipAttribute/CreateRelationshipAttributeRequestItemProcessor.js ***!
2415
+ \*****************************************************************************************************************************/
2388
2416
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2389
2417
 
2390
2418
  "use strict";
2391
2419
 
2392
2420
  Object.defineProperty(exports, "__esModule", ({ value: true }));
2393
- exports.CreateAttributeRequestItemProcessor = void 0;
2421
+ exports.CreateRelationshipAttributeRequestItemProcessor = void 0;
2394
2422
  const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
2395
2423
  const consumption_1 = __webpack_require__(/*! ../../../../consumption */ "./dist/consumption/index.js");
2396
2424
  const GenericRequestItemProcessor_1 = __webpack_require__(/*! ../GenericRequestItemProcessor */ "./dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js");
2397
2425
  const ValidationResult_1 = __webpack_require__(/*! ../ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
2398
- class CreateAttributeRequestItemProcessor extends GenericRequestItemProcessor_1.GenericRequestItemProcessor {
2426
+ class CreateRelationshipAttributeRequestItemProcessor extends GenericRequestItemProcessor_1.GenericRequestItemProcessor {
2399
2427
  canCreateOutgoingRequestItem(requestItem, _request, _recipient) {
2400
2428
  if (requestItem.attribute.owner.toString() !== "" &&
2401
2429
  !requestItem.attribute.owner.equals(this.currentIdentityAddress)) {
2402
2430
  return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("The owner of the given `attribute` can only be an empty string. This is because you can only send Attributes where the recipient of the Request is the owner anyway. And in order to avoid mistakes, the owner will be automatically filled for you."));
2403
2431
  }
2404
- if (requestItem.attribute instanceof content_1.IdentityAttribute) {
2405
- return this.canCreateRequestItemWithIdentityAttribute(requestItem);
2406
- }
2407
- return ValidationResult_1.ValidationResult.success();
2408
- }
2409
- canCreateRequestItemWithIdentityAttribute(requestItem) {
2410
- if (!requestItem.sourceAttributeId) {
2411
- return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("'sourceAttributeId' cannot be undefined when sending an Identity Attribute."));
2412
- }
2413
2432
  return ValidationResult_1.ValidationResult.success();
2414
2433
  }
2415
2434
  async accept(requestItem, _params, requestInfo) {
2435
+ requestItem.attribute.owner ??= requestInfo.peer;
2416
2436
  const peerLocalAttribute = await this.consumptionController.attributes.createPeerLocalAttribute({
2417
2437
  content: requestItem.attribute,
2418
2438
  peer: requestInfo.peer,
2419
2439
  requestReference: requestInfo.id
2420
2440
  });
2421
- return content_1.CreateAttributeAcceptResponseItem.from({
2422
- attributeId: peerLocalAttribute.id,
2423
- result: content_1.ResponseItemResult.Accepted
2441
+ return content_1.CreateRelationshipAttributeAcceptResponseItem.from({
2442
+ result: content_1.ResponseItemResult.Accepted,
2443
+ attributeId: peerLocalAttribute.id
2424
2444
  });
2425
2445
  }
2426
2446
  async applyIncomingResponseItem(responseItem, requestItem, requestInfo) {
2427
- if (!(responseItem instanceof content_1.CreateAttributeAcceptResponseItem)) {
2447
+ if (!(responseItem instanceof content_1.CreateRelationshipAttributeAcceptResponseItem)) {
2428
2448
  return;
2429
2449
  }
2430
- if (requestItem.sourceAttributeId) {
2431
- const sourceAttribute = await this.consumptionController.attributes.getLocalAttribute(requestItem.sourceAttributeId);
2432
- await this.consumptionController.attributes.createSharedLocalAttributeCopy({
2433
- attributeId: responseItem.attributeId,
2434
- sourceAttributeId: sourceAttribute.id,
2435
- peer: requestInfo.peer,
2436
- requestReference: requestInfo.id
2437
- });
2438
- }
2439
- else {
2440
- await this.consumptionController.attributes.createPeerLocalAttribute({
2441
- id: responseItem.attributeId,
2442
- content: requestItem.attribute,
2443
- peer: requestInfo.peer,
2444
- requestReference: requestInfo.id
2445
- });
2450
+ if (requestItem.attribute.owner.toString() === "") {
2451
+ requestItem.attribute.owner = this.currentIdentityAddress;
2446
2452
  }
2453
+ await this.consumptionController.attributes.createPeerLocalAttribute({
2454
+ id: responseItem.attributeId,
2455
+ content: requestItem.attribute,
2456
+ peer: requestInfo.peer,
2457
+ requestReference: requestInfo.id
2458
+ });
2447
2459
  }
2448
2460
  }
2449
- exports.CreateAttributeRequestItemProcessor = CreateAttributeRequestItemProcessor;
2450
- //# sourceMappingURL=CreateAttributeRequestItemProcessor.js.map
2461
+ exports.CreateRelationshipAttributeRequestItemProcessor = CreateRelationshipAttributeRequestItemProcessor;
2462
+ //# sourceMappingURL=CreateRelationshipAttributeRequestItemProcessor.js.map
2451
2463
 
2452
2464
  /***/ }),
2453
2465
 
@@ -2728,7 +2740,8 @@ class ReadAttributeRequestItemProcessor extends GenericRequestItemProcessor_1.Ge
2728
2740
  if (!foundAttribute) {
2729
2741
  return ValidationResult_1.ValidationResult.error(transport_1.TransportErrors.general.recordNotFound(LocalAttribute_1.LocalAttribute, requestInfo.id.toString()));
2730
2742
  }
2731
- if (!this.accountController.identity.isMe(foundAttribute.content.owner)) {
2743
+ const ownerIsCurrentIdentity = this.accountController.identity.isMe(foundAttribute.content.owner);
2744
+ if (!ownerIsCurrentIdentity) {
2732
2745
  return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("The given Attribute belongs to someone else. You can only share own Attributes."));
2733
2746
  }
2734
2747
  }
@@ -2831,91 +2844,53 @@ exports.AcceptShareAttributeRequestItemParameters = AcceptShareAttributeRequestI
2831
2844
  Object.defineProperty(exports, "__esModule", ({ value: true }));
2832
2845
  exports.ShareAttributeRequestItemProcessor = void 0;
2833
2846
  const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
2834
- const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
2835
2847
  const consumption_1 = __webpack_require__(/*! ../../../../consumption */ "./dist/consumption/index.js");
2836
2848
  const GenericRequestItemProcessor_1 = __webpack_require__(/*! ../GenericRequestItemProcessor */ "./dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js");
2837
2849
  const ValidationResult_1 = __webpack_require__(/*! ../ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
2838
2850
  class ShareAttributeRequestItemProcessor extends GenericRequestItemProcessor_1.GenericRequestItemProcessor {
2839
- async canCreateOutgoingRequestItem(requestItem, _request, recipient) {
2840
- const attribute = await this.consumptionController.attributes.getLocalAttribute(requestItem.attributeId);
2841
- if (!attribute) {
2842
- return ValidationResult_1.ValidationResult.error(transport_1.TransportErrors.general.recordNotFound(content_1.Attribute, requestItem.attributeId.toString()));
2843
- }
2844
- const attributeOwnerValidationResult = this.validateAttributeOwner(attribute.content, this.currentIdentityAddress, recipient);
2845
- if (attributeOwnerValidationResult.isError()) {
2846
- return attributeOwnerValidationResult;
2847
- }
2848
- return ValidationResult_1.ValidationResult.success();
2849
- }
2850
- async checkPrerequisitesOfIncomingRequestItem(requestItem, requestInfo) {
2851
- const relationshipToShareWith = await this.accountController.relationships.getRelationshipToIdentity(requestItem.shareWith);
2852
- if (!relationshipToShareWith) {
2853
- return false; // Should the containing Request move to Error state?
2854
- }
2855
- const attribute = await this.consumptionController.attributes.getLocalAttribute(requestItem.attributeId);
2856
- if (!attribute) {
2857
- return false; // Should the containing Request move to Error state?
2858
- }
2859
- if (this.validateAttributeOwner(attribute.content, requestInfo.peer, this.currentIdentityAddress).isError()) {
2860
- return false;
2851
+ canCreateOutgoingRequestItem(requestItem, _request, _recipient) {
2852
+ if (requestItem.attribute instanceof content_1.IdentityAttribute) {
2853
+ return this.canCreateWithIdentityAttribute(requestItem);
2861
2854
  }
2862
- return true;
2855
+ return this.canCreateWithRelationshipAttribute(requestItem.attribute);
2863
2856
  }
2864
- validateAttributeOwner(attribute, sender, recipient) {
2865
- const attributeOwner = attribute.owner;
2866
- if (attribute instanceof content_1.IdentityAttribute) {
2867
- if (!attributeOwner.equals(recipient)) {
2868
- return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("Can only request sharing of identity attributes owned by the recipient."));
2869
- }
2870
- }
2871
- if (attribute instanceof content_1.RelationshipAttribute) {
2872
- if (!attributeOwner.equals(recipient) && !attributeOwner.equals(sender)) {
2873
- return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("Cannot request sharing of relationship attributes not owned by recipient or sender."));
2874
- }
2857
+ canCreateWithIdentityAttribute(requestItem) {
2858
+ const ownerIsEmpty = requestItem.attribute.owner.toString() === "";
2859
+ const ownerIsCurrentIdentity = requestItem.attribute.owner.equals(this.currentIdentityAddress);
2860
+ if (!ownerIsEmpty && !ownerIsCurrentIdentity) {
2861
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("The owner of the given `attribute` can only be an empty string. This is because you can only send Attributes where the recipient of the Request is the owner anyway. And in order to avoid mistakes, the owner will be automatically filled for you."));
2875
2862
  }
2876
2863
  return ValidationResult_1.ValidationResult.success();
2877
2864
  }
2878
- canAccept(_requestItem, _params, _requestInfo) {
2865
+ canCreateWithRelationshipAttribute(attribute) {
2866
+ if (attribute.confidentiality === content_1.RelationshipAttributeConfidentiality.Private) {
2867
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.invalidRequestItem("The confidentiality of the given `attribute` is private. Therefore you are not allowed to share it."));
2868
+ }
2879
2869
  return ValidationResult_1.ValidationResult.success();
2880
2870
  }
2881
- async accept(requestItem, _params, _requestInfo) {
2882
- const attribute = (await this.consumptionController.attributes.getLocalAttribute(requestItem.attributeId));
2883
- if (!(await this.isAttributeAlreadyShared(attribute, requestItem.shareWith))) {
2884
- await this.shareAttribute(attribute, requestItem.shareWith);
2871
+ async accept(requestItem, _params, requestInfo) {
2872
+ if (requestItem.attribute.owner.toString() === "") {
2873
+ requestItem.attribute.owner = requestInfo.peer;
2885
2874
  }
2886
- return content_1.AcceptResponseItem.from({ result: content_1.ResponseItemResult.Accepted });
2887
- }
2888
- async isAttributeAlreadyShared(attribute, shareWith) {
2889
- if (attribute.content instanceof content_1.IdentityAttribute) {
2890
- return ((await this.consumptionController.attributes.getLocalAttributes({
2891
- "shareInfo.sourceAttribute": attribute.shareInfo.sourceAttribute.toString(),
2892
- "shareInfo.peer": shareWith.toString()
2893
- })).length > 0);
2894
- }
2895
- return ((await this.consumptionController.attributes.getLocalAttributes({
2896
- "shareInfo.sourceAttribute": attribute.id.toString(),
2897
- "shareInfo.peer": shareWith.toString()
2898
- })).length > 0);
2899
- }
2900
- async shareAttribute(attribute, shareWith) {
2901
- const createAttributeRequestItem = content_1.CreateAttributeRequestItem.from({
2902
- attribute: attribute.content,
2903
- mustBeAccepted: true,
2904
- sourceAttributeId: attribute.id
2905
- });
2906
- const createAttributeRequest = await this.consumptionController.outgoingRequests.create({
2907
- peer: shareWith,
2908
- content: content_1.Request.from({
2909
- items: [createAttributeRequestItem]
2910
- })
2875
+ const localAttribute = await this.consumptionController.attributes.createPeerLocalAttribute({
2876
+ content: requestItem.attribute,
2877
+ peer: requestInfo.peer,
2878
+ requestReference: requestInfo.id
2911
2879
  });
2912
- const message = await this.accountController.messages.sendMessage({
2913
- recipients: [shareWith],
2914
- content: createAttributeRequest.content
2880
+ return content_1.ShareAttributeAcceptResponseItem.from({
2881
+ attributeId: localAttribute.id,
2882
+ result: content_1.ResponseItemResult.Accepted
2915
2883
  });
2916
- await this.consumptionController.outgoingRequests.sent({
2917
- requestId: createAttributeRequest.id,
2918
- requestSourceObject: message
2884
+ }
2885
+ async applyIncomingResponseItem(responseItem, requestItem, requestInfo) {
2886
+ if (!(responseItem instanceof content_1.ShareAttributeAcceptResponseItem)) {
2887
+ return;
2888
+ }
2889
+ await this.consumptionController.attributes.createSharedLocalAttributeCopy({
2890
+ attributeId: responseItem.attributeId,
2891
+ sourceAttributeId: requestItem.sourceAttributeId,
2892
+ peer: requestInfo.peer,
2893
+ requestReference: requestInfo.id
2919
2894
  });
2920
2895
  }
2921
2896
  }
@@ -4498,7 +4473,7 @@ class ApplicationError extends Error {
4498
4473
  return this.code === error.code;
4499
4474
  }
4500
4475
  toString() {
4501
- return JSON.stringify(this, undefined, 2);
4476
+ return JSON.stringify({ code: this.code, message: this.message, data: this.data }, undefined, 2);
4502
4477
  }
4503
4478
  }
4504
4479
  exports.ApplicationError = ApplicationError;