@openvtc/trust-tasks 0.28.15 → 0.28.17

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.
Files changed (57) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/index.d.ts +18 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +18 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/vta/pcs/voter/read/0.1/payload.d.ts +4 -4
  7. package/dist/vta/pcs/voter/read/0.1/payload.js +1 -1
  8. package/dist/vta/pcs/voter/read/0.2/payload.d.ts +4 -4
  9. package/dist/vta/pcs/voter/read/0.2/payload.js +1 -1
  10. package/dist/vta/pcs/voter/read/0.3/payload.d.ts +4 -4
  11. package/dist/vta/pcs/voter/read/0.3/payload.js +1 -1
  12. package/dist/vta/pcs/voter/read/0.4/payload.d.ts +4 -4
  13. package/dist/vta/pcs/voter/read/0.4/payload.js +1 -1
  14. package/dist/vta/pcs/voter/read/0.5/payload.d.ts +4 -4
  15. package/dist/vta/pcs/voter/read/0.5/payload.js +1 -1
  16. package/dist/vta/pcs/voter/read/0.6/payload.d.ts +14 -2
  17. package/dist/vta/pcs/voter/read/0.6/payload.d.ts.map +1 -1
  18. package/dist/vta/pcs/voter/read/0.6/payload.js +1 -1
  19. package/dist/vta/pcs/voter/read/0.6/payload.js.map +1 -1
  20. package/dist/vta/pcs/voter/read/0.7/payload.d.ts +561 -0
  21. package/dist/vta/pcs/voter/read/0.7/payload.d.ts.map +1 -0
  22. package/dist/vta/pcs/voter/read/0.7/payload.js +315 -0
  23. package/dist/vta/pcs/voter/read/0.7/payload.js.map +1 -0
  24. package/dist/vta/pcs/voter/receipts/list/0.1/payload.d.ts +359 -0
  25. package/dist/vta/pcs/voter/receipts/list/0.1/payload.d.ts.map +1 -0
  26. package/dist/vta/pcs/voter/receipts/list/0.1/payload.js +203 -0
  27. package/dist/vta/pcs/voter/receipts/list/0.1/payload.js.map +1 -0
  28. package/dist/vtc/boards/facilitators/add/0.1/payload.d.ts +351 -0
  29. package/dist/vtc/boards/facilitators/add/0.1/payload.d.ts.map +1 -0
  30. package/dist/vtc/boards/facilitators/add/0.1/payload.js +198 -0
  31. package/dist/vtc/boards/facilitators/add/0.1/payload.js.map +1 -0
  32. package/dist/vtc/boards/facilitators/list/0.1/payload.d.ts +448 -0
  33. package/dist/vtc/boards/facilitators/list/0.1/payload.d.ts.map +1 -0
  34. package/dist/vtc/boards/facilitators/list/0.1/payload.js +245 -0
  35. package/dist/vtc/boards/facilitators/list/0.1/payload.js.map +1 -0
  36. package/dist/vtc/boards/facilitators/remove/0.1/payload.d.ts +351 -0
  37. package/dist/vtc/boards/facilitators/remove/0.1/payload.d.ts.map +1 -0
  38. package/dist/vtc/boards/facilitators/remove/0.1/payload.js +198 -0
  39. package/dist/vtc/boards/facilitators/remove/0.1/payload.js.map +1 -0
  40. package/dist/vtc/networks/preview/0.1/payload.d.ts +696 -0
  41. package/dist/vtc/networks/preview/0.1/payload.d.ts.map +1 -0
  42. package/dist/vtc/networks/preview/0.1/payload.js +376 -0
  43. package/dist/vtc/networks/preview/0.1/payload.js.map +1 -0
  44. package/package.json +1 -1
  45. package/src/index.ts +18 -0
  46. package/src/vta/pcs/voter/read/0.1/payload.ts +5 -5
  47. package/src/vta/pcs/voter/read/0.2/payload.ts +5 -5
  48. package/src/vta/pcs/voter/read/0.3/payload.ts +5 -5
  49. package/src/vta/pcs/voter/read/0.4/payload.ts +5 -5
  50. package/src/vta/pcs/voter/read/0.5/payload.ts +5 -5
  51. package/src/vta/pcs/voter/read/0.6/payload.ts +15 -3
  52. package/src/vta/pcs/voter/read/0.7/payload.ts +404 -0
  53. package/src/vta/pcs/voter/receipts/list/0.1/payload.ts +255 -0
  54. package/src/vtc/boards/facilitators/add/0.1/payload.ts +246 -0
  55. package/src/vtc/boards/facilitators/list/0.1/payload.ts +306 -0
  56. package/src/vtc/boards/facilitators/remove/0.1/payload.ts +246 -0
  57. package/src/vtc/networks/preview/0.1/payload.ts +483 -0
