@twin.org/dataspace-control-plane-service 0.9.0 → 0.9.1-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +1 -1
  2. package/dist/es/dataspaceControlPlaneRoutes.js +79 -7
  3. package/dist/es/dataspaceControlPlaneRoutes.js.map +1 -1
  4. package/dist/es/dataspaceControlPlaneService.js +121 -356
  5. package/dist/es/dataspaceControlPlaneService.js.map +1 -1
  6. package/dist/es/factories/transferHandlerFactory.js +11 -0
  7. package/dist/es/factories/transferHandlerFactory.js.map +1 -0
  8. package/dist/es/handlers/httpDataPostTransferHandler.js +111 -0
  9. package/dist/es/handlers/httpDataPostTransferHandler.js.map +1 -0
  10. package/dist/es/handlers/httpDataPullTransferHandler.js +108 -0
  11. package/dist/es/handlers/httpDataPullTransferHandler.js.map +1 -0
  12. package/dist/es/handlers/httpDataPushTransferHandler.js +114 -0
  13. package/dist/es/handlers/httpDataPushTransferHandler.js.map +1 -0
  14. package/dist/es/index.js +7 -0
  15. package/dist/es/index.js.map +1 -1
  16. package/dist/es/models/IDataspaceControlPlaneServiceConfig.js.map +1 -1
  17. package/dist/es/models/ITransferHandler.js +2 -0
  18. package/dist/es/models/ITransferHandler.js.map +1 -0
  19. package/dist/es/models/ITransferHandlerPrepareContext.js +4 -0
  20. package/dist/es/models/ITransferHandlerPrepareContext.js.map +1 -0
  21. package/dist/es/models/ITransferHandlerStartContext.js +2 -0
  22. package/dist/es/models/ITransferHandlerStartContext.js.map +1 -0
  23. package/dist/types/dataspaceControlPlaneRoutes.d.ts +1 -1
  24. package/dist/types/dataspaceControlPlaneService.d.ts +6 -1
  25. package/dist/types/factories/transferHandlerFactory.d.ts +8 -0
  26. package/dist/types/handlers/httpDataPostTransferHandler.d.ts +63 -0
  27. package/dist/types/handlers/httpDataPullTransferHandler.d.ts +63 -0
  28. package/dist/types/handlers/httpDataPushTransferHandler.d.ts +68 -0
  29. package/dist/types/index.d.ts +7 -0
  30. package/dist/types/models/IDataspaceControlPlaneServiceConfig.d.ts +10 -5
  31. package/dist/types/models/ITransferHandler.d.ts +62 -0
  32. package/dist/types/models/ITransferHandlerPrepareContext.d.ts +21 -0
  33. package/dist/types/models/ITransferHandlerStartContext.d.ts +31 -0
  34. package/docs/changelog.md +190 -0
  35. package/docs/reference/classes/DataspaceControlPlaneService.md +18 -0
  36. package/docs/reference/classes/HttpDataPostTransferHandler.md +235 -0
  37. package/docs/reference/classes/HttpDataPullTransferHandler.md +235 -0
  38. package/docs/reference/classes/HttpDataPushTransferHandler.md +242 -0
  39. package/docs/reference/index.md +7 -0
  40. package/docs/reference/interfaces/IDataspaceControlPlaneServiceConfig.md +10 -5
  41. package/docs/reference/interfaces/ITransferHandler.md +180 -0
  42. package/docs/reference/interfaces/ITransferHandlerPrepareContext.md +35 -0
  43. package/docs/reference/interfaces/ITransferHandlerStartContext.md +51 -0
  44. package/docs/reference/variables/TransferHandlerFactory.md +7 -0
  45. package/locales/en.json +14 -11
  46. package/package.json +18 -18
@@ -4,12 +4,18 @@
4
4
 
5
5
  - [DataspaceControlPlanePolicyRequester](classes/DataspaceControlPlanePolicyRequester.md)
6
6
  - [DataspaceControlPlaneService](classes/DataspaceControlPlaneService.md)
