@nmshd/consumption 2.0.0-alpha.12 → 2.0.0-alpha.15

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 (62) hide show
  1. package/dist/buildInformation.js +4 -4
  2. package/dist/consumption/ConsumptionController.js +1 -1
  3. package/dist/consumption/ConsumptionController.js.map +1 -1
  4. package/dist/consumption/ConsumptionErrors.d.ts +5 -2
  5. package/dist/consumption/ConsumptionErrors.js +12 -3
  6. package/dist/consumption/ConsumptionErrors.js.map +1 -1
  7. package/dist/modules/attributes/ConsumptionAttributesController.d.ts +14 -10
  8. package/dist/modules/attributes/ConsumptionAttributesController.js +77 -58
  9. package/dist/modules/attributes/ConsumptionAttributesController.js.map +1 -1
  10. package/dist/modules/attributes/CreateConsumptionAttributeParams.d.ts +9 -0
  11. package/dist/modules/attributes/CreateConsumptionAttributeParams.js +26 -0
  12. package/dist/modules/attributes/CreateConsumptionAttributeParams.js.map +1 -0
  13. package/dist/modules/attributes/CreatePeerConsumptionAttributeParams.d.ts +16 -0
  14. package/dist/modules/attributes/CreatePeerConsumptionAttributeParams.js +42 -0
  15. package/dist/modules/attributes/CreatePeerConsumptionAttributeParams.js.map +1 -0
  16. package/dist/modules/attributes/CreateSharedConsumptionAttributeCopyParams.d.ts +13 -0
  17. package/dist/modules/attributes/CreateSharedConsumptionAttributeCopyParams.js +36 -0
  18. package/dist/modules/attributes/CreateSharedConsumptionAttributeCopyParams.js.map +1 -0
  19. package/dist/modules/attributes/SuccedConsumptionAttributeParams.d.ts +12 -0
  20. package/dist/modules/attributes/SuccedConsumptionAttributeParams.js +32 -0
  21. package/dist/modules/attributes/SuccedConsumptionAttributeParams.js.map +1 -0
  22. package/dist/modules/attributes/UpdateConsumptionAttributeParams.d.ts +12 -0
  23. package/dist/modules/attributes/UpdateConsumptionAttributeParams.js +32 -0
  24. package/dist/modules/attributes/UpdateConsumptionAttributeParams.js.map +1 -0
  25. package/dist/modules/attributes/local/ConsumptionAttribute.d.ts +19 -10
  26. package/dist/modules/attributes/local/ConsumptionAttribute.js +20 -14
  27. package/dist/modules/attributes/local/ConsumptionAttribute.js.map +1 -1
  28. package/dist/modules/attributes/local/ConsumptionAttributeShareInfo.d.ts +17 -0
  29. package/dist/modules/attributes/local/ConsumptionAttributeShareInfo.js +36 -0
  30. package/dist/modules/attributes/local/ConsumptionAttributeShareInfo.js.map +1 -0
  31. package/dist/modules/index.d.ts +6 -0
  32. package/dist/modules/index.js +6 -0
  33. package/dist/modules/index.js.map +1 -1
  34. package/dist/modules/requests/incoming/IncomingRequestsController.js +24 -19
  35. package/dist/modules/requests/incoming/IncomingRequestsController.js.map +1 -1
  36. package/dist/modules/requests/itemProcessors/AbstractRequestItemProcessor.d.ts +19 -0
  37. package/dist/modules/requests/itemProcessors/AbstractRequestItemProcessor.js +10 -0
  38. package/dist/modules/requests/itemProcessors/AbstractRequestItemProcessor.js.map +1 -0
  39. package/dist/modules/requests/itemProcessors/GenericRequestItemProcessor.d.ts +10 -9
  40. package/dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js +10 -8
  41. package/dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js.map +1 -1
  42. package/dist/modules/requests/itemProcessors/IRequestItemProcessor.d.ts +7 -6
  43. package/dist/modules/requests/itemProcessors/ProcessorConstructor.d.ts +2 -1
  44. package/dist/modules/requests/itemProcessors/RequestItemProcessorRegistry.d.ts +3 -1
  45. package/dist/modules/requests/itemProcessors/RequestItemProcessorRegistry.js +3 -2
  46. package/dist/modules/requests/itemProcessors/RequestItemProcessorRegistry.js.map +1 -1
  47. package/dist/modules/requests/itemProcessors/ValidationResult.d.ts +4 -4
  48. package/dist/modules/requests/itemProcessors/ValidationResult.js +6 -6
  49. package/dist/modules/requests/itemProcessors/ValidationResult.js.map +1 -1
  50. package/dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.d.ts +10 -0
  51. package/dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.js +29 -0
  52. package/dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.js.map +1 -0
  53. package/dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.d.ts +10 -0
  54. package/dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.js +48 -0
  55. package/dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.js.map +1 -0
  56. package/dist/modules/requests/outgoing/OutgoingRequestsController.js +10 -10
  57. package/dist/modules/requests/outgoing/OutgoingRequestsController.js.map +1 -1
  58. package/lib-web/nmshd.consumption.js +517 -130
  59. package/lib-web/nmshd.consumption.js.map +1 -1
  60. package/lib-web/nmshd.consumption.min.js +1 -1
  61. package/lib-web/nmshd.consumption.min.js.map +1 -1
  62. package/package.json +6 -6
@@ -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-alpha.12",
21
- build: "30",
22
- date: "2022-05-16T19:13:04+00:00",
23
- commit: "c69a5b2e5f8dd0f5d661e9b7f0875efb739d78b5",
20
+ version: "2.0.0-alpha.15",
21
+ build: "33",
22
+ date: "2022-05-23T13:29:19+00:00",
23
+ commit: "2e8f8676fdea5fac8b3952fbb65d4975bf85f5ea",
24
24
  dependencies: {},
