@openvtc/trust-tasks 0.19.3 → 0.19.4

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 (75) hide show
  1. package/CHANGELOG.md +161 -0
  2. package/dist/_shared/components.d.ts +298 -0
  3. package/dist/_shared/components.d.ts.map +1 -1
  4. package/dist/index.d.ts +13 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +13 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/vetting/_shared/0.1/identity-vetting.d.ts +11 -0
  9. package/dist/vetting/_shared/0.1/identity-vetting.d.ts.map +1 -0
  10. package/dist/vetting/_shared/0.1/identity-vetting.js +6 -0
  11. package/dist/vetting/_shared/0.1/identity-vetting.js.map +1 -0
  12. package/dist/vetting/_shared/0.1/vetting-card.d.ts +16 -0
  13. package/dist/vetting/_shared/0.1/vetting-card.d.ts.map +1 -0
  14. package/dist/vetting/_shared/0.1/vetting-card.js +6 -0
  15. package/dist/vetting/_shared/0.1/vetting-card.js.map +1 -0
  16. package/dist/vetting/_shared/0.1/vetting.d.ts +16 -0
  17. package/dist/vetting/_shared/0.1/vetting.d.ts.map +1 -0
  18. package/dist/vetting/_shared/0.1/vetting.js +6 -0
  19. package/dist/vetting/_shared/0.1/vetting.js.map +1 -0
  20. package/dist/vetting/decline/0.1/payload.d.ts +138 -0
  21. package/dist/vetting/decline/0.1/payload.d.ts.map +1 -0
  22. package/dist/vetting/decline/0.1/payload.js +81 -0
  23. package/dist/vetting/decline/0.1/payload.js.map +1 -0
  24. package/dist/vetting/request/0.1/payload.d.ts +1188 -0
  25. package/dist/vetting/request/0.1/payload.d.ts.map +1 -0
  26. package/dist/vetting/request/0.1/payload.js +596 -0
  27. package/dist/vetting/request/0.1/payload.js.map +1 -0
  28. package/dist/vetting/session/0.1/payload.d.ts +978 -0
  29. package/dist/vetting/session/0.1/payload.d.ts.map +1 -0
  30. package/dist/vetting/session/0.1/payload.js +570 -0
  31. package/dist/vetting/session/0.1/payload.js.map +1 -0
  32. package/dist/vtc/_shared/0.1/vetter-profile.d.ts +16 -0
  33. package/dist/vtc/_shared/0.1/vetter-profile.d.ts.map +1 -0
  34. package/dist/vtc/_shared/0.1/vetter-profile.js +6 -0
  35. package/dist/vtc/_shared/0.1/vetter-profile.js.map +1 -0
  36. package/dist/vtc/join-requests/manifest/0.2/payload.d.ts +1294 -0
  37. package/dist/vtc/join-requests/manifest/0.2/payload.d.ts.map +1 -0
  38. package/dist/vtc/join-requests/manifest/0.2/payload.js +667 -0
  39. package/dist/vtc/join-requests/manifest/0.2/payload.js.map +1 -0
  40. package/dist/vtc/vetting/revoke-statement/0.1/payload.d.ts +299 -0
  41. package/dist/vtc/vetting/revoke-statement/0.1/payload.d.ts.map +1 -0
  42. package/dist/vtc/vetting/revoke-statement/0.1/payload.js +172 -0
  43. package/dist/vtc/vetting/revoke-statement/0.1/payload.js.map +1 -0
  44. package/dist/vtc/vetting/vetters/grant/0.1/payload.d.ts +337 -0
  45. package/dist/vtc/vetting/vetters/grant/0.1/payload.d.ts.map +1 -0
  46. package/dist/vtc/vetting/vetters/grant/0.1/payload.js +183 -0
  47. package/dist/vtc/vetting/vetters/grant/0.1/payload.js.map +1 -0
  48. package/dist/vtc/vetting/vetters/list/0.1/payload.d.ts +1257 -0
  49. package/dist/vtc/vetting/vetters/list/0.1/payload.d.ts.map +1 -0
  50. package/dist/vtc/vetting/vetters/list/0.1/payload.js +597 -0
  51. package/dist/vtc/vetting/vetters/list/0.1/payload.js.map +1 -0
  52. package/dist/vtc/vetting/vetters/profile/0.1/payload.d.ts +970 -0
  53. package/dist/vtc/vetting/vetters/profile/0.1/payload.d.ts.map +1 -0
  54. package/dist/vtc/vetting/vetters/profile/0.1/payload.js +463 -0
  55. package/dist/vtc/vetting/vetters/profile/0.1/payload.js.map +1 -0
  56. package/dist/vtc/vetting/vetters/resend/0.1/payload.d.ts +240 -0
  57. package/dist/vtc/vetting/vetters/resend/0.1/payload.d.ts.map +1 -0
  58. package/dist/vtc/vetting/vetters/resend/0.1/payload.js +137 -0
  59. package/dist/vtc/vetting/vetters/resend/0.1/payload.js.map +1 -0
  60. package/package.json +1 -1
  61. package/src/_shared/components.ts +318 -0
  62. package/src/index.ts +13 -0
  63. package/src/vetting/_shared/0.1/identity-vetting.ts +11 -0
  64. package/src/vetting/_shared/0.1/vetting-card.ts +17 -0
  65. package/src/vetting/_shared/0.1/vetting.ts +17 -0
  66. package/src/vetting/decline/0.1/payload.ts +111 -0
  67. package/src/vetting/request/0.1/payload.ts +799 -0
  68. package/src/vetting/session/0.1/payload.ts +629 -0
  69. package/src/vtc/_shared/0.1/vetter-profile.ts +17 -0
  70. package/src/vtc/join-requests/manifest/0.2/payload.ts +815 -0
  71. package/src/vtc/vetting/revoke-statement/0.1/payload.ts +218 -0
  72. package/src/vtc/vetting/vetters/grant/0.1/payload.ts +237 -0
  73. package/src/vtc/vetting/vetters/list/0.1/payload.ts +816 -0
  74. package/src/vtc/vetting/vetters/profile/0.1/payload.ts +647 -0
  75. package/src/vtc/vetting/vetters/resend/0.1/payload.ts +174 -0
