@tsg-dsp/tsg-sdk 0.20.1 → 0.21.0

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 (158) hide show
  1. package/README.md +116 -27
  2. package/dist/.generated/control-plane.d.ts +287 -344
  3. package/dist/.generated/sso-bridge.d.ts +979 -42
  4. package/dist/.generated/wallet.d.ts +104 -206
  5. package/dist/auth/auth.provider.d.ts +5 -1
  6. package/dist/auth/auth.provider.d.ts.map +1 -1
  7. package/dist/auth/auth.provider.js +9 -1
  8. package/dist/auth/auth.provider.js.map +1 -1
  9. package/dist/browser.d.ts +525 -523
  10. package/dist/browser.d.ts.map +1 -1
  11. package/dist/browser.js +17 -4
  12. package/dist/browser.js.map +1 -1
  13. package/dist/catalog/catalog.sdk.d.ts.map +1 -1
  14. package/dist/catalog/catalog.sdk.js.map +1 -1
  15. package/dist/client.d.ts.map +1 -1
  16. package/dist/client.js +2 -0
  17. package/dist/client.js.map +1 -1
  18. package/dist/config/sdk.config.d.ts +20 -4
  19. package/dist/config/sdk.config.d.ts.map +1 -1
  20. package/dist/index.d.ts +2 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +2 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/metadata/metadata.sdk.d.ts +10 -7
  25. package/dist/metadata/metadata.sdk.d.ts.map +1 -1
  26. package/dist/metadata/metadata.sdk.js +7 -4
  27. package/dist/metadata/metadata.sdk.js.map +1 -1
  28. package/dist/negotiations/negotiations.sdk.d.ts +1 -1
  29. package/dist/negotiations/negotiations.sdk.d.ts.map +1 -1
  30. package/dist/negotiations/negotiations.sdk.js.map +1 -1
  31. package/dist/requirements/requirements.sdk.d.ts.map +1 -1
  32. package/dist/requirements/requirements.sdk.js.map +1 -1
  33. package/dist/sso/sso-management.sdk.d.ts.map +1 -1
  34. package/dist/sso/sso-management.sdk.js.map +1 -1
  35. package/dist/sso/sso.sdk.d.ts +1 -1
  36. package/dist/sso/sso.sdk.d.ts.map +1 -1
  37. package/dist/sso/sso.sdk.js +4 -2
  38. package/dist/sso/sso.sdk.js.map +1 -1
  39. package/dist/tenants/tenant-management.sdk.d.ts +48 -0
  40. package/dist/tenants/tenant-management.sdk.d.ts.map +1 -0
  41. package/dist/tenants/tenant-management.sdk.js +107 -0
  42. package/dist/tenants/tenant-management.sdk.js.map +1 -0
  43. package/dist/transfers/transfers.sdk.d.ts +27 -8
  44. package/dist/transfers/transfers.sdk.d.ts.map +1 -1
  45. package/dist/transfers/transfers.sdk.js +15 -1
  46. package/dist/transfers/transfers.sdk.js.map +1 -1
  47. package/dist/tsg-sdk.d.ts +4 -1
  48. package/dist/tsg-sdk.d.ts.map +1 -1
  49. package/dist/tsg-sdk.js +23 -6
  50. package/dist/tsg-sdk.js.map +1 -1
  51. package/dist/utils/errors.d.ts +2 -2
  52. package/dist/utils/errors.d.ts.map +1 -1
  53. package/dist/utils/errors.js.map +1 -1
  54. package/dist/utils/index.d.ts +1 -0
  55. package/dist/utils/index.d.ts.map +1 -1
  56. package/dist/utils/index.js +1 -0
  57. package/dist/utils/index.js.map +1 -1
  58. package/dist/utils/reason.d.ts +16 -0
  59. package/dist/utils/reason.d.ts.map +1 -0
  60. package/dist/utils/reason.js +34 -0
  61. package/dist/utils/reason.js.map +1 -0
  62. package/dist/utils/validate.js.map +1 -1
  63. package/dist/vendor/common-dtos/abac.policy.d.ts +10 -1
  64. package/dist/vendor/common-dtos/abac.policy.js +5 -2
  65. package/dist/vendor/common-dtos/audit.types.d.ts +1 -1
  66. package/dist/vendor/common-dtos/audit.types.js +0 -1
  67. package/dist/vendor/common-dtos/credential-requirements.d.ts +0 -1
  68. package/dist/vendor/common-dtos/credential-requirements.dto.d.ts +0 -1
  69. package/dist/vendor/common-dtos/credential-requirements.dto.js +0 -1
  70. package/dist/vendor/common-dtos/credential-requirements.js +0 -1
  71. package/dist/vendor/common-dtos/dataplane.dto.d.ts +0 -1
  72. package/dist/vendor/common-dtos/dataplane.dto.js +0 -1
  73. package/dist/vendor/common-dtos/dcp.dto.d.ts +0 -1
  74. package/dist/vendor/common-dtos/dcp.dto.js +0 -1
  75. package/dist/vendor/common-dtos/dcql.dto.d.ts +0 -1
  76. package/dist/vendor/common-dtos/dcql.dto.js +0 -1
  77. package/dist/vendor/common-dtos/did.schemas.d.ts +0 -1
  78. package/dist/vendor/common-dtos/did.schemas.js +0 -1
  79. package/dist/vendor/common-dtos/index.d.ts +1 -1
  80. package/dist/vendor/common-dtos/index.js +1 -1
  81. package/dist/vendor/common-dtos/metadata.dto.d.ts +0 -1
  82. package/dist/vendor/common-dtos/metadata.dto.js +0 -1
  83. package/dist/vendor/common-dtos/negotiations.dto.d.ts +2 -3
  84. package/dist/vendor/common-dtos/negotiations.dto.js +6 -7
  85. package/dist/vendor/common-dtos/permission-resources.d.ts +3 -0
  86. package/dist/vendor/common-dtos/permission-resources.js +18 -0
  87. package/dist/vendor/common-dtos/permissions.d.ts +6 -1
  88. package/dist/vendor/common-dtos/permissions.js +73 -1
  89. package/dist/vendor/common-dtos/presentation.request.dto.d.ts +0 -1
  90. package/dist/vendor/common-dtos/presentation.request.dto.js +0 -1
  91. package/dist/vendor/common-dtos/presentation.status.dto.d.ts +0 -1
  92. package/dist/vendor/common-dtos/presentation.status.dto.js +0 -1
  93. package/dist/vendor/common-dtos/presentationdefinition.dto.d.ts +0 -1
  94. package/dist/vendor/common-dtos/presentationdefinition.dto.js +0 -1
  95. package/dist/vendor/common-dtos/signatures.dto.d.ts +0 -1
  96. package/dist/vendor/common-dtos/signatures.dto.js +0 -1
  97. package/dist/vendor/common-dtos/transfer.dto.d.ts +0 -1
  98. package/dist/vendor/common-dtos/transfer.dto.js +0 -1
  99. package/dist/vendor/common-dtos/utils.swagger.d.ts +0 -1
  100. package/dist/vendor/common-dtos/utils.swagger.js +0 -1
  101. package/dist/vendor/control-plane-dtos/index.d.ts +0 -1
  102. package/dist/vendor/control-plane-dtos/index.js +0 -1
  103. package/dist/vendor/control-plane-dtos/registry/registry.dto.d.ts +0 -1
  104. package/dist/vendor/control-plane-dtos/registry/registry.dto.js +0 -1
  105. package/dist/vendor/control-plane-dtos/registry/registry.search.dto.d.ts +0 -1
  106. package/dist/vendor/control-plane-dtos/registry/registry.search.dto.js +0 -1
  107. package/dist/vendor/control-plane-dtos/ssi/verifiablePresentations.dto.d.ts +0 -1
  108. package/dist/vendor/control-plane-dtos/ssi/verifiablePresentations.dto.js +0 -1
  109. package/dist/vendor/control-plane-dtos/status/status.dto.d.ts +0 -1
  110. package/dist/vendor/control-plane-dtos/status/status.dto.js +0 -1
  111. package/dist/vendor/sso-bridge-dtos/clients.dto.d.ts +7 -4
  112. package/dist/vendor/sso-bridge-dtos/clients.dto.js +38 -4
  113. package/dist/vendor/sso-bridge-dtos/grants.d.ts +2 -1
  114. package/dist/vendor/sso-bridge-dtos/grants.js +7 -2
  115. package/dist/vendor/sso-bridge-dtos/index.d.ts +1 -1
  116. package/dist/vendor/sso-bridge-dtos/index.js +1 -1
  117. package/dist/vendor/sso-bridge-dtos/tenant.dto.d.ts +70 -0
  118. package/dist/vendor/sso-bridge-dtos/tenant.dto.js +1 -0
  119. package/dist/vendor/sso-bridge-dtos/users.dto.d.ts +19 -1
  120. package/dist/vendor/sso-bridge-dtos/users.dto.js +85 -2
  121. package/dist/vendor/tenant-dtos/authorization.dto.d.ts +46 -0
  122. package/dist/vendor/tenant-dtos/authorization.dto.js +5 -0
  123. package/dist/vendor/tenant-dtos/consumer.dto.d.ts +29 -0
  124. package/dist/vendor/tenant-dtos/consumer.dto.js +1 -0
  125. package/dist/vendor/tenant-dtos/fixtures.d.ts +15 -0
  126. package/dist/vendor/tenant-dtos/fixtures.js +48 -0
  127. package/dist/vendor/tenant-dtos/index.d.ts +8 -0
  128. package/dist/vendor/tenant-dtos/index.js +8 -0
  129. package/dist/vendor/tenant-dtos/management.dto.d.ts +137 -0
  130. package/dist/vendor/tenant-dtos/management.dto.js +1 -0
  131. package/dist/vendor/tenant-dtos/membership.dto.d.ts +22 -0
  132. package/dist/vendor/tenant-dtos/membership.dto.js +7 -0
  133. package/dist/vendor/tenant-dtos/principal.dto.d.ts +13 -0
  134. package/dist/vendor/tenant-dtos/principal.dto.js +6 -0
  135. package/dist/vendor/tenant-dtos/provisioning.dto.d.ts +47 -0
  136. package/dist/vendor/tenant-dtos/provisioning.dto.js +1 -0
  137. package/dist/vendor/tenant-dtos/service-binding.dto.d.ts +9 -0
  138. package/dist/vendor/tenant-dtos/service-binding.dto.js +1 -0
  139. package/dist/vendor/tenant-dtos/tenant.dto.d.ts +15 -0
  140. package/dist/vendor/tenant-dtos/tenant.dto.js +1 -0
  141. package/dist/vendor/wallet-dtos/clients.dto.d.ts +0 -1
  142. package/dist/vendor/wallet-dtos/clients.dto.js +0 -1
  143. package/dist/vendor/wallet-dtos/credentials.dto.d.ts +0 -1
  144. package/dist/vendor/wallet-dtos/credentials.dto.js +0 -1
  145. package/dist/vendor/wallet-dtos/index.d.ts +0 -1
  146. package/dist/vendor/wallet-dtos/index.js +0 -1
  147. package/dist/vendor/wallet-dtos/issuance.dto.d.ts +0 -1
  148. package/dist/vendor/wallet-dtos/issuance.dto.js +0 -1
  149. package/dist/vendor/wallet-dtos/scopes.dto.d.ts +0 -1
  150. package/dist/vendor/wallet-dtos/scopes.dto.js +0 -1
  151. package/dist/vendor/wallet-dtos/status.dto.d.ts +0 -1
  152. package/dist/vendor/wallet-dtos/status.dto.js +0 -1
  153. package/dist/vendor/wallet-dtos/utils/schema-converter.d.ts +0 -1
  154. package/dist/vendor/wallet-dtos/utils/schema-converter.js +0 -1
  155. package/dist/wallet/wallet.sdk.d.ts +3 -3
  156. package/dist/wallet/wallet.sdk.d.ts.map +1 -1
  157. package/dist/wallet/wallet.sdk.js.map +1 -1
  158. package/package.json +17 -16
