@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
@@ -3,4 +3,3 @@ export declare class DataPlaneStateDto {
3
3
  id: string;
4
4
  details: DataPlaneDetailsDto;
5
5
  }
6
- //# sourceMappingURL=dataplane.dto.d.ts.map
@@ -26,4 +26,3 @@ __decorate([
26
26
  Type(() => DataPlaneDetailsDto),
27
27
  __metadata("design:type", DataPlaneDetailsDto)
28
28
  ], DataPlaneStateDto.prototype, "details", void 0);
29
- //# sourceMappingURL=dataplane.dto.js.map
@@ -87,4 +87,3 @@ export declare class CredentialStatus {
87
87
  holderPid: string;
88
88
  status: "RECEIVED" | "REJECTED" | "ISSUED";
89
89
  }
90
- //# sourceMappingURL=dcp.dto.d.ts.map
@@ -487,4 +487,3 @@ CredentialStatus = __decorate([
487
487
  ApiSchema({ name: "DCPCredentialStatus" })
488
488
  ], CredentialStatus);
489
489
  export { CredentialStatus };
490
- //# sourceMappingURL=dcp.dto.js.map
@@ -86,4 +86,3 @@ export declare class OID4VPAuthorizationResponse {
86
86
  vp_token: VpToken;
87
87
  state: string;
88
88
  }
89
- //# sourceMappingURL=dcql.dto.d.ts.map
@@ -447,4 +447,3 @@ __decorate([
447
447
  IsString(),
448
448
  __metadata("design:type", String)
449
449
  ], OID4VPAuthorizationResponse.prototype, "state", void 0);
450
- //# sourceMappingURL=dcql.dto.js.map
@@ -37,4 +37,3 @@ export declare class DIDDocumentDto implements DIDDocument {
37
37
  capabilityInvocation?: (string | VerificationMethod)[];
38
38
  capabilityDelegation?: (string | VerificationMethod)[];
39
39
  }
40
- //# sourceMappingURL=did.schemas.d.ts.map
@@ -257,4 +257,3 @@ DIDDocumentDto = __decorate([
257
257
  ApiExtraModels(VerificationMethodDto)
258
258
  ], DIDDocumentDto);
259
259
  export { DIDDocumentDto };
260
- //# sourceMappingURL=did.schemas.js.map
@@ -9,6 +9,7 @@ export * from "./dcql.dto.js";
9
9
  export * from "./did.schemas.js";
10
10
  export * from "./metadata.dto.js";
11
11
  export * from "./negotiations.dto.js";
12
+ export * from "./permission-resources.js";
12
13
  export * from "./permissions.js";
13
14
  export * from "./presentation.request.dto.js";
14
15
  export * from "./presentation.status.dto.js";
@@ -16,4 +17,3 @@ export * from "./presentationdefinition.dto.js";
16
17
  export * from "./signatures.dto.js";
17
18
  export * from "./transfer.dto.js";
18
19
  export * from "./utils.swagger.js";
19
- //# sourceMappingURL=index.d.ts.map
@@ -9,6 +9,7 @@ export * from "./dcql.dto.js";
9
9
  export * from "./did.schemas.js";
10
10
  export * from "./metadata.dto.js";
11
11
  export * from "./negotiations.dto.js";
12
+ export * from "./permission-resources.js";
12
13
  export * from "./permissions.js";
13
14
  export * from "./presentation.request.dto.js";
14
15
  export * from "./presentation.status.dto.js";
@@ -16,4 +17,3 @@ export * from "./presentationdefinition.dto.js";
16
17
  export * from "./signatures.dto.js";
17
18
  export * from "./transfer.dto.js";
18
19
  export * from "./utils.swagger.js";
19
- //# sourceMappingURL=index.js.map
@@ -3,4 +3,3 @@ export declare class MetadataDto {
3
3
  agreement: AgreementDto;
4
4
  dataset: DatasetDto;
5
5
  }
6
- //# sourceMappingURL=metadata.dto.d.ts.map
@@ -27,4 +27,3 @@ __decorate([
27
27
  ValidateNested(),
28
28
  __metadata("design:type", Object)
29
29
  ], MetadataDto.prototype, "dataset", void 0);
