@nmshd/consumption 2.0.0-alpha.18 → 2.0.0-alpha.20

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 (32) hide show
  1. package/dist/buildInformation.js +5 -5
  2. package/dist/consumption/ConsumptionErrors.d.ts +1 -0
  3. package/dist/consumption/ConsumptionErrors.js +3 -0
  4. package/dist/consumption/ConsumptionErrors.js.map +1 -1
  5. package/dist/modules/attributes/ConsumptionAttributesController.d.ts +2 -0
  6. package/dist/modules/attributes/ConsumptionAttributesController.js +13 -2
  7. package/dist/modules/attributes/ConsumptionAttributesController.js.map +1 -1
  8. package/dist/modules/attributes/CreateRelationshipAttributeParams.d.ts +14 -0
  9. package/dist/modules/attributes/CreateRelationshipAttributeParams.js +40 -0
  10. package/dist/modules/attributes/CreateRelationshipAttributeParams.js.map +1 -0
  11. package/dist/modules/drafts/DraftsController.js.map +1 -1
  12. package/dist/modules/index.d.ts +2 -0
  13. package/dist/modules/index.js +2 -0
  14. package/dist/modules/index.js.map +1 -1
  15. package/dist/modules/requests/itemProcessors/createAttribute/AcceptCreateAttributeRequestItemParameters.d.ts +7 -0
  16. package/dist/modules/requests/itemProcessors/createAttribute/AcceptCreateAttributeRequestItemParameters.js +20 -0
  17. package/dist/modules/requests/itemProcessors/createAttribute/AcceptCreateAttributeRequestItemParameters.js.map +1 -0
  18. package/dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.d.ts +10 -0
  19. package/dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js +48 -0
  20. package/dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js.map +1 -0
  21. package/dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.d.ts +6 -2
  22. package/dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.js +21 -3
  23. package/dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.js.map +1 -1
  24. package/dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.d.ts +2 -0
  25. package/dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.js +41 -12
  26. package/dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.js.map +1 -1
  27. package/dist/modules/settings/SettingsController.js.map +1 -1
  28. package/lib-web/nmshd.consumption.js +223 -22
  29. package/lib-web/nmshd.consumption.js.map +1 -1
  30. package/lib-web/nmshd.consumption.min.js +1 -1
  31. package/lib-web/nmshd.consumption.min.js.map +1 -1
  32. package/package.json +7 -6
