@tsg-dsp/tsg-sdk 0.0.0-stage → 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 (222) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +362 -2
  3. package/dist/.generated/control-plane.d.ts +7825 -0
  4. package/dist/.generated/sso-bridge.d.ts +3999 -0
  5. package/dist/.generated/wallet.d.ts +6248 -0
  6. package/dist/auth/auth.provider.d.ts +49 -0
  7. package/dist/auth/auth.provider.d.ts.map +1 -0
  8. package/dist/auth/auth.provider.js +166 -0
  9. package/dist/auth/auth.provider.js.map +1 -0
  10. package/dist/auth/auth.types.d.ts +27 -0
  11. package/dist/auth/auth.types.d.ts.map +1 -0
  12. package/dist/auth/auth.types.js +2 -0
  13. package/dist/auth/auth.types.js.map +1 -0
  14. package/dist/auth/index.d.ts +3 -0
  15. package/dist/auth/index.d.ts.map +1 -0
  16. package/dist/auth/index.js +3 -0
  17. package/dist/auth/index.js.map +1 -0
  18. package/dist/browser.d.ts +1245 -0
  19. package/dist/browser.d.ts.map +1 -0
  20. package/dist/browser.js +228 -0
  21. package/dist/browser.js.map +1 -0
  22. package/dist/catalog/catalog.sdk.d.ts +149 -0
  23. package/dist/catalog/catalog.sdk.d.ts.map +1 -0
  24. package/dist/catalog/catalog.sdk.js +155 -0
  25. package/dist/catalog/catalog.sdk.js.map +1 -0
  26. package/dist/catalog/index.d.ts +2 -0
  27. package/dist/catalog/index.d.ts.map +1 -0
  28. package/dist/catalog/index.js +2 -0
  29. package/dist/catalog/index.js.map +1 -0
  30. package/dist/client.d.ts +43 -0
  31. package/dist/client.d.ts.map +1 -0
  32. package/dist/client.js +109 -0
  33. package/dist/client.js.map +1 -0
  34. package/dist/config/index.d.ts +2 -0
  35. package/dist/config/index.d.ts.map +1 -0
  36. package/dist/config/index.js +2 -0
  37. package/dist/config/index.js.map +1 -0
  38. package/dist/config/sdk.config.d.ts +97 -0
  39. package/dist/config/sdk.config.d.ts.map +1 -0
  40. package/dist/config/sdk.config.js +2 -0
  41. package/dist/config/sdk.config.js.map +1 -0
  42. package/dist/index.d.ts +18 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +25 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/metadata/index.d.ts +2 -0
  47. package/dist/metadata/index.d.ts.map +1 -0
  48. package/dist/metadata/index.js +2 -0
  49. package/dist/metadata/index.js.map +1 -0
  50. package/dist/metadata/metadata.sdk.d.ts +114 -0
  51. package/dist/metadata/metadata.sdk.d.ts.map +1 -0
  52. package/dist/metadata/metadata.sdk.js +145 -0
  53. package/dist/metadata/metadata.sdk.js.map +1 -0
  54. package/dist/negotiations/index.d.ts +2 -0
  55. package/dist/negotiations/index.d.ts.map +1 -0
  56. package/dist/negotiations/index.js +2 -0
  57. package/dist/negotiations/index.js.map +1 -0
  58. package/dist/negotiations/negotiations.sdk.d.ts +113 -0
  59. package/dist/negotiations/negotiations.sdk.d.ts.map +1 -0
  60. package/dist/negotiations/negotiations.sdk.js +146 -0
  61. package/dist/negotiations/negotiations.sdk.js.map +1 -0
  62. package/dist/requirements/index.d.ts +2 -0
  63. package/dist/requirements/index.d.ts.map +1 -0
  64. package/dist/requirements/index.js +2 -0
  65. package/dist/requirements/index.js.map +1 -0
  66. package/dist/requirements/requirements.sdk.d.ts +52 -0
  67. package/dist/requirements/requirements.sdk.d.ts.map +1 -0
  68. package/dist/requirements/requirements.sdk.js +123 -0
  69. package/dist/requirements/requirements.sdk.js.map +1 -0
  70. package/dist/sso/index.d.ts +3 -0
  71. package/dist/sso/index.d.ts.map +1 -0
  72. package/dist/sso/index.js +3 -0
  73. package/dist/sso/index.js.map +1 -0
  74. package/dist/sso/sso-management.sdk.d.ts +96 -0
  75. package/dist/sso/sso-management.sdk.d.ts.map +1 -0
  76. package/dist/sso/sso-management.sdk.js +152 -0
  77. package/dist/sso/sso-management.sdk.js.map +1 -0
  78. package/dist/sso/sso.sdk.d.ts +75 -0
  79. package/dist/sso/sso.sdk.d.ts.map +1 -0
  80. package/dist/sso/sso.sdk.js +149 -0
  81. package/dist/sso/sso.sdk.js.map +1 -0
  82. package/dist/tenants/tenant-management.sdk.d.ts +48 -0
  83. package/dist/tenants/tenant-management.sdk.d.ts.map +1 -0
  84. package/dist/tenants/tenant-management.sdk.js +107 -0
  85. package/dist/tenants/tenant-management.sdk.js.map +1 -0
  86. package/dist/transfers/index.d.ts +2 -0
  87. package/dist/transfers/index.d.ts.map +1 -0
  88. package/dist/transfers/index.js +2 -0
  89. package/dist/transfers/index.js.map +1 -0
  90. package/dist/transfers/transfers.sdk.d.ts +174 -0
  91. package/dist/transfers/transfers.sdk.d.ts.map +1 -0
  92. package/dist/transfers/transfers.sdk.js +200 -0
  93. package/dist/transfers/transfers.sdk.js.map +1 -0
  94. package/dist/tsg-sdk.d.ts +68 -0
  95. package/dist/tsg-sdk.d.ts.map +1 -0
  96. package/dist/tsg-sdk.js +145 -0
  97. package/dist/tsg-sdk.js.map +1 -0
  98. package/dist/utils/errors.d.ts +67 -0
  99. package/dist/utils/errors.d.ts.map +1 -0
  100. package/dist/utils/errors.js +79 -0
  101. package/dist/utils/errors.js.map +1 -0
  102. package/dist/utils/index.d.ts +5 -0
  103. package/dist/utils/index.d.ts.map +1 -0
  104. package/dist/utils/index.js +5 -0
  105. package/dist/utils/index.js.map +1 -0
  106. package/dist/utils/polling.d.ts +20 -0
  107. package/dist/utils/polling.d.ts.map +1 -0
  108. package/dist/utils/polling.js +35 -0
  109. package/dist/utils/polling.js.map +1 -0
  110. package/dist/utils/reason.d.ts +16 -0
  111. package/dist/utils/reason.d.ts.map +1 -0
  112. package/dist/utils/reason.js +34 -0
  113. package/dist/utils/reason.js.map +1 -0
  114. package/dist/utils/shape-validation.d.ts +59 -0
  115. package/dist/utils/shape-validation.d.ts.map +1 -0
  116. package/dist/utils/shape-validation.js +85 -0
  117. package/dist/utils/shape-validation.js.map +1 -0
  118. package/dist/utils/validate.d.ts +47 -0
  119. package/dist/utils/validate.d.ts.map +1 -0
  120. package/dist/utils/validate.js +68 -0
  121. package/dist/utils/validate.js.map +1 -0
  122. package/dist/vendor/common-dtos/abac.policy.d.ts +69 -0
  123. package/dist/vendor/common-dtos/abac.policy.js +5 -0
  124. package/dist/vendor/common-dtos/audit.types.d.ts +74 -0
  125. package/dist/vendor/common-dtos/audit.types.js +8 -0
  126. package/dist/vendor/common-dtos/credential-requirements.d.ts +18 -0
  127. package/dist/vendor/common-dtos/credential-requirements.dto.d.ts +46 -0
  128. package/dist/vendor/common-dtos/credential-requirements.dto.js +250 -0
  129. package/dist/vendor/common-dtos/credential-requirements.js +180 -0
  130. package/dist/vendor/common-dtos/dataplane.dto.d.ts +5 -0
  131. package/dist/vendor/common-dtos/dataplane.dto.js +28 -0
  132. package/dist/vendor/common-dtos/dcp.dto.d.ts +89 -0
  133. package/dist/vendor/common-dtos/dcp.dto.js +489 -0
  134. package/dist/vendor/common-dtos/dcql.dto.d.ts +88 -0
  135. package/dist/vendor/common-dtos/dcql.dto.js +449 -0
  136. package/dist/vendor/common-dtos/did.schemas.d.ts +39 -0
  137. package/dist/vendor/common-dtos/did.schemas.js +259 -0
  138. package/dist/vendor/common-dtos/index.d.ts +19 -0
  139. package/dist/vendor/common-dtos/index.js +19 -0
  140. package/dist/vendor/common-dtos/metadata.dto.d.ts +5 -0
  141. package/dist/vendor/common-dtos/metadata.dto.js +29 -0
  142. package/dist/vendor/common-dtos/negotiations.dto.d.ts +28 -0
  143. package/dist/vendor/common-dtos/negotiations.dto.js +204 -0
  144. package/dist/vendor/common-dtos/permission-resources.d.ts +3 -0
  145. package/dist/vendor/common-dtos/permission-resources.js +18 -0
  146. package/dist/vendor/common-dtos/permissions.d.ts +242 -0
  147. package/dist/vendor/common-dtos/permissions.js +409 -0
  148. package/dist/vendor/common-dtos/presentation.request.dto.d.ts +8 -0
  149. package/dist/vendor/common-dtos/presentation.request.dto.js +54 -0
  150. package/dist/vendor/common-dtos/presentation.status.dto.d.ts +12 -0
  151. package/dist/vendor/common-dtos/presentation.status.dto.js +82 -0
  152. package/dist/vendor/common-dtos/presentationdefinition.dto.d.ts +74 -0
  153. package/dist/vendor/common-dtos/presentationdefinition.dto.js +447 -0
  154. package/dist/vendor/common-dtos/signatures.dto.d.ts +31 -0
  155. package/dist/vendor/common-dtos/signatures.dto.js +209 -0
  156. package/dist/vendor/common-dtos/transfer.dto.d.ts +16 -0
  157. package/dist/vendor/common-dtos/transfer.dto.js +101 -0
  158. package/dist/vendor/common-dtos/utils.swagger.d.ts +12 -0
  159. package/dist/vendor/common-dtos/utils.swagger.js +62 -0
  160. package/dist/vendor/control-plane-dtos/index.d.ts +4 -0
  161. package/dist/vendor/control-plane-dtos/index.js +4 -0
  162. package/dist/vendor/control-plane-dtos/registry/registry.dto.d.ts +4 -0
  163. package/dist/vendor/control-plane-dtos/registry/registry.dto.js +25 -0
  164. package/dist/vendor/control-plane-dtos/registry/registry.search.dto.d.ts +28 -0
  165. package/dist/vendor/control-plane-dtos/registry/registry.search.dto.js +126 -0
  166. package/dist/vendor/control-plane-dtos/ssi/verifiablePresentations.dto.d.ts +9 -0
  167. package/dist/vendor/control-plane-dtos/ssi/verifiablePresentations.dto.js +43 -0
  168. package/dist/vendor/control-plane-dtos/status/status.dto.d.ts +37 -0
  169. package/dist/vendor/control-plane-dtos/status/status.dto.js +172 -0
  170. package/dist/vendor/sso-bridge-dtos/clients.dto.d.ts +25 -0
  171. package/dist/vendor/sso-bridge-dtos/clients.dto.js +147 -0
  172. package/dist/vendor/sso-bridge-dtos/grants.d.ts +4 -0
  173. package/dist/vendor/sso-bridge-dtos/grants.js +7 -0
  174. package/dist/vendor/sso-bridge-dtos/index.d.ts +5 -0
  175. package/dist/vendor/sso-bridge-dtos/index.js +5 -0
  176. package/dist/vendor/sso-bridge-dtos/tenant.dto.d.ts +70 -0
  177. package/dist/vendor/sso-bridge-dtos/tenant.dto.js +1 -0
  178. package/dist/vendor/sso-bridge-dtos/users.dto.d.ts +42 -0
  179. package/dist/vendor/sso-bridge-dtos/users.dto.js +173 -0
  180. package/dist/vendor/tenant-dtos/authorization.dto.d.ts +46 -0
  181. package/dist/vendor/tenant-dtos/authorization.dto.js +5 -0
  182. package/dist/vendor/tenant-dtos/consumer.dto.d.ts +29 -0
  183. package/dist/vendor/tenant-dtos/consumer.dto.js +1 -0
  184. package/dist/vendor/tenant-dtos/fixtures.d.ts +15 -0
  185. package/dist/vendor/tenant-dtos/fixtures.js +48 -0
  186. package/dist/vendor/tenant-dtos/index.d.ts +8 -0
  187. package/dist/vendor/tenant-dtos/index.js +8 -0
  188. package/dist/vendor/tenant-dtos/management.dto.d.ts +137 -0
  189. package/dist/vendor/tenant-dtos/management.dto.js +1 -0
  190. package/dist/vendor/tenant-dtos/membership.dto.d.ts +22 -0
  191. package/dist/vendor/tenant-dtos/membership.dto.js +7 -0
  192. package/dist/vendor/tenant-dtos/principal.dto.d.ts +13 -0
  193. package/dist/vendor/tenant-dtos/principal.dto.js +6 -0
  194. package/dist/vendor/tenant-dtos/provisioning.dto.d.ts +47 -0
  195. package/dist/vendor/tenant-dtos/provisioning.dto.js +1 -0
  196. package/dist/vendor/tenant-dtos/service-binding.dto.d.ts +9 -0
  197. package/dist/vendor/tenant-dtos/service-binding.dto.js +1 -0
  198. package/dist/vendor/tenant-dtos/tenant.dto.d.ts +15 -0
  199. package/dist/vendor/tenant-dtos/tenant.dto.js +1 -0
  200. package/dist/vendor/wallet-dtos/clients.dto.d.ts +21 -0
  201. package/dist/vendor/wallet-dtos/clients.dto.js +13 -0
  202. package/dist/vendor/wallet-dtos/credentials.dto.d.ts +31 -0
  203. package/dist/vendor/wallet-dtos/credentials.dto.js +46 -0
  204. package/dist/vendor/wallet-dtos/index.d.ts +6 -0
  205. package/dist/vendor/wallet-dtos/index.js +6 -0
  206. package/dist/vendor/wallet-dtos/issuance.dto.d.ts +237 -0
  207. package/dist/vendor/wallet-dtos/issuance.dto.js +1139 -0
  208. package/dist/vendor/wallet-dtos/scopes.dto.d.ts +24 -0
  209. package/dist/vendor/wallet-dtos/scopes.dto.js +151 -0
  210. package/dist/vendor/wallet-dtos/status.dto.d.ts +35 -0
  211. package/dist/vendor/wallet-dtos/status.dto.js +169 -0
  212. package/dist/vendor/wallet-dtos/utils/schema-converter.d.ts +13 -0
  213. package/dist/vendor/wallet-dtos/utils/schema-converter.js +42 -0
  214. package/dist/wallet/index.d.ts +2 -0
  215. package/dist/wallet/index.d.ts.map +1 -0
  216. package/dist/wallet/index.js +2 -0
  217. package/dist/wallet/index.js.map +1 -0
  218. package/dist/wallet/wallet.sdk.d.ts +285 -0
  219. package/dist/wallet/wallet.sdk.d.ts.map +1 -0
  220. package/dist/wallet/wallet.sdk.js +384 -0
  221. package/dist/wallet/wallet.sdk.js.map +1 -0
  222. package/package.json +79 -3
