@openvtc/trust-tasks 0.19.19 → 0.19.21
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 +4 -0
- package/dist/_framework/0.4/framework.d.ts +18 -0
- package/dist/_framework/0.4/framework.d.ts.map +1 -0
- package/dist/_framework/0.4/framework.js +6 -0
- package/dist/_framework/0.4/framework.js.map +1 -0
- package/dist/_shared/components.d.ts +18 -0
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/messaging/account/add/0.1/payload.d.ts +40 -0
- package/dist/messaging/account/add/0.1/payload.d.ts.map +1 -1
- package/dist/messaging/account/add/0.1/payload.js +20 -0
- package/dist/messaging/account/add/0.1/payload.js.map +1 -1
- package/dist/messaging/account/change-queue-limits/0.1/payload.d.ts +40 -0
- package/dist/messaging/account/change-queue-limits/0.1/payload.d.ts.map +1 -1
- package/dist/messaging/account/change-queue-limits/0.1/payload.js +20 -0
- package/dist/messaging/account/change-queue-limits/0.1/payload.js.map +1 -1
- package/dist/messaging/account/change-type/0.1/payload.d.ts +40 -0
- package/dist/messaging/account/change-type/0.1/payload.d.ts.map +1 -1
- package/dist/messaging/account/change-type/0.1/payload.js +20 -0
- package/dist/messaging/account/change-type/0.1/payload.js.map +1 -1
- package/dist/messaging/account/get/0.1/payload.d.ts +52 -0
- package/dist/messaging/account/get/0.1/payload.d.ts.map +1 -1
- package/dist/messaging/account/get/0.1/payload.js +24 -0
- package/dist/messaging/account/get/0.1/payload.js.map +1 -1
- package/dist/messaging/account/list/0.1/payload.d.ts +52 -0
- package/dist/messaging/account/list/0.1/payload.d.ts.map +1 -1
- package/dist/messaging/account/list/0.1/payload.js +24 -0
- package/dist/messaging/account/list/0.1/payload.js.map +1 -1
- package/dist/messaging/account/update/0.1/payload.d.ts +40 -0
- package/dist/messaging/account/update/0.1/payload.d.ts.map +1 -1
- package/dist/messaging/account/update/0.1/payload.js +20 -0
- package/dist/messaging/account/update/0.1/payload.js.map +1 -1
- package/dist/persona/binding/set/1.0/payload.d.ts +6 -6
- package/dist/persona/binding/set/1.0/payload.d.ts.map +1 -1
- package/dist/persona/binding/set/1.0/payload.js +2 -3
- package/dist/persona/binding/set/1.0/payload.js.map +1 -1
- package/dist/persona/profile/compose/1.0/payload.d.ts +20 -6
- package/dist/persona/profile/compose/1.0/payload.d.ts.map +1 -1
- package/dist/persona/profile/compose/1.0/payload.js +7 -2
- package/dist/persona/profile/compose/1.0/payload.js.map +1 -1
- package/dist/vtc/join-requests/manifest/0.2/payload.d.ts +96 -2
- package/dist/vtc/join-requests/manifest/0.2/payload.d.ts.map +1 -1
- package/dist/vtc/join-requests/manifest/0.2/payload.js +48 -0
- package/dist/vtc/join-requests/manifest/0.2/payload.js.map +1 -1
- package/package.json +1 -1
- package/src/_framework/0.4/framework.ts +19 -0
- package/src/_shared/components.ts +18 -0
- package/src/index.ts +1 -0
- package/src/messaging/account/add/0.1/payload.ts +20 -0
- package/src/messaging/account/change-queue-limits/0.1/payload.ts +20 -0
- package/src/messaging/account/change-type/0.1/payload.ts +20 -0
- package/src/messaging/account/get/0.1/payload.ts +28 -0
- package/src/messaging/account/list/0.1/payload.ts +28 -0
- package/src/messaging/account/update/0.1/payload.ts +20 -0
- package/src/persona/binding/set/1.0/payload.ts +4 -5
- package/src/persona/profile/compose/1.0/payload.ts +13 -4
- package/src/vtc/join-requests/manifest/0.2/payload.ts +64 -2
|
@@ -11,6 +11,10 @@ export interface MessagingGetAccountPayload {
|
|
|
11
11
|
* The DID of the account to fetch.
|
|
12
12
|
*/
|
|
13
13
|
did: Vid;
|
|
14
|
+
/**
|
|
15
|
+
* When true, the mediator includes each returned account's `lastReceivedAt` and `lastAuthenticatedAt`, where recorded. Omitted or false = neither is returned.
|
|
16
|
+
*/
|
|
17
|
+
includeActivity?: boolean;
|
|
14
18
|
/**
|
|
15
19
|
* Ecosystem-defined extension members per SPEC.md §4.5.1.
|
|
16
20
|
*/
|
|
@@ -68,6 +72,10 @@ export const PAYLOAD_SCHEMA = {
|
|
|
68
72
|
"$ref": "#/$defs/Vid",
|
|
69
73
|
"description": "The DID of the account to fetch."
|
|
70
74
|
},
|
|
75
|
+
"includeActivity": {
|
|
76
|
+
"type": "boolean",
|
|
77
|
+
"description": "When true, the mediator includes each returned account's `lastReceivedAt` and `lastAuthenticatedAt`, where recorded. Omitted or false = neither is returned."
|
|
78
|
+
},
|
|
71
79
|
"ext": {
|
|
72
80
|
"$ref": "#/$defs/Ext",
|
|
73
81
|
"description": "Ecosystem-defined extension members per SPEC.md §4.5.1."
|
|
@@ -152,6 +160,16 @@ export const PAYLOAD_SCHEMA = {
|
|
|
152
160
|
"type": "integer",
|
|
153
161
|
"minimum": 0,
|
|
154
162
|
"description": "Number of entries in the account's access list."
|
|
163
|
+
},
|
|
164
|
+
"lastReceivedAt": {
|
|
165
|
+
"type": "integer",
|
|
166
|
+
"minimum": 0,
|
|
167
|
+
"description": "Unix epoch seconds at which the mediator last accepted a message addressed to this account. Present only when the request set `includeActivity` and the mediator has recorded such a message; MAY lag the true time by up to 60 seconds."
|
|
168
|
+
},
|
|
169
|
+
"lastAuthenticatedAt": {
|
|
170
|
+
"type": "integer",
|
|
171
|
+
"minimum": 0,
|
|
172
|
+
"description": "Unix epoch seconds at which this account last completed authentication with the mediator, over any transport. Present only when the request set `includeActivity` and the mediator has recorded an authentication."
|
|
155
173
|
}
|
|
156
174
|
}
|
|
157
175
|
},
|
|
@@ -344,6 +362,16 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
344
362
|
"type": "integer",
|
|
345
363
|
"minimum": 0,
|
|
346
364
|
"description": "Number of entries in the account's access list."
|
|
365
|
+
},
|
|
366
|
+
"lastReceivedAt": {
|
|
367
|
+
"type": "integer",
|
|
368
|
+
"minimum": 0,
|
|
369
|
+
"description": "Unix epoch seconds at which the mediator last accepted a message addressed to this account. Present only when the request set `includeActivity` and the mediator has recorded such a message; MAY lag the true time by up to 60 seconds."
|
|
370
|
+
},
|
|
371
|
+
"lastAuthenticatedAt": {
|
|
372
|
+
"type": "integer",
|
|
373
|
+
"minimum": 0,
|
|
374
|
+
"description": "Unix epoch seconds at which this account last completed authentication with the mediator, over any transport. Present only when the request set `includeActivity` and the mediator has recorded an authentication."
|
|
347
375
|
}
|
|
348
376
|
}
|
|
349
377
|
},
|
|
@@ -19,6 +19,10 @@ export interface MessagingListAccountsPayload {
|
|
|
19
19
|
* Maximum number of accounts to return in this page. The mediator chooses a default when omitted.
|
|
20
20
|
*/
|
|
21
21
|
limit?: number;
|
|
22
|
+
/**
|
|
23
|
+
* When true, the mediator includes each returned account's `lastReceivedAt` and `lastAuthenticatedAt`, where recorded. Omitted or false = neither is returned.
|
|
24
|
+
*/
|
|
25
|
+
includeActivity?: boolean;
|
|
22
26
|
/**
|
|
23
27
|
* Ecosystem-defined extension members per SPEC.md §4.5.1.
|
|
24
28
|
*/
|
|
@@ -88,6 +92,10 @@ export const PAYLOAD_SCHEMA = {
|
|
|
88
92
|
"maximum": 1000,
|
|
89
93
|
"description": "Maximum number of accounts to return in this page. The mediator chooses a default when omitted."
|
|
90
94
|
},
|
|
95
|
+
"includeActivity": {
|
|
96
|
+
"type": "boolean",
|
|
97
|
+
"description": "When true, the mediator includes each returned account's `lastReceivedAt` and `lastAuthenticatedAt`, where recorded. Omitted or false = neither is returned."
|
|
98
|
+
},
|
|
91
99
|
"ext": {
|
|
92
100
|
"$ref": "#/$defs/Ext",
|
|
93
101
|
"description": "Ecosystem-defined extension members per SPEC.md §4.5.1."
|
|
@@ -180,6 +188,16 @@ export const PAYLOAD_SCHEMA = {
|
|
|
180
188
|
"type": "integer",
|
|
181
189
|
"minimum": 0,
|
|
182
190
|
"description": "Number of entries in the account's access list."
|
|
191
|
+
},
|
|
192
|
+
"lastReceivedAt": {
|
|
193
|
+
"type": "integer",
|
|
194
|
+
"minimum": 0,
|
|
195
|
+
"description": "Unix epoch seconds at which the mediator last accepted a message addressed to this account. Present only when the request set `includeActivity` and the mediator has recorded such a message; MAY lag the true time by up to 60 seconds."
|
|
196
|
+
},
|
|
197
|
+
"lastAuthenticatedAt": {
|
|
198
|
+
"type": "integer",
|
|
199
|
+
"minimum": 0,
|
|
200
|
+
"description": "Unix epoch seconds at which this account last completed authentication with the mediator, over any transport. Present only when the request set `includeActivity` and the mediator has recorded an authentication."
|
|
183
201
|
}
|
|
184
202
|
}
|
|
185
203
|
},
|
|
@@ -380,6 +398,16 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
380
398
|
"type": "integer",
|
|
381
399
|
"minimum": 0,
|
|
382
400
|
"description": "Number of entries in the account's access list."
|
|
401
|
+
},
|
|
402
|
+
"lastReceivedAt": {
|
|
403
|
+
"type": "integer",
|
|
404
|
+
"minimum": 0,
|
|
405
|
+
"description": "Unix epoch seconds at which the mediator last accepted a message addressed to this account. Present only when the request set `includeActivity` and the mediator has recorded such a message; MAY lag the true time by up to 60 seconds."
|
|
406
|
+
},
|
|
407
|
+
"lastAuthenticatedAt": {
|
|
408
|
+
"type": "integer",
|
|
409
|
+
"minimum": 0,
|
|
410
|
+
"description": "Unix epoch seconds at which this account last completed authentication with the mediator, over any transport. Present only when the request set `includeActivity` and the mediator has recorded an authentication."
|
|
383
411
|
}
|
|
384
412
|
}
|
|
385
413
|
},
|
|
@@ -176,6 +176,16 @@ export const PAYLOAD_SCHEMA = {
|
|
|
176
176
|
"type": "integer",
|
|
177
177
|
"minimum": 0,
|
|
178
178
|
"description": "Number of entries in the account's access list."
|
|
179
|
+
},
|
|
180
|
+
"lastReceivedAt": {
|
|
181
|
+
"type": "integer",
|
|
182
|
+
"minimum": 0,
|
|
183
|
+
"description": "Unix epoch seconds at which the mediator last accepted a message addressed to this account. Present only when the request set `includeActivity` and the mediator has recorded such a message; MAY lag the true time by up to 60 seconds."
|
|
184
|
+
},
|
|
185
|
+
"lastAuthenticatedAt": {
|
|
186
|
+
"type": "integer",
|
|
187
|
+
"minimum": 0,
|
|
188
|
+
"description": "Unix epoch seconds at which this account last completed authentication with the mediator, over any transport. Present only when the request set `includeActivity` and the mediator has recorded an authentication."
|
|
179
189
|
}
|
|
180
190
|
}
|
|
181
191
|
},
|
|
@@ -368,6 +378,16 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
368
378
|
"type": "integer",
|
|
369
379
|
"minimum": 0,
|
|
370
380
|
"description": "Number of entries in the account's access list."
|
|
381
|
+
},
|
|
382
|
+
"lastReceivedAt": {
|
|
383
|
+
"type": "integer",
|
|
384
|
+
"minimum": 0,
|
|
385
|
+
"description": "Unix epoch seconds at which the mediator last accepted a message addressed to this account. Present only when the request set `includeActivity` and the mediator has recorded such a message; MAY lag the true time by up to 60 seconds."
|
|
386
|
+
},
|
|
387
|
+
"lastAuthenticatedAt": {
|
|
388
|
+
"type": "integer",
|
|
389
|
+
"minimum": 0,
|
|
390
|
+
"description": "Unix epoch seconds at which this account last completed authentication with the mediator, over any transport. Present only when the request set `includeActivity` and the mediator has recorded an authentication."
|
|
371
391
|
}
|
|
372
392
|
}
|
|
373
393
|
},
|
|
@@ -15,9 +15,9 @@ export interface PersonaBindingSetPayload {
|
|
|
15
15
|
*/
|
|
16
16
|
contextId: string;
|
|
17
17
|
/**
|
|
18
|
-
* The persona being bound.
|
|
18
|
+
* The persona being bound. Omit to use the persona the holder already uses in `contextId` — the one DID with a binding there, current or cleared. None is refused (`noPersonaHere`): a persona is minted on its own, through the DID-template path, never as a side effect of wearing a face. Several are refused (`personaAmbiguous`, naming them): picking one for the holder would decide which of their identities a context sees. The response names the persona used.
|
|
19
19
|
*/
|
|
20
|
-
personaDid
|
|
20
|
+
personaDid?: string;
|
|
21
21
|
/**
|
|
22
22
|
* The profile to bind, or null to clear. Null is a first-class value and not an omission: a persona with no profile is a legitimate, common state — a throwaway identity that presents nothing — and the schema says so rather than leaving a consumer to infer it from an absent member.
|
|
23
23
|
*/
|
|
@@ -101,8 +101,7 @@ export const PAYLOAD_SCHEMA = {
|
|
|
101
101
|
"type": "object",
|
|
102
102
|
"additionalProperties": false,
|
|
103
103
|
"required": [
|
|
104
|
-
"contextId"
|
|
105
|
-
"personaDid"
|
|
104
|
+
"contextId"
|
|
106
105
|
],
|
|
107
106
|
"properties": {
|
|
108
107
|
"contextId": {
|
|
@@ -114,7 +113,7 @@ export const PAYLOAD_SCHEMA = {
|
|
|
114
113
|
"type": "string",
|
|
115
114
|
"minLength": 1,
|
|
116
115
|
"maxLength": 2048,
|
|
117
|
-
"description": "The persona being bound."
|
|
116
|
+
"description": "The persona being bound. Omit to use the persona the holder already uses in `contextId` — the one DID with a binding there, current or cleared. None is refused (`noPersonaHere`): a persona is minted on its own, through the DID-template path, never as a side effect of wearing a face. Several are refused (`personaAmbiguous`, naming them): picking one for the holder would decide which of their identities a context sees. The response names the persona used."
|
|
118
117
|
},
|
|
119
118
|
"profileId": {
|
|
120
119
|
"oneOf": [
|
|
@@ -35,11 +35,15 @@ export interface PersonaProfileComposePayload {
|
|
|
35
35
|
*/
|
|
36
36
|
personaDid?: string;
|
|
37
37
|
/**
|
|
38
|
-
*
|
|
38
|
+
* Wear the new face in `contextId` as the persona the holder already uses in `contextId` — the one DID with a binding there, current or cleared. None is refused (`noPersonaHere`): a persona is minted on its own, through the DID-template path, never as a side effect of wearing a face. Several are refused (`personaAmbiguous`, naming them): picking one for the holder would decide which of their identities a context sees. Not with `personaDid`, which names the persona instead.
|
|
39
|
+
*/
|
|
40
|
+
wear?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* What the context may call the face, as on persona/binding/set. Meaningful only when the face is worn (`personaDid` or `wear`); a maintainer MUST refuse it otherwise rather than drop it.
|
|
39
43
|
*/
|
|
40
44
|
label?: string;
|
|
41
45
|
/**
|
|
42
|
-
* When wearing the face here ends on its own, as persona/binding/set `until`: at it the binding clears and the face, if worn nowhere else, is retired — never deleted. For the face composed at the door of a conference or a listing, which is where a throwaway face is usually made. Meaningful only
|
|
46
|
+
* When wearing the face here ends on its own, as persona/binding/set `until`: at it the binding clears and the face, if worn nowhere else, is retired — never deleted. For the face composed at the door of a conference or a listing, which is where a throwaway face is usually made. Meaningful only when the face is worn (`personaDid` or `wear`), and refused otherwise or in the past (`untilNotFuture`).
|
|
43
47
|
*/
|
|
44
48
|
until?: string;
|
|
45
49
|
ext?: Ext;
|
|
@@ -171,16 +175,21 @@ export const PAYLOAD_SCHEMA = {
|
|
|
171
175
|
"maxLength": 2048,
|
|
172
176
|
"description": "Wear the new face as this persona in `contextId`, in the same act. Omit to compose without wearing it."
|
|
173
177
|
},
|
|
178
|
+
"wear": {
|
|
179
|
+
"type": "boolean",
|
|
180
|
+
"default": false,
|
|
181
|
+
"description": "Wear the new face in `contextId` as the persona the holder already uses in `contextId` — the one DID with a binding there, current or cleared. None is refused (`noPersonaHere`): a persona is minted on its own, through the DID-template path, never as a side effect of wearing a face. Several are refused (`personaAmbiguous`, naming them): picking one for the holder would decide which of their identities a context sees. Not with `personaDid`, which names the persona instead."
|
|
182
|
+
},
|
|
174
183
|
"label": {
|
|
175
184
|
"type": "string",
|
|
176
185
|
"minLength": 1,
|
|
177
186
|
"maxLength": 128,
|
|
178
|
-
"description": "What the context may call the face, as on persona/binding/set. Meaningful only
|
|
187
|
+
"description": "What the context may call the face, as on persona/binding/set. Meaningful only when the face is worn (`personaDid` or `wear`); a maintainer MUST refuse it otherwise rather than drop it."
|
|
179
188
|
},
|
|
180
189
|
"until": {
|
|
181
190
|
"type": "string",
|
|
182
191
|
"format": "date-time",
|
|
183
|
-
"description": "When wearing the face here ends on its own, as persona/binding/set `until`: at it the binding clears and the face, if worn nowhere else, is retired — never deleted. For the face composed at the door of a conference or a listing, which is where a throwaway face is usually made. Meaningful only
|
|
192
|
+
"description": "When wearing the face here ends on its own, as persona/binding/set `until`: at it the binding clears and the face, if worn nowhere else, is retired — never deleted. For the face composed at the door of a conference or a listing, which is where a throwaway face is usually made. Meaningful only when the face is worn (`personaDid` or `wear`), and refused otherwise or in the past (`untilNotFuture`)."
|
|
184
193
|
},
|
|
185
194
|
"ext": {
|
|
186
195
|
"$ref": "#/$defs/Ext"
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Source: specs/vtc/join-requests/manifest/0.2/payload.schema.json
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { ClaimType, DigestMultibase, Ext, VettingDocumentation, VettingMethod } from "../../../../_shared/components.js";
|
|
6
|
+
import type { ClaimType, DigestMultibase, Ext, ExtCritical, VettingDocumentation, VettingMethod } from "../../../../_shared/components.js";
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -135,6 +135,20 @@ export interface VettingRequirements {
|
|
|
135
135
|
* Where the community's vetting governance — including the attestation text vetters sign — is published.
|
|
136
136
|
*/
|
|
137
137
|
governanceFrameworkUrl?: string;
|
|
138
|
+
/**
|
|
139
|
+
* Ecosystem-defined extension members per SPEC.md §4.5.1, for vetting parameters this version does not enumerate. A community publishing an admission mode the base members cannot express — the zero-knowledge parameters an applicant proves against, say — puts them under a namespace it controls, rather than waiting for a version that names them.
|
|
140
|
+
*
|
|
141
|
+
* This object is already `additionalProperties: true`, so an unknown member here has always validated. That is not the same as reaching a consumer: a generated type names the members this schema declares and drops the rest, so an undeclared member is parsed and discarded, and it is discarded again on the re-serialization `requirementsDigest` is computed over. `ext` is a declared member, so it survives both.
|
|
142
|
+
*/
|
|
143
|
+
ext?: Ext;
|
|
144
|
+
/**
|
|
145
|
+
* Namespaces of `ext` an applicant MUST understand or refuse, per SPEC.md §4.5.1.
|
|
146
|
+
*
|
|
147
|
+
* A community marks a namespace here when applying under this criterion without understanding it would mean something other than what the community requires — an applicant that ignored a hidden-vetting namespace, for instance, would submit named statements to a criterion whose whole point was that it does not receive them. An applicant that does not recognize a marked namespace stops rather than downgrading silently.
|
|
148
|
+
*
|
|
149
|
+
* Absent, which is the common case, every namespace under `ext` is advisory and ignorable.
|
|
150
|
+
*/
|
|
151
|
+
extCritical?: ExtCritical;
|
|
138
152
|
[k: string]: unknown | undefined;
|
|
139
153
|
}
|
|
140
154
|
/**
|
|
@@ -157,7 +171,7 @@ export interface CommunityBranding {
|
|
|
157
171
|
}
|
|
158
172
|
|
|
159
173
|
/** Shared definitions this specification references, re-exported under the names it used to declare them with. */
|
|
160
|
-
export type { ClaimType, DigestMultibase, Ext, VettingDocumentation, VettingMethod };
|
|
174
|
+
export type { ClaimType, DigestMultibase, Ext, ExtCritical, VettingDocumentation, VettingMethod };
|
|
161
175
|
|
|
162
176
|
/** Trust Task type URI. */
|
|
163
177
|
export const TYPE_URI = "https://trusttasks.org/spec/vtc/join-requests/manifest/0.2" as const;
|
|
@@ -375,6 +389,14 @@ export const PAYLOAD_SCHEMA = {
|
|
|
375
389
|
"pattern": "^https://",
|
|
376
390
|
"maxLength": 2048,
|
|
377
391
|
"description": "Where the community's vetting governance — including the attestation text vetters sign — is published."
|
|
392
|
+
},
|
|
393
|
+
"ext": {
|
|
394
|
+
"description": "Ecosystem-defined extension members per SPEC.md §4.5.1, for vetting parameters this version does not enumerate. A community publishing an admission mode the base members cannot express — the zero-knowledge parameters an applicant proves against, say — puts them under a namespace it controls, rather than waiting for a version that names them.\n\nThis object is already `additionalProperties: true`, so an unknown member here has always validated. That is not the same as reaching a consumer: a generated type names the members this schema declares and drops the rest, so an undeclared member is parsed and discarded, and it is discarded again on the re-serialization `requirementsDigest` is computed over. `ext` is a declared member, so it survives both.",
|
|
395
|
+
"$ref": "#/$defs/Ext"
|
|
396
|
+
},
|
|
397
|
+
"extCritical": {
|
|
398
|
+
"description": "Namespaces of `ext` an applicant MUST understand or refuse, per SPEC.md §4.5.1.\n\nA community marks a namespace here when applying under this criterion without understanding it would mean something other than what the community requires — an applicant that ignored a hidden-vetting namespace, for instance, would submit named statements to a criterion whose whole point was that it does not receive them. An applicant that does not recognize a marked namespace stops rather than downgrading silently.\n\nAbsent, which is the common case, every namespace under `ext` is advisory and ignorable.",
|
|
399
|
+
"$ref": "#/$defs/ExtCritical"
|
|
378
400
|
}
|
|
379
401
|
}
|
|
380
402
|
},
|
|
@@ -476,6 +498,22 @@ export const PAYLOAD_SCHEMA = {
|
|
|
476
498
|
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
477
499
|
}
|
|
478
500
|
},
|
|
501
|
+
"ExtCritical": {
|
|
502
|
+
"title": "ExtCritical",
|
|
503
|
+
"description": "Names the `ext` namespaces a consumer MUST understand or refuse, per SPEC.md §4.5.1.\n\nEvery entry MUST be an immediate key of the sibling `ext` object at the same level; an entry naming an absent namespace is non-conforming and the consumer rejects the document with `malformedRequest`. A consumer that does not recognize a namespace named here MUST NOT process the document as though the namespace were absent, and rejects it with `unsupportedExtension` — the exception to the rule that unrecognized namespaces are ignored.\n\nA producer marks a namespace only where the document's meaning depends on it. Marking one that merely carries a hint or an annotation turns every consumer that has not implemented it into a failure where it would otherwise have interoperated. JSON Schema cannot check either of those rules: that an entry names a present namespace is checkable only against the sibling `ext`, and whether a namespace is load-bearing is not a schema question at all. Both are consumer-side checks.",
|
|
504
|
+
"type": "array",
|
|
505
|
+
"minItems": 1,
|
|
506
|
+
"uniqueItems": true,
|
|
507
|
+
"items": {
|
|
508
|
+
"type": "string",
|
|
509
|
+
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
510
|
+
},
|
|
511
|
+
"examples": [
|
|
512
|
+
[
|
|
513
|
+
"org.openvtc.hidden-vetting"
|
|
514
|
+
]
|
|
515
|
+
]
|
|
516
|
+
},
|
|
479
517
|
"VettingRelationship": {
|
|
480
518
|
"title": "VettingRelationship",
|
|
481
519
|
"type": "string",
|
|
@@ -714,6 +752,14 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
714
752
|
"pattern": "^https://",
|
|
715
753
|
"maxLength": 2048,
|
|
716
754
|
"description": "Where the community's vetting governance — including the attestation text vetters sign — is published."
|
|
755
|
+
},
|
|
756
|
+
"ext": {
|
|
757
|
+
"description": "Ecosystem-defined extension members per SPEC.md §4.5.1, for vetting parameters this version does not enumerate. A community publishing an admission mode the base members cannot express — the zero-knowledge parameters an applicant proves against, say — puts them under a namespace it controls, rather than waiting for a version that names them.\n\nThis object is already `additionalProperties: true`, so an unknown member here has always validated. That is not the same as reaching a consumer: a generated type names the members this schema declares and drops the rest, so an undeclared member is parsed and discarded, and it is discarded again on the re-serialization `requirementsDigest` is computed over. `ext` is a declared member, so it survives both.",
|
|
758
|
+
"$ref": "#/$defs/Ext"
|
|
759
|
+
},
|
|
760
|
+
"extCritical": {
|
|
761
|
+
"description": "Namespaces of `ext` an applicant MUST understand or refuse, per SPEC.md §4.5.1.\n\nA community marks a namespace here when applying under this criterion without understanding it would mean something other than what the community requires — an applicant that ignored a hidden-vetting namespace, for instance, would submit named statements to a criterion whose whole point was that it does not receive them. An applicant that does not recognize a marked namespace stops rather than downgrading silently.\n\nAbsent, which is the common case, every namespace under `ext` is advisory and ignorable.",
|
|
762
|
+
"$ref": "#/$defs/ExtCritical"
|
|
717
763
|
}
|
|
718
764
|
}
|
|
719
765
|
},
|
|
@@ -815,6 +861,22 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
815
861
|
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
816
862
|
}
|
|
817
863
|
},
|
|
864
|
+
"ExtCritical": {
|
|
865
|
+
"title": "ExtCritical",
|
|
866
|
+
"description": "Names the `ext` namespaces a consumer MUST understand or refuse, per SPEC.md §4.5.1.\n\nEvery entry MUST be an immediate key of the sibling `ext` object at the same level; an entry naming an absent namespace is non-conforming and the consumer rejects the document with `malformedRequest`. A consumer that does not recognize a namespace named here MUST NOT process the document as though the namespace were absent, and rejects it with `unsupportedExtension` — the exception to the rule that unrecognized namespaces are ignored.\n\nA producer marks a namespace only where the document's meaning depends on it. Marking one that merely carries a hint or an annotation turns every consumer that has not implemented it into a failure where it would otherwise have interoperated. JSON Schema cannot check either of those rules: that an entry names a present namespace is checkable only against the sibling `ext`, and whether a namespace is load-bearing is not a schema question at all. Both are consumer-side checks.",
|
|
867
|
+
"type": "array",
|
|
868
|
+
"minItems": 1,
|
|
869
|
+
"uniqueItems": true,
|
|
870
|
+
"items": {
|
|
871
|
+
"type": "string",
|
|
872
|
+
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
873
|
+
},
|
|
874
|
+
"examples": [
|
|
875
|
+
[
|
|
876
|
+
"org.openvtc.hidden-vetting"
|
|
877
|
+
]
|
|
878
|
+
]
|
|
879
|
+
},
|
|
818
880
|
"VettingRelationship": {
|
|
819
881
|
"title": "VettingRelationship",
|
|
820
882
|
"type": "string",
|