@openvtc/trust-tasks 0.20.7 → 0.21.0

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 (253) hide show
  1. package/CHANGELOG.md +320 -0
  2. package/dist/_shared/components.d.ts +299 -2
  3. package/dist/_shared/components.d.ts.map +1 -1
  4. package/dist/auth/passkey/enroll/invite/0.2/payload.d.ts +456 -0
  5. package/dist/auth/passkey/enroll/invite/0.2/payload.d.ts.map +1 -0
  6. package/dist/auth/passkey/enroll/invite/0.2/payload.js +248 -0
  7. package/dist/auth/passkey/enroll/invite/0.2/payload.js.map +1 -0
  8. package/dist/auth/passkey/enroll/redeem/finish/0.1/payload.d.ts +728 -0
  9. package/dist/auth/passkey/enroll/redeem/finish/0.1/payload.d.ts.map +1 -0
  10. package/dist/auth/passkey/enroll/redeem/finish/0.1/payload.js +430 -0
  11. package/dist/auth/passkey/enroll/redeem/finish/0.1/payload.js.map +1 -0
  12. package/dist/auth/passkey/enroll/redeem/start/0.1/payload.d.ts +1043 -0
  13. package/dist/auth/passkey/enroll/redeem/start/0.1/payload.d.ts.map +1 -0
  14. package/dist/auth/passkey/enroll/redeem/start/0.1/payload.js +628 -0
  15. package/dist/auth/passkey/enroll/redeem/start/0.1/payload.js.map +1 -0
  16. package/dist/auth/passkey/revoke/finish/0.2/payload.d.ts +533 -0
  17. package/dist/auth/passkey/revoke/finish/0.2/payload.d.ts.map +1 -0
  18. package/dist/auth/passkey/revoke/finish/0.2/payload.js +315 -0
  19. package/dist/auth/passkey/revoke/finish/0.2/payload.js.map +1 -0
  20. package/dist/auth/passkey/revoke/start/0.2/payload.d.ts +511 -0
  21. package/dist/auth/passkey/revoke/start/0.2/payload.d.ts.map +1 -0
  22. package/dist/auth/passkey/revoke/start/0.2/payload.js +297 -0
  23. package/dist/auth/passkey/revoke/start/0.2/payload.js.map +1 -0
  24. package/dist/auth/step-up/approve-request/0.3/payload.d.ts +613 -0
  25. package/dist/auth/step-up/approve-request/0.3/payload.d.ts.map +1 -0
  26. package/dist/auth/step-up/approve-request/0.3/payload.js +345 -0
  27. package/dist/auth/step-up/approve-request/0.3/payload.js.map +1 -0
  28. package/dist/auth/step-up/approve-response/0.4/payload.d.ts +887 -0
  29. package/dist/auth/step-up/approve-response/0.4/payload.d.ts.map +1 -0
  30. package/dist/auth/step-up/approve-response/0.4/payload.js +504 -0
  31. package/dist/auth/step-up/approve-response/0.4/payload.js.map +1 -0
  32. package/dist/auth/step-up/approve-response/0.5/payload.d.ts +887 -0
  33. package/dist/auth/step-up/approve-response/0.5/payload.d.ts.map +1 -0
  34. package/dist/auth/step-up/approve-response/0.5/payload.js +504 -0
  35. package/dist/auth/step-up/approve-response/0.5/payload.js.map +1 -0
  36. package/dist/backup/abort/0.1/payload.d.ts +262 -0
  37. package/dist/backup/abort/0.1/payload.d.ts.map +1 -0
  38. package/dist/backup/abort/0.1/payload.js +146 -0
  39. package/dist/backup/abort/0.1/payload.js.map +1 -0
  40. package/dist/backup/complete-export/0.1/payload.d.ts +262 -0
  41. package/dist/backup/complete-export/0.1/payload.d.ts.map +1 -0
  42. package/dist/backup/complete-export/0.1/payload.js +146 -0
  43. package/dist/backup/complete-export/0.1/payload.js.map +1 -0
  44. package/dist/backup/finalize-import/0.1/payload.d.ts +395 -0
  45. package/dist/backup/finalize-import/0.1/payload.d.ts.map +1 -0
  46. package/dist/backup/finalize-import/0.1/payload.js +209 -0
  47. package/dist/backup/finalize-import/0.1/payload.js.map +1 -0
  48. package/dist/backup/get-chunk/0.1/payload.d.ts +461 -0
  49. package/dist/backup/get-chunk/0.1/payload.d.ts.map +1 -0
  50. package/dist/backup/get-chunk/0.1/payload.js +250 -0
  51. package/dist/backup/get-chunk/0.1/payload.js.map +1 -0
  52. package/dist/backup/initiate-export/0.1/payload.d.ts +896 -0
  53. package/dist/backup/initiate-export/0.1/payload.d.ts.map +1 -0
  54. package/dist/backup/initiate-export/0.1/payload.js +507 -0
  55. package/dist/backup/initiate-export/0.1/payload.js.map +1 -0
  56. package/dist/backup/initiate-import/0.1/payload.d.ts +888 -0
  57. package/dist/backup/initiate-import/0.1/payload.d.ts.map +1 -0
  58. package/dist/backup/initiate-import/0.1/payload.js +504 -0
  59. package/dist/backup/initiate-import/0.1/payload.js.map +1 -0
  60. package/dist/backup/put-chunk/0.1/payload.d.ts +495 -0
  61. package/dist/backup/put-chunk/0.1/payload.d.ts.map +1 -0
  62. package/dist/backup/put-chunk/0.1/payload.js +265 -0
  63. package/dist/backup/put-chunk/0.1/payload.js.map +1 -0
  64. package/dist/device/list/0.1/payload.d.ts +4 -4
  65. package/dist/device/list/0.1/payload.d.ts.map +1 -1
  66. package/dist/device/list/0.1/payload.js +4 -2
  67. package/dist/device/list/0.1/payload.js.map +1 -1
  68. package/dist/device/list/0.2/payload.d.ts +4 -4
  69. package/dist/device/list/0.2/payload.d.ts.map +1 -1
  70. package/dist/device/list/0.2/payload.js +4 -2
  71. package/dist/device/list/0.2/payload.js.map +1 -1
  72. package/dist/device/register/0.1/payload.d.ts +4 -4
  73. package/dist/device/register/0.1/payload.d.ts.map +1 -1
  74. package/dist/device/register/0.1/payload.js +4 -2
  75. package/dist/device/register/0.1/payload.js.map +1 -1
  76. package/dist/device/register/0.2/payload.d.ts +4 -4
  77. package/dist/device/register/0.2/payload.d.ts.map +1 -1
  78. package/dist/device/register/0.2/payload.js +4 -2
  79. package/dist/device/register/0.2/payload.js.map +1 -1
  80. package/dist/git-ns/_shared/0.4/git-ns.d.ts +16 -0
  81. package/dist/git-ns/_shared/0.4/git-ns.d.ts.map +1 -0
  82. package/dist/git-ns/_shared/0.4/git-ns.js +6 -0
  83. package/dist/git-ns/_shared/0.4/git-ns.js.map +1 -0
  84. package/dist/git-ns/account/link-status/0.1/payload.d.ts +2 -2
  85. package/dist/git-ns/account/link-status/0.1/payload.js +2 -2
  86. package/dist/git-ns/account/link-status/0.1/payload.js.map +1 -1
  87. package/dist/git-ns/account/unlink/0.1/payload.d.ts +411 -0
  88. package/dist/git-ns/account/unlink/0.1/payload.d.ts.map +1 -0
  89. package/dist/git-ns/account/unlink/0.1/payload.js +228 -0
  90. package/dist/git-ns/account/unlink/0.1/payload.js.map +1 -0
  91. package/dist/git-ns/bridge/event/0.3/payload.d.ts +1682 -0
  92. package/dist/git-ns/bridge/event/0.3/payload.d.ts.map +1 -0
  93. package/dist/git-ns/bridge/event/0.3/payload.js +971 -0
  94. package/dist/git-ns/bridge/event/0.3/payload.js.map +1 -0
  95. package/dist/git-ns/bridge/job/0.4/payload.d.ts +1068 -0
  96. package/dist/git-ns/bridge/job/0.4/payload.d.ts.map +1 -0
  97. package/dist/git-ns/bridge/job/0.4/payload.js +573 -0
  98. package/dist/git-ns/bridge/job/0.4/payload.js.map +1 -0
  99. package/dist/git-ns/drift/resolve/0.3/payload.d.ts +1072 -0
  100. package/dist/git-ns/drift/resolve/0.3/payload.d.ts.map +1 -0
  101. package/dist/git-ns/drift/resolve/0.3/payload.js +634 -0
  102. package/dist/git-ns/drift/resolve/0.3/payload.js.map +1 -0
  103. package/dist/git-ns/namespace/reseat/0.3/payload.d.ts +515 -0
  104. package/dist/git-ns/namespace/reseat/0.3/payload.d.ts.map +1 -0
  105. package/dist/git-ns/namespace/reseat/0.3/payload.js +296 -0
  106. package/dist/git-ns/namespace/reseat/0.3/payload.js.map +1 -0
  107. package/dist/git-ns/repo/create/0.3/payload.d.ts +1101 -0
  108. package/dist/git-ns/repo/create/0.3/payload.d.ts.map +1 -0
  109. package/dist/git-ns/repo/create/0.3/payload.js +646 -0
  110. package/dist/git-ns/repo/create/0.3/payload.js.map +1 -0
  111. package/dist/git-ns/right/break-glass/0.1/payload.d.ts +685 -0
  112. package/dist/git-ns/right/break-glass/0.1/payload.d.ts.map +1 -0
  113. package/dist/git-ns/right/break-glass/0.1/payload.js +397 -0
  114. package/dist/git-ns/right/break-glass/0.1/payload.js.map +1 -0
  115. package/dist/git-ns/right/break-glass-notice/0.1/payload.d.ts +384 -0
  116. package/dist/git-ns/right/break-glass-notice/0.1/payload.d.ts.map +1 -0
  117. package/dist/git-ns/right/break-glass-notice/0.1/payload.js +216 -0
  118. package/dist/git-ns/right/break-glass-notice/0.1/payload.js.map +1 -0
  119. package/dist/git-ns/right/grant/0.3/payload.d.ts +678 -0
  120. package/dist/git-ns/right/grant/0.3/payload.d.ts.map +1 -0
  121. package/dist/git-ns/right/grant/0.3/payload.js +383 -0
  122. package/dist/git-ns/right/grant/0.3/payload.js.map +1 -0
  123. package/dist/git-ns/right/ratify/0.1/payload.d.ts +702 -0
  124. package/dist/git-ns/right/ratify/0.1/payload.d.ts.map +1 -0
  125. package/dist/git-ns/right/ratify/0.1/payload.js +404 -0
  126. package/dist/git-ns/right/ratify/0.1/payload.js.map +1 -0
  127. package/dist/git-ns/right/revoke/0.3/payload.d.ts +664 -0
  128. package/dist/git-ns/right/revoke/0.3/payload.d.ts.map +1 -0
  129. package/dist/git-ns/right/revoke/0.3/payload.js +378 -0
  130. package/dist/git-ns/right/revoke/0.3/payload.js.map +1 -0
  131. package/dist/git-ns/roles/reproject/0.1/payload.d.ts +325 -0
  132. package/dist/git-ns/roles/reproject/0.1/payload.d.ts.map +1 -0
  133. package/dist/git-ns/roles/reproject/0.1/payload.js +176 -0
  134. package/dist/git-ns/roles/reproject/0.1/payload.js.map +1 -0
  135. package/dist/git-ns/view/0.1/payload.d.ts +2 -2
  136. package/dist/git-ns/view/0.1/payload.js +2 -2
  137. package/dist/git-ns/view/0.1/payload.js.map +1 -1
  138. package/dist/git-ns/view/0.2/payload.d.ts +2 -2
  139. package/dist/git-ns/view/0.2/payload.js +2 -2
  140. package/dist/git-ns/view/0.2/payload.js.map +1 -1
  141. package/dist/git-ns/view/0.3/payload.d.ts +2 -2
  142. package/dist/git-ns/view/0.3/payload.js +2 -2
  143. package/dist/git-ns/view/0.3/payload.js.map +1 -1
  144. package/dist/git-ns/view/0.4/payload.d.ts +1696 -0
  145. package/dist/git-ns/view/0.4/payload.d.ts.map +1 -0
  146. package/dist/git-ns/view/0.4/payload.js +1012 -0
  147. package/dist/git-ns/view/0.4/payload.js.map +1 -0
  148. package/dist/index.d.ts +39 -0
  149. package/dist/index.d.ts.map +1 -1
  150. package/dist/index.js +39 -0
  151. package/dist/index.js.map +1 -1
  152. package/dist/messaging/message/status/0.1/payload.d.ts +372 -0
  153. package/dist/messaging/message/status/0.1/payload.d.ts.map +1 -0
  154. package/dist/messaging/message/status/0.1/payload.js +214 -0
  155. package/dist/messaging/message/status/0.1/payload.js.map +1 -0
  156. package/dist/vta/_shared/0.3/did-key-roles.d.ts +16 -0
  157. package/dist/vta/_shared/0.3/did-key-roles.d.ts.map +1 -0
  158. package/dist/vta/_shared/0.3/did-key-roles.js +6 -0
  159. package/dist/vta/_shared/0.3/did-key-roles.js.map +1 -0
  160. package/dist/vta/attestation/mnemonic-export/1.0/payload.d.ts +326 -0
  161. package/dist/vta/attestation/mnemonic-export/1.0/payload.d.ts.map +1 -0
  162. package/dist/vta/attestation/mnemonic-export/1.0/payload.js +175 -0
  163. package/dist/vta/attestation/mnemonic-export/1.0/payload.js.map +1 -0
  164. package/dist/vta/webvh/dids/keys/add/1.0/payload.d.ts +1914 -0
  165. package/dist/vta/webvh/dids/keys/add/1.0/payload.d.ts.map +1 -0
  166. package/dist/vta/webvh/dids/keys/add/1.0/payload.js +1128 -0
  167. package/dist/vta/webvh/dids/keys/add/1.0/payload.js.map +1 -0
  168. package/dist/vta/webvh/dids/keys/list/1.0/payload.d.ts +1603 -0
  169. package/dist/vta/webvh/dids/keys/list/1.0/payload.d.ts.map +1 -0
  170. package/dist/vta/webvh/dids/keys/list/1.0/payload.js +942 -0
  171. package/dist/vta/webvh/dids/keys/list/1.0/payload.js.map +1 -0
  172. package/dist/vta/webvh/dids/keys/retire/1.0/payload.d.ts +1914 -0
  173. package/dist/vta/webvh/dids/keys/retire/1.0/payload.d.ts.map +1 -0
  174. package/dist/vta/webvh/dids/keys/retire/1.0/payload.js +1123 -0
  175. package/dist/vta/webvh/dids/keys/retire/1.0/payload.js.map +1 -0
  176. package/dist/vta/webvh/dids/keys/revoke/1.0/payload.d.ts +2021 -0
  177. package/dist/vta/webvh/dids/keys/revoke/1.0/payload.d.ts.map +1 -0
  178. package/dist/vta/webvh/dids/keys/revoke/1.0/payload.js +1168 -0
  179. package/dist/vta/webvh/dids/keys/revoke/1.0/payload.js.map +1 -0
  180. package/dist/vta/webvh/dids/rotate-keys/2.0/payload.d.ts +1992 -0
  181. package/dist/vta/webvh/dids/rotate-keys/2.0/payload.d.ts.map +1 -0
  182. package/dist/vta/webvh/dids/rotate-keys/2.0/payload.js +1151 -0
  183. package/dist/vta/webvh/dids/rotate-keys/2.0/payload.js.map +1 -0
  184. package/dist/vta/webvh/dids/update/2.0/payload.d.ts +1062 -0
  185. package/dist/vta/webvh/dids/update/2.0/payload.d.ts.map +1 -0
  186. package/dist/vta/webvh/dids/update/2.0/payload.js +616 -0
  187. package/dist/vta/webvh/dids/update/2.0/payload.js.map +1 -0
  188. package/dist/vtc/credentials/reissue/0.1/payload.d.ts +502 -0
  189. package/dist/vtc/credentials/reissue/0.1/payload.d.ts.map +1 -0
  190. package/dist/vtc/credentials/reissue/0.1/payload.js +282 -0
  191. package/dist/vtc/credentials/reissue/0.1/payload.js.map +1 -0
  192. package/dist/vtc/members/personhood/challenge/0.1/payload.d.ts +2 -2
  193. package/dist/vtc/members/personhood/challenge/0.1/payload.js +2 -2
  194. package/dist/vtc/members/personhood/challenge/0.1/payload.js.map +1 -1
  195. package/dist/vtc/vetting/vetters/profile/0.1/payload.d.ts +2 -2
  196. package/dist/vtc/vetting/vetters/profile/0.1/payload.js +2 -2
  197. package/dist/vtc/vetting/vetters/profile/0.1/payload.js.map +1 -1
  198. package/dist/vtc/vetting/vetters/resend/0.1/payload.d.ts +2 -2
  199. package/dist/vtc/vetting/vetters/resend/0.1/payload.js +2 -2
  200. package/dist/vtc/vetting/vetters/resend/0.1/payload.js.map +1 -1
  201. package/package.json +1 -1
  202. package/src/_shared/components.ts +313 -2
  203. package/src/auth/passkey/enroll/invite/0.2/payload.ts +325 -0
  204. package/src/auth/passkey/enroll/redeem/finish/0.1/payload.ts +499 -0
  205. package/src/auth/passkey/enroll/redeem/start/0.1/payload.ts +700 -0
  206. package/src/auth/passkey/revoke/finish/0.2/payload.ts +379 -0
  207. package/src/auth/passkey/revoke/start/0.2/payload.ts +349 -0
  208. package/src/auth/step-up/approve-request/0.3/payload.ts +421 -0
  209. package/src/auth/step-up/approve-response/0.4/payload.ts +593 -0
  210. package/src/auth/step-up/approve-response/0.5/payload.ts +593 -0
  211. package/src/backup/abort/0.1/payload.ts +191 -0
  212. package/src/backup/complete-export/0.1/payload.ts +191 -0
  213. package/src/backup/finalize-import/0.1/payload.ts +279 -0
  214. package/src/backup/get-chunk/0.1/payload.ts +308 -0
  215. package/src/backup/initiate-export/0.1/payload.ts +564 -0
  216. package/src/backup/initiate-import/0.1/payload.ts +561 -0
  217. package/src/backup/put-chunk/0.1/payload.ts +331 -0
  218. package/src/device/list/0.1/payload.ts +4 -2
  219. package/src/device/list/0.2/payload.ts +4 -2
  220. package/src/device/register/0.1/payload.ts +4 -2
  221. package/src/device/register/0.2/payload.ts +4 -2
  222. package/src/git-ns/_shared/0.4/git-ns.ts +17 -0
  223. package/src/git-ns/account/link-status/0.1/payload.ts +2 -2
  224. package/src/git-ns/account/unlink/0.1/payload.ts +274 -0
  225. package/src/git-ns/bridge/event/0.3/payload.ts +1132 -0
  226. package/src/git-ns/bridge/job/0.4/payload.ts +691 -0
  227. package/src/git-ns/drift/resolve/0.3/payload.ts +707 -0
  228. package/src/git-ns/namespace/reseat/0.3/payload.ts +342 -0
  229. package/src/git-ns/repo/create/0.3/payload.ts +706 -0
  230. package/src/git-ns/right/break-glass/0.1/payload.ts +443 -0
  231. package/src/git-ns/right/break-glass-notice/0.1/payload.ts +258 -0
  232. package/src/git-ns/right/grant/0.3/payload.ts +434 -0
  233. package/src/git-ns/right/ratify/0.1/payload.ts +455 -0
  234. package/src/git-ns/right/revoke/0.3/payload.ts +425 -0
  235. package/src/git-ns/roles/reproject/0.1/payload.ts +220 -0
  236. package/src/git-ns/view/0.1/payload.ts +2 -2
  237. package/src/git-ns/view/0.2/payload.ts +2 -2
  238. package/src/git-ns/view/0.3/payload.ts +2 -2
  239. package/src/git-ns/view/0.4/payload.ts +1075 -0
  240. package/src/index.ts +39 -0
  241. package/src/messaging/message/status/0.1/payload.ts +270 -0
  242. package/src/vta/_shared/0.3/did-key-roles.ts +17 -0
  243. package/src/vta/attestation/mnemonic-export/1.0/payload.ts +232 -0
  244. package/src/vta/webvh/dids/keys/add/1.0/payload.ts +1217 -0
  245. package/src/vta/webvh/dids/keys/list/1.0/payload.ts +1004 -0
  246. package/src/vta/webvh/dids/keys/retire/1.0/payload.ts +1212 -0
  247. package/src/vta/webvh/dids/keys/revoke/1.0/payload.ts +1276 -0
  248. package/src/vta/webvh/dids/rotate-keys/2.0/payload.ts +1262 -0
  249. package/src/vta/webvh/dids/update/2.0/payload.ts +713 -0
  250. package/src/vtc/credentials/reissue/0.1/payload.ts +357 -0
  251. package/src/vtc/members/personhood/challenge/0.1/payload.ts +2 -2
  252. package/src/vtc/vetting/vetters/profile/0.1/payload.ts +2 -2
  253. package/src/vtc/vetting/vetters/resend/0.1/payload.ts +2 -2