7
+ - [HttpDataPostTransferHandler](classes/HttpDataPostTransferHandler.md)
8
+ - [HttpDataPullTransferHandler](classes/HttpDataPullTransferHandler.md)
9
+ - [HttpDataPushTransferHandler](classes/HttpDataPushTransferHandler.md)
7
10
 
8
11
  ## Interfaces
9
12
 
10
13
  - [IDataspaceControlPlaneServiceConfig](interfaces/IDataspaceControlPlaneServiceConfig.md)
11
14
  - [IDataspaceControlPlaneServiceConstructorOptions](interfaces/IDataspaceControlPlaneServiceConstructorOptions.md)
12
15
  - [INegotiationState](interfaces/INegotiationState.md)
16
+ - [ITransferHandler](interfaces/ITransferHandler.md)
17
+ - [ITransferHandlerPrepareContext](interfaces/ITransferHandlerPrepareContext.md)
18
+ - [ITransferHandlerStartContext](interfaces/ITransferHandlerStartContext.md)
13
19
 
14
20
  ## Type Aliases
15
21
 
@@ -18,6 +24,7 @@
18
24
  ## Variables
19
25
 
20
26
  - [tagsDataspaceControlPlane](variables/tagsDataspaceControlPlane.md)
27
+ - [TransferHandlerFactory](variables/TransferHandlerFactory.md)
21
28
  - [EndpointProperties](variables/EndpointProperties.md)
22
29
  - [restEntryPoints](variables/restEntryPoints.md)
23
30
 
@@ -17,13 +17,18 @@ If not specified, the default trust generator configured in the trust component
17
17
 
18
18
  > `optional` **dataPlanePath?**: `string`
19
19
 
20
- Data plane endpoint path for PULL transfers (path only, not full URL).
21
- Will be combined with the public origin.
20
+ Base route path for the data plane service (path only, not full URL).
21
+ Combined with the public origin to form the `dataAddress.endpoint` sent to PULL consumers
22
+ and the inbox URL sent to PUSH providers.
22
23
 
23
- REQUIRED if PULL transfers are supported.
24
- If not specified, PULL transfers will not be available.
24
+ This must be the mount-point prefix of the data plane routes, NOT a specific route path.
25
+ Do NOT append sub-paths such as `/entities` or `/inbox` — those are appended automatically
26
+ by each transfer handler and by the data plane REST client.
25
27
 
26
- Example: "data-plane/data" or "api/data-plane/data"
28
+ REQUIRED if PULL or PUSH transfers are supported.
29
+ If not specified, PULL and PUSH transfers will not be available.
30
+
31
+ Example: "dataspace"
27
32
 
28
33
  ***
29
34
 
