@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.
Files changed (64) hide show
  1. package/LICENSE +58 -0
  2. package/README.md +107 -0
  3. package/artifacts/context-0.1.0.jsonld +127 -0
  4. package/artifacts/disclosure-0.1.0.schema.json +526 -0
  5. package/artifacts/epcis/NOTICE.md +11 -0
  6. package/artifacts/epcis/epcis-context-2.0.1.jsonld +593 -0
  7. package/artifacts/epcis/epcis-json-schema-2.0.1.json +2352 -0
  8. package/artifacts/epcis/query-schema-2.0.1.json +968 -0
  9. package/artifacts/external/NOTICE.md +3 -0
  10. package/artifacts/external/dpp-external-passport-1.context.jsonld +8 -0
  11. package/artifacts/external/dpp-external-passport-1.schema.json +158 -0
  12. package/artifacts/profile-0.1.0.json +100 -0
  13. package/artifacts/seal-0.1.0.schema.json +535 -0
  14. package/artifacts/w3c/NOTICE.md +3 -0
  15. package/artifacts/w3c/credentials-v2.jsonld +340 -0
  16. package/dist/context.d.ts +9 -0
  17. package/dist/context.d.ts.map +1 -0
  18. package/dist/context.js +50 -0
  19. package/dist/context.js.map +1 -0
  20. package/dist/crypto.d.ts +50 -0
  21. package/dist/crypto.d.ts.map +1 -0
  22. package/dist/crypto.js +141 -0
  23. package/dist/crypto.js.map +1 -0
  24. package/dist/did-web.d.ts +9 -0
  25. package/dist/did-web.d.ts.map +1 -0
  26. package/dist/did-web.js +66 -0
  27. package/dist/did-web.js.map +1 -0
  28. package/dist/epcis-source.d.ts +251 -0
  29. package/dist/epcis-source.d.ts.map +1 -0
  30. package/dist/epcis-source.js +573 -0
  31. package/dist/epcis-source.js.map +1 -0
  32. package/dist/epcis.d.ts +51 -0
  33. package/dist/epcis.d.ts.map +1 -0
  34. package/dist/epcis.js +171 -0
  35. package/dist/epcis.js.map +1 -0
  36. package/dist/exchange.d.ts +175 -0
  37. package/dist/exchange.d.ts.map +1 -0
  38. package/dist/exchange.js +491 -0
  39. package/dist/exchange.js.map +1 -0
  40. package/dist/index.d.ts +10 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +10 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/jcs.d.ts +25 -0
  45. package/dist/jcs.d.ts.map +1 -0
  46. package/dist/jcs.js +67 -0
  47. package/dist/jcs.js.map +1 -0
  48. package/dist/schema.d.ts +414 -0
  49. package/dist/schema.d.ts.map +1 -0
  50. package/dist/schema.js +537 -0
  51. package/dist/schema.js.map +1 -0
  52. package/dist/types.d.ts +159 -0
  53. package/dist/types.d.ts.map +1 -0
  54. package/dist/types.js +2 -0
  55. package/dist/types.js.map +1 -0
  56. package/dist/validation.d.ts +22 -0
  57. package/dist/validation.d.ts.map +1 -0
  58. package/dist/validation.js +147 -0
  59. package/dist/validation.js.map +1 -0
  60. package/dist/verification.d.ts +10 -0
  61. package/dist/verification.d.ts.map +1 -0
  62. package/dist/verification.js +350 -0
  63. package/dist/verification.js.map +1 -0
  64. package/package.json +68 -0
