@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.
- package/CHANGELOG.md +209 -0
- package/dist/_shared/components.d.ts +298 -0
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/dist/vetting/_shared/0.1/identity-vetting.d.ts +11 -0
- package/dist/vetting/_shared/0.1/identity-vetting.d.ts.map +1 -0
- package/dist/vetting/_shared/0.1/identity-vetting.js +6 -0
- package/dist/vetting/_shared/0.1/identity-vetting.js.map +1 -0
- package/dist/vetting/_shared/0.1/vetting-card.d.ts +16 -0
- package/dist/vetting/_shared/0.1/vetting-card.d.ts.map +1 -0
- package/dist/vetting/_shared/0.1/vetting-card.js +6 -0
- package/dist/vetting/_shared/0.1/vetting-card.js.map +1 -0
- package/dist/vetting/_shared/0.1/vetting.d.ts +16 -0
- package/dist/vetting/_shared/0.1/vetting.d.ts.map +1 -0
- package/dist/vetting/_shared/0.1/vetting.js +6 -0
- package/dist/vetting/_shared/0.1/vetting.js.map +1 -0
- package/dist/vetting/decline/0.1/payload.d.ts +138 -0
- package/dist/vetting/decline/0.1/payload.d.ts.map +1 -0
- package/dist/vetting/decline/0.1/payload.js +81 -0
- package/dist/vetting/decline/0.1/payload.js.map +1 -0
- package/dist/vetting/request/0.1/payload.d.ts +1188 -0
- package/dist/vetting/request/0.1/payload.d.ts.map +1 -0
- package/dist/vetting/request/0.1/payload.js +596 -0
- package/dist/vetting/request/0.1/payload.js.map +1 -0
- package/dist/vetting/session/0.1/payload.d.ts +978 -0
- package/dist/vetting/session/0.1/payload.d.ts.map +1 -0
- package/dist/vetting/session/0.1/payload.js +570 -0
- package/dist/vetting/session/0.1/payload.js.map +1 -0
- package/dist/vta/webvh/dids/realign-keys/1.0/payload.d.ts +484 -0
- package/dist/vta/webvh/dids/realign-keys/1.0/payload.d.ts.map +1 -0
- package/dist/vta/webvh/dids/realign-keys/1.0/payload.js +259 -0
- package/dist/vta/webvh/dids/realign-keys/1.0/payload.js.map +1 -0
- package/dist/vtc/_shared/0.1/vetter-profile.d.ts +16 -0
- package/dist/vtc/_shared/0.1/vetter-profile.d.ts.map +1 -0
- package/dist/vtc/_shared/0.1/vetter-profile.js +6 -0
- package/dist/vtc/_shared/0.1/vetter-profile.js.map +1 -0
- package/dist/vtc/join-requests/manifest/0.2/payload.d.ts +1294 -0
- package/dist/vtc/join-requests/manifest/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/join-requests/manifest/0.2/payload.js +667 -0
- package/dist/vtc/join-requests/manifest/0.2/payload.js.map +1 -0
- package/dist/vtc/vetting/revoke-statement/0.1/payload.d.ts +299 -0
- package/dist/vtc/vetting/revoke-statement/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/vetting/revoke-statement/0.1/payload.js +172 -0
- package/dist/vtc/vetting/revoke-statement/0.1/payload.js.map +1 -0
- package/dist/vtc/vetting/vetters/grant/0.1/payload.d.ts +337 -0
- package/dist/vtc/vetting/vetters/grant/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/vetting/vetters/grant/0.1/payload.js +183 -0
- package/dist/vtc/vetting/vetters/grant/0.1/payload.js.map +1 -0
- package/dist/vtc/vetting/vetters/list/0.1/payload.d.ts +1257 -0
- package/dist/vtc/vetting/vetters/list/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/vetting/vetters/list/0.1/payload.js +597 -0
- package/dist/vtc/vetting/vetters/list/0.1/payload.js.map +1 -0
- package/dist/vtc/vetting/vetters/profile/0.1/payload.d.ts +970 -0
- package/dist/vtc/vetting/vetters/profile/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/vetting/vetters/profile/0.1/payload.js +463 -0
- package/dist/vtc/vetting/vetters/profile/0.1/payload.js.map +1 -0
- package/dist/vtc/vetting/vetters/resend/0.1/payload.d.ts +240 -0
- package/dist/vtc/vetting/vetters/resend/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/vetting/vetters/resend/0.1/payload.js +137 -0
- package/dist/vtc/vetting/vetters/resend/0.1/payload.js.map +1 -0
- package/package.json +1 -1
- package/src/_shared/components.ts +318 -0
- package/src/index.ts +14 -0
- package/src/vetting/_shared/0.1/identity-vetting.ts +11 -0
- package/src/vetting/_shared/0.1/vetting-card.ts +17 -0
- package/src/vetting/_shared/0.1/vetting.ts +17 -0
- package/src/vetting/decline/0.1/payload.ts +111 -0
- package/src/vetting/request/0.1/payload.ts +799 -0
- package/src/vetting/session/0.1/payload.ts +629 -0
- package/src/vta/webvh/dids/realign-keys/1.0/payload.ts +332 -0
- package/src/vtc/_shared/0.1/vetter-profile.ts +17 -0
- package/src/vtc/join-requests/manifest/0.2/payload.ts +815 -0
- package/src/vtc/vetting/revoke-statement/0.1/payload.ts +218 -0
- package/src/vtc/vetting/vetters/grant/0.1/payload.ts +237 -0
- package/src/vtc/vetting/vetters/list/0.1/payload.ts +816 -0
- package/src/vtc/vetting/vetters/profile/0.1/payload.ts +647 -0
- 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
|
*/
|