25
25
  libraries: {
26
26
  transport: transport_1.buildInformation,
@@ -103,7 +103,7 @@ class ConsumptionController {
103
103
  async init(requestItemProcessors = []) {
104
104
  this._attributes = await new modules_1.ConsumptionAttributesController(this).init();
105
105
  this._drafts = await new modules_1.DraftsController(this).init();
106
- const processorRegistry = new modules_1.RequestItemProcessorRegistry(requestItemProcessors);
106
+ const processorRegistry = new modules_1.RequestItemProcessorRegistry(this, requestItemProcessors);
107
107
  this._outgoingRequests = await new modules_1.OutgoingRequestsController(await this.accountController.getSynchronizedCollection("Requests"), processorRegistry, this).init();
108
108
  this._incomingRequests = await new IncomingRequestsController_1.IncomingRequestsController(await this.accountController.getSynchronizedCollection("Requests"), processorRegistry, this).init();
109
109
  this._settings = await new modules_1.SettingsController(this).init();
@@ -153,14 +153,23 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
153
153
  exports.ConsumptionErrors = void 0;
154
154
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
155
155
  class Attributes {
156
- attributeExists(name) {
157
- return new transport_1.CoreError("error.consumption.attributes.attributeExists", `Attribute with name ${name} already exists. Please use succeed instead.`);
156
+ attributeExists(id) {
157
+ return new transport_1.CoreError("error.consumption.attributes.attributeExists", `Attribute with id '${id}' already exists. Please use succeed instead.`);
158
+ }
159
+ predecessorNotFound(id) {
160
+ return new transport_1.CoreError("error.consumption.attributes.predecessorNotFound", `Attribute with id '${id}' does not exist. Please use create instead.`);
158
161
  }
159
162
  }
160
163
  class Requests {
161
- requestsExists(id) {
164
+ requestExists(id) {
162
165
  return new transport_1.CoreError("error.consumption.requests.requestExists", `Request with id ${id} already exists and can't be created.`);
163
166
  }
167
+ unexpectedErrorDuringRequestItemProcessing(error) {
168
+ return new transport_1.CoreError("error.consumption.requests.unexpectedErrorDuringRequestItemProcessing", error instanceof Error ? error.message : "Unknown error: '${JSON.stringify(e)'");
169
+ }
170
+ canOnlyShareOwnAttributes() {
171
+ return new transport_1.CoreError("error.consumption.requests.canOnlyShareOwnAttributes", "The given Attribute belongs to someone else. You can only share own Attributes.");
172
+ }
164
173
  }
165
174
  class RelationshipInfo {
166
175
  relationshipInfoExists(relationshipId) {
@@ -283,7 +292,10 @@ exports.ConsumptionAttributesController = void 0;
283
292
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
284
293
  const ts_simple_nameof_1 = __webpack_require__(/*! ts-simple-nameof */ "./node_modules/ts-simple-nameof/index.js");
285
294
  const consumption_1 = __webpack_require__(/*! ../../consumption */ "./dist/consumption/index.js");
295
+ const CreateSharedConsumptionAttributeCopyParams_1 = __webpack_require__(/*! ./CreateSharedConsumptionAttributeCopyParams */ "./dist/modules/attributes/CreateSharedConsumptionAttributeCopyParams.js");
286
296
  const ConsumptionAttribute_1 = __webpack_require__(/*! ./local/ConsumptionAttribute */ "./dist/modules/attributes/local/ConsumptionAttribute.js");
297
+ const ConsumptionAttributeShareInfo_1 = __webpack_require__(/*! ./local/ConsumptionAttributeShareInfo */ "./dist/modules/attributes/local/ConsumptionAttributeShareInfo.js");
298
+ const SuccedConsumptionAttributeParams_1 = __webpack_require__(/*! ./SuccedConsumptionAttributeParams */ "./dist/modules/attributes/SuccedConsumptionAttributeParams.js");
287
299
  class ConsumptionAttributesController extends consumption_1.ConsumptionBaseController {
288
300
  constructor(parent) {
289
301
  super(consumption_1.ConsumptionControllerName.ConsumptionAttributesController, parent);
@@ -305,13 +317,13 @@ class ConsumptionAttributesController extends consumption_1.ConsumptionBaseContr
305
317
  }
306
318
  else if (!attribute.content.validFrom &&
307
319
  attribute.content.validTo &&
308
- attribute.content.validTo.isAfter(now)) {
320
+ attribute.content.validTo.isSameOrAfter(now)) {
309
321
  return true;
310
322
  }
311
323
  else if (attribute.content.validFrom &&
312
324
  attribute.content.validTo &&
313
325
  attribute.content.validFrom.isSameOrBefore(now) &&
314
- attribute.content.validTo.isAfter(now)) {
326
+ attribute.content.validTo.isSameOrAfter(now)) {
315
327
  return true;
316
328
  }
317
329
  return false;
@@ -340,77 +352,93 @@ class ConsumptionAttributesController extends consumption_1.ConsumptionBaseContr
340
352
  }
341
353
  return items;
342
354
  }
343
- async getAttribute(id) {
344
- const result = await this.attributes.find({
355
+ async getConsumptionAttribute(id) {
356
+ const result = await this.attributes.findOne({
345
357
  [(0, ts_simple_nameof_1.nameof)((c) => c.id)]: id.toString()
346
358
  });
347
- const attributes = await this.parseArray(result, ConsumptionAttribute_1.ConsumptionAttribute);
348
- return this.findCurrent(attributes);
349
- }
350
- async getAttributeByName(name) {
351
- const result = await this.attributes.find({
352
- [`${(0, ts_simple_nameof_1.nameof)((c) => c.content)}.${(0, ts_simple_nameof_1.nameof)((a) => a.name)}`]: name
353
- });
354
- const attributes = await this.parseArray(result, ConsumptionAttribute_1.ConsumptionAttribute);
355
- return this.findCurrent(attributes);
356
- }
357
- async getAttributeHistoryByName(name) {
358
- const result = await this.attributes.find({
359
- [`${(0, ts_simple_nameof_1.nameof)((c) => c.content)}.${(0, ts_simple_nameof_1.nameof)((a) => a.name)}`]: name
360
- });
361
- const attributes = await this.parseArray(result, ConsumptionAttribute_1.ConsumptionAttribute);
362
- const sorted = attributes.sort((a, b) => {
363
- return a.createdAt.compare(b.createdAt);
364
- });
365
- return sorted;
359
+ if (!result)
360
+ return;
361
+ return ConsumptionAttribute_1.ConsumptionAttribute.from(result);
366
362
  }
367
- async getAttributes(query) {
368
- const items = await this.attributes.find(query);
369
- return await this.parseArray(items, ConsumptionAttribute_1.ConsumptionAttribute);
363
+ async getConsumptionAttributes(query) {
364
+ const attributes = await this.attributes.find(query);
365
+ return await this.parseArray(attributes, ConsumptionAttribute_1.ConsumptionAttribute);
370
366
  }
371
- async getValidAttributes(query) {
372
- const docs = await this.attributes.find(query);
373
- const items = await this.parseArray(docs, ConsumptionAttribute_1.ConsumptionAttribute);
367
+ async getValidConsumptionAttributes(query) {
368
+ const attributes = await this.attributes.find(query);
369
+ const items = await this.parseArray(attributes, ConsumptionAttribute_1.ConsumptionAttribute);
374
370
  return this.filterCurrent(items);
375
371
  }
376
- async getAttributesByName(query) {
377
- const attributes = await this.getValidAttributes(query);
378
- const mapper = (result, attribute) => {
379
- result[attribute.content.name] = attribute;
380
- return result;
381
- };
382
- return attributes.reduce(mapper, {});
383
- }
384
- async createAttribute(attribute) {
385
- const current = await this.getAttributeByName(attribute.content.name);
386
- if (current) {
387
- throw consumption_1.ConsumptionErrors.attributes.attributeExists(attribute.content.name);
388
- }
389
- await this.attributes.create(attribute);
390
- return attribute;
372
+ async createConsumptionAttribute(params) {
373
+ const consumptionAttribute = await ConsumptionAttribute_1.ConsumptionAttribute.fromAttribute(params.content);
374
+ await this.attributes.create(consumptionAttribute);
375
+ return consumptionAttribute;
391
376
  }
392
- async succeedAttribute(attribute, validFrom) {
393
- const current = await this.getAttributeByName(attribute.content.name);
394
- if (current && !validFrom) {
395
- validFrom = transport_1.CoreDate.utc();
396
- }
397
- if (current) {
398
- attribute.content.validFrom = validFrom;
399
- current.content.validTo = validFrom;
400
- await this.updateAttribute(current);
401
- }
402
- await this.attributes.create(attribute);
403
- return attribute;
377
+ async succeedConsumptionAttribute(params) {
378
+ const parsedParams = SuccedConsumptionAttributeParams_1.SucceedConsumptionAttributeParams.from(params);
379
+ const current = await this.attributes.findOne({
380
+ [(0, ts_simple_nameof_1.nameof)((c) => c.id)]: params.succeeds.toString()
381
+ });
382
+ if (!current) {
383
+ throw consumption_1.ConsumptionErrors.attributes.predecessorNotFound(parsedParams.succeeds.toString());
384
+ }
385
+ if (!parsedParams.successorContent.validFrom) {
386
+ parsedParams.successorContent.validFrom = transport_1.CoreDate.utc();
387
+ }
388
+ const validFrom = parsedParams.successorContent.validFrom;
389
+ const currentUpdated = ConsumptionAttribute_1.ConsumptionAttribute.from(current);
390
+ currentUpdated.content.validTo = validFrom.subtract(1);
391
+ await this.attributes.update(current, currentUpdated);
392
+ const successor = await ConsumptionAttribute_1.ConsumptionAttribute.fromAttribute(parsedParams.successorContent, parsedParams.succeeds);
393
+ await this.attributes.create(successor);
394
+ return successor;
395
+ }
396
+ async createSharedConsumptionAttributeCopy(params) {
397
+ const parsedParams = CreateSharedConsumptionAttributeCopyParams_1.CreateSharedConsumptionAttributeCopyParams.from(params);
398
+ const sourceAttribute = await this.getConsumptionAttribute(parsedParams.attributeId);
399
+ if (!sourceAttribute) {
400
+ throw consumption_1.ConsumptionErrors.attributes.predecessorNotFound(parsedParams.attributeId.toString());
401
+ }
402
+ const shareInfo = ConsumptionAttributeShareInfo_1.ConsumptionAttributeShareInfo.from({
403
+ peer: parsedParams.peer,
404
+ requestReference: parsedParams.requestReference,
405
+ sourceAttribute: parsedParams.attributeId
406
+ });
407
+ const sharedConsumptionAttributeCopy = await ConsumptionAttribute_1.ConsumptionAttribute.fromAttribute(sourceAttribute.content, undefined, shareInfo);
408
+ await this.attributes.create(sharedConsumptionAttributeCopy);
409
+ return sharedConsumptionAttributeCopy;
410
+ }
411
+ async createPeerConsumptionAttribute(params) {
412
+ const shareInfo = ConsumptionAttributeShareInfo_1.ConsumptionAttributeShareInfo.from({
413
+ peer: params.peer,
414
+ requestReference: params.requestReference
415
+ });
416
+ const peerConsumptionAttribute = ConsumptionAttribute_1.ConsumptionAttribute.from({
417
+ id: params.id,
418
+ content: params.content,
419
+ shareInfo: shareInfo,
420
+ createdAt: transport_1.CoreDate.utc()
421
+ });
422
+ await this.attributes.create(peerConsumptionAttribute);
423
+ return peerConsumptionAttribute;
404
424
  }
405
- async updateAttribute(attribute) {
425
+ async updateConsumptionAttribute(params) {
406
426
  const current = await this.attributes.findOne({
407
- [(0, ts_simple_nameof_1.nameof)((c) => c.id)]: attribute.id.toString()
427
+ [(0, ts_simple_nameof_1.nameof)((c) => c.id)]: params.id.toString()
408
428
  });
409
429
  if (!current) {
410
- throw transport_1.TransportErrors.general.recordNotFound(ConsumptionAttribute_1.ConsumptionAttribute, attribute.id.toString());
411
- }
412
- await this.attributes.update(current, attribute);
413
- return attribute;
430
+ throw transport_1.TransportErrors.general.recordNotFound(ConsumptionAttribute_1.ConsumptionAttribute, params.id.toString());
431
+ }
432
+ const updatedConsumptionAttribute = ConsumptionAttribute_1.ConsumptionAttribute.from({
433
+ id: current.id,
434
+ content: params.content,
435
+ createdAt: current.createdAt,
436
+ shareInfo: current.shareInfo,
437
+ succeededBy: current.succeededBy,
438
+ succeeds: current.succeeds
439
+ });
440
+ await this.attributes.update(current, updatedConsumptionAttribute);
441
+ return updatedConsumptionAttribute;
414
442
  }
415
443
  async deleteAttribute(attribute) {
416
444
  await this.attributes.delete(attribute);
@@ -421,6 +449,182 @@ exports.ConsumptionAttributesController = ConsumptionAttributesController;
421
449
 
422
450
  /***/ }),
423
451
 
452
+ /***/ "./dist/modules/attributes/CreateConsumptionAttributeParams.js":
453
+ /*!*********************************************************************!*\
454
+ !*** ./dist/modules/attributes/CreateConsumptionAttributeParams.js ***!
455
+ \*********************************************************************/
456
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
457
+
458
+ "use strict";
459
+
460
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
461
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
462
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
463
+ 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;
464
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
465
+ };
466
+ var __metadata = (this && this.__metadata) || function (k, v) {
467
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
468
+ };
469
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
470
+ exports.CreateConsumptionAttributeParams = void 0;
471
+ const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
472
+ const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
473
+ class CreateConsumptionAttributeParams extends ts_serval_1.Serializable {
474
+ static from(value) {
475
+ return this.fromAny(value);
476
+ }
477
+ }
478
+ __decorate([
479
+ (0, ts_serval_1.serialize)({ unionTypes: [content_1.IdentityAttribute, content_1.RelationshipAttribute] }),
480
+ (0, ts_serval_1.validate)(),
481
+ __metadata("design:type", Object)
482
+ ], CreateConsumptionAttributeParams.prototype, "content", void 0);
483
+ exports.CreateConsumptionAttributeParams = CreateConsumptionAttributeParams;
484
+ //# sourceMappingURL=CreateConsumptionAttributeParams.js.map
485
+
486
+ /***/ }),
487
+
488
+ /***/ "./dist/modules/attributes/CreatePeerConsumptionAttributeParams.js":
489
+ /*!*************************************************************************!*\
490
+ !*** ./dist/modules/attributes/CreatePeerConsumptionAttributeParams.js ***!
491
+ \*************************************************************************/
492
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
493
+
494
+ "use strict";
495
+
496
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
497
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
498
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
499
+ 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;
500
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
501
+ };
502
+ var __metadata = (this && this.__metadata) || function (k, v) {
503
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
504
+ };
505
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
506
+ exports.CreatePeerConsumptionAttributeParams = void 0;
507
+ const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
508
+ const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
509
+ const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
510
+ class CreatePeerConsumptionAttributeParams extends ts_serval_1.Serializable {
511
+ static from(value) {
512
+ return this.fromAny(value);
513
+ }
514
+ }
515
+ __decorate([
516
+ (0, ts_serval_1.serialize)(),
517
+ (0, ts_serval_1.validate)(),
518
+ __metadata("design:type", transport_1.CoreId)
519
+ ], CreatePeerConsumptionAttributeParams.prototype, "id", void 0);
520
+ __decorate([
521
+ (0, ts_serval_1.serialize)({ unionTypes: [content_1.IdentityAttribute, content_1.RelationshipAttribute] }),
522
+ (0, ts_serval_1.validate)(),
523
+ __metadata("design:type", Object)
524
+ ], CreatePeerConsumptionAttributeParams.prototype, "content", void 0);
525
+ __decorate([
526
+ (0, ts_serval_1.serialize)(),
527
+ (0, ts_serval_1.validate)(),
528
+ __metadata("design:type", transport_1.CoreId)
529
+ ], CreatePeerConsumptionAttributeParams.prototype, "requestReference", void 0);
530
+ __decorate([
531
+ (0, ts_serval_1.serialize)(),
532
+ (0, ts_serval_1.validate)(),
533
+ __metadata("design:type", transport_1.CoreAddress)
534
+ ], CreatePeerConsumptionAttributeParams.prototype, "peer", void 0);
535
+ exports.CreatePeerConsumptionAttributeParams = CreatePeerConsumptionAttributeParams;
536
+ //# sourceMappingURL=CreatePeerConsumptionAttributeParams.js.map
537
+
538
+ /***/ }),
539
+
540
+ /***/ "./dist/modules/attributes/CreateSharedConsumptionAttributeCopyParams.js":
541
+ /*!*******************************************************************************!*\
542
+ !*** ./dist/modules/attributes/CreateSharedConsumptionAttributeCopyParams.js ***!
543
+ \*******************************************************************************/
544
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
545
+
546
+ "use strict";
547
+
548
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
549
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
550
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
551
+ 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;
552
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
553
+ };
554
+ var __metadata = (this && this.__metadata) || function (k, v) {
555
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
556
+ };
557
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
558
+ exports.CreateSharedConsumptionAttributeCopyParams = void 0;
559
+ const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
560
+ const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
561
+ class CreateSharedConsumptionAttributeCopyParams extends ts_serval_1.Serializable {
562
+ static from(value) {
563
+ return this.fromAny(value);
564
+ }
565
+ }
566
+ __decorate([
567
+ (0, ts_serval_1.serialize)(),
568
+ (0, ts_serval_1.validate)(),
569
+ __metadata("design:type", transport_1.CoreId)
570
+ ], CreateSharedConsumptionAttributeCopyParams.prototype, "attributeId", void 0);
571
+ __decorate([
572
+ (0, ts_serval_1.serialize)(),
573
+ (0, ts_serval_1.validate)(),
574
+ __metadata("design:type", transport_1.CoreAddress)
575
+ ], CreateSharedConsumptionAttributeCopyParams.prototype, "peer", void 0);
576
+ __decorate([
577
+ (0, ts_serval_1.serialize)(),
578
+ (0, ts_serval_1.validate)(),
579
+ __metadata("design:type", transport_1.CoreId)
580
+ ], CreateSharedConsumptionAttributeCopyParams.prototype, "requestReference", void 0);
581
+ exports.CreateSharedConsumptionAttributeCopyParams = CreateSharedConsumptionAttributeCopyParams;
582
+ //# sourceMappingURL=CreateSharedConsumptionAttributeCopyParams.js.map
583
+
584
+ /***/ }),
585
+
586
+ /***/ "./dist/modules/attributes/SuccedConsumptionAttributeParams.js":
587
+ /*!*********************************************************************!*\
588
+ !*** ./dist/modules/attributes/SuccedConsumptionAttributeParams.js ***!
589
+ \*********************************************************************/
590
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
591
+
592
+ "use strict";
593
+
594
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
595
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
596
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
597
+ 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;
598
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
599
+ };
600
+ var __metadata = (this && this.__metadata) || function (k, v) {
601
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
602
+ };
603
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
604
+ exports.SucceedConsumptionAttributeParams = void 0;
605
+ const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
606
+ const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
607
+ const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
608
+ class SucceedConsumptionAttributeParams extends ts_serval_1.Serializable {
609
+ static from(value) {
610
+ return this.fromAny(value);
611
+ }
612
+ }
613
+ __decorate([
614
+ (0, ts_serval_1.serialize)({ unionTypes: [content_1.IdentityAttribute, content_1.RelationshipAttribute] }),
615
+ (0, ts_serval_1.validate)(),
616
+ __metadata("design:type", Object)
617
+ ], SucceedConsumptionAttributeParams.prototype, "successorContent", void 0);
618
+ __decorate([
619
+ (0, ts_serval_1.serialize)(),
620
+ (0, ts_serval_1.validate)(),
621
+ __metadata("design:type", transport_1.CoreId)
622
+ ], SucceedConsumptionAttributeParams.prototype, "succeeds", void 0);
623
+ exports.SucceedConsumptionAttributeParams = SucceedConsumptionAttributeParams;
624
+ //# sourceMappingURL=SuccedConsumptionAttributeParams.js.map
625
+
626
+ /***/ }),
627
+
424
628
  /***/ "./dist/modules/attributes/local/ConsumptionAttribute.js":