@@ -0,0 +1,5 @@
1
+ /** Principal kind; platform/provisioning authority is granted separately. */
2
+ export const AUTHENTICATED_ACTOR_TYPES = ["human", "service"];
3
+ export function isAuthenticatedActorType(value) {
4
+ return AUTHENTICATED_ACTOR_TYPES.some((type) => type === value);
5
+ }
@@ -0,0 +1,74 @@
1
+ import { Action, Resource } from "./permissions.js";
2
+ type AuditFilterValue<T> = T | T[];
3
+ export declare enum AuditSeverity {
4
+ DEBUG = "debug",
5
+ INFO = "info",
6
+ WARNING = "warning",
7
+ ERROR = "error",
8
+ CRITICAL = "critical"
9
+ }
10
+ export interface AuditLogEntry {
11
+ tenantId?: string;
12
+ timestamp: Date;
13
+ severity: AuditSeverity;
14
+ correlationId?: string;
15
+ caller: {
16
+ sub: string;
17
+ type: "user" | "service" | "system";
18
+ serviceName?: string;
19
+ username?: string;
20
+ didId?: string;
21
+ };
22
+ onBehalfOf?: {
23
+ sub: string;
24
+ username?: string;
25
+ didId?: string;
26
+ };
27
+ delegationChain?: string[];
28
+ action: Action;
29
+ resource: {
30
+ type: Resource;
31
+ id?: string;
32
+ };
33
+ environment: {
34
+ ipAddress?: string;
35
+ userAgent?: string;
36
+ requestPath?: string;
37
+ requestMethod?: string;
38
+ };
39
+ result: {
40
+ allowed: boolean;
41
+ reason?: string;
42
+ matchedPermission?: string;
43
+ effectiveScope?: string;
44
+ };
45
+ }
46
+ export interface AuditLogConfig {
47
+ enabled: boolean;
48
+ minSeverity: AuditSeverity;
49
+ logDenied: boolean;
50
+ logDelegated: boolean;
51
+ logMutations: boolean;
52
+ logExecute: boolean;
53
+ logReads: boolean;
54
+ sensitiveResources?: Resource[];
55
+ }
56
+ export interface AuditLogQueryParams {
57
+ page?: number;
58
+ perPage?: number;
59
+ orderBy?: string;
60
+ order?: "ASC" | "DESC";
61
+ severity?: AuditFilterValue<AuditSeverity>;
62
+ callerSub?: string;
63
+ callerType?: "user" | "service" | "system";
64
+ action?: AuditFilterValue<Action>;
65
+ resourceType?: AuditFilterValue<Resource | string>;
66
+ resultAllowed?: boolean;
67
+ correlationId?: string;
68
+ ipAddress?: string;
69
+ requestPath?: string;
70
+ from?: string;
71
+ to?: string;
72
+ search?: string;
73
+ }
74
+ export {};
@@ -0,0 +1,8 @@
1
+ export var AuditSeverity;
2
+ (function (AuditSeverity) {
3
+ AuditSeverity["DEBUG"] = "debug";
4
+ AuditSeverity["INFO"] = "info";
5
+ AuditSeverity["WARNING"] = "warning";
6
+ AuditSeverity["ERROR"] = "error";
7
+ AuditSeverity["CRITICAL"] = "critical";
8
+ })(AuditSeverity || (AuditSeverity = {}));
@@ -0,0 +1,18 @@
1
+ import type { CredentialRequirement, CredentialRequirementSet, CredentialRequirementSetCreate, RequirementEvaluation } from "./credential-requirements.dto.js";
2
+ export type CredentialRecord = Record<string, unknown>;
3
+ export interface CredentialMatchContext {
4
+ remoteParticipant?: string;
5
+ localParticipant?: string;
6
+ holder?: string;
7
+ now?: Date;
8
+ }
9
+ export interface CredentialMatchResult {
10
+ satisfied: boolean;
11
+ requirements: RequirementEvaluation[];
12
+ usableCredentialIds: string[];
13
+ missingRequirementIds: string[];
14
+ }
15
+ export declare function lintCredentialRequirementSet(requirementSet: CredentialRequirementSet | CredentialRequirementSetCreate): string[];
16
+ export declare function credentialMismatch(requirement: CredentialRequirement, credential: CredentialRecord, context?: CredentialMatchContext): string | undefined;
17
+ export declare function findCandidateCredentials(requirement: CredentialRequirement, credentials: CredentialRecord[], context?: CredentialMatchContext): CredentialRecord[];
18
+ export declare function matchCredentialRequirements(requirementSet: Pick<CredentialRequirementSet, "logic" | "requirements">, credentials: CredentialRecord[], context?: CredentialMatchContext): CredentialMatchResult;
@@ -0,0 +1,46 @@
1
+ import { PresentationDefinition } from "./presentationdefinition.dto.js";
2
+ export declare class ProfileRef {
3
+ id: string;
4
+ version: string;
5
+ digest?: string;
6
+ }
7
+ export declare class VersionedRef {
8
+ id: string;
9
+ revision: number;
10
+ digest: string;
11
+ }
12
+ export declare class CredentialClaimConstraint {
13
+ path: string[];
14
+ operator: "eq" | "in" | "exists";
15
+ value?: string | number | boolean | Array<string | number | boolean>;
16
+ }
17
+ export declare class CredentialRequirement {
18
+ id: string;
19
+ credentialTypes: string[];
20
+ acceptedIssuers?: string[];
21
+ holderBinding?: "required" | "not-required";
22
+ subjectBinding?: "remoteParticipant" | "localParticipant" | "none";
23
+ claimConstraints?: CredentialClaimConstraint[];
24
+ status?: "valid";
25
+ }
26
+ export declare class CredentialRequirementSetCreate {
27
+ id: string;
28
+ profile: ProfileRef;
29
+ logic: "all" | "any";
30
+ requirements: CredentialRequirement[];
31
+ }
32
+ export declare class CredentialRequirementSet extends CredentialRequirementSetCreate {
33
+ revision: number;
34
+ presentationDefinition: PresentationDefinition;
35
+ digest: string;
36
+ }
37
+ export declare class CredentialRequirementSetPage {
38
+ data: CredentialRequirementSet[];
39
+ total: number;
40
+ }
41
+ export declare class RequirementEvaluation {
42
+ id: string;
43
+ satisfied: boolean;
44
+ matchedCredentialIds: string[];
45
+ reason?: string;
46
+ }
@@ -0,0 +1,250 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";
11
+ import { Type } from "class-transformer";
12
+ import { ArrayMinSize, IsArray, IsBoolean, IsIn, IsInt, IsOptional, IsString, Matches, Min, MinLength, ValidateNested } from "class-validator";
13
+ import { PresentationDefinition } from "./presentationdefinition.dto.js";
14
+ export class ProfileRef {
15
+ id;
16
+ version;
17
+ digest;
18
+ }
19
+ __decorate([
20
+ ApiProperty(),
21
+ IsString(),
22
+ MinLength(1),
23
+ __metadata("design:type", String)
24
+ ], ProfileRef.prototype, "id", void 0);
25
+ __decorate([
26
+ ApiProperty(),
27
+ IsString(),
28
+ MinLength(1),
29
+ __metadata("design:type", String)
30
+ ], ProfileRef.prototype, "version", void 0);
31
+ __decorate([
32
+ ApiPropertyOptional(),
33
+ IsOptional(),
34
+ IsString(),
35
+ __metadata("design:type", String)
36
+ ], ProfileRef.prototype, "digest", void 0);
37
+ export class VersionedRef {
38
+ id;
39
+ revision;
40
+ digest;
41
+ }
42
+ __decorate([
43
+ ApiProperty(),
44
+ IsString(),
45
+ MinLength(1),
46
+ __metadata("design:type", String)
47
+ ], VersionedRef.prototype, "id", void 0);
48
+ __decorate([
49
+ ApiProperty({ minimum: 1 }),
50
+ IsInt(),
51
+ Min(1),
52
+ __metadata("design:type", Number)
53
+ ], VersionedRef.prototype, "revision", void 0);
54
+ __decorate([
55
+ ApiProperty(),
56
+ IsString(),
57
+ MinLength(1),
58
+ __metadata("design:type", String)
59
+ ], VersionedRef.prototype, "digest", void 0);
60
+ export class CredentialClaimConstraint {
61
+ path;
62
+ operator;
63
+ value;
64
+ }
65
+ __decorate([
66
+ ApiProperty({ type: [String] }),
67
+ IsArray(),
68
+ ArrayMinSize(1),
69
+ IsString({ each: true }),
70
+ __metadata("design:type", Array)
71
+ ], CredentialClaimConstraint.prototype, "path", void 0);
72
+ __decorate([
73
+ ApiProperty({ enum: ["eq", "in", "exists"] }),
74
+ IsIn(["eq", "in", "exists"]),
75
+ __metadata("design:type", String)
76
+ ], CredentialClaimConstraint.prototype, "operator", void 0);
77
+ __decorate([
78
+ ApiPropertyOptional({
79
+ oneOf: [
80
+ { type: "string" },
81
+ { type: "number" },
82
+ { type: "boolean" },
83
+ {
84
+ type: "array",
85
+ items: {
86
+ oneOf: [{ type: "string" }, { type: "number" }, { type: "boolean" }]
87
+ }
88
+ }
89
+ ]
90
+ }),
91
+ IsOptional(),
92
+ __metadata("design:type", Object)
93
+ ], CredentialClaimConstraint.prototype, "value", void 0);
94
+ export class CredentialRequirement {
95
+ id;
96
+ credentialTypes;
97
+ acceptedIssuers;
98
+ holderBinding;
99
+ subjectBinding;
100
+ claimConstraints;
101
+ status;
102
+ }
103
+ __decorate([
104
+ ApiProperty(),
105
+ IsString(),
106
+ MinLength(1),
107
+ __metadata("design:type", String)
108
+ ], CredentialRequirement.prototype, "id", void 0);
109
+ __decorate([
110
+ ApiProperty({ type: [String] }),
111
+ IsArray(),
112
+ ArrayMinSize(1),
113
+ IsString({ each: true }),
114
+ __metadata("design:type", Array)
115
+ ], CredentialRequirement.prototype, "credentialTypes", void 0);
116
+ __decorate([
117
+ ApiPropertyOptional({ type: [String] }),
118
+ IsOptional(),
119
+ IsArray(),
120
+ IsString({ each: true }),
121
+ __metadata("design:type", Array)
122
+ ], CredentialRequirement.prototype, "acceptedIssuers", void 0);
123
+ __decorate([
124
+ ApiPropertyOptional({ enum: ["required", "not-required"] }),
125
+ IsOptional(),
126
+ IsIn(["required", "not-required"]),
127
+ __metadata("design:type", String)
128
+ ], CredentialRequirement.prototype, "holderBinding", void 0);
129
+ __decorate([
130
+ ApiPropertyOptional({
131
+ enum: ["remoteParticipant", "localParticipant", "none"]
132
+ }),
133
+ IsOptional(),
134
+ IsIn(["remoteParticipant", "localParticipant", "none"]),
135
+ __metadata("design:type", String)
136
+ ], CredentialRequirement.prototype, "subjectBinding", void 0);
137
+ __decorate([
138
+ ApiPropertyOptional({ type: () => [CredentialClaimConstraint] }),
139
+ IsOptional(),
140
+ ValidateNested({ each: true }),
141
+ Type(() => CredentialClaimConstraint),
142
+ __metadata("design:type", Array)
143
+ ], CredentialRequirement.prototype, "claimConstraints", void 0);
144
+ __decorate([
145
+ ApiPropertyOptional({ enum: ["valid"] }),
146
+ IsOptional(),
147
+ IsIn(["valid"]),
148
+ __metadata("design:type", String)
149
+ ], CredentialRequirement.prototype, "status", void 0);
150
+ export class CredentialRequirementSetCreate {
151
+ id;
152
+ profile;
153
+ logic;
154
+ requirements;
155
+ }
156
+ __decorate([
157
+ ApiProperty(),
158
+ IsString(),
159
+ MinLength(1),
160
+ Matches(/^[A-Za-z0-9._-]+$/, {
161
+ message: "id may only contain letters, numbers, dots, underscores, and hyphens"
162
+ }),
163
+ __metadata("design:type", String)
164
+ ], CredentialRequirementSetCreate.prototype, "id", void 0);
165
+ __decorate([
166
+ ApiProperty({ type: () => ProfileRef }),
167
+ ValidateNested(),
168
+ Type(() => ProfileRef),
169
+ __metadata("design:type", ProfileRef)
170
+ ], CredentialRequirementSetCreate.prototype, "profile", void 0);
171
+ __decorate([
172
+ ApiProperty({ enum: ["all", "any"] }),
173
+ IsIn(["all", "any"]),
174
+ __metadata("design:type", String)
175
+ ], CredentialRequirementSetCreate.prototype, "logic", void 0);
176
+ __decorate([
177
+ ApiProperty({ type: () => [CredentialRequirement] }),
178
+ IsArray(),
179
+ ArrayMinSize(1),
180
+ ValidateNested({ each: true }),
181
+ Type(() => CredentialRequirement),
182
+ __metadata("design:type", Array)
183
+ ], CredentialRequirementSetCreate.prototype, "requirements", void 0);
184
+ export class CredentialRequirementSet extends CredentialRequirementSetCreate {
185
+ revision;
186
+ presentationDefinition;
187
+ digest;
188
+ }
189
+ __decorate([
190
+ ApiProperty({ minimum: 1 }),
191
+ IsInt(),
192
+ Min(1),
193
+ __metadata("design:type", Number)
194
+ ], CredentialRequirementSet.prototype, "revision", void 0);
195
+ __decorate([
196
+ ApiProperty({ type: () => PresentationDefinition }),
197
+ ValidateNested(),
198
+ Type(() => PresentationDefinition),
199
+ __metadata("design:type", PresentationDefinition)
200
+ ], CredentialRequirementSet.prototype, "presentationDefinition", void 0);
201
+ __decorate([
202
+ ApiProperty(),
203
+ IsString(),
204
+ __metadata("design:type", String)
205
+ ], CredentialRequirementSet.prototype, "digest", void 0);
206
+ export class CredentialRequirementSetPage {
207
+ data;
208
+ total;
209
+ }
210
+ __decorate([
211
+ ApiProperty({ type: () => [CredentialRequirementSet] }),
212
+ IsArray(),
213
+ ValidateNested({ each: true }),
214
+ Type(() => CredentialRequirementSet),
215
+ __metadata("design:type", Array)
216
+ ], CredentialRequirementSetPage.prototype, "data", void 0);
217
+ __decorate([
218
+ ApiProperty({ minimum: 0 }),
219
+ IsInt(),
220
+ Min(0),
221
+ __metadata("design:type", Number)
222
+ ], CredentialRequirementSetPage.prototype, "total", void 0);
223
+ export class RequirementEvaluation {
224
+ id;
225
+ satisfied;
226
+ matchedCredentialIds;
227
+ reason;
228
+ }
229
+ __decorate([
230
+ ApiProperty(),
231
+ IsString(),
232
+ __metadata("design:type", String)
233
+ ], RequirementEvaluation.prototype, "id", void 0);
234
+ __decorate([
235
+ ApiProperty(),
236
+ IsBoolean(),
237
+ __metadata("design:type", Boolean)
238
+ ], RequirementEvaluation.prototype, "satisfied", void 0);
239
+ __decorate([
240
+ ApiProperty({ type: [String] }),
241
+ IsArray(),
242
+ IsString({ each: true }),
243
+ __metadata("design:type", Array)
244
+ ], RequirementEvaluation.prototype, "matchedCredentialIds", void 0);
245
+ __decorate([
246
+ ApiPropertyOptional(),
247
+ IsOptional(),
248
+ IsString(),
249
+ __metadata("design:type", String)
250
+ ], RequirementEvaluation.prototype, "reason", void 0);
@@ -0,0 +1,180 @@
1
+ export function lintCredentialRequirementSet(requirementSet) {
2
+ const errors = [];
3
+ if (!requirementSet.id.trim())
4
+ errors.push("Requirement set id is required");
5
+ else if (!/^[A-Za-z0-9._-]+$/.test(requirementSet.id)) {
6
+ errors.push("Requirement set id may only contain letters, numbers, dots, underscores, and hyphens");
7
+ }
8
+ if (!requirementSet.profile.id.trim() ||
9
+ !requirementSet.profile.version.trim()) {
10
+ errors.push("A pinned profile id and version are required");
11
+ }
12
+ if (requirementSet.requirements.length === 0) {
13
+ errors.push("At least one credential requirement is required");
14
+ }
15
+ const ids = requirementSet.requirements.map((requirement) => requirement.id);
16
+ if (new Set(ids).size !== ids.length) {
17
+ errors.push("Credential requirement ids must be unique");
18
+ }
19
+ for (const requirement of requirementSet.requirements) {
20
+ if (!requirement.id.trim())
21
+ errors.push("Credential requirement id is required");
22
+ if (requirement.credentialTypes.length === 0) {
23
+ errors.push(`${requirement.id}: at least one credential type is required`);
24
+ }
25
+ for (const constraint of requirement.claimConstraints ?? []) {
26
+ if (constraint.path.length === 0) {
27
+ errors.push(`${requirement.id}: claim path must not be empty`);
28
+ }
29
+ if (constraint.operator === "in" &&
30
+ (!Array.isArray(constraint.value) || constraint.value.length === 0)) {
31
+ errors.push(`${requirement.id}: in comparison requires a non-empty array value`);
32
+ }
33
+ else if (constraint.operator !== "exists" &&
34
+ constraint.value === undefined) {
35
+ errors.push(`${requirement.id}: claim comparison requires a value`);
36
+ }
37
+ }
38
+ }
39
+ return errors;
40
+ }
41
+ export function credentialMismatch(requirement, credential, context = {}) {
42
+ const subjects = credentialSubjects(credential);
43
+ const types = strings(credential.type).concat(subjects.flatMap((subject) => strings(subject.type ?? subject["@type"])));
44
+ if (!requirement.credentialTypes.some((type) => types.includes(type))) {
45
+ return `Credential type does not satisfy ${requirement.id}`;
46
+ }
47
+ const issuer = typeof credential.issuer === "string"
48
+ ? credential.issuer
49
+ : record(credential.issuer)?.id;
50
+ if (requirement.acceptedIssuers?.length &&
51
+ (typeof issuer !== "string" ||
52
+ !requirement.acceptedIssuers.includes(issuer))) {
53
+ return `Credential issuer is not accepted for ${requirement.id}`;
54
+ }
55
+ const now = (context.now ?? new Date()).getTime();
56
+ const validFrom = credential.validFrom ?? credential.issuanceDate;
57
+ const validUntil = credential.validUntil ?? credential.expirationDate;
58
+ const validFromTime = date(validFrom);
59
+ const validUntilTime = date(validUntil);
60
+ if (typeof validFrom === "string" && validFromTime === undefined) {
61
+ return "Credential has an invalid valid-from date";
62
+ }
63
+ if (typeof validUntil === "string" && validUntilTime === undefined) {
64
+ return "Credential has an invalid expiry date";
65
+ }
66
+ if (validFromTime !== undefined && validFromTime > now) {
67
+ return "Credential is not valid yet";
68
+ }
69
+ if (validUntilTime !== undefined && validUntilTime <= now) {
70
+ return "Credential is expired";
71
+ }
72
+ if (requirement.status === "valid" && isRevoked(credential)) {
73
+ return "Credential status is revoked or suspended";
74
+ }
75
+ const subjectIds = subjects
76
+ .map((subject) => subject.id)
77
+ .filter((id) => typeof id === "string");
78
+ const expectedSubject = requirement.subjectBinding === "remoteParticipant"
79
+ ? context.remoteParticipant
80
+ : requirement.subjectBinding === "localParticipant"
81
+ ? context.localParticipant
82
+ : undefined;
83
+ if (requirement.subjectBinding && requirement.subjectBinding !== "none") {
84
+ if (!expectedSubject) {
85
+ return `${requirement.subjectBinding} binding context is required`;
86
+ }
87
+ if (!subjectIds.includes(expectedSubject)) {
88
+ return `Credential subject is not bound to ${expectedSubject}`;
89
+ }
90
+ }
91
+ if (requirement.holderBinding === "required") {
92
+ if (!context.holder)
93
+ return "Holder binding context is required";
94
+ if (!subjectIds.includes(context.holder)) {
95
+ return `Credential is not bound to holder ${context.holder}`;
96
+ }
97
+ }
98
+ for (const constraint of requirement.claimConstraints ?? []) {
99
+ if (!subjects.some((subject) => claimMatches(subject, constraint))) {
100
+ return `Claim ${constraint.path.join(".")} does not satisfy ${constraint.operator}`;
101
+ }
102
+ }
103
+ return undefined;
104
+ }
105
+ export function findCandidateCredentials(requirement, credentials, context = {}) {
106
+ return credentials.filter((credential) => credentialMismatch(requirement, credential, context) === undefined);
107
+ }
108
+ export function matchCredentialRequirements(requirementSet, credentials, context = {}) {
109
+ const requirements = requirementSet.requirements.map((requirement) => {
110
+ const matches = credentials
111
+ .map((credential, index) => ({ credential, index }))
112
+ .filter(({ credential }) => credentialMismatch(requirement, credential, context) === undefined);
113
+ return {
114
+ id: requirement.id,
115
+ satisfied: matches.length > 0,
116
+ matchedCredentialIds: matches.map(({ credential, index }) => typeof credential.id === "string"
117
+ ? credential.id
118
+ : `credential-${index + 1}`),
119
+ reason: matches.length > 0
120
+ ? undefined
121
+ : `No valid credential satisfies ${requirement.id}`
122
+ };
123
+ });
124
+ const satisfied = requirementSet.logic === "all"
125
+ ? requirements.every((requirement) => requirement.satisfied)
126
+ : requirements.some((requirement) => requirement.satisfied);
127
+ return {
128
+ satisfied,
129
+ requirements,
130
+ usableCredentialIds: [
131
+ ...new Set(requirements.flatMap((requirement) => requirement.matchedCredentialIds))
132
+ ],
133
+ missingRequirementIds: requirements
134
+ .filter((requirement) => !requirement.satisfied)
135
+ .map((requirement) => requirement.id)
136
+ };
137
+ }
138
+ function claimMatches(subject, constraint) {
139
+ let current = subject;
140
+ for (const segment of constraint.path)
141
+ current = record(current)?.[segment];
142
+ if (constraint.operator === "exists")
143
+ return current !== undefined;
144
+ if (constraint.operator === "eq")
145
+ return Object.is(current, constraint.value);
146
+ return (Array.isArray(constraint.value) &&
147
+ constraint.value.some((value) => Object.is(value, current)));
148
+ }
149
+ function isRevoked(credential) {
150
+ const statuses = Array.isArray(credential.credentialStatus)
151
+ ? credential.credentialStatus
152
+ : [credential.credentialStatus];
153
+ return (credential.revoked === true ||
154
+ statuses.some((status) => {
155
+ const value = record(status);
156
+ return ["revoked", "suspended", "invalid"].includes(String(value?.status ?? value?.state ?? "").toLowerCase());
157
+ }));
158
+ }
159
+ function credentialSubjects(credential) {
160
+ const subjects = Array.isArray(credential.credentialSubject)
161
+ ? credential.credentialSubject
162
+ : [credential.credentialSubject];
163
+ return subjects
164
+ .map(record)
165
+ .filter((subject) => subject !== undefined);
166
+ }
167
+ function strings(value) {
168
+ return (Array.isArray(value) ? value : [value]).filter((entry) => typeof entry === "string");
169
+ }
170
+ function record(value) {
171
+ return value !== null && typeof value === "object"
172
+ ? value
173
+ : undefined;
174
+ }
175
+ function date(value) {
176
+ if (typeof value !== "string")
177
+ return undefined;
178
+ const parsed = Date.parse(value);
179
+ return Number.isNaN(parsed) ? undefined : parsed;
180
+ }
@@ -0,0 +1,5 @@
1
+ import { DataPlaneDetailsDto } from "@tsg-dsp/common-dsp";
2
+ export declare class DataPlaneStateDto {
3
+ id: string;
4
+ details: DataPlaneDetailsDto;
5
+ }
@@ -0,0 +1,28 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { ApiProperty } from "@nestjs/swagger";
11
+ import { DataPlaneDetailsDto } from "@tsg-dsp/common-dsp";
12
+ import { Type } from "class-transformer";
13
+ import { IsString, ValidateNested } from "class-validator";
14
+ export class DataPlaneStateDto {
15
+ id;
16
+ details;
17
+ }
18
+ __decorate([
19
+ ApiProperty({ example: "44d1f3d6-f65d-4a7c-84db-f92ba826305e" }),
20
+ IsString(),
21
+ __metadata("design:type", String)
22
+ ], DataPlaneStateDto.prototype, "id", void 0);
23
+ __decorate([
24
+ ApiProperty({ type: () => DataPlaneDetailsDto }),
25
+ ValidateNested(),
26
+ Type(() => DataPlaneDetailsDto),
27
+ __metadata("design:type", DataPlaneDetailsDto)
28
+ ], DataPlaneStateDto.prototype, "details", void 0);