@twin.org/dataspace-control-plane-service 0.0.3-next.26 → 0.0.3-next.27

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.
@@ -1 +1 @@
1
- {"version":3,"file":"IDataspaceControlPlaneServiceConstructorOptions.js","sourceRoot":"","sources":["../../../src/models/IDataspaceControlPlaneServiceConstructorOptions.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IDataspaceControlPlaneServiceConfig } from \"./IDataspaceControlPlaneServiceConfig.js\";\n\n/**\n * Dataspace Control Plane service constructor options.\n */\nexport interface IDataspaceControlPlaneServiceConstructorOptions {\n\t/**\n\t * Policy Administration Point component type.\n\t * Used for Agreement lookup and validation during Transfer Process initiation.\n\t * @default policy-administration-point\n\t */\n\tpolicyAdministrationPointComponentType?: string;\n\n\t/**\n\t * Policy Negotiation Point component type.\n\t * Used for contract negotiation to create agreements before transfer processes.\n\t * @default policy-negotiation-point\n\t */\n\tpolicyNegotiationPointComponentType?: string;\n\n\t/**\n\t * Policy Negotiation Admin Point component type.\n\t * Used for querying negotiation history.\n\t * Optional - if not provided, negotiation history will not be available.\n\t * @default policy-negotiation-admin-point\n\t */\n\tpolicyNegotiationAdminPointComponentType?: string;\n\n\t/**\n\t * Federated Catalogue component type.\n\t * Used for dataset validation during Transfer Process initiation.\n\t * Validates that Agreements reference valid catalog datasets.\n\t * @default federated-catalogue\n\t */\n\tfederatedCatalogueComponentType?: string;\n\n\t/**\n\t * Logging component type.\n\t * @default logging\n\t */\n\tloggingComponentType?: string;\n\n\t/**\n\t * Identity component type (for token signing/verification).\n\t * @default identity\n\t */\n\tidentityComponentType?: string;\n\n\t/**\n\t * Identity Authentication component type (for token validation).\n\t * @default identity-authentication\n\t */\n\tidentityAuthenticationComponentType?: string;\n\n\t/**\n\t * Trust component type for trust verification.\n\t * Used to verify JWT/VC tokens and extract identity information.\n\t * @default trust\n\t */\n\ttrustComponentType?: string;\n\n\t/**\n\t * Entity storage type for Transfer Process entities.\n\t * Used to persist transfer state for the consumerPid flow.\n\t * Must match the Data Plane's transferProcessEntityStorageType for shared storage.\n\t * @default transfer-process\n\t */\n\ttransferProcessEntityStorageType?: string;\n\n\t/**\n\t * Task scheduler component type for periodic cleanup of stalled negotiations.\n\t * @default task-scheduler\n\t */\n\ttaskSchedulerComponentType?: string;\n\n\t/**\n\t * The configuration of the Dataspace Control Plane Service.\n\t */\n\tconfig?: IDataspaceControlPlaneServiceConfig;\n}\n"]}
1
+ {"version":3,"file":"IDataspaceControlPlaneServiceConstructorOptions.js","sourceRoot":"","sources":["../../../src/models/IDataspaceControlPlaneServiceConstructorOptions.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IDataspaceControlPlaneServiceConfig } from \"./IDataspaceControlPlaneServiceConfig.js\";\n\n/**\n * Dataspace Control Plane service constructor options.\n */\nexport interface IDataspaceControlPlaneServiceConstructorOptions {\n\t/**\n\t * Policy Administration Point component type.\n\t * Used for Agreement lookup and validation during Transfer Process initiation.\n\t * @default policy-administration-point\n\t */\n\tpolicyAdministrationPointComponentType?: string;\n\n\t/**\n\t * Policy Negotiation Point component type.\n\t * Used for contract negotiation to create agreements before transfer processes.\n\t * @default policy-negotiation-point\n\t */\n\tpolicyNegotiationPointComponentType?: string;\n\n\t/**\n\t * Policy Negotiation Admin Point component type.\n\t * Used for querying negotiation history.\n\t * Optional - if not provided, negotiation history will not be available.\n\t * @default policy-negotiation-admin-point\n\t */\n\tpolicyNegotiationAdminPointComponentType?: string;\n\n\t/**\n\t * Federated Catalogue component type.\n\t * Used for dataset validation during Transfer Process initiation.\n\t * Validates that Agreements reference valid catalog datasets.\n\t * @default federated-catalogue\n\t */\n\tfederatedCatalogueComponentType?: string;\n\n\t/**\n\t * Logging component type.\n\t * @default logging\n\t */\n\tloggingComponentType?: string;\n\n\t/**\n\t * Identity component type (for token signing/verification).\n\t * @default identity\n\t */\n\tidentityComponentType?: string;\n\n\t/**\n\t * Identity Authentication component type (for token validation).\n\t * @default identity-authentication\n\t */\n\tidentityAuthenticationComponentType?: string;\n\n\t/**\n\t * Trust component type for trust verification.\n\t * Used to verify JWT/VC tokens and extract identity information.\n\t * @default trust\n\t */\n\ttrustComponentType?: string;\n\n\t/**\n\t * Entity storage type for Transfer Process entities.\n\t * Used to persist transfer state for the consumerPid flow.\n\t * Must match the Data Plane's transferProcessEntityStorageType for shared storage.\n\t * @default transfer-process\n\t */\n\ttransferProcessEntityStorageType?: string;\n\n\t/**\n\t * Entity storage type for Dataspace App Dataset entities.\n\t * @default dataspace-app-dataset\n\t */\n\tdataspaceAppDatasetEntityStorageType?: string;\n\n\t/**\n\t * Task scheduler component type for periodic cleanup of stalled negotiations.\n\t * @default task-scheduler\n\t */\n\ttaskSchedulerComponentType?: string;\n\n\t/**\n\t * URL Transformer component type used to encrypt the tenant token into the data-plane..\n\t * @default url-transformer\n\t */\n\turlTransformerComponentType?: string;\n\n\t/**\n\t * The configuration of the Dataspace Control Plane Service.\n\t */\n\tconfig?: IDataspaceControlPlaneServiceConfig;\n}\n"]}
package/dist/es/schema.js CHANGED
@@ -1,11 +1,12 @@
1
1
  // Copyright 2025 IOTA Stiftung.