@@ -0,0 +1,942 @@
1
+ /**
2
+ * Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
3
+ * Source: specs/vta/webvh/dids/keys/list/1.0/payload.schema.json
4
+ */
5
+ /** Trust Task type URI. */
6
+ export const TYPE_URI = "https://trusttasks.org/spec/vta/webvh/dids/keys/list/1.0";
7
+ /** Trust Task response type URI (request type URI + "#response"). */
8
+ export const RESPONSE_TYPE_URI = "https://trusttasks.org/spec/vta/webvh/dids/keys/list/1.0#response";
9
+ /**
10
+ * This specification's payload schema, as a value.
11
+ *
12
+ * SPEC.md §7.2 item 2 is performed against this. It is shipped as data
13
+ * rather than only as a `.json` file because TypeScript types are erased
14
+ * at runtime: without a schema a consumer has nothing to validate, and
15
+ * every REQUIRED payload member is optional in practice. Cross-file
16
+ * `$ref`s are already inlined, so it needs no resolver.
17
+ */
18
+ export const PAYLOAD_SCHEMA = {
19
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
20
+ "$id": "https://trusttasks.org/spec/vta/webvh/dids/keys/list/1.0",
21
+ "title": "VTA WebVH DIDs Keys List — payload",
22
+ "description": "List a did:webvh's keys by role, with their state, and optionally the DID's rotation history and any changes awaiting approval.",
23
+ "type": "object",
24
+ "additionalProperties": false,
25
+ "required": [
26
+ "did"
27
+ ],
28
+ "properties": {
29
+ "did": {
30
+ "type": "string",
31
+ "minLength": 1,
32
+ "description": "The DID whose key roles are listed."
33
+ },
34
+ "roles": {
35
+ "type": "array",
36
+ "items": {
37
+ "$ref": "#/$defs/KeyRole"
38
+ },
39
+ "uniqueItems": true,
40
+ "minItems": 1,
41
+ "description": "Return only these roles. Absent returns every role. Present-but-empty is refused by the schema rather than read as 'every role' — emptiness is never a wildcard."
42
+ },
43
+ "includeEnded": {
44
+ "type": "boolean",
45
+ "description": "Include `retired` and `revoked` keys. Absent reads as false. `revoked` keys still published in `verificationMethod` are always included, because the document shows them to anyone who resolves it."
46
+ },
47
+ "includeHistory": {
48
+ "type": "boolean",
49
+ "description": "Include the DID's rotation history. Absent reads as false."
50
+ },
51
+ "ext": {
52
+ "$ref": "#/$defs/Ext"
53
+ }
54
+ },
55
+ "$defs": {
56
+ "Response": {
57
+ "$anchor": "response",
58
+ "title": "VTA WebVH DIDs Keys List — response payload",
59
+ "description": "Success response to vta/webvh/dids/keys/list. Type https://trusttasks.org/spec/vta/webvh/dids/keys/list/1.0#response.",
60
+ "type": "object",
61
+ "additionalProperties": false,
62
+ "required": [
63
+ "did",
64
+ "versionId",
65
+ "projection",
66
+ "roles"
67
+ ],
68
+ "properties": {
69
+ "did": {
70
+ "type": "string"
71
+ },
72
+ "versionId": {
73
+ "type": "string",
74
+ "description": "The log entry the answer describes. Pass it as `expectedVersionId` to a change made on the strength of this answer."
75
+ },
76
+ "projection": {
77
+ "$ref": "#/$defs/KeyRoleProjection"
78
+ },
79
+ "roles": {
80
+ "type": "array",
81
+ "items": {
82
+ "$ref": "#/$defs/RoleSummary"
83
+ },
84
+ "description": "One entry per role asked for, including roles with no keys — an empty role is an answer, and omitting it would read as 'not asked'."
85
+ },
86
+ "rotations": {
87
+ "type": "array",
88
+ "items": {
89
+ "$ref": "#/$defs/RotationRecord"
90
+ },
91
+ "description": "Present exactly when `includeHistory` was true. Newest first. In the custody projection this includes changes in `pendingApproval`; in the public projection it includes only changes that published an entry."
92
+ },
93
+ "ext": {
94
+ "$ref": "#/$defs/Ext"
95
+ }
96
+ }
97
+ },
98
+ "Ext": {
99
+ "title": "Ext",
100
+ "description": "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.",
101
+ "type": "object",
102
+ "minProperties": 1,
103
+ "additionalProperties": true,
104
+ "propertyNames": {
105
+ "pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
106
+ }
107
+ },
108
+ "RotationRecord": {
109
+ "title": "RotationRecord",
110
+ "type": "object",
111
+ "additionalProperties": false,
112
+ "required": [
113
+ "rotationId",
114
+ "role",
115
+ "kind",
116
+ "state"
117
+ ],
118
+ "description": "One change to a role's key set, from preview to completion. The rotation history of a DID is the list of these; the log is the authority for what was published, and this record adds what the log cannot say — which change was which, and (custody projection only) who asked, who approved, and why.",
119
+ "properties": {
120
+ "rotationId": {
121
+ "type": "string",
122
+ "minLength": 1
123
+ },
124
+ "role": {
125
+ "$ref": "#/$defs/KeyRole"
126
+ },
127
+ "kind": {
128
+ "$ref": "#/$defs/RotationKind"
129
+ },
130
+ "state": {
131
+ "$ref": "#/$defs/RotationState"
132
+ },
133
+ "predecessors": {
134
+ "type": "array",
135
+ "items": {
136
+ "type": "string"
137
+ },
138
+ "description": "Verification-method identifiers (or, for `update`, public keys) leaving the role."
139
+ },
140
+ "successors": {
141
+ "type": "array",
142
+ "items": {
143
+ "type": "string"
144
+ },
145
+ "description": "Verification-method identifiers (or, for `update`, public keys) entering the role."
146
+ },
147
+ "startedInVersionId": {
148
+ "type": "string"
149
+ },
150
+ "endedInVersionId": {
151
+ "type": "string"
152
+ },
153
+ "startedAt": {
154
+ "type": "string",
155
+ "format": "date-time"
156
+ },
157
+ "overlapUntil": {
158
+ "type": "string",
159
+ "format": "date-time",
160
+ "description": "Custody projection only. End of the overlap window."
161
+ },
162
+ "autoRetire": {
163
+ "type": "boolean",
164
+ "description": "Custody projection only. Whether the VTA retires the predecessor itself at `overlapUntil`."
165
+ },
166
+ "endedAt": {
167
+ "type": "string",
168
+ "format": "date-time"
169
+ },
170
+ "initiatedBy": {
171
+ "type": "string",
172
+ "description": "Custody projection only. VID of the administrator whose signed request started the change."
173
+ },
174
+ "approvals": {
175
+ "$ref": "#/$defs/KeyRoleApprovalState",
176
+ "description": "Custody projection only."
177
+ },
178
+ "reason": {
179
+ "type": "string",
180
+ "maxLength": 1024,
181
+ "description": "Custody projection only. The operator's stated reason. Never published."
182
+ },
183
+ "ext": {
184
+ "$ref": "#/$defs/Ext"
185
+ },
186
+ "activatesAt": {
187
+ "type": "string",
188
+ "format": "date-time",
189
+ "description": "When the successor becomes `active` and the predecessor `retiring`; never before `cacheHorizonAt`."
190
+ },
191
+ "cacheHorizonAt": {
192
+ "type": "string",
193
+ "format": "date-time",
194
+ "description": "Planned rotations: the publishing entry's cache horizon — publication plus the longer of the document's TTL and the verifier cache cap (CONVENTIONS.md §11.1). The switch, and any retirement of the predecessor, happen no earlier. Public: it follows from the log and the published cap."
195
+ }
196
+ }
197
+ },
198
+ "KeyRoleApprovalState": {
199
+ "title": "KeyRoleApprovalState",
200
+ "type": "object",
201
+ "additionalProperties": false,
202
+ "required": [
203
+ "required",
204
+ "received",
205
+ "expiresAt"
206
+ ],
207
+ "description": "Approval progress of a change the VTA's policy gates on more than one approval (CONVENTIONS.md §3.3).",
208
+ "properties": {
209
+ "required": {
210
+ "type": "integer",
211
+ "minimum": 1,
212
+ "description": "Distinct approvals the VTA's policy requires."
213
+ },
214
+ "received": {
215
+ "type": "integer",
216
+ "minimum": 0,
217
+ "description": "Distinct approvals recorded so far, including the initiator's own."
218
+ },
219
+ "approvers": {
220
+ "type": "array",
221
+ "items": {
222
+ "type": "string"
223
+ },
224
+ "uniqueItems": true,
225
+ "description": "VIDs whose approvals were recorded. Custody projection only; omitted from a response to anyone who is not themselves an eligible approver of this change."
226
+ },
227
+ "expiresAt": {
228
+ "type": "string",
229
+ "format": "date-time",
230
+ "description": "When the preview, and every approval bound to it, stops being usable."
231
+ }
232
+ }
233
+ },
234
+ "RotationState": {
235
+ "title": "RotationState",
236
+ "type": "string",
237
+ "enum": [
238
+ "pendingApproval",
239
+ "staged",
240
+ "overlapping",
241
+ "completed",
242
+ "aborted",
243
+ "expired"
244
+ ],
245
+ "description": "`pendingApproval` — awaiting the approvals the VTA's policy requires; nothing is published. `staged` — successor published, not yet used; predecessor still active. `overlapping` — successor active, predecessor `retiring`. `completed` — every predecessor retired (or, for `compromise` and `addition`, the entry is published and any overlap it began has ended). `aborted` — the successor was retired instead of the predecessor, which stayed or returned to `active`. `expired` — approvals were not gathered before the preview expired; nothing was published."
246
+ },
247
+ "RotationKind": {
248
+ "title": "RotationKind",
249
+ "type": "string",
250
+ "enum": [
251
+ "planned",
252
+ "compromise",
253
+ "addition"
254
+ ],
255
+ "description": "`planned` — a successor was staged, activated, and the predecessor retired on the operator's schedule. `compromise` — a key was revoked and, where the role would otherwise be empty, replaced in the same log entry. `addition` — a key was added to a role without anything leaving it (for example a post-quantum key alongside a classical one)."
256
+ },
257
+ "KeyRole": {
258
+ "title": "KeyRole",
259
+ "type": "string",
260
+ "enum": [
261
+ "attestation",
262
+ "operational",
263
+ "messaging",
264
+ "update"
265
+ ],
266
+ "description": "The named key role a key occupies in the DID (VTI-KEY-070 onward). `attestation` — the only keys in `assertionMethod`; sign the DID's attestation artefacts (membership and role credentials, endorsements, status lists, every other credential the node issues), through the VTA's signing service and nowhere else. Generated inside the VTA, never derived, never exportable, never in a backup. `operational` — the only keys in `authentication`; sign the node's own traffic (Trust Task requests and responses, DIDComm and TSP message signatures, invitations, notices, audit checkpoints) with proof purpose `authentication`. `messaging` — the only keys in `keyAgreement`; sign nothing. `update` — the keys that authorize appending to the DID's log (a did:webvh `updateKeys` entry) and the pre-rotation commitments that authorize the next ones; never a verification method, never in `keyRoles`. Generated inside the VTA, never derived, never exportable, never in a backup. No role permits `capabilityInvocation` or `capabilityDelegation` (VTI-KEY-075); both are reserved for a future role. The mapping is normative and is set out in CONVENTIONS.md §1. The set is an extensible registry and growing it is a MINOR change: a consumer that receives a role it does not implement MUST refuse the document rather than map the key onto a role it does know."
267
+ },
268
+ "RoleSummary": {
269
+ "title": "RoleSummary",
270
+ "type": "object",
271
+ "additionalProperties": false,
272
+ "required": [
273
+ "role",
274
+ "relationships",
275
+ "keys"
276
+ ],
277
+ "properties": {
278
+ "role": {
279
+ "$ref": "#/$defs/KeyRole"
280
+ },
281
+ "relationships": {
282
+ "type": "array",
283
+ "items": {
284
+ "$ref": "#/$defs/DidVerificationRelationship"
285
+ },
286
+ "uniqueItems": true,
287
+ "description": "The relationship this role owns (CONVENTIONS.md §1). Empty for `update`."
288
+ },
289
+ "keys": {
290
+ "type": "array",
291
+ "items": {
292
+ "$ref": "#/$defs/RoleKey"
293
+ },
294
+ "description": "The role's keys, in the order the document publishes them. Terminal-state keys are included only when the request asked for them."
295
+ },
296
+ "preRotationCommitments": {
297
+ "type": "integer",
298
+ "minimum": 0,
299
+ "description": "`update` only: successors the latest entry commits to. `0` means a compromise of the current update key cannot be recovered from by rotation, and the DID would have to be deactivated (VTI-KEY-124)."
300
+ }
301
+ }
302
+ },
303
+ "RoleKey": {
304
+ "title": "RoleKey",
305
+ "type": "object",
306
+ "additionalProperties": false,
307
+ "required": [
308
+ "role",
309
+ "keyType",
310
+ "publicKeyMultibase",
311
+ "state"
312
+ ],
313
+ "description": "One key in one role. A key is in exactly one role for its whole life; a change of role is a retirement from one and an addition to another, under a new verification-method identifier.",
314
+ "properties": {
315
+ "verificationMethod": {
316
+ "type": "string",
317
+ "minLength": 1,
318
+ "description": "The full verification-method identifier (`did#fragment`) the document publishes the key under, and lists in `keyRoles`. Absent only for `update` keys, which are published as log parameters and never as verification methods (VTI-KEY-093). A VTA minting a new method SHOULD derive its fragment from the key (VTI-KEY-150)."
319
+ },
320
+ "role": {
321
+ "$ref": "#/$defs/KeyRole"
322
+ },
323
+ "relationships": {
324
+ "type": "array",
325
+ "items": {
326
+ "$ref": "#/$defs/DidVerificationRelationship"
327
+ },
328
+ "uniqueItems": true,
329
+ "description": "The relationships the key is (or, while `pending`, will be) listed in. Always exactly its role's single relationship (CONVENTIONS.md §1) — carried so a caller can check it against the document rather than trusting it. Empty for `update`, `retired` and `revoked` keys."
330
+ },
331
+ "keyType": {
332
+ "$ref": "#/$defs/KeyType"
333
+ },
334
+ "publicKeyMultibase": {
335
+ "type": "string",
336
+ "minLength": 1,
337
+ "description": "The public half, multibase-encoded, exactly as published."
338
+ },
339
+ "state": {
340
+ "$ref": "#/$defs/RoleKeyState"
341
+ },
342
+ "publishedInVersionId": {
343
+ "type": "string",
344
+ "description": "versionId of the log entry that first published the key. Absent while `pending`."
345
+ },
346
+ "removedInVersionId": {
347
+ "type": "string",
348
+ "description": "versionId of the log entry that retired or revoked the key."
349
+ },
350
+ "retireAfter": {
351
+ "type": "string",
352
+ "format": "date-time",
353
+ "description": "For a `retiring` key: the end of its overlap window. Custody projection only."
354
+ },
355
+ "compromisedSince": {
356
+ "type": "string",
357
+ "format": "date-time",
358
+ "description": "For a `revoked` key: the compromise time (VTI-KEY-121) — the earliest instant from which the key is treated as compromised. Where the operator cannot establish it, the time the key was first published. Published, because it is what a verifier needs."
359
+ },
360
+ "rotationId": {
361
+ "type": "string",
362
+ "description": "The rotation this key was introduced or retired by, when it was."
363
+ },
364
+ "label": {
365
+ "type": "string",
366
+ "maxLength": 256,
367
+ "description": "Operator-facing label. Custody projection only."
368
+ },
369
+ "custody": {
370
+ "$ref": "#/$defs/RoleKeyCustody"
371
+ },
372
+ "ext": {
373
+ "$ref": "#/$defs/Ext"
374
+ },
375
+ "activatesAt": {
376
+ "type": "string",
377
+ "format": "date-time",
378
+ "description": "For a `staged` key: when the VTA will begin using it — no earlier than the publishing entry's cache horizon (CONVENTIONS.md §11.1)."
379
+ }
380
+ }
381
+ },
382
+ "RoleKeyCustody": {
383
+ "title": "RoleKeyCustody",
384
+ "type": "object",
385
+ "additionalProperties": false,
386
+ "required": [
387
+ "keyId",
388
+ "exportable",
389
+ "neverExportable",
390
+ "inBackups"
391
+ ],
392
+ "description": "How the VTA holds a key. Present only in the custody projection. Carries no key material, and a conforming VTA MUST NOT place any in `ext`.",
393
+ "properties": {
394
+ "keyId": {
395
+ "type": "string",
396
+ "minLength": 1,
397
+ "description": "The custodian record identifier (`keys/*`'s `keyId`) behind this key."
398
+ },
399
+ "origin": {
400
+ "$ref": "#/$defs/KeyOrigin"
401
+ },
402
+ "exportable": {
403
+ "type": "boolean",
404
+ "description": "Whether the custodian would release the private half through `keys/export-secret`. Always `false` for `attestation` and `update` keys (CONVENTIONS.md §4). Stated explicitly — never absent — because this is the member an operator reads to confirm a role key cannot leave the VTA, and `keys/*`'s absent-means-exportable reading is the wrong default to leave them to infer."
405
+ },
406
+ "neverExportable": {
407
+ "type": "boolean",
408
+ "description": "True when no authority can make the key exportable — the role forbids it, or the material exists only inside a module that cannot release it. `true` implies `exportable: false`."
409
+ },
410
+ "hardwareBacked": {
411
+ "type": "boolean",
412
+ "description": "True when the private half is held by a hardware or enclave module that performs the operation without releasing it. Absent means the VTA does not say, not that it is false."
413
+ },
414
+ "inBackups": {
415
+ "type": "boolean",
416
+ "description": "Whether the key, or material it can be re-derived from, is included in the VTA's backups or any state transfer. Always `false` for `attestation` and `update` keys (VTI-KEY-112): they are generated, not derived, so there is no seed that recovers them, and their loss is recovered by rotation, never by restore."
417
+ },
418
+ "destroyed": {
419
+ "type": "boolean",
420
+ "description": "True once the private half has been destroyed — a retired `attestation` key (VTI-KEY-125). The record survives so the key's past signatures stay attributable."
421
+ }
422
+ }
423
+ },
424
+ "KeyOrigin": {
425
+ "title": "KeyOrigin",
426
+ "type": "string",
427
+ "enum": [
428
+ "derived",
429
+ "imported",
430
+ "internal"
431
+ ],
432
+ "description": "Where the private key came from. `derived` means the maintainer generated it from a seed it holds and can reproduce it from `derivationPath`; `imported` means it arrived from outside and exists only as stored material; `internal` means the maintainer generated it from a CSPRNG and it is reproducible from nothing at all. The distinction is operationally load-bearing: a `derived` key survives a seed restore, an `imported` one is lost unless it was backed up separately, and an `internal` one cannot be recovered by any means once the maintainer's storage is gone. This member is also the only way a consumer can confirm that a `keys/create` request for an `internal` key was honoured rather than silently downgraded to a derived one — see that specification's `internal` member.",
433
+ "default": "derived"
434
+ },
435
+ "RoleKeyState": {
436
+ "title": "RoleKeyState",
437
+ "type": "string",
438
+ "enum": [
439
+ "pending",
440
+ "staged",
441
+ "active",
442
+ "retiring",
443
+ "retired",
444
+ "revoked"
445
+ ],
446
+ "description": "Where a key is in its role's lifecycle. `pending` — planned by a preview or a change awaiting approval; not published; custody projection only. `staged` — published and bound to its role, but not yet used: a planned rotation publishes the successor and waits until the entry's cache horizon — publication plus the longer of the document's TTL and the verifier cache cap (CONVENTIONS.md §11.1) — before the VTA first uses it, so that no verifier holding a cached document sees a signature by a key it has never seen (VTI-KEY-122). Becomes `active` at the rotation's `activatesAt`. `active` — the key the VTA uses for new signatures (or, for `messaging`, advertises for new sessions). `retiring` — still published so that what it signed and sessions keyed to it keep working, but never used again: from the successor's first use the VTA MUST NOT sign with it, while a retiring `messaging` key stays usable for decryption, and senders may still encrypt to it, until it is retired (CONVENTIONS.md §11.3). `retired` — removed by planned rotation; what it signed while published remains valid, judged against the DID version current at issuance (CONVENTIONS.md §7). A retired `attestation` or `messaging` key is destroyed at retirement. `revoked` — removed from every relationship and from `keyRoles` in one entry, without overlap, because it is or may be compromised; what it signed from `compromisedSince` onward establishes nothing. `retired` and `revoked` are terminal."
447
+ },
448
+ "DidVerificationRelationship": {
449
+ "title": "DidVerificationRelationship",
450
+ "type": "string",
451
+ "enum": [
452
+ "authentication",
453
+ "assertionMethod",
454
+ "keyAgreement",
455
+ "capabilityInvocation",
456
+ "capabilityDelegation"
457
+ ],
458
+ "description": "A DID Core verification relationship."
459
+ },
460
+ "KeyType": {
461
+ "title": "KeyType",
462
+ "type": "string",
463
+ "enum": [
464
+ "ed25519",
465
+ "x25519",
466
+ "p256",
467
+ "mldsa44",
468
+ "mldsa65"
469
+ ],
470
+ "description": "Cryptographic algorithm the key material belongs to. `ed25519` signs (EdDSA), `x25519` performs key agreement and never signs, `p256` signs (ES256), and `mldsa44` and `mldsa65` sign with the post-quantum ML-DSA scheme of US NIST FIPS 204. The set is expected to grow as algorithms are standardised, and growing it is a MINOR change under SPEC.md §5.2: `keyType` selects no schema branch, so adding a value relaxes a constraint rather than narrowing one, and the generated libraries mark this enumeration non-exhaustive so that a consumer absorbs a new value rather than failing to compile. Two ML-DSA parameter sets are carried because two specifications require different ones — W3C Quantum-Resistant Cryptosuites defines Data Integrity suites only for ML-DSA-44, while Trust Spanning Protocol Rev 3 §8.1 mandates ML-DSA-65 — so the parameter set is chosen by whatever consumes the key and the two are not redundant. A consumer that does not implement a value it receives MUST refuse the document rather than substitute one it does support."
471
+ },
472
+ "KeyRoleProjection": {
473
+ "title": "KeyRoleProjection",
474
+ "type": "string",
475
+ "enum": [
476
+ "public",
477
+ "custody"
478
+ ],
479
+ "description": "Which view of the DID's key roles the caller was given (CONVENTIONS.md §5). `public` — only what the published document and log already reveal to anyone who resolves the DID. `custody` — additionally the VTA's own custody state: pending keys, the custodian record behind each key, overlap deadlines, who initiated and approved each change, and why. The response always states which it is, so a caller never mistakes an absent member for a statement that the thing does not exist."
480
+ }
481
+ }
482
+ };
483
+ /** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
484
+ export const RESPONSE_PAYLOAD_SCHEMA = {
485
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
486
+ "$ref": "#/$defs/Response",
487
+ "$defs": {
488
+ "Response": {
489
+ "$anchor": "response",
490
+ "title": "VTA WebVH DIDs Keys List — response payload",
491
+ "description": "Success response to vta/webvh/dids/keys/list. Type https://trusttasks.org/spec/vta/webvh/dids/keys/list/1.0#response.",
492
+ "type": "object",
493
+ "additionalProperties": false,
494
+ "required": [
495
+ "did",
496
+ "versionId",
497
+ "projection",
498
+ "roles"
499
+ ],
500
+ "properties": {
501
+ "did": {
502
+ "type": "string"
503
+ },
504
+ "versionId": {
505
+ "type": "string",
506
+ "description": "The log entry the answer describes. Pass it as `expectedVersionId` to a change made on the strength of this answer."
507
+ },
508
+ "projection": {
509
+ "$ref": "#/$defs/KeyRoleProjection"
510
+ },
511
+ "roles": {
512
+ "type": "array",
513
+ "items": {
514
+ "$ref": "#/$defs/RoleSummary"
515
+ },
516
+ "description": "One entry per role asked for, including roles with no keys — an empty role is an answer, and omitting it would read as 'not asked'."
517
+ },
518
+ "rotations": {
519
+ "type": "array",
520
+ "items": {
521
+ "$ref": "#/$defs/RotationRecord"
522
+ },
523
+ "description": "Present exactly when `includeHistory` was true. Newest first. In the custody projection this includes changes in `pendingApproval`; in the public projection it includes only changes that published an entry."
524
+ },
525
+ "ext": {
526
+ "$ref": "#/$defs/Ext"
527
+ }
528
+ }
529
+ },
530
+ "Ext": {
531
+ "title": "Ext",
532
+ "description": "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.",
533
+ "type": "object",
534
+ "minProperties": 1,
535
+ "additionalProperties": true,
536
+ "propertyNames": {
537
+ "pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
538
+ }
539
+ },
540
+ "RotationRecord": {
541
+ "title": "RotationRecord",
542
+ "type": "object",
543
+ "additionalProperties": false,
544
+ "required": [
545
+ "rotationId",
546
+ "role",
547
+ "kind",
548
+ "state"
549
+ ],
550
+ "description": "One change to a role's key set, from preview to completion. The rotation history of a DID is the list of these; the log is the authority for what was published, and this record adds what the log cannot say — which change was which, and (custody projection only) who asked, who approved, and why.",
551
+ "properties": {
552
+ "rotationId": {
553
+ "type": "string",
554
+ "minLength": 1
555
+ },
556
+ "role": {
557
+ "$ref": "#/$defs/KeyRole"
558
+ },
559
+ "kind": {
560
+ "$ref": "#/$defs/RotationKind"
561
+ },
562
+ "state": {
563
+ "$ref": "#/$defs/RotationState"
564
+ },
565
+ "predecessors": {
566
+ "type": "array",
567
+ "items": {
568
+ "type": "string"
569
+ },
570
+ "description": "Verification-method identifiers (or, for `update`, public keys) leaving the role."
571
+ },
572
+ "successors": {
573
+ "type": "array",
574
+ "items": {
575
+ "type": "string"
576
+ },
577
+ "description": "Verification-method identifiers (or, for `update`, public keys) entering the role."
578
+ },
579
+ "startedInVersionId": {
580
+ "type": "string"
581
+ },
582
+ "endedInVersionId": {
583
+ "type": "string"
584
+ },
585
+ "startedAt": {
586
+ "type": "string",
587
+ "format": "date-time"
588
+ },
589
+ "overlapUntil": {
590
+ "type": "string",
591
+ "format": "date-time",
592
+ "description": "Custody projection only. End of the overlap window."
593
+ },
594
+ "autoRetire": {
595
+ "type": "boolean",
596
+ "description": "Custody projection only. Whether the VTA retires the predecessor itself at `overlapUntil`."
597
+ },
598
+ "endedAt": {
599
+ "type": "string",
600
+ "format": "date-time"
601
+ },
602
+ "initiatedBy": {
603
+ "type": "string",
604
+ "description": "Custody projection only. VID of the administrator whose signed request started the change."
605
+ },
606
+ "approvals": {
607
+ "$ref": "#/$defs/KeyRoleApprovalState",
608
+ "description": "Custody projection only."
609
+ },
610
+ "reason": {
611
+ "type": "string",
612
+ "maxLength": 1024,
613
+ "description": "Custody projection only. The operator's stated reason. Never published."
614
+ },
615
+ "ext": {
616
+ "$ref": "#/$defs/Ext"
617
+ },
618
+ "activatesAt": {
619
+ "type": "string",
620
+ "format": "date-time",
621
+ "description": "When the successor becomes `active` and the predecessor `retiring`; never before `cacheHorizonAt`."
622
+ },
623
+ "cacheHorizonAt": {
624
+ "type": "string",
625
+ "format": "date-time",
626
+ "description": "Planned rotations: the publishing entry's cache horizon — publication plus the longer of the document's TTL and the verifier cache cap (CONVENTIONS.md §11.1). The switch, and any retirement of the predecessor, happen no earlier. Public: it follows from the log and the published cap."
627
+ }
628
+ }
629
+ },
630
+ "KeyRoleApprovalState": {
631
+ "title": "KeyRoleApprovalState",
632
+ "type": "object",
633
+ "additionalProperties": false,
634
+ "required": [
635
+ "required",
636
+ "received",
637
+ "expiresAt"
638
+ ],
639
+ "description": "Approval progress of a change the VTA's policy gates on more than one approval (CONVENTIONS.md §3.3).",
640
+ "properties": {
641
+ "required": {
642
+ "type": "integer",
643
+ "minimum": 1,
644
+ "description": "Distinct approvals the VTA's policy requires."
645
+ },
646
+ "received": {
647
+ "type": "integer",
648
+ "minimum": 0,
649
+ "description": "Distinct approvals recorded so far, including the initiator's own."
650
+ },
651
+ "approvers": {
652
+ "type": "array",
653
+ "items": {
654
+ "type": "string"
655
+ },
656
+ "uniqueItems": true,
657
+ "description": "VIDs whose approvals were recorded. Custody projection only; omitted from a response to anyone who is not themselves an eligible approver of this change."
658
+ },
659
+ "expiresAt": {
660
+ "type": "string",
661
+ "format": "date-time",
662
+ "description": "When the preview, and every approval bound to it, stops being usable."
663
+ }
664
+ }
665
+ },
666
+ "RotationState": {
667
+ "title": "RotationState",
668
+ "type": "string",
669
+ "enum": [
670
+ "pendingApproval",
671
+ "staged",
672
+ "overlapping",
673
+ "completed",
674
+ "aborted",
675
+ "expired"
676
+ ],
677
+ "description": "`pendingApproval` — awaiting the approvals the VTA's policy requires; nothing is published. `staged` — successor published, not yet used; predecessor still active. `overlapping` — successor active, predecessor `retiring`. `completed` — every predecessor retired (or, for `compromise` and `addition`, the entry is published and any overlap it began has ended). `aborted` — the successor was retired instead of the predecessor, which stayed or returned to `active`. `expired` — approvals were not gathered before the preview expired; nothing was published."
678
+ },
679
+ "RotationKind": {
680
+ "title": "RotationKind",
681
+ "type": "string",
682
+ "enum": [
683
+ "planned",
684
+ "compromise",
685
+ "addition"
686
+ ],
687
+ "description": "`planned` — a successor was staged, activated, and the predecessor retired on the operator's schedule. `compromise` — a key was revoked and, where the role would otherwise be empty, replaced in the same log entry. `addition` — a key was added to a role without anything leaving it (for example a post-quantum key alongside a classical one)."
688
+ },
689
+ "KeyRole": {
690
+ "title": "KeyRole",
691
+ "type": "string",
692
+ "enum": [
693
+ "attestation",
694
+ "operational",
695
+ "messaging",
696
+ "update"
697
+ ],
698
+ "description": "The named key role a key occupies in the DID (VTI-KEY-070 onward). `attestation` — the only keys in `assertionMethod`; sign the DID's attestation artefacts (membership and role credentials, endorsements, status lists, every other credential the node issues), through the VTA's signing service and nowhere else. Generated inside the VTA, never derived, never exportable, never in a backup. `operational` — the only keys in `authentication`; sign the node's own traffic (Trust Task requests and responses, DIDComm and TSP message signatures, invitations, notices, audit checkpoints) with proof purpose `authentication`. `messaging` — the only keys in `keyAgreement`; sign nothing. `update` — the keys that authorize appending to the DID's log (a did:webvh `updateKeys` entry) and the pre-rotation commitments that authorize the next ones; never a verification method, never in `keyRoles`. Generated inside the VTA, never derived, never exportable, never in a backup. No role permits `capabilityInvocation` or `capabilityDelegation` (VTI-KEY-075); both are reserved for a future role. The mapping is normative and is set out in CONVENTIONS.md §1. The set is an extensible registry and growing it is a MINOR change: a consumer that receives a role it does not implement MUST refuse the document rather than map the key onto a role it does know."
699
+ },
700
+ "RoleSummary": {
701
+ "title": "RoleSummary",
702
+ "type": "object",
703
+ "additionalProperties": false,
704
+ "required": [
705
+ "role",
706
+ "relationships",
707
+ "keys"
708
+ ],
709
+ "properties": {
710
+ "role": {
711
+ "$ref": "#/$defs/KeyRole"
712
+ },
713
+ "relationships": {
714
+ "type": "array",
715
+ "items": {
716
+ "$ref": "#/$defs/DidVerificationRelationship"
717
+ },
718
+ "uniqueItems": true,
719
+ "description": "The relationship this role owns (CONVENTIONS.md §1). Empty for `update`."
720
+ },
721
+ "keys": {
722
+ "type": "array",
723
+ "items": {
724
+ "$ref": "#/$defs/RoleKey"
725
+ },
726
+ "description": "The role's keys, in the order the document publishes them. Terminal-state keys are included only when the request asked for them."
727
+ },
728
+ "preRotationCommitments": {
729
+ "type": "integer",
730
+ "minimum": 0,
731
+ "description": "`update` only: successors the latest entry commits to. `0` means a compromise of the current update key cannot be recovered from by rotation, and the DID would have to be deactivated (VTI-KEY-124)."
732
+ }
733
+ }
734
+ },
735
+ "RoleKey": {
736
+ "title": "RoleKey",
737
+ "type": "object",
738
+ "additionalProperties": false,
739
+ "required": [
740
+ "role",
741
+ "keyType",
742
+ "publicKeyMultibase",
743
+ "state"
744
+ ],
745
+ "description": "One key in one role. A key is in exactly one role for its whole life; a change of role is a retirement from one and an addition to another, under a new verification-method identifier.",
746
+ "properties": {
747
+ "verificationMethod": {
748
+ "type": "string",
749
+ "minLength": 1,
750
+ "description": "The full verification-method identifier (`did#fragment`) the document publishes the key under, and lists in `keyRoles`. Absent only for `update` keys, which are published as log parameters and never as verification methods (VTI-KEY-093). A VTA minting a new method SHOULD derive its fragment from the key (VTI-KEY-150)."
751
+ },
752
+ "role": {
753
+ "$ref": "#/$defs/KeyRole"
754
+ },
755
+ "relationships": {
756
+ "type": "array",
757
+ "items": {
758
+ "$ref": "#/$defs/DidVerificationRelationship"
759
+ },
760
+ "uniqueItems": true,
761
+ "description": "The relationships the key is (or, while `pending`, will be) listed in. Always exactly its role's single relationship (CONVENTIONS.md §1) — carried so a caller can check it against the document rather than trusting it. Empty for `update`, `retired` and `revoked` keys."
762
+ },
763
+ "keyType": {
764
+ "$ref": "#/$defs/KeyType"
765
+ },
766
+ "publicKeyMultibase": {
767
+ "type": "string",
768
+ "minLength": 1,
769
+ "description": "The public half, multibase-encoded, exactly as published."
770
+ },
771
+ "state": {
772
+ "$ref": "#/$defs/RoleKeyState"
773
+ },
774
+ "publishedInVersionId": {
775
+ "type": "string",
776
+ "description": "versionId of the log entry that first published the key. Absent while `pending`."
777
+ },
778
+ "removedInVersionId": {
779
+ "type": "string",
780
+ "description": "versionId of the log entry that retired or revoked the key."
781
+ },
782
+ "retireAfter": {
783
+ "type": "string",
784
+ "format": "date-time",
785
+ "description": "For a `retiring` key: the end of its overlap window. Custody projection only."
786
+ },
787
+ "compromisedSince": {
788
+ "type": "string",
789
+ "format": "date-time",
790
+ "description": "For a `revoked` key: the compromise time (VTI-KEY-121) — the earliest instant from which the key is treated as compromised. Where the operator cannot establish it, the time the key was first published. Published, because it is what a verifier needs."
791
+ },
792
+ "rotationId": {
793
+ "type": "string",
794
+ "description": "The rotation this key was introduced or retired by, when it was."
795
+ },
796
+ "label": {
797
+ "type": "string",
798
+ "maxLength": 256,
799
+ "description": "Operator-facing label. Custody projection only."
800
+ },
801
+ "custody": {
802
+ "$ref": "#/$defs/RoleKeyCustody"
803
+ },
804
+ "ext": {
805
+ "$ref": "#/$defs/Ext"
806
+ },
807
+ "activatesAt": {
808
+ "type": "string",
809
+ "format": "date-time",
810
+ "description": "For a `staged` key: when the VTA will begin using it — no earlier than the publishing entry's cache horizon (CONVENTIONS.md §11.1)."
811
+ }
812
+ }
813
+ },
814
+ "RoleKeyCustody": {
815
+ "title": "RoleKeyCustody",
816
+ "type": "object",
817
+ "additionalProperties": false,
818
+ "required": [
819
+ "keyId",
820
+ "exportable",
821
+ "neverExportable",
822
+ "inBackups"
823
+ ],
824
+ "description": "How the VTA holds a key. Present only in the custody projection. Carries no key material, and a conforming VTA MUST NOT place any in `ext`.",
825
+ "properties": {
826
+ "keyId": {
827
+ "type": "string",
828
+ "minLength": 1,
829
+ "description": "The custodian record identifier (`keys/*`'s `keyId`) behind this key."
830
+ },
831
+ "origin": {
832
+ "$ref": "#/$defs/KeyOrigin"
833
+ },
834
+ "exportable": {
835
+ "type": "boolean",
836
+ "description": "Whether the custodian would release the private half through `keys/export-secret`. Always `false` for `attestation` and `update` keys (CONVENTIONS.md §4). Stated explicitly — never absent — because this is the member an operator reads to confirm a role key cannot leave the VTA, and `keys/*`'s absent-means-exportable reading is the wrong default to leave them to infer."
837
+ },
838
+ "neverExportable": {
839
+ "type": "boolean",
840
+ "description": "True when no authority can make the key exportable — the role forbids it, or the material exists only inside a module that cannot release it. `true` implies `exportable: false`."
841
+ },
842
+ "hardwareBacked": {
843
+ "type": "boolean",
844
+ "description": "True when the private half is held by a hardware or enclave module that performs the operation without releasing it. Absent means the VTA does not say, not that it is false."
845
+ },
846
+ "inBackups": {
847
+ "type": "boolean",
848
+ "description": "Whether the key, or material it can be re-derived from, is included in the VTA's backups or any state transfer. Always `false` for `attestation` and `update` keys (VTI-KEY-112): they are generated, not derived, so there is no seed that recovers them, and their loss is recovered by rotation, never by restore."
849
+ },
850
+ "destroyed": {
851
+ "type": "boolean",
852
+ "description": "True once the private half has been destroyed — a retired `attestation` key (VTI-KEY-125). The record survives so the key's past signatures stay attributable."
853
+ }
854
+ }
855
+ },
856
+ "KeyOrigin": {
857
+ "title": "KeyOrigin",
858
+ "type": "string",
859
+ "enum": [
860
+ "derived",
861
+ "imported",
862
+ "internal"
863
+ ],
864
+ "description": "Where the private key came from. `derived` means the maintainer generated it from a seed it holds and can reproduce it from `derivationPath`; `imported` means it arrived from outside and exists only as stored material; `internal` means the maintainer generated it from a CSPRNG and it is reproducible from nothing at all. The distinction is operationally load-bearing: a `derived` key survives a seed restore, an `imported` one is lost unless it was backed up separately, and an `internal` one cannot be recovered by any means once the maintainer's storage is gone. This member is also the only way a consumer can confirm that a `keys/create` request for an `internal` key was honoured rather than silently downgraded to a derived one — see that specification's `internal` member.",
865
+ "default": "derived"
866
+ },
867
+ "RoleKeyState": {
868
+ "title": "RoleKeyState",
869
+ "type": "string",
870
+ "enum": [
871
+ "pending",
872
+ "staged",
873
+ "active",
874
+ "retiring",
875
+ "retired",
876
+ "revoked"
877
+ ],
878
+ "description": "Where a key is in its role's lifecycle. `pending` — planned by a preview or a change awaiting approval; not published; custody projection only. `staged` — published and bound to its role, but not yet used: a planned rotation publishes the successor and waits until the entry's cache horizon — publication plus the longer of the document's TTL and the verifier cache cap (CONVENTIONS.md §11.1) — before the VTA first uses it, so that no verifier holding a cached document sees a signature by a key it has never seen (VTI-KEY-122). Becomes `active` at the rotation's `activatesAt`. `active` — the key the VTA uses for new signatures (or, for `messaging`, advertises for new sessions). `retiring` — still published so that what it signed and sessions keyed to it keep working, but never used again: from the successor's first use the VTA MUST NOT sign with it, while a retiring `messaging` key stays usable for decryption, and senders may still encrypt to it, until it is retired (CONVENTIONS.md §11.3). `retired` — removed by planned rotation; what it signed while published remains valid, judged against the DID version current at issuance (CONVENTIONS.md §7). A retired `attestation` or `messaging` key is destroyed at retirement. `revoked` — removed from every relationship and from `keyRoles` in one entry, without overlap, because it is or may be compromised; what it signed from `compromisedSince` onward establishes nothing. `retired` and `revoked` are terminal."
879
+ },
880
+ "DidVerificationRelationship": {
881
+ "title": "DidVerificationRelationship",
882
+ "type": "string",
883
+ "enum": [
884
+ "authentication",
885
+ "assertionMethod",
886
+ "keyAgreement",
887
+ "capabilityInvocation",
888
+ "capabilityDelegation"
889
+ ],
890
+ "description": "A DID Core verification relationship."
891
+ },
892
+ "KeyType": {
893
+ "title": "KeyType",
894
+ "type": "string",
895
+ "enum": [
896
+ "ed25519",
897
+ "x25519",
898
+ "p256",
899
+ "mldsa44",
900
+ "mldsa65"
901
+ ],
902
+ "description": "Cryptographic algorithm the key material belongs to. `ed25519` signs (EdDSA), `x25519` performs key agreement and never signs, `p256` signs (ES256), and `mldsa44` and `mldsa65` sign with the post-quantum ML-DSA scheme of US NIST FIPS 204. The set is expected to grow as algorithms are standardised, and growing it is a MINOR change under SPEC.md §5.2: `keyType` selects no schema branch, so adding a value relaxes a constraint rather than narrowing one, and the generated libraries mark this enumeration non-exhaustive so that a consumer absorbs a new value rather than failing to compile. Two ML-DSA parameter sets are carried because two specifications require different ones — W3C Quantum-Resistant Cryptosuites defines Data Integrity suites only for ML-DSA-44, while Trust Spanning Protocol Rev 3 §8.1 mandates ML-DSA-65 — so the parameter set is chosen by whatever consumes the key and the two are not redundant. A consumer that does not implement a value it receives MUST refuse the document rather than substitute one it does support."
903
+ },
904
+ "KeyRoleProjection": {
905
+ "title": "KeyRoleProjection",
906
+ "type": "string",
907
+ "enum": [
908
+ "public",
909
+ "custody"
910
+ ],
911
+ "description": "Which view of the DID's key roles the caller was given (CONVENTIONS.md §5). `public` — only what the published document and log already reveal to anyone who resolves the DID. `custody` — additionally the VTA's own custody state: pending keys, the custodian record behind each key, overlap deadlines, who initiated and approved each change, and why. The response always states which it is, so a caller never mistakes an absent member for a statement that the thing does not exist."
912
+ }
913
+ }
914
+ };
915
+ /**
916
+ * SPEC.md §7.2 policy for the request variant, from this specification's
917
+ * front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
918
+ * per-specification and cannot be derived from the document alone, and
919
+ * item 2 needs the schema this carries.
920
+ */
921
+ export const SPEC = {
922
+ typeUri: TYPE_URI,
923
+ isBearer: false,
924
+ isProofRequired: false,
925
+ isRecipientRequired: true,
926
+ isIssuedAtRequired: false,
927
+ payloadSchema: PAYLOAD_SCHEMA,
928
+ };
929
+ /**
930
+ * SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
931
+ * tracks the *issuer* party's requirement because a response swaps the
932
+ * parties (§7.3 item 5).
933
+ */
934
+ export const RESPONSE_SPEC = {
935
+ typeUri: RESPONSE_TYPE_URI,
936
+ isBearer: false,
937
+ isProofRequired: false,
938
+ isRecipientRequired: true,
939
+ isIssuedAtRequired: false,
940
+ payloadSchema: RESPONSE_PAYLOAD_SCHEMA,
941
+ };
942
+ //# sourceMappingURL=payload.js.map