@@ -17,11 +17,11 @@ 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-alpha.18",
21
- build: "36",
22
- date: "2022-05-31T09:24:56+00:00",
23
- commit: "cc8c401d2579fc97a3540924841473b1525fdd32",
24
- dependencies: {"@js-soft/docdb-querytranslator":"^1.0.1"},
20
+ version: "2.0.0-alpha.20",
21
+ build: "38",
22
+ date: "2022-06-03T14:09:16+00:00",
23
+ commit: "217c674042d281ad67bd13607f6307b9ecebfee9",
24
+ dependencies: {"@js-soft/docdb-querytranslator":"^1.0.1","ts-simple-nameof":"^1.3.1"},
25
25
  libraries: {
26
26
  transport: transport_1.buildInformation,
27
27
  crypto: crypto_1.buildInformation,
@@ -171,6 +171,9 @@ class Requests {
171
171
  unexpectedErrorDuringRequestItemProcessing(error) {
172
172
  return new transport_1.CoreError("error.consumption.requests.unexpectedErrorDuringRequestItemProcessing", error instanceof Error ? error.message : "Unknown error: '${JSON.stringify(e)'");
173
173
  }
174
+ cannotSendCreateAttributeRequestItemsWithIdentityAttributes() {
175
+ return new transport_1.CoreError("error.consumption.requests.cannotSendCreateAttributeRequestItemsWithIdentityAttributes", "You cannot send a CreateAttributeRequestItem with an Identity Attribute. Consider using a ProposeAttributeRequestItem instead.");
176
+ }
174
177
  canOnlyShareOwnAttributes() {
175
178
  return new transport_1.CoreError("error.consumption.requests.canOnlyShareOwnAttributes", "The given Attribute belongs to someone else. You can only share own Attributes.");
176
179
  }
@@ -296,6 +299,7 @@ exports.ConsumptionAttributesController = void 0;
296
299
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
297
300
  const ts_simple_nameof_1 = __webpack_require__(/*! ts-simple-nameof */ "./node_modules/ts-simple-nameof/index.js");
298
301
  const consumption_1 = __webpack_require__(/*! ../../consumption */ "./dist/consumption/index.js");
302
+ const CreateRelationshipAttributeParams_1 = __webpack_require__(/*! ./CreateRelationshipAttributeParams */ "./dist/modules/attributes/CreateRelationshipAttributeParams.js");
299
303
  const CreateSharedConsumptionAttributeCopyParams_1 = __webpack_require__(/*! ./CreateSharedConsumptionAttributeCopyParams */ "./dist/modules/attributes/CreateSharedConsumptionAttributeCopyParams.js");
300
304
  const ConsumptionAttribute_1 = __webpack_require__(/*! ./local/ConsumptionAttribute */ "./dist/modules/attributes/local/ConsumptionAttribute.js");
301
305
  const ConsumptionAttributeShareInfo_1 = __webpack_require__(/*! ./local/ConsumptionAttributeShareInfo */ "./dist/modules/attributes/local/ConsumptionAttributeShareInfo.js");
@@ -379,14 +383,14 @@ class ConsumptionAttributesController extends consumption_1.ConsumptionBaseContr
379
383
  queryWithType["attributeType"] = "RelationshipAttribute";
380
384
  const dbQuery = QueryTranslator_1.relationshipQueryTranslator.parse(queryWithType);
381
385
  const attributes = await this.attributes.find(dbQuery);
382
- return attributes;
386
+ return await this.parseArray(attributes, ConsumptionAttribute_1.ConsumptionAttribute);
383
387
  }
384
388
  async executeIdentityAttributeQuery(params) {
385
389
  const queryWithType = params.query;
386
390
  queryWithType["attributeType"] = "IdentityAttribute";
387
391
  const dbQuery = QueryTranslator_1.identityQueryTranslator.parse(queryWithType);
388
392
  const attributes = await this.attributes.find(dbQuery);
389
- return attributes;
393
+ return await this.parseArray(attributes, ConsumptionAttribute_1.ConsumptionAttribute);
390
394
  }
391
395
  async createConsumptionAttribute(params) {
392
396
  const consumptionAttribute = await ConsumptionAttribute_1.ConsumptionAttribute.fromAttribute(params.content);
@@ -412,6 +416,16 @@ class ConsumptionAttributesController extends consumption_1.ConsumptionBaseContr
412
416
  await this.attributes.create(successor);
413
417
  return successor;
414
418
  }
419
+ async createRelationshipAttribute(params) {
420
+ const parsedParams = CreateRelationshipAttributeParams_1.CreateRelationshipAttributeParams.from(params);
421
+ const shareInfo = ConsumptionAttributeShareInfo_1.ConsumptionAttributeShareInfo.from({
422
+ peer: parsedParams.peer,
423
+ requestReference: parsedParams.requestReference
424
+ });
425
+ const sharedConsumptionAttribute = await ConsumptionAttribute_1.ConsumptionAttribute.fromAttribute(params.content, undefined, shareInfo);
426
+ await this.attributes.create(sharedConsumptionAttribute);
427
+ return sharedConsumptionAttribute;
428
+ }
415
429
  async createSharedConsumptionAttributeCopy(params) {
416
430
  const parsedParams = CreateSharedConsumptionAttributeCopyParams_1.CreateSharedConsumptionAttributeCopyParams.from(params);
417
431
  const sourceAttribute = await this.getConsumptionAttribute(parsedParams.attributeId);
@@ -556,6 +570,56 @@ exports.CreatePeerConsumptionAttributeParams = CreatePeerConsumptionAttributePar
556
570
 
557
571
  /***/ }),
558
572
 