2
2
  // SPDX-License-Identifier: Apache-2.0.
3
- import { TransferProcess } from "@twin.org/dataspace-models";
3
+ import { DataspaceAppDataset, TransferProcess } from "@twin.org/dataspace-models";
4
4
  import { EntitySchemaFactory, EntitySchemaHelper } from "@twin.org/entity";
5
5
  /**
6
6
  * Inits schemas for Control Plane entities.
7
7
  */
8
8
  export function initSchema() {
9
9
  EntitySchemaFactory.register("TransferProcess", () => EntitySchemaHelper.getSchema(TransferProcess));
10
+ EntitySchemaFactory.register("DataspaceAppDataset", () => EntitySchemaHelper.getSchema(DataspaceAppDataset));
10
11
  }
11
12
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG3E;;GAEG;AACH,MAAM,UAAU,UAAU;IACzB,mBAAmB,CAAC,QAAQ,oBAA4B,GAAG,EAAE,CAC5D,kBAAkB,CAAC,SAAS,CAAC,eAAe,CAAC,CAC7C,CAAC;AACH,CAAC","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { TransferProcess } from \"@twin.org/dataspace-models\";\nimport { EntitySchemaFactory, EntitySchemaHelper } from \"@twin.org/entity\";\nimport { nameof } from \"@twin.org/nameof\";\n\n/**\n * Inits schemas for Control Plane entities.\n */\nexport function initSchema(): void {\n\tEntitySchemaFactory.register(nameof<TransferProcess>(), () =>\n\t\tEntitySchemaHelper.getSchema(TransferProcess)\n\t);\n}\n"]}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/schema.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG3E;;GAEG;AACH,MAAM,UAAU,UAAU;IACzB,mBAAmB,CAAC,QAAQ,oBAA4B,GAAG,EAAE,CAC5D,kBAAkB,CAAC,SAAS,CAAC,eAAe,CAAC,CAC7C,CAAC;IACF,mBAAmB,CAAC,QAAQ,wBAAgC,GAAG,EAAE,CAChE,kBAAkB,CAAC,SAAS,CAAC,mBAAmB,CAAC,CACjD,CAAC;AACH,CAAC","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { DataspaceAppDataset, TransferProcess } from \"@twin.org/dataspace-models\";\nimport { EntitySchemaFactory, EntitySchemaHelper } from \"@twin.org/entity\";\nimport { nameof } from \"@twin.org/nameof\";\n\n/**\n * Inits schemas for Control Plane entities.\n */\nexport function initSchema(): void {\n\tEntitySchemaFactory.register(nameof<TransferProcess>(), () =>\n\t\tEntitySchemaHelper.getSchema(TransferProcess)\n\t);\n\tEntitySchemaFactory.register(nameof<DataspaceAppDataset>(), () =>\n\t\tEntitySchemaHelper.getSchema(DataspaceAppDataset)\n\t);\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { type IDataspaceControlPlaneComponent, type IDataspaceControlPlaneResolverComponent, type INegotiationCallback, type ITransferContext } from "@twin.org/dataspace-models";
2
- import { type IDataspaceProtocolContractNegotiation, type IDataspaceProtocolContractNegotiationError, type IDataspaceProtocolTransferCompletionMessage, type IDataspaceProtocolTransferError, type IDataspaceProtocolTransferProcess, type IDataspaceProtocolTransferRequestMessage, type IDataspaceProtocolTransferStartMessage, type IDataspaceProtocolTransferSuspensionMessage, type IDataspaceProtocolTransferTerminationMessage } from "@twin.org/standards-dataspace-protocol";
1
+ import { type IDataspaceControlPlaneComponent, type IDataspaceControlPlaneResolverComponent, type INegotiationCallback, type IDataspaceAppDataset, type ITransferContext } from "@twin.org/dataspace-models";
2
+ import { type IDataspaceProtocolContractNegotiation, type IDataspaceProtocolContractNegotiationError, type IDataspaceProtocolDataset, type IDataspaceProtocolTransferCompletionMessage, type IDataspaceProtocolTransferError, type IDataspaceProtocolTransferProcess, type IDataspaceProtocolTransferRequestMessage, type IDataspaceProtocolTransferStartMessage, type IDataspaceProtocolTransferSuspensionMessage, type IDataspaceProtocolTransferTerminationMessage } from "@twin.org/standards-dataspace-protocol";
3
3
  import type { IDataspaceControlPlaneServiceConstructorOptions } from "./models/IDataspaceControlPlaneServiceConstructorOptions.js";