package/README.md CHANGED
@@ -4,16 +4,28 @@ TypeScript SDK for interacting with TSG (TNO Security Gateway) Dataspace Protoco
4
4
 
5
5
  ## Installation
6
6
 
7
- The SDK is currently available to packages in this monorepo. Add it as a workspace
8
- dependency:
7
+ Install the latest released SDK from npm:
8
+
9
+ ```bash
10
+ npm install @tsg-dsp/tsg-sdk
11
+ ```
12
+
13
+ Within this monorepo, use a workspace dependency to consume the current source:
9
14
 
10
15
  ```bash
11
16
  pnpm --filter <consumer-package> add '@tsg-dsp/tsg-sdk@workspace:*'
12
17
  ```
13
18
 
14
- Publication to npm is deferred until a later release.
19
+ For an interactive example against the current shared services, use the
20
+ [managed SDK playground](../../sample/sdk/README.md).
15
21
 
16
- ## Quick Start
22
+ ## Quick start
23
+
24
+ Use URLs, audiences, canonical tenant ID, service-local slugs and workload
25
+ credentials from your provisioned deployment. Values below illustrate the
26
+ configuration shape; they are not seeded accounts or deployment defaults.
27
+ The [module examples](samples/README.md) read these settings from environment
28
+ variables and support an offline construction check.
17
29
 