@@ -9,7 +9,7 @@ import type { Ext } from "../../../../../_shared/components.js";
9
9
  /**
10
10
  * A voter's client asks its VTA for a vtc/elections/list or vtc/elections/show request signed as the voter's membership DID, so the client can read the community's elections as the member without holding the member's key. For a show of an election put to the members of a party that is itself a member of the community, the VTA can present the member's credential for that party from its vault, bound to the read it signs.
11
11
  *
12
- * @deprecated superseded by vta/pcs/voter/read/0.6
12
+ * @deprecated superseded by vta/pcs/voter/read/0.7
13
13
  */
14
14
  export interface VTAPCSVoterReadPayload {
15
15
  /**
@@ -41,7 +41,7 @@ export interface VTAPCSVoterReadPayload {
41
41
  /**
42
42
  * The signed read, to send to the community.
43
43
  *
44
- * @deprecated superseded by vta/pcs/voter/read/0.6
44
+ * @deprecated superseded by vta/pcs/voter/read/0.7
45
45
  */
46
46
  export interface VTAPCSVoterReadResponsePayload {
47
47
  document: ReadDocument;
@@ -93,12 +93,12 @@ export const EXTENDS: string | null = null;
93
93
  * this package in a later scheduled batch (SPEC "Superseded and Withdrawn
94
94
  * Versions").
95
95
  */
96
- export const DEPRECATION: string | null = "superseded by vta/pcs/voter/read/0.6";
96
+ export const DEPRECATION: string | null = "superseded by vta/pcs/voter/read/0.7";
97
97
 
98
98
  /**
99
99
  * Stable alias for this specification's request payload shape.
100
100
  *
101
- * @deprecated superseded by vta/pcs/voter/read/0.6
101
+ * @deprecated superseded by vta/pcs/voter/read/0.7
102
102
  */
103
103
  export type Payload = VTAPCSVoterReadPayload;
104
104
 
@@ -108,7 +108,7 @@ export const RESPONSE_TYPE_URI = "https://trusttasks.org/spec/vta/pcs/voter/read
108
108
  /**
109
109
  * Stable alias for this specification's success-response payload shape.
110
110
  *
111
- * @deprecated superseded by vta/pcs/voter/read/0.6
111
+ * @deprecated superseded by vta/pcs/voter/read/0.7
112
112
  */
113
113
  export type Response = VTAPCSVoterReadResponsePayload;
114
114
 
@@ -8,6 +8,8 @@ import type { Ext } from "../../../../../_shared/components.js";
8
8
 
9
9
  /**
10
10
  * A voter's client asks its VTA for a vtc/elections/list or vtc/elections/show request signed as the voter's membership DID, so the client can read the community's elections as the member without holding the member's key. For a show of an election put to the members of a party that is itself a member of the community, the VTA can present the member's credential for that party from its vault, bound to the read it signs, and only where that credential was issued by the party the client names.
11
+ *
12
+ * @deprecated superseded by vta/pcs/voter/read/0.7
11
13
  */
12
14
  export interface VTAPCSVoterReadPayload {
13
15
  /**
@@ -42,6 +44,8 @@ export interface VTAPCSVoterReadPayload {
42
44
  }
43
45
  /**
44
46
  * The signed read, to send to the community.
47
+ *
48
+ * @deprecated superseded by vta/pcs/voter/read/0.7
45
49
  */
46
50
  export interface VTAPCSVoterReadResponsePayload {
47
51
  document: ReadDocument;
@@ -93,15 +97,23 @@ export const EXTENDS: string | null = null;
93
97
  * this package in a later scheduled batch (SPEC "Superseded and Withdrawn
94
98
  * Versions").
95
99
  */
96
- export const DEPRECATION: string | null = null;
100
+ export const DEPRECATION: string | null = "superseded by vta/pcs/voter/read/0.7";
97
101
 
98
- /** Stable alias for this specification's request payload shape. */
102
+ /**
103
+ * Stable alias for this specification's request payload shape.
104
+ *
105
+ * @deprecated superseded by vta/pcs/voter/read/0.7
106
+ */
99
107
  export type Payload = VTAPCSVoterReadPayload;
100
108
 
101
109
  /** Trust Task response type URI (request type URI + "#response"). */
102
110
  export const RESPONSE_TYPE_URI = "https://trusttasks.org/spec/vta/pcs/voter/read/0.6#response" as const;
103
111
 
104
- /** Stable alias for this specification's success-response payload shape. */
112
+ /**
113
+ * Stable alias for this specification's success-response payload shape.
114
+ *
115
+ * @deprecated superseded by vta/pcs/voter/read/0.7
116
+ */
105
117
  export type Response = VTAPCSVoterReadResponsePayload;
106
118
 
107
119
  /**
@@ -0,0 +1,404 @@
1
+ /**
2
+ * Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
3
+ * Source: specs/vta/pcs/voter/read/0.7/payload.schema.json
4
+ */
5
+
6
+ import type { Ext } from "../../../../../_shared/components.js";
7
+
8
+
9
+ /**
10
+ * A voter's client asks its VTA for a vtc/elections/list, vtc/elections/show or vtc/elections/tombstones/show request signed as the voter's membership DID, so the client can read the community's elections as the member without holding the member's key. For a show of an election put to the members of a party that is itself a member of the community, the VTA can present the member's credential for that party from its vault, bound to the read it signs, and only where that credential was issued by the party the client names.
11
+ */
12
+ export interface VTAPCSVoterReadPayload {
13
+ /**
14
+ * The context the voter belongs to.
15
+ */
16
+ contextId: string;
17
+ /**
18
+ * The community's DID: the recipient of the signed request.
19
+ */
20
+ community: string;
21
+ /**
22
+ * The voter's membership DID at the community. MUST be a DID the engine holds an authentication key of that the caller may act as.
23
+ */
24
+ member: string;
25
+ /**
26
+ * Which read to sign: vtc/elections/list/0.5, vtc/elections/show/0.6 or vtc/elections/tombstones/show/0.1 (`tombstone`: what the community keeps of an election once the board that opened it is deleted, VTI-BRD-009).
27
+ */
28
+ read: "list" | "show" | "tombstone";
29
+ /**
30
+ * The request payload of that task, validated against its own schema.
31
+ */
32
+ payload: {};
33
+ /**
34
+ * Only with `read` `show`, and only to read an election whose `credential` roll names a member party (vtc/elections/show/0.6, VTI-VOT-015): the vault's local handle (vault/credentials/query) of the membership credential the member chose to present for it, whose subject is `member`. The engine presents it in the `show` request it signs, bound to that document and the community. Opaque; never derived or guessed.
35
+ */
36
+ membershipCredential?: string;
37
+ /**
38
+ * Only with `membershipCredential`: the DID the member was told the election's `credential` roll names (voting/_shared/0.4 `RollRule.memberOf`) — the party whose membership the read is to prove. The engine presents `membershipCredential` only where that credential's issuer is this DID, and otherwise refuses with `membershipCredentialMismatch`, so that it never presents a membership unrelated to the election (VTI-VOT-016).
39
+ */
40
+ memberOf?: string;
41
+ ext?: Ext;
42
+ }
43
+ /**
44
+ * The signed read, to send to the community.
45
+ */
46
+ export interface VTAPCSVoterReadResponsePayload {
47
+ document: ReadDocument;
48
+ ext?: Ext;
49
+ }
50
+ /**
51
+ * A complete, signed vtc/elections/list/0.5, vtc/elections/show/0.6 or vtc/elections/tombstones/show/0.1 request document, ready to send to the community unchanged.
52
+ */
53
+ export interface ReadDocument {
54
+ id: string;
55
+ type:
56
+ | "https://trusttasks.org/spec/vtc/elections/list/0.5"
57
+ | "https://trusttasks.org/spec/vtc/elections/show/0.6"
58
+ | "https://trusttasks.org/spec/vtc/elections/tombstones/show/0.1";
59
+ /**
60
+ * The request's `member`.
61
+ */
62
+ issuer: string;
63
+ /**
64
+ * The request's `community`.
65
+ */
66
+ recipient: string;
67
+ issuedAt: string;
68
+ expiresAt?: string;
69
+ /**
70
+ * The request's `payload`, exactly — and, where the request named `membershipCredential`, with `presentation` added: the engine's presentation of that credential, bound to this document.
71
+ */
72
+ payload: {};
73
+ /**
74
+ * A Data Integrity proof by an `authentication` key of `issuer`.
75
+ */
76
+ proof: {};
77
+ }
78
+
79
+ /** Shared definitions this specification references, re-exported under the names it used to declare them with. */
80
+ export type { Ext };
81
+
82
+ /** Trust Task type URI. */
83
+ export const TYPE_URI = "https://trusttasks.org/spec/vta/pcs/voter/read/0.7" as const;
84
+
85
+ /**
86
+ * The earlier version of this specification that this one declares it
87
+ * extends (front matter `extends`, SPEC §5.2 "Declared extension"), or
88
+ * `null`. Only the direct declaration — follow the chain with
89
+ * `extendsChain` / `readForSpec`.
90
+ */
91
+ export const EXTENDS: string | null = null;
92
+
93
+ /**
94
+ * Why this version is deprecated, or `null` while it is current. A
95
+ * superseded or retired version is still supported, and is withdrawn from
96
+ * this package in a later scheduled batch (SPEC "Superseded and Withdrawn
97
+ * Versions").
98
+ */
99
+ export const DEPRECATION: string | null = null;
100
+
101
+ /** Stable alias for this specification's request payload shape. */
102
+ export type Payload = VTAPCSVoterReadPayload;
103
+
104
+ /** Trust Task response type URI (request type URI + "#response"). */
105
+ export const RESPONSE_TYPE_URI = "https://trusttasks.org/spec/vta/pcs/voter/read/0.7#response" as const;
106
+
107
+ /** Stable alias for this specification's success-response payload shape. */
108
+ export type Response = VTAPCSVoterReadResponsePayload;
109
+
110
+ /**
111
+ * This specification's payload schema, as a value.
112
+ *
113
+ * SPEC.md §7.2 item 2 is performed against this. It is shipped as data
114
+ * rather than only as a `.json` file because TypeScript types are erased
115
+ * at runtime: without a schema a consumer has nothing to validate, and
116
+ * every REQUIRED payload member is optional in practice. Cross-file
117
+ * `$ref`s are already inlined, so it needs no resolver.
118
+ */
119
+ export const PAYLOAD_SCHEMA = {
120
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
121
+ "$id": "https://trusttasks.org/spec/vta/pcs/voter/read/0.7",
122
+ "title": "VTA PCS — Voter Read — payload",
123
+ "description": "A voter's client asks its VTA for a vtc/elections/list, vtc/elections/show or vtc/elections/tombstones/show request signed as the voter's membership DID, so the client can read the community's elections as the member without holding the member's key. For a show of an election put to the members of a party that is itself a member of the community, the VTA can present the member's credential for that party from its vault, bound to the read it signs, and only where that credential was issued by the party the client names.",
124
+ "type": "object",
125
+ "additionalProperties": false,
126
+ "required": [
127
+ "contextId",
128
+ "community",
129
+ "member",
130
+ "read",
131
+ "payload"
132
+ ],
133
+ "properties": {
134
+ "contextId": {
135
+ "type": "string",
136
+ "minLength": 1,
137
+ "maxLength": 256,
138
+ "description": "The context the voter belongs to."
139
+ },
140
+ "community": {
141
+ "type": "string",
142
+ "minLength": 1,
143
+ "maxLength": 2048,
144
+ "description": "The community's DID: the recipient of the signed request."
145
+ },
146
+ "member": {
147
+ "type": "string",
148
+ "minLength": 1,
149
+ "maxLength": 2048,
150
+ "pattern": "^did:",
151
+ "description": "The voter's membership DID at the community. MUST be a DID the engine holds an authentication key of that the caller may act as."
152
+ },
153
+ "read": {
154
+ "type": "string",
155
+ "enum": [
156
+ "list",
157
+ "show",
158
+ "tombstone"
159
+ ],
160
+ "description": "Which read to sign: vtc/elections/list/0.5, vtc/elections/show/0.6 or vtc/elections/tombstones/show/0.1 (`tombstone`: what the community keeps of an election once the board that opened it is deleted, VTI-BRD-009)."
161
+ },
162
+ "payload": {
163
+ "type": "object",
164
+ "description": "The request payload of that task, validated against its own schema."
165
+ },
166
+ "membershipCredential": {
167
+ "type": "string",
168
+ "minLength": 1,
169
+ "maxLength": 256,
170
+ "description": "Only with `read` `show`, and only to read an election whose `credential` roll names a member party (vtc/elections/show/0.6, VTI-VOT-015): the vault's local handle (vault/credentials/query) of the membership credential the member chose to present for it, whose subject is `member`. The engine presents it in the `show` request it signs, bound to that document and the community. Opaque; never derived or guessed."
171
+ },
172
+ "memberOf": {
173
+ "type": "string",
174
+ "minLength": 8,
175
+ "maxLength": 2048,
176
+ "pattern": "^did:[a-z0-9]+:\\S+$",
177
+ "description": "Only with `membershipCredential`: the DID the member was told the election's `credential` roll names (voting/_shared/0.4 `RollRule.memberOf`) — the party whose membership the read is to prove. The engine presents `membershipCredential` only where that credential's issuer is this DID, and otherwise refuses with `membershipCredentialMismatch`, so that it never presents a membership unrelated to the election (VTI-VOT-016)."
178
+ },
179
+ "ext": {
180
+ "$ref": "#/$defs/Ext"
181
+ }
182
+ },
183
+ "dependentSchemas": {
184
+ "membershipCredential": {
185
+ "properties": {
186
+ "read": {
187
+ "const": "show"
188
+ }
189
+ }
190
+ },
191
+ "memberOf": {
192
+ "required": [
193
+ "membershipCredential"
194
+ ]
195
+ }
196
+ },
197
+ "$defs": {
198
+ "ReadDocument": {
199
+ "title": "ReadDocument",
200
+ "description": "A complete, signed vtc/elections/list/0.5, vtc/elections/show/0.6 or vtc/elections/tombstones/show/0.1 request document, ready to send to the community unchanged.",
201
+ "type": "object",
202
+ "required": [
203
+ "id",
204
+ "type",
205
+ "issuer",
206
+ "recipient",
207
+ "issuedAt",
208
+ "payload",
209
+ "proof"
210
+ ],
211
+ "properties": {
212
+ "id": {
213
+ "type": "string",
214
+ "pattern": "^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
215
+ },
216
+ "type": {
217
+ "type": "string",
218
+ "enum": [
219
+ "https://trusttasks.org/spec/vtc/elections/list/0.5",
220
+ "https://trusttasks.org/spec/vtc/elections/show/0.6",
221
+ "https://trusttasks.org/spec/vtc/elections/tombstones/show/0.1"
222
+ ]
223
+ },
224
+ "issuer": {
225
+ "type": "string",
226
+ "minLength": 1,
227
+ "maxLength": 2048,
228
+ "description": "The request's `member`."
229
+ },
230
+ "recipient": {
231
+ "type": "string",
232
+ "minLength": 1,
233
+ "maxLength": 2048,
234
+ "description": "The request's `community`."
235
+ },
236
+ "issuedAt": {
237
+ "type": "string",
238
+ "format": "date-time"
239
+ },
240
+ "expiresAt": {
241
+ "type": "string",
242
+ "format": "date-time"
243
+ },
244
+ "payload": {
245
+ "type": "object",
246
+ "description": "The request's `payload`, exactly — and, where the request named `membershipCredential`, with `presentation` added: the engine's presentation of that credential, bound to this document."
247
+ },
248
+ "proof": {
249
+ "type": "object",
250
+ "description": "A Data Integrity proof by an `authentication` key of `issuer`."
251
+ }
252
+ }
253
+ },
254
+ "Response": {
255
+ "$anchor": "response",
256
+ "title": "VTA PCS — Voter Read — response payload",
257
+ "description": "The signed read, to send to the community.",
258
+ "type": "object",
259
+ "additionalProperties": false,
260
+ "required": [
261
+ "document"
262
+ ],
263
+ "properties": {
264
+ "document": {
265
+ "$ref": "#/$defs/ReadDocument"
266
+ },
267
+ "ext": {
268
+ "$ref": "#/$defs/Ext"
269
+ }
270
+ }
271
+ },
272
+ "Ext": {
273
+ "title": "Ext",
274
+ "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.",
275
+ "type": "object",
276
+ "minProperties": 1,
277
+ "additionalProperties": true,
278
+ "propertyNames": {
279
+ "pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
280
+ }
281
+ }
282
+ }
283
+ } as const;
284
+
285
+ /** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
286
+ export const RESPONSE_PAYLOAD_SCHEMA = {
287
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
288
+ "$ref": "#/$defs/Response",
289
+ "$defs": {
290
+ "ReadDocument": {
291
+ "title": "ReadDocument",
292
+ "description": "A complete, signed vtc/elections/list/0.5, vtc/elections/show/0.6 or vtc/elections/tombstones/show/0.1 request document, ready to send to the community unchanged.",
293
+ "type": "object",
294
+ "required": [
295
+ "id",
296
+ "type",
297
+ "issuer",
298
+ "recipient",
299
+ "issuedAt",
300
+ "payload",
301
+ "proof"
302
+ ],
303
+ "properties": {
304
+ "id": {
305
+ "type": "string",
306
+ "pattern": "^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
307
+ },
308
+ "type": {
309
+ "type": "string",
310
+ "enum": [
311
+ "https://trusttasks.org/spec/vtc/elections/list/0.5",
312
+ "https://trusttasks.org/spec/vtc/elections/show/0.6",
313
+ "https://trusttasks.org/spec/vtc/elections/tombstones/show/0.1"
314
+ ]
315
+ },
316
+ "issuer": {
317
+ "type": "string",
318
+ "minLength": 1,
319
+ "maxLength": 2048,
320
+ "description": "The request's `member`."
321
+ },
322
+ "recipient": {
323
+ "type": "string",
324
+ "minLength": 1,
325
+ "maxLength": 2048,
326
+ "description": "The request's `community`."
327
+ },
328
+ "issuedAt": {
329
+ "type": "string",
330
+ "format": "date-time"
331
+ },
332
+ "expiresAt": {
333
+ "type": "string",
334
+ "format": "date-time"
335
+ },
336
+ "payload": {
337
+ "type": "object",
338
+ "description": "The request's `payload`, exactly — and, where the request named `membershipCredential`, with `presentation` added: the engine's presentation of that credential, bound to this document."
339
+ },
340
+ "proof": {
341
+ "type": "object",
342
+ "description": "A Data Integrity proof by an `authentication` key of `issuer`."
343
+ }
344
+ }
345
+ },
346
+ "Response": {
347
+ "$anchor": "response",
348
+ "title": "VTA PCS — Voter Read — response payload",
349
+ "description": "The signed read, to send to the community.",
350
+ "type": "object",
351
+ "additionalProperties": false,
352
+ "required": [
353
+ "document"
354
+ ],
355
+ "properties": {
356
+ "document": {
357
+ "$ref": "#/$defs/ReadDocument"
358
+ },
359
+ "ext": {
360
+ "$ref": "#/$defs/Ext"
361
+ }
362
+ }
363
+ },
364
+ "Ext": {
365
+ "title": "Ext",
366
+ "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.",
367
+ "type": "object",
368
+ "minProperties": 1,
369
+ "additionalProperties": true,
370
+ "propertyNames": {
371
+ "pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
372
+ }
373
+ }
374
+ }
375
+ } as const;
376
+
377
+ /**
378
+ * SPEC.md §7.2 policy for the request variant, from this specification's
379
+ * front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
380
+ * per-specification and cannot be derived from the document alone, and
381
+ * item 2 needs the schema this carries.
382
+ */
383
+ export const SPEC = {
384
+ typeUri: TYPE_URI,
385
+ isBearer: false,
386
+ isProofRequired: true,
387
+ isRecipientRequired: true,
388
+ isIssuedAtRequired: true,
389
+ payloadSchema: PAYLOAD_SCHEMA,
390
+ } as const;
391
+
392
+ /**
393
+ * SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
394
+ * tracks the *issuer* party's requirement because a response swaps the
395
+ * parties (§7.3 item 5).
396
+ */
397
+ export const RESPONSE_SPEC = {
398
+ typeUri: RESPONSE_TYPE_URI,
399
+ isBearer: false,
400
+ isProofRequired: false,
401
+ isRecipientRequired: true,
402
+ isIssuedAtRequired: true,
403
+ payloadSchema: RESPONSE_PAYLOAD_SCHEMA,
404
+ } as const;