@openvtc/trust-tasks 0.19.18 → 0.19.20
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 +38 -0
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -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 +124 -4
- package/dist/persona/attribute/list/1.0/payload.d.ts.map +1 -1
- package/dist/persona/attribute/list/1.0/payload.js +72 -2
- package/dist/persona/attribute/list/1.0/payload.js.map +1 -1
- package/dist/persona/attribute/put/1.0/payload.d.ts +110 -4
- package/dist/persona/attribute/put/1.0/payload.d.ts.map +1 -1
- package/dist/persona/attribute/put/1.0/payload.js +62 -2
- package/dist/persona/attribute/put/1.0/payload.js.map +1 -1
- package/dist/persona/binding/set/1.0/payload.d.ts +6 -6
- package/dist/persona/binding/set/1.0/payload.d.ts.map +1 -1
- package/dist/persona/binding/set/1.0/payload.js +2 -3
- package/dist/persona/binding/set/1.0/payload.js.map +1 -1
- package/dist/persona/contact/get/1.0/payload.d.ts +84 -4
- package/dist/persona/contact/get/1.0/payload.d.ts.map +1 -1
- package/dist/persona/contact/get/1.0/payload.js +52 -2
- package/dist/persona/contact/get/1.0/payload.js.map +1 -1
- package/dist/persona/contact/put/1.0/payload.d.ts +84 -4
- package/dist/persona/contact/put/1.0/payload.d.ts.map +1 -1
- package/dist/persona/contact/put/1.0/payload.js +52 -2
- package/dist/persona/contact/put/1.0/payload.js.map +1 -1
- package/dist/persona/disclosure/preview/1.0/payload.d.ts +5 -5
- package/dist/persona/disclosure/preview/1.0/payload.d.ts.map +1 -1
- package/dist/persona/disclosure/preview/1.0/payload.js +4 -2
- package/dist/persona/disclosure/preview/1.0/payload.js.map +1 -1
- package/dist/persona/profile/compose/1.0/payload.d.ts +31 -3
- package/dist/persona/profile/compose/1.0/payload.d.ts.map +1 -1
- package/dist/persona/profile/compose/1.0/payload.js +11 -1
- package/dist/persona/profile/compose/1.0/payload.js.map +1 -1
- package/dist/persona/profile/get/1.0/payload.d.ts +230 -6
- package/dist/persona/profile/get/1.0/payload.d.ts.map +1 -1
- package/dist/persona/profile/get/1.0/payload.js +140 -2
- package/dist/persona/profile/get/1.0/payload.js.map +1 -1
- package/dist/persona/profile/list/1.0/payload.d.ts +230 -6
- package/dist/persona/profile/list/1.0/payload.d.ts.map +1 -1
- package/dist/persona/profile/list/1.0/payload.js +140 -2
- package/dist/persona/profile/list/1.0/payload.js.map +1 -1
- package/dist/persona/profile/put/1.0/payload.d.ts +230 -6
- package/dist/persona/profile/put/1.0/payload.d.ts.map +1 -1
- package/dist/persona/profile/put/1.0/payload.js +138 -2
- package/dist/persona/profile/put/1.0/payload.js.map +1 -1
- package/dist/persona/profile/timeline/1.0/payload.d.ts +588 -0
- package/dist/persona/profile/timeline/1.0/payload.d.ts.map +1 -0
- package/dist/persona/profile/timeline/1.0/payload.js +322 -0
- package/dist/persona/profile/timeline/1.0/payload.js.map +1 -0
- package/dist/persona/profile/usage/1.0/payload.d.ts +533 -0
- package/dist/persona/profile/usage/1.0/payload.d.ts.map +1 -0
- package/dist/persona/profile/usage/1.0/payload.js +302 -0
- package/dist/persona/profile/usage/1.0/payload.js.map +1 -0
- package/dist/vtc/invitations/deliver/0.1/payload.d.ts +318 -0
- package/dist/vtc/invitations/deliver/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/invitations/deliver/0.1/payload.js +183 -0
- package/dist/vtc/invitations/deliver/0.1/payload.js.map +1 -0
- package/package.json +1 -1
- package/src/_shared/components.ts +41 -0
- package/src/index.ts +3 -0
- package/src/persona/_shared/0.1/persona-record.ts +1 -1
- package/src/persona/attribute/list/1.0/payload.ts +72 -2
- package/src/persona/attribute/put/1.0/payload.ts +68 -2
- package/src/persona/binding/set/1.0/payload.ts +4 -5
- package/src/persona/contact/get/1.0/payload.ts +52 -2
- package/src/persona/contact/put/1.0/payload.ts +52 -2
- package/src/persona/disclosure/preview/1.0/payload.ts +5 -3
- package/src/persona/profile/compose/1.0/payload.ts +20 -2
- package/src/persona/profile/get/1.0/payload.ts +142 -4
- package/src/persona/profile/list/1.0/payload.ts +142 -4
- package/src/persona/profile/put/1.0/payload.ts +144 -4
- package/src/persona/profile/timeline/1.0/payload.ts +402 -0
- package/src/persona/profile/usage/1.0/payload.ts +354 -0
- package/src/vtc/invitations/deliver/0.1/payload.ts +234 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
|
|
3
3
|
* Source: specs/persona/profile/put/1.0/payload.schema.json
|
|
4
4
|
*/
|
|
5
|
-
import type { ClaimType, ExpectedVersion_PersonaV0_1 as ExpectedVersion, Ext, ProfileEntry, ProofRung, Provenance, Slot, Ulid, ValueType, Version_PersonaV0_1 as Version } from "../../../../_shared/components.js";
|
|
5
|
+
import type { ClaimType, ExpectedVersion_PersonaV0_1 as ExpectedVersion, Ext, FaceReach, ProfileEntry, ProofRung, Provenance, Slot, Ulid, ValueType, Version_PersonaV0_1 as Version } from "../../../../_shared/components.js";
|
|
6
6
|
/**
|
|
7
7
|
* Create or replace one profile: a named, ordered projection over the holder's attribute pool. Entries reference pool attributes rather than copying them, so a fact edited once is edited everywhere it appears.
|
|
8
8
|
*/
|
|
@@ -21,6 +21,10 @@ export interface PersonaProfilePutPayload {
|
|
|
21
21
|
* @maxItems 256
|
|
22
22
|
*/
|
|
23
23
|
entries: ProfileEntry[];
|
|
24
|
+
/**
|
|
25
|
+
* Where this face may be worn. Omit to keep the face's current reach — anywhere, for a new face. Unlike the rest of a put, omission does not reset it: a reach is a restriction the holder set, and a producer that predates this member must not widen a face to anywhere by saving an unrelated edit. To widen, send `{"kind": "anywhere"}`. Narrowing it while the face is worn outside the new reach is refused (`boundOutsideReach`), naming the contexts: the holder takes it off there first, deliberately.
|
|
26
|
+
*/
|
|
27
|
+
reach?: FaceReach;
|
|
24
28
|
/**
|
|
25
29
|
* Vault identifiers of credentials associated with this profile as inventory — what this persona can prove — as distinct from the evidence relationship a credentialBacked attribute expresses. The two answer different questions and a consumer MUST NOT read one as the other.
|
|
26
30
|
*
|
|
@@ -52,7 +56,7 @@ export interface PersonaProfilePutResponsePayload {
|
|
|
52
56
|
ext?: Ext;
|
|
53
57
|
}
|
|
54
58
|
/** Shared definitions this specification references, re-exported under the names it used to declare them with. */
|
|
55
|
-
export type { ClaimType, ExpectedVersion, Ext, ProfileEntry, ProofRung, Provenance, Slot, Ulid, ValueType, Version };
|
|
59
|
+
export type { ClaimType, ExpectedVersion, Ext, FaceReach, ProfileEntry, ProofRung, Provenance, Slot, Ulid, ValueType, Version };
|
|
56
60
|
/** Trust Task type URI. */
|
|
57
61
|
export declare const TYPE_URI: "https://trusttasks.org/spec/persona/profile/put/1.0";
|
|
58
62
|
/** Stable alias for this specification's request payload shape. */
|
|
@@ -97,6 +101,10 @@ export declare const PAYLOAD_SCHEMA: {
|
|
|
97
101
|
};
|
|
98
102
|
readonly description: "Ordered; the order is display order. An empty array is legal and means a profile that discloses nothing — useful as a starting point, and not the same as no profile at all.";
|
|
99
103
|
};
|
|
104
|
+
readonly reach: {
|
|
105
|
+
readonly $ref: "#/$defs/FaceReach";
|
|
106
|
+
readonly description: "Where this face may be worn. Omit to keep the face's current reach — anywhere, for a new face. Unlike the rest of a put, omission does not reset it: a reach is a restriction the holder set, and a producer that predates this member must not widen a face to anywhere by saving an unrelated edit. To widen, send `{\"kind\": \"anywhere\"}`. Narrowing it while the face is worn outside the new reach is refused (`boundOutsideReach`), naming the contexts: the holder takes it off there first, deliberately.";
|
|
107
|
+
};
|
|
100
108
|
readonly credentialRefs: {
|
|
101
109
|
readonly type: "array";
|
|
102
110
|
readonly maxItems: 256;
|
|
@@ -189,6 +197,39 @@ export declare const PAYLOAD_SCHEMA: {
|
|
|
189
197
|
readonly type: "integer";
|
|
190
198
|
readonly minimum: 0;
|
|
191
199
|
};
|
|
200
|
+
readonly FaceReach: {
|
|
201
|
+
readonly title: "FaceReach";
|
|
202
|
+
readonly description: "Where a pool face may be worn. `anywhere` is the default and what an absent member means. `only` names the contexts it may be worn in, and a maintainer MUST refuse to wear it in any other (persona/binding/set `outsideReach`).\n\nA tagged object rather than a bare list of contexts, deliberately: an empty list has been read as both 'unrestricted' and 'nowhere' in this family's neighbours, and a shape where the two cannot be confused is worth more than one where they must be remembered. So `only` requires at least one context, and 'nowhere' is not a reach — it is a retired face.\n\nA context-local face has no reach: it lives in its context and is worn there by construction.";
|
|
203
|
+
readonly oneOf: readonly [{
|
|
204
|
+
readonly type: "object";
|
|
205
|
+
readonly additionalProperties: false;
|
|
206
|
+
readonly required: readonly ["kind"];
|
|
207
|
+
readonly properties: {
|
|
208
|
+
readonly kind: {
|
|
209
|
+
readonly const: "anywhere";
|
|
210
|
+
};
|
|
211
|
+
};
|
|
212
|
+
}, {
|
|
213
|
+
readonly type: "object";
|
|
214
|
+
readonly additionalProperties: false;
|
|
215
|
+
readonly required: readonly ["kind", "contextIds"];
|
|
216
|
+
readonly properties: {
|
|
217
|
+
readonly kind: {
|
|
218
|
+
readonly const: "only";
|
|
219
|
+
};
|
|
220
|
+
readonly contextIds: {
|
|
221
|
+
readonly type: "array";
|
|
222
|
+
readonly minItems: 1;
|
|
223
|
+
readonly maxItems: 256;
|
|
224
|
+
readonly uniqueItems: true;
|
|
225
|
+
readonly items: {
|
|
226
|
+
readonly type: "string";
|
|
227
|
+
readonly minLength: 1;
|
|
228
|
+
};
|
|
229
|
+
};
|
|
230
|
+
};
|
|
231
|
+
}];
|
|
232
|
+
};
|
|
192
233
|
readonly ProfileEntry: {
|
|
193
234
|
readonly title: "ProfileEntry";
|
|
194
235
|
readonly 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.";
|
|
@@ -281,7 +322,7 @@ export declare const PAYLOAD_SCHEMA: {
|
|
|
281
322
|
};
|
|
282
323
|
readonly Provenance: {
|
|
283
324
|
readonly title: "Provenance";
|
|
284
|
-
readonly 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.";
|
|
325
|
+
readonly 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.\n\n`derived` — the value was taken from a source the holder connected or supplied — a code-hosting profile, an uploaded CV — rather than typed by them or attested by an issuer. Nobody signed it: it is the holder's claim that the source said so, and a consumer MUST NOT present it as attested. It exists as its own kind because a derived value is neither of the others — the holder did not author it, and no one vouches for it — and a holder deciding whether to disclose deserves to know which of their values they typed.\n\nFor how strongly a disclosed value identifies the holder, the kinds rank `credentialBacked` above `derived` above `selfAsserted`; `generated` values are per-verifier and do not correlate.";
|
|
285
326
|
readonly type: "object";
|
|
286
327
|
readonly required: readonly ["kind"];
|
|
287
328
|
readonly oneOf: readonly [{
|
|
@@ -338,6 +379,26 @@ export declare const PAYLOAD_SCHEMA: {
|
|
|
338
379
|
readonly description: "When true (the default and the only useful setting), a distinct value is minted for each verifier.";
|
|
339
380
|
};
|
|
340
381
|
};
|
|
382
|
+
}, {
|
|
383
|
+
readonly additionalProperties: false;
|
|
384
|
+
readonly required: readonly ["kind", "source", "derivedAt"];
|
|
385
|
+
readonly properties: {
|
|
386
|
+
readonly kind: {
|
|
387
|
+
readonly const: "derived";
|
|
388
|
+
};
|
|
389
|
+
readonly source: {
|
|
390
|
+
readonly type: "string";
|
|
391
|
+
readonly minLength: 1;
|
|
392
|
+
readonly maxLength: 64;
|
|
393
|
+
readonly pattern: "^[a-z][A-Za-z0-9.-]*$";
|
|
394
|
+
readonly description: "The KIND of source the value was taken from — `github`, `cvUpload`, `linkedIn` — never an account, handle or URL. Provenance survives to the verifier, so this member is disclosed with the claim; a handle here would disclose an identifier the holder never chose to share.";
|
|
395
|
+
};
|
|
396
|
+
readonly derivedAt: {
|
|
397
|
+
readonly type: "string";
|
|
398
|
+
readonly format: "date-time";
|
|
399
|
+
readonly description: "When the value was taken from the source. A derived value is a snapshot: the source may have changed since, and nothing re-derives it.";
|
|
400
|
+
};
|
|
401
|
+
};
|
|
341
402
|
}];
|
|
342
403
|
};
|
|
343
404
|
readonly ProofRung: {
|
|
@@ -442,6 +503,39 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
|
442
503
|
readonly type: "integer";
|
|
443
504
|
readonly minimum: 0;
|
|
444
505
|
};
|
|
506
|
+
readonly FaceReach: {
|
|
507
|
+
readonly title: "FaceReach";
|
|
508
|
+
readonly description: "Where a pool face may be worn. `anywhere` is the default and what an absent member means. `only` names the contexts it may be worn in, and a maintainer MUST refuse to wear it in any other (persona/binding/set `outsideReach`).\n\nA tagged object rather than a bare list of contexts, deliberately: an empty list has been read as both 'unrestricted' and 'nowhere' in this family's neighbours, and a shape where the two cannot be confused is worth more than one where they must be remembered. So `only` requires at least one context, and 'nowhere' is not a reach — it is a retired face.\n\nA context-local face has no reach: it lives in its context and is worn there by construction.";
|
|
509
|
+
readonly oneOf: readonly [{
|
|
510
|
+
readonly type: "object";
|
|
511
|
+
readonly additionalProperties: false;
|
|
512
|
+
readonly required: readonly ["kind"];
|
|
513
|
+
readonly properties: {
|
|
514
|
+
readonly kind: {
|
|
515
|
+
readonly const: "anywhere";
|
|
516
|
+
};
|
|
517
|
+
};
|
|
518
|
+
}, {
|
|
519
|
+
readonly type: "object";
|
|
520
|
+
readonly additionalProperties: false;
|
|
521
|
+
readonly required: readonly ["kind", "contextIds"];
|
|
522
|
+
readonly properties: {
|
|
523
|
+
readonly kind: {
|
|
524
|
+
readonly const: "only";
|
|
525
|
+
};
|
|
526
|
+
readonly contextIds: {
|
|
527
|
+
readonly type: "array";
|
|
528
|
+
readonly minItems: 1;
|
|
529
|
+
readonly maxItems: 256;
|
|
530
|
+
readonly uniqueItems: true;
|
|
531
|
+
readonly items: {
|
|
532
|
+
readonly type: "string";
|
|
533
|
+
readonly minLength: 1;
|
|
534
|
+
};
|
|
535
|
+
};
|
|
536
|
+
};
|
|
537
|
+
}];
|
|
538
|
+
};
|
|
445
539
|
readonly ProfileEntry: {
|
|
446
540
|
readonly title: "ProfileEntry";
|
|
447
541
|
readonly 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.";
|
|
@@ -534,7 +628,7 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
|
534
628
|
};
|
|
535
629
|
readonly Provenance: {
|
|
536
630
|
readonly title: "Provenance";
|
|
537
|
-
readonly 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.";
|
|
631
|
+
readonly 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.\n\n`derived` — the value was taken from a source the holder connected or supplied — a code-hosting profile, an uploaded CV — rather than typed by them or attested by an issuer. Nobody signed it: it is the holder's claim that the source said so, and a consumer MUST NOT present it as attested. It exists as its own kind because a derived value is neither of the others — the holder did not author it, and no one vouches for it — and a holder deciding whether to disclose deserves to know which of their values they typed.\n\nFor how strongly a disclosed value identifies the holder, the kinds rank `credentialBacked` above `derived` above `selfAsserted`; `generated` values are per-verifier and do not correlate.";
|
|
538
632
|
readonly type: "object";
|
|
539
633
|
readonly required: readonly ["kind"];
|
|
540
634
|
readonly oneOf: readonly [{
|
|
@@ -591,6 +685,26 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
|
591
685
|
readonly description: "When true (the default and the only useful setting), a distinct value is minted for each verifier.";
|
|
592
686
|
};
|
|
593
687
|
};
|
|
688
|
+
}, {
|
|
689
|
+
readonly additionalProperties: false;
|
|
690
|
+
readonly required: readonly ["kind", "source", "derivedAt"];
|
|
691
|
+
readonly properties: {
|
|
692
|
+
readonly kind: {
|
|
693
|
+
readonly const: "derived";
|
|
694
|
+
};
|
|
695
|
+
readonly source: {
|
|
696
|
+
readonly type: "string";
|
|
697
|
+
readonly minLength: 1;
|
|
698
|
+
readonly maxLength: 64;
|
|
699
|
+
readonly pattern: "^[a-z][A-Za-z0-9.-]*$";
|
|
700
|
+
readonly description: "The KIND of source the value was taken from — `github`, `cvUpload`, `linkedIn` — never an account, handle or URL. Provenance survives to the verifier, so this member is disclosed with the claim; a handle here would disclose an identifier the holder never chose to share.";
|
|
701
|
+
};
|
|
702
|
+
readonly derivedAt: {
|
|
703
|
+
readonly type: "string";
|
|
704
|
+
readonly format: "date-time";
|
|
705
|
+
readonly description: "When the value was taken from the source. A derived value is a snapshot: the source may have changed since, and nothing re-derives it.";
|
|
706
|
+
};
|
|
707
|
+
};
|
|
594
708
|
}];
|
|
595
709
|
};
|
|
596
710
|
readonly ProofRung: {
|
|
@@ -654,6 +768,10 @@ export declare const SPEC: {
|
|
|
654
768
|
};
|
|
655
769
|
readonly description: "Ordered; the order is display order. An empty array is legal and means a profile that discloses nothing — useful as a starting point, and not the same as no profile at all.";
|
|
656
770
|
};
|
|
771
|
+
readonly reach: {
|
|
772
|
+
readonly $ref: "#/$defs/FaceReach";
|
|
773
|
+
readonly description: "Where this face may be worn. Omit to keep the face's current reach — anywhere, for a new face. Unlike the rest of a put, omission does not reset it: a reach is a restriction the holder set, and a producer that predates this member must not widen a face to anywhere by saving an unrelated edit. To widen, send `{\"kind\": \"anywhere\"}`. Narrowing it while the face is worn outside the new reach is refused (`boundOutsideReach`), naming the contexts: the holder takes it off there first, deliberately.";
|
|
774
|
+
};
|
|
657
775
|
readonly credentialRefs: {
|
|
658
776
|
readonly type: "array";
|
|
659
777
|
readonly maxItems: 256;
|
|
@@ -746,6 +864,39 @@ export declare const SPEC: {
|
|
|
746
864
|
readonly type: "integer";
|
|
747
865
|
readonly minimum: 0;
|
|
748
866
|
};
|
|
867
|
+
readonly FaceReach: {
|
|
868
|
+
readonly title: "FaceReach";
|
|
869
|
+
readonly description: "Where a pool face may be worn. `anywhere` is the default and what an absent member means. `only` names the contexts it may be worn in, and a maintainer MUST refuse to wear it in any other (persona/binding/set `outsideReach`).\n\nA tagged object rather than a bare list of contexts, deliberately: an empty list has been read as both 'unrestricted' and 'nowhere' in this family's neighbours, and a shape where the two cannot be confused is worth more than one where they must be remembered. So `only` requires at least one context, and 'nowhere' is not a reach — it is a retired face.\n\nA context-local face has no reach: it lives in its context and is worn there by construction.";
|
|
870
|
+
readonly oneOf: readonly [{
|
|
871
|
+
readonly type: "object";
|
|
872
|
+
readonly additionalProperties: false;
|
|
873
|
+
readonly required: readonly ["kind"];
|
|
874
|
+
readonly properties: {
|
|
875
|
+
readonly kind: {
|
|
876
|
+
readonly const: "anywhere";
|
|
877
|
+
};
|
|
878
|
+
};
|
|
879
|
+
}, {
|
|
880
|
+
readonly type: "object";
|
|
881
|
+
readonly additionalProperties: false;
|
|
882
|
+
readonly required: readonly ["kind", "contextIds"];
|
|
883
|
+
readonly properties: {
|
|
884
|
+
readonly kind: {
|
|
885
|
+
readonly const: "only";
|
|
886
|
+
};
|
|
887
|
+
readonly contextIds: {
|
|
888
|
+
readonly type: "array";
|
|
889
|
+
readonly minItems: 1;
|
|
890
|
+
readonly maxItems: 256;
|
|
891
|
+
readonly uniqueItems: true;
|
|
892
|
+
readonly items: {
|
|
893
|
+
readonly type: "string";
|
|
894
|
+
readonly minLength: 1;
|
|
895
|
+
};
|
|
896
|
+
};
|
|
897
|
+
};
|
|
898
|
+
}];
|
|
899
|
+
};
|
|
749
900
|
readonly ProfileEntry: {
|
|
750
901
|
readonly title: "ProfileEntry";
|
|
751
902
|
readonly 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.";
|
|
@@ -838,7 +989,7 @@ export declare const SPEC: {
|
|
|
838
989
|
};
|
|
839
990
|
readonly Provenance: {
|
|
840
991
|
readonly title: "Provenance";
|
|
841
|
-
readonly 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.";
|
|
992
|
+
readonly 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.\n\n`derived` — the value was taken from a source the holder connected or supplied — a code-hosting profile, an uploaded CV — rather than typed by them or attested by an issuer. Nobody signed it: it is the holder's claim that the source said so, and a consumer MUST NOT present it as attested. It exists as its own kind because a derived value is neither of the others — the holder did not author it, and no one vouches for it — and a holder deciding whether to disclose deserves to know which of their values they typed.\n\nFor how strongly a disclosed value identifies the holder, the kinds rank `credentialBacked` above `derived` above `selfAsserted`; `generated` values are per-verifier and do not correlate.";
|
|
842
993
|
readonly type: "object";
|
|
843
994
|
readonly required: readonly ["kind"];
|
|
844
995
|
readonly oneOf: readonly [{
|
|
@@ -895,6 +1046,26 @@ export declare const SPEC: {
|
|
|
895
1046
|
readonly description: "When true (the default and the only useful setting), a distinct value is minted for each verifier.";
|
|
896
1047
|
};
|
|
897
1048
|
};
|
|
1049
|
+
}, {
|
|
1050
|
+
readonly additionalProperties: false;
|
|
1051
|
+
readonly required: readonly ["kind", "source", "derivedAt"];
|
|
1052
|
+
readonly properties: {
|
|
1053
|
+
readonly kind: {
|
|
1054
|
+
readonly const: "derived";
|
|
1055
|
+
};
|
|
1056
|
+
readonly source: {
|
|
1057
|
+
readonly type: "string";
|
|
1058
|
+
readonly minLength: 1;
|
|
1059
|
+
readonly maxLength: 64;
|
|
1060
|
+
readonly pattern: "^[a-z][A-Za-z0-9.-]*$";
|
|
1061
|
+
readonly description: "The KIND of source the value was taken from — `github`, `cvUpload`, `linkedIn` — never an account, handle or URL. Provenance survives to the verifier, so this member is disclosed with the claim; a handle here would disclose an identifier the holder never chose to share.";
|
|
1062
|
+
};
|
|
1063
|
+
readonly derivedAt: {
|
|
1064
|
+
readonly type: "string";
|
|
1065
|
+
readonly format: "date-time";
|
|
1066
|
+
readonly description: "When the value was taken from the source. A derived value is a snapshot: the source may have changed since, and nothing re-derives it.";
|
|
1067
|
+
};
|
|
1068
|
+
};
|
|
898
1069
|
}];
|
|
899
1070
|
};
|
|
900
1071
|
readonly ProofRung: {
|
|
@@ -1010,6 +1181,39 @@ export declare const RESPONSE_SPEC: {
|
|
|
1010
1181
|
readonly type: "integer";
|
|
1011
1182
|
readonly minimum: 0;
|
|
1012
1183
|
};
|
|
1184
|
+
readonly FaceReach: {
|
|
1185
|
+
readonly title: "FaceReach";
|
|
1186
|
+
readonly description: "Where a pool face may be worn. `anywhere` is the default and what an absent member means. `only` names the contexts it may be worn in, and a maintainer MUST refuse to wear it in any other (persona/binding/set `outsideReach`).\n\nA tagged object rather than a bare list of contexts, deliberately: an empty list has been read as both 'unrestricted' and 'nowhere' in this family's neighbours, and a shape where the two cannot be confused is worth more than one where they must be remembered. So `only` requires at least one context, and 'nowhere' is not a reach — it is a retired face.\n\nA context-local face has no reach: it lives in its context and is worn there by construction.";
|
|
1187
|
+
readonly oneOf: readonly [{
|
|
1188
|
+
readonly type: "object";
|
|
1189
|
+
readonly additionalProperties: false;
|
|
1190
|
+
readonly required: readonly ["kind"];
|
|
1191
|
+
readonly properties: {
|
|
1192
|
+
readonly kind: {
|
|
1193
|
+
readonly const: "anywhere";
|
|
1194
|
+
};
|
|
1195
|
+
};
|
|
1196
|
+
}, {
|
|
1197
|
+
readonly type: "object";
|
|
1198
|
+
readonly additionalProperties: false;
|
|
1199
|
+
readonly required: readonly ["kind", "contextIds"];
|
|
1200
|
+
readonly properties: {
|
|
1201
|
+
readonly kind: {
|
|
1202
|
+
readonly const: "only";
|
|
1203
|
+
};
|
|
1204
|
+
readonly contextIds: {
|
|
1205
|
+
readonly type: "array";
|
|
1206
|
+
readonly minItems: 1;
|
|
1207
|
+
readonly maxItems: 256;
|
|
1208
|
+
readonly uniqueItems: true;
|
|
1209
|
+
readonly items: {
|
|
1210
|
+
readonly type: "string";
|
|
1211
|
+
readonly minLength: 1;
|
|
1212
|
+
};
|
|
1213
|
+
};
|
|
1214
|
+
};
|
|
1215
|
+
}];
|
|
1216
|
+
};
|
|
1013
1217
|
readonly ProfileEntry: {
|
|
1014
1218
|
readonly title: "ProfileEntry";
|
|
1015
1219
|
readonly 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.";
|
|
@@ -1102,7 +1306,7 @@ export declare const RESPONSE_SPEC: {
|
|
|
1102
1306
|
};
|
|
1103
1307
|
readonly Provenance: {
|
|
1104
1308
|
readonly title: "Provenance";
|
|
1105
|
-
readonly 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.";
|
|
1309
|
+
readonly 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.\n\n`derived` — the value was taken from a source the holder connected or supplied — a code-hosting profile, an uploaded CV — rather than typed by them or attested by an issuer. Nobody signed it: it is the holder's claim that the source said so, and a consumer MUST NOT present it as attested. It exists as its own kind because a derived value is neither of the others — the holder did not author it, and no one vouches for it — and a holder deciding whether to disclose deserves to know which of their values they typed.\n\nFor how strongly a disclosed value identifies the holder, the kinds rank `credentialBacked` above `derived` above `selfAsserted`; `generated` values are per-verifier and do not correlate.";
|
|
1106
1310
|
readonly type: "object";
|
|
1107
1311
|
readonly required: readonly ["kind"];
|
|
1108
1312
|
readonly oneOf: readonly [{
|
|
@@ -1159,6 +1363,26 @@ export declare const RESPONSE_SPEC: {
|
|
|
1159
1363
|
readonly description: "When true (the default and the only useful setting), a distinct value is minted for each verifier.";
|
|
1160
1364
|
};
|
|
1161
1365
|
};
|
|
1366
|
+
}, {
|
|
1367
|
+
readonly additionalProperties: false;
|
|
1368
|
+
readonly required: readonly ["kind", "source", "derivedAt"];
|
|
1369
|
+
readonly properties: {
|
|
1370
|
+
readonly kind: {
|
|
1371
|
+
readonly const: "derived";
|
|
1372
|
+
};
|
|
1373
|
+
readonly source: {
|
|
1374
|
+
readonly type: "string";
|
|
1375
|
+
readonly minLength: 1;
|
|
1376
|
+
readonly maxLength: 64;
|
|
1377
|
+
readonly pattern: "^[a-z][A-Za-z0-9.-]*$";
|
|
1378
|
+
readonly description: "The KIND of source the value was taken from — `github`, `cvUpload`, `linkedIn` — never an account, handle or URL. Provenance survives to the verifier, so this member is disclosed with the claim; a handle here would disclose an identifier the holder never chose to share.";
|
|
1379
|
+
};
|
|
1380
|
+
readonly derivedAt: {
|
|
1381
|
+
readonly type: "string";
|
|
1382
|
+
readonly format: "date-time";
|
|
1383
|
+
readonly description: "When the value was taken from the source. A derived value is a snapshot: the source may have changed since, and nothing re-derives it.";
|
|
1384
|
+
};
|
|
1385
|
+
};
|
|
1162
1386
|
}];
|
|
1163
1387
|
};
|
|
1164
1388
|
readonly ProofRung: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../../../src/persona/profile/put/1.0/payload.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,2BAA2B,IAAI,eAAe,EAAE,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,mBAAmB,IAAI,OAAO,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../../../src/persona/profile/put/1.0/payload.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,6 +45,10 @@ export const PAYLOAD_SCHEMA = {
|
|
|
45
45
|
},
|
|
46
46
|
"description": "Ordered; the order is display order. An empty array is legal and means a profile that discloses nothing — useful as a starting point, and not the same as no profile at all."
|
|
47
47
|
},
|
|
48
|
+
"reach": {
|
|
49
|
+
"$ref": "#/$defs/FaceReach",
|
|
50
|
+
"description": "Where this face may be worn. Omit to keep the face's current reach — anywhere, for a new face. Unlike the rest of a put, omission does not reset it: a reach is a restriction the holder set, and a producer that predates this member must not widen a face to anywhere by saving an unrelated edit. To widen, send `{\"kind\": \"anywhere\"}`. Narrowing it while the face is worn outside the new reach is refused (`boundOutsideReach`), naming the contexts: the holder takes it off there first, deliberately."
|
|
51
|
+
},
|
|
48
52
|
"credentialRefs": {
|
|
49
53
|
"type": "array",
|
|
50
54
|
"maxItems": 256,
|
|
@@ -148,6 +152,47 @@ export const PAYLOAD_SCHEMA = {
|
|
|
148
152
|
"type": "integer",
|
|
149
153
|
"minimum": 0
|
|
150
154
|
},
|
|
155
|
+
"FaceReach": {
|
|
156
|
+
"title": "FaceReach",
|
|
157
|
+
"description": "Where a pool face may be worn. `anywhere` is the default and what an absent member means. `only` names the contexts it may be worn in, and a maintainer MUST refuse to wear it in any other (persona/binding/set `outsideReach`).\n\nA tagged object rather than a bare list of contexts, deliberately: an empty list has been read as both 'unrestricted' and 'nowhere' in this family's neighbours, and a shape where the two cannot be confused is worth more than one where they must be remembered. So `only` requires at least one context, and 'nowhere' is not a reach — it is a retired face.\n\nA context-local face has no reach: it lives in its context and is worn there by construction.",
|
|
158
|
+
"oneOf": [
|
|
159
|
+
{
|
|
160
|
+
"type": "object",
|
|
161
|
+
"additionalProperties": false,
|
|
162
|
+
"required": [
|
|
163
|
+
"kind"
|
|
164
|
+
],
|
|
165
|
+
"properties": {
|
|
166
|
+
"kind": {
|
|
167
|
+
"const": "anywhere"
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"type": "object",
|
|
173
|
+
"additionalProperties": false,
|
|
174
|
+
"required": [
|
|
175
|
+
"kind",
|
|
176
|
+
"contextIds"
|
|
177
|
+
],
|
|
178
|
+
"properties": {
|
|
179
|
+
"kind": {
|
|
180
|
+
"const": "only"
|
|
181
|
+
},
|
|
182
|
+
"contextIds": {
|
|
183
|
+
"type": "array",
|
|
184
|
+
"minItems": 1,
|
|
185
|
+
"maxItems": 256,
|
|
186
|
+
"uniqueItems": true,
|
|
187
|
+
"items": {
|
|
188
|
+
"type": "string",
|
|
189
|
+
"minLength": 1
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
]
|
|
195
|
+
},
|
|
151
196
|
"ProfileEntry": {
|
|
152
197
|
"title": "ProfileEntry",
|
|
153
198
|
"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.",
|
|
@@ -262,7 +307,7 @@ export const PAYLOAD_SCHEMA = {
|
|
|
262
307
|
},
|
|
263
308
|
"Provenance": {
|
|
264
309
|
"title": "Provenance",
|
|
265
|
-
"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.",
|
|
310
|
+
"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.\n\n`derived` — the value was taken from a source the holder connected or supplied — a code-hosting profile, an uploaded CV — rather than typed by them or attested by an issuer. Nobody signed it: it is the holder's claim that the source said so, and a consumer MUST NOT present it as attested. It exists as its own kind because a derived value is neither of the others — the holder did not author it, and no one vouches for it — and a holder deciding whether to disclose deserves to know which of their values they typed.\n\nFor how strongly a disclosed value identifies the holder, the kinds rank `credentialBacked` above `derived` above `selfAsserted`; `generated` values are per-verifier and do not correlate.",
|
|
266
311
|
"type": "object",
|
|
267
312
|
"required": [
|
|
268
313
|
"kind"
|
|
@@ -333,6 +378,31 @@ export const PAYLOAD_SCHEMA = {
|
|
|
333
378
|
"description": "When true (the default and the only useful setting), a distinct value is minted for each verifier."
|
|
334
379
|
}
|
|
335
380
|
}
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
"additionalProperties": false,
|
|
384
|
+
"required": [
|
|
385
|
+
"kind",
|
|
386
|
+
"source",
|
|
387
|
+
"derivedAt"
|
|
388
|
+
],
|
|
389
|
+
"properties": {
|
|
390
|
+
"kind": {
|
|
391
|
+
"const": "derived"
|
|
392
|
+
},
|
|
393
|
+
"source": {
|
|
394
|
+
"type": "string",
|
|
395
|
+
"minLength": 1,
|
|
396
|
+
"maxLength": 64,
|
|
397
|
+
"pattern": "^[a-z][A-Za-z0-9.-]*$",
|
|
398
|
+
"description": "The KIND of source the value was taken from — `github`, `cvUpload`, `linkedIn` — never an account, handle or URL. Provenance survives to the verifier, so this member is disclosed with the claim; a handle here would disclose an identifier the holder never chose to share."
|
|
399
|
+
},
|
|
400
|
+
"derivedAt": {
|
|
401
|
+
"type": "string",
|
|
402
|
+
"format": "date-time",
|
|
403
|
+
"description": "When the value was taken from the source. A derived value is a snapshot: the source may have changed since, and nothing re-derives it."
|
|
404
|
+
}
|
|
405
|
+
}
|
|
336
406
|
}
|
|
337
407
|
]
|
|
338
408
|
},
|
|
@@ -460,6 +530,47 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
460
530
|
"type": "integer",
|
|
461
531
|
"minimum": 0
|
|
462
532
|
},
|
|
533
|
+
"FaceReach": {
|
|
534
|
+
"title": "FaceReach",
|
|
535
|
+
"description": "Where a pool face may be worn. `anywhere` is the default and what an absent member means. `only` names the contexts it may be worn in, and a maintainer MUST refuse to wear it in any other (persona/binding/set `outsideReach`).\n\nA tagged object rather than a bare list of contexts, deliberately: an empty list has been read as both 'unrestricted' and 'nowhere' in this family's neighbours, and a shape where the two cannot be confused is worth more than one where they must be remembered. So `only` requires at least one context, and 'nowhere' is not a reach — it is a retired face.\n\nA context-local face has no reach: it lives in its context and is worn there by construction.",
|
|
536
|
+
"oneOf": [
|
|
537
|
+
{
|
|
538
|
+
"type": "object",
|
|
539
|
+
"additionalProperties": false,
|
|
540
|
+
"required": [
|
|
541
|
+
"kind"
|
|
542
|
+
],
|
|
543
|
+
"properties": {
|
|
544
|
+
"kind": {
|
|
545
|
+
"const": "anywhere"
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
"type": "object",
|
|
551
|
+
"additionalProperties": false,
|
|
552
|
+
"required": [
|
|
553
|
+
"kind",
|
|
554
|
+
"contextIds"
|
|
555
|
+
],
|
|
556
|
+
"properties": {
|
|
557
|
+
"kind": {
|
|
558
|
+
"const": "only"
|
|
559
|
+
},
|
|
560
|
+
"contextIds": {
|
|
561
|
+
"type": "array",
|
|
562
|
+
"minItems": 1,
|
|
563
|
+
"maxItems": 256,
|
|
564
|
+
"uniqueItems": true,
|
|
565
|
+
"items": {
|
|
566
|
+
"type": "string",
|
|
567
|
+
"minLength": 1
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
]
|
|
573
|
+
},
|
|
463
574
|
"ProfileEntry": {
|
|
464
575
|
"title": "ProfileEntry",
|
|
465
576
|
"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.",
|
|
@@ -574,7 +685,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
574
685
|
},
|
|
575
686
|
"Provenance": {
|
|
576
687
|
"title": "Provenance",
|
|
577
|
-
"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.",
|
|
688
|
+
"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.\n\n`derived` — the value was taken from a source the holder connected or supplied — a code-hosting profile, an uploaded CV — rather than typed by them or attested by an issuer. Nobody signed it: it is the holder's claim that the source said so, and a consumer MUST NOT present it as attested. It exists as its own kind because a derived value is neither of the others — the holder did not author it, and no one vouches for it — and a holder deciding whether to disclose deserves to know which of their values they typed.\n\nFor how strongly a disclosed value identifies the holder, the kinds rank `credentialBacked` above `derived` above `selfAsserted`; `generated` values are per-verifier and do not correlate.",
|
|
578
689
|
"type": "object",
|
|
579
690
|
"required": [
|
|
580
691
|
"kind"
|
|
@@ -645,6 +756,31 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
645
756
|
"description": "When true (the default and the only useful setting), a distinct value is minted for each verifier."
|
|
646
757
|
}
|
|
647
758
|
}
|
|
759
|
+
},
|
|
760
|
+
{
|
|
761
|
+
"additionalProperties": false,
|
|
762
|
+
"required": [
|
|
763
|
+
"kind",
|
|
764
|
+
"source",
|
|
765
|
+
"derivedAt"
|
|
766
|
+
],
|
|
767
|
+
"properties": {
|
|
768
|
+
"kind": {
|
|
769
|
+
"const": "derived"
|
|
770
|
+
},
|
|
771
|
+
"source": {
|
|
772
|
+
"type": "string",
|
|
773
|
+
"minLength": 1,
|
|
774
|
+
"maxLength": 64,
|
|
775
|
+
"pattern": "^[a-z][A-Za-z0-9.-]*$",
|
|
776
|
+
"description": "The KIND of source the value was taken from — `github`, `cvUpload`, `linkedIn` — never an account, handle or URL. Provenance survives to the verifier, so this member is disclosed with the claim; a handle here would disclose an identifier the holder never chose to share."
|
|
777
|
+
},
|
|
778
|
+
"derivedAt": {
|
|
779
|
+
"type": "string",
|
|
780
|
+
"format": "date-time",
|
|
781
|
+
"description": "When the value was taken from the source. A derived value is a snapshot: the source may have changed since, and nothing re-derives it."
|
|
782
|
+
}
|
|
783
|
+
}
|
|
648
784
|
}
|
|
649
785
|
]
|
|
650
786
|
},
|