18
30
  ```typescript
19
31
  import { TsgSdk } from "@tsg-dsp/tsg-sdk";
@@ -22,11 +34,19 @@ const sdk = TsgSdk.create({
22
34
  controlPlaneBaseUrl: "http://localhost:3000",
23
35
  walletBaseUrl: "http://localhost:3001",
24
36
  ssoBridgeBaseUrl: "http://localhost:3002",
25
- tenantSlug: "default", // sent as X-Tenant-Slug on every control-plane / wallet call
37
+ tenantSlug: "acme", // sent as X-Tenant-Slug on control-plane / wallet calls
38
+ canonicalTenantId: "11111111-1111-4111-8111-111111111111",
39
+ controlPlaneAudience: "control-plane-api",
40
+ walletAudience: "wallet-api",
26
41
  auth: {
27
42
  method: "client_secret_post",
28
- clientId: "my-client",
29
- clientSecret: "my-secret"
43
+ clientId: controlPlaneClientId,
44
+ clientSecret: controlPlaneClientSecret
45
+ },
46
+ walletAuth: {
47
+ method: "client_secret_post",
48
+ clientId: walletClientId,
49
+ clientSecret: walletClientSecret
30
50
  }
31
51
  });
32
52
 
@@ -43,18 +63,64 @@ const negotiation = await sdk.negotiations.requestNegotiation(
43
63
  );
44
64
 
45
65
  // Wait for agreement
46
- const finalized = await sdk.negotiations.waitForAgreement(negotiation["@id"]!);
66
+ const finalized = await sdk.negotiations.waitForAgreement(negotiation.id);
47
67
 
48
68
  // Request a transfer
49
69
  const transfer = await sdk.transfers.requestTransfer(
50
70
  agreementId,
51
71
  participantId,
52
72
  remoteAddress,
53
- "application/json",
54
- "http-data-plane"
73
+ "https://w3id.org/dspace-sig/profile/http-pull"
74
+ );
75
+ ```
76
+
77
+ ## Managed tenants
78
+
79
+ `TenantManagementSdk` is a standalone client for the central manager. Use a
80
+ human token issued for its audience. Workload provisioning credentials cannot
81
+ administer organizations through these endpoints.
82
+
83
+ ```typescript
84
+ import { AuthProvider, TenantManagementSdk } from "@tsg-dsp/tsg-sdk";
85
+
86
+ const tenants = new TenantManagementSdk(
87
+ "https://hosted.example.com/tenant-management/api",
88
+ new AuthProvider(
89
+ { method: "access_token", accessToken: humanToken },
90
+ undefined
91
+ )
92
+ );
93
+ const accepted = await tenants.createForPlatform(
94
+ {
95
+ name: "Alice Corp",
96
+ slug: "alice-corp",
97
+ profile: "default",
98
+ owner: { kind: "new", username: "alice", email: "alice@example.com" }
99
+ },
100
+ "alice-corp-create-1"
55
101
  );
102
+ const operation = await tenants.operation(accepted.operationId);
56
103
  ```
