@openvtc/trust-tasks 0.19.12 → 0.19.14
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/_shared/components.d.ts +41 -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/persona/_shared/0.1/persona-record.d.ts +1 -1
- package/dist/persona/_shared/0.1/persona-record.d.ts.map +1 -1
- package/dist/persona/attribute/list/1.0/payload.d.ts +140 -24
- package/dist/persona/attribute/list/1.0/payload.d.ts.map +1 -1
- package/dist/persona/attribute/list/1.0/payload.js +76 -12
- package/dist/persona/attribute/list/1.0/payload.js.map +1 -1
- package/dist/persona/attribute/purge-version/1.0/payload.d.ts +413 -0
- package/dist/persona/attribute/purge-version/1.0/payload.d.ts.map +1 -0
- package/dist/persona/attribute/purge-version/1.0/payload.js +223 -0
- package/dist/persona/attribute/purge-version/1.0/payload.js.map +1 -0
- package/dist/persona/attribute/put/1.0/payload.d.ts +183 -0
- package/dist/persona/attribute/put/1.0/payload.d.ts.map +1 -1
- package/dist/persona/attribute/put/1.0/payload.js +96 -0
- package/dist/persona/attribute/put/1.0/payload.js.map +1 -1
- package/dist/persona/binding/get/1.0/payload.d.ts +33 -5
- package/dist/persona/binding/get/1.0/payload.d.ts.map +1 -1
- package/dist/persona/binding/get/1.0/payload.js +14 -2
- package/dist/persona/binding/get/1.0/payload.js.map +1 -1
- package/dist/persona/binding/list/1.0/payload.d.ts +33 -5
- package/dist/persona/binding/list/1.0/payload.d.ts.map +1 -1
- package/dist/persona/binding/list/1.0/payload.js +14 -2
- package/dist/persona/binding/list/1.0/payload.js.map +1 -1
- package/dist/persona/binding/set/1.0/payload.d.ts +16 -0
- package/dist/persona/binding/set/1.0/payload.d.ts.map +1 -1
- package/dist/persona/binding/set/1.0/payload.js +6 -0
- package/dist/persona/binding/set/1.0/payload.js.map +1 -1
- package/dist/persona/disclosure/history/1.0/payload.d.ts +42 -0
- package/dist/persona/disclosure/history/1.0/payload.d.ts.map +1 -1
- package/dist/persona/disclosure/history/1.0/payload.js +28 -0
- package/dist/persona/disclosure/history/1.0/payload.js.map +1 -1
- package/dist/persona/local/binding/set/1.0/payload.d.ts +16 -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 +6 -0
- package/dist/persona/local/binding/set/1.0/payload.js.map +1 -1
- package/dist/persona/local/profile/put/1.0/payload.d.ts +33 -2
- package/dist/persona/local/profile/put/1.0/payload.d.ts.map +1 -1
- package/dist/persona/local/profile/put/1.0/payload.js +15 -0
- package/dist/persona/local/profile/put/1.0/payload.js.map +1 -1
- package/dist/persona/profile/get/1.0/payload.d.ts +94 -6
- package/dist/persona/profile/get/1.0/payload.d.ts.map +1 -1
- package/dist/persona/profile/get/1.0/payload.js +46 -2
- package/dist/persona/profile/get/1.0/payload.js.map +1 -1
- package/dist/persona/profile/list/1.0/payload.d.ts +78 -6
- package/dist/persona/profile/list/1.0/payload.d.ts.map +1 -1
- package/dist/persona/profile/list/1.0/payload.js +38 -2
- package/dist/persona/profile/list/1.0/payload.js.map +1 -1
- package/dist/persona/profile/put/1.0/payload.d.ts +78 -6
- package/dist/persona/profile/put/1.0/payload.d.ts.map +1 -1
- package/dist/persona/profile/put/1.0/payload.js +38 -2
- package/dist/persona/profile/put/1.0/payload.js.map +1 -1
- package/package.json +1 -1
- package/src/_shared/components.ts +41 -0
- package/src/index.ts +1 -0
- package/src/persona/_shared/0.1/persona-record.ts +1 -1
- package/src/persona/attribute/list/1.0/payload.ts +76 -12
- package/src/persona/attribute/purge-version/1.0/payload.ts +277 -0
- package/src/persona/attribute/put/1.0/payload.ts +115 -0
- package/src/persona/binding/get/1.0/payload.ts +19 -3
- package/src/persona/binding/list/1.0/payload.ts +19 -3
- package/src/persona/binding/set/1.0/payload.ts +10 -0
- package/src/persona/disclosure/history/1.0/payload.ts +34 -0
- package/src/persona/local/binding/set/1.0/payload.ts +10 -0
- package/src/persona/local/profile/put/1.0/payload.ts +18 -2
- package/src/persona/profile/get/1.0/payload.ts +48 -4
- package/src/persona/profile/list/1.0/payload.ts +40 -4
- package/src/persona/profile/put/1.0/payload.ts +40 -4
|
@@ -53,6 +53,12 @@ export interface PersonaDisclosureHistoryResponsePayload {
|
|
|
53
53
|
* @maxItems 128
|
|
54
54
|
*/
|
|
55
55
|
rungs?: ProofRung[];
|
|
56
|
+
/**
|
|
57
|
+
* Positionally aligned with claimTypes: whether the value the verifier received is still what this persona presents in this context. `current` — it is. `changed` — the persona now presents a different value of that type, so the verifier holds an outdated copy; this is what a re-present list is built from. `removed` — the persona no longer presents that type at all; the verifier still holds what it received, because a disclosure cannot be recalled. `unknown` — the maintainer cannot tell, as for a record made before it began fingerprinting disclosed values. Computed at read time by comparing a keyed hash of the disclosed value with the persona's current projection in the same context: no value is stored and nothing above the context boundary is read.
|
|
58
|
+
*
|
|
59
|
+
* @maxItems 128
|
|
60
|
+
*/
|
|
61
|
+
claimCurrency?: ("current" | "changed" | "removed" | "unknown")[];
|
|
56
62
|
purpose?: string;
|
|
57
63
|
renderer?: string;
|
|
58
64
|
/**
|
|
@@ -189,6 +195,20 @@ export const PAYLOAD_SCHEMA = {
|
|
|
189
195
|
},
|
|
190
196
|
"description": "Positionally aligned with claimTypes. A holder reviewing history needs to know not only what went but how strongly it was hidden — the same claim type at two rungs is two very different disclosures."
|
|
191
197
|
},
|
|
198
|
+
"claimCurrency": {
|
|
199
|
+
"type": "array",
|
|
200
|
+
"maxItems": 128,
|
|
201
|
+
"items": {
|
|
202
|
+
"type": "string",
|
|
203
|
+
"enum": [
|
|
204
|
+
"current",
|
|
205
|
+
"changed",
|
|
206
|
+
"removed",
|
|
207
|
+
"unknown"
|
|
208
|
+
]
|
|
209
|
+
},
|
|
210
|
+
"description": "Positionally aligned with claimTypes: whether the value the verifier received is still what this persona presents in this context. `current` — it is. `changed` — the persona now presents a different value of that type, so the verifier holds an outdated copy; this is what a re-present list is built from. `removed` — the persona no longer presents that type at all; the verifier still holds what it received, because a disclosure cannot be recalled. `unknown` — the maintainer cannot tell, as for a record made before it began fingerprinting disclosed values. Computed at read time by comparing a keyed hash of the disclosed value with the persona's current projection in the same context: no value is stored and nothing above the context boundary is read."
|
|
211
|
+
},
|
|
192
212
|
"purpose": {
|
|
193
213
|
"type": "string",
|
|
194
214
|
"maxLength": 512
|
|
@@ -319,6 +339,20 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
319
339
|
},
|
|
320
340
|
"description": "Positionally aligned with claimTypes. A holder reviewing history needs to know not only what went but how strongly it was hidden — the same claim type at two rungs is two very different disclosures."
|
|
321
341
|
},
|
|
342
|
+
"claimCurrency": {
|
|
343
|
+
"type": "array",
|
|
344
|
+
"maxItems": 128,
|
|
345
|
+
"items": {
|
|
346
|
+
"type": "string",
|
|
347
|
+
"enum": [
|
|
348
|
+
"current",
|
|
349
|
+
"changed",
|
|
350
|
+
"removed",
|
|
351
|
+
"unknown"
|
|
352
|
+
]
|
|
353
|
+
},
|
|
354
|
+
"description": "Positionally aligned with claimTypes: whether the value the verifier received is still what this persona presents in this context. `current` — it is. `changed` — the persona now presents a different value of that type, so the verifier holds an outdated copy; this is what a re-present list is built from. `removed` — the persona no longer presents that type at all; the verifier still holds what it received, because a disclosure cannot be recalled. `unknown` — the maintainer cannot tell, as for a record made before it began fingerprinting disclosed values. Computed at read time by comparing a keyed hash of the disclosed value with the persona's current projection in the same context: no value is stored and nothing above the context boundary is read."
|
|
355
|
+
},
|
|
322
356
|
"purpose": {
|
|
323
357
|
"type": "string",
|
|
324
358
|
"maxLength": 512
|
|
@@ -16,6 +16,10 @@ export interface PersonaLocalBindingSetPayload {
|
|
|
16
16
|
* A LOCAL profile, or null to clear. A maintainer MUST refuse an identifier that names a pool profile: honouring it would let a context-scoped caller bind the holder's composition, which is the one escalation the whole boundary exists to prevent.
|
|
17
17
|
*/
|
|
18
18
|
profileId?: Ulid | null;
|
|
19
|
+
/**
|
|
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
|
+
*/
|
|
22
|
+
label?: string;
|
|
19
23
|
expectedVersion?: ExpectedVersion;
|
|
20
24
|
ext?: Ext;
|
|
21
25
|
}
|
|
@@ -86,6 +90,12 @@ export const PAYLOAD_SCHEMA = {
|
|
|
86
90
|
],
|
|
87
91
|
"description": "A LOCAL profile, or null to clear. A maintainer MUST refuse an identifier that names a pool profile: honouring it would let a context-scoped caller bind the holder's composition, which is the one escalation the whole boundary exists to prevent."
|
|
88
92
|
},
|
|
93
|
+
"label": {
|
|
94
|
+
"type": "string",
|
|
95
|
+
"minLength": 1,
|
|
96
|
+
"maxLength": 128,
|
|
97
|
+
"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
|
+
},
|
|
89
99
|
"expectedVersion": {
|
|
90
100
|
"$ref": "#/$defs/ExpectedVersion"
|
|
91
101
|
},
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Source: specs/persona/local/profile/put/1.0/payload.schema.json
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { ClaimType, ExpectedVersion_PersonaV0_1 as ExpectedVersion, Ext, Ulid, ValueType, Version_PersonaV0_1 as Version } from "../../../../../_shared/components.js";
|
|
6
|
+
import type { ClaimType, ExpectedVersion_PersonaV0_1 as ExpectedVersion, Ext, Slot, Ulid, ValueType, Version_PersonaV0_1 as Version } from "../../../../../_shared/components.js";
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -32,6 +32,7 @@ export interface PersonaLocalProfilePutPayload {
|
|
|
32
32
|
value: unknown;
|
|
33
33
|
label?: string;
|
|
34
34
|
};
|
|
35
|
+
slot?: Slot;
|
|
35
36
|
}[];
|
|
36
37
|
expectedVersion?: ExpectedVersion;
|
|
37
38
|
ext?: Ext;
|
|
@@ -57,7 +58,7 @@ export interface PersonaLocalProfilePutResponsePayload {
|
|
|
57
58
|
}
|
|
58
59
|
|
|
59
60
|
/** Shared definitions this specification references, re-exported under the names it used to declare them with. */
|
|
60
|
-
export type { ClaimType, ExpectedVersion, Ext, Ulid, ValueType, Version };
|
|
61
|
+
export type { ClaimType, ExpectedVersion, Ext, Slot, Ulid, ValueType, Version };
|
|
61
62
|
|
|
62
63
|
/** Trust Task type URI. */
|
|
63
64
|
export const TYPE_URI = "https://trusttasks.org/spec/persona/local/profile/put/1.0" as const;
|
|
@@ -138,6 +139,9 @@ export const PAYLOAD_SCHEMA = {
|
|
|
138
139
|
"maxLength": 128
|
|
139
140
|
}
|
|
140
141
|
}
|
|
142
|
+
},
|
|
143
|
+
"slot": {
|
|
144
|
+
"$ref": "#/$defs/Slot"
|
|
141
145
|
}
|
|
142
146
|
}
|
|
143
147
|
}
|
|
@@ -226,6 +230,12 @@ export const PAYLOAD_SCHEMA = {
|
|
|
226
230
|
"type": "integer",
|
|
227
231
|
"minimum": 0
|
|
228
232
|
},
|
|
233
|
+
"Slot": {
|
|
234
|
+
"title": "Slot",
|
|
235
|
+
"type": "string",
|
|
236
|
+
"pattern": "^[a-z][A-Za-z0-9]{0,31}$",
|
|
237
|
+
"description": "A role a profile entry plays within its profile, so a consumer can find it without guessing from its claim type. A profile MAY hold several entries of one type — a legal name and a display name, two phone numbers — and only a slot says which answers a given question. Unique within a profile.\n\nWell-known slots:\n\n- `displayName` — what this face calls itself. The entry a consumer renders as the face's name to anyone it is shown to. Distinct from the profile's own `name`, which is the holder's private label and never disclosed.\n- `primaryEmail`, `primaryPhone`, `primaryAddress` — the entry to use where a counterparty asks for one of a kind and the profile holds several.\n- `avatar` — the image this face presents.\n\nOther values are the holder's or the producer's own and carry no meaning a maintainer interprets."
|
|
238
|
+
},
|
|
229
239
|
"ValueType": {
|
|
230
240
|
"title": "ValueType",
|
|
231
241
|
"description": "The JSON shape of `value`, declared so that a consumer can render and compare without guessing. The maintainer validates that `value` agrees with this member and does nothing further: it does NOT validate a phone number against a phone-number grammar. That is a producer's affordance, and a store that grows opinions about the contents of its records eventually blocks its consumer's release.",
|
|
@@ -330,6 +340,12 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
330
340
|
"type": "integer",
|
|
331
341
|
"minimum": 0
|
|
332
342
|
},
|
|
343
|
+
"Slot": {
|
|
344
|
+
"title": "Slot",
|
|
345
|
+
"type": "string",
|
|
346
|
+
"pattern": "^[a-z][A-Za-z0-9]{0,31}$",
|
|
347
|
+
"description": "A role a profile entry plays within its profile, so a consumer can find it without guessing from its claim type. A profile MAY hold several entries of one type — a legal name and a display name, two phone numbers — and only a slot says which answers a given question. Unique within a profile.\n\nWell-known slots:\n\n- `displayName` — what this face calls itself. The entry a consumer renders as the face's name to anyone it is shown to. Distinct from the profile's own `name`, which is the holder's private label and never disclosed.\n- `primaryEmail`, `primaryPhone`, `primaryAddress` — the entry to use where a counterparty asks for one of a kind and the profile holds several.\n- `avatar` — the image this face presents.\n\nOther values are the holder's or the producer's own and carry no meaning a maintainer interprets."
|
|
348
|
+
},
|
|
333
349
|
"ValueType": {
|
|
334
350
|
"title": "ValueType",
|
|
335
351
|
"description": "The JSON shape of `value`, declared so that a consumer can render and compare without guessing. The maintainer validates that `value` agrees with this member and does nothing further: it does NOT validate a phone number against a phone-number grammar. That is a producer's affordance, and a store that grows opinions about the contents of its records eventually blocks its consumer's release.",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Source: specs/persona/profile/get/1.0/payload.schema.json
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { ClaimType, Ext, Profile, ProfileEntry, ProofRung, Provenance, ResolvedClaim, Ulid, ValueType, Version_PersonaV0_1 as Version } from "../../../../_shared/components.js";
|
|
6
|
+
import type { ClaimType, Ext, Profile, ProfileEntry, ProofRung, Provenance, ResolvedClaim, Slot, Ulid, ValueType, Version_PersonaV0_1 as Version } from "../../../../_shared/components.js";
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -34,7 +34,7 @@ export interface PersonaProfileGetResponsePayload {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
/** Shared definitions this specification references, re-exported under the names it used to declare them with. */
|
|
37
|
-
export type { ClaimType, Ext, Profile, ProfileEntry, ProofRung, Provenance, ResolvedClaim, Ulid, ValueType, Version };
|
|
37
|
+
export type { ClaimType, Ext, Profile, ProfileEntry, ProofRung, Provenance, ResolvedClaim, Slot, Ulid, ValueType, Version };
|
|
38
38
|
|
|
39
39
|
/** Trust Task type URI. */
|
|
40
40
|
export const TYPE_URI = "https://trusttasks.org/spec/persona/profile/get/1.0" as const;
|
|
@@ -146,6 +146,10 @@ export const PAYLOAD_SCHEMA = {
|
|
|
146
146
|
"maxLength": 128,
|
|
147
147
|
"description": "The holder's own words, from the override where one is given and from the pool attribute otherwise. Never disclosed to a verifier."
|
|
148
148
|
},
|
|
149
|
+
"slot": {
|
|
150
|
+
"$ref": "#/$defs/Slot",
|
|
151
|
+
"description": "The slot of the entry this claim resolved from, where it has one."
|
|
152
|
+
},
|
|
149
153
|
"provenance": {
|
|
150
154
|
"$ref": "#/$defs/Provenance"
|
|
151
155
|
},
|
|
@@ -268,6 +272,12 @@ export const PAYLOAD_SCHEMA = {
|
|
|
268
272
|
"whole"
|
|
269
273
|
]
|
|
270
274
|
},
|
|
275
|
+
"Slot": {
|
|
276
|
+
"title": "Slot",
|
|
277
|
+
"type": "string",
|
|
278
|
+
"pattern": "^[a-z][A-Za-z0-9]{0,31}$",
|
|
279
|
+
"description": "A role a profile entry plays within its profile, so a consumer can find it without guessing from its claim type. A profile MAY hold several entries of one type — a legal name and a display name, two phone numbers — and only a slot says which answers a given question. Unique within a profile.\n\nWell-known slots:\n\n- `displayName` — what this face calls itself. The entry a consumer renders as the face's name to anyone it is shown to. Distinct from the profile's own `name`, which is the holder's private label and never disclosed.\n- `primaryEmail`, `primaryPhone`, `primaryAddress` — the entry to use where a counterparty asks for one of a kind and the profile holds several.\n- `avatar` — the image this face presents.\n\nOther values are the holder's or the producer's own and carry no meaning a maintainer interprets."
|
|
280
|
+
},
|
|
271
281
|
"ValueType": {
|
|
272
282
|
"title": "ValueType",
|
|
273
283
|
"description": "The JSON shape of `value`, declared so that a consumer can render and compare without guessing. The maintainer validates that `value` agrees with this member and does nothing further: it does NOT validate a phone number against a phone-number grammar. That is a producer's affordance, and a store that grows opinions about the contents of its records eventually blocks its consumer's release.",
|
|
@@ -347,7 +357,7 @@ export const PAYLOAD_SCHEMA = {
|
|
|
347
357
|
},
|
|
348
358
|
"ProfileEntry": {
|
|
349
359
|
"title": "ProfileEntry",
|
|
350
|
-
"description": "One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.\n\n`{ref}` — use the pool attribute, live. Editing the pool updates every profile that references it, which is the point.\n\n`{ref, pinVersion}` — use the value as it was at that version. For a profile that must keep presenting the value a counterparty already verified.\n\n`{ref, override}` — the same fact, a different value here. (\"In the gaming profile my display name is different.\")\n\n`{inline}` — a value that never enters the pool, and so never leaks into another profile.\n\nOmission is exclusion; there is no removal marker.",
|
|
360
|
+
"description": "One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.\n\n`{ref}` — use the pool attribute, live. Editing the pool updates every profile that references it, which is the point.\n\n`{ref, pinVersion}` — use the value as it was at that version. For a profile that must keep presenting the value a counterparty already verified.\n\n`{ref, override}` — the same fact, a different value here. (\"In the gaming profile my display name is different.\")\n\n`{inline}` — a value that never enters the pool, and so never leaks into another profile.\n\nOmission is exclusion; there is no removal marker.\n\nAny form MAY carry a `slot` naming the role the entry plays in the profile — see `Slot`. A maintainer MUST refuse a profile in which two entries carry the same slot: a slot exists to answer one question with one entry.",
|
|
351
361
|
"type": "object",
|
|
352
362
|
"oneOf": [
|
|
353
363
|
{
|
|
@@ -358,6 +368,9 @@ export const PAYLOAD_SCHEMA = {
|
|
|
358
368
|
"properties": {
|
|
359
369
|
"ref": {
|
|
360
370
|
"$ref": "#/$defs/Ulid"
|
|
371
|
+
},
|
|
372
|
+
"slot": {
|
|
373
|
+
"$ref": "#/$defs/Slot"
|
|
361
374
|
}
|
|
362
375
|
}
|
|
363
376
|
},
|
|
@@ -373,6 +386,9 @@ export const PAYLOAD_SCHEMA = {
|
|
|
373
386
|
},
|
|
374
387
|
"pinVersion": {
|
|
375
388
|
"$ref": "#/$defs/Version"
|
|
389
|
+
},
|
|
390
|
+
"slot": {
|
|
391
|
+
"$ref": "#/$defs/Slot"
|
|
376
392
|
}
|
|
377
393
|
}
|
|
378
394
|
},
|
|
@@ -400,6 +416,9 @@ export const PAYLOAD_SCHEMA = {
|
|
|
400
416
|
}
|
|
401
417
|
},
|
|
402
418
|
"description": "Replaces the pool attribute's value for this profile only. `type`, `valueType` and `provenance` are inherited from the referenced attribute and MUST NOT be overridden — an override that changed provenance would let a self-asserted value present as attested."
|
|
419
|
+
},
|
|
420
|
+
"slot": {
|
|
421
|
+
"$ref": "#/$defs/Slot"
|
|
403
422
|
}
|
|
404
423
|
}
|
|
405
424
|
},
|
|
@@ -434,6 +453,9 @@ export const PAYLOAD_SCHEMA = {
|
|
|
434
453
|
"$ref": "#/$defs/Provenance"
|
|
435
454
|
}
|
|
436
455
|
}
|
|
456
|
+
},
|
|
457
|
+
"slot": {
|
|
458
|
+
"$ref": "#/$defs/Slot"
|
|
437
459
|
}
|
|
438
460
|
}
|
|
439
461
|
}
|
|
@@ -512,6 +534,10 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
512
534
|
"maxLength": 128,
|
|
513
535
|
"description": "The holder's own words, from the override where one is given and from the pool attribute otherwise. Never disclosed to a verifier."
|
|
514
536
|
},
|
|
537
|
+
"slot": {
|
|
538
|
+
"$ref": "#/$defs/Slot",
|
|
539
|
+
"description": "The slot of the entry this claim resolved from, where it has one."
|
|
540
|
+
},
|
|
515
541
|
"provenance": {
|
|
516
542
|
"$ref": "#/$defs/Provenance"
|
|
517
543
|
},
|
|
@@ -634,6 +660,12 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
634
660
|
"whole"
|
|
635
661
|
]
|
|
636
662
|
},
|
|
663
|
+
"Slot": {
|
|
664
|
+
"title": "Slot",
|
|
665
|
+
"type": "string",
|
|
666
|
+
"pattern": "^[a-z][A-Za-z0-9]{0,31}$",
|
|
667
|
+
"description": "A role a profile entry plays within its profile, so a consumer can find it without guessing from its claim type. A profile MAY hold several entries of one type — a legal name and a display name, two phone numbers — and only a slot says which answers a given question. Unique within a profile.\n\nWell-known slots:\n\n- `displayName` — what this face calls itself. The entry a consumer renders as the face's name to anyone it is shown to. Distinct from the profile's own `name`, which is the holder's private label and never disclosed.\n- `primaryEmail`, `primaryPhone`, `primaryAddress` — the entry to use where a counterparty asks for one of a kind and the profile holds several.\n- `avatar` — the image this face presents.\n\nOther values are the holder's or the producer's own and carry no meaning a maintainer interprets."
|
|
668
|
+
},
|
|
637
669
|
"ValueType": {
|
|
638
670
|
"title": "ValueType",
|
|
639
671
|
"description": "The JSON shape of `value`, declared so that a consumer can render and compare without guessing. The maintainer validates that `value` agrees with this member and does nothing further: it does NOT validate a phone number against a phone-number grammar. That is a producer's affordance, and a store that grows opinions about the contents of its records eventually blocks its consumer's release.",
|
|
@@ -713,7 +745,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
713
745
|
},
|
|
714
746
|
"ProfileEntry": {
|
|
715
747
|
"title": "ProfileEntry",
|
|
716
|
-
"description": "One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.\n\n`{ref}` — use the pool attribute, live. Editing the pool updates every profile that references it, which is the point.\n\n`{ref, pinVersion}` — use the value as it was at that version. For a profile that must keep presenting the value a counterparty already verified.\n\n`{ref, override}` — the same fact, a different value here. (\"In the gaming profile my display name is different.\")\n\n`{inline}` — a value that never enters the pool, and so never leaks into another profile.\n\nOmission is exclusion; there is no removal marker.",
|
|
748
|
+
"description": "One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.\n\n`{ref}` — use the pool attribute, live. Editing the pool updates every profile that references it, which is the point.\n\n`{ref, pinVersion}` — use the value as it was at that version. For a profile that must keep presenting the value a counterparty already verified.\n\n`{ref, override}` — the same fact, a different value here. (\"In the gaming profile my display name is different.\")\n\n`{inline}` — a value that never enters the pool, and so never leaks into another profile.\n\nOmission is exclusion; there is no removal marker.\n\nAny form MAY carry a `slot` naming the role the entry plays in the profile — see `Slot`. A maintainer MUST refuse a profile in which two entries carry the same slot: a slot exists to answer one question with one entry.",
|
|
717
749
|
"type": "object",
|
|
718
750
|
"oneOf": [
|
|
719
751
|
{
|
|
@@ -724,6 +756,9 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
724
756
|
"properties": {
|
|
725
757
|
"ref": {
|
|
726
758
|
"$ref": "#/$defs/Ulid"
|
|
759
|
+
},
|
|
760
|
+
"slot": {
|
|
761
|
+
"$ref": "#/$defs/Slot"
|
|
727
762
|
}
|
|
728
763
|
}
|
|
729
764
|
},
|
|
@@ -739,6 +774,9 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
739
774
|
},
|
|
740
775
|
"pinVersion": {
|
|
741
776
|
"$ref": "#/$defs/Version"
|
|
777
|
+
},
|
|
778
|
+
"slot": {
|
|
779
|
+
"$ref": "#/$defs/Slot"
|
|
742
780
|
}
|
|
743
781
|
}
|
|
744
782
|
},
|
|
@@ -766,6 +804,9 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
766
804
|
}
|
|
767
805
|
},
|
|
768
806
|
"description": "Replaces the pool attribute's value for this profile only. `type`, `valueType` and `provenance` are inherited from the referenced attribute and MUST NOT be overridden — an override that changed provenance would let a self-asserted value present as attested."
|
|
807
|
+
},
|
|
808
|
+
"slot": {
|
|
809
|
+
"$ref": "#/$defs/Slot"
|
|
769
810
|
}
|
|
770
811
|
}
|
|
771
812
|
},
|
|
@@ -800,6 +841,9 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
800
841
|
"$ref": "#/$defs/Provenance"
|
|
801
842
|
}
|
|
802
843
|
}
|
|
844
|
+
},
|
|
845
|
+
"slot": {
|
|
846
|
+
"$ref": "#/$defs/Slot"
|
|
803
847
|
}
|
|
804
848
|
}
|
|
805
849
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Source: specs/persona/profile/list/1.0/payload.schema.json
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { ClaimType, Ext, Profile, ProfileEntry, ProofRung, Provenance, Ulid, ValueType, Version_PersonaV0_1 as Version } from "../../../../_shared/components.js";
|
|
6
|
+
import type { ClaimType, Ext, Profile, ProfileEntry, ProofRung, Provenance, Slot, Ulid, ValueType, Version_PersonaV0_1 as Version } from "../../../../_shared/components.js";
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -33,7 +33,7 @@ export interface PersonaProfileListResponsePayload {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
/** Shared definitions this specification references, re-exported under the names it used to declare them with. */
|
|
36
|
-
export type { ClaimType, Ext, Profile, ProfileEntry, ProofRung, Provenance, Ulid, ValueType, Version };
|
|
36
|
+
export type { ClaimType, Ext, Profile, ProfileEntry, ProofRung, Provenance, Slot, Ulid, ValueType, Version };
|
|
37
37
|
|
|
38
38
|
/** Trust Task type URI. */
|
|
39
39
|
export const TYPE_URI = "https://trusttasks.org/spec/persona/profile/list/1.0" as const;
|
|
@@ -176,7 +176,7 @@ export const PAYLOAD_SCHEMA = {
|
|
|
176
176
|
},
|
|
177
177
|
"ProfileEntry": {
|
|
178
178
|
"title": "ProfileEntry",
|
|
179
|
-
"description": "One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.\n\n`{ref}` — use the pool attribute, live. Editing the pool updates every profile that references it, which is the point.\n\n`{ref, pinVersion}` — use the value as it was at that version. For a profile that must keep presenting the value a counterparty already verified.\n\n`{ref, override}` — the same fact, a different value here. (\"In the gaming profile my display name is different.\")\n\n`{inline}` — a value that never enters the pool, and so never leaks into another profile.\n\nOmission is exclusion; there is no removal marker.",
|
|
179
|
+
"description": "One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.\n\n`{ref}` — use the pool attribute, live. Editing the pool updates every profile that references it, which is the point.\n\n`{ref, pinVersion}` — use the value as it was at that version. For a profile that must keep presenting the value a counterparty already verified.\n\n`{ref, override}` — the same fact, a different value here. (\"In the gaming profile my display name is different.\")\n\n`{inline}` — a value that never enters the pool, and so never leaks into another profile.\n\nOmission is exclusion; there is no removal marker.\n\nAny form MAY carry a `slot` naming the role the entry plays in the profile — see `Slot`. A maintainer MUST refuse a profile in which two entries carry the same slot: a slot exists to answer one question with one entry.",
|
|
180
180
|
"type": "object",
|
|
181
181
|
"oneOf": [
|
|
182
182
|
{
|
|
@@ -187,6 +187,9 @@ export const PAYLOAD_SCHEMA = {
|
|
|
187
187
|
"properties": {
|
|
188
188
|
"ref": {
|
|
189
189
|
"$ref": "#/$defs/Ulid"
|
|
190
|
+
},
|
|
191
|
+
"slot": {
|
|
192
|
+
"$ref": "#/$defs/Slot"
|
|
190
193
|
}
|
|
191
194
|
}
|
|
192
195
|
},
|
|
@@ -202,6 +205,9 @@ export const PAYLOAD_SCHEMA = {
|
|
|
202
205
|
},
|
|
203
206
|
"pinVersion": {
|
|
204
207
|
"$ref": "#/$defs/Version"
|
|
208
|
+
},
|
|
209
|
+
"slot": {
|
|
210
|
+
"$ref": "#/$defs/Slot"
|
|
205
211
|
}
|
|
206
212
|
}
|
|
207
213
|
},
|
|
@@ -229,6 +235,9 @@ export const PAYLOAD_SCHEMA = {
|
|
|
229
235
|
}
|
|
230
236
|
},
|
|
231
237
|
"description": "Replaces the pool attribute's value for this profile only. `type`, `valueType` and `provenance` are inherited from the referenced attribute and MUST NOT be overridden — an override that changed provenance would let a self-asserted value present as attested."
|
|
238
|
+
},
|
|
239
|
+
"slot": {
|
|
240
|
+
"$ref": "#/$defs/Slot"
|
|
232
241
|
}
|
|
233
242
|
}
|
|
234
243
|
},
|
|
@@ -263,11 +272,20 @@ export const PAYLOAD_SCHEMA = {
|
|
|
263
272
|
"$ref": "#/$defs/Provenance"
|
|
264
273
|
}
|
|
265
274
|
}
|
|
275
|
+
},
|
|
276
|
+
"slot": {
|
|
277
|
+
"$ref": "#/$defs/Slot"
|
|
266
278
|
}
|
|
267
279
|
}
|
|
268
280
|
}
|
|
269
281
|
]
|
|
270
282
|
},
|
|
283
|
+
"Slot": {
|
|
284
|
+
"title": "Slot",
|
|
285
|
+
"type": "string",
|
|
286
|
+
"pattern": "^[a-z][A-Za-z0-9]{0,31}$",
|
|
287
|
+
"description": "A role a profile entry plays within its profile, so a consumer can find it without guessing from its claim type. A profile MAY hold several entries of one type — a legal name and a display name, two phone numbers — and only a slot says which answers a given question. Unique within a profile.\n\nWell-known slots:\n\n- `displayName` — what this face calls itself. The entry a consumer renders as the face's name to anyone it is shown to. Distinct from the profile's own `name`, which is the holder's private label and never disclosed.\n- `primaryEmail`, `primaryPhone`, `primaryAddress` — the entry to use where a counterparty asks for one of a kind and the profile holds several.\n- `avatar` — the image this face presents.\n\nOther values are the holder's or the producer's own and carry no meaning a maintainer interprets."
|
|
288
|
+
},
|
|
271
289
|
"Provenance": {
|
|
272
290
|
"title": "Provenance",
|
|
273
291
|
"description": "Where a value comes from, and the member that makes this family worth building on a trust stack rather than in an address book. It survives to the verifier, so a recipient can tell — per field — what the holder typed from what an issuer attested.\n\n`selfAsserted` — the holder supplied it.\n\n`credentialBacked` — the value is derived from a credential in the vault at `claimPath`. The stored value is a CACHE FOR DISPLAY; the credential is the truth. A maintainer MUST re-derive it on read and MUST fail closed (never presenting a stale value) when the credential has been revoked, has expired, or has been archived or deleted.\n\n`generated` — the value is minted per verifier at disclosure time and recorded against that verifier, so every relying party receives a different one that routes back to the holder. This is the shape of the most widely adopted consumer privacy feature in this space; a maintainer need not operate a relay to conform, but the shape must exist, because retrofitting per-verifier values into a pool-of-values model is a migration rather than an addition.",
|
|
@@ -485,7 +503,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
485
503
|
},
|
|
486
504
|
"ProfileEntry": {
|
|
487
505
|
"title": "ProfileEntry",
|
|
488
|
-
"description": "One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.\n\n`{ref}` — use the pool attribute, live. Editing the pool updates every profile that references it, which is the point.\n\n`{ref, pinVersion}` — use the value as it was at that version. For a profile that must keep presenting the value a counterparty already verified.\n\n`{ref, override}` — the same fact, a different value here. (\"In the gaming profile my display name is different.\")\n\n`{inline}` — a value that never enters the pool, and so never leaks into another profile.\n\nOmission is exclusion; there is no removal marker.",
|
|
506
|
+
"description": "One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.\n\n`{ref}` — use the pool attribute, live. Editing the pool updates every profile that references it, which is the point.\n\n`{ref, pinVersion}` — use the value as it was at that version. For a profile that must keep presenting the value a counterparty already verified.\n\n`{ref, override}` — the same fact, a different value here. (\"In the gaming profile my display name is different.\")\n\n`{inline}` — a value that never enters the pool, and so never leaks into another profile.\n\nOmission is exclusion; there is no removal marker.\n\nAny form MAY carry a `slot` naming the role the entry plays in the profile — see `Slot`. A maintainer MUST refuse a profile in which two entries carry the same slot: a slot exists to answer one question with one entry.",
|
|
489
507
|
"type": "object",
|
|
490
508
|
"oneOf": [
|
|
491
509
|
{
|
|
@@ -496,6 +514,9 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
496
514
|
"properties": {
|
|
497
515
|
"ref": {
|
|
498
516
|
"$ref": "#/$defs/Ulid"
|
|
517
|
+
},
|
|
518
|
+
"slot": {
|
|
519
|
+
"$ref": "#/$defs/Slot"
|
|
499
520
|
}
|
|
500
521
|
}
|
|
501
522
|
},
|
|
@@ -511,6 +532,9 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
511
532
|
},
|
|
512
533
|
"pinVersion": {
|
|
513
534
|
"$ref": "#/$defs/Version"
|
|
535
|
+
},
|
|
536
|
+
"slot": {
|
|
537
|
+
"$ref": "#/$defs/Slot"
|
|
514
538
|
}
|
|
515
539
|
}
|
|
516
540
|
},
|
|
@@ -538,6 +562,9 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
538
562
|
}
|
|
539
563
|
},
|
|
540
564
|
"description": "Replaces the pool attribute's value for this profile only. `type`, `valueType` and `provenance` are inherited from the referenced attribute and MUST NOT be overridden — an override that changed provenance would let a self-asserted value present as attested."
|
|
565
|
+
},
|
|
566
|
+
"slot": {
|
|
567
|
+
"$ref": "#/$defs/Slot"
|
|
541
568
|
}
|
|
542
569
|
}
|
|
543
570
|
},
|
|
@@ -572,11 +599,20 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
572
599
|
"$ref": "#/$defs/Provenance"
|
|
573
600
|
}
|
|
574
601
|
}
|
|
602
|
+
},
|
|
603
|
+
"slot": {
|
|
604
|
+
"$ref": "#/$defs/Slot"
|
|
575
605
|
}
|
|
576
606
|
}
|
|
577
607
|
}
|
|
578
608
|
]
|
|
579
609
|
},
|
|
610
|
+
"Slot": {
|
|
611
|
+
"title": "Slot",
|
|
612
|
+
"type": "string",
|
|
613
|
+
"pattern": "^[a-z][A-Za-z0-9]{0,31}$",
|
|
614
|
+
"description": "A role a profile entry plays within its profile, so a consumer can find it without guessing from its claim type. A profile MAY hold several entries of one type — a legal name and a display name, two phone numbers — and only a slot says which answers a given question. Unique within a profile.\n\nWell-known slots:\n\n- `displayName` — what this face calls itself. The entry a consumer renders as the face's name to anyone it is shown to. Distinct from the profile's own `name`, which is the holder's private label and never disclosed.\n- `primaryEmail`, `primaryPhone`, `primaryAddress` — the entry to use where a counterparty asks for one of a kind and the profile holds several.\n- `avatar` — the image this face presents.\n\nOther values are the holder's or the producer's own and carry no meaning a maintainer interprets."
|
|
615
|
+
},
|
|
580
616
|
"Provenance": {
|
|
581
617
|
"title": "Provenance",
|
|
582
618
|
"description": "Where a value comes from, and the member that makes this family worth building on a trust stack rather than in an address book. It survives to the verifier, so a recipient can tell — per field — what the holder typed from what an issuer attested.\n\n`selfAsserted` — the holder supplied it.\n\n`credentialBacked` — the value is derived from a credential in the vault at `claimPath`. The stored value is a CACHE FOR DISPLAY; the credential is the truth. A maintainer MUST re-derive it on read and MUST fail closed (never presenting a stale value) when the credential has been revoked, has expired, or has been archived or deleted.\n\n`generated` — the value is minted per verifier at disclosure time and recorded against that verifier, so every relying party receives a different one that routes back to the holder. This is the shape of the most widely adopted consumer privacy feature in this space; a maintainer need not operate a relay to conform, but the shape must exist, because retrofitting per-verifier values into a pool-of-values model is a migration rather than an addition.",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Source: specs/persona/profile/put/1.0/payload.schema.json
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { ClaimType, ExpectedVersion_PersonaV0_1 as ExpectedVersion, Ext, ProfileEntry, ProofRung, Provenance, Ulid, ValueType, Version_PersonaV0_1 as Version } from "../../../../_shared/components.js";
|
|
6
|
+
import type { ClaimType, ExpectedVersion_PersonaV0_1 as ExpectedVersion, Ext, ProfileEntry, ProofRung, Provenance, Slot, Ulid, ValueType, Version_PersonaV0_1 as Version } from "../../../../_shared/components.js";
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -56,7 +56,7 @@ export interface PersonaProfilePutResponsePayload {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/** Shared definitions this specification references, re-exported under the names it used to declare them with. */
|
|
59
|
-
export type { ClaimType, ExpectedVersion, Ext, ProfileEntry, ProofRung, Provenance, Ulid, ValueType, Version };
|
|
59
|
+
export type { ClaimType, ExpectedVersion, Ext, ProfileEntry, ProofRung, Provenance, Slot, Ulid, ValueType, Version };
|
|
60
60
|
|
|
61
61
|
/** Trust Task type URI. */
|
|
62
62
|
export const TYPE_URI = "https://trusttasks.org/spec/persona/profile/put/1.0" as const;
|
|
@@ -214,7 +214,7 @@ export const PAYLOAD_SCHEMA = {
|
|
|
214
214
|
},
|
|
215
215
|
"ProfileEntry": {
|
|
216
216
|
"title": "ProfileEntry",
|
|
217
|
-
"description": "One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.\n\n`{ref}` — use the pool attribute, live. Editing the pool updates every profile that references it, which is the point.\n\n`{ref, pinVersion}` — use the value as it was at that version. For a profile that must keep presenting the value a counterparty already verified.\n\n`{ref, override}` — the same fact, a different value here. (\"In the gaming profile my display name is different.\")\n\n`{inline}` — a value that never enters the pool, and so never leaks into another profile.\n\nOmission is exclusion; there is no removal marker.",
|
|
217
|
+
"description": "One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.\n\n`{ref}` — use the pool attribute, live. Editing the pool updates every profile that references it, which is the point.\n\n`{ref, pinVersion}` — use the value as it was at that version. For a profile that must keep presenting the value a counterparty already verified.\n\n`{ref, override}` — the same fact, a different value here. (\"In the gaming profile my display name is different.\")\n\n`{inline}` — a value that never enters the pool, and so never leaks into another profile.\n\nOmission is exclusion; there is no removal marker.\n\nAny form MAY carry a `slot` naming the role the entry plays in the profile — see `Slot`. A maintainer MUST refuse a profile in which two entries carry the same slot: a slot exists to answer one question with one entry.",
|
|
218
218
|
"type": "object",
|
|
219
219
|
"oneOf": [
|
|
220
220
|
{
|
|
@@ -225,6 +225,9 @@ export const PAYLOAD_SCHEMA = {
|
|
|
225
225
|
"properties": {
|
|
226
226
|
"ref": {
|
|
227
227
|
"$ref": "#/$defs/Ulid"
|
|
228
|
+
},
|
|
229
|
+
"slot": {
|
|
230
|
+
"$ref": "#/$defs/Slot"
|
|
228
231
|
}
|
|
229
232
|
}
|
|
230
233
|
},
|
|
@@ -240,6 +243,9 @@ export const PAYLOAD_SCHEMA = {
|
|
|
240
243
|
},
|
|
241
244
|
"pinVersion": {
|
|
242
245
|
"$ref": "#/$defs/Version"
|
|
246
|
+
},
|
|
247
|
+
"slot": {
|
|
248
|
+
"$ref": "#/$defs/Slot"
|
|
243
249
|
}
|
|
244
250
|
}
|
|
245
251
|
},
|
|
@@ -267,6 +273,9 @@ export const PAYLOAD_SCHEMA = {
|
|
|
267
273
|
}
|
|
268
274
|
},
|
|
269
275
|
"description": "Replaces the pool attribute's value for this profile only. `type`, `valueType` and `provenance` are inherited from the referenced attribute and MUST NOT be overridden — an override that changed provenance would let a self-asserted value present as attested."
|
|
276
|
+
},
|
|
277
|
+
"slot": {
|
|
278
|
+
"$ref": "#/$defs/Slot"
|
|
270
279
|
}
|
|
271
280
|
}
|
|
272
281
|
},
|
|
@@ -301,11 +310,20 @@ export const PAYLOAD_SCHEMA = {
|
|
|
301
310
|
"$ref": "#/$defs/Provenance"
|
|
302
311
|
}
|
|
303
312
|
}
|
|
313
|
+
},
|
|
314
|
+
"slot": {
|
|
315
|
+
"$ref": "#/$defs/Slot"
|
|
304
316
|
}
|
|
305
317
|
}
|
|
306
318
|
}
|
|
307
319
|
]
|
|
308
320
|
},
|
|
321
|
+
"Slot": {
|
|
322
|
+
"title": "Slot",
|
|
323
|
+
"type": "string",
|
|
324
|
+
"pattern": "^[a-z][A-Za-z0-9]{0,31}$",
|
|
325
|
+
"description": "A role a profile entry plays within its profile, so a consumer can find it without guessing from its claim type. A profile MAY hold several entries of one type — a legal name and a display name, two phone numbers — and only a slot says which answers a given question. Unique within a profile.\n\nWell-known slots:\n\n- `displayName` — what this face calls itself. The entry a consumer renders as the face's name to anyone it is shown to. Distinct from the profile's own `name`, which is the holder's private label and never disclosed.\n- `primaryEmail`, `primaryPhone`, `primaryAddress` — the entry to use where a counterparty asks for one of a kind and the profile holds several.\n- `avatar` — the image this face presents.\n\nOther values are the holder's or the producer's own and carry no meaning a maintainer interprets."
|
|
326
|
+
},
|
|
309
327
|
"Provenance": {
|
|
310
328
|
"title": "Provenance",
|
|
311
329
|
"description": "Where a value comes from, and the member that makes this family worth building on a trust stack rather than in an address book. It survives to the verifier, so a recipient can tell — per field — what the holder typed from what an issuer attested.\n\n`selfAsserted` — the holder supplied it.\n\n`credentialBacked` — the value is derived from a credential in the vault at `claimPath`. The stored value is a CACHE FOR DISPLAY; the credential is the truth. A maintainer MUST re-derive it on read and MUST fail closed (never presenting a stale value) when the credential has been revoked, has expired, or has been archived or deleted.\n\n`generated` — the value is minted per verifier at disclosure time and recorded against that verifier, so every relying party receives a different one that routes back to the holder. This is the shape of the most widely adopted consumer privacy feature in this space; a maintainer need not operate a relay to conform, but the shape must exist, because retrofitting per-verifier values into a pool-of-values model is a migration rather than an addition.",
|
|
@@ -509,7 +527,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
509
527
|
},
|
|
510
528
|
"ProfileEntry": {
|
|
511
529
|
"title": "ProfileEntry",
|
|
512
|
-
"description": "One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.\n\n`{ref}` — use the pool attribute, live. Editing the pool updates every profile that references it, which is the point.\n\n`{ref, pinVersion}` — use the value as it was at that version. For a profile that must keep presenting the value a counterparty already verified.\n\n`{ref, override}` — the same fact, a different value here. (\"In the gaming profile my display name is different.\")\n\n`{inline}` — a value that never enters the pool, and so never leaks into another profile.\n\nOmission is exclusion; there is no removal marker.",
|
|
530
|
+
"description": "One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.\n\n`{ref}` — use the pool attribute, live. Editing the pool updates every profile that references it, which is the point.\n\n`{ref, pinVersion}` — use the value as it was at that version. For a profile that must keep presenting the value a counterparty already verified.\n\n`{ref, override}` — the same fact, a different value here. (\"In the gaming profile my display name is different.\")\n\n`{inline}` — a value that never enters the pool, and so never leaks into another profile.\n\nOmission is exclusion; there is no removal marker.\n\nAny form MAY carry a `slot` naming the role the entry plays in the profile — see `Slot`. A maintainer MUST refuse a profile in which two entries carry the same slot: a slot exists to answer one question with one entry.",
|
|
513
531
|
"type": "object",
|
|
514
532
|
"oneOf": [
|
|
515
533
|
{
|
|
@@ -520,6 +538,9 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
520
538
|
"properties": {
|
|
521
539
|
"ref": {
|
|
522
540
|
"$ref": "#/$defs/Ulid"
|
|
541
|
+
},
|
|
542
|
+
"slot": {
|
|
543
|
+
"$ref": "#/$defs/Slot"
|
|
523
544
|
}
|
|
524
545
|
}
|
|
525
546
|
},
|
|
@@ -535,6 +556,9 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
535
556
|
},
|
|
536
557
|
"pinVersion": {
|
|
537
558
|
"$ref": "#/$defs/Version"
|
|
559
|
+
},
|
|
560
|
+
"slot": {
|
|
561
|
+
"$ref": "#/$defs/Slot"
|
|
538
562
|
}
|
|
539
563
|
}
|
|
540
564
|
},
|
|
@@ -562,6 +586,9 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
562
586
|
}
|
|
563
587
|
},
|
|
564
588
|
"description": "Replaces the pool attribute's value for this profile only. `type`, `valueType` and `provenance` are inherited from the referenced attribute and MUST NOT be overridden — an override that changed provenance would let a self-asserted value present as attested."
|
|
589
|
+
},
|
|
590
|
+
"slot": {
|
|
591
|
+
"$ref": "#/$defs/Slot"
|
|
565
592
|
}
|
|
566
593
|
}
|
|
567
594
|
},
|
|
@@ -596,11 +623,20 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
596
623
|
"$ref": "#/$defs/Provenance"
|
|
597
624
|
}
|
|
598
625
|
}
|
|
626
|
+
},
|
|
627
|
+
"slot": {
|
|
628
|
+
"$ref": "#/$defs/Slot"
|
|
599
629
|
}
|
|
600
630
|
}
|
|
601
631
|
}
|
|
602
632
|
]
|
|
603
633
|
},
|
|
634
|
+
"Slot": {
|
|
635
|
+
"title": "Slot",
|
|
636
|
+
"type": "string",
|
|
637
|
+
"pattern": "^[a-z][A-Za-z0-9]{0,31}$",
|
|
638
|
+
"description": "A role a profile entry plays within its profile, so a consumer can find it without guessing from its claim type. A profile MAY hold several entries of one type — a legal name and a display name, two phone numbers — and only a slot says which answers a given question. Unique within a profile.\n\nWell-known slots:\n\n- `displayName` — what this face calls itself. The entry a consumer renders as the face's name to anyone it is shown to. Distinct from the profile's own `name`, which is the holder's private label and never disclosed.\n- `primaryEmail`, `primaryPhone`, `primaryAddress` — the entry to use where a counterparty asks for one of a kind and the profile holds several.\n- `avatar` — the image this face presents.\n\nOther values are the holder's or the producer's own and carry no meaning a maintainer interprets."
|
|
639
|
+
},
|
|
604
640
|
"Provenance": {
|
|
605
641
|
"title": "Provenance",
|
|
606
642
|
"description": "Where a value comes from, and the member that makes this family worth building on a trust stack rather than in an address book. It survives to the verifier, so a recipient can tell — per field — what the holder typed from what an issuer attested.\n\n`selfAsserted` — the holder supplied it.\n\n`credentialBacked` — the value is derived from a credential in the vault at `claimPath`. The stored value is a CACHE FOR DISPLAY; the credential is the truth. A maintainer MUST re-derive it on read and MUST fail closed (never presenting a stale value) when the credential has been revoked, has expired, or has been archived or deleted.\n\n`generated` — the value is minted per verifier at disclosure time and recorded against that verifier, so every relying party receives a different one that routes back to the holder. This is the shape of the most widely adopted consumer privacy feature in this space; a maintainer need not operate a relay to conform, but the shape must exist, because retrofitting per-verifier values into a pool-of-values model is a migration rather than an addition.",
|