4
4
  /**
5
5
  * Dataspace Control Plane Service implementation.
@@ -38,7 +38,9 @@ export declare class DataspaceControlPlaneService implements IDataspaceControlPl
38
38
  /**
39
39
  * The service needs to be started when the application is initialized.
40
40
  * Populates the Federated Catalogue with datasets from registered apps
41
- * and starts the stalled negotiation cleanup task.
41
+ * and starts the stalled negotiation cleanup task. Also captures the node
42
+ * identity from ContextIdStore when tenant-token encryption is configured
43
+ * (required to derive the vault key name `${nodeId}/${signingKeyName}`).
42
44
  * @param nodeLoggingComponentType The node logging component type.
43
45
  */
44
46
  start(nodeLoggingComponentType?: string): Promise<void>;
@@ -151,4 +153,41 @@ export declare class DataspaceControlPlaneService implements IDataspaceControlPl
151
153
  * @returns Transfer Context with Agreement, datasetId, and Transfer Process metadata.
152
154
  */
153
155
  resolveProviderPid(providerPid: string, trustPayload: unknown): Promise<ITransferContext>;
156
+ /**
157
+ * Register a dataset for a dataspace app, owned by the calling tenant.
158
+ * @param id Optional explicit id. If omitted, derived from `dataset["@id"]`
159
+ * or generated.
160
+ * @param appId The dataspace app this dataset belongs to.
161
+ * @param dataset The dataset payload.
162
+ * @returns The resolved dataset id.
163
+ */
164
+ createAppDataset(id: string | undefined, appId: string, dataset: IDataspaceProtocolDataset): Promise<string>;
165
+ /**
166
+ * Get a dataset record owned by the calling tenant.
167
+ * @param id The stored dataset id.
168
+ * @returns The stored dataset record.
169
+ */
170
+ getAppDataset(id: string): Promise<IDataspaceAppDataset>;
171
+ /**
172
+ * List the dataspace app datasets owned by the calling tenant.
173
+ * @param cursor Optional pagination cursor.
174
+ * @param limit Optional maximum number of entries to return.
175
+ * @returns The stored datasets and the next-page cursor if more exist.
176
+ */
177
+ listAppDatasets(cursor?: string, limit?: number): Promise<{
178
+ entities: IDataspaceAppDataset[];
179
+ cursor?: string;
180
+ }>;
181
+ /**
182
+ * Update a dataset record owned by the calling tenant.
183
+ * @param id The stored dataset id.
184
+ * @param appId The dataspace app this dataset belongs to.
185
+ * @param dataset The dataset payload.
186
+ */
187
+ updateAppDataset(id: string, appId: string, dataset: IDataspaceProtocolDataset): Promise<void>;
188
+ /**
189
+ * Delete a dataspace app dataset owned by the calling tenant.
190
+ * @param id The stored app dataset id.
191
+ */
192
+ deleteAppDataset(id: string): Promise<void>;
154
193
  }
