@openvtc/trust-tasks 0.22.4 → 0.22.6
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 +108 -0
- package/dist/_shared/components.d.ts +44 -3
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/auth/signing-key/authorize/0.1/payload.d.ts +199 -0
- package/dist/auth/signing-key/authorize/0.1/payload.d.ts.map +1 -0
- package/dist/auth/signing-key/authorize/0.1/payload.js +108 -0
- package/dist/auth/signing-key/authorize/0.1/payload.js.map +1 -0
- package/dist/auth/signing-key/enroll/0.2/payload.d.ts +569 -0
- package/dist/auth/signing-key/enroll/0.2/payload.d.ts.map +1 -0
- package/dist/auth/signing-key/enroll/0.2/payload.js +315 -0
- package/dist/auth/signing-key/enroll/0.2/payload.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/vtc/_shared/0.1/schema-registry.d.ts +1 -1
- package/dist/vtc/_shared/0.1/schema-registry.d.ts.map +1 -1
- package/dist/vtc/_shared/0.2/schema-registry.d.ts +16 -0
- package/dist/vtc/_shared/0.2/schema-registry.d.ts.map +1 -0
- package/dist/vtc/_shared/0.2/schema-registry.js +6 -0
- package/dist/vtc/_shared/0.2/schema-registry.js.map +1 -0
- package/dist/vtc/join-requests/manifest/0.3/payload.d.ts +1595 -0
- package/dist/vtc/join-requests/manifest/0.3/payload.d.ts.map +1 -0
- package/dist/vtc/join-requests/manifest/0.3/payload.js +827 -0
- package/dist/vtc/join-requests/manifest/0.3/payload.js.map +1 -0
- package/dist/vtc/join-requests/status/0.1/payload.d.ts +82 -2
- package/dist/vtc/join-requests/status/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/join-requests/status/0.1/payload.js +42 -2
- package/dist/vtc/join-requests/status/0.1/payload.js.map +1 -1
- package/dist/vtc/join-requests/submit/0.3/payload.d.ts +662 -0
- package/dist/vtc/join-requests/submit/0.3/payload.d.ts.map +1 -0
- package/dist/vtc/join-requests/submit/0.3/payload.js +364 -0
- package/dist/vtc/join-requests/submit/0.3/payload.js.map +1 -0
- package/dist/vtc/schemas/accepts/list/0.1/payload.d.ts +1 -1
- package/dist/vtc/schemas/accepts/list/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/schemas/accepts/list/0.2/payload.d.ts +1326 -0
- package/dist/vtc/schemas/accepts/list/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/schemas/accepts/list/0.2/payload.js +759 -0
- package/dist/vtc/schemas/accepts/list/0.2/payload.js.map +1 -0
- package/dist/vtc/schemas/accepts/register/0.1/payload.d.ts +1 -1
- package/dist/vtc/schemas/accepts/register/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/schemas/accepts/register/0.2/payload.d.ts +1316 -0
- package/dist/vtc/schemas/accepts/register/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/schemas/accepts/register/0.2/payload.js +762 -0
- package/dist/vtc/schemas/accepts/register/0.2/payload.js.map +1 -0
- package/dist/vtc/schemas/accepts/show/0.1/payload.d.ts +1 -1
- package/dist/vtc/schemas/accepts/show/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/schemas/accepts/show/0.2/payload.d.ts +1256 -0
- package/dist/vtc/schemas/accepts/show/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/schemas/accepts/show/0.2/payload.js +733 -0
- package/dist/vtc/schemas/accepts/show/0.2/payload.js.map +1 -0
- package/package.json +1 -1
- package/src/_shared/components.ts +44 -3
- package/src/auth/signing-key/authorize/0.1/payload.ts +141 -0
- package/src/auth/signing-key/enroll/0.2/payload.ts +365 -0
- package/src/index.ts +8 -0
- package/src/vtc/_shared/0.1/schema-registry.ts +1 -1
- package/src/vtc/_shared/0.2/schema-registry.ts +17 -0
- package/src/vtc/join-requests/manifest/0.3/payload.ts +1020 -0
- package/src/vtc/join-requests/status/0.1/payload.ts +58 -2
- package/src/vtc/join-requests/submit/0.3/payload.ts +431 -0
- package/src/vtc/schemas/accepts/list/0.1/payload.ts +1 -1
- package/src/vtc/schemas/accepts/list/0.2/payload.ts +802 -0
- package/src/vtc/schemas/accepts/register/0.1/payload.ts +1 -1
- package/src/vtc/schemas/accepts/register/0.2/payload.ts +803 -0
- package/src/vtc/schemas/accepts/show/0.1/payload.ts +1 -1
- package/src/vtc/schemas/accepts/show/0.2/payload.ts +762 -0
|
@@ -0,0 +1,1326 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
|
|
3
|
+
* Source: specs/vtc/schemas/accepts/list/0.2/payload.schema.json
|
|
4
|
+
*/
|
|
5
|
+
import type { AcceptsCriterion_VtcV0_2 as AcceptsCriterion, AcceptsCriterionId, Admission, ClaimType, CredentialIssuers, CriterionDescription_VtcV0_2 as CriterionDescription, DcqlQuery, Duration, Ext, ExtCritical, VettingDocumentation, VettingMethod, VettingRequirements } from "../../../../../_shared/components.js";
|
|
6
|
+
/**
|
|
7
|
+
* Page through the community's Accepts criteria. The outer document members are owned by the framework — SPEC §6.3.
|
|
8
|
+
*/
|
|
9
|
+
export interface VTCSchemasAcceptsListPayload {
|
|
10
|
+
/**
|
|
11
|
+
* Opaque continuation token from a previous page's `nextCursor`.
|
|
12
|
+
*/
|
|
13
|
+
cursor?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Page size. The community chooses when absent.
|
|
16
|
+
*/
|
|
17
|
+
limit?: number;
|
|
18
|
+
ext?: Ext;
|
|
19
|
+
}
|
|
20
|
+
export interface VTCSchemasAcceptsListResponsePayload {
|
|
21
|
+
/**
|
|
22
|
+
* @maxItems 50
|
|
23
|
+
*/
|
|
24
|
+
items: AcceptsCriterion[];
|
|
25
|
+
/**
|
|
26
|
+
* Present when more criteria remain; pass it as `cursor`.
|
|
27
|
+
*/
|
|
28
|
+
nextCursor?: string;
|
|
29
|
+
ext?: Ext;
|
|
30
|
+
}
|
|
31
|
+
/** Shared definitions this specification references, re-exported under the names it used to declare them with. */
|
|
32
|
+
export type { AcceptsCriterion, AcceptsCriterionId, Admission, ClaimType, CredentialIssuers, CriterionDescription, DcqlQuery, Duration, Ext, ExtCritical, VettingDocumentation, VettingMethod, VettingRequirements };
|
|
33
|
+
/** Trust Task type URI. */
|
|
34
|
+
export declare const TYPE_URI: "https://trusttasks.org/spec/vtc/schemas/accepts/list/0.2";
|
|
35
|
+
/** Stable alias for this specification's request payload shape. */
|
|
36
|
+
export type Payload = VTCSchemasAcceptsListPayload;
|
|
37
|
+
/** Trust Task response type URI (request type URI + "#response"). */
|
|
38
|
+
export declare const RESPONSE_TYPE_URI: "https://trusttasks.org/spec/vtc/schemas/accepts/list/0.2#response";
|
|
39
|
+
/** Stable alias for this specification's success-response payload shape. */
|
|
40
|
+
export type Response = VTCSchemasAcceptsListResponsePayload;
|
|
41
|
+
/**
|
|
42
|
+
* This specification's payload schema, as a value.
|
|
43
|
+
*
|
|
44
|
+
* SPEC.md §7.2 item 2 is performed against this. It is shipped as data
|
|
45
|
+
* rather than only as a `.json` file because TypeScript types are erased
|
|
46
|
+
* at runtime: without a schema a consumer has nothing to validate, and
|
|
47
|
+
* every REQUIRED payload member is optional in practice. Cross-file
|
|
48
|
+
* `$ref`s are already inlined, so it needs no resolver.
|
|
49
|
+
*/
|
|
50
|
+
export declare const PAYLOAD_SCHEMA: {
|
|
51
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
52
|
+
readonly $id: "https://trusttasks.org/spec/vtc/schemas/accepts/list/0.2";
|
|
53
|
+
readonly title: "VTC Schemas — Accepts — List — payload";
|
|
54
|
+
readonly description: "Page through the community's Accepts criteria. The outer document members are owned by the framework — SPEC §6.3.";
|
|
55
|
+
readonly type: "object";
|
|
56
|
+
readonly additionalProperties: false;
|
|
57
|
+
readonly properties: {
|
|
58
|
+
readonly cursor: {
|
|
59
|
+
readonly type: "string";
|
|
60
|
+
readonly minLength: 1;
|
|
61
|
+
readonly maxLength: 1024;
|
|
62
|
+
readonly description: "Opaque continuation token from a previous page's `nextCursor`.";
|
|
63
|
+
};
|
|
64
|
+
readonly limit: {
|
|
65
|
+
readonly type: "integer";
|
|
66
|
+
readonly minimum: 1;
|
|
67
|
+
readonly maximum: 50;
|
|
68
|
+
readonly description: "Page size. The community chooses when absent.";
|
|
69
|
+
};
|
|
70
|
+
readonly ext: {
|
|
71
|
+
readonly $ref: "#/$defs/Ext";
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
readonly $defs: {
|
|
75
|
+
readonly Response: {
|
|
76
|
+
readonly $anchor: "response";
|
|
77
|
+
readonly title: "VTC Schemas — Accepts — List — response payload";
|
|
78
|
+
readonly type: "object";
|
|
79
|
+
readonly additionalProperties: false;
|
|
80
|
+
readonly required: readonly ["items"];
|
|
81
|
+
readonly properties: {
|
|
82
|
+
readonly items: {
|
|
83
|
+
readonly type: "array";
|
|
84
|
+
readonly maxItems: 50;
|
|
85
|
+
readonly items: {
|
|
86
|
+
readonly $ref: "#/$defs/AcceptsCriterion";
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
readonly nextCursor: {
|
|
90
|
+
readonly type: "string";
|
|
91
|
+
readonly minLength: 1;
|
|
92
|
+
readonly maxLength: 1024;
|
|
93
|
+
readonly description: "Present when more criteria remain; pass it as `cursor`.";
|
|
94
|
+
};
|
|
95
|
+
readonly ext: {
|
|
96
|
+
readonly $ref: "#/$defs/Ext";
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
readonly Ext: {
|
|
101
|
+
readonly title: "Ext";
|
|
102
|
+
readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
|
|
103
|
+
readonly type: "object";
|
|
104
|
+
readonly minProperties: 1;
|
|
105
|
+
readonly additionalProperties: true;
|
|
106
|
+
readonly propertyNames: {
|
|
107
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
readonly AcceptsCriterion: {
|
|
111
|
+
readonly title: "AcceptsCriterion";
|
|
112
|
+
readonly type: "object";
|
|
113
|
+
readonly additionalProperties: false;
|
|
114
|
+
readonly required: readonly ["id", "admission", "createdAt", "createdByDid"];
|
|
115
|
+
readonly dependentRequired: {
|
|
116
|
+
readonly query: readonly ["credentialIssuers"];
|
|
117
|
+
readonly credentialIssuers: readonly ["query"];
|
|
118
|
+
};
|
|
119
|
+
readonly description: "One way into the community: what an applicant must present, and how a submission that presents it is decided. Every requirement it states must be met; requirements it does not state are not requirements. A criterion stating none is met by every submission. A community's criteria are alternatives: a submission is decided under the one it names. What vtc/join-requests/manifest/0.3 publishes to applicants as a `Criterion` is derived from this.";
|
|
120
|
+
readonly properties: {
|
|
121
|
+
readonly id: {
|
|
122
|
+
readonly $ref: "#/$defs/AcceptsCriterionId";
|
|
123
|
+
};
|
|
124
|
+
readonly admission: {
|
|
125
|
+
readonly $ref: "#/$defs/Admission";
|
|
126
|
+
};
|
|
127
|
+
readonly query: {
|
|
128
|
+
readonly $ref: "#/$defs/DcqlQuery";
|
|
129
|
+
readonly description: "The credentials an applicant must present, as a DCQL query. Absent: the criterion requires no credential.";
|
|
130
|
+
};
|
|
131
|
+
readonly credentialIssuers: {
|
|
132
|
+
readonly $ref: "#/$defs/CredentialIssuers";
|
|
133
|
+
readonly description: "Whose credentials meet `query`. Present exactly when `query` is.";
|
|
134
|
+
};
|
|
135
|
+
readonly invitationRequired: {
|
|
136
|
+
readonly type: "boolean";
|
|
137
|
+
readonly description: "True: a submission meets the criterion only when it carries a valid, unconsumed invitation credential this community issued to the applicant. Absent or false: an invitation plays no part in meeting this criterion (another criterion may still require one).";
|
|
138
|
+
};
|
|
139
|
+
readonly description: {
|
|
140
|
+
readonly $ref: "#/$defs/CriterionDescription";
|
|
141
|
+
};
|
|
142
|
+
readonly vetting: {
|
|
143
|
+
readonly $ref: "#/$defs/VettingRequirements";
|
|
144
|
+
};
|
|
145
|
+
readonly createdAt: {
|
|
146
|
+
readonly type: "string";
|
|
147
|
+
readonly format: "date-time";
|
|
148
|
+
readonly description: "When this criterion was last registered. Registering an existing id replaces it.";
|
|
149
|
+
};
|
|
150
|
+
readonly createdByDid: {
|
|
151
|
+
readonly type: "string";
|
|
152
|
+
readonly pattern: "^did:";
|
|
153
|
+
readonly maxLength: 2048;
|
|
154
|
+
readonly description: "The administrator who last registered the criterion.";
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
readonly VettingRequirements: {
|
|
159
|
+
readonly title: "VettingRequirements";
|
|
160
|
+
readonly type: "object";
|
|
161
|
+
readonly additionalProperties: true;
|
|
162
|
+
readonly required: readonly ["version", "statementType", "minStatements", "acceptedMethods", "eligibleVetters"];
|
|
163
|
+
readonly description: "What identity-vetting evidence a criterion needs, beyond what a presentation-definition can express: distinct eligible vetters, per-method floors, independence caps. Every number is the community's own policy. This schema supplies no defaults — an absent optional member means the community imposes no constraint of that kind, never that some protocol value applies. Deliberately open: a consumer MUST ignore members it does not recognise, so a community publishing a newer shape does not make an older client unable to read the rest. Durations: `maxStatementAge` — a statement older than this at decision time does not count (absent: no limit beyond the statement's own validity); `decisionSla` — how long after submission the community undertakes to decide, including on a referred application; `requirementsGrace` — how long an application started under an earlier `requirementsDigest` is still evaluated under that version.";
|
|
164
|
+
readonly properties: {
|
|
165
|
+
readonly version: {
|
|
166
|
+
readonly type: "string";
|
|
167
|
+
readonly pattern: "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$";
|
|
168
|
+
readonly description: "Version of this requirements object's shape. `0.1` for the members defined here.";
|
|
169
|
+
};
|
|
170
|
+
readonly statementType: {
|
|
171
|
+
readonly type: "string";
|
|
172
|
+
readonly format: "uri";
|
|
173
|
+
readonly minLength: 1;
|
|
174
|
+
readonly maxLength: 512;
|
|
175
|
+
readonly description: "The predicate IRI a counted vetting statement carries in `credentialSubject.predicate` — `https://registry.trustoverip.org/dtg/vsc/vetted/1`, the DTG VSC registry's identity-vetting predicate, or a predicate in a namespace the community controls — registered as one the community accepts via vtc/endorsement-types/register. A statement under any other predicate does not count.";
|
|
176
|
+
};
|
|
177
|
+
readonly minStatements: {
|
|
178
|
+
readonly type: "integer";
|
|
179
|
+
readonly minimum: 1;
|
|
180
|
+
readonly description: "How many counted statements are needed, counting each vetter once however many DIDs they hold.";
|
|
181
|
+
};
|
|
182
|
+
readonly minByMethod: {
|
|
183
|
+
readonly type: "object";
|
|
184
|
+
readonly propertyNames: {
|
|
185
|
+
readonly $ref: "#/$defs/VettingMethod";
|
|
186
|
+
};
|
|
187
|
+
readonly additionalProperties: {
|
|
188
|
+
readonly type: "integer";
|
|
189
|
+
readonly minimum: 0;
|
|
190
|
+
};
|
|
191
|
+
readonly description: "Per-method floors within `minStatements` — e.g. `{ \"inPerson\": 1 }`. Every method named MUST also be in `acceptedMethods`. Absent: no method floor.";
|
|
192
|
+
};
|
|
193
|
+
readonly acceptedMethods: {
|
|
194
|
+
readonly type: "array";
|
|
195
|
+
readonly minItems: 1;
|
|
196
|
+
readonly uniqueItems: true;
|
|
197
|
+
readonly items: {
|
|
198
|
+
readonly $ref: "#/$defs/VettingMethod";
|
|
199
|
+
};
|
|
200
|
+
readonly description: "Methods whose statements count at all.";
|
|
201
|
+
};
|
|
202
|
+
readonly acceptedDocumentClasses: {
|
|
203
|
+
readonly type: "array";
|
|
204
|
+
readonly minItems: 1;
|
|
205
|
+
readonly uniqueItems: true;
|
|
206
|
+
readonly items: {
|
|
207
|
+
readonly $ref: "#/$defs/VettingDocumentation";
|
|
208
|
+
};
|
|
209
|
+
readonly description: "Documentation a statement must have relied on in order to count. Absent — the expected case — means each vetter decides what documentation they accept, including none for prior acquaintance, and the community counts what they attest.";
|
|
210
|
+
};
|
|
211
|
+
readonly requiredClaims: {
|
|
212
|
+
readonly type: "array";
|
|
213
|
+
readonly uniqueItems: true;
|
|
214
|
+
readonly items: {
|
|
215
|
+
readonly $ref: "#/$defs/ClaimType";
|
|
216
|
+
};
|
|
217
|
+
readonly description: "Claim types the applicant's Vetting Card must carry, which the identity commitment is computed over, and which a counted statement must list as verified. Absent: none.";
|
|
218
|
+
};
|
|
219
|
+
readonly optionalClaims: {
|
|
220
|
+
readonly type: "array";
|
|
221
|
+
readonly uniqueItems: true;
|
|
222
|
+
readonly items: {
|
|
223
|
+
readonly $ref: "#/$defs/ClaimType";
|
|
224
|
+
};
|
|
225
|
+
readonly description: "Claim types an applicant MAY add to the card and a vetter MAY verify. They never affect whether a statement counts.";
|
|
226
|
+
};
|
|
227
|
+
readonly maxStatementAge: {
|
|
228
|
+
readonly $ref: "#/$defs/Duration";
|
|
229
|
+
};
|
|
230
|
+
readonly eligibleVetters: {
|
|
231
|
+
readonly type: "object";
|
|
232
|
+
readonly additionalProperties: false;
|
|
233
|
+
readonly required: readonly ["role"];
|
|
234
|
+
readonly properties: {
|
|
235
|
+
readonly role: {
|
|
236
|
+
readonly type: "string";
|
|
237
|
+
readonly minLength: 1;
|
|
238
|
+
readonly maxLength: 128;
|
|
239
|
+
readonly pattern: "^[a-zA-Z][a-zA-Z0-9_-]*$";
|
|
240
|
+
readonly description: "The role a statement's issuer must hold, matched as the action `role:<role>` in a Verifiable Authority Credential (`AuthorityCredential`) the community issued to that issuer, whose `authority.scope` is the community's DID (see `vtc/vetting/vetters/grant/0.1`). A statement counts only if its issuer holds such a credential.";
|
|
241
|
+
};
|
|
242
|
+
};
|
|
243
|
+
readonly description: "How a vetter's eligibility is established.";
|
|
244
|
+
};
|
|
245
|
+
readonly independence: {
|
|
246
|
+
readonly type: "object";
|
|
247
|
+
readonly additionalProperties: false;
|
|
248
|
+
readonly properties: {
|
|
249
|
+
readonly maxByDeclaredRelationship: {
|
|
250
|
+
readonly type: "object";
|
|
251
|
+
readonly propertyNames: {
|
|
252
|
+
readonly $ref: "#/$defs/VettingRelationship";
|
|
253
|
+
};
|
|
254
|
+
readonly additionalProperties: {
|
|
255
|
+
readonly type: "integer";
|
|
256
|
+
readonly minimum: 0;
|
|
257
|
+
};
|
|
258
|
+
readonly description: "The most counted statements that may come from vetters declaring each relationship — e.g. `{ \"family\": 0 }`.";
|
|
259
|
+
};
|
|
260
|
+
readonly requireConsistentIdentityCommitment: {
|
|
261
|
+
readonly type: "boolean";
|
|
262
|
+
readonly description: "When true, every counted statement must carry the same identity commitment — all vetters verified the same claimed identity. Absent: false.";
|
|
263
|
+
};
|
|
264
|
+
};
|
|
265
|
+
readonly description: "Caps on how much evidence may come from people close to the applicant. Absent: no caps.";
|
|
266
|
+
};
|
|
267
|
+
readonly invitation: {
|
|
268
|
+
readonly type: "string";
|
|
269
|
+
readonly enum: readonly ["required", "optional", "none"];
|
|
270
|
+
readonly description: "Whether an invitation credential must accompany the statements at submission (`required`), may (`optional`), or plays no part (`none`). Absent: the presentation-definition alone governs.";
|
|
271
|
+
};
|
|
272
|
+
readonly decisionSla: {
|
|
273
|
+
readonly $ref: "#/$defs/Duration";
|
|
274
|
+
};
|
|
275
|
+
readonly requirementsGrace: {
|
|
276
|
+
readonly $ref: "#/$defs/Duration";
|
|
277
|
+
};
|
|
278
|
+
readonly governanceFrameworkUrl: {
|
|
279
|
+
readonly type: "string";
|
|
280
|
+
readonly format: "uri";
|
|
281
|
+
readonly pattern: "^https://";
|
|
282
|
+
readonly maxLength: 2048;
|
|
283
|
+
readonly description: "Where the community's vetting governance — including the attestation text vetters sign — is published.";
|
|
284
|
+
};
|
|
285
|
+
readonly ext: {
|
|
286
|
+
readonly $ref: "#/$defs/Ext";
|
|
287
|
+
};
|
|
288
|
+
readonly extCritical: {
|
|
289
|
+
readonly $ref: "#/$defs/ExtCritical";
|
|
290
|
+
};
|
|
291
|
+
};
|
|
292
|
+
};
|
|
293
|
+
readonly Duration: {
|
|
294
|
+
readonly title: "Duration";
|
|
295
|
+
readonly type: "string";
|
|
296
|
+
readonly maxLength: 32;
|
|
297
|
+
readonly pattern: "^P(([0-9]+W)?([0-9]+D)?T([0-9]+H([0-9]+M)?([0-9]+S)?|[0-9]+M([0-9]+S)?|[0-9]+S)|[0-9]+W([0-9]+D)?|[0-9]+D)$";
|
|
298
|
+
readonly description: "An ISO 8601 duration in weeks, days, hours, minutes and seconds only (e.g. `P120D`, `P2W`, `P1DT12H`, `PT15M`). Years and months are refused: their length depends on the calendar, and an age limit that means different things on different days is not a limit.";
|
|
299
|
+
};
|
|
300
|
+
readonly ExtCritical: {
|
|
301
|
+
readonly title: "ExtCritical";
|
|
302
|
+
readonly description: "Names the `ext` namespaces a consumer MUST understand or refuse, per SPEC.md §4.5.1.\n\nEvery entry MUST be an immediate key of the sibling `ext` object at the same level; an entry naming an absent namespace is non-conforming and the consumer rejects the document with `malformedRequest`. A consumer that does not recognize a namespace named here MUST NOT process the document as though the namespace were absent, and rejects it with `unsupportedExtension` — the exception to the rule that unrecognized namespaces are ignored.\n\nA producer marks a namespace only where the document's meaning depends on it. Marking one that merely carries a hint or an annotation turns every consumer that has not implemented it into a failure where it would otherwise have interoperated. JSON Schema cannot check either of those rules: that an entry names a present namespace is checkable only against the sibling `ext`, and whether a namespace is load-bearing is not a schema question at all. Both are consumer-side checks.";
|
|
303
|
+
readonly type: "array";
|
|
304
|
+
readonly minItems: 1;
|
|
305
|
+
readonly uniqueItems: true;
|
|
306
|
+
readonly items: {
|
|
307
|
+
readonly type: "string";
|
|
308
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
309
|
+
};
|
|
310
|
+
readonly examples: readonly [readonly ["org.openvtc.hidden-vetting"]];
|
|
311
|
+
};
|
|
312
|
+
readonly VettingRelationship: {
|
|
313
|
+
readonly title: "VettingRelationship";
|
|
314
|
+
readonly type: "string";
|
|
315
|
+
readonly enum: readonly ["none", "communityColleague", "sameEmployer", "family", "otherPersonal"];
|
|
316
|
+
readonly description: "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.";
|
|
317
|
+
};
|
|
318
|
+
readonly ClaimType: {
|
|
319
|
+
readonly title: "ClaimType";
|
|
320
|
+
readonly description: "The vocabulary token naming what a value IS — `name.legal`, `phone.mobile`, `address.postal`, `person.birthDate`. Dotted, most-general segment first, so that a consumer with no knowledge of the specific token can still group by its prefix.\n\nThe token is the maintainer's own; no external vocabulary is primary. External vocabularies (vCard/jCard, OIDC standard claims, schema.org) are mappings applied at PRESENTATION by a renderer, not at rest, so that a query written in any of them can be matched without the store having to live inside any one of them.\n\nThe `x:` prefix is an open extension namespace and is not decoration. The closest prior art — Windows CardSpace's self-issued card — supported exactly fifteen predefined claim types with no extensibility, and that is the specific way it failed the requirement a holder actually has. An `x:` attribute stores, composes, binds and discloses exactly like a known one; it renders generically and matches only an explicit query.";
|
|
321
|
+
readonly type: "string";
|
|
322
|
+
readonly minLength: 1;
|
|
323
|
+
readonly maxLength: 128;
|
|
324
|
+
readonly pattern: "^(x:)?[a-z][a-zA-Z0-9]*(\\.[a-z][a-zA-Z0-9]*)*$";
|
|
325
|
+
};
|
|
326
|
+
readonly VettingDocumentation: {
|
|
327
|
+
readonly title: "VettingDocumentation";
|
|
328
|
+
readonly type: "string";
|
|
329
|
+
readonly minLength: 1;
|
|
330
|
+
readonly maxLength: 64;
|
|
331
|
+
readonly pattern: "^[a-z][a-zA-Z0-9]*$";
|
|
332
|
+
readonly description: "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.";
|
|
333
|
+
};
|
|
334
|
+
readonly VettingMethod: {
|
|
335
|
+
readonly title: "VettingMethod";
|
|
336
|
+
readonly type: "string";
|
|
337
|
+
readonly enum: readonly ["inPerson", "video", "priorAcquaintance"];
|
|
338
|
+
readonly description: "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.";
|
|
339
|
+
};
|
|
340
|
+
readonly CriterionDescription: {
|
|
341
|
+
readonly title: "CriterionDescription";
|
|
342
|
+
readonly type: "string";
|
|
343
|
+
readonly maxLength: 1024;
|
|
344
|
+
readonly description: "Plain-language summary of the criterion, written by the registering administrator. Published to prospective applicants in the join manifest, and used as the `purpose` of the credential-exchange/query a join sends when the criterion has a `query` — so it is read by applicants and their agents, not only by administrators. Untrusted as a statement of the rule: where it and the criterion's other members disagree, those govern.";
|
|
345
|
+
};
|
|
346
|
+
readonly CredentialIssuers: {
|
|
347
|
+
readonly title: "CredentialIssuers";
|
|
348
|
+
readonly type: "string";
|
|
349
|
+
readonly enum: readonly ["any", "community", "recognised"];
|
|
350
|
+
readonly description: "Whose credentials meet the criterion's `query`. `community`: only credentials this community issued. `recognised`: credentials this community issued, or issued by a community it recognises (vtc/recognition/check). `any`: any issuer whose credential verifies — the query's own constraints, including DCQL `trusted_authorities`, are then all that limits it. A credential that does not verify (signature, validity window, revocation) never meets a criterion, whichever value is chosen.";
|
|
351
|
+
};
|
|
352
|
+
readonly DcqlQuery: {
|
|
353
|
+
readonly title: "DcqlQuery";
|
|
354
|
+
readonly type: "object";
|
|
355
|
+
readonly additionalProperties: true;
|
|
356
|
+
readonly description: "An OpenID for Verifiable Presentations DCQL query, carried verbatim: per-credential `format`, `meta` type selector (`vct_values`) and requested `claims`. Defined by OID4VP and not re-specified here; snake_case member names are DCQL's own. The community parses it as DCQL and checks every type it references against the registry.";
|
|
357
|
+
};
|
|
358
|
+
readonly Admission: {
|
|
359
|
+
readonly title: "Admission";
|
|
360
|
+
readonly type: "string";
|
|
361
|
+
readonly enum: readonly ["automatic", "review"];
|
|
362
|
+
readonly description: "How the community decides a submission that meets the criterion. `automatic`: it admits the applicant without a person deciding. `review`: it refers the submission to an administrator, who admits or rejects it; meeting the criterion never admits by itself. Which a criterion uses is the community's policy; this definition prefers neither.";
|
|
363
|
+
};
|
|
364
|
+
readonly AcceptsCriterionId: {
|
|
365
|
+
readonly title: "AcceptsCriterionId";
|
|
366
|
+
readonly type: "string";
|
|
367
|
+
readonly minLength: 1;
|
|
368
|
+
readonly maxLength: 128;
|
|
369
|
+
readonly description: "An Accepts criterion's identifier, chosen by the registering administrator — a ceremony purpose or a named manifest criterion, e.g. `membership`. Compared as an exact string after surrounding whitespace is trimmed. Bounded at 128 characters, the bound vtc/join-requests/manifest/0.2 places on the criterion `id` it publishes.";
|
|
370
|
+
};
|
|
371
|
+
};
|
|
372
|
+
};
|
|
373
|
+
/** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
|
|
374
|
+
export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
375
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
376
|
+
readonly $ref: "#/$defs/Response";
|
|
377
|
+
readonly $defs: {
|
|
378
|
+
readonly Response: {
|
|
379
|
+
readonly $anchor: "response";
|
|
380
|
+
readonly title: "VTC Schemas — Accepts — List — response payload";
|
|
381
|
+
readonly type: "object";
|
|
382
|
+
readonly additionalProperties: false;
|
|
383
|
+
readonly required: readonly ["items"];
|
|
384
|
+
readonly properties: {
|
|
385
|
+
readonly items: {
|
|
386
|
+
readonly type: "array";
|
|
387
|
+
readonly maxItems: 50;
|
|
388
|
+
readonly items: {
|
|
389
|
+
readonly $ref: "#/$defs/AcceptsCriterion";
|
|
390
|
+
};
|
|
391
|
+
};
|
|
392
|
+
readonly nextCursor: {
|
|
393
|
+
readonly type: "string";
|
|
394
|
+
readonly minLength: 1;
|
|
395
|
+
readonly maxLength: 1024;
|
|
396
|
+
readonly description: "Present when more criteria remain; pass it as `cursor`.";
|
|
397
|
+
};
|
|
398
|
+
readonly ext: {
|
|
399
|
+
readonly $ref: "#/$defs/Ext";
|
|
400
|
+
};
|
|
401
|
+
};
|
|
402
|
+
};
|
|
403
|
+
readonly Ext: {
|
|
404
|
+
readonly title: "Ext";
|
|
405
|
+
readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
|
|
406
|
+
readonly type: "object";
|
|
407
|
+
readonly minProperties: 1;
|
|
408
|
+
readonly additionalProperties: true;
|
|
409
|
+
readonly propertyNames: {
|
|
410
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
411
|
+
};
|
|
412
|
+
};
|
|
413
|
+
readonly AcceptsCriterion: {
|
|
414
|
+
readonly title: "AcceptsCriterion";
|
|
415
|
+
readonly type: "object";
|
|
416
|
+
readonly additionalProperties: false;
|
|
417
|
+
readonly required: readonly ["id", "admission", "createdAt", "createdByDid"];
|
|
418
|
+
readonly dependentRequired: {
|
|
419
|
+
readonly query: readonly ["credentialIssuers"];
|
|
420
|
+
readonly credentialIssuers: readonly ["query"];
|
|
421
|
+
};
|
|
422
|
+
readonly description: "One way into the community: what an applicant must present, and how a submission that presents it is decided. Every requirement it states must be met; requirements it does not state are not requirements. A criterion stating none is met by every submission. A community's criteria are alternatives: a submission is decided under the one it names. What vtc/join-requests/manifest/0.3 publishes to applicants as a `Criterion` is derived from this.";
|
|
423
|
+
readonly properties: {
|
|
424
|
+
readonly id: {
|
|
425
|
+
readonly $ref: "#/$defs/AcceptsCriterionId";
|
|
426
|
+
};
|
|
427
|
+
readonly admission: {
|
|
428
|
+
readonly $ref: "#/$defs/Admission";
|
|
429
|
+
};
|
|
430
|
+
readonly query: {
|
|
431
|
+
readonly $ref: "#/$defs/DcqlQuery";
|
|
432
|
+
readonly description: "The credentials an applicant must present, as a DCQL query. Absent: the criterion requires no credential.";
|
|
433
|
+
};
|
|
434
|
+
readonly credentialIssuers: {
|
|
435
|
+
readonly $ref: "#/$defs/CredentialIssuers";
|
|
436
|
+
readonly description: "Whose credentials meet `query`. Present exactly when `query` is.";
|
|
437
|
+
};
|
|
438
|
+
readonly invitationRequired: {
|
|
439
|
+
readonly type: "boolean";
|
|
440
|
+
readonly description: "True: a submission meets the criterion only when it carries a valid, unconsumed invitation credential this community issued to the applicant. Absent or false: an invitation plays no part in meeting this criterion (another criterion may still require one).";
|
|
441
|
+
};
|
|
442
|
+
readonly description: {
|
|
443
|
+
readonly $ref: "#/$defs/CriterionDescription";
|
|
444
|
+
};
|
|
445
|
+
readonly vetting: {
|
|
446
|
+
readonly $ref: "#/$defs/VettingRequirements";
|
|
447
|
+
};
|
|
448
|
+
readonly createdAt: {
|
|
449
|
+
readonly type: "string";
|
|
450
|
+
readonly format: "date-time";
|
|
451
|
+
readonly description: "When this criterion was last registered. Registering an existing id replaces it.";
|
|
452
|
+
};
|
|
453
|
+
readonly createdByDid: {
|
|
454
|
+
readonly type: "string";
|
|
455
|
+
readonly pattern: "^did:";
|
|
456
|
+
readonly maxLength: 2048;
|
|
457
|
+
readonly description: "The administrator who last registered the criterion.";
|
|
458
|
+
};
|
|
459
|
+
};
|
|
460
|
+
};
|
|
461
|
+
readonly VettingRequirements: {
|
|
462
|
+
readonly title: "VettingRequirements";
|
|
463
|
+
readonly type: "object";
|
|
464
|
+
readonly additionalProperties: true;
|
|
465
|
+
readonly required: readonly ["version", "statementType", "minStatements", "acceptedMethods", "eligibleVetters"];
|
|
466
|
+
readonly description: "What identity-vetting evidence a criterion needs, beyond what a presentation-definition can express: distinct eligible vetters, per-method floors, independence caps. Every number is the community's own policy. This schema supplies no defaults — an absent optional member means the community imposes no constraint of that kind, never that some protocol value applies. Deliberately open: a consumer MUST ignore members it does not recognise, so a community publishing a newer shape does not make an older client unable to read the rest. Durations: `maxStatementAge` — a statement older than this at decision time does not count (absent: no limit beyond the statement's own validity); `decisionSla` — how long after submission the community undertakes to decide, including on a referred application; `requirementsGrace` — how long an application started under an earlier `requirementsDigest` is still evaluated under that version.";
|
|
467
|
+
readonly properties: {
|
|
468
|
+
readonly version: {
|
|
469
|
+
readonly type: "string";
|
|
470
|
+
readonly pattern: "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$";
|
|
471
|
+
readonly description: "Version of this requirements object's shape. `0.1` for the members defined here.";
|
|
472
|
+
};
|
|
473
|
+
readonly statementType: {
|
|
474
|
+
readonly type: "string";
|
|
475
|
+
readonly format: "uri";
|
|
476
|
+
readonly minLength: 1;
|
|
477
|
+
readonly maxLength: 512;
|
|
478
|
+
readonly description: "The predicate IRI a counted vetting statement carries in `credentialSubject.predicate` — `https://registry.trustoverip.org/dtg/vsc/vetted/1`, the DTG VSC registry's identity-vetting predicate, or a predicate in a namespace the community controls — registered as one the community accepts via vtc/endorsement-types/register. A statement under any other predicate does not count.";
|
|
479
|
+
};
|
|
480
|
+
readonly minStatements: {
|
|
481
|
+
readonly type: "integer";
|
|
482
|
+
readonly minimum: 1;
|
|
483
|
+
readonly description: "How many counted statements are needed, counting each vetter once however many DIDs they hold.";
|
|
484
|
+
};
|
|
485
|
+
readonly minByMethod: {
|
|
486
|
+
readonly type: "object";
|
|
487
|
+
readonly propertyNames: {
|
|
488
|
+
readonly $ref: "#/$defs/VettingMethod";
|
|
489
|
+
};
|
|
490
|
+
readonly additionalProperties: {
|
|
491
|
+
readonly type: "integer";
|
|
492
|
+
readonly minimum: 0;
|
|
493
|
+
};
|
|
494
|
+
readonly description: "Per-method floors within `minStatements` — e.g. `{ \"inPerson\": 1 }`. Every method named MUST also be in `acceptedMethods`. Absent: no method floor.";
|
|
495
|
+
};
|
|
496
|
+
readonly acceptedMethods: {
|
|
497
|
+
readonly type: "array";
|
|
498
|
+
readonly minItems: 1;
|
|
499
|
+
readonly uniqueItems: true;
|
|
500
|
+
readonly items: {
|
|
501
|
+
readonly $ref: "#/$defs/VettingMethod";
|
|
502
|
+
};
|
|
503
|
+
readonly description: "Methods whose statements count at all.";
|
|
504
|
+
};
|
|
505
|
+
readonly acceptedDocumentClasses: {
|
|
506
|
+
readonly type: "array";
|
|
507
|
+
readonly minItems: 1;
|
|
508
|
+
readonly uniqueItems: true;
|
|
509
|
+
readonly items: {
|
|
510
|
+
readonly $ref: "#/$defs/VettingDocumentation";
|
|
511
|
+
};
|
|
512
|
+
readonly description: "Documentation a statement must have relied on in order to count. Absent — the expected case — means each vetter decides what documentation they accept, including none for prior acquaintance, and the community counts what they attest.";
|
|
513
|
+
};
|
|
514
|
+
readonly requiredClaims: {
|
|
515
|
+
readonly type: "array";
|
|
516
|
+
readonly uniqueItems: true;
|
|
517
|
+
readonly items: {
|
|
518
|
+
readonly $ref: "#/$defs/ClaimType";
|
|
519
|
+
};
|
|
520
|
+
readonly description: "Claim types the applicant's Vetting Card must carry, which the identity commitment is computed over, and which a counted statement must list as verified. Absent: none.";
|
|
521
|
+
};
|
|
522
|
+
readonly optionalClaims: {
|
|
523
|
+
readonly type: "array";
|
|
524
|
+
readonly uniqueItems: true;
|
|
525
|
+
readonly items: {
|
|
526
|
+
readonly $ref: "#/$defs/ClaimType";
|
|
527
|
+
};
|
|
528
|
+
readonly description: "Claim types an applicant MAY add to the card and a vetter MAY verify. They never affect whether a statement counts.";
|
|
529
|
+
};
|
|
530
|
+
readonly maxStatementAge: {
|
|
531
|
+
readonly $ref: "#/$defs/Duration";
|
|
532
|
+
};
|
|
533
|
+
readonly eligibleVetters: {
|
|
534
|
+
readonly type: "object";
|
|
535
|
+
readonly additionalProperties: false;
|
|
536
|
+
readonly required: readonly ["role"];
|
|
537
|
+
readonly properties: {
|
|
538
|
+
readonly role: {
|
|
539
|
+
readonly type: "string";
|
|
540
|
+
readonly minLength: 1;
|
|
541
|
+
readonly maxLength: 128;
|
|
542
|
+
readonly pattern: "^[a-zA-Z][a-zA-Z0-9_-]*$";
|
|
543
|
+
readonly description: "The role a statement's issuer must hold, matched as the action `role:<role>` in a Verifiable Authority Credential (`AuthorityCredential`) the community issued to that issuer, whose `authority.scope` is the community's DID (see `vtc/vetting/vetters/grant/0.1`). A statement counts only if its issuer holds such a credential.";
|
|
544
|
+
};
|
|
545
|
+
};
|
|
546
|
+
readonly description: "How a vetter's eligibility is established.";
|
|
547
|
+
};
|
|
548
|
+
readonly independence: {
|
|
549
|
+
readonly type: "object";
|
|
550
|
+
readonly additionalProperties: false;
|
|
551
|
+
readonly properties: {
|
|
552
|
+
readonly maxByDeclaredRelationship: {
|
|
553
|
+
readonly type: "object";
|
|
554
|
+
readonly propertyNames: {
|
|
555
|
+
readonly $ref: "#/$defs/VettingRelationship";
|
|
556
|
+
};
|
|
557
|
+
readonly additionalProperties: {
|
|
558
|
+
readonly type: "integer";
|
|
559
|
+
readonly minimum: 0;
|
|
560
|
+
};
|
|
561
|
+
readonly description: "The most counted statements that may come from vetters declaring each relationship — e.g. `{ \"family\": 0 }`.";
|
|
562
|
+
};
|
|
563
|
+
readonly requireConsistentIdentityCommitment: {
|
|
564
|
+
readonly type: "boolean";
|
|
565
|
+
readonly description: "When true, every counted statement must carry the same identity commitment — all vetters verified the same claimed identity. Absent: false.";
|
|
566
|
+
};
|
|
567
|
+
};
|
|
568
|
+
readonly description: "Caps on how much evidence may come from people close to the applicant. Absent: no caps.";
|
|
569
|
+
};
|
|
570
|
+
readonly invitation: {
|
|
571
|
+
readonly type: "string";
|
|
572
|
+
readonly enum: readonly ["required", "optional", "none"];
|
|
573
|
+
readonly description: "Whether an invitation credential must accompany the statements at submission (`required`), may (`optional`), or plays no part (`none`). Absent: the presentation-definition alone governs.";
|
|
574
|
+
};
|
|
575
|
+
readonly decisionSla: {
|
|
576
|
+
readonly $ref: "#/$defs/Duration";
|
|
577
|
+
};
|
|
578
|
+
readonly requirementsGrace: {
|
|
579
|
+
readonly $ref: "#/$defs/Duration";
|
|
580
|
+
};
|
|
581
|
+
readonly governanceFrameworkUrl: {
|
|
582
|
+
readonly type: "string";
|
|
583
|
+
readonly format: "uri";
|
|
584
|
+
readonly pattern: "^https://";
|
|
585
|
+
readonly maxLength: 2048;
|
|
586
|
+
readonly description: "Where the community's vetting governance — including the attestation text vetters sign — is published.";
|
|
587
|
+
};
|
|
588
|
+
readonly ext: {
|
|
589
|
+
readonly $ref: "#/$defs/Ext";
|
|
590
|
+
};
|
|
591
|
+
readonly extCritical: {
|
|
592
|
+
readonly $ref: "#/$defs/ExtCritical";
|
|
593
|
+
};
|
|
594
|
+
};
|
|
595
|
+
};
|
|
596
|
+
readonly Duration: {
|
|
597
|
+
readonly title: "Duration";
|
|
598
|
+
readonly type: "string";
|
|
599
|
+
readonly maxLength: 32;
|
|
600
|
+
readonly pattern: "^P(([0-9]+W)?([0-9]+D)?T([0-9]+H([0-9]+M)?([0-9]+S)?|[0-9]+M([0-9]+S)?|[0-9]+S)|[0-9]+W([0-9]+D)?|[0-9]+D)$";
|
|
601
|
+
readonly description: "An ISO 8601 duration in weeks, days, hours, minutes and seconds only (e.g. `P120D`, `P2W`, `P1DT12H`, `PT15M`). Years and months are refused: their length depends on the calendar, and an age limit that means different things on different days is not a limit.";
|
|
602
|
+
};
|
|
603
|
+
readonly ExtCritical: {
|
|
604
|
+
readonly title: "ExtCritical";
|
|
605
|
+
readonly description: "Names the `ext` namespaces a consumer MUST understand or refuse, per SPEC.md §4.5.1.\n\nEvery entry MUST be an immediate key of the sibling `ext` object at the same level; an entry naming an absent namespace is non-conforming and the consumer rejects the document with `malformedRequest`. A consumer that does not recognize a namespace named here MUST NOT process the document as though the namespace were absent, and rejects it with `unsupportedExtension` — the exception to the rule that unrecognized namespaces are ignored.\n\nA producer marks a namespace only where the document's meaning depends on it. Marking one that merely carries a hint or an annotation turns every consumer that has not implemented it into a failure where it would otherwise have interoperated. JSON Schema cannot check either of those rules: that an entry names a present namespace is checkable only against the sibling `ext`, and whether a namespace is load-bearing is not a schema question at all. Both are consumer-side checks.";
|
|
606
|
+
readonly type: "array";
|
|
607
|
+
readonly minItems: 1;
|
|
608
|
+
readonly uniqueItems: true;
|
|
609
|
+
readonly items: {
|
|
610
|
+
readonly type: "string";
|
|
611
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
612
|
+
};
|
|
613
|
+
readonly examples: readonly [readonly ["org.openvtc.hidden-vetting"]];
|
|
614
|
+
};
|
|
615
|
+
readonly VettingRelationship: {
|
|
616
|
+
readonly title: "VettingRelationship";
|
|
617
|
+
readonly type: "string";
|
|
618
|
+
readonly enum: readonly ["none", "communityColleague", "sameEmployer", "family", "otherPersonal"];
|
|
619
|
+
readonly description: "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.";
|
|
620
|
+
};
|
|
621
|
+
readonly ClaimType: {
|
|
622
|
+
readonly title: "ClaimType";
|
|
623
|
+
readonly description: "The vocabulary token naming what a value IS — `name.legal`, `phone.mobile`, `address.postal`, `person.birthDate`. Dotted, most-general segment first, so that a consumer with no knowledge of the specific token can still group by its prefix.\n\nThe token is the maintainer's own; no external vocabulary is primary. External vocabularies (vCard/jCard, OIDC standard claims, schema.org) are mappings applied at PRESENTATION by a renderer, not at rest, so that a query written in any of them can be matched without the store having to live inside any one of them.\n\nThe `x:` prefix is an open extension namespace and is not decoration. The closest prior art — Windows CardSpace's self-issued card — supported exactly fifteen predefined claim types with no extensibility, and that is the specific way it failed the requirement a holder actually has. An `x:` attribute stores, composes, binds and discloses exactly like a known one; it renders generically and matches only an explicit query.";
|
|
624
|
+
readonly type: "string";
|
|
625
|
+
readonly minLength: 1;
|
|
626
|
+
readonly maxLength: 128;
|
|
627
|
+
readonly pattern: "^(x:)?[a-z][a-zA-Z0-9]*(\\.[a-z][a-zA-Z0-9]*)*$";
|
|
628
|
+
};
|
|
629
|
+
readonly VettingDocumentation: {
|
|
630
|
+
readonly title: "VettingDocumentation";
|
|
631
|
+
readonly type: "string";
|
|
632
|
+
readonly minLength: 1;
|
|
633
|
+
readonly maxLength: 64;
|
|
634
|
+
readonly pattern: "^[a-z][a-zA-Z0-9]*$";
|
|
635
|
+
readonly description: "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.";
|
|
636
|
+
};
|
|
637
|
+
readonly VettingMethod: {
|
|
638
|
+
readonly title: "VettingMethod";
|
|
639
|
+
readonly type: "string";
|
|
640
|
+
readonly enum: readonly ["inPerson", "video", "priorAcquaintance"];
|
|
641
|
+
readonly description: "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.";
|
|
642
|
+
};
|
|
643
|
+
readonly CriterionDescription: {
|
|
644
|
+
readonly title: "CriterionDescription";
|
|
645
|
+
readonly type: "string";
|
|
646
|
+
readonly maxLength: 1024;
|
|
647
|
+
readonly description: "Plain-language summary of the criterion, written by the registering administrator. Published to prospective applicants in the join manifest, and used as the `purpose` of the credential-exchange/query a join sends when the criterion has a `query` — so it is read by applicants and their agents, not only by administrators. Untrusted as a statement of the rule: where it and the criterion's other members disagree, those govern.";
|
|
648
|
+
};
|
|
649
|
+
readonly CredentialIssuers: {
|
|
650
|
+
readonly title: "CredentialIssuers";
|
|
651
|
+
readonly type: "string";
|
|
652
|
+
readonly enum: readonly ["any", "community", "recognised"];
|
|
653
|
+
readonly description: "Whose credentials meet the criterion's `query`. `community`: only credentials this community issued. `recognised`: credentials this community issued, or issued by a community it recognises (vtc/recognition/check). `any`: any issuer whose credential verifies — the query's own constraints, including DCQL `trusted_authorities`, are then all that limits it. A credential that does not verify (signature, validity window, revocation) never meets a criterion, whichever value is chosen.";
|
|
654
|
+
};
|
|
655
|
+
readonly DcqlQuery: {
|
|
656
|
+
readonly title: "DcqlQuery";
|
|
657
|
+
readonly type: "object";
|
|
658
|
+
readonly additionalProperties: true;
|
|
659
|
+
readonly description: "An OpenID for Verifiable Presentations DCQL query, carried verbatim: per-credential `format`, `meta` type selector (`vct_values`) and requested `claims`. Defined by OID4VP and not re-specified here; snake_case member names are DCQL's own. The community parses it as DCQL and checks every type it references against the registry.";
|
|
660
|
+
};
|
|
661
|
+
readonly Admission: {
|
|
662
|
+
readonly title: "Admission";
|
|
663
|
+
readonly type: "string";
|
|
664
|
+
readonly enum: readonly ["automatic", "review"];
|
|
665
|
+
readonly description: "How the community decides a submission that meets the criterion. `automatic`: it admits the applicant without a person deciding. `review`: it refers the submission to an administrator, who admits or rejects it; meeting the criterion never admits by itself. Which a criterion uses is the community's policy; this definition prefers neither.";
|
|
666
|
+
};
|
|
667
|
+
readonly AcceptsCriterionId: {
|
|
668
|
+
readonly title: "AcceptsCriterionId";
|
|
669
|
+
readonly type: "string";
|
|
670
|
+
readonly minLength: 1;
|
|
671
|
+
readonly maxLength: 128;
|
|
672
|
+
readonly description: "An Accepts criterion's identifier, chosen by the registering administrator — a ceremony purpose or a named manifest criterion, e.g. `membership`. Compared as an exact string after surrounding whitespace is trimmed. Bounded at 128 characters, the bound vtc/join-requests/manifest/0.2 places on the criterion `id` it publishes.";
|
|
673
|
+
};
|
|
674
|
+
};
|
|
675
|
+
};
|
|
676
|
+
/**
|
|
677
|
+
* SPEC.md §7.2 policy for the request variant, from this specification's
|
|
678
|
+
* front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
|
|
679
|
+
* per-specification and cannot be derived from the document alone, and
|
|
680
|
+
* item 2 needs the schema this carries.
|
|
681
|
+
*/
|
|
682
|
+
export declare const SPEC: {
|
|
683
|
+
readonly typeUri: "https://trusttasks.org/spec/vtc/schemas/accepts/list/0.2";
|
|
684
|
+
readonly isBearer: false;
|
|
685
|
+
readonly isProofRequired: false;
|
|
686
|
+
readonly isRecipientRequired: true;
|
|
687
|
+
readonly isIssuedAtRequired: false;
|
|
688
|
+
readonly payloadSchema: {
|
|
689
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
690
|
+
readonly $id: "https://trusttasks.org/spec/vtc/schemas/accepts/list/0.2";
|
|
691
|
+
readonly title: "VTC Schemas — Accepts — List — payload";
|
|
692
|
+
readonly description: "Page through the community's Accepts criteria. The outer document members are owned by the framework — SPEC §6.3.";
|
|
693
|
+
readonly type: "object";
|
|
694
|
+
readonly additionalProperties: false;
|
|
695
|
+
readonly properties: {
|
|
696
|
+
readonly cursor: {
|
|
697
|
+
readonly type: "string";
|
|
698
|
+
readonly minLength: 1;
|
|
699
|
+
readonly maxLength: 1024;
|
|
700
|
+
readonly description: "Opaque continuation token from a previous page's `nextCursor`.";
|
|
701
|
+
};
|
|
702
|
+
readonly limit: {
|
|
703
|
+
readonly type: "integer";
|
|
704
|
+
readonly minimum: 1;
|
|
705
|
+
readonly maximum: 50;
|
|
706
|
+
readonly description: "Page size. The community chooses when absent.";
|
|
707
|
+
};
|
|
708
|
+
readonly ext: {
|
|
709
|
+
readonly $ref: "#/$defs/Ext";
|
|
710
|
+
};
|
|
711
|
+
};
|
|
712
|
+
readonly $defs: {
|
|
713
|
+
readonly Response: {
|
|
714
|
+
readonly $anchor: "response";
|
|
715
|
+
readonly title: "VTC Schemas — Accepts — List — response payload";
|
|
716
|
+
readonly type: "object";
|
|
717
|
+
readonly additionalProperties: false;
|
|
718
|
+
readonly required: readonly ["items"];
|
|
719
|
+
readonly properties: {
|
|
720
|
+
readonly items: {
|
|
721
|
+
readonly type: "array";
|
|
722
|
+
readonly maxItems: 50;
|
|
723
|
+
readonly items: {
|
|
724
|
+
readonly $ref: "#/$defs/AcceptsCriterion";
|
|
725
|
+
};
|
|
726
|
+
};
|
|
727
|
+
readonly nextCursor: {
|
|
728
|
+
readonly type: "string";
|
|
729
|
+
readonly minLength: 1;
|
|
730
|
+
readonly maxLength: 1024;
|
|
731
|
+
readonly description: "Present when more criteria remain; pass it as `cursor`.";
|
|
732
|
+
};
|
|
733
|
+
readonly ext: {
|
|
734
|
+
readonly $ref: "#/$defs/Ext";
|
|
735
|
+
};
|
|
736
|
+
};
|
|
737
|
+
};
|
|
738
|
+
readonly Ext: {
|
|
739
|
+
readonly title: "Ext";
|
|
740
|
+
readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
|
|
741
|
+
readonly type: "object";
|
|
742
|
+
readonly minProperties: 1;
|
|
743
|
+
readonly additionalProperties: true;
|
|
744
|
+
readonly propertyNames: {
|
|
745
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
746
|
+
};
|
|
747
|
+
};
|
|
748
|
+
readonly AcceptsCriterion: {
|
|
749
|
+
readonly title: "AcceptsCriterion";
|
|
750
|
+
readonly type: "object";
|
|
751
|
+
readonly additionalProperties: false;
|
|
752
|
+
readonly required: readonly ["id", "admission", "createdAt", "createdByDid"];
|
|
753
|
+
readonly dependentRequired: {
|
|
754
|
+
readonly query: readonly ["credentialIssuers"];
|
|
755
|
+
readonly credentialIssuers: readonly ["query"];
|
|
756
|
+
};
|
|
757
|
+
readonly description: "One way into the community: what an applicant must present, and how a submission that presents it is decided. Every requirement it states must be met; requirements it does not state are not requirements. A criterion stating none is met by every submission. A community's criteria are alternatives: a submission is decided under the one it names. What vtc/join-requests/manifest/0.3 publishes to applicants as a `Criterion` is derived from this.";
|
|
758
|
+
readonly properties: {
|
|
759
|
+
readonly id: {
|
|
760
|
+
readonly $ref: "#/$defs/AcceptsCriterionId";
|
|
761
|
+
};
|
|
762
|
+
readonly admission: {
|
|
763
|
+
readonly $ref: "#/$defs/Admission";
|
|
764
|
+
};
|
|
765
|
+
readonly query: {
|
|
766
|
+
readonly $ref: "#/$defs/DcqlQuery";
|
|
767
|
+
readonly description: "The credentials an applicant must present, as a DCQL query. Absent: the criterion requires no credential.";
|
|
768
|
+
};
|
|
769
|
+
readonly credentialIssuers: {
|
|
770
|
+
readonly $ref: "#/$defs/CredentialIssuers";
|
|
771
|
+
readonly description: "Whose credentials meet `query`. Present exactly when `query` is.";
|
|
772
|
+
};
|
|
773
|
+
readonly invitationRequired: {
|
|
774
|
+
readonly type: "boolean";
|
|
775
|
+
readonly description: "True: a submission meets the criterion only when it carries a valid, unconsumed invitation credential this community issued to the applicant. Absent or false: an invitation plays no part in meeting this criterion (another criterion may still require one).";
|
|
776
|
+
};
|
|
777
|
+
readonly description: {
|
|
778
|
+
readonly $ref: "#/$defs/CriterionDescription";
|
|
779
|
+
};
|
|
780
|
+
readonly vetting: {
|
|
781
|
+
readonly $ref: "#/$defs/VettingRequirements";
|
|
782
|
+
};
|
|
783
|
+
readonly createdAt: {
|
|
784
|
+
readonly type: "string";
|
|
785
|
+
readonly format: "date-time";
|
|
786
|
+
readonly description: "When this criterion was last registered. Registering an existing id replaces it.";
|
|
787
|
+
};
|
|
788
|
+
readonly createdByDid: {
|
|
789
|
+
readonly type: "string";
|
|
790
|
+
readonly pattern: "^did:";
|
|
791
|
+
readonly maxLength: 2048;
|
|
792
|
+
readonly description: "The administrator who last registered the criterion.";
|
|
793
|
+
};
|
|
794
|
+
};
|
|
795
|
+
};
|
|
796
|
+
readonly VettingRequirements: {
|
|
797
|
+
readonly title: "VettingRequirements";
|
|
798
|
+
readonly type: "object";
|
|
799
|
+
readonly additionalProperties: true;
|
|
800
|
+
readonly required: readonly ["version", "statementType", "minStatements", "acceptedMethods", "eligibleVetters"];
|
|
801
|
+
readonly description: "What identity-vetting evidence a criterion needs, beyond what a presentation-definition can express: distinct eligible vetters, per-method floors, independence caps. Every number is the community's own policy. This schema supplies no defaults — an absent optional member means the community imposes no constraint of that kind, never that some protocol value applies. Deliberately open: a consumer MUST ignore members it does not recognise, so a community publishing a newer shape does not make an older client unable to read the rest. Durations: `maxStatementAge` — a statement older than this at decision time does not count (absent: no limit beyond the statement's own validity); `decisionSla` — how long after submission the community undertakes to decide, including on a referred application; `requirementsGrace` — how long an application started under an earlier `requirementsDigest` is still evaluated under that version.";
|
|
802
|
+
readonly properties: {
|
|
803
|
+
readonly version: {
|
|
804
|
+
readonly type: "string";
|
|
805
|
+
readonly pattern: "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$";
|
|
806
|
+
readonly description: "Version of this requirements object's shape. `0.1` for the members defined here.";
|
|
807
|
+
};
|
|
808
|
+
readonly statementType: {
|
|
809
|
+
readonly type: "string";
|
|
810
|
+
readonly format: "uri";
|
|
811
|
+
readonly minLength: 1;
|
|
812
|
+
readonly maxLength: 512;
|
|
813
|
+
readonly description: "The predicate IRI a counted vetting statement carries in `credentialSubject.predicate` — `https://registry.trustoverip.org/dtg/vsc/vetted/1`, the DTG VSC registry's identity-vetting predicate, or a predicate in a namespace the community controls — registered as one the community accepts via vtc/endorsement-types/register. A statement under any other predicate does not count.";
|
|
814
|
+
};
|
|
815
|
+
readonly minStatements: {
|
|
816
|
+
readonly type: "integer";
|
|
817
|
+
readonly minimum: 1;
|
|
818
|
+
readonly description: "How many counted statements are needed, counting each vetter once however many DIDs they hold.";
|
|
819
|
+
};
|
|
820
|
+
readonly minByMethod: {
|
|
821
|
+
readonly type: "object";
|
|
822
|
+
readonly propertyNames: {
|
|
823
|
+
readonly $ref: "#/$defs/VettingMethod";
|
|
824
|
+
};
|
|
825
|
+
readonly additionalProperties: {
|
|
826
|
+
readonly type: "integer";
|
|
827
|
+
readonly minimum: 0;
|
|
828
|
+
};
|
|
829
|
+
readonly description: "Per-method floors within `minStatements` — e.g. `{ \"inPerson\": 1 }`. Every method named MUST also be in `acceptedMethods`. Absent: no method floor.";
|
|
830
|
+
};
|
|
831
|
+
readonly acceptedMethods: {
|
|
832
|
+
readonly type: "array";
|
|
833
|
+
readonly minItems: 1;
|
|
834
|
+
readonly uniqueItems: true;
|
|
835
|
+
readonly items: {
|
|
836
|
+
readonly $ref: "#/$defs/VettingMethod";
|
|
837
|
+
};
|
|
838
|
+
readonly description: "Methods whose statements count at all.";
|
|
839
|
+
};
|
|
840
|
+
readonly acceptedDocumentClasses: {
|
|
841
|
+
readonly type: "array";
|
|
842
|
+
readonly minItems: 1;
|
|
843
|
+
readonly uniqueItems: true;
|
|
844
|
+
readonly items: {
|
|
845
|
+
readonly $ref: "#/$defs/VettingDocumentation";
|
|
846
|
+
};
|
|
847
|
+
readonly description: "Documentation a statement must have relied on in order to count. Absent — the expected case — means each vetter decides what documentation they accept, including none for prior acquaintance, and the community counts what they attest.";
|
|
848
|
+
};
|
|
849
|
+
readonly requiredClaims: {
|
|
850
|
+
readonly type: "array";
|
|
851
|
+
readonly uniqueItems: true;
|
|
852
|
+
readonly items: {
|
|
853
|
+
readonly $ref: "#/$defs/ClaimType";
|
|
854
|
+
};
|
|
855
|
+
readonly description: "Claim types the applicant's Vetting Card must carry, which the identity commitment is computed over, and which a counted statement must list as verified. Absent: none.";
|
|
856
|
+
};
|
|
857
|
+
readonly optionalClaims: {
|
|
858
|
+
readonly type: "array";
|
|
859
|
+
readonly uniqueItems: true;
|
|
860
|
+
readonly items: {
|
|
861
|
+
readonly $ref: "#/$defs/ClaimType";
|
|
862
|
+
};
|
|
863
|
+
readonly description: "Claim types an applicant MAY add to the card and a vetter MAY verify. They never affect whether a statement counts.";
|
|
864
|
+
};
|
|
865
|
+
readonly maxStatementAge: {
|
|
866
|
+
readonly $ref: "#/$defs/Duration";
|
|
867
|
+
};
|
|
868
|
+
readonly eligibleVetters: {
|
|
869
|
+
readonly type: "object";
|
|
870
|
+
readonly additionalProperties: false;
|
|
871
|
+
readonly required: readonly ["role"];
|
|
872
|
+
readonly properties: {
|
|
873
|
+
readonly role: {
|
|
874
|
+
readonly type: "string";
|
|
875
|
+
readonly minLength: 1;
|
|
876
|
+
readonly maxLength: 128;
|
|
877
|
+
readonly pattern: "^[a-zA-Z][a-zA-Z0-9_-]*$";
|
|
878
|
+
readonly description: "The role a statement's issuer must hold, matched as the action `role:<role>` in a Verifiable Authority Credential (`AuthorityCredential`) the community issued to that issuer, whose `authority.scope` is the community's DID (see `vtc/vetting/vetters/grant/0.1`). A statement counts only if its issuer holds such a credential.";
|
|
879
|
+
};
|
|
880
|
+
};
|
|
881
|
+
readonly description: "How a vetter's eligibility is established.";
|
|
882
|
+
};
|
|
883
|
+
readonly independence: {
|
|
884
|
+
readonly type: "object";
|
|
885
|
+
readonly additionalProperties: false;
|
|
886
|
+
readonly properties: {
|
|
887
|
+
readonly maxByDeclaredRelationship: {
|
|
888
|
+
readonly type: "object";
|
|
889
|
+
readonly propertyNames: {
|
|
890
|
+
readonly $ref: "#/$defs/VettingRelationship";
|
|
891
|
+
};
|
|
892
|
+
readonly additionalProperties: {
|
|
893
|
+
readonly type: "integer";
|
|
894
|
+
readonly minimum: 0;
|
|
895
|
+
};
|
|
896
|
+
readonly description: "The most counted statements that may come from vetters declaring each relationship — e.g. `{ \"family\": 0 }`.";
|
|
897
|
+
};
|
|
898
|
+
readonly requireConsistentIdentityCommitment: {
|
|
899
|
+
readonly type: "boolean";
|
|
900
|
+
readonly description: "When true, every counted statement must carry the same identity commitment — all vetters verified the same claimed identity. Absent: false.";
|
|
901
|
+
};
|
|
902
|
+
};
|
|
903
|
+
readonly description: "Caps on how much evidence may come from people close to the applicant. Absent: no caps.";
|
|
904
|
+
};
|
|
905
|
+
readonly invitation: {
|
|
906
|
+
readonly type: "string";
|
|
907
|
+
readonly enum: readonly ["required", "optional", "none"];
|
|
908
|
+
readonly description: "Whether an invitation credential must accompany the statements at submission (`required`), may (`optional`), or plays no part (`none`). Absent: the presentation-definition alone governs.";
|
|
909
|
+
};
|
|
910
|
+
readonly decisionSla: {
|
|
911
|
+
readonly $ref: "#/$defs/Duration";
|
|
912
|
+
};
|
|
913
|
+
readonly requirementsGrace: {
|
|
914
|
+
readonly $ref: "#/$defs/Duration";
|
|
915
|
+
};
|
|
916
|
+
readonly governanceFrameworkUrl: {
|
|
917
|
+
readonly type: "string";
|
|
918
|
+
readonly format: "uri";
|
|
919
|
+
readonly pattern: "^https://";
|
|
920
|
+
readonly maxLength: 2048;
|
|
921
|
+
readonly description: "Where the community's vetting governance — including the attestation text vetters sign — is published.";
|
|
922
|
+
};
|
|
923
|
+
readonly ext: {
|
|
924
|
+
readonly $ref: "#/$defs/Ext";
|
|
925
|
+
};
|
|
926
|
+
readonly extCritical: {
|
|
927
|
+
readonly $ref: "#/$defs/ExtCritical";
|
|
928
|
+
};
|
|
929
|
+
};
|
|
930
|
+
};
|
|
931
|
+
readonly Duration: {
|
|
932
|
+
readonly title: "Duration";
|
|
933
|
+
readonly type: "string";
|
|
934
|
+
readonly maxLength: 32;
|
|
935
|
+
readonly pattern: "^P(([0-9]+W)?([0-9]+D)?T([0-9]+H([0-9]+M)?([0-9]+S)?|[0-9]+M([0-9]+S)?|[0-9]+S)|[0-9]+W([0-9]+D)?|[0-9]+D)$";
|
|
936
|
+
readonly description: "An ISO 8601 duration in weeks, days, hours, minutes and seconds only (e.g. `P120D`, `P2W`, `P1DT12H`, `PT15M`). Years and months are refused: their length depends on the calendar, and an age limit that means different things on different days is not a limit.";
|
|
937
|
+
};
|
|
938
|
+
readonly ExtCritical: {
|
|
939
|
+
readonly title: "ExtCritical";
|
|
940
|
+
readonly description: "Names the `ext` namespaces a consumer MUST understand or refuse, per SPEC.md §4.5.1.\n\nEvery entry MUST be an immediate key of the sibling `ext` object at the same level; an entry naming an absent namespace is non-conforming and the consumer rejects the document with `malformedRequest`. A consumer that does not recognize a namespace named here MUST NOT process the document as though the namespace were absent, and rejects it with `unsupportedExtension` — the exception to the rule that unrecognized namespaces are ignored.\n\nA producer marks a namespace only where the document's meaning depends on it. Marking one that merely carries a hint or an annotation turns every consumer that has not implemented it into a failure where it would otherwise have interoperated. JSON Schema cannot check either of those rules: that an entry names a present namespace is checkable only against the sibling `ext`, and whether a namespace is load-bearing is not a schema question at all. Both are consumer-side checks.";
|
|
941
|
+
readonly type: "array";
|
|
942
|
+
readonly minItems: 1;
|
|
943
|
+
readonly uniqueItems: true;
|
|
944
|
+
readonly items: {
|
|
945
|
+
readonly type: "string";
|
|
946
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
947
|
+
};
|
|
948
|
+
readonly examples: readonly [readonly ["org.openvtc.hidden-vetting"]];
|
|
949
|
+
};
|
|
950
|
+
readonly VettingRelationship: {
|
|
951
|
+
readonly title: "VettingRelationship";
|
|
952
|
+
readonly type: "string";
|
|
953
|
+
readonly enum: readonly ["none", "communityColleague", "sameEmployer", "family", "otherPersonal"];
|
|
954
|
+
readonly description: "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.";
|
|
955
|
+
};
|
|
956
|
+
readonly ClaimType: {
|
|
957
|
+
readonly title: "ClaimType";
|
|
958
|
+
readonly description: "The vocabulary token naming what a value IS — `name.legal`, `phone.mobile`, `address.postal`, `person.birthDate`. Dotted, most-general segment first, so that a consumer with no knowledge of the specific token can still group by its prefix.\n\nThe token is the maintainer's own; no external vocabulary is primary. External vocabularies (vCard/jCard, OIDC standard claims, schema.org) are mappings applied at PRESENTATION by a renderer, not at rest, so that a query written in any of them can be matched without the store having to live inside any one of them.\n\nThe `x:` prefix is an open extension namespace and is not decoration. The closest prior art — Windows CardSpace's self-issued card — supported exactly fifteen predefined claim types with no extensibility, and that is the specific way it failed the requirement a holder actually has. An `x:` attribute stores, composes, binds and discloses exactly like a known one; it renders generically and matches only an explicit query.";
|
|
959
|
+
readonly type: "string";
|
|
960
|
+
readonly minLength: 1;
|
|
961
|
+
readonly maxLength: 128;
|
|
962
|
+
readonly pattern: "^(x:)?[a-z][a-zA-Z0-9]*(\\.[a-z][a-zA-Z0-9]*)*$";
|
|
963
|
+
};
|
|
964
|
+
readonly VettingDocumentation: {
|
|
965
|
+
readonly title: "VettingDocumentation";
|
|
966
|
+
readonly type: "string";
|
|
967
|
+
readonly minLength: 1;
|
|
968
|
+
readonly maxLength: 64;
|
|
969
|
+
readonly pattern: "^[a-z][a-zA-Z0-9]*$";
|
|
970
|
+
readonly description: "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.";
|
|
971
|
+
};
|
|
972
|
+
readonly VettingMethod: {
|
|
973
|
+
readonly title: "VettingMethod";
|
|
974
|
+
readonly type: "string";
|
|
975
|
+
readonly enum: readonly ["inPerson", "video", "priorAcquaintance"];
|
|
976
|
+
readonly description: "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.";
|
|
977
|
+
};
|
|
978
|
+
readonly CriterionDescription: {
|
|
979
|
+
readonly title: "CriterionDescription";
|
|
980
|
+
readonly type: "string";
|
|
981
|
+
readonly maxLength: 1024;
|
|
982
|
+
readonly description: "Plain-language summary of the criterion, written by the registering administrator. Published to prospective applicants in the join manifest, and used as the `purpose` of the credential-exchange/query a join sends when the criterion has a `query` — so it is read by applicants and their agents, not only by administrators. Untrusted as a statement of the rule: where it and the criterion's other members disagree, those govern.";
|
|
983
|
+
};
|
|
984
|
+
readonly CredentialIssuers: {
|
|
985
|
+
readonly title: "CredentialIssuers";
|
|
986
|
+
readonly type: "string";
|
|
987
|
+
readonly enum: readonly ["any", "community", "recognised"];
|
|
988
|
+
readonly description: "Whose credentials meet the criterion's `query`. `community`: only credentials this community issued. `recognised`: credentials this community issued, or issued by a community it recognises (vtc/recognition/check). `any`: any issuer whose credential verifies — the query's own constraints, including DCQL `trusted_authorities`, are then all that limits it. A credential that does not verify (signature, validity window, revocation) never meets a criterion, whichever value is chosen.";
|
|
989
|
+
};
|
|
990
|
+
readonly DcqlQuery: {
|
|
991
|
+
readonly title: "DcqlQuery";
|
|
992
|
+
readonly type: "object";
|
|
993
|
+
readonly additionalProperties: true;
|
|
994
|
+
readonly description: "An OpenID for Verifiable Presentations DCQL query, carried verbatim: per-credential `format`, `meta` type selector (`vct_values`) and requested `claims`. Defined by OID4VP and not re-specified here; snake_case member names are DCQL's own. The community parses it as DCQL and checks every type it references against the registry.";
|
|
995
|
+
};
|
|
996
|
+
readonly Admission: {
|
|
997
|
+
readonly title: "Admission";
|
|
998
|
+
readonly type: "string";
|
|
999
|
+
readonly enum: readonly ["automatic", "review"];
|
|
1000
|
+
readonly description: "How the community decides a submission that meets the criterion. `automatic`: it admits the applicant without a person deciding. `review`: it refers the submission to an administrator, who admits or rejects it; meeting the criterion never admits by itself. Which a criterion uses is the community's policy; this definition prefers neither.";
|
|
1001
|
+
};
|
|
1002
|
+
readonly AcceptsCriterionId: {
|
|
1003
|
+
readonly title: "AcceptsCriterionId";
|
|
1004
|
+
readonly type: "string";
|
|
1005
|
+
readonly minLength: 1;
|
|
1006
|
+
readonly maxLength: 128;
|
|
1007
|
+
readonly description: "An Accepts criterion's identifier, chosen by the registering administrator — a ceremony purpose or a named manifest criterion, e.g. `membership`. Compared as an exact string after surrounding whitespace is trimmed. Bounded at 128 characters, the bound vtc/join-requests/manifest/0.2 places on the criterion `id` it publishes.";
|
|
1008
|
+
};
|
|
1009
|
+
};
|
|
1010
|
+
};
|
|
1011
|
+
};
|
|
1012
|
+
/**
|
|
1013
|
+
* SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
|
|
1014
|
+
* tracks the *issuer* party's requirement because a response swaps the
|
|
1015
|
+
* parties (§7.3 item 5).
|
|
1016
|
+
*/
|
|
1017
|
+
export declare const RESPONSE_SPEC: {
|
|
1018
|
+
readonly typeUri: "https://trusttasks.org/spec/vtc/schemas/accepts/list/0.2#response";
|
|
1019
|
+
readonly isBearer: false;
|
|
1020
|
+
readonly isProofRequired: false;
|
|
1021
|
+
readonly isRecipientRequired: true;
|
|
1022
|
+
readonly isIssuedAtRequired: false;
|
|
1023
|
+
readonly payloadSchema: {
|
|
1024
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
1025
|
+
readonly $ref: "#/$defs/Response";
|
|
1026
|
+
readonly $defs: {
|
|
1027
|
+
readonly Response: {
|
|
1028
|
+
readonly $anchor: "response";
|
|
1029
|
+
readonly title: "VTC Schemas — Accepts — List — response payload";
|
|
1030
|
+
readonly type: "object";
|
|
1031
|
+
readonly additionalProperties: false;
|
|
1032
|
+
readonly required: readonly ["items"];
|
|
1033
|
+
readonly properties: {
|
|
1034
|
+
readonly items: {
|
|
1035
|
+
readonly type: "array";
|
|
1036
|
+
readonly maxItems: 50;
|
|
1037
|
+
readonly items: {
|
|
1038
|
+
readonly $ref: "#/$defs/AcceptsCriterion";
|
|
1039
|
+
};
|
|
1040
|
+
};
|
|
1041
|
+
readonly nextCursor: {
|
|
1042
|
+
readonly type: "string";
|
|
1043
|
+
readonly minLength: 1;
|
|
1044
|
+
readonly maxLength: 1024;
|
|
1045
|
+
readonly description: "Present when more criteria remain; pass it as `cursor`.";
|
|
1046
|
+
};
|
|
1047
|
+
readonly ext: {
|
|
1048
|
+
readonly $ref: "#/$defs/Ext";
|
|
1049
|
+
};
|
|
1050
|
+
};
|
|
1051
|
+
};
|
|
1052
|
+
readonly Ext: {
|
|
1053
|
+
readonly title: "Ext";
|
|
1054
|
+
readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
|
|
1055
|
+
readonly type: "object";
|
|
1056
|
+
readonly minProperties: 1;
|
|
1057
|
+
readonly additionalProperties: true;
|
|
1058
|
+
readonly propertyNames: {
|
|
1059
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
1060
|
+
};
|
|
1061
|
+
};
|
|
1062
|
+
readonly AcceptsCriterion: {
|
|
1063
|
+
readonly title: "AcceptsCriterion";
|
|
1064
|
+
readonly type: "object";
|
|
1065
|
+
readonly additionalProperties: false;
|
|
1066
|
+
readonly required: readonly ["id", "admission", "createdAt", "createdByDid"];
|
|
1067
|
+
readonly dependentRequired: {
|
|
1068
|
+
readonly query: readonly ["credentialIssuers"];
|
|
1069
|
+
readonly credentialIssuers: readonly ["query"];
|
|
1070
|
+
};
|
|
1071
|
+
readonly description: "One way into the community: what an applicant must present, and how a submission that presents it is decided. Every requirement it states must be met; requirements it does not state are not requirements. A criterion stating none is met by every submission. A community's criteria are alternatives: a submission is decided under the one it names. What vtc/join-requests/manifest/0.3 publishes to applicants as a `Criterion` is derived from this.";
|
|
1072
|
+
readonly properties: {
|
|
1073
|
+
readonly id: {
|
|
1074
|
+
readonly $ref: "#/$defs/AcceptsCriterionId";
|
|
1075
|
+
};
|
|
1076
|
+
readonly admission: {
|
|
1077
|
+
readonly $ref: "#/$defs/Admission";
|
|
1078
|
+
};
|
|
1079
|
+
readonly query: {
|
|
1080
|
+
readonly $ref: "#/$defs/DcqlQuery";
|
|
1081
|
+
readonly description: "The credentials an applicant must present, as a DCQL query. Absent: the criterion requires no credential.";
|
|
1082
|
+
};
|
|
1083
|
+
readonly credentialIssuers: {
|
|
1084
|
+
readonly $ref: "#/$defs/CredentialIssuers";
|
|
1085
|
+
readonly description: "Whose credentials meet `query`. Present exactly when `query` is.";
|
|
1086
|
+
};
|
|
1087
|
+
readonly invitationRequired: {
|
|
1088
|
+
readonly type: "boolean";
|
|
1089
|
+
readonly description: "True: a submission meets the criterion only when it carries a valid, unconsumed invitation credential this community issued to the applicant. Absent or false: an invitation plays no part in meeting this criterion (another criterion may still require one).";
|
|
1090
|
+
};
|
|
1091
|
+
readonly description: {
|
|
1092
|
+
readonly $ref: "#/$defs/CriterionDescription";
|
|
1093
|
+
};
|
|
1094
|
+
readonly vetting: {
|
|
1095
|
+
readonly $ref: "#/$defs/VettingRequirements";
|
|
1096
|
+
};
|
|
1097
|
+
readonly createdAt: {
|
|
1098
|
+
readonly type: "string";
|
|
1099
|
+
readonly format: "date-time";
|
|
1100
|
+
readonly description: "When this criterion was last registered. Registering an existing id replaces it.";
|
|
1101
|
+
};
|
|
1102
|
+
readonly createdByDid: {
|
|
1103
|
+
readonly type: "string";
|
|
1104
|
+
readonly pattern: "^did:";
|
|
1105
|
+
readonly maxLength: 2048;
|
|
1106
|
+
readonly description: "The administrator who last registered the criterion.";
|
|
1107
|
+
};
|
|
1108
|
+
};
|
|
1109
|
+
};
|
|
1110
|
+
readonly VettingRequirements: {
|
|
1111
|
+
readonly title: "VettingRequirements";
|
|
1112
|
+
readonly type: "object";
|
|
1113
|
+
readonly additionalProperties: true;
|
|
1114
|
+
readonly required: readonly ["version", "statementType", "minStatements", "acceptedMethods", "eligibleVetters"];
|
|
1115
|
+
readonly description: "What identity-vetting evidence a criterion needs, beyond what a presentation-definition can express: distinct eligible vetters, per-method floors, independence caps. Every number is the community's own policy. This schema supplies no defaults — an absent optional member means the community imposes no constraint of that kind, never that some protocol value applies. Deliberately open: a consumer MUST ignore members it does not recognise, so a community publishing a newer shape does not make an older client unable to read the rest. Durations: `maxStatementAge` — a statement older than this at decision time does not count (absent: no limit beyond the statement's own validity); `decisionSla` — how long after submission the community undertakes to decide, including on a referred application; `requirementsGrace` — how long an application started under an earlier `requirementsDigest` is still evaluated under that version.";
|
|
1116
|
+
readonly properties: {
|
|
1117
|
+
readonly version: {
|
|
1118
|
+
readonly type: "string";
|
|
1119
|
+
readonly pattern: "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$";
|
|
1120
|
+
readonly description: "Version of this requirements object's shape. `0.1` for the members defined here.";
|
|
1121
|
+
};
|
|
1122
|
+
readonly statementType: {
|
|
1123
|
+
readonly type: "string";
|
|
1124
|
+
readonly format: "uri";
|
|
1125
|
+
readonly minLength: 1;
|
|
1126
|
+
readonly maxLength: 512;
|
|
1127
|
+
readonly description: "The predicate IRI a counted vetting statement carries in `credentialSubject.predicate` — `https://registry.trustoverip.org/dtg/vsc/vetted/1`, the DTG VSC registry's identity-vetting predicate, or a predicate in a namespace the community controls — registered as one the community accepts via vtc/endorsement-types/register. A statement under any other predicate does not count.";
|
|
1128
|
+
};
|
|
1129
|
+
readonly minStatements: {
|
|
1130
|
+
readonly type: "integer";
|
|
1131
|
+
readonly minimum: 1;
|
|
1132
|
+
readonly description: "How many counted statements are needed, counting each vetter once however many DIDs they hold.";
|
|
1133
|
+
};
|
|
1134
|
+
readonly minByMethod: {
|
|
1135
|
+
readonly type: "object";
|
|
1136
|
+
readonly propertyNames: {
|
|
1137
|
+
readonly $ref: "#/$defs/VettingMethod";
|
|
1138
|
+
};
|
|
1139
|
+
readonly additionalProperties: {
|
|
1140
|
+
readonly type: "integer";
|
|
1141
|
+
readonly minimum: 0;
|
|
1142
|
+
};
|
|
1143
|
+
readonly description: "Per-method floors within `minStatements` — e.g. `{ \"inPerson\": 1 }`. Every method named MUST also be in `acceptedMethods`. Absent: no method floor.";
|
|
1144
|
+
};
|
|
1145
|
+
readonly acceptedMethods: {
|
|
1146
|
+
readonly type: "array";
|
|
1147
|
+
readonly minItems: 1;
|
|
1148
|
+
readonly uniqueItems: true;
|
|
1149
|
+
readonly items: {
|
|
1150
|
+
readonly $ref: "#/$defs/VettingMethod";
|
|
1151
|
+
};
|
|
1152
|
+
readonly description: "Methods whose statements count at all.";
|
|
1153
|
+
};
|
|
1154
|
+
readonly acceptedDocumentClasses: {
|
|
1155
|
+
readonly type: "array";
|
|
1156
|
+
readonly minItems: 1;
|
|
1157
|
+
readonly uniqueItems: true;
|
|
1158
|
+
readonly items: {
|
|
1159
|
+
readonly $ref: "#/$defs/VettingDocumentation";
|
|
1160
|
+
};
|
|
1161
|
+
readonly description: "Documentation a statement must have relied on in order to count. Absent — the expected case — means each vetter decides what documentation they accept, including none for prior acquaintance, and the community counts what they attest.";
|
|
1162
|
+
};
|
|
1163
|
+
readonly requiredClaims: {
|
|
1164
|
+
readonly type: "array";
|
|
1165
|
+
readonly uniqueItems: true;
|
|
1166
|
+
readonly items: {
|
|
1167
|
+
readonly $ref: "#/$defs/ClaimType";
|
|
1168
|
+
};
|
|
1169
|
+
readonly description: "Claim types the applicant's Vetting Card must carry, which the identity commitment is computed over, and which a counted statement must list as verified. Absent: none.";
|
|
1170
|
+
};
|
|
1171
|
+
readonly optionalClaims: {
|
|
1172
|
+
readonly type: "array";
|
|
1173
|
+
readonly uniqueItems: true;
|
|
1174
|
+
readonly items: {
|
|
1175
|
+
readonly $ref: "#/$defs/ClaimType";
|
|
1176
|
+
};
|
|
1177
|
+
readonly description: "Claim types an applicant MAY add to the card and a vetter MAY verify. They never affect whether a statement counts.";
|
|
1178
|
+
};
|
|
1179
|
+
readonly maxStatementAge: {
|
|
1180
|
+
readonly $ref: "#/$defs/Duration";
|
|
1181
|
+
};
|
|
1182
|
+
readonly eligibleVetters: {
|
|
1183
|
+
readonly type: "object";
|
|
1184
|
+
readonly additionalProperties: false;
|
|
1185
|
+
readonly required: readonly ["role"];
|
|
1186
|
+
readonly properties: {
|
|
1187
|
+
readonly role: {
|
|
1188
|
+
readonly type: "string";
|
|
1189
|
+
readonly minLength: 1;
|
|
1190
|
+
readonly maxLength: 128;
|
|
1191
|
+
readonly pattern: "^[a-zA-Z][a-zA-Z0-9_-]*$";
|
|
1192
|
+
readonly description: "The role a statement's issuer must hold, matched as the action `role:<role>` in a Verifiable Authority Credential (`AuthorityCredential`) the community issued to that issuer, whose `authority.scope` is the community's DID (see `vtc/vetting/vetters/grant/0.1`). A statement counts only if its issuer holds such a credential.";
|
|
1193
|
+
};
|
|
1194
|
+
};
|
|
1195
|
+
readonly description: "How a vetter's eligibility is established.";
|
|
1196
|
+
};
|
|
1197
|
+
readonly independence: {
|
|
1198
|
+
readonly type: "object";
|
|
1199
|
+
readonly additionalProperties: false;
|
|
1200
|
+
readonly properties: {
|
|
1201
|
+
readonly maxByDeclaredRelationship: {
|
|
1202
|
+
readonly type: "object";
|
|
1203
|
+
readonly propertyNames: {
|
|
1204
|
+
readonly $ref: "#/$defs/VettingRelationship";
|
|
1205
|
+
};
|
|
1206
|
+
readonly additionalProperties: {
|
|
1207
|
+
readonly type: "integer";
|
|
1208
|
+
readonly minimum: 0;
|
|
1209
|
+
};
|
|
1210
|
+
readonly description: "The most counted statements that may come from vetters declaring each relationship — e.g. `{ \"family\": 0 }`.";
|
|
1211
|
+
};
|
|
1212
|
+
readonly requireConsistentIdentityCommitment: {
|
|
1213
|
+
readonly type: "boolean";
|
|
1214
|
+
readonly description: "When true, every counted statement must carry the same identity commitment — all vetters verified the same claimed identity. Absent: false.";
|
|
1215
|
+
};
|
|
1216
|
+
};
|
|
1217
|
+
readonly description: "Caps on how much evidence may come from people close to the applicant. Absent: no caps.";
|
|
1218
|
+
};
|
|
1219
|
+
readonly invitation: {
|
|
1220
|
+
readonly type: "string";
|
|
1221
|
+
readonly enum: readonly ["required", "optional", "none"];
|
|
1222
|
+
readonly description: "Whether an invitation credential must accompany the statements at submission (`required`), may (`optional`), or plays no part (`none`). Absent: the presentation-definition alone governs.";
|
|
1223
|
+
};
|
|
1224
|
+
readonly decisionSla: {
|
|
1225
|
+
readonly $ref: "#/$defs/Duration";
|
|
1226
|
+
};
|
|
1227
|
+
readonly requirementsGrace: {
|
|
1228
|
+
readonly $ref: "#/$defs/Duration";
|
|
1229
|
+
};
|
|
1230
|
+
readonly governanceFrameworkUrl: {
|
|
1231
|
+
readonly type: "string";
|
|
1232
|
+
readonly format: "uri";
|
|
1233
|
+
readonly pattern: "^https://";
|
|
1234
|
+
readonly maxLength: 2048;
|
|
1235
|
+
readonly description: "Where the community's vetting governance — including the attestation text vetters sign — is published.";
|
|
1236
|
+
};
|
|
1237
|
+
readonly ext: {
|
|
1238
|
+
readonly $ref: "#/$defs/Ext";
|
|
1239
|
+
};
|
|
1240
|
+
readonly extCritical: {
|
|
1241
|
+
readonly $ref: "#/$defs/ExtCritical";
|
|
1242
|
+
};
|
|
1243
|
+
};
|
|
1244
|
+
};
|
|
1245
|
+
readonly Duration: {
|
|
1246
|
+
readonly title: "Duration";
|
|
1247
|
+
readonly type: "string";
|
|
1248
|
+
readonly maxLength: 32;
|
|
1249
|
+
readonly pattern: "^P(([0-9]+W)?([0-9]+D)?T([0-9]+H([0-9]+M)?([0-9]+S)?|[0-9]+M([0-9]+S)?|[0-9]+S)|[0-9]+W([0-9]+D)?|[0-9]+D)$";
|
|
1250
|
+
readonly description: "An ISO 8601 duration in weeks, days, hours, minutes and seconds only (e.g. `P120D`, `P2W`, `P1DT12H`, `PT15M`). Years and months are refused: their length depends on the calendar, and an age limit that means different things on different days is not a limit.";
|
|
1251
|
+
};
|
|
1252
|
+
readonly ExtCritical: {
|
|
1253
|
+
readonly title: "ExtCritical";
|
|
1254
|
+
readonly description: "Names the `ext` namespaces a consumer MUST understand or refuse, per SPEC.md §4.5.1.\n\nEvery entry MUST be an immediate key of the sibling `ext` object at the same level; an entry naming an absent namespace is non-conforming and the consumer rejects the document with `malformedRequest`. A consumer that does not recognize a namespace named here MUST NOT process the document as though the namespace were absent, and rejects it with `unsupportedExtension` — the exception to the rule that unrecognized namespaces are ignored.\n\nA producer marks a namespace only where the document's meaning depends on it. Marking one that merely carries a hint or an annotation turns every consumer that has not implemented it into a failure where it would otherwise have interoperated. JSON Schema cannot check either of those rules: that an entry names a present namespace is checkable only against the sibling `ext`, and whether a namespace is load-bearing is not a schema question at all. Both are consumer-side checks.";
|
|
1255
|
+
readonly type: "array";
|
|
1256
|
+
readonly minItems: 1;
|
|
1257
|
+
readonly uniqueItems: true;
|
|
1258
|
+
readonly items: {
|
|
1259
|
+
readonly type: "string";
|
|
1260
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
1261
|
+
};
|
|
1262
|
+
readonly examples: readonly [readonly ["org.openvtc.hidden-vetting"]];
|
|
1263
|
+
};
|
|
1264
|
+
readonly VettingRelationship: {
|
|
1265
|
+
readonly title: "VettingRelationship";
|
|
1266
|
+
readonly type: "string";
|
|
1267
|
+
readonly enum: readonly ["none", "communityColleague", "sameEmployer", "family", "otherPersonal"];
|
|
1268
|
+
readonly description: "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.";
|
|
1269
|
+
};
|
|
1270
|
+
readonly ClaimType: {
|
|
1271
|
+
readonly title: "ClaimType";
|
|
1272
|
+
readonly description: "The vocabulary token naming what a value IS — `name.legal`, `phone.mobile`, `address.postal`, `person.birthDate`. Dotted, most-general segment first, so that a consumer with no knowledge of the specific token can still group by its prefix.\n\nThe token is the maintainer's own; no external vocabulary is primary. External vocabularies (vCard/jCard, OIDC standard claims, schema.org) are mappings applied at PRESENTATION by a renderer, not at rest, so that a query written in any of them can be matched without the store having to live inside any one of them.\n\nThe `x:` prefix is an open extension namespace and is not decoration. The closest prior art — Windows CardSpace's self-issued card — supported exactly fifteen predefined claim types with no extensibility, and that is the specific way it failed the requirement a holder actually has. An `x:` attribute stores, composes, binds and discloses exactly like a known one; it renders generically and matches only an explicit query.";
|
|
1273
|
+
readonly type: "string";
|
|
1274
|
+
readonly minLength: 1;
|
|
1275
|
+
readonly maxLength: 128;
|
|
1276
|
+
readonly pattern: "^(x:)?[a-z][a-zA-Z0-9]*(\\.[a-z][a-zA-Z0-9]*)*$";
|
|
1277
|
+
};
|
|
1278
|
+
readonly VettingDocumentation: {
|
|
1279
|
+
readonly title: "VettingDocumentation";
|
|
1280
|
+
readonly type: "string";
|
|
1281
|
+
readonly minLength: 1;
|
|
1282
|
+
readonly maxLength: 64;
|
|
1283
|
+
readonly pattern: "^[a-z][a-zA-Z0-9]*$";
|
|
1284
|
+
readonly description: "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.";
|
|
1285
|
+
};
|
|
1286
|
+
readonly VettingMethod: {
|
|
1287
|
+
readonly title: "VettingMethod";
|
|
1288
|
+
readonly type: "string";
|
|
1289
|
+
readonly enum: readonly ["inPerson", "video", "priorAcquaintance"];
|
|
1290
|
+
readonly description: "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.";
|
|
1291
|
+
};
|
|
1292
|
+
readonly CriterionDescription: {
|
|
1293
|
+
readonly title: "CriterionDescription";
|
|
1294
|
+
readonly type: "string";
|
|
1295
|
+
readonly maxLength: 1024;
|
|
1296
|
+
readonly description: "Plain-language summary of the criterion, written by the registering administrator. Published to prospective applicants in the join manifest, and used as the `purpose` of the credential-exchange/query a join sends when the criterion has a `query` — so it is read by applicants and their agents, not only by administrators. Untrusted as a statement of the rule: where it and the criterion's other members disagree, those govern.";
|
|
1297
|
+
};
|
|
1298
|
+
readonly CredentialIssuers: {
|
|
1299
|
+
readonly title: "CredentialIssuers";
|
|
1300
|
+
readonly type: "string";
|
|
1301
|
+
readonly enum: readonly ["any", "community", "recognised"];
|
|
1302
|
+
readonly description: "Whose credentials meet the criterion's `query`. `community`: only credentials this community issued. `recognised`: credentials this community issued, or issued by a community it recognises (vtc/recognition/check). `any`: any issuer whose credential verifies — the query's own constraints, including DCQL `trusted_authorities`, are then all that limits it. A credential that does not verify (signature, validity window, revocation) never meets a criterion, whichever value is chosen.";
|
|
1303
|
+
};
|
|
1304
|
+
readonly DcqlQuery: {
|
|
1305
|
+
readonly title: "DcqlQuery";
|
|
1306
|
+
readonly type: "object";
|
|
1307
|
+
readonly additionalProperties: true;
|
|
1308
|
+
readonly description: "An OpenID for Verifiable Presentations DCQL query, carried verbatim: per-credential `format`, `meta` type selector (`vct_values`) and requested `claims`. Defined by OID4VP and not re-specified here; snake_case member names are DCQL's own. The community parses it as DCQL and checks every type it references against the registry.";
|
|
1309
|
+
};
|
|
1310
|
+
readonly Admission: {
|
|
1311
|
+
readonly title: "Admission";
|
|
1312
|
+
readonly type: "string";
|
|
1313
|
+
readonly enum: readonly ["automatic", "review"];
|
|
1314
|
+
readonly description: "How the community decides a submission that meets the criterion. `automatic`: it admits the applicant without a person deciding. `review`: it refers the submission to an administrator, who admits or rejects it; meeting the criterion never admits by itself. Which a criterion uses is the community's policy; this definition prefers neither.";
|
|
1315
|
+
};
|
|
1316
|
+
readonly AcceptsCriterionId: {
|
|
1317
|
+
readonly title: "AcceptsCriterionId";
|
|
1318
|
+
readonly type: "string";
|
|
1319
|
+
readonly minLength: 1;
|
|
1320
|
+
readonly maxLength: 128;
|
|
1321
|
+
readonly description: "An Accepts criterion's identifier, chosen by the registering administrator — a ceremony purpose or a named manifest criterion, e.g. `membership`. Compared as an exact string after surrounding whitespace is trimmed. Bounded at 128 characters, the bound vtc/join-requests/manifest/0.2 places on the criterion `id` it publishes.";
|
|
1322
|
+
};
|
|
1323
|
+
};
|
|
1324
|
+
};
|
|
1325
|
+
};
|
|
1326
|
+
//# sourceMappingURL=payload.d.ts.map
|