@openvtc/trust-tasks 0.19.3 → 0.19.5

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 (80) hide show
  1. package/CHANGELOG.md +209 -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 +14 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +14 -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/vta/webvh/dids/realign-keys/1.0/payload.d.ts +484 -0
  33. package/dist/vta/webvh/dids/realign-keys/1.0/payload.d.ts.map +1 -0
  34. package/dist/vta/webvh/dids/realign-keys/1.0/payload.js +259 -0
  35. package/dist/vta/webvh/dids/realign-keys/1.0/payload.js.map +1 -0
  36. package/dist/vtc/_shared/0.1/vetter-profile.d.ts +16 -0
  37. package/dist/vtc/_shared/0.1/vetter-profile.d.ts.map +1 -0
  38. package/dist/vtc/_shared/0.1/vetter-profile.js +6 -0
  39. package/dist/vtc/_shared/0.1/vetter-profile.js.map +1 -0
  40. package/dist/vtc/join-requests/manifest/0.2/payload.d.ts +1294 -0
  41. package/dist/vtc/join-requests/manifest/0.2/payload.d.ts.map +1 -0
  42. package/dist/vtc/join-requests/manifest/0.2/payload.js +667 -0
  43. package/dist/vtc/join-requests/manifest/0.2/payload.js.map +1 -0
  44. package/dist/vtc/vetting/revoke-statement/0.1/payload.d.ts +299 -0
  45. package/dist/vtc/vetting/revoke-statement/0.1/payload.d.ts.map +1 -0
  46. package/dist/vtc/vetting/revoke-statement/0.1/payload.js +172 -0
  47. package/dist/vtc/vetting/revoke-statement/0.1/payload.js.map +1 -0
  48. package/dist/vtc/vetting/vetters/grant/0.1/payload.d.ts +337 -0
  49. package/dist/vtc/vetting/vetters/grant/0.1/payload.d.ts.map +1 -0
  50. package/dist/vtc/vetting/vetters/grant/0.1/payload.js +183 -0
  51. package/dist/vtc/vetting/vetters/grant/0.1/payload.js.map +1 -0
  52. package/dist/vtc/vetting/vetters/list/0.1/payload.d.ts +1257 -0
  53. package/dist/vtc/vetting/vetters/list/0.1/payload.d.ts.map +1 -0
  54. package/dist/vtc/vetting/vetters/list/0.1/payload.js +597 -0
  55. package/dist/vtc/vetting/vetters/list/0.1/payload.js.map +1 -0
  56. package/dist/vtc/vetting/vetters/profile/0.1/payload.d.ts +970 -0
  57. package/dist/vtc/vetting/vetters/profile/0.1/payload.d.ts.map +1 -0
  58. package/dist/vtc/vetting/vetters/profile/0.1/payload.js +463 -0
  59. package/dist/vtc/vetting/vetters/profile/0.1/payload.js.map +1 -0
  60. package/dist/vtc/vetting/vetters/resend/0.1/payload.d.ts +240 -0
  61. package/dist/vtc/vetting/vetters/resend/0.1/payload.d.ts.map +1 -0
  62. package/dist/vtc/vetting/vetters/resend/0.1/payload.js +137 -0
  63. package/dist/vtc/vetting/vetters/resend/0.1/payload.js.map +1 -0
  64. package/package.json +1 -1
  65. package/src/_shared/components.ts +318 -0
  66. package/src/index.ts +14 -0
  67. package/src/vetting/_shared/0.1/identity-vetting.ts +11 -0
  68. package/src/vetting/_shared/0.1/vetting-card.ts +17 -0
  69. package/src/vetting/_shared/0.1/vetting.ts +17 -0
  70. package/src/vetting/decline/0.1/payload.ts +111 -0
  71. package/src/vetting/request/0.1/payload.ts +799 -0
  72. package/src/vetting/session/0.1/payload.ts +629 -0
  73. package/src/vta/webvh/dids/realign-keys/1.0/payload.ts +332 -0
  74. package/src/vtc/_shared/0.1/vetter-profile.ts +17 -0
  75. package/src/vtc/join-requests/manifest/0.2/payload.ts +815 -0
  76. package/src/vtc/vetting/revoke-statement/0.1/payload.ts +218 -0
  77. package/src/vtc/vetting/vetters/grant/0.1/payload.ts +237 -0
  78. package/src/vtc/vetting/vetters/list/0.1/payload.ts +816 -0
  79. package/src/vtc/vetting/vetters/profile/0.1/payload.ts +647 -0
  80. package/src/vtc/vetting/vetters/resend/0.1/payload.ts +174 -0