425
629
  /*!***************************************************************!*\
426
630
  !*** ./dist/modules/attributes/local/ConsumptionAttribute.js ***!
@@ -445,35 +649,36 @@ const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
445
649
  const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
446
650
  const ts_simple_nameof_1 = __webpack_require__(/*! ts-simple-nameof */ "./node_modules/ts-simple-nameof/index.js");
447
651
  const consumption_1 = __webpack_require__(/*! ../../../consumption */ "./dist/consumption/index.js");
652
+ const ConsumptionAttributeShareInfo_1 = __webpack_require__(/*! ./ConsumptionAttributeShareInfo */ "./dist/modules/attributes/local/ConsumptionAttributeShareInfo.js");
448
653
  let ConsumptionAttribute = class ConsumptionAttribute extends transport_1.CoreSynchronizable {
449
654
  constructor() {
450
655
  super(...arguments);
451
656
  this.technicalProperties = [
452
657
  "@type",
453
658
  "@context",
659
+ (0, ts_simple_nameof_1.nameof)((r) => r.createdAt),
660
+ (0, ts_simple_nameof_1.nameof)((r) => r.succeeds),
454
661
  (0, ts_simple_nameof_1.nameof)((r) => r.createdAt)
455
662
  ];
456
663
  this.userdataProperties = [(0, ts_simple_nameof_1.nameof)((r) => r.content)];
457
- this.metadataProperties = [
458
- (0, ts_simple_nameof_1.nameof)((r) => r.metadata),
459
- (0, ts_simple_nameof_1.nameof)((r) => r.metadataModifiedAt)
460
- ];
461
664
  }
462
665
  static from(value) {
463
666
  return this.fromAny(value);
464
667
  }
465
- static async fromAttribute(attribute) {
668
+ static async fromAttribute(attribute, succeeds, shareInfo) {
466
669
  return this.from({
467
- content: content_1.Attribute.from(attribute),
670
+ content: attribute,
468
671
  id: await consumption_1.ConsumptionIds.attribute.generate(),
469
- createdAt: transport_1.CoreDate.utc()
672
+ createdAt: transport_1.CoreDate.utc(),
673
+ succeeds: succeeds,
674
+ shareInfo: shareInfo
470
675
  });
471
676
  }
472
677
  };
473
678
  __decorate([
474
679
  (0, ts_serval_1.validate)(),
475
- (0, ts_serval_1.serialize)({ type: content_1.Attribute }),
476
- __metadata("design:type", content_1.Attribute)
680
+ (0, ts_serval_1.serialize)({ unionTypes: [content_1.IdentityAttribute, content_1.RelationshipAttribute] }),
681
+ __metadata("design:type", Object)
477
682
  ], ConsumptionAttribute.prototype, "content", void 0);
478
683
  __decorate([
479
684
  (0, ts_serval_1.validate)(),
@@ -482,14 +687,19 @@ __decorate([
482
687
  ], ConsumptionAttribute.prototype, "createdAt", void 0);
483
688
  __decorate([
484
689
  (0, ts_serval_1.validate)({ nullable: true }),
485
- (0, ts_serval_1.serialize)({ any: true }),
486
- __metadata("design:type", Object)
487
- ], ConsumptionAttribute.prototype, "metadata", void 0);
690
+ (0, ts_serval_1.serialize)(),
691
+ __metadata("design:type", transport_1.CoreId)
692
+ ], ConsumptionAttribute.prototype, "succeeds", void 0);
488
693
  __decorate([
489
694
  (0, ts_serval_1.validate)({ nullable: true }),
490
695
  (0, ts_serval_1.serialize)(),
491
- __metadata("design:type", transport_1.CoreDate)
492
- ], ConsumptionAttribute.prototype, "metadataModifiedAt", void 0);
696
+ __metadata("design:type", transport_1.CoreId)
697
+ ], ConsumptionAttribute.prototype, "succeededBy", void 0);
698
+ __decorate([
699
+ (0, ts_serval_1.validate)({ nullable: true }),
700
+ (0, ts_serval_1.serialize)(),
701
+ __metadata("design:type", ConsumptionAttributeShareInfo_1.ConsumptionAttributeShareInfo)
702
+ ], ConsumptionAttribute.prototype, "shareInfo", void 0);
493
703
  ConsumptionAttribute = __decorate([
494
704
  (0, ts_serval_1.type)("ConsumptionAttribute")
495
705
  ], ConsumptionAttribute);
