@openvtc/trust-tasks 0.23.8 → 0.23.9

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 (298) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/_shared/components.d.ts +2451 -4
  3. package/dist/_shared/components.d.ts.map +1 -1
  4. package/dist/auth/oob/_shared/0.1/oob.d.ts +16 -0
  5. package/dist/auth/oob/_shared/0.1/oob.d.ts.map +1 -0
  6. package/dist/auth/oob/_shared/0.1/oob.js +6 -0
  7. package/dist/auth/oob/_shared/0.1/oob.js.map +1 -0
  8. package/dist/auth/oob/cancel/0.1/payload.d.ts +262 -0
  9. package/dist/auth/oob/cancel/0.1/payload.d.ts.map +1 -0
  10. package/dist/auth/oob/cancel/0.1/payload.js +153 -0
  11. package/dist/auth/oob/cancel/0.1/payload.js.map +1 -0
  12. package/dist/auth/oob/claim/0.1/payload.d.ts +463 -0
  13. package/dist/auth/oob/claim/0.1/payload.d.ts.map +1 -0
  14. package/dist/auth/oob/claim/0.1/payload.js +264 -0
  15. package/dist/auth/oob/claim/0.1/payload.js.map +1 -0
  16. package/dist/auth/oob/grant/0.1/payload.d.ts +212 -0
  17. package/dist/auth/oob/grant/0.1/payload.d.ts.map +1 -0
  18. package/dist/auth/oob/grant/0.1/payload.js +117 -0
  19. package/dist/auth/oob/grant/0.1/payload.js.map +1 -0
  20. package/dist/auth/oob/identify/0.1/payload.d.ts +145 -0
  21. package/dist/auth/oob/identify/0.1/payload.d.ts.map +1 -0
  22. package/dist/auth/oob/identify/0.1/payload.js +81 -0
  23. package/dist/auth/oob/identify/0.1/payload.js.map +1 -0
  24. package/dist/auth/oob/prove/0.1/payload.d.ts +740 -0
  25. package/dist/auth/oob/prove/0.1/payload.d.ts.map +1 -0
  26. package/dist/auth/oob/prove/0.1/payload.js +422 -0
  27. package/dist/auth/oob/prove/0.1/payload.js.map +1 -0
  28. package/dist/auth/oob/redeem/0.1/payload.d.ts +364 -0
  29. package/dist/auth/oob/redeem/0.1/payload.d.ts.map +1 -0
  30. package/dist/auth/oob/redeem/0.1/payload.js +199 -0
  31. package/dist/auth/oob/redeem/0.1/payload.js.map +1 -0
  32. package/dist/auth/oob/request/0.1/payload.d.ts +330 -0
  33. package/dist/auth/oob/request/0.1/payload.d.ts.map +1 -0
  34. package/dist/auth/oob/request/0.1/payload.js +193 -0
  35. package/dist/auth/oob/request/0.1/payload.js.map +1 -0
  36. package/dist/auth/oob/respond/0.1/payload.d.ts +235 -0
  37. package/dist/auth/oob/respond/0.1/payload.d.ts.map +1 -0
  38. package/dist/auth/oob/respond/0.1/payload.js +140 -0
  39. package/dist/auth/oob/respond/0.1/payload.js.map +1 -0
  40. package/dist/device/list/0.1/payload.d.ts +4 -4
  41. package/dist/device/list/0.1/payload.d.ts.map +1 -1
  42. package/dist/device/list/0.1/payload.js +6 -2
  43. package/dist/device/list/0.1/payload.js.map +1 -1
  44. package/dist/device/list/0.2/payload.d.ts +4 -4
  45. package/dist/device/list/0.2/payload.d.ts.map +1 -1
  46. package/dist/device/list/0.2/payload.js +6 -2
  47. package/dist/device/list/0.2/payload.js.map +1 -1
  48. package/dist/device/register/0.1/payload.d.ts +4 -4
  49. package/dist/device/register/0.1/payload.d.ts.map +1 -1
  50. package/dist/device/register/0.1/payload.js +6 -2
  51. package/dist/device/register/0.1/payload.js.map +1 -1
  52. package/dist/device/register/0.2/payload.d.ts +4 -4
  53. package/dist/device/register/0.2/payload.d.ts.map +1 -1
  54. package/dist/device/register/0.2/payload.js +6 -2
  55. package/dist/device/register/0.2/payload.js.map +1 -1
  56. package/dist/external/_shared/0.1/accounts.d.ts +18 -0
  57. package/dist/external/_shared/0.1/accounts.d.ts.map +1 -0
  58. package/dist/external/_shared/0.1/accounts.js +6 -0
  59. package/dist/external/_shared/0.1/accounts.js.map +1 -0
  60. package/dist/external/accounts/archive/0.1/payload.d.ts +2945 -0
  61. package/dist/external/accounts/archive/0.1/payload.d.ts.map +1 -0
  62. package/dist/external/accounts/archive/0.1/payload.js +1736 -0
  63. package/dist/external/accounts/archive/0.1/payload.js.map +1 -0
  64. package/dist/external/accounts/bindings/grant/0.1/payload.d.ts +2938 -0
  65. package/dist/external/accounts/bindings/grant/0.1/payload.d.ts.map +1 -0
  66. package/dist/external/accounts/bindings/grant/0.1/payload.js +1735 -0
  67. package/dist/external/accounts/bindings/grant/0.1/payload.js.map +1 -0
  68. package/dist/external/accounts/bindings/revoke/0.1/payload.d.ts +2958 -0
  69. package/dist/external/accounts/bindings/revoke/0.1/payload.d.ts.map +1 -0
  70. package/dist/external/accounts/bindings/revoke/0.1/payload.js +1743 -0
  71. package/dist/external/accounts/bindings/revoke/0.1/payload.js.map +1 -0
  72. package/dist/external/accounts/create/0.1/payload.d.ts +2954 -0
  73. package/dist/external/accounts/create/0.1/payload.d.ts.map +1 -0
  74. package/dist/external/accounts/create/0.1/payload.js +1742 -0
  75. package/dist/external/accounts/create/0.1/payload.js.map +1 -0
  76. package/dist/external/accounts/delete/0.1/payload.d.ts +310 -0
  77. package/dist/external/accounts/delete/0.1/payload.d.ts.map +1 -0
  78. package/dist/external/accounts/delete/0.1/payload.js +176 -0
  79. package/dist/external/accounts/delete/0.1/payload.js.map +1 -0
  80. package/dist/external/accounts/get/0.1/payload.d.ts +2931 -0
  81. package/dist/external/accounts/get/0.1/payload.d.ts.map +1 -0
  82. package/dist/external/accounts/get/0.1/payload.js +1731 -0
  83. package/dist/external/accounts/get/0.1/payload.js.map +1 -0
  84. package/dist/external/accounts/keys/rotate/0.1/payload.d.ts +3216 -0
  85. package/dist/external/accounts/keys/rotate/0.1/payload.d.ts.map +1 -0
  86. package/dist/external/accounts/keys/rotate/0.1/payload.js +1912 -0
  87. package/dist/external/accounts/keys/rotate/0.1/payload.js.map +1 -0
  88. package/dist/external/accounts/list/0.1/payload.d.ts +3034 -0
  89. package/dist/external/accounts/list/0.1/payload.d.ts.map +1 -0
  90. package/dist/external/accounts/list/0.1/payload.js +1791 -0
  91. package/dist/external/accounts/list/0.1/payload.js.map +1 -0
  92. package/dist/external/accounts/probe/0.1/payload.d.ts +511 -0
  93. package/dist/external/accounts/probe/0.1/payload.d.ts.map +1 -0
  94. package/dist/external/accounts/probe/0.1/payload.js +307 -0
  95. package/dist/external/accounts/probe/0.1/payload.js.map +1 -0
  96. package/dist/external/accounts/restore/0.1/payload.d.ts +2945 -0
  97. package/dist/external/accounts/restore/0.1/payload.d.ts.map +1 -0
  98. package/dist/external/accounts/restore/0.1/payload.js +1736 -0
  99. package/dist/external/accounts/restore/0.1/payload.js.map +1 -0
  100. package/dist/external/accounts/resume/0.1/payload.d.ts +2945 -0
  101. package/dist/external/accounts/resume/0.1/payload.d.ts.map +1 -0
  102. package/dist/external/accounts/resume/0.1/payload.js +1736 -0
  103. package/dist/external/accounts/resume/0.1/payload.js.map +1 -0
  104. package/dist/external/accounts/secret/set/0.1/payload.d.ts +379 -0
  105. package/dist/external/accounts/secret/set/0.1/payload.d.ts.map +1 -0
  106. package/dist/external/accounts/secret/set/0.1/payload.js +212 -0
  107. package/dist/external/accounts/secret/set/0.1/payload.js.map +1 -0
  108. package/dist/external/accounts/setup/0.1/payload.d.ts +535 -0
  109. package/dist/external/accounts/setup/0.1/payload.d.ts.map +1 -0
  110. package/dist/external/accounts/setup/0.1/payload.js +325 -0
  111. package/dist/external/accounts/setup/0.1/payload.js.map +1 -0
  112. package/dist/external/accounts/suspend/0.1/payload.d.ts +2945 -0
  113. package/dist/external/accounts/suspend/0.1/payload.d.ts.map +1 -0
  114. package/dist/external/accounts/suspend/0.1/payload.js +1736 -0
  115. package/dist/external/accounts/suspend/0.1/payload.js.map +1 -0
  116. package/dist/external/accounts/update/0.1/payload.d.ts +2949 -0
  117. package/dist/external/accounts/update/0.1/payload.d.ts.map +1 -0
  118. package/dist/external/accounts/update/0.1/payload.js +1739 -0
  119. package/dist/external/accounts/update/0.1/payload.js.map +1 -0
  120. package/dist/external/credentials/issue/0.1/payload.d.ts +586 -0
  121. package/dist/external/credentials/issue/0.1/payload.d.ts.map +1 -0
  122. package/dist/external/credentials/issue/0.1/payload.js +322 -0
  123. package/dist/external/credentials/issue/0.1/payload.js.map +1 -0
  124. package/dist/external/sign/0.1/payload.d.ts +348 -0
  125. package/dist/external/sign/0.1/payload.d.ts.map +1 -0
  126. package/dist/external/sign/0.1/payload.js +193 -0
  127. package/dist/external/sign/0.1/payload.js.map +1 -0
  128. package/dist/index.d.ts +53 -0
  129. package/dist/index.d.ts.map +1 -1
  130. package/dist/index.js +53 -0
  131. package/dist/index.js.map +1 -1
  132. package/dist/rooms/_shared/0.1/blobs.d.ts +16 -0
  133. package/dist/rooms/_shared/0.1/blobs.d.ts.map +1 -0
  134. package/dist/rooms/_shared/0.1/blobs.js +6 -0
  135. package/dist/rooms/_shared/0.1/blobs.js.map +1 -0
  136. package/dist/rooms/_shared/0.1/room.d.ts +1 -1
  137. package/dist/rooms/_shared/0.1/room.d.ts.map +1 -1
  138. package/dist/rooms/blobs/chunk/0.1/payload.d.ts +375 -0
  139. package/dist/rooms/blobs/chunk/0.1/payload.d.ts.map +1 -0
  140. package/dist/rooms/blobs/chunk/0.1/payload.js +213 -0
  141. package/dist/rooms/blobs/chunk/0.1/payload.js.map +1 -0
  142. package/dist/rooms/blobs/get/0.1/payload.d.ts +743 -0
  143. package/dist/rooms/blobs/get/0.1/payload.d.ts.map +1 -0
  144. package/dist/rooms/blobs/get/0.1/payload.js +415 -0
  145. package/dist/rooms/blobs/get/0.1/payload.js.map +1 -0
  146. package/dist/rooms/blobs/upload/abort/0.1/payload.d.ts +263 -0
  147. package/dist/rooms/blobs/upload/abort/0.1/payload.d.ts.map +1 -0
  148. package/dist/rooms/blobs/upload/abort/0.1/payload.js +151 -0
  149. package/dist/rooms/blobs/upload/abort/0.1/payload.js.map +1 -0
  150. package/dist/rooms/blobs/upload/begin/0.1/payload.d.ts +793 -0
  151. package/dist/rooms/blobs/upload/begin/0.1/payload.d.ts.map +1 -0
  152. package/dist/rooms/blobs/upload/begin/0.1/payload.js +437 -0
  153. package/dist/rooms/blobs/upload/begin/0.1/payload.js.map +1 -0
  154. package/dist/rooms/blobs/upload/chunk/0.1/payload.d.ts +459 -0
  155. package/dist/rooms/blobs/upload/chunk/0.1/payload.d.ts.map +1 -0
  156. package/dist/rooms/blobs/upload/chunk/0.1/payload.js +256 -0
  157. package/dist/rooms/blobs/upload/chunk/0.1/payload.js.map +1 -0
  158. package/dist/rooms/blobs/upload/commit/0.1/payload.d.ts +326 -0
  159. package/dist/rooms/blobs/upload/commit/0.1/payload.d.ts.map +1 -0
  160. package/dist/rooms/blobs/upload/commit/0.1/payload.js +185 -0
  161. package/dist/rooms/blobs/upload/commit/0.1/payload.js.map +1 -0
  162. package/dist/rooms/info/0.1/payload.d.ts +897 -0
  163. package/dist/rooms/info/0.1/payload.d.ts.map +1 -0
  164. package/dist/rooms/info/0.1/payload.js +498 -0
  165. package/dist/rooms/info/0.1/payload.js.map +1 -0
  166. package/dist/rooms/keys/file-key/0.1/payload.d.ts +306 -0
  167. package/dist/rooms/keys/file-key/0.1/payload.d.ts.map +1 -0
  168. package/dist/rooms/keys/file-key/0.1/payload.js +167 -0
  169. package/dist/rooms/keys/file-key/0.1/payload.js.map +1 -0
  170. package/dist/rooms/records/get/0.2/payload.d.ts +954 -0
  171. package/dist/rooms/records/get/0.2/payload.d.ts.map +1 -0
  172. package/dist/rooms/records/get/0.2/payload.js +515 -0
  173. package/dist/rooms/records/get/0.2/payload.js.map +1 -0
  174. package/dist/rooms/records/list/0.2/payload.d.ts +854 -0
  175. package/dist/rooms/records/list/0.2/payload.d.ts.map +1 -0
  176. package/dist/rooms/records/list/0.2/payload.js +462 -0
  177. package/dist/rooms/records/list/0.2/payload.js.map +1 -0
  178. package/dist/rooms/records/put/0.2/payload.d.ts +679 -0
  179. package/dist/rooms/records/put/0.2/payload.d.ts.map +1 -0
  180. package/dist/rooms/records/put/0.2/payload.js +357 -0
  181. package/dist/rooms/records/put/0.2/payload.js.map +1 -0
  182. package/dist/rooms/usage/0.1/payload.d.ts +795 -0
  183. package/dist/rooms/usage/0.1/payload.d.ts.map +1 -0
  184. package/dist/rooms/usage/0.1/payload.js +417 -0
  185. package/dist/rooms/usage/0.1/payload.js.map +1 -0
  186. package/dist/vtc/_shared/0.1/room-storage.d.ts +16 -0
  187. package/dist/vtc/_shared/0.1/room-storage.d.ts.map +1 -0
  188. package/dist/vtc/_shared/0.1/room-storage.js +6 -0
  189. package/dist/vtc/_shared/0.1/room-storage.js.map +1 -0
  190. package/dist/vtc/rooms/get/0.1/payload.d.ts +1813 -0
  191. package/dist/vtc/rooms/get/0.1/payload.d.ts.map +1 -0
  192. package/dist/vtc/rooms/get/0.1/payload.js +892 -0
  193. package/dist/vtc/rooms/get/0.1/payload.js.map +1 -0
  194. package/dist/vtc/rooms/limits/set/0.1/payload.d.ts +873 -0
  195. package/dist/vtc/rooms/limits/set/0.1/payload.d.ts.map +1 -0
  196. package/dist/vtc/rooms/limits/set/0.1/payload.js +489 -0
  197. package/dist/vtc/rooms/limits/set/0.1/payload.js.map +1 -0
  198. package/dist/vtc/rooms/storage/assign/0.1/payload.d.ts +341 -0
  199. package/dist/vtc/rooms/storage/assign/0.1/payload.d.ts.map +1 -0
  200. package/dist/vtc/rooms/storage/assign/0.1/payload.js +191 -0
  201. package/dist/vtc/rooms/storage/assign/0.1/payload.js.map +1 -0
  202. package/dist/vtc/rooms/storage/migrate/0.1/payload.d.ts +452 -0
  203. package/dist/vtc/rooms/storage/migrate/0.1/payload.d.ts.map +1 -0
  204. package/dist/vtc/rooms/storage/migrate/0.1/payload.js +260 -0
  205. package/dist/vtc/rooms/storage/migrate/0.1/payload.js.map +1 -0
  206. package/dist/vtc/rooms/usage/0.1/payload.d.ts +880 -0
  207. package/dist/vtc/rooms/usage/0.1/payload.d.ts.map +1 -0
  208. package/dist/vtc/rooms/usage/0.1/payload.js +457 -0
  209. package/dist/vtc/rooms/usage/0.1/payload.js.map +1 -0
  210. package/dist/vtc/storage/configs/create/0.1/payload.d.ts +1272 -0
  211. package/dist/vtc/storage/configs/create/0.1/payload.d.ts.map +1 -0
  212. package/dist/vtc/storage/configs/create/0.1/payload.js +737 -0
  213. package/dist/vtc/storage/configs/create/0.1/payload.js.map +1 -0
  214. package/dist/vtc/storage/configs/get/0.1/payload.d.ts +1750 -0
  215. package/dist/vtc/storage/configs/get/0.1/payload.d.ts.map +1 -0
  216. package/dist/vtc/storage/configs/get/0.1/payload.js +1019 -0
  217. package/dist/vtc/storage/configs/get/0.1/payload.js.map +1 -0
  218. package/dist/vtc/storage/configs/list/0.1/payload.d.ts +1851 -0
  219. package/dist/vtc/storage/configs/list/0.1/payload.d.ts.map +1 -0
  220. package/dist/vtc/storage/configs/list/0.1/payload.js +1069 -0
  221. package/dist/vtc/storage/configs/list/0.1/payload.js.map +1 -0
  222. package/dist/vtc/storage/configs/probe/0.1/payload.d.ts +459 -0
  223. package/dist/vtc/storage/configs/probe/0.1/payload.d.ts.map +1 -0
  224. package/dist/vtc/storage/configs/probe/0.1/payload.js +267 -0
  225. package/dist/vtc/storage/configs/probe/0.1/payload.js.map +1 -0
  226. package/dist/vtc/storage/configs/retire/0.1/payload.d.ts +294 -0
  227. package/dist/vtc/storage/configs/retire/0.1/payload.d.ts.map +1 -0
  228. package/dist/vtc/storage/configs/retire/0.1/payload.js +176 -0
  229. package/dist/vtc/storage/configs/retire/0.1/payload.js.map +1 -0
  230. package/dist/vtc/storage/configs/update/0.1/payload.d.ts +1274 -0
  231. package/dist/vtc/storage/configs/update/0.1/payload.d.ts.map +1 -0
  232. package/dist/vtc/storage/configs/update/0.1/payload.js +736 -0
  233. package/dist/vtc/storage/configs/update/0.1/payload.js.map +1 -0
  234. package/dist/vtc/storage/credentials/set/0.1/payload.d.ts +511 -0
  235. package/dist/vtc/storage/credentials/set/0.1/payload.d.ts.map +1 -0
  236. package/dist/vtc/storage/credentials/set/0.1/payload.js +293 -0
  237. package/dist/vtc/storage/credentials/set/0.1/payload.js.map +1 -0
  238. package/package.json +1 -1
  239. package/src/_shared/components.ts +2539 -4
  240. package/src/auth/oob/_shared/0.1/oob.ts +17 -0
  241. package/src/auth/oob/cancel/0.1/payload.ts +188 -0
  242. package/src/auth/oob/claim/0.1/payload.ts +306 -0
  243. package/src/auth/oob/grant/0.1/payload.ts +159 -0
  244. package/src/auth/oob/identify/0.1/payload.ts +110 -0
  245. package/src/auth/oob/prove/0.1/payload.ts +473 -0
  246. package/src/auth/oob/redeem/0.1/payload.ts +248 -0
  247. package/src/auth/oob/request/0.1/payload.ts +230 -0
  248. package/src/auth/oob/respond/0.1/payload.ts +178 -0
  249. package/src/device/list/0.1/payload.ts +6 -2
  250. package/src/device/list/0.2/payload.ts +6 -2
  251. package/src/device/register/0.1/payload.ts +6 -2
  252. package/src/device/register/0.2/payload.ts +6 -2
  253. package/src/external/_shared/0.1/accounts.ts +19 -0
  254. package/src/external/accounts/archive/0.1/payload.ts +1770 -0
  255. package/src/external/accounts/bindings/grant/0.1/payload.ts +1766 -0
  256. package/src/external/accounts/bindings/revoke/0.1/payload.ts +1778 -0
  257. package/src/external/accounts/create/0.1/payload.ts +1777 -0
  258. package/src/external/accounts/delete/0.1/payload.ts +211 -0
  259. package/src/external/accounts/get/0.1/payload.ts +1761 -0
  260. package/src/external/accounts/keys/rotate/0.1/payload.ts +1947 -0
  261. package/src/external/accounts/list/0.1/payload.ts +1834 -0
  262. package/src/external/accounts/probe/0.1/payload.ts +337 -0
  263. package/src/external/accounts/restore/0.1/payload.ts +1770 -0
  264. package/src/external/accounts/resume/0.1/payload.ts +1770 -0
  265. package/src/external/accounts/secret/set/0.1/payload.ts +248 -0
  266. package/src/external/accounts/setup/0.1/payload.ts +355 -0
  267. package/src/external/accounts/suspend/0.1/payload.ts +1770 -0
  268. package/src/external/accounts/update/0.1/payload.ts +1771 -0
  269. package/src/external/credentials/issue/0.1/payload.ts +365 -0
  270. package/src/external/sign/0.1/payload.ts +234 -0
  271. package/src/index.ts +53 -0
  272. package/src/rooms/_shared/0.1/blobs.ts +17 -0
  273. package/src/rooms/_shared/0.1/room.ts +1 -1
  274. package/src/rooms/blobs/chunk/0.1/payload.ts +251 -0
  275. package/src/rooms/blobs/get/0.1/payload.ts +463 -0
  276. package/src/rooms/blobs/upload/abort/0.1/payload.ts +187 -0
  277. package/src/rooms/blobs/upload/begin/0.1/payload.ts +491 -0
  278. package/src/rooms/blobs/upload/chunk/0.1/payload.ts +304 -0
  279. package/src/rooms/blobs/upload/commit/0.1/payload.ts +224 -0
  280. package/src/rooms/info/0.1/payload.ts +572 -0
  281. package/src/rooms/keys/file-key/0.1/payload.ts +224 -0
  282. package/src/rooms/records/get/0.2/payload.ts +614 -0
  283. package/src/rooms/records/list/0.2/payload.ts +533 -0
  284. package/src/rooms/records/put/0.2/payload.ts +441 -0
  285. package/src/rooms/usage/0.1/payload.ts +499 -0
  286. package/src/vtc/_shared/0.1/room-storage.ts +17 -0
  287. package/src/vtc/rooms/get/0.1/payload.ts +1275 -0
  288. package/src/vtc/rooms/limits/set/0.1/payload.ts +555 -0
  289. package/src/vtc/rooms/storage/assign/0.1/payload.ts +237 -0
  290. package/src/vtc/rooms/storage/migrate/0.1/payload.ts +317 -0
  291. package/src/vtc/rooms/usage/0.1/payload.ts +568 -0
  292. package/src/vtc/storage/configs/create/0.1/payload.ts +784 -0
  293. package/src/vtc/storage/configs/get/0.1/payload.ts +1054 -0
  294. package/src/vtc/storage/configs/list/0.1/payload.ts +1121 -0
  295. package/src/vtc/storage/configs/probe/0.1/payload.ts +329 -0
  296. package/src/vtc/storage/configs/retire/0.1/payload.ts +211 -0
  297. package/src/vtc/storage/configs/update/0.1/payload.ts +783 -0
  298. package/src/vtc/storage/credentials/set/0.1/payload.ts +339 -0
