@openvtc/trust-tasks 0.19.16 → 0.19.18

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 (79) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/_runtime/consume.d.ts +1 -1
  3. package/dist/_runtime/consume.js +2 -2
  4. package/dist/_shared/components.d.ts +8 -0
  5. package/dist/_shared/components.d.ts.map +1 -1
  6. package/dist/index.d.ts +5 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +5 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/persona/attribute/promote/1.0/payload.d.ts +506 -0
  11. package/dist/persona/attribute/promote/1.0/payload.d.ts.map +1 -0
  12. package/dist/persona/attribute/promote/1.0/payload.js +263 -0
  13. package/dist/persona/attribute/promote/1.0/payload.js.map +1 -0
  14. package/dist/persona/binding/get/1.0/payload.d.ts +24 -0
  15. package/dist/persona/binding/get/1.0/payload.d.ts.map +1 -1
  16. package/dist/persona/binding/get/1.0/payload.js +10 -0
  17. package/dist/persona/binding/get/1.0/payload.js.map +1 -1
  18. package/dist/persona/binding/list/1.0/payload.d.ts +24 -0
  19. package/dist/persona/binding/list/1.0/payload.d.ts.map +1 -1
  20. package/dist/persona/binding/list/1.0/payload.js +10 -0
  21. package/dist/persona/binding/list/1.0/payload.js.map +1 -1
  22. package/dist/persona/binding/set/1.0/payload.d.ts +38 -0
  23. package/dist/persona/binding/set/1.0/payload.d.ts.map +1 -1
  24. package/dist/persona/binding/set/1.0/payload.js +15 -0
  25. package/dist/persona/binding/set/1.0/payload.js.map +1 -1
  26. package/dist/persona/local/binding/set/1.0/payload.d.ts +14 -0
  27. package/dist/persona/local/binding/set/1.0/payload.d.ts.map +1 -1
  28. package/dist/persona/local/binding/set/1.0/payload.js +5 -0
  29. package/dist/persona/local/binding/set/1.0/payload.js.map +1 -1
  30. package/dist/persona/profile/compose/1.0/payload.d.ts +951 -0
  31. package/dist/persona/profile/compose/1.0/payload.d.ts.map +1 -0
  32. package/dist/persona/profile/compose/1.0/payload.js +526 -0
  33. package/dist/persona/profile/compose/1.0/payload.js.map +1 -0
  34. package/dist/persona/profile/delete/1.0/payload.d.ts +71 -0
  35. package/dist/persona/profile/delete/1.0/payload.d.ts.map +1 -1
  36. package/dist/persona/profile/delete/1.0/payload.js +38 -0
  37. package/dist/persona/profile/delete/1.0/payload.js.map +1 -1
  38. package/dist/persona/profile/get/1.0/payload.d.ts +115 -0
  39. package/dist/persona/profile/get/1.0/payload.d.ts.map +1 -1
  40. package/dist/persona/profile/get/1.0/payload.js +66 -0
  41. package/dist/persona/profile/get/1.0/payload.js.map +1 -1
  42. package/dist/persona/profile/list/1.0/payload.d.ts +58 -0
  43. package/dist/persona/profile/list/1.0/payload.d.ts.map +1 -1
  44. package/dist/persona/profile/list/1.0/payload.js +33 -0
  45. package/dist/persona/profile/list/1.0/payload.js.map +1 -1
  46. package/dist/persona/profile/reinstate/1.0/payload.d.ts +325 -0
  47. package/dist/persona/profile/reinstate/1.0/payload.d.ts.map +1 -0
  48. package/dist/persona/profile/reinstate/1.0/payload.js +181 -0
  49. package/dist/persona/profile/reinstate/1.0/payload.js.map +1 -0
  50. package/dist/persona/profile/retire/1.0/payload.d.ts +436 -0
  51. package/dist/persona/profile/retire/1.0/payload.d.ts.map +1 -0
  52. package/dist/persona/profile/retire/1.0/payload.js +238 -0
  53. package/dist/persona/profile/retire/1.0/payload.js.map +1 -0
  54. package/dist/trust-task-control/0.1/payload.d.ts +19 -19
  55. package/dist/trust-task-control/0.1/payload.js +7 -7
  56. package/dist/trust-task-discovery/0.1/payload.d.ts +3 -3
  57. package/dist/trust-task-discovery/0.1/payload.js +1 -1
  58. package/dist/trust-task-discovery/0.2/payload.d.ts +368 -0
  59. package/dist/trust-task-discovery/0.2/payload.d.ts.map +1 -0
  60. package/dist/trust-task-discovery/0.2/payload.js +186 -0
  61. package/dist/trust-task-discovery/0.2/payload.js.map +1 -0
  62. package/package.json +1 -1
  63. package/src/_runtime/consume.ts +2 -2
  64. package/src/_shared/components.ts +8 -0
  65. package/src/index.ts +5 -0
  66. package/src/persona/attribute/promote/1.0/payload.ts +344 -0
  67. package/src/persona/binding/get/1.0/payload.ts +14 -0
  68. package/src/persona/binding/list/1.0/payload.ts +14 -0
  69. package/src/persona/binding/set/1.0/payload.ts +23 -0
  70. package/src/persona/local/binding/set/1.0/payload.ts +9 -0
  71. package/src/persona/profile/compose/1.0/payload.ts +641 -0
  72. package/src/persona/profile/delete/1.0/payload.ts +45 -0
  73. package/src/persona/profile/get/1.0/payload.ts +73 -0
  74. package/src/persona/profile/list/1.0/payload.ts +37 -0
  75. package/src/persona/profile/reinstate/1.0/payload.ts +219 -0
  76. package/src/persona/profile/retire/1.0/payload.ts +289 -0
  77. package/src/trust-task-control/0.1/payload.ts +12 -12
  78. package/src/trust-task-discovery/0.1/payload.ts +2 -2
  79. package/src/trust-task-discovery/0.2/payload.ts +286 -0