30
- //# sourceMappingURL=metadata.dto.js.map
@@ -1,11 +1,11 @@
1
- import { AgreementDto, ContractAgreementVerificationMessageDto, ContractNegotiationState, HashedMessage, MultilanguageDto, OfferDto } from "@tsg-dsp/common-dsp";
1
+ import { AgreementDto, ContractAgreementVerificationMessageDto, ContractNegotiationState, HashedMessage, OfferDto } from "@tsg-dsp/common-dsp";
2
2
  export type NegotiationRole = "provider" | "consumer";
3
3
  export declare class NegotiationProcessEventDto {
4
4
  time: Date;
5
5
  state: ContractNegotiationState;
6
6
  localMessage?: string;
7
7
  code?: string;
8
- reason?: MultilanguageDto[];
8
+ reason?: unknown[];
9
9
  agreementMessage?: string;
10
10
  verification?: ContractAgreementVerificationMessageDto;
11
11
  hashedMessage?: HashedMessage;
@@ -26,4 +26,3 @@ export declare class NegotiationDetailDto extends NegotiationStatusDto {
26
26
  agreement?: AgreementDto;
27
27
  events: Array<NegotiationProcessEventDto>;
28
28
  }
29
- //# sourceMappingURL=negotiations.dto.d.ts.map
@@ -8,9 +8,9 @@ var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
10
  import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";
11
- import { AgreementSchema, ContractAgreementVerificationMessageSchema, ContractNegotiationState, HashedMessageSchema, MultilanguageSchema, OfferSchema } from "@tsg-dsp/common-dsp";
11
+ import { AgreementSchema, ContractAgreementVerificationMessageSchema, ContractNegotiationState, HashedMessageSchema, OfferSchema } from "@tsg-dsp/common-dsp";
12
12
  import { Type } from "class-transformer";
13
- import { IsDate, IsEnum, IsOptional, IsString, ValidateNested } from "class-validator";
13
+ import { IsArray, IsDate, IsEnum, IsOptional, IsString, ValidateNested } from "class-validator";
14
14
  export class NegotiationProcessEventDto {
15
15
  time;
16
16
  state;
@@ -56,12 +56,12 @@ __decorate([
56
56
  ], NegotiationProcessEventDto.prototype, "code", void 0);
57
57
  __decorate([
58
58
  ApiPropertyOptional({
59
- type: () => [MultilanguageSchema],
60
- example: []
59
+ type: "array",
60
+ items: {},
61
+ example: ["Negotiation terminated by remote participant"]
61
62
  }),
62
63
  IsOptional(),
63
- ValidateNested({ each: true }),
64
- Type(() => MultilanguageSchema),
64
+ IsArray(),
65
65
  __metadata("design:type", Array)
66
66
  ], NegotiationProcessEventDto.prototype, "reason", void 0);
67
67
  __decorate([
@@ -202,4 +202,3 @@ __decorate([
202
202
  Type(() => NegotiationProcessEventDto),
203
203
  __metadata("design:type", Array)
204
204
  ], NegotiationDetailDto.prototype, "events", void 0);
205
- //# sourceMappingURL=negotiations.dto.js.map
@@ -0,0 +1,3 @@
1
+ import { type PermissionString } from "./permissions.js";
2
+ /** Configuration shorthand expands to concrete resources before entering canonical grants. */
3
+ export declare function expandPermissionResources(values: readonly PermissionString[]): PermissionString[];
@@ -0,0 +1,18 @@
1
+ import { parsePermission, permission, Resource } from "./permissions.js";
2
+ /** Configuration shorthand expands to concrete resources before entering canonical grants. */
3
+ export function expandPermissionResources(values) {
4
+ return [
5
+ ...new Set(values.flatMap((value) => {
6
+ const parsed = parsePermission(value);
7
+ if (!parsed.resource.includes("*"))
8
+ return [value];
9
+ const pattern = new RegExp(`^${parsed.resource
10
+ .split("*")
11
+ .map((part) => part.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"))
12
+ .join(".*")}$`);
13
+ return Object.values(Resource)
14
+ .filter((resource) => pattern.test(resource))
15
+ .map((resource) => permission(parsed.action, resource, parsed.scope));
16
+ }))
17
+ ];
18
+ }
@@ -77,10 +77,16 @@ export interface Permission {
77
77
  export type PermissionString = `${Action}:${Resource}` | `${Action}:${Resource}:${string}`;
78
78
  export declare function permission(action: Action, resource: Resource, scope?: string | string[]): PermissionString;
79
79
  export declare function parsePermission(perm: PermissionString): Permission;
80
+ /** Validate permission syntax consistently before issuing or consuming grants. */
81
+ export declare function validatePermission(perm: PermissionString): void;
80
82
  export declare function permissionAllowsResourceId(perm: Permission, resourceId: string): boolean;
81
83
  export declare function isOwnScope(perm: Permission): boolean;
82
84
  export declare function isAllScope(perm: Permission): boolean;
83
85
  export declare function isSpecificScope(perm: Permission): boolean;
86
+ /** Whether a permission is bounded by the union of the existing grants. */
87
+ export declare function permissionIsCovered(requested: PermissionString, granted: readonly PermissionString[]): boolean;
88
+ /** Intersect action/resource scopes without widening either set of grants. */
89
+ export declare function intersectPermissions(requested: readonly PermissionString[], granted: readonly PermissionString[]): PermissionString[];
84
90
  export declare const Permissions: {
85
91
  readonly CP_CATALOG_READ: PermissionString;
86
92
  readonly CP_CATALOG_CREATE: PermissionString;
@@ -234,4 +240,3 @@ export declare const Permissions: {
234
240
  readonly SSO_AUDIT_LOG_READ: PermissionString;
235
241
  readonly SSO_AUDIT_LOG_MANAGE: PermissionString;
236
242
  };
237
- //# sourceMappingURL=permissions.d.ts.map
@@ -133,6 +133,14 @@ export function parsePermission(perm) {
133
133
  }
134
134
  return result;
135
135
  }
136
+ /** Validate permission syntax consistently before issuing or consuming grants. */
137
+ export function validatePermission(perm) {
138
+ const parsed = parsePermission(perm);
139
+ if (!Object.values(Action).includes(parsed.action) ||
140
+ !parsed.resource ||
141
+ (Array.isArray(parsed.scope) && parsed.scope.some((scope) => !scope)))
142
+ throw new Error(`Invalid permission format: ${perm}`);
143
+ }
136
144
  export function permissionAllowsResourceId(perm, resourceId) {
137
145
  if (!perm.scope || perm.scope === RESERVED_SCOPES.ALL) {
138
146
  return true;
@@ -160,6 +168,71 @@ export function isSpecificScope(perm) {
160
168
  return false;
161
169
  return true;
162
170
  }
171
+ /** Whether a permission is bounded by the union of the existing grants. */
172
+ export function permissionIsCovered(requested, granted) {
173
+ try {
174
+ const required = parsePermission(requested);
175
+ if (!Object.values(Action).includes(required.action) || !required.resource)
176
+ return false;
177
+ const candidates = granted
178
+ .map(parsePermission)
179
+ .filter((p) => p.resource === required.resource &&
180
+ (p.action === required.action ||
181
+ (p.action === Action.MANAGE && required.action !== Action.MANAGE)));
182
+ if (candidates.some(isAllScope))
183
+ return true;
184
+ if (isAllScope(required))
185
+ return false;
186
+ if (isOwnScope(required))
187
+ return candidates.some(isOwnScope);
188
+ const ids = Array.isArray(required.scope)
189
+ ? required.scope
190
+ : [required.scope];
191
+ return ids.every((id) => candidates.some((p) => permissionAllowsResourceId(p, id)));
192
+ }
193
+ catch {
194
+ return false;
195
+ }
196
+ }
197
+ /** Intersect action/resource scopes without widening either set of grants. */
198
+ export function intersectPermissions(requested, granted) {
199
+ const result = new Set();
200
+ for (const requestedPermission of requested) {
201
+ const required = parsePermission(requestedPermission);
202
+ for (const grantedPermission of granted) {
203
+ const grant = parsePermission(grantedPermission);
204
+ if (required.resource !== grant.resource ||
205
+ !Object.values(Action).includes(required.action) ||
206
+ !Object.values(Action).includes(grant.action))
207
+ continue;
208
+ const action = required.action === Action.MANAGE
209
+ ? grant.action
210
+ : grant.action === Action.MANAGE || grant.action === required.action
211
+ ? required.action
212
+ : undefined;
213
+ if (!action)
214
+ continue;
215
+ if (isAllScope(required)) {
216
+ result.add(permission(action, grant.resource, grant.scope));
217
+ }
218
+ else if (isAllScope(grant)) {
219
+ result.add(permission(action, required.resource, required.scope));
220
+ }
221
+ else if (isOwnScope(required) || isOwnScope(grant)) {
222
+ // Ownership cannot be inferred from an explicit resource ID alone.
223
+ if (isOwnScope(required) && isOwnScope(grant)) {
224
+ result.add(permission(action, required.resource, RESERVED_SCOPES.OWN));
225
+ }
226
+ }
227
+ else {
228
+ const ids = (Array.isArray(required.scope) ? required.scope : [required.scope]).filter((id) => permissionAllowsResourceId(grant, id));
229
+ if (ids.length)
230
+ result.add(permission(action, required.resource, ids));
231
+ }
232
+ }
233
+ }
234
+ return [...result];
235
+ }
163
236
  export const Permissions = {
164
237
  // ===========================================
165
238
  // Control Plane Permissions (cp.*)
@@ -334,4 +407,3 @@ export const Permissions = {
334
407
  SSO_AUDIT_LOG_READ: permission(Action.READ, Resource.SSO_AUDIT_LOG),
335
408
  SSO_AUDIT_LOG_MANAGE: permission(Action.MANAGE, Resource.SSO_AUDIT_LOG)
336
409
  };
337
- //# sourceMappingURL=permissions.js.map
@@ -6,4 +6,3 @@ export declare class CreatePresentationJwtRequest {
6
6
  format?: "vp+jwt" | "enveloped" | "jwt_vp";
7
7
  nonce?: string;
8
8
  }
9
- //# sourceMappingURL=presentation.request.dto.d.ts.map
@@ -52,4 +52,3 @@ __decorate([
52
52
  IsOptional(),
53
53
  __metadata("design:type", String)
54
54
  ], CreatePresentationJwtRequest.prototype, "nonce", void 0);
55
- //# sourceMappingURL=presentation.request.dto.js.map
@@ -10,4 +10,3 @@ export declare class VerifiedCredentialStatus {
10
10
  status: boolean;
11
11
  message?: string;
12
12
  }
13
- //# sourceMappingURL=presentation.status.dto.d.ts.map
@@ -80,4 +80,3 @@ __decorate([
80
80
  IsString(),
81
81
  __metadata("design:type", String)
82
82
  ], VerifiedCredentialStatus.prototype, "message", void 0);
83
- //# sourceMappingURL=presentation.status.dto.js.map
@@ -72,4 +72,3 @@ export declare class DescriptorMap {
72
72
  export declare class AuthorizationResponse extends PresentationResponse {
73
73
  state: string;
74
74
  }
75
- //# sourceMappingURL=presentationdefinition.dto.d.ts.map
@@ -445,4 +445,3 @@ __decorate([
445
445
  IsString(),
446
446
  __metadata("design:type", String)
447
447
  ], AuthorizationResponse.prototype, "state", void 0);
448
- //# sourceMappingURL=presentationdefinition.dto.js.map
@@ -29,4 +29,3 @@ export declare class SignRequestJwt {
29
29
  subject?: string;
30
30
  typ?: string;
31
31
  }
32
- //# sourceMappingURL=signatures.dto.d.ts.map
@@ -207,4 +207,3 @@ __decorate([
207
207
  IsOptional(),
208
208
  __metadata("design:type", String)
209
209
  ], SignRequestJwt.prototype, "typ", void 0);
210
- //# sourceMappingURL=signatures.dto.js.map
@@ -14,4 +14,3 @@ export declare class TransferDto {
14
14
  modifiedDate: Date;
15
15
  deletedDate: Date;
16
16
  }
17
- //# sourceMappingURL=transfer.dto.d.ts.map
@@ -99,4 +99,3 @@ __decorate([
99
99
  Type(() => Date),
100
100
  __metadata("design:type", Date)
101
101
  ], TransferDto.prototype, "deletedDate", void 0);
102
- //# sourceMappingURL=transfer.dto.js.map
@@ -10,4 +10,3 @@ export declare const ApiNotFoundResponseDefault: (options?: ApiResponseOptions)
10
10
  export declare const ApiConflictResponseDefault: (options?: ApiResponseOptions) => MethodDecorator & ClassDecorator;
11
11
  export declare const ApiForbiddenResponseDefault: (options?: ApiResponseOptions) => MethodDecorator & ClassDecorator;
12
12
  export declare const ApiBadRequestResponseDefault: (options?: ApiResponseOptions) => MethodDecorator & ClassDecorator;
13
- //# sourceMappingURL=utils.swagger.d.ts.map
@@ -60,4 +60,3 @@ export const ApiBadRequestResponseDefault = (options = {}) => ApiResponse({
60
60
  status: HttpStatus.BAD_REQUEST,
61
61
  type: ErrorDto
62
62
  });
63
- //# sourceMappingURL=utils.swagger.js.map
@@ -2,4 +2,3 @@ export * from "./registry/registry.dto.js";
2
2
  export * from "./registry/registry.search.dto.js";
3
3
  export * from "./ssi/verifiablePresentations.dto.js";
4
4
  export * from "./status/status.dto.js";
5
- //# sourceMappingURL=index.d.ts.map
@@ -2,4 +2,3 @@ export * from "./registry/registry.dto.js";
2
2
  export * from "./registry/registry.search.dto.js";
3
3
  export * from "./ssi/verifiablePresentations.dto.js";
4
4
  export * from "./status/status.dto.js";
5
- //# sourceMappingURL=index.js.map
@@ -2,4 +2,3 @@ export declare class CredentialAddress {
2
2
  didId: string;
3
3
  address: string;
4
4
  }
5
- //# sourceMappingURL=registry.dto.d.ts.map
@@ -23,4 +23,3 @@ __decorate([
23
23
  IsString(),
24
24
  __metadata("design:type", String)
25
25
  ], CredentialAddress.prototype, "address", void 0);
26
- //# sourceMappingURL=registry.dto.js.map
@@ -26,4 +26,3 @@ export declare class RegistryCatalogSearchResultDto {
26
26
  datasetScores: Record<string, number>;
27
27
  catalog: CatalogSchema;
28
28
  }
29
- //# sourceMappingURL=registry.search.dto.d.ts.map
@@ -124,4 +124,3 @@ __decorate([
124
124
  ApiProperty({ type: () => CatalogSchema }),
125
125
  __metadata("design:type", CatalogSchema)
126
126
  ], RegistryCatalogSearchResultDto.prototype, "catalog", void 0);
127
- //# sourceMappingURL=registry.search.dto.js.map
@@ -7,4 +7,3 @@ export declare class KeyInfo {
7
7
  created: Date;
8
8
  modified: Date;
9
9
  }
10
- //# sourceMappingURL=verifiablePresentations.dto.d.ts.map
@@ -41,4 +41,3 @@ __decorate([
41
41
  IsDate(),
42
42
  __metadata("design:type", Date)
43
43
  ], KeyInfo.prototype, "modified", void 0);
44
- //# sourceMappingURL=verifiablePresentations.dto.js.map
@@ -35,4 +35,3 @@ export declare class StatusDto {
35
35
  negotiations: StatusNegotiationDto[];
36
36
  transfers: StatusTransferDto[];
37
37
  }
38
- //# sourceMappingURL=status.dto.d.ts.map
@@ -170,4 +170,3 @@ __decorate([
170
170
  ApiProperty({ type: () => StatusTransferDto }),
171
171
  __metadata("design:type", Array)
172
172
  ], StatusDto.prototype, "transfers", void 0);
173
- //# sourceMappingURL=status.dto.js.map
@@ -1,15 +1,19 @@
1
- import { ClientAuthMethod, GrantType } from "./grants.js";
1
+ import { ClientAuthMethod, ClientKind, GrantType } from "./grants.js";
2
2
  export declare class ClientDto {
3
+ kind: ClientKind;
4
+ tenantId?: string;
5
+ audiences?: string[];
6
+ scopes?: string[];
3
7
  id?: string;
4
8
  name: string;
5
- secretName: string;
9
+ secretName?: string;
6
10
  description: string;
7
11
  clientId: string;
8
12
  clientSecret?: string;
9
13
  tokenEndpointAuthMethod?: ClientAuthMethod;
10
14
  jwk?: Record<string, any>;
11
15
  permissions: string[];
12
- grants: GrantType[];
16
+ grants?: GrantType[];
13
17
  redirectUris: string[];
14
18
  }
15
19
  declare const CreateClientDto_base: import("@nestjs/common").Type<Omit<ClientDto, "id">>;
@@ -19,4 +23,3 @@ declare const UpdateClientDto_base: import("@nestjs/common").Type<Partial<Omit<C
19
23
  export declare class UpdateClientDto extends UpdateClientDto_base {
20
24
  }
21
25
  export {};
22
- //# sourceMappingURL=clients.dto.d.ts.map
@@ -10,6 +10,10 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  import { ApiProperty, ApiPropertyOptional, OmitType, PartialType } from "@nestjs/swagger";
11
11
  import { IsArray, IsIn, IsNotEmpty, IsObject, IsOptional, IsString } from "class-validator";
12
12
  export class ClientDto {
13
+ kind;
14
+ tenantId;
15
+ audiences;
16
+ scopes;
13
17
  id;
14
18
  name;
15
19
  secretName;
@@ -22,6 +26,33 @@ export class ClientDto {
22
26
  grants;
23
27
  redirectUris;
24
28
  }
29
+ __decorate([
30
+ ApiProperty({ enum: ["shared", "workload", "platform"] }),
31
+ IsIn(["shared", "workload", "platform"]),
32
+ __metadata("design:type", String)
33
+ ], ClientDto.prototype, "kind", void 0);
34
+ __decorate([
35
+ ApiPropertyOptional({
36
+ description: "Canonical tenant UUID for a workload client"
37
+ }),
38
+ IsString(),
39
+ IsOptional(),
40
+ __metadata("design:type", String)
41
+ ], ClientDto.prototype, "tenantId", void 0);
42
+ __decorate([
43
+ ApiPropertyOptional({ description: "Registered resource audiences" }),
44
+ IsString({ each: true }),
45
+ IsArray(),
46
+ IsOptional(),
47
+ __metadata("design:type", Array)
48
+ ], ClientDto.prototype, "audiences", void 0);
49
+ __decorate([
50
+ ApiPropertyOptional({ description: "Allowed OAuth scopes" }),
51
+ IsString({ each: true }),
52
+ IsArray(),
53
+ IsOptional(),
54
+ __metadata("design:type", Array)
55
+ ], ClientDto.prototype, "scopes", void 0);
25
56
  __decorate([
26
57
  ApiPropertyOptional({ example: "1" }),
27
58
  IsString(),
@@ -35,9 +66,9 @@ __decorate([
35
66
  __metadata("design:type", String)
36
67
  ], ClientDto.prototype, "name", void 0);
37
68
  __decorate([
38
- ApiProperty({ example: "SecretExample" }),
69
+ ApiPropertyOptional({ example: "SecretExample" }),
39
70
  IsString(),
40
- IsNotEmpty(),
71
+ IsOptional(),
41
72
  __metadata("design:type", String)
42
73
  ], ClientDto.prototype, "secretName", void 0);
43
74
  __decorate([
@@ -96,9 +127,13 @@ __decorate([
96
127
  __metadata("design:type", Array)
97
128
  ], ClientDto.prototype, "permissions", void 0);
98
129
  __decorate([
99
- ApiProperty({ example: ["authorization_code", "client_credentials"] }),
130
+ ApiPropertyOptional({
131
+ example: ["client_credentials", "authorization_code", "refresh_token"],
132
+ description: "On creation, defaults to authorization_code and refresh_token for shared clients; client_credentials for workload/platform clients. Omission during updates preserves the stored policy."
133
+ }),
100
134
  IsArray(),
101
135
  IsNotEmpty(),
136
+ IsOptional(),
102
137
  __metadata("design:type", Array)
103
138
  ], ClientDto.prototype, "grants", void 0);
104
139
  __decorate([
@@ -110,4 +145,3 @@ export class CreateClientDto extends OmitType(ClientDto, ["id"]) {
110
145
  }
111
146
  export class UpdateClientDto extends PartialType(OmitType(ClientDto, ["id"])) {
112
147
  }
113
- //# sourceMappingURL=clients.dto.js.map
@@ -1,3 +1,4 @@
1
1
  export type GrantType = "authorization_code" | "refresh_token" | "client_credentials" | "password";
2
2
  export type ClientAuthMethod = "client_secret_post" | "private_key_jwt" | "none";
3
- //# sourceMappingURL=grants.d.ts.map
3
+ export type ClientKind = "shared" | "workload" | "platform";
4
+ export declare function getDefaultClientGrants(kind: ClientKind): GrantType[];
@@ -1,2 +1,7 @@
1
- export {};
2
- //# sourceMappingURL=grants.js.map
1
+ export function getDefaultClientGrants(kind) {
2
+ if (kind === "shared")
3
+ return ["authorization_code", "refresh_token"];
4
+ if (kind === "workload" || kind === "platform")
5
+ return ["client_credentials"];
6
+ throw new Error("Explicit valid client kind required");
7
+ }
@@ -1,5 +1,5 @@
1
1
  import "reflect-metadata";
2
2
  export * from "./clients.dto.js";
3
3
  export * from "./grants.js";
4
+ export * from "./tenant.dto.js";
4
5
  export * from "./users.dto.js";
5
- //# sourceMappingURL=index.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import "reflect-metadata";
2
2
  export * from "./clients.dto.js";
3
3
  export * from "./grants.js";
4
+ export * from "./tenant.dto.js";
4
5
  export * from "./users.dto.js";
5
- //# sourceMappingURL=index.js.map
@@ -0,0 +1,70 @@
1
+ import type { EnsureTenantRequest, PrincipalRef, TenantProvisioningResult, TenantRole, TenantState } from "../tenant-dtos/index.js";
2
+ import type { CreateClientDto } from "./clients.dto.js";
3
+ export interface SsoServiceBinding {
4
+ serviceInstanceId: string;
5
+ audience: string;
6
+ localTenantSlug?: string;
7
+ }
8
+ export interface SsoTenantConfiguration {
9
+ services: SsoServiceBinding[];
10
+ /** Workload credentials only. Global browser/platform clients are operator-controlled. */
11
+ clients: CreateClientDto[];
12
+ }
13
+ export type EnsureSsoTenantRequest = EnsureTenantRequest<SsoTenantConfiguration>;
14
+ export type SsoTenantProvisioningResult = TenantProvisioningResult<{
15
+ issuer: string;
16
+ clientIds: string[];
17
+ }> & {
18
+ appliedLifecycleRevision: number;
19
+ };
20
+ export interface SsoTenantSummary {
21
+ id: string;
22
+ slug: string;
23
+ name: string;
24
+ permissions: string[];
25
+ }
26
+ export interface SsoTenantMembershipSummary {
27
+ tenantId: string;
28
+ name: string;
29
+ slug: string;
30
+ role: TenantRole;
31
+ status: "active" | "revoked";
32
+ tenantState: TenantState;
33
+ authorizationStatus: "current" | "stale";
34
+ }
35
+ export interface SsoPlatformTenantSummary {
36
+ id: string;
37
+ name: string;
38
+ slug: string;
39
+ state: TenantState;
40
+ memberCount: number;
41
+ authorizationStatus: "current" | "stale" | "unavailable";
42
+ }
43
+ export interface ResolveSsoAccountRequest {
44
+ principal: PrincipalRef;
45
+ }
46
+ export interface SsoAccountSummary {
47
+ principal: PrincipalRef;
48
+ name: string;
49
+ }
50
+ export interface LookupSsoAccountRequest {
51
+ username: string;
52
+ }
53
+ export interface BootstrapSsoAccountRequest {
54
+ operationId: string;
55
+ tenantId: string;
56
+ userId: string;
57
+ username: string;
58
+ email: string;
59
+ }
60
+ export interface BootstrapSsoAccountResult {
61
+ principal: PrincipalRef;
62
+ setupPending: boolean;
63
+ notificationSent: boolean;
64
+ }
65
+ export interface SsoAccountSetupLink {
66
+ /** Present only when email delivery is disabled. */
67
+ url?: string;
68
+ expiresAt: number;
69
+ notificationSent: boolean;
70
+ }
@@ -0,0 +1 @@
1
+ export {};