57
104
 
105
+ The client covers capabilities, account lookup/onboarding, setup links, operation
106
+ history/retry, invitations, memberships, grants, ownership, lifecycle, audit and
107
+ workload credential rotation. Self-service `create` requires explicit deployment
108
+ policy. A setup link contains a URL only when email delivery is disabled.
109
+ The browser export also provides `TenantManagementSdk`; omit its auth argument
110
+ for same-origin cookie sessions.
111
+
112
+ For managed Wallet/Control Plane calls, set `canonicalTenantId`,
113
+ `controlPlaneAudience` and `walletAudience`. Keep the target-local tenant selector
114
+ in `tenantSlug`, or use `controlPlaneTenantSlug` and `walletTenantSlug` when
115
+ imported services have different URL names. `walletAuth` supplies a separate
116
+ Wallet token or credential whenever explicit Control Plane authentication is configured. Tokens are never inherited across services. Setting `ssoBridgeBaseUrl` allows
117
+ workload token discovery; it does not give `sdk.sso` management authority.
118
+ Use `ssoAuth` and `ssoAudience` for a separate credential authorized to administer
119
+ SSO. Tenant Management administration and consumer authorization use separate
120
+ audiences. A tenant slug selects a service-local tenant; it does not replace the
121
+ canonical tenant UUID in workload token requests. There is no implicit `default`
122
+ tenant, seeded workload client, or token audience fallback.
123
+
58
124
  ## Modules