package/src/index.ts CHANGED
@@ -185,6 +185,7 @@ export * as MessagingStatsShow_v0_1 from "./messaging/stats/show/0.1/payload.js"
185
185
  export * as PersonaRecordShared_v0_1 from "./persona/_shared/0.1/persona-record.js";
186
186
  export * as PersonaAttributeDelete_v1_0 from "./persona/attribute/delete/1.0/payload.js";
187
187
  export * as PersonaAttributeList_v1_0 from "./persona/attribute/list/1.0/payload.js";
188
+ export * as PersonaAttributePromote_v1_0 from "./persona/attribute/promote/1.0/payload.js";
188
189
  export * as PersonaAttributePurgeVersion_v1_0 from "./persona/attribute/purge-version/1.0/payload.js";
189
190
  export * as PersonaAttributePut_v1_0 from "./persona/attribute/put/1.0/payload.js";
190
191
  export * as PersonaBindingGet_v1_0 from "./persona/binding/get/1.0/payload.js";
@@ -207,10 +208,13 @@ export * as PersonaLocalProfileDelete_v1_0 from "./persona/local/profile/delete/
207
208
  export * as PersonaLocalProfileGet_v1_0 from "./persona/local/profile/get/1.0/payload.js";
208
209
  export * as PersonaLocalProfileList_v1_0 from "./persona/local/profile/list/1.0/payload.js";
209
210
  export * as PersonaLocalProfilePut_v1_0 from "./persona/local/profile/put/1.0/payload.js";
211
+ export * as PersonaProfileCompose_v1_0 from "./persona/profile/compose/1.0/payload.js";
210
212
  export * as PersonaProfileDelete_v1_0 from "./persona/profile/delete/1.0/payload.js";