@@ -0,0 +1,180 @@
1
+ # Interface: ITransferHandler
2
+
3
+ Format-specific handler for transfer process operations.
4
+ One implementation exists per DataspaceTransferFormat value; the TransferHandlerFactory
5
+ returns the correct instance keyed on the format string.
6
+
7
+ ## Extends
8
+
9
+ - `IComponent`
10
+
11
+ ## Methods
12
+
13
+ ### buildConsumerDataAddress() {#buildconsumerdataaddress}
14
+
15
+ > **buildConsumerDataAddress**(`ctx`): `IDataspaceProtocolDataAddress` \| `undefined`
16
+
17
+ Optionally build a consumer dataAddress for the TransferRequestMessage.
18
+ Called during prepareTransfer. Returns undefined for formats that do not
19
+ require a consumer-supplied dataAddress (PULL and POST).
20
+
21
+ #### Parameters
22
+
23
+ ##### ctx
24
+
25
+ [`ITransferHandlerPrepareContext`](ITransferHandlerPrepareContext.md)
26
+
27
+ The prepare context.
28
+
29
+ #### Returns
30
+
31
+ `IDataspaceProtocolDataAddress` \| `undefined`
32
+
33
+ The consumer dataAddress, or undefined if not required for this format.
34
+
35
+ ***
36
+
37
+ ### buildProviderStartDataAddress() {#buildproviderstartdataaddress}
38
+
39
+ > **buildProviderStartDataAddress**(`ctx`): `Promise`\<`IDataspaceProtocolDataAddress` \| `undefined`\>
40
+
41
+ Build the provider dataAddress for the TransferStartMessage.
42
+ Called during startTransfer (provider role). Throws a GeneralError when
43
+ required configuration (e.g. dataPlanePath) is absent.
44
+
45
+ #### Parameters
46
+
47
+ ##### ctx
48
+
49
+ [`ITransferHandlerStartContext`](ITransferHandlerStartContext.md)
50
+
51
+ The start context.
52
+
53
+ #### Returns
54
+
55
+ `Promise`\<`IDataspaceProtocolDataAddress` \| `undefined`\>
56
+
57
+ The provider dataAddress, or undefined if not applicable.
58
+
59
+ ***
60
+
61
+ ### onProviderStart() {#onproviderstart}
62
+
63
+ > **onProviderStart**(`dataPlaneComponent`, `consumerPid`, `previousState`): `Promise`\<`void`\>
64
+
65
+ Post-start hook for the provider role. Called after state has been persisted
66
+ to STARTED. PUSH transfers set up (or resume) the data-plane push subscription
67
+ here; all other formats are no-ops.
68
+
69
+ #### Parameters
70
+
71
+ ##### dataPlaneComponent
72
+
73
+ `IDataspaceDataPlaneComponent`
74
+
75
+ The data plane component instance.
76
+
77
+ ##### consumerPid
78
+
79
+ `string`
80
+
81
+ The consumer process ID.
82
+
83
+ ##### previousState
84
+
85
+ `DataspaceProtocolTransferProcessStateType`
86
+
87
+ The state before the STARTED transition.
88
+
89
+ #### Returns
90
+
91
+ `Promise`\<`void`\>
92
+
93
+ A promise that resolves when the hook completes.
94
+
95
+ ***
96
+
97
+ ### onComplete() {#oncomplete}
98
+
99
+ > **onComplete**(`dataPlaneComponent`, `consumerPid`): `Promise`\<`void`\>
100
+
101
+ Called after a transfer transitions to COMPLETED.
102
+ PUSH and POST tear down the push subscription; PULL is a no-op.
103
+
104
+ #### Parameters
105
+
106
+ ##### dataPlaneComponent
107
+
108
+ `IDataspaceDataPlaneComponent`
109
+
110
+ The data plane component instance.
111
+
112
+ ##### consumerPid
113
+
114
+ `string`
115
+
116
+ The consumer process ID.
117
+
118
+ #### Returns
119
+
120
+ `Promise`\<`void`\>
121
+
122
+ A promise that resolves when the hook completes.
123
+
124
+ ***
125
+
126
+ ### onSuspend() {#onsuspend}
127
+
128
+ > **onSuspend**(`dataPlaneComponent`, `consumerPid`): `Promise`\<`void`\>
129
+
130
+ Called after a transfer transitions to SUSPENDED.
131
+ PUSH and POST suspend the push subscription; PULL is a no-op.
132
+
133
+ #### Parameters
134
+
135
+ ##### dataPlaneComponent
136
+
137
+ `IDataspaceDataPlaneComponent`
138
+
139
+ The data plane component instance.
140
+
141
+ ##### consumerPid
142
+
143
+ `string`
144
+
145
+ The consumer process ID.
146
+
147
+ #### Returns
148
+
149
+ `Promise`\<`void`\>
150
+
151
+ A promise that resolves when the hook completes.
152
+
153
+ ***
154
+
155
+ ### onTerminate() {#onterminate}
156
+
157
+ > **onTerminate**(`dataPlaneComponent`, `consumerPid`): `Promise`\<`void`\>
158
+
159
+ Called after a transfer transitions to TERMINATED.
160
+ PUSH and POST tear down the push subscription; PULL is a no-op.
161
+
162
+ #### Parameters
163
+
164
+ ##### dataPlaneComponent
165
+
166
+ `IDataspaceDataPlaneComponent`
167
+
168
+ The data plane component instance.
169
+
170
+ ##### consumerPid
171
+
172
+ `string`
173
+
174
+ The consumer process ID.
175
+
176
+ #### Returns
177
+
178
+ `Promise`\<`void`\>
179
+
180
+ A promise that resolves when the hook completes.
@@ -0,0 +1,35 @@
1
+ # Interface: ITransferHandlerPrepareContext
2
+
3
+ Context supplied to buildConsumerDataAddress during prepareTransfer.
4
+
5
+ ## Properties
6
+
7
+ ### consumerPid {#consumerpid}
8
+
9
+ > **consumerPid**: `string`
10
+
11
+ The consumer process ID.
12
+
13
+ ***
14
+
15
+ ### origin {#origin}
16
+
17
+ > **origin**: `string`
18
+
19
+ The consumer's base origin URL.
20
+
21
+ ***
22
+
23
+ ### dataPlanePath {#dataplanepath}
24
+
25
+ > **dataPlanePath**: `string` \| `undefined`
26
+
27
+ The data plane path segment, if configured.
28
+
29
+ ***
30
+
31
+ ### organizationIdentity {#organizationidentity}
32
+
33
+ > **organizationIdentity**: `string`
34
+
35
+ The organization identity resolved from the current context.
@@ -0,0 +1,51 @@
1
+ # Interface: ITransferHandlerStartContext
2
+
3
+ Context supplied to buildProviderStartDataAddress during startTransfer (provider role).
4
+
5
+ ## Properties
6
+
7
+ ### entity {#entity}
8
+
9
+ > **entity**: `ITransferProcess`
10
+
11
+ The transfer process entity.
12
+
13
+ ***
14
+
15
+ ### publicOrigin {#publicorigin}
16
+
17
+ > **publicOrigin**: `string`
18
+
19
+ The provider's public origin URL.
20
+
21
+ ***
22
+
23
+ ### dataPlanePath {#dataplanepath}
24
+
25
+ > **dataPlanePath**: `string` \| `undefined`
26
+
27
+ The data plane path segment, if configured.
28
+
29
+ ***
30
+
31
+ ### organizationIdentity {#organizationidentity}
32
+
33
+ > **organizationIdentity**: `string`
34
+
35
+ The organization identity resolved from the current context.
36
+
37
+ ***
38
+
39
+ ### trustComponent {#trustcomponent}
40
+
41
+ > **trustComponent**: `ITrustComponent`
42
+
43
+ The trust component for generating access tokens.
44
+
45
+ ***
46
+
47
+ ### overrideTrustGeneratorType {#overridetrustgeneratortype}
48
+
49
+ > **overrideTrustGeneratorType**: `string` \| `undefined`
50
+
51
+ The override trust generator type, if configured.
@@ -0,0 +1,7 @@
1
+ # Variable: TransferHandlerFactory
2
+
3
+ > `const` **TransferHandlerFactory**: `Factory`\<[`ITransferHandler`](../interfaces/ITransferHandler.md)\>
4
+
5
+ Factory for registering and retrieving format-specific ITransferHandler instances.
6
+ Keys are DataspaceTransferFormat values (e.g. "HttpData-PULL").
7
+ Throws GeneralError when get() is called with an unregistered format.
package/locales/en.json CHANGED
@@ -4,7 +4,6 @@
4
4
  "transferProcessInitiated": "Transfer Process initiated",