@@ -498,6 +708,52 @@ exports.ConsumptionAttribute = ConsumptionAttribute;
498
708
 
499
709
  /***/ }),
500
710
 
711
+ /***/ "./dist/modules/attributes/local/ConsumptionAttributeShareInfo.js":
712
+ /*!************************************************************************!*\
713
+ !*** ./dist/modules/attributes/local/ConsumptionAttributeShareInfo.js ***!
714
+ \************************************************************************/
715
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
716
+
717
+ "use strict";
718
+
719
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
720
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
721
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
722
+ 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;
723
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
724
+ };
725
+ var __metadata = (this && this.__metadata) || function (k, v) {
726
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
727
+ };
728
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
729
+ exports.ConsumptionAttributeShareInfo = void 0;
730
+ const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
731
+ const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
732
+ class ConsumptionAttributeShareInfo extends transport_1.CoreSerializable {
733
+ static from(value) {
734
+ return super.fromAny(value);
735
+ }
736
+ }
737
+ __decorate([
738
+ (0, ts_serval_1.validate)(),
739
+ (0, ts_serval_1.serialize)(),
740
+ __metadata("design:type", transport_1.CoreId)
741
+ ], ConsumptionAttributeShareInfo.prototype, "requestReference", void 0);
742
+ __decorate([
743
+ (0, ts_serval_1.validate)(),
744
+ (0, ts_serval_1.serialize)(),
745
+ __metadata("design:type", transport_1.CoreAddress)
746
+ ], ConsumptionAttributeShareInfo.prototype, "peer", void 0);
747
+ __decorate([
748
+ (0, ts_serval_1.validate)({ nullable: true }),
749
+ (0, ts_serval_1.serialize)(),
750
+ __metadata("design:type", transport_1.CoreId)
751
+ ], ConsumptionAttributeShareInfo.prototype, "sourceAttribute", void 0);
752
+ exports.ConsumptionAttributeShareInfo = ConsumptionAttributeShareInfo;
753
+ //# sourceMappingURL=ConsumptionAttributeShareInfo.js.map
754
+
755
+ /***/ }),
756
+
501
757
  /***/ "./dist/modules/drafts/DraftsController.js":
