@openvtc/trust-tasks 0.12.8 → 0.12.10

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.
Files changed (63) hide show
  1. package/dist/vtc/_shared/0.1/endorsement.d.ts +1 -1
  2. package/dist/vtc/ceremonies/list/0.1/payload.d.ts +22 -0
  3. package/dist/vtc/ceremonies/list/0.1/payload.d.ts.map +1 -1
  4. package/dist/vtc/ceremonies/list/0.1/payload.js +8 -0
  5. package/dist/vtc/ceremonies/list/0.1/payload.js.map +1 -1
  6. package/dist/vtc/community/profile/show/0.1/payload.d.ts +235 -22
  7. package/dist/vtc/community/profile/show/0.1/payload.d.ts.map +1 -1
  8. package/dist/vtc/community/profile/show/0.1/payload.js +106 -8
  9. package/dist/vtc/community/profile/show/0.1/payload.js.map +1 -1
  10. package/dist/vtc/community/profile/update/0.1/payload.d.ts +265 -22
  11. package/dist/vtc/community/profile/update/0.1/payload.d.ts.map +1 -1
  12. package/dist/vtc/community/profile/update/0.1/payload.js +110 -8
  13. package/dist/vtc/community/profile/update/0.1/payload.js.map +1 -1
  14. package/dist/vtc/config/export/0.1/payload.d.ts +154 -0
  15. package/dist/vtc/config/export/0.1/payload.d.ts.map +1 -1
  16. package/dist/vtc/config/export/0.1/payload.js +72 -0
  17. package/dist/vtc/config/export/0.1/payload.js.map +1 -1
  18. package/dist/vtc/config/import/0.1/payload.d.ts +154 -0
  19. package/dist/vtc/config/import/0.1/payload.d.ts.map +1 -1
  20. package/dist/vtc/config/import/0.1/payload.js +72 -0
  21. package/dist/vtc/config/import/0.1/payload.js.map +1 -1
  22. package/dist/vtc/endorsements/issue/0.1/payload.d.ts +65 -65
  23. package/dist/vtc/endorsements/issue/0.1/payload.d.ts.map +1 -1
  24. package/dist/vtc/endorsements/issue/0.1/payload.js +36 -32
  25. package/dist/vtc/endorsements/issue/0.1/payload.js.map +1 -1
  26. package/dist/vtc/endorsements/list/0.1/payload.d.ts +41 -61
  27. package/dist/vtc/endorsements/list/0.1/payload.d.ts.map +1 -1
  28. package/dist/vtc/endorsements/list/0.1/payload.js +24 -30
  29. package/dist/vtc/endorsements/list/0.1/payload.js.map +1 -1
  30. package/dist/vtc/endorsements/show/0.1/payload.d.ts +41 -61
  31. package/dist/vtc/endorsements/show/0.1/payload.d.ts.map +1 -1
  32. package/dist/vtc/endorsements/show/0.1/payload.js +24 -30
  33. package/dist/vtc/endorsements/show/0.1/payload.js.map +1 -1
  34. package/dist/vtc/install/claim/start/0.1/payload.d.ts +18 -0
  35. package/dist/vtc/install/claim/start/0.1/payload.d.ts.map +1 -1
  36. package/dist/vtc/install/claim/start/0.1/payload.js +5 -0
  37. package/dist/vtc/install/claim/start/0.1/payload.js.map +1 -1
  38. package/dist/vtc/registry/diagnostics/0.1/payload.d.ts +491 -0
  39. package/dist/vtc/registry/diagnostics/0.1/payload.d.ts.map +1 -1
  40. package/dist/vtc/registry/diagnostics/0.1/payload.js +260 -0
  41. package/dist/vtc/registry/diagnostics/0.1/payload.js.map +1 -1
  42. package/dist/vtc/website/files/list/0.1/payload.d.ts +24 -0
  43. package/dist/vtc/website/files/list/0.1/payload.d.ts.map +1 -1
  44. package/dist/vtc/website/files/list/0.1/payload.js +10 -0
  45. package/dist/vtc/website/files/list/0.1/payload.js.map +1 -1
  46. package/dist/vtc/website/generations/list/0.1/payload.d.ts +48 -0
  47. package/dist/vtc/website/generations/list/0.1/payload.d.ts.map +1 -1
  48. package/dist/vtc/website/generations/list/0.1/payload.js +20 -0
  49. package/dist/vtc/website/generations/list/0.1/payload.js.map +1 -1
  50. package/package.json +1 -1
  51. package/src/vtc/_shared/0.1/endorsement.ts +1 -1
  52. package/src/vtc/ceremonies/list/0.1/payload.ts +14 -0
  53. package/src/vtc/community/profile/show/0.1/payload.ts +141 -10
  54. package/src/vtc/community/profile/update/0.1/payload.ts +167 -10
  55. package/src/vtc/config/export/0.1/payload.ts +94 -0
  56. package/src/vtc/config/import/0.1/payload.ts +94 -0
  57. package/src/vtc/endorsements/issue/0.1/payload.ts +45 -41
  58. package/src/vtc/endorsements/list/0.1/payload.ts +29 -39
  59. package/src/vtc/endorsements/show/0.1/payload.ts +29 -39
  60. package/src/vtc/install/claim/start/0.1/payload.ts +13 -0
  61. package/src/vtc/registry/diagnostics/0.1/payload.ts +343 -0
  62. package/src/vtc/website/files/list/0.1/payload.ts +14 -0
  63. package/src/vtc/website/generations/list/0.1/payload.ts +28 -0