5
5
  "transferProcessQueried": "Transfer Process queried (role: {role})",
6
6
  "transferProcessStarted": "Transfer Process started",
7
- "dataAccessTokenGenerated": "Data access token generated for PULL transfer",
8
7
  "transferProcessCompleted": "Transfer Process completed",
9
8
  "transferProcessSuspended": "Transfer Process suspended",
10
9
  "transferProcessTerminated": "Transfer Process terminated",
@@ -12,8 +11,6 @@
12
11
  "resolvedProviderPid": "Resolved providerPid to Transfer Context",
13
12
  "catalogDatasetFound": "Dataset validated in Federated Catalogue",
14
13
  "agreementMatchedOffer": "Agreement matched Catalog Offer",
15
- "populatingFederatedCatalogue": "Populating Federated Catalogue with stored app datasets",
16
- "federatedCataloguePopulated": "Federated Catalogue population completed (registered: {registeredCount}, errors: {errorCount}, datasets: {totalDatasets})",
17
14
  "startingContractNegotiation": "Starting contract negotiation with provider",
18
15
  "offerFoundInCatalog": "Offer found in Federated Catalogue and validated",
19
16
  "negotiationInitiated": "Contract negotiation initiated successfully",
@@ -25,7 +22,6 @@
25
22
  "negotiationHistoryRetrieved": "Negotiation history retrieved successfully",