573
+ /***/ "./dist/modules/attributes/CreateRelationshipAttributeParams.js":
574
+ /*!**********************************************************************!*\
575
+ !*** ./dist/modules/attributes/CreateRelationshipAttributeParams.js ***!
576
+ \**********************************************************************/
577
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
578
+
579
+ "use strict";
580
+
581
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
582
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
583
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
584
+ 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;
585
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
586
+ };
587
+ var __metadata = (this && this.__metadata) || function (k, v) {
588
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
589
+ };
590
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
591
+ exports.CreateRelationshipAttributeParams = void 0;
592
+ const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
593
+ const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
594
+ const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
595
+ let CreateRelationshipAttributeParams = class CreateRelationshipAttributeParams extends ts_serval_1.Serializable {
596
+ static from(value) {
597
+ return this.fromAny(value);
598
+ }
599
+ };
600
+ __decorate([
601
+ (0, ts_serval_1.serialize)(),
602
+ (0, ts_serval_1.validate)(),
603
+ __metadata("design:type", content_1.RelationshipAttribute)
604
+ ], CreateRelationshipAttributeParams.prototype, "content", void 0);
605
+ __decorate([
606
+ (0, ts_serval_1.serialize)(),
607
+ (0, ts_serval_1.validate)(),
608
+ __metadata("design:type", transport_1.CoreAddress)
609
+ ], CreateRelationshipAttributeParams.prototype, "peer", void 0);
610
+ __decorate([
611
+ (0, ts_serval_1.serialize)(),
612
+ (0, ts_serval_1.validate)(),
613
+ __metadata("design:type", transport_1.CoreId)
614
+ ], CreateRelationshipAttributeParams.prototype, "requestReference", void 0);
615
+ CreateRelationshipAttributeParams = __decorate([
616
+ (0, ts_serval_1.type)("CreateRelationshipAttributeParams")
617
+ ], CreateRelationshipAttributeParams);
618
+ exports.CreateRelationshipAttributeParams = CreateRelationshipAttributeParams;
619
+ //# sourceMappingURL=CreateRelationshipAttributeParams.js.map
620
+
621
+ /***/ }),
622
+
559
623
  /***/ "./dist/modules/attributes/CreateSharedConsumptionAttributeCopyParams.js":
560
624
  /*!*******************************************************************************!*\
561
625
  !*** ./dist/modules/attributes/CreateSharedConsumptionAttributeCopyParams.js ***!
@@ -1191,6 +1255,8 @@ __exportStar(__webpack_require__(/*! ./requests/incoming/IncomingRequestsControl
1191
1255
  __exportStar(__webpack_require__(/*! ./requests/incoming/received/ReceivedIncomingRequestParameters */ "./dist/modules/requests/incoming/received/ReceivedIncomingRequestParameters.js"), exports);
1192
1256
  __exportStar(__webpack_require__(/*! ./requests/incoming/requireManualDecision/RequireManualDecisionOfIncomingRequestParameters */ "./dist/modules/requests/incoming/requireManualDecision/RequireManualDecisionOfIncomingRequestParameters.js"), exports);
1193
1257
  __exportStar(__webpack_require__(/*! ./requests/itemProcessors/AbstractRequestItemProcessor */ "./dist/modules/requests/itemProcessors/AbstractRequestItemProcessor.js"), exports);
1258
+ __exportStar(__webpack_require__(/*! ./requests/itemProcessors/createAttribute/AcceptCreateAttributeRequestItemParameters */ "./dist/modules/requests/itemProcessors/createAttribute/AcceptCreateAttributeRequestItemParameters.js"), exports);
1259
+ __exportStar(__webpack_require__(/*! ./requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor */ "./dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js"), exports);
1194
1260
  __exportStar(__webpack_require__(/*! ./requests/itemProcessors/GenericRequestItemProcessor */ "./dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js"), exports);
1195
1261
  __exportStar(__webpack_require__(/*! ./requests/itemProcessors/IRequestItemProcessor */ "./dist/modules/requests/itemProcessors/IRequestItemProcessor.js"), exports);
1196
1262
  __exportStar(__webpack_require__(/*! ./requests/itemProcessors/ProcessorConstructor */ "./dist/modules/requests/itemProcessors/ProcessorConstructor.js"), exports);
@@ -2074,6 +2140,94 @@ exports.ErrorValidationResult = ErrorValidationResult;
2074
2140
 
2075
2141
  /***/ }),
2076
2142
 