@@ -56,6 +56,7 @@ export interface CommunityProfileSnapshot {
56
56
  * The community's declared relationship-identifier default, as defined on `CommunityProfile` in the `vtc/_shared/0.1/community` schema. Carried in a config export so a restore reproduces the declaration rather than silently reverting it to the implementation default.
57
57
  */
58
58
  relationshipIdentifierDefault?: "attributed" | "pairwise";
59
+ personhood?: PersonhoodGovernance;
59
60
  /**
60
61
  * Opaque community-defined extension bag.
61
62
  */
@@ -65,6 +66,27 @@ export interface CommunityProfileSnapshot {
65
66
  */
66
67
  createdAt?: string;
67
68
  }
69
+ /**
70
+ * The community's published personhood position, carried so an export restores it. Governance state, not runtime state — unlike `registryStatus`, which is deliberately absent here because reachability belongs to a running maintainer rather than to exported state.
71
+ */
72
+ export interface PersonhoodGovernance {
73
+ /**
74
+ * Governance requires that members are real humans. Defaults to `false` when absent: a community that has not considered the question asserts nothing, which is the only safe default for a claim a verifier may rely on.
75
+ */
76
+ realHuman?: boolean;
77
+ /**
78
+ * Governance requires that each person holds at most one membership in **this** community. Per-community by definition — the glossary says "exactly one membership in that VTC" — so a single community can satisfy it without any network above it.
79
+ */
80
+ singleMembership?: boolean;
81
+ /**
82
+ * DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence. A community that vets its own members in person lists its own community DID here — it is acting as its own IDVP, which §IDVC permits. An empty list means no list has been published, not that everything is accepted.
83
+ */
84
+ acceptedIdvps?: string[];
85
+ /**
86
+ * Where the governance framework these assertions refer to can be read.
87
+ */
88
+ governanceFrameworkUrl?: string | null;
89
+ }
68
90
  /**
69
91
  * Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.
70
92
  */
@@ -375,6 +397,10 @@ export const PAYLOAD_SCHEMA = {
375
397
  ],
376
398
  "description": "The community's declared relationship-identifier default, as defined on `CommunityProfile` in the `vtc/_shared/0.1/community` schema. Carried in a config export so a restore reproduces the declaration rather than silently reverting it to the implementation default."
377
399
  },
400
+ "personhood": {
401
+ "$ref": "#/$defs/PersonhoodGovernance",
402
+ "description": "The community's published personhood position, carried so an export restores it. Governance state, not runtime state — unlike `registryStatus`, which is deliberately absent here because reachability belongs to a running maintainer rather than to exported state."
403
+ },
378
404
  "extensions": {
379
405
  "type": "object",
380
406
  "description": "Opaque community-defined extension bag."
@@ -385,6 +411,38 @@ export const PAYLOAD_SCHEMA = {
385
411
  "description": "When the community was created. Provenance only — an import never writes it."
386
412
  }
387
413
  }
414
+ },
415
+ "PersonhoodGovernance": {
416
+ "$anchor": "personhoodGovernance",
417
+ "title": "PersonhoodGovernance",
418
+ "type": "object",
419
+ "additionalProperties": false,
420
+ "description": "A community's published position on personhood.\n\nDTG Credentials §Personhood Credentials places PHC status here rather than in the credential — \"PHC status is determined by governance and trust registries, not by credential structure\" — so a verifier deciding whether a VMC carries personhood weight reads this, not the credential's type array. §Governance Considerations item 1 makes the acceptable-IDVP list the community's to define and publish.\n\nEvery member is a declaration, not an enforcement: what a community actually accepts is decided by its own policy. Absent means the community has not published a position, which is not the same as asserting the negative.",
421
+ "properties": {
422
+ "realHuman": {
423
+ "type": "boolean",
424
+ "description": "Governance requires that members are real humans. Defaults to `false` when absent: a community that has not considered the question asserts nothing, which is the only safe default for a claim a verifier may rely on."
425
+ },
426
+ "singleMembership": {
427
+ "type": "boolean",
428
+ "description": "Governance requires that each person holds at most one membership in **this** community. Per-community by definition — the glossary says \"exactly one membership in that VTC\" — so a single community can satisfy it without any network above it."
429
+ },
430
+ "acceptedIdvps": {
431
+ "type": "array",
432
+ "items": {
433
+ "type": "string",
434
+ "minLength": 1
435
+ },
436
+ "description": "DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence. A community that vets its own members in person lists its own community DID here — it is acting as its own IDVP, which §IDVC permits. An empty list means no list has been published, not that everything is accepted."
437
+ },
438
+ "governanceFrameworkUrl": {
439
+ "type": [
440
+ "string",
441
+ "null"
442
+ ],
443
+ "description": "Where the governance framework these assertions refer to can be read."
444
+ }
445
+ }
388
446
  }
389
447
  }