package/CHANGELOG.md CHANGED
@@ -11,6 +11,167 @@ The package versions over **its own API** — what a consumer compiles against
11
11
  not over `SPEC.md`. Below 1.0 a breaking change bumps the leading non-zero
12
12
  component.
13
13
 
14
+ ## 0.19.4 — 2026-09-11
15
+
16
+
17
+ ### Added
18
+
19
+ - **vtc/vetting/vetters**: Vetter profile, listing and grant resend; manifest branding; ticket URI (#453)
20
+
21
+ Applicants need to find vetters without the community publishing its vetters
22
+ by fiat. A grant still lists nobody; a vetter opts in.
23
+
24
+ vtc/vetting/vetters/profile/0.1 — vetter -> community. Replaces the sender's
25
+ whole profile: `listed` (required), `displayName?` (1-128), `languages` (0-16
26
+ BCP 47 tags, 2-35), `location?` ({ country alpha-2 upper case, region?,
27
+ city? }), `methods` (1-3 VettingMethod), `acceptsDocumentation` (0-16
28
+ VettingDocumentation), `availability?` (1-500), `contactHint?` (1-300),
29
+ `events` (0-32 of { name 1-200, startDate, endDate, location?, https url? }),
30
+ `ext?`. Returns `{ listed, updatedAt }`. Refuses a sender without a live vetter
31
+ grant, or not an active member, with `vtc/vetting/vetters/profile:notEligible`;
32
+ an event ending before it starts or more than 31 days after it with
33
+ `malformedRequest`. Idempotent replace; deleted when the grant is revoked or
34
+ the member leaves. issuedAt REQUIRED, proof RECOMMENDED.
35
+
36
+ vtc/vetting/vetters/list/0.1 — any identified applicant or member ->
37
+ community, read-only. Filters `language` (tag or `-` prefix), `country`,
38
+ `region`, `city`, `method`, `eventFrom`/`eventTo`/`eventName`, `limit`
39
+ (1-100, default 50), `cursor` (<= 512), `ext`. Returns `vetters`
40
+ (ListedVetter: vetterDid, displayName?, languages, location?, methods,
41
+ acceptsDocumentation, availability?, contactHint?, events with endDate >= today
42
+ UTC, grantValidUntil, updatedAt) and `nextCursor?`. Only active members with a
43
+ live grant and `listed: true`. States why the family has no `show`: a lookup by
44
+ DID would reveal unlisted vetters.
45
+
46
+ vtc/vetting/vetters/resend/0.1 — vetter -> community. Empty payload; the
47
+ community re-delivers the sender's live vetter role credential, unchanged, over
48
+ credential-exchange/issue and returns `{ credentialId, validUntil }`.
49
+ `vtc/vetting/vetters/resend:notGranted` when there is no live grant.
50
+
51
+ The shared profile pieces live in vtc/_shared/0.1/vetter-profile.
52
+
53
+ vtc/join-requests/manifest/0.2 — the response gains optional `branding`
54
+ (CommunityBranding: displayName 1-128, accentColor #rrggbb, https logoUrl
55
+ <= 2048, ext). Additive, outside every criterion, so no requirementsDigest
56
+ covers it. Example added.
57
+
58
+ vetting/request/0.1 — informative "Ticket URI" section for the QR payload:
59
+ vetting-ticket:?v=1&community=..&vetter=..&ticket=..&secret=.. or ..&code=..
60
+
61
+ vtc/vetting/vetters/grant/0.1 — links profile, list and resend; revoking a
62
+ grant deletes the profile; the consent text now says a grant alone lists
63
+ nobody. The identity-vetting ceremony relates vtc/vetting/vetters/list.
64
+
65
+ Rust and TS bindings regenerated.
66
+
67
+ - **vtc/vetting/vetters**: Grant the vetter role, and pin the eligibility presentation (#452)
68
+
69
+ Vetter eligibility is a community-issued role credential, and this adds the
70
+ task that issues it.
71
+
72
+ vtc/vetting/vetters/grant/0.1 — community administrator -> community, proof
73
+ REQUIRED. `{ memberDid, validitySeconds? (86400..=63072000) }` returns
74
+ `{ endorsementId, credentialId, validFrom, validUntil }`. The community issues
75
+ the member an EndorsementCredential whose endorsement is
76
+ `{ type: CommunityRole, role: vetter, communityDid }`, with a revocation
77
+ credentialStatus entry and 365 days' validity by default, and delivers it
78
+ over credential-exchange/issue. A member with a live grant gets that grant
79
+ back. Revocation is vtc/endorsements/revoke; removing a member revokes their
80
+ grants. Administrator capability only; `notMember` for a non-member.
81
+
82
+ vetting/request/0.1 — `eligibilityVp` is now a documented, still-optional
83
+ presentation: W3C v2 `@context` first, `VerifiablePresentation` type,
84
+ `holder` the vetter, `nonce` the request document id, `domain` the
85
+ applicant's joinDid, an `authentication` Data Integrity proof, and the
86
+ community's CommunityRole credential for the manifest's
87
+ eligibleVetters.role among its credentials. The applicant's check is
88
+ advisory; the community is authoritative.
89
+
90
+ vtc/join-requests/manifest/0.2 — `eligibleVetters.role` names the role in a
91
+ community-issued CommunityRole endorsement credential.
92
+
93
+ - **vtc/vetting**: Withdraw a vetting statement, and the identity-vetting ceremony (#451)
94
+
95
+ * feat(vetting): peer identity-vetting request, session and decline
96
+
97
+ A community that admits people on peer identity vetting needs its members
98
+ to check applicants before it decides: in person or on a call, against
99
+ whatever documentation each vetter accepts, ending in a signed statement
100
+ the applicant later submits. That exchange runs between two people's
101
+ agents, with no community service party to it, so it gets its own
102
+ top-level family.
103
+
104
+ - vetting/request/0.1 — applicant -> vetter. Carries the community, the
105
+ requirementsDigest being gathered for, the join DID (equal to the
106
+ issuer), and a ticket or an introduction. The response accepts with a
107
+ requestId and a presentation of the vetter's membership and role.
108
+ Refusals are trust-task-error codes; a wrong short ticket code gets no
109
+ reply at all, so guessing learns nothing.
110
+ - vetting/session/0.1 — vetter -> applicant, opened while the two are
111
+ together. Issues the challenge and required claims; the response is the
112
+ signed Vetting Card. The session document's id is the statement's
113
+ taskContext and its task digest binds it, mirroring witness/session. The
114
+ spoken match code is derived from that id so both agents compute it.
115
+ - vetting/decline/0.1 — vetter -> applicant, reason optional, never sent to
116
+ the community.
117
+
118
+ - **vetting**: Peer identity-vetting request, session and decline (#450)
119
+
120
+ * feat(vetting): peer identity-vetting request, session and decline
121
+
122
+ A community that admits people on peer identity vetting needs its members
123
+ to check applicants before it decides: in person or on a call, against
124
+ whatever documentation each vetter accepts, ending in a signed statement
125
+ the applicant later submits. That exchange runs between two people's
126
+ agents, with no community service party to it, so it gets its own
127
+ top-level family.
128
+
129
+ - vetting/request/0.1 — applicant -> vetter. Carries the community, the
130
+ requirementsDigest being gathered for, the join DID (equal to the
131
+ issuer), and a ticket or an introduction. The response accepts with a
132
+ requestId and a presentation of the vetter's membership and role.
133
+ Refusals are trust-task-error codes; a wrong short ticket code gets no
134
+ reply at all, so guessing learns nothing.
135
+ - vetting/session/0.1 — vetter -> applicant, opened while the two are
136
+ together. Issues the challenge and required claims; the response is the
137
+ signed Vetting Card. The session document's id is the statement's
138
+ taskContext and its task digest binds it, mirroring witness/session. The
139
+ spoken match code is derived from that id so both agents compute it.
140
+ - vetting/decline/0.1 — vetter -> applicant, reason optional, never sent to
141
+ the community.
142
+
143
+
144
+
145
+ ### Specifications
146
+
147
+ - **vtc/join-requests/manifest**: Advertise identity-vetting requirements per criterion (#449)
148
+
149
+ * spec(vtc/join-requests/manifest): advertise identity-vetting requirements per criterion
150
+
151
+ A community that admits people on peer identity vetting has to say what it
152
+ needs before anyone applies: how many statements, from distinct eligible
153
+ vetters, by which methods, with what independence. A presentation-definition
154
+ can ask for "credentials of type EndorsementCredential"; it cannot count
155
+ issuers, cap relationships, or require that an issuer holds a role.
156
+
157
+ 0.2 adds an optional `vetting` object beside each criterion's
158
+ presentation-definition, and a `requirementsDigest` (JCS -> multihash ->
159
+ multibase over the criterion) that names one version of it, so an applicant
160
+ who started under older requirements can be evaluated under them within the
161
+ community's `requirementsGrace`.
162
+
163
+ Every number is community policy. The schema carries no defaults: an absent
164
+ member means no constraint of that kind. `acceptedDocumentClasses` is
165
+ optional and absent by default, because each vetter decides what
166
+ documentation they accept.
167
+
168
+ The shared vocabulary (method, document class, accepted documentation,
169
+ declared relationship) lands in `vetting/_shared/0.1`, so the manifest and
170
+ the vetting/* peer tasks that follow compare values rather than translate
171
+ them. Claim types reuse persona's `ClaimType` rather than redefining it.
172
+
173
+ 0.1 is untouched.
174
+
14
175
  ## 0.19.3 — 2026-09-10
15
176
 
16
177
 
@@ -31,6 +31,10 @@ export type AnchorCadence = "never" | "renewal" | "manual";
31
31
  * The kind of privileged change recorded in the audit log.
32
32
  */
33
33
  export type AuditAction = "setAcl" | "accessListAdd" | "accessListRemove" | "accessListClear" | "accountAdd" | "accountRemove" | "accountChangeType" | "accountChangeQueueLimits" | "adminAdd" | "adminStrip";
34
+ /**
35
+ * A calendar date, `YYYY-MM-DD` (RFC 3339 full-date), with no time or zone. Compared as a UTC date.
36
+ */
37
+ export type CalendarDate = string;
34
38
  /**
35
39
  * Fine-grained capability flag scoped to the device's allowed contexts. See SPEC.md for the full semantics of each. Capability values are additive: a consumer MUST ignore a value it does not recognise rather than reject the binding, and MUST NOT treat an unrecognised value as conferring anything.
36
40
  */
@@ -55,6 +59,10 @@ export type ConsumerKind_DeviceV0_1 = Companion_DeviceV0_1 | Service_DeviceV0_1;
55
59
  * Discriminator: is this consumer a user-driven Companion or a headless Service?
56
60
  */
57
61
  export type ConsumerKind_DeviceV0_2 = Companion_DeviceV0_2 | Service_DeviceV0_2;
62
+ /**
63
+ * An ISO 3166-1 alpha-2 country code, upper case, e.g. `DE`.
64
+ */
65
+ export type CountryCode = string;
58
66
  /**
59
67
  * Stable identifier for an issued credential — the handle for revocation and audit. Opaque to the holder: it MUST be echoed verbatim when revoking and MUST NOT be parsed.
60
68
  */
@@ -158,10 +166,18 @@ export type KeyType = "ed25519" | "x25519" | "p256";
158
166
  * The interaction kind: a 1:1 direct message, a multi-party group, or a broadcast channel.
159
167
  */
160
168
  export type Kind = "dm" | "group" | "channel";
169
+ /**
170
+ * A BCP 47 language tag, e.g. `en`, `de-AT`. Compared case-insensitively.
171
+ */
172
+ export type LanguageTag = string;
161
173
  /**
162
174
  * Scopes one application's records within a context, so several tools can share a context without colliding — `openvtc`, `cnm`, an agent runtime. The maintainer MUST NOT interpret the value; it is an opaque partition name. Namespaces are first-come and unreserved, so an application SHOULD pick a stable, specific one: a future per-namespace ACL would grant on this exact string, which makes renaming a namespace a migration rather than an edit.
163
175
  */
164
176
  export type Namespace = string;
177
+ /**
178
+ * A region or city name as the vetter writes it. Compared case-insensitively and otherwise exactly.
179
+ */
180
+ export type PlaceName = string;
165
181
  /**
166
182
  * One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.
167
183
  *
@@ -400,6 +416,175 @@ export type Version_PersonaV0_1 = number;
400
416
  * A value of the namespace's monotonic write counter (see this schema's description). Server-assigned; a producer never chooses one.
401
417
  */
402
418
  export type Version_VtaV0_1 = number;
419
+ /**
420
+ * What documentation the vetter relies on, in the same tokens as vetting/request's `acceptsDocumentation` — `passport`, `nationalId`, `driverLicence`, `none`, or another lowerCamelCase class. The vetter's own choice; empty says nothing either way.
421
+ *
422
+ * @maxItems 16
423
+ */
424
+ export type VetterAcceptsDocumentation = [] | [VettingDocumentation] | [VettingDocumentation, VettingDocumentation] | [VettingDocumentation, VettingDocumentation, VettingDocumentation] | [VettingDocumentation, VettingDocumentation, VettingDocumentation, VettingDocumentation] | [VettingDocumentation, VettingDocumentation, VettingDocumentation, VettingDocumentation, VettingDocumentation] | [
425
+ VettingDocumentation,
426
+ VettingDocumentation,
427
+ VettingDocumentation,
428
+ VettingDocumentation,
429
+ VettingDocumentation,
430
+ VettingDocumentation
431
+ ] | [
432
+ VettingDocumentation,
433
+ VettingDocumentation,
434
+ VettingDocumentation,
435
+ VettingDocumentation,
436
+ VettingDocumentation,
437
+ VettingDocumentation,
438
+ VettingDocumentation
439
+ ] | [
440
+ VettingDocumentation,
441
+ VettingDocumentation,
442
+ VettingDocumentation,
443
+ VettingDocumentation,
444
+ VettingDocumentation,
445
+ VettingDocumentation,
446
+ VettingDocumentation,
447
+ VettingDocumentation
448
+ ] | [
449
+ VettingDocumentation,
450
+ VettingDocumentation,
451
+ VettingDocumentation,
452
+ VettingDocumentation,
453
+ VettingDocumentation,
454
+ VettingDocumentation,
455
+ VettingDocumentation,
456
+ VettingDocumentation,
457
+ VettingDocumentation
458
+ ] | [
459
+ VettingDocumentation,
460
+ VettingDocumentation,
461
+ VettingDocumentation,
462
+ VettingDocumentation,
463
+ VettingDocumentation,
464
+ VettingDocumentation,
465
+ VettingDocumentation,
466
+ VettingDocumentation,
467
+ VettingDocumentation,
468
+ VettingDocumentation
469
+ ] | [
470
+ VettingDocumentation,
471
+ VettingDocumentation,
472
+ VettingDocumentation,
473
+ VettingDocumentation,
474
+ VettingDocumentation,
475
+ VettingDocumentation,
476
+ VettingDocumentation,
477
+ VettingDocumentation,
478
+ VettingDocumentation,
479
+ VettingDocumentation,
480
+ VettingDocumentation
481
+ ] | [
482
+ VettingDocumentation,
483
+ VettingDocumentation,
484
+ VettingDocumentation,
485
+ VettingDocumentation,
486
+ VettingDocumentation,
487
+ VettingDocumentation,
488
+ VettingDocumentation,
489
+ VettingDocumentation,
490
+ VettingDocumentation,
491
+ VettingDocumentation,
492
+ VettingDocumentation,
493
+ VettingDocumentation
494
+ ] | [
495
+ VettingDocumentation,
496
+ VettingDocumentation,
497
+ VettingDocumentation,
498
+ VettingDocumentation,
499
+ VettingDocumentation,
500
+ VettingDocumentation,
501
+ VettingDocumentation,
502
+ VettingDocumentation,
503
+ VettingDocumentation,
504
+ VettingDocumentation,
505
+ VettingDocumentation,
506
+ VettingDocumentation,
507
+ VettingDocumentation
508
+ ] | [
509
+ VettingDocumentation,
510
+ VettingDocumentation,
511
+ VettingDocumentation,
512
+ VettingDocumentation,
513
+ VettingDocumentation,
514
+ VettingDocumentation,
515
+ VettingDocumentation,
516
+ VettingDocumentation,
517
+ VettingDocumentation,
518
+ VettingDocumentation,
519
+ VettingDocumentation,
520
+ VettingDocumentation,
521
+ VettingDocumentation,
522
+ VettingDocumentation
523
+ ] | [
524
+ VettingDocumentation,
525
+ VettingDocumentation,
526
+ VettingDocumentation,
527
+ VettingDocumentation,
528
+ VettingDocumentation,
529
+ VettingDocumentation,
530
+ VettingDocumentation,
531
+ VettingDocumentation,
532
+ VettingDocumentation,
533
+ VettingDocumentation,
534
+ VettingDocumentation,
535
+ VettingDocumentation,
536
+ VettingDocumentation,
537
+ VettingDocumentation,
538
+ VettingDocumentation
539
+ ] | [
540
+ VettingDocumentation,
541
+ VettingDocumentation,
542
+ VettingDocumentation,
543
+ VettingDocumentation,
544
+ VettingDocumentation,
545
+ VettingDocumentation,
546
+ VettingDocumentation,
547
+ VettingDocumentation,
548
+ VettingDocumentation,
549
+ VettingDocumentation,
550
+ VettingDocumentation,
551
+ VettingDocumentation,
552
+ VettingDocumentation,
553
+ VettingDocumentation,
554
+ VettingDocumentation,
555
+ VettingDocumentation
556
+ ];
557
+ /**
558
+ * Vetter-authored free text on when they are available to vet. Attributed to the vetter.
559
+ */
560
+ export type VetterAvailability = string;
561
+ /**
562
+ * Vetter-authored free text on how to obtain a ticket from them, e.g. `Find me at the OpenVTC booth`. A hint, not an address a request can be sent to: vetting/request still needs a ticket or an introduction the vetter accepts.
563
+ */
564
+ export type VetterContactHint = string;
565
+ /**
566
+ * The name the vetter chooses to be listed under. Self-asserted and unverified: it is not the name on any document, and a client MUST attribute it to the vetter.
567
+ */
568
+ export type VetterDisplayName = string;
569
+ /**
570
+ * The methods the vetter offers, from `inPerson`, `video`, `priorAcquaintance`.
571
+ *
572
+ * @minItems 1
573
+ * @maxItems 3
574
+ */
575
+ export type VetterMethods = [VettingMethod] | [VettingMethod, VettingMethod] | [VettingMethod, VettingMethod, VettingMethod];
576
+ /**
577
+ * A class of documentation, named in lowerCamelCase. Open rather than enumerated, because what documentation a vetter accepts is each vetter's own choice. Well-known values: `passport`, `nationalId`, `driverLicence`, and `none` — the vetter will attest without a document, which is the `priorAcquaintance` case. Only the class ever travels — never a document number, an image, an issuing authority or an expiry date. `none` states a policy (what a vetter accepts); a record of what was relied on expresses 'no document' as an empty list instead.
578
+ */
579
+ export type VettingDocumentation = string;
580
+ /**
581
+ * How the vetter established that the person they checked is the person controlling the applicant's DID. `inPerson` — both people were physically together. `video` — a live, two-way video call. `priorAcquaintance` — the vetter has known or worked with this person over a period, and attests from that knowledge rather than from a document. A method is a description of what happened, not an assurance level: which methods count, and how many of each, is community policy.
582
+ */
583
+ export type VettingMethod = "inPerson" | "video" | "priorAcquaintance";
584
+ /**
585
+ * The vetter's own declaration of how they relate to the applicant. Declared, not verified: it exists so community policy can cap how much evidence comes from people close to the applicant, and a false declaration is the vetter's attributable act.
586
+ */
587
+ export type VettingRelationship = "none" | "communityColleague" | "sameEmployer" | "family" | "otherPersonal";
403
588
  /**
404
589
  * A Verifiable Identifier (SPEC §4.8). For a mediator-served account this is the account's controlling DID, carried verbatim and compared by exact string equality. For privacy — and because some mediators key accounts by a one-way hash and never hold the full DID — a stable hash of the DID (e.g. its SHA-256 digest) is an equally valid value here: producer and consumer simply agree on the same opaque identifier and compare by exact string equality. The field carries whichever form the issuing mediator uses.
405
590
  */
@@ -1293,6 +1478,23 @@ export interface CredentialReference {
1293
1478
  */
1294
1479
  expiresAt?: string | null;
1295
1480
  }
1481
+ /**
1482
+ * A W3C Data Integrity proof by the card's publisher. Additional Data Integrity members (e.g. `created`) are permitted and are covered as the cryptosuite defines.
1483
+ */
1484
+ export interface DataIntegrityProof {
1485
+ type: "DataIntegrityProof";
1486
+ /**
1487
+ * e.g. `eddsa-jcs-2022`.
1488
+ */
1489
+ cryptosuite: string;
1490
+ /**
1491
+ * A verification method of `publisher`, authorized for `assertionMethod`.
1492
+ */
1493
+ verificationMethod: string;
1494
+ proofPurpose: "assertionMethod";
1495
+ proofValue: string;
1496
+ [k: string]: unknown | undefined;
1497
+ }
1296
1498
  /**
1297
1499
  * One presentation request awaiting the holder's decision, as the approver sees it.
1298
1500
  *
@@ -3548,6 +3750,102 @@ export interface VerdictWith {
3548
3750
  */
3549
3751
  presentationDefinition?: {};
3550
3752
  }
3753
+ /**
3754
+ * An event the vetter will attend and vet at. `endDate` is on or after `startDate` and no more than 31 days after it; JSON Schema cannot compare two members, so the community checks both and refuses a violation with `malformedRequest`.
3755
+ */
3756
+ export interface VetterEvent {
3757
+ /**
3758
+ * The event's name, e.g. `Linux Plumbers Conference 2026`.
3759
+ */
3760
+ name: string;
3761
+ startDate: CalendarDate;
3762
+ endDate: CalendarDate;
3763
+ location?: VetterLocation;
3764
+ /**
3765
+ * OPTIONAL. The event's own https page.
3766
+ */
3767
+ url?: string;
3768
+ }
3769
+ /**
3770
+ * Where a vetter can meet people, as coarse as the vetter chooses: a country, optionally a region, optionally a city. Never a street address.
3771
+ */
3772
+ export interface VetterLocation {
3773
+ country: CountryCode;
3774
+ region?: PlaceName;
3775
+ city?: PlaceName;
3776
+ }
3777
+ export interface VettingCard {
3778
+ /**
3779
+ * Exactly `VerifiableDataStructure`, `RelationshipCard` and `VettingCard`, in any order.
3780
+ *
3781
+ * @minItems 3
3782
+ * @maxItems 3
3783
+ */
3784
+ type: [
3785
+ "VerifiableDataStructure" | "RelationshipCard" | "VettingCard",
3786
+ "VerifiableDataStructure" | "RelationshipCard" | "VettingCard",
3787
+ "VerifiableDataStructure" | "RelationshipCard" | "VettingCard"
3788
+ ];
3789
+ /**
3790
+ * Fresh per card. A card is never re-sent to a second session under the same id.
3791
+ */
3792
+ id: string;
3793
+ /**
3794
+ * The applicant's DID — the issuer of the vetting request and the subject every resulting statement names. The card is signed with this DID's assertion key.
3795
+ */
3796
+ publisher: string;
3797
+ cardVersion: number;
3798
+ /**
3799
+ * The vetter's DID — the issuer of the vetting session. A card addressed to anyone else is refused.
3800
+ */
3801
+ audience: string;
3802
+ /**
3803
+ * The community the applicant is being vetted for.
3804
+ */
3805
+ community: string;
3806
+ /**
3807
+ * The session's challenge, copied verbatim.
3808
+ */
3809
+ challenge: string;
3810
+ /**
3811
+ * The session's domain, copied verbatim.
3812
+ */
3813
+ domain: string;
3814
+ issuedAt: string;
3815
+ /**
3816
+ * No later than the session's `expiresAt`.
3817
+ */
3818
+ expiresAt: string;
3819
+ /**
3820
+ * @minItems 1
3821
+ */
3822
+ claims: [VettingCardClaim, ...VettingCardClaim[]];
3823
+ /**
3824
+ * digestMultibase over the RFC 8785 canonicalization of `{ "salt": commitmentSalt, "claims": R }`, where R is `{ "type", "value" }` for every card claim whose type the session lists in `requiredClaims`, ordered by `type` then `value` (code-point order). SHA-256 RECOMMENDED. Because the applicant uses one salt per application, every vetter of that application sees the same value.
3825
+ */
3826
+ identityCommitment: DigestMultibase;
3827
+ /**
3828
+ * 32 random bytes, base64url without padding, generated once per application. Goes to vetters inside the card and to nobody else: a party holding the commitment without the salt cannot test guesses at the claimed name.
3829
+ */
3830
+ commitmentSalt: string;
3831
+ proof: DataIntegrityProof;
3832
+ }
3833
+ export interface VettingCardClaim {
3834
+ /**
3835
+ * The claim type. `person.portrait` is refused: identity vetting works by a vetter looking at the person, not by transmitting their image.
3836
+ */
3837
+ type: ClaimType;
3838
+ /**
3839
+ * The claimed value, exactly as rendered from the applicant's persona — a string for most claim types, structured JSON for some (e.g. a postal address). Authored by the applicant and asserted under their signature; the vetter's check is what gives it any assurance.
3840
+ */
3841
+ value: {
3842
+ [k: string]: unknown | undefined;
3843
+ };
3844
+ /**
3845
+ * Where the value's assurance comes from. `selfAsserted` — the applicant says so, and the vetter's human check is the only assurance added — is the only value this version defines; a verifier MUST NOT treat any other value as adding assurance it does not understand.
3846
+ */
3847
+ provenance: string;
3848
+ }
3551
3849
  /**
3552
3850
  * An opaque, gateway-issued reference to a device's push channel (push wake-up binding, https://trusttasks.org/binding/push/0.1). The push gateway returns it to the device at registration; the device conveys it to its VTA (device/set-wake), and the VTA provisions it to authorized triggers (its mediator and/or itself). The raw platform push token (APNs/FCM/WebPush) is held ONLY by the gateway and is never represented here — the handle abstracts the platform, so adding new push methods (e.g. PWA Web Push) needs no change to triggers or VTA config. A handle is a bearer capability to *request* a wake (subject to the gateway's allowlist), never to read the channel.
3553
3851
  */