@@ -57,11 +57,21 @@ export interface IDataspaceControlPlaneServiceConstructorOptions {
57
57
  * @default transfer-process
58
58
  */
59
59
  transferProcessEntityStorageType?: string;
60
+ /**
61
+ * Entity storage type for Dataspace App Dataset entities.
62
+ * @default dataspace-app-dataset
63
+ */
64
+ dataspaceAppDatasetEntityStorageType?: string;
60
65
  /**
61
66
  * Task scheduler component type for periodic cleanup of stalled negotiations.
62
67
  * @default task-scheduler
63
68
  */
64
69
  taskSchedulerComponentType?: string;
70
+ /**
71
+ * URL Transformer component type used to encrypt the tenant token into the data-plane..
72
+ * @default url-transformer
73
+ */
74
+ urlTransformerComponentType?: string;
65
75
  /**
66
76
  * The configuration of the Dataspace Control Plane Service.
67
77
  */
package/docs/changelog.md CHANGED
@@ -1,11 +1,25 @@
1
1
  # Changelog
2
2
 
3
- ## [0.0.3-next.26](https://github.com/twinfoundation/dataspace/compare/dataspace-control-plane-service-v0.0.3-next.25...dataspace-control-plane-service-v0.0.3-next.26) (2026-04-14)
3
+ ## [0.0.3-next.27](https://github.com/iotaledger/twin-dataspace/compare/dataspace-control-plane-service-v0.0.3-next.26...dataspace-control-plane-service-v0.0.3-next.27) (2026-05-08)
4
+
5
+
6
+ ### Features
7
+
8
+ * endpoint encryption + getDatasetTargets multi-target fix ([#112](https://github.com/iotaledger/twin-dataspace/issues/112)) ([3288941](https://github.com/iotaledger/twin-dataspace/commit/328894113c19c7402f7d00dfa77b6a97ae40ca91))
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.26 to 0.0.3-next.27
16
+
17
+ ## [0.0.3-next.26](https://github.com/iotaledger/twin-dataspace/compare/dataspace-control-plane-service-v0.0.3-next.25...dataspace-control-plane-service-v0.0.3-next.26) (2026-04-14)
4
18
 
5
19
 
6
20
  ### Bug Fixes
7
21
 
8
- * dependency update ([fbff0dd](https://github.com/twinfoundation/dataspace/commit/fbff0ddae93d82bd2899001368d7a03b482ce05c))
22
+ * dependency update ([fbff0dd](https://github.com/iotaledger/twin-dataspace/commit/fbff0ddae93d82bd2899001368d7a03b482ce05c))
9
23
 
10
24
 
11
25
  ### Dependencies
@@ -14,7 +28,7 @@
14
28
  * dependencies
15
29
  * @twin.org/dataspace-models bumped from 0.0.3-next.25 to 0.0.3-next.26
16
30
 
17
- ## [0.0.3-next.25](https://github.com/twinfoundation/dataspace/compare/dataspace-control-plane-service-v0.0.3-next.24...dataspace-control-plane-service-v0.0.3-next.25) (2026-04-10)
31
+ ## [0.0.3-next.25](https://github.com/iotaledger/twin-dataspace/compare/dataspace-control-plane-service-v0.0.3-next.24...dataspace-control-plane-service-v0.0.3-next.25) (2026-04-10)
18
32
 
19
33
 
20
34
  ### Miscellaneous Chores
@@ -28,12 +42,12 @@
28
42
  * dependencies
29
43
  * @twin.org/dataspace-models bumped from 0.0.3-next.24 to 0.0.3-next.25
30
44
 
31
- ## [0.0.3-next.24](https://github.com/twinfoundation/dataspace/compare/dataspace-control-plane-service-v0.0.3-next.23...dataspace-control-plane-service-v0.0.3-next.24) (2026-03-31)
45
+ ## [0.0.3-next.24](https://github.com/iotaledger/twin-dataspace/compare/dataspace-control-plane-service-v0.0.3-next.23...dataspace-control-plane-service-v0.0.3-next.24) (2026-03-31)
32
46
 
33
47
 
34
48
  ### Features
35
49
 
36
- * skip tenant dsp transfer routes ([#97](https://github.com/twinfoundation/dataspace/issues/97)) ([2f1ad97](https://github.com/twinfoundation/dataspace/commit/2f1ad971bc50ad24bb9f68759fbd4d44527d3d02))
50
+ * skip tenant dsp transfer routes ([#97](https://github.com/iotaledger/twin-dataspace/issues/97)) ([2f1ad97](https://github.com/iotaledger/twin-dataspace/commit/2f1ad971bc50ad24bb9f68759fbd4d44527d3d02))
37
51
 
38
52
 
39
53
  ### Dependencies
@@ -42,7 +56,7 @@
42
56
  * dependencies
43
57
  * @twin.org/dataspace-models bumped from 0.0.3-next.23 to 0.0.3-next.24
44
58
 
45
- ## [0.0.3-next.23](https://github.com/twinfoundation/dataspace/compare/dataspace-control-plane-service-v0.0.3-next.22...dataspace-control-plane-service-v0.0.3-next.23) (2026-03-25)
59
+ ## [0.0.3-next.23](https://github.com/iotaledger/twin-dataspace/compare/dataspace-control-plane-service-v0.0.3-next.22...dataspace-control-plane-service-v0.0.3-next.23) (2026-03-25)
46
60
 
47
61
 
48
62
  ### Miscellaneous Chores
@@ -56,12 +70,12 @@
56
70
  * dependencies
57
71
  * @twin.org/dataspace-models bumped from 0.0.3-next.22 to 0.0.3-next.23
58
72
 
59
- ## [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)
73
+ ## [0.0.3-next.22](https://github.com/iotaledger/twin-dataspace/compare/dataspace-control-plane-service-v0.0.3-next.21...dataspace-control-plane-service-v0.0.3-next.22) (2026-03-20)
60
74
 
61
75
 
62
76
  ### Features
63
77
 
64
- * internalise constant ([9b9b293](https://github.com/twinfoundation/dataspace/commit/9b9b2933588ee70811a601bc485b5abaa12bed41))
78
+ * internalise constant ([9b9b293](https://github.com/iotaledger/twin-dataspace/commit/9b9b2933588ee70811a601bc485b5abaa12bed41))
65
79
 
66
80
 
67
81
  ### Dependencies
@@ -70,18 +84,18 @@
70
84
  * dependencies
71
85
  * @twin.org/dataspace-models bumped from 0.0.3-next.21 to 0.0.3-next.22
72
86
 
73
- ## [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)
87
+ ## [0.0.3-next.21](https://github.com/iotaledger/twin-dataspace/compare/dataspace-control-plane-service-v0.0.3-next.20...dataspace-control-plane-service-v0.0.3-next.21) (2026-03-17)
74
88
 
75
89
 
76
90
  ### Features
77
91
 
78
- * improve open-api examples ([1368dbe](https://github.com/twinfoundation/dataspace/commit/1368dbed5c36e074b4854942304a19b9ce51e088))
79
- * improve open-api examples ([44f7350](https://github.com/twinfoundation/dataspace/commit/44f7350c625d8d6afdca88b292dd48ef03253412))
92
+ * improve open-api examples ([1368dbe](https://github.com/iotaledger/twin-dataspace/commit/1368dbed5c36e074b4854942304a19b9ce51e088))
93
+ * improve open-api examples ([44f7350](https://github.com/iotaledger/twin-dataspace/commit/44f7350c625d8d6afdca88b292dd48ef03253412))
80
94
 
81
95
 
82
96
  ### Bug Fixes
83
97
 
84
- * handle missing target in catalogue offers during policy derivation check ([#89](https://github.com/twinfoundation/dataspace/issues/89)) ([a0e0dbc](https://github.com/twinfoundation/dataspace/commit/a0e0dbc8d9111d5d1c43e905249825e5d8d62816))
98
+ * handle missing target in catalogue offers during policy derivation check ([#89](https://github.com/iotaledger/twin-dataspace/issues/89)) ([a0e0dbc](https://github.com/iotaledger/twin-dataspace/commit/a0e0dbc8d9111d5d1c43e905249825e5d8d62816))
85
99
 
86
100
 
87
101
  ### Dependencies
@@ -90,12 +104,12 @@
90
104
  * dependencies
91
105
  * @twin.org/dataspace-models bumped from 0.0.3-next.20 to 0.0.3-next.21
92
106
 
93
- ## [0.0.3-next.20](https://github.com/twinfoundation/dataspace/compare/dataspace-control-plane-service-v0.0.3-next.19...dataspace-control-plane-service-v0.0.3-next.20) (2026-03-17)
107
+ ## [0.0.3-next.20](https://github.com/iotaledger/twin-dataspace/compare/dataspace-control-plane-service-v0.0.3-next.19...dataspace-control-plane-service-v0.0.3-next.20) (2026-03-17)
94
108
 
95
109
 
96
110
  ### Features
97
111
 
98
- * improve open-api examples ([f065f4b](https://github.com/twinfoundation/dataspace/commit/f065f4bd55540041a653ef141c4be29a83c5055e))
112
+ * improve open-api examples ([f065f4b](https://github.com/iotaledger/twin-dataspace/commit/f065f4bd55540041a653ef141c4be29a83c5055e))
99
113
 
100
114
 
101
115
  ### Dependencies
@@ -104,12 +118,12 @@
104
118
  * dependencies
105
119
  * @twin.org/dataspace-models bumped from 0.0.3-next.19 to 0.0.3-next.20
106
120
 
107
- ## [0.0.3-next.19](https://github.com/twinfoundation/dataspace/compare/dataspace-control-plane-service-v0.0.3-next.18...dataspace-control-plane-service-v0.0.3-next.19) (2026-03-12)
121
+ ## [0.0.3-next.19](https://github.com/iotaledger/twin-dataspace/compare/dataspace-control-plane-service-v0.0.3-next.18...dataspace-control-plane-service-v0.0.3-next.19) (2026-03-12)
108
122
 
109
123
 
110
124
  ### Features
111
125
 
112
- * improve validation ([#82](https://github.com/twinfoundation/dataspace/issues/82)) ([8bfaf7b](https://github.com/twinfoundation/dataspace/commit/8bfaf7b830f89b63575f8a51ee96bd8ac4da02f4))
126
+ * improve validation ([#82](https://github.com/iotaledger/twin-dataspace/issues/82)) ([8bfaf7b](https://github.com/iotaledger/twin-dataspace/commit/8bfaf7b830f89b63575f8a51ee96bd8ac4da02f4))
113
127
 
114
128
 
115
129
  ### Dependencies
@@ -118,12 +132,12 @@
118
132
  * dependencies
119
133
  * @twin.org/dataspace-models bumped from 0.0.3-next.18 to 0.0.3-next.19
120
134
 
121
- ## [0.0.3-next.18](https://github.com/twinfoundation/dataspace/compare/dataspace-control-plane-service-v0.0.3-next.17...dataspace-control-plane-service-v0.0.3-next.18) (2026-03-09)
135
+ ## [0.0.3-next.18](https://github.com/iotaledger/twin-dataspace/compare/dataspace-control-plane-service-v0.0.3-next.17...dataspace-control-plane-service-v0.0.3-next.18) (2026-03-09)
122
136
 
123
137
 
124
138
  ### Features
125
139
 
126
- * resolve DSP transfer flow bugs for cross-node communication ([#76](https://github.com/twinfoundation/dataspace/issues/76)) ([506a45c](https://github.com/twinfoundation/dataspace/commit/506a45c94e63d5f958b1fc7131adfe452c3e2974))
140
+ * resolve DSP transfer flow bugs for cross-node communication ([#76](https://github.com/iotaledger/twin-dataspace/issues/76)) ([506a45c](https://github.com/iotaledger/twin-dataspace/commit/506a45c94e63d5f958b1fc7131adfe452c3e2974))
127
141
 
128
142
 
129
143
  ### Dependencies
@@ -132,18 +146,18 @@
132
146
  * dependencies
133
147
  * @twin.org/dataspace-models bumped from 0.0.3-next.17 to 0.0.3-next.18
134
148
 
135
- ## [0.0.3-next.17](https://github.com/twinfoundation/dataspace/compare/dataspace-control-plane-service-v0.0.3-next.16...dataspace-control-plane-service-v0.0.3-next.17) (2026-03-06)
149
+ ## [0.0.3-next.17](https://github.com/iotaledger/twin-dataspace/compare/dataspace-control-plane-service-v0.0.3-next.16...dataspace-control-plane-service-v0.0.3-next.17) (2026-03-06)
136
150
 
137
151
 
138
152
  ### Features
139
153
 
140
- * docs update ([8b44c7a](https://github.com/twinfoundation/dataspace/commit/8b44c7a75afb8d377a6f606616f8a78d58439ab4))
141
- * types update ([77c338e](https://github.com/twinfoundation/dataspace/commit/77c338e9244dcc7e3d597fdb06229513b1f13eac))
154
+ * docs update ([8b44c7a](https://github.com/iotaledger/twin-dataspace/commit/8b44c7a75afb8d377a6f606616f8a78d58439ab4))
155
+ * types update ([77c338e](https://github.com/iotaledger/twin-dataspace/commit/77c338e9244dcc7e3d597fdb06229513b1f13eac))
142
156
 
143
157
 
144
158
  ### Bug Fixes
145
159
 
146
- * avoid compaction of incoming activities ([#77](https://github.com/twinfoundation/dataspace/issues/77)) ([ff43d6a](https://github.com/twinfoundation/dataspace/commit/ff43d6a3e1563eb9cb185501134b2a53ae88787c))
160
+ * avoid compaction of incoming activities ([#77](https://github.com/iotaledger/twin-dataspace/issues/77)) ([ff43d6a](https://github.com/iotaledger/twin-dataspace/commit/ff43d6a3e1563eb9cb185501134b2a53ae88787c))
147
161
 
148
162
 
149
163
  ### Dependencies
@@ -152,12 +166,12 @@
152
166
  * dependencies
153
167
  * @twin.org/dataspace-models bumped from 0.0.3-next.16 to 0.0.3-next.17
154
168
 
155
- ## [0.0.3-next.16](https://github.com/twinfoundation/dataspace/compare/dataspace-control-plane-service-v0.0.3-next.15...dataspace-control-plane-service-v0.0.3-next.16) (2026-03-02)
169
+ ## [0.0.3-next.16](https://github.com/iotaledger/twin-dataspace/compare/dataspace-control-plane-service-v0.0.3-next.15...dataspace-control-plane-service-v0.0.3-next.16) (2026-03-02)
156
170
 
157
171
 
158
172
  ### Bug Fixes
159
173
 
160
- * docs and component init ([8557233](https://github.com/twinfoundation/dataspace/commit/8557233fb3b8273c5c9a5b580fb43061f8efe47c))
174
+ * docs and component init ([8557233](https://github.com/iotaledger/twin-dataspace/commit/8557233fb3b8273c5c9a5b580fb43061f8efe47c))
161
175
 
162
176
 
163
177
  ### Dependencies
@@ -166,12 +180,12 @@
166
180
  * dependencies
167
181
  * @twin.org/dataspace-models bumped from 0.0.3-next.15 to 0.0.3-next.16
168
182
 
169
- ## [0.0.3-next.15](https://github.com/twinfoundation/dataspace/compare/dataspace-control-plane-service-v0.0.3-next.14...dataspace-control-plane-service-v0.0.3-next.15) (2026-03-02)
183
+ ## [0.0.3-next.15](https://github.com/iotaledger/twin-dataspace/compare/dataspace-control-plane-service-v0.0.3-next.14...dataspace-control-plane-service-v0.0.3-next.15) (2026-03-02)
170
184
 
171
185
 
172
186
  ### Features
173
187
 
174
- * unification of the data exchange and the data space connector ([#57](https://github.com/twinfoundation/dataspace/issues/57)) ([df2644d](https://github.com/twinfoundation/dataspace/commit/df2644d989471e07dadd83d27bef736179e31bf4))
188
+ * unification of the data exchange and the data space connector ([#57](https://github.com/iotaledger/twin-dataspace/issues/57)) ([df2644d](https://github.com/iotaledger/twin-dataspace/commit/df2644d989471e07dadd83d27bef736179e31bf4))
175
189
 
176
190
 
177
191
  ### Dependencies
@@ -180,12 +194,12 @@
180
194
  * dependencies
181
195
  * @twin.org/dataspace-models bumped from 0.0.3-next.14 to 0.0.3-next.15
182
196
 
183
- ## [0.0.3-next.1](https://github.com/twinfoundation/data-exchange/compare/data-exchange-service-v0.0.3-next.0...data-exchange-service-v0.0.3-next.1) (2026-01-19)
197
+ ## [0.0.3-next.1](https://github.com/iotaledger/twin-data-exchange/compare/data-exchange-service-v0.0.3-next.0...data-exchange-service-v0.0.3-next.1) (2026-01-19)
184
198
 
185
199
 
186
200
  ### Features
187
201
 
188
- * mocking data exchange basic methods ([#5](https://github.com/twinfoundation/data-exchange/issues/5)) ([6cb00c0](https://github.com/twinfoundation/data-exchange/commit/6cb00c029aacf46da7bed0b3c97a21ef4102784a))
202
+ * mocking data exchange basic methods ([#5](https://github.com/iotaledger/twin-data-exchange/issues/5)) ([6cb00c0](https://github.com/iotaledger/twin-data-exchange/commit/6cb00c029aacf46da7bed0b3c97a21ef4102784a))
189
203
 
190
204
 
191
205
  ### Dependencies
@@ -120,7 +120,9 @@ The key used when registering the callback.
120
120
 
121
121
  The service needs to be started when the application is initialized.
122
122
  Populates the Federated Catalogue with datasets from registered apps
123
- and starts the stalled negotiation cleanup task.
123
+ and starts the stalled negotiation cleanup task. Also captures the node
124
+ identity from ContextIdStore when tenant-token encryption is configured
125
+ (required to derive the vault key name `${nodeId}/${signingKeyName}`).
124
126
 
125
127
  #### Parameters
126
128
 
@@ -553,3 +555,160 @@ Transfer Context with Agreement, datasetId, and Transfer Process metadata.
553
555
  #### Implementation of
554
556
 
555
557
  `IDataspaceControlPlaneResolverComponent.resolveProviderPid`
558
+
559
+ ***
560
+
561
+ ### createAppDataset() {#createappdataset}
562
+
563
+ > **createAppDataset**(`id`, `appId`, `dataset`): `Promise`\<`string`\>
564
+
565
+ Register a dataset for a dataspace app, owned by the calling tenant.
566
+
567
+ #### Parameters
568
+
569
+ ##### id
570
+
571
+ `string` \| `undefined`
572
+
573
+ Optional explicit id. If omitted, derived from `dataset["@id"]`
574
+ or generated.
575
+
576
+ ##### appId
577
+
578
+ `string`
579
+
580
+ The dataspace app this dataset belongs to.
581
+
582
+ ##### dataset
583
+
584
+ `IDataspaceProtocolDataset`
585
+
586
+ The dataset payload.
587
+
588
+ #### Returns
589
+
590
+ `Promise`\<`string`\>
591
+
592
+ The resolved dataset id.
593
+
594
+ #### Implementation of
595
+
596
+ `IDataspaceControlPlaneComponent.createAppDataset`
597
+
598
+ ***
599
+
600
+ ### getAppDataset() {#getappdataset}
601
+
602
+ > **getAppDataset**(`id`): `Promise`\<`IDataspaceAppDataset`\>
603
+
604
+ Get a dataset record owned by the calling tenant.
605
+
606
+ #### Parameters
607
+
608
+ ##### id
609
+
610
+ `string`
611
+
612
+ The stored dataset id.
613
+
614
+ #### Returns
615
+
616
+ `Promise`\<`IDataspaceAppDataset`\>
617
+
618
+ The stored dataset record.
619
+
620
+ #### Implementation of
621
+
622
+ `IDataspaceControlPlaneComponent.getAppDataset`
623
+
624
+ ***
625
+
626
+ ### listAppDatasets() {#listappdatasets}
627
+
628
+ > **listAppDatasets**(`cursor?`, `limit?`): `Promise`\<\{ `entities`: `IDataspaceAppDataset`[]; `cursor?`: `string`; \}\>
629
+
630
+ List the dataspace app datasets owned by the calling tenant.
631
+
632
+ #### Parameters
633
+
634
+ ##### cursor?
635
+
636
+ `string`
637
+
638
+ Optional pagination cursor.
639
+
640
+ ##### limit?
641
+
642
+ `number`
643
+
644
+ Optional maximum number of entries to return.
645
+
646
+ #### Returns
647
+
648
+ `Promise`\<\{ `entities`: `IDataspaceAppDataset`[]; `cursor?`: `string`; \}\>
649
+
650
+ The stored datasets and the next-page cursor if more exist.
651
+
652
+ #### Implementation of
653
+
654
+ `IDataspaceControlPlaneComponent.listAppDatasets`
655
+
656
+ ***
657
+
658
+ ### updateAppDataset() {#updateappdataset}
659
+
660
+ > **updateAppDataset**(`id`, `appId`, `dataset`): `Promise`\<`void`\>
661
+
662
+ Update a dataset record owned by the calling tenant.
663
+
664
+ #### Parameters
665
+
666
+ ##### id
667
+
668
+ `string`
669
+
670
+ The stored dataset id.
671
+
672
+ ##### appId
673
+
674
+ `string`
675
+
676
+ The dataspace app this dataset belongs to.
677
+
678
+ ##### dataset
679
+
680
+ `IDataspaceProtocolDataset`
681
+
682
+ The dataset payload.
683
+
684
+ #### Returns
685
+
686
+ `Promise`\<`void`\>
687
+
688
+ #### Implementation of
689
+
690
+ `IDataspaceControlPlaneComponent.updateAppDataset`
691
+
692
+ ***
693
+
694
+ ### deleteAppDataset() {#deleteappdataset}
695
+
696
+ > **deleteAppDataset**(`id`): `Promise`\<`void`\>
697
+
698
+ Delete a dataspace app dataset owned by the calling tenant.
699
+
700
+ #### Parameters
701
+
702
+ ##### id
703
+
704
+ `string`
705
+
706
+ The stored app dataset id.
707
+
708
+ #### Returns
709
+
710
+ `Promise`\<`void`\>
711
+
712
+ #### Implementation of
713
+
714
+ `IDataspaceControlPlaneComponent.deleteAppDataset`
@@ -139,6 +139,20 @@ transfer-process
139
139
 
140
140
  ***
141
141
 
142
+ ### dataspaceAppDatasetEntityStorageType? {#dataspaceappdatasetentitystoragetype}
143
+
144
+ > `optional` **dataspaceAppDatasetEntityStorageType?**: `string`
145
+
146
+ Entity storage type for Dataspace App Dataset entities.
147
+
148
+ #### Default
149
+
150
+ ```ts
151
+ dataspace-app-dataset
152
+ ```
153
+
154
+ ***
155
+
142
156
  ### taskSchedulerComponentType? {#taskschedulercomponenttype}
143
157
 
144
158
  > `optional` **taskSchedulerComponentType?**: `string`
@@ -153,6 +167,20 @@ task-scheduler
153
167
 
154
168
  ***
155
169
 
170
+ ### urlTransformerComponentType? {#urltransformercomponenttype}
171
+
172
+ > `optional` **urlTransformerComponentType?**: `string`
173
+
174
+ URL Transformer component type used to encrypt the tenant token into the data-plane..
175
+
176
+ #### Default
177
+
178
+ ```ts
179
+ url-transformer
180
+ ```
181
+
182
+ ***
183
+
156
184
  ### config? {#config}
157
185
 
158
186
  > `optional` **config?**: [`IDataspaceControlPlaneServiceConfig`](IDataspaceControlPlaneServiceConfig.md)
package/locales/en.json CHANGED
@@ -12,8 +12,8 @@
12
12
  "resolvedProviderPid": "Resolved providerPid to Transfer Context",
13
13
  "catalogDatasetFound": "Dataset validated in Federated Catalogue",
14
14
  "agreementMatchedOffer": "Agreement matched Catalog Offer",
15
- "populatingFederatedCatalogue": "Populating Federated Catalogue with datasets from registered apps",
16
- "federatedCataloguePopulated": "Federated Catalogue population completed (registered: {registeredCount}, errors: {errorCount}, apps: {totalApps})",
15
+ "populatingFederatedCatalogue": "Populating Federated Catalogue with stored app datasets",
16
+ "federatedCataloguePopulated": "Federated Catalogue population completed (registered: {registeredCount}, errors: {errorCount}, datasets: {totalDatasets})",
17
17
  "startingContractNegotiation": "Starting contract negotiation with provider",
18
18
  "offerFoundInCatalog": "Offer found in Federated Catalogue and validated",
19
19
  "negotiationInitiated": "Contract negotiation initiated successfully",
@@ -34,8 +34,7 @@
34
34
  "debug": {
35
35
  "dataspaceControlPlaneService": {
36
36
  "engineCloneStart": "Skipping Federated Catalogue population (engine clone or no engine)",
37
- "discoveredApps": "Discovered {count} registered Dataspace apps",
38
- "datasetRegistered": "Dataset {datasetId} registered from app {appName}"
37
+ "datasetRegistered": "Dataset {datasetId} registered for app {appId} (tenant: {tenantId})"
39
38
  }
40
39
  },
41
40
  "warn": {
@@ -54,8 +53,6 @@
54
53
  "dataspaceControlPlaneService": {
55
54
  "transferProcessNotFound": "Transfer Process not found",
56
55
  "pullTransfersNotSupported": "PULL transfers are not supported. Configure dataPlanePath in service configuration to enable PULL transfers.",
57
- "datasetRegistrationFailed": "Failed to register dataset {datasetId} from app {appName}",
58
- "appDatasetsRetrievalFailed": "Failed to retrieve datasets from app {appName}",
59
56
  "transferProcessTerminated": "Transfer Process \"{consumerPid}\" is terminated and cannot be used",
60
57
  "transferProcessTerminatedProvider": "Transfer Process \"{providerPid}\" is terminated and cannot be used",
61
58
  "invalidTransferRequest": "Transfer Request does not conform to Dataspace Protocol specification",
@@ -93,7 +90,12 @@
93
90
  "callerNotAuthorizedAsConsumer": "The caller's verified identity does not match the consumer for this transfer process",
94
91
  "callerNotAuthorizedAsProvider": "The caller's verified identity does not match the provider for this transfer process",
95
92
  "callerNotAuthorizedForTransfer": "The caller's verified identity does not match the consumer or provider for this transfer process",
96
- "multipleAssignersNotSupported": "Multiple assigners found in agreement, which is not supported. Only single assigner agreements are supported."
93
+ "multipleAssignersNotSupported": "Multiple assigners found in agreement, which is not supported. Only single assigner agreements are supported.",
94
+ "datasetPublishFailed": "Failed to publish dataset {datasetRecordId} for app {appId} (tenant: {tenantId})",
95
+ "datasetNodeContextRequired": "A node context is required to register a dataset.",
96
+ "datasetAlreadyExists": "A dataset with id \"{id}\" already exists.",
97
+ "datasetNotFound": "Dataset not found",
98
+ "datasetWrongTenant": "The calling tenant does not own this dataset."
97
99
  },
98
100
  "dataspaceControlPlanePolicyRequester": {}
99
101
  }
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@twin.org/dataspace-control-plane-service",
3
- "version": "0.0.3-next.26",
3
+ "version": "0.0.3-next.27",
4
4
  "description": "Implements agreement negotiation and transfer process lifecycle management for control plane operations.",
5
5
  "repository": {
6
6
  "type": "git",
7
- "url": "git+https://github.com/twinfoundation/dataspace.git",
7
+ "url": "git+https://github.com/iotaledger/dataspace.git",
8
8
  "directory": "packages/dataspace-control-plane-service"
9
9
  },
10
10
  "author": "martyn.janes@iota.org",
@@ -15,9 +15,10 @@
15
15
  },
16
16
  "dependencies": {
17
17
  "@twin.org/api-models": "next",
18
+ "@twin.org/api-tenant-processor": "next",
18
19
  "@twin.org/context": "next",
19
20
  "@twin.org/core": "next",
20
- "@twin.org/dataspace-models": "0.0.3-next.26",
21
+ "@twin.org/dataspace-models": "0.0.3-next.27",
21
22
  "@twin.org/entity": "next",
22
23
  "@twin.org/entity-storage-models": "next",
23
24
  "@twin.org/federated-catalogue-models": "next",
@@ -26,7 +27,8 @@
26
27
  "@twin.org/rights-management-models": "next",
27
28
  "@twin.org/standards-dataspace-protocol": "next",
28
29
  "@twin.org/standards-w3c-odrl": "next",
29
- "@twin.org/trust-models": "next"
30
+ "@twin.org/trust-models": "next",
31
+ "@twin.org/vault-models": "next"
30
32
  },
31
33
  "main": "./dist/es/index.js",
32
34
  "types": "./dist/types/index.d.ts",
@@ -64,7 +66,7 @@
64
66
  "business-logic"
65
67
  ],
66
68
  "bugs": {
67
- "url": "git+https://github.com/twinfoundation/dataspace/issues"
69
+ "url": "git+https://github.com/iotaledger/dataspace/issues"
68
70
  },
69
71
  "homepage": "https://twindev.org"
70
72
  }