@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.
- package/CHANGELOG.md +4 -0
- package/dist/_runtime/consume.d.ts +1 -1
- package/dist/_runtime/consume.js +2 -2
- package/dist/_shared/components.d.ts +8 -0
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/persona/attribute/promote/1.0/payload.d.ts +506 -0
- package/dist/persona/attribute/promote/1.0/payload.d.ts.map +1 -0
- package/dist/persona/attribute/promote/1.0/payload.js +263 -0
- package/dist/persona/attribute/promote/1.0/payload.js.map +1 -0
- package/dist/persona/binding/get/1.0/payload.d.ts +24 -0
- package/dist/persona/binding/get/1.0/payload.d.ts.map +1 -1
- package/dist/persona/binding/get/1.0/payload.js +10 -0
- package/dist/persona/binding/get/1.0/payload.js.map +1 -1
- package/dist/persona/binding/list/1.0/payload.d.ts +24 -0
- package/dist/persona/binding/list/1.0/payload.d.ts.map +1 -1
- package/dist/persona/binding/list/1.0/payload.js +10 -0
- package/dist/persona/binding/list/1.0/payload.js.map +1 -1
- package/dist/persona/binding/set/1.0/payload.d.ts +38 -0
- package/dist/persona/binding/set/1.0/payload.d.ts.map +1 -1
- package/dist/persona/binding/set/1.0/payload.js +15 -0
- package/dist/persona/binding/set/1.0/payload.js.map +1 -1
- package/dist/persona/local/binding/set/1.0/payload.d.ts +14 -0
- package/dist/persona/local/binding/set/1.0/payload.d.ts.map +1 -1
- package/dist/persona/local/binding/set/1.0/payload.js +5 -0
- package/dist/persona/local/binding/set/1.0/payload.js.map +1 -1
- package/dist/persona/profile/compose/1.0/payload.d.ts +951 -0
- package/dist/persona/profile/compose/1.0/payload.d.ts.map +1 -0
- package/dist/persona/profile/compose/1.0/payload.js +526 -0
- package/dist/persona/profile/compose/1.0/payload.js.map +1 -0
- package/dist/persona/profile/delete/1.0/payload.d.ts +71 -0
- package/dist/persona/profile/delete/1.0/payload.d.ts.map +1 -1
- package/dist/persona/profile/delete/1.0/payload.js +38 -0
- package/dist/persona/profile/delete/1.0/payload.js.map +1 -1
- package/dist/persona/profile/get/1.0/payload.d.ts +115 -0
- package/dist/persona/profile/get/1.0/payload.d.ts.map +1 -1
- package/dist/persona/profile/get/1.0/payload.js +66 -0
- package/dist/persona/profile/get/1.0/payload.js.map +1 -1
- package/dist/persona/profile/list/1.0/payload.d.ts +58 -0
- package/dist/persona/profile/list/1.0/payload.d.ts.map +1 -1
- package/dist/persona/profile/list/1.0/payload.js +33 -0
- package/dist/persona/profile/list/1.0/payload.js.map +1 -1
- package/dist/persona/profile/reinstate/1.0/payload.d.ts +325 -0
- package/dist/persona/profile/reinstate/1.0/payload.d.ts.map +1 -0
- package/dist/persona/profile/reinstate/1.0/payload.js +181 -0
- package/dist/persona/profile/reinstate/1.0/payload.js.map +1 -0
- package/dist/persona/profile/retire/1.0/payload.d.ts +436 -0
- package/dist/persona/profile/retire/1.0/payload.d.ts.map +1 -0
- package/dist/persona/profile/retire/1.0/payload.js +238 -0
- package/dist/persona/profile/retire/1.0/payload.js.map +1 -0
- package/dist/trust-task-control/0.1/payload.d.ts +19 -19
- package/dist/trust-task-control/0.1/payload.js +7 -7
- package/dist/trust-task-discovery/0.1/payload.d.ts +3 -3
- package/dist/trust-task-discovery/0.1/payload.js +1 -1
- package/dist/trust-task-discovery/0.2/payload.d.ts +368 -0
- package/dist/trust-task-discovery/0.2/payload.d.ts.map +1 -0
- package/dist/trust-task-discovery/0.2/payload.js +186 -0
- package/dist/trust-task-discovery/0.2/payload.js.map +1 -0
- package/package.json +1 -1
- package/src/_runtime/consume.ts +2 -2
- package/src/_shared/components.ts +8 -0
- package/src/index.ts +5 -0
- package/src/persona/attribute/promote/1.0/payload.ts +344 -0
- package/src/persona/binding/get/1.0/payload.ts +14 -0
- package/src/persona/binding/list/1.0/payload.ts +14 -0
- package/src/persona/binding/set/1.0/payload.ts +23 -0
- package/src/persona/local/binding/set/1.0/payload.ts +9 -0
- package/src/persona/profile/compose/1.0/payload.ts +641 -0
- package/src/persona/profile/delete/1.0/payload.ts +45 -0
- package/src/persona/profile/get/1.0/payload.ts +73 -0
- package/src/persona/profile/list/1.0/payload.ts +37 -0
- package/src/persona/profile/reinstate/1.0/payload.ts +219 -0
- package/src/persona/profile/retire/1.0/payload.ts +289 -0
- package/src/trust-task-control/0.1/payload.ts +12 -12
- package/src/trust-task-discovery/0.1/payload.ts +2 -2
- 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
|
},
|