@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.
- package/CHANGELOG.md +28 -0
- package/dist/_shared/components.d.ts +2451 -4
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/auth/oob/_shared/0.1/oob.d.ts +16 -0
- package/dist/auth/oob/_shared/0.1/oob.d.ts.map +1 -0
- package/dist/auth/oob/_shared/0.1/oob.js +6 -0
- package/dist/auth/oob/_shared/0.1/oob.js.map +1 -0
- package/dist/auth/oob/cancel/0.1/payload.d.ts +262 -0
- package/dist/auth/oob/cancel/0.1/payload.d.ts.map +1 -0
- package/dist/auth/oob/cancel/0.1/payload.js +153 -0
- package/dist/auth/oob/cancel/0.1/payload.js.map +1 -0
- package/dist/auth/oob/claim/0.1/payload.d.ts +463 -0
- package/dist/auth/oob/claim/0.1/payload.d.ts.map +1 -0
- package/dist/auth/oob/claim/0.1/payload.js +264 -0
- package/dist/auth/oob/claim/0.1/payload.js.map +1 -0
- package/dist/auth/oob/grant/0.1/payload.d.ts +212 -0
- package/dist/auth/oob/grant/0.1/payload.d.ts.map +1 -0
- package/dist/auth/oob/grant/0.1/payload.js +117 -0
- package/dist/auth/oob/grant/0.1/payload.js.map +1 -0
- package/dist/auth/oob/identify/0.1/payload.d.ts +145 -0
- package/dist/auth/oob/identify/0.1/payload.d.ts.map +1 -0
- package/dist/auth/oob/identify/0.1/payload.js +81 -0
- package/dist/auth/oob/identify/0.1/payload.js.map +1 -0
- package/dist/auth/oob/prove/0.1/payload.d.ts +740 -0
- package/dist/auth/oob/prove/0.1/payload.d.ts.map +1 -0
- package/dist/auth/oob/prove/0.1/payload.js +422 -0
- package/dist/auth/oob/prove/0.1/payload.js.map +1 -0
- package/dist/auth/oob/redeem/0.1/payload.d.ts +364 -0
- package/dist/auth/oob/redeem/0.1/payload.d.ts.map +1 -0
- package/dist/auth/oob/redeem/0.1/payload.js +199 -0
- package/dist/auth/oob/redeem/0.1/payload.js.map +1 -0
- package/dist/auth/oob/request/0.1/payload.d.ts +330 -0
- package/dist/auth/oob/request/0.1/payload.d.ts.map +1 -0
- package/dist/auth/oob/request/0.1/payload.js +193 -0
- package/dist/auth/oob/request/0.1/payload.js.map +1 -0
- package/dist/auth/oob/respond/0.1/payload.d.ts +235 -0
- package/dist/auth/oob/respond/0.1/payload.d.ts.map +1 -0
- package/dist/auth/oob/respond/0.1/payload.js +140 -0
- package/dist/auth/oob/respond/0.1/payload.js.map +1 -0
- package/dist/device/list/0.1/payload.d.ts +4 -4
- package/dist/device/list/0.1/payload.d.ts.map +1 -1
- package/dist/device/list/0.1/payload.js +6 -2
- package/dist/device/list/0.1/payload.js.map +1 -1
- package/dist/device/list/0.2/payload.d.ts +4 -4
- package/dist/device/list/0.2/payload.d.ts.map +1 -1
- package/dist/device/list/0.2/payload.js +6 -2
- package/dist/device/list/0.2/payload.js.map +1 -1
- package/dist/device/register/0.1/payload.d.ts +4 -4
- package/dist/device/register/0.1/payload.d.ts.map +1 -1
- package/dist/device/register/0.1/payload.js +6 -2
- package/dist/device/register/0.1/payload.js.map +1 -1
- package/dist/device/register/0.2/payload.d.ts +4 -4
- package/dist/device/register/0.2/payload.d.ts.map +1 -1
- package/dist/device/register/0.2/payload.js +6 -2
- package/dist/device/register/0.2/payload.js.map +1 -1
- package/dist/external/_shared/0.1/accounts.d.ts +18 -0
- package/dist/external/_shared/0.1/accounts.d.ts.map +1 -0
- package/dist/external/_shared/0.1/accounts.js +6 -0
- package/dist/external/_shared/0.1/accounts.js.map +1 -0
- package/dist/external/accounts/archive/0.1/payload.d.ts +2945 -0
- package/dist/external/accounts/archive/0.1/payload.d.ts.map +1 -0
- package/dist/external/accounts/archive/0.1/payload.js +1736 -0
- package/dist/external/accounts/archive/0.1/payload.js.map +1 -0
- package/dist/external/accounts/bindings/grant/0.1/payload.d.ts +2938 -0
- package/dist/external/accounts/bindings/grant/0.1/payload.d.ts.map +1 -0
- package/dist/external/accounts/bindings/grant/0.1/payload.js +1735 -0
- package/dist/external/accounts/bindings/grant/0.1/payload.js.map +1 -0
- package/dist/external/accounts/bindings/revoke/0.1/payload.d.ts +2958 -0
- package/dist/external/accounts/bindings/revoke/0.1/payload.d.ts.map +1 -0
- package/dist/external/accounts/bindings/revoke/0.1/payload.js +1743 -0
- package/dist/external/accounts/bindings/revoke/0.1/payload.js.map +1 -0
- package/dist/external/accounts/create/0.1/payload.d.ts +2954 -0
- package/dist/external/accounts/create/0.1/payload.d.ts.map +1 -0
- package/dist/external/accounts/create/0.1/payload.js +1742 -0
- package/dist/external/accounts/create/0.1/payload.js.map +1 -0
- package/dist/external/accounts/delete/0.1/payload.d.ts +310 -0
- package/dist/external/accounts/delete/0.1/payload.d.ts.map +1 -0
- package/dist/external/accounts/delete/0.1/payload.js +176 -0
- package/dist/external/accounts/delete/0.1/payload.js.map +1 -0
- package/dist/external/accounts/get/0.1/payload.d.ts +2931 -0
- package/dist/external/accounts/get/0.1/payload.d.ts.map +1 -0
- package/dist/external/accounts/get/0.1/payload.js +1731 -0
- package/dist/external/accounts/get/0.1/payload.js.map +1 -0
- package/dist/external/accounts/keys/rotate/0.1/payload.d.ts +3216 -0
- package/dist/external/accounts/keys/rotate/0.1/payload.d.ts.map +1 -0
- package/dist/external/accounts/keys/rotate/0.1/payload.js +1912 -0
- package/dist/external/accounts/keys/rotate/0.1/payload.js.map +1 -0
- package/dist/external/accounts/list/0.1/payload.d.ts +3034 -0
- package/dist/external/accounts/list/0.1/payload.d.ts.map +1 -0
- package/dist/external/accounts/list/0.1/payload.js +1791 -0
- package/dist/external/accounts/list/0.1/payload.js.map +1 -0
- package/dist/external/accounts/probe/0.1/payload.d.ts +511 -0
- package/dist/external/accounts/probe/0.1/payload.d.ts.map +1 -0
- package/dist/external/accounts/probe/0.1/payload.js +307 -0
- package/dist/external/accounts/probe/0.1/payload.js.map +1 -0
- package/dist/external/accounts/restore/0.1/payload.d.ts +2945 -0
- package/dist/external/accounts/restore/0.1/payload.d.ts.map +1 -0
- package/dist/external/accounts/restore/0.1/payload.js +1736 -0
- package/dist/external/accounts/restore/0.1/payload.js.map +1 -0
- package/dist/external/accounts/resume/0.1/payload.d.ts +2945 -0
- package/dist/external/accounts/resume/0.1/payload.d.ts.map +1 -0
- package/dist/external/accounts/resume/0.1/payload.js +1736 -0
- package/dist/external/accounts/resume/0.1/payload.js.map +1 -0
- package/dist/external/accounts/secret/set/0.1/payload.d.ts +379 -0
- package/dist/external/accounts/secret/set/0.1/payload.d.ts.map +1 -0
- package/dist/external/accounts/secret/set/0.1/payload.js +212 -0
- package/dist/external/accounts/secret/set/0.1/payload.js.map +1 -0
- package/dist/external/accounts/setup/0.1/payload.d.ts +535 -0
- package/dist/external/accounts/setup/0.1/payload.d.ts.map +1 -0
- package/dist/external/accounts/setup/0.1/payload.js +325 -0
- package/dist/external/accounts/setup/0.1/payload.js.map +1 -0
- package/dist/external/accounts/suspend/0.1/payload.d.ts +2945 -0
- package/dist/external/accounts/suspend/0.1/payload.d.ts.map +1 -0
- package/dist/external/accounts/suspend/0.1/payload.js +1736 -0
- package/dist/external/accounts/suspend/0.1/payload.js.map +1 -0
- package/dist/external/accounts/update/0.1/payload.d.ts +2949 -0
- package/dist/external/accounts/update/0.1/payload.d.ts.map +1 -0
- package/dist/external/accounts/update/0.1/payload.js +1739 -0
- package/dist/external/accounts/update/0.1/payload.js.map +1 -0
- package/dist/external/credentials/issue/0.1/payload.d.ts +586 -0
- package/dist/external/credentials/issue/0.1/payload.d.ts.map +1 -0
- package/dist/external/credentials/issue/0.1/payload.js +322 -0
- package/dist/external/credentials/issue/0.1/payload.js.map +1 -0
- package/dist/external/sign/0.1/payload.d.ts +348 -0
- package/dist/external/sign/0.1/payload.d.ts.map +1 -0
- package/dist/external/sign/0.1/payload.js +193 -0
- package/dist/external/sign/0.1/payload.js.map +1 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -1
- package/dist/rooms/_shared/0.1/blobs.d.ts +16 -0
- package/dist/rooms/_shared/0.1/blobs.d.ts.map +1 -0
- package/dist/rooms/_shared/0.1/blobs.js +6 -0
- package/dist/rooms/_shared/0.1/blobs.js.map +1 -0
- package/dist/rooms/_shared/0.1/room.d.ts +1 -1
- package/dist/rooms/_shared/0.1/room.d.ts.map +1 -1
- package/dist/rooms/blobs/chunk/0.1/payload.d.ts +375 -0
- package/dist/rooms/blobs/chunk/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/blobs/chunk/0.1/payload.js +213 -0
- package/dist/rooms/blobs/chunk/0.1/payload.js.map +1 -0
- package/dist/rooms/blobs/get/0.1/payload.d.ts +743 -0
- package/dist/rooms/blobs/get/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/blobs/get/0.1/payload.js +415 -0
- package/dist/rooms/blobs/get/0.1/payload.js.map +1 -0
- package/dist/rooms/blobs/upload/abort/0.1/payload.d.ts +263 -0
- package/dist/rooms/blobs/upload/abort/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/blobs/upload/abort/0.1/payload.js +151 -0
- package/dist/rooms/blobs/upload/abort/0.1/payload.js.map +1 -0
- package/dist/rooms/blobs/upload/begin/0.1/payload.d.ts +793 -0
- package/dist/rooms/blobs/upload/begin/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/blobs/upload/begin/0.1/payload.js +437 -0
- package/dist/rooms/blobs/upload/begin/0.1/payload.js.map +1 -0
- package/dist/rooms/blobs/upload/chunk/0.1/payload.d.ts +459 -0
- package/dist/rooms/blobs/upload/chunk/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/blobs/upload/chunk/0.1/payload.js +256 -0
- package/dist/rooms/blobs/upload/chunk/0.1/payload.js.map +1 -0
- package/dist/rooms/blobs/upload/commit/0.1/payload.d.ts +326 -0
- package/dist/rooms/blobs/upload/commit/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/blobs/upload/commit/0.1/payload.js +185 -0
- package/dist/rooms/blobs/upload/commit/0.1/payload.js.map +1 -0
- package/dist/rooms/info/0.1/payload.d.ts +897 -0
- package/dist/rooms/info/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/info/0.1/payload.js +498 -0
- package/dist/rooms/info/0.1/payload.js.map +1 -0
- package/dist/rooms/keys/file-key/0.1/payload.d.ts +306 -0
- package/dist/rooms/keys/file-key/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/keys/file-key/0.1/payload.js +167 -0
- package/dist/rooms/keys/file-key/0.1/payload.js.map +1 -0
- package/dist/rooms/records/get/0.2/payload.d.ts +954 -0
- package/dist/rooms/records/get/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/records/get/0.2/payload.js +515 -0
- package/dist/rooms/records/get/0.2/payload.js.map +1 -0
- package/dist/rooms/records/list/0.2/payload.d.ts +854 -0
- package/dist/rooms/records/list/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/records/list/0.2/payload.js +462 -0
- package/dist/rooms/records/list/0.2/payload.js.map +1 -0
- package/dist/rooms/records/put/0.2/payload.d.ts +679 -0
- package/dist/rooms/records/put/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/records/put/0.2/payload.js +357 -0
- package/dist/rooms/records/put/0.2/payload.js.map +1 -0
- package/dist/rooms/usage/0.1/payload.d.ts +795 -0
- package/dist/rooms/usage/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/usage/0.1/payload.js +417 -0
- package/dist/rooms/usage/0.1/payload.js.map +1 -0
- package/dist/vtc/_shared/0.1/room-storage.d.ts +16 -0
- package/dist/vtc/_shared/0.1/room-storage.d.ts.map +1 -0
- package/dist/vtc/_shared/0.1/room-storage.js +6 -0
- package/dist/vtc/_shared/0.1/room-storage.js.map +1 -0
- package/dist/vtc/rooms/get/0.1/payload.d.ts +1813 -0
- package/dist/vtc/rooms/get/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/rooms/get/0.1/payload.js +892 -0
- package/dist/vtc/rooms/get/0.1/payload.js.map +1 -0
- package/dist/vtc/rooms/limits/set/0.1/payload.d.ts +873 -0
- package/dist/vtc/rooms/limits/set/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/rooms/limits/set/0.1/payload.js +489 -0
- package/dist/vtc/rooms/limits/set/0.1/payload.js.map +1 -0
- package/dist/vtc/rooms/storage/assign/0.1/payload.d.ts +341 -0
- package/dist/vtc/rooms/storage/assign/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/rooms/storage/assign/0.1/payload.js +191 -0
- package/dist/vtc/rooms/storage/assign/0.1/payload.js.map +1 -0
- package/dist/vtc/rooms/storage/migrate/0.1/payload.d.ts +452 -0
- package/dist/vtc/rooms/storage/migrate/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/rooms/storage/migrate/0.1/payload.js +260 -0
- package/dist/vtc/rooms/storage/migrate/0.1/payload.js.map +1 -0
- package/dist/vtc/rooms/usage/0.1/payload.d.ts +880 -0
- package/dist/vtc/rooms/usage/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/rooms/usage/0.1/payload.js +457 -0
- package/dist/vtc/rooms/usage/0.1/payload.js.map +1 -0
- package/dist/vtc/storage/configs/create/0.1/payload.d.ts +1272 -0
- package/dist/vtc/storage/configs/create/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/storage/configs/create/0.1/payload.js +737 -0
- package/dist/vtc/storage/configs/create/0.1/payload.js.map +1 -0
- package/dist/vtc/storage/configs/get/0.1/payload.d.ts +1750 -0
- package/dist/vtc/storage/configs/get/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/storage/configs/get/0.1/payload.js +1019 -0
- package/dist/vtc/storage/configs/get/0.1/payload.js.map +1 -0
- package/dist/vtc/storage/configs/list/0.1/payload.d.ts +1851 -0
- package/dist/vtc/storage/configs/list/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/storage/configs/list/0.1/payload.js +1069 -0
- package/dist/vtc/storage/configs/list/0.1/payload.js.map +1 -0
- package/dist/vtc/storage/configs/probe/0.1/payload.d.ts +459 -0
- package/dist/vtc/storage/configs/probe/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/storage/configs/probe/0.1/payload.js +267 -0
- package/dist/vtc/storage/configs/probe/0.1/payload.js.map +1 -0
- package/dist/vtc/storage/configs/retire/0.1/payload.d.ts +294 -0
- package/dist/vtc/storage/configs/retire/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/storage/configs/retire/0.1/payload.js +176 -0
- package/dist/vtc/storage/configs/retire/0.1/payload.js.map +1 -0
- package/dist/vtc/storage/configs/update/0.1/payload.d.ts +1274 -0
- package/dist/vtc/storage/configs/update/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/storage/configs/update/0.1/payload.js +736 -0
- package/dist/vtc/storage/configs/update/0.1/payload.js.map +1 -0
- package/dist/vtc/storage/credentials/set/0.1/payload.d.ts +511 -0
- package/dist/vtc/storage/credentials/set/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/storage/credentials/set/0.1/payload.js +293 -0
- package/dist/vtc/storage/credentials/set/0.1/payload.js.map +1 -0
- package/package.json +1 -1
- package/src/_shared/components.ts +2539 -4
- package/src/auth/oob/_shared/0.1/oob.ts +17 -0
- package/src/auth/oob/cancel/0.1/payload.ts +188 -0
- package/src/auth/oob/claim/0.1/payload.ts +306 -0
- package/src/auth/oob/grant/0.1/payload.ts +159 -0
- package/src/auth/oob/identify/0.1/payload.ts +110 -0
- package/src/auth/oob/prove/0.1/payload.ts +473 -0
- package/src/auth/oob/redeem/0.1/payload.ts +248 -0
- package/src/auth/oob/request/0.1/payload.ts +230 -0
- package/src/auth/oob/respond/0.1/payload.ts +178 -0
- package/src/device/list/0.1/payload.ts +6 -2
- package/src/device/list/0.2/payload.ts +6 -2
- package/src/device/register/0.1/payload.ts +6 -2
- package/src/device/register/0.2/payload.ts +6 -2
- package/src/external/_shared/0.1/accounts.ts +19 -0
- package/src/external/accounts/archive/0.1/payload.ts +1770 -0
- package/src/external/accounts/bindings/grant/0.1/payload.ts +1766 -0
- package/src/external/accounts/bindings/revoke/0.1/payload.ts +1778 -0
- package/src/external/accounts/create/0.1/payload.ts +1777 -0
- package/src/external/accounts/delete/0.1/payload.ts +211 -0
- package/src/external/accounts/get/0.1/payload.ts +1761 -0
- package/src/external/accounts/keys/rotate/0.1/payload.ts +1947 -0
- package/src/external/accounts/list/0.1/payload.ts +1834 -0
- package/src/external/accounts/probe/0.1/payload.ts +337 -0
- package/src/external/accounts/restore/0.1/payload.ts +1770 -0
- package/src/external/accounts/resume/0.1/payload.ts +1770 -0
- package/src/external/accounts/secret/set/0.1/payload.ts +248 -0
- package/src/external/accounts/setup/0.1/payload.ts +355 -0
- package/src/external/accounts/suspend/0.1/payload.ts +1770 -0
- package/src/external/accounts/update/0.1/payload.ts +1771 -0
- package/src/external/credentials/issue/0.1/payload.ts +365 -0
- package/src/external/sign/0.1/payload.ts +234 -0
- package/src/index.ts +53 -0
- package/src/rooms/_shared/0.1/blobs.ts +17 -0
- package/src/rooms/_shared/0.1/room.ts +1 -1
- package/src/rooms/blobs/chunk/0.1/payload.ts +251 -0
- package/src/rooms/blobs/get/0.1/payload.ts +463 -0
- package/src/rooms/blobs/upload/abort/0.1/payload.ts +187 -0
- package/src/rooms/blobs/upload/begin/0.1/payload.ts +491 -0
- package/src/rooms/blobs/upload/chunk/0.1/payload.ts +304 -0
- package/src/rooms/blobs/upload/commit/0.1/payload.ts +224 -0
- package/src/rooms/info/0.1/payload.ts +572 -0
- package/src/rooms/keys/file-key/0.1/payload.ts +224 -0
- package/src/rooms/records/get/0.2/payload.ts +614 -0
- package/src/rooms/records/list/0.2/payload.ts +533 -0
- package/src/rooms/records/put/0.2/payload.ts +441 -0
- package/src/rooms/usage/0.1/payload.ts +499 -0
- package/src/vtc/_shared/0.1/room-storage.ts +17 -0
- package/src/vtc/rooms/get/0.1/payload.ts +1275 -0
- package/src/vtc/rooms/limits/set/0.1/payload.ts +555 -0
- package/src/vtc/rooms/storage/assign/0.1/payload.ts +237 -0
- package/src/vtc/rooms/storage/migrate/0.1/payload.ts +317 -0
- package/src/vtc/rooms/usage/0.1/payload.ts +568 -0
- package/src/vtc/storage/configs/create/0.1/payload.ts +784 -0
- package/src/vtc/storage/configs/get/0.1/payload.ts +1054 -0
- package/src/vtc/storage/configs/list/0.1/payload.ts +1121 -0
- package/src/vtc/storage/configs/probe/0.1/payload.ts +329 -0
- package/src/vtc/storage/configs/retire/0.1/payload.ts +211 -0
- package/src/vtc/storage/configs/update/0.1/payload.ts +783 -0
- package/src/vtc/storage/credentials/set/0.1/payload.ts +339 -0
|
@@ -0,0 +1,1736 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
|
|
3
|
+
* Source: specs/external/accounts/restore/0.1/payload.schema.json
|
|
4
|
+
*/
|
|
5
|
+
/** Trust Task type URI. */
|
|
6
|
+
export const TYPE_URI = "https://trusttasks.org/spec/external/accounts/restore/0.1";
|
|
7
|
+
/** Trust Task response type URI (request type URI + "#response"). */
|
|
8
|
+
export const RESPONSE_TYPE_URI = "https://trusttasks.org/spec/external/accounts/restore/0.1#response";
|
|
9
|
+
/**
|
|
10
|
+
* This specification's payload schema, as a value.
|
|
11
|
+
*
|
|
12
|
+
* SPEC.md §7.2 item 2 is performed against this. It is shipped as data
|
|
13
|
+
* rather than only as a `.json` file because TypeScript types are erased
|
|
14
|
+
* at runtime: without a schema a consumer has nothing to validate, and
|
|
15
|
+
* every REQUIRED payload member is optional in practice. Cross-file
|
|
16
|
+
* `$ref`s are already inlined, so it needs no resolver.
|
|
17
|
+
*/
|
|
18
|
+
export const PAYLOAD_SCHEMA = {
|
|
19
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
20
|
+
"$id": "https://trusttasks.org/spec/external/accounts/restore/0.1",
|
|
21
|
+
"title": "External Accounts — Restore — payload",
|
|
22
|
+
"description": "A manager restores an archived external account to `suspended`, from which resuming it is a separate, consented step. The outer document members are owned by the framework — SPEC §6.3.",
|
|
23
|
+
"type": "object",
|
|
24
|
+
"additionalProperties": false,
|
|
25
|
+
"required": [
|
|
26
|
+
"context",
|
|
27
|
+
"id"
|
|
28
|
+
],
|
|
29
|
+
"properties": {
|
|
30
|
+
"context": {
|
|
31
|
+
"$ref": "#/$defs/AccountContextId"
|
|
32
|
+
},
|
|
33
|
+
"id": {
|
|
34
|
+
"$ref": "#/$defs/AccountId"
|
|
35
|
+
},
|
|
36
|
+
"reason": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"maxLength": 500,
|
|
39
|
+
"description": "Why, in the requester's words. Recorded in the audit row. Untrusted text: displayed, never interpreted."
|
|
40
|
+
},
|
|
41
|
+
"ext": {
|
|
42
|
+
"$ref": "#/$defs/Ext"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"$defs": {
|
|
46
|
+
"Response": {
|
|
47
|
+
"$anchor": "response",
|
|
48
|
+
"title": "External Accounts — Restore — response payload",
|
|
49
|
+
"type": "object",
|
|
50
|
+
"additionalProperties": false,
|
|
51
|
+
"required": [
|
|
52
|
+
"account"
|
|
53
|
+
],
|
|
54
|
+
"properties": {
|
|
55
|
+
"account": {
|
|
56
|
+
"$ref": "#/$defs/ExternalAccount"
|
|
57
|
+
},
|
|
58
|
+
"ext": {
|
|
59
|
+
"$ref": "#/$defs/Ext"
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"Ext": {
|
|
64
|
+
"title": "Ext",
|
|
65
|
+
"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.",
|
|
66
|
+
"type": "object",
|
|
67
|
+
"minProperties": 1,
|
|
68
|
+
"additionalProperties": true,
|
|
69
|
+
"propertyNames": {
|
|
70
|
+
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"ExternalAccount": {
|
|
74
|
+
"title": "ExternalAccount",
|
|
75
|
+
"type": "object",
|
|
76
|
+
"additionalProperties": false,
|
|
77
|
+
"required": [
|
|
78
|
+
"id",
|
|
79
|
+
"label",
|
|
80
|
+
"context",
|
|
81
|
+
"settings",
|
|
82
|
+
"state",
|
|
83
|
+
"bindings",
|
|
84
|
+
"egressHosts",
|
|
85
|
+
"providerSetupRequired",
|
|
86
|
+
"createdAt",
|
|
87
|
+
"updatedAt"
|
|
88
|
+
],
|
|
89
|
+
"description": "An account as every read returns it. Contains no private key, no secret and no issued credential, to any reader.",
|
|
90
|
+
"properties": {
|
|
91
|
+
"id": {
|
|
92
|
+
"$ref": "#/$defs/AccountId"
|
|
93
|
+
},
|
|
94
|
+
"label": {
|
|
95
|
+
"type": "string",
|
|
96
|
+
"minLength": 1,
|
|
97
|
+
"maxLength": 128,
|
|
98
|
+
"description": "Display name. Untrusted text: render it, never interpret it."
|
|
99
|
+
},
|
|
100
|
+
"context": {
|
|
101
|
+
"$ref": "#/$defs/AccountContextId"
|
|
102
|
+
},
|
|
103
|
+
"settings": {
|
|
104
|
+
"$ref": "#/$defs/AccountSettings"
|
|
105
|
+
},
|
|
106
|
+
"state": {
|
|
107
|
+
"$ref": "#/$defs/AccountState"
|
|
108
|
+
},
|
|
109
|
+
"publicMaterial": {
|
|
110
|
+
"$ref": "#/$defs/AccountPublicMaterial",
|
|
111
|
+
"description": "Absent for the static models, which hold a secret rather than a key."
|
|
112
|
+
},
|
|
113
|
+
"secret": {
|
|
114
|
+
"$ref": "#/$defs/AccountSecretInfo",
|
|
115
|
+
"description": "Static models only; absent until the secret is set."
|
|
116
|
+
},
|
|
117
|
+
"bindings": {
|
|
118
|
+
"type": "array",
|
|
119
|
+
"maxItems": 256,
|
|
120
|
+
"items": {
|
|
121
|
+
"$ref": "#/$defs/AccountBinding"
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"egressHosts": {
|
|
125
|
+
"type": "array",
|
|
126
|
+
"maxItems": 8,
|
|
127
|
+
"items": {
|
|
128
|
+
"type": "string",
|
|
129
|
+
"maxLength": 253,
|
|
130
|
+
"pattern": "^[a-z0-9.-]+$"
|
|
131
|
+
},
|
|
132
|
+
"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."
|
|
133
|
+
},
|
|
134
|
+
"providerSetupRequired": {
|
|
135
|
+
"type": "boolean",
|
|
136
|
+
"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."
|
|
137
|
+
},
|
|
138
|
+
"lastProbe": {
|
|
139
|
+
"$ref": "#/$defs/AccountProbeReport"
|
|
140
|
+
},
|
|
141
|
+
"createdAt": {
|
|
142
|
+
"type": "string",
|
|
143
|
+
"format": "date-time"
|
|
144
|
+
},
|
|
145
|
+
"updatedAt": {
|
|
146
|
+
"type": "string",
|
|
147
|
+
"format": "date-time"
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"AccountProbeReport": {
|
|
152
|
+
"title": "AccountProbeReport",
|
|
153
|
+
"type": "object",
|
|
154
|
+
"additionalProperties": false,
|
|
155
|
+
"required": [
|
|
156
|
+
"at",
|
|
157
|
+
"ok",
|
|
158
|
+
"complete",
|
|
159
|
+
"steps"
|
|
160
|
+
],
|
|
161
|
+
"properties": {
|
|
162
|
+
"at": {
|
|
163
|
+
"type": "string",
|
|
164
|
+
"format": "date-time"
|
|
165
|
+
},
|
|
166
|
+
"ok": {
|
|
167
|
+
"type": "boolean",
|
|
168
|
+
"description": "True when every step that ran succeeded."
|
|
169
|
+
},
|
|
170
|
+
"complete": {
|
|
171
|
+
"type": "boolean",
|
|
172
|
+
"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`."
|
|
173
|
+
},
|
|
174
|
+
"steps": {
|
|
175
|
+
"type": "array",
|
|
176
|
+
"maxItems": 8,
|
|
177
|
+
"items": {
|
|
178
|
+
"type": "object",
|
|
179
|
+
"additionalProperties": false,
|
|
180
|
+
"required": [
|
|
181
|
+
"step",
|
|
182
|
+
"ok"
|
|
183
|
+
],
|
|
184
|
+
"properties": {
|
|
185
|
+
"step": {
|
|
186
|
+
"$ref": "#/$defs/AccountProbeStep"
|
|
187
|
+
},
|
|
188
|
+
"ok": {
|
|
189
|
+
"type": "boolean"
|
|
190
|
+
},
|
|
191
|
+
"durationMs": {
|
|
192
|
+
"type": "integer",
|
|
193
|
+
"minimum": 0
|
|
194
|
+
},
|
|
195
|
+
"providerError": {
|
|
196
|
+
"type": "string",
|
|
197
|
+
"maxLength": 2048,
|
|
198
|
+
"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."
|
|
199
|
+
},
|
|
200
|
+
"providerRequestId": {
|
|
201
|
+
"type": "string",
|
|
202
|
+
"maxLength": 256,
|
|
203
|
+
"pattern": "^[!-~]+$"
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
"description": "In order; the first failing step ends the probe."
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
"AccountProbeStep": {
|
|
212
|
+
"title": "AccountProbeStep",
|
|
213
|
+
"type": "string",
|
|
214
|
+
"enum": [
|
|
215
|
+
"sign",
|
|
216
|
+
"exchange",
|
|
217
|
+
"put",
|
|
218
|
+
"get",
|
|
219
|
+
"delete",
|
|
220
|
+
"decode"
|
|
221
|
+
],
|
|
222
|
+
"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)."
|
|
223
|
+
},
|
|
224
|
+
"AccountBinding": {
|
|
225
|
+
"title": "AccountBinding",
|
|
226
|
+
"type": "object",
|
|
227
|
+
"additionalProperties": false,
|
|
228
|
+
"required": [
|
|
229
|
+
"consumer",
|
|
230
|
+
"maxTtlSeconds",
|
|
231
|
+
"ratePerMinute"
|
|
232
|
+
],
|
|
233
|
+
"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.",
|
|
234
|
+
"properties": {
|
|
235
|
+
"consumer": {
|
|
236
|
+
"type": "string",
|
|
237
|
+
"minLength": 7,
|
|
238
|
+
"maxLength": 2048,
|
|
239
|
+
"pattern": "^did:[a-z0-9]+:\\S+$",
|
|
240
|
+
"description": "The DID of the integration allowed to use the account."
|
|
241
|
+
},
|
|
242
|
+
"scopeCeiling": {
|
|
243
|
+
"$ref": "#/$defs/CredentialScopeCeiling",
|
|
244
|
+
"description": "Required for storage and OAuth models; absent for `sui-signer`, whose ceiling is the account's own allow-list and caps."
|
|
245
|
+
},
|
|
246
|
+
"maxTtlSeconds": {
|
|
247
|
+
"type": "integer",
|
|
248
|
+
"minimum": 60,
|
|
249
|
+
"maximum": 3600,
|
|
250
|
+
"description": "The longest credential lifetime the consumer may request. 900 (15 minutes) is RECOMMENDED; the ceiling is one hour."
|
|
251
|
+
},
|
|
252
|
+
"ratePerMinute": {
|
|
253
|
+
"type": "integer",
|
|
254
|
+
"minimum": 1,
|
|
255
|
+
"maximum": 600,
|
|
256
|
+
"description": "Issuances or signatures per minute for this binding."
|
|
257
|
+
},
|
|
258
|
+
"sourceCidrs": {
|
|
259
|
+
"type": "array",
|
|
260
|
+
"maxItems": 16,
|
|
261
|
+
"items": {
|
|
262
|
+
"type": "string",
|
|
263
|
+
"maxLength": 49,
|
|
264
|
+
"pattern": "^[0-9a-fA-F:.]+/[0-9]{1,3}$"
|
|
265
|
+
},
|
|
266
|
+
"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."
|
|
267
|
+
},
|
|
268
|
+
"grantedAt": {
|
|
269
|
+
"type": "string",
|
|
270
|
+
"format": "date-time"
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
"CredentialScopeCeiling": {
|
|
275
|
+
"title": "CredentialScopeCeiling",
|
|
276
|
+
"type": "object",
|
|
277
|
+
"additionalProperties": false,
|
|
278
|
+
"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.",
|
|
279
|
+
"properties": {
|
|
280
|
+
"prefixes": {
|
|
281
|
+
"type": "array",
|
|
282
|
+
"minItems": 1,
|
|
283
|
+
"maxItems": 64,
|
|
284
|
+
"uniqueItems": true,
|
|
285
|
+
"items": {
|
|
286
|
+
"$ref": "#/$defs/ProviderObjectPrefix"
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
"actions": {
|
|
290
|
+
"type": "array",
|
|
291
|
+
"minItems": 1,
|
|
292
|
+
"maxItems": 3,
|
|
293
|
+
"uniqueItems": true,
|
|
294
|
+
"items": {
|
|
295
|
+
"$ref": "#/$defs/ProviderObjectAction"
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
"scopes": {
|
|
299
|
+
"type": "array",
|
|
300
|
+
"maxItems": 64,
|
|
301
|
+
"uniqueItems": true,
|
|
302
|
+
"items": {
|
|
303
|
+
"type": "string",
|
|
304
|
+
"maxLength": 256,
|
|
305
|
+
"pattern": "^[!#-\\[\\]-~]+$"
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
},
|
|
310
|
+
"ProviderObjectAction": {
|
|
311
|
+
"title": "ProviderObjectAction",
|
|
312
|
+
"type": "string",
|
|
313
|
+
"enum": [
|
|
314
|
+
"put",
|
|
315
|
+
"get",
|
|
316
|
+
"delete"
|
|
317
|
+
],
|
|
318
|
+
"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."
|
|
319
|
+
},
|
|
320
|
+
"ProviderObjectPrefix": {
|
|
321
|
+
"title": "ProviderObjectPrefix",
|
|
322
|
+
"type": "string",
|
|
323
|
+
"minLength": 2,
|
|
324
|
+
"maxLength": 512,
|
|
325
|
+
"pattern": "^([a-z0-9][a-z0-9._-]{0,127}/){1,16}$",
|
|
326
|
+
"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."
|
|
327
|
+
},
|
|
328
|
+
"AccountSecretInfo": {
|
|
329
|
+
"title": "AccountSecretInfo",
|
|
330
|
+
"type": "object",
|
|
331
|
+
"additionalProperties": false,
|
|
332
|
+
"required": [
|
|
333
|
+
"fingerprint",
|
|
334
|
+
"setAt"
|
|
335
|
+
],
|
|
336
|
+
"description": "That a static model's secret is set, and which one. Never its value.",
|
|
337
|
+
"properties": {
|
|
338
|
+
"fingerprint": {
|
|
339
|
+
"$ref": "#/$defs/SecretFingerprint"
|
|
340
|
+
},
|
|
341
|
+
"setAt": {
|
|
342
|
+
"type": "string",
|
|
343
|
+
"format": "date-time"
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
"SecretFingerprint": {
|
|
348
|
+
"title": "SecretFingerprint",
|
|
349
|
+
"type": "string",
|
|
350
|
+
"pattern": "^hmacsha256:[A-Za-z0-9_-]{22}$",
|
|
351
|
+
"maxLength": 33,
|
|
352
|
+
"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."
|
|
353
|
+
},
|
|
354
|
+
"AccountPublicMaterial": {
|
|
355
|
+
"title": "AccountPublicMaterial",
|
|
356
|
+
"type": "object",
|
|
357
|
+
"additionalProperties": false,
|
|
358
|
+
"required": [
|
|
359
|
+
"algorithm",
|
|
360
|
+
"keyFingerprint"
|
|
361
|
+
],
|
|
362
|
+
"description": "The public half of the account's key, as the provider needs it. Never a private key.",
|
|
363
|
+
"properties": {
|
|
364
|
+
"algorithm": {
|
|
365
|
+
"type": "string",
|
|
366
|
+
"enum": [
|
|
367
|
+
"ES256",
|
|
368
|
+
"RS256",
|
|
369
|
+
"Secp256r1"
|
|
370
|
+
]
|
|
371
|
+
},
|
|
372
|
+
"keyFingerprint": {
|
|
373
|
+
"$ref": "#/$defs/DigestMultibase",
|
|
374
|
+
"description": "Digest of the public key's SubjectPublicKeyInfo DER."
|
|
375
|
+
},
|
|
376
|
+
"publicKeyJwk": {
|
|
377
|
+
"type": "object",
|
|
378
|
+
"additionalProperties": false,
|
|
379
|
+
"required": [
|
|
380
|
+
"kty",
|
|
381
|
+
"kid"
|
|
382
|
+
],
|
|
383
|
+
"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.",
|
|
384
|
+
"properties": {
|
|
385
|
+
"kty": {
|
|
386
|
+
"type": "string",
|
|
387
|
+
"enum": [
|
|
388
|
+
"EC",
|
|
389
|
+
"RSA"
|
|
390
|
+
]
|
|
391
|
+
},
|
|
392
|
+
"crv": {
|
|
393
|
+
"type": "string",
|
|
394
|
+
"enum": [
|
|
395
|
+
"P-256"
|
|
396
|
+
]
|
|
397
|
+
},
|
|
398
|
+
"x": {
|
|
399
|
+
"type": "string",
|
|
400
|
+
"maxLength": 1024,
|
|
401
|
+
"pattern": "^[A-Za-z0-9_-]+$"
|
|
402
|
+
},
|
|
403
|
+
"y": {
|
|
404
|
+
"type": "string",
|
|
405
|
+
"maxLength": 1024,
|
|
406
|
+
"pattern": "^[A-Za-z0-9_-]+$"
|
|
407
|
+
},
|
|
408
|
+
"n": {
|
|
409
|
+
"type": "string",
|
|
410
|
+
"maxLength": 1024,
|
|
411
|
+
"pattern": "^[A-Za-z0-9_-]+$"
|
|
412
|
+
},
|
|
413
|
+
"e": {
|
|
414
|
+
"type": "string",
|
|
415
|
+
"maxLength": 16,
|
|
416
|
+
"pattern": "^[A-Za-z0-9_-]+$"
|
|
417
|
+
},
|
|
418
|
+
"kid": {
|
|
419
|
+
"type": "string",
|
|
420
|
+
"maxLength": 128,
|
|
421
|
+
"pattern": "^[!-~]+$"
|
|
422
|
+
},
|
|
423
|
+
"alg": {
|
|
424
|
+
"type": "string",
|
|
425
|
+
"enum": [
|
|
426
|
+
"ES256",
|
|
427
|
+
"RS256"
|
|
428
|
+
]
|
|
429
|
+
},
|
|
430
|
+
"use": {
|
|
431
|
+
"type": "string",
|
|
432
|
+
"const": "sig"
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
},
|
|
436
|
+
"certificatePem": {
|
|
437
|
+
"type": "string",
|
|
438
|
+
"maxLength": 16384,
|
|
439
|
+
"pattern": "^-----BEGIN CERTIFICATE-----[A-Za-z0-9+/=\\r\\n]+-----END CERTIFICATE-----\\s*$",
|
|
440
|
+
"description": "`aws-roles-anywhere`: the trust anchor's CA certificate. `azure-cert`: the certificate uploaded to the app registration."
|
|
441
|
+
},
|
|
442
|
+
"address": {
|
|
443
|
+
"type": "string",
|
|
444
|
+
"pattern": "^0x[0-9a-f]{64}$",
|
|
445
|
+
"description": "`sui-signer`: the Sui address the key controls."
|
|
446
|
+
},
|
|
447
|
+
"pendingKeyFingerprint": {
|
|
448
|
+
"$ref": "#/$defs/DigestMultibase",
|
|
449
|
+
"description": "During a rotation (external/accounts/keys/rotate), the staged successor key, until it is confirmed and the current key retires."
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
},
|
|
453
|
+
"DigestMultibase": {
|
|
454
|
+
"title": "DigestMultibase",
|
|
455
|
+
"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`.",
|
|
456
|
+
"type": "string",
|
|
457
|
+
"minLength": 16,
|
|
458
|
+
"pattern": "^(z[1-9A-HJ-NP-Za-km-z]+|u[A-Za-z0-9_-]+)$",
|
|
459
|
+
"examples": [
|
|
460
|
+
"zQmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR"
|
|
461
|
+
]
|
|
462
|
+
},
|
|
463
|
+
"AccountState": {
|
|
464
|
+
"title": "AccountState",
|
|
465
|
+
"type": "string",
|
|
466
|
+
"enum": [
|
|
467
|
+
"active",
|
|
468
|
+
"suspended",
|
|
469
|
+
"archived"
|
|
470
|
+
],
|
|
471
|
+
"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."
|
|
472
|
+
},
|
|
473
|
+
"AccountSettings": {
|
|
474
|
+
"title": "AccountSettings",
|
|
475
|
+
"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.",
|
|
476
|
+
"oneOf": [
|
|
477
|
+
{
|
|
478
|
+
"type": "object",
|
|
479
|
+
"additionalProperties": false,
|
|
480
|
+
"required": [
|
|
481
|
+
"model",
|
|
482
|
+
"region",
|
|
483
|
+
"profileArn",
|
|
484
|
+
"roleArn",
|
|
485
|
+
"trustAnchorArn"
|
|
486
|
+
],
|
|
487
|
+
"description": "Egress: `rolesanywhere.<region>.amazonaws.com`, plus `sts.<region>.amazonaws.com` when `chainedRoleArn` is set.",
|
|
488
|
+
"properties": {
|
|
489
|
+
"model": {
|
|
490
|
+
"type": "string",
|
|
491
|
+
"const": "aws-roles-anywhere"
|
|
492
|
+
},
|
|
493
|
+
"region": {
|
|
494
|
+
"$ref": "#/$defs/AwsRegion"
|
|
495
|
+
},
|
|
496
|
+
"trustAnchorArn": {
|
|
497
|
+
"$ref": "#/$defs/AwsArn",
|
|
498
|
+
"description": "The trust anchor holding the custodian's CA certificate. Recorded after the administrator creates it from external/accounts/setup."
|
|
499
|
+
},
|
|
500
|
+
"profileArn": {
|
|
501
|
+
"$ref": "#/$defs/AwsArn"
|
|
502
|
+
},
|
|
503
|
+
"roleArn": {
|
|
504
|
+
"$ref": "#/$defs/AwsArn"
|
|
505
|
+
},
|
|
506
|
+
"chainedRoleArn": {
|
|
507
|
+
"$ref": "#/$defs/AwsArn",
|
|
508
|
+
"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."
|
|
509
|
+
},
|
|
510
|
+
"bucket": {
|
|
511
|
+
"$ref": "#/$defs/ProviderBucketName",
|
|
512
|
+
"description": "The S3 bucket issuances are scoped within. Required for an account whose bindings issue storage scopes."
|
|
513
|
+
},
|
|
514
|
+
"probePrefix": {
|
|
515
|
+
"$ref": "#/$defs/ProviderObjectPrefix",
|
|
516
|
+
"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`."
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
},
|
|
520
|
+
{
|
|
521
|
+
"type": "object",
|
|
522
|
+
"additionalProperties": false,
|
|
523
|
+
"required": [
|
|
524
|
+
"model",
|
|
525
|
+
"projectNumber",
|
|
526
|
+
"poolId",
|
|
527
|
+
"providerId"
|
|
528
|
+
],
|
|
529
|
+
"description": "Egress: `sts.googleapis.com`, plus `iamcredentials.googleapis.com` when `serviceAccount` is set.",
|
|
530
|
+
"properties": {
|
|
531
|
+
"model": {
|
|
532
|
+
"type": "string",
|
|
533
|
+
"const": "gcp-wif-pinned"
|
|
534
|
+
},
|
|
535
|
+
"projectNumber": {
|
|
536
|
+
"type": "string",
|
|
537
|
+
"pattern": "^[0-9]{1,20}$"
|
|
538
|
+
},
|
|
539
|
+
"poolId": {
|
|
540
|
+
"type": "string",
|
|
541
|
+
"pattern": "^[a-z0-9-]{4,32}$"
|
|
542
|
+
},
|
|
543
|
+
"providerId": {
|
|
544
|
+
"type": "string",
|
|
545
|
+
"pattern": "^[a-z0-9-]{4,32}$"
|
|
546
|
+
},
|
|
547
|
+
"serviceAccount": {
|
|
548
|
+
"type": "string",
|
|
549
|
+
"maxLength": 254,
|
|
550
|
+
"pattern": "^[a-z0-9-]+@[a-z0-9-]+\\.iam\\.gserviceaccount\\.com$",
|
|
551
|
+
"description": "When set, the federated token is exchanged for this service account's access token."
|
|
552
|
+
},
|
|
553
|
+
"signingAlgorithm": {
|
|
554
|
+
"type": "string",
|
|
555
|
+
"enum": [
|
|
556
|
+
"ES256",
|
|
557
|
+
"RS256"
|
|
558
|
+
],
|
|
559
|
+
"description": "The ID-token algorithm. ES256 unless the provider refuses it. Absent means ES256."
|
|
560
|
+
},
|
|
561
|
+
"bucket": {
|
|
562
|
+
"$ref": "#/$defs/ProviderBucketName",
|
|
563
|
+
"description": "The GCS bucket issuances are scoped within, by a Credential Access Boundary."
|
|
564
|
+
},
|
|
565
|
+
"probePrefix": {
|
|
566
|
+
"$ref": "#/$defs/ProviderObjectPrefix",
|
|
567
|
+
"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`."
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
},
|
|
571
|
+
{
|
|
572
|
+
"type": "object",
|
|
573
|
+
"additionalProperties": false,
|
|
574
|
+
"required": [
|
|
575
|
+
"model",
|
|
576
|
+
"tenantId",
|
|
577
|
+
"clientId",
|
|
578
|
+
"tokenScope"
|
|
579
|
+
],
|
|
580
|
+
"description": "Egress: `login.microsoftonline.com`, or the sovereign-cloud authority named in `authorityHost`.",
|
|
581
|
+
"properties": {
|
|
582
|
+
"model": {
|
|
583
|
+
"type": "string",
|
|
584
|
+
"const": "azure-cert"
|
|
585
|
+
},
|
|
586
|
+
"tenantId": {
|
|
587
|
+
"type": "string",
|
|
588
|
+
"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}$"
|
|
589
|
+
},
|
|
590
|
+
"clientId": {
|
|
591
|
+
"type": "string",
|
|
592
|
+
"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}$"
|
|
593
|
+
},
|
|
594
|
+
"tokenScope": {
|
|
595
|
+
"type": "string",
|
|
596
|
+
"maxLength": 512,
|
|
597
|
+
"pattern": "^[A-Za-z0-9:/._-]+$",
|
|
598
|
+
"description": "The `scope` requested at the token endpoint, such as `https://storage.azure.com/.default`."
|
|
599
|
+
},
|
|
600
|
+
"authorityHost": {
|
|
601
|
+
"type": "string",
|
|
602
|
+
"maxLength": 253,
|
|
603
|
+
"pattern": "^[a-z0-9.-]+$",
|
|
604
|
+
"description": "Absent means `login.microsoftonline.com`."
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
},
|
|
608
|
+
{
|
|
609
|
+
"type": "object",
|
|
610
|
+
"additionalProperties": false,
|
|
611
|
+
"required": [
|
|
612
|
+
"model",
|
|
613
|
+
"tokenEndpoint",
|
|
614
|
+
"clientId"
|
|
615
|
+
],
|
|
616
|
+
"description": "Egress: the host of `tokenEndpoint`, and nothing else.",
|
|
617
|
+
"properties": {
|
|
618
|
+
"model": {
|
|
619
|
+
"type": "string",
|
|
620
|
+
"const": "oauth2-private-key-jwt"
|
|
621
|
+
},
|
|
622
|
+
"tokenEndpoint": {
|
|
623
|
+
"$ref": "#/$defs/ProviderHttpsUrl"
|
|
624
|
+
},
|
|
625
|
+
"clientId": {
|
|
626
|
+
"type": "string",
|
|
627
|
+
"minLength": 1,
|
|
628
|
+
"maxLength": 512,
|
|
629
|
+
"pattern": "^[!-~]+$"
|
|
630
|
+
},
|
|
631
|
+
"audience": {
|
|
632
|
+
"type": "string",
|
|
633
|
+
"maxLength": 2048,
|
|
634
|
+
"pattern": "^[!-~]+$",
|
|
635
|
+
"description": "The assertion's `aud`. Absent means `tokenEndpoint`."
|
|
636
|
+
},
|
|
637
|
+
"scopes": {
|
|
638
|
+
"type": "array",
|
|
639
|
+
"maxItems": 64,
|
|
640
|
+
"uniqueItems": true,
|
|
641
|
+
"items": {
|
|
642
|
+
"type": "string",
|
|
643
|
+
"maxLength": 256,
|
|
644
|
+
"pattern": "^[!#-\\[\\]-~]+$"
|
|
645
|
+
},
|
|
646
|
+
"description": "The scopes a binding may request, the ceiling for every issuance."
|
|
647
|
+
},
|
|
648
|
+
"signingAlgorithm": {
|
|
649
|
+
"type": "string",
|
|
650
|
+
"enum": [
|
|
651
|
+
"ES256",
|
|
652
|
+
"RS256"
|
|
653
|
+
]
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
},
|
|
657
|
+
{
|
|
658
|
+
"type": "object",
|
|
659
|
+
"additionalProperties": false,
|
|
660
|
+
"required": [
|
|
661
|
+
"model",
|
|
662
|
+
"endpoint",
|
|
663
|
+
"region",
|
|
664
|
+
"bucket",
|
|
665
|
+
"accessKeyId"
|
|
666
|
+
],
|
|
667
|
+
"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.",
|
|
668
|
+
"properties": {
|
|
669
|
+
"model": {
|
|
670
|
+
"type": "string",
|
|
671
|
+
"const": "s3-static-presign"
|
|
672
|
+
},
|
|
673
|
+
"endpoint": {
|
|
674
|
+
"$ref": "#/$defs/ProviderHttpsUrl"
|
|
675
|
+
},
|
|
676
|
+
"region": {
|
|
677
|
+
"type": "string",
|
|
678
|
+
"maxLength": 64,
|
|
679
|
+
"pattern": "^[a-z0-9-]+$",
|
|
680
|
+
"description": "The SigV4 signing region; `auto` for Cloudflare R2."
|
|
681
|
+
},
|
|
682
|
+
"bucket": {
|
|
683
|
+
"$ref": "#/$defs/ProviderBucketName"
|
|
684
|
+
},
|
|
685
|
+
"pathStyle": {
|
|
686
|
+
"type": "boolean",
|
|
687
|
+
"description": "Address the bucket in the path rather than the host name, as MinIO usually needs."
|
|
688
|
+
},
|
|
689
|
+
"accessKeyId": {
|
|
690
|
+
"type": "string",
|
|
691
|
+
"maxLength": 128,
|
|
692
|
+
"pattern": "^[A-Za-z0-9]+$",
|
|
693
|
+
"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."
|
|
694
|
+
},
|
|
695
|
+
"probePrefix": {
|
|
696
|
+
"$ref": "#/$defs/ProviderObjectPrefix",
|
|
697
|
+
"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`."
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
"type": "object",
|
|
703
|
+
"additionalProperties": false,
|
|
704
|
+
"required": [
|
|
705
|
+
"model",
|
|
706
|
+
"network",
|
|
707
|
+
"allowedCalls",
|
|
708
|
+
"maxGasBudgetMist",
|
|
709
|
+
"maxGasPerDayMist"
|
|
710
|
+
],
|
|
711
|
+
"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.",
|
|
712
|
+
"properties": {
|
|
713
|
+
"model": {
|
|
714
|
+
"type": "string",
|
|
715
|
+
"const": "sui-signer"
|
|
716
|
+
},
|
|
717
|
+
"network": {
|
|
718
|
+
"type": "string",
|
|
719
|
+
"enum": [
|
|
720
|
+
"mainnet",
|
|
721
|
+
"testnet",
|
|
722
|
+
"devnet"
|
|
723
|
+
]
|
|
724
|
+
},
|
|
725
|
+
"allowedCalls": {
|
|
726
|
+
"type": "array",
|
|
727
|
+
"minItems": 1,
|
|
728
|
+
"maxItems": 32,
|
|
729
|
+
"items": {
|
|
730
|
+
"$ref": "#/$defs/SuiMoveCall"
|
|
731
|
+
},
|
|
732
|
+
"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."
|
|
733
|
+
},
|
|
734
|
+
"allowedObjects": {
|
|
735
|
+
"type": "array",
|
|
736
|
+
"maxItems": 32,
|
|
737
|
+
"items": {
|
|
738
|
+
"type": "string",
|
|
739
|
+
"pattern": "^0x[0-9a-f]{64}$"
|
|
740
|
+
},
|
|
741
|
+
"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."
|
|
742
|
+
},
|
|
743
|
+
"maxGasBudgetMist": {
|
|
744
|
+
"type": "integer",
|
|
745
|
+
"minimum": 1,
|
|
746
|
+
"description": "The largest gas budget one transaction may declare."
|
|
747
|
+
},
|
|
748
|
+
"maxGasPerDayMist": {
|
|
749
|
+
"type": "integer",
|
|
750
|
+
"minimum": 1,
|
|
751
|
+
"description": "The total gas budget signed per rolling 24 hours."
|
|
752
|
+
},
|
|
753
|
+
"maxCoinOutPerTx": {
|
|
754
|
+
"type": "array",
|
|
755
|
+
"maxItems": 8,
|
|
756
|
+
"items": {
|
|
757
|
+
"type": "object",
|
|
758
|
+
"additionalProperties": false,
|
|
759
|
+
"required": [
|
|
760
|
+
"coinType",
|
|
761
|
+
"amount"
|
|
762
|
+
],
|
|
763
|
+
"properties": {
|
|
764
|
+
"coinType": {
|
|
765
|
+
"type": "string",
|
|
766
|
+
"maxLength": 512,
|
|
767
|
+
"pattern": "^0x[0-9a-f]{1,64}::[A-Za-z0-9_]+::[A-Za-z0-9_]+$"
|
|
768
|
+
},
|
|
769
|
+
"amount": {
|
|
770
|
+
"type": "integer",
|
|
771
|
+
"minimum": 0
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
},
|
|
775
|
+
"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."
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
},
|
|
779
|
+
{
|
|
780
|
+
"type": "object",
|
|
781
|
+
"additionalProperties": false,
|
|
782
|
+
"required": [
|
|
783
|
+
"model",
|
|
784
|
+
"driver",
|
|
785
|
+
"baseUrl"
|
|
786
|
+
],
|
|
787
|
+
"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.",
|
|
788
|
+
"properties": {
|
|
789
|
+
"model": {
|
|
790
|
+
"type": "string",
|
|
791
|
+
"const": "static-secret"
|
|
792
|
+
},
|
|
793
|
+
"driver": {
|
|
794
|
+
"type": "string",
|
|
795
|
+
"maxLength": 64,
|
|
796
|
+
"pattern": "^[a-z0-9][a-z0-9-]*$",
|
|
797
|
+
"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."
|
|
798
|
+
},
|
|
799
|
+
"baseUrl": {
|
|
800
|
+
"$ref": "#/$defs/ProviderHttpsUrl"
|
|
801
|
+
}
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
]
|
|
805
|
+
},
|
|
806
|
+
"ProviderHttpsUrl": {
|
|
807
|
+
"title": "ProviderHttpsUrl",
|
|
808
|
+
"type": "string",
|
|
809
|
+
"format": "uri",
|
|
810
|
+
"maxLength": 2048,
|
|
811
|
+
"pattern": "^https://[^\\s\"'\\\\]+$"
|
|
812
|
+
},
|
|
813
|
+
"SuiMoveCall": {
|
|
814
|
+
"title": "SuiMoveCall",
|
|
815
|
+
"type": "object",
|
|
816
|
+
"additionalProperties": false,
|
|
817
|
+
"required": [
|
|
818
|
+
"package",
|
|
819
|
+
"module",
|
|
820
|
+
"function"
|
|
821
|
+
],
|
|
822
|
+
"description": "One Move function an account's transactions may call.",
|
|
823
|
+
"properties": {
|
|
824
|
+
"package": {
|
|
825
|
+
"type": "string",
|
|
826
|
+
"pattern": "^0x[0-9a-f]{64}$"
|
|
827
|
+
},
|
|
828
|
+
"module": {
|
|
829
|
+
"type": "string",
|
|
830
|
+
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,127}$"
|
|
831
|
+
},
|
|
832
|
+
"function": {
|
|
833
|
+
"type": "string",
|
|
834
|
+
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,127}$"
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
},
|
|
838
|
+
"ProviderBucketName": {
|
|
839
|
+
"title": "ProviderBucketName",
|
|
840
|
+
"type": "string",
|
|
841
|
+
"minLength": 3,
|
|
842
|
+
"maxLength": 63,
|
|
843
|
+
"pattern": "^[a-z0-9][a-z0-9.-]*[a-z0-9]$",
|
|
844
|
+
"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."
|
|
845
|
+
},
|
|
846
|
+
"AwsArn": {
|
|
847
|
+
"title": "AwsArn",
|
|
848
|
+
"type": "string",
|
|
849
|
+
"maxLength": 2048,
|
|
850
|
+
"pattern": "^arn:aws[a-z-]*:[a-z0-9-]+:[a-z0-9-]*:[0-9]{0,12}:[A-Za-z0-9+=,.@_/:-]+$"
|
|
851
|
+
},
|
|
852
|
+
"AwsRegion": {
|
|
853
|
+
"title": "AwsRegion",
|
|
854
|
+
"type": "string",
|
|
855
|
+
"pattern": "^[a-z]{2}(-gov)?-[a-z]+-[0-9]$",
|
|
856
|
+
"maxLength": 32
|
|
857
|
+
},
|
|
858
|
+
"AccountContextId": {
|
|
859
|
+
"title": "AccountContextId",
|
|
860
|
+
"type": "string",
|
|
861
|
+
"minLength": 1,
|
|
862
|
+
"maxLength": 256,
|
|
863
|
+
"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."
|
|
864
|
+
},
|
|
865
|
+
"AccountId": {
|
|
866
|
+
"title": "AccountId",
|
|
867
|
+
"type": "string",
|
|
868
|
+
"minLength": 1,
|
|
869
|
+
"maxLength": 64,
|
|
870
|
+
"pattern": "^[a-z0-9][a-z0-9-]*$",
|
|
871
|
+
"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."
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
};
|
|
875
|
+
/** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
|
|
876
|
+
export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
877
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
878
|
+
"$ref": "#/$defs/Response",
|
|
879
|
+
"$defs": {
|
|
880
|
+
"Response": {
|
|
881
|
+
"$anchor": "response",
|
|
882
|
+
"title": "External Accounts — Restore — response payload",
|
|
883
|
+
"type": "object",
|
|
884
|
+
"additionalProperties": false,
|
|
885
|
+
"required": [
|
|
886
|
+
"account"
|
|
887
|
+
],
|
|
888
|
+
"properties": {
|
|
889
|
+
"account": {
|
|
890
|
+
"$ref": "#/$defs/ExternalAccount"
|
|
891
|
+
},
|
|
892
|
+
"ext": {
|
|
893
|
+
"$ref": "#/$defs/Ext"
|
|
894
|
+
}
|
|
895
|
+
}
|
|
896
|
+
},
|
|
897
|
+
"Ext": {
|
|
898
|
+
"title": "Ext",
|
|
899
|
+
"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.",
|
|
900
|
+
"type": "object",
|
|
901
|
+
"minProperties": 1,
|
|
902
|
+
"additionalProperties": true,
|
|
903
|
+
"propertyNames": {
|
|
904
|
+
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
905
|
+
}
|
|
906
|
+
},
|
|
907
|
+
"ExternalAccount": {
|
|
908
|
+
"title": "ExternalAccount",
|
|
909
|
+
"type": "object",
|
|
910
|
+
"additionalProperties": false,
|
|
911
|
+
"required": [
|
|
912
|
+
"id",
|
|
913
|
+
"label",
|
|
914
|
+
"context",
|
|
915
|
+
"settings",
|
|
916
|
+
"state",
|
|
917
|
+
"bindings",
|
|
918
|
+
"egressHosts",
|
|
919
|
+
"providerSetupRequired",
|
|
920
|
+
"createdAt",
|
|
921
|
+
"updatedAt"
|
|
922
|
+
],
|
|
923
|
+
"description": "An account as every read returns it. Contains no private key, no secret and no issued credential, to any reader.",
|
|
924
|
+
"properties": {
|
|
925
|
+
"id": {
|
|
926
|
+
"$ref": "#/$defs/AccountId"
|
|
927
|
+
},
|
|
928
|
+
"label": {
|
|
929
|
+
"type": "string",
|
|
930
|
+
"minLength": 1,
|
|
931
|
+
"maxLength": 128,
|
|
932
|
+
"description": "Display name. Untrusted text: render it, never interpret it."
|
|
933
|
+
},
|
|
934
|
+
"context": {
|
|
935
|
+
"$ref": "#/$defs/AccountContextId"
|
|
936
|
+
},
|
|
937
|
+
"settings": {
|
|
938
|
+
"$ref": "#/$defs/AccountSettings"
|
|
939
|
+
},
|
|
940
|
+
"state": {
|
|
941
|
+
"$ref": "#/$defs/AccountState"
|
|
942
|
+
},
|
|
943
|
+
"publicMaterial": {
|
|
944
|
+
"$ref": "#/$defs/AccountPublicMaterial",
|
|
945
|
+
"description": "Absent for the static models, which hold a secret rather than a key."
|
|
946
|
+
},
|
|
947
|
+
"secret": {
|
|
948
|
+
"$ref": "#/$defs/AccountSecretInfo",
|
|
949
|
+
"description": "Static models only; absent until the secret is set."
|
|
950
|
+
},
|
|
951
|
+
"bindings": {
|
|
952
|
+
"type": "array",
|
|
953
|
+
"maxItems": 256,
|
|
954
|
+
"items": {
|
|
955
|
+
"$ref": "#/$defs/AccountBinding"
|
|
956
|
+
}
|
|
957
|
+
},
|
|
958
|
+
"egressHosts": {
|
|
959
|
+
"type": "array",
|
|
960
|
+
"maxItems": 8,
|
|
961
|
+
"items": {
|
|
962
|
+
"type": "string",
|
|
963
|
+
"maxLength": 253,
|
|
964
|
+
"pattern": "^[a-z0-9.-]+$"
|
|
965
|
+
},
|
|
966
|
+
"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."
|
|
967
|
+
},
|
|
968
|
+
"providerSetupRequired": {
|
|
969
|
+
"type": "boolean",
|
|
970
|
+
"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."
|
|
971
|
+
},
|
|
972
|
+
"lastProbe": {
|
|
973
|
+
"$ref": "#/$defs/AccountProbeReport"
|
|
974
|
+
},
|
|
975
|
+
"createdAt": {
|
|
976
|
+
"type": "string",
|
|
977
|
+
"format": "date-time"
|
|
978
|
+
},
|
|
979
|
+
"updatedAt": {
|
|
980
|
+
"type": "string",
|
|
981
|
+
"format": "date-time"
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
},
|
|
985
|
+
"AccountProbeReport": {
|
|
986
|
+
"title": "AccountProbeReport",
|
|
987
|
+
"type": "object",
|
|
988
|
+
"additionalProperties": false,
|
|
989
|
+
"required": [
|
|
990
|
+
"at",
|
|
991
|
+
"ok",
|
|
992
|
+
"complete",
|
|
993
|
+
"steps"
|
|
994
|
+
],
|
|
995
|
+
"properties": {
|
|
996
|
+
"at": {
|
|
997
|
+
"type": "string",
|
|
998
|
+
"format": "date-time"
|
|
999
|
+
},
|
|
1000
|
+
"ok": {
|
|
1001
|
+
"type": "boolean",
|
|
1002
|
+
"description": "True when every step that ran succeeded."
|
|
1003
|
+
},
|
|
1004
|
+
"complete": {
|
|
1005
|
+
"type": "boolean",
|
|
1006
|
+
"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`."
|
|
1007
|
+
},
|
|
1008
|
+
"steps": {
|
|
1009
|
+
"type": "array",
|
|
1010
|
+
"maxItems": 8,
|
|
1011
|
+
"items": {
|
|
1012
|
+
"type": "object",
|
|
1013
|
+
"additionalProperties": false,
|
|
1014
|
+
"required": [
|
|
1015
|
+
"step",
|
|
1016
|
+
"ok"
|
|
1017
|
+
],
|
|
1018
|
+
"properties": {
|
|
1019
|
+
"step": {
|
|
1020
|
+
"$ref": "#/$defs/AccountProbeStep"
|
|
1021
|
+
},
|
|
1022
|
+
"ok": {
|
|
1023
|
+
"type": "boolean"
|
|
1024
|
+
},
|
|
1025
|
+
"durationMs": {
|
|
1026
|
+
"type": "integer",
|
|
1027
|
+
"minimum": 0
|
|
1028
|
+
},
|
|
1029
|
+
"providerError": {
|
|
1030
|
+
"type": "string",
|
|
1031
|
+
"maxLength": 2048,
|
|
1032
|
+
"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."
|
|
1033
|
+
},
|
|
1034
|
+
"providerRequestId": {
|
|
1035
|
+
"type": "string",
|
|
1036
|
+
"maxLength": 256,
|
|
1037
|
+
"pattern": "^[!-~]+$"
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
},
|
|
1041
|
+
"description": "In order; the first failing step ends the probe."
|
|
1042
|
+
}
|
|
1043
|
+
}
|
|
1044
|
+
},
|
|
1045
|
+
"AccountProbeStep": {
|
|
1046
|
+
"title": "AccountProbeStep",
|
|
1047
|
+
"type": "string",
|
|
1048
|
+
"enum": [
|
|
1049
|
+
"sign",
|
|
1050
|
+
"exchange",
|
|
1051
|
+
"put",
|
|
1052
|
+
"get",
|
|
1053
|
+
"delete",
|
|
1054
|
+
"decode"
|
|
1055
|
+
],
|
|
1056
|
+
"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)."
|
|
1057
|
+
},
|
|
1058
|
+
"AccountBinding": {
|
|
1059
|
+
"title": "AccountBinding",
|
|
1060
|
+
"type": "object",
|
|
1061
|
+
"additionalProperties": false,
|
|
1062
|
+
"required": [
|
|
1063
|
+
"consumer",
|
|
1064
|
+
"maxTtlSeconds",
|
|
1065
|
+
"ratePerMinute"
|
|
1066
|
+
],
|
|
1067
|
+
"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
|
+
"properties": {
|
|
1069
|
+
"consumer": {
|
|
1070
|
+
"type": "string",
|
|
1071
|
+
"minLength": 7,
|
|
1072
|
+
"maxLength": 2048,
|
|
1073
|
+
"pattern": "^did:[a-z0-9]+:\\S+$",
|
|
1074
|
+
"description": "The DID of the integration allowed to use the account."
|
|
1075
|
+
},
|
|
1076
|
+
"scopeCeiling": {
|
|
1077
|
+
"$ref": "#/$defs/CredentialScopeCeiling",
|
|
1078
|
+
"description": "Required for storage and OAuth models; absent for `sui-signer`, whose ceiling is the account's own allow-list and caps."
|
|
1079
|
+
},
|
|
1080
|
+
"maxTtlSeconds": {
|
|
1081
|
+
"type": "integer",
|
|
1082
|
+
"minimum": 60,
|
|
1083
|
+
"maximum": 3600,
|
|
1084
|
+
"description": "The longest credential lifetime the consumer may request. 900 (15 minutes) is RECOMMENDED; the ceiling is one hour."
|
|
1085
|
+
},
|
|
1086
|
+
"ratePerMinute": {
|
|
1087
|
+
"type": "integer",
|
|
1088
|
+
"minimum": 1,
|
|
1089
|
+
"maximum": 600,
|
|
1090
|
+
"description": "Issuances or signatures per minute for this binding."
|
|
1091
|
+
},
|
|
1092
|
+
"sourceCidrs": {
|
|
1093
|
+
"type": "array",
|
|
1094
|
+
"maxItems": 16,
|
|
1095
|
+
"items": {
|
|
1096
|
+
"type": "string",
|
|
1097
|
+
"maxLength": 49,
|
|
1098
|
+
"pattern": "^[0-9a-fA-F:.]+/[0-9]{1,3}$"
|
|
1099
|
+
},
|
|
1100
|
+
"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
|
+
"grantedAt": {
|
|
1103
|
+
"type": "string",
|
|
1104
|
+
"format": "date-time"
|
|
1105
|
+
}
|
|
1106
|
+
}
|
|
1107
|
+
},
|
|
1108
|
+
"CredentialScopeCeiling": {
|
|
1109
|
+
"title": "CredentialScopeCeiling",
|
|
1110
|
+
"type": "object",
|
|
1111
|
+
"additionalProperties": false,
|
|
1112
|
+
"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
|
+
"properties": {
|
|
1114
|
+
"prefixes": {
|
|
1115
|
+
"type": "array",
|
|
1116
|
+
"minItems": 1,
|
|
1117
|
+
"maxItems": 64,
|
|
1118
|
+
"uniqueItems": true,
|
|
1119
|
+
"items": {
|
|
1120
|
+
"$ref": "#/$defs/ProviderObjectPrefix"
|
|
1121
|
+
}
|
|
1122
|
+
},
|
|
1123
|
+
"actions": {
|
|
1124
|
+
"type": "array",
|
|
1125
|
+
"minItems": 1,
|
|
1126
|
+
"maxItems": 3,
|
|
1127
|
+
"uniqueItems": true,
|
|
1128
|
+
"items": {
|
|
1129
|
+
"$ref": "#/$defs/ProviderObjectAction"
|
|
1130
|
+
}
|
|
1131
|
+
},
|
|
1132
|
+
"scopes": {
|
|
1133
|
+
"type": "array",
|
|
1134
|
+
"maxItems": 64,
|
|
1135
|
+
"uniqueItems": true,
|
|
1136
|
+
"items": {
|
|
1137
|
+
"type": "string",
|
|
1138
|
+
"maxLength": 256,
|
|
1139
|
+
"pattern": "^[!#-\\[\\]-~]+$"
|
|
1140
|
+
}
|
|
1141
|
+
}
|
|
1142
|
+
}
|
|
1143
|
+
},
|
|
1144
|
+
"ProviderObjectAction": {
|
|
1145
|
+
"title": "ProviderObjectAction",
|
|
1146
|
+
"type": "string",
|
|
1147
|
+
"enum": [
|
|
1148
|
+
"put",
|
|
1149
|
+
"get",
|
|
1150
|
+
"delete"
|
|
1151
|
+
],
|
|
1152
|
+
"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."
|
|
1153
|
+
},
|
|
1154
|
+
"ProviderObjectPrefix": {
|
|
1155
|
+
"title": "ProviderObjectPrefix",
|
|
1156
|
+
"type": "string",
|
|
1157
|
+
"minLength": 2,
|
|
1158
|
+
"maxLength": 512,
|
|
1159
|
+
"pattern": "^([a-z0-9][a-z0-9._-]{0,127}/){1,16}$",
|
|
1160
|
+
"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."
|
|
1161
|
+
},
|
|
1162
|
+
"AccountSecretInfo": {
|
|
1163
|
+
"title": "AccountSecretInfo",
|
|
1164
|
+
"type": "object",
|
|
1165
|
+
"additionalProperties": false,
|
|
1166
|
+
"required": [
|
|
1167
|
+
"fingerprint",
|
|
1168
|
+
"setAt"
|
|
1169
|
+
],
|
|
1170
|
+
"description": "That a static model's secret is set, and which one. Never its value.",
|
|
1171
|
+
"properties": {
|
|
1172
|
+
"fingerprint": {
|
|
1173
|
+
"$ref": "#/$defs/SecretFingerprint"
|
|
1174
|
+
},
|
|
1175
|
+
"setAt": {
|
|
1176
|
+
"type": "string",
|
|
1177
|
+
"format": "date-time"
|
|
1178
|
+
}
|
|
1179
|
+
}
|
|
1180
|
+
},
|
|
1181
|
+
"SecretFingerprint": {
|
|
1182
|
+
"title": "SecretFingerprint",
|
|
1183
|
+
"type": "string",
|
|
1184
|
+
"pattern": "^hmacsha256:[A-Za-z0-9_-]{22}$",
|
|
1185
|
+
"maxLength": 33,
|
|
1186
|
+
"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."
|
|
1187
|
+
},
|
|
1188
|
+
"AccountPublicMaterial": {
|
|
1189
|
+
"title": "AccountPublicMaterial",
|
|
1190
|
+
"type": "object",
|
|
1191
|
+
"additionalProperties": false,
|
|
1192
|
+
"required": [
|
|
1193
|
+
"algorithm",
|
|
1194
|
+
"keyFingerprint"
|
|
1195
|
+
],
|
|
1196
|
+
"description": "The public half of the account's key, as the provider needs it. Never a private key.",
|
|
1197
|
+
"properties": {
|
|
1198
|
+
"algorithm": {
|
|
1199
|
+
"type": "string",
|
|
1200
|
+
"enum": [
|
|
1201
|
+
"ES256",
|
|
1202
|
+
"RS256",
|
|
1203
|
+
"Secp256r1"
|
|
1204
|
+
]
|
|
1205
|
+
},
|
|
1206
|
+
"keyFingerprint": {
|
|
1207
|
+
"$ref": "#/$defs/DigestMultibase",
|
|
1208
|
+
"description": "Digest of the public key's SubjectPublicKeyInfo DER."
|
|
1209
|
+
},
|
|
1210
|
+
"publicKeyJwk": {
|
|
1211
|
+
"type": "object",
|
|
1212
|
+
"additionalProperties": false,
|
|
1213
|
+
"required": [
|
|
1214
|
+
"kty",
|
|
1215
|
+
"kid"
|
|
1216
|
+
],
|
|
1217
|
+
"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.",
|
|
1218
|
+
"properties": {
|
|
1219
|
+
"kty": {
|
|
1220
|
+
"type": "string",
|
|
1221
|
+
"enum": [
|
|
1222
|
+
"EC",
|
|
1223
|
+
"RSA"
|
|
1224
|
+
]
|
|
1225
|
+
},
|
|
1226
|
+
"crv": {
|
|
1227
|
+
"type": "string",
|
|
1228
|
+
"enum": [
|
|
1229
|
+
"P-256"
|
|
1230
|
+
]
|
|
1231
|
+
},
|
|
1232
|
+
"x": {
|
|
1233
|
+
"type": "string",
|
|
1234
|
+
"maxLength": 1024,
|
|
1235
|
+
"pattern": "^[A-Za-z0-9_-]+$"
|
|
1236
|
+
},
|
|
1237
|
+
"y": {
|
|
1238
|
+
"type": "string",
|
|
1239
|
+
"maxLength": 1024,
|
|
1240
|
+
"pattern": "^[A-Za-z0-9_-]+$"
|
|
1241
|
+
},
|
|
1242
|
+
"n": {
|
|
1243
|
+
"type": "string",
|
|
1244
|
+
"maxLength": 1024,
|
|
1245
|
+
"pattern": "^[A-Za-z0-9_-]+$"
|
|
1246
|
+
},
|
|
1247
|
+
"e": {
|
|
1248
|
+
"type": "string",
|
|
1249
|
+
"maxLength": 16,
|
|
1250
|
+
"pattern": "^[A-Za-z0-9_-]+$"
|
|
1251
|
+
},
|
|
1252
|
+
"kid": {
|
|
1253
|
+
"type": "string",
|
|
1254
|
+
"maxLength": 128,
|
|
1255
|
+
"pattern": "^[!-~]+$"
|
|
1256
|
+
},
|
|
1257
|
+
"alg": {
|
|
1258
|
+
"type": "string",
|
|
1259
|
+
"enum": [
|
|
1260
|
+
"ES256",
|
|
1261
|
+
"RS256"
|
|
1262
|
+
]
|
|
1263
|
+
},
|
|
1264
|
+
"use": {
|
|
1265
|
+
"type": "string",
|
|
1266
|
+
"const": "sig"
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1269
|
+
},
|
|
1270
|
+
"certificatePem": {
|
|
1271
|
+
"type": "string",
|
|
1272
|
+
"maxLength": 16384,
|
|
1273
|
+
"pattern": "^-----BEGIN CERTIFICATE-----[A-Za-z0-9+/=\\r\\n]+-----END CERTIFICATE-----\\s*$",
|
|
1274
|
+
"description": "`aws-roles-anywhere`: the trust anchor's CA certificate. `azure-cert`: the certificate uploaded to the app registration."
|
|
1275
|
+
},
|
|
1276
|
+
"address": {
|
|
1277
|
+
"type": "string",
|
|
1278
|
+
"pattern": "^0x[0-9a-f]{64}$",
|
|
1279
|
+
"description": "`sui-signer`: the Sui address the key controls."
|
|
1280
|
+
},
|
|
1281
|
+
"pendingKeyFingerprint": {
|
|
1282
|
+
"$ref": "#/$defs/DigestMultibase",
|
|
1283
|
+
"description": "During a rotation (external/accounts/keys/rotate), the staged successor key, until it is confirmed and the current key retires."
|
|
1284
|
+
}
|
|
1285
|
+
}
|
|
1286
|
+
},
|
|
1287
|
+
"DigestMultibase": {
|
|
1288
|
+
"title": "DigestMultibase",
|
|
1289
|
+
"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`.",
|
|
1290
|
+
"type": "string",
|
|
1291
|
+
"minLength": 16,
|
|
1292
|
+
"pattern": "^(z[1-9A-HJ-NP-Za-km-z]+|u[A-Za-z0-9_-]+)$",
|
|
1293
|
+
"examples": [
|
|
1294
|
+
"zQmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR"
|
|
1295
|
+
]
|
|
1296
|
+
},
|
|
1297
|
+
"AccountState": {
|
|
1298
|
+
"title": "AccountState",
|
|
1299
|
+
"type": "string",
|
|
1300
|
+
"enum": [
|
|
1301
|
+
"active",
|
|
1302
|
+
"suspended",
|
|
1303
|
+
"archived"
|
|
1304
|
+
],
|
|
1305
|
+
"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."
|
|
1306
|
+
},
|
|
1307
|
+
"AccountSettings": {
|
|
1308
|
+
"title": "AccountSettings",
|
|
1309
|
+
"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.",
|
|
1310
|
+
"oneOf": [
|
|
1311
|
+
{
|
|
1312
|
+
"type": "object",
|
|
1313
|
+
"additionalProperties": false,
|
|
1314
|
+
"required": [
|
|
1315
|
+
"model",
|
|
1316
|
+
"region",
|
|
1317
|
+
"profileArn",
|
|
1318
|
+
"roleArn",
|
|
1319
|
+
"trustAnchorArn"
|
|
1320
|
+
],
|
|
1321
|
+
"description": "Egress: `rolesanywhere.<region>.amazonaws.com`, plus `sts.<region>.amazonaws.com` when `chainedRoleArn` is set.",
|
|
1322
|
+
"properties": {
|
|
1323
|
+
"model": {
|
|
1324
|
+
"type": "string",
|
|
1325
|
+
"const": "aws-roles-anywhere"
|
|
1326
|
+
},
|
|
1327
|
+
"region": {
|
|
1328
|
+
"$ref": "#/$defs/AwsRegion"
|
|
1329
|
+
},
|
|
1330
|
+
"trustAnchorArn": {
|
|
1331
|
+
"$ref": "#/$defs/AwsArn",
|
|
1332
|
+
"description": "The trust anchor holding the custodian's CA certificate. Recorded after the administrator creates it from external/accounts/setup."
|
|
1333
|
+
},
|
|
1334
|
+
"profileArn": {
|
|
1335
|
+
"$ref": "#/$defs/AwsArn"
|
|
1336
|
+
},
|
|
1337
|
+
"roleArn": {
|
|
1338
|
+
"$ref": "#/$defs/AwsArn"
|
|
1339
|
+
},
|
|
1340
|
+
"chainedRoleArn": {
|
|
1341
|
+
"$ref": "#/$defs/AwsArn",
|
|
1342
|
+
"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."
|
|
1343
|
+
},
|
|
1344
|
+
"bucket": {
|
|
1345
|
+
"$ref": "#/$defs/ProviderBucketName",
|
|
1346
|
+
"description": "The S3 bucket issuances are scoped within. Required for an account whose bindings issue storage scopes."
|
|
1347
|
+
},
|
|
1348
|
+
"probePrefix": {
|
|
1349
|
+
"$ref": "#/$defs/ProviderObjectPrefix",
|
|
1350
|
+
"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`."
|
|
1351
|
+
}
|
|
1352
|
+
}
|
|
1353
|
+
},
|
|
1354
|
+
{
|
|
1355
|
+
"type": "object",
|
|
1356
|
+
"additionalProperties": false,
|
|
1357
|
+
"required": [
|
|
1358
|
+
"model",
|
|
1359
|
+
"projectNumber",
|
|
1360
|
+
"poolId",
|
|
1361
|
+
"providerId"
|
|
1362
|
+
],
|
|
1363
|
+
"description": "Egress: `sts.googleapis.com`, plus `iamcredentials.googleapis.com` when `serviceAccount` is set.",
|
|
1364
|
+
"properties": {
|
|
1365
|
+
"model": {
|
|
1366
|
+
"type": "string",
|
|
1367
|
+
"const": "gcp-wif-pinned"
|
|
1368
|
+
},
|
|
1369
|
+
"projectNumber": {
|
|
1370
|
+
"type": "string",
|
|
1371
|
+
"pattern": "^[0-9]{1,20}$"
|
|
1372
|
+
},
|
|
1373
|
+
"poolId": {
|
|
1374
|
+
"type": "string",
|
|
1375
|
+
"pattern": "^[a-z0-9-]{4,32}$"
|
|
1376
|
+
},
|
|
1377
|
+
"providerId": {
|
|
1378
|
+
"type": "string",
|
|
1379
|
+
"pattern": "^[a-z0-9-]{4,32}$"
|
|
1380
|
+
},
|
|
1381
|
+
"serviceAccount": {
|
|
1382
|
+
"type": "string",
|
|
1383
|
+
"maxLength": 254,
|
|
1384
|
+
"pattern": "^[a-z0-9-]+@[a-z0-9-]+\\.iam\\.gserviceaccount\\.com$",
|
|
1385
|
+
"description": "When set, the federated token is exchanged for this service account's access token."
|
|
1386
|
+
},
|
|
1387
|
+
"signingAlgorithm": {
|
|
1388
|
+
"type": "string",
|
|
1389
|
+
"enum": [
|
|
1390
|
+
"ES256",
|
|
1391
|
+
"RS256"
|
|
1392
|
+
],
|
|
1393
|
+
"description": "The ID-token algorithm. ES256 unless the provider refuses it. Absent means ES256."
|
|
1394
|
+
},
|
|
1395
|
+
"bucket": {
|
|
1396
|
+
"$ref": "#/$defs/ProviderBucketName",
|
|
1397
|
+
"description": "The GCS bucket issuances are scoped within, by a Credential Access Boundary."
|
|
1398
|
+
},
|
|
1399
|
+
"probePrefix": {
|
|
1400
|
+
"$ref": "#/$defs/ProviderObjectPrefix",
|
|
1401
|
+
"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`."
|
|
1402
|
+
}
|
|
1403
|
+
}
|
|
1404
|
+
},
|
|
1405
|
+
{
|
|
1406
|
+
"type": "object",
|
|
1407
|
+
"additionalProperties": false,
|
|
1408
|
+
"required": [
|
|
1409
|
+
"model",
|
|
1410
|
+
"tenantId",
|
|
1411
|
+
"clientId",
|
|
1412
|
+
"tokenScope"
|
|
1413
|
+
],
|
|
1414
|
+
"description": "Egress: `login.microsoftonline.com`, or the sovereign-cloud authority named in `authorityHost`.",
|
|
1415
|
+
"properties": {
|
|
1416
|
+
"model": {
|
|
1417
|
+
"type": "string",
|
|
1418
|
+
"const": "azure-cert"
|
|
1419
|
+
},
|
|
1420
|
+
"tenantId": {
|
|
1421
|
+
"type": "string",
|
|
1422
|
+
"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}$"
|
|
1423
|
+
},
|
|
1424
|
+
"clientId": {
|
|
1425
|
+
"type": "string",
|
|
1426
|
+
"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}$"
|
|
1427
|
+
},
|
|
1428
|
+
"tokenScope": {
|
|
1429
|
+
"type": "string",
|
|
1430
|
+
"maxLength": 512,
|
|
1431
|
+
"pattern": "^[A-Za-z0-9:/._-]+$",
|
|
1432
|
+
"description": "The `scope` requested at the token endpoint, such as `https://storage.azure.com/.default`."
|
|
1433
|
+
},
|
|
1434
|
+
"authorityHost": {
|
|
1435
|
+
"type": "string",
|
|
1436
|
+
"maxLength": 253,
|
|
1437
|
+
"pattern": "^[a-z0-9.-]+$",
|
|
1438
|
+
"description": "Absent means `login.microsoftonline.com`."
|
|
1439
|
+
}
|
|
1440
|
+
}
|
|
1441
|
+
},
|
|
1442
|
+
{
|
|
1443
|
+
"type": "object",
|
|
1444
|
+
"additionalProperties": false,
|
|
1445
|
+
"required": [
|
|
1446
|
+
"model",
|
|
1447
|
+
"tokenEndpoint",
|
|
1448
|
+
"clientId"
|
|
1449
|
+
],
|
|
1450
|
+
"description": "Egress: the host of `tokenEndpoint`, and nothing else.",
|
|
1451
|
+
"properties": {
|
|
1452
|
+
"model": {
|
|
1453
|
+
"type": "string",
|
|
1454
|
+
"const": "oauth2-private-key-jwt"
|
|
1455
|
+
},
|
|
1456
|
+
"tokenEndpoint": {
|
|
1457
|
+
"$ref": "#/$defs/ProviderHttpsUrl"
|
|
1458
|
+
},
|
|
1459
|
+
"clientId": {
|
|
1460
|
+
"type": "string",
|
|
1461
|
+
"minLength": 1,
|
|
1462
|
+
"maxLength": 512,
|
|
1463
|
+
"pattern": "^[!-~]+$"
|
|
1464
|
+
},
|
|
1465
|
+
"audience": {
|
|
1466
|
+
"type": "string",
|
|
1467
|
+
"maxLength": 2048,
|
|
1468
|
+
"pattern": "^[!-~]+$",
|
|
1469
|
+
"description": "The assertion's `aud`. Absent means `tokenEndpoint`."
|
|
1470
|
+
},
|
|
1471
|
+
"scopes": {
|
|
1472
|
+
"type": "array",
|
|
1473
|
+
"maxItems": 64,
|
|
1474
|
+
"uniqueItems": true,
|
|
1475
|
+
"items": {
|
|
1476
|
+
"type": "string",
|
|
1477
|
+
"maxLength": 256,
|
|
1478
|
+
"pattern": "^[!#-\\[\\]-~]+$"
|
|
1479
|
+
},
|
|
1480
|
+
"description": "The scopes a binding may request, the ceiling for every issuance."
|
|
1481
|
+
},
|
|
1482
|
+
"signingAlgorithm": {
|
|
1483
|
+
"type": "string",
|
|
1484
|
+
"enum": [
|
|
1485
|
+
"ES256",
|
|
1486
|
+
"RS256"
|
|
1487
|
+
]
|
|
1488
|
+
}
|
|
1489
|
+
}
|
|
1490
|
+
},
|
|
1491
|
+
{
|
|
1492
|
+
"type": "object",
|
|
1493
|
+
"additionalProperties": false,
|
|
1494
|
+
"required": [
|
|
1495
|
+
"model",
|
|
1496
|
+
"endpoint",
|
|
1497
|
+
"region",
|
|
1498
|
+
"bucket",
|
|
1499
|
+
"accessKeyId"
|
|
1500
|
+
],
|
|
1501
|
+
"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.",
|
|
1502
|
+
"properties": {
|
|
1503
|
+
"model": {
|
|
1504
|
+
"type": "string",
|
|
1505
|
+
"const": "s3-static-presign"
|
|
1506
|
+
},
|
|
1507
|
+
"endpoint": {
|
|
1508
|
+
"$ref": "#/$defs/ProviderHttpsUrl"
|
|
1509
|
+
},
|
|
1510
|
+
"region": {
|
|
1511
|
+
"type": "string",
|
|
1512
|
+
"maxLength": 64,
|
|
1513
|
+
"pattern": "^[a-z0-9-]+$",
|
|
1514
|
+
"description": "The SigV4 signing region; `auto` for Cloudflare R2."
|
|
1515
|
+
},
|
|
1516
|
+
"bucket": {
|
|
1517
|
+
"$ref": "#/$defs/ProviderBucketName"
|
|
1518
|
+
},
|
|
1519
|
+
"pathStyle": {
|
|
1520
|
+
"type": "boolean",
|
|
1521
|
+
"description": "Address the bucket in the path rather than the host name, as MinIO usually needs."
|
|
1522
|
+
},
|
|
1523
|
+
"accessKeyId": {
|
|
1524
|
+
"type": "string",
|
|
1525
|
+
"maxLength": 128,
|
|
1526
|
+
"pattern": "^[A-Za-z0-9]+$",
|
|
1527
|
+
"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."
|
|
1528
|
+
},
|
|
1529
|
+
"probePrefix": {
|
|
1530
|
+
"$ref": "#/$defs/ProviderObjectPrefix",
|
|
1531
|
+
"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`."
|
|
1532
|
+
}
|
|
1533
|
+
}
|
|
1534
|
+
},
|
|
1535
|
+
{
|
|
1536
|
+
"type": "object",
|
|
1537
|
+
"additionalProperties": false,
|
|
1538
|
+
"required": [
|
|
1539
|
+
"model",
|
|
1540
|
+
"network",
|
|
1541
|
+
"allowedCalls",
|
|
1542
|
+
"maxGasBudgetMist",
|
|
1543
|
+
"maxGasPerDayMist"
|
|
1544
|
+
],
|
|
1545
|
+
"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.",
|
|
1546
|
+
"properties": {
|
|
1547
|
+
"model": {
|
|
1548
|
+
"type": "string",
|
|
1549
|
+
"const": "sui-signer"
|
|
1550
|
+
},
|
|
1551
|
+
"network": {
|
|
1552
|
+
"type": "string",
|
|
1553
|
+
"enum": [
|
|
1554
|
+
"mainnet",
|
|
1555
|
+
"testnet",
|
|
1556
|
+
"devnet"
|
|
1557
|
+
]
|
|
1558
|
+
},
|
|
1559
|
+
"allowedCalls": {
|
|
1560
|
+
"type": "array",
|
|
1561
|
+
"minItems": 1,
|
|
1562
|
+
"maxItems": 32,
|
|
1563
|
+
"items": {
|
|
1564
|
+
"$ref": "#/$defs/SuiMoveCall"
|
|
1565
|
+
},
|
|
1566
|
+
"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."
|
|
1567
|
+
},
|
|
1568
|
+
"allowedObjects": {
|
|
1569
|
+
"type": "array",
|
|
1570
|
+
"maxItems": 32,
|
|
1571
|
+
"items": {
|
|
1572
|
+
"type": "string",
|
|
1573
|
+
"pattern": "^0x[0-9a-f]{64}$"
|
|
1574
|
+
},
|
|
1575
|
+
"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."
|
|
1576
|
+
},
|
|
1577
|
+
"maxGasBudgetMist": {
|
|
1578
|
+
"type": "integer",
|
|
1579
|
+
"minimum": 1,
|
|
1580
|
+
"description": "The largest gas budget one transaction may declare."
|
|
1581
|
+
},
|
|
1582
|
+
"maxGasPerDayMist": {
|
|
1583
|
+
"type": "integer",
|
|
1584
|
+
"minimum": 1,
|
|
1585
|
+
"description": "The total gas budget signed per rolling 24 hours."
|
|
1586
|
+
},
|
|
1587
|
+
"maxCoinOutPerTx": {
|
|
1588
|
+
"type": "array",
|
|
1589
|
+
"maxItems": 8,
|
|
1590
|
+
"items": {
|
|
1591
|
+
"type": "object",
|
|
1592
|
+
"additionalProperties": false,
|
|
1593
|
+
"required": [
|
|
1594
|
+
"coinType",
|
|
1595
|
+
"amount"
|
|
1596
|
+
],
|
|
1597
|
+
"properties": {
|
|
1598
|
+
"coinType": {
|
|
1599
|
+
"type": "string",
|
|
1600
|
+
"maxLength": 512,
|
|
1601
|
+
"pattern": "^0x[0-9a-f]{1,64}::[A-Za-z0-9_]+::[A-Za-z0-9_]+$"
|
|
1602
|
+
},
|
|
1603
|
+
"amount": {
|
|
1604
|
+
"type": "integer",
|
|
1605
|
+
"minimum": 0
|
|
1606
|
+
}
|
|
1607
|
+
}
|
|
1608
|
+
},
|
|
1609
|
+
"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."
|
|
1610
|
+
}
|
|
1611
|
+
}
|
|
1612
|
+
},
|
|
1613
|
+
{
|
|
1614
|
+
"type": "object",
|
|
1615
|
+
"additionalProperties": false,
|
|
1616
|
+
"required": [
|
|
1617
|
+
"model",
|
|
1618
|
+
"driver",
|
|
1619
|
+
"baseUrl"
|
|
1620
|
+
],
|
|
1621
|
+
"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.",
|
|
1622
|
+
"properties": {
|
|
1623
|
+
"model": {
|
|
1624
|
+
"type": "string",
|
|
1625
|
+
"const": "static-secret"
|
|
1626
|
+
},
|
|
1627
|
+
"driver": {
|
|
1628
|
+
"type": "string",
|
|
1629
|
+
"maxLength": 64,
|
|
1630
|
+
"pattern": "^[a-z0-9][a-z0-9-]*$",
|
|
1631
|
+
"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."
|
|
1632
|
+
},
|
|
1633
|
+
"baseUrl": {
|
|
1634
|
+
"$ref": "#/$defs/ProviderHttpsUrl"
|
|
1635
|
+
}
|
|
1636
|
+
}
|
|
1637
|
+
}
|
|
1638
|
+
]
|
|
1639
|
+
},
|
|
1640
|
+
"ProviderHttpsUrl": {
|
|
1641
|
+
"title": "ProviderHttpsUrl",
|
|
1642
|
+
"type": "string",
|
|
1643
|
+
"format": "uri",
|
|
1644
|
+
"maxLength": 2048,
|
|
1645
|
+
"pattern": "^https://[^\\s\"'\\\\]+$"
|
|
1646
|
+
},
|
|
1647
|
+
"SuiMoveCall": {
|
|
1648
|
+
"title": "SuiMoveCall",
|
|
1649
|
+
"type": "object",
|
|
1650
|
+
"additionalProperties": false,
|
|
1651
|
+
"required": [
|
|
1652
|
+
"package",
|
|
1653
|
+
"module",
|
|
1654
|
+
"function"
|
|
1655
|
+
],
|
|
1656
|
+
"description": "One Move function an account's transactions may call.",
|
|
1657
|
+
"properties": {
|
|
1658
|
+
"package": {
|
|
1659
|
+
"type": "string",
|
|
1660
|
+
"pattern": "^0x[0-9a-f]{64}$"
|
|
1661
|
+
},
|
|
1662
|
+
"module": {
|
|
1663
|
+
"type": "string",
|
|
1664
|
+
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,127}$"
|
|
1665
|
+
},
|
|
1666
|
+
"function": {
|
|
1667
|
+
"type": "string",
|
|
1668
|
+
"pattern": "^[A-Za-z][A-Za-z0-9_]{0,127}$"
|
|
1669
|
+
}
|
|
1670
|
+
}
|
|
1671
|
+
},
|
|
1672
|
+
"ProviderBucketName": {
|
|
1673
|
+
"title": "ProviderBucketName",
|
|
1674
|
+
"type": "string",
|
|
1675
|
+
"minLength": 3,
|
|
1676
|
+
"maxLength": 63,
|
|
1677
|
+
"pattern": "^[a-z0-9][a-z0-9.-]*[a-z0-9]$",
|
|
1678
|
+
"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."
|
|
1679
|
+
},
|
|
1680
|
+
"AwsArn": {
|
|
1681
|
+
"title": "AwsArn",
|
|
1682
|
+
"type": "string",
|
|
1683
|
+
"maxLength": 2048,
|
|
1684
|
+
"pattern": "^arn:aws[a-z-]*:[a-z0-9-]+:[a-z0-9-]*:[0-9]{0,12}:[A-Za-z0-9+=,.@_/:-]+$"
|
|
1685
|
+
},
|
|
1686
|
+
"AwsRegion": {
|
|
1687
|
+
"title": "AwsRegion",
|
|
1688
|
+
"type": "string",
|
|
1689
|
+
"pattern": "^[a-z]{2}(-gov)?-[a-z]+-[0-9]$",
|
|
1690
|
+
"maxLength": 32
|
|
1691
|
+
},
|
|
1692
|
+
"AccountContextId": {
|
|
1693
|
+
"title": "AccountContextId",
|
|
1694
|
+
"type": "string",
|
|
1695
|
+
"minLength": 1,
|
|
1696
|
+
"maxLength": 256,
|
|
1697
|
+
"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."
|
|
1698
|
+
},
|
|
1699
|
+
"AccountId": {
|
|
1700
|
+
"title": "AccountId",
|
|
1701
|
+
"type": "string",
|
|
1702
|
+
"minLength": 1,
|
|
1703
|
+
"maxLength": 64,
|
|
1704
|
+
"pattern": "^[a-z0-9][a-z0-9-]*$",
|
|
1705
|
+
"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."
|
|
1706
|
+
}
|
|
1707
|
+
}
|
|
1708
|
+
};
|
|
1709
|
+
/**
|
|
1710
|
+
* SPEC.md §7.2 policy for the request variant, from this specification's
|
|
1711
|
+
* front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
|
|
1712
|
+
* per-specification and cannot be derived from the document alone, and
|
|
1713
|
+
* item 2 needs the schema this carries.
|
|
1714
|
+
*/
|
|
1715
|
+
export const SPEC = {
|
|
1716
|
+
typeUri: TYPE_URI,
|
|
1717
|
+
isBearer: false,
|
|
1718
|
+
isProofRequired: true,
|
|
1719
|
+
isRecipientRequired: true,
|
|
1720
|
+
isIssuedAtRequired: true,
|
|
1721
|
+
payloadSchema: PAYLOAD_SCHEMA,
|
|
1722
|
+
};
|
|
1723
|
+
/**
|
|
1724
|
+
* SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
|
|
1725
|
+
* tracks the *issuer* party's requirement because a response swaps the
|
|
1726
|
+
* parties (§7.3 item 5).
|
|
1727
|
+
*/
|
|
1728
|
+
export const RESPONSE_SPEC = {
|
|
1729
|
+
typeUri: RESPONSE_TYPE_URI,
|
|
1730
|
+
isBearer: false,
|
|
1731
|
+
isProofRequired: true,
|
|
1732
|
+
isRecipientRequired: true,
|
|
1733
|
+
isIssuedAtRequired: true,
|
|
1734
|
+
payloadSchema: RESPONSE_PAYLOAD_SCHEMA,
|
|
1735
|
+
};
|
|
1736
|
+
//# sourceMappingURL=payload.js.map
|