@@ -0,0 +1,3216 @@
1
+ /**
2
+ * Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
3
+ * Source: specs/external/accounts/keys/rotate/0.1/payload.schema.json
4
+ */
5
+ import type { AccountBinding, AccountContextId, AccountId, AccountProbeReport, AccountProbeStep, AccountPublicMaterial, AccountSecretInfo, AccountSettings, AccountSetupArtifacts, AccountState, AuthModel, AwsArn, AwsRegion, CredentialScopeCeiling, DigestMultibase, Ext, ExternalAccount, ProviderBucketName, ProviderHttpsUrl, ProviderObjectAction, ProviderObjectPrefix, SecretFingerprint, SuiMoveCall } from "../../../../../_shared/components.js";
6
+ /**
7
+ * Rotate an external account's key: stage, confirm or abandon. The outer document members are owned by the framework — SPEC §6.3.
8
+ */
9
+ export interface ExternalAccountsKeysRotatePayload {
10
+ context: AccountContextId;
11
+ id: AccountId;
12
+ phase: "stage" | "confirm" | "abandon";
13
+ ext?: Ext;
14
+ }
15
+ export interface ExternalAccountsKeysRotateResponsePayload {
16
+ account: ExternalAccount;
17
+ /**
18
+ * On `stage` only.
19
+ */
20
+ setup?: AccountSetupArtifacts;
21
+ ext?: Ext;
22
+ }
23
+ /** Shared definitions this specification references, re-exported under the names it used to declare them with. */
24
+ export type { AccountBinding, AccountContextId, AccountId, AccountProbeReport, AccountProbeStep, AccountPublicMaterial, AccountSecretInfo, AccountSettings, AccountSetupArtifacts, AccountState, AuthModel, AwsArn, AwsRegion, CredentialScopeCeiling, DigestMultibase, Ext, ExternalAccount, ProviderBucketName, ProviderHttpsUrl, ProviderObjectAction, ProviderObjectPrefix, SecretFingerprint, SuiMoveCall };
25
+ /** Trust Task type URI. */
26
+ export declare const TYPE_URI: "https://trusttasks.org/spec/external/accounts/keys/rotate/0.1";
27
+ /** Stable alias for this specification's request payload shape. */
28
+ export type Payload = ExternalAccountsKeysRotatePayload;
29
+ /** Trust Task response type URI (request type URI + "#response"). */
30
+ export declare const RESPONSE_TYPE_URI: "https://trusttasks.org/spec/external/accounts/keys/rotate/0.1#response";
31
+ /** Stable alias for this specification's success-response payload shape. */
32
+ export type Response = ExternalAccountsKeysRotateResponsePayload;
33
+ /**
34
+ * This specification's payload schema, as a value.
35
+ *
36
+ * SPEC.md §7.2 item 2 is performed against this. It is shipped as data
37
+ * rather than only as a `.json` file because TypeScript types are erased
38
+ * at runtime: without a schema a consumer has nothing to validate, and
39
+ * every REQUIRED payload member is optional in practice. Cross-file
40
+ * `$ref`s are already inlined, so it needs no resolver.
41
+ */
42
+ export declare const PAYLOAD_SCHEMA: {
43
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
44
+ readonly $id: "https://trusttasks.org/spec/external/accounts/keys/rotate/0.1";
45
+ readonly title: "External Accounts — Keys — Rotate — payload";
46
+ readonly description: "Rotate an external account's key: stage, confirm or abandon. The outer document members are owned by the framework — SPEC §6.3.";
47
+ readonly type: "object";
48
+ readonly additionalProperties: false;
49
+ readonly required: readonly ["context", "id", "phase"];
50
+ readonly properties: {
51
+ readonly context: {
52
+ readonly $ref: "#/$defs/AccountContextId";
53
+ };
54
+ readonly id: {
55
+ readonly $ref: "#/$defs/AccountId";
56
+ };
57
+ readonly phase: {
58
+ readonly type: "string";
59
+ readonly enum: readonly ["stage", "confirm", "abandon"];
60
+ };
61
+ readonly ext: {
62
+ readonly $ref: "#/$defs/Ext";
63
+ };
64
+ };
65
+ readonly $defs: {
66
+ readonly Response: {
67
+ readonly $anchor: "response";
68
+ readonly title: "External Accounts — Keys — Rotate — response payload";
69
+ readonly type: "object";
70
+ readonly additionalProperties: false;
71
+ readonly required: readonly ["account"];
72
+ readonly properties: {
73
+ readonly account: {
74
+ readonly $ref: "#/$defs/ExternalAccount";
75
+ };
76
+ readonly setup: {
77
+ readonly $ref: "#/$defs/AccountSetupArtifacts";
78
+ readonly description: "On `stage` only.";
79
+ };
80
+ readonly ext: {
81
+ readonly $ref: "#/$defs/Ext";
82
+ };
83
+ };
84
+ };
85
+ readonly Ext: {
86
+ readonly title: "Ext";
87
+ readonly 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.";
88
+ readonly type: "object";
89
+ readonly minProperties: 1;
90
+ readonly additionalProperties: true;
91
+ readonly propertyNames: {
92
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
93
+ };
94
+ };
95
+ readonly AccountSetupArtifacts: {
96
+ readonly title: "AccountSetupArtifacts";
97
+ readonly type: "object";
98
+ readonly additionalProperties: false;
99
+ readonly required: readonly ["model", "artifacts", "steps"];
100
+ readonly description: "What an administrator does at the provider to make an account usable, generated by the custodian from the account's settings, public material and bindings. Public material and policy only: never a private key or secret, and the custodian never asks for the provider's administrator credentials.";
101
+ readonly properties: {
102
+ readonly model: {
103
+ readonly $ref: "#/$defs/AuthModel";
104
+ };
105
+ readonly artifacts: {
106
+ readonly type: "array";
107
+ readonly maxItems: 16;
108
+ readonly items: {
109
+ readonly type: "object";
110
+ readonly additionalProperties: false;
111
+ readonly required: readonly ["name", "mediaType", "content"];
112
+ readonly properties: {
113
+ readonly name: {
114
+ readonly type: "string";
115
+ readonly maxLength: 128;
116
+ readonly pattern: "^[A-Za-z0-9._-]+$";
117
+ readonly description: "File name to save it under: `trust-anchor.pem`, `jwks.json`, `permissions-policy.json`, `crl.pem`.";
118
+ };
119
+ readonly mediaType: {
120
+ readonly type: "string";
121
+ readonly maxLength: 128;
122
+ readonly pattern: "^[a-z]+/[a-z0-9.+-]+$";
123
+ };
124
+ readonly content: {
125
+ readonly type: "string";
126
+ readonly maxLength: 65536;
127
+ };
128
+ };
129
+ };
130
+ };
131
+ readonly steps: {
132
+ readonly type: "array";
133
+ readonly maxItems: 32;
134
+ readonly items: {
135
+ readonly type: "object";
136
+ readonly additionalProperties: false;
137
+ readonly required: readonly ["description"];
138
+ readonly properties: {
139
+ readonly description: {
140
+ readonly type: "string";
141
+ readonly maxLength: 1024;
142
+ };
143
+ readonly command: {
144
+ readonly type: "string";
145
+ readonly maxLength: 8192;
146
+ readonly description: "A provider CLI command (`aws rolesanywhere create-trust-anchor …`, `gcloud iam workload-identity-pools providers create-oidc … --jwk-json-path`, `az ad app credential reset --cert …`), referring to artifacts by `name`.";
147
+ };
148
+ };
149
+ };
150
+ };
151
+ };
152
+ };
153
+ readonly AuthModel: {
154
+ readonly title: "AuthModel";
155
+ readonly type: "string";
156
+ readonly enum: readonly ["aws-roles-anywhere", "gcp-wif-pinned", "azure-cert", "oauth2-private-key-jwt", "s3-static-presign", "sui-signer", "static-secret"];
157
+ readonly description: "How the account authenticates to its provider. Every model pins the custodian's verification material in the provider's own account, uploaded once, so no model requires the custodian to be reachable from the internet. `aws-roles-anywhere`: the custodian is the certificate authority of an IAM Roles Anywhere trust anchor, and signs CreateSession with a short-lived end-entity certificate it issued to the account's own key. `gcp-wif-pinned`: a Workload Identity Federation pool provider holds an uploaded JWKS; the custodian signs an ID token and exchanges it at Google's STS. `azure-cert`: a certificate uploaded to an Entra app registration; the custodian signs an RFC 7523 client assertion. `oauth2-private-key-jwt`: the same RFC 7523 client authentication against any token endpoint that registered the custodian's public key. `s3-static-presign`: an access-key pair for an S3-compatible store that cannot federate; the custodian presigns per-object URLs and never releases the key. `sui-signer`: a Sui address derived from the custodian's key; the custodian signs only allow-listed transactions. `static-secret`: an API key or token used inside the custodian by a named driver; last resort, never released.\n\nPlain OpenID Connect discovery federation is deliberately absent. It works by the provider fetching the issuer's JWKS from a public URL, which either makes the custodian reachable from the internet or makes whoever hosts a copy of the JWKS able to mint credentials for every federated role.";
158
+ };
159
+ readonly ExternalAccount: {
160
+ readonly title: "ExternalAccount";
161
+ readonly type: "object";
162
+ readonly additionalProperties: false;
163
+ readonly required: readonly ["id", "label", "context", "settings", "state", "bindings", "egressHosts", "providerSetupRequired", "createdAt", "updatedAt"];
164
+ readonly description: "An account as every read returns it. Contains no private key, no secret and no issued credential, to any reader.";
165
+ readonly properties: {
166
+ readonly id: {
167
+ readonly $ref: "#/$defs/AccountId";
168
+ };
169
+ readonly label: {
170
+ readonly type: "string";
171
+ readonly minLength: 1;
172
+ readonly maxLength: 128;
173
+ readonly description: "Display name. Untrusted text: render it, never interpret it.";
174
+ };
175
+ readonly context: {
176
+ readonly $ref: "#/$defs/AccountContextId";
177
+ };
178
+ readonly settings: {
179
+ readonly $ref: "#/$defs/AccountSettings";
180
+ };
181
+ readonly state: {
182
+ readonly $ref: "#/$defs/AccountState";
183
+ };
184
+ readonly publicMaterial: {
185
+ readonly $ref: "#/$defs/AccountPublicMaterial";
186
+ readonly description: "Absent for the static models, which hold a secret rather than a key.";
187
+ };
188
+ readonly secret: {
189
+ readonly $ref: "#/$defs/AccountSecretInfo";
190
+ readonly description: "Static models only; absent until the secret is set.";
191
+ };
192
+ readonly bindings: {
193
+ readonly type: "array";
194
+ readonly maxItems: 256;
195
+ readonly items: {
196
+ readonly $ref: "#/$defs/AccountBinding";
197
+ };
198
+ };
199
+ readonly egressHosts: {
200
+ readonly type: "array";
201
+ readonly maxItems: 8;
202
+ readonly items: {
203
+ readonly type: "string";
204
+ readonly maxLength: 253;
205
+ readonly pattern: "^[a-z0-9.-]+$";
206
+ };
207
+ readonly description: "The provider hosts the custodian connects to on this account's behalf, derived by the custodian from its settings: the token or session endpoints issuance uses, and the destinations external/accounts/probe dials (the object store's host, for a storage model). The custodian MUST NOT connect anywhere else on the account's behalf, so an egress proxy can allow exactly this set. Empty only for a model that neither exchanges nor probes over the network.";
208
+ };
209
+ readonly providerSetupRequired: {
210
+ readonly type: "boolean";
211
+ readonly description: "True when the account cannot be used until its provider-side setup is redone: after a restore that could not carry its key or secret (a wrapped RSA key, a static secret), or after a rotation awaiting confirmation.";
212
+ };
213
+ readonly lastProbe: {
214
+ readonly $ref: "#/$defs/AccountProbeReport";
215
+ };
216
+ readonly createdAt: {
217
+ readonly type: "string";
218
+ readonly format: "date-time";
219
+ };
220
+ readonly updatedAt: {
221
+ readonly type: "string";
222
+ readonly format: "date-time";
223
+ };
224
+ };
225
+ };
226
+ readonly AccountProbeReport: {
227
+ readonly title: "AccountProbeReport";
228
+ readonly type: "object";
229
+ readonly additionalProperties: false;
230
+ readonly required: readonly ["at", "ok", "complete", "steps"];
231
+ readonly properties: {
232
+ readonly at: {
233
+ readonly type: "string";
234
+ readonly format: "date-time";
235
+ };
236
+ readonly ok: {
237
+ readonly type: "boolean";
238
+ readonly description: "True when every step that ran succeeded.";
239
+ };
240
+ readonly complete: {
241
+ readonly type: "boolean";
242
+ readonly description: "True only when the canary steps (`put`, `get`, `delete`, or the model's equivalent) ran, so the account was exercised end to end. A probe that stopped after `exchange` because nothing named a canary prefix is `complete: false` even when `ok` is true, and does not clear `providerSetupRequired`.";
243
+ };
244
+ readonly steps: {
245
+ readonly type: "array";
246
+ readonly maxItems: 8;
247
+ readonly items: {
248
+ readonly type: "object";
249
+ readonly additionalProperties: false;
250
+ readonly required: readonly ["step", "ok"];
251
+ readonly properties: {
252
+ readonly step: {
253
+ readonly $ref: "#/$defs/AccountProbeStep";
254
+ };
255
+ readonly ok: {
256
+ readonly type: "boolean";
257
+ };
258
+ readonly durationMs: {
259
+ readonly type: "integer";
260
+ readonly minimum: 0;
261
+ };
262
+ readonly providerError: {
263
+ readonly type: "string";
264
+ readonly maxLength: 2048;
265
+ readonly description: "The provider's error, verbatim and truncated, so an administrator sees the cloud's own words. Untrusted text. A custodian MUST remove any credential, signature or token from it first.";
266
+ };
267
+ readonly providerRequestId: {
268
+ readonly type: "string";
269
+ readonly maxLength: 256;
270
+ readonly pattern: "^[!-~]+$";
271
+ };
272
+ };
273
+ };
274
+ readonly description: "In order; the first failing step ends the probe.";
275
+ };
276
+ };
277
+ };
278
+ readonly AccountProbeStep: {
279
+ readonly title: "AccountProbeStep";
280
+ readonly type: "string";
281
+ readonly enum: readonly ["sign", "exchange", "put", "get", "delete", "decode"];
282
+ readonly description: "`sign`: the custodian signed its assertion, session request or test transaction. `exchange`: the provider issued a credential for it. `put`, `get`, `delete`: one canary object at the narrowest scope of the account's bindings. `decode`: for `sui-signer`, a built test transaction passed the allow-list (it is never submitted).";
283
+ };
284
+ readonly AccountBinding: {
285
+ readonly title: "AccountBinding";
286
+ readonly type: "object";
287
+ readonly additionalProperties: false;
288
+ readonly required: readonly ["consumer", "maxTtlSeconds", "ratePerMinute"];
289
+ readonly description: "Who may use an account, and how far. One binding per consumer per account. A binding is checked before anything is signed: the caller must be `consumer`, proven by the request's own proof; the request must sit inside `scopeCeiling`; its TTL must not exceed `maxTtlSeconds`; and the binding's rate must not be exhausted.";
290
+ readonly properties: {
291
+ readonly consumer: {
292
+ readonly type: "string";
293
+ readonly minLength: 7;
294
+ readonly maxLength: 2048;
295
+ readonly pattern: "^did:[a-z0-9]+:\\S+$";
296
+ readonly description: "The DID of the integration allowed to use the account.";
297
+ };
298
+ readonly scopeCeiling: {
299
+ readonly $ref: "#/$defs/CredentialScopeCeiling";
300
+ readonly description: "Required for storage and OAuth models; absent for `sui-signer`, whose ceiling is the account's own allow-list and caps.";
301
+ };
302
+ readonly maxTtlSeconds: {
303
+ readonly type: "integer";
304
+ readonly minimum: 60;
305
+ readonly maximum: 3600;
306
+ readonly description: "The longest credential lifetime the consumer may request. 900 (15 minutes) is RECOMMENDED; the ceiling is one hour.";
307
+ };
308
+ readonly ratePerMinute: {
309
+ readonly type: "integer";
310
+ readonly minimum: 1;
311
+ readonly maximum: 600;
312
+ readonly description: "Issuances or signatures per minute for this binding.";
313
+ };
314
+ readonly sourceCidrs: {
315
+ readonly type: "array";
316
+ readonly maxItems: 16;
317
+ readonly items: {
318
+ readonly type: "string";
319
+ readonly maxLength: 49;
320
+ readonly pattern: "^[0-9a-fA-F:.]+/[0-9]{1,3}$";
321
+ };
322
+ readonly description: "Where the provider supports it (`aws:SourceIp`), issued credentials are pinned to these networks, so a credential lifted from the consumer is useless elsewhere.";
323
+ };
324
+ readonly grantedAt: {
325
+ readonly type: "string";
326
+ readonly format: "date-time";
327
+ };
328
+ };
329
+ };
330
+ readonly CredentialScopeCeiling: {
331
+ readonly title: "CredentialScopeCeiling";
332
+ readonly type: "object";
333
+ readonly additionalProperties: false;
334
+ readonly description: "The widest scope a binding's consumer may request. An issuance is inside the ceiling when its `prefix` begins with one of `prefixes`, every one of its `actions` is in `actions`, and every one of its `scopes` is in `scopes`. Absent members confer nothing: a ceiling with no `prefixes` permits no storage issuance.";
335
+ readonly properties: {
336
+ readonly prefixes: {
337
+ readonly type: "array";
338
+ readonly minItems: 1;
339
+ readonly maxItems: 64;
340
+ readonly uniqueItems: true;
341
+ readonly items: {
342
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
343
+ };
344
+ };
345
+ readonly actions: {
346
+ readonly type: "array";
347
+ readonly minItems: 1;
348
+ readonly maxItems: 3;
349
+ readonly uniqueItems: true;
350
+ readonly items: {
351
+ readonly $ref: "#/$defs/ProviderObjectAction";
352
+ };
353
+ };
354
+ readonly scopes: {
355
+ readonly type: "array";
356
+ readonly maxItems: 64;
357
+ readonly uniqueItems: true;
358
+ readonly items: {
359
+ readonly type: "string";
360
+ readonly maxLength: 256;
361
+ readonly pattern: "^[!#-\\[\\]-~]+$";
362
+ };
363
+ };
364
+ };
365
+ };
366
+ readonly ProviderObjectAction: {
367
+ readonly title: "ProviderObjectAction";
368
+ readonly type: "string";
369
+ readonly enum: readonly ["put", "get", "delete"];
370
+ readonly description: "`put`: write an object. `get`: read one. `delete`: remove one. No list, ACL, policy or bucket-level action exists here, so none can be granted.";
371
+ };
372
+ readonly ProviderObjectPrefix: {
373
+ readonly title: "ProviderObjectPrefix";
374
+ readonly type: "string";
375
+ readonly minLength: 2;
376
+ readonly maxLength: 512;
377
+ readonly pattern: "^([a-z0-9][a-z0-9._-]{0,127}/){1,16}$";
378
+ readonly description: "An object-key prefix within the account's bucket: one or more segments of lowercase letters, digits, `.`, `_` and `-`, each beginning with a letter or digit and ending with `/`. No quote, backslash, wildcard, whitespace, `..` segment or empty segment can appear. That is deliberate: the custodian places this value inside a provider policy — an IAM session policy (JSON), a GCS Credential Access Boundary condition (CEL) — and a value able to carry a metacharacter can break out of the string it is placed in and widen the policy. That is a known class of defect (CVE-2026-42811, a CEL injection in downscoped GCS credentials). Even with this pattern, a custodian MUST build provider policies with the provider language's own encoder, never by string interpolation.";
379
+ };
380
+ readonly AccountSecretInfo: {
381
+ readonly title: "AccountSecretInfo";
382
+ readonly type: "object";
383
+ readonly additionalProperties: false;
384
+ readonly required: readonly ["fingerprint", "setAt"];
385
+ readonly description: "That a static model's secret is set, and which one. Never its value.";
386
+ readonly properties: {
387
+ readonly fingerprint: {
388
+ readonly $ref: "#/$defs/SecretFingerprint";
389
+ };
390
+ readonly setAt: {
391
+ readonly type: "string";
392
+ readonly format: "date-time";
393
+ };
394
+ };
395
+ };
396
+ readonly SecretFingerprint: {
397
+ readonly title: "SecretFingerprint";
398
+ readonly type: "string";
399
+ readonly pattern: "^hmacsha256:[A-Za-z0-9_-]{22}$";
400
+ readonly maxLength: 33;
401
+ readonly description: "Which secret is set, without being a way to test guesses at it. `hmacsha256:` followed by the base64url encoding, without padding, of the first 16 bytes of HMAC-SHA256 over the secret's bytes under a fingerprint key the custodian holds and never discloses. Comparable only between fingerprints made by the same custodian: a re-entered value can be confirmed, while the same secret at two custodians gives unrelated fingerprints. Never a bare hash of the secret, which would let anyone who reads it run a dictionary against it offline; and deliberately not a DigestMultibase, since multihash has no code for a keyed digest.";
402
+ };
403
+ readonly AccountPublicMaterial: {
404
+ readonly title: "AccountPublicMaterial";
405
+ readonly type: "object";
406
+ readonly additionalProperties: false;
407
+ readonly required: readonly ["algorithm", "keyFingerprint"];
408
+ readonly description: "The public half of the account's key, as the provider needs it. Never a private key.";
409
+ readonly properties: {
410
+ readonly algorithm: {
411
+ readonly type: "string";
412
+ readonly enum: readonly ["ES256", "RS256", "Secp256r1"];
413
+ };
414
+ readonly keyFingerprint: {
415
+ readonly $ref: "#/$defs/DigestMultibase";
416
+ readonly description: "Digest of the public key's SubjectPublicKeyInfo DER.";
417
+ };
418
+ readonly publicKeyJwk: {
419
+ readonly type: "object";
420
+ readonly additionalProperties: false;
421
+ readonly required: readonly ["kty", "kid"];
422
+ readonly description: "The public key as a JWK, with `kid`. Public members only: the schema admits no private member (`d`, `p`, `q`, `dp`, `dq`, `qi`), so a document carrying one fails validation.";
423
+ readonly properties: {
424
+ readonly kty: {
425
+ readonly type: "string";
426
+ readonly enum: readonly ["EC", "RSA"];
427
+ };
428
+ readonly crv: {
429
+ readonly type: "string";
430
+ readonly enum: readonly ["P-256"];
431
+ };
432
+ readonly x: {
433
+ readonly type: "string";
434
+ readonly maxLength: 1024;
435
+ readonly pattern: "^[A-Za-z0-9_-]+$";
436
+ };
437
+ readonly y: {
438
+ readonly type: "string";
439
+ readonly maxLength: 1024;
440
+ readonly pattern: "^[A-Za-z0-9_-]+$";
441
+ };
442
+ readonly n: {
443
+ readonly type: "string";
444
+ readonly maxLength: 1024;
445
+ readonly pattern: "^[A-Za-z0-9_-]+$";
446
+ };
447
+ readonly e: {
448
+ readonly type: "string";
449
+ readonly maxLength: 16;
450
+ readonly pattern: "^[A-Za-z0-9_-]+$";
451
+ };
452
+ readonly kid: {
453
+ readonly type: "string";
454
+ readonly maxLength: 128;
455
+ readonly pattern: "^[!-~]+$";
456
+ };
457
+ readonly alg: {
458
+ readonly type: "string";
459
+ readonly enum: readonly ["ES256", "RS256"];
460
+ };
461
+ readonly use: {
462
+ readonly type: "string";
463
+ readonly const: "sig";
464
+ };
465
+ };
466
+ };
467
+ readonly certificatePem: {
468
+ readonly type: "string";
469
+ readonly maxLength: 16384;
470
+ readonly pattern: "^-----BEGIN CERTIFICATE-----[A-Za-z0-9+/=\\r\\n]+-----END CERTIFICATE-----\\s*$";
471
+ readonly description: "`aws-roles-anywhere`: the trust anchor's CA certificate. `azure-cert`: the certificate uploaded to the app registration.";
472
+ };
473
+ readonly address: {
474
+ readonly type: "string";
475
+ readonly pattern: "^0x[0-9a-f]{64}$";
476
+ readonly description: "`sui-signer`: the Sui address the key controls.";
477
+ };
478
+ readonly pendingKeyFingerprint: {
479
+ readonly $ref: "#/$defs/DigestMultibase";
480
+ readonly description: "During a rotation (external/accounts/keys/rotate), the staged successor key, until it is confirmed and the current key retires.";
481
+ };
482
+ };
483
+ };
484
+ readonly DigestMultibase: {
485
+ readonly title: "DigestMultibase";
486
+ readonly description: "A cryptographic digest as a multibase-encoded multihash — the encoding the W3C Verifiable Credentials Data Model 2.0 defines for `digestMultibase`, and the one `did:webvh` uses for its SCID and entry hashes.\n\nMultihash carries the hash algorithm in-band, so the value is self-describing and the wire format survives an algorithm change without a schema revision; multibase does the same for the base encoding, so a verifier never infers base58 from base64url by context. A bare hex string or a `sha-256:`-style prefix hard-codes one algorithm into the wire contract and is non-conforming here.\n\nThis definition constrains the *encoding only*. What the digest is computed over is stated by each referencing field, because it differs legitimately: a digest over a JSON document is taken over its RFC 8785 (JCS) canonicalization, while a digest over an opaque artifact is taken over its bytes. A field whose input is a JSON document and which does not name a canonicalization is not reproducible.\n\nRestricted to the two multibase headers W3C Controlled Identifiers 1.0 §2.4 normatively requires — `z` (base58btc) and `u` (base64url-no-pad). CID permits others but states that \"interoperability is not guaranteed between implementations using such values\", and a registry whose purpose is interoperability should not mint digests a conforming verifier may be unable to read. The alphabets are enforced rather than assumed: base58btc excludes 0, O, I and l, and an earlier permissive pattern let three published examples carry digests that were not valid base58 at all. base58btc is RECOMMENDED, for consistency with `did:key` and `did:webvh`.";
487
+ readonly type: "string";
488
+ readonly minLength: 16;
489
+ readonly pattern: "^(z[1-9A-HJ-NP-Za-km-z]+|u[A-Za-z0-9_-]+)$";
490
+ readonly examples: readonly ["zQmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR"];
491
+ };
492
+ readonly AccountState: {
493
+ readonly title: "AccountState";
494
+ readonly type: "string";
495
+ readonly enum: readonly ["active", "suspended", "archived"];
496
+ readonly description: "`active`: usable by its bindings. `suspended`: every issuance and signature is refused at once; management reads continue; resumable. `archived`: hidden from default listings, refused for use, restorable. Deletion removes the record.";
497
+ };
498
+ readonly AccountSettings: {
499
+ readonly title: "AccountSettings";
500
+ readonly description: "Per-model account settings, discriminated by `model`: every branch is an object whose `model` member is a `const`, which is what lets each generated binding emit a tagged union, so an unusable setting is answered as `external:invalidSettings` naming the member rather than as an unparseable payload. Never a secret: every value here is returned to anyone who may read the account. Branches are referred to by their `model` (\"the `sui-signer` settings\"). They carry no `title`, so that every binding renders each as a plain variant of this union.";
501
+ readonly oneOf: readonly [{
502
+ readonly type: "object";
503
+ readonly additionalProperties: false;
504
+ readonly required: readonly ["model", "region", "profileArn", "roleArn", "trustAnchorArn"];
505
+ readonly description: "Egress: `rolesanywhere.<region>.amazonaws.com`, plus `sts.<region>.amazonaws.com` when `chainedRoleArn` is set.";
506
+ readonly properties: {
507
+ readonly model: {
508
+ readonly type: "string";
509
+ readonly const: "aws-roles-anywhere";
510
+ };
511
+ readonly region: {
512
+ readonly $ref: "#/$defs/AwsRegion";
513
+ };
514
+ readonly trustAnchorArn: {
515
+ readonly $ref: "#/$defs/AwsArn";
516
+ readonly description: "The trust anchor holding the custodian's CA certificate. Recorded after the administrator creates it from external/accounts/setup.";
517
+ };
518
+ readonly profileArn: {
519
+ readonly $ref: "#/$defs/AwsArn";
520
+ };
521
+ readonly roleArn: {
522
+ readonly $ref: "#/$defs/AwsArn";
523
+ };
524
+ readonly chainedRoleArn: {
525
+ readonly $ref: "#/$defs/AwsArn";
526
+ readonly description: "When set, every issuance chains an AssumeRole into this role carrying the downscoping session policy, for deployments whose Roles Anywhere profile cannot carry one per request. Caps a credential at one hour.";
527
+ };
528
+ readonly bucket: {
529
+ readonly $ref: "#/$defs/ProviderBucketName";
530
+ readonly description: "The S3 bucket issuances are scoped within. Required for an account whose bindings issue storage scopes.";
531
+ };
532
+ readonly probePrefix: {
533
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
534
+ readonly description: "Where external/accounts/probe writes its canary when no binding names a narrower prefix. Lets a new account be probed before anything is bound to it. Absent, a probe of an account with no bindings stops after `exchange` and reports `complete: false`.";
535
+ };
536
+ };
537
+ }, {
538
+ readonly type: "object";
539
+ readonly additionalProperties: false;
540
+ readonly required: readonly ["model", "projectNumber", "poolId", "providerId"];
541
+ readonly description: "Egress: `sts.googleapis.com`, plus `iamcredentials.googleapis.com` when `serviceAccount` is set.";
542
+ readonly properties: {
543
+ readonly model: {
544
+ readonly type: "string";
545
+ readonly const: "gcp-wif-pinned";
546
+ };
547
+ readonly projectNumber: {
548
+ readonly type: "string";
549
+ readonly pattern: "^[0-9]{1,20}$";
550
+ };
551
+ readonly poolId: {
552
+ readonly type: "string";
553
+ readonly pattern: "^[a-z0-9-]{4,32}$";
554
+ };
555
+ readonly providerId: {
556
+ readonly type: "string";
557
+ readonly pattern: "^[a-z0-9-]{4,32}$";
558
+ };
559
+ readonly serviceAccount: {
560
+ readonly type: "string";
561
+ readonly maxLength: 254;
562
+ readonly pattern: "^[a-z0-9-]+@[a-z0-9-]+\\.iam\\.gserviceaccount\\.com$";
563
+ readonly description: "When set, the federated token is exchanged for this service account's access token.";
564
+ };
565
+ readonly signingAlgorithm: {
566
+ readonly type: "string";
567
+ readonly enum: readonly ["ES256", "RS256"];
568
+ readonly description: "The ID-token algorithm. ES256 unless the provider refuses it. Absent means ES256.";
569
+ };
570
+ readonly bucket: {
571
+ readonly $ref: "#/$defs/ProviderBucketName";
572
+ readonly description: "The GCS bucket issuances are scoped within, by a Credential Access Boundary.";
573
+ };
574
+ readonly probePrefix: {
575
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
576
+ readonly description: "Where external/accounts/probe writes its canary when no binding names a narrower prefix. Lets a new account be probed before anything is bound to it. Absent, a probe of an account with no bindings stops after `exchange` and reports `complete: false`.";
577
+ };
578
+ };
579
+ }, {
580
+ readonly type: "object";
581
+ readonly additionalProperties: false;
582
+ readonly required: readonly ["model", "tenantId", "clientId", "tokenScope"];
583
+ readonly description: "Egress: `login.microsoftonline.com`, or the sovereign-cloud authority named in `authorityHost`.";
584
+ readonly properties: {
585
+ readonly model: {
586
+ readonly type: "string";
587
+ readonly const: "azure-cert";
588
+ };
589
+ readonly tenantId: {
590
+ readonly type: "string";
591
+ readonly pattern: "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$";
592
+ };
593
+ readonly clientId: {
594
+ readonly type: "string";
595
+ readonly pattern: "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$";
596
+ };
597
+ readonly tokenScope: {
598
+ readonly type: "string";
599
+ readonly maxLength: 512;
600
+ readonly pattern: "^[A-Za-z0-9:/._-]+$";
601
+ readonly description: "The `scope` requested at the token endpoint, such as `https://storage.azure.com/.default`.";
602
+ };
603
+ readonly authorityHost: {
604
+ readonly type: "string";
605
+ readonly maxLength: 253;
606
+ readonly pattern: "^[a-z0-9.-]+$";
607
+ readonly description: "Absent means `login.microsoftonline.com`.";
608
+ };
609
+ };
610
+ }, {
611
+ readonly type: "object";
612
+ readonly additionalProperties: false;
613
+ readonly required: readonly ["model", "tokenEndpoint", "clientId"];
614
+ readonly description: "Egress: the host of `tokenEndpoint`, and nothing else.";
615
+ readonly properties: {
616
+ readonly model: {
617
+ readonly type: "string";
618
+ readonly const: "oauth2-private-key-jwt";
619
+ };
620
+ readonly tokenEndpoint: {
621
+ readonly $ref: "#/$defs/ProviderHttpsUrl";
622
+ };
623
+ readonly clientId: {
624
+ readonly type: "string";
625
+ readonly minLength: 1;
626
+ readonly maxLength: 512;
627
+ readonly pattern: "^[!-~]+$";
628
+ };
629
+ readonly audience: {
630
+ readonly type: "string";
631
+ readonly maxLength: 2048;
632
+ readonly pattern: "^[!-~]+$";
633
+ readonly description: "The assertion's `aud`. Absent means `tokenEndpoint`.";
634
+ };
635
+ readonly scopes: {
636
+ readonly type: "array";
637
+ readonly maxItems: 64;
638
+ readonly uniqueItems: true;
639
+ readonly items: {
640
+ readonly type: "string";
641
+ readonly maxLength: 256;
642
+ readonly pattern: "^[!#-\\[\\]-~]+$";
643
+ };
644
+ readonly description: "The scopes a binding may request, the ceiling for every issuance.";
645
+ };
646
+ readonly signingAlgorithm: {
647
+ readonly type: "string";
648
+ readonly enum: readonly ["ES256", "RS256"];
649
+ };
650
+ };
651
+ }, {
652
+ readonly type: "object";
653
+ readonly additionalProperties: false;
654
+ readonly required: readonly ["model", "endpoint", "region", "bucket", "accessKeyId"];
655
+ readonly description: "Issuance needs no egress: presigning is a computation inside the custodian, and the consumer uses the URL itself. The probe connects to the host of `endpoint`, which `egressHosts` therefore lists.";
656
+ readonly properties: {
657
+ readonly model: {
658
+ readonly type: "string";
659
+ readonly const: "s3-static-presign";
660
+ };
661
+ readonly endpoint: {
662
+ readonly $ref: "#/$defs/ProviderHttpsUrl";
663
+ };
664
+ readonly region: {
665
+ readonly type: "string";
666
+ readonly maxLength: 64;
667
+ readonly pattern: "^[a-z0-9-]+$";
668
+ readonly description: "The SigV4 signing region; `auto` for Cloudflare R2.";
669
+ };
670
+ readonly bucket: {
671
+ readonly $ref: "#/$defs/ProviderBucketName";
672
+ };
673
+ readonly pathStyle: {
674
+ readonly type: "boolean";
675
+ readonly description: "Address the bucket in the path rather than the host name, as MinIO usually needs.";
676
+ };
677
+ readonly accessKeyId: {
678
+ readonly type: "string";
679
+ readonly maxLength: 128;
680
+ readonly pattern: "^[A-Za-z0-9]+$";
681
+ readonly description: "The access key's identifier. Not a secret: it appears in every presigned URL. The secret half is set with external/accounts/secret/set and never returned.";
682
+ };
683
+ readonly probePrefix: {
684
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
685
+ readonly description: "Where external/accounts/probe writes its canary when no binding names a narrower prefix. Lets a new account be probed before anything is bound to it. Absent, a probe of an account with no bindings stops after `exchange` and reports `complete: false`.";
686
+ };
687
+ };
688
+ }, {
689
+ readonly type: "object";
690
+ readonly additionalProperties: false;
691
+ readonly required: readonly ["model", "network", "allowedCalls", "maxGasBudgetMist", "maxGasPerDayMist"];
692
+ readonly description: "No egress: the custodian signs and the consumer submits the transaction. The allow-list, the gas caps and the coin caps are the account's whole authority; a transaction outside them is refused before anything is signed.";
693
+ readonly properties: {
694
+ readonly model: {
695
+ readonly type: "string";
696
+ readonly const: "sui-signer";
697
+ };
698
+ readonly network: {
699
+ readonly type: "string";
700
+ readonly enum: readonly ["mainnet", "testnet", "devnet"];
701
+ };
702
+ readonly allowedCalls: {
703
+ readonly type: "array";
704
+ readonly minItems: 1;
705
+ readonly maxItems: 32;
706
+ readonly items: {
707
+ readonly $ref: "#/$defs/SuiMoveCall";
708
+ };
709
+ readonly description: "Every MoveCall command in a signed transaction must name one of these. For Walrus storage: the system package's `register_blob`, `certify_blob`, `extend_blob` and `delete_blob`, and the coin calls needed to pay for them.";
710
+ };
711
+ readonly allowedObjects: {
712
+ readonly type: "array";
713
+ readonly maxItems: 32;
714
+ readonly items: {
715
+ readonly type: "string";
716
+ readonly pattern: "^0x[0-9a-f]{64}$";
717
+ };
718
+ readonly description: "Shared objects a transaction may take as input, such as the Walrus system and staking objects. Absent means any object the allowed calls accept.";
719
+ };
720
+ readonly maxGasBudgetMist: {
721
+ readonly type: "integer";
722
+ readonly minimum: 1;
723
+ readonly description: "The largest gas budget one transaction may declare.";
724
+ };
725
+ readonly maxGasPerDayMist: {
726
+ readonly type: "integer";
727
+ readonly minimum: 1;
728
+ readonly description: "The total gas budget signed per rolling 24 hours.";
729
+ };
730
+ readonly maxCoinOutPerTx: {
731
+ readonly type: "array";
732
+ readonly maxItems: 8;
733
+ readonly items: {
734
+ readonly type: "object";
735
+ readonly additionalProperties: false;
736
+ readonly required: readonly ["coinType", "amount"];
737
+ readonly properties: {
738
+ readonly coinType: {
739
+ readonly type: "string";
740
+ readonly maxLength: 512;
741
+ readonly pattern: "^0x[0-9a-f]{1,64}::[A-Za-z0-9_]+::[A-Za-z0-9_]+$";
742
+ };
743
+ readonly amount: {
744
+ readonly type: "integer";
745
+ readonly minimum: 0;
746
+ };
747
+ };
748
+ };
749
+ readonly description: "Per coin type, the most a single transaction may spend or transfer out of the account's address, in the coin's smallest unit. A coin type not listed may not leave the address at all.";
750
+ };
751
+ };
752
+ }, {
753
+ readonly type: "object";
754
+ readonly additionalProperties: false;
755
+ readonly required: readonly ["model", "driver", "baseUrl"];
756
+ readonly description: "Egress: the host of `baseUrl`. The secret is set with external/accounts/secret/set and used only inside the custodian by `driver`; a provider reachable only by handing the consumer the raw key is not supported.";
757
+ readonly properties: {
758
+ readonly model: {
759
+ readonly type: "string";
760
+ readonly const: "static-secret";
761
+ };
762
+ readonly driver: {
763
+ readonly type: "string";
764
+ readonly maxLength: 64;
765
+ readonly pattern: "^[a-z0-9][a-z0-9-]*$";
766
+ readonly description: "The custodian's driver that uses the secret: performs a login or token exchange and returns a short-lived result. A custodian refuses a driver it does not implement.";
767
+ };
768
+ readonly baseUrl: {
769
+ readonly $ref: "#/$defs/ProviderHttpsUrl";
770
+ };
771
+ };
772
+ }];
773
+ };
774
+ readonly ProviderHttpsUrl: {
775
+ readonly title: "ProviderHttpsUrl";
776
+ readonly type: "string";
777
+ readonly format: "uri";
778
+ readonly maxLength: 2048;
779
+ readonly pattern: "^https://[^\\s\"'\\\\]+$";
780
+ };
781
+ readonly SuiMoveCall: {
782
+ readonly title: "SuiMoveCall";
783
+ readonly type: "object";
784
+ readonly additionalProperties: false;
785
+ readonly required: readonly ["package", "module", "function"];
786
+ readonly description: "One Move function an account's transactions may call.";
787
+ readonly properties: {
788
+ readonly package: {
789
+ readonly type: "string";
790
+ readonly pattern: "^0x[0-9a-f]{64}$";
791
+ };
792
+ readonly module: {
793
+ readonly type: "string";
794
+ readonly pattern: "^[A-Za-z][A-Za-z0-9_]{0,127}$";
795
+ };
796
+ readonly function: {
797
+ readonly type: "string";
798
+ readonly pattern: "^[A-Za-z][A-Za-z0-9_]{0,127}$";
799
+ };
800
+ };
801
+ };
802
+ readonly ProviderBucketName: {
803
+ readonly title: "ProviderBucketName";
804
+ readonly type: "string";
805
+ readonly minLength: 3;
806
+ readonly maxLength: 63;
807
+ readonly pattern: "^[a-z0-9][a-z0-9.-]*[a-z0-9]$";
808
+ readonly description: "A bucket name as S3 and GCS accept it. Validated rather than free so that it can be placed in a provider policy without escaping.";
809
+ };
810
+ readonly AwsArn: {
811
+ readonly title: "AwsArn";
812
+ readonly type: "string";
813
+ readonly maxLength: 2048;
814
+ readonly pattern: "^arn:aws[a-z-]*:[a-z0-9-]+:[a-z0-9-]*:[0-9]{0,12}:[A-Za-z0-9+=,.@_/:-]+$";
815
+ };
816
+ readonly AwsRegion: {
817
+ readonly title: "AwsRegion";
818
+ readonly type: "string";
819
+ readonly pattern: "^[a-z]{2}(-gov)?-[a-z]+-[0-9]$";
820
+ readonly maxLength: 32;
821
+ };
822
+ readonly AccountContextId: {
823
+ readonly title: "AccountContextId";
824
+ readonly type: "string";
825
+ readonly minLength: 1;
826
+ readonly maxLength: 256;
827
+ readonly description: "The custodian context that owns the account. Act scope in this context decides who may manage the account and who may consume it; the account's keys are derived in this context's key space.";
828
+ };
829
+ readonly AccountId: {
830
+ readonly title: "AccountId";
831
+ readonly type: "string";
832
+ readonly minLength: 1;
833
+ readonly maxLength: 64;
834
+ readonly pattern: "^[a-z0-9][a-z0-9-]*$";
835
+ readonly description: "The account's identifier within its context, chosen by whoever creates it. Lowercase letters, digits and hyphens, so that it can be embedded in a certificate subject, a token subject or a provider-side condition without escaping. Unique per context; never reused after deletion while anything that names it (a provider-side trust policy, an audit row) may still exist.";
836
+ };
837
+ };
838
+ };
839
+ /** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
840
+ export declare const RESPONSE_PAYLOAD_SCHEMA: {
841
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
842
+ readonly $ref: "#/$defs/Response";
843
+ readonly $defs: {
844
+ readonly Response: {
845
+ readonly $anchor: "response";
846
+ readonly title: "External Accounts — Keys — Rotate — response payload";
847
+ readonly type: "object";
848
+ readonly additionalProperties: false;
849
+ readonly required: readonly ["account"];
850
+ readonly properties: {
851
+ readonly account: {
852
+ readonly $ref: "#/$defs/ExternalAccount";
853
+ };
854
+ readonly setup: {
855
+ readonly $ref: "#/$defs/AccountSetupArtifacts";
856
+ readonly description: "On `stage` only.";
857
+ };
858
+ readonly ext: {
859
+ readonly $ref: "#/$defs/Ext";
860
+ };
861
+ };
862
+ };
863
+ readonly Ext: {
864
+ readonly title: "Ext";
865
+ readonly 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.";
866
+ readonly type: "object";
867
+ readonly minProperties: 1;
868
+ readonly additionalProperties: true;
869
+ readonly propertyNames: {
870
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
871
+ };
872
+ };
873
+ readonly AccountSetupArtifacts: {
874
+ readonly title: "AccountSetupArtifacts";
875
+ readonly type: "object";
876
+ readonly additionalProperties: false;
877
+ readonly required: readonly ["model", "artifacts", "steps"];
878
+ readonly description: "What an administrator does at the provider to make an account usable, generated by the custodian from the account's settings, public material and bindings. Public material and policy only: never a private key or secret, and the custodian never asks for the provider's administrator credentials.";
879
+ readonly properties: {
880
+ readonly model: {
881
+ readonly $ref: "#/$defs/AuthModel";
882
+ };
883
+ readonly artifacts: {
884
+ readonly type: "array";
885
+ readonly maxItems: 16;
886
+ readonly items: {
887
+ readonly type: "object";
888
+ readonly additionalProperties: false;
889
+ readonly required: readonly ["name", "mediaType", "content"];
890
+ readonly properties: {
891
+ readonly name: {
892
+ readonly type: "string";
893
+ readonly maxLength: 128;
894
+ readonly pattern: "^[A-Za-z0-9._-]+$";
895
+ readonly description: "File name to save it under: `trust-anchor.pem`, `jwks.json`, `permissions-policy.json`, `crl.pem`.";
896
+ };
897
+ readonly mediaType: {
898
+ readonly type: "string";
899
+ readonly maxLength: 128;
900
+ readonly pattern: "^[a-z]+/[a-z0-9.+-]+$";
901
+ };
902
+ readonly content: {
903
+ readonly type: "string";
904
+ readonly maxLength: 65536;
905
+ };
906
+ };
907
+ };
908
+ };
909
+ readonly steps: {
910
+ readonly type: "array";
911
+ readonly maxItems: 32;
912
+ readonly items: {
913
+ readonly type: "object";
914
+ readonly additionalProperties: false;
915
+ readonly required: readonly ["description"];
916
+ readonly properties: {
917
+ readonly description: {
918
+ readonly type: "string";
919
+ readonly maxLength: 1024;
920
+ };
921
+ readonly command: {
922
+ readonly type: "string";
923
+ readonly maxLength: 8192;
924
+ readonly description: "A provider CLI command (`aws rolesanywhere create-trust-anchor …`, `gcloud iam workload-identity-pools providers create-oidc … --jwk-json-path`, `az ad app credential reset --cert …`), referring to artifacts by `name`.";
925
+ };
926
+ };
927
+ };
928
+ };
929
+ };
930
+ };
931
+ readonly AuthModel: {
932
+ readonly title: "AuthModel";
933
+ readonly type: "string";
934
+ readonly enum: readonly ["aws-roles-anywhere", "gcp-wif-pinned", "azure-cert", "oauth2-private-key-jwt", "s3-static-presign", "sui-signer", "static-secret"];
935
+ readonly description: "How the account authenticates to its provider. Every model pins the custodian's verification material in the provider's own account, uploaded once, so no model requires the custodian to be reachable from the internet. `aws-roles-anywhere`: the custodian is the certificate authority of an IAM Roles Anywhere trust anchor, and signs CreateSession with a short-lived end-entity certificate it issued to the account's own key. `gcp-wif-pinned`: a Workload Identity Federation pool provider holds an uploaded JWKS; the custodian signs an ID token and exchanges it at Google's STS. `azure-cert`: a certificate uploaded to an Entra app registration; the custodian signs an RFC 7523 client assertion. `oauth2-private-key-jwt`: the same RFC 7523 client authentication against any token endpoint that registered the custodian's public key. `s3-static-presign`: an access-key pair for an S3-compatible store that cannot federate; the custodian presigns per-object URLs and never releases the key. `sui-signer`: a Sui address derived from the custodian's key; the custodian signs only allow-listed transactions. `static-secret`: an API key or token used inside the custodian by a named driver; last resort, never released.\n\nPlain OpenID Connect discovery federation is deliberately absent. It works by the provider fetching the issuer's JWKS from a public URL, which either makes the custodian reachable from the internet or makes whoever hosts a copy of the JWKS able to mint credentials for every federated role.";
936
+ };
937
+ readonly ExternalAccount: {
938
+ readonly title: "ExternalAccount";
939
+ readonly type: "object";
940
+ readonly additionalProperties: false;
941
+ readonly required: readonly ["id", "label", "context", "settings", "state", "bindings", "egressHosts", "providerSetupRequired", "createdAt", "updatedAt"];
942
+ readonly description: "An account as every read returns it. Contains no private key, no secret and no issued credential, to any reader.";
943
+ readonly properties: {
944
+ readonly id: {
945
+ readonly $ref: "#/$defs/AccountId";
946
+ };
947
+ readonly label: {
948
+ readonly type: "string";
949
+ readonly minLength: 1;
950
+ readonly maxLength: 128;
951
+ readonly description: "Display name. Untrusted text: render it, never interpret it.";
952
+ };
953
+ readonly context: {
954
+ readonly $ref: "#/$defs/AccountContextId";
955
+ };
956
+ readonly settings: {
957
+ readonly $ref: "#/$defs/AccountSettings";
958
+ };
959
+ readonly state: {
960
+ readonly $ref: "#/$defs/AccountState";
961
+ };
962
+ readonly publicMaterial: {
963
+ readonly $ref: "#/$defs/AccountPublicMaterial";
964
+ readonly description: "Absent for the static models, which hold a secret rather than a key.";
965
+ };
966
+ readonly secret: {
967
+ readonly $ref: "#/$defs/AccountSecretInfo";
968
+ readonly description: "Static models only; absent until the secret is set.";
969
+ };
970
+ readonly bindings: {
971
+ readonly type: "array";
972
+ readonly maxItems: 256;
973
+ readonly items: {
974
+ readonly $ref: "#/$defs/AccountBinding";
975
+ };
976
+ };
977
+ readonly egressHosts: {
978
+ readonly type: "array";
979
+ readonly maxItems: 8;
980
+ readonly items: {
981
+ readonly type: "string";
982
+ readonly maxLength: 253;
983
+ readonly pattern: "^[a-z0-9.-]+$";
984
+ };
985
+ readonly description: "The provider hosts the custodian connects to on this account's behalf, derived by the custodian from its settings: the token or session endpoints issuance uses, and the destinations external/accounts/probe dials (the object store's host, for a storage model). The custodian MUST NOT connect anywhere else on the account's behalf, so an egress proxy can allow exactly this set. Empty only for a model that neither exchanges nor probes over the network.";
986
+ };
987
+ readonly providerSetupRequired: {
988
+ readonly type: "boolean";
989
+ readonly description: "True when the account cannot be used until its provider-side setup is redone: after a restore that could not carry its key or secret (a wrapped RSA key, a static secret), or after a rotation awaiting confirmation.";
990
+ };
991
+ readonly lastProbe: {
992
+ readonly $ref: "#/$defs/AccountProbeReport";
993
+ };
994
+ readonly createdAt: {
995
+ readonly type: "string";
996
+ readonly format: "date-time";
997
+ };
998
+ readonly updatedAt: {
999
+ readonly type: "string";
1000
+ readonly format: "date-time";
1001
+ };
1002
+ };
1003
+ };
1004
+ readonly AccountProbeReport: {
1005
+ readonly title: "AccountProbeReport";
1006
+ readonly type: "object";
1007
+ readonly additionalProperties: false;
1008
+ readonly required: readonly ["at", "ok", "complete", "steps"];
1009
+ readonly properties: {
1010
+ readonly at: {
1011
+ readonly type: "string";
1012
+ readonly format: "date-time";
1013
+ };
1014
+ readonly ok: {
1015
+ readonly type: "boolean";
1016
+ readonly description: "True when every step that ran succeeded.";
1017
+ };
1018
+ readonly complete: {
1019
+ readonly type: "boolean";
1020
+ readonly description: "True only when the canary steps (`put`, `get`, `delete`, or the model's equivalent) ran, so the account was exercised end to end. A probe that stopped after `exchange` because nothing named a canary prefix is `complete: false` even when `ok` is true, and does not clear `providerSetupRequired`.";
1021
+ };
1022
+ readonly steps: {
1023
+ readonly type: "array";
1024
+ readonly maxItems: 8;
1025
+ readonly items: {
1026
+ readonly type: "object";
1027
+ readonly additionalProperties: false;
1028
+ readonly required: readonly ["step", "ok"];
1029
+ readonly properties: {
1030
+ readonly step: {
1031
+ readonly $ref: "#/$defs/AccountProbeStep";
1032
+ };
1033
+ readonly ok: {
1034
+ readonly type: "boolean";
1035
+ };
1036
+ readonly durationMs: {
1037
+ readonly type: "integer";
1038
+ readonly minimum: 0;
1039
+ };
1040
+ readonly providerError: {
1041
+ readonly type: "string";
1042
+ readonly maxLength: 2048;
1043
+ readonly description: "The provider's error, verbatim and truncated, so an administrator sees the cloud's own words. Untrusted text. A custodian MUST remove any credential, signature or token from it first.";
1044
+ };
1045
+ readonly providerRequestId: {
1046
+ readonly type: "string";
1047
+ readonly maxLength: 256;
1048
+ readonly pattern: "^[!-~]+$";
1049
+ };
1050
+ };
1051
+ };
1052
+ readonly description: "In order; the first failing step ends the probe.";
1053
+ };
1054
+ };
1055
+ };
1056
+ readonly AccountProbeStep: {
1057
+ readonly title: "AccountProbeStep";
1058
+ readonly type: "string";
1059
+ readonly enum: readonly ["sign", "exchange", "put", "get", "delete", "decode"];
1060
+ readonly description: "`sign`: the custodian signed its assertion, session request or test transaction. `exchange`: the provider issued a credential for it. `put`, `get`, `delete`: one canary object at the narrowest scope of the account's bindings. `decode`: for `sui-signer`, a built test transaction passed the allow-list (it is never submitted).";
1061
+ };
1062
+ readonly AccountBinding: {
1063
+ readonly title: "AccountBinding";
1064
+ readonly type: "object";
1065
+ readonly additionalProperties: false;
1066
+ readonly required: readonly ["consumer", "maxTtlSeconds", "ratePerMinute"];
1067
+ readonly description: "Who may use an account, and how far. One binding per consumer per account. A binding is checked before anything is signed: the caller must be `consumer`, proven by the request's own proof; the request must sit inside `scopeCeiling`; its TTL must not exceed `maxTtlSeconds`; and the binding's rate must not be exhausted.";
1068
+ readonly properties: {
1069
+ readonly consumer: {
1070
+ readonly type: "string";
1071
+ readonly minLength: 7;
1072
+ readonly maxLength: 2048;
1073
+ readonly pattern: "^did:[a-z0-9]+:\\S+$";
1074
+ readonly description: "The DID of the integration allowed to use the account.";
1075
+ };
1076
+ readonly scopeCeiling: {
1077
+ readonly $ref: "#/$defs/CredentialScopeCeiling";
1078
+ readonly description: "Required for storage and OAuth models; absent for `sui-signer`, whose ceiling is the account's own allow-list and caps.";
1079
+ };
1080
+ readonly maxTtlSeconds: {
1081
+ readonly type: "integer";
1082
+ readonly minimum: 60;
1083
+ readonly maximum: 3600;
1084
+ readonly description: "The longest credential lifetime the consumer may request. 900 (15 minutes) is RECOMMENDED; the ceiling is one hour.";
1085
+ };
1086
+ readonly ratePerMinute: {
1087
+ readonly type: "integer";
1088
+ readonly minimum: 1;
1089
+ readonly maximum: 600;
1090
+ readonly description: "Issuances or signatures per minute for this binding.";
1091
+ };
1092
+ readonly sourceCidrs: {
1093
+ readonly type: "array";
1094
+ readonly maxItems: 16;
1095
+ readonly items: {
1096
+ readonly type: "string";
1097
+ readonly maxLength: 49;
1098
+ readonly pattern: "^[0-9a-fA-F:.]+/[0-9]{1,3}$";
1099
+ };
1100
+ readonly description: "Where the provider supports it (`aws:SourceIp`), issued credentials are pinned to these networks, so a credential lifted from the consumer is useless elsewhere.";
1101
+ };
1102
+ readonly grantedAt: {
1103
+ readonly type: "string";
1104
+ readonly format: "date-time";
1105
+ };
1106
+ };
1107
+ };
1108
+ readonly CredentialScopeCeiling: {
1109
+ readonly title: "CredentialScopeCeiling";
1110
+ readonly type: "object";
1111
+ readonly additionalProperties: false;
1112
+ readonly description: "The widest scope a binding's consumer may request. An issuance is inside the ceiling when its `prefix` begins with one of `prefixes`, every one of its `actions` is in `actions`, and every one of its `scopes` is in `scopes`. Absent members confer nothing: a ceiling with no `prefixes` permits no storage issuance.";
1113
+ readonly properties: {
1114
+ readonly prefixes: {
1115
+ readonly type: "array";
1116
+ readonly minItems: 1;
1117
+ readonly maxItems: 64;
1118
+ readonly uniqueItems: true;
1119
+ readonly items: {
1120
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
1121
+ };
1122
+ };
1123
+ readonly actions: {
1124
+ readonly type: "array";
1125
+ readonly minItems: 1;
1126
+ readonly maxItems: 3;
1127
+ readonly uniqueItems: true;
1128
+ readonly items: {
1129
+ readonly $ref: "#/$defs/ProviderObjectAction";
1130
+ };
1131
+ };
1132
+ readonly scopes: {
1133
+ readonly type: "array";
1134
+ readonly maxItems: 64;
1135
+ readonly uniqueItems: true;
1136
+ readonly items: {
1137
+ readonly type: "string";
1138
+ readonly maxLength: 256;
1139
+ readonly pattern: "^[!#-\\[\\]-~]+$";
1140
+ };
1141
+ };
1142
+ };
1143
+ };
1144
+ readonly ProviderObjectAction: {
1145
+ readonly title: "ProviderObjectAction";
1146
+ readonly type: "string";
1147
+ readonly enum: readonly ["put", "get", "delete"];
1148
+ readonly description: "`put`: write an object. `get`: read one. `delete`: remove one. No list, ACL, policy or bucket-level action exists here, so none can be granted.";
1149
+ };
1150
+ readonly ProviderObjectPrefix: {
1151
+ readonly title: "ProviderObjectPrefix";
1152
+ readonly type: "string";
1153
+ readonly minLength: 2;
1154
+ readonly maxLength: 512;
1155
+ readonly pattern: "^([a-z0-9][a-z0-9._-]{0,127}/){1,16}$";
1156
+ readonly description: "An object-key prefix within the account's bucket: one or more segments of lowercase letters, digits, `.`, `_` and `-`, each beginning with a letter or digit and ending with `/`. No quote, backslash, wildcard, whitespace, `..` segment or empty segment can appear. That is deliberate: the custodian places this value inside a provider policy — an IAM session policy (JSON), a GCS Credential Access Boundary condition (CEL) — and a value able to carry a metacharacter can break out of the string it is placed in and widen the policy. That is a known class of defect (CVE-2026-42811, a CEL injection in downscoped GCS credentials). Even with this pattern, a custodian MUST build provider policies with the provider language's own encoder, never by string interpolation.";
1157
+ };
1158
+ readonly AccountSecretInfo: {
1159
+ readonly title: "AccountSecretInfo";
1160
+ readonly type: "object";
1161
+ readonly additionalProperties: false;
1162
+ readonly required: readonly ["fingerprint", "setAt"];
1163
+ readonly description: "That a static model's secret is set, and which one. Never its value.";
1164
+ readonly properties: {
1165
+ readonly fingerprint: {
1166
+ readonly $ref: "#/$defs/SecretFingerprint";
1167
+ };
1168
+ readonly setAt: {
1169
+ readonly type: "string";
1170
+ readonly format: "date-time";
1171
+ };
1172
+ };
1173
+ };
1174
+ readonly SecretFingerprint: {
1175
+ readonly title: "SecretFingerprint";
1176
+ readonly type: "string";
1177
+ readonly pattern: "^hmacsha256:[A-Za-z0-9_-]{22}$";
1178
+ readonly maxLength: 33;
1179
+ readonly description: "Which secret is set, without being a way to test guesses at it. `hmacsha256:` followed by the base64url encoding, without padding, of the first 16 bytes of HMAC-SHA256 over the secret's bytes under a fingerprint key the custodian holds and never discloses. Comparable only between fingerprints made by the same custodian: a re-entered value can be confirmed, while the same secret at two custodians gives unrelated fingerprints. Never a bare hash of the secret, which would let anyone who reads it run a dictionary against it offline; and deliberately not a DigestMultibase, since multihash has no code for a keyed digest.";
1180
+ };
1181
+ readonly AccountPublicMaterial: {
1182
+ readonly title: "AccountPublicMaterial";
1183
+ readonly type: "object";
1184
+ readonly additionalProperties: false;
1185
+ readonly required: readonly ["algorithm", "keyFingerprint"];
1186
+ readonly description: "The public half of the account's key, as the provider needs it. Never a private key.";
1187
+ readonly properties: {
1188
+ readonly algorithm: {
1189
+ readonly type: "string";
1190
+ readonly enum: readonly ["ES256", "RS256", "Secp256r1"];
1191
+ };
1192
+ readonly keyFingerprint: {
1193
+ readonly $ref: "#/$defs/DigestMultibase";
1194
+ readonly description: "Digest of the public key's SubjectPublicKeyInfo DER.";
1195
+ };
1196
+ readonly publicKeyJwk: {
1197
+ readonly type: "object";
1198
+ readonly additionalProperties: false;
1199
+ readonly required: readonly ["kty", "kid"];
1200
+ readonly description: "The public key as a JWK, with `kid`. Public members only: the schema admits no private member (`d`, `p`, `q`, `dp`, `dq`, `qi`), so a document carrying one fails validation.";
1201
+ readonly properties: {
1202
+ readonly kty: {
1203
+ readonly type: "string";
1204
+ readonly enum: readonly ["EC", "RSA"];
1205
+ };
1206
+ readonly crv: {
1207
+ readonly type: "string";
1208
+ readonly enum: readonly ["P-256"];
1209
+ };
1210
+ readonly x: {
1211
+ readonly type: "string";
1212
+ readonly maxLength: 1024;
1213
+ readonly pattern: "^[A-Za-z0-9_-]+$";
1214
+ };
1215
+ readonly y: {
1216
+ readonly type: "string";
1217
+ readonly maxLength: 1024;
1218
+ readonly pattern: "^[A-Za-z0-9_-]+$";
1219
+ };
1220
+ readonly n: {
1221
+ readonly type: "string";
1222
+ readonly maxLength: 1024;
1223
+ readonly pattern: "^[A-Za-z0-9_-]+$";
1224
+ };
1225
+ readonly e: {
1226
+ readonly type: "string";
1227
+ readonly maxLength: 16;
1228
+ readonly pattern: "^[A-Za-z0-9_-]+$";
1229
+ };
1230
+ readonly kid: {
1231
+ readonly type: "string";
1232
+ readonly maxLength: 128;
1233
+ readonly pattern: "^[!-~]+$";
1234
+ };
1235
+ readonly alg: {
1236
+ readonly type: "string";
1237
+ readonly enum: readonly ["ES256", "RS256"];
1238
+ };
1239
+ readonly use: {
1240
+ readonly type: "string";
1241
+ readonly const: "sig";
1242
+ };
1243
+ };
1244
+ };
1245
+ readonly certificatePem: {
1246
+ readonly type: "string";
1247
+ readonly maxLength: 16384;
1248
+ readonly pattern: "^-----BEGIN CERTIFICATE-----[A-Za-z0-9+/=\\r\\n]+-----END CERTIFICATE-----\\s*$";
1249
+ readonly description: "`aws-roles-anywhere`: the trust anchor's CA certificate. `azure-cert`: the certificate uploaded to the app registration.";
1250
+ };
1251
+ readonly address: {
1252
+ readonly type: "string";
1253
+ readonly pattern: "^0x[0-9a-f]{64}$";
1254
+ readonly description: "`sui-signer`: the Sui address the key controls.";
1255
+ };
1256
+ readonly pendingKeyFingerprint: {
1257
+ readonly $ref: "#/$defs/DigestMultibase";
1258
+ readonly description: "During a rotation (external/accounts/keys/rotate), the staged successor key, until it is confirmed and the current key retires.";
1259
+ };
1260
+ };
1261
+ };
1262
+ readonly DigestMultibase: {
1263
+ readonly title: "DigestMultibase";
1264
+ readonly description: "A cryptographic digest as a multibase-encoded multihash — the encoding the W3C Verifiable Credentials Data Model 2.0 defines for `digestMultibase`, and the one `did:webvh` uses for its SCID and entry hashes.\n\nMultihash carries the hash algorithm in-band, so the value is self-describing and the wire format survives an algorithm change without a schema revision; multibase does the same for the base encoding, so a verifier never infers base58 from base64url by context. A bare hex string or a `sha-256:`-style prefix hard-codes one algorithm into the wire contract and is non-conforming here.\n\nThis definition constrains the *encoding only*. What the digest is computed over is stated by each referencing field, because it differs legitimately: a digest over a JSON document is taken over its RFC 8785 (JCS) canonicalization, while a digest over an opaque artifact is taken over its bytes. A field whose input is a JSON document and which does not name a canonicalization is not reproducible.\n\nRestricted to the two multibase headers W3C Controlled Identifiers 1.0 §2.4 normatively requires — `z` (base58btc) and `u` (base64url-no-pad). CID permits others but states that \"interoperability is not guaranteed between implementations using such values\", and a registry whose purpose is interoperability should not mint digests a conforming verifier may be unable to read. The alphabets are enforced rather than assumed: base58btc excludes 0, O, I and l, and an earlier permissive pattern let three published examples carry digests that were not valid base58 at all. base58btc is RECOMMENDED, for consistency with `did:key` and `did:webvh`.";
1265
+ readonly type: "string";
1266
+ readonly minLength: 16;
1267
+ readonly pattern: "^(z[1-9A-HJ-NP-Za-km-z]+|u[A-Za-z0-9_-]+)$";
1268
+ readonly examples: readonly ["zQmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR"];
1269
+ };
1270
+ readonly AccountState: {
1271
+ readonly title: "AccountState";
1272
+ readonly type: "string";
1273
+ readonly enum: readonly ["active", "suspended", "archived"];
1274
+ readonly description: "`active`: usable by its bindings. `suspended`: every issuance and signature is refused at once; management reads continue; resumable. `archived`: hidden from default listings, refused for use, restorable. Deletion removes the record.";
1275
+ };
1276
+ readonly AccountSettings: {
1277
+ readonly title: "AccountSettings";
1278
+ readonly description: "Per-model account settings, discriminated by `model`: every branch is an object whose `model` member is a `const`, which is what lets each generated binding emit a tagged union, so an unusable setting is answered as `external:invalidSettings` naming the member rather than as an unparseable payload. Never a secret: every value here is returned to anyone who may read the account. Branches are referred to by their `model` (\"the `sui-signer` settings\"). They carry no `title`, so that every binding renders each as a plain variant of this union.";
1279
+ readonly oneOf: readonly [{
1280
+ readonly type: "object";
1281
+ readonly additionalProperties: false;
1282
+ readonly required: readonly ["model", "region", "profileArn", "roleArn", "trustAnchorArn"];
1283
+ readonly description: "Egress: `rolesanywhere.<region>.amazonaws.com`, plus `sts.<region>.amazonaws.com` when `chainedRoleArn` is set.";
1284
+ readonly properties: {
1285
+ readonly model: {
1286
+ readonly type: "string";
1287
+ readonly const: "aws-roles-anywhere";
1288
+ };
1289
+ readonly region: {
1290
+ readonly $ref: "#/$defs/AwsRegion";
1291
+ };
1292
+ readonly trustAnchorArn: {
1293
+ readonly $ref: "#/$defs/AwsArn";
1294
+ readonly description: "The trust anchor holding the custodian's CA certificate. Recorded after the administrator creates it from external/accounts/setup.";
1295
+ };
1296
+ readonly profileArn: {
1297
+ readonly $ref: "#/$defs/AwsArn";
1298
+ };
1299
+ readonly roleArn: {
1300
+ readonly $ref: "#/$defs/AwsArn";
1301
+ };
1302
+ readonly chainedRoleArn: {
1303
+ readonly $ref: "#/$defs/AwsArn";
1304
+ readonly description: "When set, every issuance chains an AssumeRole into this role carrying the downscoping session policy, for deployments whose Roles Anywhere profile cannot carry one per request. Caps a credential at one hour.";
1305
+ };
1306
+ readonly bucket: {
1307
+ readonly $ref: "#/$defs/ProviderBucketName";
1308
+ readonly description: "The S3 bucket issuances are scoped within. Required for an account whose bindings issue storage scopes.";
1309
+ };
1310
+ readonly probePrefix: {
1311
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
1312
+ readonly description: "Where external/accounts/probe writes its canary when no binding names a narrower prefix. Lets a new account be probed before anything is bound to it. Absent, a probe of an account with no bindings stops after `exchange` and reports `complete: false`.";
1313
+ };
1314
+ };
1315
+ }, {
1316
+ readonly type: "object";
1317
+ readonly additionalProperties: false;
1318
+ readonly required: readonly ["model", "projectNumber", "poolId", "providerId"];
1319
+ readonly description: "Egress: `sts.googleapis.com`, plus `iamcredentials.googleapis.com` when `serviceAccount` is set.";
1320
+ readonly properties: {
1321
+ readonly model: {
1322
+ readonly type: "string";
1323
+ readonly const: "gcp-wif-pinned";
1324
+ };
1325
+ readonly projectNumber: {
1326
+ readonly type: "string";
1327
+ readonly pattern: "^[0-9]{1,20}$";
1328
+ };
1329
+ readonly poolId: {
1330
+ readonly type: "string";
1331
+ readonly pattern: "^[a-z0-9-]{4,32}$";
1332
+ };
1333
+ readonly providerId: {
1334
+ readonly type: "string";
1335
+ readonly pattern: "^[a-z0-9-]{4,32}$";
1336
+ };
1337
+ readonly serviceAccount: {
1338
+ readonly type: "string";
1339
+ readonly maxLength: 254;
1340
+ readonly pattern: "^[a-z0-9-]+@[a-z0-9-]+\\.iam\\.gserviceaccount\\.com$";
1341
+ readonly description: "When set, the federated token is exchanged for this service account's access token.";
1342
+ };
1343
+ readonly signingAlgorithm: {
1344
+ readonly type: "string";
1345
+ readonly enum: readonly ["ES256", "RS256"];
1346
+ readonly description: "The ID-token algorithm. ES256 unless the provider refuses it. Absent means ES256.";
1347
+ };
1348
+ readonly bucket: {
1349
+ readonly $ref: "#/$defs/ProviderBucketName";
1350
+ readonly description: "The GCS bucket issuances are scoped within, by a Credential Access Boundary.";
1351
+ };
1352
+ readonly probePrefix: {
1353
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
1354
+ readonly description: "Where external/accounts/probe writes its canary when no binding names a narrower prefix. Lets a new account be probed before anything is bound to it. Absent, a probe of an account with no bindings stops after `exchange` and reports `complete: false`.";
1355
+ };
1356
+ };
1357
+ }, {
1358
+ readonly type: "object";
1359
+ readonly additionalProperties: false;
1360
+ readonly required: readonly ["model", "tenantId", "clientId", "tokenScope"];
1361
+ readonly description: "Egress: `login.microsoftonline.com`, or the sovereign-cloud authority named in `authorityHost`.";
1362
+ readonly properties: {
1363
+ readonly model: {
1364
+ readonly type: "string";
1365
+ readonly const: "azure-cert";
1366
+ };
1367
+ readonly tenantId: {
1368
+ readonly type: "string";
1369
+ readonly pattern: "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$";
1370
+ };
1371
+ readonly clientId: {
1372
+ readonly type: "string";
1373
+ readonly pattern: "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$";
1374
+ };
1375
+ readonly tokenScope: {
1376
+ readonly type: "string";
1377
+ readonly maxLength: 512;
1378
+ readonly pattern: "^[A-Za-z0-9:/._-]+$";
1379
+ readonly description: "The `scope` requested at the token endpoint, such as `https://storage.azure.com/.default`.";
1380
+ };
1381
+ readonly authorityHost: {
1382
+ readonly type: "string";
1383
+ readonly maxLength: 253;
1384
+ readonly pattern: "^[a-z0-9.-]+$";
1385
+ readonly description: "Absent means `login.microsoftonline.com`.";
1386
+ };
1387
+ };
1388
+ }, {
1389
+ readonly type: "object";
1390
+ readonly additionalProperties: false;
1391
+ readonly required: readonly ["model", "tokenEndpoint", "clientId"];
1392
+ readonly description: "Egress: the host of `tokenEndpoint`, and nothing else.";
1393
+ readonly properties: {
1394
+ readonly model: {
1395
+ readonly type: "string";
1396
+ readonly const: "oauth2-private-key-jwt";
1397
+ };
1398
+ readonly tokenEndpoint: {
1399
+ readonly $ref: "#/$defs/ProviderHttpsUrl";
1400
+ };
1401
+ readonly clientId: {
1402
+ readonly type: "string";
1403
+ readonly minLength: 1;
1404
+ readonly maxLength: 512;
1405
+ readonly pattern: "^[!-~]+$";
1406
+ };
1407
+ readonly audience: {
1408
+ readonly type: "string";
1409
+ readonly maxLength: 2048;
1410
+ readonly pattern: "^[!-~]+$";
1411
+ readonly description: "The assertion's `aud`. Absent means `tokenEndpoint`.";
1412
+ };
1413
+ readonly scopes: {
1414
+ readonly type: "array";
1415
+ readonly maxItems: 64;
1416
+ readonly uniqueItems: true;
1417
+ readonly items: {
1418
+ readonly type: "string";
1419
+ readonly maxLength: 256;
1420
+ readonly pattern: "^[!#-\\[\\]-~]+$";
1421
+ };
1422
+ readonly description: "The scopes a binding may request, the ceiling for every issuance.";
1423
+ };
1424
+ readonly signingAlgorithm: {
1425
+ readonly type: "string";
1426
+ readonly enum: readonly ["ES256", "RS256"];
1427
+ };
1428
+ };
1429
+ }, {
1430
+ readonly type: "object";
1431
+ readonly additionalProperties: false;
1432
+ readonly required: readonly ["model", "endpoint", "region", "bucket", "accessKeyId"];
1433
+ readonly description: "Issuance needs no egress: presigning is a computation inside the custodian, and the consumer uses the URL itself. The probe connects to the host of `endpoint`, which `egressHosts` therefore lists.";
1434
+ readonly properties: {
1435
+ readonly model: {
1436
+ readonly type: "string";
1437
+ readonly const: "s3-static-presign";
1438
+ };
1439
+ readonly endpoint: {
1440
+ readonly $ref: "#/$defs/ProviderHttpsUrl";
1441
+ };
1442
+ readonly region: {
1443
+ readonly type: "string";
1444
+ readonly maxLength: 64;
1445
+ readonly pattern: "^[a-z0-9-]+$";
1446
+ readonly description: "The SigV4 signing region; `auto` for Cloudflare R2.";
1447
+ };
1448
+ readonly bucket: {
1449
+ readonly $ref: "#/$defs/ProviderBucketName";
1450
+ };
1451
+ readonly pathStyle: {
1452
+ readonly type: "boolean";
1453
+ readonly description: "Address the bucket in the path rather than the host name, as MinIO usually needs.";
1454
+ };
1455
+ readonly accessKeyId: {
1456
+ readonly type: "string";
1457
+ readonly maxLength: 128;
1458
+ readonly pattern: "^[A-Za-z0-9]+$";
1459
+ readonly description: "The access key's identifier. Not a secret: it appears in every presigned URL. The secret half is set with external/accounts/secret/set and never returned.";
1460
+ };
1461
+ readonly probePrefix: {
1462
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
1463
+ readonly description: "Where external/accounts/probe writes its canary when no binding names a narrower prefix. Lets a new account be probed before anything is bound to it. Absent, a probe of an account with no bindings stops after `exchange` and reports `complete: false`.";
1464
+ };
1465
+ };
1466
+ }, {
1467
+ readonly type: "object";
1468
+ readonly additionalProperties: false;
1469
+ readonly required: readonly ["model", "network", "allowedCalls", "maxGasBudgetMist", "maxGasPerDayMist"];
1470
+ readonly description: "No egress: the custodian signs and the consumer submits the transaction. The allow-list, the gas caps and the coin caps are the account's whole authority; a transaction outside them is refused before anything is signed.";
1471
+ readonly properties: {
1472
+ readonly model: {
1473
+ readonly type: "string";
1474
+ readonly const: "sui-signer";
1475
+ };
1476
+ readonly network: {
1477
+ readonly type: "string";
1478
+ readonly enum: readonly ["mainnet", "testnet", "devnet"];
1479
+ };
1480
+ readonly allowedCalls: {
1481
+ readonly type: "array";
1482
+ readonly minItems: 1;
1483
+ readonly maxItems: 32;
1484
+ readonly items: {
1485
+ readonly $ref: "#/$defs/SuiMoveCall";
1486
+ };
1487
+ readonly description: "Every MoveCall command in a signed transaction must name one of these. For Walrus storage: the system package's `register_blob`, `certify_blob`, `extend_blob` and `delete_blob`, and the coin calls needed to pay for them.";
1488
+ };
1489
+ readonly allowedObjects: {
1490
+ readonly type: "array";
1491
+ readonly maxItems: 32;
1492
+ readonly items: {
1493
+ readonly type: "string";
1494
+ readonly pattern: "^0x[0-9a-f]{64}$";
1495
+ };
1496
+ readonly description: "Shared objects a transaction may take as input, such as the Walrus system and staking objects. Absent means any object the allowed calls accept.";
1497
+ };
1498
+ readonly maxGasBudgetMist: {
1499
+ readonly type: "integer";
1500
+ readonly minimum: 1;
1501
+ readonly description: "The largest gas budget one transaction may declare.";
1502
+ };
1503
+ readonly maxGasPerDayMist: {
1504
+ readonly type: "integer";
1505
+ readonly minimum: 1;
1506
+ readonly description: "The total gas budget signed per rolling 24 hours.";
1507
+ };
1508
+ readonly maxCoinOutPerTx: {
1509
+ readonly type: "array";
1510
+ readonly maxItems: 8;
1511
+ readonly items: {
1512
+ readonly type: "object";
1513
+ readonly additionalProperties: false;
1514
+ readonly required: readonly ["coinType", "amount"];
1515
+ readonly properties: {
1516
+ readonly coinType: {
1517
+ readonly type: "string";
1518
+ readonly maxLength: 512;
1519
+ readonly pattern: "^0x[0-9a-f]{1,64}::[A-Za-z0-9_]+::[A-Za-z0-9_]+$";
1520
+ };
1521
+ readonly amount: {
1522
+ readonly type: "integer";
1523
+ readonly minimum: 0;
1524
+ };
1525
+ };
1526
+ };
1527
+ readonly description: "Per coin type, the most a single transaction may spend or transfer out of the account's address, in the coin's smallest unit. A coin type not listed may not leave the address at all.";
1528
+ };
1529
+ };
1530
+ }, {
1531
+ readonly type: "object";
1532
+ readonly additionalProperties: false;
1533
+ readonly required: readonly ["model", "driver", "baseUrl"];
1534
+ readonly description: "Egress: the host of `baseUrl`. The secret is set with external/accounts/secret/set and used only inside the custodian by `driver`; a provider reachable only by handing the consumer the raw key is not supported.";
1535
+ readonly properties: {
1536
+ readonly model: {
1537
+ readonly type: "string";
1538
+ readonly const: "static-secret";
1539
+ };
1540
+ readonly driver: {
1541
+ readonly type: "string";
1542
+ readonly maxLength: 64;
1543
+ readonly pattern: "^[a-z0-9][a-z0-9-]*$";
1544
+ readonly description: "The custodian's driver that uses the secret: performs a login or token exchange and returns a short-lived result. A custodian refuses a driver it does not implement.";
1545
+ };
1546
+ readonly baseUrl: {
1547
+ readonly $ref: "#/$defs/ProviderHttpsUrl";
1548
+ };
1549
+ };
1550
+ }];
1551
+ };
1552
+ readonly ProviderHttpsUrl: {
1553
+ readonly title: "ProviderHttpsUrl";
1554
+ readonly type: "string";
1555
+ readonly format: "uri";
1556
+ readonly maxLength: 2048;
1557
+ readonly pattern: "^https://[^\\s\"'\\\\]+$";
1558
+ };
1559
+ readonly SuiMoveCall: {
1560
+ readonly title: "SuiMoveCall";
1561
+ readonly type: "object";
1562
+ readonly additionalProperties: false;
1563
+ readonly required: readonly ["package", "module", "function"];
1564
+ readonly description: "One Move function an account's transactions may call.";
1565
+ readonly properties: {
1566
+ readonly package: {
1567
+ readonly type: "string";
1568
+ readonly pattern: "^0x[0-9a-f]{64}$";
1569
+ };
1570
+ readonly module: {
1571
+ readonly type: "string";
1572
+ readonly pattern: "^[A-Za-z][A-Za-z0-9_]{0,127}$";
1573
+ };
1574
+ readonly function: {
1575
+ readonly type: "string";
1576
+ readonly pattern: "^[A-Za-z][A-Za-z0-9_]{0,127}$";
1577
+ };
1578
+ };
1579
+ };
1580
+ readonly ProviderBucketName: {
1581
+ readonly title: "ProviderBucketName";
1582
+ readonly type: "string";
1583
+ readonly minLength: 3;
1584
+ readonly maxLength: 63;
1585
+ readonly pattern: "^[a-z0-9][a-z0-9.-]*[a-z0-9]$";
1586
+ readonly description: "A bucket name as S3 and GCS accept it. Validated rather than free so that it can be placed in a provider policy without escaping.";
1587
+ };
1588
+ readonly AwsArn: {
1589
+ readonly title: "AwsArn";
1590
+ readonly type: "string";
1591
+ readonly maxLength: 2048;
1592
+ readonly pattern: "^arn:aws[a-z-]*:[a-z0-9-]+:[a-z0-9-]*:[0-9]{0,12}:[A-Za-z0-9+=,.@_/:-]+$";
1593
+ };
1594
+ readonly AwsRegion: {
1595
+ readonly title: "AwsRegion";
1596
+ readonly type: "string";
1597
+ readonly pattern: "^[a-z]{2}(-gov)?-[a-z]+-[0-9]$";
1598
+ readonly maxLength: 32;
1599
+ };
1600
+ readonly AccountContextId: {
1601
+ readonly title: "AccountContextId";
1602
+ readonly type: "string";
1603
+ readonly minLength: 1;
1604
+ readonly maxLength: 256;
1605
+ readonly description: "The custodian context that owns the account. Act scope in this context decides who may manage the account and who may consume it; the account's keys are derived in this context's key space.";
1606
+ };
1607
+ readonly AccountId: {
1608
+ readonly title: "AccountId";
1609
+ readonly type: "string";
1610
+ readonly minLength: 1;
1611
+ readonly maxLength: 64;
1612
+ readonly pattern: "^[a-z0-9][a-z0-9-]*$";
1613
+ readonly description: "The account's identifier within its context, chosen by whoever creates it. Lowercase letters, digits and hyphens, so that it can be embedded in a certificate subject, a token subject or a provider-side condition without escaping. Unique per context; never reused after deletion while anything that names it (a provider-side trust policy, an audit row) may still exist.";
1614
+ };
1615
+ };
1616
+ };
1617
+ /**
1618
+ * SPEC.md §7.2 policy for the request variant, from this specification's
1619
+ * front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
1620
+ * per-specification and cannot be derived from the document alone, and
1621
+ * item 2 needs the schema this carries.
1622
+ */
1623
+ export declare const SPEC: {
1624
+ readonly typeUri: "https://trusttasks.org/spec/external/accounts/keys/rotate/0.1";
1625
+ readonly isBearer: false;
1626
+ readonly isProofRequired: true;
1627
+ readonly isRecipientRequired: true;
1628
+ readonly isIssuedAtRequired: true;
1629
+ readonly payloadSchema: {
1630
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
1631
+ readonly $id: "https://trusttasks.org/spec/external/accounts/keys/rotate/0.1";
1632
+ readonly title: "External Accounts — Keys — Rotate — payload";
1633
+ readonly description: "Rotate an external account's key: stage, confirm or abandon. The outer document members are owned by the framework — SPEC §6.3.";
1634
+ readonly type: "object";
1635
+ readonly additionalProperties: false;
1636
+ readonly required: readonly ["context", "id", "phase"];
1637
+ readonly properties: {
1638
+ readonly context: {
1639
+ readonly $ref: "#/$defs/AccountContextId";
1640
+ };
1641
+ readonly id: {
1642
+ readonly $ref: "#/$defs/AccountId";
1643
+ };
1644
+ readonly phase: {
1645
+ readonly type: "string";
1646
+ readonly enum: readonly ["stage", "confirm", "abandon"];
1647
+ };
1648
+ readonly ext: {
1649
+ readonly $ref: "#/$defs/Ext";
1650
+ };
1651
+ };
1652
+ readonly $defs: {
1653
+ readonly Response: {
1654
+ readonly $anchor: "response";
1655
+ readonly title: "External Accounts — Keys — Rotate — response payload";
1656
+ readonly type: "object";
1657
+ readonly additionalProperties: false;
1658
+ readonly required: readonly ["account"];
1659
+ readonly properties: {
1660
+ readonly account: {
1661
+ readonly $ref: "#/$defs/ExternalAccount";
1662
+ };
1663
+ readonly setup: {
1664
+ readonly $ref: "#/$defs/AccountSetupArtifacts";
1665
+ readonly description: "On `stage` only.";
1666
+ };
1667
+ readonly ext: {
1668
+ readonly $ref: "#/$defs/Ext";
1669
+ };
1670
+ };
1671
+ };
1672
+ readonly Ext: {
1673
+ readonly title: "Ext";
1674
+ readonly 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.";
1675
+ readonly type: "object";
1676
+ readonly minProperties: 1;
1677
+ readonly additionalProperties: true;
1678
+ readonly propertyNames: {
1679
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
1680
+ };
1681
+ };
1682
+ readonly AccountSetupArtifacts: {
1683
+ readonly title: "AccountSetupArtifacts";
1684
+ readonly type: "object";
1685
+ readonly additionalProperties: false;
1686
+ readonly required: readonly ["model", "artifacts", "steps"];
1687
+ readonly description: "What an administrator does at the provider to make an account usable, generated by the custodian from the account's settings, public material and bindings. Public material and policy only: never a private key or secret, and the custodian never asks for the provider's administrator credentials.";
1688
+ readonly properties: {
1689
+ readonly model: {
1690
+ readonly $ref: "#/$defs/AuthModel";
1691
+ };
1692
+ readonly artifacts: {
1693
+ readonly type: "array";
1694
+ readonly maxItems: 16;
1695
+ readonly items: {
1696
+ readonly type: "object";
1697
+ readonly additionalProperties: false;
1698
+ readonly required: readonly ["name", "mediaType", "content"];
1699
+ readonly properties: {
1700
+ readonly name: {
1701
+ readonly type: "string";
1702
+ readonly maxLength: 128;
1703
+ readonly pattern: "^[A-Za-z0-9._-]+$";
1704
+ readonly description: "File name to save it under: `trust-anchor.pem`, `jwks.json`, `permissions-policy.json`, `crl.pem`.";
1705
+ };
1706
+ readonly mediaType: {
1707
+ readonly type: "string";
1708
+ readonly maxLength: 128;
1709
+ readonly pattern: "^[a-z]+/[a-z0-9.+-]+$";
1710
+ };
1711
+ readonly content: {
1712
+ readonly type: "string";
1713
+ readonly maxLength: 65536;
1714
+ };
1715
+ };
1716
+ };
1717
+ };
1718
+ readonly steps: {
1719
+ readonly type: "array";
1720
+ readonly maxItems: 32;
1721
+ readonly items: {
1722
+ readonly type: "object";
1723
+ readonly additionalProperties: false;
1724
+ readonly required: readonly ["description"];
1725
+ readonly properties: {
1726
+ readonly description: {
1727
+ readonly type: "string";
1728
+ readonly maxLength: 1024;
1729
+ };
1730
+ readonly command: {
1731
+ readonly type: "string";
1732
+ readonly maxLength: 8192;
1733
+ readonly description: "A provider CLI command (`aws rolesanywhere create-trust-anchor …`, `gcloud iam workload-identity-pools providers create-oidc … --jwk-json-path`, `az ad app credential reset --cert …`), referring to artifacts by `name`.";
1734
+ };
1735
+ };
1736
+ };
1737
+ };
1738
+ };
1739
+ };
1740
+ readonly AuthModel: {
1741
+ readonly title: "AuthModel";
1742
+ readonly type: "string";
1743
+ readonly enum: readonly ["aws-roles-anywhere", "gcp-wif-pinned", "azure-cert", "oauth2-private-key-jwt", "s3-static-presign", "sui-signer", "static-secret"];
1744
+ readonly description: "How the account authenticates to its provider. Every model pins the custodian's verification material in the provider's own account, uploaded once, so no model requires the custodian to be reachable from the internet. `aws-roles-anywhere`: the custodian is the certificate authority of an IAM Roles Anywhere trust anchor, and signs CreateSession with a short-lived end-entity certificate it issued to the account's own key. `gcp-wif-pinned`: a Workload Identity Federation pool provider holds an uploaded JWKS; the custodian signs an ID token and exchanges it at Google's STS. `azure-cert`: a certificate uploaded to an Entra app registration; the custodian signs an RFC 7523 client assertion. `oauth2-private-key-jwt`: the same RFC 7523 client authentication against any token endpoint that registered the custodian's public key. `s3-static-presign`: an access-key pair for an S3-compatible store that cannot federate; the custodian presigns per-object URLs and never releases the key. `sui-signer`: a Sui address derived from the custodian's key; the custodian signs only allow-listed transactions. `static-secret`: an API key or token used inside the custodian by a named driver; last resort, never released.\n\nPlain OpenID Connect discovery federation is deliberately absent. It works by the provider fetching the issuer's JWKS from a public URL, which either makes the custodian reachable from the internet or makes whoever hosts a copy of the JWKS able to mint credentials for every federated role.";
1745
+ };
1746
+ readonly ExternalAccount: {
1747
+ readonly title: "ExternalAccount";
1748
+ readonly type: "object";
1749
+ readonly additionalProperties: false;
1750
+ readonly required: readonly ["id", "label", "context", "settings", "state", "bindings", "egressHosts", "providerSetupRequired", "createdAt", "updatedAt"];
1751
+ readonly description: "An account as every read returns it. Contains no private key, no secret and no issued credential, to any reader.";
1752
+ readonly properties: {
1753
+ readonly id: {
1754
+ readonly $ref: "#/$defs/AccountId";
1755
+ };
1756
+ readonly label: {
1757
+ readonly type: "string";
1758
+ readonly minLength: 1;
1759
+ readonly maxLength: 128;
1760
+ readonly description: "Display name. Untrusted text: render it, never interpret it.";
1761
+ };
1762
+ readonly context: {
1763
+ readonly $ref: "#/$defs/AccountContextId";
1764
+ };
1765
+ readonly settings: {
1766
+ readonly $ref: "#/$defs/AccountSettings";
1767
+ };
1768
+ readonly state: {
1769
+ readonly $ref: "#/$defs/AccountState";
1770
+ };
1771
+ readonly publicMaterial: {
1772
+ readonly $ref: "#/$defs/AccountPublicMaterial";
1773
+ readonly description: "Absent for the static models, which hold a secret rather than a key.";
1774
+ };
1775
+ readonly secret: {
1776
+ readonly $ref: "#/$defs/AccountSecretInfo";
1777
+ readonly description: "Static models only; absent until the secret is set.";
1778
+ };
1779
+ readonly bindings: {
1780
+ readonly type: "array";
1781
+ readonly maxItems: 256;
1782
+ readonly items: {
1783
+ readonly $ref: "#/$defs/AccountBinding";
1784
+ };
1785
+ };
1786
+ readonly egressHosts: {
1787
+ readonly type: "array";
1788
+ readonly maxItems: 8;
1789
+ readonly items: {
1790
+ readonly type: "string";
1791
+ readonly maxLength: 253;
1792
+ readonly pattern: "^[a-z0-9.-]+$";
1793
+ };
1794
+ readonly description: "The provider hosts the custodian connects to on this account's behalf, derived by the custodian from its settings: the token or session endpoints issuance uses, and the destinations external/accounts/probe dials (the object store's host, for a storage model). The custodian MUST NOT connect anywhere else on the account's behalf, so an egress proxy can allow exactly this set. Empty only for a model that neither exchanges nor probes over the network.";
1795
+ };
1796
+ readonly providerSetupRequired: {
1797
+ readonly type: "boolean";
1798
+ readonly description: "True when the account cannot be used until its provider-side setup is redone: after a restore that could not carry its key or secret (a wrapped RSA key, a static secret), or after a rotation awaiting confirmation.";
1799
+ };
1800
+ readonly lastProbe: {
1801
+ readonly $ref: "#/$defs/AccountProbeReport";
1802
+ };
1803
+ readonly createdAt: {
1804
+ readonly type: "string";
1805
+ readonly format: "date-time";
1806
+ };
1807
+ readonly updatedAt: {
1808
+ readonly type: "string";
1809
+ readonly format: "date-time";
1810
+ };
1811
+ };
1812
+ };
1813
+ readonly AccountProbeReport: {
1814
+ readonly title: "AccountProbeReport";
1815
+ readonly type: "object";
1816
+ readonly additionalProperties: false;
1817
+ readonly required: readonly ["at", "ok", "complete", "steps"];
1818
+ readonly properties: {
1819
+ readonly at: {
1820
+ readonly type: "string";
1821
+ readonly format: "date-time";
1822
+ };
1823
+ readonly ok: {
1824
+ readonly type: "boolean";
1825
+ readonly description: "True when every step that ran succeeded.";
1826
+ };
1827
+ readonly complete: {
1828
+ readonly type: "boolean";
1829
+ readonly description: "True only when the canary steps (`put`, `get`, `delete`, or the model's equivalent) ran, so the account was exercised end to end. A probe that stopped after `exchange` because nothing named a canary prefix is `complete: false` even when `ok` is true, and does not clear `providerSetupRequired`.";
1830
+ };
1831
+ readonly steps: {
1832
+ readonly type: "array";
1833
+ readonly maxItems: 8;
1834
+ readonly items: {
1835
+ readonly type: "object";
1836
+ readonly additionalProperties: false;
1837
+ readonly required: readonly ["step", "ok"];
1838
+ readonly properties: {
1839
+ readonly step: {
1840
+ readonly $ref: "#/$defs/AccountProbeStep";
1841
+ };
1842
+ readonly ok: {
1843
+ readonly type: "boolean";
1844
+ };
1845
+ readonly durationMs: {
1846
+ readonly type: "integer";
1847
+ readonly minimum: 0;
1848
+ };
1849
+ readonly providerError: {
1850
+ readonly type: "string";
1851
+ readonly maxLength: 2048;
1852
+ readonly description: "The provider's error, verbatim and truncated, so an administrator sees the cloud's own words. Untrusted text. A custodian MUST remove any credential, signature or token from it first.";
1853
+ };
1854
+ readonly providerRequestId: {
1855
+ readonly type: "string";
1856
+ readonly maxLength: 256;
1857
+ readonly pattern: "^[!-~]+$";
1858
+ };
1859
+ };
1860
+ };
1861
+ readonly description: "In order; the first failing step ends the probe.";
1862
+ };
1863
+ };
1864
+ };
1865
+ readonly AccountProbeStep: {
1866
+ readonly title: "AccountProbeStep";
1867
+ readonly type: "string";
1868
+ readonly enum: readonly ["sign", "exchange", "put", "get", "delete", "decode"];
1869
+ readonly description: "`sign`: the custodian signed its assertion, session request or test transaction. `exchange`: the provider issued a credential for it. `put`, `get`, `delete`: one canary object at the narrowest scope of the account's bindings. `decode`: for `sui-signer`, a built test transaction passed the allow-list (it is never submitted).";
1870
+ };
1871
+ readonly AccountBinding: {
1872
+ readonly title: "AccountBinding";
1873
+ readonly type: "object";
1874
+ readonly additionalProperties: false;
1875
+ readonly required: readonly ["consumer", "maxTtlSeconds", "ratePerMinute"];
1876
+ readonly description: "Who may use an account, and how far. One binding per consumer per account. A binding is checked before anything is signed: the caller must be `consumer`, proven by the request's own proof; the request must sit inside `scopeCeiling`; its TTL must not exceed `maxTtlSeconds`; and the binding's rate must not be exhausted.";
1877
+ readonly properties: {
1878
+ readonly consumer: {
1879
+ readonly type: "string";
1880
+ readonly minLength: 7;
1881
+ readonly maxLength: 2048;
1882
+ readonly pattern: "^did:[a-z0-9]+:\\S+$";
1883
+ readonly description: "The DID of the integration allowed to use the account.";
1884
+ };
1885
+ readonly scopeCeiling: {
1886
+ readonly $ref: "#/$defs/CredentialScopeCeiling";
1887
+ readonly description: "Required for storage and OAuth models; absent for `sui-signer`, whose ceiling is the account's own allow-list and caps.";
1888
+ };
1889
+ readonly maxTtlSeconds: {
1890
+ readonly type: "integer";
1891
+ readonly minimum: 60;
1892
+ readonly maximum: 3600;
1893
+ readonly description: "The longest credential lifetime the consumer may request. 900 (15 minutes) is RECOMMENDED; the ceiling is one hour.";
1894
+ };
1895
+ readonly ratePerMinute: {
1896
+ readonly type: "integer";
1897
+ readonly minimum: 1;
1898
+ readonly maximum: 600;
1899
+ readonly description: "Issuances or signatures per minute for this binding.";
1900
+ };
1901
+ readonly sourceCidrs: {
1902
+ readonly type: "array";
1903
+ readonly maxItems: 16;
1904
+ readonly items: {
1905
+ readonly type: "string";
1906
+ readonly maxLength: 49;
1907
+ readonly pattern: "^[0-9a-fA-F:.]+/[0-9]{1,3}$";
1908
+ };
1909
+ readonly description: "Where the provider supports it (`aws:SourceIp`), issued credentials are pinned to these networks, so a credential lifted from the consumer is useless elsewhere.";
1910
+ };
1911
+ readonly grantedAt: {
1912
+ readonly type: "string";
1913
+ readonly format: "date-time";
1914
+ };
1915
+ };
1916
+ };
1917
+ readonly CredentialScopeCeiling: {
1918
+ readonly title: "CredentialScopeCeiling";
1919
+ readonly type: "object";
1920
+ readonly additionalProperties: false;
1921
+ readonly description: "The widest scope a binding's consumer may request. An issuance is inside the ceiling when its `prefix` begins with one of `prefixes`, every one of its `actions` is in `actions`, and every one of its `scopes` is in `scopes`. Absent members confer nothing: a ceiling with no `prefixes` permits no storage issuance.";
1922
+ readonly properties: {
1923
+ readonly prefixes: {
1924
+ readonly type: "array";
1925
+ readonly minItems: 1;
1926
+ readonly maxItems: 64;
1927
+ readonly uniqueItems: true;
1928
+ readonly items: {
1929
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
1930
+ };
1931
+ };
1932
+ readonly actions: {
1933
+ readonly type: "array";
1934
+ readonly minItems: 1;
1935
+ readonly maxItems: 3;
1936
+ readonly uniqueItems: true;
1937
+ readonly items: {
1938
+ readonly $ref: "#/$defs/ProviderObjectAction";
1939
+ };
1940
+ };
1941
+ readonly scopes: {
1942
+ readonly type: "array";
1943
+ readonly maxItems: 64;
1944
+ readonly uniqueItems: true;
1945
+ readonly items: {
1946
+ readonly type: "string";
1947
+ readonly maxLength: 256;
1948
+ readonly pattern: "^[!#-\\[\\]-~]+$";
1949
+ };
1950
+ };
1951
+ };
1952
+ };
1953
+ readonly ProviderObjectAction: {
1954
+ readonly title: "ProviderObjectAction";
1955
+ readonly type: "string";
1956
+ readonly enum: readonly ["put", "get", "delete"];
1957
+ readonly description: "`put`: write an object. `get`: read one. `delete`: remove one. No list, ACL, policy or bucket-level action exists here, so none can be granted.";
1958
+ };
1959
+ readonly ProviderObjectPrefix: {
1960
+ readonly title: "ProviderObjectPrefix";
1961
+ readonly type: "string";
1962
+ readonly minLength: 2;
1963
+ readonly maxLength: 512;
1964
+ readonly pattern: "^([a-z0-9][a-z0-9._-]{0,127}/){1,16}$";
1965
+ readonly description: "An object-key prefix within the account's bucket: one or more segments of lowercase letters, digits, `.`, `_` and `-`, each beginning with a letter or digit and ending with `/`. No quote, backslash, wildcard, whitespace, `..` segment or empty segment can appear. That is deliberate: the custodian places this value inside a provider policy — an IAM session policy (JSON), a GCS Credential Access Boundary condition (CEL) — and a value able to carry a metacharacter can break out of the string it is placed in and widen the policy. That is a known class of defect (CVE-2026-42811, a CEL injection in downscoped GCS credentials). Even with this pattern, a custodian MUST build provider policies with the provider language's own encoder, never by string interpolation.";
1966
+ };
1967
+ readonly AccountSecretInfo: {
1968
+ readonly title: "AccountSecretInfo";
1969
+ readonly type: "object";
1970
+ readonly additionalProperties: false;
1971
+ readonly required: readonly ["fingerprint", "setAt"];
1972
+ readonly description: "That a static model's secret is set, and which one. Never its value.";
1973
+ readonly properties: {
1974
+ readonly fingerprint: {
1975
+ readonly $ref: "#/$defs/SecretFingerprint";
1976
+ };
1977
+ readonly setAt: {
1978
+ readonly type: "string";
1979
+ readonly format: "date-time";
1980
+ };
1981
+ };
1982
+ };
1983
+ readonly SecretFingerprint: {
1984
+ readonly title: "SecretFingerprint";
1985
+ readonly type: "string";
1986
+ readonly pattern: "^hmacsha256:[A-Za-z0-9_-]{22}$";
1987
+ readonly maxLength: 33;
1988
+ readonly description: "Which secret is set, without being a way to test guesses at it. `hmacsha256:` followed by the base64url encoding, without padding, of the first 16 bytes of HMAC-SHA256 over the secret's bytes under a fingerprint key the custodian holds and never discloses. Comparable only between fingerprints made by the same custodian: a re-entered value can be confirmed, while the same secret at two custodians gives unrelated fingerprints. Never a bare hash of the secret, which would let anyone who reads it run a dictionary against it offline; and deliberately not a DigestMultibase, since multihash has no code for a keyed digest.";
1989
+ };
1990
+ readonly AccountPublicMaterial: {
1991
+ readonly title: "AccountPublicMaterial";
1992
+ readonly type: "object";
1993
+ readonly additionalProperties: false;
1994
+ readonly required: readonly ["algorithm", "keyFingerprint"];
1995
+ readonly description: "The public half of the account's key, as the provider needs it. Never a private key.";
1996
+ readonly properties: {
1997
+ readonly algorithm: {
1998
+ readonly type: "string";
1999
+ readonly enum: readonly ["ES256", "RS256", "Secp256r1"];
2000
+ };
2001
+ readonly keyFingerprint: {
2002
+ readonly $ref: "#/$defs/DigestMultibase";
2003
+ readonly description: "Digest of the public key's SubjectPublicKeyInfo DER.";
2004
+ };
2005
+ readonly publicKeyJwk: {
2006
+ readonly type: "object";
2007
+ readonly additionalProperties: false;
2008
+ readonly required: readonly ["kty", "kid"];
2009
+ readonly description: "The public key as a JWK, with `kid`. Public members only: the schema admits no private member (`d`, `p`, `q`, `dp`, `dq`, `qi`), so a document carrying one fails validation.";
2010
+ readonly properties: {
2011
+ readonly kty: {
2012
+ readonly type: "string";
2013
+ readonly enum: readonly ["EC", "RSA"];
2014
+ };
2015
+ readonly crv: {
2016
+ readonly type: "string";
2017
+ readonly enum: readonly ["P-256"];
2018
+ };
2019
+ readonly x: {
2020
+ readonly type: "string";
2021
+ readonly maxLength: 1024;
2022
+ readonly pattern: "^[A-Za-z0-9_-]+$";
2023
+ };
2024
+ readonly y: {
2025
+ readonly type: "string";
2026
+ readonly maxLength: 1024;
2027
+ readonly pattern: "^[A-Za-z0-9_-]+$";
2028
+ };
2029
+ readonly n: {
2030
+ readonly type: "string";
2031
+ readonly maxLength: 1024;
2032
+ readonly pattern: "^[A-Za-z0-9_-]+$";
2033
+ };
2034
+ readonly e: {
2035
+ readonly type: "string";
2036
+ readonly maxLength: 16;
2037
+ readonly pattern: "^[A-Za-z0-9_-]+$";
2038
+ };
2039
+ readonly kid: {
2040
+ readonly type: "string";
2041
+ readonly maxLength: 128;
2042
+ readonly pattern: "^[!-~]+$";
2043
+ };
2044
+ readonly alg: {
2045
+ readonly type: "string";
2046
+ readonly enum: readonly ["ES256", "RS256"];
2047
+ };
2048
+ readonly use: {
2049
+ readonly type: "string";
2050
+ readonly const: "sig";
2051
+ };
2052
+ };
2053
+ };
2054
+ readonly certificatePem: {
2055
+ readonly type: "string";
2056
+ readonly maxLength: 16384;
2057
+ readonly pattern: "^-----BEGIN CERTIFICATE-----[A-Za-z0-9+/=\\r\\n]+-----END CERTIFICATE-----\\s*$";
2058
+ readonly description: "`aws-roles-anywhere`: the trust anchor's CA certificate. `azure-cert`: the certificate uploaded to the app registration.";
2059
+ };
2060
+ readonly address: {
2061
+ readonly type: "string";
2062
+ readonly pattern: "^0x[0-9a-f]{64}$";
2063
+ readonly description: "`sui-signer`: the Sui address the key controls.";
2064
+ };
2065
+ readonly pendingKeyFingerprint: {
2066
+ readonly $ref: "#/$defs/DigestMultibase";
2067
+ readonly description: "During a rotation (external/accounts/keys/rotate), the staged successor key, until it is confirmed and the current key retires.";
2068
+ };
2069
+ };
2070
+ };
2071
+ readonly DigestMultibase: {
2072
+ readonly title: "DigestMultibase";
2073
+ readonly description: "A cryptographic digest as a multibase-encoded multihash — the encoding the W3C Verifiable Credentials Data Model 2.0 defines for `digestMultibase`, and the one `did:webvh` uses for its SCID and entry hashes.\n\nMultihash carries the hash algorithm in-band, so the value is self-describing and the wire format survives an algorithm change without a schema revision; multibase does the same for the base encoding, so a verifier never infers base58 from base64url by context. A bare hex string or a `sha-256:`-style prefix hard-codes one algorithm into the wire contract and is non-conforming here.\n\nThis definition constrains the *encoding only*. What the digest is computed over is stated by each referencing field, because it differs legitimately: a digest over a JSON document is taken over its RFC 8785 (JCS) canonicalization, while a digest over an opaque artifact is taken over its bytes. A field whose input is a JSON document and which does not name a canonicalization is not reproducible.\n\nRestricted to the two multibase headers W3C Controlled Identifiers 1.0 §2.4 normatively requires — `z` (base58btc) and `u` (base64url-no-pad). CID permits others but states that \"interoperability is not guaranteed between implementations using such values\", and a registry whose purpose is interoperability should not mint digests a conforming verifier may be unable to read. The alphabets are enforced rather than assumed: base58btc excludes 0, O, I and l, and an earlier permissive pattern let three published examples carry digests that were not valid base58 at all. base58btc is RECOMMENDED, for consistency with `did:key` and `did:webvh`.";
2074
+ readonly type: "string";
2075
+ readonly minLength: 16;
2076
+ readonly pattern: "^(z[1-9A-HJ-NP-Za-km-z]+|u[A-Za-z0-9_-]+)$";
2077
+ readonly examples: readonly ["zQmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR"];
2078
+ };
2079
+ readonly AccountState: {
2080
+ readonly title: "AccountState";
2081
+ readonly type: "string";
2082
+ readonly enum: readonly ["active", "suspended", "archived"];
2083
+ readonly description: "`active`: usable by its bindings. `suspended`: every issuance and signature is refused at once; management reads continue; resumable. `archived`: hidden from default listings, refused for use, restorable. Deletion removes the record.";
2084
+ };
2085
+ readonly AccountSettings: {
2086
+ readonly title: "AccountSettings";
2087
+ readonly description: "Per-model account settings, discriminated by `model`: every branch is an object whose `model` member is a `const`, which is what lets each generated binding emit a tagged union, so an unusable setting is answered as `external:invalidSettings` naming the member rather than as an unparseable payload. Never a secret: every value here is returned to anyone who may read the account. Branches are referred to by their `model` (\"the `sui-signer` settings\"). They carry no `title`, so that every binding renders each as a plain variant of this union.";
2088
+ readonly oneOf: readonly [{
2089
+ readonly type: "object";
2090
+ readonly additionalProperties: false;
2091
+ readonly required: readonly ["model", "region", "profileArn", "roleArn", "trustAnchorArn"];
2092
+ readonly description: "Egress: `rolesanywhere.<region>.amazonaws.com`, plus `sts.<region>.amazonaws.com` when `chainedRoleArn` is set.";
2093
+ readonly properties: {
2094
+ readonly model: {
2095
+ readonly type: "string";
2096
+ readonly const: "aws-roles-anywhere";
2097
+ };
2098
+ readonly region: {
2099
+ readonly $ref: "#/$defs/AwsRegion";
2100
+ };
2101
+ readonly trustAnchorArn: {
2102
+ readonly $ref: "#/$defs/AwsArn";
2103
+ readonly description: "The trust anchor holding the custodian's CA certificate. Recorded after the administrator creates it from external/accounts/setup.";
2104
+ };
2105
+ readonly profileArn: {
2106
+ readonly $ref: "#/$defs/AwsArn";
2107
+ };
2108
+ readonly roleArn: {
2109
+ readonly $ref: "#/$defs/AwsArn";
2110
+ };
2111
+ readonly chainedRoleArn: {
2112
+ readonly $ref: "#/$defs/AwsArn";
2113
+ readonly description: "When set, every issuance chains an AssumeRole into this role carrying the downscoping session policy, for deployments whose Roles Anywhere profile cannot carry one per request. Caps a credential at one hour.";
2114
+ };
2115
+ readonly bucket: {
2116
+ readonly $ref: "#/$defs/ProviderBucketName";
2117
+ readonly description: "The S3 bucket issuances are scoped within. Required for an account whose bindings issue storage scopes.";
2118
+ };
2119
+ readonly probePrefix: {
2120
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
2121
+ readonly description: "Where external/accounts/probe writes its canary when no binding names a narrower prefix. Lets a new account be probed before anything is bound to it. Absent, a probe of an account with no bindings stops after `exchange` and reports `complete: false`.";
2122
+ };
2123
+ };
2124
+ }, {
2125
+ readonly type: "object";
2126
+ readonly additionalProperties: false;
2127
+ readonly required: readonly ["model", "projectNumber", "poolId", "providerId"];
2128
+ readonly description: "Egress: `sts.googleapis.com`, plus `iamcredentials.googleapis.com` when `serviceAccount` is set.";
2129
+ readonly properties: {
2130
+ readonly model: {
2131
+ readonly type: "string";
2132
+ readonly const: "gcp-wif-pinned";
2133
+ };
2134
+ readonly projectNumber: {
2135
+ readonly type: "string";
2136
+ readonly pattern: "^[0-9]{1,20}$";
2137
+ };
2138
+ readonly poolId: {
2139
+ readonly type: "string";
2140
+ readonly pattern: "^[a-z0-9-]{4,32}$";
2141
+ };
2142
+ readonly providerId: {
2143
+ readonly type: "string";
2144
+ readonly pattern: "^[a-z0-9-]{4,32}$";
2145
+ };
2146
+ readonly serviceAccount: {
2147
+ readonly type: "string";
2148
+ readonly maxLength: 254;
2149
+ readonly pattern: "^[a-z0-9-]+@[a-z0-9-]+\\.iam\\.gserviceaccount\\.com$";
2150
+ readonly description: "When set, the federated token is exchanged for this service account's access token.";
2151
+ };
2152
+ readonly signingAlgorithm: {
2153
+ readonly type: "string";
2154
+ readonly enum: readonly ["ES256", "RS256"];
2155
+ readonly description: "The ID-token algorithm. ES256 unless the provider refuses it. Absent means ES256.";
2156
+ };
2157
+ readonly bucket: {
2158
+ readonly $ref: "#/$defs/ProviderBucketName";
2159
+ readonly description: "The GCS bucket issuances are scoped within, by a Credential Access Boundary.";
2160
+ };
2161
+ readonly probePrefix: {
2162
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
2163
+ readonly description: "Where external/accounts/probe writes its canary when no binding names a narrower prefix. Lets a new account be probed before anything is bound to it. Absent, a probe of an account with no bindings stops after `exchange` and reports `complete: false`.";
2164
+ };
2165
+ };
2166
+ }, {
2167
+ readonly type: "object";
2168
+ readonly additionalProperties: false;
2169
+ readonly required: readonly ["model", "tenantId", "clientId", "tokenScope"];
2170
+ readonly description: "Egress: `login.microsoftonline.com`, or the sovereign-cloud authority named in `authorityHost`.";
2171
+ readonly properties: {
2172
+ readonly model: {
2173
+ readonly type: "string";
2174
+ readonly const: "azure-cert";
2175
+ };
2176
+ readonly tenantId: {
2177
+ readonly type: "string";
2178
+ readonly pattern: "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$";
2179
+ };
2180
+ readonly clientId: {
2181
+ readonly type: "string";
2182
+ readonly pattern: "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$";
2183
+ };
2184
+ readonly tokenScope: {
2185
+ readonly type: "string";
2186
+ readonly maxLength: 512;
2187
+ readonly pattern: "^[A-Za-z0-9:/._-]+$";
2188
+ readonly description: "The `scope` requested at the token endpoint, such as `https://storage.azure.com/.default`.";
2189
+ };
2190
+ readonly authorityHost: {
2191
+ readonly type: "string";
2192
+ readonly maxLength: 253;
2193
+ readonly pattern: "^[a-z0-9.-]+$";
2194
+ readonly description: "Absent means `login.microsoftonline.com`.";
2195
+ };
2196
+ };
2197
+ }, {
2198
+ readonly type: "object";
2199
+ readonly additionalProperties: false;
2200
+ readonly required: readonly ["model", "tokenEndpoint", "clientId"];
2201
+ readonly description: "Egress: the host of `tokenEndpoint`, and nothing else.";
2202
+ readonly properties: {
2203
+ readonly model: {
2204
+ readonly type: "string";
2205
+ readonly const: "oauth2-private-key-jwt";
2206
+ };
2207
+ readonly tokenEndpoint: {
2208
+ readonly $ref: "#/$defs/ProviderHttpsUrl";
2209
+ };
2210
+ readonly clientId: {
2211
+ readonly type: "string";
2212
+ readonly minLength: 1;
2213
+ readonly maxLength: 512;
2214
+ readonly pattern: "^[!-~]+$";
2215
+ };
2216
+ readonly audience: {
2217
+ readonly type: "string";
2218
+ readonly maxLength: 2048;
2219
+ readonly pattern: "^[!-~]+$";
2220
+ readonly description: "The assertion's `aud`. Absent means `tokenEndpoint`.";
2221
+ };
2222
+ readonly scopes: {
2223
+ readonly type: "array";
2224
+ readonly maxItems: 64;
2225
+ readonly uniqueItems: true;
2226
+ readonly items: {
2227
+ readonly type: "string";
2228
+ readonly maxLength: 256;
2229
+ readonly pattern: "^[!#-\\[\\]-~]+$";
2230
+ };
2231
+ readonly description: "The scopes a binding may request, the ceiling for every issuance.";
2232
+ };
2233
+ readonly signingAlgorithm: {
2234
+ readonly type: "string";
2235
+ readonly enum: readonly ["ES256", "RS256"];
2236
+ };
2237
+ };
2238
+ }, {
2239
+ readonly type: "object";
2240
+ readonly additionalProperties: false;
2241
+ readonly required: readonly ["model", "endpoint", "region", "bucket", "accessKeyId"];
2242
+ readonly description: "Issuance needs no egress: presigning is a computation inside the custodian, and the consumer uses the URL itself. The probe connects to the host of `endpoint`, which `egressHosts` therefore lists.";
2243
+ readonly properties: {
2244
+ readonly model: {
2245
+ readonly type: "string";
2246
+ readonly const: "s3-static-presign";
2247
+ };
2248
+ readonly endpoint: {
2249
+ readonly $ref: "#/$defs/ProviderHttpsUrl";
2250
+ };
2251
+ readonly region: {
2252
+ readonly type: "string";
2253
+ readonly maxLength: 64;
2254
+ readonly pattern: "^[a-z0-9-]+$";
2255
+ readonly description: "The SigV4 signing region; `auto` for Cloudflare R2.";
2256
+ };
2257
+ readonly bucket: {
2258
+ readonly $ref: "#/$defs/ProviderBucketName";
2259
+ };
2260
+ readonly pathStyle: {
2261
+ readonly type: "boolean";
2262
+ readonly description: "Address the bucket in the path rather than the host name, as MinIO usually needs.";
2263
+ };
2264
+ readonly accessKeyId: {
2265
+ readonly type: "string";
2266
+ readonly maxLength: 128;
2267
+ readonly pattern: "^[A-Za-z0-9]+$";
2268
+ readonly description: "The access key's identifier. Not a secret: it appears in every presigned URL. The secret half is set with external/accounts/secret/set and never returned.";
2269
+ };
2270
+ readonly probePrefix: {
2271
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
2272
+ readonly description: "Where external/accounts/probe writes its canary when no binding names a narrower prefix. Lets a new account be probed before anything is bound to it. Absent, a probe of an account with no bindings stops after `exchange` and reports `complete: false`.";
2273
+ };
2274
+ };
2275
+ }, {
2276
+ readonly type: "object";
2277
+ readonly additionalProperties: false;
2278
+ readonly required: readonly ["model", "network", "allowedCalls", "maxGasBudgetMist", "maxGasPerDayMist"];
2279
+ readonly description: "No egress: the custodian signs and the consumer submits the transaction. The allow-list, the gas caps and the coin caps are the account's whole authority; a transaction outside them is refused before anything is signed.";
2280
+ readonly properties: {
2281
+ readonly model: {
2282
+ readonly type: "string";
2283
+ readonly const: "sui-signer";
2284
+ };
2285
+ readonly network: {
2286
+ readonly type: "string";
2287
+ readonly enum: readonly ["mainnet", "testnet", "devnet"];
2288
+ };
2289
+ readonly allowedCalls: {
2290
+ readonly type: "array";
2291
+ readonly minItems: 1;
2292
+ readonly maxItems: 32;
2293
+ readonly items: {
2294
+ readonly $ref: "#/$defs/SuiMoveCall";
2295
+ };
2296
+ readonly description: "Every MoveCall command in a signed transaction must name one of these. For Walrus storage: the system package's `register_blob`, `certify_blob`, `extend_blob` and `delete_blob`, and the coin calls needed to pay for them.";
2297
+ };
2298
+ readonly allowedObjects: {
2299
+ readonly type: "array";
2300
+ readonly maxItems: 32;
2301
+ readonly items: {
2302
+ readonly type: "string";
2303
+ readonly pattern: "^0x[0-9a-f]{64}$";
2304
+ };
2305
+ readonly description: "Shared objects a transaction may take as input, such as the Walrus system and staking objects. Absent means any object the allowed calls accept.";
2306
+ };
2307
+ readonly maxGasBudgetMist: {
2308
+ readonly type: "integer";
2309
+ readonly minimum: 1;
2310
+ readonly description: "The largest gas budget one transaction may declare.";
2311
+ };
2312
+ readonly maxGasPerDayMist: {
2313
+ readonly type: "integer";
2314
+ readonly minimum: 1;
2315
+ readonly description: "The total gas budget signed per rolling 24 hours.";
2316
+ };
2317
+ readonly maxCoinOutPerTx: {
2318
+ readonly type: "array";
2319
+ readonly maxItems: 8;
2320
+ readonly items: {
2321
+ readonly type: "object";
2322
+ readonly additionalProperties: false;
2323
+ readonly required: readonly ["coinType", "amount"];
2324
+ readonly properties: {
2325
+ readonly coinType: {
2326
+ readonly type: "string";
2327
+ readonly maxLength: 512;
2328
+ readonly pattern: "^0x[0-9a-f]{1,64}::[A-Za-z0-9_]+::[A-Za-z0-9_]+$";
2329
+ };
2330
+ readonly amount: {
2331
+ readonly type: "integer";
2332
+ readonly minimum: 0;
2333
+ };
2334
+ };
2335
+ };
2336
+ readonly description: "Per coin type, the most a single transaction may spend or transfer out of the account's address, in the coin's smallest unit. A coin type not listed may not leave the address at all.";
2337
+ };
2338
+ };
2339
+ }, {
2340
+ readonly type: "object";
2341
+ readonly additionalProperties: false;
2342
+ readonly required: readonly ["model", "driver", "baseUrl"];
2343
+ readonly description: "Egress: the host of `baseUrl`. The secret is set with external/accounts/secret/set and used only inside the custodian by `driver`; a provider reachable only by handing the consumer the raw key is not supported.";
2344
+ readonly properties: {
2345
+ readonly model: {
2346
+ readonly type: "string";
2347
+ readonly const: "static-secret";
2348
+ };
2349
+ readonly driver: {
2350
+ readonly type: "string";
2351
+ readonly maxLength: 64;
2352
+ readonly pattern: "^[a-z0-9][a-z0-9-]*$";
2353
+ readonly description: "The custodian's driver that uses the secret: performs a login or token exchange and returns a short-lived result. A custodian refuses a driver it does not implement.";
2354
+ };
2355
+ readonly baseUrl: {
2356
+ readonly $ref: "#/$defs/ProviderHttpsUrl";
2357
+ };
2358
+ };
2359
+ }];
2360
+ };
2361
+ readonly ProviderHttpsUrl: {
2362
+ readonly title: "ProviderHttpsUrl";
2363
+ readonly type: "string";
2364
+ readonly format: "uri";
2365
+ readonly maxLength: 2048;
2366
+ readonly pattern: "^https://[^\\s\"'\\\\]+$";
2367
+ };
2368
+ readonly SuiMoveCall: {
2369
+ readonly title: "SuiMoveCall";
2370
+ readonly type: "object";
2371
+ readonly additionalProperties: false;
2372
+ readonly required: readonly ["package", "module", "function"];
2373
+ readonly description: "One Move function an account's transactions may call.";
2374
+ readonly properties: {
2375
+ readonly package: {
2376
+ readonly type: "string";
2377
+ readonly pattern: "^0x[0-9a-f]{64}$";
2378
+ };
2379
+ readonly module: {
2380
+ readonly type: "string";
2381
+ readonly pattern: "^[A-Za-z][A-Za-z0-9_]{0,127}$";
2382
+ };
2383
+ readonly function: {
2384
+ readonly type: "string";
2385
+ readonly pattern: "^[A-Za-z][A-Za-z0-9_]{0,127}$";
2386
+ };
2387
+ };
2388
+ };
2389
+ readonly ProviderBucketName: {
2390
+ readonly title: "ProviderBucketName";
2391
+ readonly type: "string";
2392
+ readonly minLength: 3;
2393
+ readonly maxLength: 63;
2394
+ readonly pattern: "^[a-z0-9][a-z0-9.-]*[a-z0-9]$";
2395
+ readonly description: "A bucket name as S3 and GCS accept it. Validated rather than free so that it can be placed in a provider policy without escaping.";
2396
+ };
2397
+ readonly AwsArn: {
2398
+ readonly title: "AwsArn";
2399
+ readonly type: "string";
2400
+ readonly maxLength: 2048;
2401
+ readonly pattern: "^arn:aws[a-z-]*:[a-z0-9-]+:[a-z0-9-]*:[0-9]{0,12}:[A-Za-z0-9+=,.@_/:-]+$";
2402
+ };
2403
+ readonly AwsRegion: {
2404
+ readonly title: "AwsRegion";
2405
+ readonly type: "string";
2406
+ readonly pattern: "^[a-z]{2}(-gov)?-[a-z]+-[0-9]$";
2407
+ readonly maxLength: 32;
2408
+ };
2409
+ readonly AccountContextId: {
2410
+ readonly title: "AccountContextId";
2411
+ readonly type: "string";
2412
+ readonly minLength: 1;
2413
+ readonly maxLength: 256;
2414
+ readonly description: "The custodian context that owns the account. Act scope in this context decides who may manage the account and who may consume it; the account's keys are derived in this context's key space.";
2415
+ };
2416
+ readonly AccountId: {
2417
+ readonly title: "AccountId";
2418
+ readonly type: "string";
2419
+ readonly minLength: 1;
2420
+ readonly maxLength: 64;
2421
+ readonly pattern: "^[a-z0-9][a-z0-9-]*$";
2422
+ readonly description: "The account's identifier within its context, chosen by whoever creates it. Lowercase letters, digits and hyphens, so that it can be embedded in a certificate subject, a token subject or a provider-side condition without escaping. Unique per context; never reused after deletion while anything that names it (a provider-side trust policy, an audit row) may still exist.";
2423
+ };
2424
+ };
2425
+ };
2426
+ };
2427
+ /**
2428
+ * SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
2429
+ * tracks the *issuer* party's requirement because a response swaps the
2430
+ * parties (§7.3 item 5).
2431
+ */
2432
+ export declare const RESPONSE_SPEC: {
2433
+ readonly typeUri: "https://trusttasks.org/spec/external/accounts/keys/rotate/0.1#response";
2434
+ readonly isBearer: false;
2435
+ readonly isProofRequired: true;
2436
+ readonly isRecipientRequired: true;
2437
+ readonly isIssuedAtRequired: true;
2438
+ readonly payloadSchema: {
2439
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
2440
+ readonly $ref: "#/$defs/Response";
2441
+ readonly $defs: {
2442
+ readonly Response: {
2443
+ readonly $anchor: "response";
2444
+ readonly title: "External Accounts — Keys — Rotate — response payload";
2445
+ readonly type: "object";
2446
+ readonly additionalProperties: false;
2447
+ readonly required: readonly ["account"];
2448
+ readonly properties: {
2449
+ readonly account: {
2450
+ readonly $ref: "#/$defs/ExternalAccount";
2451
+ };
2452
+ readonly setup: {
2453
+ readonly $ref: "#/$defs/AccountSetupArtifacts";
2454
+ readonly description: "On `stage` only.";
2455
+ };
2456
+ readonly ext: {
2457
+ readonly $ref: "#/$defs/Ext";
2458
+ };
2459
+ };
2460
+ };
2461
+ readonly Ext: {
2462
+ readonly title: "Ext";
2463
+ readonly 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.";
2464
+ readonly type: "object";
2465
+ readonly minProperties: 1;
2466
+ readonly additionalProperties: true;
2467
+ readonly propertyNames: {
2468
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
2469
+ };
2470
+ };
2471
+ readonly AccountSetupArtifacts: {
2472
+ readonly title: "AccountSetupArtifacts";
2473
+ readonly type: "object";
2474
+ readonly additionalProperties: false;
2475
+ readonly required: readonly ["model", "artifacts", "steps"];
2476
+ readonly description: "What an administrator does at the provider to make an account usable, generated by the custodian from the account's settings, public material and bindings. Public material and policy only: never a private key or secret, and the custodian never asks for the provider's administrator credentials.";
2477
+ readonly properties: {
2478
+ readonly model: {
2479
+ readonly $ref: "#/$defs/AuthModel";
2480
+ };
2481
+ readonly artifacts: {
2482
+ readonly type: "array";
2483
+ readonly maxItems: 16;
2484
+ readonly items: {
2485
+ readonly type: "object";
2486
+ readonly additionalProperties: false;
2487
+ readonly required: readonly ["name", "mediaType", "content"];
2488
+ readonly properties: {
2489
+ readonly name: {
2490
+ readonly type: "string";
2491
+ readonly maxLength: 128;
2492
+ readonly pattern: "^[A-Za-z0-9._-]+$";
2493
+ readonly description: "File name to save it under: `trust-anchor.pem`, `jwks.json`, `permissions-policy.json`, `crl.pem`.";
2494
+ };
2495
+ readonly mediaType: {
2496
+ readonly type: "string";
2497
+ readonly maxLength: 128;
2498
+ readonly pattern: "^[a-z]+/[a-z0-9.+-]+$";
2499
+ };
2500
+ readonly content: {
2501
+ readonly type: "string";
2502
+ readonly maxLength: 65536;
2503
+ };
2504
+ };
2505
+ };
2506
+ };
2507
+ readonly steps: {
2508
+ readonly type: "array";
2509
+ readonly maxItems: 32;
2510
+ readonly items: {
2511
+ readonly type: "object";
2512
+ readonly additionalProperties: false;
2513
+ readonly required: readonly ["description"];
2514
+ readonly properties: {
2515
+ readonly description: {
2516
+ readonly type: "string";
2517
+ readonly maxLength: 1024;
2518
+ };
2519
+ readonly command: {
2520
+ readonly type: "string";
2521
+ readonly maxLength: 8192;
2522
+ readonly description: "A provider CLI command (`aws rolesanywhere create-trust-anchor …`, `gcloud iam workload-identity-pools providers create-oidc … --jwk-json-path`, `az ad app credential reset --cert …`), referring to artifacts by `name`.";
2523
+ };
2524
+ };
2525
+ };
2526
+ };
2527
+ };
2528
+ };
2529
+ readonly AuthModel: {
2530
+ readonly title: "AuthModel";
2531
+ readonly type: "string";
2532
+ readonly enum: readonly ["aws-roles-anywhere", "gcp-wif-pinned", "azure-cert", "oauth2-private-key-jwt", "s3-static-presign", "sui-signer", "static-secret"];
2533
+ readonly description: "How the account authenticates to its provider. Every model pins the custodian's verification material in the provider's own account, uploaded once, so no model requires the custodian to be reachable from the internet. `aws-roles-anywhere`: the custodian is the certificate authority of an IAM Roles Anywhere trust anchor, and signs CreateSession with a short-lived end-entity certificate it issued to the account's own key. `gcp-wif-pinned`: a Workload Identity Federation pool provider holds an uploaded JWKS; the custodian signs an ID token and exchanges it at Google's STS. `azure-cert`: a certificate uploaded to an Entra app registration; the custodian signs an RFC 7523 client assertion. `oauth2-private-key-jwt`: the same RFC 7523 client authentication against any token endpoint that registered the custodian's public key. `s3-static-presign`: an access-key pair for an S3-compatible store that cannot federate; the custodian presigns per-object URLs and never releases the key. `sui-signer`: a Sui address derived from the custodian's key; the custodian signs only allow-listed transactions. `static-secret`: an API key or token used inside the custodian by a named driver; last resort, never released.\n\nPlain OpenID Connect discovery federation is deliberately absent. It works by the provider fetching the issuer's JWKS from a public URL, which either makes the custodian reachable from the internet or makes whoever hosts a copy of the JWKS able to mint credentials for every federated role.";
2534
+ };
2535
+ readonly ExternalAccount: {
2536
+ readonly title: "ExternalAccount";
2537
+ readonly type: "object";
2538
+ readonly additionalProperties: false;
2539
+ readonly required: readonly ["id", "label", "context", "settings", "state", "bindings", "egressHosts", "providerSetupRequired", "createdAt", "updatedAt"];
2540
+ readonly description: "An account as every read returns it. Contains no private key, no secret and no issued credential, to any reader.";
2541
+ readonly properties: {
2542
+ readonly id: {
2543
+ readonly $ref: "#/$defs/AccountId";
2544
+ };
2545
+ readonly label: {
2546
+ readonly type: "string";
2547
+ readonly minLength: 1;
2548
+ readonly maxLength: 128;
2549
+ readonly description: "Display name. Untrusted text: render it, never interpret it.";
2550
+ };
2551
+ readonly context: {
2552
+ readonly $ref: "#/$defs/AccountContextId";
2553
+ };
2554
+ readonly settings: {
2555
+ readonly $ref: "#/$defs/AccountSettings";
2556
+ };
2557
+ readonly state: {
2558
+ readonly $ref: "#/$defs/AccountState";
2559
+ };
2560
+ readonly publicMaterial: {
2561
+ readonly $ref: "#/$defs/AccountPublicMaterial";
2562
+ readonly description: "Absent for the static models, which hold a secret rather than a key.";
2563
+ };
2564
+ readonly secret: {
2565
+ readonly $ref: "#/$defs/AccountSecretInfo";
2566
+ readonly description: "Static models only; absent until the secret is set.";
2567
+ };
2568
+ readonly bindings: {
2569
+ readonly type: "array";
2570
+ readonly maxItems: 256;
2571
+ readonly items: {
2572
+ readonly $ref: "#/$defs/AccountBinding";
2573
+ };
2574
+ };
2575
+ readonly egressHosts: {
2576
+ readonly type: "array";
2577
+ readonly maxItems: 8;
2578
+ readonly items: {
2579
+ readonly type: "string";
2580
+ readonly maxLength: 253;
2581
+ readonly pattern: "^[a-z0-9.-]+$";
2582
+ };
2583
+ readonly description: "The provider hosts the custodian connects to on this account's behalf, derived by the custodian from its settings: the token or session endpoints issuance uses, and the destinations external/accounts/probe dials (the object store's host, for a storage model). The custodian MUST NOT connect anywhere else on the account's behalf, so an egress proxy can allow exactly this set. Empty only for a model that neither exchanges nor probes over the network.";
2584
+ };
2585
+ readonly providerSetupRequired: {
2586
+ readonly type: "boolean";
2587
+ readonly description: "True when the account cannot be used until its provider-side setup is redone: after a restore that could not carry its key or secret (a wrapped RSA key, a static secret), or after a rotation awaiting confirmation.";
2588
+ };
2589
+ readonly lastProbe: {
2590
+ readonly $ref: "#/$defs/AccountProbeReport";
2591
+ };
2592
+ readonly createdAt: {
2593
+ readonly type: "string";
2594
+ readonly format: "date-time";
2595
+ };
2596
+ readonly updatedAt: {
2597
+ readonly type: "string";
2598
+ readonly format: "date-time";
2599
+ };
2600
+ };
2601
+ };
2602
+ readonly AccountProbeReport: {
2603
+ readonly title: "AccountProbeReport";
2604
+ readonly type: "object";
2605
+ readonly additionalProperties: false;
2606
+ readonly required: readonly ["at", "ok", "complete", "steps"];
2607
+ readonly properties: {
2608
+ readonly at: {
2609
+ readonly type: "string";
2610
+ readonly format: "date-time";
2611
+ };
2612
+ readonly ok: {
2613
+ readonly type: "boolean";
2614
+ readonly description: "True when every step that ran succeeded.";
2615
+ };
2616
+ readonly complete: {
2617
+ readonly type: "boolean";
2618
+ readonly description: "True only when the canary steps (`put`, `get`, `delete`, or the model's equivalent) ran, so the account was exercised end to end. A probe that stopped after `exchange` because nothing named a canary prefix is `complete: false` even when `ok` is true, and does not clear `providerSetupRequired`.";
2619
+ };
2620
+ readonly steps: {
2621
+ readonly type: "array";
2622
+ readonly maxItems: 8;
2623
+ readonly items: {
2624
+ readonly type: "object";
2625
+ readonly additionalProperties: false;
2626
+ readonly required: readonly ["step", "ok"];
2627
+ readonly properties: {
2628
+ readonly step: {
2629
+ readonly $ref: "#/$defs/AccountProbeStep";
2630
+ };
2631
+ readonly ok: {
2632
+ readonly type: "boolean";
2633
+ };
2634
+ readonly durationMs: {
2635
+ readonly type: "integer";
2636
+ readonly minimum: 0;
2637
+ };
2638
+ readonly providerError: {
2639
+ readonly type: "string";
2640
+ readonly maxLength: 2048;
2641
+ readonly description: "The provider's error, verbatim and truncated, so an administrator sees the cloud's own words. Untrusted text. A custodian MUST remove any credential, signature or token from it first.";
2642
+ };
2643
+ readonly providerRequestId: {
2644
+ readonly type: "string";
2645
+ readonly maxLength: 256;
2646
+ readonly pattern: "^[!-~]+$";
2647
+ };
2648
+ };
2649
+ };
2650
+ readonly description: "In order; the first failing step ends the probe.";
2651
+ };
2652
+ };
2653
+ };
2654
+ readonly AccountProbeStep: {
2655
+ readonly title: "AccountProbeStep";
2656
+ readonly type: "string";
2657
+ readonly enum: readonly ["sign", "exchange", "put", "get", "delete", "decode"];
2658
+ readonly description: "`sign`: the custodian signed its assertion, session request or test transaction. `exchange`: the provider issued a credential for it. `put`, `get`, `delete`: one canary object at the narrowest scope of the account's bindings. `decode`: for `sui-signer`, a built test transaction passed the allow-list (it is never submitted).";
2659
+ };
2660
+ readonly AccountBinding: {
2661
+ readonly title: "AccountBinding";
2662
+ readonly type: "object";
2663
+ readonly additionalProperties: false;
2664
+ readonly required: readonly ["consumer", "maxTtlSeconds", "ratePerMinute"];
2665
+ readonly description: "Who may use an account, and how far. One binding per consumer per account. A binding is checked before anything is signed: the caller must be `consumer`, proven by the request's own proof; the request must sit inside `scopeCeiling`; its TTL must not exceed `maxTtlSeconds`; and the binding's rate must not be exhausted.";
2666
+ readonly properties: {
2667
+ readonly consumer: {
2668
+ readonly type: "string";
2669
+ readonly minLength: 7;
2670
+ readonly maxLength: 2048;
2671
+ readonly pattern: "^did:[a-z0-9]+:\\S+$";
2672
+ readonly description: "The DID of the integration allowed to use the account.";
2673
+ };
2674
+ readonly scopeCeiling: {
2675
+ readonly $ref: "#/$defs/CredentialScopeCeiling";
2676
+ readonly description: "Required for storage and OAuth models; absent for `sui-signer`, whose ceiling is the account's own allow-list and caps.";
2677
+ };
2678
+ readonly maxTtlSeconds: {
2679
+ readonly type: "integer";
2680
+ readonly minimum: 60;
2681
+ readonly maximum: 3600;
2682
+ readonly description: "The longest credential lifetime the consumer may request. 900 (15 minutes) is RECOMMENDED; the ceiling is one hour.";
2683
+ };
2684
+ readonly ratePerMinute: {
2685
+ readonly type: "integer";
2686
+ readonly minimum: 1;
2687
+ readonly maximum: 600;
2688
+ readonly description: "Issuances or signatures per minute for this binding.";
2689
+ };
2690
+ readonly sourceCidrs: {
2691
+ readonly type: "array";
2692
+ readonly maxItems: 16;
2693
+ readonly items: {
2694
+ readonly type: "string";
2695
+ readonly maxLength: 49;
2696
+ readonly pattern: "^[0-9a-fA-F:.]+/[0-9]{1,3}$";
2697
+ };
2698
+ readonly description: "Where the provider supports it (`aws:SourceIp`), issued credentials are pinned to these networks, so a credential lifted from the consumer is useless elsewhere.";
2699
+ };
2700
+ readonly grantedAt: {
2701
+ readonly type: "string";
2702
+ readonly format: "date-time";
2703
+ };
2704
+ };
2705
+ };
2706
+ readonly CredentialScopeCeiling: {
2707
+ readonly title: "CredentialScopeCeiling";
2708
+ readonly type: "object";
2709
+ readonly additionalProperties: false;
2710
+ readonly description: "The widest scope a binding's consumer may request. An issuance is inside the ceiling when its `prefix` begins with one of `prefixes`, every one of its `actions` is in `actions`, and every one of its `scopes` is in `scopes`. Absent members confer nothing: a ceiling with no `prefixes` permits no storage issuance.";
2711
+ readonly properties: {
2712
+ readonly prefixes: {
2713
+ readonly type: "array";
2714
+ readonly minItems: 1;
2715
+ readonly maxItems: 64;
2716
+ readonly uniqueItems: true;
2717
+ readonly items: {
2718
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
2719
+ };
2720
+ };
2721
+ readonly actions: {
2722
+ readonly type: "array";
2723
+ readonly minItems: 1;
2724
+ readonly maxItems: 3;
2725
+ readonly uniqueItems: true;
2726
+ readonly items: {
2727
+ readonly $ref: "#/$defs/ProviderObjectAction";
2728
+ };
2729
+ };
2730
+ readonly scopes: {
2731
+ readonly type: "array";
2732
+ readonly maxItems: 64;
2733
+ readonly uniqueItems: true;
2734
+ readonly items: {
2735
+ readonly type: "string";
2736
+ readonly maxLength: 256;
2737
+ readonly pattern: "^[!#-\\[\\]-~]+$";
2738
+ };
2739
+ };
2740
+ };
2741
+ };
2742
+ readonly ProviderObjectAction: {
2743
+ readonly title: "ProviderObjectAction";
2744
+ readonly type: "string";
2745
+ readonly enum: readonly ["put", "get", "delete"];
2746
+ readonly description: "`put`: write an object. `get`: read one. `delete`: remove one. No list, ACL, policy or bucket-level action exists here, so none can be granted.";
2747
+ };
2748
+ readonly ProviderObjectPrefix: {
2749
+ readonly title: "ProviderObjectPrefix";
2750
+ readonly type: "string";
2751
+ readonly minLength: 2;
2752
+ readonly maxLength: 512;
2753
+ readonly pattern: "^([a-z0-9][a-z0-9._-]{0,127}/){1,16}$";
2754
+ readonly description: "An object-key prefix within the account's bucket: one or more segments of lowercase letters, digits, `.`, `_` and `-`, each beginning with a letter or digit and ending with `/`. No quote, backslash, wildcard, whitespace, `..` segment or empty segment can appear. That is deliberate: the custodian places this value inside a provider policy — an IAM session policy (JSON), a GCS Credential Access Boundary condition (CEL) — and a value able to carry a metacharacter can break out of the string it is placed in and widen the policy. That is a known class of defect (CVE-2026-42811, a CEL injection in downscoped GCS credentials). Even with this pattern, a custodian MUST build provider policies with the provider language's own encoder, never by string interpolation.";
2755
+ };
2756
+ readonly AccountSecretInfo: {
2757
+ readonly title: "AccountSecretInfo";
2758
+ readonly type: "object";
2759
+ readonly additionalProperties: false;
2760
+ readonly required: readonly ["fingerprint", "setAt"];
2761
+ readonly description: "That a static model's secret is set, and which one. Never its value.";
2762
+ readonly properties: {
2763
+ readonly fingerprint: {
2764
+ readonly $ref: "#/$defs/SecretFingerprint";
2765
+ };
2766
+ readonly setAt: {
2767
+ readonly type: "string";
2768
+ readonly format: "date-time";
2769
+ };
2770
+ };
2771
+ };
2772
+ readonly SecretFingerprint: {
2773
+ readonly title: "SecretFingerprint";
2774
+ readonly type: "string";
2775
+ readonly pattern: "^hmacsha256:[A-Za-z0-9_-]{22}$";
2776
+ readonly maxLength: 33;
2777
+ readonly description: "Which secret is set, without being a way to test guesses at it. `hmacsha256:` followed by the base64url encoding, without padding, of the first 16 bytes of HMAC-SHA256 over the secret's bytes under a fingerprint key the custodian holds and never discloses. Comparable only between fingerprints made by the same custodian: a re-entered value can be confirmed, while the same secret at two custodians gives unrelated fingerprints. Never a bare hash of the secret, which would let anyone who reads it run a dictionary against it offline; and deliberately not a DigestMultibase, since multihash has no code for a keyed digest.";
2778
+ };
2779
+ readonly AccountPublicMaterial: {
2780
+ readonly title: "AccountPublicMaterial";
2781
+ readonly type: "object";
2782
+ readonly additionalProperties: false;
2783
+ readonly required: readonly ["algorithm", "keyFingerprint"];
2784
+ readonly description: "The public half of the account's key, as the provider needs it. Never a private key.";
2785
+ readonly properties: {
2786
+ readonly algorithm: {
2787
+ readonly type: "string";
2788
+ readonly enum: readonly ["ES256", "RS256", "Secp256r1"];
2789
+ };
2790
+ readonly keyFingerprint: {
2791
+ readonly $ref: "#/$defs/DigestMultibase";
2792
+ readonly description: "Digest of the public key's SubjectPublicKeyInfo DER.";
2793
+ };
2794
+ readonly publicKeyJwk: {
2795
+ readonly type: "object";
2796
+ readonly additionalProperties: false;
2797
+ readonly required: readonly ["kty", "kid"];
2798
+ readonly description: "The public key as a JWK, with `kid`. Public members only: the schema admits no private member (`d`, `p`, `q`, `dp`, `dq`, `qi`), so a document carrying one fails validation.";
2799
+ readonly properties: {
2800
+ readonly kty: {
2801
+ readonly type: "string";
2802
+ readonly enum: readonly ["EC", "RSA"];
2803
+ };
2804
+ readonly crv: {
2805
+ readonly type: "string";
2806
+ readonly enum: readonly ["P-256"];
2807
+ };
2808
+ readonly x: {
2809
+ readonly type: "string";
2810
+ readonly maxLength: 1024;
2811
+ readonly pattern: "^[A-Za-z0-9_-]+$";
2812
+ };
2813
+ readonly y: {
2814
+ readonly type: "string";
2815
+ readonly maxLength: 1024;
2816
+ readonly pattern: "^[A-Za-z0-9_-]+$";
2817
+ };
2818
+ readonly n: {
2819
+ readonly type: "string";
2820
+ readonly maxLength: 1024;
2821
+ readonly pattern: "^[A-Za-z0-9_-]+$";
2822
+ };
2823
+ readonly e: {
2824
+ readonly type: "string";
2825
+ readonly maxLength: 16;
2826
+ readonly pattern: "^[A-Za-z0-9_-]+$";
2827
+ };
2828
+ readonly kid: {
2829
+ readonly type: "string";
2830
+ readonly maxLength: 128;
2831
+ readonly pattern: "^[!-~]+$";
2832
+ };
2833
+ readonly alg: {
2834
+ readonly type: "string";
2835
+ readonly enum: readonly ["ES256", "RS256"];
2836
+ };
2837
+ readonly use: {
2838
+ readonly type: "string";
2839
+ readonly const: "sig";
2840
+ };
2841
+ };
2842
+ };
2843
+ readonly certificatePem: {
2844
+ readonly type: "string";
2845
+ readonly maxLength: 16384;
2846
+ readonly pattern: "^-----BEGIN CERTIFICATE-----[A-Za-z0-9+/=\\r\\n]+-----END CERTIFICATE-----\\s*$";
2847
+ readonly description: "`aws-roles-anywhere`: the trust anchor's CA certificate. `azure-cert`: the certificate uploaded to the app registration.";
2848
+ };
2849
+ readonly address: {
2850
+ readonly type: "string";
2851
+ readonly pattern: "^0x[0-9a-f]{64}$";
2852
+ readonly description: "`sui-signer`: the Sui address the key controls.";
2853
+ };
2854
+ readonly pendingKeyFingerprint: {
2855
+ readonly $ref: "#/$defs/DigestMultibase";
2856
+ readonly description: "During a rotation (external/accounts/keys/rotate), the staged successor key, until it is confirmed and the current key retires.";
2857
+ };
2858
+ };
2859
+ };
2860
+ readonly DigestMultibase: {
2861
+ readonly title: "DigestMultibase";
2862
+ readonly description: "A cryptographic digest as a multibase-encoded multihash — the encoding the W3C Verifiable Credentials Data Model 2.0 defines for `digestMultibase`, and the one `did:webvh` uses for its SCID and entry hashes.\n\nMultihash carries the hash algorithm in-band, so the value is self-describing and the wire format survives an algorithm change without a schema revision; multibase does the same for the base encoding, so a verifier never infers base58 from base64url by context. A bare hex string or a `sha-256:`-style prefix hard-codes one algorithm into the wire contract and is non-conforming here.\n\nThis definition constrains the *encoding only*. What the digest is computed over is stated by each referencing field, because it differs legitimately: a digest over a JSON document is taken over its RFC 8785 (JCS) canonicalization, while a digest over an opaque artifact is taken over its bytes. A field whose input is a JSON document and which does not name a canonicalization is not reproducible.\n\nRestricted to the two multibase headers W3C Controlled Identifiers 1.0 §2.4 normatively requires — `z` (base58btc) and `u` (base64url-no-pad). CID permits others but states that \"interoperability is not guaranteed between implementations using such values\", and a registry whose purpose is interoperability should not mint digests a conforming verifier may be unable to read. The alphabets are enforced rather than assumed: base58btc excludes 0, O, I and l, and an earlier permissive pattern let three published examples carry digests that were not valid base58 at all. base58btc is RECOMMENDED, for consistency with `did:key` and `did:webvh`.";
2863
+ readonly type: "string";
2864
+ readonly minLength: 16;
2865
+ readonly pattern: "^(z[1-9A-HJ-NP-Za-km-z]+|u[A-Za-z0-9_-]+)$";
2866
+ readonly examples: readonly ["zQmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR"];
2867
+ };
2868
+ readonly AccountState: {
2869
+ readonly title: "AccountState";
2870
+ readonly type: "string";
2871
+ readonly enum: readonly ["active", "suspended", "archived"];
2872
+ readonly description: "`active`: usable by its bindings. `suspended`: every issuance and signature is refused at once; management reads continue; resumable. `archived`: hidden from default listings, refused for use, restorable. Deletion removes the record.";
2873
+ };
2874
+ readonly AccountSettings: {
2875
+ readonly title: "AccountSettings";
2876
+ readonly description: "Per-model account settings, discriminated by `model`: every branch is an object whose `model` member is a `const`, which is what lets each generated binding emit a tagged union, so an unusable setting is answered as `external:invalidSettings` naming the member rather than as an unparseable payload. Never a secret: every value here is returned to anyone who may read the account. Branches are referred to by their `model` (\"the `sui-signer` settings\"). They carry no `title`, so that every binding renders each as a plain variant of this union.";
2877
+ readonly oneOf: readonly [{
2878
+ readonly type: "object";
2879
+ readonly additionalProperties: false;
2880
+ readonly required: readonly ["model", "region", "profileArn", "roleArn", "trustAnchorArn"];
2881
+ readonly description: "Egress: `rolesanywhere.<region>.amazonaws.com`, plus `sts.<region>.amazonaws.com` when `chainedRoleArn` is set.";
2882
+ readonly properties: {
2883
+ readonly model: {
2884
+ readonly type: "string";
2885
+ readonly const: "aws-roles-anywhere";
2886
+ };
2887
+ readonly region: {
2888
+ readonly $ref: "#/$defs/AwsRegion";
2889
+ };
2890
+ readonly trustAnchorArn: {
2891
+ readonly $ref: "#/$defs/AwsArn";
2892
+ readonly description: "The trust anchor holding the custodian's CA certificate. Recorded after the administrator creates it from external/accounts/setup.";
2893
+ };
2894
+ readonly profileArn: {
2895
+ readonly $ref: "#/$defs/AwsArn";
2896
+ };
2897
+ readonly roleArn: {
2898
+ readonly $ref: "#/$defs/AwsArn";
2899
+ };
2900
+ readonly chainedRoleArn: {
2901
+ readonly $ref: "#/$defs/AwsArn";
2902
+ readonly description: "When set, every issuance chains an AssumeRole into this role carrying the downscoping session policy, for deployments whose Roles Anywhere profile cannot carry one per request. Caps a credential at one hour.";
2903
+ };
2904
+ readonly bucket: {
2905
+ readonly $ref: "#/$defs/ProviderBucketName";
2906
+ readonly description: "The S3 bucket issuances are scoped within. Required for an account whose bindings issue storage scopes.";
2907
+ };
2908
+ readonly probePrefix: {
2909
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
2910
+ readonly description: "Where external/accounts/probe writes its canary when no binding names a narrower prefix. Lets a new account be probed before anything is bound to it. Absent, a probe of an account with no bindings stops after `exchange` and reports `complete: false`.";
2911
+ };
2912
+ };
2913
+ }, {
2914
+ readonly type: "object";
2915
+ readonly additionalProperties: false;
2916
+ readonly required: readonly ["model", "projectNumber", "poolId", "providerId"];
2917
+ readonly description: "Egress: `sts.googleapis.com`, plus `iamcredentials.googleapis.com` when `serviceAccount` is set.";
2918
+ readonly properties: {
2919
+ readonly model: {
2920
+ readonly type: "string";
2921
+ readonly const: "gcp-wif-pinned";
2922
+ };
2923
+ readonly projectNumber: {
2924
+ readonly type: "string";
2925
+ readonly pattern: "^[0-9]{1,20}$";
2926
+ };
2927
+ readonly poolId: {
2928
+ readonly type: "string";
2929
+ readonly pattern: "^[a-z0-9-]{4,32}$";
2930
+ };
2931
+ readonly providerId: {
2932
+ readonly type: "string";
2933
+ readonly pattern: "^[a-z0-9-]{4,32}$";
2934
+ };
2935
+ readonly serviceAccount: {
2936
+ readonly type: "string";
2937
+ readonly maxLength: 254;
2938
+ readonly pattern: "^[a-z0-9-]+@[a-z0-9-]+\\.iam\\.gserviceaccount\\.com$";
2939
+ readonly description: "When set, the federated token is exchanged for this service account's access token.";
2940
+ };
2941
+ readonly signingAlgorithm: {
2942
+ readonly type: "string";
2943
+ readonly enum: readonly ["ES256", "RS256"];
2944
+ readonly description: "The ID-token algorithm. ES256 unless the provider refuses it. Absent means ES256.";
2945
+ };
2946
+ readonly bucket: {
2947
+ readonly $ref: "#/$defs/ProviderBucketName";
2948
+ readonly description: "The GCS bucket issuances are scoped within, by a Credential Access Boundary.";
2949
+ };
2950
+ readonly probePrefix: {
2951
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
2952
+ readonly description: "Where external/accounts/probe writes its canary when no binding names a narrower prefix. Lets a new account be probed before anything is bound to it. Absent, a probe of an account with no bindings stops after `exchange` and reports `complete: false`.";
2953
+ };
2954
+ };
2955
+ }, {
2956
+ readonly type: "object";
2957
+ readonly additionalProperties: false;
2958
+ readonly required: readonly ["model", "tenantId", "clientId", "tokenScope"];
2959
+ readonly description: "Egress: `login.microsoftonline.com`, or the sovereign-cloud authority named in `authorityHost`.";
2960
+ readonly properties: {
2961
+ readonly model: {
2962
+ readonly type: "string";
2963
+ readonly const: "azure-cert";
2964
+ };
2965
+ readonly tenantId: {
2966
+ readonly type: "string";
2967
+ readonly pattern: "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$";
2968
+ };
2969
+ readonly clientId: {
2970
+ readonly type: "string";
2971
+ readonly pattern: "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$";
2972
+ };
2973
+ readonly tokenScope: {
2974
+ readonly type: "string";
2975
+ readonly maxLength: 512;
2976
+ readonly pattern: "^[A-Za-z0-9:/._-]+$";
2977
+ readonly description: "The `scope` requested at the token endpoint, such as `https://storage.azure.com/.default`.";
2978
+ };
2979
+ readonly authorityHost: {
2980
+ readonly type: "string";
2981
+ readonly maxLength: 253;
2982
+ readonly pattern: "^[a-z0-9.-]+$";
2983
+ readonly description: "Absent means `login.microsoftonline.com`.";
2984
+ };
2985
+ };
2986
+ }, {
2987
+ readonly type: "object";
2988
+ readonly additionalProperties: false;
2989
+ readonly required: readonly ["model", "tokenEndpoint", "clientId"];
2990
+ readonly description: "Egress: the host of `tokenEndpoint`, and nothing else.";
2991
+ readonly properties: {
2992
+ readonly model: {
2993
+ readonly type: "string";
2994
+ readonly const: "oauth2-private-key-jwt";
2995
+ };
2996
+ readonly tokenEndpoint: {
2997
+ readonly $ref: "#/$defs/ProviderHttpsUrl";
2998
+ };
2999
+ readonly clientId: {
3000
+ readonly type: "string";
3001
+ readonly minLength: 1;
3002
+ readonly maxLength: 512;
3003
+ readonly pattern: "^[!-~]+$";
3004
+ };
3005
+ readonly audience: {
3006
+ readonly type: "string";
3007
+ readonly maxLength: 2048;
3008
+ readonly pattern: "^[!-~]+$";
3009
+ readonly description: "The assertion's `aud`. Absent means `tokenEndpoint`.";
3010
+ };
3011
+ readonly scopes: {
3012
+ readonly type: "array";
3013
+ readonly maxItems: 64;
3014
+ readonly uniqueItems: true;
3015
+ readonly items: {
3016
+ readonly type: "string";
3017
+ readonly maxLength: 256;
3018
+ readonly pattern: "^[!#-\\[\\]-~]+$";
3019
+ };
3020
+ readonly description: "The scopes a binding may request, the ceiling for every issuance.";
3021
+ };
3022
+ readonly signingAlgorithm: {
3023
+ readonly type: "string";
3024
+ readonly enum: readonly ["ES256", "RS256"];
3025
+ };
3026
+ };
3027
+ }, {
3028
+ readonly type: "object";
3029
+ readonly additionalProperties: false;
3030
+ readonly required: readonly ["model", "endpoint", "region", "bucket", "accessKeyId"];
3031
+ readonly description: "Issuance needs no egress: presigning is a computation inside the custodian, and the consumer uses the URL itself. The probe connects to the host of `endpoint`, which `egressHosts` therefore lists.";
3032
+ readonly properties: {
3033
+ readonly model: {
3034
+ readonly type: "string";
3035
+ readonly const: "s3-static-presign";
3036
+ };
3037
+ readonly endpoint: {
3038
+ readonly $ref: "#/$defs/ProviderHttpsUrl";
3039
+ };
3040
+ readonly region: {
3041
+ readonly type: "string";
3042
+ readonly maxLength: 64;
3043
+ readonly pattern: "^[a-z0-9-]+$";
3044
+ readonly description: "The SigV4 signing region; `auto` for Cloudflare R2.";
3045
+ };
3046
+ readonly bucket: {
3047
+ readonly $ref: "#/$defs/ProviderBucketName";
3048
+ };
3049
+ readonly pathStyle: {
3050
+ readonly type: "boolean";
3051
+ readonly description: "Address the bucket in the path rather than the host name, as MinIO usually needs.";
3052
+ };
3053
+ readonly accessKeyId: {
3054
+ readonly type: "string";
3055
+ readonly maxLength: 128;
3056
+ readonly pattern: "^[A-Za-z0-9]+$";
3057
+ readonly description: "The access key's identifier. Not a secret: it appears in every presigned URL. The secret half is set with external/accounts/secret/set and never returned.";
3058
+ };
3059
+ readonly probePrefix: {
3060
+ readonly $ref: "#/$defs/ProviderObjectPrefix";
3061
+ readonly description: "Where external/accounts/probe writes its canary when no binding names a narrower prefix. Lets a new account be probed before anything is bound to it. Absent, a probe of an account with no bindings stops after `exchange` and reports `complete: false`.";
3062
+ };
3063
+ };
3064
+ }, {
3065
+ readonly type: "object";
3066
+ readonly additionalProperties: false;
3067
+ readonly required: readonly ["model", "network", "allowedCalls", "maxGasBudgetMist", "maxGasPerDayMist"];
3068
+ readonly description: "No egress: the custodian signs and the consumer submits the transaction. The allow-list, the gas caps and the coin caps are the account's whole authority; a transaction outside them is refused before anything is signed.";
3069
+ readonly properties: {
3070
+ readonly model: {
3071
+ readonly type: "string";
3072
+ readonly const: "sui-signer";
3073
+ };
3074
+ readonly network: {
3075
+ readonly type: "string";
3076
+ readonly enum: readonly ["mainnet", "testnet", "devnet"];
3077
+ };
3078
+ readonly allowedCalls: {
3079
+ readonly type: "array";
3080
+ readonly minItems: 1;
3081
+ readonly maxItems: 32;
3082
+ readonly items: {
3083
+ readonly $ref: "#/$defs/SuiMoveCall";
3084
+ };
3085
+ readonly description: "Every MoveCall command in a signed transaction must name one of these. For Walrus storage: the system package's `register_blob`, `certify_blob`, `extend_blob` and `delete_blob`, and the coin calls needed to pay for them.";
3086
+ };
3087
+ readonly allowedObjects: {
3088
+ readonly type: "array";
3089
+ readonly maxItems: 32;
3090
+ readonly items: {
3091
+ readonly type: "string";
3092
+ readonly pattern: "^0x[0-9a-f]{64}$";
3093
+ };
3094
+ readonly description: "Shared objects a transaction may take as input, such as the Walrus system and staking objects. Absent means any object the allowed calls accept.";
3095
+ };
3096
+ readonly maxGasBudgetMist: {
3097
+ readonly type: "integer";
3098
+ readonly minimum: 1;
3099
+ readonly description: "The largest gas budget one transaction may declare.";
3100
+ };
3101
+ readonly maxGasPerDayMist: {
3102
+ readonly type: "integer";
3103
+ readonly minimum: 1;
3104
+ readonly description: "The total gas budget signed per rolling 24 hours.";
3105
+ };
3106
+ readonly maxCoinOutPerTx: {
3107
+ readonly type: "array";
3108
+ readonly maxItems: 8;
3109
+ readonly items: {
3110
+ readonly type: "object";
3111
+ readonly additionalProperties: false;
3112
+ readonly required: readonly ["coinType", "amount"];
3113
+ readonly properties: {
3114
+ readonly coinType: {
3115
+ readonly type: "string";
3116
+ readonly maxLength: 512;
3117
+ readonly pattern: "^0x[0-9a-f]{1,64}::[A-Za-z0-9_]+::[A-Za-z0-9_]+$";
3118
+ };
3119
+ readonly amount: {
3120
+ readonly type: "integer";
3121
+ readonly minimum: 0;
3122
+ };
3123
+ };
3124
+ };
3125
+ readonly description: "Per coin type, the most a single transaction may spend or transfer out of the account's address, in the coin's smallest unit. A coin type not listed may not leave the address at all.";
3126
+ };
3127
+ };
3128
+ }, {
3129
+ readonly type: "object";
3130
+ readonly additionalProperties: false;
3131
+ readonly required: readonly ["model", "driver", "baseUrl"];
3132
+ readonly description: "Egress: the host of `baseUrl`. The secret is set with external/accounts/secret/set and used only inside the custodian by `driver`; a provider reachable only by handing the consumer the raw key is not supported.";
3133
+ readonly properties: {
3134
+ readonly model: {
3135
+ readonly type: "string";
3136
+ readonly const: "static-secret";
3137
+ };
3138
+ readonly driver: {
3139
+ readonly type: "string";
3140
+ readonly maxLength: 64;
3141
+ readonly pattern: "^[a-z0-9][a-z0-9-]*$";
3142
+ readonly description: "The custodian's driver that uses the secret: performs a login or token exchange and returns a short-lived result. A custodian refuses a driver it does not implement.";
3143
+ };
3144
+ readonly baseUrl: {
3145
+ readonly $ref: "#/$defs/ProviderHttpsUrl";
3146
+ };
3147
+ };
3148
+ }];
3149
+ };
3150
+ readonly ProviderHttpsUrl: {
3151
+ readonly title: "ProviderHttpsUrl";
3152
+ readonly type: "string";
3153
+ readonly format: "uri";
3154
+ readonly maxLength: 2048;
3155
+ readonly pattern: "^https://[^\\s\"'\\\\]+$";
3156
+ };
3157
+ readonly SuiMoveCall: {
3158
+ readonly title: "SuiMoveCall";
3159
+ readonly type: "object";
3160
+ readonly additionalProperties: false;
3161
+ readonly required: readonly ["package", "module", "function"];
3162
+ readonly description: "One Move function an account's transactions may call.";
3163
+ readonly properties: {
3164
+ readonly package: {
3165
+ readonly type: "string";
3166
+ readonly pattern: "^0x[0-9a-f]{64}$";
3167
+ };
3168
+ readonly module: {
3169
+ readonly type: "string";
3170
+ readonly pattern: "^[A-Za-z][A-Za-z0-9_]{0,127}$";
3171
+ };
3172
+ readonly function: {
3173
+ readonly type: "string";
3174
+ readonly pattern: "^[A-Za-z][A-Za-z0-9_]{0,127}$";
3175
+ };
3176
+ };
3177
+ };
3178
+ readonly ProviderBucketName: {
3179
+ readonly title: "ProviderBucketName";
3180
+ readonly type: "string";
3181
+ readonly minLength: 3;
3182
+ readonly maxLength: 63;
3183
+ readonly pattern: "^[a-z0-9][a-z0-9.-]*[a-z0-9]$";
3184
+ readonly description: "A bucket name as S3 and GCS accept it. Validated rather than free so that it can be placed in a provider policy without escaping.";
3185
+ };
3186
+ readonly AwsArn: {
3187
+ readonly title: "AwsArn";
3188
+ readonly type: "string";
3189
+ readonly maxLength: 2048;
3190
+ readonly pattern: "^arn:aws[a-z-]*:[a-z0-9-]+:[a-z0-9-]*:[0-9]{0,12}:[A-Za-z0-9+=,.@_/:-]+$";
3191
+ };
3192
+ readonly AwsRegion: {
3193
+ readonly title: "AwsRegion";
3194
+ readonly type: "string";
3195
+ readonly pattern: "^[a-z]{2}(-gov)?-[a-z]+-[0-9]$";
3196
+ readonly maxLength: 32;
3197
+ };
3198
+ readonly AccountContextId: {
3199
+ readonly title: "AccountContextId";
3200
+ readonly type: "string";
3201
+ readonly minLength: 1;
3202
+ readonly maxLength: 256;
3203
+ readonly description: "The custodian context that owns the account. Act scope in this context decides who may manage the account and who may consume it; the account's keys are derived in this context's key space.";
3204
+ };
3205
+ readonly AccountId: {
3206
+ readonly title: "AccountId";
3207
+ readonly type: "string";
3208
+ readonly minLength: 1;
3209
+ readonly maxLength: 64;
3210
+ readonly pattern: "^[a-z0-9][a-z0-9-]*$";
3211
+ readonly description: "The account's identifier within its context, chosen by whoever creates it. Lowercase letters, digits and hyphens, so that it can be embedded in a certificate subject, a token subject or a provider-side condition without escaping. Unique per context; never reused after deletion while anything that names it (a provider-side trust policy, an audit row) may still exist.";
3212
+ };
3213
+ };
3214
+ };
3215
+ };
3216
+ //# sourceMappingURL=payload.d.ts.map