211
213
  export * as PersonaProfileGet_v1_0 from "./persona/profile/get/1.0/payload.js";
212
214
  export * as PersonaProfileList_v1_0 from "./persona/profile/list/1.0/payload.js";
213
215
  export * as PersonaProfilePut_v1_0 from "./persona/profile/put/1.0/payload.js";
216
+ export * as PersonaProfileReinstate_v1_0 from "./persona/profile/reinstate/1.0/payload.js";
217
+ export * as PersonaProfileRetire_v1_0 from "./persona/profile/retire/1.0/payload.js";
214
218
  export * as PersonaRenderersList_v1_0 from "./persona/renderers/list/1.0/payload.js";
215
219
  export * as PolicyShared_v0_1 from "./policy/_shared/0.1/policy.js";
216
220
  export * as PolicyShared_v0_2 from "./policy/_shared/0.2/policy.js";
@@ -288,6 +292,7 @@ export * as TaskConsentRequest_v0_1 from "./task-consent/request/0.1/payload.js"
288
292
  export * as TrustCeremonyReceipt_v0_1 from "./trust-ceremony-receipt/0.1/payload.js";
289
293
  export * as TrustTaskControl_v0_1 from "./trust-task-control/0.1/payload.js";
290
294
  export * as TrustTaskDiscovery_v0_1 from "./trust-task-discovery/0.1/payload.js";
295
+ export * as TrustTaskDiscovery_v0_2 from "./trust-task-discovery/0.2/payload.js";
291
296
  export * as TrustTaskError_v0_1 from "./trust-task-error/0.1/payload.js";
292
297
  export * as TrustTaskError_v0_2 from "./trust-task-error/0.2/payload.js";
293
298
  export * as TrustTaskError_v0_3 from "./trust-task-error/0.3/payload.js";