26
23
  "stalledNegotiationsCleanupComplete": "Stalled negotiations cleanup completed (cleanedUp: {cleanedUp})",
27
24
  "stalledTransfersCleanupComplete": "Stalled transfers cleanup completed (cleanedUp: {cleanedUp})",
28
- "pushTransferStarted": "PUSH transfer started (consumerPid: {consumerPid}, providerPid: {providerPid}, endpoint: {endpoint})",
29
25
  "preparingTransfer": "Preparing consumer-initiated data transfer (agreementId: {agreementId}, providerEndpoint: {providerEndpoint}, format: {format})",
30
26
  "transferPrepared": "Consumer data transfer prepared successfully (consumerPid: {consumerPid}, providerPid: {providerPid}, agreementId: {agreementId}, format: {format})"
31
27
  },
@@ -39,8 +35,7 @@
39
35
  },
40
36
  "debug": {
41
37
  "dataspaceControlPlaneService": {
42
- "engineCloneStart": "Skipping Federated Catalogue population (engine clone or no engine)",
43
- "datasetRegistered": "Dataset {datasetId} registered for app {appId} (tenant: {tenantId})"
38
+ "engineCloneStart": "Skipping control plane startup tasks (engine clone or no engine)"
44
39
  }
45
40
  },
46
41
  "warn": {
@@ -62,7 +57,6 @@
62
57
  "autoStartFailed": "Provider auto-start of a requested transfer failed (consumerPid: {consumerPid})",
63
58
  "autoStartPublicOriginMissing": "Cannot auto-start the transfer: this node's public origin could not be resolved; holding the transfer in REQUESTED (consumerPid: {consumerPid})",
64
59
  "transferProcessNotFound": "Transfer Process not found",
65
- "pullTransfersNotSupported": "PULL transfers are not supported. Configure dataPlanePath in service configuration to enable PULL transfers.",
66
60
  "transferProcessTerminated": "Transfer Process \"{consumerPid}\" is terminated and cannot be used",
67
61
  "transferProcessTerminatedProvider": "Transfer Process \"{providerPid}\" is terminated and cannot be used",
68
62
  "invalidTransferRequest": "Transfer Request does not conform to Dataspace Protocol specification",
@@ -103,9 +97,6 @@
103
97
  "callerNotAuthorizedAsProvider": "The caller's verified identity does not match the provider for this transfer process",
104
98
  "callerNotAuthorizedForTransfer": "The caller's verified identity does not match the consumer or provider for this transfer process",
105
99
  "multipleAssignersNotSupported": "Multiple assigners found in agreement, which is not supported. Only single assigner agreements are supported.",
106
- "invalidPushDataAddress": "PUSH transfer cannot start: consumer dataAddress is missing endpoint or endpointType (consumerPid: {consumerPid})",
107
- "pushTransferDataPathNotConfigured": "PUSH transfer cannot start: dataPlanePath is not configured (consumerPid: {consumerPid})",
108
- "dataPlaneNotRegistered": "Push-mode transfer requires the data plane component to be registered (factory key: \"dataspace-data-plane\"). This deployment was configured without a data plane — register one to enable push, or use pull-mode transfers only.",
109
100
  "datasetPublishFailed": "Failed to publish dataset \"{datasetId}\" for app \"{appId}\" (tenant: \"{tenantId}\")",
110
101
  "datasetRemoveFailed": "Failed to remove dataset \"{datasetId}\" from the Federated Catalogue (tenant: \"{tenantId}\")",
111
102
  "datasetAlreadyExists": "A dataset with id \"{existingId}\" already exists.",
@@ -114,6 +105,18 @@
114
105
  "transferWrongOrganization": "The calling organization does not own this transfer.",
115
106
  "invalidDatasetId": "Dataset ID \"{id}\" is not a valid URN or URL"
116
107
  },
