@twin.org/dataspace-control-plane-service 0.0.3-next.21 → 0.0.3-next.22

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.
@@ -10,11 +10,6 @@ import { TrustHelper } from "@twin.org/trust-models";
10
10
  import { DataspaceControlPlanePolicyRequester } from "./dataspaceControlPlanePolicyRequester.js";
11
11
  import { getJsonLdId, getJsonLdType } from "./utils/dataHelpers.js";
12
12
  import { isCatalogError, isCatalogErrorName, transformToTransferError } from "./utils/transferErrorUtils.js";
13
- /**
14
- * Stalled negotiation threshold in milliseconds (30 minutes).
15
- * Negotiations that haven't received a state update within this time are considered stalled.
16
- */
17
- const STALLED_NEGOTIATION_THRESHOLD_MS = 30 * 60 * 1000;
18
13
  /**
19
14
  * Dataspace Control Plane Service implementation.
20
15
  *
@@ -33,6 +28,12 @@ export class DataspaceControlPlaneService {
33
28
  * @internal
34
29
  */
35
30
  static _REQUESTER_TYPE = "dataspace-control-plane-requester";
31
+ /**
32
+ * Stalled negotiation threshold in milliseconds (30 minutes).
33
+ * Negotiations that haven't received a state update within this time are considered stalled.
34
+ * @internal
35
+ */
36
+ static _STALLED_NEGOTIATION_THRESHOLD_MS = 30 * 60 * 1000;
36
37
  /**
37
38
  * The logging component.
38
39
  * @internal
@@ -1126,7 +1127,7 @@ export class DataspaceControlPlaneService {
1126
1127
  const now = Date.now();
1127
1128
  const stalled = [];
1128
1129
  for (const [negotiationId, state] of this._policyRequester.getActiveNegotiations()) {
1129
- if (now - state.updatedAt > STALLED_NEGOTIATION_THRESHOLD_MS) {
1130
+ if (now - state.updatedAt > DataspaceControlPlaneService._STALLED_NEGOTIATION_THRESHOLD_MS) {
1130
1131
  stalled.push(negotiationId);
1131
1132
  }
1132
1133
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dataspaceControlPlaneService.js","sourceRoot":"","sources":["../../src/dataspaceControlPlaneService.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EACN,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,MAAM,EACN,EAAE,EACF,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,YAAY,EAAkC,MAAM,wBAAwB,CAAC;AACtF,OAAO,EACN,mBAAmB,EACnB,mBAAmB,EAQnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACN,6BAA6B,EAE7B,MAAM,iCAAiC,CAAC;AAIzC,OAAO,EACN,gBAAgB,EAChB,sBAAsB,EAItB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACN,yBAAyB,EACzB,yCAAyC,EACzC,6BAA6B,EAC7B,uBAAuB,EACvB,yCAAyC,EACzC,qCAAqC,EAcrC,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAwB,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,oCAAoC,EAAE,MAAM,2CAA2C,CAAC;AAEjG,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EACN,cAAc,EACd,kBAAkB,EAClB,wBAAwB,EACxB,MAAM,+BAA+B,CAAC;AAEvC;;;GAGG;AACH,MAAM,gCAAgC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,OAAO,4BAA4B;IAGxC;;OAEG;IACI,MAAM,CAAU,UAAU,kCAAkD;IAEnF;;;;OAIG;IACK,MAAM,CAAU,eAAe,GAAG,mCAAmC,CAAC;IAE9E;;;OAGG;IACc,iBAAiB,CAAqB;IAEvD;;;OAGG;IACc,mCAAmC,CAAsC;IAE1F;;;;;OAKG;IACc,gCAAgC,CAAmC;IAEpF;;;;OAIG;IACc,qCAAqC,CAAyC;IAE/F;;;;OAIG;IACc,4BAA4B,CAA+B;IAE5E;;;;OAIG;IACc,uBAAuB,CAA2C;IAEnF;;;OAGG;IACc,eAAe,CAAkB;IAElD;;;OAGG;IACc,2BAA2B,CAAU;IAEtD;;;;;OAKG;IACc,cAAc,CAAU;IAEzC;;;OAGG;IACc,gBAAgB,CAAuC;IAExE;;;OAGG;IACc,cAAc,CAA2B;IAE1D;;;OAGG;IACc,qBAAqB,CAAoC;IAE1E;;;OAGG;IACH,YAAY,OAAyD;QACpE,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,WAAW,CACpD,OAAO,EAAE,oBAAoB,IAAI,SAAS,CAC1C,CAAC;QAEF,sCAAsC;QACtC,IAAI,CAAC,mCAAmC;YACvC,gBAAgB,CAAC,GAAG,CACnB,OAAO,EAAE,sCAAsC,IAAI,6BAA6B,CAChF,CAAC;QAEH,sCAAsC;QACtC,IAAI,CAAC,gCAAgC,GAAG,gBAAgB,CAAC,GAAG,CAC3D,OAAO,EAAE,mCAAmC,IAAI,0BAA0B,CAC1E,CAAC;QAEF,6DAA6D;QAC7D,IAAI,CAAC,qCAAqC;YACzC,gBAAgB,CAAC,WAAW,CAC3B,OAAO,EAAE,wCAAwC,IAAI,gCAAgC,CACrF,CAAC;QAEH,sDAAsD;QACtD,IAAI,CAAC,4BAA4B,GAAG,gBAAgB,CAAC,GAAG,CACvD,OAAO,EAAE,+BAA+B,IAAI,qBAAqB,CACjE,CAAC;QAEF,IAAI,CAAC,uBAAuB,GAAG,6BAA6B,CAAC,GAAG,CAE9D,OAAO,EAAE,gCAAgC,sBAAsC,CAAC,CAAC;QAEnF,IAAI,CAAC,eAAe,GAAG,gBAAgB,CAAC,GAAG,CAC1C,OAAO,EAAE,kBAAkB,IAAI,OAAO,CACtC,CAAC;QAEF,IAAI,CAAC,2BAA2B,GAAG,OAAO,EAAE,MAAM,EAAE,0BAA0B,CAAC;QAE/E,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC;YACnE,CAAC,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;YAC/D,CAAC,CAAC,SAAS,CAAC;QAEb,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC,WAAW,CACjD,OAAO,EAAE,0BAA0B,IAAI,gBAAgB,CACvD,CAAC;QAEF,IAAI,CAAC,qBAAqB,GAAG,IAAI,GAAG,EAAE,CAAC;QAEvC,MAAM,gBAAgB,GAAyB;YAC9C,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACpD,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC9D,IAAI,CAAC;wBACJ,MAAM,EAAE,CAAC,cAAc,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;oBACrD,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBAChB,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;4BACjC,KAAK,EAAE,OAAO;4BACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;4BAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;4BACd,OAAO,EAAE,0BAA0B;4BACnC,IAAI,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE;yBAC7D,CAAC,CAAC;oBACJ,CAAC;gBACF,CAAC;YACF,CAAC;YACD,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,EAAE;gBACjD,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC9D,IAAI,CAAC;wBACJ,MAAM,EAAE,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;oBAClD,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBAChB,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;4BACjC,KAAK,EAAE,OAAO;4BACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;4BAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;4BACd,OAAO,EAAE,0BAA0B;4BACnC,IAAI,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE;yBAC1D,CAAC,CAAC;oBACJ,CAAC;gBACF,CAAC;YACF,CAAC;YACD,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE;gBACzC,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC9D,IAAI,CAAC;wBACJ,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;oBAC1C,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBAChB,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;4BACjC,KAAK,EAAE,OAAO;4BACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;4BAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;4BACd,OAAO,EAAE,0BAA0B;4BACnC,IAAI,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE;yBACvD,CAAC,CAAC;oBACJ,CAAC;gBACF,CAAC;YACF,CAAC;SACD,CAAC;QAEF,IAAI,CAAC,gBAAgB,GAAG,IAAI,oCAAoC,CAC/D,OAAO,EAAE,oBAAoB,IAAI,SAAS,EAC1C,gBAAgB,CAChB,CAAC;QAEF,sBAAsB,CAAC,QAAQ,CAC9B,4BAA4B,CAAC,eAAe,EAC5C,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAC3B,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,SAAS;QACf,OAAO,4BAA4B,CAAC,UAAU,CAAC;IAChD,CAAC;IAED;;;;;OAKG;IACI,2BAA2B,CAAC,GAAW,EAAE,QAA8B;QAC7E,MAAM,CAAC,WAAW,CAAC,4BAA4B,CAAC,UAAU,SAAe,GAAG,CAAC,CAAC;QAC9E,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACI,6BAA6B,CAAC,GAAW;QAC/C,MAAM,CAAC,WAAW,CAAC,4BAA4B,CAAC,UAAU,SAAe,GAAG,CAAC,CAAC;QAC9E,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,KAAK,CAAC,wBAAiC;QACnD,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACvD,0DAA0D;QAC1D,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1C,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBACjC,KAAK,EAAE,OAAO;gBACd,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;gBAC/C,OAAO,EAAE,kBAAkB;aAC3B,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QAED,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACjC,KAAK,EAAE,MAAM;YACb,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;YAC/C,OAAO,EAAE,8BAA8B;SACvC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,EAAE,CAAC;QAE7C,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACjC,KAAK,EAAE,OAAO;YACd,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;YAC/C,OAAO,EAAE,gBAAgB;YACzB,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;SAChD,CAAC,CAAC;QAEH,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,8CAA8C;QAC9C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC;gBACJ,MAAM,GAAG,GAAG,mBAAmB,CAAC,GAAG,CAAgB,OAAO,CAAC,CAAC;gBAC5D,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,eAAe,EAAE,CAAC;gBAE7C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAChC,IAAI,CAAC;wBACJ,6DAA6D;wBAC7D,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;wBAEjE,oCAAoC;wBACpC,MAAM,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAC1C,oBAA+C,CAC/C,CAAC;wBAEF,eAAe,EAAE,CAAC;wBAElB,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;4BACjC,KAAK,EAAE,OAAO;4BACd,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;4BACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;4BAC/C,OAAO,EAAE,mBAAmB;4BAC5B,IAAI,EAAE;gCACL,SAAS,EAAE,WAAW,CAAC,oBAAoB,CAAC,IAAI,EAAE;gCAClD,OAAO;6BACP;yBACD,CAAC,CAAC;oBACJ,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBAChB,UAAU,EAAE,CAAC;wBACb,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;4BACjC,KAAK,EAAE,OAAO;4BACd,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;4BACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;4BAC/C,OAAO,EAAE,2BAA2B;4BACpC,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;4BACjC,IAAI,EAAE;gCACL,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE;gCACrC,OAAO;6BACP;yBACD,CAAC,CAAC;oBACJ,CAAC;gBACF,CAAC;YACF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;oBACjC,KAAK,EAAE,OAAO;oBACd,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;oBACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;oBAC/C,OAAO,EAAE,4BAA4B;oBACrC,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;oBACjC,IAAI,EAAE,EAAE,OAAO,EAAE;iBACjB,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAED,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACjC,KAAK,EAAE,MAAM;YACb,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;YAC/C,OAAO,EAAE,6BAA6B;YACtC,IAAI,EAAE;gBACL,eAAe;gBACf,UAAU;gBACV,SAAS,EAAE,QAAQ,CAAC,MAAM;aAC1B;SACD,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAChC,mCAAmC,EACnC;gBACC;oBACC,eAAe,EAAE,IAAI,CAAC,GAAG,EAAE;oBAC3B,eAAe,EAAE,CAAC;iBAClB;aACD,EACD,KAAK,IAAI,EAAE;gBACV,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACzC,CAAC,CACD,CAAC;QACH,CAAC;IACF,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,IAAI,CAAC,wBAAiC;QAClD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,mCAAmC,CAAC,CAAC;QAC3E,CAAC;IACF,CAAC;IAED,+EAA+E;IAC/E,2BAA2B;IAC3B,+EAA+E;IAE/E;;;;;;;;;OASG;IACI,KAAK,CAAC,eAAe,CAC3B,OAAiD,EACjD,YAAqB;QAErB,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,WAAW,CAC9C,IAAI,CAAC,eAAe,EACpB,YAAY,EACZ,iBAAiB,CACjB,CAAC;QAEF,MAAM,kBAAkB,GAAG,MAAM,uBAAuB,CAAC,QAAQ,CAChE,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAClC,CAAC;QAEF,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBACjC,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;gBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,wBAAwB;gBACjC,IAAI,EAAE,EAAE,kBAAkB,EAAE;aAC5B,CAAC,CAAC;YAEH,OAAO,wBAAwB,CAC9B,IAAI,eAAe,CAClB,4BAA4B,CAAC,UAAU,aAEvC,kBAAkB,CAClB,EACD,OAAO,CACP,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,YAAY,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC;QAEhE,IAAI,SAAiB,CAAC;QACtB,IAAI,gBAAwB,CAAC;QAC7B,IAAI,gBAAwB,CAAC;QAC7B,IAAI,QAAQ,GAA+B,EAAE,CAAC;QAE9C,IAAI,CAAC;YACJ,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAElE,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;oBACjC,KAAK,EAAE,OAAO;oBACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;oBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;oBACd,OAAO,EAAE,mBAAmB;oBAC5B,IAAI,EAAE;wBACL,WAAW,EAAE,OAAO,CAAC,WAAW;wBAChC,IAAI,EAAE,2FAA2F;qBACjG;iBACD,CAAC,CAAC;gBAEH,MAAM,IAAI,aAAa,CACtB,4BAA4B,CAAC,UAAU,EACvC,mBAAmB,EACnB,OAAO,CAAC,WAAW,EACnB;oBACC,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,IAAI,EAAE,2DAA2D;iBACjE,CACD,CAAC;YACH,CAAC;YAED,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;YAC7E,MAAM,WAAW,GAAG,WAAW,CAAC,iBAAiB,CAAS,gBAAgB,CAAC,CAAC;YAE5E,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,iBAAiB,CAC1B,4BAA4B,CAAC,UAAU,EACvC,iCAAiC,CACjC,CAAC;YACH,CAAC;YACD,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CAAC;YAEtC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;YAC7E,MAAM,WAAW,GAAG,WAAW,CAAC,iBAAiB,CAAS,gBAAgB,CAAC,CAAC;YAC5E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,YAAY,CACrB,4BAA4B,CAAC,UAAU,EACvC,+BAA+B,CAC/B,CAAC;YACH,CAAC;YACD,gBAAgB,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YAElC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAE7C,MAAM,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAExD,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,wBAAwB,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,MAAM,aAAa,GAAoB;YACtC,EAAE,EAAE,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YACnD,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW;YACX,KAAK,EAAE,yCAAyC,CAAC,SAAS;YAC1D,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,SAAS;YACT,gBAAgB;YAChB,gBAAgB;YAChB,yDAAyD;YACzD,yFAAyF;YACzF,OAAO,EAAE,OAAO,CAAC,WAAW;YAC5B,QAAQ;YACR,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE;YAC9B,YAAY,EAAE,GAAG,CAAC,WAAW,EAAE;SAC/B,CAAC;QAEF,MAAM,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAqB,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAE1E,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACjC,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;YAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,OAAO,EAAE,0BAA0B;YACnC,IAAI,EAAE;gBACL,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,WAAW;gBACX,WAAW,EAAE,OAAO,CAAC,WAAW;aAChC;SACD,CAAC,CAAC;QAEH,OAAO;YACN,UAAU,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC;YAC/C,OAAO,EAAE,qCAAqC,CAAC,eAAe;YAC9D,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;SACnB,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,2BAA2B;IAC3B,+EAA+E;IAE/E;;;;;;;;;OASG;IACI,KAAK,CAAC,aAAa,CACzB,OAA+C,EAC/C,YAAoB,EACpB,YAAqB;QAErB,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,WAAW,CAC9C,IAAI,CAAC,eAAe,EACpB,YAAY,EACZ,eAAe,CACf,CAAC;QAEF,MAAM,kBAAkB,GAAG,MAAM,uBAAuB,CAAC,QAAQ,CAChE,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAClC,CAAC;QAEF,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBACjC,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;gBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,6BAA6B;gBACtC,IAAI,EAAE,EAAE,kBAAkB,EAAE;aAC5B,CAAC,CAAC;YAEH,OAAO,wBAAwB,CAC9B,IAAI,eAAe,CAClB,4BAA4B,CAAC,UAAU,aAEvC,kBAAkB,CAClB,EACD,OAAO,CACP,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YAErE,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE1D,IACC,MAAM,CAAC,KAAK,KAAK,yCAAyC,CAAC,SAAS;gBACpE,MAAM,CAAC,KAAK,KAAK,yCAAyC,CAAC,SAAS,EACnE,CAAC;gBACF,OAAO,wBAAwB,CAC9B,IAAI,YAAY,CAAC,4BAA4B,CAAC,UAAU,EAAE,sBAAsB,EAAE;oBACjF,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,YAAY,EAAE,MAAM,CAAC,KAAK;iBAC1B,CAAC,EACF,OAAO,CACP,CAAC;YACH,CAAC;YAED,MAAM,CAAC,KAAK,GAAG,yCAAyC,CAAC,OAAO,CAAC;YACjE,MAAM,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;YAEjC,MAAM,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;YAE1E,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBACjC,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;gBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,wBAAwB;gBACjC,IAAI,EAAE;oBACL,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,IAAI;iBACJ;aACD,CAAC,CAAC;YAEH,MAAM,QAAQ,GAA2C;gBACxD,UAAU,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC;gBAC/C,OAAO,EAAE,qCAAqC,CAAC,oBAAoB;gBACnE,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;aAC/B,CAAC;YAEF,+EAA+E;YAC/E,sDAAsD;YACtD,+EAA+E;YAC/E,iFAAiF;YACjF,0CAA0C;YAC1C,EAAE;YACF,oDAAoD;YACpD,qEAAqE;YACrE,sFAAsF;YACtF,6EAA6E;YAC7E,kFAAkF;YAClF,EAAE;YACF,gDAAgD;YAChD,gFAAgF;YAChF,mEAAmE;YACnE,0EAA0E;YAC1E,EAAE;YACF,+GAA+G;YAC/G,+EAA+E;YAE/E,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;oBAC1C,OAAO,wBAAwB,CAC9B,IAAI,YAAY,CAAC,4BAA4B,CAAC,UAAU,EAAE,2BAA2B,EAAE;wBACtF,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;qBAC/B,CAAC,EACF,OAAO,CACP,CAAC;gBACH,CAAC;gBAED,8DAA8D;gBAC9D,uEAAuE;gBACvE,qDAAqD;gBACrD,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;oBAC9C,MAAM,IAAI,YAAY,CACrB,4BAA4B,CAAC,UAAU,EACvC,yBAAyB,CACzB,CAAC;gBACH,CAAC;gBACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CACtD,MAAM,CAAC,gBAAgB,EACvB,IAAI,CAAC,2BAA2B,EAChC;oBACC,OAAO,EAAE;wBACR,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;qBAC3B;iBACD,CACD,CAAC;gBAEF,MAAM,WAAW,GAAG,WAAqB,CAAC;gBAC1C,MAAM,YAAY,GAAG,GAAG,YAAY,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBAE9D,QAAQ,CAAC,WAAW,GAAG;oBACtB,OAAO,EAAE,qCAAqC,CAAC,WAAW;oBAC1D,YAAY,EAAE,6BAA6B,CAAC,kBAAkB;oBAC9D,QAAQ,EAAE,YAAY;oBACtB,kBAAkB,EAAE;wBACnB;4BACC,OAAO,EAAE,qCAAqC,CAAC,gBAAgB;4BAC/D,IAAI,EAAE,eAAe;4BACrB,KAAK,EAAE,WAAW;yBAClB;wBACD;4BACC,OAAO,EAAE,qCAAqC,CAAC,gBAAgB;4BAC/D,IAAI,EAAE,UAAU;4BAChB,KAAK,EAAE,QAAQ;yBACf;qBACD;iBACD,CAAC;gBAEF,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;oBACjC,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;oBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;oBACd,OAAO,EAAE,0BAA0B;oBACnC,IAAI,EAAE;wBACL,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,QAAQ,EAAE,YAAY;wBACtB,YAAY,EAAE,MAAM;qBACpB;iBACD,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACP,sEAAsE;gBACtE,0EAA0E;gBAC1E,6EAA6E;gBAC7E,EAAE;gBACF,2DAA2D;gBAC3D,gCAAgC;gBAChC,kFAAkF;gBAClF,2DAA2D;gBAC3D,yEAAyE;gBACzE,kEAAkE;gBAClE,0EAA0E;gBAC1E,oDAAoD;gBACpD,qEAAqE;gBACrE,EAAE;gBACF,wCAAwC;gBACxC,gFAAgF;gBAChF,gFAAgF;gBAEhF,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;oBACjC,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;oBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;oBACd,OAAO,EAAE,gCAAgC;oBACzC,IAAI,EAAE;wBACL,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ;wBAC7C,YAAY,EAAE,MAAM;qBACpB;iBACD,CAAC,CAAC;YACJ,CAAC;YAED,OAAO,QAAQ,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;IAED,+EAA+E;IAC/E,mDAAmD;IACnD,+EAA+E;IAE/E;;;;;OAKG;IACI,KAAK,CAAC,gBAAgB,CAC5B,OAAoD,EACpD,YAAqB;QAErB,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,WAAW,CAC9C,IAAI,CAAC,eAAe,EACpB,YAAY,EACZ,kBAAkB,CAClB,CAAC;QAEF,MAAM,kBAAkB,GAAG,MAAM,uBAAuB,CAAC,QAAQ,CAChE,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAClC,CAAC;QAEF,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBACjC,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;gBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,kCAAkC;gBAC3C,IAAI,EAAE,EAAE,kBAAkB,EAAE;aAC5B,CAAC,CAAC;YAEH,OAAO,wBAAwB,CAC9B,IAAI,eAAe,CAClB,4BAA4B,CAAC,UAAU,aAEvC,kBAAkB,CAClB,EACD,OAAO,CACP,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YAErE,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE1D,IAAI,MAAM,CAAC,KAAK,KAAK,yCAAyC,CAAC,OAAO,EAAE,CAAC;gBACxE,OAAO,wBAAwB,CAC9B,IAAI,YAAY,CAAC,4BAA4B,CAAC,UAAU,EAAE,yBAAyB,EAAE;oBACpF,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,YAAY,EAAE,MAAM,CAAC,KAAK;iBAC1B,CAAC,EACF,OAAO,CACP,CAAC;YACH,CAAC;YAED,MAAM,CAAC,KAAK,GAAG,yCAAyC,CAAC,SAAS,CAAC;YACnE,MAAM,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;YAEjC,MAAM,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;YAE1E,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBACjC,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;gBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,0BAA0B;gBACnC,IAAI,EAAE;oBACL,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,IAAI;iBACJ;aACD,CAAC,CAAC;YAEH,OAAO;gBACN,UAAU,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC;gBAC/C,OAAO,EAAE,qCAAqC,CAAC,eAAe;gBAC9D,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;aACnB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,eAAe,CAC3B,OAAoD,EACpD,YAAqB;QAErB,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,WAAW,CAC9C,IAAI,CAAC,eAAe,EACpB,YAAY,EACZ,iBAAiB,CACjB,CAAC;QAEF,MAAM,kBAAkB,GAAG,MAAM,uBAAuB,CAAC,QAAQ,CAChE,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAClC,CAAC;QAEF,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBACjC,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;gBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,kCAAkC;gBAC3C,IAAI,EAAE,EAAE,kBAAkB,EAAE;aAC5B,CAAC,CAAC;YAEH,OAAO,wBAAwB,CAC9B,IAAI,eAAe,CAClB,4BAA4B,CAAC,UAAU,aAEvC,kBAAkB,CAClB,EACD,OAAO,CACP,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YAErE,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE/D,IAAI,MAAM,CAAC,KAAK,KAAK,yCAAyC,CAAC,OAAO,EAAE,CAAC;gBACxE,OAAO,wBAAwB,CAC9B,IAAI,YAAY,CAAC,4BAA4B,CAAC,UAAU,EAAE,wBAAwB,EAAE;oBACnF,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,YAAY,EAAE,MAAM,CAAC,KAAK;iBAC1B,CAAC,EACF,OAAO,CACP,CAAC;YACH,CAAC;YAED,MAAM,CAAC,KAAK,GAAG,yCAAyC,CAAC,SAAS,CAAC;YACnE,MAAM,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;YAEjC,MAAM,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;YAE1E,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBACjC,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;gBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,0BAA0B;gBACnC,IAAI,EAAE;oBACL,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,IAAI;oBACJ,MAAM,EAAE,OAAO,CAAC,MAAM;iBACtB;aACD,CAAC,CAAC;YAEH,OAAO;gBACN,UAAU,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC;gBAC/C,OAAO,EAAE,qCAAqC,CAAC,eAAe;gBAC9D,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;aACnB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,iBAAiB,CAC7B,OAAqD,EACrD,YAAqB;QAErB,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,WAAW,CAC9C,IAAI,CAAC,eAAe,EACpB,YAAY,EACZ,mBAAmB,CACnB,CAAC;QAEF,MAAM,kBAAkB,GAAG,MAAM,uBAAuB,CAAC,QAAQ,CAChE,YAAY,CAAC,YAAY,CAAC,OAAO,CAAC,CAClC,CAAC;QAEF,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBACjC,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;gBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,mCAAmC;gBAC5C,IAAI,EAAE,EAAE,kBAAkB,EAAE;aAC5B,CAAC,CAAC;YAEH,OAAO,wBAAwB,CAC9B,IAAI,eAAe,CAClB,4BAA4B,CAAC,UAAU,aAEvC,kBAAkB,CAClB,EACD,OAAO,CACP,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;YAErE,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE/D,MAAM,CAAC,KAAK,GAAG,yCAAyC,CAAC,UAAU,CAAC;YACpE,MAAM,CAAC,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;YAEjC,MAAM,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;YAE1E,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBACjC,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;gBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,2BAA2B;gBACpC,IAAI,EAAE;oBACL,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,IAAI;oBACJ,MAAM,EAAE,OAAO,CAAC,MAAM;iBACtB;aACD,CAAC,CAAC;YAEH,OAAO;gBACN,UAAU,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC;gBAC/C,OAAO,EAAE,qCAAqC,CAAC,eAAe;gBAC9D,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;aACnB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,kBAAkB,CAC9B,GAAW,EACX,YAAqB;QAErB,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,WAAW,CAC9C,IAAI,CAAC,eAAe,EACpB,YAAY,EACZ,oBAAoB,CACpB,CAAC;QAEF,IAAI,CAAC;YACJ,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAE7D,IAAI,CAAC,6BAA6B,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE/D,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBACjC,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;gBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,wBAAwB;gBACjC,IAAI,EAAE;oBACL,GAAG;oBACH,IAAI;oBACJ,KAAK,EAAE,MAAM,CAAC,KAAK;iBACnB;aACD,CAAC,CAAC;YAEH,OAAO;gBACN,UAAU,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC;gBAC/C,OAAO,EAAE,qCAAqC,CAAC,eAAe;gBAC9D,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;aACnB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,wBAAwB,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QAChF,CAAC;IACF,CAAC;IAED,+EAA+E;IAC/E,uBAAuB;IACvB,+EAA+E;IAE/E;;;;;;;;;;;OAWG;IACI,KAAK,CAAC,kBAAkB,CAC9B,SAAiB,EACjB,OAAe,EACf,gBAAwB,EACxB,YAAoB,EACpB,YAAqB;QAErB,MAAM,CAAC,WAAW,CAAC,4BAA4B,CAAC,UAAU,eAAqB,SAAS,CAAC,CAAC;QAC1F,MAAM,CAAC,WAAW,CAAC,4BAA4B,CAAC,UAAU,aAAmB,OAAO,CAAC,CAAC;QACtF,MAAM,CAAC,WAAW,CACjB,4BAA4B,CAAC,UAAU,sBAEvC,gBAAgB,CAChB,CAAC;QACF,MAAM,CAAC,WAAW,CAAC,4BAA4B,CAAC,UAAU,kBAAwB,YAAY,CAAC,CAAC;QAEhG,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACjC,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;YAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,OAAO,EAAE,6BAA6B;YACtC,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE;SAC5D,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE7E,IAAI,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;YACnC,IAAI,kBAAkB,CAAC,aAAa,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjE,MAAM,IAAI,aAAa,CACtB,4BAA4B,CAAC,UAAU,EACvC,0BAA0B,EAC1B,SAAS,EACT;oBACC,SAAS;oBACT,OAAO;oBACP,gBAAgB;iBAChB,CACD,CAAC;YACH,CAAC;YAED,MAAM,IAAI,YAAY,CACrB,4BAA4B,CAAC,UAAU,EACvC,mCAAmC,EACnC;gBACC,SAAS;gBACT,OAAO;gBACP,gBAAgB;gBAChB,SAAS,EAAE,aAAa,CAAC,IAAI;aAC7B,CACD,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;QAEhE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,YAAY,CAAC,4BAA4B,CAAC,UAAU,EAAE,oBAAoB,EAAE;gBACrF,OAAO;gBACP,SAAS,EAAE,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE;aAC3C,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAA2B,KAAK,CAAC,CAAC,CAAC;QAE5F,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,YAAY,CAAC,4BAA4B,CAAC,UAAU,EAAE,yBAAyB,EAAE;gBAC1F,OAAO;gBACP,SAAS,EAAE,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE;aAC3C,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,KAA+B,EAAE,EAAE;YAC5E,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChD,OAAO,QAAQ,KAAK,OAAO,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,MAAM,eAAe,GAAG,aAAa;iBACnC,GAAG,CAAC,CAAC,CAA2B,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;iBAC7E,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,MAAM,IAAI,aAAa,CACtB,4BAA4B,CAAC,UAAU,EACvC,wBAAwB,EACxB,OAAO,EACP;gBACC,OAAO;gBACP,SAAS,EAAE,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE;gBAC3C,eAAe;aACf,CACD,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACjC,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;YAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,OAAO,EAAE,qBAAqB;YAC9B,IAAI,EAAE;gBACL,OAAO;gBACP,SAAS,EAAE,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE;gBAC3C,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC;aACvC;SACD,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,gCAAgC,CAAC,qBAAqB,CACtF,gBAAgB,EAChB,4BAA4B,CAAC,eAAe,EAC5C,OAAO,EACP,YAAY,CACZ,CAAC;QAEF,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,MAAM,IAAI,YAAY,CACrB,4BAA4B,CAAC,UAAU,EACvC,6BAA6B,EAC7B;gBACC,OAAO;gBACP,gBAAgB;aAChB,CACD,CAAC;QACH,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAEtD,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACjC,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;YAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,OAAO,EAAE,sBAAsB;YAC/B,IAAI,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE;SAChC,CAAC,CAAC;QAEH,OAAO,EAAE,aAAa,EAAE,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,cAAc,CAC1B,aAAqB,EACrB,YAAqB;QAErB,MAAM,CAAC,WAAW,CACjB,4BAA4B,CAAC,UAAU,mBAEvC,aAAa,CACb,CAAC;QAEF,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACjC,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;YAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,OAAO,EAAE,gBAAgB;YACzB,IAAI,EAAE,EAAE,aAAa,EAAE;SACvB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gCAAgC,CAAC,cAAc,CACxE,aAAa,EACb,YAAY,CACZ,CAAC;QAEF,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACjC,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;YAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,OAAO,EAAE,2BAA2B;YACpC,IAAI,EAAE;gBACL,aAAa;gBACb,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC;gBAC3B,KAAK,EAAG,MAAgD,CAAC,KAAK;aAC9D;SACD,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,qBAAqB,CACjC,KAAyB,EACzB,MAA0B,EAC1B,YAAqB;QAarB,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACjC,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;YAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,OAAO,EAAE,uBAAuB;YAChC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;SACvB,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,qCAAqC,EAAE,CAAC;YACjD,MAAM,IAAI,YAAY,CAAC,4BAA4B,CAAC,UAAU,EAAE,mBAAmB,EAAE;gBACpF,OAAO,EACN,iDAAiD;oBACjD,sEAAsE;aACvE,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,GACpD,MAAM,IAAI,CAAC,qCAAqC,CAAC,KAAK,CACrD,KAAkE,EAClE,MAAM,CACN,CAAC;QAEH,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACnD,MAAM,cAAc,GAA0C;gBAC7D,UAAU,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC;gBAC/C,OAAO,EAAE,yCAAyC,CAAC,mBAAmB;gBACtE,WAAW,EAAE,OAAO,CAAC,EAAE;gBACvB,WAAW,EAAE,OAAO,CAAC,aAAa;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;aACpB,CAAC;YAEF,OAAO;gBACN,WAAW,EAAE,cAAc;gBAC3B,SAAS,EAAE,OAAO,CAAC,WAAW;gBAC9B,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC/C,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;aACvD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACjC,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;YAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,OAAO,EAAE,6BAA6B;YACtC,IAAI,EAAE;gBACL,KAAK,EAAE,YAAY,CAAC,MAAM;gBAC1B,KAAK;gBACL,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC;aAC9B;SACD,CAAC,CAAC;QAEH,OAAO;YACN,YAAY;YACZ,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,YAAY,CAAC,MAAM;SAC1B,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,6DAA6D;IAC7D,+EAA+E;IAE/E;;;;;OAKG;IACI,KAAK,CAAC,kBAAkB,CAC9B,WAAmB,EACnB,YAAqB;QAErB,MAAM,CAAC,WAAW,CAAC,4BAA4B,CAAC,UAAU,iBAAuB,WAAW,CAAC,CAAC;QAE9F,MAAM,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,EAAE,oBAAoB,CAAC,CAAC;QAExF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAE1E,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,MAAM,IAAI,aAAa,CACtB,4BAA4B,CAAC,UAAU,EACvC,yBAAyB,EACzB,SAAS,EACT,EAAE,WAAW,EAAE,CACf,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAExD,IAAI,MAAM,CAAC,KAAK,KAAK,yCAAyC,CAAC,UAAU,EAAE,CAAC;YAC3E,MAAM,IAAI,YAAY,CAAC,4BAA4B,CAAC,UAAU,EAAE,2BAA2B,EAAE;gBAC5F,WAAW;aACX,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAEjE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,CAAC;QACxD,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAE9D,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,MAAM,IAAI,iBAAiB,CAC1B,4BAA4B,CAAC,UAAU,EACvC,4BAA4B,EAC5B;gBACC,WAAW;aACX,CACD,CAAC;QACH,CAAC;QAED,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAC7E,MAAM,WAAW,GAAG,WAAW,CAAC,iBAAiB,CAAS,gBAAgB,CAAC,CAAC;QAE5E,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,iBAAiB,CAC1B,4BAA4B,CAAC,UAAU,EACvC,2BAA2B,EAC3B;gBACC,WAAW;gBACX,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC/C,aAAa,EAAE,YAAY;gBAC3B,cAAc,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;aACtC,CACD,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACjC,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;YAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,OAAO,EAAE,qBAAqB;YAC9B,IAAI,EAAE;gBACL,WAAW;gBACX,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC/C,cAAc,EAAE,YAAY;aAC5B;SACD,CAAC,CAAC;QAEH,OAAO;YACN,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS;YACT,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,WAAW,EAAE,MAAM,CAAC,WAAW;SAC/B,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,kBAAkB,CAC9B,WAAmB,EACnB,YAAqB;QAErB,MAAM,CAAC,WAAW,CAAC,4BAA4B,CAAC,UAAU,iBAAuB,WAAW,CAAC,CAAC;QAE9F,MAAM,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,EAAE,oBAAoB,CAAC,CAAC;QAExF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAE/D,IAAI,MAAM,CAAC,KAAK,KAAK,yCAAyC,CAAC,UAAU,EAAE,CAAC;YAC3E,MAAM,IAAI,YAAY,CACrB,4BAA4B,CAAC,UAAU,EACvC,mCAAmC,EACnC;gBACC,WAAW;aACX,CACD,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAEjE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,CAAC;QACxD,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAE9D,IAAI,CAAC,YAAY,EAAE,CAAC;YACnB,MAAM,IAAI,iBAAiB,CAC1B,4BAA4B,CAAC,UAAU,EACvC,oCAAoC,EACpC;gBACC,WAAW;aACX,CACD,CAAC;QACH,CAAC;QAED,oEAAoE;QAEpE,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAC7E,MAAM,WAAW,GAAG,WAAW,CAAC,iBAAiB,CAAS,gBAAgB,CAAC,CAAC;QAE5E,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,iBAAiB,CAC1B,4BAA4B,CAAC,UAAU,EACvC,mCAAmC,EACnC;gBACC,WAAW;gBACX,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC/C,aAAa,EAAE,YAAY;gBAC3B,cAAc,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;aACtC,CACD,CAAC;QACH,CAAC;QAED,sEAAsE;QACtE,qDAAqD;QACrD,qFAAqF;QACrF,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAC7E,MAAM,WAAW,GAAG,WAAW,CAAC,iBAAiB,CAAS,gBAAgB,CAAC,CAAC;QAE5E,IACC,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,gBAAgB,CAAC;YACxC,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAC7C,CAAC;YACF,MAAM,IAAI,iBAAiB,CAC1B,4BAA4B,CAAC,UAAU,EACvC,2BAA2B,EAC3B;gBACC,WAAW;gBACX,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC/C,wBAAwB,EAAE,MAAM,CAAC,gBAAgB;gBACjD,cAAc,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;aACtC,CACD,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACjC,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;YAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,OAAO,EAAE,qBAAqB;YAC9B,IAAI,EAAE;gBACL,WAAW;gBACX,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;gBACzC,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC/C,cAAc,EAAE,YAAY;aAC5B;SACD,CAAC,CAAC;QAEH,OAAO;YACN,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS;YACT,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,WAAW,EAAE,MAAM,CAAC,WAAW;SAC/B,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,yBAAyB;IACzB,+EAA+E;IAE/E;;;;OAIG;IACK,KAAK,CAAC,0BAA0B;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,KAAK,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,EAAE,CAAC;YACpF,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,gCAAgC,EAAE,CAAC;gBAC9D,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7B,CAAC;QACF,CAAC;QAED,KAAK,MAAM,aAAa,IAAI,OAAO,EAAE,CAAC;YACrC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAEvD,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBACjC,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;gBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,6BAA6B;gBACtC,IAAI,EAAE,EAAE,aAAa,EAAE;aACvB,CAAC,CAAC;YAEH,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC9D,IAAI,CAAC;oBACJ,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;gBACxD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;wBACjC,KAAK,EAAE,OAAO;wBACd,MAAM,EAAE,4BAA4B,CAAC,UAAU;wBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;wBACd,OAAO,EAAE,0BAA0B;wBACnC,IAAI,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE;qBACvD,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBACjC,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;gBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,oCAAoC;gBAC7C,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE;aACnC,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACK,oBAAoB,CAAC,aAA8B;QAC1D,OAAO;YACN,EAAE,EAAE,aAAa,CAAC,EAAE;YACpB,WAAW,EAAE,aAAa,CAAC,WAAW;YACtC,WAAW,EAAE,aAAa,CAAC,WAAW;YACtC,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,WAAW,EAAE,aAAa,CAAC,WAAW;YACtC,SAAS,EAAE,aAAa,CAAC,SAAS;YAClC,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;YAChD,gBAAgB,EAAE,aAAa,CAAC,gBAAgB;YAChD,MAAM,EAAE,aAAa,CAAC,MAAM;YAC5B,eAAe,EAAE,aAAa,CAAC,eAAe;YAC9C,WAAW,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;YAChD,YAAY,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;YAClD,QAAQ,EAAE,aAAa,CAAC,QAAQ;YAChC,WAAW,EAAE,aAAa,CAAC,WAAW;SACtC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,oBAAoB,CAAC,MAAwB;QACpD,OAAO;YACN,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE;YAC7C,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE;YAC/C,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,WAAW,EAAE,MAAM,CAAC,WAAW;SAC/B,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,eAAe,CAAC,WAAmB;QAChD,MAAM,CAAC,WAAW,CAAC,4BAA4B,CAAC,UAAU,iBAAuB,WAAW,CAAC,CAAC;QAE9F,IAAI,SAAS,CAAC;QACd,IAAI,CAAC;YACJ,SAAS,GAAG,MAAM,IAAI,CAAC,mCAAmC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACtF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5D,MAAM,KAAK,CAAC;YACb,CAAC;YAED,MAAM,IAAI,YAAY,CACrB,4BAA4B,CAAC,UAAU,EACvC,uBAAuB,EACvB,EAAE,WAAW,EAAE,EACf,KAAK,CACL,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;IAED;;;;;;OAMG;IACK,wBAAwB,CAAC,cAAsB,EAAE,MAAwB;QAChF,IAAI,cAAc,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAChD,MAAM,IAAI,iBAAiB,CAC1B,4BAA4B,CAAC,UAAU,EACvC,+BAA+B,CAC/B,CAAC;QACH,CAAC;IACF,CAAC;IAED;;;;;;OAMG;IACK,wBAAwB,CAAC,cAAsB,EAAE,MAAwB;QAChF,IAAI,cAAc,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAChD,MAAM,IAAI,iBAAiB,CAC1B,4BAA4B,CAAC,UAAU,EACvC,+BAA+B,CAC/B,CAAC;QACH,CAAC;IACF,CAAC;IAED;;;;;;OAMG;IACK,6BAA6B,CAAC,cAAsB,EAAE,MAAwB;QACrF,IAAI,cAAc,KAAK,MAAM,CAAC,gBAAgB,IAAI,cAAc,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC9F,MAAM,IAAI,iBAAiB,CAC1B,4BAA4B,CAAC,UAAU,EACvC,gCAAgC,CAChC,CAAC;QACH,CAAC;IACF,CAAC;IAED;;;;;OAKG;IACK,gBAAgB,CAAC,SAAsC;QAC9D,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,YAAY,CAAC,4BAA4B,CAAC,UAAU,EAAE,wBAAwB,EAAE;gBACzF,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;aAC/C,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAEzD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,YAAY,CAAC,4BAA4B,CAAC,UAAU,EAAE,2BAA2B,EAAE;gBAC5F,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;aAC/C,CAAC,CAAC;QACJ,CAAC;QAED,uEAAuE;QACvE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,YAAY,CACrB,4BAA4B,CAAC,UAAU,EACvC,sCAAsC,EACtC;gBACC,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC/C,WAAW,EAAE,SAAS,CAAC,MAAM;aAC7B,CACD,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,sBAAsB,CACnC,SAAiB,EACjB,SAAsC;QAEtC,MAAM,CAAC,WAAW,CAAC,4BAA4B,CAAC,UAAU,eAAqB,SAAS,CAAC,CAAC;QAC1F,MAAM,CAAC,MAAM,CACZ,4BAA4B,CAAC,UAAU,eAEvC,SAAS,CACT,CAAC;QAEF,4BAA4B;QAC5B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE7E,IAAI,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;YACnC,IAAI,kBAAkB,CAAC,aAAa,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;gBACjE,MAAM,IAAI,aAAa,CACtB,4BAA4B,CAAC,UAAU,EACvC,qBAAqB,EACrB,SAAS,EACT;oBACC,SAAS;oBACT,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;iBAC/C,CACD,CAAC;YACH,CAAC;YACD,MAAM,IAAI,YAAY,CAAC,4BAA4B,CAAC,UAAU,EAAE,qBAAqB,EAAE;gBACtF,SAAS;gBACT,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;gBACrD,SAAS,EAAE,aAAa,CAAC,IAAI;aAC7B,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACjC,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;YAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,OAAO,EAAE,qBAAqB;YAC9B,IAAI,EAAE;gBACL,SAAS;gBACT,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;gBACrD,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC;aAC5C;SACD,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,6BAA6B,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACpE,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,uBAAuB,CAAC,OAGrC;QAIA,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;QACvD,MAAM,CAAC,WAAW,CAAC,4BAA4B,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QAExE,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,mBAAmB,CAAC,GAAW;QAI5C,MAAM,CAAC,WAAW,CAAC,4BAA4B,CAAC,UAAU,SAAe,GAAG,CAAC,CAAC;QAE9E,qDAAqD;QACrD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAElE,IAAI,aAAa,EAAE,CAAC;YACnB,OAAO;gBACN,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;gBAChD,IAAI,EAAE,mBAAmB,CAAC,QAAQ;aAClC,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACrF,IAAI,iBAAiB,EAAE,CAAC;YACvB,OAAO;gBACN,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC;gBACpD,IAAI,EAAE,mBAAmB,CAAC,QAAQ;aAClC,CAAC;QACH,CAAC;QAED,MAAM,IAAI,aAAa,CACtB,4BAA4B,CAAC,UAAU,EACvC,yBAAyB,EACzB,GAAG,EACH;YACC,GAAG;SACH,CACD,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,yBAAyB,CAChC,cAAwD;QAExD,iGAAiG;QACjG,IAAI,EAAE,CAAC,MAAM,CAAe,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;YAC5F,MAAM,KAAK,GAAG,WAAW,CAAC,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC;YACpF,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzB,GAAG,IAAI;gBACP,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;aAC1C,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IACC,EAAE,CAAC,MAAM,CAA4B,cAAc,CAAC;YACpD,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,EAClC,CAAC;YACF,OAAO,WAAW,CAAC,iBAAiB,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACtE,CAAC;QAED,OAAO,EAAE,CAAC;IACX,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,6BAA6B,CAC1C,SAAsC,EACtC,cAA4B;QAE5B,MAAM,CAAC,MAAM,CACZ,4BAA4B,CAAC,UAAU,eAEvC,SAAS,CACT,CAAC;QACF,MAAM,CAAC,MAAM,CACZ,4BAA4B,CAAC,UAAU,oBAEvC,cAAc,CACd,CAAC;QAEF,MAAM,SAAS,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;QAC9C,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,aAAa,CAAC,4BAA4B,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;QAC7F,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAC;QAEjE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBACjC,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;gBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,2BAA2B;gBACpC,IAAI,EAAE;oBACL,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE;oBAC5C,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;iBACrD;aACD,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QAED,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAA2B,KAAK,CAAC,CAAC,CAAC;QAE5F,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;gBACjC,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;gBAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;gBACd,OAAO,EAAE,2BAA2B;gBACpC,IAAI,EAAE;oBACL,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE;oBAC5C,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;iBACrD;aACD,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QAED,MAAM,aAAa,GAAG,aAAa,CAAC,IAAI,CACvC,CAAC,KAA+B,EAAE,EAAE,CACnC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC;YACrE,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAC3C,CAAC;QAEF,IAAI,CAAC,aAAa,EAAE,CAAC;YACpB,MAAM,IAAI,YAAY,CAAC,4BAA4B,CAAC,UAAU,EAAE,2BAA2B,EAAE;gBAC5F,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;gBACrD,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE;gBAC5C,eAAe,EAAE,aAAa;qBAC5B,GAAG,CAAC,CAAC,CAA2B,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;qBAC7E,IAAI,CAAC,IAAI,CAAC;aACZ,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC;YACjC,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,4BAA4B,CAAC,UAAU;YAC/C,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,OAAO,EAAE,uBAAuB;YAChC,IAAI,EAAE;gBACL,WAAW,EAAE,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;gBACrD,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE;gBACrD,SAAS;aACT;SACD,CAAC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;OAWG;IACK,mBAAmB,CAC1B,SAAsC,EACtC,KAA+B;QAE/B,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAChE,MAAM,YAAY,GAAG,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAExD,oFAAoF;QACpF,iFAAiF;QACjF,sFAAsF;QACtF,gEAAgE;QAChE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5D,IACC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,eAAuB,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,EAC1F,CAAC;gBACF,OAAO,KAAK,CAAC;YACd,CAAC;QACF,CAAC;aAAM,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrE,qDAAqD;YACrD,OAAO,KAAK,CAAC;QACd,CAAC;QACD,0EAA0E;QAC1E,gEAAgE;QAEhE,MAAM,yBAAyB,GAAG,gBAAgB,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QACtF,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAE9E,MAAM,iBAAiB,GAAG,WAAW,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;QACnF,MAAM,aAAa,GAAG,WAAW,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;QAE3E,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC3E,OAAO,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACpE,OAAO,KAAK,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,eAAe,CAC5B,OAAkC;QAElC,IAAI,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAClC,OAAO,OAAO,CAAC;QAChB,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAEvD,IAAI,KAAK,EAAE,CAAC;YACX,OAAO;gBACN,GAAG,OAAO;gBACV,mBAAmB,EAAE,KAAK;aAC1B,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IAChB,CAAC","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { ITaskSchedulerComponent } from \"@twin.org/background-task-models\";\nimport { ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport {\n\tArrayHelper,\n\tBaseError,\n\tComponentFactory,\n\tConverter,\n\tGeneralError,\n\tGuards,\n\tIs,\n\tNotFoundError,\n\tRandomHelper,\n\tStringHelper,\n\tUnauthorizedError,\n\tValidationError\n} from \"@twin.org/core\";\nimport { JsonLdHelper, type JsonLdObjectWithNoContext } from \"@twin.org/data-json-ld\";\nimport {\n\tDataspaceAppFactory,\n\tTransferProcessRole,\n\ttype IDataspaceApp,\n\ttype IDataspaceControlPlaneComponent,\n\ttype IDataspaceControlPlaneResolverComponent,\n\ttype INegotiationCallback,\n\ttype ITransferContext,\n\ttype ITransferProcess,\n\ttype TransferProcess\n} from \"@twin.org/dataspace-models\";\nimport { EngineCoreFactory } from \"@twin.org/engine-models\";\nimport {\n\tEntityStorageConnectorFactory,\n\ttype IEntityStorageConnector\n} from \"@twin.org/entity-storage-models\";\nimport type { IFederatedCatalogueComponent } from \"@twin.org/federated-catalogue-models\";\nimport type { ILoggingComponent } from \"@twin.org/logging-models\";\nimport { nameof, nameofKebabCase } from \"@twin.org/nameof\";\nimport {\n\tOdrlPolicyHelper,\n\tPolicyRequesterFactory,\n\ttype IPolicyAdministrationPointComponent,\n\ttype IPolicyNegotiationAdminPointComponent,\n\ttype IPolicyNegotiationPointComponent\n} from \"@twin.org/rights-management-models\";\nimport {\n\tDataspaceProtocolContexts,\n\tDataspaceProtocolContractNegotiationTypes,\n\tDataspaceProtocolEndpointType,\n\tDataspaceProtocolHelper,\n\tDataspaceProtocolTransferProcessStateType,\n\tDataspaceProtocolTransferProcessTypes,\n\ttype DataspaceProtocolContractNegotiationStateType,\n\ttype IDataspaceProtocolAgreement,\n\ttype IDataspaceProtocolContractNegotiation,\n\ttype IDataspaceProtocolContractNegotiationError,\n\ttype IDataspaceProtocolDataset,\n\ttype IDataspaceProtocolPolicy,\n\ttype IDataspaceProtocolTransferCompletionMessage,\n\ttype IDataspaceProtocolTransferError,\n\ttype IDataspaceProtocolTransferProcess,\n\ttype IDataspaceProtocolTransferRequestMessage,\n\ttype IDataspaceProtocolTransferStartMessage,\n\ttype IDataspaceProtocolTransferSuspensionMessage,\n\ttype IDataspaceProtocolTransferTerminationMessage\n} from \"@twin.org/standards-dataspace-protocol\";\nimport type { IDcatDataset } from \"@twin.org/standards-w3c-dcat\";\nimport { TrustHelper, type ITrustComponent } from \"@twin.org/trust-models\";\nimport { DataspaceControlPlanePolicyRequester } from \"./dataspaceControlPlanePolicyRequester.js\";\nimport type { IDataspaceControlPlaneServiceConstructorOptions } from \"./models/IDataspaceControlPlaneServiceConstructorOptions.js\";\nimport { getJsonLdId, getJsonLdType } from \"./utils/dataHelpers.js\";\nimport {\n\tisCatalogError,\n\tisCatalogErrorName,\n\ttransformToTransferError\n} from \"./utils/transferErrorUtils.js\";\n\n/**\n * Stalled negotiation threshold in milliseconds (30 minutes).\n * Negotiations that haven't received a state update within this time are considered stalled.\n */\nconst STALLED_NEGOTIATION_THRESHOLD_MS = 30 * 60 * 1000;\n\n/**\n * Dataspace Control Plane Service implementation.\n *\n * Handles contract negotiation (via PNP callbacks) and transfer process management.\n * Negotiation is fully callback-driven: negotiateAgreement() returns immediately with\n * a negotiationId, and the caller is notified via INegotiationCallback when complete.\n */\nexport class DataspaceControlPlaneService\n\timplements IDataspaceControlPlaneComponent, IDataspaceControlPlaneResolverComponent\n{\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<DataspaceControlPlaneService>();\n\n\t/**\n\t * Hardcoded requester type for PNP registration.\n\t * PNP uses this to route callbacks to our PolicyRequester.\n\t * @internal\n\t */\n\tprivate static readonly _REQUESTER_TYPE = \"dataspace-control-plane-requester\";\n\n\t/**\n\t * The logging component.\n\t * @internal\n\t */\n\tprivate readonly _loggingComponent?: ILoggingComponent;\n\n\t/**\n\t * Policy Administration Point component for Agreement lookup.\n\t * @internal\n\t */\n\tprivate readonly _policyAdministrationPointComponent: IPolicyAdministrationPointComponent;\n\n\t/**\n\t * Policy Negotiation Point component for contract negotiation.\n\t * Used to negotiate agreements with providers before creating transfer processes.\n\n\t * @internal\n\t */\n\tprivate readonly _policyNegotiationPointComponent: IPolicyNegotiationPointComponent;\n\n\t/**\n\t * Policy Negotiation Admin Point component for negotiation history.\n\t * Optional - if not configured, history queries will fail gracefully.\n\t * @internal\n\t */\n\tprivate readonly _policyNegotiationAdminPointComponent?: IPolicyNegotiationAdminPointComponent;\n\n\t/**\n\t * Federated Catalogue component for dataset validation.\n\t * Used to validate that Agreements reference valid catalog datasets.\n\t * @internal\n\t */\n\tprivate readonly _federatedCatalogueComponent: IFederatedCatalogueComponent;\n\n\t/**\n\t * Entity storage for Transfer Process entities.\n\t * Shared between Control Plane and Data Plane.\n\t * @internal\n\t */\n\tprivate readonly _transferProcessStorage: IEntityStorageConnector<TransferProcess>;\n\n\t/**\n\t * The trust component for token verification and generation.\n\t * @internal\n\t */\n\tprivate readonly _trustComponent: ITrustComponent;\n\n\t/**\n\t * Override trust generator type for token generation.\n\t * @internal\n\t */\n\tprivate readonly _overrideTrustGeneratorType?: string;\n\n\t/**\n\t * Data plane endpoint path (path only, not full URL).\n\t * Will be combined with public origin from hosting component.\n\t * If not configured, PULL transfers are not supported.\n\t * @internal\n\t */\n\tprivate readonly _dataPlanePath?: string;\n\n\t/**\n\t * Policy requester instance for handling negotiation callbacks.\n\t * @internal\n\t */\n\tprivate readonly _policyRequester: DataspaceControlPlanePolicyRequester;\n\n\t/**\n\t * Task scheduler for periodic stalled negotiation cleanup.\n\t * @internal\n\t */\n\tprivate readonly _taskScheduler?: ITaskSchedulerComponent;\n\n\t/**\n\t * Registered negotiation callbacks from upstream callers, keyed by registration key.\n\t * @internal\n\t */\n\tprivate readonly _negotiationCallbacks: Map<string, INegotiationCallback>;\n\n\t/**\n\t * Create a new instance of DataspaceControlPlaneService.\n\t * @param options The options for the service.\n\t */\n\tconstructor(options?: IDataspaceControlPlaneServiceConstructorOptions) {\n\t\tthis._loggingComponent = ComponentFactory.getIfExists<ILoggingComponent>(\n\t\t\toptions?.loggingComponentType ?? \"logging\"\n\t\t);\n\n\t\t// Retrieve PAP component with default\n\t\tthis._policyAdministrationPointComponent =\n\t\t\tComponentFactory.get<IPolicyAdministrationPointComponent>(\n\t\t\t\toptions?.policyAdministrationPointComponentType ?? \"policy-administration-point\"\n\t\t\t);\n\n\t\t// Retrieve PNP component with default\n\t\tthis._policyNegotiationPointComponent = ComponentFactory.get<IPolicyNegotiationPointComponent>(\n\t\t\toptions?.policyNegotiationPointComponentType ?? \"policy-negotiation-point\"\n\t\t);\n\n\t\t// Retrieve PNAP component (optional) for negotiation history\n\t\tthis._policyNegotiationAdminPointComponent =\n\t\t\tComponentFactory.getIfExists<IPolicyNegotiationAdminPointComponent>(\n\t\t\t\toptions?.policyNegotiationAdminPointComponentType ?? \"policy-negotiation-admin-point\"\n\t\t\t);\n\n\t\t// Retrieve Federated Catalogue component with default\n\t\tthis._federatedCatalogueComponent = ComponentFactory.get<IFederatedCatalogueComponent>(\n\t\t\toptions?.federatedCatalogueComponentType ?? \"federated-catalogue\"\n\t\t);\n\n\t\tthis._transferProcessStorage = EntityStorageConnectorFactory.get<\n\t\t\tIEntityStorageConnector<TransferProcess>\n\t\t>(options?.transferProcessEntityStorageType ?? nameofKebabCase<TransferProcess>());\n\n\t\tthis._trustComponent = ComponentFactory.get<ITrustComponent>(\n\t\t\toptions?.trustComponentType ?? \"trust\"\n\t\t);\n\n\t\tthis._overrideTrustGeneratorType = options?.config?.overrideTrustGeneratorType;\n\n\t\tthis._dataPlanePath = Is.stringValue(options?.config?.dataPlanePath)\n\t\t\t? StringHelper.trimLeadingSlashes(options.config.dataPlanePath)\n\t\t\t: undefined;\n\n\t\tthis._taskScheduler = ComponentFactory.getIfExists<ITaskSchedulerComponent>(\n\t\t\toptions?.taskSchedulerComponentType ?? \"task-scheduler\"\n\t\t);\n\n\t\tthis._negotiationCallbacks = new Map();\n\n\t\tconst internalCallback: INegotiationCallback = {\n\t\t\tonStateChanged: async (negotiationId, state, data) => {\n\t\t\t\tfor (const [key, cb] of this._negotiationCallbacks.entries()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait cb.onStateChanged(negotiationId, state, data);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\t\tts: Date.now(),\n\t\t\t\t\t\t\tmessage: \"negotiationCallbackError\",\n\t\t\t\t\t\t\tdata: { key, negotiationId, method: \"onStateChanged\", error }\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tonCompleted: async (negotiationId, agreementId) => {\n\t\t\t\tfor (const [key, cb] of this._negotiationCallbacks.entries()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait cb.onCompleted(negotiationId, agreementId);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\t\tts: Date.now(),\n\t\t\t\t\t\t\tmessage: \"negotiationCallbackError\",\n\t\t\t\t\t\t\tdata: { key, negotiationId, method: \"onCompleted\", error }\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailed: async (negotiationId, reason) => {\n\t\t\t\tfor (const [key, cb] of this._negotiationCallbacks.entries()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait cb.onFailed(negotiationId, reason);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\t\tts: Date.now(),\n\t\t\t\t\t\t\tmessage: \"negotiationCallbackError\",\n\t\t\t\t\t\t\tdata: { key, negotiationId, method: \"onFailed\", error }\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis._policyRequester = new DataspaceControlPlanePolicyRequester(\n\t\t\toptions?.loggingComponentType ?? \"logging\",\n\t\t\tinternalCallback\n\t\t);\n\n\t\tPolicyRequesterFactory.register(\n\t\t\tDataspaceControlPlaneService._REQUESTER_TYPE,\n\t\t\t() => this._policyRequester\n\t\t);\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The class name of the component.\n\t */\n\tpublic className(): string {\n\t\treturn DataspaceControlPlaneService.CLASS_NAME;\n\t}\n\n\t/**\n\t * Register a callback to receive negotiation state change notifications.\n\t * Upstream modules (e.g. supply-chain) register their callback here.\n\t * @param key A unique key identifying this callback registration.\n\t * @param callback The callback interface to register.\n\t */\n\tpublic registerNegotiationCallback(key: string, callback: INegotiationCallback): void {\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(key), key);\n\t\tthis._negotiationCallbacks.set(key, callback);\n\t}\n\n\t/**\n\t * Unregister a previously registered negotiation callback.\n\t * @param key The key used when registering the callback.\n\t */\n\tpublic unregisterNegotiationCallback(key: string): void {\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(key), key);\n\t\tthis._negotiationCallbacks.delete(key);\n\t}\n\n\t/**\n\t * The service needs to be started when the application is initialized.\n\t * Populates the Federated Catalogue with datasets from registered apps\n\t * and starts the stalled negotiation cleanup task.\n\t * @param nodeLoggingComponentType The node logging component type.\n\t */\n\tpublic async start(nodeLoggingComponentType?: string): Promise<void> {\n\t\tconst engine = EngineCoreFactory.getIfExists(\"engine\");\n\t\t// Skip if no engine exists OR if this is a clone instance\n\t\tif (Is.empty(engine) || engine.isClone()) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"debug\",\n\t\t\t\tts: Date.now(),\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tmessage: \"engineCloneStart\"\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tts: Date.now(),\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tmessage: \"populatingFederatedCatalogue\"\n\t\t});\n\n\t\t// Get all registered apps\n\t\tconst appNames = DataspaceAppFactory.names();\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"debug\",\n\t\t\tts: Date.now(),\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tmessage: \"discoveredApps\",\n\t\t\tdata: { count: appNames.length, apps: appNames }\n\t\t});\n\n\t\tlet registeredCount = 0;\n\t\tlet errorCount = 0;\n\n\t\t// Collect and register datasets from each app\n\t\tfor (const appName of appNames) {\n\t\t\ttry {\n\t\t\t\tconst app = DataspaceAppFactory.get<IDataspaceApp>(appName);\n\t\t\t\tconst datasets = await app.datasetsHandled();\n\n\t\t\t\tfor (const dataset of datasets) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// Ensure publisher is set (required for Federated Catalogue)\n\t\t\t\t\t\tconst datasetWithPublisher = await this.ensurePublisher(dataset);\n\n\t\t\t\t\t\t// Register with Federated Catalogue\n\t\t\t\t\t\tawait this._federatedCatalogueComponent.set(\n\t\t\t\t\t\t\tdatasetWithPublisher as unknown as IDcatDataset\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tregisteredCount++;\n\n\t\t\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\t\t\tlevel: \"debug\",\n\t\t\t\t\t\t\tts: Date.now(),\n\t\t\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\t\tmessage: \"datasetRegistered\",\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\tdatasetId: getJsonLdId(datasetWithPublisher) ?? \"\",\n\t\t\t\t\t\t\t\tappName\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\terrorCount++;\n\t\t\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\t\t\tts: Date.now(),\n\t\t\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\t\tmessage: \"datasetRegistrationFailed\",\n\t\t\t\t\t\t\terror: BaseError.fromError(error),\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\tdatasetId: getJsonLdId(dataset) ?? \"\",\n\t\t\t\t\t\t\t\tappName\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\tts: Date.now(),\n\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tmessage: \"appDatasetsRetrievalFailed\",\n\t\t\t\t\terror: BaseError.fromError(error),\n\t\t\t\t\tdata: { appName }\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tts: Date.now(),\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tmessage: \"federatedCataloguePopulated\",\n\t\t\tdata: {\n\t\t\t\tregisteredCount,\n\t\t\t\terrorCount,\n\t\t\t\ttotalApps: appNames.length\n\t\t\t}\n\t\t});\n\n\t\tif (this._taskScheduler) {\n\t\t\tawait this._taskScheduler.addTask(\n\t\t\t\t\"control-plane-negotiation-cleanup\",\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tnextTriggerTime: Date.now(),\n\t\t\t\t\t\tintervalMinutes: 5\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tasync () => {\n\t\t\t\t\tawait this.cleanupStalledNegotiations();\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Stop the service.\n\t * Removes the stalled negotiation cleanup task.\n\t * @param nodeLoggingComponentType The node logging component type.\n\t */\n\tpublic async stop(nodeLoggingComponentType?: string): Promise<void> {\n\t\tif (this._taskScheduler) {\n\t\t\tawait this._taskScheduler.removeTask(\"control-plane-negotiation-cleanup\");\n\t\t}\n\t}\n\n\t// ----------------------------------------------------------------------------\n\t// CONSUMER SIDE OPERATIONS\n\t// ----------------------------------------------------------------------------\n\n\t/**\n\t * Request a Transfer Process.\n\t * Creates a new Transfer Process in REQUESTED state.\n\t * @param request Transfer request message (DSP compliant).\n\t * @param trustPayload Trust payload containing authorization information (Base64-encoded token).\n\t * @returns Transfer Process (DSP compliant) with state REQUESTED, or TransferError if the operation fails.\n\t *\n\t * Role Performed: Provider\n\t * Called by: Consumer when it wants to request a new Transfer Process\n\t */\n\tpublic async requestTransfer(\n\t\trequest: IDataspaceProtocolTransferRequestMessage,\n\t\ttrustPayload: unknown\n\t): Promise<IDataspaceProtocolTransferProcess | IDataspaceProtocolTransferError> {\n\t\tconst trustInfo = await TrustHelper.verifyTrust(\n\t\t\tthis._trustComponent,\n\t\t\ttrustPayload,\n\t\t\t\"requestTransfer\"\n\t\t);\n\n\t\tconst validationFailures = await DataspaceProtocolHelper.validate(\n\t\t\tJsonLdHelper.toNodeObject(request)\n\t\t);\n\n\t\tif (validationFailures.length > 0) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"invalidTransferRequest\",\n\t\t\t\tdata: { validationFailures }\n\t\t\t});\n\n\t\t\treturn transformToTransferError(\n\t\t\t\tnew ValidationError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tnameof(request),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t),\n\t\t\t\trequest\n\t\t\t);\n\t\t}\n\n\t\tconst providerPid = `urn:uuid:${RandomHelper.generateUuidV7()}`;\n\n\t\tlet datasetId: string;\n\t\tlet consumerIdentity: string;\n\t\tlet providerIdentity: string;\n\t\tlet policies: IDataspaceProtocolPolicy[] = [];\n\n\t\ttry {\n\t\t\tconst agreement = await this.lookupAgreement(request.agreementId);\n\n\t\t\tif (!agreement) {\n\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tts: Date.now(),\n\t\t\t\t\tmessage: \"agreementNotFound\",\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tagreementId: request.agreementId,\n\t\t\t\t\t\thint: \"Agreement must exist before transfer. Use contract negotiation to create agreement first.\"\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\"agreementNotFound\",\n\t\t\t\t\trequest.agreementId,\n\t\t\t\t\t{\n\t\t\t\t\t\tagreementId: request.agreementId,\n\t\t\t\t\t\thint: \"Perform contract negotiation first to create an agreement\"\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst assigneeIdentity = OdrlPolicyHelper.extractAssigneeIdentity(agreement);\n\t\t\tconst assigneeIds = ArrayHelper.fromObjectOrArray<string>(assigneeIdentity);\n\n\t\t\tif (!assigneeIds.includes(trustInfo.identity)) {\n\t\t\t\tthrow new UnauthorizedError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\"callerNotAuthorizedForAgreement\"\n\t\t\t\t);\n\t\t\t}\n\t\t\tconsumerIdentity = trustInfo.identity;\n\n\t\t\tconst assignerIdentity = OdrlPolicyHelper.extractAssignerIdentity(agreement);\n\t\t\tconst assignerIds = ArrayHelper.fromObjectOrArray<string>(assignerIdentity);\n\t\t\tif (assignerIds.length > 1) {\n\t\t\t\tthrow new GeneralError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\"multipleAssignersNotSupported\"\n\t\t\t\t);\n\t\t\t}\n\t\t\tproviderIdentity = assignerIds[0];\n\n\t\t\tdatasetId = this.extractDatasetId(agreement);\n\n\t\t\tawait this.validateCatalogDataset(datasetId, agreement);\n\n\t\t\tpolicies = [agreement];\n\t\t} catch (error) {\n\t\t\treturn transformToTransferError(error, { consumerPid: request.consumerPid, providerPid });\n\t\t}\n\n\t\tconst now = new Date();\n\n\t\tconst storageEntity: TransferProcess = {\n\t\t\tid: Converter.bytesToHex(RandomHelper.generate(32)),\n\t\t\tconsumerPid: request.consumerPid,\n\t\t\tproviderPid,\n\t\t\tstate: DataspaceProtocolTransferProcessStateType.REQUESTED,\n\t\t\tagreementId: request.agreementId,\n\t\t\tdatasetId,\n\t\t\tconsumerIdentity,\n\t\t\tproviderIdentity,\n\t\t\t// offerId should reference Catalog Offer (via Agreement)\n\t\t\t// For now, use agreementId as reference (proper flow: Catalog → Negotiation → Agreement)\n\t\t\tofferId: request.agreementId,\n\t\t\tpolicies,\n\t\t\tcallbackAddress: request.callbackAddress,\n\t\t\tformat: request.format,\n\t\t\tdataAddress: request.dataAddress,\n\t\t\tdateCreated: now.toISOString(),\n\t\t\tdateModified: now.toISOString()\n\t\t};\n\n\t\tawait this._transferProcessStorage.set(storageEntity);\n\n\t\tconst entity: ITransferProcess = this.storageEntityToModel(storageEntity);\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"transferProcessInitiated\",\n\t\t\tdata: {\n\t\t\t\tconsumerPid: request.consumerPid,\n\t\t\t\tproviderPid,\n\t\t\t\tagreementId: request.agreementId\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.TransferProcess,\n\t\t\tconsumerPid: entity.consumerPid,\n\t\t\tproviderPid: entity.providerPid,\n\t\t\tstate: entity.state\n\t\t};\n\t}\n\n\t// ----------------------------------------------------------------------------\n\t// PROVIDER SIDE OPERATIONS\n\t// ----------------------------------------------------------------------------\n\n\t/**\n\t * Start a Transfer Process.\n\t * Transitions Transfer Process from REQUESTED to STARTED state or resumes from SUSPENDED state.\n\t * @param message Transfer start message (DSP compliant).\n\t * @param publicOrigin The public origin URL of this service.\n\t * @param trustPayload Trust payload containing authorization information (Base64-encoded token).\n\t * @returns Transfer Start Message (DSP compliant) with dataAddress for PULL transfers, or TransferError if the operation fails.\n\t *\n\t * Role Performed: Provider / Consumer\n\t */\n\tpublic async startTransfer(\n\t\tmessage: IDataspaceProtocolTransferStartMessage,\n\t\tpublicOrigin: string,\n\t\ttrustPayload: unknown\n\t): Promise<IDataspaceProtocolTransferStartMessage | IDataspaceProtocolTransferError> {\n\t\tconst trustInfo = await TrustHelper.verifyTrust(\n\t\t\tthis._trustComponent,\n\t\t\ttrustPayload,\n\t\t\t\"startTransfer\"\n\t\t);\n\n\t\tconst validationFailures = await DataspaceProtocolHelper.validate(\n\t\t\tJsonLdHelper.toNodeObject(message)\n\t\t);\n\n\t\tif (validationFailures.length > 0) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"invalidTransferStartMessage\",\n\t\t\t\tdata: { validationFailures }\n\t\t\t});\n\n\t\t\treturn transformToTransferError(\n\t\t\t\tnew ValidationError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tnameof(message),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t),\n\t\t\t\tmessage\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst { entity, role } = await this.lookupTransferByMessage(message);\n\n\t\t\tthis.validateCallerIsProvider(trustInfo.identity, entity);\n\n\t\t\tif (\n\t\t\t\tentity.state !== DataspaceProtocolTransferProcessStateType.REQUESTED &&\n\t\t\t\tentity.state !== DataspaceProtocolTransferProcessStateType.SUSPENDED\n\t\t\t) {\n\t\t\t\treturn transformToTransferError(\n\t\t\t\t\tnew GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"invalidStateForStart\", {\n\t\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\t\tcurrentState: entity.state\n\t\t\t\t\t}),\n\t\t\t\t\tmessage\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tentity.state = DataspaceProtocolTransferProcessStateType.STARTED;\n\t\t\tentity.dateModified = new Date();\n\n\t\t\tawait this._transferProcessStorage.set(this.modelToStorageEntity(entity));\n\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"info\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"transferProcessStarted\",\n\t\t\t\tdata: {\n\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\trole\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst response: IDataspaceProtocolTransferStartMessage = {\n\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.TransferStartMessage,\n\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\tproviderPid: entity.providerPid\n\t\t\t};\n\n\t\t\t// ============================================================================\n\t\t\t// PULL vs PUSH Transfer Mode Detection (DSP Protocol)\n\t\t\t// ============================================================================\n\t\t\t// The transfer mode is determined by whether the consumer provided a dataAddress\n\t\t\t// in the original TransferRequestMessage:\n\t\t\t//\n\t\t\t// PULL Mode (dataAddress NOT provided by consumer):\n\t\t\t// - Consumer requests data but doesn't specify where to receive it\n\t\t\t// - Provider generates access token and returns dataAddress in TransferStartMessage\n\t\t\t// - Consumer uses the returned endpoint + token to PULL data from provider\n\t\t\t// - Flow: Consumer → GET /entities?consumerPid=X (with Bearer token) → Provider\n\t\t\t//\n\t\t\t// PUSH Mode (dataAddress PROVIDED by consumer):\n\t\t\t// - Consumer specifies endpoint where they want data sent (e.g., webhook URL)\n\t\t\t// - Provider will PUSH data to the consumer's specified endpoint\n\t\t\t// - Flow: Provider → POST to consumer's dataAddress endpoint → Consumer\n\t\t\t//\n\t\t\t// See: https://eclipse-dataspace-protocol-base.github.io/DataspaceProtocol/2025-1-err1/#transfer-start-message\n\t\t\t// ============================================================================\n\n\t\t\tif (Is.empty(entity.dataAddress)) {\n\t\t\t\tif (!Is.stringValue(this._dataPlanePath)) {\n\t\t\t\t\treturn transformToTransferError(\n\t\t\t\t\t\tnew GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"pullTransfersNotSupported\", {\n\t\t\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\t\t\tproviderPid: entity.providerPid\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tmessage\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Provider signs the data access token with its own identity.\n\t\t\t\t// The subject contains the transfer context claims that the data plane\n\t\t\t\t// will verify when the consumer presents this token.\n\t\t\t\tif (!Is.stringValue(entity.providerIdentity)) {\n\t\t\t\t\tthrow new GeneralError(\n\t\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\t\"providerIdentityMissing\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst accessToken = await this._trustComponent.generate(\n\t\t\t\t\tentity.providerIdentity,\n\t\t\t\t\tthis._overrideTrustGeneratorType,\n\t\t\t\t\t{\n\t\t\t\t\t\tsubject: {\n\t\t\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\t\t\tagreementId: entity.agreementId,\n\t\t\t\t\t\t\tdatasetId: entity.datasetId\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tconst tokenString = accessToken as string;\n\t\t\t\tconst fullEndpoint = `${publicOrigin}/${this._dataPlanePath}`;\n\n\t\t\t\tresponse.dataAddress = {\n\t\t\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.DataAddress,\n\t\t\t\t\tendpointType: DataspaceProtocolEndpointType.HttpsQueryEndpoint,\n\t\t\t\t\tendpoint: fullEndpoint,\n\t\t\t\t\tendpointProperties: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.EndpointProperty,\n\t\t\t\t\t\t\tname: \"authorization\",\n\t\t\t\t\t\t\tvalue: tokenString\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.EndpointProperty,\n\t\t\t\t\t\t\tname: \"authType\",\n\t\t\t\t\t\t\tvalue: \"bearer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t};\n\n\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\tlevel: \"info\",\n\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tts: Date.now(),\n\t\t\t\t\tmessage: \"dataAccessTokenGenerated\",\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\t\tendpoint: fullEndpoint,\n\t\t\t\t\t\ttransferMode: \"PULL\"\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// PUSH MODE: Provider will push data to consumer's specified endpoint\n\t\t\t\t// The consumer provided dataAddress in TransferRequestMessage, indicating\n\t\t\t\t// where they want data sent. Provider acknowledges and will push data there.\n\t\t\t\t//\n\t\t\t\t// TODO: PUSH transfer implementation (RFC-007 future work)\n\t\t\t\t// Implementation would need to:\n\t\t\t\t// 1. Generate provider's own trust token to authenticate when pushing to consumer\n\t\t\t\t// 2. Validate consumer's dataAddress endpoint is reachable\n\t\t\t\t// 3. Extract any consumer-provided authorization from endpointProperties\n\t\t\t\t// 4. Schedule background task to push data to consumer's endpoint\n\t\t\t\t// 5. POST data to entity.dataAddress.endpoint with provider's trust token\n\t\t\t\t// 6. Implement retry logic with exponential backoff\n\t\t\t\t// 7. Send TransferCompletionMessage when push completes successfully\n\t\t\t\t//\n\t\t\t\t// Trust flow for PUSH (mirror of PULL):\n\t\t\t\t// - PULL: Provider generates token → Consumer uses to authenticate when pulling\n\t\t\t\t// - PUSH: Provider generates token → Provider uses to authenticate when pushing\n\n\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tts: Date.now(),\n\t\t\t\t\tmessage: \"pushTransferModeNotImplemented\",\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\t\tconsumerEndpoint: entity.dataAddress.endpoint,\n\t\t\t\t\t\ttransferMode: \"PUSH\"\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn response;\n\t\t} catch (error) {\n\t\t\treturn transformToTransferError(error, message);\n\t\t}\n\t}\n\n\t// ----------------------------------------------------------------------------\n\t// SHARED STATE MANAGEMENT OPERATIONS (Either Side)\n\t// ----------------------------------------------------------------------------\n\n\t/**\n\t * Complete a Transfer Process.\n\t * @param message Transfer completion message (DSP compliant).\n\t * @param trustPayload Trust payload containing authorization information (Base64-encoded token).\n\t * @returns Transfer Process (DSP compliant) with state COMPLETED, or TransferError if the operation fails.\n\t */\n\tpublic async completeTransfer(\n\t\tmessage: IDataspaceProtocolTransferCompletionMessage,\n\t\ttrustPayload: unknown\n\t): Promise<IDataspaceProtocolTransferProcess | IDataspaceProtocolTransferError> {\n\t\tconst trustInfo = await TrustHelper.verifyTrust(\n\t\t\tthis._trustComponent,\n\t\t\ttrustPayload,\n\t\t\t\"completeTransfer\"\n\t\t);\n\n\t\tconst validationFailures = await DataspaceProtocolHelper.validate(\n\t\t\tJsonLdHelper.toNodeObject(message)\n\t\t);\n\n\t\tif (validationFailures.length > 0) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"invalidTransferCompletionMessage\",\n\t\t\t\tdata: { validationFailures }\n\t\t\t});\n\n\t\t\treturn transformToTransferError(\n\t\t\t\tnew ValidationError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tnameof(message),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t),\n\t\t\t\tmessage\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst { entity, role } = await this.lookupTransferByMessage(message);\n\n\t\t\tthis.validateCallerIsConsumer(trustInfo.identity, entity);\n\n\t\t\tif (entity.state !== DataspaceProtocolTransferProcessStateType.STARTED) {\n\t\t\t\treturn transformToTransferError(\n\t\t\t\t\tnew GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"invalidStateForComplete\", {\n\t\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\t\tcurrentState: entity.state\n\t\t\t\t\t}),\n\t\t\t\t\tmessage\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tentity.state = DataspaceProtocolTransferProcessStateType.COMPLETED;\n\t\t\tentity.dateModified = new Date();\n\n\t\t\tawait this._transferProcessStorage.set(this.modelToStorageEntity(entity));\n\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"info\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"transferProcessCompleted\",\n\t\t\t\tdata: {\n\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\trole\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.TransferProcess,\n\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\tstate: entity.state\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn transformToTransferError(error, message);\n\t\t}\n\t}\n\n\t/**\n\t * Suspend a Transfer Process.\n\t * @param message Transfer suspension message (DSP compliant).\n\t * @param trustPayload Trust payload containing authorization information (Base64-encoded token).\n\t * @returns Transfer Process (DSP compliant) with state SUSPENDED, or TransferError if the operation fails.\n\t */\n\tpublic async suspendTransfer(\n\t\tmessage: IDataspaceProtocolTransferSuspensionMessage,\n\t\ttrustPayload: unknown\n\t): Promise<IDataspaceProtocolTransferProcess | IDataspaceProtocolTransferError> {\n\t\tconst trustInfo = await TrustHelper.verifyTrust(\n\t\t\tthis._trustComponent,\n\t\t\ttrustPayload,\n\t\t\t\"suspendTransfer\"\n\t\t);\n\n\t\tconst validationFailures = await DataspaceProtocolHelper.validate(\n\t\t\tJsonLdHelper.toNodeObject(message)\n\t\t);\n\n\t\tif (validationFailures.length > 0) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"invalidTransferSuspensionMessage\",\n\t\t\t\tdata: { validationFailures }\n\t\t\t});\n\n\t\t\treturn transformToTransferError(\n\t\t\t\tnew ValidationError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tnameof(message),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t),\n\t\t\t\tmessage\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst { entity, role } = await this.lookupTransferByMessage(message);\n\n\t\t\tthis.validateCallerIsTransferParty(trustInfo.identity, entity);\n\n\t\t\tif (entity.state !== DataspaceProtocolTransferProcessStateType.STARTED) {\n\t\t\t\treturn transformToTransferError(\n\t\t\t\t\tnew GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"invalidStateForSuspend\", {\n\t\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\t\tcurrentState: entity.state\n\t\t\t\t\t}),\n\t\t\t\t\tmessage\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tentity.state = DataspaceProtocolTransferProcessStateType.SUSPENDED;\n\t\t\tentity.dateModified = new Date();\n\n\t\t\tawait this._transferProcessStorage.set(this.modelToStorageEntity(entity));\n\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"info\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"transferProcessSuspended\",\n\t\t\t\tdata: {\n\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\trole,\n\t\t\t\t\treason: message.reason\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.TransferProcess,\n\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\tstate: entity.state\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn transformToTransferError(error, message);\n\t\t}\n\t}\n\n\t/**\n\t * Terminate a Transfer Process.\n\t * @param message Transfer termination message (DSP compliant).\n\t * @param trustPayload Trust payload containing authorization information (Base64-encoded token).\n\t * @returns Transfer Process (DSP compliant) with state TERMINATED, or TransferError if the operation fails.\n\t */\n\tpublic async terminateTransfer(\n\t\tmessage: IDataspaceProtocolTransferTerminationMessage,\n\t\ttrustPayload: unknown\n\t): Promise<IDataspaceProtocolTransferProcess | IDataspaceProtocolTransferError> {\n\t\tconst trustInfo = await TrustHelper.verifyTrust(\n\t\t\tthis._trustComponent,\n\t\t\ttrustPayload,\n\t\t\t\"terminateTransfer\"\n\t\t);\n\n\t\tconst validationFailures = await DataspaceProtocolHelper.validate(\n\t\t\tJsonLdHelper.toNodeObject(message)\n\t\t);\n\n\t\tif (validationFailures.length > 0) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"invalidTransferTerminationMessage\",\n\t\t\t\tdata: { validationFailures }\n\t\t\t});\n\n\t\t\treturn transformToTransferError(\n\t\t\t\tnew ValidationError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tnameof(message),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t),\n\t\t\t\tmessage\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst { entity, role } = await this.lookupTransferByMessage(message);\n\n\t\t\tthis.validateCallerIsTransferParty(trustInfo.identity, entity);\n\n\t\t\tentity.state = DataspaceProtocolTransferProcessStateType.TERMINATED;\n\t\t\tentity.dateModified = new Date();\n\n\t\t\tawait this._transferProcessStorage.set(this.modelToStorageEntity(entity));\n\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"info\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"transferProcessTerminated\",\n\t\t\t\tdata: {\n\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\trole,\n\t\t\t\t\treason: message.reason\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.TransferProcess,\n\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\tstate: entity.state\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn transformToTransferError(error, message);\n\t\t}\n\t}\n\n\t/**\n\t * Get Transfer Process state.\n\t * @param pid Process ID (consumerPid or providerPid).\n\t * @param trustPayload Trust payload containing authorization information (Base64-encoded token).\n\t * @returns Transfer Process (DSP compliant) with current state, or TransferError if the operation fails.\n\t */\n\tpublic async getTransferProcess(\n\t\tpid: string,\n\t\ttrustPayload: unknown\n\t): Promise<IDataspaceProtocolTransferProcess | IDataspaceProtocolTransferError> {\n\t\tconst trustInfo = await TrustHelper.verifyTrust(\n\t\t\tthis._trustComponent,\n\t\t\ttrustPayload,\n\t\t\t\"getTransferProcess\"\n\t\t);\n\n\t\ttry {\n\t\t\tconst { entity, role } = await this.lookupTransferByPid(pid);\n\n\t\t\tthis.validateCallerIsTransferParty(trustInfo.identity, entity);\n\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"info\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"transferProcessQueried\",\n\t\t\t\tdata: {\n\t\t\t\t\tpid,\n\t\t\t\t\trole,\n\t\t\t\t\tstate: entity.state\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.TransferProcess,\n\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\tstate: entity.state\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn transformToTransferError(error, { consumerPid: pid, providerPid: pid });\n\t\t}\n\t}\n\n\t// ============================================================================\n\t// CONTRACT NEGOTIATION\n\t// ============================================================================\n\n\t/**\n\t * Negotiate a contract agreement with a provider.\n\t * Returns immediately with a negotiationId. The caller is notified\n\t * via the registered INegotiationCallback when the negotiation completes.\n\t *\n\t * @param datasetId The dataset ID from the provider's catalog.\n\t * @param offerId The offer ID from the provider's catalog.\n\t * @param providerEndpoint The provider's contract negotiation endpoint URL.\n\t * @param publicOrigin The public origin URL of this control plane (for callbacks).\n\t * @param trustPayload The trust payload for authentication.\n\t * @returns The negotiation ID. Use the registered callback for completion notification.\n\t */\n\tpublic async negotiateAgreement(\n\t\tdatasetId: string,\n\t\tofferId: string,\n\t\tproviderEndpoint: string,\n\t\tpublicOrigin: string,\n\t\ttrustPayload: unknown\n\t): Promise<{ negotiationId: string }> {\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(datasetId), datasetId);\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(offerId), offerId);\n\t\tGuards.stringValue(\n\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\tnameof(providerEndpoint),\n\t\t\tproviderEndpoint\n\t\t);\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(publicOrigin), publicOrigin);\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"startingContractNegotiation\",\n\t\t\tdata: { datasetId, offerId, providerEndpoint, publicOrigin }\n\t\t});\n\n\t\tconst catalogResult = await this._federatedCatalogueComponent.get(datasetId);\n\n\t\tif (isCatalogError(catalogResult)) {\n\t\t\tif (isCatalogErrorName(catalogResult, NotFoundError.CLASS_NAME)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\"datasetNotFoundInCatalog\",\n\t\t\t\t\tdatasetId,\n\t\t\t\t\t{\n\t\t\t\t\t\tdatasetId,\n\t\t\t\t\t\tofferId,\n\t\t\t\t\t\tproviderEndpoint\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new GeneralError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"catalogLookupFailedForNegotiation\",\n\t\t\t\t{\n\t\t\t\t\tdatasetId,\n\t\t\t\t\tofferId,\n\t\t\t\t\tproviderEndpoint,\n\t\t\t\t\terrorCode: catalogResult.code\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tconst rawOffers = this.getCatalogDatasetPolicies(catalogResult);\n\n\t\tif (!Is.arrayValue(rawOffers)) {\n\t\t\tthrow new GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"datasetHasNoOffers\", {\n\t\t\t\tofferId,\n\t\t\t\tdatasetId: getJsonLdId(catalogResult) ?? \"\"\n\t\t\t});\n\t\t}\n\n\t\tconst catalogOffers = rawOffers.filter(offer => Is.object<IDataspaceProtocolPolicy>(offer));\n\n\t\tif (!Is.arrayValue(catalogOffers)) {\n\t\t\tthrow new GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"datasetHasNoValidOffers\", {\n\t\t\t\tofferId,\n\t\t\t\tdatasetId: getJsonLdId(catalogResult) ?? \"\"\n\t\t\t});\n\t\t}\n\n\t\tconst matchingOffer = catalogOffers.find((offer: IDataspaceProtocolPolicy) => {\n\t\t\tconst offerUid = OdrlPolicyHelper.getUid(offer);\n\t\t\treturn offerUid === offerId;\n\t\t});\n\n\t\tif (!matchingOffer) {\n\t\t\tconst availableOffers = catalogOffers\n\t\t\t\t.map((o: IDataspaceProtocolPolicy) => OdrlPolicyHelper.getUid(o) ?? \"unknown\")\n\t\t\t\t.join(\", \");\n\n\t\t\tthrow new NotFoundError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"offerNotFoundInDataset\",\n\t\t\t\tofferId,\n\t\t\t\t{\n\t\t\t\t\tofferId,\n\t\t\t\t\tdatasetId: getJsonLdId(catalogResult) ?? \"\",\n\t\t\t\t\tavailableOffers\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"offerFoundInCatalog\",\n\t\t\tdata: {\n\t\t\t\tofferId,\n\t\t\t\tdatasetId: getJsonLdId(catalogResult) ?? \"\",\n\t\t\t\tofferType: getJsonLdType(matchingOffer)\n\t\t\t}\n\t\t});\n\n\t\tconst negotiationId = await this._policyNegotiationPointComponent.sendRequestToProvider(\n\t\t\tproviderEndpoint,\n\t\t\tDataspaceControlPlaneService._REQUESTER_TYPE,\n\t\t\tofferId,\n\t\t\tpublicOrigin\n\t\t);\n\n\t\tif (!negotiationId) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"negotiationInitiationFailed\",\n\t\t\t\t{\n\t\t\t\t\tofferId,\n\t\t\t\t\tproviderEndpoint\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tthis._policyRequester.trackNegotiation(negotiationId);\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"negotiationInitiated\",\n\t\t\tdata: { negotiationId, offerId }\n\t\t});\n\n\t\treturn { negotiationId };\n\t}\n\n\t/**\n\t * Get the current state of a contract negotiation.\n\t * @param negotiationId The unique identifier of the negotiation.\n\t * @param trustPayload The trust payload for authentication.\n\t * @returns Current state of the negotiation.\n\t */\n\tpublic async getNegotiation(\n\t\tnegotiationId: string,\n\t\ttrustPayload: unknown\n\t): Promise<IDataspaceProtocolContractNegotiation | IDataspaceProtocolContractNegotiationError> {\n\t\tGuards.stringValue(\n\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\tnameof(negotiationId),\n\t\t\tnegotiationId\n\t\t);\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"getNegotiation\",\n\t\t\tdata: { negotiationId }\n\t\t});\n\n\t\tconst result = await this._policyNegotiationPointComponent.getNegotiation(\n\t\t\tnegotiationId,\n\t\t\ttrustPayload\n\t\t);\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"negotiationStateRetrieved\",\n\t\t\tdata: {\n\t\t\t\tnegotiationId,\n\t\t\t\ttype: getJsonLdType(result),\n\t\t\t\tstate: (result as IDataspaceProtocolContractNegotiation).state\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Get negotiation history.\n\t * @param state Optional filter by negotiation state.\n\t * @param cursor Optional pagination cursor.\n\t * @param trustPayload Trust payload for authentication.\n\t * @returns List of negotiation history entries with pagination.\n\t */\n\tpublic async getNegotiationHistory(\n\t\tstate: string | undefined,\n\t\tcursor: string | undefined,\n\t\ttrustPayload: unknown\n\t): Promise<{\n\t\tnegotiations: {\n\t\t\tnegotiation:\n\t\t\t\t| IDataspaceProtocolContractNegotiation\n\t\t\t\t| IDataspaceProtocolContractNegotiationError;\n\t\t\tcreatedAt: string;\n\t\t\tofferId?: string;\n\t\t\tagreementId?: string;\n\t\t}[];\n\t\tcursor?: string;\n\t\tcount: number;\n\t}> {\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"getNegotiationHistory\",\n\t\t\tdata: { state, cursor }\n\t\t});\n\n\t\tif (!this._policyNegotiationAdminPointComponent) {\n\t\t\tthrow new GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"pnapNotConfigured\", {\n\t\t\t\tmessage:\n\t\t\t\t\t\"Policy Negotiation Admin Point not configured. \" +\n\t\t\t\t\t\"Set policyNegotiationAdminPointComponentType in constructor options.\"\n\t\t\t});\n\t\t}\n\n\t\tconst { items: pnapNegotiations, cursor: nextCursor } =\n\t\t\tawait this._policyNegotiationAdminPointComponent.query(\n\t\t\t\tstate as DataspaceProtocolContractNegotiationStateType | undefined,\n\t\t\t\tcursor\n\t\t\t);\n\n\t\tconst negotiations = pnapNegotiations.map(pnapNeg => {\n\t\t\tconst dspNegotiation: IDataspaceProtocolContractNegotiation = {\n\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\"@type\": DataspaceProtocolContractNegotiationTypes.ContractNegotiation,\n\t\t\t\tconsumerPid: pnapNeg.id,\n\t\t\t\tproviderPid: pnapNeg.correlationId,\n\t\t\t\tstate: pnapNeg.state\n\t\t\t};\n\n\t\t\treturn {\n\t\t\t\tnegotiation: dspNegotiation,\n\t\t\t\tcreatedAt: pnapNeg.dateCreated,\n\t\t\t\tofferId: OdrlPolicyHelper.getUid(pnapNeg.offer),\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(pnapNeg.agreement)\n\t\t\t};\n\t\t});\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"negotiationHistoryRetrieved\",\n\t\t\tdata: {\n\t\t\t\tcount: negotiations.length,\n\t\t\t\tstate,\n\t\t\t\thasCursor: Boolean(nextCursor)\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tnegotiations,\n\t\t\tcursor: nextCursor,\n\t\t\tcount: negotiations.length\n\t\t};\n\t}\n\n\t// ============================================================================\n\t// RESOLVER METHODS - IDataspaceControlPlaneResolverComponent\n\t// ============================================================================\n\n\t/**\n\t * Resolve consumerPid to Transfer Context.\n\t * @param consumerPid Consumer Process ID.\n\t * @param trustPayload Trust payload containing authorization information (Base64-encoded token).\n\t * @returns Transfer Context with Agreement, datasetId, and Transfer Process metadata.\n\t */\n\tpublic async resolveConsumerPid(\n\t\tconsumerPid: string,\n\t\ttrustPayload: unknown\n\t): Promise<ITransferContext> {\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(consumerPid), consumerPid);\n\n\t\tawait TrustHelper.verifyTrust(this._trustComponent, trustPayload, \"resolveConsumerPid\");\n\n\t\tconst storageEntity = await this._transferProcessStorage.get(consumerPid);\n\n\t\tif (!storageEntity) {\n\t\t\tthrow new NotFoundError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"transferProcessNotFound\",\n\t\t\t\tundefined,\n\t\t\t\t{ consumerPid }\n\t\t\t);\n\t\t}\n\n\t\tconst entity = this.storageEntityToModel(storageEntity);\n\n\t\tif (entity.state === DataspaceProtocolTransferProcessStateType.TERMINATED) {\n\t\t\tthrow new GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"transferProcessTerminated\", {\n\t\t\t\tconsumerPid\n\t\t\t});\n\t\t}\n\n\t\tconst agreement = await this.lookupAgreement(entity.agreementId);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tconst currentOrgId = contextIds?.[ContextIdKeys.Organization];\n\n\t\tif (!currentOrgId) {\n\t\t\tthrow new UnauthorizedError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"organizationContextMissing\",\n\t\t\t\t{\n\t\t\t\t\tconsumerPid\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tconst assignerIdentity = OdrlPolicyHelper.extractAssignerIdentity(agreement);\n\t\tconst assignerIds = ArrayHelper.fromObjectOrArray<string>(assignerIdentity);\n\n\t\tif (!assignerIds.includes(currentOrgId)) {\n\t\t\tthrow new UnauthorizedError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"agreementAssignerMismatch\",\n\t\t\t\t{\n\t\t\t\t\tconsumerPid,\n\t\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement),\n\t\t\t\t\texpectedOrgId: currentOrgId,\n\t\t\t\t\tactualAssigner: assignerIds.join(\", \")\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"resolvedConsumerPid\",\n\t\t\tdata: {\n\t\t\t\tconsumerPid,\n\t\t\t\tdatasetId: entity.datasetId,\n\t\t\t\tstate: entity.state,\n\t\t\t\tconsumerIdentity: entity.consumerIdentity,\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement),\n\t\t\t\torganizationId: currentOrgId\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tconsumerPid: entity.consumerPid,\n\t\t\tproviderPid: entity.providerPid,\n\t\t\tagreement,\n\t\t\tdatasetId: entity.datasetId,\n\t\t\tofferId: entity.offerId,\n\t\t\tstate: entity.state,\n\t\t\tconsumerIdentity: entity.consumerIdentity,\n\t\t\tproviderIdentity: entity.providerIdentity,\n\t\t\tdataAddress: entity.dataAddress\n\t\t};\n\t}\n\n\t/**\n\t * Resolve providerPid to Transfer Context.\n\t * @param providerPid Provider Process ID.\n\t * @param trustPayload Trust payload containing authorization information (Base64-encoded token).\n\t * @returns Transfer Context with Agreement, datasetId, and Transfer Process metadata.\n\t */\n\tpublic async resolveProviderPid(\n\t\tproviderPid: string,\n\t\ttrustPayload: unknown\n\t): Promise<ITransferContext> {\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(providerPid), providerPid);\n\n\t\tawait TrustHelper.verifyTrust(this._trustComponent, trustPayload, \"resolveProviderPid\");\n\n\t\tconst { entity } = await this.lookupTransferByPid(providerPid);\n\n\t\tif (entity.state === DataspaceProtocolTransferProcessStateType.TERMINATED) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"transferProcessTerminatedProvider\",\n\t\t\t\t{\n\t\t\t\t\tproviderPid\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tconst agreement = await this.lookupAgreement(entity.agreementId);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tconst currentOrgId = contextIds?.[ContextIdKeys.Organization];\n\n\t\tif (!currentOrgId) {\n\t\t\tthrow new UnauthorizedError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"organizationContextMissingProvider\",\n\t\t\t\t{\n\t\t\t\t\tproviderPid\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\t// Extract assigner UID (can be string, array, or IOdrlParty object)\n\n\t\tconst assignerIdentity = OdrlPolicyHelper.extractAssignerIdentity(agreement);\n\t\tconst assignerIds = ArrayHelper.fromObjectOrArray<string>(assignerIdentity);\n\n\t\tif (!assignerIds.includes(currentOrgId)) {\n\t\t\tthrow new UnauthorizedError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"agreementAssignerMismatchProvider\",\n\t\t\t\t{\n\t\t\t\t\tproviderPid,\n\t\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement),\n\t\t\t\t\texpectedOrgId: currentOrgId,\n\t\t\t\t\tactualAssigner: assignerIds.join(\", \")\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\t// Validate that Agreement assignee matches expected consumer identity\n\t\t// This ensures we're pushing to the correct consumer\n\t\t// If assignee is undefined but consumerIdentity has a value, this is also a mismatch\n\t\tconst assigneeIdentity = OdrlPolicyHelper.extractAssigneeIdentity(agreement);\n\t\tconst assigneeIds = ArrayHelper.fromObjectOrArray<string>(assigneeIdentity);\n\n\t\tif (\n\t\t\t!Is.stringValue(entity.consumerIdentity) ||\n\t\t\t!assigneeIds.includes(entity.consumerIdentity)\n\t\t) {\n\t\t\tthrow new UnauthorizedError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"agreementAssigneeMismatch\",\n\t\t\t\t{\n\t\t\t\t\tproviderPid,\n\t\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement),\n\t\t\t\t\texpectedConsumerIdentity: entity.consumerIdentity,\n\t\t\t\t\tactualAssignee: assigneeIds.join(\", \")\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"resolvedProviderPid\",\n\t\t\tdata: {\n\t\t\t\tproviderPid,\n\t\t\t\tdatasetId: entity.datasetId,\n\t\t\t\tstate: entity.state,\n\t\t\t\tconsumerIdentity: entity.consumerIdentity,\n\t\t\t\tproviderIdentity: entity.providerIdentity,\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement),\n\t\t\t\torganizationId: currentOrgId\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tconsumerPid: entity.consumerPid,\n\t\t\tproviderPid: entity.providerPid,\n\t\t\tagreement,\n\t\t\tdatasetId: entity.datasetId,\n\t\t\tofferId: entity.offerId,\n\t\t\tstate: entity.state,\n\t\t\tconsumerIdentity: entity.consumerIdentity,\n\t\t\tproviderIdentity: entity.providerIdentity,\n\t\t\tdataAddress: entity.dataAddress\n\t\t};\n\t}\n\n\t// ============================================================================\n\t// PRIVATE HELPER METHODS\n\t// ============================================================================\n\n\t/**\n\t * Cleanup stalled negotiations.\n\t * Called periodically by the task scheduler.\n\t * @internal\n\t */\n\tprivate async cleanupStalledNegotiations(): Promise<void> {\n\t\tconst now = Date.now();\n\t\tconst stalled: string[] = [];\n\n\t\tfor (const [negotiationId, state] of this._policyRequester.getActiveNegotiations()) {\n\t\t\tif (now - state.updatedAt > STALLED_NEGOTIATION_THRESHOLD_MS) {\n\t\t\t\tstalled.push(negotiationId);\n\t\t\t}\n\t\t}\n\n\t\tfor (const negotiationId of stalled) {\n\t\t\tthis._policyRequester.removeNegotiation(negotiationId);\n\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"warn\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"stalledNegotiationCleanedUp\",\n\t\t\t\tdata: { negotiationId }\n\t\t\t});\n\n\t\t\tfor (const [key, cb] of this._negotiationCallbacks.entries()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait cb.onFailed(negotiationId, \"negotiationStalled\");\n\t\t\t\t} catch (error) {\n\t\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\tts: Date.now(),\n\t\t\t\t\t\tmessage: \"negotiationCallbackError\",\n\t\t\t\t\t\tdata: { key, negotiationId, method: \"onFailed\", error }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (stalled.length > 0) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"info\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"stalledNegotiationsCleanupComplete\",\n\t\t\t\tdata: { cleanedUp: stalled.length }\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Convert a storage entity to model.\n\t * @param storageEntity The entity from storage.\n\t * @returns The model representation.\n\t * @internal\n\t */\n\tprivate storageEntityToModel(storageEntity: TransferProcess): ITransferProcess {\n\t\treturn {\n\t\t\tid: storageEntity.id,\n\t\t\tconsumerPid: storageEntity.consumerPid,\n\t\t\tproviderPid: storageEntity.providerPid,\n\t\t\tstate: storageEntity.state,\n\t\t\tagreementId: storageEntity.agreementId,\n\t\t\tdatasetId: storageEntity.datasetId,\n\t\t\tofferId: storageEntity.offerId,\n\t\t\tconsumerIdentity: storageEntity.consumerIdentity,\n\t\t\tproviderIdentity: storageEntity.providerIdentity,\n\t\t\tformat: storageEntity.format,\n\t\t\tcallbackAddress: storageEntity.callbackAddress,\n\t\t\tdateCreated: new Date(storageEntity.dateCreated),\n\t\t\tdateModified: new Date(storageEntity.dateModified),\n\t\t\tpolicies: storageEntity.policies,\n\t\t\tdataAddress: storageEntity.dataAddress\n\t\t};\n\t}\n\n\t/**\n\t * Convert a model to storage entity.\n\t * @param entity The model representation.\n\t * @returns The entity for storage.\n\t * @internal\n\t */\n\tprivate modelToStorageEntity(entity: ITransferProcess): TransferProcess {\n\t\treturn {\n\t\t\tid: entity.id,\n\t\t\tconsumerPid: entity.consumerPid,\n\t\t\tproviderPid: entity.providerPid,\n\t\t\tstate: entity.state,\n\t\t\tagreementId: entity.agreementId,\n\t\t\tdatasetId: entity.datasetId,\n\t\t\tofferId: entity.offerId,\n\t\t\tconsumerIdentity: entity.consumerIdentity,\n\t\t\tproviderIdentity: entity.providerIdentity,\n\t\t\tformat: entity.format,\n\t\t\tcallbackAddress: entity.callbackAddress,\n\t\t\tdateCreated: entity.dateCreated.toISOString(),\n\t\t\tdateModified: entity.dateModified.toISOString(),\n\t\t\tpolicies: entity.policies,\n\t\t\tdataAddress: entity.dataAddress\n\t\t};\n\t}\n\n\t/**\n\t * Look up Agreement from PAP.\n\t * @param agreementId Agreement ID.\n\t * @returns Agreement.\n\t * @internal\n\t */\n\tprivate async lookupAgreement(agreementId: string): Promise<IDataspaceProtocolAgreement> {\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(agreementId), agreementId);\n\n\t\tlet agreement;\n\t\ttry {\n\t\t\tagreement = await this._policyAdministrationPointComponent.getAgreement(agreementId);\n\t\t} catch (error) {\n\t\t\tif (BaseError.isErrorName(error, NotFoundError.CLASS_NAME)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tthrow new GeneralError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"agreementLookupFailed\",\n\t\t\t\t{ agreementId },\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\n\t\treturn agreement;\n\t}\n\n\t/**\n\t * Validate that the caller's verified identity matches the consumer of a transfer process.\n\t * @param callerIdentity The identity from the verified trust token.\n\t * @param entity The transfer process entity.\n\t * @throws UnauthorizedError if the caller is not the consumer.\n\t * @internal\n\t */\n\tprivate validateCallerIsConsumer(callerIdentity: string, entity: ITransferProcess): void {\n\t\tif (callerIdentity !== entity.consumerIdentity) {\n\t\t\tthrow new UnauthorizedError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"callerNotAuthorizedAsConsumer\"\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Validate that the caller's verified identity matches the provider of a transfer process.\n\t * @param callerIdentity The identity from the verified trust token.\n\t * @param entity The transfer process entity.\n\t * @throws UnauthorizedError if the caller is not the provider.\n\t * @internal\n\t */\n\tprivate validateCallerIsProvider(callerIdentity: string, entity: ITransferProcess): void {\n\t\tif (callerIdentity !== entity.providerIdentity) {\n\t\t\tthrow new UnauthorizedError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"callerNotAuthorizedAsProvider\"\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Validate that the caller's verified identity matches either the consumer or provider of a transfer process.\n\t * @param callerIdentity The identity from the verified trust token.\n\t * @param entity The transfer process entity.\n\t * @throws UnauthorizedError if the caller is not a party to the transfer.\n\t * @internal\n\t */\n\tprivate validateCallerIsTransferParty(callerIdentity: string, entity: ITransferProcess): void {\n\t\tif (callerIdentity !== entity.consumerIdentity && callerIdentity !== entity.providerIdentity) {\n\t\t\tthrow new UnauthorizedError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"callerNotAuthorizedForTransfer\"\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Extract dataset ID from Agreement target.\n\t * @param agreement Agreement.\n\t * @returns Dataset ID.\n\t * @internal\n\t */\n\tprivate extractDatasetId(agreement: IDataspaceProtocolAgreement): string {\n\t\tif (Is.empty(agreement.target)) {\n\t\t\tthrow new GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"agreementMissingTarget\", {\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement)\n\t\t\t});\n\t\t}\n\n\t\tconst targetIds = OdrlPolicyHelper.getTargets(agreement);\n\n\t\tif (targetIds.length === 0) {\n\t\t\tthrow new GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"agreementTargetMissingUid\", {\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement)\n\t\t\t});\n\t\t}\n\n\t\t// Validate single target, multiple targets are not currently supported\n\t\tif (targetIds.length > 1) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"agreementMultipleTargetsNotSupported\",\n\t\t\t\t{\n\t\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement),\n\t\t\t\t\ttargetCount: targetIds.length\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\treturn targetIds[0];\n\t}\n\n\t/**\n\t * Validate that the dataset exists in the Federated Catalogue.\n\t * @param datasetId Dataset identifier extracted from Agreement.\n\t * @param agreement The Agreement being validated.\n\t * @internal\n\t */\n\tprivate async validateCatalogDataset(\n\t\tdatasetId: string,\n\t\tagreement: IDataspaceProtocolAgreement\n\t): Promise<void> {\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(datasetId), datasetId);\n\t\tGuards.object<IDataspaceProtocolAgreement>(\n\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\tnameof(agreement),\n\t\t\tagreement\n\t\t);\n\n\t\t// Lookup dataset in catalog\n\t\tconst catalogResult = await this._federatedCatalogueComponent.get(datasetId);\n\n\t\tif (isCatalogError(catalogResult)) {\n\t\t\tif (isCatalogErrorName(catalogResult, NotFoundError.CLASS_NAME)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\"datasetNotInCatalog\",\n\t\t\t\t\tdatasetId,\n\t\t\t\t\t{\n\t\t\t\t\t\tdatasetId,\n\t\t\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement)\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow new GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"catalogLookupFailed\", {\n\t\t\t\tdatasetId,\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement) ?? \"\",\n\t\t\t\terrorCode: catalogResult.code\n\t\t\t});\n\t\t}\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"catalogDatasetFound\",\n\t\t\tdata: {\n\t\t\t\tdatasetId,\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement) ?? \"\",\n\t\t\t\tdatasetTitle: catalogResult[\"dcterms:title\"]\n\t\t\t}\n\t\t});\n\n\t\tawait this.validateAgreementMatchesOffer(agreement, catalogResult);\n\t}\n\n\t/**\n\t * Extract PID from DSP message and lookup Transfer Process with role detection.\n\t * @param message DSP protocol message with consumerPid and/or providerPid fields.\n\t * @returns Transfer Process entity and our role in this transfer.\n\t * @internal\n\t */\n\tprivate async lookupTransferByMessage(message: {\n\t\tconsumerPid?: string;\n\t\tproviderPid?: string;\n\t}): Promise<{\n\t\tentity: ITransferProcess;\n\t\trole: TransferProcessRole;\n\t}> {\n\t\tconst pid = message.consumerPid ?? message.providerPid;\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, \"pid\", pid);\n\n\t\treturn this.lookupTransferByPid(pid);\n\t}\n\n\t/**\n\t * Lookup Transfer Process by PID and determine our role.\n\t * @param pid Either consumerPid or providerPid.\n\t * @returns Transfer Process entity and our role in this transfer.\n\t * @internal\n\t */\n\tprivate async lookupTransferByPid(pid: string): Promise<{\n\t\tentity: ITransferProcess;\n\t\trole: TransferProcessRole;\n\t}> {\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(pid), pid);\n\n\t\t// Check if pid is a consumerPid (primary key lookup)\n\t\tconst storageEntity = await this._transferProcessStorage.get(pid);\n\n\t\tif (storageEntity) {\n\t\t\treturn {\n\t\t\t\tentity: this.storageEntityToModel(storageEntity),\n\t\t\t\trole: TransferProcessRole.Consumer\n\t\t\t};\n\t\t}\n\n\t\t// Check if pid is a providerPid (secondary key lookup)\n\t\tconst providerPidEntity = await this._transferProcessStorage.get(pid, \"providerPid\");\n\t\tif (providerPidEntity) {\n\t\t\treturn {\n\t\t\t\tentity: this.storageEntityToModel(providerPidEntity),\n\t\t\t\trole: TransferProcessRole.Provider\n\t\t\t};\n\t\t}\n\n\t\tthrow new NotFoundError(\n\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\"transferProcessNotFound\",\n\t\t\tpid,\n\t\t\t{\n\t\t\t\tpid\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Get raw policy entries from a catalog dataset.\n\t * @param catalogDataset Catalog dataset.\n\t * @returns Raw policy entries.\n\t * @internal\n\t */\n\tprivate getCatalogDatasetPolicies(\n\t\tcatalogDataset: IDcatDataset | IDataspaceProtocolDataset\n\t): JsonLdObjectWithNoContext<IDataspaceProtocolPolicy>[] {\n\t\t// Support both \"odrl:hasPolicy\" and \"hasPolicy\" to accommodate different catalog implementations\n\t\tif (Is.object<IDcatDataset>(catalogDataset) && !Is.empty(catalogDataset[\"odrl:hasPolicy\"])) {\n\t\t\tconst items = ArrayHelper.fromObjectOrArray(catalogDataset[\"odrl:hasPolicy\"]) ?? [];\n\t\t\treturn items.map(item => ({\n\t\t\t\t...item,\n\t\t\t\t\"@id\": OdrlPolicyHelper.getUid(item) ?? \"\"\n\t\t\t}));\n\t\t}\n\n\t\tif (\n\t\t\tIs.object<IDataspaceProtocolDataset>(catalogDataset) &&\n\t\t\t!Is.empty(catalogDataset.hasPolicy)\n\t\t) {\n\t\t\treturn ArrayHelper.fromObjectOrArray(catalogDataset.hasPolicy) ?? [];\n\t\t}\n\n\t\treturn [];\n\t}\n\n\t/**\n\t * Validate that the Agreement policies match at least one Catalog Offer.\n\t * @param agreement Agreement to validate.\n\t * @param catalogDataset Catalog dataset containing Offers.\n\t * @internal\n\t */\n\tprivate async validateAgreementMatchesOffer(\n\t\tagreement: IDataspaceProtocolAgreement,\n\t\tcatalogDataset: IDcatDataset\n\t): Promise<void> {\n\t\tGuards.object<IDataspaceProtocolAgreement>(\n\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\tnameof(agreement),\n\t\t\tagreement\n\t\t);\n\t\tGuards.object<IDcatDataset>(\n\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\tnameof(catalogDataset),\n\t\t\tcatalogDataset\n\t\t);\n\n\t\tconst datasetId = getJsonLdId(catalogDataset);\n\t\tif (!Is.stringValue(datasetId)) {\n\t\t\tthrow new NotFoundError(DataspaceControlPlaneService.CLASS_NAME, \"catalogDatasetMissingId\");\n\t\t}\n\t\tconst rawOffers = this.getCatalogDatasetPolicies(catalogDataset);\n\n\t\tif (!Is.arrayValue(rawOffers)) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"warn\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"catalogDatasetHasNoOffers\",\n\t\t\t\tdata: {\n\t\t\t\t\tdatasetId: getJsonLdId(catalogDataset) ?? \"\",\n\t\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement) ?? \"\"\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst catalogOffers = rawOffers.filter(offer => Is.object<IDataspaceProtocolPolicy>(offer));\n\n\t\tif (!Is.arrayValue(catalogOffers)) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"warn\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"catalogDatasetHasNoOffers\",\n\t\t\t\tdata: {\n\t\t\t\t\tdatasetId: getJsonLdId(catalogDataset) ?? \"\",\n\t\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement) ?? \"\"\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst matchingOffer = catalogOffers.find(\n\t\t\t(offer: IDataspaceProtocolPolicy) =>\n\t\t\t\tOdrlPolicyHelper.getUid(offer) === OdrlPolicyHelper.getUid(agreement) ||\n\t\t\t\tthis.isPolicyDerivedFrom(agreement, offer)\n\t\t);\n\n\t\tif (!matchingOffer) {\n\t\t\tthrow new GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"agreementNotMatchingOffer\", {\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement) ?? \"\",\n\t\t\t\tdatasetId: getJsonLdId(catalogDataset) ?? \"\",\n\t\t\t\tavailableOffers: catalogOffers\n\t\t\t\t\t.map((o: IDataspaceProtocolPolicy) => OdrlPolicyHelper.getUid(o) ?? \"unknown\")\n\t\t\t\t\t.join(\", \")\n\t\t\t});\n\t\t}\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"agreementMatchedOffer\",\n\t\t\tdata: {\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement) ?? \"\",\n\t\t\t\tofferId: OdrlPolicyHelper.getUid(matchingOffer) ?? \"\",\n\t\t\t\tdatasetId\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Check if an Agreement is derived from an Offer.\n\t * Per the DS Protocol spec, Offers within a Dataset's hasPolicy array must NOT\n\t * include an explicit \"target\" property — the target is implicitly the Dataset itself.\n\t * When the offer has no explicit targets, we use the datasetId as the implicit target\n\t * so that the comparison with the agreement's target can succeed.\n\t * @param agreement Agreement to check.\n\t * @param offer Offer to compare against.\n\t * @returns True if Agreement appears derived from Offer.\n\t * @see https://eclipse-dataspace-protocol-base.github.io/DataspaceProtocol/2025-1-err1/#lower-level-types\n\t * @internal\n\t */\n\tprivate isPolicyDerivedFrom(\n\t\tagreement: IDataspaceProtocolAgreement,\n\t\toffer: IDataspaceProtocolPolicy\n\t): boolean {\n\t\tconst agreementTargets = OdrlPolicyHelper.getTargets(agreement);\n\t\tconst offerTargets = OdrlPolicyHelper.getTargets(offer);\n\n\t\t// Per DSP spec, offers in a Dataset's hasPolicy MUST NOT include explicit targets —\n\t\t// the target is implicitly the Dataset. When the catalogue offer has no targets,\n\t\t// skip the target comparison entirely (the agreement's target is the dataset itself).\n\t\t// Only reject if both have explicit targets that don't overlap.\n\t\tif (offerTargets.length > 0 && agreementTargets.length > 0) {\n\t\t\tif (\n\t\t\t\t!agreementTargets.some((agreementTarget: string) => offerTargets.includes(agreementTarget))\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if (offerTargets.length > 0 && agreementTargets.length === 0) {\n\t\t\t// Offer has targets but agreement doesn't — mismatch\n\t\t\treturn false;\n\t\t}\n\t\t// If offer has no targets (catalogue offer), accept any agreement targets\n\t\t// since the implicit target is the dataset the offer belongs to\n\n\t\tconst agreementAssignerIdentity = OdrlPolicyHelper.extractAssignerIdentity(agreement);\n\t\tconst offerAssignerIdentity = OdrlPolicyHelper.extractAssignerIdentity(offer);\n\n\t\tconst agreementAssigner = ArrayHelper.fromObjectOrArray(agreementAssignerIdentity);\n\t\tconst offerAssigner = ArrayHelper.fromObjectOrArray(offerAssignerIdentity);\n\n\t\tif (!agreementAssigner.some(assigner => offerAssigner.includes(assigner))) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!Is.array(agreement.permission) || !Is.array(offer.permission)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Ensure the dataset has a publisher set.\n\t * @param dataset The dataset.\n\t * @returns The dataset with publisher set.\n\t * @internal\n\t */\n\tprivate async ensurePublisher(\n\t\tdataset: IDataspaceProtocolDataset\n\t): Promise<IDataspaceProtocolDataset> {\n\t\tif (dataset[\"dcterms:publisher\"]) {\n\t\t\treturn dataset;\n\t\t}\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tconst orgId = contextIds?.[ContextIdKeys.Organization];\n\n\t\tif (orgId) {\n\t\t\treturn {\n\t\t\t\t...dataset,\n\t\t\t\t\"dcterms:publisher\": orgId\n\t\t\t};\n\t\t}\n\n\t\treturn dataset;\n\t}\n}\n"]}
1
+ {"version":3,"file":"dataspaceControlPlaneService.js","sourceRoot":"","sources":["../../src/dataspaceControlPlaneService.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { ITaskSchedulerComponent } from \"@twin.org/background-task-models\";\nimport { ContextIdKeys, ContextIdStore } from \"@twin.org/context\";\nimport {\n\tArrayHelper,\n\tBaseError,\n\tComponentFactory,\n\tConverter,\n\tGeneralError,\n\tGuards,\n\tIs,\n\tNotFoundError,\n\tRandomHelper,\n\tStringHelper,\n\tUnauthorizedError,\n\tValidationError\n} from \"@twin.org/core\";\nimport { JsonLdHelper, type JsonLdObjectWithNoContext } from \"@twin.org/data-json-ld\";\nimport {\n\tDataspaceAppFactory,\n\tTransferProcessRole,\n\ttype IDataspaceApp,\n\ttype IDataspaceControlPlaneComponent,\n\ttype IDataspaceControlPlaneResolverComponent,\n\ttype INegotiationCallback,\n\ttype ITransferContext,\n\ttype ITransferProcess,\n\ttype TransferProcess\n} from \"@twin.org/dataspace-models\";\nimport { EngineCoreFactory } from \"@twin.org/engine-models\";\nimport {\n\tEntityStorageConnectorFactory,\n\ttype IEntityStorageConnector\n} from \"@twin.org/entity-storage-models\";\nimport type { IFederatedCatalogueComponent } from \"@twin.org/federated-catalogue-models\";\nimport type { ILoggingComponent } from \"@twin.org/logging-models\";\nimport { nameof, nameofKebabCase } from \"@twin.org/nameof\";\nimport {\n\tOdrlPolicyHelper,\n\tPolicyRequesterFactory,\n\ttype IPolicyAdministrationPointComponent,\n\ttype IPolicyNegotiationAdminPointComponent,\n\ttype IPolicyNegotiationPointComponent\n} from \"@twin.org/rights-management-models\";\nimport {\n\tDataspaceProtocolContexts,\n\tDataspaceProtocolContractNegotiationTypes,\n\tDataspaceProtocolEndpointType,\n\tDataspaceProtocolHelper,\n\tDataspaceProtocolTransferProcessStateType,\n\tDataspaceProtocolTransferProcessTypes,\n\ttype DataspaceProtocolContractNegotiationStateType,\n\ttype IDataspaceProtocolAgreement,\n\ttype IDataspaceProtocolContractNegotiation,\n\ttype IDataspaceProtocolContractNegotiationError,\n\ttype IDataspaceProtocolDataset,\n\ttype IDataspaceProtocolPolicy,\n\ttype IDataspaceProtocolTransferCompletionMessage,\n\ttype IDataspaceProtocolTransferError,\n\ttype IDataspaceProtocolTransferProcess,\n\ttype IDataspaceProtocolTransferRequestMessage,\n\ttype IDataspaceProtocolTransferStartMessage,\n\ttype IDataspaceProtocolTransferSuspensionMessage,\n\ttype IDataspaceProtocolTransferTerminationMessage\n} from \"@twin.org/standards-dataspace-protocol\";\nimport type { IDcatDataset } from \"@twin.org/standards-w3c-dcat\";\nimport { TrustHelper, type ITrustComponent } from \"@twin.org/trust-models\";\nimport { DataspaceControlPlanePolicyRequester } from \"./dataspaceControlPlanePolicyRequester.js\";\nimport type { IDataspaceControlPlaneServiceConstructorOptions } from \"./models/IDataspaceControlPlaneServiceConstructorOptions.js\";\nimport { getJsonLdId, getJsonLdType } from \"./utils/dataHelpers.js\";\nimport {\n\tisCatalogError,\n\tisCatalogErrorName,\n\ttransformToTransferError\n} from \"./utils/transferErrorUtils.js\";\n\n/**\n * Dataspace Control Plane Service implementation.\n *\n * Handles contract negotiation (via PNP callbacks) and transfer process management.\n * Negotiation is fully callback-driven: negotiateAgreement() returns immediately with\n * a negotiationId, and the caller is notified via INegotiationCallback when complete.\n */\nexport class DataspaceControlPlaneService\n\timplements IDataspaceControlPlaneComponent, IDataspaceControlPlaneResolverComponent\n{\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<DataspaceControlPlaneService>();\n\n\t/**\n\t * Hardcoded requester type for PNP registration.\n\t * PNP uses this to route callbacks to our PolicyRequester.\n\t * @internal\n\t */\n\tprivate static readonly _REQUESTER_TYPE = \"dataspace-control-plane-requester\";\n\n\t/**\n\t * Stalled negotiation threshold in milliseconds (30 minutes).\n\t * Negotiations that haven't received a state update within this time are considered stalled.\n\t * @internal\n\t */\n\tprivate static readonly _STALLED_NEGOTIATION_THRESHOLD_MS = 30 * 60 * 1000;\n\n\t/**\n\t * The logging component.\n\t * @internal\n\t */\n\tprivate readonly _loggingComponent?: ILoggingComponent;\n\n\t/**\n\t * Policy Administration Point component for Agreement lookup.\n\t * @internal\n\t */\n\tprivate readonly _policyAdministrationPointComponent: IPolicyAdministrationPointComponent;\n\n\t/**\n\t * Policy Negotiation Point component for contract negotiation.\n\t * Used to negotiate agreements with providers before creating transfer processes.\n\n\t * @internal\n\t */\n\tprivate readonly _policyNegotiationPointComponent: IPolicyNegotiationPointComponent;\n\n\t/**\n\t * Policy Negotiation Admin Point component for negotiation history.\n\t * Optional - if not configured, history queries will fail gracefully.\n\t * @internal\n\t */\n\tprivate readonly _policyNegotiationAdminPointComponent?: IPolicyNegotiationAdminPointComponent;\n\n\t/**\n\t * Federated Catalogue component for dataset validation.\n\t * Used to validate that Agreements reference valid catalog datasets.\n\t * @internal\n\t */\n\tprivate readonly _federatedCatalogueComponent: IFederatedCatalogueComponent;\n\n\t/**\n\t * Entity storage for Transfer Process entities.\n\t * Shared between Control Plane and Data Plane.\n\t * @internal\n\t */\n\tprivate readonly _transferProcessStorage: IEntityStorageConnector<TransferProcess>;\n\n\t/**\n\t * The trust component for token verification and generation.\n\t * @internal\n\t */\n\tprivate readonly _trustComponent: ITrustComponent;\n\n\t/**\n\t * Override trust generator type for token generation.\n\t * @internal\n\t */\n\tprivate readonly _overrideTrustGeneratorType?: string;\n\n\t/**\n\t * Data plane endpoint path (path only, not full URL).\n\t * Will be combined with public origin from hosting component.\n\t * If not configured, PULL transfers are not supported.\n\t * @internal\n\t */\n\tprivate readonly _dataPlanePath?: string;\n\n\t/**\n\t * Policy requester instance for handling negotiation callbacks.\n\t * @internal\n\t */\n\tprivate readonly _policyRequester: DataspaceControlPlanePolicyRequester;\n\n\t/**\n\t * Task scheduler for periodic stalled negotiation cleanup.\n\t * @internal\n\t */\n\tprivate readonly _taskScheduler?: ITaskSchedulerComponent;\n\n\t/**\n\t * Registered negotiation callbacks from upstream callers, keyed by registration key.\n\t * @internal\n\t */\n\tprivate readonly _negotiationCallbacks: Map<string, INegotiationCallback>;\n\n\t/**\n\t * Create a new instance of DataspaceControlPlaneService.\n\t * @param options The options for the service.\n\t */\n\tconstructor(options?: IDataspaceControlPlaneServiceConstructorOptions) {\n\t\tthis._loggingComponent = ComponentFactory.getIfExists<ILoggingComponent>(\n\t\t\toptions?.loggingComponentType ?? \"logging\"\n\t\t);\n\n\t\t// Retrieve PAP component with default\n\t\tthis._policyAdministrationPointComponent =\n\t\t\tComponentFactory.get<IPolicyAdministrationPointComponent>(\n\t\t\t\toptions?.policyAdministrationPointComponentType ?? \"policy-administration-point\"\n\t\t\t);\n\n\t\t// Retrieve PNP component with default\n\t\tthis._policyNegotiationPointComponent = ComponentFactory.get<IPolicyNegotiationPointComponent>(\n\t\t\toptions?.policyNegotiationPointComponentType ?? \"policy-negotiation-point\"\n\t\t);\n\n\t\t// Retrieve PNAP component (optional) for negotiation history\n\t\tthis._policyNegotiationAdminPointComponent =\n\t\t\tComponentFactory.getIfExists<IPolicyNegotiationAdminPointComponent>(\n\t\t\t\toptions?.policyNegotiationAdminPointComponentType ?? \"policy-negotiation-admin-point\"\n\t\t\t);\n\n\t\t// Retrieve Federated Catalogue component with default\n\t\tthis._federatedCatalogueComponent = ComponentFactory.get<IFederatedCatalogueComponent>(\n\t\t\toptions?.federatedCatalogueComponentType ?? \"federated-catalogue\"\n\t\t);\n\n\t\tthis._transferProcessStorage = EntityStorageConnectorFactory.get<\n\t\t\tIEntityStorageConnector<TransferProcess>\n\t\t>(options?.transferProcessEntityStorageType ?? nameofKebabCase<TransferProcess>());\n\n\t\tthis._trustComponent = ComponentFactory.get<ITrustComponent>(\n\t\t\toptions?.trustComponentType ?? \"trust\"\n\t\t);\n\n\t\tthis._overrideTrustGeneratorType = options?.config?.overrideTrustGeneratorType;\n\n\t\tthis._dataPlanePath = Is.stringValue(options?.config?.dataPlanePath)\n\t\t\t? StringHelper.trimLeadingSlashes(options.config.dataPlanePath)\n\t\t\t: undefined;\n\n\t\tthis._taskScheduler = ComponentFactory.getIfExists<ITaskSchedulerComponent>(\n\t\t\toptions?.taskSchedulerComponentType ?? \"task-scheduler\"\n\t\t);\n\n\t\tthis._negotiationCallbacks = new Map();\n\n\t\tconst internalCallback: INegotiationCallback = {\n\t\t\tonStateChanged: async (negotiationId, state, data) => {\n\t\t\t\tfor (const [key, cb] of this._negotiationCallbacks.entries()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait cb.onStateChanged(negotiationId, state, data);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\t\tts: Date.now(),\n\t\t\t\t\t\t\tmessage: \"negotiationCallbackError\",\n\t\t\t\t\t\t\tdata: { key, negotiationId, method: \"onStateChanged\", error }\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tonCompleted: async (negotiationId, agreementId) => {\n\t\t\t\tfor (const [key, cb] of this._negotiationCallbacks.entries()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait cb.onCompleted(negotiationId, agreementId);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\t\tts: Date.now(),\n\t\t\t\t\t\t\tmessage: \"negotiationCallbackError\",\n\t\t\t\t\t\t\tdata: { key, negotiationId, method: \"onCompleted\", error }\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tonFailed: async (negotiationId, reason) => {\n\t\t\t\tfor (const [key, cb] of this._negotiationCallbacks.entries()) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait cb.onFailed(negotiationId, reason);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\t\tts: Date.now(),\n\t\t\t\t\t\t\tmessage: \"negotiationCallbackError\",\n\t\t\t\t\t\t\tdata: { key, negotiationId, method: \"onFailed\", error }\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tthis._policyRequester = new DataspaceControlPlanePolicyRequester(\n\t\t\toptions?.loggingComponentType ?? \"logging\",\n\t\t\tinternalCallback\n\t\t);\n\n\t\tPolicyRequesterFactory.register(\n\t\t\tDataspaceControlPlaneService._REQUESTER_TYPE,\n\t\t\t() => this._policyRequester\n\t\t);\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The class name of the component.\n\t */\n\tpublic className(): string {\n\t\treturn DataspaceControlPlaneService.CLASS_NAME;\n\t}\n\n\t/**\n\t * Register a callback to receive negotiation state change notifications.\n\t * Upstream modules (e.g. supply-chain) register their callback here.\n\t * @param key A unique key identifying this callback registration.\n\t * @param callback The callback interface to register.\n\t */\n\tpublic registerNegotiationCallback(key: string, callback: INegotiationCallback): void {\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(key), key);\n\t\tthis._negotiationCallbacks.set(key, callback);\n\t}\n\n\t/**\n\t * Unregister a previously registered negotiation callback.\n\t * @param key The key used when registering the callback.\n\t */\n\tpublic unregisterNegotiationCallback(key: string): void {\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(key), key);\n\t\tthis._negotiationCallbacks.delete(key);\n\t}\n\n\t/**\n\t * The service needs to be started when the application is initialized.\n\t * Populates the Federated Catalogue with datasets from registered apps\n\t * and starts the stalled negotiation cleanup task.\n\t * @param nodeLoggingComponentType The node logging component type.\n\t */\n\tpublic async start(nodeLoggingComponentType?: string): Promise<void> {\n\t\tconst engine = EngineCoreFactory.getIfExists(\"engine\");\n\t\t// Skip if no engine exists OR if this is a clone instance\n\t\tif (Is.empty(engine) || engine.isClone()) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"debug\",\n\t\t\t\tts: Date.now(),\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tmessage: \"engineCloneStart\"\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tts: Date.now(),\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tmessage: \"populatingFederatedCatalogue\"\n\t\t});\n\n\t\t// Get all registered apps\n\t\tconst appNames = DataspaceAppFactory.names();\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"debug\",\n\t\t\tts: Date.now(),\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tmessage: \"discoveredApps\",\n\t\t\tdata: { count: appNames.length, apps: appNames }\n\t\t});\n\n\t\tlet registeredCount = 0;\n\t\tlet errorCount = 0;\n\n\t\t// Collect and register datasets from each app\n\t\tfor (const appName of appNames) {\n\t\t\ttry {\n\t\t\t\tconst app = DataspaceAppFactory.get<IDataspaceApp>(appName);\n\t\t\t\tconst datasets = await app.datasetsHandled();\n\n\t\t\t\tfor (const dataset of datasets) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// Ensure publisher is set (required for Federated Catalogue)\n\t\t\t\t\t\tconst datasetWithPublisher = await this.ensurePublisher(dataset);\n\n\t\t\t\t\t\t// Register with Federated Catalogue\n\t\t\t\t\t\tawait this._federatedCatalogueComponent.set(\n\t\t\t\t\t\t\tdatasetWithPublisher as unknown as IDcatDataset\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tregisteredCount++;\n\n\t\t\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\t\t\tlevel: \"debug\",\n\t\t\t\t\t\t\tts: Date.now(),\n\t\t\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\t\tmessage: \"datasetRegistered\",\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\tdatasetId: getJsonLdId(datasetWithPublisher) ?? \"\",\n\t\t\t\t\t\t\t\tappName\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\terrorCount++;\n\t\t\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\t\t\tts: Date.now(),\n\t\t\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\t\tmessage: \"datasetRegistrationFailed\",\n\t\t\t\t\t\t\terror: BaseError.fromError(error),\n\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\tdatasetId: getJsonLdId(dataset) ?? \"\",\n\t\t\t\t\t\t\t\tappName\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\tts: Date.now(),\n\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tmessage: \"appDatasetsRetrievalFailed\",\n\t\t\t\t\terror: BaseError.fromError(error),\n\t\t\t\t\tdata: { appName }\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tts: Date.now(),\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tmessage: \"federatedCataloguePopulated\",\n\t\t\tdata: {\n\t\t\t\tregisteredCount,\n\t\t\t\terrorCount,\n\t\t\t\ttotalApps: appNames.length\n\t\t\t}\n\t\t});\n\n\t\tif (this._taskScheduler) {\n\t\t\tawait this._taskScheduler.addTask(\n\t\t\t\t\"control-plane-negotiation-cleanup\",\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\tnextTriggerTime: Date.now(),\n\t\t\t\t\t\tintervalMinutes: 5\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tasync () => {\n\t\t\t\t\tawait this.cleanupStalledNegotiations();\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Stop the service.\n\t * Removes the stalled negotiation cleanup task.\n\t * @param nodeLoggingComponentType The node logging component type.\n\t */\n\tpublic async stop(nodeLoggingComponentType?: string): Promise<void> {\n\t\tif (this._taskScheduler) {\n\t\t\tawait this._taskScheduler.removeTask(\"control-plane-negotiation-cleanup\");\n\t\t}\n\t}\n\n\t// ----------------------------------------------------------------------------\n\t// CONSUMER SIDE OPERATIONS\n\t// ----------------------------------------------------------------------------\n\n\t/**\n\t * Request a Transfer Process.\n\t * Creates a new Transfer Process in REQUESTED state.\n\t * @param request Transfer request message (DSP compliant).\n\t * @param trustPayload Trust payload containing authorization information (Base64-encoded token).\n\t * @returns Transfer Process (DSP compliant) with state REQUESTED, or TransferError if the operation fails.\n\t *\n\t * Role Performed: Provider\n\t * Called by: Consumer when it wants to request a new Transfer Process\n\t */\n\tpublic async requestTransfer(\n\t\trequest: IDataspaceProtocolTransferRequestMessage,\n\t\ttrustPayload: unknown\n\t): Promise<IDataspaceProtocolTransferProcess | IDataspaceProtocolTransferError> {\n\t\tconst trustInfo = await TrustHelper.verifyTrust(\n\t\t\tthis._trustComponent,\n\t\t\ttrustPayload,\n\t\t\t\"requestTransfer\"\n\t\t);\n\n\t\tconst validationFailures = await DataspaceProtocolHelper.validate(\n\t\t\tJsonLdHelper.toNodeObject(request)\n\t\t);\n\n\t\tif (validationFailures.length > 0) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"invalidTransferRequest\",\n\t\t\t\tdata: { validationFailures }\n\t\t\t});\n\n\t\t\treturn transformToTransferError(\n\t\t\t\tnew ValidationError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tnameof(request),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t),\n\t\t\t\trequest\n\t\t\t);\n\t\t}\n\n\t\tconst providerPid = `urn:uuid:${RandomHelper.generateUuidV7()}`;\n\n\t\tlet datasetId: string;\n\t\tlet consumerIdentity: string;\n\t\tlet providerIdentity: string;\n\t\tlet policies: IDataspaceProtocolPolicy[] = [];\n\n\t\ttry {\n\t\t\tconst agreement = await this.lookupAgreement(request.agreementId);\n\n\t\t\tif (!agreement) {\n\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tts: Date.now(),\n\t\t\t\t\tmessage: \"agreementNotFound\",\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tagreementId: request.agreementId,\n\t\t\t\t\t\thint: \"Agreement must exist before transfer. Use contract negotiation to create agreement first.\"\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\"agreementNotFound\",\n\t\t\t\t\trequest.agreementId,\n\t\t\t\t\t{\n\t\t\t\t\t\tagreementId: request.agreementId,\n\t\t\t\t\t\thint: \"Perform contract negotiation first to create an agreement\"\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst assigneeIdentity = OdrlPolicyHelper.extractAssigneeIdentity(agreement);\n\t\t\tconst assigneeIds = ArrayHelper.fromObjectOrArray<string>(assigneeIdentity);\n\n\t\t\tif (!assigneeIds.includes(trustInfo.identity)) {\n\t\t\t\tthrow new UnauthorizedError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\"callerNotAuthorizedForAgreement\"\n\t\t\t\t);\n\t\t\t}\n\t\t\tconsumerIdentity = trustInfo.identity;\n\n\t\t\tconst assignerIdentity = OdrlPolicyHelper.extractAssignerIdentity(agreement);\n\t\t\tconst assignerIds = ArrayHelper.fromObjectOrArray<string>(assignerIdentity);\n\t\t\tif (assignerIds.length > 1) {\n\t\t\t\tthrow new GeneralError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\"multipleAssignersNotSupported\"\n\t\t\t\t);\n\t\t\t}\n\t\t\tproviderIdentity = assignerIds[0];\n\n\t\t\tdatasetId = this.extractDatasetId(agreement);\n\n\t\t\tawait this.validateCatalogDataset(datasetId, agreement);\n\n\t\t\tpolicies = [agreement];\n\t\t} catch (error) {\n\t\t\treturn transformToTransferError(error, { consumerPid: request.consumerPid, providerPid });\n\t\t}\n\n\t\tconst now = new Date();\n\n\t\tconst storageEntity: TransferProcess = {\n\t\t\tid: Converter.bytesToHex(RandomHelper.generate(32)),\n\t\t\tconsumerPid: request.consumerPid,\n\t\t\tproviderPid,\n\t\t\tstate: DataspaceProtocolTransferProcessStateType.REQUESTED,\n\t\t\tagreementId: request.agreementId,\n\t\t\tdatasetId,\n\t\t\tconsumerIdentity,\n\t\t\tproviderIdentity,\n\t\t\t// offerId should reference Catalog Offer (via Agreement)\n\t\t\t// For now, use agreementId as reference (proper flow: Catalog → Negotiation → Agreement)\n\t\t\tofferId: request.agreementId,\n\t\t\tpolicies,\n\t\t\tcallbackAddress: request.callbackAddress,\n\t\t\tformat: request.format,\n\t\t\tdataAddress: request.dataAddress,\n\t\t\tdateCreated: now.toISOString(),\n\t\t\tdateModified: now.toISOString()\n\t\t};\n\n\t\tawait this._transferProcessStorage.set(storageEntity);\n\n\t\tconst entity: ITransferProcess = this.storageEntityToModel(storageEntity);\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"transferProcessInitiated\",\n\t\t\tdata: {\n\t\t\t\tconsumerPid: request.consumerPid,\n\t\t\t\tproviderPid,\n\t\t\t\tagreementId: request.agreementId\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.TransferProcess,\n\t\t\tconsumerPid: entity.consumerPid,\n\t\t\tproviderPid: entity.providerPid,\n\t\t\tstate: entity.state\n\t\t};\n\t}\n\n\t// ----------------------------------------------------------------------------\n\t// PROVIDER SIDE OPERATIONS\n\t// ----------------------------------------------------------------------------\n\n\t/**\n\t * Start a Transfer Process.\n\t * Transitions Transfer Process from REQUESTED to STARTED state or resumes from SUSPENDED state.\n\t * @param message Transfer start message (DSP compliant).\n\t * @param publicOrigin The public origin URL of this service.\n\t * @param trustPayload Trust payload containing authorization information (Base64-encoded token).\n\t * @returns Transfer Start Message (DSP compliant) with dataAddress for PULL transfers, or TransferError if the operation fails.\n\t *\n\t * Role Performed: Provider / Consumer\n\t */\n\tpublic async startTransfer(\n\t\tmessage: IDataspaceProtocolTransferStartMessage,\n\t\tpublicOrigin: string,\n\t\ttrustPayload: unknown\n\t): Promise<IDataspaceProtocolTransferStartMessage | IDataspaceProtocolTransferError> {\n\t\tconst trustInfo = await TrustHelper.verifyTrust(\n\t\t\tthis._trustComponent,\n\t\t\ttrustPayload,\n\t\t\t\"startTransfer\"\n\t\t);\n\n\t\tconst validationFailures = await DataspaceProtocolHelper.validate(\n\t\t\tJsonLdHelper.toNodeObject(message)\n\t\t);\n\n\t\tif (validationFailures.length > 0) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"invalidTransferStartMessage\",\n\t\t\t\tdata: { validationFailures }\n\t\t\t});\n\n\t\t\treturn transformToTransferError(\n\t\t\t\tnew ValidationError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tnameof(message),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t),\n\t\t\t\tmessage\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst { entity, role } = await this.lookupTransferByMessage(message);\n\n\t\t\tthis.validateCallerIsProvider(trustInfo.identity, entity);\n\n\t\t\tif (\n\t\t\t\tentity.state !== DataspaceProtocolTransferProcessStateType.REQUESTED &&\n\t\t\t\tentity.state !== DataspaceProtocolTransferProcessStateType.SUSPENDED\n\t\t\t) {\n\t\t\t\treturn transformToTransferError(\n\t\t\t\t\tnew GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"invalidStateForStart\", {\n\t\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\t\tcurrentState: entity.state\n\t\t\t\t\t}),\n\t\t\t\t\tmessage\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tentity.state = DataspaceProtocolTransferProcessStateType.STARTED;\n\t\t\tentity.dateModified = new Date();\n\n\t\t\tawait this._transferProcessStorage.set(this.modelToStorageEntity(entity));\n\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"info\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"transferProcessStarted\",\n\t\t\t\tdata: {\n\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\trole\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst response: IDataspaceProtocolTransferStartMessage = {\n\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.TransferStartMessage,\n\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\tproviderPid: entity.providerPid\n\t\t\t};\n\n\t\t\t// ============================================================================\n\t\t\t// PULL vs PUSH Transfer Mode Detection (DSP Protocol)\n\t\t\t// ============================================================================\n\t\t\t// The transfer mode is determined by whether the consumer provided a dataAddress\n\t\t\t// in the original TransferRequestMessage:\n\t\t\t//\n\t\t\t// PULL Mode (dataAddress NOT provided by consumer):\n\t\t\t// - Consumer requests data but doesn't specify where to receive it\n\t\t\t// - Provider generates access token and returns dataAddress in TransferStartMessage\n\t\t\t// - Consumer uses the returned endpoint + token to PULL data from provider\n\t\t\t// - Flow: Consumer → GET /entities?consumerPid=X (with Bearer token) → Provider\n\t\t\t//\n\t\t\t// PUSH Mode (dataAddress PROVIDED by consumer):\n\t\t\t// - Consumer specifies endpoint where they want data sent (e.g., webhook URL)\n\t\t\t// - Provider will PUSH data to the consumer's specified endpoint\n\t\t\t// - Flow: Provider → POST to consumer's dataAddress endpoint → Consumer\n\t\t\t//\n\t\t\t// See: https://eclipse-dataspace-protocol-base.github.io/DataspaceProtocol/2025-1-err1/#transfer-start-message\n\t\t\t// ============================================================================\n\n\t\t\tif (Is.empty(entity.dataAddress)) {\n\t\t\t\tif (!Is.stringValue(this._dataPlanePath)) {\n\t\t\t\t\treturn transformToTransferError(\n\t\t\t\t\t\tnew GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"pullTransfersNotSupported\", {\n\t\t\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\t\t\tproviderPid: entity.providerPid\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tmessage\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Provider signs the data access token with its own identity.\n\t\t\t\t// The subject contains the transfer context claims that the data plane\n\t\t\t\t// will verify when the consumer presents this token.\n\t\t\t\tif (!Is.stringValue(entity.providerIdentity)) {\n\t\t\t\t\tthrow new GeneralError(\n\t\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\t\"providerIdentityMissing\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst accessToken = await this._trustComponent.generate(\n\t\t\t\t\tentity.providerIdentity,\n\t\t\t\t\tthis._overrideTrustGeneratorType,\n\t\t\t\t\t{\n\t\t\t\t\t\tsubject: {\n\t\t\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\t\t\tagreementId: entity.agreementId,\n\t\t\t\t\t\t\tdatasetId: entity.datasetId\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tconst tokenString = accessToken as string;\n\t\t\t\tconst fullEndpoint = `${publicOrigin}/${this._dataPlanePath}`;\n\n\t\t\t\tresponse.dataAddress = {\n\t\t\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.DataAddress,\n\t\t\t\t\tendpointType: DataspaceProtocolEndpointType.HttpsQueryEndpoint,\n\t\t\t\t\tendpoint: fullEndpoint,\n\t\t\t\t\tendpointProperties: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.EndpointProperty,\n\t\t\t\t\t\t\tname: \"authorization\",\n\t\t\t\t\t\t\tvalue: tokenString\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.EndpointProperty,\n\t\t\t\t\t\t\tname: \"authType\",\n\t\t\t\t\t\t\tvalue: \"bearer\"\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t};\n\n\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\tlevel: \"info\",\n\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tts: Date.now(),\n\t\t\t\t\tmessage: \"dataAccessTokenGenerated\",\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\t\tendpoint: fullEndpoint,\n\t\t\t\t\t\ttransferMode: \"PULL\"\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// PUSH MODE: Provider will push data to consumer's specified endpoint\n\t\t\t\t// The consumer provided dataAddress in TransferRequestMessage, indicating\n\t\t\t\t// where they want data sent. Provider acknowledges and will push data there.\n\t\t\t\t//\n\t\t\t\t// TODO: PUSH transfer implementation (RFC-007 future work)\n\t\t\t\t// Implementation would need to:\n\t\t\t\t// 1. Generate provider's own trust token to authenticate when pushing to consumer\n\t\t\t\t// 2. Validate consumer's dataAddress endpoint is reachable\n\t\t\t\t// 3. Extract any consumer-provided authorization from endpointProperties\n\t\t\t\t// 4. Schedule background task to push data to consumer's endpoint\n\t\t\t\t// 5. POST data to entity.dataAddress.endpoint with provider's trust token\n\t\t\t\t// 6. Implement retry logic with exponential backoff\n\t\t\t\t// 7. Send TransferCompletionMessage when push completes successfully\n\t\t\t\t//\n\t\t\t\t// Trust flow for PUSH (mirror of PULL):\n\t\t\t\t// - PULL: Provider generates token → Consumer uses to authenticate when pulling\n\t\t\t\t// - PUSH: Provider generates token → Provider uses to authenticate when pushing\n\n\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\tlevel: \"warn\",\n\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tts: Date.now(),\n\t\t\t\t\tmessage: \"pushTransferModeNotImplemented\",\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\t\tconsumerEndpoint: entity.dataAddress.endpoint,\n\t\t\t\t\t\ttransferMode: \"PUSH\"\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn response;\n\t\t} catch (error) {\n\t\t\treturn transformToTransferError(error, message);\n\t\t}\n\t}\n\n\t// ----------------------------------------------------------------------------\n\t// SHARED STATE MANAGEMENT OPERATIONS (Either Side)\n\t// ----------------------------------------------------------------------------\n\n\t/**\n\t * Complete a Transfer Process.\n\t * @param message Transfer completion message (DSP compliant).\n\t * @param trustPayload Trust payload containing authorization information (Base64-encoded token).\n\t * @returns Transfer Process (DSP compliant) with state COMPLETED, or TransferError if the operation fails.\n\t */\n\tpublic async completeTransfer(\n\t\tmessage: IDataspaceProtocolTransferCompletionMessage,\n\t\ttrustPayload: unknown\n\t): Promise<IDataspaceProtocolTransferProcess | IDataspaceProtocolTransferError> {\n\t\tconst trustInfo = await TrustHelper.verifyTrust(\n\t\t\tthis._trustComponent,\n\t\t\ttrustPayload,\n\t\t\t\"completeTransfer\"\n\t\t);\n\n\t\tconst validationFailures = await DataspaceProtocolHelper.validate(\n\t\t\tJsonLdHelper.toNodeObject(message)\n\t\t);\n\n\t\tif (validationFailures.length > 0) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"invalidTransferCompletionMessage\",\n\t\t\t\tdata: { validationFailures }\n\t\t\t});\n\n\t\t\treturn transformToTransferError(\n\t\t\t\tnew ValidationError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tnameof(message),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t),\n\t\t\t\tmessage\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst { entity, role } = await this.lookupTransferByMessage(message);\n\n\t\t\tthis.validateCallerIsConsumer(trustInfo.identity, entity);\n\n\t\t\tif (entity.state !== DataspaceProtocolTransferProcessStateType.STARTED) {\n\t\t\t\treturn transformToTransferError(\n\t\t\t\t\tnew GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"invalidStateForComplete\", {\n\t\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\t\tcurrentState: entity.state\n\t\t\t\t\t}),\n\t\t\t\t\tmessage\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tentity.state = DataspaceProtocolTransferProcessStateType.COMPLETED;\n\t\t\tentity.dateModified = new Date();\n\n\t\t\tawait this._transferProcessStorage.set(this.modelToStorageEntity(entity));\n\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"info\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"transferProcessCompleted\",\n\t\t\t\tdata: {\n\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\trole\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.TransferProcess,\n\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\tstate: entity.state\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn transformToTransferError(error, message);\n\t\t}\n\t}\n\n\t/**\n\t * Suspend a Transfer Process.\n\t * @param message Transfer suspension message (DSP compliant).\n\t * @param trustPayload Trust payload containing authorization information (Base64-encoded token).\n\t * @returns Transfer Process (DSP compliant) with state SUSPENDED, or TransferError if the operation fails.\n\t */\n\tpublic async suspendTransfer(\n\t\tmessage: IDataspaceProtocolTransferSuspensionMessage,\n\t\ttrustPayload: unknown\n\t): Promise<IDataspaceProtocolTransferProcess | IDataspaceProtocolTransferError> {\n\t\tconst trustInfo = await TrustHelper.verifyTrust(\n\t\t\tthis._trustComponent,\n\t\t\ttrustPayload,\n\t\t\t\"suspendTransfer\"\n\t\t);\n\n\t\tconst validationFailures = await DataspaceProtocolHelper.validate(\n\t\t\tJsonLdHelper.toNodeObject(message)\n\t\t);\n\n\t\tif (validationFailures.length > 0) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"invalidTransferSuspensionMessage\",\n\t\t\t\tdata: { validationFailures }\n\t\t\t});\n\n\t\t\treturn transformToTransferError(\n\t\t\t\tnew ValidationError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tnameof(message),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t),\n\t\t\t\tmessage\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst { entity, role } = await this.lookupTransferByMessage(message);\n\n\t\t\tthis.validateCallerIsTransferParty(trustInfo.identity, entity);\n\n\t\t\tif (entity.state !== DataspaceProtocolTransferProcessStateType.STARTED) {\n\t\t\t\treturn transformToTransferError(\n\t\t\t\t\tnew GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"invalidStateForSuspend\", {\n\t\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\t\tcurrentState: entity.state\n\t\t\t\t\t}),\n\t\t\t\t\tmessage\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tentity.state = DataspaceProtocolTransferProcessStateType.SUSPENDED;\n\t\t\tentity.dateModified = new Date();\n\n\t\t\tawait this._transferProcessStorage.set(this.modelToStorageEntity(entity));\n\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"info\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"transferProcessSuspended\",\n\t\t\t\tdata: {\n\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\trole,\n\t\t\t\t\treason: message.reason\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.TransferProcess,\n\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\tstate: entity.state\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn transformToTransferError(error, message);\n\t\t}\n\t}\n\n\t/**\n\t * Terminate a Transfer Process.\n\t * @param message Transfer termination message (DSP compliant).\n\t * @param trustPayload Trust payload containing authorization information (Base64-encoded token).\n\t * @returns Transfer Process (DSP compliant) with state TERMINATED, or TransferError if the operation fails.\n\t */\n\tpublic async terminateTransfer(\n\t\tmessage: IDataspaceProtocolTransferTerminationMessage,\n\t\ttrustPayload: unknown\n\t): Promise<IDataspaceProtocolTransferProcess | IDataspaceProtocolTransferError> {\n\t\tconst trustInfo = await TrustHelper.verifyTrust(\n\t\t\tthis._trustComponent,\n\t\t\ttrustPayload,\n\t\t\t\"terminateTransfer\"\n\t\t);\n\n\t\tconst validationFailures = await DataspaceProtocolHelper.validate(\n\t\t\tJsonLdHelper.toNodeObject(message)\n\t\t);\n\n\t\tif (validationFailures.length > 0) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"error\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"invalidTransferTerminationMessage\",\n\t\t\t\tdata: { validationFailures }\n\t\t\t});\n\n\t\t\treturn transformToTransferError(\n\t\t\t\tnew ValidationError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\tnameof(message),\n\t\t\t\t\tvalidationFailures\n\t\t\t\t),\n\t\t\t\tmessage\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\tconst { entity, role } = await this.lookupTransferByMessage(message);\n\n\t\t\tthis.validateCallerIsTransferParty(trustInfo.identity, entity);\n\n\t\t\tentity.state = DataspaceProtocolTransferProcessStateType.TERMINATED;\n\t\t\tentity.dateModified = new Date();\n\n\t\t\tawait this._transferProcessStorage.set(this.modelToStorageEntity(entity));\n\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"info\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"transferProcessTerminated\",\n\t\t\t\tdata: {\n\t\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\t\trole,\n\t\t\t\t\treason: message.reason\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.TransferProcess,\n\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\tstate: entity.state\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn transformToTransferError(error, message);\n\t\t}\n\t}\n\n\t/**\n\t * Get Transfer Process state.\n\t * @param pid Process ID (consumerPid or providerPid).\n\t * @param trustPayload Trust payload containing authorization information (Base64-encoded token).\n\t * @returns Transfer Process (DSP compliant) with current state, or TransferError if the operation fails.\n\t */\n\tpublic async getTransferProcess(\n\t\tpid: string,\n\t\ttrustPayload: unknown\n\t): Promise<IDataspaceProtocolTransferProcess | IDataspaceProtocolTransferError> {\n\t\tconst trustInfo = await TrustHelper.verifyTrust(\n\t\t\tthis._trustComponent,\n\t\t\ttrustPayload,\n\t\t\t\"getTransferProcess\"\n\t\t);\n\n\t\ttry {\n\t\t\tconst { entity, role } = await this.lookupTransferByPid(pid);\n\n\t\t\tthis.validateCallerIsTransferParty(trustInfo.identity, entity);\n\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"info\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"transferProcessQueried\",\n\t\t\t\tdata: {\n\t\t\t\t\tpid,\n\t\t\t\t\trole,\n\t\t\t\t\tstate: entity.state\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\"@type\": DataspaceProtocolTransferProcessTypes.TransferProcess,\n\t\t\t\tconsumerPid: entity.consumerPid,\n\t\t\t\tproviderPid: entity.providerPid,\n\t\t\t\tstate: entity.state\n\t\t\t};\n\t\t} catch (error) {\n\t\t\treturn transformToTransferError(error, { consumerPid: pid, providerPid: pid });\n\t\t}\n\t}\n\n\t// ============================================================================\n\t// CONTRACT NEGOTIATION\n\t// ============================================================================\n\n\t/**\n\t * Negotiate a contract agreement with a provider.\n\t * Returns immediately with a negotiationId. The caller is notified\n\t * via the registered INegotiationCallback when the negotiation completes.\n\t *\n\t * @param datasetId The dataset ID from the provider's catalog.\n\t * @param offerId The offer ID from the provider's catalog.\n\t * @param providerEndpoint The provider's contract negotiation endpoint URL.\n\t * @param publicOrigin The public origin URL of this control plane (for callbacks).\n\t * @param trustPayload The trust payload for authentication.\n\t * @returns The negotiation ID. Use the registered callback for completion notification.\n\t */\n\tpublic async negotiateAgreement(\n\t\tdatasetId: string,\n\t\tofferId: string,\n\t\tproviderEndpoint: string,\n\t\tpublicOrigin: string,\n\t\ttrustPayload: unknown\n\t): Promise<{ negotiationId: string }> {\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(datasetId), datasetId);\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(offerId), offerId);\n\t\tGuards.stringValue(\n\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\tnameof(providerEndpoint),\n\t\t\tproviderEndpoint\n\t\t);\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(publicOrigin), publicOrigin);\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"startingContractNegotiation\",\n\t\t\tdata: { datasetId, offerId, providerEndpoint, publicOrigin }\n\t\t});\n\n\t\tconst catalogResult = await this._federatedCatalogueComponent.get(datasetId);\n\n\t\tif (isCatalogError(catalogResult)) {\n\t\t\tif (isCatalogErrorName(catalogResult, NotFoundError.CLASS_NAME)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\"datasetNotFoundInCatalog\",\n\t\t\t\t\tdatasetId,\n\t\t\t\t\t{\n\t\t\t\t\t\tdatasetId,\n\t\t\t\t\t\tofferId,\n\t\t\t\t\t\tproviderEndpoint\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new GeneralError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"catalogLookupFailedForNegotiation\",\n\t\t\t\t{\n\t\t\t\t\tdatasetId,\n\t\t\t\t\tofferId,\n\t\t\t\t\tproviderEndpoint,\n\t\t\t\t\terrorCode: catalogResult.code\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tconst rawOffers = this.getCatalogDatasetPolicies(catalogResult);\n\n\t\tif (!Is.arrayValue(rawOffers)) {\n\t\t\tthrow new GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"datasetHasNoOffers\", {\n\t\t\t\tofferId,\n\t\t\t\tdatasetId: getJsonLdId(catalogResult) ?? \"\"\n\t\t\t});\n\t\t}\n\n\t\tconst catalogOffers = rawOffers.filter(offer => Is.object<IDataspaceProtocolPolicy>(offer));\n\n\t\tif (!Is.arrayValue(catalogOffers)) {\n\t\t\tthrow new GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"datasetHasNoValidOffers\", {\n\t\t\t\tofferId,\n\t\t\t\tdatasetId: getJsonLdId(catalogResult) ?? \"\"\n\t\t\t});\n\t\t}\n\n\t\tconst matchingOffer = catalogOffers.find((offer: IDataspaceProtocolPolicy) => {\n\t\t\tconst offerUid = OdrlPolicyHelper.getUid(offer);\n\t\t\treturn offerUid === offerId;\n\t\t});\n\n\t\tif (!matchingOffer) {\n\t\t\tconst availableOffers = catalogOffers\n\t\t\t\t.map((o: IDataspaceProtocolPolicy) => OdrlPolicyHelper.getUid(o) ?? \"unknown\")\n\t\t\t\t.join(\", \");\n\n\t\t\tthrow new NotFoundError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"offerNotFoundInDataset\",\n\t\t\t\tofferId,\n\t\t\t\t{\n\t\t\t\t\tofferId,\n\t\t\t\t\tdatasetId: getJsonLdId(catalogResult) ?? \"\",\n\t\t\t\t\tavailableOffers\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"offerFoundInCatalog\",\n\t\t\tdata: {\n\t\t\t\tofferId,\n\t\t\t\tdatasetId: getJsonLdId(catalogResult) ?? \"\",\n\t\t\t\tofferType: getJsonLdType(matchingOffer)\n\t\t\t}\n\t\t});\n\n\t\tconst negotiationId = await this._policyNegotiationPointComponent.sendRequestToProvider(\n\t\t\tproviderEndpoint,\n\t\t\tDataspaceControlPlaneService._REQUESTER_TYPE,\n\t\t\tofferId,\n\t\t\tpublicOrigin\n\t\t);\n\n\t\tif (!negotiationId) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"negotiationInitiationFailed\",\n\t\t\t\t{\n\t\t\t\t\tofferId,\n\t\t\t\t\tproviderEndpoint\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tthis._policyRequester.trackNegotiation(negotiationId);\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"negotiationInitiated\",\n\t\t\tdata: { negotiationId, offerId }\n\t\t});\n\n\t\treturn { negotiationId };\n\t}\n\n\t/**\n\t * Get the current state of a contract negotiation.\n\t * @param negotiationId The unique identifier of the negotiation.\n\t * @param trustPayload The trust payload for authentication.\n\t * @returns Current state of the negotiation.\n\t */\n\tpublic async getNegotiation(\n\t\tnegotiationId: string,\n\t\ttrustPayload: unknown\n\t): Promise<IDataspaceProtocolContractNegotiation | IDataspaceProtocolContractNegotiationError> {\n\t\tGuards.stringValue(\n\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\tnameof(negotiationId),\n\t\t\tnegotiationId\n\t\t);\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"getNegotiation\",\n\t\t\tdata: { negotiationId }\n\t\t});\n\n\t\tconst result = await this._policyNegotiationPointComponent.getNegotiation(\n\t\t\tnegotiationId,\n\t\t\ttrustPayload\n\t\t);\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"negotiationStateRetrieved\",\n\t\t\tdata: {\n\t\t\t\tnegotiationId,\n\t\t\t\ttype: getJsonLdType(result),\n\t\t\t\tstate: (result as IDataspaceProtocolContractNegotiation).state\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Get negotiation history.\n\t * @param state Optional filter by negotiation state.\n\t * @param cursor Optional pagination cursor.\n\t * @param trustPayload Trust payload for authentication.\n\t * @returns List of negotiation history entries with pagination.\n\t */\n\tpublic async getNegotiationHistory(\n\t\tstate: string | undefined,\n\t\tcursor: string | undefined,\n\t\ttrustPayload: unknown\n\t): Promise<{\n\t\tnegotiations: {\n\t\t\tnegotiation:\n\t\t\t\t| IDataspaceProtocolContractNegotiation\n\t\t\t\t| IDataspaceProtocolContractNegotiationError;\n\t\t\tcreatedAt: string;\n\t\t\tofferId?: string;\n\t\t\tagreementId?: string;\n\t\t}[];\n\t\tcursor?: string;\n\t\tcount: number;\n\t}> {\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"getNegotiationHistory\",\n\t\t\tdata: { state, cursor }\n\t\t});\n\n\t\tif (!this._policyNegotiationAdminPointComponent) {\n\t\t\tthrow new GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"pnapNotConfigured\", {\n\t\t\t\tmessage:\n\t\t\t\t\t\"Policy Negotiation Admin Point not configured. \" +\n\t\t\t\t\t\"Set policyNegotiationAdminPointComponentType in constructor options.\"\n\t\t\t});\n\t\t}\n\n\t\tconst { items: pnapNegotiations, cursor: nextCursor } =\n\t\t\tawait this._policyNegotiationAdminPointComponent.query(\n\t\t\t\tstate as DataspaceProtocolContractNegotiationStateType | undefined,\n\t\t\t\tcursor\n\t\t\t);\n\n\t\tconst negotiations = pnapNegotiations.map(pnapNeg => {\n\t\t\tconst dspNegotiation: IDataspaceProtocolContractNegotiation = {\n\t\t\t\t\"@context\": [DataspaceProtocolContexts.Context],\n\t\t\t\t\"@type\": DataspaceProtocolContractNegotiationTypes.ContractNegotiation,\n\t\t\t\tconsumerPid: pnapNeg.id,\n\t\t\t\tproviderPid: pnapNeg.correlationId,\n\t\t\t\tstate: pnapNeg.state\n\t\t\t};\n\n\t\t\treturn {\n\t\t\t\tnegotiation: dspNegotiation,\n\t\t\t\tcreatedAt: pnapNeg.dateCreated,\n\t\t\t\tofferId: OdrlPolicyHelper.getUid(pnapNeg.offer),\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(pnapNeg.agreement)\n\t\t\t};\n\t\t});\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"negotiationHistoryRetrieved\",\n\t\t\tdata: {\n\t\t\t\tcount: negotiations.length,\n\t\t\t\tstate,\n\t\t\t\thasCursor: Boolean(nextCursor)\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tnegotiations,\n\t\t\tcursor: nextCursor,\n\t\t\tcount: negotiations.length\n\t\t};\n\t}\n\n\t// ============================================================================\n\t// RESOLVER METHODS - IDataspaceControlPlaneResolverComponent\n\t// ============================================================================\n\n\t/**\n\t * Resolve consumerPid to Transfer Context.\n\t * @param consumerPid Consumer Process ID.\n\t * @param trustPayload Trust payload containing authorization information (Base64-encoded token).\n\t * @returns Transfer Context with Agreement, datasetId, and Transfer Process metadata.\n\t */\n\tpublic async resolveConsumerPid(\n\t\tconsumerPid: string,\n\t\ttrustPayload: unknown\n\t): Promise<ITransferContext> {\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(consumerPid), consumerPid);\n\n\t\tawait TrustHelper.verifyTrust(this._trustComponent, trustPayload, \"resolveConsumerPid\");\n\n\t\tconst storageEntity = await this._transferProcessStorage.get(consumerPid);\n\n\t\tif (!storageEntity) {\n\t\t\tthrow new NotFoundError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"transferProcessNotFound\",\n\t\t\t\tundefined,\n\t\t\t\t{ consumerPid }\n\t\t\t);\n\t\t}\n\n\t\tconst entity = this.storageEntityToModel(storageEntity);\n\n\t\tif (entity.state === DataspaceProtocolTransferProcessStateType.TERMINATED) {\n\t\t\tthrow new GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"transferProcessTerminated\", {\n\t\t\t\tconsumerPid\n\t\t\t});\n\t\t}\n\n\t\tconst agreement = await this.lookupAgreement(entity.agreementId);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tconst currentOrgId = contextIds?.[ContextIdKeys.Organization];\n\n\t\tif (!currentOrgId) {\n\t\t\tthrow new UnauthorizedError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"organizationContextMissing\",\n\t\t\t\t{\n\t\t\t\t\tconsumerPid\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tconst assignerIdentity = OdrlPolicyHelper.extractAssignerIdentity(agreement);\n\t\tconst assignerIds = ArrayHelper.fromObjectOrArray<string>(assignerIdentity);\n\n\t\tif (!assignerIds.includes(currentOrgId)) {\n\t\t\tthrow new UnauthorizedError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"agreementAssignerMismatch\",\n\t\t\t\t{\n\t\t\t\t\tconsumerPid,\n\t\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement),\n\t\t\t\t\texpectedOrgId: currentOrgId,\n\t\t\t\t\tactualAssigner: assignerIds.join(\", \")\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"resolvedConsumerPid\",\n\t\t\tdata: {\n\t\t\t\tconsumerPid,\n\t\t\t\tdatasetId: entity.datasetId,\n\t\t\t\tstate: entity.state,\n\t\t\t\tconsumerIdentity: entity.consumerIdentity,\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement),\n\t\t\t\torganizationId: currentOrgId\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tconsumerPid: entity.consumerPid,\n\t\t\tproviderPid: entity.providerPid,\n\t\t\tagreement,\n\t\t\tdatasetId: entity.datasetId,\n\t\t\tofferId: entity.offerId,\n\t\t\tstate: entity.state,\n\t\t\tconsumerIdentity: entity.consumerIdentity,\n\t\t\tproviderIdentity: entity.providerIdentity,\n\t\t\tdataAddress: entity.dataAddress\n\t\t};\n\t}\n\n\t/**\n\t * Resolve providerPid to Transfer Context.\n\t * @param providerPid Provider Process ID.\n\t * @param trustPayload Trust payload containing authorization information (Base64-encoded token).\n\t * @returns Transfer Context with Agreement, datasetId, and Transfer Process metadata.\n\t */\n\tpublic async resolveProviderPid(\n\t\tproviderPid: string,\n\t\ttrustPayload: unknown\n\t): Promise<ITransferContext> {\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(providerPid), providerPid);\n\n\t\tawait TrustHelper.verifyTrust(this._trustComponent, trustPayload, \"resolveProviderPid\");\n\n\t\tconst { entity } = await this.lookupTransferByPid(providerPid);\n\n\t\tif (entity.state === DataspaceProtocolTransferProcessStateType.TERMINATED) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"transferProcessTerminatedProvider\",\n\t\t\t\t{\n\t\t\t\t\tproviderPid\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tconst agreement = await this.lookupAgreement(entity.agreementId);\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tconst currentOrgId = contextIds?.[ContextIdKeys.Organization];\n\n\t\tif (!currentOrgId) {\n\t\t\tthrow new UnauthorizedError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"organizationContextMissingProvider\",\n\t\t\t\t{\n\t\t\t\t\tproviderPid\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\t// Extract assigner UID (can be string, array, or IOdrlParty object)\n\n\t\tconst assignerIdentity = OdrlPolicyHelper.extractAssignerIdentity(agreement);\n\t\tconst assignerIds = ArrayHelper.fromObjectOrArray<string>(assignerIdentity);\n\n\t\tif (!assignerIds.includes(currentOrgId)) {\n\t\t\tthrow new UnauthorizedError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"agreementAssignerMismatchProvider\",\n\t\t\t\t{\n\t\t\t\t\tproviderPid,\n\t\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement),\n\t\t\t\t\texpectedOrgId: currentOrgId,\n\t\t\t\t\tactualAssigner: assignerIds.join(\", \")\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\t// Validate that Agreement assignee matches expected consumer identity\n\t\t// This ensures we're pushing to the correct consumer\n\t\t// If assignee is undefined but consumerIdentity has a value, this is also a mismatch\n\t\tconst assigneeIdentity = OdrlPolicyHelper.extractAssigneeIdentity(agreement);\n\t\tconst assigneeIds = ArrayHelper.fromObjectOrArray<string>(assigneeIdentity);\n\n\t\tif (\n\t\t\t!Is.stringValue(entity.consumerIdentity) ||\n\t\t\t!assigneeIds.includes(entity.consumerIdentity)\n\t\t) {\n\t\t\tthrow new UnauthorizedError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"agreementAssigneeMismatch\",\n\t\t\t\t{\n\t\t\t\t\tproviderPid,\n\t\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement),\n\t\t\t\t\texpectedConsumerIdentity: entity.consumerIdentity,\n\t\t\t\t\tactualAssignee: assigneeIds.join(\", \")\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"resolvedProviderPid\",\n\t\t\tdata: {\n\t\t\t\tproviderPid,\n\t\t\t\tdatasetId: entity.datasetId,\n\t\t\t\tstate: entity.state,\n\t\t\t\tconsumerIdentity: entity.consumerIdentity,\n\t\t\t\tproviderIdentity: entity.providerIdentity,\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement),\n\t\t\t\torganizationId: currentOrgId\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tconsumerPid: entity.consumerPid,\n\t\t\tproviderPid: entity.providerPid,\n\t\t\tagreement,\n\t\t\tdatasetId: entity.datasetId,\n\t\t\tofferId: entity.offerId,\n\t\t\tstate: entity.state,\n\t\t\tconsumerIdentity: entity.consumerIdentity,\n\t\t\tproviderIdentity: entity.providerIdentity,\n\t\t\tdataAddress: entity.dataAddress\n\t\t};\n\t}\n\n\t// ============================================================================\n\t// PRIVATE HELPER METHODS\n\t// ============================================================================\n\n\t/**\n\t * Cleanup stalled negotiations.\n\t * Called periodically by the task scheduler.\n\t * @internal\n\t */\n\tprivate async cleanupStalledNegotiations(): Promise<void> {\n\t\tconst now = Date.now();\n\t\tconst stalled: string[] = [];\n\n\t\tfor (const [negotiationId, state] of this._policyRequester.getActiveNegotiations()) {\n\t\t\tif (now - state.updatedAt > DataspaceControlPlaneService._STALLED_NEGOTIATION_THRESHOLD_MS) {\n\t\t\t\tstalled.push(negotiationId);\n\t\t\t}\n\t\t}\n\n\t\tfor (const negotiationId of stalled) {\n\t\t\tthis._policyRequester.removeNegotiation(negotiationId);\n\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"warn\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"stalledNegotiationCleanedUp\",\n\t\t\t\tdata: { negotiationId }\n\t\t\t});\n\n\t\t\tfor (const [key, cb] of this._negotiationCallbacks.entries()) {\n\t\t\t\ttry {\n\t\t\t\t\tawait cb.onFailed(negotiationId, \"negotiationStalled\");\n\t\t\t\t} catch (error) {\n\t\t\t\t\tawait this._loggingComponent?.log({\n\t\t\t\t\t\tlevel: \"error\",\n\t\t\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\tts: Date.now(),\n\t\t\t\t\t\tmessage: \"negotiationCallbackError\",\n\t\t\t\t\t\tdata: { key, negotiationId, method: \"onFailed\", error }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (stalled.length > 0) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"info\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"stalledNegotiationsCleanupComplete\",\n\t\t\t\tdata: { cleanedUp: stalled.length }\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Convert a storage entity to model.\n\t * @param storageEntity The entity from storage.\n\t * @returns The model representation.\n\t * @internal\n\t */\n\tprivate storageEntityToModel(storageEntity: TransferProcess): ITransferProcess {\n\t\treturn {\n\t\t\tid: storageEntity.id,\n\t\t\tconsumerPid: storageEntity.consumerPid,\n\t\t\tproviderPid: storageEntity.providerPid,\n\t\t\tstate: storageEntity.state,\n\t\t\tagreementId: storageEntity.agreementId,\n\t\t\tdatasetId: storageEntity.datasetId,\n\t\t\tofferId: storageEntity.offerId,\n\t\t\tconsumerIdentity: storageEntity.consumerIdentity,\n\t\t\tproviderIdentity: storageEntity.providerIdentity,\n\t\t\tformat: storageEntity.format,\n\t\t\tcallbackAddress: storageEntity.callbackAddress,\n\t\t\tdateCreated: new Date(storageEntity.dateCreated),\n\t\t\tdateModified: new Date(storageEntity.dateModified),\n\t\t\tpolicies: storageEntity.policies,\n\t\t\tdataAddress: storageEntity.dataAddress\n\t\t};\n\t}\n\n\t/**\n\t * Convert a model to storage entity.\n\t * @param entity The model representation.\n\t * @returns The entity for storage.\n\t * @internal\n\t */\n\tprivate modelToStorageEntity(entity: ITransferProcess): TransferProcess {\n\t\treturn {\n\t\t\tid: entity.id,\n\t\t\tconsumerPid: entity.consumerPid,\n\t\t\tproviderPid: entity.providerPid,\n\t\t\tstate: entity.state,\n\t\t\tagreementId: entity.agreementId,\n\t\t\tdatasetId: entity.datasetId,\n\t\t\tofferId: entity.offerId,\n\t\t\tconsumerIdentity: entity.consumerIdentity,\n\t\t\tproviderIdentity: entity.providerIdentity,\n\t\t\tformat: entity.format,\n\t\t\tcallbackAddress: entity.callbackAddress,\n\t\t\tdateCreated: entity.dateCreated.toISOString(),\n\t\t\tdateModified: entity.dateModified.toISOString(),\n\t\t\tpolicies: entity.policies,\n\t\t\tdataAddress: entity.dataAddress\n\t\t};\n\t}\n\n\t/**\n\t * Look up Agreement from PAP.\n\t * @param agreementId Agreement ID.\n\t * @returns Agreement.\n\t * @internal\n\t */\n\tprivate async lookupAgreement(agreementId: string): Promise<IDataspaceProtocolAgreement> {\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(agreementId), agreementId);\n\n\t\tlet agreement;\n\t\ttry {\n\t\t\tagreement = await this._policyAdministrationPointComponent.getAgreement(agreementId);\n\t\t} catch (error) {\n\t\t\tif (BaseError.isErrorName(error, NotFoundError.CLASS_NAME)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\tthrow new GeneralError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"agreementLookupFailed\",\n\t\t\t\t{ agreementId },\n\t\t\t\terror\n\t\t\t);\n\t\t}\n\n\t\treturn agreement;\n\t}\n\n\t/**\n\t * Validate that the caller's verified identity matches the consumer of a transfer process.\n\t * @param callerIdentity The identity from the verified trust token.\n\t * @param entity The transfer process entity.\n\t * @throws UnauthorizedError if the caller is not the consumer.\n\t * @internal\n\t */\n\tprivate validateCallerIsConsumer(callerIdentity: string, entity: ITransferProcess): void {\n\t\tif (callerIdentity !== entity.consumerIdentity) {\n\t\t\tthrow new UnauthorizedError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"callerNotAuthorizedAsConsumer\"\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Validate that the caller's verified identity matches the provider of a transfer process.\n\t * @param callerIdentity The identity from the verified trust token.\n\t * @param entity The transfer process entity.\n\t * @throws UnauthorizedError if the caller is not the provider.\n\t * @internal\n\t */\n\tprivate validateCallerIsProvider(callerIdentity: string, entity: ITransferProcess): void {\n\t\tif (callerIdentity !== entity.providerIdentity) {\n\t\t\tthrow new UnauthorizedError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"callerNotAuthorizedAsProvider\"\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Validate that the caller's verified identity matches either the consumer or provider of a transfer process.\n\t * @param callerIdentity The identity from the verified trust token.\n\t * @param entity The transfer process entity.\n\t * @throws UnauthorizedError if the caller is not a party to the transfer.\n\t * @internal\n\t */\n\tprivate validateCallerIsTransferParty(callerIdentity: string, entity: ITransferProcess): void {\n\t\tif (callerIdentity !== entity.consumerIdentity && callerIdentity !== entity.providerIdentity) {\n\t\t\tthrow new UnauthorizedError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"callerNotAuthorizedForTransfer\"\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Extract dataset ID from Agreement target.\n\t * @param agreement Agreement.\n\t * @returns Dataset ID.\n\t * @internal\n\t */\n\tprivate extractDatasetId(agreement: IDataspaceProtocolAgreement): string {\n\t\tif (Is.empty(agreement.target)) {\n\t\t\tthrow new GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"agreementMissingTarget\", {\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement)\n\t\t\t});\n\t\t}\n\n\t\tconst targetIds = OdrlPolicyHelper.getTargets(agreement);\n\n\t\tif (targetIds.length === 0) {\n\t\t\tthrow new GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"agreementTargetMissingUid\", {\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement)\n\t\t\t});\n\t\t}\n\n\t\t// Validate single target, multiple targets are not currently supported\n\t\tif (targetIds.length > 1) {\n\t\t\tthrow new GeneralError(\n\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\"agreementMultipleTargetsNotSupported\",\n\t\t\t\t{\n\t\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement),\n\t\t\t\t\ttargetCount: targetIds.length\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\treturn targetIds[0];\n\t}\n\n\t/**\n\t * Validate that the dataset exists in the Federated Catalogue.\n\t * @param datasetId Dataset identifier extracted from Agreement.\n\t * @param agreement The Agreement being validated.\n\t * @internal\n\t */\n\tprivate async validateCatalogDataset(\n\t\tdatasetId: string,\n\t\tagreement: IDataspaceProtocolAgreement\n\t): Promise<void> {\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(datasetId), datasetId);\n\t\tGuards.object<IDataspaceProtocolAgreement>(\n\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\tnameof(agreement),\n\t\t\tagreement\n\t\t);\n\n\t\t// Lookup dataset in catalog\n\t\tconst catalogResult = await this._federatedCatalogueComponent.get(datasetId);\n\n\t\tif (isCatalogError(catalogResult)) {\n\t\t\tif (isCatalogErrorName(catalogResult, NotFoundError.CLASS_NAME)) {\n\t\t\t\tthrow new NotFoundError(\n\t\t\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\t\t\"datasetNotInCatalog\",\n\t\t\t\t\tdatasetId,\n\t\t\t\t\t{\n\t\t\t\t\t\tdatasetId,\n\t\t\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement)\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow new GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"catalogLookupFailed\", {\n\t\t\t\tdatasetId,\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement) ?? \"\",\n\t\t\t\terrorCode: catalogResult.code\n\t\t\t});\n\t\t}\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"catalogDatasetFound\",\n\t\t\tdata: {\n\t\t\t\tdatasetId,\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement) ?? \"\",\n\t\t\t\tdatasetTitle: catalogResult[\"dcterms:title\"]\n\t\t\t}\n\t\t});\n\n\t\tawait this.validateAgreementMatchesOffer(agreement, catalogResult);\n\t}\n\n\t/**\n\t * Extract PID from DSP message and lookup Transfer Process with role detection.\n\t * @param message DSP protocol message with consumerPid and/or providerPid fields.\n\t * @returns Transfer Process entity and our role in this transfer.\n\t * @internal\n\t */\n\tprivate async lookupTransferByMessage(message: {\n\t\tconsumerPid?: string;\n\t\tproviderPid?: string;\n\t}): Promise<{\n\t\tentity: ITransferProcess;\n\t\trole: TransferProcessRole;\n\t}> {\n\t\tconst pid = message.consumerPid ?? message.providerPid;\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, \"pid\", pid);\n\n\t\treturn this.lookupTransferByPid(pid);\n\t}\n\n\t/**\n\t * Lookup Transfer Process by PID and determine our role.\n\t * @param pid Either consumerPid or providerPid.\n\t * @returns Transfer Process entity and our role in this transfer.\n\t * @internal\n\t */\n\tprivate async lookupTransferByPid(pid: string): Promise<{\n\t\tentity: ITransferProcess;\n\t\trole: TransferProcessRole;\n\t}> {\n\t\tGuards.stringValue(DataspaceControlPlaneService.CLASS_NAME, nameof(pid), pid);\n\n\t\t// Check if pid is a consumerPid (primary key lookup)\n\t\tconst storageEntity = await this._transferProcessStorage.get(pid);\n\n\t\tif (storageEntity) {\n\t\t\treturn {\n\t\t\t\tentity: this.storageEntityToModel(storageEntity),\n\t\t\t\trole: TransferProcessRole.Consumer\n\t\t\t};\n\t\t}\n\n\t\t// Check if pid is a providerPid (secondary key lookup)\n\t\tconst providerPidEntity = await this._transferProcessStorage.get(pid, \"providerPid\");\n\t\tif (providerPidEntity) {\n\t\t\treturn {\n\t\t\t\tentity: this.storageEntityToModel(providerPidEntity),\n\t\t\t\trole: TransferProcessRole.Provider\n\t\t\t};\n\t\t}\n\n\t\tthrow new NotFoundError(\n\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\"transferProcessNotFound\",\n\t\t\tpid,\n\t\t\t{\n\t\t\t\tpid\n\t\t\t}\n\t\t);\n\t}\n\n\t/**\n\t * Get raw policy entries from a catalog dataset.\n\t * @param catalogDataset Catalog dataset.\n\t * @returns Raw policy entries.\n\t * @internal\n\t */\n\tprivate getCatalogDatasetPolicies(\n\t\tcatalogDataset: IDcatDataset | IDataspaceProtocolDataset\n\t): JsonLdObjectWithNoContext<IDataspaceProtocolPolicy>[] {\n\t\t// Support both \"odrl:hasPolicy\" and \"hasPolicy\" to accommodate different catalog implementations\n\t\tif (Is.object<IDcatDataset>(catalogDataset) && !Is.empty(catalogDataset[\"odrl:hasPolicy\"])) {\n\t\t\tconst items = ArrayHelper.fromObjectOrArray(catalogDataset[\"odrl:hasPolicy\"]) ?? [];\n\t\t\treturn items.map(item => ({\n\t\t\t\t...item,\n\t\t\t\t\"@id\": OdrlPolicyHelper.getUid(item) ?? \"\"\n\t\t\t}));\n\t\t}\n\n\t\tif (\n\t\t\tIs.object<IDataspaceProtocolDataset>(catalogDataset) &&\n\t\t\t!Is.empty(catalogDataset.hasPolicy)\n\t\t) {\n\t\t\treturn ArrayHelper.fromObjectOrArray(catalogDataset.hasPolicy) ?? [];\n\t\t}\n\n\t\treturn [];\n\t}\n\n\t/**\n\t * Validate that the Agreement policies match at least one Catalog Offer.\n\t * @param agreement Agreement to validate.\n\t * @param catalogDataset Catalog dataset containing Offers.\n\t * @internal\n\t */\n\tprivate async validateAgreementMatchesOffer(\n\t\tagreement: IDataspaceProtocolAgreement,\n\t\tcatalogDataset: IDcatDataset\n\t): Promise<void> {\n\t\tGuards.object<IDataspaceProtocolAgreement>(\n\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\tnameof(agreement),\n\t\t\tagreement\n\t\t);\n\t\tGuards.object<IDcatDataset>(\n\t\t\tDataspaceControlPlaneService.CLASS_NAME,\n\t\t\tnameof(catalogDataset),\n\t\t\tcatalogDataset\n\t\t);\n\n\t\tconst datasetId = getJsonLdId(catalogDataset);\n\t\tif (!Is.stringValue(datasetId)) {\n\t\t\tthrow new NotFoundError(DataspaceControlPlaneService.CLASS_NAME, \"catalogDatasetMissingId\");\n\t\t}\n\t\tconst rawOffers = this.getCatalogDatasetPolicies(catalogDataset);\n\n\t\tif (!Is.arrayValue(rawOffers)) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"warn\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"catalogDatasetHasNoOffers\",\n\t\t\t\tdata: {\n\t\t\t\t\tdatasetId: getJsonLdId(catalogDataset) ?? \"\",\n\t\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement) ?? \"\"\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst catalogOffers = rawOffers.filter(offer => Is.object<IDataspaceProtocolPolicy>(offer));\n\n\t\tif (!Is.arrayValue(catalogOffers)) {\n\t\t\tawait this._loggingComponent?.log({\n\t\t\t\tlevel: \"warn\",\n\t\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\t\tts: Date.now(),\n\t\t\t\tmessage: \"catalogDatasetHasNoOffers\",\n\t\t\t\tdata: {\n\t\t\t\t\tdatasetId: getJsonLdId(catalogDataset) ?? \"\",\n\t\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement) ?? \"\"\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst matchingOffer = catalogOffers.find(\n\t\t\t(offer: IDataspaceProtocolPolicy) =>\n\t\t\t\tOdrlPolicyHelper.getUid(offer) === OdrlPolicyHelper.getUid(agreement) ||\n\t\t\t\tthis.isPolicyDerivedFrom(agreement, offer)\n\t\t);\n\n\t\tif (!matchingOffer) {\n\t\t\tthrow new GeneralError(DataspaceControlPlaneService.CLASS_NAME, \"agreementNotMatchingOffer\", {\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement) ?? \"\",\n\t\t\t\tdatasetId: getJsonLdId(catalogDataset) ?? \"\",\n\t\t\t\tavailableOffers: catalogOffers\n\t\t\t\t\t.map((o: IDataspaceProtocolPolicy) => OdrlPolicyHelper.getUid(o) ?? \"unknown\")\n\t\t\t\t\t.join(\", \")\n\t\t\t});\n\t\t}\n\n\t\tawait this._loggingComponent?.log({\n\t\t\tlevel: \"info\",\n\t\t\tsource: DataspaceControlPlaneService.CLASS_NAME,\n\t\t\tts: Date.now(),\n\t\t\tmessage: \"agreementMatchedOffer\",\n\t\t\tdata: {\n\t\t\t\tagreementId: OdrlPolicyHelper.getUid(agreement) ?? \"\",\n\t\t\t\tofferId: OdrlPolicyHelper.getUid(matchingOffer) ?? \"\",\n\t\t\t\tdatasetId\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Check if an Agreement is derived from an Offer.\n\t * Per the DS Protocol spec, Offers within a Dataset's hasPolicy array must NOT\n\t * include an explicit \"target\" property — the target is implicitly the Dataset itself.\n\t * When the offer has no explicit targets, we use the datasetId as the implicit target\n\t * so that the comparison with the agreement's target can succeed.\n\t * @param agreement Agreement to check.\n\t * @param offer Offer to compare against.\n\t * @returns True if Agreement appears derived from Offer.\n\t * @see https://eclipse-dataspace-protocol-base.github.io/DataspaceProtocol/2025-1-err1/#lower-level-types\n\t * @internal\n\t */\n\tprivate isPolicyDerivedFrom(\n\t\tagreement: IDataspaceProtocolAgreement,\n\t\toffer: IDataspaceProtocolPolicy\n\t): boolean {\n\t\tconst agreementTargets = OdrlPolicyHelper.getTargets(agreement);\n\t\tconst offerTargets = OdrlPolicyHelper.getTargets(offer);\n\n\t\t// Per DSP spec, offers in a Dataset's hasPolicy MUST NOT include explicit targets —\n\t\t// the target is implicitly the Dataset. When the catalogue offer has no targets,\n\t\t// skip the target comparison entirely (the agreement's target is the dataset itself).\n\t\t// Only reject if both have explicit targets that don't overlap.\n\t\tif (offerTargets.length > 0 && agreementTargets.length > 0) {\n\t\t\tif (\n\t\t\t\t!agreementTargets.some((agreementTarget: string) => offerTargets.includes(agreementTarget))\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} else if (offerTargets.length > 0 && agreementTargets.length === 0) {\n\t\t\t// Offer has targets but agreement doesn't — mismatch\n\t\t\treturn false;\n\t\t}\n\t\t// If offer has no targets (catalogue offer), accept any agreement targets\n\t\t// since the implicit target is the dataset the offer belongs to\n\n\t\tconst agreementAssignerIdentity = OdrlPolicyHelper.extractAssignerIdentity(agreement);\n\t\tconst offerAssignerIdentity = OdrlPolicyHelper.extractAssignerIdentity(offer);\n\n\t\tconst agreementAssigner = ArrayHelper.fromObjectOrArray(agreementAssignerIdentity);\n\t\tconst offerAssigner = ArrayHelper.fromObjectOrArray(offerAssignerIdentity);\n\n\t\tif (!agreementAssigner.some(assigner => offerAssigner.includes(assigner))) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!Is.array(agreement.permission) || !Is.array(offer.permission)) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Ensure the dataset has a publisher set.\n\t * @param dataset The dataset.\n\t * @returns The dataset with publisher set.\n\t * @internal\n\t */\n\tprivate async ensurePublisher(\n\t\tdataset: IDataspaceProtocolDataset\n\t): Promise<IDataspaceProtocolDataset> {\n\t\tif (dataset[\"dcterms:publisher\"]) {\n\t\t\treturn dataset;\n\t\t}\n\n\t\tconst contextIds = await ContextIdStore.getContextIds();\n\t\tconst orgId = contextIds?.[ContextIdKeys.Organization];\n\n\t\tif (orgId) {\n\t\t\treturn {\n\t\t\t\t...dataset,\n\t\t\t\t\"dcterms:publisher\": orgId\n\t\t\t};\n\t\t}\n\n\t\treturn dataset;\n\t}\n}\n"]}
package/docs/changelog.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.3-next.22](https://github.com/twinfoundation/dataspace/compare/dataspace-control-plane-service-v0.0.3-next.21...dataspace-control-plane-service-v0.0.3-next.22) (2026-03-20)
4
+
5
+
6
+ ### Features
7
+
8
+ * internalise constant ([9b9b293](https://github.com/twinfoundation/dataspace/commit/9b9b2933588ee70811a601bc485b5abaa12bed41))
9
+
10
+
11
+ ### Dependencies
12
+
13
+ * The following workspace dependencies were updated
14
+ * dependencies
15
+ * @twin.org/dataspace-models bumped from 0.0.3-next.21 to 0.0.3-next.22
16
+
3
17
  ## [0.0.3-next.21](https://github.com/twinfoundation/dataspace/compare/dataspace-control-plane-service-v0.0.3-next.20...dataspace-control-plane-service-v0.0.3-next.21) (2026-03-17)
4
18
 
5
19
 
@@ -464,15 +464,15 @@ Get negotiation history.
464
464
 
465
465
  ##### state
466
466
 
467
- Optional filter by negotiation state.
467
+ `string` \| `undefined`
468
468
 
469
- `string` | `undefined`
469
+ Optional filter by negotiation state.
470
470
 
471
471
  ##### cursor
472
472
 
473
- Optional pagination cursor.
473
+ `string` \| `undefined`
474
474
 
475
- `string` | `undefined`
475
+ Optional pagination cursor.
476
476
 
477
477
  ##### trustPayload
478
478
 
@@ -6,7 +6,7 @@ Dataspace Control Plane service configuration.
6
6
 
7
7
  ### overrideTrustGeneratorType? {#overridetrustgeneratortype}
8
8
 
9
- > `optional` **overrideTrustGeneratorType**: `string`
9
+ > `optional` **overrideTrustGeneratorType?**: `string`
10
10
 
11
11
  Override the default trust generator type for token generation.
12
12
  If not specified, the default trust generator configured in the trust component will be used.
@@ -15,7 +15,7 @@ If not specified, the default trust generator configured in the trust component
15
15
 
16
16
  ### dataPlanePath? {#dataplanepath}
17
17
 
18
- > `optional` **dataPlanePath**: `string`
18
+ > `optional` **dataPlanePath?**: `string`
19
19
 
20
20
  Data plane endpoint path for PULL transfers (path only, not full URL).
21
21
  Will be combined with the public origin from the hosting component.
@@ -6,95 +6,155 @@ Dataspace Control Plane service constructor options.
6
6
 
7
7
  ### policyAdministrationPointComponentType? {#policyadministrationpointcomponenttype}
8
8
 
9
- > `optional` **policyAdministrationPointComponentType**: `string`
9
+ > `optional` **policyAdministrationPointComponentType?**: `string`
10
10
 
11
11
  Policy Administration Point component type.
12
12
  Used for Agreement lookup and validation during Transfer Process initiation.
13
13
 
14
+ #### Default
15
+
16
+ ```ts
17
+ policy-administration-point
18
+ ```
19
+
14
20
  ***
15
21
 
16
22
  ### policyNegotiationPointComponentType? {#policynegotiationpointcomponenttype}
17
23
 
18
- > `optional` **policyNegotiationPointComponentType**: `string`
24
+ > `optional` **policyNegotiationPointComponentType?**: `string`
19
25
 
20
26
  Policy Negotiation Point component type.
21
27
  Used for contract negotiation to create agreements before transfer processes.
22
28
 
29
+ #### Default
30
+
31
+ ```ts
32
+ policy-negotiation-point
33
+ ```
34
+
23
35
  ***
24
36
 
25
37
  ### policyNegotiationAdminPointComponentType? {#policynegotiationadminpointcomponenttype}
26
38
 
27
- > `optional` **policyNegotiationAdminPointComponentType**: `string`
39
+ > `optional` **policyNegotiationAdminPointComponentType?**: `string`
28
40
 
29
41
  Policy Negotiation Admin Point component type.
30
42
  Used for querying negotiation history.
31
43
  Optional - if not provided, negotiation history will not be available.
32
44
 
45
+ #### Default
46
+
47
+ ```ts
48
+ policy-negotiation-admin-point
49
+ ```
50
+
33
51
  ***
34
52
 
35
53
  ### federatedCatalogueComponentType? {#federatedcataloguecomponenttype}
36
54
 
37
- > `optional` **federatedCatalogueComponentType**: `string`
55
+ > `optional` **federatedCatalogueComponentType?**: `string`
38
56
 
39
57
  Federated Catalogue component type.
40
58
  Used for dataset validation during Transfer Process initiation.
41
59
  Validates that Agreements reference valid catalog datasets.
42
60
 
61
+ #### Default
62
+
63
+ ```ts
64
+ federated-catalogue
65
+ ```
66
+
43
67
  ***
44
68
 
45
69
  ### loggingComponentType? {#loggingcomponenttype}
46
70
 
47
- > `optional` **loggingComponentType**: `string`
71
+ > `optional` **loggingComponentType?**: `string`
48
72
 
49
73
  Logging component type.
50
74
 
75
+ #### Default
76
+
77
+ ```ts
78
+ logging
79
+ ```
80
+
51
81
  ***
52
82
 
53
83
  ### identityComponentType? {#identitycomponenttype}
54
84
 
55
- > `optional` **identityComponentType**: `string`
85
+ > `optional` **identityComponentType?**: `string`
56
86
 
57
87
  Identity component type (for token signing/verification).
58
88
 
89
+ #### Default
90
+
91
+ ```ts
92
+ identity
93
+ ```
94
+
59
95
  ***
60
96
 
61
97
  ### identityAuthenticationComponentType? {#identityauthenticationcomponenttype}
62
98
 
63
- > `optional` **identityAuthenticationComponentType**: `string`
99
+ > `optional` **identityAuthenticationComponentType?**: `string`
64
100
 
65
101
  Identity Authentication component type (for token validation).
66
102
 
103
+ #### Default
104
+
105
+ ```ts
106
+ identity-authentication
107
+ ```
108
+
67
109
  ***
68
110
 
69
111
  ### trustComponentType? {#trustcomponenttype}
70
112
 
71
- > `optional` **trustComponentType**: `string`
113
+ > `optional` **trustComponentType?**: `string`
72
114
 
73
115
  Trust component type for trust verification.
74
116
  Used to verify JWT/VC tokens and extract identity information.
75
117
 
118
+ #### Default
119
+
120
+ ```ts
121
+ trust
122
+ ```
123
+
76
124
  ***
77
125
 
78
126
  ### transferProcessEntityStorageType? {#transferprocessentitystoragetype}
79
127
 
80
- > `optional` **transferProcessEntityStorageType**: `string`
128
+ > `optional` **transferProcessEntityStorageType?**: `string`
81
129
 
82
130
  Entity storage type for Transfer Process entities.
83
131
  Used to persist transfer state for the consumerPid flow.
84
132
  Must match the Data Plane's transferProcessEntityStorageType for shared storage.
85
133
 
134
+ #### Default
135
+
136
+ ```ts
137
+ transfer-process
138
+ ```
139
+
86
140
  ***
87
141
 
88
142
  ### taskSchedulerComponentType? {#taskschedulercomponenttype}
89
143
 
90
- > `optional` **taskSchedulerComponentType**: `string`
144
+ > `optional` **taskSchedulerComponentType?**: `string`
91
145
 
92
146
  Task scheduler component type for periodic cleanup of stalled negotiations.
93
147
 
148
+ #### Default
149
+
150
+ ```ts
151
+ task-scheduler
152
+ ```
153
+
94
154
  ***
95
155
 
96
156
  ### config? {#config}
97
157
 
98
- > `optional` **config**: [`IDataspaceControlPlaneServiceConfig`](IDataspaceControlPlaneServiceConfig.md)
158
+ > `optional` **config?**: [`IDataspaceControlPlaneServiceConfig`](IDataspaceControlPlaneServiceConfig.md)
99
159
 
100
160
  The configuration of the Dataspace Control Plane Service.
@@ -22,7 +22,7 @@ Current negotiation state.
22
22
 
23
23
  ### agreement? {#agreement}
24
24
 
25
- > `optional` **agreement**: `IDataspaceProtocolAgreement`
25
+ > `optional` **agreement?**: `IDataspaceProtocolAgreement`
26
26
 
27
27
  Agreement received from provider (stored until finalized).
28
28
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twin.org/dataspace-control-plane-service",
3
- "version": "0.0.3-next.21",
3
+ "version": "0.0.3-next.22",
4
4
  "description": "Implements agreement negotiation and transfer process lifecycle management for control plane operations.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -17,7 +17,7 @@
17
17
  "@twin.org/api-models": "next",
18
18
  "@twin.org/context": "next",
19
19
  "@twin.org/core": "next",
20
- "@twin.org/dataspace-models": "0.0.3-next.21",
20
+ "@twin.org/dataspace-models": "0.0.3-next.22",
21
21
  "@twin.org/entity": "next",
22
22
  "@twin.org/entity-storage-models": "next",
23
23
  "@twin.org/federated-catalogue-models": "next",