@@ -0,0 +1,344 @@
1
+ /**
2
+ * Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
3
+ * Source: specs/persona/attribute/promote/1.0/payload.schema.json
4
+ */
5
+
6
+ import type { Ext, Ulid, Version_PersonaV0_1 as Version } from "../../../../_shared/components.js";
7
+
8
+
9
+ /**
10
+ * Make values a context-local face carries reusable: each named entry's value becomes a pool attribute, and the face — which can no longer live inside one context once it references the pool — moves above contexts, keeping its id and staying worn wherever it was. One-way.
11
+ */
12
+ export interface PersonaAttributePromotePayload {
13
+ /**
14
+ * The context the local face lives in.
15
+ */
16
+ contextId: string;
17
+ /**
18
+ * The context-local face.
19
+ */
20
+ profileId: Ulid;
21
+ /**
22
+ * Zero-based positions, in the face's `entries`, of the values to promote. Positions are meaningful only against the version the producer read, which is why `expectedVersion` is required.
23
+ *
24
+ * @minItems 1
25
+ * @maxItems 64
26
+ */
27
+ entries: [number, ...number[]];
28
+ /**
29
+ * The local face's version as the producer read it. Required: a position into a face edited since would promote a different value than the holder chose.
30
+ */
31
+ expectedVersion: Version;
32
+ ext?: Ext;
33
+ }
34
+ /**
35
+ * Success response to persona/attribute/promote. Type https://trusttasks.org/spec/persona/attribute/promote/1.0#response.
36
+ */
37
+ export interface PersonaAttributePromoteResponsePayload {
38
+ /**
39
+ * Unchanged: the face keeps its id. It is now read through persona/profile/get.
40
+ */
41
+ profileId: Ulid;
42
+ /**
43
+ * The face's version in the pool.
44
+ */
45
+ version: Version;
46
+ /**
47
+ * For each promoted position, in request order, the pool attribute the entry now references and whether this promote created it. `created: false` means the holder already kept exactly this value, and the face now shares it with whatever else presents it.
48
+ *
49
+ * @minItems 1
50
+ * @maxItems 64
51
+ */
52
+ promoted: [
53
+ {
54
+ entry: number;
55
+ attributeId: Ulid;
56
+ created: boolean;
57
+ },
58
+ ...{
59
+ entry: number;
60
+ attributeId: Ulid;
61
+ created: boolean;
62
+ }[]
63
+ ];
64
+ /**
65
+ * Personas in `contextId` that wore the local face and now wear it from the pool. What they present is unchanged. Absent when none did.
66
+ *
67
+ * @maxItems 256
68
+ */
69
+ reboundPersonaDids?: string[];
70
+ ext?: Ext;
71
+ }
72
+
73
+ /** Shared definitions this specification references, re-exported under the names it used to declare them with. */
74
+ export type { Ext, Ulid, Version };
75
+
76
+ /** Trust Task type URI. */
77
+ export const TYPE_URI = "https://trusttasks.org/spec/persona/attribute/promote/1.0" as const;
78
+
79
+ /** Stable alias for this specification's request payload shape. */
80
+ export type Payload = PersonaAttributePromotePayload;
81
+
82
+ /** Trust Task response type URI (request type URI + "#response"). */
83
+ export const RESPONSE_TYPE_URI = "https://trusttasks.org/spec/persona/attribute/promote/1.0#response" as const;
84
+
85
+ /** Stable alias for this specification's success-response payload shape. */
86
+ export type Response = PersonaAttributePromoteResponsePayload;
87
+
88
+ /**
89
+ * This specification's payload schema, as a value.
90
+ *
91
+ * SPEC.md §7.2 item 2 is performed against this. It is shipped as data
92
+ * rather than only as a `.json` file because TypeScript types are erased
93
+ * at runtime: without a schema a consumer has nothing to validate, and
94
+ * every REQUIRED payload member is optional in practice. Cross-file
95
+ * `$ref`s are already inlined, so it needs no resolver.
96
+ */
97
+ export const PAYLOAD_SCHEMA = {
98
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
99
+ "$id": "https://trusttasks.org/spec/persona/attribute/promote/1.0",
100
+ "title": "Persona Attribute Promote — payload",
101
+ "description": "Make values a context-local face carries reusable: each named entry's value becomes a pool attribute, and the face — which can no longer live inside one context once it references the pool — moves above contexts, keeping its id and staying worn wherever it was. One-way.",
102
+ "type": "object",
103
+ "additionalProperties": false,
104
+ "required": [
105
+ "contextId",
106
+ "profileId",
107
+ "entries",
108
+ "expectedVersion"
109
+ ],
110
+ "properties": {
111
+ "contextId": {
112
+ "type": "string",
113
+ "minLength": 1,
114
+ "description": "The context the local face lives in."
115
+ },
116
+ "profileId": {
117
+ "$ref": "#/$defs/Ulid",
118
+ "description": "The context-local face."
119
+ },
120
+ "entries": {
121
+ "type": "array",
122
+ "minItems": 1,
123
+ "maxItems": 64,
124
+ "uniqueItems": true,
125
+ "items": {
126
+ "type": "integer",
127
+ "minimum": 0
128
+ },
129
+ "description": "Zero-based positions, in the face's `entries`, of the values to promote. Positions are meaningful only against the version the producer read, which is why `expectedVersion` is required."
130
+ },
131
+ "expectedVersion": {
132
+ "$ref": "#/$defs/Version",
133
+ "description": "The local face's version as the producer read it. Required: a position into a face edited since would promote a different value than the holder chose."
134
+ },
135
+ "ext": {
136
+ "$ref": "#/$defs/Ext"
137
+ }
138
+ },
139
+ "$defs": {
140
+ "Response": {
141
+ "$anchor": "response",
142
+ "title": "Persona Attribute Promote — response payload",
143
+ "description": "Success response to persona/attribute/promote. Type https://trusttasks.org/spec/persona/attribute/promote/1.0#response.",
144
+ "type": "object",
145
+ "additionalProperties": false,
146
+ "required": [
147
+ "profileId",
148
+ "version",
149
+ "promoted"
150
+ ],
151
+ "properties": {
152
+ "profileId": {
153
+ "$ref": "#/$defs/Ulid",
154
+ "description": "Unchanged: the face keeps its id. It is now read through persona/profile/get."
155
+ },
156
+ "version": {
157
+ "$ref": "#/$defs/Version",
158
+ "description": "The face's version in the pool."
159
+ },
160
+ "promoted": {
161
+ "type": "array",
162
+ "minItems": 1,
163
+ "maxItems": 64,
164
+ "description": "For each promoted position, in request order, the pool attribute the entry now references and whether this promote created it. `created: false` means the holder already kept exactly this value, and the face now shares it with whatever else presents it.",
165
+ "items": {
166
+ "type": "object",
167
+ "additionalProperties": false,
168
+ "required": [
169
+ "entry",
170
+ "attributeId",
171
+ "created"
172
+ ],
173
+ "properties": {
174
+ "entry": {
175
+ "type": "integer",
176
+ "minimum": 0
177
+ },
178
+ "attributeId": {
179
+ "$ref": "#/$defs/Ulid"
180
+ },
181
+ "created": {
182
+ "type": "boolean"
183
+ }
184
+ }
185
+ }
186
+ },
187
+ "reboundPersonaDids": {
188
+ "type": "array",
189
+ "maxItems": 256,
190
+ "items": {
191
+ "type": "string",
192
+ "minLength": 1
193
+ },
194
+ "description": "Personas in `contextId` that wore the local face and now wear it from the pool. What they present is unchanged. Absent when none did."
195
+ },
196
+ "ext": {
197
+ "$ref": "#/$defs/Ext"
198
+ }
199
+ }
200
+ },
201
+ "Ext": {
202
+ "title": "Ext",
203
+ "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.",
204
+ "type": "object",
205
+ "minProperties": 1,
206
+ "additionalProperties": true,
207
+ "propertyNames": {
208
+ "pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
209
+ }
210
+ },
211
+ "Ulid": {
212
+ "title": "Ulid",
213
+ "description": "A ULID in Crockford base32, uppercase. Used for `attributeId` and `profileId`. Chosen over a UUID because the leading 48 bits are a timestamp, so a key-ordered scan of the store is also creation-ordered and a `list` needs no secondary sort. Server-assigned on create; a producer MAY supply one to make a create idempotent, and a maintainer MUST reject a supplied value that already exists rather than silently overwriting.",
214
+ "type": "string",
215
+ "pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
216
+ },
217
+ "Version": {
218
+ "title": "Version",
219
+ "description": "A value of the store's monotonic write counter. Server-assigned; a producer never chooses one.",
220
+ "type": "integer",
221
+ "minimum": 1
222
+ }
223
+ }
224
+ } as const;
225
+
226
+ /** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
227
+ export const RESPONSE_PAYLOAD_SCHEMA = {
228
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
229
+ "$ref": "#/$defs/Response",
230
+ "$defs": {
231
+ "Response": {
232
+ "$anchor": "response",
233
+ "title": "Persona Attribute Promote — response payload",
234
+ "description": "Success response to persona/attribute/promote. Type https://trusttasks.org/spec/persona/attribute/promote/1.0#response.",
235
+ "type": "object",
236
+ "additionalProperties": false,
237
+ "required": [
238
+ "profileId",
239
+ "version",
240
+ "promoted"
241
+ ],
242
+ "properties": {
243
+ "profileId": {
244
+ "$ref": "#/$defs/Ulid",
245
+ "description": "Unchanged: the face keeps its id. It is now read through persona/profile/get."
246
+ },
247
+ "version": {
248
+ "$ref": "#/$defs/Version",
249
+ "description": "The face's version in the pool."
250
+ },
251
+ "promoted": {
252
+ "type": "array",
253
+ "minItems": 1,
254
+ "maxItems": 64,
255
+ "description": "For each promoted position, in request order, the pool attribute the entry now references and whether this promote created it. `created: false` means the holder already kept exactly this value, and the face now shares it with whatever else presents it.",
256
+ "items": {
257
+ "type": "object",
258
+ "additionalProperties": false,
259
+ "required": [
260
+ "entry",
261
+ "attributeId",
262
+ "created"
263
+ ],
264
+ "properties": {
265
+ "entry": {
266
+ "type": "integer",
267
+ "minimum": 0
268
+ },
269
+ "attributeId": {
270
+ "$ref": "#/$defs/Ulid"
271
+ },
272
+ "created": {
273
+ "type": "boolean"
274
+ }
275
+ }
276
+ }
277
+ },
278
+ "reboundPersonaDids": {
279
+ "type": "array",
280
+ "maxItems": 256,
281
+ "items": {
282
+ "type": "string",
283
+ "minLength": 1
284
+ },
285
+ "description": "Personas in `contextId` that wore the local face and now wear it from the pool. What they present is unchanged. Absent when none did."
286
+ },
287
+ "ext": {
288
+ "$ref": "#/$defs/Ext"
289
+ }
290
+ }
291
+ },
292
+ "Ext": {
293
+ "title": "Ext",
294
+ "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.",
295
+ "type": "object",
296
+ "minProperties": 1,
297
+ "additionalProperties": true,
298
+ "propertyNames": {
299
+ "pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
300
+ }
301
+ },
302
+ "Ulid": {
303
+ "title": "Ulid",
304
+ "description": "A ULID in Crockford base32, uppercase. Used for `attributeId` and `profileId`. Chosen over a UUID because the leading 48 bits are a timestamp, so a key-ordered scan of the store is also creation-ordered and a `list` needs no secondary sort. Server-assigned on create; a producer MAY supply one to make a create idempotent, and a maintainer MUST reject a supplied value that already exists rather than silently overwriting.",
305
+ "type": "string",
306
+ "pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
307
+ },
308
+ "Version": {
309
+ "title": "Version",
310
+ "description": "A value of the store's monotonic write counter. Server-assigned; a producer never chooses one.",
311
+ "type": "integer",
312
+ "minimum": 1
313
+ }
314
+ }
315
+ } as const;
316
+
317
+ /**
318
+ * SPEC.md §7.2 policy for the request variant, from this specification's
319
+ * front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
320
+ * per-specification and cannot be derived from the document alone, and
321
+ * item 2 needs the schema this carries.
322
+ */
323
+ export const SPEC = {
324
+ typeUri: TYPE_URI,
325
+ isBearer: false,
326
+ isProofRequired: true,
327
+ isRecipientRequired: true,
328
+ isIssuedAtRequired: true,
329
+ payloadSchema: PAYLOAD_SCHEMA,
330
+ } as const;
331
+
332
+ /**
333
+ * SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
334
+ * tracks the *issuer* party's requirement because a response swaps the
335
+ * parties (§7.3 item 5).
336
+ */
337
+ export const RESPONSE_SPEC = {
338
+ typeUri: RESPONSE_TYPE_URI,
339
+ isBearer: false,
340
+ isProofRequired: true,
341
+ isRecipientRequired: true,
342
+ isIssuedAtRequired: true,
343
+ payloadSchema: RESPONSE_PAYLOAD_SCHEMA,
344
+ } as const;
@@ -41,6 +41,10 @@ export interface PersonaBindingGetResponsePayload {
41
41
  */
42
42
  claimCount?: number;
43
43
  boundAt?: string;
44
+ /**
45
+ * When this binding ends on its own. Absent when it lasts until changed. Context-visible: the context learns when the face stops being worn here, which is the thing the holder set it to tell.
46
+ */
47
+ until?: string;
44
48
  ext?: Ext;
45
49
  }