2143
+ /***/ "./dist/modules/requests/itemProcessors/createAttribute/AcceptCreateAttributeRequestItemParameters.js":
2144
+ /*!************************************************************************************************************!*\
2145
+ !*** ./dist/modules/requests/itemProcessors/createAttribute/AcceptCreateAttributeRequestItemParameters.js ***!
2146
+ \************************************************************************************************************/
2147
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
2148
+
2149
+ "use strict";
2150
+
2151
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2152
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
2153
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
2154
+ 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;
2155
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
2156
+ };
2157
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
2158
+ exports.AcceptCreateAttributeRequestItemParameters = void 0;
2159
+ const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
2160
+ let AcceptCreateAttributeRequestItemParameters = class AcceptCreateAttributeRequestItemParameters extends ts_serval_1.Serializable {
2161
+ static from(value) {
2162
+ return this.fromAny(value);
2163
+ }
2164
+ };
2165
+ AcceptCreateAttributeRequestItemParameters = __decorate([
2166
+ (0, ts_serval_1.type)("AcceptCreateAttributeRequestItemParameters")
2167
+ ], AcceptCreateAttributeRequestItemParameters);
2168
+ exports.AcceptCreateAttributeRequestItemParameters = AcceptCreateAttributeRequestItemParameters;
2169
+ //# sourceMappingURL=AcceptCreateAttributeRequestItemParameters.js.map
2170
+
2171
+ /***/ }),
2172
+
2173
+ /***/ "./dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js":
2174
+ /*!*****************************************************************************************************!*\
2175
+ !*** ./dist/modules/requests/itemProcessors/createAttribute/CreateAttributeRequestItemProcessor.js ***!
2176
+ \*****************************************************************************************************/
2177
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2178
+
2179
+ "use strict";
2180
+
2181
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
2182
+ exports.CreateAttributeRequestItemProcessor = void 0;
2183
+ const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
2184
+ const consumption_1 = __webpack_require__(/*! ../../../../consumption */ "./dist/consumption/index.js");
2185
+ const GenericRequestItemProcessor_1 = __webpack_require__(/*! ../GenericRequestItemProcessor */ "./dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js");
2186
+ const ValidationResult_1 = __webpack_require__(/*! ../ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
2187
+ class CreateAttributeRequestItemProcessor extends GenericRequestItemProcessor_1.GenericRequestItemProcessor {
2188
+ canCreateOutgoingRequestItem(requestItem) {
2189
+ // TODO: remove the following if we for sure only allow RelationshipAttributes in a RequestItem
2190
+ if (requestItem.attribute instanceof content_1.IdentityAttribute) {
2191
+ // It doesn't make sense to send a CreateAttributeRequestItem with an IdentityAttribute. E.g. the following cases would have to be handled:
2192
+ // - The RequestItem contains an Attribute (e.g. GivenName) with the same value as an already existing Attribute
2193
+ // => Should the user reject the request? If not, do we save a new Attribute with the same value?
2194
+ // - The RequestItem contains an Attribute (e.g. GivenName) with the a different value than an already existing Attribute
2195
+ // - ...
2196
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.cannotSendCreateAttributeRequestItemsWithIdentityAttributes());
2197
+ }
2198
+ return ValidationResult_1.ValidationResult.success();
2199
+ }
2200
+ async accept(requestItem, _params, request) {
2201
+ if (requestItem.attribute instanceof content_1.IdentityAttribute) {
2202
+ throw new Error("IdentityAttribute not supported"); // TODO: allow only Relationship Attributes in RequestItem?
2203
+ }
2204
+ const result = await this.consumptionController.attributes.createRelationshipAttribute({
2205
+ content: requestItem.attribute,
2206
+ peer: request.peer,
2207
+ requestReference: request.id
2208
+ });
2209
+ return content_1.CreateAttributeAcceptResponseItem.from({
2210
+ result: content_1.ResponseItemResult.Accepted,
2211
+ attributeId: result.id
2212
+ });
2213
+ }
2214
+ async applyIncomingResponseItem(responseItem, requestItem, request) {
2215
+ if (!(responseItem instanceof content_1.CreateAttributeAcceptResponseItem)) {
2216
+ return;
2217
+ }
2218
+ await this.consumptionController.attributes.createPeerConsumptionAttribute({
2219
+ id: responseItem.attributeId,
2220
+ content: requestItem.attribute,
2221
+ peer: request.peer,
2222
+ requestReference: request.id
2223
+ });
2224
+ }
2225
+ }
2226
+ exports.CreateAttributeRequestItemProcessor = CreateAttributeRequestItemProcessor;
2227
+ //# sourceMappingURL=CreateAttributeRequestItemProcessor.js.map
2228
+
2229
+ /***/ }),
2230
+
2077
2231
  /***/ "./dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.js":