502
758
  /*!*************************************************!*\
503
759
  !*** ./dist/modules/drafts/DraftsController.js ***!
@@ -659,7 +915,11 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
659
915
  };
660
916
  Object.defineProperty(exports, "__esModule", ({ value: true }));
661
917
  __exportStar(__webpack_require__(/*! ./attributes/ConsumptionAttributesController */ "./dist/modules/attributes/ConsumptionAttributesController.js"), exports);
918
+ __exportStar(__webpack_require__(/*! ./attributes/CreateConsumptionAttributeParams */ "./dist/modules/attributes/CreateConsumptionAttributeParams.js"), exports);
919
+ __exportStar(__webpack_require__(/*! ./attributes/CreatePeerConsumptionAttributeParams */ "./dist/modules/attributes/CreatePeerConsumptionAttributeParams.js"), exports);
920
+ __exportStar(__webpack_require__(/*! ./attributes/CreateSharedConsumptionAttributeCopyParams */ "./dist/modules/attributes/CreateSharedConsumptionAttributeCopyParams.js"), exports);
662
921
  __exportStar(__webpack_require__(/*! ./attributes/local/ConsumptionAttribute */ "./dist/modules/attributes/local/ConsumptionAttribute.js"), exports);
922
+ __exportStar(__webpack_require__(/*! ./attributes/SuccedConsumptionAttributeParams */ "./dist/modules/attributes/SuccedConsumptionAttributeParams.js"), exports);
663
923
  __exportStar(__webpack_require__(/*! ./drafts/DraftsController */ "./dist/modules/drafts/DraftsController.js"), exports);
664
924
  __exportStar(__webpack_require__(/*! ./drafts/local/Draft */ "./dist/modules/drafts/local/Draft.js"), exports);
665
925
  __exportStar(__webpack_require__(/*! ./requests/incoming/checkPrerequisites/CheckPrerequisitesOfIncomingRequestParameters */ "./dist/modules/requests/incoming/checkPrerequisites/CheckPrerequisitesOfIncomingRequestParameters.js"), exports);
@@ -675,6 +935,8 @@ __exportStar(__webpack_require__(/*! ./requests/incoming/received/ReceivedIncomi
675
935
  __exportStar(__webpack_require__(/*! ./requests/incoming/requireManualDecision/RequireManualDecisionOfIncomingRequestParameters */ "./dist/modules/requests/incoming/requireManualDecision/RequireManualDecisionOfIncomingRequestParameters.js"), exports);
676
936
  __exportStar(__webpack_require__(/*! ./requests/itemProcessors/GenericRequestItemProcessor */ "./dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js"), exports);
677
937
  __exportStar(__webpack_require__(/*! ./requests/itemProcessors/ProcessorConstructor */ "./dist/modules/requests/itemProcessors/ProcessorConstructor.js"), exports);
938
+ __exportStar(__webpack_require__(/*! ./requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters */ "./dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.js"), exports);
939
+ __exportStar(__webpack_require__(/*! ./requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor */ "./dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.js"), exports);
678
940
  __exportStar(__webpack_require__(/*! ./requests/itemProcessors/RequestItemConstructor */ "./dist/modules/requests/itemProcessors/RequestItemConstructor.js"), exports);
679
941
  __exportStar(__webpack_require__(/*! ./requests/itemProcessors/RequestItemProcessorRegistry */ "./dist/modules/requests/itemProcessors/RequestItemProcessorRegistry.js"), exports);