package/CHANGELOG.md CHANGED
@@ -11,6 +11,215 @@ 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.5 — 2026-09-14
15
+
16
+
17
+ ### Added
18
+
19
+ - **vta/webvh/dids/realign-keys**: A DID's key records follow the methods it publishes (#456)
20
+
21
+ A key record's identifier *is* a verification-method identifier: it is what a
22
+ mediator matches an inbound JWE recipient against, and what a caller reading a
23
+ DID document would naturally hand to a signing task. An agent that names a
24
+ record when it mints a key — rather than reading the document it has just
25
+ published — names it correctly only for documents shaped the way it assumed.
26
+ A document supplied by a caller or rendered from a template is free to identify
27
+ its methods any way it likes, and then the agent holds a key the document
28
+ addresses under a name the agent does not answer to.
29
+
30
+ `keys/rename` cannot repair that, and should not be able to: its identifier gate
31
+ exists so that a rename is not a way to write verification-method-shaped or
32
+ namespace-colliding names into a key store. So the repair has to be a task whose
33
+ **request carries no names at all** — the producer identifies a DID, and every
34
+ identifier in the outcome is derived by the recipient from that DID's own
35
+ published document. That is the whole design, and it is why this is a Trust Task
36
+ rather than a parameterised rename.
37
+
38
+ Three things the conformance section pins that an implementer would otherwise
39
+ get wrong:
40
+
41
+ - **Match records to methods by key material, never by position or by a `#key-N`
42
+ pattern.** A record is what it is because of the key it holds; its current name
43
+ is the thing being repaired and so cannot be an input to deciding what it
44
+ should be. This is also what lets the repair reach a record someone has already
45
+ renamed away from its method identifier, which is otherwise unreachable.
46
+ - **All or nothing.** The renames interleave — one record's destination is
47
+ another's current name — and in the general case form a cycle, so an
48
+ implementation that requires each destination to be free before moving
49
+ anything refuses the very shape the task exists for. The response example
50
+ shows that case rather than a tidy one.
51
+ - **A method whose key the recipient does not hold is reported, not an error.**
52
+ "Nothing to move" and "that key is not here" are different answers and only
53
+ the first means the DID is now consistent.
54
+
55
+ Sits in the `vta/webvh/dids/*` family beside `rotate-keys`, and squarely in the
56
+ "genuinely VTA-side" row of the two-ends-of-one-wire question: a hosting server
57
+ has no notion of the key custody this renames, so there is no `did-management/*`
58
+ counterpart to reuse.
59
+
60
+ Bindings regenerated for both libraries.
61
+
62
+ ## 0.19.4 — 2026-09-11
63
+
64
+
65
+ ### Added
66
+
67
+ - **vtc/vetting/vetters**: Vetter profile, listing and grant resend; manifest branding; ticket URI (#453)
68
+
69
+ Applicants need to find vetters without the community publishing its vetters
70
+ by fiat. A grant still lists nobody; a vetter opts in.
71
+
72
+ vtc/vetting/vetters/profile/0.1 — vetter -> community. Replaces the sender's
73
+ whole profile: `listed` (required), `displayName?` (1-128), `languages` (0-16
74
+ BCP 47 tags, 2-35), `location?` ({ country alpha-2 upper case, region?,
75
+ city? }), `methods` (1-3 VettingMethod), `acceptsDocumentation` (0-16
76
+ VettingDocumentation), `availability?` (1-500), `contactHint?` (1-300),
77
+ `events` (0-32 of { name 1-200, startDate, endDate, location?, https url? }),
78
+ `ext?`. Returns `{ listed, updatedAt }`. Refuses a sender without a live vetter
79
+ grant, or not an active member, with `vtc/vetting/vetters/profile:notEligible`;
80
+ an event ending before it starts or more than 31 days after it with
81
+ `malformedRequest`. Idempotent replace; deleted when the grant is revoked or
82
+ the member leaves. issuedAt REQUIRED, proof RECOMMENDED.
83
+
84
+ vtc/vetting/vetters/list/0.1 — any identified applicant or member ->
85
+ community, read-only. Filters `language` (tag or `-` prefix), `country`,
86
+ `region`, `city`, `method`, `eventFrom`/`eventTo`/`eventName`, `limit`
87
+ (1-100, default 50), `cursor` (<= 512), `ext`. Returns `vetters`
88
+ (ListedVetter: vetterDid, displayName?, languages, location?, methods,
89
+ acceptsDocumentation, availability?, contactHint?, events with endDate >= today
90
+ UTC, grantValidUntil, updatedAt) and `nextCursor?`. Only active members with a
91
+ live grant and `listed: true`. States why the family has no `show`: a lookup by
92
+ DID would reveal unlisted vetters.
93
+
94
+ vtc/vetting/vetters/resend/0.1 — vetter -> community. Empty payload; the
95
+ community re-delivers the sender's live vetter role credential, unchanged, over
96
+ credential-exchange/issue and returns `{ credentialId, validUntil }`.
97
+ `vtc/vetting/vetters/resend:notGranted` when there is no live grant.
98
+
99
+ The shared profile pieces live in vtc/_shared/0.1/vetter-profile.
100
+
101
+ vtc/join-requests/manifest/0.2 — the response gains optional `branding`
102
+ (CommunityBranding: displayName 1-128, accentColor #rrggbb, https logoUrl
103
+ <= 2048, ext). Additive, outside every criterion, so no requirementsDigest
104
+ covers it. Example added.
105
+
106
+ vetting/request/0.1 — informative "Ticket URI" section for the QR payload:
107
+ vetting-ticket:?v=1&community=..&vetter=..&ticket=..&secret=.. or ..&code=..
108
+
109
+ vtc/vetting/vetters/grant/0.1 — links profile, list and resend; revoking a
110
+ grant deletes the profile; the consent text now says a grant alone lists
111
+ nobody. The identity-vetting ceremony relates vtc/vetting/vetters/list.
112
+
113
+ Rust and TS bindings regenerated.
114
+
115
+ - **vtc/vetting/vetters**: Grant the vetter role, and pin the eligibility presentation (#452)
116
+
117
+ Vetter eligibility is a community-issued role credential, and this adds the
118
+ task that issues it.
119
+
120
+ vtc/vetting/vetters/grant/0.1 — community administrator -> community, proof
121
+ REQUIRED. `{ memberDid, validitySeconds? (86400..=63072000) }` returns
122
+ `{ endorsementId, credentialId, validFrom, validUntil }`. The community issues
123
+ the member an EndorsementCredential whose endorsement is
124
+ `{ type: CommunityRole, role: vetter, communityDid }`, with a revocation
125
+ credentialStatus entry and 365 days' validity by default, and delivers it
126
+ over credential-exchange/issue. A member with a live grant gets that grant
127
+ back. Revocation is vtc/endorsements/revoke; removing a member revokes their
128
+ grants. Administrator capability only; `notMember` for a non-member.
129
+
130
+ vetting/request/0.1 — `eligibilityVp` is now a documented, still-optional
131
+ presentation: W3C v2 `@context` first, `VerifiablePresentation` type,
132
+ `holder` the vetter, `nonce` the request document id, `domain` the
133
+ applicant's joinDid, an `authentication` Data Integrity proof, and the
134
+ community's CommunityRole credential for the manifest's
135
+ eligibleVetters.role among its credentials. The applicant's check is
136
+ advisory; the community is authoritative.
137
+
138
+ vtc/join-requests/manifest/0.2 — `eligibleVetters.role` names the role in a
139
+ community-issued CommunityRole endorsement credential.
140
+
141
+ - **vtc/vetting**: Withdraw a vetting statement, and the identity-vetting ceremony (#451)
142
+
143
+ * feat(vetting): peer identity-vetting request, session and decline
144
+
145
+ A community that admits people on peer identity vetting needs its members
146
+ to check applicants before it decides: in person or on a call, against
147
+ whatever documentation each vetter accepts, ending in a signed statement
148
+ the applicant later submits. That exchange runs between two people's
149
+ agents, with no community service party to it, so it gets its own
150
+ top-level family.
151
+
152
+ - vetting/request/0.1 — applicant -> vetter. Carries the community, the
153
+ requirementsDigest being gathered for, the join DID (equal to the
154
+ issuer), and a ticket or an introduction. The response accepts with a
155
+ requestId and a presentation of the vetter's membership and role.
156
+ Refusals are trust-task-error codes; a wrong short ticket code gets no
157
+ reply at all, so guessing learns nothing.
158
+ - vetting/session/0.1 — vetter -> applicant, opened while the two are
159
+ together. Issues the challenge and required claims; the response is the
160
+ signed Vetting Card. The session document's id is the statement's
161
+ taskContext and its task digest binds it, mirroring witness/session. The
162
+ spoken match code is derived from that id so both agents compute it.
163
+ - vetting/decline/0.1 — vetter -> applicant, reason optional, never sent to
164
+ the community.
165
+
166
+ - **vetting**: Peer identity-vetting request, session and decline (#450)
167
+
168
+ * feat(vetting): peer identity-vetting request, session and decline
169
+
170
+ A community that admits people on peer identity vetting needs its members
171
+ to check applicants before it decides: in person or on a call, against
172
+ whatever documentation each vetter accepts, ending in a signed statement
173
+ the applicant later submits. That exchange runs between two people's
174
+ agents, with no community service party to it, so it gets its own
175
+ top-level family.
176
+
177
+ - vetting/request/0.1 — applicant -> vetter. Carries the community, the
178
+ requirementsDigest being gathered for, the join DID (equal to the
179
+ issuer), and a ticket or an introduction. The response accepts with a
180
+ requestId and a presentation of the vetter's membership and role.
181
+ Refusals are trust-task-error codes; a wrong short ticket code gets no
182
+ reply at all, so guessing learns nothing.
183
+ - vetting/session/0.1 — vetter -> applicant, opened while the two are
184
+ together. Issues the challenge and required claims; the response is the
185
+ signed Vetting Card. The session document's id is the statement's
186
+ taskContext and its task digest binds it, mirroring witness/session. The
187
+ spoken match code is derived from that id so both agents compute it.
188
+ - vetting/decline/0.1 — vetter -> applicant, reason optional, never sent to
189
+ the community.
190
+
191
+
192
+
193
+ ### Specifications
194
+
195
+ - **vtc/join-requests/manifest**: Advertise identity-vetting requirements per criterion (#449)
196
+
197
+ * spec(vtc/join-requests/manifest): advertise identity-vetting requirements per criterion
198
+
199
+ A community that admits people on peer identity vetting has to say what it
200
+ needs before anyone applies: how many statements, from distinct eligible
201
+ vetters, by which methods, with what independence. A presentation-definition
202
+ can ask for "credentials of type EndorsementCredential"; it cannot count
203
+ issuers, cap relationships, or require that an issuer holds a role.
204
+
205
+ 0.2 adds an optional `vetting` object beside each criterion's
206
+ presentation-definition, and a `requirementsDigest` (JCS -> multihash ->
207
+ multibase over the criterion) that names one version of it, so an applicant
208
+ who started under older requirements can be evaluated under them within the
209
+ community's `requirementsGrace`.
210
+
211
+ Every number is community policy. The schema carries no defaults: an absent
212
+ member means no constraint of that kind. `acceptedDocumentClasses` is
213
+ optional and absent by default, because each vetter decides what
214
+ documentation they accept.
215
+
216
+ The shared vocabulary (method, document class, accepted documentation,
217
+ declared relationship) lands in `vetting/_shared/0.1`, so the manifest and
218
+ the vetting/* peer tasks that follow compare values rather than translate
219
+ them. Claim types reuse persona's `ClaimType` rather than redefining it.
220
+
221
+ 0.1 is untouched.
222
+
14
223
  ## 0.19.3 — 2026-09-10
15
224
 
16
225
 
@@ -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
  */