@@ -0,0 +1,350 @@
1
+ import { gunzipSync } from 'node:zlib';
2
+ import { PROFILE_ID, UPSTREAM_REVISION } from './context.js';
3
+ import { verifyCredentialProof } from './crypto.js';
4
+ import { validateSealStructure } from './validation.js';
5
+ const good = (evidence) => ({ outcome: 'verified', issues: [], evidence });
6
+ const fail = (code, message, outcome = 'invalid', path = '') => ({ outcome, issues: [{ code, path, message }] });
7
+ const outcomeOf = (checks) => checks.some(c => c.outcome === 'invalid') ? 'invalid' : checks.some(c => c.outcome === 'unsupported') ? 'unsupported' : checks.some(c => c.outcome === 'indeterminate') ? 'indeterminate' : 'verified';
8
+ export function verifyTemporal(credential, evaluationTime) {
9
+ const now = Date.parse(evaluationTime), start = Date.parse(credential.validFrom);
10
+ if (!Number.isFinite(now) || !Number.isFinite(start))
11
+ return fail('invalid_time', 'A valid evaluation time and credential validFrom are required');
12
+ if (start > now)
13
+ return fail('not_yet_valid', 'Credential is not valid at the evaluation time');
14
+ if (credential.validUntil !== undefined && (!Number.isFinite(Date.parse(credential.validUntil)) || Date.parse(credential.validUntil) <= now || Date.parse(credential.validUntil) <= start))
15
+ return fail('expired', 'Credential validity interval excludes the evaluation time');
16
+ return good();
17
+ }
18
+ export async function verifyCredentialStatus(credential, options) {
19
+ const { statusPolicy: policy, documentLoader, evaluationTime } = options;
20
+ if (!policy)
21
+ return fail('status_policy_missing', 'No authenticated status evidence policy is configured', 'indeterminate');
22
+ if (!policy.id || !Number.isFinite(policy.maxAgeMs) || policy.maxAgeMs <= 0 || policy.maxAgeMs > 7 * 24 * 60 * 60 * 1000)
23
+ return fail('status_policy_invalid', 'Status freshness must be explicitly bounded to no more than seven days');
24
+ const entry = credential.credentialStatus;
25
+ if (!entry || entry.type !== 'BitstringStatusListEntry' || !['revocation', 'suspension'].includes(entry.statusPurpose) || typeof entry.statusListIndex !== 'string' || !/^(0|[1-9][0-9]*)$/.test(entry.statusListIndex))
26
+ return fail('status_entry_invalid', 'A supported status entry with a canonical decimal index is required');
27
+ const index = Number(entry.statusListIndex);
28
+ if (!Number.isSafeInteger(index))
29
+ return fail('status_index_invalid', 'Status index is out of range');
30
+ let list;
31
+ try {
32
+ list = await policy.resolve(entry.statusListCredential);
33
+ }
34
+ catch {
35
+ return fail('status_unavailable', 'Status evidence could not be retrieved', 'indeterminate');
36
+ }
37
+ if (!list || typeof list !== 'object' || list.id !== entry.statusListCredential || !Array.isArray(list.type) || !list.type.includes('BitstringStatusListCredential'))
38
+ return fail('status_identity', 'Status list identifier or credential type does not match');
39
+ const authorised = list.issuer === credential.issuer || policy.delegatedListIssuers?.[credential.issuer]?.includes(list.issuer);
40
+ if (!authorised)
41
+ return fail('status_issuer', 'The credential issuer has not been granted this status-list issuer by verifier policy');
42
+ const proof = await verifyCredentialProof({ credential: list, documentLoader });
43
+ if (proof.outcome !== 'verified')
44
+ return { ...proof, issues: proof.issues.map(i => ({ ...i, code: 'status_proof' })) };
45
+ const temporal = verifyTemporal(list, evaluationTime);
46
+ if (temporal.outcome !== 'verified')
47
+ return temporal;
48
+ if (Date.parse(evaluationTime) - Date.parse(list.validFrom) > policy.maxAgeMs)
49
+ return fail('status_stale', 'Signed status evidence exceeds the configured freshness interval', 'indeterminate');
50
+ const subject = list.credentialSubject;
51
+ if (!subject || subject.type !== 'BitstringStatusList' || subject.statusPurpose !== entry.statusPurpose || typeof subject.encodedList !== 'string' || !/^u[A-Za-z0-9_-]+$/.test(subject.encodedList))
52
+ return fail('status_payload', 'Status list purpose, subject type or encoding is invalid');
53
+ try {
54
+ const compressed = Buffer.from(subject.encodedList.slice(1), 'base64url');
55
+ if (`u${compressed.toString('base64url')}` !== subject.encodedList || compressed.length > 1_048_576)
56
+ return fail('status_encoding', 'Status list encoding is not canonical or exceeds the profile limit');
57
+ const bytes = gunzipSync(compressed, { maxOutputLength: 1_048_576 });
58
+ if (bytes.length < 16_384 || index >= bytes.length * 8)
59
+ return fail('status_index_invalid', 'Status list is too small or index is outside the list');
60
+ // W3C Bitstring Status List indexes each byte from most significant bit to least significant bit.
61
+ if (bytes[Math.floor(index / 8)] & (1 << (7 - index % 8)))
62
+ return fail(entry.statusPurpose === 'revocation' ? 'revoked' : 'suspended', 'Credential status prevents acceptance');
63
+ }
64
+ catch {
65
+ return fail('status_encoding', 'Status list decompression failed or exceeded the profile limit');
66
+ }
67
+ return good([list.id, policy.id]);
68
+ }
69
+ export async function verifyIssuerAuthority(seal, options) {
70
+ const policy = options.authorityPolicy;
71
+ if (!policy)
72
+ return fail('authority_policy_missing', 'Issuer authority has not been independently confirmed', 'indeterminate');
73
+ if (!policy.required)
74
+ return { outcome: 'not-required', issues: [{ code: 'authority_not_required', path: '', message: policy.reason }], evidence: [policy.id] };
75
+ let credentials;
76
+ try {
77
+ credentials = await policy.resolve(seal.issuer);
78
+ }
79
+ catch {
80
+ return fail('authority_unavailable', 'Authorisation evidence is unavailable', 'indeterminate');
81
+ }
82
+ if (!Array.isArray(credentials) || credentials.length > 256)
83
+ return fail('authority_evidence_limit', 'Authorisation evidence is malformed or exceeds the profile limit', 'indeterminate');
84
+ const failures = [];
85
+ for (const credential of credentials) {
86
+ if (!credential || typeof credential !== 'object' || !policy.trustAnchors.includes(credential.issuer) || !credential.type?.includes('VscEventAuthorisation') || credential.credentialSubject?.id !== seal.issuer)
87
+ continue;
88
+ const proof = await verifyCredentialProof({ credential, documentLoader: options.documentLoader });
89
+ const temporal = verifyTemporal(credential, options.evaluationTime);
90
+ const status = await verifyCredentialStatus(credential, options);
91
+ if ([proof, temporal, status].some(c => c.outcome !== 'verified')) {
92
+ failures.push(...proof.issues, ...temporal.issues, ...status.issues);
93
+ continue;
94
+ }
95
+ const subject = credential.credentialSubject;
96
+ const events = subject.permittedEventTypes, schemes = subject.permittedProductSchemes, jurisdictions = subject.permittedJurisdictions;
97
+ if (!Array.isArray(events) || !events.includes(seal.eventVector.how.eventType))
98
+ continue;
99
+ if (schemes !== undefined && (!Array.isArray(schemes) || !seal.eventVector.what.productIdentifiers.every(p => schemes.includes(p.scheme))))
100
+ continue;
101
+ if (jurisdictions !== undefined && (!Array.isArray(jurisdictions) || !jurisdictions.includes(seal.eventVector.where.jurisdiction)))
102
+ continue;
103
+ return good([policy.id, credential.id]);
104
+ }
105
+ return { outcome: failures.some(i => ['status_unavailable', 'status_stale', 'status_policy_missing'].includes(i.code)) ? 'indeterminate' : 'invalid', issues: [{ code: 'issuer_unauthorised', path: '/issuer', message: 'No valid scoped authorisation from a configured trust anchor' }, ...failures] };
106
+ }
107
+ const states = { active: 'Q1', in_transit: 'Q2', stored: 'Q2', transshipped: 'Q2', returned: 'Q2', transformed: 'Q2', received: 'Q3', dispensed: 'Q4', destroyed: 'Q4' };
108
+ const transitions = { Q1: ['Q2'], Q2: ['Q2', 'Q3'], Q3: ['Q2', 'Q4'], Q4: [] };
109
+ function extensionHas(seal, field) { return Object.values(seal.extensions['+Dn']).some(value => typeof value[field] === 'string' && value[field].trim().length > 0); }
110
+ function stateCheck(seal, parents) {
111
+ const chain = seal.chainOfCustody, state = states[seal.eventVector.how.disposition];
112
+ if (seal.correctionOf !== null) {
113
+ const original = parents.find(p => p.id === seal.correctionOf);
114
+ if (!original || chain.chainId === original.chainOfCustody.chainId || !extensionHas(seal, 'correctionReason'))
115
+ return fail('correction_structure', 'Corrections require a separate chain and a reason');
116
+ if (chain.sequenceNumber !== 1)
117
+ return fail('correction_sequence', 'This profile starts each correction chain at sequence 1');
118
+ return good();
119
+ }
120
+ if (!parents.length)
121
+ return state === 'Q1' && chain.sequenceNumber === 1 ? good() : fail('origin_required', 'A custody chain must begin in Q1 with sequence 1');
122
+ if (chain.sequenceNumber !== Math.max(...parents.map(p => p.chainOfCustody.sequenceNumber)) + 1)
123
+ return fail('sequence', 'Sequence must be one greater than the maximum parent sequence');
124
+ if (parents.some(p => !transitions[states[p.eventVector.how.disposition]]?.includes(state)))
125
+ return fail('state_transition', 'Custody transition is prohibited');
126
+ if (parents.some(p => states[p.eventVector.how.disposition] === 'Q3') && state === 'Q2' && !extensionHas(seal, 'returnReason'))
127
+ return fail('return_reason', 'A return requires its justification');
128
+ if (['fork', 'merge', 'transform'].includes(chain.topology) && state !== 'Q2')
129
+ return fail('topology_state', 'Fork and merge operations belong to the transit state');
130
+ if (chain.topology === 'linear' && parents.some(p => p.chainOfCustody.chainId !== chain.chainId))
131
+ return fail('chain_identity', 'A linear custody chain must retain its chain identifier');
132
+ if (parents.some(p => p.chainOfCustody.topology === 'fork' && !p.chainOfCustody.childSeals?.includes(seal.id)))
133
+ return fail('fork_child', 'A fork parent must predeclare this child identifier');
134
+ if (chain.topology === 'linear' && parents.some(p => JSON.stringify(p.eventVector.what.productIdentifiers.map(v => JSON.stringify([v.scheme, v.schemeAuthority, v.value, v.serialNumber ?? null])).sort()) !== JSON.stringify(seal.eventVector.what.productIdentifiers.map(v => JSON.stringify([v.scheme, v.schemeAuthority, v.value, v.serialNumber ?? null])).sort())))
135
+ return fail('subject_continuity', 'A linear custody step must preserve the identified products');
136
+ return good();
137
+ }
138
+ export async function verifySeal(options) {
139
+ const evaluationTime = options.evaluationTime ?? new Date().toISOString();
140
+ const policyOptions = { ...options, evaluationTime };
141
+ const validation = validateSealStructure(options.credential);
142
+ for (const [name, value] of Object.entries(options.limits ?? {})) {
143
+ if (!Number.isSafeInteger(value) || value < 0 || (name !== 'maxDepth' && value === 0)) {
144
+ validation.valid = false;
145
+ validation.errors.push({ code: 'invalid_limit', path: `/limits/${name}`, message: 'Resource limits must be finite non-negative integers, and only depth may be zero' });
146
+ }
147
+ }
148
+ const structure = validation.valid ? good() : { outcome: 'invalid', issues: validation.errors };
149
+ const pending = fail('not_evaluated', 'Earlier validation did not permit this check', 'indeterminate');
150
+ const checks = { structure, proof: pending, temporal: pending, status: pending, authority: pending, chain: pending, corrections: pending };
151
+ if (validation.valid) {
152
+ const seal = options.credential;
153
+ checks.proof = await verifyCredentialProof({ credential: seal, documentLoader: options.documentLoader });
154
+ checks.temporal = verifyTemporal(seal, evaluationTime);
155
+ checks.status = await verifyCredentialStatus(seal, policyOptions);
156
+ checks.authority = await verifyIssuerAuthority(seal, policyOptions);
157
+ const maxDepth = options.limits?.maxDepth ?? 64, maxNodes = options.limits?.maxNodes ?? 1024, maxParents = options.limits?.maxParents ?? 256;
158
+ const deadline = Date.now() + (options.limits?.timeoutMs ?? 30_000);
159
+ const completed = new Map(), visited = new Set(), evidence = [];
160
+ let graphError;
161
+ const fetchNode = async (id) => {
162
+ const remaining = deadline - Date.now();
163
+ if (remaining <= 0)
164
+ throw new Error('deadline');
165
+ let timer;
166
+ try {
167
+ return await Promise.race([options.resolveSeal?.(id), new Promise((_, reject) => { timer = setTimeout(() => reject(new Error('deadline')), remaining); })]);
168
+ }
169
+ finally {
170
+ if (timer)
171
+ clearTimeout(timer);
172
+ }
173
+ };
174
+ const visit = async (node, depth, path) => {
175
+ if (graphError)
176
+ return;
177
+ if (path.has(node.id)) {
178
+ graphError = fail('cycle', 'A parent reference forms a cycle');
179
+ return;
180
+ }
181
+ if (completed.has(node.id))
182
+ return;
183
+ if (depth > maxDepth || visited.size >= maxNodes || node.chainOfCustody.parentSeals.length > maxParents || Date.now() > deadline) {
184
+ graphError = fail('resource_limit', 'Graph evaluation exceeded declared resource limits', 'indeterminate');
185
+ return;
186
+ }
187
+ visited.add(node.id);
188
+ if (node.id !== seal.id) {
189
+ const structure = validateSealStructure(node);
190
+ if (!structure.valid) {
191
+ graphError = { outcome: 'invalid', issues: structure.errors };
192
+ return;
193
+ }
194
+ for (const check of [await verifyCredentialProof({ credential: node, documentLoader: options.documentLoader }), verifyTemporal(node, evaluationTime), await verifyCredentialStatus(node, policyOptions), await verifyIssuerAuthority(node, { ...policyOptions, credential: node })]) {
195
+ if (!['verified', 'not-required'].includes(check.outcome)) {
196
+ graphError = check;
197
+ return;
198
+ }
199
+ }
200
+ }
201
+ const nextPath = new Set(path).add(node.id), parents = [];
202
+ for (const id of node.chainOfCustody.parentSeals) {
203
+ let parent;
204
+ try {
205
+ parent = completed.get(id) ?? await fetchNode(id);
206
+ }
207
+ catch {
208
+ graphError = fail('predecessor_unavailable', 'Predecessor resolution failed or timed out', 'indeterminate');
209
+ return;
210
+ }
211
+ if (!parent) {
212
+ graphError = fail('predecessor_missing', 'A referenced predecessor is unavailable', 'indeterminate');
213
+ return;
214
+ }
215
+ if (parent.id !== id) {
216
+ graphError = fail('predecessor_identity', 'Resolved predecessor has a different identifier');
217
+ return;
218
+ }
219
+ await visit(parent, depth + 1, nextPath);
220
+ if (graphError)
221
+ return;
222
+ parents.push(parent);
223
+ }
224
+ completed.set(node.id, node);
225
+ evidence.push(node.id);
226
+ };
227
+ await visit(seal, 0, new Set());
228
+ const supplied = [...(options.corrections ?? []), ...(seal.correctionOf ? [seal] : [])];
229
+ const candidates = new Map();
230
+ for (const candidate of supplied) {
231
+ const previous = candidates.get(candidate.id);
232
+ if (previous && JSON.stringify(previous) !== JSON.stringify(candidate)) {
233
+ graphError = fail('credential_collision', 'Different correction credentials use the same identifier');
234
+ break;
235
+ }
236
+ candidates.set(candidate.id, candidate);
237
+ }
238
+ const correctionTargets = new Map(), checkedCorrections = new Set();
239
+ let correctionError;
240
+ const checkCorrection = async (correction, path) => {
241
+ if (checkedCorrections.has(correction.id) || correctionError)
242
+ return;
243
+ if (path.has(correction.id)) {
244
+ correctionError = fail('correction_cycle', 'Correction references contain a cycle');
245
+ return;
246
+ }
247
+ if (path.size > maxDepth || checkedCorrections.size >= maxNodes) {
248
+ correctionError = fail('resource_limit', 'Correction traversal exceeds profile limits', 'indeterminate');
249
+ return;
250
+ }
251
+ const structure = validateSealStructure(correction);
252
+ if (!structure.valid || !correction.correctionOf) {
253
+ correctionError = fail('correction_structure', 'A supplied correction is structurally invalid');
254
+ return;
255
+ }
256
+ let target = candidates.get(correction.correctionOf) ?? completed.get(correction.correctionOf);
257
+ if (!target) {
258
+ try {
259
+ target = await fetchNode(correction.correctionOf);
260
+ }
261
+ catch { /* Report missing evidence below. */ }
262
+ }
263
+ if (!target || target.id !== correction.correctionOf) {
264
+ correctionError = fail('correction_target_missing', 'Correction target could not be resolved', 'indeterminate');
265
+ return;
266
+ }
267
+ if (target.correctionOf)
268
+ await checkCorrection(target, new Set(path).add(correction.id));
269
+ else if (!completed.has(target.id)) {
270
+ await visit(target, 0, new Set());
271
+ if (graphError)
272
+ correctionError = graphError;
273
+ }
274
+ if (correctionError)
275
+ return;
276
+ for (const check of [await verifyCredentialProof({ credential: correction, documentLoader: options.documentLoader }), verifyTemporal(correction, evaluationTime), await verifyCredentialStatus(correction, policyOptions), await verifyIssuerAuthority(correction, { ...policyOptions, credential: correction }), stateCheck(correction, [target])]) {
277
+ if (!['verified', 'not-required'].includes(check.outcome)) {
278
+ correctionError = check;
279
+ return;
280
+ }
281
+ }
282
+ if (target.issuer !== correction.issuer) {
283
+ const policy = options.correctionPolicy;
284
+ if (!policy) {
285
+ correctionError = fail('correction_authority_missing', 'Cross-issuer correction requires signed delegated authority', 'indeterminate');
286
+ return;
287
+ }
288
+ let grants;
289
+ try {
290
+ grants = await policy.resolve(target.issuer, correction.issuer);
291
+ }
292
+ catch {
293
+ correctionError = fail('correction_authority_unavailable', 'Delegated correction authority is unavailable', 'indeterminate');
294
+ return;
295
+ }
296
+ if (!Array.isArray(grants) || grants.length > 256) {
297
+ correctionError = fail('correction_evidence_limit', 'Delegation evidence exceeds the profile limit', 'indeterminate');
298
+ return;
299
+ }
300
+ let authorised = false;
301
+ for (const grant of grants) {
302
+ if (!grant || typeof grant !== 'object')
303
+ continue;
304
+ const subject = grant.credentialSubject;
305
+ if (grant.issuer !== target.issuer || !grant.type?.includes('VscCorrectionAuthorisation') || subject?.id !== correction.issuer || subject.originalIssuer !== target.issuer || !Array.isArray(subject.permittedRecordIds) || !subject.permittedRecordIds.includes(target.id) || !Array.isArray(subject.permittedActions) || !subject.permittedActions.includes('correct'))
306
+ continue;
307
+ const grantChecks = [await verifyCredentialProof({ credential: grant, documentLoader: options.documentLoader }), verifyTemporal(grant, evaluationTime), await verifyCredentialStatus(grant, policyOptions)];
308
+ if (grantChecks.every(c => c.outcome === 'verified')) {
309
+ authorised = true;
310
+ break;
311
+ }
312
+ }
313
+ if (!authorised) {
314
+ correctionError = fail('correction_unauthorised', 'No valid scoped delegation authorises this correction');
315
+ return;
316
+ }
317
+ }
318
+ checkedCorrections.add(correction.id);
319
+ correctionTargets.set(correction.correctionOf, [...(correctionTargets.get(correction.correctionOf) ?? []), correction]);
320
+ };
321
+ for (const correction of candidates.values())
322
+ await checkCorrection(correction, new Set());
323
+ if (!correctionError && [...correctionTargets.values()].some(values => new Set(values.map(c => c.id)).size > 1))
324
+ correctionError = fail('correction_conflict', 'Competing authorised correction branches require an explicit resolution', 'indeterminate');
325
+ const effective = (node) => {
326
+ let corrected = node;
327
+ const seen = new Set();
328
+ while (!seen.has(corrected.id) && correctionTargets.get(corrected.id)?.length === 1) {
329
+ seen.add(corrected.id);
330
+ corrected = correctionTargets.get(corrected.id)[0];
331
+ }
332
+ // This is an in-memory state projection, never a newly signed credential.
333
+ return { ...node, eventVector: corrected.eventVector };
334
+ };
335
+ if (!graphError && !correctionError) {
336
+ for (const node of completed.values()) {
337
+ const parents = node.chainOfCustody.parentSeals.map(id => completed.get(id)).filter(Boolean);
338
+ const state = stateCheck(effective(node), parents.map(effective));
339
+ if (state.outcome !== 'verified') {
340
+ graphError = state;
341
+ break;
342
+ }
343
+ }
344
+ }
345
+ checks.chain = graphError ?? (correctionError ? fail('chain_correction_unresolved', 'Effective custody state cannot be established until corrections resolve', 'indeterminate') : good(evidence));
346
+ checks.corrections = correctionError ?? good([...checkedCorrections]);
347
+ }
348
+ return { profileId: PROFILE_ID, upstreamRevision: UPSTREAM_REVISION, evaluatedAt: evaluationTime, outcome: outcomeOf(Object.values(checks)), checks, issues: Object.values(checks).flatMap(c => c.issues), evidenceScope: 'provided-evidence' };
349
+ }
350
+ //# sourceMappingURL=verification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification.js","sourceRoot":"","sources":["../src/verification.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "@bsv/vsc",
3
+ "version": "0.2.0-beta.1",
4
+ "description": "Experimental prerelease: Versioned VSC draft compatibility profile with its proof suites and verification, the EPCIS source helpers with pinned EPCIS 2.0.1 artefacts, and the external ecdsa-rdfc-2019 credential verifier",
5
+ "license": "SEE LICENSE IN LICENSE",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "./exchange": {
15
+ "types": "./dist/exchange.d.ts",
16
+ "default": "./dist/exchange.js"
17
+ },
18
+ "./epcis-source": {
19
+ "types": "./dist/epcis-source.d.ts",
20
+ "default": "./dist/epcis-source.js"
21
+ },
22
+ "./artifacts/*": "./artifacts/*"
23
+ },
24
+ "files": [
25
+ "dist",
26
+ "artifacts",
27
+ "README.md"
28
+ ],
29
+ "scripts": {
30
+ "build": "tsc -p tsconfig.json",
31
+ "typecheck": "tsc -p tsconfig.json --noEmit",
32
+ "test": "vitest run"
33
+ },
34
+ "dependencies": {
35
+ "@digitalbazaar/bbs-2023-cryptosuite": "2.0.1",
36
+ "@digitalbazaar/bls12-381-multikey": "2.2.0",
37
+ "@digitalbazaar/credentials-context": "3.2.0",
38
+ "@digitalbazaar/data-integrity": "2.5.0",
39
+ "@digitalbazaar/data-integrity-context": "2.0.1",
40
+ "@digitalbazaar/ecdsa-multikey": "1.8.0",
41
+ "@digitalbazaar/ecdsa-rdfc-2019-cryptosuite": "1.3.0",
42
+ "@digitalbazaar/ed25519-signature-2020": "5.4.0",
43
+ "@digitalbazaar/ed25519-verification-key-2020": "4.2.0",
44
+ "@digitalbazaar/multikey-context": "2.0.1",
45
+ "ajv": "8.20.0",
46
+ "ajv-formats": "3.0.1",
47
+ "did-context": "3.1.1",
48
+ "jsonld-signatures": "11.6.0"
49
+ },
50
+ "devDependencies": {
51
+ "@types/node": "^22.0.0",
52
+ "typescript": "^5.9.3",
53
+ "vitest": "4.1.11"
54
+ },
55
+ "repository": {
56
+ "type": "git",
57
+ "url": "git+https://github.com/bsv-blockchain/dpp.git",
58
+ "directory": "packages/vsc"
59
+ },
60
+ "engines": {
61
+ "node": ">=22"
62
+ },
63
+ "publishConfig": {
64
+ "access": "public",
65
+ "registry": "https://registry.npmjs.org/",
66
+ "tag": "next"
67
+ }
68
+ }