117
- "dataspaceControlPlanePolicyRequester": {}
108
+ "dataspaceControlPlanePolicyRequester": {},
109
+ "httpDataPullTransferHandler": {
110
+ "pullTransfersNotSupported": "PULL transfers are not supported: dataPlanePath is not configured (consumerPid: {consumerPid}, providerPid: {providerPid})",
111
+ "providerIdentityMissing": "Provider identity (DID) is required to sign data access tokens but was not set on the Transfer Process"
112
+ },
113
+ "httpDataPushTransferHandler": {
114
+ "pushTransferDataPathNotConfigured": "PUSH transfer cannot start: dataPlanePath is not configured (consumerPid: {consumerPid})",
115
+ "invalidPushDataAddress": "PUSH transfer cannot start: consumer dataAddress is missing endpoint or endpointType (consumerPid: {consumerPid})"
116
+ },
117
+ "httpDataPostTransferHandler": {
118
+ "pushTransferDataPathNotConfigured": "POST transfer cannot start: dataPlanePath is not configured (consumerPid: {consumerPid})",
119
+ "providerIdentityMissing": "Provider identity (DID) is required to sign data access tokens but was not set on the Transfer Process"
120
+ }
118
121
  }
119
122
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@twin.org/dataspace-control-plane-service",
3
- "version": "0.9.0",
3
+ "version": "0.9.1-next.10",
4
4
  "description": "Implements agreement negotiation and transfer process lifecycle management for control plane operations.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -14,23 +14,23 @@
14
14
  "node": ">=20.0.0"
15
15
  },
16
16
  "dependencies": {
17
- "@twin.org/api-models": "^0.9.0",
18
- "@twin.org/api-tenant-processor": "^0.9.0",
19
- "@twin.org/context": "^0.9.0",
20
- "@twin.org/core": "^0.9.0",
21
- "@twin.org/crypto": "^0.9.0",
22
- "@twin.org/dataspace-models": "^0.9.0",
23
- "@twin.org/entity": "^0.9.0",
24
- "@twin.org/entity-storage-models": "^0.9.0",
25
- "@twin.org/federated-catalogue-models": "^0.9.0",
26
- "@twin.org/logging-models": "^0.9.0",
27
- "@twin.org/nameof": "^0.9.0",
28
- "@twin.org/rights-management-models": "^0.9.0",
29
- "@twin.org/standards-dataspace-protocol": "^0.9.0",
30
- "@twin.org/standards-w3c-odrl": "^0.9.0",
31
- "@twin.org/telemetry-models": "^0.9.0",
32
- "@twin.org/trust-models": "^0.9.0",
33
- "@twin.org/vault-models": "^0.9.0"
17
+ "@twin.org/api-models": "next",
18
+ "@twin.org/api-tenant-processor": "next",
19
+ "@twin.org/context": "next",
20
+ "@twin.org/core": "next",
21
+ "@twin.org/crypto": "next",
22
+ "@twin.org/dataspace-models": "0.9.1-next.10",
23
+ "@twin.org/entity": "next",
24
+ "@twin.org/entity-storage-models": "next",
25
+ "@twin.org/federated-catalogue-models": "next",
26
+ "@twin.org/logging-models": "next",
27
+ "@twin.org/nameof": "next",
28
+ "@twin.org/rights-management-models": "next",
29
+ "@twin.org/standards-dataspace-protocol": "next",
30
+ "@twin.org/standards-w3c-odrl": "next",
31
+ "@twin.org/telemetry-models": "next",
32
+ "@twin.org/trust-models": "next",
33
+ "@twin.org/vault-models": "next"
34
34
  },
35
35
  "main": "./dist/es/index.js",
36
36
  "types": "./dist/types/index.d.ts",