@openvtc/trust-tasks 0.25.0 → 0.25.2
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 +29 -0
- package/dist/_shared/components.d.ts +308 -2
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/device/list/0.1/payload.d.ts +4 -4
- package/dist/device/list/0.1/payload.d.ts.map +1 -1
- package/dist/device/list/0.1/payload.js +6 -2
- package/dist/device/list/0.1/payload.js.map +1 -1
- package/dist/device/list/0.2/payload.d.ts +4 -4
- package/dist/device/list/0.2/payload.d.ts.map +1 -1
- package/dist/device/list/0.2/payload.js +6 -2
- package/dist/device/list/0.2/payload.js.map +1 -1
- package/dist/device/register/0.1/payload.d.ts +4 -4
- package/dist/device/register/0.1/payload.d.ts.map +1 -1
- package/dist/device/register/0.1/payload.js +6 -2
- package/dist/device/register/0.1/payload.js.map +1 -1
- package/dist/device/register/0.2/payload.d.ts +4 -4
- package/dist/device/register/0.2/payload.d.ts.map +1 -1
- package/dist/device/register/0.2/payload.js +6 -2
- package/dist/device/register/0.2/payload.js.map +1 -1
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/provision/vta/_shared/0.1/vta.d.ts +16 -0
- package/dist/provision/vta/_shared/0.1/vta.d.ts.map +1 -0
- package/dist/provision/vta/_shared/0.1/vta.js +6 -0
- package/dist/provision/vta/_shared/0.1/vta.js.map +1 -0
- package/dist/provision/vta/claim/0.1/payload.d.ts +115 -0
- package/dist/provision/vta/claim/0.1/payload.d.ts.map +1 -0
- package/dist/provision/vta/claim/0.1/payload.js +69 -0
- package/dist/provision/vta/claim/0.1/payload.js.map +1 -0
- package/dist/provision/vta/redeem/0.1/payload.d.ts +371 -0
- package/dist/provision/vta/redeem/0.1/payload.d.ts.map +1 -0
- package/dist/provision/vta/redeem/0.1/payload.js +207 -0
- package/dist/provision/vta/redeem/0.1/payload.js.map +1 -0
- package/dist/vetting/_shared/0.1/hidden-vetting.d.ts +16 -0
- package/dist/vetting/_shared/0.1/hidden-vetting.d.ts.map +1 -0
- package/dist/vetting/_shared/0.1/hidden-vetting.js +6 -0
- package/dist/vetting/_shared/0.1/hidden-vetting.js.map +1 -0
- package/dist/vetting/attestation/0.1/payload.d.ts +94 -146
- package/dist/vetting/attestation/0.1/payload.d.ts.map +1 -1
- package/dist/vetting/attestation/0.1/payload.js +43 -43
- package/dist/vetting/attestation/0.1/payload.js.map +1 -1
- package/dist/vta/_shared/0.4/pcs-engine.d.ts +16 -0
- package/dist/vta/_shared/0.4/pcs-engine.d.ts.map +1 -0
- package/dist/vta/_shared/0.4/pcs-engine.js +6 -0
- package/dist/vta/_shared/0.4/pcs-engine.js.map +1 -0
- package/dist/vta/pcs/applications/create/0.1/payload.d.ts +1215 -0
- package/dist/vta/pcs/applications/create/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/applications/create/0.1/payload.js +724 -0
- package/dist/vta/pcs/applications/create/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/applications/delete/0.1/payload.d.ts +253 -0
- package/dist/vta/pcs/applications/delete/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/applications/delete/0.1/payload.js +146 -0
- package/dist/vta/pcs/applications/delete/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/applications/show/0.1/payload.d.ts +733 -0
- package/dist/vta/pcs/applications/show/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/applications/show/0.1/payload.js +450 -0
- package/dist/vta/pcs/applications/show/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/attest/0.1/payload.d.ts +1456 -0
- package/dist/vta/pcs/attest/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/attest/0.1/payload.js +876 -0
- package/dist/vta/pcs/attest/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/prove/0.1/payload.d.ts +1348 -0
- package/dist/vta/pcs/prove/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/prove/0.1/payload.js +804 -0
- package/dist/vta/pcs/prove/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/root-accept/0.1/payload.d.ts +1100 -0
- package/dist/vta/pcs/root-accept/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/root-accept/0.1/payload.js +634 -0
- package/dist/vta/pcs/root-accept/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/root-request/0.1/payload.d.ts +880 -0
- package/dist/vta/pcs/root-request/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/root-request/0.1/payload.js +496 -0
- package/dist/vta/pcs/root-request/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/tokens/abandon/0.1/payload.d.ts +612 -0
- package/dist/vta/pcs/tokens/abandon/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/tokens/abandon/0.1/payload.js +355 -0
- package/dist/vta/pcs/tokens/abandon/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/tokens/accept/0.1/payload.d.ts +1149 -0
- package/dist/vta/pcs/tokens/accept/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/tokens/accept/0.1/payload.js +657 -0
- package/dist/vta/pcs/tokens/accept/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/tokens/request/0.1/payload.d.ts +908 -0
- package/dist/vta/pcs/tokens/request/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/tokens/request/0.1/payload.js +508 -0
- package/dist/vta/pcs/tokens/request/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/verify-attestation/0.1/payload.d.ts +1423 -0
- package/dist/vta/pcs/verify-attestation/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/verify-attestation/0.1/payload.js +850 -0
- package/dist/vta/pcs/verify-attestation/0.1/payload.js.map +1 -0
- package/dist/vta/pcs/vetter/show/0.1/payload.d.ts +605 -0
- package/dist/vta/pcs/vetter/show/0.1/payload.d.ts.map +1 -0
- package/dist/vta/pcs/vetter/show/0.1/payload.js +351 -0
- package/dist/vta/pcs/vetter/show/0.1/payload.js.map +1 -0
- package/dist/vtc/vetting/hidden/publish/0.1/payload.d.ts +403 -486
- package/dist/vtc/vetting/hidden/publish/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/vetting/hidden/publish/0.1/payload.js +240 -240
- package/dist/vtc/vetting/hidden/publish/0.1/payload.js.map +1 -1
- package/dist/vtc/vetting/hidden/show/0.1/payload.d.ts +482 -565
- package/dist/vtc/vetting/hidden/show/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/vetting/hidden/show/0.1/payload.js +294 -294
- package/dist/vtc/vetting/hidden/show/0.1/payload.js.map +1 -1
- package/package.json +1 -1
- package/src/_shared/components.ts +312 -2
- package/src/device/list/0.1/payload.ts +6 -2
- package/src/device/list/0.2/payload.ts +6 -2
- package/src/device/register/0.1/payload.ts +6 -2
- package/src/device/register/0.2/payload.ts +6 -2
- package/src/index.ts +17 -0
- package/src/provision/vta/_shared/0.1/vta.ts +17 -0
- package/src/provision/vta/claim/0.1/payload.ts +88 -0
- package/src/provision/vta/redeem/0.1/payload.ts +255 -0
- package/src/vetting/_shared/0.1/hidden-vetting.ts +17 -0
- package/src/vetting/attestation/0.1/payload.ts +49 -101
- package/src/vta/_shared/0.4/pcs-engine.ts +17 -0
- package/src/vta/pcs/applications/create/0.1/payload.ts +768 -0
- package/src/vta/pcs/applications/delete/0.1/payload.ts +182 -0
- package/src/vta/pcs/applications/show/0.1/payload.ts +482 -0
- package/src/vta/pcs/attest/0.1/payload.ts +943 -0
- package/src/vta/pcs/prove/0.1/payload.ts +845 -0
- package/src/vta/pcs/root-accept/0.1/payload.ts +681 -0
- package/src/vta/pcs/root-request/0.1/payload.ts +559 -0
- package/src/vta/pcs/tokens/abandon/0.1/payload.ts +392 -0
- package/src/vta/pcs/tokens/accept/0.1/payload.ts +713 -0
- package/src/vta/pcs/tokens/request/0.1/payload.ts +581 -0
- package/src/vta/pcs/verify-attestation/0.1/payload.ts +888 -0
- package/src/vta/pcs/vetter/show/0.1/payload.ts +387 -0
- package/src/vtc/vetting/hidden/publish/0.1/payload.ts +247 -331
- package/src/vtc/vetting/hidden/show/0.1/payload.ts +295 -379
|
@@ -0,0 +1,1348 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
|
|
3
|
+
* Source: specs/vta/pcs/prove/0.1/payload.schema.json
|
|
4
|
+
*/
|
|
5
|
+
import type { AttestationToken, CommunityParameters, Ext, HiddenVettingSubmission, Multibase, PublishedConfig, PublishedEvent, StatementMeta, SubmittedStatement, TickLength, Tier } from "../../../../_shared/components.js";
|
|
6
|
+
/**
|
|
7
|
+
* A client asks its VTA for the zero-knowledge proof a hidden-vetting join submission carries, bound to the community's single-use challenge.
|
|
8
|
+
*/
|
|
9
|
+
export interface VTAPCSProvePayload {
|
|
10
|
+
applicationId: string;
|
|
11
|
+
/**
|
|
12
|
+
* The community's published hidden-vetting parameters, copied verbatim from its join manifest.
|
|
13
|
+
*/
|
|
14
|
+
parameters: CommunityParameters;
|
|
15
|
+
/**
|
|
16
|
+
* The requirements digest of the criterion the applicant applies under, as the manifest publishes it.
|
|
17
|
+
*/
|
|
18
|
+
requirementsDigest: string;
|
|
19
|
+
/**
|
|
20
|
+
* The community's single-use challenge.
|
|
21
|
+
*/
|
|
22
|
+
challenge: string;
|
|
23
|
+
ext?: Ext;
|
|
24
|
+
}
|
|
25
|
+
export interface VTAPCSProveResponsePayload {
|
|
26
|
+
hiddenVetting: HiddenVettingSubmission;
|
|
27
|
+
ext?: Ext;
|
|
28
|
+
}
|
|
29
|
+
/** Shared definitions this specification references, re-exported under the names it used to declare them with. */
|
|
30
|
+
export type { AttestationToken, CommunityParameters, Ext, HiddenVettingSubmission, Multibase, PublishedConfig, PublishedEvent, StatementMeta, SubmittedStatement, TickLength, Tier };
|
|
31
|
+
/** Trust Task type URI. */
|
|
32
|
+
export declare const TYPE_URI: "https://trusttasks.org/spec/vta/pcs/prove/0.1";
|
|
33
|
+
/** Stable alias for this specification's request payload shape. */
|
|
34
|
+
export type Payload = VTAPCSProvePayload;
|
|
35
|
+
/** Trust Task response type URI (request type URI + "#response"). */
|
|
36
|
+
export declare const RESPONSE_TYPE_URI: "https://trusttasks.org/spec/vta/pcs/prove/0.1#response";
|
|
37
|
+
/** Stable alias for this specification's success-response payload shape. */
|
|
38
|
+
export type Response = VTAPCSProveResponsePayload;
|
|
39
|
+
/**
|
|
40
|
+
* This specification's payload schema, as a value.
|
|
41
|
+
*
|
|
42
|
+
* SPEC.md §7.2 item 2 is performed against this. It is shipped as data
|
|
43
|
+
* rather than only as a `.json` file because TypeScript types are erased
|
|
44
|
+
* at runtime: without a schema a consumer has nothing to validate, and
|
|
45
|
+
* every REQUIRED payload member is optional in practice. Cross-file
|
|
46
|
+
* `$ref`s are already inlined, so it needs no resolver.
|
|
47
|
+
*/
|
|
48
|
+
export declare const PAYLOAD_SCHEMA: {
|
|
49
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
50
|
+
readonly $id: "https://trusttasks.org/spec/vta/pcs/prove/0.1";
|
|
51
|
+
readonly title: "VTA PCS — Prove — payload";
|
|
52
|
+
readonly description: "A client asks its VTA for the zero-knowledge proof a hidden-vetting join submission carries, bound to the community's single-use challenge.";
|
|
53
|
+
readonly type: "object";
|
|
54
|
+
readonly additionalProperties: false;
|
|
55
|
+
readonly required: readonly ["applicationId", "parameters", "requirementsDigest", "challenge"];
|
|
56
|
+
readonly properties: {
|
|
57
|
+
readonly applicationId: {
|
|
58
|
+
readonly type: "string";
|
|
59
|
+
readonly minLength: 1;
|
|
60
|
+
readonly maxLength: 128;
|
|
61
|
+
};
|
|
62
|
+
readonly parameters: {
|
|
63
|
+
readonly $ref: "#/$defs/CommunityParameters";
|
|
64
|
+
readonly description: "The community's published hidden-vetting parameters, copied verbatim from its join manifest.";
|
|
65
|
+
};
|
|
66
|
+
readonly requirementsDigest: {
|
|
67
|
+
readonly type: "string";
|
|
68
|
+
readonly minLength: 1;
|
|
69
|
+
readonly description: "The requirements digest of the criterion the applicant applies under, as the manifest publishes it.";
|
|
70
|
+
};
|
|
71
|
+
readonly challenge: {
|
|
72
|
+
readonly type: "string";
|
|
73
|
+
readonly minLength: 1;
|
|
74
|
+
readonly description: "The community's single-use challenge.";
|
|
75
|
+
};
|
|
76
|
+
readonly ext: {
|
|
77
|
+
readonly $ref: "#/$defs/Ext";
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
readonly $defs: {
|
|
81
|
+
readonly Response: {
|
|
82
|
+
readonly $anchor: "response";
|
|
83
|
+
readonly title: "VTA PCS — Prove — response payload";
|
|
84
|
+
readonly type: "object";
|
|
85
|
+
readonly additionalProperties: false;
|
|
86
|
+
readonly required: readonly ["hiddenVetting"];
|
|
87
|
+
readonly properties: {
|
|
88
|
+
readonly hiddenVetting: {
|
|
89
|
+
readonly $ref: "#/$defs/HiddenVettingSubmission";
|
|
90
|
+
};
|
|
91
|
+
readonly ext: {
|
|
92
|
+
readonly $ref: "#/$defs/Ext";
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
readonly Ext: {
|
|
97
|
+
readonly title: "Ext";
|
|
98
|
+
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.";
|
|
99
|
+
readonly type: "object";
|
|
100
|
+
readonly minProperties: 1;
|
|
101
|
+
readonly additionalProperties: true;
|
|
102
|
+
readonly propertyNames: {
|
|
103
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
readonly HiddenVettingSubmission: {
|
|
107
|
+
readonly title: "HiddenVettingSubmission";
|
|
108
|
+
readonly description: "The applicant's proof that distinct eligible vetters of the community vetted it, as a join submission carries it under `extensions.hiddenVetting`. Built by vta/pcs/prove, verified by the community.";
|
|
109
|
+
readonly type: "object";
|
|
110
|
+
readonly additionalProperties: false;
|
|
111
|
+
readonly required: readonly ["suite", "id", "joinDid", "idBinding", "challenge", "statements", "proof"];
|
|
112
|
+
readonly properties: {
|
|
113
|
+
readonly suite: {
|
|
114
|
+
readonly type: "string";
|
|
115
|
+
readonly minLength: 1;
|
|
116
|
+
readonly maxLength: 64;
|
|
117
|
+
readonly description: "The suite the proof is built in.";
|
|
118
|
+
};
|
|
119
|
+
readonly id: {
|
|
120
|
+
readonly $ref: "#/$defs/Multibase";
|
|
121
|
+
readonly description: "The applicant's PCS identifier for this application.";
|
|
122
|
+
};
|
|
123
|
+
readonly joinDid: {
|
|
124
|
+
readonly type: "string";
|
|
125
|
+
readonly minLength: 1;
|
|
126
|
+
readonly description: "The DID the applicant joins as. Bound to `id` by `idBinding`.";
|
|
127
|
+
};
|
|
128
|
+
readonly idBinding: {
|
|
129
|
+
readonly type: "string";
|
|
130
|
+
readonly pattern: "^[0-9a-f]{64}$";
|
|
131
|
+
readonly description: "The binding of `id` to `joinDid`, the community and the requirements digest, so a proof cannot be carried to another join: lowercase hex of a SHA-256 over the four values, each length-prefixed. The proof commits to it, and the community recomputes it.";
|
|
132
|
+
};
|
|
133
|
+
readonly challenge: {
|
|
134
|
+
readonly type: "string";
|
|
135
|
+
readonly minLength: 1;
|
|
136
|
+
readonly description: "The community's single-use challenge, as vtc/vetting/pcs-challenge issued it.";
|
|
137
|
+
};
|
|
138
|
+
readonly statements: {
|
|
139
|
+
readonly type: "array";
|
|
140
|
+
readonly minItems: 1;
|
|
141
|
+
readonly description: "One entry per attestation the proof carries, in the proof's order.";
|
|
142
|
+
readonly items: {
|
|
143
|
+
readonly $ref: "#/$defs/SubmittedStatement";
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
readonly proof: {
|
|
147
|
+
readonly $ref: "#/$defs/Multibase";
|
|
148
|
+
readonly description: "The issuance proof, which carries the attestations.";
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
readonly Multibase: {
|
|
153
|
+
readonly title: "Multibase";
|
|
154
|
+
readonly description: "A binary value, multibase base58btc over the suite's canonical encoding.";
|
|
155
|
+
readonly type: "string";
|
|
156
|
+
readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
|
|
157
|
+
};
|
|
158
|
+
readonly SubmittedStatement: {
|
|
159
|
+
readonly title: "SubmittedStatement";
|
|
160
|
+
readonly description: "One attestation as a submission carries it: its metadata and its token. The attestation itself is inside the submission's `proof`, in the same order.";
|
|
161
|
+
readonly type: "object";
|
|
162
|
+
readonly additionalProperties: false;
|
|
163
|
+
readonly required: readonly ["meta", "token"];
|
|
164
|
+
readonly properties: {
|
|
165
|
+
readonly meta: {
|
|
166
|
+
readonly $ref: "#/$defs/StatementMeta";
|
|
167
|
+
};
|
|
168
|
+
readonly token: {
|
|
169
|
+
readonly $ref: "#/$defs/AttestationToken";
|
|
170
|
+
};
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
readonly AttestationToken: {
|
|
174
|
+
readonly title: "AttestationToken";
|
|
175
|
+
readonly description: "The attestation token spent on one attestation: the label it was drawn under, the serial its spend reveals, and its re-randomised signature. The same members as `token` in vetting/attestation/0.1.";
|
|
176
|
+
readonly type: "object";
|
|
177
|
+
readonly additionalProperties: false;
|
|
178
|
+
readonly required: readonly ["label", "serial", "shown"];
|
|
179
|
+
readonly properties: {
|
|
180
|
+
readonly label: {
|
|
181
|
+
readonly type: "string";
|
|
182
|
+
readonly minLength: 1;
|
|
183
|
+
readonly maxLength: 128;
|
|
184
|
+
readonly description: "The token label spent under.";
|
|
185
|
+
};
|
|
186
|
+
readonly serial: {
|
|
187
|
+
readonly $ref: "#/$defs/Multibase";
|
|
188
|
+
readonly description: "The serial revealed by the spend.";
|
|
189
|
+
};
|
|
190
|
+
readonly shown: {
|
|
191
|
+
readonly $ref: "#/$defs/Multibase";
|
|
192
|
+
readonly description: "The re-randomised token signature, verifiable under the published token key.";
|
|
193
|
+
};
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
readonly StatementMeta: {
|
|
197
|
+
readonly type: "object";
|
|
198
|
+
readonly additionalProperties: false;
|
|
199
|
+
readonly required: readonly ["community", "requirementsDigest", "method", "claimsVerified", "livenessConfirmed", "declaredRelationship", "identityCommitment", "cardDigestMultibase", "validFrom", "validUntil", "tokenLabel", "tokenSerial"];
|
|
200
|
+
readonly description: "What a Vetting Statement would have said, minus its issuer.";
|
|
201
|
+
readonly properties: {
|
|
202
|
+
readonly community: {
|
|
203
|
+
readonly type: "string";
|
|
204
|
+
readonly minLength: 1;
|
|
205
|
+
readonly description: "The community this attestation is for. An attestation is not portable between communities.";
|
|
206
|
+
};
|
|
207
|
+
readonly requirementsDigest: {
|
|
208
|
+
readonly type: "string";
|
|
209
|
+
readonly minLength: 1;
|
|
210
|
+
readonly description: "The digest of the criterion's requirements as the vetter read them.";
|
|
211
|
+
};
|
|
212
|
+
readonly method: {
|
|
213
|
+
readonly type: "string";
|
|
214
|
+
readonly enum: readonly ["inPerson", "video", "priorAcquaintance"];
|
|
215
|
+
readonly description: "How the vetter met the applicant.";
|
|
216
|
+
};
|
|
217
|
+
readonly claimsVerified: {
|
|
218
|
+
readonly type: "array";
|
|
219
|
+
readonly minItems: 1;
|
|
220
|
+
readonly items: {
|
|
221
|
+
readonly type: "string";
|
|
222
|
+
readonly minLength: 1;
|
|
223
|
+
};
|
|
224
|
+
readonly description: "The claim types the vetter checked.";
|
|
225
|
+
};
|
|
226
|
+
readonly livenessConfirmed: {
|
|
227
|
+
readonly type: "boolean";
|
|
228
|
+
readonly description: "Whether the vetter confirmed a live person.";
|
|
229
|
+
};
|
|
230
|
+
readonly declaredRelationship: {
|
|
231
|
+
readonly type: "string";
|
|
232
|
+
readonly enum: readonly ["none", "family", "sameEmployer", "closeFriend", "other"];
|
|
233
|
+
readonly description: "The relationship the vetter declared, which the community's independence rules count.";
|
|
234
|
+
};
|
|
235
|
+
readonly identityCommitment: {
|
|
236
|
+
readonly type: "string";
|
|
237
|
+
readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
|
|
238
|
+
readonly description: "The commitment on the Vetting Card the applicant showed. Consistency across attestations is what stops two applicants pooling them.";
|
|
239
|
+
};
|
|
240
|
+
readonly cardDigestMultibase: {
|
|
241
|
+
readonly type: "string";
|
|
242
|
+
readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
|
|
243
|
+
readonly description: "Digest of that card, as the vetter verified it.";
|
|
244
|
+
};
|
|
245
|
+
readonly validFrom: {
|
|
246
|
+
readonly type: "string";
|
|
247
|
+
readonly format: "date";
|
|
248
|
+
readonly description: "A DATE, never a timestamp: an exact time would let a community line an attestation up with a vetter's activity, which undoes the proof without touching it.";
|
|
249
|
+
};
|
|
250
|
+
readonly validUntil: {
|
|
251
|
+
readonly type: "string";
|
|
252
|
+
readonly format: "date";
|
|
253
|
+
readonly description: "A date, for the same reason.";
|
|
254
|
+
};
|
|
255
|
+
readonly tokenLabel: {
|
|
256
|
+
readonly type: "string";
|
|
257
|
+
readonly minLength: 1;
|
|
258
|
+
readonly maxLength: 128;
|
|
259
|
+
readonly description: "The token label spent, repeated inside the bound facts so it cannot be swapped in transit.";
|
|
260
|
+
};
|
|
261
|
+
readonly tokenSerial: {
|
|
262
|
+
readonly type: "string";
|
|
263
|
+
readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
|
|
264
|
+
readonly description: "The token serial spent, likewise bound.";
|
|
265
|
+
};
|
|
266
|
+
};
|
|
267
|
+
};
|
|
268
|
+
readonly CommunityParameters: {
|
|
269
|
+
readonly title: "CommunityParameters";
|
|
270
|
+
readonly description: "The community's hidden-vetting parameters exactly as its join manifest publishes them, under the criterion's `vetting.ext`. The caller copies them in verbatim on every call that needs them, because the community rotates labels and the engine keeps no copy of its own: a stale copy costs the caller a refused proof, never a mistaken one.";
|
|
271
|
+
readonly $ref: "#/$defs/PublishedConfig";
|
|
272
|
+
};
|
|
273
|
+
readonly PublishedConfig: {
|
|
274
|
+
readonly title: "PublishedConfig";
|
|
275
|
+
readonly description: "The parameters exactly as they now appear in this community's join manifest, under vetting.ext. What an applicant and a vetter read.";
|
|
276
|
+
readonly type: "object";
|
|
277
|
+
readonly additionalProperties: false;
|
|
278
|
+
readonly required: readonly ["suite", "helperKey", "tokenKey", "vetterLabels", "tokenLabels", "dripPerTick", "tickLength", "events"];
|
|
279
|
+
readonly properties: {
|
|
280
|
+
readonly suite: {
|
|
281
|
+
readonly type: "string";
|
|
282
|
+
readonly minLength: 1;
|
|
283
|
+
};
|
|
284
|
+
readonly helperKey: {
|
|
285
|
+
readonly type: "string";
|
|
286
|
+
readonly minLength: 1;
|
|
287
|
+
readonly description: "The helper verification key, multibase — named for its role on the wire rather than for hvk.";
|
|
288
|
+
};
|
|
289
|
+
readonly tokenKey: {
|
|
290
|
+
readonly type: "string";
|
|
291
|
+
readonly minLength: 1;
|
|
292
|
+
readonly description: "The token verification key, multibase — named for its role on the wire rather than for tvk.";
|
|
293
|
+
};
|
|
294
|
+
readonly vetterLabels: {
|
|
295
|
+
readonly type: "array";
|
|
296
|
+
readonly items: {
|
|
297
|
+
readonly type: "string";
|
|
298
|
+
readonly minLength: 1;
|
|
299
|
+
};
|
|
300
|
+
readonly description: "Class labels published whole, e.g. vetter/2026-09 — a request names one of these, not the bare period.";
|
|
301
|
+
};
|
|
302
|
+
readonly tokenLabels: {
|
|
303
|
+
readonly type: "array";
|
|
304
|
+
readonly items: {
|
|
305
|
+
readonly type: "string";
|
|
306
|
+
readonly minLength: 1;
|
|
307
|
+
};
|
|
308
|
+
};
|
|
309
|
+
readonly dripPerTick: {
|
|
310
|
+
readonly type: "integer";
|
|
311
|
+
readonly minimum: 1;
|
|
312
|
+
};
|
|
313
|
+
readonly tickLength: {
|
|
314
|
+
readonly $ref: "#/$defs/TickLength";
|
|
315
|
+
};
|
|
316
|
+
readonly events: {
|
|
317
|
+
readonly type: "array";
|
|
318
|
+
readonly items: {
|
|
319
|
+
readonly $ref: "#/$defs/PublishedEvent";
|
|
320
|
+
};
|
|
321
|
+
};
|
|
322
|
+
};
|
|
323
|
+
};
|
|
324
|
+
readonly PublishedEvent: {
|
|
325
|
+
readonly title: "PublishedEvent";
|
|
326
|
+
readonly description: "The published shape drops approvedBy and graceDays: who approved is the community's own record, and a vetter is told closesAfter when its request is approved rather than being handed the raw grace period here.";
|
|
327
|
+
readonly type: "object";
|
|
328
|
+
readonly additionalProperties: false;
|
|
329
|
+
readonly required: readonly ["eventId", "startDate", "endDate", "groupFloor", "tiers"];
|
|
330
|
+
readonly properties: {
|
|
331
|
+
readonly eventId: {
|
|
332
|
+
readonly type: "string";
|
|
333
|
+
readonly minLength: 1;
|
|
334
|
+
};
|
|
335
|
+
readonly startDate: {
|
|
336
|
+
readonly type: "string";
|
|
337
|
+
readonly format: "date";
|
|
338
|
+
};
|
|
339
|
+
readonly endDate: {
|
|
340
|
+
readonly type: "string";
|
|
341
|
+
readonly format: "date";
|
|
342
|
+
};
|
|
343
|
+
readonly groupFloor: {
|
|
344
|
+
readonly type: "integer";
|
|
345
|
+
readonly minimum: 1;
|
|
346
|
+
};
|
|
347
|
+
readonly tiers: {
|
|
348
|
+
readonly type: "array";
|
|
349
|
+
readonly items: {
|
|
350
|
+
readonly $ref: "#/$defs/Tier";
|
|
351
|
+
};
|
|
352
|
+
};
|
|
353
|
+
};
|
|
354
|
+
};
|
|
355
|
+
readonly Tier: {
|
|
356
|
+
readonly title: "Tier";
|
|
357
|
+
readonly type: "object";
|
|
358
|
+
readonly additionalProperties: false;
|
|
359
|
+
readonly required: readonly ["name", "dripPerTick"];
|
|
360
|
+
readonly properties: {
|
|
361
|
+
readonly name: {
|
|
362
|
+
readonly type: "string";
|
|
363
|
+
readonly minLength: 1;
|
|
364
|
+
readonly description: "How the menu names it: desk, busy-desk.";
|
|
365
|
+
};
|
|
366
|
+
readonly dripPerTick: {
|
|
367
|
+
readonly type: "integer";
|
|
368
|
+
readonly minimum: 1;
|
|
369
|
+
readonly description: "How many tokens a tick under this tier yields.";
|
|
370
|
+
};
|
|
371
|
+
};
|
|
372
|
+
};
|
|
373
|
+
readonly TickLength: {
|
|
374
|
+
readonly title: "TickLength";
|
|
375
|
+
readonly type: "string";
|
|
376
|
+
readonly pattern: "^P(?:\\d+D(?:T\\d+H)?|T\\d+H)$";
|
|
377
|
+
readonly description: "The length of one tick of the drip, as an ISO 8601 duration in days and/or hours — at least `PT1H`. A label's tick `t` is the window starting `t` tick lengths after the label's start (`vtc/vetting/vetters/pcs-tokens`).";
|
|
378
|
+
};
|
|
379
|
+
};
|
|
380
|
+
};
|
|
381
|
+
/** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
|
|
382
|
+
export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
383
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
384
|
+
readonly $ref: "#/$defs/Response";
|
|
385
|
+
readonly $defs: {
|
|
386
|
+
readonly Response: {
|
|
387
|
+
readonly $anchor: "response";
|
|
388
|
+
readonly title: "VTA PCS — Prove — response payload";
|
|
389
|
+
readonly type: "object";
|
|
390
|
+
readonly additionalProperties: false;
|
|
391
|
+
readonly required: readonly ["hiddenVetting"];
|
|
392
|
+
readonly properties: {
|
|
393
|
+
readonly hiddenVetting: {
|
|
394
|
+
readonly $ref: "#/$defs/HiddenVettingSubmission";
|
|
395
|
+
};
|
|
396
|
+
readonly ext: {
|
|
397
|
+
readonly $ref: "#/$defs/Ext";
|
|
398
|
+
};
|
|
399
|
+
};
|
|
400
|
+
};
|
|
401
|
+
readonly Ext: {
|
|
402
|
+
readonly title: "Ext";
|
|
403
|
+
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.";
|
|
404
|
+
readonly type: "object";
|
|
405
|
+
readonly minProperties: 1;
|
|
406
|
+
readonly additionalProperties: true;
|
|
407
|
+
readonly propertyNames: {
|
|
408
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
409
|
+
};
|
|
410
|
+
};
|
|
411
|
+
readonly HiddenVettingSubmission: {
|
|
412
|
+
readonly title: "HiddenVettingSubmission";
|
|
413
|
+
readonly description: "The applicant's proof that distinct eligible vetters of the community vetted it, as a join submission carries it under `extensions.hiddenVetting`. Built by vta/pcs/prove, verified by the community.";
|
|
414
|
+
readonly type: "object";
|
|
415
|
+
readonly additionalProperties: false;
|
|
416
|
+
readonly required: readonly ["suite", "id", "joinDid", "idBinding", "challenge", "statements", "proof"];
|
|
417
|
+
readonly properties: {
|
|
418
|
+
readonly suite: {
|
|
419
|
+
readonly type: "string";
|
|
420
|
+
readonly minLength: 1;
|
|
421
|
+
readonly maxLength: 64;
|
|
422
|
+
readonly description: "The suite the proof is built in.";
|
|
423
|
+
};
|
|
424
|
+
readonly id: {
|
|
425
|
+
readonly $ref: "#/$defs/Multibase";
|
|
426
|
+
readonly description: "The applicant's PCS identifier for this application.";
|
|
427
|
+
};
|
|
428
|
+
readonly joinDid: {
|
|
429
|
+
readonly type: "string";
|
|
430
|
+
readonly minLength: 1;
|
|
431
|
+
readonly description: "The DID the applicant joins as. Bound to `id` by `idBinding`.";
|
|
432
|
+
};
|
|
433
|
+
readonly idBinding: {
|
|
434
|
+
readonly type: "string";
|
|
435
|
+
readonly pattern: "^[0-9a-f]{64}$";
|
|
436
|
+
readonly description: "The binding of `id` to `joinDid`, the community and the requirements digest, so a proof cannot be carried to another join: lowercase hex of a SHA-256 over the four values, each length-prefixed. The proof commits to it, and the community recomputes it.";
|
|
437
|
+
};
|
|
438
|
+
readonly challenge: {
|
|
439
|
+
readonly type: "string";
|
|
440
|
+
readonly minLength: 1;
|
|
441
|
+
readonly description: "The community's single-use challenge, as vtc/vetting/pcs-challenge issued it.";
|
|
442
|
+
};
|
|
443
|
+
readonly statements: {
|
|
444
|
+
readonly type: "array";
|
|
445
|
+
readonly minItems: 1;
|
|
446
|
+
readonly description: "One entry per attestation the proof carries, in the proof's order.";
|
|
447
|
+
readonly items: {
|
|
448
|
+
readonly $ref: "#/$defs/SubmittedStatement";
|
|
449
|
+
};
|
|
450
|
+
};
|
|
451
|
+
readonly proof: {
|
|
452
|
+
readonly $ref: "#/$defs/Multibase";
|
|
453
|
+
readonly description: "The issuance proof, which carries the attestations.";
|
|
454
|
+
};
|
|
455
|
+
};
|
|
456
|
+
};
|
|
457
|
+
readonly Multibase: {
|
|
458
|
+
readonly title: "Multibase";
|
|
459
|
+
readonly description: "A binary value, multibase base58btc over the suite's canonical encoding.";
|
|
460
|
+
readonly type: "string";
|
|
461
|
+
readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
|
|
462
|
+
};
|
|
463
|
+
readonly SubmittedStatement: {
|
|
464
|
+
readonly title: "SubmittedStatement";
|
|
465
|
+
readonly description: "One attestation as a submission carries it: its metadata and its token. The attestation itself is inside the submission's `proof`, in the same order.";
|
|
466
|
+
readonly type: "object";
|
|
467
|
+
readonly additionalProperties: false;
|
|
468
|
+
readonly required: readonly ["meta", "token"];
|
|
469
|
+
readonly properties: {
|
|
470
|
+
readonly meta: {
|
|
471
|
+
readonly $ref: "#/$defs/StatementMeta";
|
|
472
|
+
};
|
|
473
|
+
readonly token: {
|
|
474
|
+
readonly $ref: "#/$defs/AttestationToken";
|
|
475
|
+
};
|
|
476
|
+
};
|
|
477
|
+
};
|
|
478
|
+
readonly AttestationToken: {
|
|
479
|
+
readonly title: "AttestationToken";
|
|
480
|
+
readonly description: "The attestation token spent on one attestation: the label it was drawn under, the serial its spend reveals, and its re-randomised signature. The same members as `token` in vetting/attestation/0.1.";
|
|
481
|
+
readonly type: "object";
|
|
482
|
+
readonly additionalProperties: false;
|
|
483
|
+
readonly required: readonly ["label", "serial", "shown"];
|
|
484
|
+
readonly properties: {
|
|
485
|
+
readonly label: {
|
|
486
|
+
readonly type: "string";
|
|
487
|
+
readonly minLength: 1;
|
|
488
|
+
readonly maxLength: 128;
|
|
489
|
+
readonly description: "The token label spent under.";
|
|
490
|
+
};
|
|
491
|
+
readonly serial: {
|
|
492
|
+
readonly $ref: "#/$defs/Multibase";
|
|
493
|
+
readonly description: "The serial revealed by the spend.";
|
|
494
|
+
};
|
|
495
|
+
readonly shown: {
|
|
496
|
+
readonly $ref: "#/$defs/Multibase";
|
|
497
|
+
readonly description: "The re-randomised token signature, verifiable under the published token key.";
|
|
498
|
+
};
|
|
499
|
+
};
|
|
500
|
+
};
|
|
501
|
+
readonly StatementMeta: {
|
|
502
|
+
readonly type: "object";
|
|
503
|
+
readonly additionalProperties: false;
|
|
504
|
+
readonly required: readonly ["community", "requirementsDigest", "method", "claimsVerified", "livenessConfirmed", "declaredRelationship", "identityCommitment", "cardDigestMultibase", "validFrom", "validUntil", "tokenLabel", "tokenSerial"];
|
|
505
|
+
readonly description: "What a Vetting Statement would have said, minus its issuer.";
|
|
506
|
+
readonly properties: {
|
|
507
|
+
readonly community: {
|
|
508
|
+
readonly type: "string";
|
|
509
|
+
readonly minLength: 1;
|
|
510
|
+
readonly description: "The community this attestation is for. An attestation is not portable between communities.";
|
|
511
|
+
};
|
|
512
|
+
readonly requirementsDigest: {
|
|
513
|
+
readonly type: "string";
|
|
514
|
+
readonly minLength: 1;
|
|
515
|
+
readonly description: "The digest of the criterion's requirements as the vetter read them.";
|
|
516
|
+
};
|
|
517
|
+
readonly method: {
|
|
518
|
+
readonly type: "string";
|
|
519
|
+
readonly enum: readonly ["inPerson", "video", "priorAcquaintance"];
|
|
520
|
+
readonly description: "How the vetter met the applicant.";
|
|
521
|
+
};
|
|
522
|
+
readonly claimsVerified: {
|
|
523
|
+
readonly type: "array";
|
|
524
|
+
readonly minItems: 1;
|
|
525
|
+
readonly items: {
|
|
526
|
+
readonly type: "string";
|
|
527
|
+
readonly minLength: 1;
|
|
528
|
+
};
|
|
529
|
+
readonly description: "The claim types the vetter checked.";
|
|
530
|
+
};
|
|
531
|
+
readonly livenessConfirmed: {
|
|
532
|
+
readonly type: "boolean";
|
|
533
|
+
readonly description: "Whether the vetter confirmed a live person.";
|
|
534
|
+
};
|
|
535
|
+
readonly declaredRelationship: {
|
|
536
|
+
readonly type: "string";
|
|
537
|
+
readonly enum: readonly ["none", "family", "sameEmployer", "closeFriend", "other"];
|
|
538
|
+
readonly description: "The relationship the vetter declared, which the community's independence rules count.";
|
|
539
|
+
};
|
|
540
|
+
readonly identityCommitment: {
|
|
541
|
+
readonly type: "string";
|
|
542
|
+
readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
|
|
543
|
+
readonly description: "The commitment on the Vetting Card the applicant showed. Consistency across attestations is what stops two applicants pooling them.";
|
|
544
|
+
};
|
|
545
|
+
readonly cardDigestMultibase: {
|
|
546
|
+
readonly type: "string";
|
|
547
|
+
readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
|
|
548
|
+
readonly description: "Digest of that card, as the vetter verified it.";
|
|
549
|
+
};
|
|
550
|
+
readonly validFrom: {
|
|
551
|
+
readonly type: "string";
|
|
552
|
+
readonly format: "date";
|
|
553
|
+
readonly description: "A DATE, never a timestamp: an exact time would let a community line an attestation up with a vetter's activity, which undoes the proof without touching it.";
|
|
554
|
+
};
|
|
555
|
+
readonly validUntil: {
|
|
556
|
+
readonly type: "string";
|
|
557
|
+
readonly format: "date";
|
|
558
|
+
readonly description: "A date, for the same reason.";
|
|
559
|
+
};
|
|
560
|
+
readonly tokenLabel: {
|
|
561
|
+
readonly type: "string";
|
|
562
|
+
readonly minLength: 1;
|
|
563
|
+
readonly maxLength: 128;
|
|
564
|
+
readonly description: "The token label spent, repeated inside the bound facts so it cannot be swapped in transit.";
|
|
565
|
+
};
|
|
566
|
+
readonly tokenSerial: {
|
|
567
|
+
readonly type: "string";
|
|
568
|
+
readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
|
|
569
|
+
readonly description: "The token serial spent, likewise bound.";
|
|
570
|
+
};
|
|
571
|
+
};
|
|
572
|
+
};
|
|
573
|
+
readonly CommunityParameters: {
|
|
574
|
+
readonly title: "CommunityParameters";
|
|
575
|
+
readonly description: "The community's hidden-vetting parameters exactly as its join manifest publishes them, under the criterion's `vetting.ext`. The caller copies them in verbatim on every call that needs them, because the community rotates labels and the engine keeps no copy of its own: a stale copy costs the caller a refused proof, never a mistaken one.";
|
|
576
|
+
readonly $ref: "#/$defs/PublishedConfig";
|
|
577
|
+
};
|
|
578
|
+
readonly PublishedConfig: {
|
|
579
|
+
readonly title: "PublishedConfig";
|
|
580
|
+
readonly description: "The parameters exactly as they now appear in this community's join manifest, under vetting.ext. What an applicant and a vetter read.";
|
|
581
|
+
readonly type: "object";
|
|
582
|
+
readonly additionalProperties: false;
|
|
583
|
+
readonly required: readonly ["suite", "helperKey", "tokenKey", "vetterLabels", "tokenLabels", "dripPerTick", "tickLength", "events"];
|
|
584
|
+
readonly properties: {
|
|
585
|
+
readonly suite: {
|
|
586
|
+
readonly type: "string";
|
|
587
|
+
readonly minLength: 1;
|
|
588
|
+
};
|
|
589
|
+
readonly helperKey: {
|
|
590
|
+
readonly type: "string";
|
|
591
|
+
readonly minLength: 1;
|
|
592
|
+
readonly description: "The helper verification key, multibase — named for its role on the wire rather than for hvk.";
|
|
593
|
+
};
|
|
594
|
+
readonly tokenKey: {
|
|
595
|
+
readonly type: "string";
|
|
596
|
+
readonly minLength: 1;
|
|
597
|
+
readonly description: "The token verification key, multibase — named for its role on the wire rather than for tvk.";
|
|
598
|
+
};
|
|
599
|
+
readonly vetterLabels: {
|
|
600
|
+
readonly type: "array";
|
|
601
|
+
readonly items: {
|
|
602
|
+
readonly type: "string";
|
|
603
|
+
readonly minLength: 1;
|
|
604
|
+
};
|
|
605
|
+
readonly description: "Class labels published whole, e.g. vetter/2026-09 — a request names one of these, not the bare period.";
|
|
606
|
+
};
|
|
607
|
+
readonly tokenLabels: {
|
|
608
|
+
readonly type: "array";
|
|
609
|
+
readonly items: {
|
|
610
|
+
readonly type: "string";
|
|
611
|
+
readonly minLength: 1;
|
|
612
|
+
};
|
|
613
|
+
};
|
|
614
|
+
readonly dripPerTick: {
|
|
615
|
+
readonly type: "integer";
|
|
616
|
+
readonly minimum: 1;
|
|
617
|
+
};
|
|
618
|
+
readonly tickLength: {
|
|
619
|
+
readonly $ref: "#/$defs/TickLength";
|
|
620
|
+
};
|
|
621
|
+
readonly events: {
|
|
622
|
+
readonly type: "array";
|
|
623
|
+
readonly items: {
|
|
624
|
+
readonly $ref: "#/$defs/PublishedEvent";
|
|
625
|
+
};
|
|
626
|
+
};
|
|
627
|
+
};
|
|
628
|
+
};
|
|
629
|
+
readonly PublishedEvent: {
|
|
630
|
+
readonly title: "PublishedEvent";
|
|
631
|
+
readonly description: "The published shape drops approvedBy and graceDays: who approved is the community's own record, and a vetter is told closesAfter when its request is approved rather than being handed the raw grace period here.";
|
|
632
|
+
readonly type: "object";
|
|
633
|
+
readonly additionalProperties: false;
|
|
634
|
+
readonly required: readonly ["eventId", "startDate", "endDate", "groupFloor", "tiers"];
|
|
635
|
+
readonly properties: {
|
|
636
|
+
readonly eventId: {
|
|
637
|
+
readonly type: "string";
|
|
638
|
+
readonly minLength: 1;
|
|
639
|
+
};
|
|
640
|
+
readonly startDate: {
|
|
641
|
+
readonly type: "string";
|
|
642
|
+
readonly format: "date";
|
|
643
|
+
};
|
|
644
|
+
readonly endDate: {
|
|
645
|
+
readonly type: "string";
|
|
646
|
+
readonly format: "date";
|
|
647
|
+
};
|
|
648
|
+
readonly groupFloor: {
|
|
649
|
+
readonly type: "integer";
|
|
650
|
+
readonly minimum: 1;
|
|
651
|
+
};
|
|
652
|
+
readonly tiers: {
|
|
653
|
+
readonly type: "array";
|
|
654
|
+
readonly items: {
|
|
655
|
+
readonly $ref: "#/$defs/Tier";
|
|
656
|
+
};
|
|
657
|
+
};
|
|
658
|
+
};
|
|
659
|
+
};
|
|
660
|
+
readonly Tier: {
|
|
661
|
+
readonly title: "Tier";
|
|
662
|
+
readonly type: "object";
|
|
663
|
+
readonly additionalProperties: false;
|
|
664
|
+
readonly required: readonly ["name", "dripPerTick"];
|
|
665
|
+
readonly properties: {
|
|
666
|
+
readonly name: {
|
|
667
|
+
readonly type: "string";
|
|
668
|
+
readonly minLength: 1;
|
|
669
|
+
readonly description: "How the menu names it: desk, busy-desk.";
|
|
670
|
+
};
|
|
671
|
+
readonly dripPerTick: {
|
|
672
|
+
readonly type: "integer";
|
|
673
|
+
readonly minimum: 1;
|
|
674
|
+
readonly description: "How many tokens a tick under this tier yields.";
|
|
675
|
+
};
|
|
676
|
+
};
|
|
677
|
+
};
|
|
678
|
+
readonly TickLength: {
|
|
679
|
+
readonly title: "TickLength";
|
|
680
|
+
readonly type: "string";
|
|
681
|
+
readonly pattern: "^P(?:\\d+D(?:T\\d+H)?|T\\d+H)$";
|
|
682
|
+
readonly description: "The length of one tick of the drip, as an ISO 8601 duration in days and/or hours — at least `PT1H`. A label's tick `t` is the window starting `t` tick lengths after the label's start (`vtc/vetting/vetters/pcs-tokens`).";
|
|
683
|
+
};
|
|
684
|
+
};
|
|
685
|
+
};
|
|
686
|
+
/**
|
|
687
|
+
* SPEC.md §7.2 policy for the request variant, from this specification's
|
|
688
|
+
* front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
|
|
689
|
+
* per-specification and cannot be derived from the document alone, and
|
|
690
|
+
* item 2 needs the schema this carries.
|
|
691
|
+
*/
|
|
692
|
+
export declare const SPEC: {
|
|
693
|
+
readonly typeUri: "https://trusttasks.org/spec/vta/pcs/prove/0.1";
|
|
694
|
+
readonly isBearer: false;
|
|
695
|
+
readonly isProofRequired: true;
|
|
696
|
+
readonly isRecipientRequired: true;
|
|
697
|
+
readonly isIssuedAtRequired: true;
|
|
698
|
+
readonly payloadSchema: {
|
|
699
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
700
|
+
readonly $id: "https://trusttasks.org/spec/vta/pcs/prove/0.1";
|
|
701
|
+
readonly title: "VTA PCS — Prove — payload";
|
|
702
|
+
readonly description: "A client asks its VTA for the zero-knowledge proof a hidden-vetting join submission carries, bound to the community's single-use challenge.";
|
|
703
|
+
readonly type: "object";
|
|
704
|
+
readonly additionalProperties: false;
|
|
705
|
+
readonly required: readonly ["applicationId", "parameters", "requirementsDigest", "challenge"];
|
|
706
|
+
readonly properties: {
|
|
707
|
+
readonly applicationId: {
|
|
708
|
+
readonly type: "string";
|
|
709
|
+
readonly minLength: 1;
|
|
710
|
+
readonly maxLength: 128;
|
|
711
|
+
};
|
|
712
|
+
readonly parameters: {
|
|
713
|
+
readonly $ref: "#/$defs/CommunityParameters";
|
|
714
|
+
readonly description: "The community's published hidden-vetting parameters, copied verbatim from its join manifest.";
|
|
715
|
+
};
|
|
716
|
+
readonly requirementsDigest: {
|
|
717
|
+
readonly type: "string";
|
|
718
|
+
readonly minLength: 1;
|
|
719
|
+
readonly description: "The requirements digest of the criterion the applicant applies under, as the manifest publishes it.";
|
|
720
|
+
};
|
|
721
|
+
readonly challenge: {
|
|
722
|
+
readonly type: "string";
|
|
723
|
+
readonly minLength: 1;
|
|
724
|
+
readonly description: "The community's single-use challenge.";
|
|
725
|
+
};
|
|
726
|
+
readonly ext: {
|
|
727
|
+
readonly $ref: "#/$defs/Ext";
|
|
728
|
+
};
|
|
729
|
+
};
|
|
730
|
+
readonly $defs: {
|
|
731
|
+
readonly Response: {
|
|
732
|
+
readonly $anchor: "response";
|
|
733
|
+
readonly title: "VTA PCS — Prove — response payload";
|
|
734
|
+
readonly type: "object";
|
|
735
|
+
readonly additionalProperties: false;
|
|
736
|
+
readonly required: readonly ["hiddenVetting"];
|
|
737
|
+
readonly properties: {
|
|
738
|
+
readonly hiddenVetting: {
|
|
739
|
+
readonly $ref: "#/$defs/HiddenVettingSubmission";
|
|
740
|
+
};
|
|
741
|
+
readonly ext: {
|
|
742
|
+
readonly $ref: "#/$defs/Ext";
|
|
743
|
+
};
|
|
744
|
+
};
|
|
745
|
+
};
|
|
746
|
+
readonly Ext: {
|
|
747
|
+
readonly title: "Ext";
|
|
748
|
+
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.";
|
|
749
|
+
readonly type: "object";
|
|
750
|
+
readonly minProperties: 1;
|
|
751
|
+
readonly additionalProperties: true;
|
|
752
|
+
readonly propertyNames: {
|
|
753
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
754
|
+
};
|
|
755
|
+
};
|
|
756
|
+
readonly HiddenVettingSubmission: {
|
|
757
|
+
readonly title: "HiddenVettingSubmission";
|
|
758
|
+
readonly description: "The applicant's proof that distinct eligible vetters of the community vetted it, as a join submission carries it under `extensions.hiddenVetting`. Built by vta/pcs/prove, verified by the community.";
|
|
759
|
+
readonly type: "object";
|
|
760
|
+
readonly additionalProperties: false;
|
|
761
|
+
readonly required: readonly ["suite", "id", "joinDid", "idBinding", "challenge", "statements", "proof"];
|
|
762
|
+
readonly properties: {
|
|
763
|
+
readonly suite: {
|
|
764
|
+
readonly type: "string";
|
|
765
|
+
readonly minLength: 1;
|
|
766
|
+
readonly maxLength: 64;
|
|
767
|
+
readonly description: "The suite the proof is built in.";
|
|
768
|
+
};
|
|
769
|
+
readonly id: {
|
|
770
|
+
readonly $ref: "#/$defs/Multibase";
|
|
771
|
+
readonly description: "The applicant's PCS identifier for this application.";
|
|
772
|
+
};
|
|
773
|
+
readonly joinDid: {
|
|
774
|
+
readonly type: "string";
|
|
775
|
+
readonly minLength: 1;
|
|
776
|
+
readonly description: "The DID the applicant joins as. Bound to `id` by `idBinding`.";
|
|
777
|
+
};
|
|
778
|
+
readonly idBinding: {
|
|
779
|
+
readonly type: "string";
|
|
780
|
+
readonly pattern: "^[0-9a-f]{64}$";
|
|
781
|
+
readonly description: "The binding of `id` to `joinDid`, the community and the requirements digest, so a proof cannot be carried to another join: lowercase hex of a SHA-256 over the four values, each length-prefixed. The proof commits to it, and the community recomputes it.";
|
|
782
|
+
};
|
|
783
|
+
readonly challenge: {
|
|
784
|
+
readonly type: "string";
|
|
785
|
+
readonly minLength: 1;
|
|
786
|
+
readonly description: "The community's single-use challenge, as vtc/vetting/pcs-challenge issued it.";
|
|
787
|
+
};
|
|
788
|
+
readonly statements: {
|
|
789
|
+
readonly type: "array";
|
|
790
|
+
readonly minItems: 1;
|
|
791
|
+
readonly description: "One entry per attestation the proof carries, in the proof's order.";
|
|
792
|
+
readonly items: {
|
|
793
|
+
readonly $ref: "#/$defs/SubmittedStatement";
|
|
794
|
+
};
|
|
795
|
+
};
|
|
796
|
+
readonly proof: {
|
|
797
|
+
readonly $ref: "#/$defs/Multibase";
|
|
798
|
+
readonly description: "The issuance proof, which carries the attestations.";
|
|
799
|
+
};
|
|
800
|
+
};
|
|
801
|
+
};
|
|
802
|
+
readonly Multibase: {
|
|
803
|
+
readonly title: "Multibase";
|
|
804
|
+
readonly description: "A binary value, multibase base58btc over the suite's canonical encoding.";
|
|
805
|
+
readonly type: "string";
|
|
806
|
+
readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
|
|
807
|
+
};
|
|
808
|
+
readonly SubmittedStatement: {
|
|
809
|
+
readonly title: "SubmittedStatement";
|
|
810
|
+
readonly description: "One attestation as a submission carries it: its metadata and its token. The attestation itself is inside the submission's `proof`, in the same order.";
|
|
811
|
+
readonly type: "object";
|
|
812
|
+
readonly additionalProperties: false;
|
|
813
|
+
readonly required: readonly ["meta", "token"];
|
|
814
|
+
readonly properties: {
|
|
815
|
+
readonly meta: {
|
|
816
|
+
readonly $ref: "#/$defs/StatementMeta";
|
|
817
|
+
};
|
|
818
|
+
readonly token: {
|
|
819
|
+
readonly $ref: "#/$defs/AttestationToken";
|
|
820
|
+
};
|
|
821
|
+
};
|
|
822
|
+
};
|
|
823
|
+
readonly AttestationToken: {
|
|
824
|
+
readonly title: "AttestationToken";
|
|
825
|
+
readonly description: "The attestation token spent on one attestation: the label it was drawn under, the serial its spend reveals, and its re-randomised signature. The same members as `token` in vetting/attestation/0.1.";
|
|
826
|
+
readonly type: "object";
|
|
827
|
+
readonly additionalProperties: false;
|
|
828
|
+
readonly required: readonly ["label", "serial", "shown"];
|
|
829
|
+
readonly properties: {
|
|
830
|
+
readonly label: {
|
|
831
|
+
readonly type: "string";
|
|
832
|
+
readonly minLength: 1;
|
|
833
|
+
readonly maxLength: 128;
|
|
834
|
+
readonly description: "The token label spent under.";
|
|
835
|
+
};
|
|
836
|
+
readonly serial: {
|
|
837
|
+
readonly $ref: "#/$defs/Multibase";
|
|
838
|
+
readonly description: "The serial revealed by the spend.";
|
|
839
|
+
};
|
|
840
|
+
readonly shown: {
|
|
841
|
+
readonly $ref: "#/$defs/Multibase";
|
|
842
|
+
readonly description: "The re-randomised token signature, verifiable under the published token key.";
|
|
843
|
+
};
|
|
844
|
+
};
|
|
845
|
+
};
|
|
846
|
+
readonly StatementMeta: {
|
|
847
|
+
readonly type: "object";
|
|
848
|
+
readonly additionalProperties: false;
|
|
849
|
+
readonly required: readonly ["community", "requirementsDigest", "method", "claimsVerified", "livenessConfirmed", "declaredRelationship", "identityCommitment", "cardDigestMultibase", "validFrom", "validUntil", "tokenLabel", "tokenSerial"];
|
|
850
|
+
readonly description: "What a Vetting Statement would have said, minus its issuer.";
|
|
851
|
+
readonly properties: {
|
|
852
|
+
readonly community: {
|
|
853
|
+
readonly type: "string";
|
|
854
|
+
readonly minLength: 1;
|
|
855
|
+
readonly description: "The community this attestation is for. An attestation is not portable between communities.";
|
|
856
|
+
};
|
|
857
|
+
readonly requirementsDigest: {
|
|
858
|
+
readonly type: "string";
|
|
859
|
+
readonly minLength: 1;
|
|
860
|
+
readonly description: "The digest of the criterion's requirements as the vetter read them.";
|
|
861
|
+
};
|
|
862
|
+
readonly method: {
|
|
863
|
+
readonly type: "string";
|
|
864
|
+
readonly enum: readonly ["inPerson", "video", "priorAcquaintance"];
|
|
865
|
+
readonly description: "How the vetter met the applicant.";
|
|
866
|
+
};
|
|
867
|
+
readonly claimsVerified: {
|
|
868
|
+
readonly type: "array";
|
|
869
|
+
readonly minItems: 1;
|
|
870
|
+
readonly items: {
|
|
871
|
+
readonly type: "string";
|
|
872
|
+
readonly minLength: 1;
|
|
873
|
+
};
|
|
874
|
+
readonly description: "The claim types the vetter checked.";
|
|
875
|
+
};
|
|
876
|
+
readonly livenessConfirmed: {
|
|
877
|
+
readonly type: "boolean";
|
|
878
|
+
readonly description: "Whether the vetter confirmed a live person.";
|
|
879
|
+
};
|
|
880
|
+
readonly declaredRelationship: {
|
|
881
|
+
readonly type: "string";
|
|
882
|
+
readonly enum: readonly ["none", "family", "sameEmployer", "closeFriend", "other"];
|
|
883
|
+
readonly description: "The relationship the vetter declared, which the community's independence rules count.";
|
|
884
|
+
};
|
|
885
|
+
readonly identityCommitment: {
|
|
886
|
+
readonly type: "string";
|
|
887
|
+
readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
|
|
888
|
+
readonly description: "The commitment on the Vetting Card the applicant showed. Consistency across attestations is what stops two applicants pooling them.";
|
|
889
|
+
};
|
|
890
|
+
readonly cardDigestMultibase: {
|
|
891
|
+
readonly type: "string";
|
|
892
|
+
readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
|
|
893
|
+
readonly description: "Digest of that card, as the vetter verified it.";
|
|
894
|
+
};
|
|
895
|
+
readonly validFrom: {
|
|
896
|
+
readonly type: "string";
|
|
897
|
+
readonly format: "date";
|
|
898
|
+
readonly description: "A DATE, never a timestamp: an exact time would let a community line an attestation up with a vetter's activity, which undoes the proof without touching it.";
|
|
899
|
+
};
|
|
900
|
+
readonly validUntil: {
|
|
901
|
+
readonly type: "string";
|
|
902
|
+
readonly format: "date";
|
|
903
|
+
readonly description: "A date, for the same reason.";
|
|
904
|
+
};
|
|
905
|
+
readonly tokenLabel: {
|
|
906
|
+
readonly type: "string";
|
|
907
|
+
readonly minLength: 1;
|
|
908
|
+
readonly maxLength: 128;
|
|
909
|
+
readonly description: "The token label spent, repeated inside the bound facts so it cannot be swapped in transit.";
|
|
910
|
+
};
|
|
911
|
+
readonly tokenSerial: {
|
|
912
|
+
readonly type: "string";
|
|
913
|
+
readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
|
|
914
|
+
readonly description: "The token serial spent, likewise bound.";
|
|
915
|
+
};
|
|
916
|
+
};
|
|
917
|
+
};
|
|
918
|
+
readonly CommunityParameters: {
|
|
919
|
+
readonly title: "CommunityParameters";
|
|
920
|
+
readonly description: "The community's hidden-vetting parameters exactly as its join manifest publishes them, under the criterion's `vetting.ext`. The caller copies them in verbatim on every call that needs them, because the community rotates labels and the engine keeps no copy of its own: a stale copy costs the caller a refused proof, never a mistaken one.";
|
|
921
|
+
readonly $ref: "#/$defs/PublishedConfig";
|
|
922
|
+
};
|
|
923
|
+
readonly PublishedConfig: {
|
|
924
|
+
readonly title: "PublishedConfig";
|
|
925
|
+
readonly description: "The parameters exactly as they now appear in this community's join manifest, under vetting.ext. What an applicant and a vetter read.";
|
|
926
|
+
readonly type: "object";
|
|
927
|
+
readonly additionalProperties: false;
|
|
928
|
+
readonly required: readonly ["suite", "helperKey", "tokenKey", "vetterLabels", "tokenLabels", "dripPerTick", "tickLength", "events"];
|
|
929
|
+
readonly properties: {
|
|
930
|
+
readonly suite: {
|
|
931
|
+
readonly type: "string";
|
|
932
|
+
readonly minLength: 1;
|
|
933
|
+
};
|
|
934
|
+
readonly helperKey: {
|
|
935
|
+
readonly type: "string";
|
|
936
|
+
readonly minLength: 1;
|
|
937
|
+
readonly description: "The helper verification key, multibase — named for its role on the wire rather than for hvk.";
|
|
938
|
+
};
|
|
939
|
+
readonly tokenKey: {
|
|
940
|
+
readonly type: "string";
|
|
941
|
+
readonly minLength: 1;
|
|
942
|
+
readonly description: "The token verification key, multibase — named for its role on the wire rather than for tvk.";
|
|
943
|
+
};
|
|
944
|
+
readonly vetterLabels: {
|
|
945
|
+
readonly type: "array";
|
|
946
|
+
readonly items: {
|
|
947
|
+
readonly type: "string";
|
|
948
|
+
readonly minLength: 1;
|
|
949
|
+
};
|
|
950
|
+
readonly description: "Class labels published whole, e.g. vetter/2026-09 — a request names one of these, not the bare period.";
|
|
951
|
+
};
|
|
952
|
+
readonly tokenLabels: {
|
|
953
|
+
readonly type: "array";
|
|
954
|
+
readonly items: {
|
|
955
|
+
readonly type: "string";
|
|
956
|
+
readonly minLength: 1;
|
|
957
|
+
};
|
|
958
|
+
};
|
|
959
|
+
readonly dripPerTick: {
|
|
960
|
+
readonly type: "integer";
|
|
961
|
+
readonly minimum: 1;
|
|
962
|
+
};
|
|
963
|
+
readonly tickLength: {
|
|
964
|
+
readonly $ref: "#/$defs/TickLength";
|
|
965
|
+
};
|
|
966
|
+
readonly events: {
|
|
967
|
+
readonly type: "array";
|
|
968
|
+
readonly items: {
|
|
969
|
+
readonly $ref: "#/$defs/PublishedEvent";
|
|
970
|
+
};
|
|
971
|
+
};
|
|
972
|
+
};
|
|
973
|
+
};
|
|
974
|
+
readonly PublishedEvent: {
|
|
975
|
+
readonly title: "PublishedEvent";
|
|
976
|
+
readonly description: "The published shape drops approvedBy and graceDays: who approved is the community's own record, and a vetter is told closesAfter when its request is approved rather than being handed the raw grace period here.";
|
|
977
|
+
readonly type: "object";
|
|
978
|
+
readonly additionalProperties: false;
|
|
979
|
+
readonly required: readonly ["eventId", "startDate", "endDate", "groupFloor", "tiers"];
|
|
980
|
+
readonly properties: {
|
|
981
|
+
readonly eventId: {
|
|
982
|
+
readonly type: "string";
|
|
983
|
+
readonly minLength: 1;
|
|
984
|
+
};
|
|
985
|
+
readonly startDate: {
|
|
986
|
+
readonly type: "string";
|
|
987
|
+
readonly format: "date";
|
|
988
|
+
};
|
|
989
|
+
readonly endDate: {
|
|
990
|
+
readonly type: "string";
|
|
991
|
+
readonly format: "date";
|
|
992
|
+
};
|
|
993
|
+
readonly groupFloor: {
|
|
994
|
+
readonly type: "integer";
|
|
995
|
+
readonly minimum: 1;
|
|
996
|
+
};
|
|
997
|
+
readonly tiers: {
|
|
998
|
+
readonly type: "array";
|
|
999
|
+
readonly items: {
|
|
1000
|
+
readonly $ref: "#/$defs/Tier";
|
|
1001
|
+
};
|
|
1002
|
+
};
|
|
1003
|
+
};
|
|
1004
|
+
};
|
|
1005
|
+
readonly Tier: {
|
|
1006
|
+
readonly title: "Tier";
|
|
1007
|
+
readonly type: "object";
|
|
1008
|
+
readonly additionalProperties: false;
|
|
1009
|
+
readonly required: readonly ["name", "dripPerTick"];
|
|
1010
|
+
readonly properties: {
|
|
1011
|
+
readonly name: {
|
|
1012
|
+
readonly type: "string";
|
|
1013
|
+
readonly minLength: 1;
|
|
1014
|
+
readonly description: "How the menu names it: desk, busy-desk.";
|
|
1015
|
+
};
|
|
1016
|
+
readonly dripPerTick: {
|
|
1017
|
+
readonly type: "integer";
|
|
1018
|
+
readonly minimum: 1;
|
|
1019
|
+
readonly description: "How many tokens a tick under this tier yields.";
|
|
1020
|
+
};
|
|
1021
|
+
};
|
|
1022
|
+
};
|
|
1023
|
+
readonly TickLength: {
|
|
1024
|
+
readonly title: "TickLength";
|
|
1025
|
+
readonly type: "string";
|
|
1026
|
+
readonly pattern: "^P(?:\\d+D(?:T\\d+H)?|T\\d+H)$";
|
|
1027
|
+
readonly description: "The length of one tick of the drip, as an ISO 8601 duration in days and/or hours — at least `PT1H`. A label's tick `t` is the window starting `t` tick lengths after the label's start (`vtc/vetting/vetters/pcs-tokens`).";
|
|
1028
|
+
};
|
|
1029
|
+
};
|
|
1030
|
+
};
|
|
1031
|
+
};
|
|
1032
|
+
/**
|
|
1033
|
+
* SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
|
|
1034
|
+
* tracks the *issuer* party's requirement because a response swaps the
|
|
1035
|
+
* parties (§7.3 item 5).
|
|
1036
|
+
*/
|
|
1037
|
+
export declare const RESPONSE_SPEC: {
|
|
1038
|
+
readonly typeUri: "https://trusttasks.org/spec/vta/pcs/prove/0.1#response";
|
|
1039
|
+
readonly isBearer: false;
|
|
1040
|
+
readonly isProofRequired: false;
|
|
1041
|
+
readonly isRecipientRequired: true;
|
|
1042
|
+
readonly isIssuedAtRequired: true;
|
|
1043
|
+
readonly payloadSchema: {
|
|
1044
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
1045
|
+
readonly $ref: "#/$defs/Response";
|
|
1046
|
+
readonly $defs: {
|
|
1047
|
+
readonly Response: {
|
|
1048
|
+
readonly $anchor: "response";
|
|
1049
|
+
readonly title: "VTA PCS — Prove — response payload";
|
|
1050
|
+
readonly type: "object";
|
|
1051
|
+
readonly additionalProperties: false;
|
|
1052
|
+
readonly required: readonly ["hiddenVetting"];
|
|
1053
|
+
readonly properties: {
|
|
1054
|
+
readonly hiddenVetting: {
|
|
1055
|
+
readonly $ref: "#/$defs/HiddenVettingSubmission";
|
|
1056
|
+
};
|
|
1057
|
+
readonly ext: {
|
|
1058
|
+
readonly $ref: "#/$defs/Ext";
|
|
1059
|
+
};
|
|
1060
|
+
};
|
|
1061
|
+
};
|
|
1062
|
+
readonly Ext: {
|
|
1063
|
+
readonly title: "Ext";
|
|
1064
|
+
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.";
|
|
1065
|
+
readonly type: "object";
|
|
1066
|
+
readonly minProperties: 1;
|
|
1067
|
+
readonly additionalProperties: true;
|
|
1068
|
+
readonly propertyNames: {
|
|
1069
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
1070
|
+
};
|
|
1071
|
+
};
|
|
1072
|
+
readonly HiddenVettingSubmission: {
|
|
1073
|
+
readonly title: "HiddenVettingSubmission";
|
|
1074
|
+
readonly description: "The applicant's proof that distinct eligible vetters of the community vetted it, as a join submission carries it under `extensions.hiddenVetting`. Built by vta/pcs/prove, verified by the community.";
|
|
1075
|
+
readonly type: "object";
|
|
1076
|
+
readonly additionalProperties: false;
|
|
1077
|
+
readonly required: readonly ["suite", "id", "joinDid", "idBinding", "challenge", "statements", "proof"];
|
|
1078
|
+
readonly properties: {
|
|
1079
|
+
readonly suite: {
|
|
1080
|
+
readonly type: "string";
|
|
1081
|
+
readonly minLength: 1;
|
|
1082
|
+
readonly maxLength: 64;
|
|
1083
|
+
readonly description: "The suite the proof is built in.";
|
|
1084
|
+
};
|
|
1085
|
+
readonly id: {
|
|
1086
|
+
readonly $ref: "#/$defs/Multibase";
|
|
1087
|
+
readonly description: "The applicant's PCS identifier for this application.";
|
|
1088
|
+
};
|
|
1089
|
+
readonly joinDid: {
|
|
1090
|
+
readonly type: "string";
|
|
1091
|
+
readonly minLength: 1;
|
|
1092
|
+
readonly description: "The DID the applicant joins as. Bound to `id` by `idBinding`.";
|
|
1093
|
+
};
|
|
1094
|
+
readonly idBinding: {
|
|
1095
|
+
readonly type: "string";
|
|
1096
|
+
readonly pattern: "^[0-9a-f]{64}$";
|
|
1097
|
+
readonly description: "The binding of `id` to `joinDid`, the community and the requirements digest, so a proof cannot be carried to another join: lowercase hex of a SHA-256 over the four values, each length-prefixed. The proof commits to it, and the community recomputes it.";
|
|
1098
|
+
};
|
|
1099
|
+
readonly challenge: {
|
|
1100
|
+
readonly type: "string";
|
|
1101
|
+
readonly minLength: 1;
|
|
1102
|
+
readonly description: "The community's single-use challenge, as vtc/vetting/pcs-challenge issued it.";
|
|
1103
|
+
};
|
|
1104
|
+
readonly statements: {
|
|
1105
|
+
readonly type: "array";
|
|
1106
|
+
readonly minItems: 1;
|
|
1107
|
+
readonly description: "One entry per attestation the proof carries, in the proof's order.";
|
|
1108
|
+
readonly items: {
|
|
1109
|
+
readonly $ref: "#/$defs/SubmittedStatement";
|
|
1110
|
+
};
|
|
1111
|
+
};
|
|
1112
|
+
readonly proof: {
|
|
1113
|
+
readonly $ref: "#/$defs/Multibase";
|
|
1114
|
+
readonly description: "The issuance proof, which carries the attestations.";
|
|
1115
|
+
};
|
|
1116
|
+
};
|
|
1117
|
+
};
|
|
1118
|
+
readonly Multibase: {
|
|
1119
|
+
readonly title: "Multibase";
|
|
1120
|
+
readonly description: "A binary value, multibase base58btc over the suite's canonical encoding.";
|
|
1121
|
+
readonly type: "string";
|
|
1122
|
+
readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
|
|
1123
|
+
};
|
|
1124
|
+
readonly SubmittedStatement: {
|
|
1125
|
+
readonly title: "SubmittedStatement";
|
|
1126
|
+
readonly description: "One attestation as a submission carries it: its metadata and its token. The attestation itself is inside the submission's `proof`, in the same order.";
|
|
1127
|
+
readonly type: "object";
|
|
1128
|
+
readonly additionalProperties: false;
|
|
1129
|
+
readonly required: readonly ["meta", "token"];
|
|
1130
|
+
readonly properties: {
|
|
1131
|
+
readonly meta: {
|
|
1132
|
+
readonly $ref: "#/$defs/StatementMeta";
|
|
1133
|
+
};
|
|
1134
|
+
readonly token: {
|
|
1135
|
+
readonly $ref: "#/$defs/AttestationToken";
|
|
1136
|
+
};
|
|
1137
|
+
};
|
|
1138
|
+
};
|
|
1139
|
+
readonly AttestationToken: {
|
|
1140
|
+
readonly title: "AttestationToken";
|
|
1141
|
+
readonly description: "The attestation token spent on one attestation: the label it was drawn under, the serial its spend reveals, and its re-randomised signature. The same members as `token` in vetting/attestation/0.1.";
|
|
1142
|
+
readonly type: "object";
|
|
1143
|
+
readonly additionalProperties: false;
|
|
1144
|
+
readonly required: readonly ["label", "serial", "shown"];
|
|
1145
|
+
readonly properties: {
|
|
1146
|
+
readonly label: {
|
|
1147
|
+
readonly type: "string";
|
|
1148
|
+
readonly minLength: 1;
|
|
1149
|
+
readonly maxLength: 128;
|
|
1150
|
+
readonly description: "The token label spent under.";
|
|
1151
|
+
};
|
|
1152
|
+
readonly serial: {
|
|
1153
|
+
readonly $ref: "#/$defs/Multibase";
|
|
1154
|
+
readonly description: "The serial revealed by the spend.";
|
|
1155
|
+
};
|
|
1156
|
+
readonly shown: {
|
|
1157
|
+
readonly $ref: "#/$defs/Multibase";
|
|
1158
|
+
readonly description: "The re-randomised token signature, verifiable under the published token key.";
|
|
1159
|
+
};
|
|
1160
|
+
};
|
|
1161
|
+
};
|
|
1162
|
+
readonly StatementMeta: {
|
|
1163
|
+
readonly type: "object";
|
|
1164
|
+
readonly additionalProperties: false;
|
|
1165
|
+
readonly required: readonly ["community", "requirementsDigest", "method", "claimsVerified", "livenessConfirmed", "declaredRelationship", "identityCommitment", "cardDigestMultibase", "validFrom", "validUntil", "tokenLabel", "tokenSerial"];
|
|
1166
|
+
readonly description: "What a Vetting Statement would have said, minus its issuer.";
|
|
1167
|
+
readonly properties: {
|
|
1168
|
+
readonly community: {
|
|
1169
|
+
readonly type: "string";
|
|
1170
|
+
readonly minLength: 1;
|
|
1171
|
+
readonly description: "The community this attestation is for. An attestation is not portable between communities.";
|
|
1172
|
+
};
|
|
1173
|
+
readonly requirementsDigest: {
|
|
1174
|
+
readonly type: "string";
|
|
1175
|
+
readonly minLength: 1;
|
|
1176
|
+
readonly description: "The digest of the criterion's requirements as the vetter read them.";
|
|
1177
|
+
};
|
|
1178
|
+
readonly method: {
|
|
1179
|
+
readonly type: "string";
|
|
1180
|
+
readonly enum: readonly ["inPerson", "video", "priorAcquaintance"];
|
|
1181
|
+
readonly description: "How the vetter met the applicant.";
|
|
1182
|
+
};
|
|
1183
|
+
readonly claimsVerified: {
|
|
1184
|
+
readonly type: "array";
|
|
1185
|
+
readonly minItems: 1;
|
|
1186
|
+
readonly items: {
|
|
1187
|
+
readonly type: "string";
|
|
1188
|
+
readonly minLength: 1;
|
|
1189
|
+
};
|
|
1190
|
+
readonly description: "The claim types the vetter checked.";
|
|
1191
|
+
};
|
|
1192
|
+
readonly livenessConfirmed: {
|
|
1193
|
+
readonly type: "boolean";
|
|
1194
|
+
readonly description: "Whether the vetter confirmed a live person.";
|
|
1195
|
+
};
|
|
1196
|
+
readonly declaredRelationship: {
|
|
1197
|
+
readonly type: "string";
|
|
1198
|
+
readonly enum: readonly ["none", "family", "sameEmployer", "closeFriend", "other"];
|
|
1199
|
+
readonly description: "The relationship the vetter declared, which the community's independence rules count.";
|
|
1200
|
+
};
|
|
1201
|
+
readonly identityCommitment: {
|
|
1202
|
+
readonly type: "string";
|
|
1203
|
+
readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
|
|
1204
|
+
readonly description: "The commitment on the Vetting Card the applicant showed. Consistency across attestations is what stops two applicants pooling them.";
|
|
1205
|
+
};
|
|
1206
|
+
readonly cardDigestMultibase: {
|
|
1207
|
+
readonly type: "string";
|
|
1208
|
+
readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
|
|
1209
|
+
readonly description: "Digest of that card, as the vetter verified it.";
|
|
1210
|
+
};
|
|
1211
|
+
readonly validFrom: {
|
|
1212
|
+
readonly type: "string";
|
|
1213
|
+
readonly format: "date";
|
|
1214
|
+
readonly description: "A DATE, never a timestamp: an exact time would let a community line an attestation up with a vetter's activity, which undoes the proof without touching it.";
|
|
1215
|
+
};
|
|
1216
|
+
readonly validUntil: {
|
|
1217
|
+
readonly type: "string";
|
|
1218
|
+
readonly format: "date";
|
|
1219
|
+
readonly description: "A date, for the same reason.";
|
|
1220
|
+
};
|
|
1221
|
+
readonly tokenLabel: {
|
|
1222
|
+
readonly type: "string";
|
|
1223
|
+
readonly minLength: 1;
|
|
1224
|
+
readonly maxLength: 128;
|
|
1225
|
+
readonly description: "The token label spent, repeated inside the bound facts so it cannot be swapped in transit.";
|
|
1226
|
+
};
|
|
1227
|
+
readonly tokenSerial: {
|
|
1228
|
+
readonly type: "string";
|
|
1229
|
+
readonly pattern: "^z[1-9A-HJ-NP-Za-km-z]+$";
|
|
1230
|
+
readonly description: "The token serial spent, likewise bound.";
|
|
1231
|
+
};
|
|
1232
|
+
};
|
|
1233
|
+
};
|
|
1234
|
+
readonly CommunityParameters: {
|
|
1235
|
+
readonly title: "CommunityParameters";
|
|
1236
|
+
readonly description: "The community's hidden-vetting parameters exactly as its join manifest publishes them, under the criterion's `vetting.ext`. The caller copies them in verbatim on every call that needs them, because the community rotates labels and the engine keeps no copy of its own: a stale copy costs the caller a refused proof, never a mistaken one.";
|
|
1237
|
+
readonly $ref: "#/$defs/PublishedConfig";
|
|
1238
|
+
};
|
|
1239
|
+
readonly PublishedConfig: {
|
|
1240
|
+
readonly title: "PublishedConfig";
|
|
1241
|
+
readonly description: "The parameters exactly as they now appear in this community's join manifest, under vetting.ext. What an applicant and a vetter read.";
|
|
1242
|
+
readonly type: "object";
|
|
1243
|
+
readonly additionalProperties: false;
|
|
1244
|
+
readonly required: readonly ["suite", "helperKey", "tokenKey", "vetterLabels", "tokenLabels", "dripPerTick", "tickLength", "events"];
|
|
1245
|
+
readonly properties: {
|
|
1246
|
+
readonly suite: {
|
|
1247
|
+
readonly type: "string";
|
|
1248
|
+
readonly minLength: 1;
|
|
1249
|
+
};
|
|
1250
|
+
readonly helperKey: {
|
|
1251
|
+
readonly type: "string";
|
|
1252
|
+
readonly minLength: 1;
|
|
1253
|
+
readonly description: "The helper verification key, multibase — named for its role on the wire rather than for hvk.";
|
|
1254
|
+
};
|
|
1255
|
+
readonly tokenKey: {
|
|
1256
|
+
readonly type: "string";
|
|
1257
|
+
readonly minLength: 1;
|
|
1258
|
+
readonly description: "The token verification key, multibase — named for its role on the wire rather than for tvk.";
|
|
1259
|
+
};
|
|
1260
|
+
readonly vetterLabels: {
|
|
1261
|
+
readonly type: "array";
|
|
1262
|
+
readonly items: {
|
|
1263
|
+
readonly type: "string";
|
|
1264
|
+
readonly minLength: 1;
|
|
1265
|
+
};
|
|
1266
|
+
readonly description: "Class labels published whole, e.g. vetter/2026-09 — a request names one of these, not the bare period.";
|
|
1267
|
+
};
|
|
1268
|
+
readonly tokenLabels: {
|
|
1269
|
+
readonly type: "array";
|
|
1270
|
+
readonly items: {
|
|
1271
|
+
readonly type: "string";
|
|
1272
|
+
readonly minLength: 1;
|
|
1273
|
+
};
|
|
1274
|
+
};
|
|
1275
|
+
readonly dripPerTick: {
|
|
1276
|
+
readonly type: "integer";
|
|
1277
|
+
readonly minimum: 1;
|
|
1278
|
+
};
|
|
1279
|
+
readonly tickLength: {
|
|
1280
|
+
readonly $ref: "#/$defs/TickLength";
|
|
1281
|
+
};
|
|
1282
|
+
readonly events: {
|
|
1283
|
+
readonly type: "array";
|
|
1284
|
+
readonly items: {
|
|
1285
|
+
readonly $ref: "#/$defs/PublishedEvent";
|
|
1286
|
+
};
|
|
1287
|
+
};
|
|
1288
|
+
};
|
|
1289
|
+
};
|
|
1290
|
+
readonly PublishedEvent: {
|
|
1291
|
+
readonly title: "PublishedEvent";
|
|
1292
|
+
readonly description: "The published shape drops approvedBy and graceDays: who approved is the community's own record, and a vetter is told closesAfter when its request is approved rather than being handed the raw grace period here.";
|
|
1293
|
+
readonly type: "object";
|
|
1294
|
+
readonly additionalProperties: false;
|
|
1295
|
+
readonly required: readonly ["eventId", "startDate", "endDate", "groupFloor", "tiers"];
|
|
1296
|
+
readonly properties: {
|
|
1297
|
+
readonly eventId: {
|
|
1298
|
+
readonly type: "string";
|
|
1299
|
+
readonly minLength: 1;
|
|
1300
|
+
};
|
|
1301
|
+
readonly startDate: {
|
|
1302
|
+
readonly type: "string";
|
|
1303
|
+
readonly format: "date";
|
|
1304
|
+
};
|
|
1305
|
+
readonly endDate: {
|
|
1306
|
+
readonly type: "string";
|
|
1307
|
+
readonly format: "date";
|
|
1308
|
+
};
|
|
1309
|
+
readonly groupFloor: {
|
|
1310
|
+
readonly type: "integer";
|
|
1311
|
+
readonly minimum: 1;
|
|
1312
|
+
};
|
|
1313
|
+
readonly tiers: {
|
|
1314
|
+
readonly type: "array";
|
|
1315
|
+
readonly items: {
|
|
1316
|
+
readonly $ref: "#/$defs/Tier";
|
|
1317
|
+
};
|
|
1318
|
+
};
|
|
1319
|
+
};
|
|
1320
|
+
};
|
|
1321
|
+
readonly Tier: {
|
|
1322
|
+
readonly title: "Tier";
|
|
1323
|
+
readonly type: "object";
|
|
1324
|
+
readonly additionalProperties: false;
|
|
1325
|
+
readonly required: readonly ["name", "dripPerTick"];
|
|
1326
|
+
readonly properties: {
|
|
1327
|
+
readonly name: {
|
|
1328
|
+
readonly type: "string";
|
|
1329
|
+
readonly minLength: 1;
|
|
1330
|
+
readonly description: "How the menu names it: desk, busy-desk.";
|
|
1331
|
+
};
|
|
1332
|
+
readonly dripPerTick: {
|
|
1333
|
+
readonly type: "integer";
|
|
1334
|
+
readonly minimum: 1;
|
|
1335
|
+
readonly description: "How many tokens a tick under this tier yields.";
|
|
1336
|
+
};
|
|
1337
|
+
};
|
|
1338
|
+
};
|
|
1339
|
+
readonly TickLength: {
|
|
1340
|
+
readonly title: "TickLength";
|
|
1341
|
+
readonly type: "string";
|
|
1342
|
+
readonly pattern: "^P(?:\\d+D(?:T\\d+H)?|T\\d+H)$";
|
|
1343
|
+
readonly description: "The length of one tick of the drip, as an ISO 8601 duration in days and/or hours — at least `PT1H`. A label's tick `t` is the window starting `t` tick lengths after the label's start (`vtc/vetting/vetters/pcs-tokens`).";
|
|
1344
|
+
};
|
|
1345
|
+
};
|
|
1346
|
+
};
|
|
1347
|
+
};
|
|
1348
|
+
//# sourceMappingURL=payload.d.ts.map
|