59
125
 
60
126
  The SDK is organized into focused modules, each accessible as a property on the `TsgSdk` instance:
@@ -164,10 +230,13 @@ The SDK supports three authentication methods:
164
230
  const sdk = TsgSdk.create({
165
231
  controlPlaneBaseUrl: "http://localhost:3000",
166
232
  ssoBridgeBaseUrl: "http://localhost:3002",
233
+ canonicalTenantId,
234
+ controlPlaneTenantSlug,
235
+ controlPlaneAudience,
167
236
  auth: {
168
237
  method: "client_secret_post",
169
- clientId: "my-client",
170
- clientSecret: "my-secret"
238
+ clientId: controlPlaneClientId,
239
+ clientSecret: controlPlaneClientSecret
171
240
  }
172
241
  });
173
242
  ```
@@ -178,33 +247,40 @@ const sdk = TsgSdk.create({
178
247
  const sdk = TsgSdk.create({
179
248
  controlPlaneBaseUrl: "http://localhost:3000",
180
249
  ssoBridgeBaseUrl: "http://localhost:3002",
250
+ canonicalTenantId,
251
+ controlPlaneTenantSlug,
252
+ controlPlaneAudience,
181
253
  auth: {
182
254
  method: "private_key_jwt",
183
- clientId: "my-client",
184
- privateKeyJwk: myPrivateKey
255
+ clientId: controlPlaneClientId,
256
+ privateKeyJwk: controlPlanePrivateKey
185
257
  }
186
258
  });
187
259
  ```
188
260
 
189
- ### Pre-obtained Access Token
261
+ ### Pre-obtained access token
262
+
263
+ Use a token issued for the receiving service and intended tenant. The SDK does
264
+ not change its claims or refresh it. Configure `walletAuth` and `ssoAuth` with
265
+ separate tokens when calling those services.
190
266
 
191
267
  ```typescript
192
268
  const sdk = TsgSdk.create({
193
269
  controlPlaneBaseUrl: "http://localhost:3000",
270
+ controlPlaneTenantSlug,
194
271
  auth: {
195
272
  method: "access_token",
196
- accessToken: "eyJhbGciOi..."
273
+ accessToken: controlPlaneToken
197
274
  }
198
275
  });
199
276
  ```
200
277
 
201
- ### No Authentication
278
+ ### Cookie sessions
202
279
 
203
- ```typescript
204
- const sdk = TsgSdk.create({
205
- controlPlaneBaseUrl: "http://localhost:3000"
206
- });
207
- ```
280
+ Omitting auth sends no bearer token. It does not bypass service authorization or
281
+ select a tenant. In a same-origin browser session, configure the service-local
282
+ tenant slug explicitly and let the browser send its existing session cookie.
283
+ The Node.js module examples use explicit workload credentials instead.
208
284
 
209
285
  ## Optional Modules
210
286
 
@@ -267,8 +343,21 @@ The SDK build includes compiled private DTOs and their declarations under
267
343
  metadata by copying the TypeScript compiler output. Only `common-dsp` remains a
268
344
  separately published TSG dependency. The browser entry does not load the DTOs.
269
345
 
270
- The SDK is currently consumed within the monorepo. Automated npm publication is
271
- deferred until a later release. After building the workspace, check an external
272
- installation locally: pack with `pnpm --filter @tsg-dsp/tsg-sdk pack`, install the tarball outside the
273
- workspace, and compile a TypeScript consumer using both the main and browser
274
- entries.
346
+ To check an external installation locally, build with
347
+ `pnpm --filter @tsg-dsp/tsg-sdk... -r build`, pack with
348
+ `pnpm --filter @tsg-dsp/tsg-sdk pack`, install the tarball outside the workspace,
349
+ and compile a TypeScript consumer using both the main and browser entries.
350
+
351
+ ### Renewable HTTP data access
352
+
353
+ Use `transfers.dataAccess(transferId)` before sending an HTTP data request. The
354
+ control plane coordinates refresh-token rotation across clients and persists the
355
+ new credentials. The returned object contains `endpoint` and `headers`.
356
+
357
+ ```ts
358
+ const access = await sdk.transfers.dataAccess(transferId);
359
+ const response = await fetch(access.endpoint, { headers: access.headers });
360
+ ```
361
+
362
+ After a 401, request `{ forceRefresh: true }` and decide whether to repeat the
363
+ request. The SDK never retries data requests automatically.