46
50
 
@@ -142,6 +146,11 @@ export const PAYLOAD_SCHEMA = {
142
146
  "type": "string",
143
147
  "format": "date-time"
144
148
  },
149
+ "until": {
150
+ "type": "string",
151
+ "format": "date-time",
152
+ "description": "When this binding ends on its own. Absent when it lasts until changed. Context-visible: the context learns when the face stops being worn here, which is the thing the holder set it to tell."
153
+ },
145
154
  "ext": {
146
155
  "$ref": "#/$defs/Ext"
147
156
  }
@@ -219,6 +228,11 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
219
228
  "type": "string",
220
229
  "format": "date-time"
221
230
  },
231
+ "until": {
232
+ "type": "string",
233
+ "format": "date-time",
234
+ "description": "When this binding ends on its own. Absent when it lasts until changed. Context-visible: the context learns when the face stops being worn here, which is the thing the holder set it to tell."
235
+ },
222
236
  "ext": {
223
237
  "$ref": "#/$defs/Ext"
224
238
  }
@@ -29,6 +29,10 @@ export interface PersonaBindingListResponsePayload {
29
29
  * The name the holder chose for this context to call the face. Absent when they chose none.
30
30
  */
31
31
  label?: string;
32
+ /**
33
+ * When this binding ends on its own. Absent when it lasts until changed.
34
+ */
35
+ until?: string;
32
36
  /**
33
37
  * The holder's OWN name for the bound face. A maintainer MUST omit it unless the caller is holder-authorized; see persona/binding/get.
34
38
  */
@@ -131,6 +135,11 @@ export const PAYLOAD_SCHEMA = {
131
135
  "maxLength": 128,
132
136
  "description": "The name the holder chose for this context to call the face. Absent when they chose none."
133
137
  },
138
+ "until": {
139
+ "type": "string",
140
+ "format": "date-time",
141
+ "description": "When this binding ends on its own. Absent when it lasts until changed."
142
+ },
134
143
  "profileName": {
135
144
  "type": "string",
136
145
  "maxLength": 128,
@@ -208,6 +217,11 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
208
217
  "maxLength": 128,
209
218
  "description": "The name the holder chose for this context to call the face. Absent when they chose none."
210
219
  },
220
+ "until": {
221
+ "type": "string",
222
+ "format": "date-time",
223
+ "description": "When this binding ends on its own. Absent when it lasts until changed."
224
+ },
211
225
  "profileName": {
212
226
  "type": "string",
213
227
  "maxLength": 128,
@@ -32,6 +32,10 @@ export interface PersonaBindingSetPayload {
32
32
  * What this context may call the face the persona wears here, chosen by the holder for this context. Returned by persona/binding/get and persona/binding/list in place of the holder's own name for the face, which is theirs and may say far more than they would tell a context ('the divorce'). Omit to give the context no name at all.
33
33
  */
34
34
  label?: string;
35
+ /**
36
+ * When this binding ends on its own. At `until` the maintainer clears the binding as a null persona/binding/set would; if the face is then worn nowhere, it is retired (persona/profile/retire), never deleted, so its history survives. Absent means the binding lasts until changed. For the face worn for one weekend — a conference, a listing — so that ending it is a default rather than a discipline. A maintainer MUST refuse an `until` that is not in the future, and one given with a null `profileId`.
37
+ */
38
+ until?: string;
35
39
  expectedVersion?: ExpectedVersion;
36
40
  ext?: Ext;
37
41
  }
@@ -58,6 +62,10 @@ export interface PersonaBindingSetResponsePayload {
58
62
  alsoBoundPersonaCount?: number;
59
63
  };
60
64
  boundAt: string;
65
+ /**
66
+ * When this binding ends on its own, as set.
67
+ */
68
+ until?: string;
61
69
  ext?: Ext;
62
70
  }
63
71
 
@@ -133,6 +141,11 @@ export const PAYLOAD_SCHEMA = {
133
141
  "maxLength": 128,
134
142
  "description": "What this context may call the face the persona wears here, chosen by the holder for this context. Returned by persona/binding/get and persona/binding/list in place of the holder's own name for the face, which is theirs and may say far more than they would tell a context ('the divorce'). Omit to give the context no name at all."
135
143
  },
144
+ "until": {
145
+ "type": "string",
146
+ "format": "date-time",
147
+ "description": "When this binding ends on its own. At `until` the maintainer clears the binding as a null persona/binding/set would; if the face is then worn nowhere, it is retired (persona/profile/retire), never deleted, so its history survives. Absent means the binding lasts until changed. For the face worn for one weekend — a conference, a listing — so that ending it is a default rather than a discipline. A maintainer MUST refuse an `until` that is not in the future, and one given with a null `profileId`."
148
+ },
136
149
  "expectedVersion": {
137
150
  "$ref": "#/$defs/ExpectedVersion"
138
151
  },
@@ -207,6 +220,11 @@ export const PAYLOAD_SCHEMA = {
207
220
  "type": "string",
208
221
  "format": "date-time"
209
222
  },
223
+ "until": {
224
+ "type": "string",
225
+ "format": "date-time",
226
+ "description": "When this binding ends on its own, as set."
227
+ },
210
228
  "ext": {
211
229
  "$ref": "#/$defs/Ext"
212
230
  }
@@ -314,6 +332,11 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
314
332
  "type": "string",
315
333
  "format": "date-time"
316
334
  },
