@openvtc/trust-tasks 0.19.18 → 0.19.19
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 +2 -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/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 +14 -0
- package/dist/persona/profile/compose/1.0/payload.d.ts.map +1 -1
- package/dist/persona/profile/compose/1.0/payload.js +5 -0
- 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/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 +9 -0
- 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/list/1.0/payload.schema.json
|
|
4
4
|
*/
|
|
5
|
-
import type { ClaimType, Ext, Profile, ProfileEntry, ProofRung, Provenance, Slot, Ulid, ValueType, Version_PersonaV0_1 as Version } from "../../../../_shared/components.js";
|
|
5
|
+
import type { ClaimType, Ext, FaceReach, Profile, ProfileEntry, ProofRung, Provenance, Slot, Ulid, ValueType, Version_PersonaV0_1 as Version } from "../../../../_shared/components.js";
|
|
6
6
|
/**
|
|
7
7
|
* Enumerate the holder's profiles. Compositions only — entries are returned, values are not.
|
|
8
8
|
*/
|
|
@@ -33,7 +33,7 @@ export interface PersonaProfileListResponsePayload {
|
|
|
33
33
|
ext?: Ext;
|
|
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, Slot, Ulid, ValueType, Version };
|
|
36
|
+
export type { ClaimType, Ext, FaceReach, Profile, ProfileEntry, ProofRung, Provenance, Slot, Ulid, ValueType, Version };
|
|
37
37
|
/** Trust Task type URI. */
|
|
38
38
|
export declare const TYPE_URI: "https://trusttasks.org/spec/persona/profile/list/1.0";
|
|
39
39
|
/** Stable alias for this specification's request payload shape. */
|
|
@@ -138,6 +138,9 @@ export declare const PAYLOAD_SCHEMA: {
|
|
|
138
138
|
readonly $ref: "#/$defs/ProfileEntry";
|
|
139
139
|
};
|
|
140
140
|
};
|
|
141
|
+
readonly reach: {
|
|
142
|
+
readonly $ref: "#/$defs/FaceReach";
|
|
143
|
+
};
|
|
141
144
|
readonly status: {
|
|
142
145
|
readonly type: "string";
|
|
143
146
|
readonly enum: readonly ["active", "retired"];
|
|
@@ -177,6 +180,39 @@ export declare const PAYLOAD_SCHEMA: {
|
|
|
177
180
|
readonly type: "integer";
|
|
178
181
|
readonly minimum: 1;
|
|
179
182
|
};
|
|
183
|
+
readonly FaceReach: {
|
|
184
|
+
readonly title: "FaceReach";
|
|
185
|
+
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.";
|
|
186
|
+
readonly oneOf: readonly [{
|
|
187
|
+
readonly type: "object";
|
|
188
|
+
readonly additionalProperties: false;
|
|
189
|
+
readonly required: readonly ["kind"];
|
|
190
|
+
readonly properties: {
|
|
191
|
+
readonly kind: {
|
|
192
|
+
readonly const: "anywhere";
|
|
193
|
+
};
|
|
194
|
+
};
|
|
195
|
+
}, {
|
|
196
|
+
readonly type: "object";
|
|
197
|
+
readonly additionalProperties: false;
|
|
198
|
+
readonly required: readonly ["kind", "contextIds"];
|
|
199
|
+
readonly properties: {
|
|
200
|
+
readonly kind: {
|
|
201
|
+
readonly const: "only";
|
|
202
|
+
};
|
|
203
|
+
readonly contextIds: {
|
|
204
|
+
readonly type: "array";
|
|
205
|
+
readonly minItems: 1;
|
|
206
|
+
readonly maxItems: 256;
|
|
207
|
+
readonly uniqueItems: true;
|
|
208
|
+
readonly items: {
|
|
209
|
+
readonly type: "string";
|
|
210
|
+
readonly minLength: 1;
|
|
211
|
+
};
|
|
212
|
+
};
|
|
213
|
+
};
|
|
214
|
+
}];
|
|
215
|
+
};
|
|
180
216
|
readonly ProfileEntry: {
|
|
181
217
|
readonly title: "ProfileEntry";
|
|
182
218
|
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.";
|
|
@@ -269,7 +305,7 @@ export declare const PAYLOAD_SCHEMA: {
|
|
|
269
305
|
};
|
|
270
306
|
readonly Provenance: {
|
|
271
307
|
readonly title: "Provenance";
|
|
272
|
-
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.";
|
|
308
|
+
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.";
|
|
273
309
|
readonly type: "object";
|
|
274
310
|
readonly required: readonly ["kind"];
|
|
275
311
|
readonly oneOf: readonly [{
|
|
@@ -326,6 +362,26 @@ export declare const PAYLOAD_SCHEMA: {
|
|
|
326
362
|
readonly description: "When true (the default and the only useful setting), a distinct value is minted for each verifier.";
|
|
327
363
|
};
|
|
328
364
|
};
|
|
365
|
+
}, {
|
|
366
|
+
readonly additionalProperties: false;
|
|
367
|
+
readonly required: readonly ["kind", "source", "derivedAt"];
|
|
368
|
+
readonly properties: {
|
|
369
|
+
readonly kind: {
|
|
370
|
+
readonly const: "derived";
|
|
371
|
+
};
|
|
372
|
+
readonly source: {
|
|
373
|
+
readonly type: "string";
|
|
374
|
+
readonly minLength: 1;
|
|
375
|
+
readonly maxLength: 64;
|
|
376
|
+
readonly pattern: "^[a-z][A-Za-z0-9.-]*$";
|
|
377
|
+
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.";
|
|
378
|
+
};
|
|
379
|
+
readonly derivedAt: {
|
|
380
|
+
readonly type: "string";
|
|
381
|
+
readonly format: "date-time";
|
|
382
|
+
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.";
|
|
383
|
+
};
|
|
384
|
+
};
|
|
329
385
|
}];
|
|
330
386
|
};
|
|
331
387
|
readonly ProofRung: {
|
|
@@ -419,6 +475,9 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
|
419
475
|
readonly $ref: "#/$defs/ProfileEntry";
|
|
420
476
|
};
|
|
421
477
|
};
|
|
478
|
+
readonly reach: {
|
|
479
|
+
readonly $ref: "#/$defs/FaceReach";
|
|
480
|
+
};
|
|
422
481
|
readonly status: {
|
|
423
482
|
readonly type: "string";
|
|
424
483
|
readonly enum: readonly ["active", "retired"];
|
|
@@ -458,6 +517,39 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
|
458
517
|
readonly type: "integer";
|
|
459
518
|
readonly minimum: 1;
|
|
460
519
|
};
|
|
520
|
+
readonly FaceReach: {
|
|
521
|
+
readonly title: "FaceReach";
|
|
522
|
+
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.";
|
|
523
|
+
readonly oneOf: readonly [{
|
|
524
|
+
readonly type: "object";
|
|
525
|
+
readonly additionalProperties: false;
|
|
526
|
+
readonly required: readonly ["kind"];
|
|
527
|
+
readonly properties: {
|
|
528
|
+
readonly kind: {
|
|
529
|
+
readonly const: "anywhere";
|
|
530
|
+
};
|
|
531
|
+
};
|
|
532
|
+
}, {
|
|
533
|
+
readonly type: "object";
|
|
534
|
+
readonly additionalProperties: false;
|
|
535
|
+
readonly required: readonly ["kind", "contextIds"];
|
|
536
|
+
readonly properties: {
|
|
537
|
+
readonly kind: {
|
|
538
|
+
readonly const: "only";
|
|
539
|
+
};
|
|
540
|
+
readonly contextIds: {
|
|
541
|
+
readonly type: "array";
|
|
542
|
+
readonly minItems: 1;
|
|
543
|
+
readonly maxItems: 256;
|
|
544
|
+
readonly uniqueItems: true;
|
|
545
|
+
readonly items: {
|
|
546
|
+
readonly type: "string";
|
|
547
|
+
readonly minLength: 1;
|
|
548
|
+
};
|
|
549
|
+
};
|
|
550
|
+
};
|
|
551
|
+
}];
|
|
552
|
+
};
|
|
461
553
|
readonly ProfileEntry: {
|
|
462
554
|
readonly title: "ProfileEntry";
|
|
463
555
|
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.";
|
|
@@ -550,7 +642,7 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
|
550
642
|
};
|
|
551
643
|
readonly Provenance: {
|
|
552
644
|
readonly title: "Provenance";
|
|
553
|
-
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.";
|
|
645
|
+
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.";
|
|
554
646
|
readonly type: "object";
|
|
555
647
|
readonly required: readonly ["kind"];
|
|
556
648
|
readonly oneOf: readonly [{
|
|
@@ -607,6 +699,26 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
|
607
699
|
readonly description: "When true (the default and the only useful setting), a distinct value is minted for each verifier.";
|
|
608
700
|
};
|
|
609
701
|
};
|
|
702
|
+
}, {
|
|
703
|
+
readonly additionalProperties: false;
|
|
704
|
+
readonly required: readonly ["kind", "source", "derivedAt"];
|
|
705
|
+
readonly properties: {
|
|
706
|
+
readonly kind: {
|
|
707
|
+
readonly const: "derived";
|
|
708
|
+
};
|
|
709
|
+
readonly source: {
|
|
710
|
+
readonly type: "string";
|
|
711
|
+
readonly minLength: 1;
|
|
712
|
+
readonly maxLength: 64;
|
|
713
|
+
readonly pattern: "^[a-z][A-Za-z0-9.-]*$";
|
|
714
|
+
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.";
|
|
715
|
+
};
|
|
716
|
+
readonly derivedAt: {
|
|
717
|
+
readonly type: "string";
|
|
718
|
+
readonly format: "date-time";
|
|
719
|
+
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.";
|
|
720
|
+
};
|
|
721
|
+
};
|
|
610
722
|
}];
|
|
611
723
|
};
|
|
612
724
|
readonly ProofRung: {
|
|
@@ -736,6 +848,9 @@ export declare const SPEC: {
|
|
|
736
848
|
readonly $ref: "#/$defs/ProfileEntry";
|
|
737
849
|
};
|
|
738
850
|
};
|
|
851
|
+
readonly reach: {
|
|
852
|
+
readonly $ref: "#/$defs/FaceReach";
|
|
853
|
+
};
|
|
739
854
|
readonly status: {
|
|
740
855
|
readonly type: "string";
|
|
741
856
|
readonly enum: readonly ["active", "retired"];
|
|
@@ -775,6 +890,39 @@ export declare const SPEC: {
|
|
|
775
890
|
readonly type: "integer";
|
|
776
891
|
readonly minimum: 1;
|
|
777
892
|
};
|
|
893
|
+
readonly FaceReach: {
|
|
894
|
+
readonly title: "FaceReach";
|
|
895
|
+
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.";
|
|
896
|
+
readonly oneOf: readonly [{
|
|
897
|
+
readonly type: "object";
|
|
898
|
+
readonly additionalProperties: false;
|
|
899
|
+
readonly required: readonly ["kind"];
|
|
900
|
+
readonly properties: {
|
|
901
|
+
readonly kind: {
|
|
902
|
+
readonly const: "anywhere";
|
|
903
|
+
};
|
|
904
|
+
};
|
|
905
|
+
}, {
|
|
906
|
+
readonly type: "object";
|
|
907
|
+
readonly additionalProperties: false;
|
|
908
|
+
readonly required: readonly ["kind", "contextIds"];
|
|
909
|
+
readonly properties: {
|
|
910
|
+
readonly kind: {
|
|
911
|
+
readonly const: "only";
|
|
912
|
+
};
|
|
913
|
+
readonly contextIds: {
|
|
914
|
+
readonly type: "array";
|
|
915
|
+
readonly minItems: 1;
|
|
916
|
+
readonly maxItems: 256;
|
|
917
|
+
readonly uniqueItems: true;
|
|
918
|
+
readonly items: {
|
|
919
|
+
readonly type: "string";
|
|
920
|
+
readonly minLength: 1;
|
|
921
|
+
};
|
|
922
|
+
};
|
|
923
|
+
};
|
|
924
|
+
}];
|
|
925
|
+
};
|
|
778
926
|
readonly ProfileEntry: {
|
|
779
927
|
readonly title: "ProfileEntry";
|
|
780
928
|
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.";
|
|
@@ -867,7 +1015,7 @@ export declare const SPEC: {
|
|
|
867
1015
|
};
|
|
868
1016
|
readonly Provenance: {
|
|
869
1017
|
readonly title: "Provenance";
|
|
870
|
-
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.";
|
|
1018
|
+
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.";
|
|
871
1019
|
readonly type: "object";
|
|
872
1020
|
readonly required: readonly ["kind"];
|
|
873
1021
|
readonly oneOf: readonly [{
|
|
@@ -924,6 +1072,26 @@ export declare const SPEC: {
|
|
|
924
1072
|
readonly description: "When true (the default and the only useful setting), a distinct value is minted for each verifier.";
|
|
925
1073
|
};
|
|
926
1074
|
};
|
|
1075
|
+
}, {
|
|
1076
|
+
readonly additionalProperties: false;
|
|
1077
|
+
readonly required: readonly ["kind", "source", "derivedAt"];
|
|
1078
|
+
readonly properties: {
|
|
1079
|
+
readonly kind: {
|
|
1080
|
+
readonly const: "derived";
|
|
1081
|
+
};
|
|
1082
|
+
readonly source: {
|
|
1083
|
+
readonly type: "string";
|
|
1084
|
+
readonly minLength: 1;
|
|
1085
|
+
readonly maxLength: 64;
|
|
1086
|
+
readonly pattern: "^[a-z][A-Za-z0-9.-]*$";
|
|
1087
|
+
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.";
|
|
1088
|
+
};
|
|
1089
|
+
readonly derivedAt: {
|
|
1090
|
+
readonly type: "string";
|
|
1091
|
+
readonly format: "date-time";
|
|
1092
|
+
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.";
|
|
1093
|
+
};
|
|
1094
|
+
};
|
|
927
1095
|
}];
|
|
928
1096
|
};
|
|
929
1097
|
readonly ProofRung: {
|
|
@@ -1028,6 +1196,9 @@ export declare const RESPONSE_SPEC: {
|
|
|
1028
1196
|
readonly $ref: "#/$defs/ProfileEntry";
|
|
1029
1197
|
};
|
|
1030
1198
|
};
|
|
1199
|
+
readonly reach: {
|
|
1200
|
+
readonly $ref: "#/$defs/FaceReach";
|
|
1201
|
+
};
|
|
1031
1202
|
readonly status: {
|
|
1032
1203
|
readonly type: "string";
|
|
1033
1204
|
readonly enum: readonly ["active", "retired"];
|
|
@@ -1067,6 +1238,39 @@ export declare const RESPONSE_SPEC: {
|
|
|
1067
1238
|
readonly type: "integer";
|
|
1068
1239
|
readonly minimum: 1;
|
|
1069
1240
|
};
|
|
1241
|
+
readonly FaceReach: {
|
|
1242
|
+
readonly title: "FaceReach";
|
|
1243
|
+
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.";
|
|
1244
|
+
readonly oneOf: readonly [{
|
|
1245
|
+
readonly type: "object";
|
|
1246
|
+
readonly additionalProperties: false;
|
|
1247
|
+
readonly required: readonly ["kind"];
|
|
1248
|
+
readonly properties: {
|
|
1249
|
+
readonly kind: {
|
|
1250
|
+
readonly const: "anywhere";
|
|
1251
|
+
};
|
|
1252
|
+
};
|
|
1253
|
+
}, {
|
|
1254
|
+
readonly type: "object";
|
|
1255
|
+
readonly additionalProperties: false;
|
|
1256
|
+
readonly required: readonly ["kind", "contextIds"];
|
|
1257
|
+
readonly properties: {
|
|
1258
|
+
readonly kind: {
|
|
1259
|
+
readonly const: "only";
|
|
1260
|
+
};
|
|
1261
|
+
readonly contextIds: {
|
|
1262
|
+
readonly type: "array";
|
|
1263
|
+
readonly minItems: 1;
|
|
1264
|
+
readonly maxItems: 256;
|
|
1265
|
+
readonly uniqueItems: true;
|
|
1266
|
+
readonly items: {
|
|
1267
|
+
readonly type: "string";
|
|
1268
|
+
readonly minLength: 1;
|
|
1269
|
+
};
|
|
1270
|
+
};
|
|
1271
|
+
};
|
|
1272
|
+
}];
|
|
1273
|
+
};
|
|
1070
1274
|
readonly ProfileEntry: {
|
|
1071
1275
|
readonly title: "ProfileEntry";
|
|
1072
1276
|
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.";
|
|
@@ -1159,7 +1363,7 @@ export declare const RESPONSE_SPEC: {
|
|
|
1159
1363
|
};
|
|
1160
1364
|
readonly Provenance: {
|
|
1161
1365
|
readonly title: "Provenance";
|
|
1162
|
-
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.";
|
|
1366
|
+
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.";
|
|
1163
1367
|
readonly type: "object";
|
|
1164
1368
|
readonly required: readonly ["kind"];
|
|
1165
1369
|
readonly oneOf: readonly [{
|
|
@@ -1216,6 +1420,26 @@ export declare const RESPONSE_SPEC: {
|
|
|
1216
1420
|
readonly description: "When true (the default and the only useful setting), a distinct value is minted for each verifier.";
|
|
1217
1421
|
};
|
|
1218
1422
|
};
|
|
1423
|
+
}, {
|
|
1424
|
+
readonly additionalProperties: false;
|
|
1425
|
+
readonly required: readonly ["kind", "source", "derivedAt"];
|
|
1426
|
+
readonly properties: {
|
|
1427
|
+
readonly kind: {
|
|
1428
|
+
readonly const: "derived";
|
|
1429
|
+
};
|
|
1430
|
+
readonly source: {
|
|
1431
|
+
readonly type: "string";
|
|
1432
|
+
readonly minLength: 1;
|
|
1433
|
+
readonly maxLength: 64;
|
|
1434
|
+
readonly pattern: "^[a-z][A-Za-z0-9.-]*$";
|
|
1435
|
+
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.";
|
|
1436
|
+
};
|
|
1437
|
+
readonly derivedAt: {
|
|
1438
|
+
readonly type: "string";
|
|
1439
|
+
readonly format: "date-time";
|
|
1440
|
+
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.";
|
|
1441
|
+
};
|
|
1442
|
+
};
|
|
1219
1443
|
}];
|
|
1220
1444
|
};
|
|
1221
1445
|
readonly ProofRung: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../../../src/persona/profile/list/1.0/payload.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,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/list/1.0/payload.ts"],"names":[],"mappings":"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"}
|
|
@@ -110,6 +110,9 @@ export const PAYLOAD_SCHEMA = {
|
|
|
110
110
|
"$ref": "#/$defs/ProfileEntry"
|
|
111
111
|
}
|
|
112
112
|
},
|
|
113
|
+
"reach": {
|
|
114
|
+
"$ref": "#/$defs/FaceReach"
|
|
115
|
+
},
|
|
113
116
|
"status": {
|
|
114
117
|
"type": "string",
|
|
115
118
|
"enum": [
|
|
@@ -152,6 +155,47 @@ export const PAYLOAD_SCHEMA = {
|
|
|
152
155
|
"type": "integer",
|
|
153
156
|
"minimum": 1
|
|
154
157
|
},
|
|
158
|
+
"FaceReach": {
|
|
159
|
+
"title": "FaceReach",
|
|
160
|
+
"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.",
|
|
161
|
+
"oneOf": [
|
|
162
|
+
{
|
|
163
|
+
"type": "object",
|
|
164
|
+
"additionalProperties": false,
|
|
165
|
+
"required": [
|
|
166
|
+
"kind"
|
|
167
|
+
],
|
|
168
|
+
"properties": {
|
|
169
|
+
"kind": {
|
|
170
|
+
"const": "anywhere"
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"type": "object",
|
|
176
|
+
"additionalProperties": false,
|
|
177
|
+
"required": [
|
|
178
|
+
"kind",
|
|
179
|
+
"contextIds"
|
|
180
|
+
],
|
|
181
|
+
"properties": {
|
|
182
|
+
"kind": {
|
|
183
|
+
"const": "only"
|
|
184
|
+
},
|
|
185
|
+
"contextIds": {
|
|
186
|
+
"type": "array",
|
|
187
|
+
"minItems": 1,
|
|
188
|
+
"maxItems": 256,
|
|
189
|
+
"uniqueItems": true,
|
|
190
|
+
"items": {
|
|
191
|
+
"type": "string",
|
|
192
|
+
"minLength": 1
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
]
|
|
198
|
+
},
|
|
155
199
|
"ProfileEntry": {
|
|
156
200
|
"title": "ProfileEntry",
|
|
157
201
|
"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.",
|
|
@@ -266,7 +310,7 @@ export const PAYLOAD_SCHEMA = {
|
|
|
266
310
|
},
|
|
267
311
|
"Provenance": {
|
|
268
312
|
"title": "Provenance",
|
|
269
|
-
"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.",
|
|
313
|
+
"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.",
|
|
270
314
|
"type": "object",
|
|
271
315
|
"required": [
|
|
272
316
|
"kind"
|
|
@@ -337,6 +381,31 @@ export const PAYLOAD_SCHEMA = {
|
|
|
337
381
|
"description": "When true (the default and the only useful setting), a distinct value is minted for each verifier."
|
|
338
382
|
}
|
|
339
383
|
}
|
|
384
|
+
},
|
|
385
|
+
{
|
|
386
|
+
"additionalProperties": false,
|
|
387
|
+
"required": [
|
|
388
|
+
"kind",
|
|
389
|
+
"source",
|
|
390
|
+
"derivedAt"
|
|
391
|
+
],
|
|
392
|
+
"properties": {
|
|
393
|
+
"kind": {
|
|
394
|
+
"const": "derived"
|
|
395
|
+
},
|
|
396
|
+
"source": {
|
|
397
|
+
"type": "string",
|
|
398
|
+
"minLength": 1,
|
|
399
|
+
"maxLength": 64,
|
|
400
|
+
"pattern": "^[a-z][A-Za-z0-9.-]*$",
|
|
401
|
+
"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."
|
|
402
|
+
},
|
|
403
|
+
"derivedAt": {
|
|
404
|
+
"type": "string",
|
|
405
|
+
"format": "date-time",
|
|
406
|
+
"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."
|
|
407
|
+
}
|
|
408
|
+
}
|
|
340
409
|
}
|
|
341
410
|
]
|
|
342
411
|
},
|
|
@@ -450,6 +519,9 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
450
519
|
"$ref": "#/$defs/ProfileEntry"
|
|
451
520
|
}
|
|
452
521
|
},
|
|
522
|
+
"reach": {
|
|
523
|
+
"$ref": "#/$defs/FaceReach"
|
|
524
|
+
},
|
|
453
525
|
"status": {
|
|
454
526
|
"type": "string",
|
|
455
527
|
"enum": [
|
|
@@ -492,6 +564,47 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
492
564
|
"type": "integer",
|
|
493
565
|
"minimum": 1
|
|
494
566
|
},
|
|
567
|
+
"FaceReach": {
|
|
568
|
+
"title": "FaceReach",
|
|
569
|
+
"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.",
|
|
570
|
+
"oneOf": [
|
|
571
|
+
{
|
|
572
|
+
"type": "object",
|
|
573
|
+
"additionalProperties": false,
|
|
574
|
+
"required": [
|
|
575
|
+
"kind"
|
|
576
|
+
],
|
|
577
|
+
"properties": {
|
|
578
|
+
"kind": {
|
|
579
|
+
"const": "anywhere"
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
},
|
|
583
|
+
{
|
|
584
|
+
"type": "object",
|
|
585
|
+
"additionalProperties": false,
|
|
586
|
+
"required": [
|
|
587
|
+
"kind",
|
|
588
|
+
"contextIds"
|
|
589
|
+
],
|
|
590
|
+
"properties": {
|
|
591
|
+
"kind": {
|
|
592
|
+
"const": "only"
|
|
593
|
+
},
|
|
594
|
+
"contextIds": {
|
|
595
|
+
"type": "array",
|
|
596
|
+
"minItems": 1,
|
|
597
|
+
"maxItems": 256,
|
|
598
|
+
"uniqueItems": true,
|
|
599
|
+
"items": {
|
|
600
|
+
"type": "string",
|
|
601
|
+
"minLength": 1
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
]
|
|
607
|
+
},
|
|
495
608
|
"ProfileEntry": {
|
|
496
609
|
"title": "ProfileEntry",
|
|
497
610
|
"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.",
|
|
@@ -606,7 +719,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
606
719
|
},
|
|
607
720
|
"Provenance": {
|
|
608
721
|
"title": "Provenance",
|
|
609
|
-
"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.",
|
|
722
|
+
"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.",
|
|
610
723
|
"type": "object",
|
|
611
724
|
"required": [
|
|
612
725
|
"kind"
|
|
@@ -677,6 +790,31 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
677
790
|
"description": "When true (the default and the only useful setting), a distinct value is minted for each verifier."
|
|
678
791
|
}
|
|
679
792
|
}
|
|
793
|
+
},
|
|
794
|
+
{
|
|
795
|
+
"additionalProperties": false,
|
|
796
|
+
"required": [
|
|
797
|
+
"kind",
|
|
798
|
+
"source",
|
|
799
|
+
"derivedAt"
|
|
800
|
+
],
|
|
801
|
+
"properties": {
|
|
802
|
+
"kind": {
|
|
803
|
+
"const": "derived"
|
|
804
|
+
},
|
|
805
|
+
"source": {
|
|
806
|
+
"type": "string",
|
|
807
|
+
"minLength": 1,
|
|
808
|
+
"maxLength": 64,
|
|
809
|
+
"pattern": "^[a-z][A-Za-z0-9.-]*$",
|
|
810
|
+
"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."
|
|
811
|
+
},
|
|
812
|
+
"derivedAt": {
|
|
813
|
+
"type": "string",
|
|
814
|
+
"format": "date-time",
|
|
815
|
+
"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."
|
|
816
|
+
}
|
|
817
|
+
}
|
|
680
818
|
}
|
|
681
819
|
]
|
|
682
820
|
},
|