@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.
- package/LICENSE +201 -0
- package/README.md +362 -2
- package/dist/.generated/control-plane.d.ts +7825 -0
- package/dist/.generated/sso-bridge.d.ts +3999 -0
- package/dist/.generated/wallet.d.ts +6248 -0
- package/dist/auth/auth.provider.d.ts +49 -0
- package/dist/auth/auth.provider.d.ts.map +1 -0
- package/dist/auth/auth.provider.js +166 -0
- package/dist/auth/auth.provider.js.map +1 -0
- package/dist/auth/auth.types.d.ts +27 -0
- package/dist/auth/auth.types.d.ts.map +1 -0
- package/dist/auth/auth.types.js +2 -0
- package/dist/auth/auth.types.js.map +1 -0
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +3 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/browser.d.ts +1245 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +228 -0
- package/dist/browser.js.map +1 -0
- package/dist/catalog/catalog.sdk.d.ts +149 -0
- package/dist/catalog/catalog.sdk.d.ts.map +1 -0
- package/dist/catalog/catalog.sdk.js +155 -0
- package/dist/catalog/catalog.sdk.js.map +1 -0
- package/dist/catalog/index.d.ts +2 -0
- package/dist/catalog/index.d.ts.map +1 -0
- package/dist/catalog/index.js +2 -0
- package/dist/catalog/index.js.map +1 -0
- package/dist/client.d.ts +43 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +109 -0
- package/dist/client.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/sdk.config.d.ts +97 -0
- package/dist/config/sdk.config.d.ts.map +1 -0
- package/dist/config/sdk.config.js +2 -0
- package/dist/config/sdk.config.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/metadata/index.d.ts +2 -0
- package/dist/metadata/index.d.ts.map +1 -0
- package/dist/metadata/index.js +2 -0
- package/dist/metadata/index.js.map +1 -0
- package/dist/metadata/metadata.sdk.d.ts +114 -0
- package/dist/metadata/metadata.sdk.d.ts.map +1 -0
- package/dist/metadata/metadata.sdk.js +145 -0
- package/dist/metadata/metadata.sdk.js.map +1 -0
- package/dist/negotiations/index.d.ts +2 -0
- package/dist/negotiations/index.d.ts.map +1 -0
- package/dist/negotiations/index.js +2 -0
- package/dist/negotiations/index.js.map +1 -0
- package/dist/negotiations/negotiations.sdk.d.ts +113 -0
- package/dist/negotiations/negotiations.sdk.d.ts.map +1 -0
- package/dist/negotiations/negotiations.sdk.js +146 -0
- package/dist/negotiations/negotiations.sdk.js.map +1 -0
- package/dist/requirements/index.d.ts +2 -0
- package/dist/requirements/index.d.ts.map +1 -0
- package/dist/requirements/index.js +2 -0
- package/dist/requirements/index.js.map +1 -0
- package/dist/requirements/requirements.sdk.d.ts +52 -0
- package/dist/requirements/requirements.sdk.d.ts.map +1 -0
- package/dist/requirements/requirements.sdk.js +123 -0
- package/dist/requirements/requirements.sdk.js.map +1 -0
- package/dist/sso/index.d.ts +3 -0
- package/dist/sso/index.d.ts.map +1 -0
- package/dist/sso/index.js +3 -0
- package/dist/sso/index.js.map +1 -0
- package/dist/sso/sso-management.sdk.d.ts +96 -0
- package/dist/sso/sso-management.sdk.d.ts.map +1 -0
- package/dist/sso/sso-management.sdk.js +152 -0
- package/dist/sso/sso-management.sdk.js.map +1 -0
- package/dist/sso/sso.sdk.d.ts +75 -0
- package/dist/sso/sso.sdk.d.ts.map +1 -0
- package/dist/sso/sso.sdk.js +149 -0
- package/dist/sso/sso.sdk.js.map +1 -0
- package/dist/tenants/tenant-management.sdk.d.ts +48 -0
- package/dist/tenants/tenant-management.sdk.d.ts.map +1 -0
- package/dist/tenants/tenant-management.sdk.js +107 -0
- package/dist/tenants/tenant-management.sdk.js.map +1 -0
- package/dist/transfers/index.d.ts +2 -0
- package/dist/transfers/index.d.ts.map +1 -0
- package/dist/transfers/index.js +2 -0
- package/dist/transfers/index.js.map +1 -0
- package/dist/transfers/transfers.sdk.d.ts +174 -0
- package/dist/transfers/transfers.sdk.d.ts.map +1 -0
- package/dist/transfers/transfers.sdk.js +200 -0
- package/dist/transfers/transfers.sdk.js.map +1 -0
- package/dist/tsg-sdk.d.ts +68 -0
- package/dist/tsg-sdk.d.ts.map +1 -0
- package/dist/tsg-sdk.js +145 -0
- package/dist/tsg-sdk.js.map +1 -0
- package/dist/utils/errors.d.ts +67 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +79 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/polling.d.ts +20 -0
- package/dist/utils/polling.d.ts.map +1 -0
- package/dist/utils/polling.js +35 -0
- package/dist/utils/polling.js.map +1 -0
- package/dist/utils/reason.d.ts +16 -0
- package/dist/utils/reason.d.ts.map +1 -0
- package/dist/utils/reason.js +34 -0
- package/dist/utils/reason.js.map +1 -0
- package/dist/utils/shape-validation.d.ts +59 -0
- package/dist/utils/shape-validation.d.ts.map +1 -0
- package/dist/utils/shape-validation.js +85 -0
- package/dist/utils/shape-validation.js.map +1 -0
- package/dist/utils/validate.d.ts +47 -0
- package/dist/utils/validate.d.ts.map +1 -0
- package/dist/utils/validate.js +68 -0
- package/dist/utils/validate.js.map +1 -0
- package/dist/vendor/common-dtos/abac.policy.d.ts +69 -0
- package/dist/vendor/common-dtos/abac.policy.js +5 -0
- package/dist/vendor/common-dtos/audit.types.d.ts +74 -0
- package/dist/vendor/common-dtos/audit.types.js +8 -0
- package/dist/vendor/common-dtos/credential-requirements.d.ts +18 -0
- package/dist/vendor/common-dtos/credential-requirements.dto.d.ts +46 -0
- package/dist/vendor/common-dtos/credential-requirements.dto.js +250 -0
- package/dist/vendor/common-dtos/credential-requirements.js +180 -0
- package/dist/vendor/common-dtos/dataplane.dto.d.ts +5 -0
- package/dist/vendor/common-dtos/dataplane.dto.js +28 -0
- package/dist/vendor/common-dtos/dcp.dto.d.ts +89 -0
- package/dist/vendor/common-dtos/dcp.dto.js +489 -0
- package/dist/vendor/common-dtos/dcql.dto.d.ts +88 -0
- package/dist/vendor/common-dtos/dcql.dto.js +449 -0
- package/dist/vendor/common-dtos/did.schemas.d.ts +39 -0
- package/dist/vendor/common-dtos/did.schemas.js +259 -0
- package/dist/vendor/common-dtos/index.d.ts +19 -0
- package/dist/vendor/common-dtos/index.js +19 -0
- package/dist/vendor/common-dtos/metadata.dto.d.ts +5 -0
- package/dist/vendor/common-dtos/metadata.dto.js +29 -0
- package/dist/vendor/common-dtos/negotiations.dto.d.ts +28 -0
- package/dist/vendor/common-dtos/negotiations.dto.js +204 -0
- package/dist/vendor/common-dtos/permission-resources.d.ts +3 -0
- package/dist/vendor/common-dtos/permission-resources.js +18 -0
- package/dist/vendor/common-dtos/permissions.d.ts +242 -0
- package/dist/vendor/common-dtos/permissions.js +409 -0
- package/dist/vendor/common-dtos/presentation.request.dto.d.ts +8 -0
- package/dist/vendor/common-dtos/presentation.request.dto.js +54 -0
- package/dist/vendor/common-dtos/presentation.status.dto.d.ts +12 -0
- package/dist/vendor/common-dtos/presentation.status.dto.js +82 -0
- package/dist/vendor/common-dtos/presentationdefinition.dto.d.ts +74 -0
- package/dist/vendor/common-dtos/presentationdefinition.dto.js +447 -0
- package/dist/vendor/common-dtos/signatures.dto.d.ts +31 -0
- package/dist/vendor/common-dtos/signatures.dto.js +209 -0
- package/dist/vendor/common-dtos/transfer.dto.d.ts +16 -0
- package/dist/vendor/common-dtos/transfer.dto.js +101 -0
- package/dist/vendor/common-dtos/utils.swagger.d.ts +12 -0
- package/dist/vendor/common-dtos/utils.swagger.js +62 -0
- package/dist/vendor/control-plane-dtos/index.d.ts +4 -0
- package/dist/vendor/control-plane-dtos/index.js +4 -0
- package/dist/vendor/control-plane-dtos/registry/registry.dto.d.ts +4 -0
- package/dist/vendor/control-plane-dtos/registry/registry.dto.js +25 -0
- package/dist/vendor/control-plane-dtos/registry/registry.search.dto.d.ts +28 -0
- package/dist/vendor/control-plane-dtos/registry/registry.search.dto.js +126 -0
- package/dist/vendor/control-plane-dtos/ssi/verifiablePresentations.dto.d.ts +9 -0
- package/dist/vendor/control-plane-dtos/ssi/verifiablePresentations.dto.js +43 -0
- package/dist/vendor/control-plane-dtos/status/status.dto.d.ts +37 -0
- package/dist/vendor/control-plane-dtos/status/status.dto.js +172 -0
- package/dist/vendor/sso-bridge-dtos/clients.dto.d.ts +25 -0
- package/dist/vendor/sso-bridge-dtos/clients.dto.js +147 -0
- package/dist/vendor/sso-bridge-dtos/grants.d.ts +4 -0
- package/dist/vendor/sso-bridge-dtos/grants.js +7 -0
- package/dist/vendor/sso-bridge-dtos/index.d.ts +5 -0
- package/dist/vendor/sso-bridge-dtos/index.js +5 -0
- package/dist/vendor/sso-bridge-dtos/tenant.dto.d.ts +70 -0
- package/dist/vendor/sso-bridge-dtos/tenant.dto.js +1 -0
- package/dist/vendor/sso-bridge-dtos/users.dto.d.ts +42 -0
- package/dist/vendor/sso-bridge-dtos/users.dto.js +173 -0
- package/dist/vendor/tenant-dtos/authorization.dto.d.ts +46 -0
- package/dist/vendor/tenant-dtos/authorization.dto.js +5 -0
- package/dist/vendor/tenant-dtos/consumer.dto.d.ts +29 -0
- package/dist/vendor/tenant-dtos/consumer.dto.js +1 -0
- package/dist/vendor/tenant-dtos/fixtures.d.ts +15 -0
- package/dist/vendor/tenant-dtos/fixtures.js +48 -0
- package/dist/vendor/tenant-dtos/index.d.ts +8 -0
- package/dist/vendor/tenant-dtos/index.js +8 -0
- package/dist/vendor/tenant-dtos/management.dto.d.ts +137 -0
- package/dist/vendor/tenant-dtos/management.dto.js +1 -0
- package/dist/vendor/tenant-dtos/membership.dto.d.ts +22 -0
- package/dist/vendor/tenant-dtos/membership.dto.js +7 -0
- package/dist/vendor/tenant-dtos/principal.dto.d.ts +13 -0
- package/dist/vendor/tenant-dtos/principal.dto.js +6 -0
- package/dist/vendor/tenant-dtos/provisioning.dto.d.ts +47 -0
- package/dist/vendor/tenant-dtos/provisioning.dto.js +1 -0
- package/dist/vendor/tenant-dtos/service-binding.dto.d.ts +9 -0
- package/dist/vendor/tenant-dtos/service-binding.dto.js +1 -0
- package/dist/vendor/tenant-dtos/tenant.dto.d.ts +15 -0
- package/dist/vendor/tenant-dtos/tenant.dto.js +1 -0
- package/dist/vendor/wallet-dtos/clients.dto.d.ts +21 -0
- package/dist/vendor/wallet-dtos/clients.dto.js +13 -0
- package/dist/vendor/wallet-dtos/credentials.dto.d.ts +31 -0
- package/dist/vendor/wallet-dtos/credentials.dto.js +46 -0
- package/dist/vendor/wallet-dtos/index.d.ts +6 -0
- package/dist/vendor/wallet-dtos/index.js +6 -0
- package/dist/vendor/wallet-dtos/issuance.dto.d.ts +237 -0
- package/dist/vendor/wallet-dtos/issuance.dto.js +1139 -0
- package/dist/vendor/wallet-dtos/scopes.dto.d.ts +24 -0
- package/dist/vendor/wallet-dtos/scopes.dto.js +151 -0
- package/dist/vendor/wallet-dtos/status.dto.d.ts +35 -0
- package/dist/vendor/wallet-dtos/status.dto.js +169 -0
- package/dist/vendor/wallet-dtos/utils/schema-converter.d.ts +13 -0
- package/dist/vendor/wallet-dtos/utils/schema-converter.js +42 -0
- package/dist/wallet/index.d.ts +2 -0
- package/dist/wallet/index.d.ts.map +1 -0
- package/dist/wallet/index.js +2 -0
- package/dist/wallet/index.js.map +1 -0
- package/dist/wallet/wallet.sdk.d.ts +285 -0
- package/dist/wallet/wallet.sdk.d.ts.map +1 -0
- package/dist/wallet/wallet.sdk.js +384 -0
- package/dist/wallet/wallet.sdk.js.map +1 -0
- package/package.json +79 -3
|
@@ -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,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);
|