@openvtc/trust-tasks 0.19.2 → 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.
- package/CHANGELOG.md +215 -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/keys/export-secret/0.1/payload.d.ts +309 -0
- package/dist/keys/export-secret/0.1/payload.d.ts.map +1 -0
- package/dist/keys/export-secret/0.1/payload.js +181 -0
- package/dist/keys/export-secret/0.1/payload.js.map +1 -0
- 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/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/keys/export-secret/0.1/payload.ts +227 -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/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,221 @@ 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
|
+
|
|
175
|
+
## 0.19.3 — 2026-09-10
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
### Specifications
|
|
179
|
+
|
|
180
|
+
- **keys**: Release one key's private half, by name (#446)
|
|
181
|
+
|
|
182
|
+
A custodian holds private keys and uses them on request so the material never
|
|
183
|
+
has to leave. Sometimes it does have to: an operator backing up one key, a
|
|
184
|
+
service being handed the identity it will run as, a migration to another
|
|
185
|
+
custodian.
|
|
186
|
+
|
|
187
|
+
There was no specified way to ask. Implementations reached for whatever export
|
|
188
|
+
happened to exist — in the reference implementation, a URI called
|
|
189
|
+
`vta/seeds/export-mnemonic` that exports no mnemonic and no seed. It is a
|
|
190
|
+
per-key secret export wearing the name of the thing it was migrated from, in the
|
|
191
|
+
wrong family, gated on an authority far wider than the act needs, and with no
|
|
192
|
+
published spec at all. Three operator commands sit on it.
|
|
193
|
+
|
|
194
|
+
This is that operation, named honestly and in the family it belongs to.
|
|
195
|
+
|
|
196
|
+
**One key per request, deliberately.** A batch form would make a hundred
|
|
197
|
+
releases one decision, and the value of this shape is that each is its own —
|
|
198
|
+
something the custodian can refuse, record and rate-limit individually. Two of
|
|
199
|
+
the nine negative fixtures are the batch shapes someone would reach for first: a
|
|
200
|
+
`keyId` array, and a `keyIds` member arriving alongside. A third is a
|
|
201
|
+
`contextId` selector, because "every key in a context" is a different request
|
|
202
|
+
with a different risk and must not be reachable by widening this one.
|
|
203
|
+
|
|
204
|
+
**Entitlement is necessary and not sufficient**, and that is the substance of
|
|
205
|
+
Authorization. Two refusals hold regardless of how authorised the caller is, so
|
|
206
|
+
both are consumer requirements rather than policy:
|
|
207
|
+
|
|
208
|
+
- `neverExportable` — material that exists only inside the custodian and is
|
|
209
|
+
reproducible nowhere. A custodian making an exception for a sufficiently
|
|
210
|
+
privileged caller would be describing a different key than the one it stored.
|
|
211
|
+
- `notExportable` — a key marked not releasable via `keys/set-exportability`. A
|
|
212
|
+
refusal about the key, not the asker: no amount of authority satisfies it, only
|
|
213
|
+
having the restriction lifted first, which is deliberately harder than imposing
|
|
214
|
+
it was.
|
|
215
|
+
|
|
216
|
+
Kept as two codes rather than one because they send an operator to different
|
|
217
|
+
places — the first is a property that cannot change, the second a decision that
|
|
218
|
+
can — and only one of them is worth trying to do something about.
|
|
219
|
+
|
|
220
|
+
A refusal is a `trust-task-error`, never a response document with an empty
|
|
221
|
+
`privateKeyMultibase`. A producer reading that shape cannot tell a withheld key
|
|
222
|
+
from a released one, and an empty string where a key belongs is the value most
|
|
223
|
+
likely to be installed and used.
|
|
224
|
+
|
|
225
|
+
Another fixture is a `deliverTo` member: the response goes to the producer that
|
|
226
|
+
asked, established by the envelope. A destination on the request would be an
|
|
227
|
+
open redirect for key material.
|
|
228
|
+
|
|
14
229
|
## 0.19.2 — 2026-09-10
|
|
15
230
|
|
|
16
231
|
|
|
@@ -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
|
*/
|