680
942
  __exportStar(__webpack_require__(/*! ./requests/itemProcessors/ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js"), exports);
@@ -896,35 +1158,40 @@ class IncomingRequestsController extends consumption_1.ConsumptionBaseController
896
1158
  throw new Error(validationResult.error.message);
897
1159
  }
898
1160
  this.assertRequestStatus(request, ConsumptionRequestStatus_1.ConsumptionRequestStatus.DecisionRequired, ConsumptionRequestStatus_1.ConsumptionRequestStatus.ManualDecisionRequired);
899
- const itemResults = await this.canDecideItems(params.items, request.content.items);
1161
+ const itemResults = await this.canDecideItems(params.items, request.content.items, request);
900
1162
  return ValidationResult_1.ValidationResult.fromItems(itemResults);
901
1163
  }
902
- async canDecideGroup(params, requestItemGroup) {
903
- const itemResults = await this.canDecideItems(params.items, requestItemGroup.items);
1164
+ async canDecideGroup(params, requestItemGroup, request) {
1165
+ const itemResults = await this.canDecideItems(params.items, requestItemGroup.items, request);
904
1166
  return ValidationResult_1.ValidationResult.fromItems(itemResults);
905
1167
  }
906
- async canDecideItems(params, items) {
1168
+ async canDecideItems(params, items, request) {
907
1169
  const validationResults = [];
908
1170
  for (let i = 0; i < params.length; i++) {
909
1171
  const decideItemParams = params[i];
910
1172
  const requestItem = items[i];
911
1173
  if (requestItem instanceof content_1.RequestItemGroup) {
912
- const groupResult = await this.canDecideGroup(decideItemParams, requestItem);
1174
+ const groupResult = await this.canDecideGroup(decideItemParams, requestItem, request);
913
1175
  validationResults.push(groupResult);
914
1176
  }
915
1177
  else {
916
- const itemResult = await this.canDecideItem(decideItemParams, requestItem);
1178
+ const itemResult = await this.canDecideItem(decideItemParams, requestItem, request);
917
1179
  validationResults.push(itemResult);
918
1180
  }
919
1181
  }
920
1182
  return validationResults;
921
1183
  }
922
- async canDecideItem(params, requestItem) {
1184
+ async canDecideItem(params, requestItem, request) {
923
1185
  const processor = this.processorRegistry.getProcessorForItem(requestItem);
924
- if (params.accept) {
925
- return await processor.canAccept(requestItem, params);
1186
+ try {
1187
+ if (params.accept) {
1188
+ return await processor.canAccept(requestItem, params, request);
1189
+ }
1190
+ return await processor.canReject(requestItem, params, request);
1191
+ }
1192
+ catch (e) {
1193
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.unexpectedErrorDuringRequestItemProcessing(e));
926
1194
  }
927
- return await processor.canReject(requestItem, params);
928
1195
  }
929
1196
  async accept(params) {
930
1197
  const canAccept = await this.canAccept(params);
@@ -951,7 +1218,7 @@ class IncomingRequestsController extends consumption_1.ConsumptionBaseController
951
1218
  }
952
1219
  async createConsumptionResponse(params, request) {
953
1220
  const requestItems = request.content.items;
954
- const responseItems = await this.decideItems(params.items, requestItems);
1221
+ const responseItems = await this.decideItems(params.items, requestItems, request);
955
1222
  const response = content_1.Response.from({
956
1223
  result: params.accept ? content_1.ResponseResult.Accepted : content_1.ResponseResult.Rejected,
957
1224
  requestId: request.id,
@@ -963,35 +1230,35 @@ class IncomingRequestsController extends consumption_1.ConsumptionBaseController
963
1230
  });
964
1231
  return consumptionResponse;
965
1232
  }
966
- async decideGroup(groupItemParam, requestItemGroup) {
967
- const items = (await this.decideItems(groupItemParam.items, requestItemGroup.items));
1233
+ async decideGroup(groupItemParam, requestItemGroup, request) {
1234
+ const items = (await this.decideItems(groupItemParam.items, requestItemGroup.items, request));
968
1235
  const group = content_1.ResponseItemGroup.from({
969
1236
  items: items,
970
1237
  metadata: requestItemGroup.responseMetadata
971
1238
  });
972
1239
  return group;
973
1240
  }
974
- async decideItems(params, requestItems) {
1241
+ async decideItems(params, requestItems, request) {
975
1242
  const responseItems = [];
976
1243
  for (let i = 0; i < params.length; i++) {
977
1244
  const itemParam = params[i];
978
1245
  const item = requestItems[i];
979
1246
  if (item instanceof content_1.RequestItemGroup) {
980
- responseItems.push(await this.decideGroup(itemParam, item));
1247
+ responseItems.push(await this.decideGroup(itemParam, item, request));
981
1248
  }
982
1249
  else {
983
- responseItems.push(await this.decideItem(itemParam, requestItems[i]));
1250
+ responseItems.push(await this.decideItem(itemParam, requestItems[i], request));
984
1251
  }
985
1252
  }
986
1253
  return responseItems;
987
1254
  }
988
- async decideItem(params, requestItem) {
1255
+ async decideItem(params, requestItem, request) {
989
1256
  const processor = this.processorRegistry.getProcessorForItem(requestItem);
990
1257
  try {
991
1258
  if (params.accept) {
992
- return await processor.accept(requestItem, params);
1259
+ return await processor.accept(requestItem, params, request);
993
1260
  }
994
- return await processor.reject(requestItem, params);
1261
+ return await processor.reject(requestItem, params, request);
995
1262
  }
996
1263
  catch (e) {
997
1264
  let details = "";
@@ -1348,6 +1615,26 @@ exports.RequireManualDecisionOfIncomingRequestParameters = RequireManualDecision
1348
1615
 
1349
1616
  /***/ }),
1350
1617
 
1618
+ /***/ "./dist/modules/requests/itemProcessors/AbstractRequestItemProcessor.js":
1619
+ /*!******************************************************************************!*\
1620
+ !*** ./dist/modules/requests/itemProcessors/AbstractRequestItemProcessor.js ***!
1621
+ \******************************************************************************/
1622
+ /***/ ((__unused_webpack_module, exports) => {
1623
+
1624
+ "use strict";
1625
+
1626
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
1627
+ exports.AbstractRequestItemProcessor = void 0;
1628
+ class AbstractRequestItemProcessor {
1629
+ constructor(consumptionController) {
1630
+ this.consumptionController = consumptionController;
1631
+ }
1632
+ }
1633
+ exports.AbstractRequestItemProcessor = AbstractRequestItemProcessor;
1634
+ //# sourceMappingURL=AbstractRequestItemProcessor.js.map
1635
+
1636
+ /***/ }),
1637
+
1351
1638
  /***/ "./dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js":
1352
1639
  /*!*****************************************************************************!*\
1353
1640
  !*** ./dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js ***!
@@ -1358,37 +1645,39 @@ exports.RequireManualDecisionOfIncomingRequestParameters = RequireManualDecision
1358
1645
 
1359
1646
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1360
1647
  exports.GenericRequestItemProcessor = void 0;
1648
+ /* eslint-disable @typescript-eslint/no-unused-vars */
1361
1649
  const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