2078
2232
  /*!********************************************************************************************************!*\
2079
2233
  !*** ./dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.js ***!
@@ -2091,21 +2245,39 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
2091
2245
  var __metadata = (this && this.__metadata) || function (k, v) {
2092
2246
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
2093
2247
  };
2248
+ var AcceptReadAttributeRequestItemParameters_1;
2094
2249
  Object.defineProperty(exports, "__esModule", ({ value: true }));
2095
2250
  exports.AcceptReadAttributeRequestItemParameters = void 0;
2096
2251
  const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
2252
+ const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
2097
2253
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
2098
- let AcceptReadAttributeRequestItemParameters = class AcceptReadAttributeRequestItemParameters extends ts_serval_1.Serializable {
2254
+ const ts_simple_nameof_1 = __webpack_require__(/*! ts-simple-nameof */ "./node_modules/ts-simple-nameof/index.js");
2255
+ let AcceptReadAttributeRequestItemParameters = AcceptReadAttributeRequestItemParameters_1 = class AcceptReadAttributeRequestItemParameters extends ts_serval_1.Serializable {
2099
2256
  static from(value) {
2100
2257
  return this.fromAny(value);
2101
2258
  }
2259
+ static postFrom(value) {
2260
+ const typedValue = value;
2261
+ if (typedValue.attributeId && typedValue.attribute) {
2262
+ throw new ts_serval_1.ValidationError(AcceptReadAttributeRequestItemParameters_1.name, (0, ts_simple_nameof_1.nameof)((x) => x.attribute), `You cannot specify both ${(0, ts_simple_nameof_1.nameof)((x) => x.attribute)} and ${(0, ts_simple_nameof_1.nameof)((x) => x.attributeId)}.`);
2263
+ }
2264
+ if (!typedValue.attributeId && !typedValue.attribute) {
2265
+ throw new ts_serval_1.ValidationError(AcceptReadAttributeRequestItemParameters_1.name, (0, ts_simple_nameof_1.nameof)((x) => x.attribute), `You have to specify either ${(0, ts_simple_nameof_1.nameof)((x) => x.attribute)} or ${(0, ts_simple_nameof_1.nameof)((x) => x.attributeId)}.`);
2266
+ }
2267
+ return value;
2268
+ }
2102
2269
  };
2103
2270
  __decorate([
2104
2271
  (0, ts_serval_1.serialize)(),
2105
- (0, ts_serval_1.validate)(),
2272
+ (0, ts_serval_1.validate)({ nullable: true }),
2106
2273
  __metadata("design:type", transport_1.CoreId)
2107
2274
  ], AcceptReadAttributeRequestItemParameters.prototype, "attributeId", void 0);
