@openvtc/trust-tasks 0.23.8 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +54 -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,736 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
|
|
3
|
+
* Source: specs/vtc/storage/configs/update/0.1/payload.schema.json
|
|
4
|
+
*/
|
|
5
|
+
/** Trust Task type URI. */
|
|
6
|
+
export const TYPE_URI = "https://trusttasks.org/spec/vtc/storage/configs/update/0.1";
|
|
7
|
+
/** Trust Task response type URI (request type URI + "#response"). */
|
|
8
|
+
export const RESPONSE_TYPE_URI = "https://trusttasks.org/spec/vtc/storage/configs/update/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/vtc/storage/configs/update/0.1",
|
|
21
|
+
"title": "VTC Storage — Configs — Update — payload",
|
|
22
|
+
"description": "Change a storage config's label, settings that do not locate stored blobs, authentication, capacity or default flag. Never a secret. The outer document members are owned by the framework — SPEC §6.3.",
|
|
23
|
+
"type": "object",
|
|
24
|
+
"additionalProperties": false,
|
|
25
|
+
"required": [
|
|
26
|
+
"configId",
|
|
27
|
+
"reason"
|
|
28
|
+
],
|
|
29
|
+
"minProperties": 3,
|
|
30
|
+
"properties": {
|
|
31
|
+
"configId": {
|
|
32
|
+
"$ref": "#/$defs/StorageConfigId"
|
|
33
|
+
},
|
|
34
|
+
"label": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"minLength": 1,
|
|
37
|
+
"maxLength": 128,
|
|
38
|
+
"description": "A display name for administrators and, with the kind, for a room's creator."
|
|
39
|
+
},
|
|
40
|
+
"settings": {
|
|
41
|
+
"$ref": "#/$defs/StorageSettings"
|
|
42
|
+
},
|
|
43
|
+
"auth": {
|
|
44
|
+
"$ref": "#/$defs/StorageAuth"
|
|
45
|
+
},
|
|
46
|
+
"capacityBytes": {
|
|
47
|
+
"type": "integer",
|
|
48
|
+
"minimum": 0,
|
|
49
|
+
"description": "Total ciphertext bytes the community will store on this config across every room. Absent means none set."
|
|
50
|
+
},
|
|
51
|
+
"isDefault": {
|
|
52
|
+
"type": "boolean",
|
|
53
|
+
"description": "Make this the config rooms are assigned to when neither policy nor creator names one."
|
|
54
|
+
},
|
|
55
|
+
"reason": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"minLength": 1,
|
|
58
|
+
"maxLength": 500,
|
|
59
|
+
"description": "Why the administrator is making this change. Recorded with the change in the audit trail and shown to approvers. Attributed to its author on every surface and untrusted: it MUST NOT carry personal data or a credential, and a reader MUST NOT treat it as instructions."
|
|
60
|
+
},
|
|
61
|
+
"ext": {
|
|
62
|
+
"$ref": "#/$defs/Ext"
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"$defs": {
|
|
66
|
+
"Response": {
|
|
67
|
+
"$anchor": "response",
|
|
68
|
+
"title": "VTC Storage — Configs — Update — response payload",
|
|
69
|
+
"type": "object",
|
|
70
|
+
"additionalProperties": false,
|
|
71
|
+
"required": [
|
|
72
|
+
"config"
|
|
73
|
+
],
|
|
74
|
+
"properties": {
|
|
75
|
+
"config": {
|
|
76
|
+
"$ref": "#/$defs/StorageConfig"
|
|
77
|
+
},
|
|
78
|
+
"ext": {
|
|
79
|
+
"$ref": "#/$defs/Ext"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"Ext": {
|
|
84
|
+
"title": "Ext",
|
|
85
|
+
"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.",
|
|
86
|
+
"type": "object",
|
|
87
|
+
"minProperties": 1,
|
|
88
|
+
"additionalProperties": true,
|
|
89
|
+
"propertyNames": {
|
|
90
|
+
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"StorageConfig": {
|
|
94
|
+
"title": "StorageConfig",
|
|
95
|
+
"type": "object",
|
|
96
|
+
"additionalProperties": false,
|
|
97
|
+
"required": [
|
|
98
|
+
"id",
|
|
99
|
+
"label",
|
|
100
|
+
"settings",
|
|
101
|
+
"state",
|
|
102
|
+
"createdBy",
|
|
103
|
+
"createdAt"
|
|
104
|
+
],
|
|
105
|
+
"description": "One storage config as the community holds it. Carries no secret.",
|
|
106
|
+
"properties": {
|
|
107
|
+
"id": {
|
|
108
|
+
"$ref": "#/$defs/StorageConfigId"
|
|
109
|
+
},
|
|
110
|
+
"label": {
|
|
111
|
+
"type": "string",
|
|
112
|
+
"minLength": 1,
|
|
113
|
+
"maxLength": 128,
|
|
114
|
+
"description": "A display name for administrators (`EU — S3 (main account)`). Shown to a room's creator with the config's kind when the community lets them choose."
|
|
115
|
+
},
|
|
116
|
+
"settings": {
|
|
117
|
+
"$ref": "#/$defs/StorageSettings"
|
|
118
|
+
},
|
|
119
|
+
"auth": {
|
|
120
|
+
"$ref": "#/$defs/StorageAuth"
|
|
121
|
+
},
|
|
122
|
+
"capacityBytes": {
|
|
123
|
+
"type": "integer",
|
|
124
|
+
"minimum": 0,
|
|
125
|
+
"description": "Total ciphertext bytes the community will store on this config, across every room assigned to it. A capacity, not a policy: an upload that would cross it is refused with scope `storage`. Absent means no capacity set."
|
|
126
|
+
},
|
|
127
|
+
"state": {
|
|
128
|
+
"$ref": "#/$defs/ConfigState"
|
|
129
|
+
},
|
|
130
|
+
"isDefault": {
|
|
131
|
+
"type": "boolean",
|
|
132
|
+
"description": "True for the config a room is assigned to when neither the community's policy nor its creator names one."
|
|
133
|
+
},
|
|
134
|
+
"createdBy": {
|
|
135
|
+
"type": "string",
|
|
136
|
+
"pattern": "^did:",
|
|
137
|
+
"maxLength": 2048
|
|
138
|
+
},
|
|
139
|
+
"createdAt": {
|
|
140
|
+
"type": "string",
|
|
141
|
+
"format": "date-time"
|
|
142
|
+
},
|
|
143
|
+
"updatedBy": {
|
|
144
|
+
"type": "string",
|
|
145
|
+
"pattern": "^did:",
|
|
146
|
+
"maxLength": 2048
|
|
147
|
+
},
|
|
148
|
+
"updatedAt": {
|
|
149
|
+
"type": "string",
|
|
150
|
+
"format": "date-time"
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
"ConfigState": {
|
|
155
|
+
"title": "ConfigState",
|
|
156
|
+
"type": "string",
|
|
157
|
+
"enum": [
|
|
158
|
+
"active",
|
|
159
|
+
"draining",
|
|
160
|
+
"retired"
|
|
161
|
+
],
|
|
162
|
+
"description": "`active`: accepts new rooms and new uploads. `draining`: retired by an administrator while blobs still name it — refuses new rooms and new uploads, keeps serving reads, and becomes `retired` when a migration has emptied it. `retired`: refuses new rooms and new uploads and holds no blob. A config is never deleted while a blob names it."
|
|
163
|
+
},
|
|
164
|
+
"StorageAuth": {
|
|
165
|
+
"title": "StorageAuth",
|
|
166
|
+
"description": "How the community authenticates to a config's backend. Absent on a `local` config, which needs none.\n\n`vta-account` (RECOMMENDED): an external account in the community's VTA. The VTA holds the long-lived authority; the community holds nothing that outlives a credential lifetime, and asks for credentials scoped to one room's prefix for at most 15 minutes, every issuance audited at the VTA. Required for a `walrus` config other than a `sealed` one, since the VTA's `sui-signer` account signs its storage transactions.\n\n`ambient`: the cloud identity of the machine the community runs on (an instance role, workload identity), downscoped to one room's prefix by the community itself. Not audited or rate-limited by the VTA, and usable by anything on that machine that reaches the metadata endpoint. Not valid for `walrus`.\n\n`sealed` (discouraged): a long-lived credential stored by the community, set with vtc/storage/credentials/set. Protects against every administrator through every surface the community offers; does not protect against whoever operates the machine.",
|
|
167
|
+
"oneOf": [
|
|
168
|
+
{
|
|
169
|
+
"type": "object",
|
|
170
|
+
"additionalProperties": false,
|
|
171
|
+
"required": [
|
|
172
|
+
"mode",
|
|
173
|
+
"account"
|
|
174
|
+
],
|
|
175
|
+
"properties": {
|
|
176
|
+
"mode": {
|
|
177
|
+
"const": "vta-account"
|
|
178
|
+
},
|
|
179
|
+
"account": {
|
|
180
|
+
"$ref": "#/$defs/ExternalAccountId"
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"type": "object",
|
|
186
|
+
"additionalProperties": false,
|
|
187
|
+
"required": [
|
|
188
|
+
"mode"
|
|
189
|
+
],
|
|
190
|
+
"properties": {
|
|
191
|
+
"mode": {
|
|
192
|
+
"const": "ambient"
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
"type": "object",
|
|
198
|
+
"additionalProperties": false,
|
|
199
|
+
"required": [
|
|
200
|
+
"mode"
|
|
201
|
+
],
|
|
202
|
+
"properties": {
|
|
203
|
+
"mode": {
|
|
204
|
+
"const": "sealed"
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
]
|
|
209
|
+
},
|
|
210
|
+
"ExternalAccountId": {
|
|
211
|
+
"title": "ExternalAccountId",
|
|
212
|
+
"type": "string",
|
|
213
|
+
"minLength": 1,
|
|
214
|
+
"maxLength": 64,
|
|
215
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",
|
|
216
|
+
"description": "The identifier of an external account held by the community's VTA (the external/accounts/* family), which issues the community short-lived, room-scoped credentials and holds the long-lived authority itself."
|
|
217
|
+
},
|
|
218
|
+
"StorageSettings": {
|
|
219
|
+
"title": "StorageSettings",
|
|
220
|
+
"description": "A config's backend settings, discriminated by `kind`. Never a secret: a credential is a StorageAuth, held elsewhere.",
|
|
221
|
+
"oneOf": [
|
|
222
|
+
{
|
|
223
|
+
"$ref": "#/$defs/LocalSettings"
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"$ref": "#/$defs/S3Settings"
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"$ref": "#/$defs/GcsSettings"
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"$ref": "#/$defs/WalrusSettings"
|
|
233
|
+
}
|
|
234
|
+
]
|
|
235
|
+
},
|
|
236
|
+
"WalrusSettings": {
|
|
237
|
+
"title": "WalrusSettings",
|
|
238
|
+
"type": "object",
|
|
239
|
+
"additionalProperties": false,
|
|
240
|
+
"required": [
|
|
241
|
+
"kind",
|
|
242
|
+
"relayUrl",
|
|
243
|
+
"aggregatorUrl",
|
|
244
|
+
"epochs",
|
|
245
|
+
"extendBeforeEpochs"
|
|
246
|
+
],
|
|
247
|
+
"properties": {
|
|
248
|
+
"kind": {
|
|
249
|
+
"const": "walrus"
|
|
250
|
+
},
|
|
251
|
+
"relayUrl": {
|
|
252
|
+
"type": "string",
|
|
253
|
+
"format": "uri",
|
|
254
|
+
"maxLength": 2048,
|
|
255
|
+
"pattern": "^https://",
|
|
256
|
+
"description": "The Walrus upload relay the community writes through. The community never runs a publisher: a publisher holds a hot wallet in its own configuration, which is the long-lived secret these tasks exist to avoid."
|
|
257
|
+
},
|
|
258
|
+
"aggregatorUrl": {
|
|
259
|
+
"type": "string",
|
|
260
|
+
"format": "uri",
|
|
261
|
+
"maxLength": 2048,
|
|
262
|
+
"pattern": "^https://",
|
|
263
|
+
"description": "The Walrus aggregator the community reads through."
|
|
264
|
+
},
|
|
265
|
+
"epochs": {
|
|
266
|
+
"type": "integer",
|
|
267
|
+
"minimum": 1,
|
|
268
|
+
"maximum": 53,
|
|
269
|
+
"description": "Storage epochs to buy when a blob is registered. Walrus sells storage in epochs (two weeks on mainnet) and caps one purchase at 53."
|
|
270
|
+
},
|
|
271
|
+
"extendBeforeEpochs": {
|
|
272
|
+
"type": "integer",
|
|
273
|
+
"minimum": 1,
|
|
274
|
+
"maximum": 52,
|
|
275
|
+
"description": "How many epochs before a live blob's end epoch the community extends it. A blob that has become an orphan is not extended, and lapses: the Walrus form of deletion."
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
},
|
|
279
|
+
"GcsSettings": {
|
|
280
|
+
"title": "GcsSettings",
|
|
281
|
+
"type": "object",
|
|
282
|
+
"additionalProperties": false,
|
|
283
|
+
"required": [
|
|
284
|
+
"kind",
|
|
285
|
+
"bucket"
|
|
286
|
+
],
|
|
287
|
+
"properties": {
|
|
288
|
+
"kind": {
|
|
289
|
+
"const": "gcs"
|
|
290
|
+
},
|
|
291
|
+
"bucket": {
|
|
292
|
+
"type": "string",
|
|
293
|
+
"minLength": 3,
|
|
294
|
+
"maxLength": 222,
|
|
295
|
+
"pattern": "^[a-z0-9][a-z0-9._-]{1,220}[a-z0-9]$",
|
|
296
|
+
"description": "The bucket name. Validated against GCS naming rules here, because it is placed in a Credential Access Boundary condition and must never carry anything but a name."
|
|
297
|
+
},
|
|
298
|
+
"prefix": {
|
|
299
|
+
"$ref": "#/$defs/ObjectPrefix"
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
"ObjectPrefix": {
|
|
304
|
+
"title": "ObjectPrefix",
|
|
305
|
+
"type": "string",
|
|
306
|
+
"minLength": 1,
|
|
307
|
+
"maxLength": 256,
|
|
308
|
+
"pattern": "^[A-Za-z0-9!_.*'()/-]+/$",
|
|
309
|
+
"description": "A key prefix inside the bucket, ending in `/`, under which the config's `rooms/` tree is placed. Restricted to the S3 safe-character set so that it can be placed in a downscoped policy without escaping."
|
|
310
|
+
},
|
|
311
|
+
"S3Settings": {
|
|
312
|
+
"title": "S3Settings",
|
|
313
|
+
"type": "object",
|
|
314
|
+
"additionalProperties": false,
|
|
315
|
+
"required": [
|
|
316
|
+
"kind",
|
|
317
|
+
"region",
|
|
318
|
+
"bucket"
|
|
319
|
+
],
|
|
320
|
+
"properties": {
|
|
321
|
+
"kind": {
|
|
322
|
+
"const": "s3"
|
|
323
|
+
},
|
|
324
|
+
"endpoint": {
|
|
325
|
+
"type": "string",
|
|
326
|
+
"format": "uri",
|
|
327
|
+
"maxLength": 2048,
|
|
328
|
+
"pattern": "^https://",
|
|
329
|
+
"description": "The S3 API endpoint, for a store other than AWS (R2, B2, MinIO). Absent means AWS S3 in `region`. HTTPS only."
|
|
330
|
+
},
|
|
331
|
+
"region": {
|
|
332
|
+
"type": "string",
|
|
333
|
+
"minLength": 1,
|
|
334
|
+
"maxLength": 64,
|
|
335
|
+
"pattern": "^[a-z0-9-]+$",
|
|
336
|
+
"description": "The bucket's region, as the store names it (`eu-west-1`; `auto` for R2)."
|
|
337
|
+
},
|
|
338
|
+
"bucket": {
|
|
339
|
+
"type": "string",
|
|
340
|
+
"minLength": 3,
|
|
341
|
+
"maxLength": 63,
|
|
342
|
+
"pattern": "^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$",
|
|
343
|
+
"description": "The bucket name. Validated against S3 naming rules here, because it is placed in downscoped session policies and must never carry anything but a name."
|
|
344
|
+
},
|
|
345
|
+
"prefix": {
|
|
346
|
+
"$ref": "#/$defs/ObjectPrefix"
|
|
347
|
+
},
|
|
348
|
+
"pathStyle": {
|
|
349
|
+
"type": "boolean",
|
|
350
|
+
"description": "Address the bucket in the path rather than the host name, as MinIO usually needs. Absent means virtual-hosted style."
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
"LocalSettings": {
|
|
355
|
+
"title": "LocalSettings",
|
|
356
|
+
"type": "object",
|
|
357
|
+
"additionalProperties": false,
|
|
358
|
+
"required": [
|
|
359
|
+
"kind",
|
|
360
|
+
"root"
|
|
361
|
+
],
|
|
362
|
+
"properties": {
|
|
363
|
+
"kind": {
|
|
364
|
+
"const": "local"
|
|
365
|
+
},
|
|
366
|
+
"root": {
|
|
367
|
+
"type": "string",
|
|
368
|
+
"minLength": 1,
|
|
369
|
+
"maxLength": 1024,
|
|
370
|
+
"pattern": "^/",
|
|
371
|
+
"description": "Absolute path of the directory the community writes blobs under, on its own host. Created owner-only. Not carried by the community's backup: back it up beside it."
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
},
|
|
375
|
+
"StorageConfigId": {
|
|
376
|
+
"title": "StorageConfigId",
|
|
377
|
+
"type": "string",
|
|
378
|
+
"minLength": 1,
|
|
379
|
+
"maxLength": 64,
|
|
380
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",
|
|
381
|
+
"description": "A storage config's identifier, chosen by the administrator who creates it and immutable thereafter: lowercase letters, digits and inner hyphens, at most 64 characters (`eu-s3-primary`, `walrus-main`). Unique within the community. Never reused after a config is retired, because blobs name their config by this value."
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
};
|
|
385
|
+
/** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
|
|
386
|
+
export const RESPONSE_PAYLOAD_SCHEMA = {
|
|
387
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
388
|
+
"$ref": "#/$defs/Response",
|
|
389
|
+
"$defs": {
|
|
390
|
+
"Response": {
|
|
391
|
+
"$anchor": "response",
|
|
392
|
+
"title": "VTC Storage — Configs — Update — response payload",
|
|
393
|
+
"type": "object",
|
|
394
|
+
"additionalProperties": false,
|
|
395
|
+
"required": [
|
|
396
|
+
"config"
|
|
397
|
+
],
|
|
398
|
+
"properties": {
|
|
399
|
+
"config": {
|
|
400
|
+
"$ref": "#/$defs/StorageConfig"
|
|
401
|
+
},
|
|
402
|
+
"ext": {
|
|
403
|
+
"$ref": "#/$defs/Ext"
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
},
|
|
407
|
+
"Ext": {
|
|
408
|
+
"title": "Ext",
|
|
409
|
+
"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.",
|
|
410
|
+
"type": "object",
|
|
411
|
+
"minProperties": 1,
|
|
412
|
+
"additionalProperties": true,
|
|
413
|
+
"propertyNames": {
|
|
414
|
+
"pattern": "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$"
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
"StorageConfig": {
|
|
418
|
+
"title": "StorageConfig",
|
|
419
|
+
"type": "object",
|
|
420
|
+
"additionalProperties": false,
|
|
421
|
+
"required": [
|
|
422
|
+
"id",
|
|
423
|
+
"label",
|
|
424
|
+
"settings",
|
|
425
|
+
"state",
|
|
426
|
+
"createdBy",
|
|
427
|
+
"createdAt"
|
|
428
|
+
],
|
|
429
|
+
"description": "One storage config as the community holds it. Carries no secret.",
|
|
430
|
+
"properties": {
|
|
431
|
+
"id": {
|
|
432
|
+
"$ref": "#/$defs/StorageConfigId"
|
|
433
|
+
},
|
|
434
|
+
"label": {
|
|
435
|
+
"type": "string",
|
|
436
|
+
"minLength": 1,
|
|
437
|
+
"maxLength": 128,
|
|
438
|
+
"description": "A display name for administrators (`EU — S3 (main account)`). Shown to a room's creator with the config's kind when the community lets them choose."
|
|
439
|
+
},
|
|
440
|
+
"settings": {
|
|
441
|
+
"$ref": "#/$defs/StorageSettings"
|
|
442
|
+
},
|
|
443
|
+
"auth": {
|
|
444
|
+
"$ref": "#/$defs/StorageAuth"
|
|
445
|
+
},
|
|
446
|
+
"capacityBytes": {
|
|
447
|
+
"type": "integer",
|
|
448
|
+
"minimum": 0,
|
|
449
|
+
"description": "Total ciphertext bytes the community will store on this config, across every room assigned to it. A capacity, not a policy: an upload that would cross it is refused with scope `storage`. Absent means no capacity set."
|
|
450
|
+
},
|
|
451
|
+
"state": {
|
|
452
|
+
"$ref": "#/$defs/ConfigState"
|
|
453
|
+
},
|
|
454
|
+
"isDefault": {
|
|
455
|
+
"type": "boolean",
|
|
456
|
+
"description": "True for the config a room is assigned to when neither the community's policy nor its creator names one."
|
|
457
|
+
},
|
|
458
|
+
"createdBy": {
|
|
459
|
+
"type": "string",
|
|
460
|
+
"pattern": "^did:",
|
|
461
|
+
"maxLength": 2048
|
|
462
|
+
},
|
|
463
|
+
"createdAt": {
|
|
464
|
+
"type": "string",
|
|
465
|
+
"format": "date-time"
|
|
466
|
+
},
|
|
467
|
+
"updatedBy": {
|
|
468
|
+
"type": "string",
|
|
469
|
+
"pattern": "^did:",
|
|
470
|
+
"maxLength": 2048
|
|
471
|
+
},
|
|
472
|
+
"updatedAt": {
|
|
473
|
+
"type": "string",
|
|
474
|
+
"format": "date-time"
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
},
|
|
478
|
+
"ConfigState": {
|
|
479
|
+
"title": "ConfigState",
|
|
480
|
+
"type": "string",
|
|
481
|
+
"enum": [
|
|
482
|
+
"active",
|
|
483
|
+
"draining",
|
|
484
|
+
"retired"
|
|
485
|
+
],
|
|
486
|
+
"description": "`active`: accepts new rooms and new uploads. `draining`: retired by an administrator while blobs still name it — refuses new rooms and new uploads, keeps serving reads, and becomes `retired` when a migration has emptied it. `retired`: refuses new rooms and new uploads and holds no blob. A config is never deleted while a blob names it."
|
|
487
|
+
},
|
|
488
|
+
"StorageAuth": {
|
|
489
|
+
"title": "StorageAuth",
|
|
490
|
+
"description": "How the community authenticates to a config's backend. Absent on a `local` config, which needs none.\n\n`vta-account` (RECOMMENDED): an external account in the community's VTA. The VTA holds the long-lived authority; the community holds nothing that outlives a credential lifetime, and asks for credentials scoped to one room's prefix for at most 15 minutes, every issuance audited at the VTA. Required for a `walrus` config other than a `sealed` one, since the VTA's `sui-signer` account signs its storage transactions.\n\n`ambient`: the cloud identity of the machine the community runs on (an instance role, workload identity), downscoped to one room's prefix by the community itself. Not audited or rate-limited by the VTA, and usable by anything on that machine that reaches the metadata endpoint. Not valid for `walrus`.\n\n`sealed` (discouraged): a long-lived credential stored by the community, set with vtc/storage/credentials/set. Protects against every administrator through every surface the community offers; does not protect against whoever operates the machine.",
|
|
491
|
+
"oneOf": [
|
|
492
|
+
{
|
|
493
|
+
"type": "object",
|
|
494
|
+
"additionalProperties": false,
|
|
495
|
+
"required": [
|
|
496
|
+
"mode",
|
|
497
|
+
"account"
|
|
498
|
+
],
|
|
499
|
+
"properties": {
|
|
500
|
+
"mode": {
|
|
501
|
+
"const": "vta-account"
|
|
502
|
+
},
|
|
503
|
+
"account": {
|
|
504
|
+
"$ref": "#/$defs/ExternalAccountId"
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
},
|
|
508
|
+
{
|
|
509
|
+
"type": "object",
|
|
510
|
+
"additionalProperties": false,
|
|
511
|
+
"required": [
|
|
512
|
+
"mode"
|
|
513
|
+
],
|
|
514
|
+
"properties": {
|
|
515
|
+
"mode": {
|
|
516
|
+
"const": "ambient"
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
},
|
|
520
|
+
{
|
|
521
|
+
"type": "object",
|
|
522
|
+
"additionalProperties": false,
|
|
523
|
+
"required": [
|
|
524
|
+
"mode"
|
|
525
|
+
],
|
|
526
|
+
"properties": {
|
|
527
|
+
"mode": {
|
|
528
|
+
"const": "sealed"
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
]
|
|
533
|
+
},
|
|
534
|
+
"ExternalAccountId": {
|
|
535
|
+
"title": "ExternalAccountId",
|
|
536
|
+
"type": "string",
|
|
537
|
+
"minLength": 1,
|
|
538
|
+
"maxLength": 64,
|
|
539
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",
|
|
540
|
+
"description": "The identifier of an external account held by the community's VTA (the external/accounts/* family), which issues the community short-lived, room-scoped credentials and holds the long-lived authority itself."
|
|
541
|
+
},
|
|
542
|
+
"StorageSettings": {
|
|
543
|
+
"title": "StorageSettings",
|
|
544
|
+
"description": "A config's backend settings, discriminated by `kind`. Never a secret: a credential is a StorageAuth, held elsewhere.",
|
|
545
|
+
"oneOf": [
|
|
546
|
+
{
|
|
547
|
+
"$ref": "#/$defs/LocalSettings"
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
"$ref": "#/$defs/S3Settings"
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
"$ref": "#/$defs/GcsSettings"
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
"$ref": "#/$defs/WalrusSettings"
|
|
557
|
+
}
|
|
558
|
+
]
|
|
559
|
+
},
|
|
560
|
+
"WalrusSettings": {
|
|
561
|
+
"title": "WalrusSettings",
|
|
562
|
+
"type": "object",
|
|
563
|
+
"additionalProperties": false,
|
|
564
|
+
"required": [
|
|
565
|
+
"kind",
|
|
566
|
+
"relayUrl",
|
|
567
|
+
"aggregatorUrl",
|
|
568
|
+
"epochs",
|
|
569
|
+
"extendBeforeEpochs"
|
|
570
|
+
],
|
|
571
|
+
"properties": {
|
|
572
|
+
"kind": {
|
|
573
|
+
"const": "walrus"
|
|
574
|
+
},
|
|
575
|
+
"relayUrl": {
|
|
576
|
+
"type": "string",
|
|
577
|
+
"format": "uri",
|
|
578
|
+
"maxLength": 2048,
|
|
579
|
+
"pattern": "^https://",
|
|
580
|
+
"description": "The Walrus upload relay the community writes through. The community never runs a publisher: a publisher holds a hot wallet in its own configuration, which is the long-lived secret these tasks exist to avoid."
|
|
581
|
+
},
|
|
582
|
+
"aggregatorUrl": {
|
|
583
|
+
"type": "string",
|
|
584
|
+
"format": "uri",
|
|
585
|
+
"maxLength": 2048,
|
|
586
|
+
"pattern": "^https://",
|
|
587
|
+
"description": "The Walrus aggregator the community reads through."
|
|
588
|
+
},
|
|
589
|
+
"epochs": {
|
|
590
|
+
"type": "integer",
|
|
591
|
+
"minimum": 1,
|
|
592
|
+
"maximum": 53,
|
|
593
|
+
"description": "Storage epochs to buy when a blob is registered. Walrus sells storage in epochs (two weeks on mainnet) and caps one purchase at 53."
|
|
594
|
+
},
|
|
595
|
+
"extendBeforeEpochs": {
|
|
596
|
+
"type": "integer",
|
|
597
|
+
"minimum": 1,
|
|
598
|
+
"maximum": 52,
|
|
599
|
+
"description": "How many epochs before a live blob's end epoch the community extends it. A blob that has become an orphan is not extended, and lapses: the Walrus form of deletion."
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
},
|
|
603
|
+
"GcsSettings": {
|
|
604
|
+
"title": "GcsSettings",
|
|
605
|
+
"type": "object",
|
|
606
|
+
"additionalProperties": false,
|
|
607
|
+
"required": [
|
|
608
|
+
"kind",
|
|
609
|
+
"bucket"
|
|
610
|
+
],
|
|
611
|
+
"properties": {
|
|
612
|
+
"kind": {
|
|
613
|
+
"const": "gcs"
|
|
614
|
+
},
|
|
615
|
+
"bucket": {
|
|
616
|
+
"type": "string",
|
|
617
|
+
"minLength": 3,
|
|
618
|
+
"maxLength": 222,
|
|
619
|
+
"pattern": "^[a-z0-9][a-z0-9._-]{1,220}[a-z0-9]$",
|
|
620
|
+
"description": "The bucket name. Validated against GCS naming rules here, because it is placed in a Credential Access Boundary condition and must never carry anything but a name."
|
|
621
|
+
},
|
|
622
|
+
"prefix": {
|
|
623
|
+
"$ref": "#/$defs/ObjectPrefix"
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
},
|
|
627
|
+
"ObjectPrefix": {
|
|
628
|
+
"title": "ObjectPrefix",
|
|
629
|
+
"type": "string",
|
|
630
|
+
"minLength": 1,
|
|
631
|
+
"maxLength": 256,
|
|
632
|
+
"pattern": "^[A-Za-z0-9!_.*'()/-]+/$",
|
|
633
|
+
"description": "A key prefix inside the bucket, ending in `/`, under which the config's `rooms/` tree is placed. Restricted to the S3 safe-character set so that it can be placed in a downscoped policy without escaping."
|
|
634
|
+
},
|
|
635
|
+
"S3Settings": {
|
|
636
|
+
"title": "S3Settings",
|
|
637
|
+
"type": "object",
|
|
638
|
+
"additionalProperties": false,
|
|
639
|
+
"required": [
|
|
640
|
+
"kind",
|
|
641
|
+
"region",
|
|
642
|
+
"bucket"
|
|
643
|
+
],
|
|
644
|
+
"properties": {
|
|
645
|
+
"kind": {
|
|
646
|
+
"const": "s3"
|
|
647
|
+
},
|
|
648
|
+
"endpoint": {
|
|
649
|
+
"type": "string",
|
|
650
|
+
"format": "uri",
|
|
651
|
+
"maxLength": 2048,
|
|
652
|
+
"pattern": "^https://",
|
|
653
|
+
"description": "The S3 API endpoint, for a store other than AWS (R2, B2, MinIO). Absent means AWS S3 in `region`. HTTPS only."
|
|
654
|
+
},
|
|
655
|
+
"region": {
|
|
656
|
+
"type": "string",
|
|
657
|
+
"minLength": 1,
|
|
658
|
+
"maxLength": 64,
|
|
659
|
+
"pattern": "^[a-z0-9-]+$",
|
|
660
|
+
"description": "The bucket's region, as the store names it (`eu-west-1`; `auto` for R2)."
|
|
661
|
+
},
|
|
662
|
+
"bucket": {
|
|
663
|
+
"type": "string",
|
|
664
|
+
"minLength": 3,
|
|
665
|
+
"maxLength": 63,
|
|
666
|
+
"pattern": "^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$",
|
|
667
|
+
"description": "The bucket name. Validated against S3 naming rules here, because it is placed in downscoped session policies and must never carry anything but a name."
|
|
668
|
+
},
|
|
669
|
+
"prefix": {
|
|
670
|
+
"$ref": "#/$defs/ObjectPrefix"
|
|
671
|
+
},
|
|
672
|
+
"pathStyle": {
|
|
673
|
+
"type": "boolean",
|
|
674
|
+
"description": "Address the bucket in the path rather than the host name, as MinIO usually needs. Absent means virtual-hosted style."
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
},
|
|
678
|
+
"LocalSettings": {
|
|
679
|
+
"title": "LocalSettings",
|
|
680
|
+
"type": "object",
|
|
681
|
+
"additionalProperties": false,
|
|
682
|
+
"required": [
|
|
683
|
+
"kind",
|
|
684
|
+
"root"
|
|
685
|
+
],
|
|
686
|
+
"properties": {
|
|
687
|
+
"kind": {
|
|
688
|
+
"const": "local"
|
|
689
|
+
},
|
|
690
|
+
"root": {
|
|
691
|
+
"type": "string",
|
|
692
|
+
"minLength": 1,
|
|
693
|
+
"maxLength": 1024,
|
|
694
|
+
"pattern": "^/",
|
|
695
|
+
"description": "Absolute path of the directory the community writes blobs under, on its own host. Created owner-only. Not carried by the community's backup: back it up beside it."
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
},
|
|
699
|
+
"StorageConfigId": {
|
|
700
|
+
"title": "StorageConfigId",
|
|
701
|
+
"type": "string",
|
|
702
|
+
"minLength": 1,
|
|
703
|
+
"maxLength": 64,
|
|
704
|
+
"pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",
|
|
705
|
+
"description": "A storage config's identifier, chosen by the administrator who creates it and immutable thereafter: lowercase letters, digits and inner hyphens, at most 64 characters (`eu-s3-primary`, `walrus-main`). Unique within the community. Never reused after a config is retired, because blobs name their config by this value."
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
};
|
|
709
|
+
/**
|
|
710
|
+
* SPEC.md §7.2 policy for the request variant, from this specification's
|
|
711
|
+
* front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
|
|
712
|
+
* per-specification and cannot be derived from the document alone, and
|
|
713
|
+
* item 2 needs the schema this carries.
|
|
714
|
+
*/
|
|
715
|
+
export const SPEC = {
|
|
716
|
+
typeUri: TYPE_URI,
|
|
717
|
+
isBearer: false,
|
|
718
|
+
isProofRequired: true,
|
|
719
|
+
isRecipientRequired: true,
|
|
720
|
+
isIssuedAtRequired: true,
|
|
721
|
+
payloadSchema: PAYLOAD_SCHEMA,
|
|
722
|
+
};
|
|
723
|
+
/**
|
|
724
|
+
* SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
|
|
725
|
+
* tracks the *issuer* party's requirement because a response swaps the
|
|
726
|
+
* parties (§7.3 item 5).
|
|
727
|
+
*/
|
|
728
|
+
export const RESPONSE_SPEC = {
|
|
729
|
+
typeUri: RESPONSE_TYPE_URI,
|
|
730
|
+
isBearer: false,
|
|
731
|
+
isProofRequired: true,
|
|
732
|
+
isRecipientRequired: true,
|
|
733
|
+
isIssuedAtRequired: true,
|
|
734
|
+
payloadSchema: RESPONSE_PAYLOAD_SCHEMA,
|
|
735
|
+
};
|
|
736
|
+
//# sourceMappingURL=payload.js.map
|