@openvtc/trust-tasks 0.21.15 → 0.22.0
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 +43 -0
- package/dist/_shared/components.d.ts +14 -14
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/vetting/_shared/0.1/identity-vetting.d.ts +2 -2
- package/dist/vetting/_shared/0.1/identity-vetting.d.ts.map +1 -1
- package/dist/vetting/_shared/0.1/vetting-card.d.ts +1 -1
- package/dist/vetting/_shared/0.1/vetting.d.ts +1 -1
- package/dist/vetting/request/0.1/payload.d.ts +5 -5
- package/dist/vetting/request/0.1/payload.js +2 -2
- package/dist/vetting/request/0.1/payload.js.map +1 -1
- package/dist/vta/attestation/mnemonic-status/0.1/payload.d.ts +281 -0
- package/dist/vta/attestation/mnemonic-status/0.1/payload.d.ts.map +1 -0
- package/dist/vta/attestation/mnemonic-status/0.1/payload.js +157 -0
- package/dist/vta/attestation/mnemonic-status/0.1/payload.js.map +1 -0
- package/dist/vta/metrics/show/0.1/payload.d.ts +674 -0
- package/dist/vta/metrics/show/0.1/payload.d.ts.map +1 -0
- package/dist/vta/metrics/show/0.1/payload.js +387 -0
- package/dist/vta/metrics/show/0.1/payload.js.map +1 -0
- package/dist/vtc/_shared/0.1/endorsement-type.d.ts +1 -1
- package/dist/vtc/_shared/0.1/endorsement.d.ts +1 -1
- package/dist/vtc/auth/recognise/0.2/payload.d.ts +3 -3
- package/dist/vtc/auth/recognise/0.2/payload.js +1 -1
- package/dist/vtc/auth/recognise/0.2/payload.js.map +1 -1
- package/dist/vtc/endorsement-types/list/0.1/payload.d.ts +8 -8
- package/dist/vtc/endorsement-types/list/0.1/payload.js +4 -4
- package/dist/vtc/endorsement-types/list/0.1/payload.js.map +1 -1
- package/dist/vtc/endorsement-types/register/0.1/payload.d.ts +16 -11
- package/dist/vtc/endorsement-types/register/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/endorsement-types/register/0.1/payload.js +7 -6
- package/dist/vtc/endorsement-types/register/0.1/payload.js.map +1 -1
- package/dist/vtc/endorsements/issue/0.1/payload.d.ts +42 -42
- package/dist/vtc/endorsements/issue/0.1/payload.js +19 -19
- package/dist/vtc/endorsements/issue/0.1/payload.js.map +1 -1
- package/dist/vtc/endorsements/list/0.1/payload.d.ts +31 -31
- package/dist/vtc/endorsements/list/0.1/payload.js +15 -15
- package/dist/vtc/endorsements/list/0.1/payload.js.map +1 -1
- package/dist/vtc/endorsements/revoke/0.1/payload.d.ts +5 -5
- package/dist/vtc/endorsements/revoke/0.1/payload.js +2 -2
- package/dist/vtc/endorsements/revoke/0.1/payload.js.map +1 -1
- package/dist/vtc/endorsements/show/0.1/payload.d.ts +28 -28
- package/dist/vtc/endorsements/show/0.1/payload.js +14 -14
- package/dist/vtc/endorsements/show/0.1/payload.js.map +1 -1
- package/dist/vtc/join-requests/decide/0.1/payload.d.ts +10 -10
- package/dist/vtc/join-requests/decide/0.1/payload.js +4 -4
- package/dist/vtc/join-requests/decide/0.1/payload.js.map +1 -1
- package/dist/vtc/join-requests/manifest/0.2/payload.d.ts +10 -10
- package/dist/vtc/join-requests/manifest/0.2/payload.js +4 -4
- package/dist/vtc/join-requests/manifest/0.2/payload.js.map +1 -1
- package/dist/vtc/members/credentials/0.1/payload.d.ts +5 -5
- package/dist/vtc/members/credentials/0.1/payload.js +2 -2
- package/dist/vtc/members/credentials/0.1/payload.js.map +1 -1
- package/dist/vtc/members/list/0.1/payload.d.ts +8 -8
- package/dist/vtc/members/list/0.1/payload.js +4 -4
- package/dist/vtc/members/list/0.1/payload.js.map +1 -1
- package/dist/vtc/members/personhood/assert/0.1/payload.d.ts +14 -14
- package/dist/vtc/members/personhood/assert/0.1/payload.js +6 -6
- package/dist/vtc/members/personhood/assert/0.1/payload.js.map +1 -1
- package/dist/vtc/members/personhood/revoke/0.1/payload.d.ts +10 -10
- package/dist/vtc/members/personhood/revoke/0.1/payload.js +4 -4
- package/dist/vtc/members/personhood/revoke/0.1/payload.js.map +1 -1
- package/dist/vtc/members/renew/0.1/payload.d.ts +14 -14
- package/dist/vtc/members/renew/0.1/payload.js +6 -6
- package/dist/vtc/members/renew/0.1/payload.js.map +1 -1
- package/dist/vtc/members/rotate/0.1/payload.d.ts +14 -14
- package/dist/vtc/members/rotate/0.1/payload.js +6 -6
- package/dist/vtc/members/rotate/0.1/payload.js.map +1 -1
- package/dist/vtc/members/show/0.1/payload.d.ts +8 -8
- package/dist/vtc/members/show/0.1/payload.js +4 -4
- package/dist/vtc/members/show/0.1/payload.js.map +1 -1
- package/dist/vtc/members/update/0.1/payload.d.ts +8 -8
- package/dist/vtc/members/update/0.1/payload.js +4 -4
- package/dist/vtc/members/update/0.1/payload.js.map +1 -1
- package/dist/vtc/schemas/accepts/list/0.1/payload.d.ts +8 -8
- package/dist/vtc/schemas/accepts/list/0.1/payload.js +4 -4
- package/dist/vtc/schemas/accepts/list/0.1/payload.js.map +1 -1
- package/dist/vtc/schemas/accepts/register/0.1/payload.d.ts +8 -8
- package/dist/vtc/schemas/accepts/register/0.1/payload.js +4 -4
- package/dist/vtc/schemas/accepts/register/0.1/payload.js.map +1 -1
- package/dist/vtc/schemas/accepts/show/0.1/payload.d.ts +8 -8
- package/dist/vtc/schemas/accepts/show/0.1/payload.js +4 -4
- package/dist/vtc/schemas/accepts/show/0.1/payload.js.map +1 -1
- package/dist/vtc/schemas/list/0.1/payload.d.ts +4 -4
- package/dist/vtc/schemas/list/0.1/payload.js +2 -2
- package/dist/vtc/schemas/list/0.1/payload.js.map +1 -1
- package/dist/vtc/schemas/register/0.1/payload.d.ts +4 -4
- package/dist/vtc/schemas/register/0.1/payload.js +2 -2
- package/dist/vtc/schemas/register/0.1/payload.js.map +1 -1
- package/dist/vtc/schemas/show/0.1/payload.d.ts +4 -4
- package/dist/vtc/schemas/show/0.1/payload.js +2 -2
- package/dist/vtc/schemas/show/0.1/payload.js.map +1 -1
- package/dist/vtc/vetting/hidden/publish/0.1/payload.d.ts +1385 -0
- package/dist/vtc/vetting/hidden/publish/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/vetting/hidden/publish/0.1/payload.js +735 -0
- package/dist/vtc/vetting/hidden/publish/0.1/payload.js.map +1 -0
- package/dist/vtc/vetting/vetters/grant/0.1/payload.d.ts +13 -13
- package/dist/vtc/vetting/vetters/grant/0.1/payload.js +5 -5
- package/dist/vtc/vetting/vetters/grant/0.1/payload.js.map +1 -1
- package/dist/witness/session/submit/0.1/payload.d.ts +5 -5
- package/dist/witness/session/submit/0.1/payload.js +2 -2
- package/dist/witness/session/submit/0.1/payload.js.map +1 -1
- package/package.json +1 -1
- package/src/_shared/components.ts +14 -14
- package/src/index.ts +3 -0
- package/src/vetting/_shared/0.1/identity-vetting.ts +2 -2
- package/src/vetting/_shared/0.1/vetting-card.ts +1 -1
- package/src/vetting/_shared/0.1/vetting.ts +1 -1
- package/src/vetting/request/0.1/payload.ts +3 -3
- package/src/vta/attestation/mnemonic-status/0.1/payload.ts +203 -0
- package/src/vta/metrics/show/0.1/payload.ts +418 -0
- package/src/vtc/_shared/0.1/endorsement-type.ts +1 -1
- package/src/vtc/_shared/0.1/endorsement.ts +1 -1
- package/src/vtc/auth/recognise/0.2/payload.ts +2 -2
- package/src/vtc/endorsement-types/list/0.1/payload.ts +4 -4
- package/src/vtc/endorsement-types/register/0.1/payload.ts +11 -7
- package/src/vtc/endorsements/issue/0.1/payload.ts +23 -23
- package/src/vtc/endorsements/list/0.1/payload.ts +16 -16
- package/src/vtc/endorsements/revoke/0.1/payload.ts +3 -3
- package/src/vtc/endorsements/show/0.1/payload.ts +14 -14
- package/src/vtc/join-requests/decide/0.1/payload.ts +6 -6
- package/src/vtc/join-requests/manifest/0.2/payload.ts +6 -6
- package/src/vtc/members/credentials/0.1/payload.ts +3 -3
- package/src/vtc/members/list/0.1/payload.ts +4 -4
- package/src/vtc/members/personhood/assert/0.1/payload.ts +8 -8
- package/src/vtc/members/personhood/revoke/0.1/payload.ts +6 -6
- package/src/vtc/members/renew/0.1/payload.ts +8 -8
- package/src/vtc/members/rotate/0.1/payload.ts +8 -8
- package/src/vtc/members/show/0.1/payload.ts +4 -4
- package/src/vtc/members/update/0.1/payload.ts +4 -4
- package/src/vtc/schemas/accepts/list/0.1/payload.ts +4 -4
- package/src/vtc/schemas/accepts/register/0.1/payload.ts +4 -4
- package/src/vtc/schemas/accepts/show/0.1/payload.ts +4 -4
- package/src/vtc/schemas/list/0.1/payload.ts +2 -2
- package/src/vtc/schemas/register/0.1/payload.ts +2 -2
- package/src/vtc/schemas/show/0.1/payload.ts +2 -2
- package/src/vtc/vetting/hidden/publish/0.1/payload.ts +905 -0
- package/src/vtc/vetting/vetters/grant/0.1/payload.ts +8 -8
- package/src/witness/session/submit/0.1/payload.ts +3 -3
|
@@ -0,0 +1,905 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
|
|
3
|
+
* Source: specs/vtc/vetting/hidden/publish/0.1/payload.schema.json
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { Ext } from "../../../../../_shared/components.js";
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Turn on (or rotate the parameters of) hidden-vetter admission for one criterion. Every member but criterionId has a default. The outer document members are owned by the framework — SPEC §6.3.
|
|
11
|
+
*/
|
|
12
|
+
export interface VTCVettingHiddenPublishPayload {
|
|
13
|
+
/**
|
|
14
|
+
* The Accepts criterion this applies to. It must already ask for vetting.
|
|
15
|
+
*/
|
|
16
|
+
criterionId: string;
|
|
17
|
+
/**
|
|
18
|
+
* Live vetter class periods, current first (e.g. ["2026-10", "2026-09"]). Defaults to the current month.
|
|
19
|
+
*
|
|
20
|
+
* @minItems 1
|
|
21
|
+
*/
|
|
22
|
+
livePeriods?: [string, ...string[]];
|
|
23
|
+
/**
|
|
24
|
+
* Live token labels (e.g. ["token/2026-09"]). Defaults to the current month's.
|
|
25
|
+
*
|
|
26
|
+
* @minItems 1
|
|
27
|
+
*/
|
|
28
|
+
liveTokenLabels?: [string, ...string[]];
|
|
29
|
+
/**
|
|
30
|
+
* How many attestation tokens a vetter draws per tick. Defaults to three.
|
|
31
|
+
*/
|
|
32
|
+
dripPerTick?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Events this community is running, replacing whatever was there. Absent or empty removes every event.
|
|
35
|
+
*/
|
|
36
|
+
events?: RequestEvent[];
|
|
37
|
+
ext?: Ext;
|
|
38
|
+
}
|
|
39
|
+
export interface RequestEvent {
|
|
40
|
+
/**
|
|
41
|
+
* The community's name for the gathering. It is the anonymity set for every token spent under this event, so it names something people attend — never one desk or one shift.
|
|
42
|
+
*/
|
|
43
|
+
eventId: string;
|
|
44
|
+
/**
|
|
45
|
+
* First day of the event, inclusive.
|
|
46
|
+
*/
|
|
47
|
+
startDate: string;
|
|
48
|
+
/**
|
|
49
|
+
* Last day of the event, inclusive.
|
|
50
|
+
*/
|
|
51
|
+
endDate: string;
|
|
52
|
+
/**
|
|
53
|
+
* Days after endDate the label keeps being accepted. Defaults to fourteen.
|
|
54
|
+
*/
|
|
55
|
+
graceDays?: number;
|
|
56
|
+
/**
|
|
57
|
+
* The smallest group this community will open the label for. Defaults to three.
|
|
58
|
+
*/
|
|
59
|
+
groupFloor?: number;
|
|
60
|
+
/**
|
|
61
|
+
* The published menu of rates a vetter may pick from.
|
|
62
|
+
*
|
|
63
|
+
* @minItems 1
|
|
64
|
+
*/
|
|
65
|
+
tiers: [Tier, ...Tier[]];
|
|
66
|
+
/**
|
|
67
|
+
* Who approved the event. Absent means nobody has, and the label is not live whatever else is true.
|
|
68
|
+
*/
|
|
69
|
+
approvedBy?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface Tier {
|
|
72
|
+
/**
|
|
73
|
+
* How the menu names it: desk, busy-desk.
|
|
74
|
+
*/
|
|
75
|
+
name: string;
|
|
76
|
+
/**
|
|
77
|
+
* How many tokens a tick under this tier yields.
|
|
78
|
+
*/
|
|
79
|
+
dripPerTick: number;
|
|
80
|
+
}
|
|
81
|
+
export interface VTCVettingHiddenPublishResponsePayload {
|
|
82
|
+
/**
|
|
83
|
+
* The criterion that now accepts a hidden proof.
|
|
84
|
+
*/
|
|
85
|
+
criterionId: string;
|
|
86
|
+
stored: StoredConfig;
|
|
87
|
+
published: PublishedConfig;
|
|
88
|
+
/**
|
|
89
|
+
* The criterion's requirementsDigest after the change. It moves, because the digest covers the published parameters — an applicant mid-application is told its requirements changed, which is the honest answer. Null only when the criterion's manifest entry carries none.
|
|
90
|
+
*/
|
|
91
|
+
requirementsDigest: string | null;
|
|
92
|
+
ext?: Ext;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* The parameters exactly as the community stores them, including the helper key it never publishes.
|
|
96
|
+
*/
|
|
97
|
+
export interface StoredConfig {
|
|
98
|
+
/**
|
|
99
|
+
* The blind-signature suite in force, e.g. ps-ddh-bls12381.
|
|
100
|
+
*/
|
|
101
|
+
suite: string;
|
|
102
|
+
/**
|
|
103
|
+
* The helper verification key, multibase. A public value, published as helperKey.
|
|
104
|
+
*/
|
|
105
|
+
hvk: string;
|
|
106
|
+
/**
|
|
107
|
+
* The token verification key, multibase. Never the same key as hvk.
|
|
108
|
+
*/
|
|
109
|
+
tvk: string;
|
|
110
|
+
/**
|
|
111
|
+
* Live vetter class periods, current first, stored as the bare YYYY-MM period.
|
|
112
|
+
*/
|
|
113
|
+
livePeriods: string[];
|
|
114
|
+
liveTokenLabels: string[];
|
|
115
|
+
dripPerTick: number;
|
|
116
|
+
events: StoredEvent[];
|
|
117
|
+
}
|
|
118
|
+
export interface StoredEvent {
|
|
119
|
+
eventId: string;
|
|
120
|
+
startDate: string;
|
|
121
|
+
endDate: string;
|
|
122
|
+
graceDays: number;
|
|
123
|
+
groupFloor: number;
|
|
124
|
+
tiers: Tier[];
|
|
125
|
+
/**
|
|
126
|
+
* Who approved the event, or null when nobody has. Recorded in storage only — dropped from the published shape (see published.events).
|
|
127
|
+
*/
|
|
128
|
+
approvedBy?: string | null;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* The parameters exactly as they now appear in this community's join manifest, under vetting.ext. What an applicant and a vetter read.
|
|
132
|
+
*/
|
|
133
|
+
export interface PublishedConfig {
|
|
134
|
+
suite: string;
|
|
135
|
+
/**
|
|
136
|
+
* The helper verification key, multibase — named for its role on the wire rather than for hvk.
|
|
137
|
+
*/
|
|
138
|
+
helperKey: string;
|
|
139
|
+
/**
|
|
140
|
+
* The token verification key, multibase — named for its role on the wire rather than for tvk.
|
|
141
|
+
*/
|
|
142
|
+
tokenKey: string;
|
|
143
|
+
/**
|
|
144
|
+
* Class labels published whole, e.g. vetter/2026-09 — a request names one of these, not the bare period.
|
|
145
|
+
*/
|
|
146
|
+
vetterLabels: string[];
|
|
147
|
+
tokenLabels: string[];
|
|
148
|
+
dripPerTick: number;
|
|
149
|
+
events: PublishedEvent[];
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* 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.
|
|
153
|
+
*/
|
|
154
|
+
export interface PublishedEvent {
|
|
155
|
+
eventId: string;
|
|
156
|
+
startDate: string;
|
|
157
|
+
endDate: string;
|
|
158
|
+
groupFloor: number;
|
|
159
|
+
tiers: Tier[];
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** Shared definitions this specification references, re-exported under the names it used to declare them with. */
|
|
163
|
+
export type { Ext };
|
|
164
|
+
|
|
165
|
+
/** Trust Task type URI. */
|
|
166
|
+
export const TYPE_URI = "https://trusttasks.org/spec/vtc/vetting/hidden/publish/0.1" as const;
|
|
167
|
+
|
|
168
|
+
/** Stable alias for this specification's request payload shape. */
|
|
169
|
+
export type Payload = VTCVettingHiddenPublishPayload;
|
|
170
|
+
|
|
171
|
+
/** Trust Task response type URI (request type URI + "#response"). */
|
|
172
|
+
export const RESPONSE_TYPE_URI = "https://trusttasks.org/spec/vtc/vetting/hidden/publish/0.1#response" as const;
|
|
173
|
+
|
|
174
|
+
/** Stable alias for this specification's success-response payload shape. */
|
|
175
|
+
export type Response = VTCVettingHiddenPublishResponsePayload;
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* This specification's payload schema, as a value.
|
|
179
|
+
*
|
|
180
|
+
* SPEC.md §7.2 item 2 is performed against this. It is shipped as data
|
|
181
|
+
* rather than only as a `.json` file because TypeScript types are erased
|
|
182
|
+
* at runtime: without a schema a consumer has nothing to validate, and
|
|
183
|
+
* every REQUIRED payload member is optional in practice. Cross-file
|
|
184
|
+
* `$ref`s are already inlined, so it needs no resolver.
|
|
185
|
+
*/
|
|
186
|
+
export const PAYLOAD_SCHEMA = {
|
|
187
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
188
|
+
"$id": "https://trusttasks.org/spec/vtc/vetting/hidden/publish/0.1",
|
|
189
|
+
"title": "VTC Vetting — Hidden — Publish — payload",
|
|
190
|
+
"description": "Turn on (or rotate the parameters of) hidden-vetter admission for one criterion. Every member but criterionId has a default. The outer document members are owned by the framework — SPEC §6.3.",
|
|
191
|
+
"type": "object",
|
|
192
|
+
"additionalProperties": false,
|
|
193
|
+
"required": [
|
|
194
|
+
"criterionId"
|
|
195
|
+
],
|
|
196
|
+
"properties": {
|
|
197
|
+
"criterionId": {
|
|
198
|
+
"type": "string",
|
|
199
|
+
"minLength": 1,
|
|
200
|
+
"description": "The Accepts criterion this applies to. It must already ask for vetting."
|
|
201
|
+
},
|
|
202
|
+
"livePeriods": {
|
|
203
|
+
"type": "array",
|
|
204
|
+
"items": {
|
|
205
|
+
"type": "string",
|
|
206
|
+
"pattern": "^[0-9]{4}-(0[1-9]|1[0-2])$"
|
|
207
|
+
},
|
|
208
|
+
"minItems": 1,
|
|
209
|
+
"description": "Live vetter class periods, current first (e.g. [\"2026-10\", \"2026-09\"]). Defaults to the current month."
|
|
210
|
+
},
|
|
211
|
+
"liveTokenLabels": {
|
|
212
|
+
"type": "array",
|
|
213
|
+
"items": {
|
|
214
|
+
"type": "string",
|
|
215
|
+
"minLength": 1
|
|
216
|
+
},
|
|
217
|
+
"minItems": 1,
|
|
218
|
+
"description": "Live token labels (e.g. [\"token/2026-09\"]). Defaults to the current month's."
|
|
219
|
+
},
|
|
220
|
+
"dripPerTick": {
|
|
221
|
+
"type": "integer",
|
|
222
|
+
"minimum": 1,
|
|
223
|
+
"description": "How many attestation tokens a vetter draws per tick. Defaults to three."
|
|
224
|
+
},
|
|
225
|
+
"events": {
|
|
226
|
+
"type": "array",
|
|
227
|
+
"items": {
|
|
228
|
+
"$ref": "#/$defs/RequestEvent"
|
|
229
|
+
},
|
|
230
|
+
"description": "Events this community is running, replacing whatever was there. Absent or empty removes every event."
|
|
231
|
+
},
|
|
232
|
+
"ext": {
|
|
233
|
+
"$ref": "#/$defs/Ext"
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
"$defs": {
|
|
237
|
+
"RequestEvent": {
|
|
238
|
+
"title": "RequestEvent",
|
|
239
|
+
"type": "object",
|
|
240
|
+
"additionalProperties": false,
|
|
241
|
+
"required": [
|
|
242
|
+
"eventId",
|
|
243
|
+
"startDate",
|
|
244
|
+
"endDate",
|
|
245
|
+
"tiers"
|
|
246
|
+
],
|
|
247
|
+
"properties": {
|
|
248
|
+
"eventId": {
|
|
249
|
+
"type": "string",
|
|
250
|
+
"minLength": 1,
|
|
251
|
+
"description": "The community's name for the gathering. It is the anonymity set for every token spent under this event, so it names something people attend — never one desk or one shift."
|
|
252
|
+
},
|
|
253
|
+
"startDate": {
|
|
254
|
+
"type": "string",
|
|
255
|
+
"format": "date",
|
|
256
|
+
"description": "First day of the event, inclusive."
|
|
257
|
+
},
|
|
258
|
+
"endDate": {
|
|
259
|
+
"type": "string",
|
|
260
|
+
"format": "date",
|
|
261
|
+
"description": "Last day of the event, inclusive."
|
|
262
|
+
},
|
|
263
|
+
"graceDays": {
|
|
264
|
+
"type": "integer",
|
|
265
|
+
"minimum": 0,
|
|
266
|
+
"description": "Days after endDate the label keeps being accepted. Defaults to fourteen."
|
|
267
|
+
},
|
|
268
|
+
"groupFloor": {
|
|
269
|
+
"type": "integer",
|
|
270
|
+
"minimum": 1,
|
|
271
|
+
"description": "The smallest group this community will open the label for. Defaults to three."
|
|
272
|
+
},
|
|
273
|
+
"tiers": {
|
|
274
|
+
"type": "array",
|
|
275
|
+
"items": {
|
|
276
|
+
"$ref": "#/$defs/Tier"
|
|
277
|
+
},
|
|
278
|
+
"minItems": 1,
|
|
279
|
+
"description": "The published menu of rates a vetter may pick from."
|
|
280
|
+
},
|
|
281
|
+
"approvedBy": {
|
|
282
|
+
"type": "string",
|
|
283
|
+
"minLength": 1,
|
|
284
|
+
"description": "Who approved the event. Absent means nobody has, and the label is not live whatever else is true."
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
},
|
|
288
|
+
"Tier": {
|
|
289
|
+
"title": "Tier",
|
|
290
|
+
"type": "object",
|
|
291
|
+
"additionalProperties": false,
|
|
292
|
+
"required": [
|
|
293
|
+
"name",
|
|
294
|
+
"dripPerTick"
|
|
295
|
+
],
|
|
296
|
+
"properties": {
|
|
297
|
+
"name": {
|
|
298
|
+
"type": "string",
|
|
299
|
+
"minLength": 1,
|
|
300
|
+
"description": "How the menu names it: desk, busy-desk."
|
|
301
|
+
},
|
|
302
|
+
"dripPerTick": {
|
|
303
|
+
"type": "integer",
|
|
304
|
+
"minimum": 1,
|
|
305
|
+
"description": "How many tokens a tick under this tier yields."
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
},
|
|
309
|
+
"StoredEvent": {
|
|
310
|
+
"title": "StoredEvent",
|
|
311
|
+
"type": "object",
|
|
312
|
+
"additionalProperties": false,
|
|
313
|
+
"required": [
|
|
314
|
+
"eventId",
|
|
315
|
+
"startDate",
|
|
316
|
+
"endDate",
|
|
317
|
+
"graceDays",
|
|
318
|
+
"groupFloor",
|
|
319
|
+
"tiers"
|
|
320
|
+
],
|
|
321
|
+
"properties": {
|
|
322
|
+
"eventId": {
|
|
323
|
+
"type": "string",
|
|
324
|
+
"minLength": 1
|
|
325
|
+
},
|
|
326
|
+
"startDate": {
|
|
327
|
+
"type": "string",
|
|
328
|
+
"format": "date"
|
|
329
|
+
},
|
|
330
|
+
"endDate": {
|
|
331
|
+
"type": "string",
|
|
332
|
+
"format": "date"
|
|
333
|
+
},
|
|
334
|
+
"graceDays": {
|
|
335
|
+
"type": "integer",
|
|
336
|
+
"minimum": 0
|
|
337
|
+
},
|
|
338
|
+
"groupFloor": {
|
|
339
|
+
"type": "integer",
|
|
340
|
+
"minimum": 1
|
|
341
|
+
},
|
|
342
|
+
"tiers": {
|
|
343
|
+
"type": "array",
|
|
344
|
+
"items": {
|
|
345
|
+
"$ref": "#/$defs/Tier"
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
"approvedBy": {
|
|
349
|
+
"type": [
|
|
350
|
+
"string",
|
|
351
|
+
"null"
|
|
352
|
+
],
|
|
353
|
+
"description": "Who approved the event, or null when nobody has. Recorded in storage only — dropped from the published shape (see published.events)."
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
},
|
|
357
|
+
"PublishedEvent": {
|
|
358
|
+
"title": "PublishedEvent",
|
|
359
|
+
"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.",
|
|
360
|
+
"type": "object",
|
|
361
|
+
"additionalProperties": false,
|
|
362
|
+
"required": [
|
|
363
|
+
"eventId",
|
|
364
|
+
"startDate",
|
|
365
|
+
"endDate",
|
|
366
|
+
"groupFloor",
|
|
367
|
+
"tiers"
|
|
368
|
+
],
|
|
369
|
+
"properties": {
|
|
370
|
+
"eventId": {
|
|
371
|
+
"type": "string",
|
|
372
|
+
"minLength": 1
|
|
373
|
+
},
|
|
374
|
+
"startDate": {
|
|
375
|
+
"type": "string",
|
|
376
|
+
"format": "date"
|
|
377
|
+
},
|
|
378
|
+
"endDate": {
|
|
379
|
+
"type": "string",
|
|
380
|
+
"format": "date"
|
|
381
|
+
},
|
|
382
|
+
"groupFloor": {
|
|
383
|
+
"type": "integer",
|
|
384
|
+
"minimum": 1
|
|
385
|
+
},
|
|
386
|
+
"tiers": {
|
|
387
|
+
"type": "array",
|
|
388
|
+
"items": {
|
|
389
|
+
"$ref": "#/$defs/Tier"
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
},
|
|
394
|
+
"StoredConfig": {
|
|
395
|
+
"title": "StoredConfig",
|
|
396
|
+
"description": "The parameters exactly as the community stores them, including the helper key it never publishes.",
|
|
397
|
+
"type": "object",
|
|
398
|
+
"additionalProperties": false,
|
|
399
|
+
"required": [
|
|
400
|
+
"suite",
|
|
401
|
+
"hvk",
|
|
402
|
+
"tvk",
|
|
403
|
+
"livePeriods",
|
|
404
|
+
"liveTokenLabels",
|
|
405
|
+
"dripPerTick",
|
|
406
|
+
"events"
|
|
407
|
+
],
|
|
408
|
+
"properties": {
|
|
409
|
+
"suite": {
|
|
410
|
+
"type": "string",
|
|
411
|
+
"minLength": 1,
|
|
412
|
+
"description": "The blind-signature suite in force, e.g. ps-ddh-bls12381."
|
|
413
|
+
},
|
|
414
|
+
"hvk": {
|
|
415
|
+
"type": "string",
|
|
416
|
+
"minLength": 1,
|
|
417
|
+
"description": "The helper verification key, multibase. A public value, published as helperKey."
|
|
418
|
+
},
|
|
419
|
+
"tvk": {
|
|
420
|
+
"type": "string",
|
|
421
|
+
"minLength": 1,
|
|
422
|
+
"description": "The token verification key, multibase. Never the same key as hvk."
|
|
423
|
+
},
|
|
424
|
+
"livePeriods": {
|
|
425
|
+
"type": "array",
|
|
426
|
+
"items": {
|
|
427
|
+
"type": "string",
|
|
428
|
+
"pattern": "^[0-9]{4}-(0[1-9]|1[0-2])$"
|
|
429
|
+
},
|
|
430
|
+
"description": "Live vetter class periods, current first, stored as the bare YYYY-MM period."
|
|
431
|
+
},
|
|
432
|
+
"liveTokenLabels": {
|
|
433
|
+
"type": "array",
|
|
434
|
+
"items": {
|
|
435
|
+
"type": "string",
|
|
436
|
+
"minLength": 1
|
|
437
|
+
}
|
|
438
|
+
},
|
|
439
|
+
"dripPerTick": {
|
|
440
|
+
"type": "integer",
|
|
441
|
+
"minimum": 1
|
|
442
|
+
},
|
|
443
|
+
"events": {
|
|
444
|
+
"type": "array",
|
|
445
|
+
"items": {
|
|
446
|
+
"$ref": "#/$defs/StoredEvent"
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
},
|
|
451
|
+
"PublishedConfig": {
|
|
452
|
+
"title": "PublishedConfig",
|
|
453
|
+
"description": "The parameters exactly as they now appear in this community's join manifest, under vetting.ext. What an applicant and a vetter read.",
|
|
454
|
+
"type": "object",
|
|
455
|
+
"additionalProperties": false,
|
|
456
|
+
"required": [
|
|
457
|
+
"suite",
|
|
458
|
+
"helperKey",
|
|
459
|
+
"tokenKey",
|
|
460
|
+
"vetterLabels",
|
|
461
|
+
"tokenLabels",
|
|
462
|
+
"dripPerTick",
|
|
463
|
+
"events"
|
|
464
|
+
],
|
|
465
|
+
"properties": {
|
|
466
|
+
"suite": {
|
|
467
|
+
"type": "string",
|
|
468
|
+
"minLength": 1
|
|
469
|
+
},
|
|
470
|
+
"helperKey": {
|
|
471
|
+
"type": "string",
|
|
472
|
+
"minLength": 1,
|
|
473
|
+
"description": "The helper verification key, multibase — named for its role on the wire rather than for hvk."
|
|
474
|
+
},
|
|
475
|
+
"tokenKey": {
|
|
476
|
+
"type": "string",
|
|
477
|
+
"minLength": 1,
|
|
478
|
+
"description": "The token verification key, multibase — named for its role on the wire rather than for tvk."
|
|
479
|
+
},
|
|
480
|
+
"vetterLabels": {
|
|
481
|
+
"type": "array",
|
|
482
|
+
"items": {
|
|
483
|
+
"type": "string",
|
|
484
|
+
"minLength": 1
|
|
485
|
+
},
|
|
486
|
+
"description": "Class labels published whole, e.g. vetter/2026-09 — a request names one of these, not the bare period."
|
|
487
|
+
},
|
|
488
|
+
"tokenLabels": {
|
|
489
|
+
"type": "array",
|
|
490
|
+
"items": {
|
|
491
|
+
"type": "string",
|
|
492
|
+
"minLength": 1
|
|
493
|
+
}
|
|
494
|
+
},
|
|
495
|
+
"dripPerTick": {
|
|
496
|
+
"type": "integer",
|
|
497
|
+
"minimum": 1
|
|
498
|
+
},
|
|
499
|
+
"events": {
|
|
500
|
+
"type": "array",
|
|
501
|
+
"items": {
|
|
502
|
+
"$ref": "#/$defs/PublishedEvent"
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
},
|
|
507
|
+
"Response": {
|
|
508
|
+
"$anchor": "response",
|
|
509
|
+
"title": "VTC Vetting — Hidden — Publish — response payload",
|
|
510
|
+
"type": "object",
|
|
511
|
+
"additionalProperties": false,
|
|
512
|
+
"required": [
|
|
513
|
+
"criterionId",
|
|
514
|
+
"stored",
|
|
515
|
+
"published",
|
|
516
|
+
"requirementsDigest"
|
|
517
|
+
],
|
|
518
|
+
"properties": {
|
|
519
|
+
"criterionId": {
|
|
520
|
+
"type": "string",
|
|
521
|
+
"minLength": 1,
|
|
522
|
+
"description": "The criterion that now accepts a hidden proof."
|
|
523
|
+
},
|
|
524
|
+
"stored": {
|
|
525
|
+
"$ref": "#/$defs/StoredConfig"
|
|
526
|
+
},
|
|
527
|
+
"published": {
|
|
528
|
+
"$ref": "#/$defs/PublishedConfig"
|
|
529
|
+
},
|
|
530
|
+
"requirementsDigest": {
|
|
531
|
+
"type": [
|
|
532
|
+
"string",
|
|
533
|
+
"null"
|
|
534
|
+
],
|
|
535
|
+
"description": "The criterion's requirementsDigest after the change. It moves, because the digest covers the published parameters — an applicant mid-application is told its requirements changed, which is the honest answer. Null only when the criterion's manifest entry carries none."
|
|
536
|
+
},
|
|
537
|
+
"ext": {
|
|
538
|
+
"$ref": "#/$defs/Ext"
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
},
|
|
542
|
+
"Ext": {
|
|
543
|
+
"title": "Ext",
|
|
544
|
+
"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.",
|
|
545
|
+
"type": "object",
|
|
546
|
+
"minProperties": 1,
|
|
547
|
+
"additionalProperties": true,
|
|
548
|
+
"propertyNames": {
|
|
549
|
+
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
} as const;
|
|
554
|
+
|
|
555
|
+
/** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
|
|
556
|
+
export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
557
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
558
|
+
"$ref": "#/$defs/Response",
|
|
559
|
+
"$defs": {
|
|
560
|
+
"RequestEvent": {
|
|
561
|
+
"title": "RequestEvent",
|
|
562
|
+
"type": "object",
|
|
563
|
+
"additionalProperties": false,
|
|
564
|
+
"required": [
|
|
565
|
+
"eventId",
|
|
566
|
+
"startDate",
|
|
567
|
+
"endDate",
|
|
568
|
+
"tiers"
|
|
569
|
+
],
|
|
570
|
+
"properties": {
|
|
571
|
+
"eventId": {
|
|
572
|
+
"type": "string",
|
|
573
|
+
"minLength": 1,
|
|
574
|
+
"description": "The community's name for the gathering. It is the anonymity set for every token spent under this event, so it names something people attend — never one desk or one shift."
|
|
575
|
+
},
|
|
576
|
+
"startDate": {
|
|
577
|
+
"type": "string",
|
|
578
|
+
"format": "date",
|
|
579
|
+
"description": "First day of the event, inclusive."
|
|
580
|
+
},
|
|
581
|
+
"endDate": {
|
|
582
|
+
"type": "string",
|
|
583
|
+
"format": "date",
|
|
584
|
+
"description": "Last day of the event, inclusive."
|
|
585
|
+
},
|
|
586
|
+
"graceDays": {
|
|
587
|
+
"type": "integer",
|
|
588
|
+
"minimum": 0,
|
|
589
|
+
"description": "Days after endDate the label keeps being accepted. Defaults to fourteen."
|
|
590
|
+
},
|
|
591
|
+
"groupFloor": {
|
|
592
|
+
"type": "integer",
|
|
593
|
+
"minimum": 1,
|
|
594
|
+
"description": "The smallest group this community will open the label for. Defaults to three."
|
|
595
|
+
},
|
|
596
|
+
"tiers": {
|
|
597
|
+
"type": "array",
|
|
598
|
+
"items": {
|
|
599
|
+
"$ref": "#/$defs/Tier"
|
|
600
|
+
},
|
|
601
|
+
"minItems": 1,
|
|
602
|
+
"description": "The published menu of rates a vetter may pick from."
|
|
603
|
+
},
|
|
604
|
+
"approvedBy": {
|
|
605
|
+
"type": "string",
|
|
606
|
+
"minLength": 1,
|
|
607
|
+
"description": "Who approved the event. Absent means nobody has, and the label is not live whatever else is true."
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
},
|
|
611
|
+
"Tier": {
|
|
612
|
+
"title": "Tier",
|
|
613
|
+
"type": "object",
|
|
614
|
+
"additionalProperties": false,
|
|
615
|
+
"required": [
|
|
616
|
+
"name",
|
|
617
|
+
"dripPerTick"
|
|
618
|
+
],
|
|
619
|
+
"properties": {
|
|
620
|
+
"name": {
|
|
621
|
+
"type": "string",
|
|
622
|
+
"minLength": 1,
|
|
623
|
+
"description": "How the menu names it: desk, busy-desk."
|
|
624
|
+
},
|
|
625
|
+
"dripPerTick": {
|
|
626
|
+
"type": "integer",
|
|
627
|
+
"minimum": 1,
|
|
628
|
+
"description": "How many tokens a tick under this tier yields."
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
},
|
|
632
|
+
"StoredEvent": {
|
|
633
|
+
"title": "StoredEvent",
|
|
634
|
+
"type": "object",
|
|
635
|
+
"additionalProperties": false,
|
|
636
|
+
"required": [
|
|
637
|
+
"eventId",
|
|
638
|
+
"startDate",
|
|
639
|
+
"endDate",
|
|
640
|
+
"graceDays",
|
|
641
|
+
"groupFloor",
|
|
642
|
+
"tiers"
|
|
643
|
+
],
|
|
644
|
+
"properties": {
|
|
645
|
+
"eventId": {
|
|
646
|
+
"type": "string",
|
|
647
|
+
"minLength": 1
|
|
648
|
+
},
|
|
649
|
+
"startDate": {
|
|
650
|
+
"type": "string",
|
|
651
|
+
"format": "date"
|
|
652
|
+
},
|
|
653
|
+
"endDate": {
|
|
654
|
+
"type": "string",
|
|
655
|
+
"format": "date"
|
|
656
|
+
},
|
|
657
|
+
"graceDays": {
|
|
658
|
+
"type": "integer",
|
|
659
|
+
"minimum": 0
|
|
660
|
+
},
|
|
661
|
+
"groupFloor": {
|
|
662
|
+
"type": "integer",
|
|
663
|
+
"minimum": 1
|
|
664
|
+
},
|
|
665
|
+
"tiers": {
|
|
666
|
+
"type": "array",
|
|
667
|
+
"items": {
|
|
668
|
+
"$ref": "#/$defs/Tier"
|
|
669
|
+
}
|
|
670
|
+
},
|
|
671
|
+
"approvedBy": {
|
|
672
|
+
"type": [
|
|
673
|
+
"string",
|
|
674
|
+
"null"
|
|
675
|
+
],
|
|
676
|
+
"description": "Who approved the event, or null when nobody has. Recorded in storage only — dropped from the published shape (see published.events)."
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
},
|
|
680
|
+
"PublishedEvent": {
|
|
681
|
+
"title": "PublishedEvent",
|
|
682
|
+
"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.",
|
|
683
|
+
"type": "object",
|
|
684
|
+
"additionalProperties": false,
|
|
685
|
+
"required": [
|
|
686
|
+
"eventId",
|
|
687
|
+
"startDate",
|
|
688
|
+
"endDate",
|
|
689
|
+
"groupFloor",
|
|
690
|
+
"tiers"
|
|
691
|
+
],
|
|
692
|
+
"properties": {
|
|
693
|
+
"eventId": {
|
|
694
|
+
"type": "string",
|
|
695
|
+
"minLength": 1
|
|
696
|
+
},
|
|
697
|
+
"startDate": {
|
|
698
|
+
"type": "string",
|
|
699
|
+
"format": "date"
|
|
700
|
+
},
|
|
701
|
+
"endDate": {
|
|
702
|
+
"type": "string",
|
|
703
|
+
"format": "date"
|
|
704
|
+
},
|
|
705
|
+
"groupFloor": {
|
|
706
|
+
"type": "integer",
|
|
707
|
+
"minimum": 1
|
|
708
|
+
},
|
|
709
|
+
"tiers": {
|
|
710
|
+
"type": "array",
|
|
711
|
+
"items": {
|
|
712
|
+
"$ref": "#/$defs/Tier"
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
},
|
|
717
|
+
"StoredConfig": {
|
|
718
|
+
"title": "StoredConfig",
|
|
719
|
+
"description": "The parameters exactly as the community stores them, including the helper key it never publishes.",
|
|
720
|
+
"type": "object",
|
|
721
|
+
"additionalProperties": false,
|
|
722
|
+
"required": [
|
|
723
|
+
"suite",
|
|
724
|
+
"hvk",
|
|
725
|
+
"tvk",
|
|
726
|
+
"livePeriods",
|
|
727
|
+
"liveTokenLabels",
|
|
728
|
+
"dripPerTick",
|
|
729
|
+
"events"
|
|
730
|
+
],
|
|
731
|
+
"properties": {
|
|
732
|
+
"suite": {
|
|
733
|
+
"type": "string",
|
|
734
|
+
"minLength": 1,
|
|
735
|
+
"description": "The blind-signature suite in force, e.g. ps-ddh-bls12381."
|
|
736
|
+
},
|
|
737
|
+
"hvk": {
|
|
738
|
+
"type": "string",
|
|
739
|
+
"minLength": 1,
|
|
740
|
+
"description": "The helper verification key, multibase. A public value, published as helperKey."
|
|
741
|
+
},
|
|
742
|
+
"tvk": {
|
|
743
|
+
"type": "string",
|
|
744
|
+
"minLength": 1,
|
|
745
|
+
"description": "The token verification key, multibase. Never the same key as hvk."
|
|
746
|
+
},
|
|
747
|
+
"livePeriods": {
|
|
748
|
+
"type": "array",
|
|
749
|
+
"items": {
|
|
750
|
+
"type": "string",
|
|
751
|
+
"pattern": "^[0-9]{4}-(0[1-9]|1[0-2])$"
|
|
752
|
+
},
|
|
753
|
+
"description": "Live vetter class periods, current first, stored as the bare YYYY-MM period."
|
|
754
|
+
},
|
|
755
|
+
"liveTokenLabels": {
|
|
756
|
+
"type": "array",
|
|
757
|
+
"items": {
|
|
758
|
+
"type": "string",
|
|
759
|
+
"minLength": 1
|
|
760
|
+
}
|
|
761
|
+
},
|
|
762
|
+
"dripPerTick": {
|
|
763
|
+
"type": "integer",
|
|
764
|
+
"minimum": 1
|
|
765
|
+
},
|
|
766
|
+
"events": {
|
|
767
|
+
"type": "array",
|
|
768
|
+
"items": {
|
|
769
|
+
"$ref": "#/$defs/StoredEvent"
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
},
|
|
774
|
+
"PublishedConfig": {
|
|
775
|
+
"title": "PublishedConfig",
|
|
776
|
+
"description": "The parameters exactly as they now appear in this community's join manifest, under vetting.ext. What an applicant and a vetter read.",
|
|
777
|
+
"type": "object",
|
|
778
|
+
"additionalProperties": false,
|
|
779
|
+
"required": [
|
|
780
|
+
"suite",
|
|
781
|
+
"helperKey",
|
|
782
|
+
"tokenKey",
|
|
783
|
+
"vetterLabels",
|
|
784
|
+
"tokenLabels",
|
|
785
|
+
"dripPerTick",
|
|
786
|
+
"events"
|
|
787
|
+
],
|
|
788
|
+
"properties": {
|
|
789
|
+
"suite": {
|
|
790
|
+
"type": "string",
|
|
791
|
+
"minLength": 1
|
|
792
|
+
},
|
|
793
|
+
"helperKey": {
|
|
794
|
+
"type": "string",
|
|
795
|
+
"minLength": 1,
|
|
796
|
+
"description": "The helper verification key, multibase — named for its role on the wire rather than for hvk."
|
|
797
|
+
},
|
|
798
|
+
"tokenKey": {
|
|
799
|
+
"type": "string",
|
|
800
|
+
"minLength": 1,
|
|
801
|
+
"description": "The token verification key, multibase — named for its role on the wire rather than for tvk."
|
|
802
|
+
},
|
|
803
|
+
"vetterLabels": {
|
|
804
|
+
"type": "array",
|
|
805
|
+
"items": {
|
|
806
|
+
"type": "string",
|
|
807
|
+
"minLength": 1
|
|
808
|
+
},
|
|
809
|
+
"description": "Class labels published whole, e.g. vetter/2026-09 — a request names one of these, not the bare period."
|
|
810
|
+
},
|
|
811
|
+
"tokenLabels": {
|
|
812
|
+
"type": "array",
|
|
813
|
+
"items": {
|
|
814
|
+
"type": "string",
|
|
815
|
+
"minLength": 1
|
|
816
|
+
}
|
|
817
|
+
},
|
|
818
|
+
"dripPerTick": {
|
|
819
|
+
"type": "integer",
|
|
820
|
+
"minimum": 1
|
|
821
|
+
},
|
|
822
|
+
"events": {
|
|
823
|
+
"type": "array",
|
|
824
|
+
"items": {
|
|
825
|
+
"$ref": "#/$defs/PublishedEvent"
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
},
|
|
830
|
+
"Response": {
|
|
831
|
+
"$anchor": "response",
|
|
832
|
+
"title": "VTC Vetting — Hidden — Publish — response payload",
|
|
833
|
+
"type": "object",
|
|
834
|
+
"additionalProperties": false,
|
|
835
|
+
"required": [
|
|
836
|
+
"criterionId",
|
|
837
|
+
"stored",
|
|
838
|
+
"published",
|
|
839
|
+
"requirementsDigest"
|
|
840
|
+
],
|
|
841
|
+
"properties": {
|
|
842
|
+
"criterionId": {
|
|
843
|
+
"type": "string",
|
|
844
|
+
"minLength": 1,
|
|
845
|
+
"description": "The criterion that now accepts a hidden proof."
|
|
846
|
+
},
|
|
847
|
+
"stored": {
|
|
848
|
+
"$ref": "#/$defs/StoredConfig"
|
|
849
|
+
},
|
|
850
|
+
"published": {
|
|
851
|
+
"$ref": "#/$defs/PublishedConfig"
|
|
852
|
+
},
|
|
853
|
+
"requirementsDigest": {
|
|
854
|
+
"type": [
|
|
855
|
+
"string",
|
|
856
|
+
"null"
|
|
857
|
+
],
|
|
858
|
+
"description": "The criterion's requirementsDigest after the change. It moves, because the digest covers the published parameters — an applicant mid-application is told its requirements changed, which is the honest answer. Null only when the criterion's manifest entry carries none."
|
|
859
|
+
},
|
|
860
|
+
"ext": {
|
|
861
|
+
"$ref": "#/$defs/Ext"
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
},
|
|
865
|
+
"Ext": {
|
|
866
|
+
"title": "Ext",
|
|
867
|
+
"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.",
|
|
868
|
+
"type": "object",
|
|
869
|
+
"minProperties": 1,
|
|
870
|
+
"additionalProperties": true,
|
|
871
|
+
"propertyNames": {
|
|
872
|
+
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
873
|
+
}
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
} as const;
|
|
877
|
+
|
|
878
|
+
/**
|
|
879
|
+
* SPEC.md §7.2 policy for the request variant, from this specification's
|
|
880
|
+
* front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
|
|
881
|
+
* per-specification and cannot be derived from the document alone, and
|
|
882
|
+
* item 2 needs the schema this carries.
|
|
883
|
+
*/
|
|
884
|
+
export const SPEC = {
|
|
885
|
+
typeUri: TYPE_URI,
|
|
886
|
+
isBearer: false,
|
|
887
|
+
isProofRequired: true,
|
|
888
|
+
isRecipientRequired: true,
|
|
889
|
+
isIssuedAtRequired: true,
|
|
890
|
+
payloadSchema: PAYLOAD_SCHEMA,
|
|
891
|
+
} as const;
|
|
892
|
+
|
|
893
|
+
/**
|
|
894
|
+
* SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
|
|
895
|
+
* tracks the *issuer* party's requirement because a response swaps the
|
|
896
|
+
* parties (§7.3 item 5).
|
|
897
|
+
*/
|
|
898
|
+
export const RESPONSE_SPEC = {
|
|
899
|
+
typeUri: RESPONSE_TYPE_URI,
|
|
900
|
+
isBearer: false,
|
|
901
|
+
isProofRequired: true,
|
|
902
|
+
isRecipientRequired: true,
|
|
903
|
+
isIssuedAtRequired: true,
|
|
904
|
+
payloadSchema: RESPONSE_PAYLOAD_SCHEMA,
|
|
905
|
+
} as const;
|