2108
- AcceptReadAttributeRequestItemParameters = __decorate([
2275
+ __decorate([
2276
+ (0, ts_serval_1.serialize)({ unionTypes: [content_1.IdentityAttribute, content_1.RelationshipAttribute] }),
2277
+ (0, ts_serval_1.validate)({ nullable: true }),
2278
+ __metadata("design:type", Object)
2279
+ ], AcceptReadAttributeRequestItemParameters.prototype, "attribute", void 0);
2280
+ AcceptReadAttributeRequestItemParameters = AcceptReadAttributeRequestItemParameters_1 = __decorate([
2109
2281
  (0, ts_serval_1.type)("AcceptReadAttributeRequestItemParameters")
2110
2282
  ], AcceptReadAttributeRequestItemParameters);
2111
2283
  exports.AcceptReadAttributeRequestItemParameters = AcceptReadAttributeRequestItemParameters;
@@ -2133,25 +2305,54 @@ const AcceptReadAttributeRequestItemParameters_1 = __webpack_require__(/*! ./Acc
2133
2305
  class ReadAttributeRequestItemProcessor extends GenericRequestItemProcessor_1.GenericRequestItemProcessor {
2134
2306
  async canAccept(_requestItem, params, request) {
2135
2307
  const parsedParams = AcceptReadAttributeRequestItemParameters_1.AcceptReadAttributeRequestItemParameters.from(params);
2136
- const attribute = await this.consumptionController.attributes.getConsumptionAttribute(parsedParams.attributeId);
2137
- if (!attribute) {
2138
- return ValidationResult_1.ValidationResult.error(transport_1.TransportErrors.general.recordNotFound(ConsumptionAttribute_1.ConsumptionAttribute, request.id.toString()));
2139
- }
2140
- if (!this.consumptionController.accountController.identity.isMe(attribute.content.owner)) {
2141
- return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.canOnlyShareOwnAttributes());
2308
+ if (parsedParams.attributeId) {
2309
+ const foundAttribute = await this.consumptionController.attributes.getConsumptionAttribute(parsedParams.attributeId);
2310
+ if (!foundAttribute) {
2311
+ return ValidationResult_1.ValidationResult.error(transport_1.TransportErrors.general.recordNotFound(ConsumptionAttribute_1.ConsumptionAttribute, request.id.toString()));
2312
+ }
2313
+ if (!this.consumptionController.accountController.identity.isMe(foundAttribute.content.owner)) {
2314
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.canOnlyShareOwnAttributes());
2315
+ }
2142
2316
  }
2143
2317
  return ValidationResult_1.ValidationResult.success();
2144
2318
  }
2145
2319
  async accept(_requestItem, params, request) {
2146
- const consumptionAttribute = await this.consumptionController.attributes.createSharedConsumptionAttributeCopy({
2147
- attributeId: transport_1.CoreId.from(params.attributeId),
2320
+ const parsedParams = AcceptReadAttributeRequestItemParameters_1.AcceptReadAttributeRequestItemParameters.from(params);
2321
+ let sharedConsumptionAttribute;
2322
+ if (parsedParams.attributeId) {
2323
+ sharedConsumptionAttribute = await this.copyExistingAttribute(parsedParams.attributeId, request);
2324
+ }
2325
+ else {
2326
+ sharedConsumptionAttribute = await this.createNewAttribute(parsedParams.attribute, request);
2327
+ }
2328
+ return content_1.ReadAttributeAcceptResponseItem.from({
2329
+ result: content_1.ResponseItemResult.Accepted,
2330
+ attributeId: sharedConsumptionAttribute.id,
2331
+ attribute: sharedConsumptionAttribute.content
2332
+ });
2333
+ }
2334
+ async copyExistingAttribute(attributeId, request) {
2335
+ return await this.consumptionController.attributes.createSharedConsumptionAttributeCopy({
2336
+ attributeId: transport_1.CoreId.from(attributeId),
2148
2337
  peer: transport_1.CoreAddress.from(request.peer),
2149
2338
  requestReference: transport_1.CoreId.from(request.id)
2150
2339
  });
2151
- return content_1.ReadAttributeAcceptResponseItem.from({
2152
- result: content_1.ResponseItemResult.Accepted,
2153
- attributeId: consumptionAttribute.id,
2154
- attribute: consumptionAttribute.content
2340
+ }
2341
+ async createNewAttribute(attribute, request) {
2342
+ if (attribute instanceof content_1.IdentityAttribute) {
2343
+ const repositoryConsumptionAttribute = await this.consumptionController.attributes.createConsumptionAttribute({
2344
+ content: attribute
2345
+ });
2346
+ return await this.consumptionController.attributes.createSharedConsumptionAttributeCopy({
2347
+ attributeId: transport_1.CoreId.from(repositoryConsumptionAttribute.id),
2348
+ peer: transport_1.CoreAddress.from(request.peer),
2349
+ requestReference: transport_1.CoreId.from(request.id)
2350
+ });
2351
+ }
2352
+ return await this.consumptionController.attributes.createRelationshipAttribute({
2353
+ content: attribute,
2354
+ peer: request.peer,
2355
+ requestReference: transport_1.CoreId.from(request.id)
2155
2356
  });
2156
2357
  }
2157
2358
  async applyIncomingResponseItem(responseItem, _requestItem, request) {