@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.
- package/dist/buildInformation.js +4 -4
- package/dist/consumption/ConsumptionController.js +3 -2
- package/dist/consumption/ConsumptionController.js.map +1 -1
- package/dist/consumption/ConsumptionErrors.d.ts +11 -0
- package/dist/consumption/ConsumptionErrors.js +28 -1
- package/dist/consumption/ConsumptionErrors.js.map +1 -1
- package/dist/modules/index.d.ts +2 -2
- package/dist/modules/index.js +2 -2
- package/dist/modules/index.js.map +1 -1
- package/dist/modules/requests/incoming/DecideRequestParametersValidator.d.ts +0 -1
- package/dist/modules/requests/incoming/DecideRequestParametersValidator.js +10 -13
- package/dist/modules/requests/incoming/DecideRequestParametersValidator.js.map +1 -1
- package/dist/modules/requests/incoming/IncomingRequestsController.js +5 -2
- package/dist/modules/requests/incoming/IncomingRequestsController.js.map +1 -1
- package/dist/modules/requests/itemProcessors/createRelationshipAttribute/AcceptCreateRelationshipAttributeRequestItemParameters.d.ts +7 -0
- package/dist/modules/requests/itemProcessors/{createAttribute/AcceptCreateAttributeRequestItemParameters.js → createRelationshipAttribute/AcceptCreateRelationshipAttributeRequestItemParameters.js} +7 -7
- package/dist/modules/requests/itemProcessors/createRelationshipAttribute/AcceptCreateRelationshipAttributeRequestItemParameters.js.map +1 -0
- package/dist/modules/requests/itemProcessors/createRelationshipAttribute/CreateRelationshipAttributeRequestItemProcessor.d.ts +11 -0
- package/dist/modules/requests/itemProcessors/createRelationshipAttribute/CreateRelationshipAttributeRequestItemProcessor.js +44 -0
- package/dist/modules/requests/itemProcessors/createRelationshipAttribute/CreateRelationshipAttributeRequestItemProcessor.js.map +1 -0
- package/dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.js +2 -1
- package/dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.js.map +1 -1
- package/dist/modules/requests/itemProcessors/shareAttribute/ShareAttributeRequestItemProcessor.d.ts +6 -8
- package/dist/modules/requests/itemProcessors/shareAttribute/ShareAttributeRequestItemProcessor.js +34 -72
- package/dist/modules/requests/itemProcessors/shareAttribute/ShareAttributeRequestItemProcessor.js.map +1 -1
- package/lib-web/nmshd.consumption.js +120 -145
- package/lib-web/nmshd.consumption.js.map +1 -1
- package/lib-web/nmshd.consumption.min.js +1 -1
- package/lib-web/nmshd.consumption.min.js.map +1 -1
- package/package.json +9 -9
- package/dist/modules/requests/itemProcessors/createAttribute/AcceptCreateAttributeRequestItemParameters.d.ts +0 -7
- package/dist/modules/requests/itemProcessors/createAttribute/AcceptCreateAttributeRequestItemParameters.js.map +0 -1
- package/dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.d.ts +0 -12
- package/dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js +0 -60
- package/dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js.map +0 -1
package/dist/modules/requests/itemProcessors/shareAttribute/ShareAttributeRequestItemProcessor.js
CHANGED
|
@@ -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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
16
|
-
if (attributeOwnerValidationResult.isError()) {
|
|
17
|
-
return attributeOwnerValidationResult;
|
|
18
|
-
}
|
|
19
|
-
return ValidationResult_1.ValidationResult.success();
|
|
13
|
+
return this.canCreateWithRelationshipAttribute(requestItem.attribute);
|
|
20
14
|
}
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
50
|
-
|
|
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
|
|
67
|
-
"shareInfo.sourceAttribute": attribute.id.toString(),
|
|
68
|
-
"shareInfo.peer": shareWith.toString()
|
|
69
|
-
})).length > 0);
|
|
27
|
+
return ValidationResult_1.ValidationResult.success();
|
|
70
28
|
}
|
|
71
|
-
async
|
|
72
|
-
|
|
73
|
-
attribute
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
38
|
+
return content_1.ShareAttributeAcceptResponseItem.from({
|
|
39
|
+
attributeId: localAttribute.id,
|
|
40
|
+
result: content_1.ResponseItemResult.Accepted
|
|
86
41
|
});
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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":";;;AAAA,4CASuB;
|
|
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.
|
|
21
|
-
build: "
|
|
22
|
-
date: "2022-
|
|
23
|
-
commit: "
|
|
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.
|
|
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.
|
|
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/
|
|
1311
|
-
__exportStar(__webpack_require__(/*! ./requests/itemProcessors/
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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/
|
|
2355
|
-
|
|
2356
|
-
!*** ./dist/modules/requests/itemProcessors/
|
|
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.
|
|
2397
|
+
exports.AcceptCreateRelationshipAttributeRequestItemParameters = void 0;
|
|
2370
2398
|
const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
|
|
2371
|
-
let
|
|
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
|
-
|
|
2377
|
-
(0, ts_serval_1.type)("
|
|
2378
|
-
],
|
|
2379
|
-
exports.
|
|
2380
|
-
//# sourceMappingURL=
|
|
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/
|
|
2385
|
-
|
|
2386
|
-
!*** ./dist/modules/requests/itemProcessors/
|
|
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.
|
|
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
|
|
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.
|
|
2422
|
-
|
|
2423
|
-
|
|
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.
|
|
2447
|
+
if (!(responseItem instanceof content_1.CreateRelationshipAttributeAcceptResponseItem)) {
|
|
2428
2448
|
return;
|
|
2429
2449
|
}
|
|
2430
|
-
if (requestItem.
|
|
2431
|
-
|
|
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.
|
|
2450
|
-
//# sourceMappingURL=
|
|
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
|
-
|
|
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
|
-
|
|
2840
|
-
|
|
2841
|
-
|
|
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
|
|
2855
|
+
return this.canCreateWithRelationshipAttribute(requestItem.attribute);
|
|
2863
2856
|
}
|
|
2864
|
-
|
|
2865
|
-
const
|
|
2866
|
-
|
|
2867
|
-
|
|
2868
|
-
|
|
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
|
-
|
|
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,
|
|
2882
|
-
|
|
2883
|
-
|
|
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
|
-
|
|
2887
|
-
|
|
2888
|
-
|
|
2889
|
-
|
|
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
|
-
|
|
2913
|
-
|
|
2914
|
-
|
|
2880
|
+
return content_1.ShareAttributeAcceptResponseItem.from({
|
|
2881
|
+
attributeId: localAttribute.id,
|
|
2882
|
+
result: content_1.ResponseItemResult.Accepted
|
|
2915
2883
|
});
|
|
2916
|
-
|
|
2917
|
-
|
|
2918
|
-
|
|
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;
|