1650
+ const AbstractRequestItemProcessor_1 = __webpack_require__(/*! ./AbstractRequestItemProcessor */ "./dist/modules/requests/itemProcessors/AbstractRequestItemProcessor.js");
1362
1651
  const ValidationResult_1 = __webpack_require__(/*! ./ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
1363
- class GenericRequestItemProcessor {
1652
+ class GenericRequestItemProcessor extends AbstractRequestItemProcessor_1.AbstractRequestItemProcessor {
1364
1653
  checkPrerequisitesOfIncomingRequestItem(_requestItem) {
1365
1654
  return true;
1366
1655
  }
1367
- canAccept(_requestItem, _params) {
1656
+ canAccept(requestItem, params, request) {
1368
1657
  return ValidationResult_1.ValidationResult.success();
1369
1658
  }
1370
- canReject(_requestItem, _params) {
1659
+ canReject(requestItem, params, request) {
1371
1660
  return ValidationResult_1.ValidationResult.success();
1372
1661
  }
1373
- accept(requestItem, _params) {
1662
+ accept(requestItem, params, request) {
1374
1663
  return content_1.AcceptResponseItem.from({
1375
1664
  result: content_1.ResponseItemResult.Accepted,
1376
1665
  metadata: requestItem.responseMetadata
1377
1666
  });
1378
1667
  }
1379
- reject(requestItem, _params) {
1668
+ reject(requestItem, params, request) {
1380
1669
  return content_1.RejectResponseItem.from({
1381
1670
  result: content_1.ResponseItemResult.Rejected,
1382
1671
  metadata: requestItem.responseMetadata
1383
1672
  });
1384
1673
  }
1385
- canApplyIncomingResponseItem(_responseItem, _requestItem) {
1674
+ canCreateOutgoingRequestItem(requestItem) {
1386
1675
  return ValidationResult_1.ValidationResult.success();
1387
1676
  }
1388
- canCreateOutgoingRequestItem(_requestItem) {
1677
+ canApplyIncomingResponseItem(responseItem, requestItem, request) {
1389
1678
  return ValidationResult_1.ValidationResult.success();
1390
1679
  }
1391
- applyIncomingResponseItem(_responseItem, _requestItem) {
1680
+ applyIncomingResponseItem(responseItem, requestItem, request) {
1392
1681
  // do nothing
1393
1682
  }
1394
1683
  }
@@ -1434,7 +1723,8 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
1434
1723
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1435
1724
  exports.RequestItemProcessorRegistry = void 0;
1436
1725
  class RequestItemProcessorRegistry {
1437
- constructor(processors = []) {
1726
+ constructor(consumptionController, processors = []) {
1727
+ this.consumptionController = consumptionController;
1438
1728
  this.registry = {};
1439
1729
  for (const { itemConstructor, processorConstructor } of processors) {
1440
1730
  this.registerProcessor(processorConstructor, itemConstructor);
@@ -1454,7 +1744,7 @@ class RequestItemProcessorRegistry {
1454
1744
  if (!constructor) {
1455
1745
  throw new Error(`There was no processor registered for '${item.constructor.name}'.`);
1456
1746
  }
1457
- return new constructor();
1747
+ return new constructor(this.consumptionController);
1458
1748
  }
1459
1749
  }
1460
1750
  exports.RequestItemProcessorRegistry = RequestItemProcessorRegistry;
@@ -1466,12 +1756,13 @@ exports.RequestItemProcessorRegistry = RequestItemProcessorRegistry;
1466
1756
  /*!******************************************************************!*\
1467
1757
  !*** ./dist/modules/requests/itemProcessors/ValidationResult.js ***!
1468
1758
  \******************************************************************/
1469
- /***/ ((__unused_webpack_module, exports) => {
1759
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1470
1760
 
1471
1761
  "use strict";
1472
1762
 
1473
1763
  Object.defineProperty(exports, "__esModule", ({ value: true }));
1474
1764
  exports.ErrorValidationResult = exports.SuccessfulValidatonResult = exports.ValidationResult = void 0;
1765
+ const ts_utils_1 = __webpack_require__(/*! @js-soft/ts-utils */ "./node_modules/@js-soft/ts-utils/dist/index.js");
1475
1766
  class ValidationResult {
1476
1767
  constructor(items) {
1477
1768
  this.items = items;
@@ -1485,12 +1776,12 @@ class ValidationResult {
1485
1776
  static success(items = []) {
1486
1777
  return new SuccessfulValidatonResult(items);
1487
1778
  }
1488
- static error(code, message, items = []) {
1489
- return new ErrorValidationResult(code, message, items);
1779
+ static error(error, items = []) {
1780
+ return new ErrorValidationResult(error, items);
1490
1781
  }
1491
1782
  static fromItems(items) {
1492
1783
  return items.some((r) => r.isError())
1493
- ? ValidationResult.error("inheritedFromItem", "Some child items have errors.", items)
1784
+ ? ValidationResult.error(new ts_utils_1.ApplicationError("inheritedFromItem", "Some child items have errors."), items)
1494
1785
  : ValidationResult.success(items);
1495
1786
  }
1496
1787
  }
@@ -1502,10 +1793,9 @@ class SuccessfulValidatonResult extends ValidationResult {
1502
1793
  }
1503
1794
  exports.SuccessfulValidatonResult = SuccessfulValidatonResult;
1504
1795
  class ErrorValidationResult extends ValidationResult {
1505
- constructor(code, message, items) {
1796
+ constructor(error, items) {
1506
1797
  super(items);
1507
- this.code = code;
1508
- this.message = message;
1798
+ this.error = error;
1509
1799
  }
1510
1800
  }
1511
1801
  exports.ErrorValidationResult = ErrorValidationResult;
@@ -1513,6 +1803,103 @@ exports.ErrorValidationResult = ErrorValidationResult;
1513
1803
 
1514
1804
  /***/ }),
1515
1805
 
1806
+ /***/ "./dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.js":
1807
+ /*!********************************************************************************************************!*\
1808
+ !*** ./dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.js ***!
1809
+ \********************************************************************************************************/
1810
+ /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
1811
+
1812
+ "use strict";
1813
+
1814
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
1815
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1816
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1817
+ 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;
1818
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1819
+ };
1820
+ var __metadata = (this && this.__metadata) || function (k, v) {
1821
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
1822
+ };
1823
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
1824
+ exports.AcceptReadAttributeRequestItemParameters = void 0;
1825
+ const ts_serval_1 = __webpack_require__(/*! @js-soft/ts-serval */ "@js-soft/ts-serval");
1826
+ const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
1827
+ let AcceptReadAttributeRequestItemParameters = class AcceptReadAttributeRequestItemParameters extends ts_serval_1.Serializable {
1828
+ static from(value) {
1829
+ return this.fromAny(value);
1830
+ }
1831
+ };
1832
+ __decorate([
1833
+ (0, ts_serval_1.serialize)(),
1834
+ (0, ts_serval_1.validate)(),
1835
+ __metadata("design:type", transport_1.CoreId)
1836
+ ], AcceptReadAttributeRequestItemParameters.prototype, "attributeId", void 0);
1837
+ AcceptReadAttributeRequestItemParameters = __decorate([
1838
+ (0, ts_serval_1.type)("AcceptReadAttributeRequestItemParameters")
1839
+ ], AcceptReadAttributeRequestItemParameters);
1840
+ exports.AcceptReadAttributeRequestItemParameters = AcceptReadAttributeRequestItemParameters;
1841
+ //# sourceMappingURL=AcceptReadAttributeRequestItemParameters.js.map
1842
+
1843
+ /***/ }),
1844
+
1845
+ /***/ "./dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.js":
1846
+ /*!*************************************************************************************************!*\
1847
+ !*** ./dist/modules/requests/itemProcessors/readAttribute/ReadAttributeRequestItemProcessor.js ***!
1848
+ \*************************************************************************************************/
1849
+ /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1850
+
1851
+ "use strict";
1852
+
1853
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
1854
+ exports.ReadAttributeRequestItemProcessor = void 0;
1855
+ const content_1 = __webpack_require__(/*! @nmshd/content */ "@nmshd/content");
1856
+ const transport_1 = __webpack_require__(/*! @nmshd/transport */ "@nmshd/transport");
1857
+ const consumption_1 = __webpack_require__(/*! ../../../../consumption */ "./dist/consumption/index.js");
1858
+ const ConsumptionAttribute_1 = __webpack_require__(/*! ../../../attributes/local/ConsumptionAttribute */ "./dist/modules/attributes/local/ConsumptionAttribute.js");
1859
+ const GenericRequestItemProcessor_1 = __webpack_require__(/*! ../GenericRequestItemProcessor */ "./dist/modules/requests/itemProcessors/GenericRequestItemProcessor.js");
1860
+ const ValidationResult_1 = __webpack_require__(/*! ../ValidationResult */ "./dist/modules/requests/itemProcessors/ValidationResult.js");
1861
+ const AcceptReadAttributeRequestItemParameters_1 = __webpack_require__(/*! ./AcceptReadAttributeRequestItemParameters */ "./dist/modules/requests/itemProcessors/readAttribute/AcceptReadAttributeRequestItemParameters.js");
1862
+ class ReadAttributeRequestItemProcessor extends GenericRequestItemProcessor_1.GenericRequestItemProcessor {
1863
+ async canAccept(_requestItem, params, request) {
1864
+ const parsedParams = AcceptReadAttributeRequestItemParameters_1.AcceptReadAttributeRequestItemParameters.from(params);
1865
+ const attribute = await this.consumptionController.attributes.getConsumptionAttribute(parsedParams.attributeId);
1866
+ if (!attribute) {
1867
+ return ValidationResult_1.ValidationResult.error(transport_1.TransportErrors.general.recordNotFound(ConsumptionAttribute_1.ConsumptionAttribute, request.id.toString()));
1868
+ }
1869
+ if (!this.consumptionController.accountController.identity.isMe(attribute.content.owner)) {
1870
+ return ValidationResult_1.ValidationResult.error(consumption_1.ConsumptionErrors.requests.canOnlyShareOwnAttributes());
1871
+ }
1872
+ return ValidationResult_1.ValidationResult.success();
1873
+ }
1874
+ async accept(_requestItem, params, request) {
1875
+ const consumptionAttribute = await this.consumptionController.attributes.createSharedConsumptionAttributeCopy({
1876
+ attributeId: transport_1.CoreId.from(params.attributeId),
1877
+ peer: transport_1.CoreAddress.from(request.peer),
1878
+ requestReference: transport_1.CoreId.from(request.id)
1879
+ });
1880
+ return content_1.ReadAttributeAcceptResponseItem.from({
1881
+ result: content_1.ResponseItemResult.Accepted,
1882
+ attributeId: consumptionAttribute.id,
1883
+ attribute: consumptionAttribute.content
1884
+ });
1885
+ }
1886
+ async applyIncomingResponseItem(responseItem, _requestItem, request) {
1887
+ if (!(responseItem instanceof content_1.ReadAttributeAcceptResponseItem)) {
1888
+ return;
1889
+ }
1890
+ await this.consumptionController.attributes.createPeerConsumptionAttribute({
1891
+ id: responseItem.attributeId,
1892
+ content: responseItem.attribute,
1893
+ peer: request.peer,
1894
+ requestReference: request.id
1895
+ });
1896
+ }
1897
+ }
1898
+ exports.ReadAttributeRequestItemProcessor = ReadAttributeRequestItemProcessor;
1899
+ //# sourceMappingURL=ReadAttributeRequestItemProcessor.js.map
1900
+
1901
+ /***/ }),
1902
+
1516
1903
  /***/ "./dist/modules/requests/local/ConsumptionRequest.js":
