@openvtc/trust-tasks 0.19.13 → 0.19.15
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 +58 -0
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/persona/_shared/0.1/persona-record.d.ts +1 -1
- package/dist/persona/_shared/0.1/persona-record.d.ts.map +1 -1
- package/dist/persona/attribute/list/1.0/payload.d.ts +140 -24
- package/dist/persona/attribute/list/1.0/payload.d.ts.map +1 -1
- package/dist/persona/attribute/list/1.0/payload.js +76 -12
- package/dist/persona/attribute/list/1.0/payload.js.map +1 -1
- package/dist/persona/attribute/purge-version/1.0/payload.d.ts +413 -0
- package/dist/persona/attribute/purge-version/1.0/payload.d.ts.map +1 -0
- package/dist/persona/attribute/purge-version/1.0/payload.js +223 -0
- package/dist/persona/attribute/purge-version/1.0/payload.js.map +1 -0
- package/dist/persona/local/profile/put/1.0/payload.d.ts +33 -2
- package/dist/persona/local/profile/put/1.0/payload.d.ts.map +1 -1
- package/dist/persona/local/profile/put/1.0/payload.js +15 -0
- package/dist/persona/local/profile/put/1.0/payload.js.map +1 -1
- package/dist/persona/profile/get/1.0/payload.d.ts +94 -6
- package/dist/persona/profile/get/1.0/payload.d.ts.map +1 -1
- package/dist/persona/profile/get/1.0/payload.js +46 -2
- package/dist/persona/profile/get/1.0/payload.js.map +1 -1
- package/dist/persona/profile/list/1.0/payload.d.ts +78 -6
- package/dist/persona/profile/list/1.0/payload.d.ts.map +1 -1
- package/dist/persona/profile/list/1.0/payload.js +38 -2
- package/dist/persona/profile/list/1.0/payload.js.map +1 -1
- package/dist/persona/profile/put/1.0/payload.d.ts +78 -6
- package/dist/persona/profile/put/1.0/payload.d.ts.map +1 -1
- package/dist/persona/profile/put/1.0/payload.js +38 -2
- package/dist/persona/profile/put/1.0/payload.js.map +1 -1
- package/dist/vtc/join-requests/list/0.1/payload.d.ts +88 -0
- package/dist/vtc/join-requests/list/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/join-requests/list/0.1/payload.js +50 -0
- package/dist/vtc/join-requests/list/0.1/payload.js.map +1 -1
- package/dist/vtc/join-requests/manifest/0.2/payload.d.ts +135 -0
- package/dist/vtc/join-requests/manifest/0.2/payload.d.ts.map +1 -1
- package/dist/vtc/join-requests/manifest/0.2/payload.js +62 -0
- package/dist/vtc/join-requests/manifest/0.2/payload.js.map +1 -1
- package/dist/vtc/join-requests/show/0.1/payload.d.ts +88 -0
- package/dist/vtc/join-requests/show/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/join-requests/show/0.1/payload.js +50 -0
- package/dist/vtc/join-requests/show/0.1/payload.js.map +1 -1
- package/dist/vtc/join-requests/submit/0.2/payload.d.ts +61 -0
- package/dist/vtc/join-requests/submit/0.2/payload.d.ts.map +1 -1
- package/dist/vtc/join-requests/submit/0.2/payload.js +25 -0
- package/dist/vtc/join-requests/submit/0.2/payload.js.map +1 -1
- package/package.json +1 -1
- package/src/_shared/components.ts +58 -0
- package/src/index.ts +1 -0
- package/src/persona/_shared/0.1/persona-record.ts +1 -1
- package/src/persona/attribute/list/1.0/payload.ts +76 -12
- package/src/persona/attribute/purge-version/1.0/payload.ts +277 -0
- package/src/persona/local/profile/put/1.0/payload.ts +18 -2
- package/src/persona/profile/get/1.0/payload.ts +48 -4
- package/src/persona/profile/list/1.0/payload.ts +40 -4
- package/src/persona/profile/put/1.0/payload.ts +40 -4
- package/src/vtc/join-requests/list/0.1/payload.ts +50 -0
- package/src/vtc/join-requests/manifest/0.2/payload.ts +81 -0
- package/src/vtc/join-requests/show/0.1/payload.ts +50 -0
- package/src/vtc/join-requests/submit/0.2/payload.ts +42 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Source: specs/persona/profile/put/1.0/payload.schema.json
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { ClaimType, ExpectedVersion_PersonaV0_1 as ExpectedVersion, Ext, ProfileEntry, ProofRung, Provenance, Ulid, ValueType, Version_PersonaV0_1 as Version } from "../../../../_shared/components.js";
|
|
6
|
+
import type { ClaimType, ExpectedVersion_PersonaV0_1 as ExpectedVersion, Ext, ProfileEntry, ProofRung, Provenance, Slot, Ulid, ValueType, Version_PersonaV0_1 as Version } from "../../../../_shared/components.js";
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -56,7 +56,7 @@ export interface PersonaProfilePutResponsePayload {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
/** Shared definitions this specification references, re-exported under the names it used to declare them with. */
|
|
59
|
-
export type { ClaimType, ExpectedVersion, Ext, ProfileEntry, ProofRung, Provenance, Ulid, ValueType, Version };
|
|
59
|
+
export type { ClaimType, ExpectedVersion, Ext, ProfileEntry, ProofRung, Provenance, Slot, Ulid, ValueType, Version };
|
|
60
60
|
|
|
61
61
|
/** Trust Task type URI. */
|
|
62
62
|
export const TYPE_URI = "https://trusttasks.org/spec/persona/profile/put/1.0" as const;
|
|
@@ -214,7 +214,7 @@ export const PAYLOAD_SCHEMA = {
|
|
|
214
214
|
},
|
|
215
215
|
"ProfileEntry": {
|
|
216
216
|
"title": "ProfileEntry",
|
|
217
|
-
"description": "One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.\n\n`{ref}` — use the pool attribute, live. Editing the pool updates every profile that references it, which is the point.\n\n`{ref, pinVersion}` — use the value as it was at that version. For a profile that must keep presenting the value a counterparty already verified.\n\n`{ref, override}` — the same fact, a different value here. (\"In the gaming profile my display name is different.\")\n\n`{inline}` — a value that never enters the pool, and so never leaks into another profile.\n\nOmission is exclusion; there is no removal marker.",
|
|
217
|
+
"description": "One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.\n\n`{ref}` — use the pool attribute, live. Editing the pool updates every profile that references it, which is the point.\n\n`{ref, pinVersion}` — use the value as it was at that version. For a profile that must keep presenting the value a counterparty already verified.\n\n`{ref, override}` — the same fact, a different value here. (\"In the gaming profile my display name is different.\")\n\n`{inline}` — a value that never enters the pool, and so never leaks into another profile.\n\nOmission is exclusion; there is no removal marker.\n\nAny form MAY carry a `slot` naming the role the entry plays in the profile — see `Slot`. A maintainer MUST refuse a profile in which two entries carry the same slot: a slot exists to answer one question with one entry.",
|
|
218
218
|
"type": "object",
|
|
219
219
|
"oneOf": [
|
|
220
220
|
{
|
|
@@ -225,6 +225,9 @@ export const PAYLOAD_SCHEMA = {
|
|
|
225
225
|
"properties": {
|
|
226
226
|
"ref": {
|
|
227
227
|
"$ref": "#/$defs/Ulid"
|
|
228
|
+
},
|
|
229
|
+
"slot": {
|
|
230
|
+
"$ref": "#/$defs/Slot"
|
|
228
231
|
}
|
|
229
232
|
}
|
|
230
233
|
},
|
|
@@ -240,6 +243,9 @@ export const PAYLOAD_SCHEMA = {
|
|
|
240
243
|
},
|
|
241
244
|
"pinVersion": {
|
|
242
245
|
"$ref": "#/$defs/Version"
|
|
246
|
+
},
|
|
247
|
+
"slot": {
|
|
248
|
+
"$ref": "#/$defs/Slot"
|
|
243
249
|
}
|
|
244
250
|
}
|
|
245
251
|
},
|
|
@@ -267,6 +273,9 @@ export const PAYLOAD_SCHEMA = {
|
|
|
267
273
|
}
|
|
268
274
|
},
|
|
269
275
|
"description": "Replaces the pool attribute's value for this profile only. `type`, `valueType` and `provenance` are inherited from the referenced attribute and MUST NOT be overridden — an override that changed provenance would let a self-asserted value present as attested."
|
|
276
|
+
},
|
|
277
|
+
"slot": {
|
|
278
|
+
"$ref": "#/$defs/Slot"
|
|
270
279
|
}
|
|
271
280
|
}
|
|
272
281
|
},
|
|
@@ -301,11 +310,20 @@ export const PAYLOAD_SCHEMA = {
|
|
|
301
310
|
"$ref": "#/$defs/Provenance"
|
|
302
311
|
}
|
|
303
312
|
}
|
|
313
|
+
},
|
|
314
|
+
"slot": {
|
|
315
|
+
"$ref": "#/$defs/Slot"
|
|
304
316
|
}
|
|
305
317
|
}
|
|
306
318
|
}
|
|
307
319
|
]
|
|
308
320
|
},
|
|
321
|
+
"Slot": {
|
|
322
|
+
"title": "Slot",
|
|
323
|
+
"type": "string",
|
|
324
|
+
"pattern": "^[a-z][A-Za-z0-9]{0,31}$",
|
|
325
|
+
"description": "A role a profile entry plays within its profile, so a consumer can find it without guessing from its claim type. A profile MAY hold several entries of one type — a legal name and a display name, two phone numbers — and only a slot says which answers a given question. Unique within a profile.\n\nWell-known slots:\n\n- `displayName` — what this face calls itself. The entry a consumer renders as the face's name to anyone it is shown to. Distinct from the profile's own `name`, which is the holder's private label and never disclosed.\n- `primaryEmail`, `primaryPhone`, `primaryAddress` — the entry to use where a counterparty asks for one of a kind and the profile holds several.\n- `avatar` — the image this face presents.\n\nOther values are the holder's or the producer's own and carry no meaning a maintainer interprets."
|
|
326
|
+
},
|
|
309
327
|
"Provenance": {
|
|
310
328
|
"title": "Provenance",
|
|
311
329
|
"description": "Where a value comes from, and the member that makes this family worth building on a trust stack rather than in an address book. It survives to the verifier, so a recipient can tell — per field — what the holder typed from what an issuer attested.\n\n`selfAsserted` — the holder supplied it.\n\n`credentialBacked` — the value is derived from a credential in the vault at `claimPath`. The stored value is a CACHE FOR DISPLAY; the credential is the truth. A maintainer MUST re-derive it on read and MUST fail closed (never presenting a stale value) when the credential has been revoked, has expired, or has been archived or deleted.\n\n`generated` — the value is minted per verifier at disclosure time and recorded against that verifier, so every relying party receives a different one that routes back to the holder. This is the shape of the most widely adopted consumer privacy feature in this space; a maintainer need not operate a relay to conform, but the shape must exist, because retrofitting per-verifier values into a pool-of-values model is a migration rather than an addition.",
|
|
@@ -509,7 +527,7 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
509
527
|
},
|
|
510
528
|
"ProfileEntry": {
|
|
511
529
|
"title": "ProfileEntry",
|
|
512
|
-
"description": "One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.\n\n`{ref}` — use the pool attribute, live. Editing the pool updates every profile that references it, which is the point.\n\n`{ref, pinVersion}` — use the value as it was at that version. For a profile that must keep presenting the value a counterparty already verified.\n\n`{ref, override}` — the same fact, a different value here. (\"In the gaming profile my display name is different.\")\n\n`{inline}` — a value that never enters the pool, and so never leaks into another profile.\n\nOmission is exclusion; there is no removal marker.",
|
|
530
|
+
"description": "One line of a profile, in exactly one of four forms. Together they are the whole of a profile's flexibility, and each exists for a case the others handle badly.\n\n`{ref}` — use the pool attribute, live. Editing the pool updates every profile that references it, which is the point.\n\n`{ref, pinVersion}` — use the value as it was at that version. For a profile that must keep presenting the value a counterparty already verified.\n\n`{ref, override}` — the same fact, a different value here. (\"In the gaming profile my display name is different.\")\n\n`{inline}` — a value that never enters the pool, and so never leaks into another profile.\n\nOmission is exclusion; there is no removal marker.\n\nAny form MAY carry a `slot` naming the role the entry plays in the profile — see `Slot`. A maintainer MUST refuse a profile in which two entries carry the same slot: a slot exists to answer one question with one entry.",
|
|
513
531
|
"type": "object",
|
|
514
532
|
"oneOf": [
|
|
515
533
|
{
|
|
@@ -520,6 +538,9 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
520
538
|
"properties": {
|
|
521
539
|
"ref": {
|
|
522
540
|
"$ref": "#/$defs/Ulid"
|
|
541
|
+
},
|
|
542
|
+
"slot": {
|
|
543
|
+
"$ref": "#/$defs/Slot"
|
|
523
544
|
}
|
|
524
545
|
}
|
|
525
546
|
},
|
|
@@ -535,6 +556,9 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
535
556
|
},
|
|
536
557
|
"pinVersion": {
|
|
537
558
|
"$ref": "#/$defs/Version"
|
|
559
|
+
},
|
|
560
|
+
"slot": {
|
|
561
|
+
"$ref": "#/$defs/Slot"
|
|
538
562
|
}
|
|
539
563
|
}
|
|
540
564
|
},
|
|
@@ -562,6 +586,9 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
562
586
|
}
|
|
563
587
|
},
|
|
564
588
|
"description": "Replaces the pool attribute's value for this profile only. `type`, `valueType` and `provenance` are inherited from the referenced attribute and MUST NOT be overridden — an override that changed provenance would let a self-asserted value present as attested."
|
|
589
|
+
},
|
|
590
|
+
"slot": {
|
|
591
|
+
"$ref": "#/$defs/Slot"
|
|
565
592
|
}
|
|
566
593
|
}
|
|
567
594
|
},
|
|
@@ -596,11 +623,20 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
596
623
|
"$ref": "#/$defs/Provenance"
|
|
597
624
|
}
|
|
598
625
|
}
|
|
626
|
+
},
|
|
627
|
+
"slot": {
|
|
628
|
+
"$ref": "#/$defs/Slot"
|
|
599
629
|
}
|
|
600
630
|
}
|
|
601
631
|
}
|
|
602
632
|
]
|
|
603
633
|
},
|
|
634
|
+
"Slot": {
|
|
635
|
+
"title": "Slot",
|
|
636
|
+
"type": "string",
|
|
637
|
+
"pattern": "^[a-z][A-Za-z0-9]{0,31}$",
|
|
638
|
+
"description": "A role a profile entry plays within its profile, so a consumer can find it without guessing from its claim type. A profile MAY hold several entries of one type — a legal name and a display name, two phone numbers — and only a slot says which answers a given question. Unique within a profile.\n\nWell-known slots:\n\n- `displayName` — what this face calls itself. The entry a consumer renders as the face's name to anyone it is shown to. Distinct from the profile's own `name`, which is the holder's private label and never disclosed.\n- `primaryEmail`, `primaryPhone`, `primaryAddress` — the entry to use where a counterparty asks for one of a kind and the profile holds several.\n- `avatar` — the image this face presents.\n\nOther values are the holder's or the producer's own and carry no meaning a maintainer interprets."
|
|
639
|
+
},
|
|
604
640
|
"Provenance": {
|
|
605
641
|
"title": "Provenance",
|
|
606
642
|
"description": "Where a value comes from, and the member that makes this family worth building on a trust stack rather than in an address book. It survives to the verifier, so a recipient can tell — per field — what the holder typed from what an issuer attested.\n\n`selfAsserted` — the holder supplied it.\n\n`credentialBacked` — the value is derived from a credential in the vault at `claimPath`. The stored value is a CACHE FOR DISPLAY; the credential is the truth. A maintainer MUST re-derive it on read and MUST fail closed (never presenting a stale value) when the credential has been revoked, has expired, or has been archived or deleted.\n\n`generated` — the value is minted per verifier at disclosure time and recorded against that verifier, so every relying party receives a different one that routes back to the holder. This is the shape of the most widely adopted consumer privacy feature in this space; a maintainer need not operate a relay to conform, but the shape must exist, because retrofitting per-verifier values into a pool-of-values model is a migration rather than an addition.",
|
|
@@ -218,6 +218,31 @@ export const PAYLOAD_SCHEMA = {
|
|
|
218
218
|
"extensions": {
|
|
219
219
|
"type": "object",
|
|
220
220
|
"description": "Opaque community-defined extension bag."
|
|
221
|
+
},
|
|
222
|
+
"attributes": {
|
|
223
|
+
"type": "array",
|
|
224
|
+
"maxItems": 32,
|
|
225
|
+
"description": "What the applicant told the community about themselves in answer to the manifest's `requestedAttributes` — self-asserted, and to be shown as such to whoever reviews the request. Absent when none were asked for or given.",
|
|
226
|
+
"items": {
|
|
227
|
+
"type": "object",
|
|
228
|
+
"additionalProperties": false,
|
|
229
|
+
"required": [
|
|
230
|
+
"type",
|
|
231
|
+
"value"
|
|
232
|
+
],
|
|
233
|
+
"properties": {
|
|
234
|
+
"type": {
|
|
235
|
+
"type": "string",
|
|
236
|
+
"minLength": 1,
|
|
237
|
+
"maxLength": 128,
|
|
238
|
+
"pattern": "^(x:)?[a-z][A-Za-z0-9]*(\\.[a-z][A-Za-z0-9]*)*$",
|
|
239
|
+
"description": "A claim-type token from the persona claim-type registry (persona/_shared/0.1/CLAIM-TYPES.md) — `name.display`, `address.country` — or an `x:` extension token."
|
|
240
|
+
},
|
|
241
|
+
"value": {
|
|
242
|
+
"description": "The value the applicant gives. Self-asserted: the applicant's own statement, bound to them by the document proof, and attested by nobody."
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
221
246
|
}
|
|
222
247
|
}
|
|
223
248
|
}
|
|
@@ -362,6 +387,31 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
362
387
|
"extensions": {
|
|
363
388
|
"type": "object",
|
|
364
389
|
"description": "Opaque community-defined extension bag."
|
|
390
|
+
},
|
|
391
|
+
"attributes": {
|
|
392
|
+
"type": "array",
|
|
393
|
+
"maxItems": 32,
|
|
394
|
+
"description": "What the applicant told the community about themselves in answer to the manifest's `requestedAttributes` — self-asserted, and to be shown as such to whoever reviews the request. Absent when none were asked for or given.",
|
|
395
|
+
"items": {
|
|
396
|
+
"type": "object",
|
|
397
|
+
"additionalProperties": false,
|
|
398
|
+
"required": [
|
|
399
|
+
"type",
|
|
400
|
+
"value"
|
|
401
|
+
],
|
|
402
|
+
"properties": {
|
|
403
|
+
"type": {
|
|
404
|
+
"type": "string",
|
|
405
|
+
"minLength": 1,
|
|
406
|
+
"maxLength": 128,
|
|
407
|
+
"pattern": "^(x:)?[a-z][A-Za-z0-9]*(\\.[a-z][A-Za-z0-9]*)*$",
|
|
408
|
+
"description": "A claim-type token from the persona claim-type registry (persona/_shared/0.1/CLAIM-TYPES.md) — `name.display`, `address.country` — or an `x:` extension token."
|
|
409
|
+
},
|
|
410
|
+
"value": {
|
|
411
|
+
"description": "The value the applicant gives. Self-asserted: the applicant's own statement, bound to them by the document proof, and attested by nobody."
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
365
415
|
}
|
|
366
416
|
}
|
|
367
417
|
}
|
|
@@ -20,6 +20,25 @@ export interface VTCJoinRequestsManifestPayload {
|
|
|
20
20
|
export interface VTCJoinRequestsManifestResponsePayload {
|
|
21
21
|
communityDid: string;
|
|
22
22
|
criteria: Criterion[];
|
|
23
|
+
/**
|
|
24
|
+
* What the community asks an applicant to tell it about themselves, as claim types — never values. Answered in persona terms: the applicant's agent discloses those attributes from the face the applicant chooses, and they arrive on vtc/join-requests/submit as `attributes`. SELF-ASSERTED: a community MUST NOT describe an answer as verified, and MUST NOT make a decision that assumes it is. Outside every criterion, so no `requirementsDigest` covers it. Absent when the community asks nothing.
|
|
25
|
+
*
|
|
26
|
+
* @maxItems 32
|
|
27
|
+
*/
|
|
28
|
+
requestedAttributes?: {
|
|
29
|
+
/**
|
|
30
|
+
* A claim-type token from the persona claim-type registry (persona/_shared/0.1/CLAIM-TYPES.md) — `name.display`, `address.country` — or an `x:` extension token.
|
|
31
|
+
*/
|
|
32
|
+
type: string;
|
|
33
|
+
/**
|
|
34
|
+
* False for an attribute the applicant may decline. A submission missing a required one is refused with vtc/join-requests/submit:attributesMissing.
|
|
35
|
+
*/
|
|
36
|
+
required?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Why the community asks, in words shown to the applicant before they disclose.
|
|
39
|
+
*/
|
|
40
|
+
purpose?: string;
|
|
41
|
+
}[];
|
|
23
42
|
branding?: CommunityBranding;
|
|
24
43
|
ext?: Ext;
|
|
25
44
|
}
|
|
@@ -408,6 +427,37 @@ export const PAYLOAD_SCHEMA = {
|
|
|
408
427
|
"$ref": "#/$defs/Criterion"
|
|
409
428
|
}
|
|
410
429
|
},
|
|
430
|
+
"requestedAttributes": {
|
|
431
|
+
"type": "array",
|
|
432
|
+
"maxItems": 32,
|
|
433
|
+
"description": "What the community asks an applicant to tell it about themselves, as claim types — never values. Answered in persona terms: the applicant's agent discloses those attributes from the face the applicant chooses, and they arrive on vtc/join-requests/submit as `attributes`. SELF-ASSERTED: a community MUST NOT describe an answer as verified, and MUST NOT make a decision that assumes it is. Outside every criterion, so no `requirementsDigest` covers it. Absent when the community asks nothing.",
|
|
434
|
+
"items": {
|
|
435
|
+
"type": "object",
|
|
436
|
+
"additionalProperties": false,
|
|
437
|
+
"required": [
|
|
438
|
+
"type"
|
|
439
|
+
],
|
|
440
|
+
"properties": {
|
|
441
|
+
"type": {
|
|
442
|
+
"type": "string",
|
|
443
|
+
"minLength": 1,
|
|
444
|
+
"maxLength": 128,
|
|
445
|
+
"pattern": "^(x:)?[a-z][A-Za-z0-9]*(\\.[a-z][A-Za-z0-9]*)*$",
|
|
446
|
+
"description": "A claim-type token from the persona claim-type registry (persona/_shared/0.1/CLAIM-TYPES.md) — `name.display`, `address.country` — or an `x:` extension token."
|
|
447
|
+
},
|
|
448
|
+
"required": {
|
|
449
|
+
"type": "boolean",
|
|
450
|
+
"default": true,
|
|
451
|
+
"description": "False for an attribute the applicant may decline. A submission missing a required one is refused with vtc/join-requests/submit:attributesMissing."
|
|
452
|
+
},
|
|
453
|
+
"purpose": {
|
|
454
|
+
"type": "string",
|
|
455
|
+
"maxLength": 256,
|
|
456
|
+
"description": "Why the community asks, in words shown to the applicant before they disclose."
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
},
|
|
411
461
|
"branding": {
|
|
412
462
|
"$ref": "#/$defs/CommunityBranding"
|
|
413
463
|
},
|
|
@@ -716,6 +766,37 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
716
766
|
"$ref": "#/$defs/Criterion"
|
|
717
767
|
}
|
|
718
768
|
},
|
|
769
|
+
"requestedAttributes": {
|
|
770
|
+
"type": "array",
|
|
771
|
+
"maxItems": 32,
|
|
772
|
+
"description": "What the community asks an applicant to tell it about themselves, as claim types — never values. Answered in persona terms: the applicant's agent discloses those attributes from the face the applicant chooses, and they arrive on vtc/join-requests/submit as `attributes`. SELF-ASSERTED: a community MUST NOT describe an answer as verified, and MUST NOT make a decision that assumes it is. Outside every criterion, so no `requirementsDigest` covers it. Absent when the community asks nothing.",
|
|
773
|
+
"items": {
|
|
774
|
+
"type": "object",
|
|
775
|
+
"additionalProperties": false,
|
|
776
|
+
"required": [
|
|
777
|
+
"type"
|
|
778
|
+
],
|
|
779
|
+
"properties": {
|
|
780
|
+
"type": {
|
|
781
|
+
"type": "string",
|
|
782
|
+
"minLength": 1,
|
|
783
|
+
"maxLength": 128,
|
|
784
|
+
"pattern": "^(x:)?[a-z][A-Za-z0-9]*(\\.[a-z][A-Za-z0-9]*)*$",
|
|
785
|
+
"description": "A claim-type token from the persona claim-type registry (persona/_shared/0.1/CLAIM-TYPES.md) — `name.display`, `address.country` — or an `x:` extension token."
|
|
786
|
+
},
|
|
787
|
+
"required": {
|
|
788
|
+
"type": "boolean",
|
|
789
|
+
"default": true,
|
|
790
|
+
"description": "False for an attribute the applicant may decline. A submission missing a required one is refused with vtc/join-requests/submit:attributesMissing."
|
|
791
|
+
},
|
|
792
|
+
"purpose": {
|
|
793
|
+
"type": "string",
|
|
794
|
+
"maxLength": 256,
|
|
795
|
+
"description": "Why the community asks, in words shown to the applicant before they disclose."
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
},
|
|
719
800
|
"branding": {
|
|
720
801
|
"$ref": "#/$defs/CommunityBranding"
|
|
721
802
|
},
|
|
@@ -180,6 +180,31 @@ export const PAYLOAD_SCHEMA = {
|
|
|
180
180
|
"extensions": {
|
|
181
181
|
"type": "object",
|
|
182
182
|
"description": "Opaque community-defined extension bag."
|
|
183
|
+
},
|
|
184
|
+
"attributes": {
|
|
185
|
+
"type": "array",
|
|
186
|
+
"maxItems": 32,
|
|
187
|
+
"description": "What the applicant told the community about themselves in answer to the manifest's `requestedAttributes` — self-asserted, and to be shown as such to whoever reviews the request. Absent when none were asked for or given.",
|
|
188
|
+
"items": {
|
|
189
|
+
"type": "object",
|
|
190
|
+
"additionalProperties": false,
|
|
191
|
+
"required": [
|
|
192
|
+
"type",
|
|
193
|
+
"value"
|
|
194
|
+
],
|
|
195
|
+
"properties": {
|
|
196
|
+
"type": {
|
|
197
|
+
"type": "string",
|
|
198
|
+
"minLength": 1,
|
|
199
|
+
"maxLength": 128,
|
|
200
|
+
"pattern": "^(x:)?[a-z][A-Za-z0-9]*(\\.[a-z][A-Za-z0-9]*)*$",
|
|
201
|
+
"description": "A claim-type token from the persona claim-type registry (persona/_shared/0.1/CLAIM-TYPES.md) — `name.display`, `address.country` — or an `x:` extension token."
|
|
202
|
+
},
|
|
203
|
+
"value": {
|
|
204
|
+
"description": "The value the applicant gives. Self-asserted: the applicant's own statement, bound to them by the document proof, and attested by nobody."
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
183
208
|
}
|
|
184
209
|
}
|
|
185
210
|
}
|
|
@@ -309,6 +334,31 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
|
309
334
|
"extensions": {
|
|
310
335
|
"type": "object",
|
|
311
336
|
"description": "Opaque community-defined extension bag."
|
|
337
|
+
},
|
|
338
|
+
"attributes": {
|
|
339
|
+
"type": "array",
|
|
340
|
+
"maxItems": 32,
|
|
341
|
+
"description": "What the applicant told the community about themselves in answer to the manifest's `requestedAttributes` — self-asserted, and to be shown as such to whoever reviews the request. Absent when none were asked for or given.",
|
|
342
|
+
"items": {
|
|
343
|
+
"type": "object",
|
|
344
|
+
"additionalProperties": false,
|
|
345
|
+
"required": [
|
|
346
|
+
"type",
|
|
347
|
+
"value"
|
|
348
|
+
],
|
|
349
|
+
"properties": {
|
|
350
|
+
"type": {
|
|
351
|
+
"type": "string",
|
|
352
|
+
"minLength": 1,
|
|
353
|
+
"maxLength": 128,
|
|
354
|
+
"pattern": "^(x:)?[a-z][A-Za-z0-9]*(\\.[a-z][A-Za-z0-9]*)*$",
|
|
355
|
+
"description": "A claim-type token from the persona claim-type registry (persona/_shared/0.1/CLAIM-TYPES.md) — `name.display`, `address.country` — or an `x:` extension token."
|
|
356
|
+
},
|
|
357
|
+
"value": {
|
|
358
|
+
"description": "The value the applicant gives. Self-asserted: the applicant's own statement, bound to them by the document proof, and attested by nobody."
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
312
362
|
}
|
|
313
363
|
}
|
|
314
364
|
}
|
|
@@ -19,6 +19,23 @@ export interface VTCJoinRequestsSubmitPayload {
|
|
|
19
19
|
* Opaque applicant-supplied extension bag.
|
|
20
20
|
*/
|
|
21
21
|
extensions?: {};
|
|
22
|
+
/**
|
|
23
|
+
* The applicant's answers to the manifest's `requestedAttributes`: one entry per attribute given. Self-asserted and bound to the applicant by the document proof. A maintainer MUST refuse the submission with `attributesMissing` when a required attribute is absent and with `attributesUnrequested` when an entry names a type the manifest does not request.
|
|
24
|
+
*
|
|
25
|
+
* @maxItems 32
|
|
26
|
+
*/
|
|
27
|
+
attributes?: {
|
|
28
|
+
/**
|
|
29
|
+
* A claim-type token from the persona claim-type registry (persona/_shared/0.1/CLAIM-TYPES.md) — `name.display`, `address.country` — or an `x:` extension token.
|
|
30
|
+
*/
|
|
31
|
+
type: string;
|
|
32
|
+
/**
|
|
33
|
+
* The value the applicant gives. Self-asserted: the applicant's own statement, bound to them by the document proof, and attested by nobody.
|
|
34
|
+
*/
|
|
35
|
+
value: {
|
|
36
|
+
[k: string]: unknown | undefined;
|
|
37
|
+
};
|
|
38
|
+
}[];
|
|
22
39
|
ext?: Ext;
|
|
23
40
|
}
|
|
24
41
|
export interface VTCJoinRequestsSubmitResponsePayload {
|
|
@@ -81,6 +98,31 @@ export const PAYLOAD_SCHEMA = {
|
|
|
81
98
|
"type": "object",
|
|
82
99
|
"description": "Opaque applicant-supplied extension bag."
|
|
83
100
|
},
|
|
101
|
+
"attributes": {
|
|
102
|
+
"type": "array",
|
|
103
|
+
"maxItems": 32,
|
|
104
|
+
"description": "The applicant's answers to the manifest's `requestedAttributes`: one entry per attribute given. Self-asserted and bound to the applicant by the document proof. A maintainer MUST refuse the submission with `attributesMissing` when a required attribute is absent and with `attributesUnrequested` when an entry names a type the manifest does not request.",
|
|
105
|
+
"items": {
|
|
106
|
+
"type": "object",
|
|
107
|
+
"additionalProperties": false,
|
|
108
|
+
"required": [
|
|
109
|
+
"type",
|
|
110
|
+
"value"
|
|
111
|
+
],
|
|
112
|
+
"properties": {
|
|
113
|
+
"type": {
|
|
114
|
+
"type": "string",
|
|
115
|
+
"minLength": 1,
|
|
116
|
+
"maxLength": 128,
|
|
117
|
+
"pattern": "^(x:)?[a-z][A-Za-z0-9]*(\\.[a-z][A-Za-z0-9]*)*$",
|
|
118
|
+
"description": "A claim-type token from the persona claim-type registry (persona/_shared/0.1/CLAIM-TYPES.md) — `name.display`, `address.country` — or an `x:` extension token."
|
|
119
|
+
},
|
|
120
|
+
"value": {
|
|
121
|
+
"description": "The value the applicant gives. Self-asserted: the applicant's own statement, bound to them by the document proof, and attested by nobody."
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
},
|
|
84
126
|
"ext": {
|
|
85
127
|
"$ref": "#/$defs/Ext"
|
|
86
128
|
}
|