390
448
  } as const;
@@ -595,6 +653,10 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
595
653
  ],
596
654
  "description": "The community's declared relationship-identifier default, as defined on `CommunityProfile` in the `vtc/_shared/0.1/community` schema. Carried in a config export so a restore reproduces the declaration rather than silently reverting it to the implementation default."
597
655
  },
656
+ "personhood": {
657
+ "$ref": "#/$defs/PersonhoodGovernance",
658
+ "description": "The community's published personhood position, carried so an export restores it. Governance state, not runtime state — unlike `registryStatus`, which is deliberately absent here because reachability belongs to a running maintainer rather than to exported state."
659
+ },
598
660
  "extensions": {
599
661
  "type": "object",
600
662
  "description": "Opaque community-defined extension bag."
@@ -605,6 +667,38 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
605
667
  "description": "When the community was created. Provenance only — an import never writes it."
606
668
  }
607
669
  }
670
+ },
671
+ "PersonhoodGovernance": {
672
+ "$anchor": "personhoodGovernance",
673
+ "title": "PersonhoodGovernance",
674
+ "type": "object",
675
+ "additionalProperties": false,
676
+ "description": "A community's published position on personhood.\n\nDTG Credentials §Personhood Credentials places PHC status here rather than in the credential — \"PHC status is determined by governance and trust registries, not by credential structure\" — so a verifier deciding whether a VMC carries personhood weight reads this, not the credential's type array. §Governance Considerations item 1 makes the acceptable-IDVP list the community's to define and publish.\n\nEvery member is a declaration, not an enforcement: what a community actually accepts is decided by its own policy. Absent means the community has not published a position, which is not the same as asserting the negative.",
677
+ "properties": {
678
+ "realHuman": {
679
+ "type": "boolean",
680
+ "description": "Governance requires that members are real humans. Defaults to `false` when absent: a community that has not considered the question asserts nothing, which is the only safe default for a claim a verifier may rely on."
681
+ },
682
+ "singleMembership": {
683
+ "type": "boolean",
684
+ "description": "Governance requires that each person holds at most one membership in **this** community. Per-community by definition — the glossary says \"exactly one membership in that VTC\" — so a single community can satisfy it without any network above it."
685
+ },
686
+ "acceptedIdvps": {
687
+ "type": "array",
688
+ "items": {
689
+ "type": "string",
690
+ "minLength": 1
691
+ },
692
+ "description": "DIDs of the identity-verification providers whose credentials this community accepts as personhood evidence. A community that vets its own members in person lists its own community DID here — it is acting as its own IDVP, which §IDVC permits. An empty list means no list has been published, not that everything is accepted."
693
+ },
694
+ "governanceFrameworkUrl": {
695
+ "type": [
696
+ "string",
697
+ "null"
698
+ ],
699
+ "description": "Where the governance framework these assertions refer to can be read."
700
+ }
701
+ }
608
702
  }
609
703
  }
610
704
  } as const;
@@ -35,6 +35,10 @@ export interface Ext {
35
35
  }
36
36
  export interface VTCEndorsementsIssueResponsePayload {
37
37
  endorsement: Endorsement;
38
+ /**
39
+ * The signed VEC just minted. Present only here: handing back the credential is the point of an issue call, and the issuer is the only party that can. Reads carry `endorsement.issued` — the reference — instead.
40
+ */
41
+ credential: {};
38
42
  ext?: Ext;
39
43
  }
