@bsv/vsc 0.2.0-beta.1
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 +58 -0
- package/README.md +107 -0
- package/artifacts/context-0.1.0.jsonld +127 -0
- package/artifacts/disclosure-0.1.0.schema.json +526 -0
- package/artifacts/epcis/NOTICE.md +11 -0
- package/artifacts/epcis/epcis-context-2.0.1.jsonld +593 -0
- package/artifacts/epcis/epcis-json-schema-2.0.1.json +2352 -0
- package/artifacts/epcis/query-schema-2.0.1.json +968 -0
- package/artifacts/external/NOTICE.md +3 -0
- package/artifacts/external/dpp-external-passport-1.context.jsonld +8 -0
- package/artifacts/external/dpp-external-passport-1.schema.json +158 -0
- package/artifacts/profile-0.1.0.json +100 -0
- package/artifacts/seal-0.1.0.schema.json +535 -0
- package/artifacts/w3c/NOTICE.md +3 -0
- package/artifacts/w3c/credentials-v2.jsonld +340 -0
- package/dist/context.d.ts +9 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +50 -0
- package/dist/context.js.map +1 -0
- package/dist/crypto.d.ts +50 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +141 -0
- package/dist/crypto.js.map +1 -0
- package/dist/did-web.d.ts +9 -0
- package/dist/did-web.d.ts.map +1 -0
- package/dist/did-web.js +66 -0
- package/dist/did-web.js.map +1 -0
- package/dist/epcis-source.d.ts +251 -0
- package/dist/epcis-source.d.ts.map +1 -0
- package/dist/epcis-source.js +573 -0
- package/dist/epcis-source.js.map +1 -0
- package/dist/epcis.d.ts +51 -0
- package/dist/epcis.d.ts.map +1 -0
- package/dist/epcis.js +171 -0
- package/dist/epcis.js.map +1 -0
- package/dist/exchange.d.ts +175 -0
- package/dist/exchange.d.ts.map +1 -0
- package/dist/exchange.js +491 -0
- package/dist/exchange.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/jcs.d.ts +25 -0
- package/dist/jcs.d.ts.map +1 -0
- package/dist/jcs.js +67 -0
- package/dist/jcs.js.map +1 -0
- package/dist/schema.d.ts +414 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +537 -0
- package/dist/schema.js.map +1 -0
- package/dist/types.d.ts +159 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +22 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +147 -0
- package/dist/validation.js.map +1 -0
- package/dist/verification.d.ts +10 -0
- package/dist/verification.d.ts.map +1 -0
- package/dist/verification.js +350 -0
- package/dist/verification.js.map +1 -0
- package/package.json +68 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
export type JsonObject = {
|
|
2
|
+
[key: string]: unknown;
|
|
3
|
+
};
|
|
4
|
+
export type DocumentLoader = (url: string) => Promise<{
|
|
5
|
+
document: JsonObject;
|
|
6
|
+
documentUrl?: string;
|
|
7
|
+
contextUrl?: string | null;
|
|
8
|
+
}>;
|
|
9
|
+
export interface Issue {
|
|
10
|
+
code: string;
|
|
11
|
+
path: string;
|
|
12
|
+
message: string;
|
|
13
|
+
}
|
|
14
|
+
export type CheckOutcome = 'verified' | 'invalid' | 'indeterminate' | 'unsupported' | 'not-required';
|
|
15
|
+
export interface Check {
|
|
16
|
+
outcome: CheckOutcome;
|
|
17
|
+
issues: Issue[];
|
|
18
|
+
evidence?: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface Proof extends JsonObject {
|
|
21
|
+
type: string;
|
|
22
|
+
verificationMethod: string;
|
|
23
|
+
proofPurpose: string;
|
|
24
|
+
proofValue: string;
|
|
25
|
+
created?: string;
|
|
26
|
+
cryptosuite?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface Credential extends JsonObject {
|
|
29
|
+
'@context': string[];
|
|
30
|
+
type: string[];
|
|
31
|
+
id: string;
|
|
32
|
+
issuer: string;
|
|
33
|
+
validFrom: string;
|
|
34
|
+
validUntil?: string;
|
|
35
|
+
credentialSubject: JsonObject;
|
|
36
|
+
credentialStatus?: StatusEntry;
|
|
37
|
+
proof?: Proof | Proof[];
|
|
38
|
+
}
|
|
39
|
+
export interface StatusEntry extends JsonObject {
|
|
40
|
+
id: string;
|
|
41
|
+
type: 'BitstringStatusListEntry';
|
|
42
|
+
statusPurpose: 'revocation' | 'suspension';
|
|
43
|
+
statusListIndex: string;
|
|
44
|
+
statusListCredential: string;
|
|
45
|
+
}
|
|
46
|
+
export interface ProductIdentifier extends JsonObject {
|
|
47
|
+
scheme: string;
|
|
48
|
+
value: string;
|
|
49
|
+
schemeAuthority: string;
|
|
50
|
+
serialNumber?: string;
|
|
51
|
+
}
|
|
52
|
+
export type Topology = 'linear' | 'fork' | 'merge' | 'transform' | 'correction';
|
|
53
|
+
export interface Seal extends Credential {
|
|
54
|
+
sealVersion: '1.0';
|
|
55
|
+
issuanceDate: string;
|
|
56
|
+
sealTimestamp: string;
|
|
57
|
+
correctionOf: string | null;
|
|
58
|
+
credentialStatus: StatusEntry;
|
|
59
|
+
eventVector: {
|
|
60
|
+
what: {
|
|
61
|
+
productIdentifiers: ProductIdentifier[];
|
|
62
|
+
quantity?: number;
|
|
63
|
+
quantityUnit?: string;
|
|
64
|
+
[key: string]: unknown;
|
|
65
|
+
};
|
|
66
|
+
when: {
|
|
67
|
+
eventTime: string;
|
|
68
|
+
recordedAt: string;
|
|
69
|
+
timezone: string;
|
|
70
|
+
timePrecision: 'millisecond' | 'second' | 'minute';
|
|
71
|
+
};
|
|
72
|
+
where: {
|
|
73
|
+
jurisdiction: string;
|
|
74
|
+
[key: string]: unknown;
|
|
75
|
+
};
|
|
76
|
+
who: {
|
|
77
|
+
actorDid: string;
|
|
78
|
+
actorRole: string;
|
|
79
|
+
assertionMethod: string;
|
|
80
|
+
[key: string]: unknown;
|
|
81
|
+
};
|
|
82
|
+
how: {
|
|
83
|
+
eventType: string;
|
|
84
|
+
eventTypeVocab: string;
|
|
85
|
+
businessStep: string;
|
|
86
|
+
disposition: string;
|
|
87
|
+
action: 'ADD' | 'OBSERVE' | 'DELETE';
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
extensions: {
|
|
91
|
+
'+Dn': Record<string, JsonObject>;
|
|
92
|
+
};
|
|
93
|
+
chainOfCustody: {
|
|
94
|
+
chainId: string;
|
|
95
|
+
sequenceNumber: number;
|
|
96
|
+
parentSeals: string[];
|
|
97
|
+
childSeals?: string[];
|
|
98
|
+
topology: Topology;
|
|
99
|
+
topologyNote?: string;
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
export interface StatusPolicy {
|
|
103
|
+
id: string;
|
|
104
|
+
resolve: (url: string) => Promise<Credential>;
|
|
105
|
+
/** Maximum age of the signed list's validFrom, not of an unauthenticated HTTP response. */
|
|
106
|
+
maxAgeMs: number;
|
|
107
|
+
/** Explicit policy grants for third-party list issuers, indexed by credential issuer DID. */
|
|
108
|
+
delegatedListIssuers?: Readonly<Record<string, readonly string[]>>;
|
|
109
|
+
}
|
|
110
|
+
export type AuthorityPolicy = {
|
|
111
|
+
id: string;
|
|
112
|
+
required: false;
|
|
113
|
+
reason: string;
|
|
114
|
+
} | {
|
|
115
|
+
id: string;
|
|
116
|
+
required: true;
|
|
117
|
+
trustAnchors: readonly string[];
|
|
118
|
+
/** Returns signed VscEventAuthorisation credentials. This function does not decide validity. */
|
|
119
|
+
resolve: (issuer: string) => Promise<Credential[]>;
|
|
120
|
+
};
|
|
121
|
+
export interface VerificationOptions {
|
|
122
|
+
credential: Seal;
|
|
123
|
+
documentLoader: DocumentLoader;
|
|
124
|
+
evaluationTime?: string;
|
|
125
|
+
statusPolicy?: StatusPolicy;
|
|
126
|
+
authorityPolicy?: AuthorityPolicy;
|
|
127
|
+
resolveSeal?: (id: string) => Promise<Seal | undefined>;
|
|
128
|
+
/** The caller supplies the complete discovered candidate set for the stated evidence scope. */
|
|
129
|
+
corrections?: Seal[];
|
|
130
|
+
correctionPolicy?: {
|
|
131
|
+
id: string;
|
|
132
|
+
resolve: (originalIssuer: string, delegate: string) => Promise<Credential[]>;
|
|
133
|
+
};
|
|
134
|
+
limits?: {
|
|
135
|
+
maxDepth?: number;
|
|
136
|
+
maxNodes?: number;
|
|
137
|
+
maxParents?: number;
|
|
138
|
+
timeoutMs?: number;
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
export interface VerificationResult {
|
|
142
|
+
profileId: string;
|
|
143
|
+
upstreamRevision: string;
|
|
144
|
+
evaluatedAt: string;
|
|
145
|
+
outcome: 'verified' | 'invalid' | 'indeterminate' | 'unsupported';
|
|
146
|
+
checks: {
|
|
147
|
+
structure: Check;
|
|
148
|
+
proof: Check;
|
|
149
|
+
temporal: Check;
|
|
150
|
+
status: Check;
|
|
151
|
+
authority: Check;
|
|
152
|
+
chain: Check;
|
|
153
|
+
corrections: Check;
|
|
154
|
+
};
|
|
155
|
+
issues: Issue[];
|
|
156
|
+
/** Verification is scoped to supplied/discovered evidence, and does not establish global freshness. */
|
|
157
|
+
evidenceScope: 'provided-evidence';
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AACpD,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IAAE,QAAQ,EAAE,UAAU,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC;AAClI,MAAM,WAAW,KAAK;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACtE,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,eAAe,GAAG,aAAa,GAAG,cAAc,CAAC;AACrG,MAAM,WAAW,KAAK;IAAG,OAAO,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE;AACtF,MAAM,WAAW,KAAM,SAAQ,UAAU;IACvC,IAAI,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IACnF,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CACxC;AACD,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IACjE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,UAAU,CAAC;IACtE,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;CACzD;AACD,MAAM,WAAW,WAAY,SAAQ,UAAU;IAC7C,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,0BAA0B,CAAC;IAAC,aAAa,EAAE,YAAY,GAAG,YAAY,CAAC;IACzF,eAAe,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAC;CACvD;AACD,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAC/E;AACD,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,CAAC;AAChF,MAAM,WAAW,IAAK,SAAQ,UAAU;IACtC,WAAW,EAAE,KAAK,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7F,gBAAgB,EAAE,WAAW,CAAC;IAC9B,WAAW,EAAE;QACX,IAAI,EAAE;YAAE,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC;QACpH,IAAI,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,aAAa,GAAG,QAAQ,GAAG,QAAQ,CAAA;SAAE,CAAC;QACtH,KAAK,EAAE;YAAE,YAAY,EAAE,MAAM,CAAC;YAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC;QACxD,GAAG,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,eAAe,EAAE,MAAM,CAAC;YAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAC;QAC9F,GAAG,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,CAAA;SAAE,CAAC;KACrI,CAAC;IACF,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;KAAE,CAAC;IAClD,cAAc,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACtJ;AACD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9C,2FAA2F;IAC3F,QAAQ,EAAE,MAAM,CAAC;IACjB,6FAA6F;IAC7F,oBAAoB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CACpE;AACD,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAC9E,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5D,gGAAgG;IAChG,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;CACpD,CAAC;AACF,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,IAAI,CAAC;IAAC,cAAc,EAAE,cAAc,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAC1E,YAAY,CAAC,EAAE,YAAY,CAAC;IAAC,eAAe,CAAC,EAAE,eAAe,CAAC;IAC/D,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;IACxD,+FAA+F;IAC/F,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;IACrB,gBAAgB,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;KAAE,CAAC;IAChH,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5F;AACD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IACjE,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,eAAe,GAAG,aAAa,CAAC;IAClE,MAAM,EAAE;QAAE,SAAS,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC;QAAC,SAAS,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC;QAAC,WAAW,EAAE,KAAK,CAAA;KAAE,CAAC;IAC/H,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,uGAAuG;IACvG,aAAa,EAAE,mBAAmB,CAAC;CACpC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Issue, Seal } from './types.js';
|
|
2
|
+
export declare function validateSealStructure(value: unknown, { requireProof }?: {
|
|
3
|
+
requireProof?: boolean | undefined;
|
|
4
|
+
}): {
|
|
5
|
+
valid: boolean;
|
|
6
|
+
errors: Issue[];
|
|
7
|
+
};
|
|
8
|
+
export declare const disclosureSchema: any;
|
|
9
|
+
export declare function validateSealPresentationStructure(value: unknown): {
|
|
10
|
+
valid: boolean;
|
|
11
|
+
errors: Issue[];
|
|
12
|
+
};
|
|
13
|
+
/** Parses exact input without replacing its bytes. Rejects duplicate keys before interpretation. */
|
|
14
|
+
export declare function parseStrictJsonBytes(bytes: Uint8Array): unknown;
|
|
15
|
+
export declare function parseSealBytes(bytes: Uint8Array): Seal;
|
|
16
|
+
export declare function extractSealMetadata(seal: Seal): {
|
|
17
|
+
id: string;
|
|
18
|
+
issuer: string;
|
|
19
|
+
type: "VSC-SEAL";
|
|
20
|
+
subjects: string[];
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAK9C,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,YAAmB,EAAE;;CAAK,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,KAAK,EAAE,CAAA;CAAE,CA6BvH;AAED,eAAO,MAAM,gBAAgB,EAAE,GAAiC,CAAC;AAOjE,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,KAAK,EAAE,CAAA;CAAE,CASrG;AAED,oGAAoG;AACpG,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAqB/D;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAKtD;AACD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI;;;;;EAE7C"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { Ajv } from 'ajv';
|
|
2
|
+
import addFormats from 'ajv-formats';
|
|
3
|
+
import { sealSchema } from './schema.js';
|
|
4
|
+
import { CONTEXT_URL } from './context.js';
|
|
5
|
+
const ajv = new Ajv({ allErrors: true, strict: false });
|
|
6
|
+
addFormats(ajv);
|
|
7
|
+
const validateSecured = ajv.compile(sealSchema);
|
|
8
|
+
const validateUnsigned = ajv.compile({ ...sealSchema, $id: `${sealSchema.$id}:unsigned`, required: sealSchema.required.filter(key => key !== 'proof') });
|
|
9
|
+
export function validateSealStructure(value, { requireProof = true } = {}) {
|
|
10
|
+
const validate = requireProof ? validateSecured : validateUnsigned;
|
|
11
|
+
if (!validate(value))
|
|
12
|
+
return { valid: false, errors: (validate.errors ?? []).map(e => ({ code: 'schema', path: e.instancePath, message: e.message ?? 'Invalid field' })) };
|
|
13
|
+
const seal = value;
|
|
14
|
+
const errors = [];
|
|
15
|
+
const issue = (path, message) => errors.push({ code: 'structure', path, message });
|
|
16
|
+
if (seal['@context'][0] !== 'https://www.w3.org/ns/credentials/v2' || !seal['@context'].includes(CONTEXT_URL))
|
|
17
|
+
issue('/@context', 'The owned profile context and VC2 context are required');
|
|
18
|
+
if (requireProof && !seal.proof)
|
|
19
|
+
issue('/proof', 'A secured credential is required');
|
|
20
|
+
if (seal.issuer !== seal.eventVector.who.actorDid)
|
|
21
|
+
issue('/eventVector/who/actorDid', 'Actor DID must equal issuer');
|
|
22
|
+
if (seal.credentialSubject.id !== seal.id)
|
|
23
|
+
issue('/credentialSubject/id', 'This profile identifies the attestation as the credential subject; product identifiers are separate');
|
|
24
|
+
const { parentSeals, topology } = seal.chainOfCustody;
|
|
25
|
+
const mirrored = seal.credentialSubject.predecessorCredentials;
|
|
26
|
+
if (parentSeals.length && (!Array.isArray(mirrored) || JSON.stringify([...parentSeals].sort()) !== JSON.stringify([...mirrored].sort())))
|
|
27
|
+
issue('/credentialSubject/predecessorCredentials', 'Predecessor references must match the custody parents');
|
|
28
|
+
if (parentSeals.includes(seal.id))
|
|
29
|
+
issue('/chainOfCustody/parentSeals', 'A credential cannot be its own parent');
|
|
30
|
+
if (seal.correctionOf === null && topology === 'correction')
|
|
31
|
+
issue('/correctionOf', 'Correction topology requires a target');
|
|
32
|
+
if (seal.correctionOf !== null && (topology !== 'correction' || parentSeals.length !== 1 || parentSeals[0] !== seal.correctionOf))
|
|
33
|
+
issue('/correctionOf', 'This profile requires exactly the correction target as its parent');
|
|
34
|
+
if (topology === 'linear' && parentSeals.length > 1)
|
|
35
|
+
issue('/chainOfCustody/parentSeals', 'Linear records have at most one parent');
|
|
36
|
+
if (['merge', 'transform'].includes(topology) && parentSeals.length < 2)
|
|
37
|
+
issue('/chainOfCustody/parentSeals', 'Merge records require multiple parents');
|
|
38
|
+
if (topology === 'fork' && (seal.chainOfCustody.childSeals?.length ?? 0) < 2)
|
|
39
|
+
issue('/chainOfCustody/childSeals', 'Fork records preallocate at least two child identifiers');
|
|
40
|
+
const how = seal.eventVector.how;
|
|
41
|
+
const epcis = ['ObjectEvent', 'AggregationEvent', 'TransformationEvent', 'TransactionEvent', 'AssociationEvent'];
|
|
42
|
+
if (how.eventTypeVocab === 'urn:epcis:cbv:v2' ? !epcis.includes(how.eventType) : !how.eventType.startsWith('urn:'))
|
|
43
|
+
issue('/eventVector/how/eventType', 'Event type must belong to its declared vocabulary');
|
|
44
|
+
const proofs = Array.isArray(seal.proof) ? seal.proof : seal.proof ? [seal.proof] : [];
|
|
45
|
+
for (const proof of proofs) {
|
|
46
|
+
if (proof.verificationMethod !== seal.eventVector.who.assertionMethod)
|
|
47
|
+
issue('/proof/verificationMethod', 'Proof key must match the asserting key in the event');
|
|
48
|
+
if (proof.type === 'Ed25519Signature2020' && !proof.created)
|
|
49
|
+
issue('/proof/created', 'Ed25519Signature2020 proof requires its creation time');
|
|
50
|
+
if (proof.type === 'DataIntegrityProof' && proof.cryptosuite !== 'bbs-2023')
|
|
51
|
+
issue('/proof/cryptosuite', 'Only the declared BBS suite is supported');
|
|
52
|
+
}
|
|
53
|
+
return { valid: errors.length === 0, errors };
|
|
54
|
+
}
|
|
55
|
+
export const disclosureSchema = structuredClone(sealSchema);
|
|
56
|
+
disclosureSchema.$id += ':disclosure';
|
|
57
|
+
disclosureSchema.required = ['@context', 'type', 'id', 'issuer', 'validFrom', 'sealVersion', 'sealTimestamp', 'correctionOf', 'credentialSubject', 'credentialStatus', 'eventVector', 'chainOfCustody', 'proof'];
|
|
58
|
+
disclosureSchema.properties.eventVector.properties.when.required = ['eventTime', 'timezone'];
|
|
59
|
+
disclosureSchema.properties.eventVector.properties.how.required = ['eventType', 'eventTypeVocab', 'disposition'];
|
|
60
|
+
disclosureSchema.properties.chainOfCustody.required = ['chainId'];
|
|
61
|
+
const validateDisclosure = ajv.compile(disclosureSchema);
|
|
62
|
+
export function validateSealPresentationStructure(value) {
|
|
63
|
+
if (!validateDisclosure(value))
|
|
64
|
+
return { valid: false, errors: (validateDisclosure.errors ?? []).map(e => ({ code: 'presentation_schema', path: e.instancePath, message: e.message ?? 'Invalid disclosed field' })) };
|
|
65
|
+
const credential = value;
|
|
66
|
+
const errors = [];
|
|
67
|
+
if (credential.issuer !== credential.eventVector.who.actorDid)
|
|
68
|
+
errors.push({ code: 'issuer_binding', path: '/eventVector/who/actorDid', message: 'Disclosed actor must equal issuer' });
|
|
69
|
+
if (credential.credentialSubject.id !== credential.id)
|
|
70
|
+
errors.push({ code: 'subject_binding', path: '/credentialSubject/id', message: 'Disclosed subject must identify this attestation' });
|
|
71
|
+
const proofs = Array.isArray(credential.proof) ? credential.proof : [credential.proof];
|
|
72
|
+
if (proofs.some(p => p.verificationMethod !== credential.eventVector.who.assertionMethod))
|
|
73
|
+
errors.push({ code: 'key_binding', path: '/proof/verificationMethod', message: 'Disclosed assertion key must match the proof' });
|
|
74
|
+
return { valid: errors.length === 0, errors };
|
|
75
|
+
}
|
|
76
|
+
/** Parses exact input without replacing its bytes. Rejects duplicate keys before interpretation. */
|
|
77
|
+
export function parseStrictJsonBytes(bytes) {
|
|
78
|
+
if (bytes.byteLength > 1_048_576)
|
|
79
|
+
throw new Error('Credential exceeds the 1 MiB profile limit');
|
|
80
|
+
const text = new TextDecoder('utf-8', { fatal: true }).decode(bytes);
|
|
81
|
+
const value = JSON.parse(text);
|
|
82
|
+
let index = 0;
|
|
83
|
+
const whitespace = () => { while (/\s/.test(text[index] ?? '') && index < text.length)
|
|
84
|
+
index++; };
|
|
85
|
+
const string = () => { const start = index++; while (index < text.length) {
|
|
86
|
+
if (text[index] === '\\')
|
|
87
|
+
index += 2;
|
|
88
|
+
else if (text[index++] === '"')
|
|
89
|
+
return JSON.parse(text.slice(start, index));
|
|
90
|
+
} throw new Error('Unterminated string'); };
|
|
91
|
+
const visit = (depth) => {
|
|
92
|
+
if (depth > 64)
|
|
93
|
+
throw new Error('JSON nesting exceeds the profile limit');
|
|
94
|
+
whitespace();
|
|
95
|
+
if (text[index] === '{') {
|
|
96
|
+
index++;
|
|
97
|
+
whitespace();
|
|
98
|
+
const keys = new Set();
|
|
99
|
+
while (text[index] !== '}') {
|
|
100
|
+
const key = string();
|
|
101
|
+
if (keys.has(key))
|
|
102
|
+
throw new Error(`Duplicate JSON key: ${key}`);
|
|
103
|
+
keys.add(key);
|
|
104
|
+
whitespace();
|
|
105
|
+
index++;
|
|
106
|
+
visit(depth + 1);
|
|
107
|
+
whitespace();
|
|
108
|
+
if (text[index] !== ',')
|
|
109
|
+
break;
|
|
110
|
+
index++;
|
|
111
|
+
whitespace();
|
|
112
|
+
}
|
|
113
|
+
index++;
|
|
114
|
+
}
|
|
115
|
+
else if (text[index] === '[') {
|
|
116
|
+
index++;
|
|
117
|
+
whitespace();
|
|
118
|
+
while (text[index] !== ']') {
|
|
119
|
+
visit(depth + 1);
|
|
120
|
+
whitespace();
|
|
121
|
+
if (text[index] !== ',')
|
|
122
|
+
break;
|
|
123
|
+
index++;
|
|
124
|
+
}
|
|
125
|
+
index++;
|
|
126
|
+
}
|
|
127
|
+
else if (text[index] === '"')
|
|
128
|
+
string();
|
|
129
|
+
else {
|
|
130
|
+
while (index < text.length && !/[\s,\]}]/.test(text[index]))
|
|
131
|
+
index++;
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
visit(0);
|
|
135
|
+
return value;
|
|
136
|
+
}
|
|
137
|
+
export function parseSealBytes(bytes) {
|
|
138
|
+
const value = parseStrictJsonBytes(bytes);
|
|
139
|
+
const result = validateSealStructure(value);
|
|
140
|
+
if (!result.valid)
|
|
141
|
+
throw new Error(result.errors.map(e => `${e.path}: ${e.message}`).join('; '));
|
|
142
|
+
return value;
|
|
143
|
+
}
|
|
144
|
+
export function extractSealMetadata(seal) {
|
|
145
|
+
return { id: seal.id, issuer: seal.issuer, type: 'VSC-SEAL', subjects: [...new Set(seal.eventVector.what.productIdentifiers.map(p => p.value))] };
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACvD,UAA0C,CAAC,GAAG,CAAC,CAAC;AACjD,MAAM,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAChD,MAAM,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,UAAU,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;AACzJ,MAAM,UAAU,qBAAqB,CAAC,KAAc,EAAE,EAAE,YAAY,GAAG,IAAI,EAAE,GAAG,EAAE;IAChF,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACnE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC;IAC3K,MAAM,IAAI,GAAG,KAAa,CAAC;IAC3B,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACnG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,sCAAsC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,KAAK,CAAC,WAAW,EAAE,wDAAwD,CAAC,CAAC;IAC5L,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,KAAK,CAAC,QAAQ,EAAE,kCAAkC,CAAC,CAAC;IACrF,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ;QAAE,KAAK,CAAC,2BAA2B,EAAE,6BAA6B,CAAC,CAAC;IACrH,IAAI,IAAI,CAAC,iBAAiB,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,uBAAuB,EAAE,qGAAqG,CAAC,CAAC;IACjL,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC;IAC/D,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAAE,KAAK,CAAC,2CAA2C,EAAE,uDAAuD,CAAC,CAAC;IACtP,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,KAAK,CAAC,6BAA6B,EAAE,uCAAuC,CAAC,CAAC;IACjH,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,QAAQ,KAAK,YAAY;QAAE,KAAK,CAAC,eAAe,EAAE,uCAAuC,CAAC,CAAC;IAC7H,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC;QAAE,KAAK,CAAC,eAAe,EAAE,mEAAmE,CAAC,CAAC;IAC/N,IAAI,QAAQ,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,6BAA6B,EAAE,wCAAwC,CAAC,CAAC;IACpI,IAAI,CAAC,OAAO,EAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,6BAA6B,EAAE,wCAAwC,CAAC,CAAC;IACvJ,IAAI,QAAQ,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;QAAE,KAAK,CAAC,4BAA4B,EAAE,yDAAyD,CAAC,CAAC;IAC7K,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;IACjC,MAAM,KAAK,GAAG,CAAC,aAAa,EAAC,kBAAkB,EAAC,qBAAqB,EAAC,kBAAkB,EAAC,kBAAkB,CAAC,CAAC;IAC7G,IAAI,GAAG,CAAC,cAAc,KAAK,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,KAAK,CAAC,4BAA4B,EAAE,mDAAmD,CAAC,CAAC;IAC7M,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,kBAAkB,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe;YAAE,KAAK,CAAC,2BAA2B,EAAE,qDAAqD,CAAC,CAAC;QACjK,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,KAAK,CAAC,gBAAgB,EAAE,uDAAuD,CAAC,CAAC;QAC9I,IAAI,KAAK,CAAC,IAAI,KAAK,oBAAoB,IAAI,KAAK,CAAC,WAAW,KAAK,UAAU;YAAE,KAAK,CAAC,oBAAoB,EAAE,0CAA0C,CAAC,CAAC;IACvJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAQ,eAAe,CAAC,UAAU,CAAC,CAAC;AACjE,gBAAgB,CAAC,GAAG,IAAI,aAAa,CAAC;AACtC,gBAAgB,CAAC,QAAQ,GAAG,CAAC,UAAU,EAAC,MAAM,EAAC,IAAI,EAAC,QAAQ,EAAC,WAAW,EAAC,aAAa,EAAC,eAAe,EAAC,cAAc,EAAC,mBAAmB,EAAC,kBAAkB,EAAC,aAAa,EAAC,gBAAgB,EAAC,OAAO,CAAC,CAAC;AACrM,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,WAAW,EAAC,UAAU,CAAC,CAAC;AAC5F,gBAAgB,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,WAAW,EAAC,gBAAgB,EAAC,aAAa,CAAC,CAAC;AAC/G,gBAAgB,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,CAAC;AAClE,MAAM,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AACzD,MAAM,UAAU,iCAAiC,CAAC,KAAc;IAC9D,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,kBAAkB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,yBAAyB,EAAE,CAAC,CAAC,EAAE,CAAC;IACtN,MAAM,UAAU,GAAG,KAAa,CAAC;IACjC,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,IAAI,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,2BAA2B,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,CAAC;IACxL,IAAI,UAAU,CAAC,iBAAiB,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,kDAAkD,EAAE,CAAC,CAAC;IAC5L,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAM,CAAC,CAAC;IACxF,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,KAAK,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,2BAA2B,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC,CAAC;IAC5N,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AAChD,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,oBAAoB,CAAC,KAAiB;IACpD,IAAI,KAAK,CAAC,UAAU,GAAG,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChG,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,UAAU,GAAG,GAAG,EAAE,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM;QAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAClG,MAAM,MAAM,GAAG,GAAW,EAAE,GAAG,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI;YAAE,KAAK,IAAI,CAAC,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAAC,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;IACnP,MAAM,KAAK,GAAG,CAAC,KAAa,EAAQ,EAAE;QACpC,IAAI,KAAK,GAAG,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC1E,UAAU,EAAE,CAAC;QACb,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;YACxB,KAAK,EAAE,CAAC;YAAC,UAAU,EAAE,CAAC;YAAC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YACtD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;gBAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;gBAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAAC,UAAU,EAAE,CAAC;gBAAC,KAAK,EAAE,CAAC;gBAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAAC,UAAU,EAAE,CAAC;gBAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG;oBAAE,MAAM;gBAAC,KAAK,EAAE,CAAC;gBAAC,UAAU,EAAE,CAAC;YAAC,CAAC;YACpP,KAAK,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;YAC/B,KAAK,EAAE,CAAC;YAAC,UAAU,EAAE,CAAC;YAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAAC,UAAU,EAAE,CAAC;gBAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG;oBAAE,MAAM;gBAAC,KAAK,EAAE,CAAC;YAAC,CAAC;YAAC,KAAK,EAAE,CAAC;QAC1I,CAAC;aAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG;YAAE,MAAM,EAAE,CAAC;aACpC,CAAC;YAAC,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAAE,KAAK,EAAE,CAAC;QAAC,CAAC;IAChF,CAAC,CAAC;IACF,KAAK,CAAC,CAAC,CAAC,CAAC;IACT,OAAO,KAAK,CAAC;AACf,CAAC;AACD,MAAM,UAAU,cAAc,CAAC,KAAiB;IAC9C,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjG,OAAO,KAAa,CAAC;AACvB,CAAC;AACD,MAAM,UAAU,mBAAmB,CAAC,IAAU;IAC5C,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,UAAmB,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7J,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Check, Credential, Seal, VerificationOptions, VerificationResult } from './types.js';
|
|
2
|
+
export declare function verifyTemporal(credential: Credential, evaluationTime: string): Check;
|
|
3
|
+
export declare function verifyCredentialStatus(credential: Credential, options: Pick<VerificationOptions, 'documentLoader' | 'statusPolicy'> & {
|
|
4
|
+
evaluationTime: string;
|
|
5
|
+
}): Promise<Check>;
|
|
6
|
+
export declare function verifyIssuerAuthority(seal: Seal, options: VerificationOptions & {
|
|
7
|
+
evaluationTime: string;
|
|
8
|
+
}): Promise<Check>;
|
|
9
|
+
export declare function verifySeal(options: VerificationOptions): Promise<VerificationResult>;
|
|
10
|
+
//# sourceMappingURL=verification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../src/verification.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAS,IAAI,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAK1G,wBAAgB,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,GAAG,KAAK,CAMpF;AACD,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,GAAG,cAAc,CAAC,GAAG;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CA6BvL;AACD,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,mBAAmB,GAAG;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAsBjI;AAuBD,wBAAsB,UAAU,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqH1F"}
|