1517
1904
  /*!***********************************************************!*\
1518
1905
  !*** ./dist/modules/requests/local/ConsumptionRequest.js ***!
@@ -1851,7 +2238,7 @@ class OutgoingRequestsController extends consumption_1.ConsumptionBaseController
1851
2238
  peer
1852
2239
  });
1853
2240
  if (canCreateResult.isError()) {
1854
- throw new Error(canCreateResult.message);
2241
+ throw canCreateResult.error;
1855
2242
  }
1856
2243
  const consumptionRequest = ConsumptionRequest_1.ConsumptionRequest.from({
1857
2244
  id: id,
@@ -1923,9 +2310,9 @@ class OutgoingRequestsController extends consumption_1.ConsumptionBaseController
1923
2310
  this.assertRequestStatus(request, ConsumptionRequestStatus_1.ConsumptionRequestStatus.Open);
1924
2311
  const canComplete = await this.canComplete(request, receivedResponse);
1925
2312
  if (canComplete.isError()) {
1926
- throw new Error(canComplete.message);
2313
+ throw canComplete.error;
1927
2314
  }
1928
- await this.applyItems(request.content.items, receivedResponse.items);
2315
+ await this.applyItems(request.content.items, receivedResponse.items, request);
1929
2316
  let responseSource;
1930
2317
  if (responseSourceObject instanceof transport_1.Message) {
1931
2318
  responseSource = "Message";
@@ -1952,7 +2339,7 @@ class OutgoingRequestsController extends consumption_1.ConsumptionBaseController
1952
2339
  if (requestItem instanceof content_1.RequestItem) {
1953
2340
  const responseItem = receivedResponse.items[i];
1954
2341
  const processor = this.processorRegistry.getProcessorForItem(requestItem);
1955
- const canApplyItem = await processor.canApplyIncomingResponseItem(responseItem, requestItem);
2342
+ const canApplyItem = await processor.canApplyIncomingResponseItem(responseItem, requestItem, request);
1956
2343
  if (canApplyItem.isError()) {
1957
2344
  return canApplyItem;
1958
2345
  }
@@ -1963,7 +2350,7 @@ class OutgoingRequestsController extends consumption_1.ConsumptionBaseController
1963
2350
  const groupRequestItem = requestItem.items[j];
1964
2351
  const groupResponseItem = responseGroup.items[j];
1965
2352
  const processor = this.processorRegistry.getProcessorForItem(groupRequestItem);
1966
- const canApplyItem = await processor.canApplyIncomingResponseItem(groupResponseItem, groupRequestItem);
2353
+ const canApplyItem = await processor.canApplyIncomingResponseItem(groupResponseItem, groupRequestItem, request);
1967
2354
  if (canApplyItem.isError()) {
1968
2355
  return canApplyItem;
1969
2356
  }
@@ -1972,22 +2359,22 @@ class OutgoingRequestsController extends consumption_1.ConsumptionBaseController
1972
2359
  }
1973
2360
  return ValidationResult_1.ValidationResult.success();
1974
2361
  }
1975
- async applyItems(requestItems, responseItems) {
2362
+ async applyItems(requestItems, responseItems, request) {
1976
2363
  for (let i = 0; i < responseItems.length; i++) {
1977
2364
  const requestItem = requestItems[i];
1978
2365
  if (requestItem instanceof content_1.RequestItem) {
1979
2366
  const responseItem = responseItems[i];
1980
- await this.applyItem(requestItem, responseItem);
2367
+ await this.applyItem(requestItem, responseItem, request);
1981
2368
  }
1982
2369
  else {
1983
2370
  const responseItemGroup = responseItems[i];
1984
- await this.applyItems(requestItem.items, responseItemGroup.items);
2371
+ await this.applyItems(requestItem.items, responseItemGroup.items, request);
1985
2372
  }
1986
2373
  }
1987
2374
  }
1988
- async applyItem(requestItem, responseItem) {
2375
+ async applyItem(requestItem, responseItem, request) {
1989
2376
  const processor = this.processorRegistry.getProcessorForItem(requestItem);
1990
- await processor.applyIncomingResponseItem(responseItem, requestItem);
2377
+ await processor.applyIncomingResponseItem(responseItem, requestItem, request);
1991
2378
  }
1992
2379
  async getOutgoingRequests(query) {
1993
2380
  query ??= {};