335
+ "until": {
336
+ "type": "string",
337
+ "format": "date-time",
338
+ "description": "When this binding ends on its own, as set."
339
+ },
317
340
  "ext": {
318
341
  "$ref": "#/$defs/Ext"
319
342
  }
@@ -20,6 +20,10 @@ export interface PersonaLocalBindingSetPayload {
20
20
  * What this context may call the face the persona wears here, chosen by the holder for this context. Returned by persona/binding/get and persona/binding/list in place of the holder's own name for the face, which is theirs and may say far more than they would tell a context ('the divorce'). Omit to give the context no name at all.
21
21
  */
22
22
  label?: string;
23
+ /**
24
+ * When this binding ends on its own. At `until` the maintainer clears the binding as a null persona/binding/set would; if the face is then worn nowhere, it is retired as persona/profile/retire would a pool face, never deleted, so its history survives. Absent means the binding lasts until changed. For the face worn for one weekend — a conference, a listing — so that ending it is a default rather than a discipline. A maintainer MUST refuse an `until` that is not in the future, and one given with a null `profileId`.
25
+ */
26
+ until?: string;
23
27
  expectedVersion?: ExpectedVersion;
24
28
  ext?: Ext;
25
29
  }
@@ -96,6 +100,11 @@ export const PAYLOAD_SCHEMA = {
96
100
  "maxLength": 128,
97
101
  "description": "What this context may call the face the persona wears here, chosen by the holder for this context. Returned by persona/binding/get and persona/binding/list in place of the holder's own name for the face, which is theirs and may say far more than they would tell a context ('the divorce'). Omit to give the context no name at all."
98
102
  },
103
+ "until": {
104
+ "type": "string",
105
+ "format": "date-time",
106
+ "description": "When this binding ends on its own. At `until` the maintainer clears the binding as a null persona/binding/set would; if the face is then worn nowhere, it is retired as persona/profile/retire would a pool face, never deleted, so its history survives. Absent means the binding lasts until changed. For the face worn for one weekend — a conference, a listing — so that ending it is a default rather than a discipline. A maintainer MUST refuse an `until` that is not in the future, and one given with a null `profileId`."
107
+ },
99
108
  "expectedVersion": {
100
109
  "$ref": "#/$defs/ExpectedVersion"
101
110
  },