40
44
  export interface Endorsement {
@@ -54,7 +58,7 @@ export interface Endorsement {
54
58
  * The attested claim body, validated against the endorsement type's claimSchema when it declares one.
55
59
  */
56
60
  claim?: {};
57
- issued: IssuedCredential;
61
+ issued: CredentialReference;
58
62
  /**
59
63
  * The endorsement's slot on the community's shared Revocation status list. Published, so a foreign verifier can check revocation without contacting this community.
60
64
  */
@@ -65,22 +69,18 @@ export interface Endorsement {
65
69
  revokedAt?: string | null;
66
70
  }
67
71
  /**
68
- * The registry-wide issuance receiptcredentialId, the signed VEC, and expiry.
72
+ * A pointer to the issued VEC its identifier and lifetime, not its bytes. `endorsements/issue` additionally returns the credential itself, because that is the one call whose caller has no other way to receive it.
69
73
  */
70
- export interface IssuedCredential {
74
+ export interface CredentialReference {
71
75
  credentialId: CredentialId;
72
- /**
73
- * The issued Verifiable Credential (W3C VC Data Model 2.0), signed by the issuer's key. Opaque to the framework.
74
- */
75
- credential: {};
76
76
  /**
77
77
  * When the credential was minted.
78
78
  */
79
79
  issuedAt?: string;
80
80
  /**
81
- * When the credential's validUntil falls due.
81
+ * When it lapses, or null when it does not.
82
82
  */
83
- expiresAt: string;
83
+ expiresAt?: string | null;
84
84
  }
85
85
 
86
86
  /** Trust Task type URI. */
@@ -148,12 +148,17 @@ export const PAYLOAD_SCHEMA = {
148
148
  "type": "object",
149
149
  "additionalProperties": false,
150
150
  "required": [
151
- "endorsement"
151
+ "endorsement",
152
+ "credential"
152
153
  ],
153
154
  "properties": {
154
155
  "endorsement": {
155
156
  "$ref": "#/$defs/Endorsement"
156
157
  },
158
+ "credential": {
159
+ "type": "object",
160
+ "description": "The signed VEC just minted. Present only here: handing back the credential is the point of an issue call, and the issuer is the only party that can. Reads carry `endorsement.issued` — the reference — instead."
161
+ },
157
162
  "ext": {
158
163
  "$ref": "#/$defs/Ext"
159
164
  }
@@ -203,8 +208,8 @@ export const PAYLOAD_SCHEMA = {
203
208
  "description": "The attested claim body, validated against the endorsement type's claimSchema when it declares one."
204
209
  },
205
210
  "issued": {
206
- "$ref": "#/$defs/IssuedCredential",
207
- "description": "The registry-wide issuance receiptcredentialId, the signed VEC, and expiry."
211
+ "$ref": "#/$defs/CredentialReference",
212
+ "description": "A pointer to the issued VEC its identifier and lifetime, not its bytes. `endorsements/issue` additionally returns the credential itself, because that is the one call whose caller has no other way to receive it."
208
213
  },
209
214
  "statusListIndex": {
210
215
  "type": "integer",
@@ -221,34 +226,31 @@ export const PAYLOAD_SCHEMA = {
221
226
  }
222
227
  }
223
228
  },
224
- "IssuedCredential": {
225
- "$anchor": "issuedCredential",
226
- "title": "IssuedCredential",
227
- "description": "The receipt for a successfully-minted Verifiable Credential: a stable handle for revocation and audit, the signed credential itself, and when it lapses.\n\nSCOPE — this is an *issuance* receipt, returned by the party that minted the credential. It is not the shape for a *delivery* receipt, where a holder hands an already-issued credential to a party that stores it: such a task returns a receipt naming what was stored (see vtc/members/vmc and vtc/join-requests/accept) and MUST NOT echo the credential back to the party that just sent it. Reaching for this definition on a delivery task is the mistake this paragraph exists to prevent.\n\n`additionalProperties` is false, so a specification needing extra members cannot compose this by `$ref` — `allOf` evaluates each subschema against the whole object and this one would reject them. vta/credentials/issue is that case: its response is this shape plus `supersedes` and `ext`, and it therefore states the members inline while `$ref`-ing the shared CredentialId. That is deliberate, not drift.",
229
+ "CredentialReference": {
230
+ "$anchor": "credentialReference",
231
+ "title": "CredentialReference",
228
232
  "type": "object",
229
233
  "additionalProperties": false,
234
+ "description": "A pointer to an issued credential, without the credential itself.\n\nThe counterpart to IssuedCredential, for the far more common case of *reading about* a credential rather than being handed one. A listing that embedded the signed credential in every row would grow with the size of the credentials rather than the number of them — a page of fifty is megabytes — and a reader that only needs to know a credential exists, when it lapses, and how to revoke it does not need the bytes.\n\nThe holder can always fetch the credential itself by `credentialId`, and a verifier can check revocation from the row's status-list slot without either. Reach for IssuedCredential only at the moment of minting, where the caller has no other way to receive what was just made for them.",
230
235
  "required": [
231
- "credentialId",
232
- "credential",
233
- "expiresAt"
236
+ "credentialId"
234
237
  ],
235
238
  "properties": {
236
239
  "credentialId": {
237
240
  "$ref": "#/$defs/CredentialId"
238
241
  },
239
- "credential": {
240
- "type": "object",
241
- "description": "The issued Verifiable Credential (W3C VC Data Model 2.0), signed by the issuer's key. Opaque to the framework."
242
- },
243
242
  "issuedAt": {
244
243
  "type": "string",
245
244
  "format": "date-time",
246
245
  "description": "When the credential was minted."
247
246
  },
248
247
  "expiresAt": {
249
- "type": "string",
248
+ "type": [
249
+ "string",
250
+ "null"
251
+ ],
250
252
  "format": "date-time",
251
- "description": "When the credential's validUntil falls due."
253
+ "description": "When it lapses, or null when it does not."
252
254
  }
253
255
  }
254
256
  },
@@ -273,12 +275,17 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
273
275
  "type": "object",
274
276
  "additionalProperties": false,
275
277
  "required": [
276
- "endorsement"
278
+ "endorsement",
279
+ "credential"
277
280
  ],
278
281
  "properties": {
279
282
  "endorsement": {
280
283
  "$ref": "#/$defs/Endorsement"
281
284
  },
285
+ "credential": {
286
+ "type": "object",
287
+ "description": "The signed VEC just minted. Present only here: handing back the credential is the point of an issue call, and the issuer is the only party that can. Reads carry `endorsement.issued` — the reference — instead."
288
+ },
282
289
  "ext": {
283
290
  "$ref": "#/$defs/Ext"
284
291
  }
@@ -328,8 +335,8 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
328
335
  "description": "The attested claim body, validated against the endorsement type's claimSchema when it declares one."
329
336
  },
330
337
  "issued": {
331
- "$ref": "#/$defs/IssuedCredential",
332
- "description": "The registry-wide issuance receiptcredentialId, the signed VEC, and expiry."
338
+ "$ref": "#/$defs/CredentialReference",
339
+ "description": "A pointer to the issued VEC its identifier and lifetime, not its bytes. `endorsements/issue` additionally returns the credential itself, because that is the one call whose caller has no other way to receive it."
333
340
  },
334
341
  "statusListIndex": {
335
342
  "type": "integer",
@@ -346,34 +353,31 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
346
353
  }
347
354
  }
348
355
  },
349
- "IssuedCredential": {
350
- "$anchor": "issuedCredential",
351
- "title": "IssuedCredential",
352
- "description": "The receipt for a successfully-minted Verifiable Credential: a stable handle for revocation and audit, the signed credential itself, and when it lapses.\n\nSCOPE — this is an *issuance* receipt, returned by the party that minted the credential. It is not the shape for a *delivery* receipt, where a holder hands an already-issued credential to a party that stores it: such a task returns a receipt naming what was stored (see vtc/members/vmc and vtc/join-requests/accept) and MUST NOT echo the credential back to the party that just sent it. Reaching for this definition on a delivery task is the mistake this paragraph exists to prevent.\n\n`additionalProperties` is false, so a specification needing extra members cannot compose this by `$ref` — `allOf` evaluates each subschema against the whole object and this one would reject them. vta/credentials/issue is that case: its response is this shape plus `supersedes` and `ext`, and it therefore states the members inline while `$ref`-ing the shared CredentialId. That is deliberate, not drift.",
356
+ "CredentialReference": {
357
+ "$anchor": "credentialReference",
358
+ "title": "CredentialReference",
353
359
  "type": "object",
354
360
  "additionalProperties": false,
361
+ "description": "A pointer to an issued credential, without the credential itself.\n\nThe counterpart to IssuedCredential, for the far more common case of *reading about* a credential rather than being handed one. A listing that embedded the signed credential in every row would grow with the size of the credentials rather than the number of them — a page of fifty is megabytes — and a reader that only needs to know a credential exists, when it lapses, and how to revoke it does not need the bytes.\n\nThe holder can always fetch the credential itself by `credentialId`, and a verifier can check revocation from the row's status-list slot without either. Reach for IssuedCredential only at the moment of minting, where the caller has no other way to receive what was just made for them.",
355
362
  "required": [
356
- "credentialId",
357
- "credential",
358
- "expiresAt"
363
+ "credentialId"
359
364
  ],
360
365
  "properties": {
361
366
  "credentialId": {
362
367
  "$ref": "#/$defs/CredentialId"
363
368
  },
364
- "credential": {
365
- "type": "object",
366
- "description": "The issued Verifiable Credential (W3C VC Data Model 2.0), signed by the issuer's key. Opaque to the framework."
367
- },
368
369
  "issuedAt": {
369
370
  "type": "string",
370
371
  "format": "date-time",
371
372
  "description": "When the credential was minted."
372
373
  },
373
374
  "expiresAt": {
374
- "type": "string",
375
+ "type": [
376
+ "string",
377
+ "null"
378
+ ],
375
379
  "format": "date-time",
376
- "description": "When the credential's validUntil falls due."
380
+ "description": "When it lapses, or null when it does not."
377
381
  }
378
382
  }
379
383
  },
@@ -66,7 +66,7 @@ export interface Endorsement {
66
66
  * The attested claim body, validated against the endorsement type's claimSchema when it declares one.
67
67
  */
68
68
  claim?: {};
69
- issued: IssuedCredential;
69
+ issued: CredentialReference;
70
70
  /**
71
71
  * The endorsement's slot on the community's shared Revocation status list. Published, so a foreign verifier can check revocation without contacting this community.
72
72
  */
@@ -77,22 +77,18 @@ export interface Endorsement {
77
77
  revokedAt?: string | null;
78
78
  }
79
79
  /**
80
- * The registry-wide issuance receiptcredentialId, the signed VEC, and expiry.
80
+ * A pointer to the issued VEC its identifier and lifetime, not its bytes. `endorsements/issue` additionally returns the credential itself, because that is the one call whose caller has no other way to receive it.
81
81
  */
82
- export interface IssuedCredential {
82
+ export interface CredentialReference {
83
83
  credentialId: CredentialId;
84
- /**
85
- * The issued Verifiable Credential (W3C VC Data Model 2.0), signed by the issuer's key. Opaque to the framework.
86
- */
87
- credential: {};
88
84
  /**
89
85
  * When the credential was minted.
90
86
  */
91
87
  issuedAt?: string;
92
88
  /**
93
- * When the credential's validUntil falls due.
89
+ * When it lapses, or null when it does not.
94
90
  */
95
- expiresAt: string;
91
+ expiresAt?: string | null;
96
92
  }
97
93
 
98
94
  /** Trust Task type URI. */
@@ -231,8 +227,8 @@ export const PAYLOAD_SCHEMA = {
231
227
  "description": "The attested claim body, validated against the endorsement type's claimSchema when it declares one."
232
228
  },
233
229
  "issued": {
234
- "$ref": "#/$defs/IssuedCredential",
235
- "description": "The registry-wide issuance receiptcredentialId, the signed VEC, and expiry."
230
+ "$ref": "#/$defs/CredentialReference",
231
+ "description": "A pointer to the issued VEC its identifier and lifetime, not its bytes. `endorsements/issue` additionally returns the credential itself, because that is the one call whose caller has no other way to receive it."
236
232
  },
237
233
  "statusListIndex": {
238
234
  "type": "integer",
@@ -249,34 +245,31 @@ export const PAYLOAD_SCHEMA = {
249
245
  }
250
246
  }
251
247
  },
252
- "IssuedCredential": {
253
- "$anchor": "issuedCredential",
254
- "title": "IssuedCredential",
255
- "description": "The receipt for a successfully-minted Verifiable Credential: a stable handle for revocation and audit, the signed credential itself, and when it lapses.\n\nSCOPE — this is an *issuance* receipt, returned by the party that minted the credential. It is not the shape for a *delivery* receipt, where a holder hands an already-issued credential to a party that stores it: such a task returns a receipt naming what was stored (see vtc/members/vmc and vtc/join-requests/accept) and MUST NOT echo the credential back to the party that just sent it. Reaching for this definition on a delivery task is the mistake this paragraph exists to prevent.\n\n`additionalProperties` is false, so a specification needing extra members cannot compose this by `$ref` — `allOf` evaluates each subschema against the whole object and this one would reject them. vta/credentials/issue is that case: its response is this shape plus `supersedes` and `ext`, and it therefore states the members inline while `$ref`-ing the shared CredentialId. That is deliberate, not drift.",
248
+ "CredentialReference": {
249
+ "$anchor": "credentialReference",
250
+ "title": "CredentialReference",
256
251
  "type": "object",
257
252
  "additionalProperties": false,
253
+ "description": "A pointer to an issued credential, without the credential itself.\n\nThe counterpart to IssuedCredential, for the far more common case of *reading about* a credential rather than being handed one. A listing that embedded the signed credential in every row would grow with the size of the credentials rather than the number of them — a page of fifty is megabytes — and a reader that only needs to know a credential exists, when it lapses, and how to revoke it does not need the bytes.\n\nThe holder can always fetch the credential itself by `credentialId`, and a verifier can check revocation from the row's status-list slot without either. Reach for IssuedCredential only at the moment of minting, where the caller has no other way to receive what was just made for them.",
258
254
  "required": [
259
- "credentialId",
260
- "credential",
261
- "expiresAt"
255
+ "credentialId"
262
256
  ],
263
257
  "properties": {
264
258
  "credentialId": {
265
259
  "$ref": "#/$defs/CredentialId"
266
260
  },
267
- "credential": {
268
- "type": "object",
269
- "description": "The issued Verifiable Credential (W3C VC Data Model 2.0), signed by the issuer's key. Opaque to the framework."
270
- },
271
261
  "issuedAt": {
272
262
  "type": "string",
273
263
  "format": "date-time",
274
264
  "description": "When the credential was minted."
275
265
  },
276
266
  "expiresAt": {
277
- "type": "string",
267
+ "type": [
268
+ "string",
269
+ "null"
270
+ ],
278
271
  "format": "date-time",
279
- "description": "When the credential's validUntil falls due."
272
+ "description": "When it lapses, or null when it does not."
280
273
  }
281
274
  }
282
275
  },
@@ -373,8 +366,8 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
373
366
  "description": "The attested claim body, validated against the endorsement type's claimSchema when it declares one."
374
367
  },
375
368
  "issued": {
376
- "$ref": "#/$defs/IssuedCredential",
377
- "description": "The registry-wide issuance receiptcredentialId, the signed VEC, and expiry."
369
+ "$ref": "#/$defs/CredentialReference",
370
+ "description": "A pointer to the issued VEC its identifier and lifetime, not its bytes. `endorsements/issue` additionally returns the credential itself, because that is the one call whose caller has no other way to receive it."
378
371
  },
379
372
  "statusListIndex": {
380
373
  "type": "integer",
@@ -391,34 +384,31 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
391
384
  }
392
385
  }
393
386
  },
394
- "IssuedCredential": {
395
- "$anchor": "issuedCredential",
396
- "title": "IssuedCredential",
397
- "description": "The receipt for a successfully-minted Verifiable Credential: a stable handle for revocation and audit, the signed credential itself, and when it lapses.\n\nSCOPE — this is an *issuance* receipt, returned by the party that minted the credential. It is not the shape for a *delivery* receipt, where a holder hands an already-issued credential to a party that stores it: such a task returns a receipt naming what was stored (see vtc/members/vmc and vtc/join-requests/accept) and MUST NOT echo the credential back to the party that just sent it. Reaching for this definition on a delivery task is the mistake this paragraph exists to prevent.\n\n`additionalProperties` is false, so a specification needing extra members cannot compose this by `$ref` — `allOf` evaluates each subschema against the whole object and this one would reject them. vta/credentials/issue is that case: its response is this shape plus `supersedes` and `ext`, and it therefore states the members inline while `$ref`-ing the shared CredentialId. That is deliberate, not drift.",
387
+ "CredentialReference": {
388
+ "$anchor": "credentialReference",
389
+ "title": "CredentialReference",
398
390
  "type": "object",
399
391
  "additionalProperties": false,
392
+ "description": "A pointer to an issued credential, without the credential itself.\n\nThe counterpart to IssuedCredential, for the far more common case of *reading about* a credential rather than being handed one. A listing that embedded the signed credential in every row would grow with the size of the credentials rather than the number of them — a page of fifty is megabytes — and a reader that only needs to know a credential exists, when it lapses, and how to revoke it does not need the bytes.\n\nThe holder can always fetch the credential itself by `credentialId`, and a verifier can check revocation from the row's status-list slot without either. Reach for IssuedCredential only at the moment of minting, where the caller has no other way to receive what was just made for them.",
400
393
  "required": [
401
- "credentialId",
402
- "credential",
403
- "expiresAt"
394
+ "credentialId"
404
395
  ],
405
396
  "properties": {
406
397
  "credentialId": {
407
398
  "$ref": "#/$defs/CredentialId"
408
399
  },
409
- "credential": {
410
- "type": "object",
411
- "description": "The issued Verifiable Credential (W3C VC Data Model 2.0), signed by the issuer's key. Opaque to the framework."
412
- },
413
400
  "issuedAt": {
414
401
  "type": "string",
415
402
  "format": "date-time",
416
403
  "description": "When the credential was minted."
417
404
  },
418
405
  "expiresAt": {
419
- "type": "string",
406
+ "type": [
407
+ "string",
408
+ "null"
409
+ ],
420
410
  "format": "date-time",
421
- "description": "When the credential's validUntil falls due."
411
+ "description": "When it lapses, or null when it does not."
422
412
  }
423
413
  }
424
414
  },
@@ -39,7 +39,7 @@ export interface Endorsement {
39
39
  * The attested claim body, validated against the endorsement type's claimSchema when it declares one.
40
40
  */
41
41
  claim?: {};
42
- issued: IssuedCredential;
42
+ issued: CredentialReference;
43
43
  /**
44
44
  * The endorsement's slot on the community's shared Revocation status list. Published, so a foreign verifier can check revocation without contacting this community.
45
45
  */
@@ -50,22 +50,18 @@ export interface Endorsement {
50
50
  revokedAt?: string | null;
51
51
  }
52
52
  /**
53
- * The registry-wide issuance receiptcredentialId, the signed VEC, and expiry.
53
+ * A pointer to the issued VEC its identifier and lifetime, not its bytes. `endorsements/issue` additionally returns the credential itself, because that is the one call whose caller has no other way to receive it.
54
54
  */
55
- export interface IssuedCredential {
55
+ export interface CredentialReference {
56
56
  credentialId: CredentialId;
57
- /**
58
- * The issued Verifiable Credential (W3C VC Data Model 2.0), signed by the issuer's key. Opaque to the framework.
59
- */
60
- credential: {};
61
57
  /**
62
58
  * When the credential was minted.
63
59
  */
64
60
  issuedAt?: string;
65
61
  /**
66
- * When the credential's validUntil falls due.
62
+ * When it lapses, or null when it does not.
67
63
  */
68
- expiresAt: string;
64
+ expiresAt?: string | null;
69
65
  }
70
66
 
71
67
  /** Trust Task type URI. */
@@ -169,8 +165,8 @@ export const PAYLOAD_SCHEMA = {
169
165
  "description": "The attested claim body, validated against the endorsement type's claimSchema when it declares one."
170
166
  },
171
167
  "issued": {
172
- "$ref": "#/$defs/IssuedCredential",
173
- "description": "The registry-wide issuance receiptcredentialId, the signed VEC, and expiry."
168
+ "$ref": "#/$defs/CredentialReference",
169
+ "description": "A pointer to the issued VEC its identifier and lifetime, not its bytes. `endorsements/issue` additionally returns the credential itself, because that is the one call whose caller has no other way to receive it."
174
170
  },
175
171
  "statusListIndex": {
176
172
  "type": "integer",
@@ -187,34 +183,31 @@ export const PAYLOAD_SCHEMA = {
187
183
  }
188
184
  }
189
185
  },
190
- "IssuedCredential": {
191
- "$anchor": "issuedCredential",
192
- "title": "IssuedCredential",
193
- "description": "The receipt for a successfully-minted Verifiable Credential: a stable handle for revocation and audit, the signed credential itself, and when it lapses.\n\nSCOPE — this is an *issuance* receipt, returned by the party that minted the credential. It is not the shape for a *delivery* receipt, where a holder hands an already-issued credential to a party that stores it: such a task returns a receipt naming what was stored (see vtc/members/vmc and vtc/join-requests/accept) and MUST NOT echo the credential back to the party that just sent it. Reaching for this definition on a delivery task is the mistake this paragraph exists to prevent.\n\n`additionalProperties` is false, so a specification needing extra members cannot compose this by `$ref` — `allOf` evaluates each subschema against the whole object and this one would reject them. vta/credentials/issue is that case: its response is this shape plus `supersedes` and `ext`, and it therefore states the members inline while `$ref`-ing the shared CredentialId. That is deliberate, not drift.",
186
+ "CredentialReference": {
187
+ "$anchor": "credentialReference",
188
+ "title": "CredentialReference",
194
189
  "type": "object",
195
190
  "additionalProperties": false,
191
+ "description": "A pointer to an issued credential, without the credential itself.\n\nThe counterpart to IssuedCredential, for the far more common case of *reading about* a credential rather than being handed one. A listing that embedded the signed credential in every row would grow with the size of the credentials rather than the number of them — a page of fifty is megabytes — and a reader that only needs to know a credential exists, when it lapses, and how to revoke it does not need the bytes.\n\nThe holder can always fetch the credential itself by `credentialId`, and a verifier can check revocation from the row's status-list slot without either. Reach for IssuedCredential only at the moment of minting, where the caller has no other way to receive what was just made for them.",
196
192
  "required": [
197
- "credentialId",
198
- "credential",
199
- "expiresAt"
193
+ "credentialId"
200
194
  ],
201
195
  "properties": {
202
196
  "credentialId": {
203
197
  "$ref": "#/$defs/CredentialId"
204
198
  },
205
- "credential": {
206
- "type": "object",
207
- "description": "The issued Verifiable Credential (W3C VC Data Model 2.0), signed by the issuer's key. Opaque to the framework."
208
- },
209
199
  "issuedAt": {
210
200
  "type": "string",
211
201
  "format": "date-time",
212
202
  "description": "When the credential was minted."
213
203
  },
214
204
  "expiresAt": {
215
- "type": "string",
205
+ "type": [
206
+ "string",
207
+ "null"
208
+ ],
216
209
  "format": "date-time",
217
- "description": "When the credential's validUntil falls due."
210
+ "description": "When it lapses, or null when it does not."
218
211
  }
219
212
  }
220
213
  },
@@ -294,8 +287,8 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
294
287
  "description": "The attested claim body, validated against the endorsement type's claimSchema when it declares one."
295
288
  },
296
289
  "issued": {
297
- "$ref": "#/$defs/IssuedCredential",
298
- "description": "The registry-wide issuance receiptcredentialId, the signed VEC, and expiry."
290
+ "$ref": "#/$defs/CredentialReference",
291
+ "description": "A pointer to the issued VEC its identifier and lifetime, not its bytes. `endorsements/issue` additionally returns the credential itself, because that is the one call whose caller has no other way to receive it."
299
292
  },
300
293
  "statusListIndex": {
301
294
  "type": "integer",
@@ -312,34 +305,31 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
312
305
  }
313
306
  }
314
307
  },
315
- "IssuedCredential": {
316
- "$anchor": "issuedCredential",
317
- "title": "IssuedCredential",
318
- "description": "The receipt for a successfully-minted Verifiable Credential: a stable handle for revocation and audit, the signed credential itself, and when it lapses.\n\nSCOPE — this is an *issuance* receipt, returned by the party that minted the credential. It is not the shape for a *delivery* receipt, where a holder hands an already-issued credential to a party that stores it: such a task returns a receipt naming what was stored (see vtc/members/vmc and vtc/join-requests/accept) and MUST NOT echo the credential back to the party that just sent it. Reaching for this definition on a delivery task is the mistake this paragraph exists to prevent.\n\n`additionalProperties` is false, so a specification needing extra members cannot compose this by `$ref` — `allOf` evaluates each subschema against the whole object and this one would reject them. vta/credentials/issue is that case: its response is this shape plus `supersedes` and `ext`, and it therefore states the members inline while `$ref`-ing the shared CredentialId. That is deliberate, not drift.",
308
+ "CredentialReference": {
309
+ "$anchor": "credentialReference",
310
+ "title": "CredentialReference",
319
311
  "type": "object",
320
312
  "additionalProperties": false,
313
+ "description": "A pointer to an issued credential, without the credential itself.\n\nThe counterpart to IssuedCredential, for the far more common case of *reading about* a credential rather than being handed one. A listing that embedded the signed credential in every row would grow with the size of the credentials rather than the number of them — a page of fifty is megabytes — and a reader that only needs to know a credential exists, when it lapses, and how to revoke it does not need the bytes.\n\nThe holder can always fetch the credential itself by `credentialId`, and a verifier can check revocation from the row's status-list slot without either. Reach for IssuedCredential only at the moment of minting, where the caller has no other way to receive what was just made for them.",
321
314
  "required": [
322
- "credentialId",
323
- "credential",
324
- "expiresAt"
315
+ "credentialId"
325
316
  ],
326
317
  "properties": {
327
318
  "credentialId": {
328
319
  "$ref": "#/$defs/CredentialId"
329
320
  },
330
- "credential": {
331
- "type": "object",
332
- "description": "The issued Verifiable Credential (W3C VC Data Model 2.0), signed by the issuer's key. Opaque to the framework."
333
- },
334
321
  "issuedAt": {
335
322
  "type": "string",
336
323
  "format": "date-time",
337
324
  "description": "When the credential was minted."
338
325
  },
339
326
  "expiresAt": {
340
- "type": "string",
327
+ "type": [
328
+ "string",
329
+ "null"
330
+ ],
341
331
  "format": "date-time",
342
- "description": "When the credential's validUntil falls due."
332
+ "description": "When it lapses, or null when it does not."
343
333
  }
344
334
  }
345
335
  },