@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,1274 @@
|
|
|
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
|
+
import type { ConfigState, Ext, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigId, StorageSettings, WalrusSettings } from "../../../../../_shared/components.js";
|
|
6
|
+
/**
|
|
7
|
+
* 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.
|
|
8
|
+
*/
|
|
9
|
+
export interface VTCStorageConfigsUpdatePayload {
|
|
10
|
+
configId: StorageConfigId;
|
|
11
|
+
/**
|
|
12
|
+
* A display name for administrators and, with the kind, for a room's creator.
|
|
13
|
+
*/
|
|
14
|
+
label?: string;
|
|
15
|
+
settings?: StorageSettings;
|
|
16
|
+
auth?: StorageAuth;
|
|
17
|
+
/**
|
|
18
|
+
* Total ciphertext bytes the community will store on this config across every room. Absent means none set.
|
|
19
|
+
*/
|
|
20
|
+
capacityBytes?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Make this the config rooms are assigned to when neither policy nor creator names one.
|
|
23
|
+
*/
|
|
24
|
+
isDefault?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* 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.
|
|
27
|
+
*/
|
|
28
|
+
reason: string;
|
|
29
|
+
ext?: Ext;
|
|
30
|
+
}
|
|
31
|
+
export interface VTCStorageConfigsUpdateResponsePayload {
|
|
32
|
+
config: StorageConfig;
|
|
33
|
+
ext?: Ext;
|
|
34
|
+
}
|
|
35
|
+
/** Shared definitions this specification references, re-exported under the names it used to declare them with. */
|
|
36
|
+
export type { ConfigState, Ext, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigId, StorageSettings, WalrusSettings };
|
|
37
|
+
/** Trust Task type URI. */
|
|
38
|
+
export declare const TYPE_URI: "https://trusttasks.org/spec/vtc/storage/configs/update/0.1";
|
|
39
|
+
/** Stable alias for this specification's request payload shape. */
|
|
40
|
+
export type Payload = VTCStorageConfigsUpdatePayload;
|
|
41
|
+
/** Trust Task response type URI (request type URI + "#response"). */
|
|
42
|
+
export declare const RESPONSE_TYPE_URI: "https://trusttasks.org/spec/vtc/storage/configs/update/0.1#response";
|
|
43
|
+
/** Stable alias for this specification's success-response payload shape. */
|
|
44
|
+
export type Response = VTCStorageConfigsUpdateResponsePayload;
|
|
45
|
+
/**
|
|
46
|
+
* This specification's payload schema, as a value.
|
|
47
|
+
*
|
|
48
|
+
* SPEC.md §7.2 item 2 is performed against this. It is shipped as data
|
|
49
|
+
* rather than only as a `.json` file because TypeScript types are erased
|
|
50
|
+
* at runtime: without a schema a consumer has nothing to validate, and
|
|
51
|
+
* every REQUIRED payload member is optional in practice. Cross-file
|
|
52
|
+
* `$ref`s are already inlined, so it needs no resolver.
|
|
53
|
+
*/
|
|
54
|
+
export declare const PAYLOAD_SCHEMA: {
|
|
55
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
56
|
+
readonly $id: "https://trusttasks.org/spec/vtc/storage/configs/update/0.1";
|
|
57
|
+
readonly title: "VTC Storage — Configs — Update — payload";
|
|
58
|
+
readonly 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.";
|
|
59
|
+
readonly type: "object";
|
|
60
|
+
readonly additionalProperties: false;
|
|
61
|
+
readonly required: readonly ["configId", "reason"];
|
|
62
|
+
readonly minProperties: 3;
|
|
63
|
+
readonly properties: {
|
|
64
|
+
readonly configId: {
|
|
65
|
+
readonly $ref: "#/$defs/StorageConfigId";
|
|
66
|
+
};
|
|
67
|
+
readonly label: {
|
|
68
|
+
readonly type: "string";
|
|
69
|
+
readonly minLength: 1;
|
|
70
|
+
readonly maxLength: 128;
|
|
71
|
+
readonly description: "A display name for administrators and, with the kind, for a room's creator.";
|
|
72
|
+
};
|
|
73
|
+
readonly settings: {
|
|
74
|
+
readonly $ref: "#/$defs/StorageSettings";
|
|
75
|
+
};
|
|
76
|
+
readonly auth: {
|
|
77
|
+
readonly $ref: "#/$defs/StorageAuth";
|
|
78
|
+
};
|
|
79
|
+
readonly capacityBytes: {
|
|
80
|
+
readonly type: "integer";
|
|
81
|
+
readonly minimum: 0;
|
|
82
|
+
readonly description: "Total ciphertext bytes the community will store on this config across every room. Absent means none set.";
|
|
83
|
+
};
|
|
84
|
+
readonly isDefault: {
|
|
85
|
+
readonly type: "boolean";
|
|
86
|
+
readonly description: "Make this the config rooms are assigned to when neither policy nor creator names one.";
|
|
87
|
+
};
|
|
88
|
+
readonly reason: {
|
|
89
|
+
readonly type: "string";
|
|
90
|
+
readonly minLength: 1;
|
|
91
|
+
readonly maxLength: 500;
|
|
92
|
+
readonly 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.";
|
|
93
|
+
};
|
|
94
|
+
readonly ext: {
|
|
95
|
+
readonly $ref: "#/$defs/Ext";
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
readonly $defs: {
|
|
99
|
+
readonly Response: {
|
|
100
|
+
readonly $anchor: "response";
|
|
101
|
+
readonly title: "VTC Storage — Configs — Update — response payload";
|
|
102
|
+
readonly type: "object";
|
|
103
|
+
readonly additionalProperties: false;
|
|
104
|
+
readonly required: readonly ["config"];
|
|
105
|
+
readonly properties: {
|
|
106
|
+
readonly config: {
|
|
107
|
+
readonly $ref: "#/$defs/StorageConfig";
|
|
108
|
+
};
|
|
109
|
+
readonly ext: {
|
|
110
|
+
readonly $ref: "#/$defs/Ext";
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
readonly Ext: {
|
|
115
|
+
readonly title: "Ext";
|
|
116
|
+
readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
|
|
117
|
+
readonly type: "object";
|
|
118
|
+
readonly minProperties: 1;
|
|
119
|
+
readonly additionalProperties: true;
|
|
120
|
+
readonly propertyNames: {
|
|
121
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
readonly StorageConfig: {
|
|
125
|
+
readonly title: "StorageConfig";
|
|
126
|
+
readonly type: "object";
|
|
127
|
+
readonly additionalProperties: false;
|
|
128
|
+
readonly required: readonly ["id", "label", "settings", "state", "createdBy", "createdAt"];
|
|
129
|
+
readonly description: "One storage config as the community holds it. Carries no secret.";
|
|
130
|
+
readonly properties: {
|
|
131
|
+
readonly id: {
|
|
132
|
+
readonly $ref: "#/$defs/StorageConfigId";
|
|
133
|
+
};
|
|
134
|
+
readonly label: {
|
|
135
|
+
readonly type: "string";
|
|
136
|
+
readonly minLength: 1;
|
|
137
|
+
readonly maxLength: 128;
|
|
138
|
+
readonly 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.";
|
|
139
|
+
};
|
|
140
|
+
readonly settings: {
|
|
141
|
+
readonly $ref: "#/$defs/StorageSettings";
|
|
142
|
+
};
|
|
143
|
+
readonly auth: {
|
|
144
|
+
readonly $ref: "#/$defs/StorageAuth";
|
|
145
|
+
};
|
|
146
|
+
readonly capacityBytes: {
|
|
147
|
+
readonly type: "integer";
|
|
148
|
+
readonly minimum: 0;
|
|
149
|
+
readonly 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.";
|
|
150
|
+
};
|
|
151
|
+
readonly state: {
|
|
152
|
+
readonly $ref: "#/$defs/ConfigState";
|
|
153
|
+
};
|
|
154
|
+
readonly isDefault: {
|
|
155
|
+
readonly type: "boolean";
|
|
156
|
+
readonly description: "True for the config a room is assigned to when neither the community's policy nor its creator names one.";
|
|
157
|
+
};
|
|
158
|
+
readonly createdBy: {
|
|
159
|
+
readonly type: "string";
|
|
160
|
+
readonly pattern: "^did:";
|
|
161
|
+
readonly maxLength: 2048;
|
|
162
|
+
};
|
|
163
|
+
readonly createdAt: {
|
|
164
|
+
readonly type: "string";
|
|
165
|
+
readonly format: "date-time";
|
|
166
|
+
};
|
|
167
|
+
readonly updatedBy: {
|
|
168
|
+
readonly type: "string";
|
|
169
|
+
readonly pattern: "^did:";
|
|
170
|
+
readonly maxLength: 2048;
|
|
171
|
+
};
|
|
172
|
+
readonly updatedAt: {
|
|
173
|
+
readonly type: "string";
|
|
174
|
+
readonly format: "date-time";
|
|
175
|
+
};
|
|
176
|
+
};
|
|
177
|
+
};
|
|
178
|
+
readonly ConfigState: {
|
|
179
|
+
readonly title: "ConfigState";
|
|
180
|
+
readonly type: "string";
|
|
181
|
+
readonly enum: readonly ["active", "draining", "retired"];
|
|
182
|
+
readonly 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.";
|
|
183
|
+
};
|
|
184
|
+
readonly StorageAuth: {
|
|
185
|
+
readonly title: "StorageAuth";
|
|
186
|
+
readonly 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.";
|
|
187
|
+
readonly oneOf: readonly [{
|
|
188
|
+
readonly type: "object";
|
|
189
|
+
readonly additionalProperties: false;
|
|
190
|
+
readonly required: readonly ["mode", "account"];
|
|
191
|
+
readonly properties: {
|
|
192
|
+
readonly mode: {
|
|
193
|
+
readonly const: "vta-account";
|
|
194
|
+
};
|
|
195
|
+
readonly account: {
|
|
196
|
+
readonly $ref: "#/$defs/ExternalAccountId";
|
|
197
|
+
};
|
|
198
|
+
};
|
|
199
|
+
}, {
|
|
200
|
+
readonly type: "object";
|
|
201
|
+
readonly additionalProperties: false;
|
|
202
|
+
readonly required: readonly ["mode"];
|
|
203
|
+
readonly properties: {
|
|
204
|
+
readonly mode: {
|
|
205
|
+
readonly const: "ambient";
|
|
206
|
+
};
|
|
207
|
+
};
|
|
208
|
+
}, {
|
|
209
|
+
readonly type: "object";
|
|
210
|
+
readonly additionalProperties: false;
|
|
211
|
+
readonly required: readonly ["mode"];
|
|
212
|
+
readonly properties: {
|
|
213
|
+
readonly mode: {
|
|
214
|
+
readonly const: "sealed";
|
|
215
|
+
};
|
|
216
|
+
};
|
|
217
|
+
}];
|
|
218
|
+
};
|
|
219
|
+
readonly ExternalAccountId: {
|
|
220
|
+
readonly title: "ExternalAccountId";
|
|
221
|
+
readonly type: "string";
|
|
222
|
+
readonly minLength: 1;
|
|
223
|
+
readonly maxLength: 64;
|
|
224
|
+
readonly pattern: "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$";
|
|
225
|
+
readonly 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.";
|
|
226
|
+
};
|
|
227
|
+
readonly StorageSettings: {
|
|
228
|
+
readonly title: "StorageSettings";
|
|
229
|
+
readonly description: "A config's backend settings, discriminated by `kind`. Never a secret: a credential is a StorageAuth, held elsewhere.";
|
|
230
|
+
readonly oneOf: readonly [{
|
|
231
|
+
readonly $ref: "#/$defs/LocalSettings";
|
|
232
|
+
}, {
|
|
233
|
+
readonly $ref: "#/$defs/S3Settings";
|
|
234
|
+
}, {
|
|
235
|
+
readonly $ref: "#/$defs/GcsSettings";
|
|
236
|
+
}, {
|
|
237
|
+
readonly $ref: "#/$defs/WalrusSettings";
|
|
238
|
+
}];
|
|
239
|
+
};
|
|
240
|
+
readonly WalrusSettings: {
|
|
241
|
+
readonly title: "WalrusSettings";
|
|
242
|
+
readonly type: "object";
|
|
243
|
+
readonly additionalProperties: false;
|
|
244
|
+
readonly required: readonly ["kind", "relayUrl", "aggregatorUrl", "epochs", "extendBeforeEpochs"];
|
|
245
|
+
readonly properties: {
|
|
246
|
+
readonly kind: {
|
|
247
|
+
readonly const: "walrus";
|
|
248
|
+
};
|
|
249
|
+
readonly relayUrl: {
|
|
250
|
+
readonly type: "string";
|
|
251
|
+
readonly format: "uri";
|
|
252
|
+
readonly maxLength: 2048;
|
|
253
|
+
readonly pattern: "^https://";
|
|
254
|
+
readonly 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.";
|
|
255
|
+
};
|
|
256
|
+
readonly aggregatorUrl: {
|
|
257
|
+
readonly type: "string";
|
|
258
|
+
readonly format: "uri";
|
|
259
|
+
readonly maxLength: 2048;
|
|
260
|
+
readonly pattern: "^https://";
|
|
261
|
+
readonly description: "The Walrus aggregator the community reads through.";
|
|
262
|
+
};
|
|
263
|
+
readonly epochs: {
|
|
264
|
+
readonly type: "integer";
|
|
265
|
+
readonly minimum: 1;
|
|
266
|
+
readonly maximum: 53;
|
|
267
|
+
readonly 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.";
|
|
268
|
+
};
|
|
269
|
+
readonly extendBeforeEpochs: {
|
|
270
|
+
readonly type: "integer";
|
|
271
|
+
readonly minimum: 1;
|
|
272
|
+
readonly maximum: 52;
|
|
273
|
+
readonly 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.";
|
|
274
|
+
};
|
|
275
|
+
};
|
|
276
|
+
};
|
|
277
|
+
readonly GcsSettings: {
|
|
278
|
+
readonly title: "GcsSettings";
|
|
279
|
+
readonly type: "object";
|
|
280
|
+
readonly additionalProperties: false;
|
|
281
|
+
readonly required: readonly ["kind", "bucket"];
|
|
282
|
+
readonly properties: {
|
|
283
|
+
readonly kind: {
|
|
284
|
+
readonly const: "gcs";
|
|
285
|
+
};
|
|
286
|
+
readonly bucket: {
|
|
287
|
+
readonly type: "string";
|
|
288
|
+
readonly minLength: 3;
|
|
289
|
+
readonly maxLength: 222;
|
|
290
|
+
readonly pattern: "^[a-z0-9][a-z0-9._-]{1,220}[a-z0-9]$";
|
|
291
|
+
readonly 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.";
|
|
292
|
+
};
|
|
293
|
+
readonly prefix: {
|
|
294
|
+
readonly $ref: "#/$defs/ObjectPrefix";
|
|
295
|
+
};
|
|
296
|
+
};
|
|
297
|
+
};
|
|
298
|
+
readonly ObjectPrefix: {
|
|
299
|
+
readonly title: "ObjectPrefix";
|
|
300
|
+
readonly type: "string";
|
|
301
|
+
readonly minLength: 1;
|
|
302
|
+
readonly maxLength: 256;
|
|
303
|
+
readonly pattern: "^[A-Za-z0-9!_.*'()/-]+/$";
|
|
304
|
+
readonly 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.";
|
|
305
|
+
};
|
|
306
|
+
readonly S3Settings: {
|
|
307
|
+
readonly title: "S3Settings";
|
|
308
|
+
readonly type: "object";
|
|
309
|
+
readonly additionalProperties: false;
|
|
310
|
+
readonly required: readonly ["kind", "region", "bucket"];
|
|
311
|
+
readonly properties: {
|
|
312
|
+
readonly kind: {
|
|
313
|
+
readonly const: "s3";
|
|
314
|
+
};
|
|
315
|
+
readonly endpoint: {
|
|
316
|
+
readonly type: "string";
|
|
317
|
+
readonly format: "uri";
|
|
318
|
+
readonly maxLength: 2048;
|
|
319
|
+
readonly pattern: "^https://";
|
|
320
|
+
readonly description: "The S3 API endpoint, for a store other than AWS (R2, B2, MinIO). Absent means AWS S3 in `region`. HTTPS only.";
|
|
321
|
+
};
|
|
322
|
+
readonly region: {
|
|
323
|
+
readonly type: "string";
|
|
324
|
+
readonly minLength: 1;
|
|
325
|
+
readonly maxLength: 64;
|
|
326
|
+
readonly pattern: "^[a-z0-9-]+$";
|
|
327
|
+
readonly description: "The bucket's region, as the store names it (`eu-west-1`; `auto` for R2).";
|
|
328
|
+
};
|
|
329
|
+
readonly bucket: {
|
|
330
|
+
readonly type: "string";
|
|
331
|
+
readonly minLength: 3;
|
|
332
|
+
readonly maxLength: 63;
|
|
333
|
+
readonly pattern: "^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$";
|
|
334
|
+
readonly 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.";
|
|
335
|
+
};
|
|
336
|
+
readonly prefix: {
|
|
337
|
+
readonly $ref: "#/$defs/ObjectPrefix";
|
|
338
|
+
};
|
|
339
|
+
readonly pathStyle: {
|
|
340
|
+
readonly type: "boolean";
|
|
341
|
+
readonly description: "Address the bucket in the path rather than the host name, as MinIO usually needs. Absent means virtual-hosted style.";
|
|
342
|
+
};
|
|
343
|
+
};
|
|
344
|
+
};
|
|
345
|
+
readonly LocalSettings: {
|
|
346
|
+
readonly title: "LocalSettings";
|
|
347
|
+
readonly type: "object";
|
|
348
|
+
readonly additionalProperties: false;
|
|
349
|
+
readonly required: readonly ["kind", "root"];
|
|
350
|
+
readonly properties: {
|
|
351
|
+
readonly kind: {
|
|
352
|
+
readonly const: "local";
|
|
353
|
+
};
|
|
354
|
+
readonly root: {
|
|
355
|
+
readonly type: "string";
|
|
356
|
+
readonly minLength: 1;
|
|
357
|
+
readonly maxLength: 1024;
|
|
358
|
+
readonly pattern: "^/";
|
|
359
|
+
readonly 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.";
|
|
360
|
+
};
|
|
361
|
+
};
|
|
362
|
+
};
|
|
363
|
+
readonly StorageConfigId: {
|
|
364
|
+
readonly title: "StorageConfigId";
|
|
365
|
+
readonly type: "string";
|
|
366
|
+
readonly minLength: 1;
|
|
367
|
+
readonly maxLength: 64;
|
|
368
|
+
readonly pattern: "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$";
|
|
369
|
+
readonly 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.";
|
|
370
|
+
};
|
|
371
|
+
};
|
|
372
|
+
};
|
|
373
|
+
/** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
|
|
374
|
+
export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
375
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
376
|
+
readonly $ref: "#/$defs/Response";
|
|
377
|
+
readonly $defs: {
|
|
378
|
+
readonly Response: {
|
|
379
|
+
readonly $anchor: "response";
|
|
380
|
+
readonly title: "VTC Storage — Configs — Update — response payload";
|
|
381
|
+
readonly type: "object";
|
|
382
|
+
readonly additionalProperties: false;
|
|
383
|
+
readonly required: readonly ["config"];
|
|
384
|
+
readonly properties: {
|
|
385
|
+
readonly config: {
|
|
386
|
+
readonly $ref: "#/$defs/StorageConfig";
|
|
387
|
+
};
|
|
388
|
+
readonly ext: {
|
|
389
|
+
readonly $ref: "#/$defs/Ext";
|
|
390
|
+
};
|
|
391
|
+
};
|
|
392
|
+
};
|
|
393
|
+
readonly Ext: {
|
|
394
|
+
readonly title: "Ext";
|
|
395
|
+
readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
|
|
396
|
+
readonly type: "object";
|
|
397
|
+
readonly minProperties: 1;
|
|
398
|
+
readonly additionalProperties: true;
|
|
399
|
+
readonly propertyNames: {
|
|
400
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
401
|
+
};
|
|
402
|
+
};
|
|
403
|
+
readonly StorageConfig: {
|
|
404
|
+
readonly title: "StorageConfig";
|
|
405
|
+
readonly type: "object";
|
|
406
|
+
readonly additionalProperties: false;
|
|
407
|
+
readonly required: readonly ["id", "label", "settings", "state", "createdBy", "createdAt"];
|
|
408
|
+
readonly description: "One storage config as the community holds it. Carries no secret.";
|
|
409
|
+
readonly properties: {
|
|
410
|
+
readonly id: {
|
|
411
|
+
readonly $ref: "#/$defs/StorageConfigId";
|
|
412
|
+
};
|
|
413
|
+
readonly label: {
|
|
414
|
+
readonly type: "string";
|
|
415
|
+
readonly minLength: 1;
|
|
416
|
+
readonly maxLength: 128;
|
|
417
|
+
readonly 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.";
|
|
418
|
+
};
|
|
419
|
+
readonly settings: {
|
|
420
|
+
readonly $ref: "#/$defs/StorageSettings";
|
|
421
|
+
};
|
|
422
|
+
readonly auth: {
|
|
423
|
+
readonly $ref: "#/$defs/StorageAuth";
|
|
424
|
+
};
|
|
425
|
+
readonly capacityBytes: {
|
|
426
|
+
readonly type: "integer";
|
|
427
|
+
readonly minimum: 0;
|
|
428
|
+
readonly 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.";
|
|
429
|
+
};
|
|
430
|
+
readonly state: {
|
|
431
|
+
readonly $ref: "#/$defs/ConfigState";
|
|
432
|
+
};
|
|
433
|
+
readonly isDefault: {
|
|
434
|
+
readonly type: "boolean";
|
|
435
|
+
readonly description: "True for the config a room is assigned to when neither the community's policy nor its creator names one.";
|
|
436
|
+
};
|
|
437
|
+
readonly createdBy: {
|
|
438
|
+
readonly type: "string";
|
|
439
|
+
readonly pattern: "^did:";
|
|
440
|
+
readonly maxLength: 2048;
|
|
441
|
+
};
|
|
442
|
+
readonly createdAt: {
|
|
443
|
+
readonly type: "string";
|
|
444
|
+
readonly format: "date-time";
|
|
445
|
+
};
|
|
446
|
+
readonly updatedBy: {
|
|
447
|
+
readonly type: "string";
|
|
448
|
+
readonly pattern: "^did:";
|
|
449
|
+
readonly maxLength: 2048;
|
|
450
|
+
};
|
|
451
|
+
readonly updatedAt: {
|
|
452
|
+
readonly type: "string";
|
|
453
|
+
readonly format: "date-time";
|
|
454
|
+
};
|
|
455
|
+
};
|
|
456
|
+
};
|
|
457
|
+
readonly ConfigState: {
|
|
458
|
+
readonly title: "ConfigState";
|
|
459
|
+
readonly type: "string";
|
|
460
|
+
readonly enum: readonly ["active", "draining", "retired"];
|
|
461
|
+
readonly 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.";
|
|
462
|
+
};
|
|
463
|
+
readonly StorageAuth: {
|
|
464
|
+
readonly title: "StorageAuth";
|
|
465
|
+
readonly 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.";
|
|
466
|
+
readonly oneOf: readonly [{
|
|
467
|
+
readonly type: "object";
|
|
468
|
+
readonly additionalProperties: false;
|
|
469
|
+
readonly required: readonly ["mode", "account"];
|
|
470
|
+
readonly properties: {
|
|
471
|
+
readonly mode: {
|
|
472
|
+
readonly const: "vta-account";
|
|
473
|
+
};
|
|
474
|
+
readonly account: {
|
|
475
|
+
readonly $ref: "#/$defs/ExternalAccountId";
|
|
476
|
+
};
|
|
477
|
+
};
|
|
478
|
+
}, {
|
|
479
|
+
readonly type: "object";
|
|
480
|
+
readonly additionalProperties: false;
|
|
481
|
+
readonly required: readonly ["mode"];
|
|
482
|
+
readonly properties: {
|
|
483
|
+
readonly mode: {
|
|
484
|
+
readonly const: "ambient";
|
|
485
|
+
};
|
|
486
|
+
};
|
|
487
|
+
}, {
|
|
488
|
+
readonly type: "object";
|
|
489
|
+
readonly additionalProperties: false;
|
|
490
|
+
readonly required: readonly ["mode"];
|
|
491
|
+
readonly properties: {
|
|
492
|
+
readonly mode: {
|
|
493
|
+
readonly const: "sealed";
|
|
494
|
+
};
|
|
495
|
+
};
|
|
496
|
+
}];
|
|
497
|
+
};
|
|
498
|
+
readonly ExternalAccountId: {
|
|
499
|
+
readonly title: "ExternalAccountId";
|
|
500
|
+
readonly type: "string";
|
|
501
|
+
readonly minLength: 1;
|
|
502
|
+
readonly maxLength: 64;
|
|
503
|
+
readonly pattern: "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$";
|
|
504
|
+
readonly 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.";
|
|
505
|
+
};
|
|
506
|
+
readonly StorageSettings: {
|
|
507
|
+
readonly title: "StorageSettings";
|
|
508
|
+
readonly description: "A config's backend settings, discriminated by `kind`. Never a secret: a credential is a StorageAuth, held elsewhere.";
|
|
509
|
+
readonly oneOf: readonly [{
|
|
510
|
+
readonly $ref: "#/$defs/LocalSettings";
|
|
511
|
+
}, {
|
|
512
|
+
readonly $ref: "#/$defs/S3Settings";
|
|
513
|
+
}, {
|
|
514
|
+
readonly $ref: "#/$defs/GcsSettings";
|
|
515
|
+
}, {
|
|
516
|
+
readonly $ref: "#/$defs/WalrusSettings";
|
|
517
|
+
}];
|
|
518
|
+
};
|
|
519
|
+
readonly WalrusSettings: {
|
|
520
|
+
readonly title: "WalrusSettings";
|
|
521
|
+
readonly type: "object";
|
|
522
|
+
readonly additionalProperties: false;
|
|
523
|
+
readonly required: readonly ["kind", "relayUrl", "aggregatorUrl", "epochs", "extendBeforeEpochs"];
|
|
524
|
+
readonly properties: {
|
|
525
|
+
readonly kind: {
|
|
526
|
+
readonly const: "walrus";
|
|
527
|
+
};
|
|
528
|
+
readonly relayUrl: {
|
|
529
|
+
readonly type: "string";
|
|
530
|
+
readonly format: "uri";
|
|
531
|
+
readonly maxLength: 2048;
|
|
532
|
+
readonly pattern: "^https://";
|
|
533
|
+
readonly 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.";
|
|
534
|
+
};
|
|
535
|
+
readonly aggregatorUrl: {
|
|
536
|
+
readonly type: "string";
|
|
537
|
+
readonly format: "uri";
|
|
538
|
+
readonly maxLength: 2048;
|
|
539
|
+
readonly pattern: "^https://";
|
|
540
|
+
readonly description: "The Walrus aggregator the community reads through.";
|
|
541
|
+
};
|
|
542
|
+
readonly epochs: {
|
|
543
|
+
readonly type: "integer";
|
|
544
|
+
readonly minimum: 1;
|
|
545
|
+
readonly maximum: 53;
|
|
546
|
+
readonly 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.";
|
|
547
|
+
};
|
|
548
|
+
readonly extendBeforeEpochs: {
|
|
549
|
+
readonly type: "integer";
|
|
550
|
+
readonly minimum: 1;
|
|
551
|
+
readonly maximum: 52;
|
|
552
|
+
readonly 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.";
|
|
553
|
+
};
|
|
554
|
+
};
|
|
555
|
+
};
|
|
556
|
+
readonly GcsSettings: {
|
|
557
|
+
readonly title: "GcsSettings";
|
|
558
|
+
readonly type: "object";
|
|
559
|
+
readonly additionalProperties: false;
|
|
560
|
+
readonly required: readonly ["kind", "bucket"];
|
|
561
|
+
readonly properties: {
|
|
562
|
+
readonly kind: {
|
|
563
|
+
readonly const: "gcs";
|
|
564
|
+
};
|
|
565
|
+
readonly bucket: {
|
|
566
|
+
readonly type: "string";
|
|
567
|
+
readonly minLength: 3;
|
|
568
|
+
readonly maxLength: 222;
|
|
569
|
+
readonly pattern: "^[a-z0-9][a-z0-9._-]{1,220}[a-z0-9]$";
|
|
570
|
+
readonly 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.";
|
|
571
|
+
};
|
|
572
|
+
readonly prefix: {
|
|
573
|
+
readonly $ref: "#/$defs/ObjectPrefix";
|
|
574
|
+
};
|
|
575
|
+
};
|
|
576
|
+
};
|
|
577
|
+
readonly ObjectPrefix: {
|
|
578
|
+
readonly title: "ObjectPrefix";
|
|
579
|
+
readonly type: "string";
|
|
580
|
+
readonly minLength: 1;
|
|
581
|
+
readonly maxLength: 256;
|
|
582
|
+
readonly pattern: "^[A-Za-z0-9!_.*'()/-]+/$";
|
|
583
|
+
readonly 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.";
|
|
584
|
+
};
|
|
585
|
+
readonly S3Settings: {
|
|
586
|
+
readonly title: "S3Settings";
|
|
587
|
+
readonly type: "object";
|
|
588
|
+
readonly additionalProperties: false;
|
|
589
|
+
readonly required: readonly ["kind", "region", "bucket"];
|
|
590
|
+
readonly properties: {
|
|
591
|
+
readonly kind: {
|
|
592
|
+
readonly const: "s3";
|
|
593
|
+
};
|
|
594
|
+
readonly endpoint: {
|
|
595
|
+
readonly type: "string";
|
|
596
|
+
readonly format: "uri";
|
|
597
|
+
readonly maxLength: 2048;
|
|
598
|
+
readonly pattern: "^https://";
|
|
599
|
+
readonly description: "The S3 API endpoint, for a store other than AWS (R2, B2, MinIO). Absent means AWS S3 in `region`. HTTPS only.";
|
|
600
|
+
};
|
|
601
|
+
readonly region: {
|
|
602
|
+
readonly type: "string";
|
|
603
|
+
readonly minLength: 1;
|
|
604
|
+
readonly maxLength: 64;
|
|
605
|
+
readonly pattern: "^[a-z0-9-]+$";
|
|
606
|
+
readonly description: "The bucket's region, as the store names it (`eu-west-1`; `auto` for R2).";
|
|
607
|
+
};
|
|
608
|
+
readonly bucket: {
|
|
609
|
+
readonly type: "string";
|
|
610
|
+
readonly minLength: 3;
|
|
611
|
+
readonly maxLength: 63;
|
|
612
|
+
readonly pattern: "^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$";
|
|
613
|
+
readonly 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.";
|
|
614
|
+
};
|
|
615
|
+
readonly prefix: {
|
|
616
|
+
readonly $ref: "#/$defs/ObjectPrefix";
|
|
617
|
+
};
|
|
618
|
+
readonly pathStyle: {
|
|
619
|
+
readonly type: "boolean";
|
|
620
|
+
readonly description: "Address the bucket in the path rather than the host name, as MinIO usually needs. Absent means virtual-hosted style.";
|
|
621
|
+
};
|
|
622
|
+
};
|
|
623
|
+
};
|
|
624
|
+
readonly LocalSettings: {
|
|
625
|
+
readonly title: "LocalSettings";
|
|
626
|
+
readonly type: "object";
|
|
627
|
+
readonly additionalProperties: false;
|
|
628
|
+
readonly required: readonly ["kind", "root"];
|
|
629
|
+
readonly properties: {
|
|
630
|
+
readonly kind: {
|
|
631
|
+
readonly const: "local";
|
|
632
|
+
};
|
|
633
|
+
readonly root: {
|
|
634
|
+
readonly type: "string";
|
|
635
|
+
readonly minLength: 1;
|
|
636
|
+
readonly maxLength: 1024;
|
|
637
|
+
readonly pattern: "^/";
|
|
638
|
+
readonly 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.";
|
|
639
|
+
};
|
|
640
|
+
};
|
|
641
|
+
};
|
|
642
|
+
readonly StorageConfigId: {
|
|
643
|
+
readonly title: "StorageConfigId";
|
|
644
|
+
readonly type: "string";
|
|
645
|
+
readonly minLength: 1;
|
|
646
|
+
readonly maxLength: 64;
|
|
647
|
+
readonly pattern: "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$";
|
|
648
|
+
readonly 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.";
|
|
649
|
+
};
|
|
650
|
+
};
|
|
651
|
+
};
|
|
652
|
+
/**
|
|
653
|
+
* SPEC.md §7.2 policy for the request variant, from this specification's
|
|
654
|
+
* front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
|
|
655
|
+
* per-specification and cannot be derived from the document alone, and
|
|
656
|
+
* item 2 needs the schema this carries.
|
|
657
|
+
*/
|
|
658
|
+
export declare const SPEC: {
|
|
659
|
+
readonly typeUri: "https://trusttasks.org/spec/vtc/storage/configs/update/0.1";
|
|
660
|
+
readonly isBearer: false;
|
|
661
|
+
readonly isProofRequired: true;
|
|
662
|
+
readonly isRecipientRequired: true;
|
|
663
|
+
readonly isIssuedAtRequired: true;
|
|
664
|
+
readonly payloadSchema: {
|
|
665
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
666
|
+
readonly $id: "https://trusttasks.org/spec/vtc/storage/configs/update/0.1";
|
|
667
|
+
readonly title: "VTC Storage — Configs — Update — payload";
|
|
668
|
+
readonly 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.";
|
|
669
|
+
readonly type: "object";
|
|
670
|
+
readonly additionalProperties: false;
|
|
671
|
+
readonly required: readonly ["configId", "reason"];
|
|
672
|
+
readonly minProperties: 3;
|
|
673
|
+
readonly properties: {
|
|
674
|
+
readonly configId: {
|
|
675
|
+
readonly $ref: "#/$defs/StorageConfigId";
|
|
676
|
+
};
|
|
677
|
+
readonly label: {
|
|
678
|
+
readonly type: "string";
|
|
679
|
+
readonly minLength: 1;
|
|
680
|
+
readonly maxLength: 128;
|
|
681
|
+
readonly description: "A display name for administrators and, with the kind, for a room's creator.";
|
|
682
|
+
};
|
|
683
|
+
readonly settings: {
|
|
684
|
+
readonly $ref: "#/$defs/StorageSettings";
|
|
685
|
+
};
|
|
686
|
+
readonly auth: {
|
|
687
|
+
readonly $ref: "#/$defs/StorageAuth";
|
|
688
|
+
};
|
|
689
|
+
readonly capacityBytes: {
|
|
690
|
+
readonly type: "integer";
|
|
691
|
+
readonly minimum: 0;
|
|
692
|
+
readonly description: "Total ciphertext bytes the community will store on this config across every room. Absent means none set.";
|
|
693
|
+
};
|
|
694
|
+
readonly isDefault: {
|
|
695
|
+
readonly type: "boolean";
|
|
696
|
+
readonly description: "Make this the config rooms are assigned to when neither policy nor creator names one.";
|
|
697
|
+
};
|
|
698
|
+
readonly reason: {
|
|
699
|
+
readonly type: "string";
|
|
700
|
+
readonly minLength: 1;
|
|
701
|
+
readonly maxLength: 500;
|
|
702
|
+
readonly 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.";
|
|
703
|
+
};
|
|
704
|
+
readonly ext: {
|
|
705
|
+
readonly $ref: "#/$defs/Ext";
|
|
706
|
+
};
|
|
707
|
+
};
|
|
708
|
+
readonly $defs: {
|
|
709
|
+
readonly Response: {
|
|
710
|
+
readonly $anchor: "response";
|
|
711
|
+
readonly title: "VTC Storage — Configs — Update — response payload";
|
|
712
|
+
readonly type: "object";
|
|
713
|
+
readonly additionalProperties: false;
|
|
714
|
+
readonly required: readonly ["config"];
|
|
715
|
+
readonly properties: {
|
|
716
|
+
readonly config: {
|
|
717
|
+
readonly $ref: "#/$defs/StorageConfig";
|
|
718
|
+
};
|
|
719
|
+
readonly ext: {
|
|
720
|
+
readonly $ref: "#/$defs/Ext";
|
|
721
|
+
};
|
|
722
|
+
};
|
|
723
|
+
};
|
|
724
|
+
readonly Ext: {
|
|
725
|
+
readonly title: "Ext";
|
|
726
|
+
readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
|
|
727
|
+
readonly type: "object";
|
|
728
|
+
readonly minProperties: 1;
|
|
729
|
+
readonly additionalProperties: true;
|
|
730
|
+
readonly propertyNames: {
|
|
731
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
732
|
+
};
|
|
733
|
+
};
|
|
734
|
+
readonly StorageConfig: {
|
|
735
|
+
readonly title: "StorageConfig";
|
|
736
|
+
readonly type: "object";
|
|
737
|
+
readonly additionalProperties: false;
|
|
738
|
+
readonly required: readonly ["id", "label", "settings", "state", "createdBy", "createdAt"];
|
|
739
|
+
readonly description: "One storage config as the community holds it. Carries no secret.";
|
|
740
|
+
readonly properties: {
|
|
741
|
+
readonly id: {
|
|
742
|
+
readonly $ref: "#/$defs/StorageConfigId";
|
|
743
|
+
};
|
|
744
|
+
readonly label: {
|
|
745
|
+
readonly type: "string";
|
|
746
|
+
readonly minLength: 1;
|
|
747
|
+
readonly maxLength: 128;
|
|
748
|
+
readonly 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.";
|
|
749
|
+
};
|
|
750
|
+
readonly settings: {
|
|
751
|
+
readonly $ref: "#/$defs/StorageSettings";
|
|
752
|
+
};
|
|
753
|
+
readonly auth: {
|
|
754
|
+
readonly $ref: "#/$defs/StorageAuth";
|
|
755
|
+
};
|
|
756
|
+
readonly capacityBytes: {
|
|
757
|
+
readonly type: "integer";
|
|
758
|
+
readonly minimum: 0;
|
|
759
|
+
readonly 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.";
|
|
760
|
+
};
|
|
761
|
+
readonly state: {
|
|
762
|
+
readonly $ref: "#/$defs/ConfigState";
|
|
763
|
+
};
|
|
764
|
+
readonly isDefault: {
|
|
765
|
+
readonly type: "boolean";
|
|
766
|
+
readonly description: "True for the config a room is assigned to when neither the community's policy nor its creator names one.";
|
|
767
|
+
};
|
|
768
|
+
readonly createdBy: {
|
|
769
|
+
readonly type: "string";
|
|
770
|
+
readonly pattern: "^did:";
|
|
771
|
+
readonly maxLength: 2048;
|
|
772
|
+
};
|
|
773
|
+
readonly createdAt: {
|
|
774
|
+
readonly type: "string";
|
|
775
|
+
readonly format: "date-time";
|
|
776
|
+
};
|
|
777
|
+
readonly updatedBy: {
|
|
778
|
+
readonly type: "string";
|
|
779
|
+
readonly pattern: "^did:";
|
|
780
|
+
readonly maxLength: 2048;
|
|
781
|
+
};
|
|
782
|
+
readonly updatedAt: {
|
|
783
|
+
readonly type: "string";
|
|
784
|
+
readonly format: "date-time";
|
|
785
|
+
};
|
|
786
|
+
};
|
|
787
|
+
};
|
|
788
|
+
readonly ConfigState: {
|
|
789
|
+
readonly title: "ConfigState";
|
|
790
|
+
readonly type: "string";
|
|
791
|
+
readonly enum: readonly ["active", "draining", "retired"];
|
|
792
|
+
readonly 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.";
|
|
793
|
+
};
|
|
794
|
+
readonly StorageAuth: {
|
|
795
|
+
readonly title: "StorageAuth";
|
|
796
|
+
readonly 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.";
|
|
797
|
+
readonly oneOf: readonly [{
|
|
798
|
+
readonly type: "object";
|
|
799
|
+
readonly additionalProperties: false;
|
|
800
|
+
readonly required: readonly ["mode", "account"];
|
|
801
|
+
readonly properties: {
|
|
802
|
+
readonly mode: {
|
|
803
|
+
readonly const: "vta-account";
|
|
804
|
+
};
|
|
805
|
+
readonly account: {
|
|
806
|
+
readonly $ref: "#/$defs/ExternalAccountId";
|
|
807
|
+
};
|
|
808
|
+
};
|
|
809
|
+
}, {
|
|
810
|
+
readonly type: "object";
|
|
811
|
+
readonly additionalProperties: false;
|
|
812
|
+
readonly required: readonly ["mode"];
|
|
813
|
+
readonly properties: {
|
|
814
|
+
readonly mode: {
|
|
815
|
+
readonly const: "ambient";
|
|
816
|
+
};
|
|
817
|
+
};
|
|
818
|
+
}, {
|
|
819
|
+
readonly type: "object";
|
|
820
|
+
readonly additionalProperties: false;
|
|
821
|
+
readonly required: readonly ["mode"];
|
|
822
|
+
readonly properties: {
|
|
823
|
+
readonly mode: {
|
|
824
|
+
readonly const: "sealed";
|
|
825
|
+
};
|
|
826
|
+
};
|
|
827
|
+
}];
|
|
828
|
+
};
|
|
829
|
+
readonly ExternalAccountId: {
|
|
830
|
+
readonly title: "ExternalAccountId";
|
|
831
|
+
readonly type: "string";
|
|
832
|
+
readonly minLength: 1;
|
|
833
|
+
readonly maxLength: 64;
|
|
834
|
+
readonly pattern: "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$";
|
|
835
|
+
readonly 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.";
|
|
836
|
+
};
|
|
837
|
+
readonly StorageSettings: {
|
|
838
|
+
readonly title: "StorageSettings";
|
|
839
|
+
readonly description: "A config's backend settings, discriminated by `kind`. Never a secret: a credential is a StorageAuth, held elsewhere.";
|
|
840
|
+
readonly oneOf: readonly [{
|
|
841
|
+
readonly $ref: "#/$defs/LocalSettings";
|
|
842
|
+
}, {
|
|
843
|
+
readonly $ref: "#/$defs/S3Settings";
|
|
844
|
+
}, {
|
|
845
|
+
readonly $ref: "#/$defs/GcsSettings";
|
|
846
|
+
}, {
|
|
847
|
+
readonly $ref: "#/$defs/WalrusSettings";
|
|
848
|
+
}];
|
|
849
|
+
};
|
|
850
|
+
readonly WalrusSettings: {
|
|
851
|
+
readonly title: "WalrusSettings";
|
|
852
|
+
readonly type: "object";
|
|
853
|
+
readonly additionalProperties: false;
|
|
854
|
+
readonly required: readonly ["kind", "relayUrl", "aggregatorUrl", "epochs", "extendBeforeEpochs"];
|
|
855
|
+
readonly properties: {
|
|
856
|
+
readonly kind: {
|
|
857
|
+
readonly const: "walrus";
|
|
858
|
+
};
|
|
859
|
+
readonly relayUrl: {
|
|
860
|
+
readonly type: "string";
|
|
861
|
+
readonly format: "uri";
|
|
862
|
+
readonly maxLength: 2048;
|
|
863
|
+
readonly pattern: "^https://";
|
|
864
|
+
readonly 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.";
|
|
865
|
+
};
|
|
866
|
+
readonly aggregatorUrl: {
|
|
867
|
+
readonly type: "string";
|
|
868
|
+
readonly format: "uri";
|
|
869
|
+
readonly maxLength: 2048;
|
|
870
|
+
readonly pattern: "^https://";
|
|
871
|
+
readonly description: "The Walrus aggregator the community reads through.";
|
|
872
|
+
};
|
|
873
|
+
readonly epochs: {
|
|
874
|
+
readonly type: "integer";
|
|
875
|
+
readonly minimum: 1;
|
|
876
|
+
readonly maximum: 53;
|
|
877
|
+
readonly 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.";
|
|
878
|
+
};
|
|
879
|
+
readonly extendBeforeEpochs: {
|
|
880
|
+
readonly type: "integer";
|
|
881
|
+
readonly minimum: 1;
|
|
882
|
+
readonly maximum: 52;
|
|
883
|
+
readonly 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.";
|
|
884
|
+
};
|
|
885
|
+
};
|
|
886
|
+
};
|
|
887
|
+
readonly GcsSettings: {
|
|
888
|
+
readonly title: "GcsSettings";
|
|
889
|
+
readonly type: "object";
|
|
890
|
+
readonly additionalProperties: false;
|
|
891
|
+
readonly required: readonly ["kind", "bucket"];
|
|
892
|
+
readonly properties: {
|
|
893
|
+
readonly kind: {
|
|
894
|
+
readonly const: "gcs";
|
|
895
|
+
};
|
|
896
|
+
readonly bucket: {
|
|
897
|
+
readonly type: "string";
|
|
898
|
+
readonly minLength: 3;
|
|
899
|
+
readonly maxLength: 222;
|
|
900
|
+
readonly pattern: "^[a-z0-9][a-z0-9._-]{1,220}[a-z0-9]$";
|
|
901
|
+
readonly 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.";
|
|
902
|
+
};
|
|
903
|
+
readonly prefix: {
|
|
904
|
+
readonly $ref: "#/$defs/ObjectPrefix";
|
|
905
|
+
};
|
|
906
|
+
};
|
|
907
|
+
};
|
|
908
|
+
readonly ObjectPrefix: {
|
|
909
|
+
readonly title: "ObjectPrefix";
|
|
910
|
+
readonly type: "string";
|
|
911
|
+
readonly minLength: 1;
|
|
912
|
+
readonly maxLength: 256;
|
|
913
|
+
readonly pattern: "^[A-Za-z0-9!_.*'()/-]+/$";
|
|
914
|
+
readonly 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.";
|
|
915
|
+
};
|
|
916
|
+
readonly S3Settings: {
|
|
917
|
+
readonly title: "S3Settings";
|
|
918
|
+
readonly type: "object";
|
|
919
|
+
readonly additionalProperties: false;
|
|
920
|
+
readonly required: readonly ["kind", "region", "bucket"];
|
|
921
|
+
readonly properties: {
|
|
922
|
+
readonly kind: {
|
|
923
|
+
readonly const: "s3";
|
|
924
|
+
};
|
|
925
|
+
readonly endpoint: {
|
|
926
|
+
readonly type: "string";
|
|
927
|
+
readonly format: "uri";
|
|
928
|
+
readonly maxLength: 2048;
|
|
929
|
+
readonly pattern: "^https://";
|
|
930
|
+
readonly description: "The S3 API endpoint, for a store other than AWS (R2, B2, MinIO). Absent means AWS S3 in `region`. HTTPS only.";
|
|
931
|
+
};
|
|
932
|
+
readonly region: {
|
|
933
|
+
readonly type: "string";
|
|
934
|
+
readonly minLength: 1;
|
|
935
|
+
readonly maxLength: 64;
|
|
936
|
+
readonly pattern: "^[a-z0-9-]+$";
|
|
937
|
+
readonly description: "The bucket's region, as the store names it (`eu-west-1`; `auto` for R2).";
|
|
938
|
+
};
|
|
939
|
+
readonly bucket: {
|
|
940
|
+
readonly type: "string";
|
|
941
|
+
readonly minLength: 3;
|
|
942
|
+
readonly maxLength: 63;
|
|
943
|
+
readonly pattern: "^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$";
|
|
944
|
+
readonly 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.";
|
|
945
|
+
};
|
|
946
|
+
readonly prefix: {
|
|
947
|
+
readonly $ref: "#/$defs/ObjectPrefix";
|
|
948
|
+
};
|
|
949
|
+
readonly pathStyle: {
|
|
950
|
+
readonly type: "boolean";
|
|
951
|
+
readonly description: "Address the bucket in the path rather than the host name, as MinIO usually needs. Absent means virtual-hosted style.";
|
|
952
|
+
};
|
|
953
|
+
};
|
|
954
|
+
};
|
|
955
|
+
readonly LocalSettings: {
|
|
956
|
+
readonly title: "LocalSettings";
|
|
957
|
+
readonly type: "object";
|
|
958
|
+
readonly additionalProperties: false;
|
|
959
|
+
readonly required: readonly ["kind", "root"];
|
|
960
|
+
readonly properties: {
|
|
961
|
+
readonly kind: {
|
|
962
|
+
readonly const: "local";
|
|
963
|
+
};
|
|
964
|
+
readonly root: {
|
|
965
|
+
readonly type: "string";
|
|
966
|
+
readonly minLength: 1;
|
|
967
|
+
readonly maxLength: 1024;
|
|
968
|
+
readonly pattern: "^/";
|
|
969
|
+
readonly 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.";
|
|
970
|
+
};
|
|
971
|
+
};
|
|
972
|
+
};
|
|
973
|
+
readonly StorageConfigId: {
|
|
974
|
+
readonly title: "StorageConfigId";
|
|
975
|
+
readonly type: "string";
|
|
976
|
+
readonly minLength: 1;
|
|
977
|
+
readonly maxLength: 64;
|
|
978
|
+
readonly pattern: "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$";
|
|
979
|
+
readonly 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.";
|
|
980
|
+
};
|
|
981
|
+
};
|
|
982
|
+
};
|
|
983
|
+
};
|
|
984
|
+
/**
|
|
985
|
+
* SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
|
|
986
|
+
* tracks the *issuer* party's requirement because a response swaps the
|
|
987
|
+
* parties (§7.3 item 5).
|
|
988
|
+
*/
|
|
989
|
+
export declare const RESPONSE_SPEC: {
|
|
990
|
+
readonly typeUri: "https://trusttasks.org/spec/vtc/storage/configs/update/0.1#response";
|
|
991
|
+
readonly isBearer: false;
|
|
992
|
+
readonly isProofRequired: true;
|
|
993
|
+
readonly isRecipientRequired: true;
|
|
994
|
+
readonly isIssuedAtRequired: true;
|
|
995
|
+
readonly payloadSchema: {
|
|
996
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
997
|
+
readonly $ref: "#/$defs/Response";
|
|
998
|
+
readonly $defs: {
|
|
999
|
+
readonly Response: {
|
|
1000
|
+
readonly $anchor: "response";
|
|
1001
|
+
readonly title: "VTC Storage — Configs — Update — response payload";
|
|
1002
|
+
readonly type: "object";
|
|
1003
|
+
readonly additionalProperties: false;
|
|
1004
|
+
readonly required: readonly ["config"];
|
|
1005
|
+
readonly properties: {
|
|
1006
|
+
readonly config: {
|
|
1007
|
+
readonly $ref: "#/$defs/StorageConfig";
|
|
1008
|
+
};
|
|
1009
|
+
readonly ext: {
|
|
1010
|
+
readonly $ref: "#/$defs/Ext";
|
|
1011
|
+
};
|
|
1012
|
+
};
|
|
1013
|
+
};
|
|
1014
|
+
readonly Ext: {
|
|
1015
|
+
readonly title: "Ext";
|
|
1016
|
+
readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
|
|
1017
|
+
readonly type: "object";
|
|
1018
|
+
readonly minProperties: 1;
|
|
1019
|
+
readonly additionalProperties: true;
|
|
1020
|
+
readonly propertyNames: {
|
|
1021
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
1022
|
+
};
|
|
1023
|
+
};
|
|
1024
|
+
readonly StorageConfig: {
|
|
1025
|
+
readonly title: "StorageConfig";
|
|
1026
|
+
readonly type: "object";
|
|
1027
|
+
readonly additionalProperties: false;
|
|
1028
|
+
readonly required: readonly ["id", "label", "settings", "state", "createdBy", "createdAt"];
|
|
1029
|
+
readonly description: "One storage config as the community holds it. Carries no secret.";
|
|
1030
|
+
readonly properties: {
|
|
1031
|
+
readonly id: {
|
|
1032
|
+
readonly $ref: "#/$defs/StorageConfigId";
|
|
1033
|
+
};
|
|
1034
|
+
readonly label: {
|
|
1035
|
+
readonly type: "string";
|
|
1036
|
+
readonly minLength: 1;
|
|
1037
|
+
readonly maxLength: 128;
|
|
1038
|
+
readonly 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.";
|
|
1039
|
+
};
|
|
1040
|
+
readonly settings: {
|
|
1041
|
+
readonly $ref: "#/$defs/StorageSettings";
|
|
1042
|
+
};
|
|
1043
|
+
readonly auth: {
|
|
1044
|
+
readonly $ref: "#/$defs/StorageAuth";
|
|
1045
|
+
};
|
|
1046
|
+
readonly capacityBytes: {
|
|
1047
|
+
readonly type: "integer";
|
|
1048
|
+
readonly minimum: 0;
|
|
1049
|
+
readonly 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.";
|
|
1050
|
+
};
|
|
1051
|
+
readonly state: {
|
|
1052
|
+
readonly $ref: "#/$defs/ConfigState";
|
|
1053
|
+
};
|
|
1054
|
+
readonly isDefault: {
|
|
1055
|
+
readonly type: "boolean";
|
|
1056
|
+
readonly description: "True for the config a room is assigned to when neither the community's policy nor its creator names one.";
|
|
1057
|
+
};
|
|
1058
|
+
readonly createdBy: {
|
|
1059
|
+
readonly type: "string";
|
|
1060
|
+
readonly pattern: "^did:";
|
|
1061
|
+
readonly maxLength: 2048;
|
|
1062
|
+
};
|
|
1063
|
+
readonly createdAt: {
|
|
1064
|
+
readonly type: "string";
|
|
1065
|
+
readonly format: "date-time";
|
|
1066
|
+
};
|
|
1067
|
+
readonly updatedBy: {
|
|
1068
|
+
readonly type: "string";
|
|
1069
|
+
readonly pattern: "^did:";
|
|
1070
|
+
readonly maxLength: 2048;
|
|
1071
|
+
};
|
|
1072
|
+
readonly updatedAt: {
|
|
1073
|
+
readonly type: "string";
|
|
1074
|
+
readonly format: "date-time";
|
|
1075
|
+
};
|
|
1076
|
+
};
|
|
1077
|
+
};
|
|
1078
|
+
readonly ConfigState: {
|
|
1079
|
+
readonly title: "ConfigState";
|
|
1080
|
+
readonly type: "string";
|
|
1081
|
+
readonly enum: readonly ["active", "draining", "retired"];
|
|
1082
|
+
readonly 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.";
|
|
1083
|
+
};
|
|
1084
|
+
readonly StorageAuth: {
|
|
1085
|
+
readonly title: "StorageAuth";
|
|
1086
|
+
readonly 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.";
|
|
1087
|
+
readonly oneOf: readonly [{
|
|
1088
|
+
readonly type: "object";
|
|
1089
|
+
readonly additionalProperties: false;
|
|
1090
|
+
readonly required: readonly ["mode", "account"];
|
|
1091
|
+
readonly properties: {
|
|
1092
|
+
readonly mode: {
|
|
1093
|
+
readonly const: "vta-account";
|
|
1094
|
+
};
|
|
1095
|
+
readonly account: {
|
|
1096
|
+
readonly $ref: "#/$defs/ExternalAccountId";
|
|
1097
|
+
};
|
|
1098
|
+
};
|
|
1099
|
+
}, {
|
|
1100
|
+
readonly type: "object";
|
|
1101
|
+
readonly additionalProperties: false;
|
|
1102
|
+
readonly required: readonly ["mode"];
|
|
1103
|
+
readonly properties: {
|
|
1104
|
+
readonly mode: {
|
|
1105
|
+
readonly const: "ambient";
|
|
1106
|
+
};
|
|
1107
|
+
};
|
|
1108
|
+
}, {
|
|
1109
|
+
readonly type: "object";
|
|
1110
|
+
readonly additionalProperties: false;
|
|
1111
|
+
readonly required: readonly ["mode"];
|
|
1112
|
+
readonly properties: {
|
|
1113
|
+
readonly mode: {
|
|
1114
|
+
readonly const: "sealed";
|
|
1115
|
+
};
|
|
1116
|
+
};
|
|
1117
|
+
}];
|
|
1118
|
+
};
|
|
1119
|
+
readonly ExternalAccountId: {
|
|
1120
|
+
readonly title: "ExternalAccountId";
|
|
1121
|
+
readonly type: "string";
|
|
1122
|
+
readonly minLength: 1;
|
|
1123
|
+
readonly maxLength: 64;
|
|
1124
|
+
readonly pattern: "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$";
|
|
1125
|
+
readonly 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.";
|
|
1126
|
+
};
|
|
1127
|
+
readonly StorageSettings: {
|
|
1128
|
+
readonly title: "StorageSettings";
|
|
1129
|
+
readonly description: "A config's backend settings, discriminated by `kind`. Never a secret: a credential is a StorageAuth, held elsewhere.";
|
|
1130
|
+
readonly oneOf: readonly [{
|
|
1131
|
+
readonly $ref: "#/$defs/LocalSettings";
|
|
1132
|
+
}, {
|
|
1133
|
+
readonly $ref: "#/$defs/S3Settings";
|
|
1134
|
+
}, {
|
|
1135
|
+
readonly $ref: "#/$defs/GcsSettings";
|
|
1136
|
+
}, {
|
|
1137
|
+
readonly $ref: "#/$defs/WalrusSettings";
|
|
1138
|
+
}];
|
|
1139
|
+
};
|
|
1140
|
+
readonly WalrusSettings: {
|
|
1141
|
+
readonly title: "WalrusSettings";
|
|
1142
|
+
readonly type: "object";
|
|
1143
|
+
readonly additionalProperties: false;
|
|
1144
|
+
readonly required: readonly ["kind", "relayUrl", "aggregatorUrl", "epochs", "extendBeforeEpochs"];
|
|
1145
|
+
readonly properties: {
|
|
1146
|
+
readonly kind: {
|
|
1147
|
+
readonly const: "walrus";
|
|
1148
|
+
};
|
|
1149
|
+
readonly relayUrl: {
|
|
1150
|
+
readonly type: "string";
|
|
1151
|
+
readonly format: "uri";
|
|
1152
|
+
readonly maxLength: 2048;
|
|
1153
|
+
readonly pattern: "^https://";
|
|
1154
|
+
readonly 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.";
|
|
1155
|
+
};
|
|
1156
|
+
readonly aggregatorUrl: {
|
|
1157
|
+
readonly type: "string";
|
|
1158
|
+
readonly format: "uri";
|
|
1159
|
+
readonly maxLength: 2048;
|
|
1160
|
+
readonly pattern: "^https://";
|
|
1161
|
+
readonly description: "The Walrus aggregator the community reads through.";
|
|
1162
|
+
};
|
|
1163
|
+
readonly epochs: {
|
|
1164
|
+
readonly type: "integer";
|
|
1165
|
+
readonly minimum: 1;
|
|
1166
|
+
readonly maximum: 53;
|
|
1167
|
+
readonly 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.";
|
|
1168
|
+
};
|
|
1169
|
+
readonly extendBeforeEpochs: {
|
|
1170
|
+
readonly type: "integer";
|
|
1171
|
+
readonly minimum: 1;
|
|
1172
|
+
readonly maximum: 52;
|
|
1173
|
+
readonly 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.";
|
|
1174
|
+
};
|
|
1175
|
+
};
|
|
1176
|
+
};
|
|
1177
|
+
readonly GcsSettings: {
|
|
1178
|
+
readonly title: "GcsSettings";
|
|
1179
|
+
readonly type: "object";
|
|
1180
|
+
readonly additionalProperties: false;
|
|
1181
|
+
readonly required: readonly ["kind", "bucket"];
|
|
1182
|
+
readonly properties: {
|
|
1183
|
+
readonly kind: {
|
|
1184
|
+
readonly const: "gcs";
|
|
1185
|
+
};
|
|
1186
|
+
readonly bucket: {
|
|
1187
|
+
readonly type: "string";
|
|
1188
|
+
readonly minLength: 3;
|
|
1189
|
+
readonly maxLength: 222;
|
|
1190
|
+
readonly pattern: "^[a-z0-9][a-z0-9._-]{1,220}[a-z0-9]$";
|
|
1191
|
+
readonly 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.";
|
|
1192
|
+
};
|
|
1193
|
+
readonly prefix: {
|
|
1194
|
+
readonly $ref: "#/$defs/ObjectPrefix";
|
|
1195
|
+
};
|
|
1196
|
+
};
|
|
1197
|
+
};
|
|
1198
|
+
readonly ObjectPrefix: {
|
|
1199
|
+
readonly title: "ObjectPrefix";
|
|
1200
|
+
readonly type: "string";
|
|
1201
|
+
readonly minLength: 1;
|
|
1202
|
+
readonly maxLength: 256;
|
|
1203
|
+
readonly pattern: "^[A-Za-z0-9!_.*'()/-]+/$";
|
|
1204
|
+
readonly 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.";
|
|
1205
|
+
};
|
|
1206
|
+
readonly S3Settings: {
|
|
1207
|
+
readonly title: "S3Settings";
|
|
1208
|
+
readonly type: "object";
|
|
1209
|
+
readonly additionalProperties: false;
|
|
1210
|
+
readonly required: readonly ["kind", "region", "bucket"];
|
|
1211
|
+
readonly properties: {
|
|
1212
|
+
readonly kind: {
|
|
1213
|
+
readonly const: "s3";
|
|
1214
|
+
};
|
|
1215
|
+
readonly endpoint: {
|
|
1216
|
+
readonly type: "string";
|
|
1217
|
+
readonly format: "uri";
|
|
1218
|
+
readonly maxLength: 2048;
|
|
1219
|
+
readonly pattern: "^https://";
|
|
1220
|
+
readonly description: "The S3 API endpoint, for a store other than AWS (R2, B2, MinIO). Absent means AWS S3 in `region`. HTTPS only.";
|
|
1221
|
+
};
|
|
1222
|
+
readonly region: {
|
|
1223
|
+
readonly type: "string";
|
|
1224
|
+
readonly minLength: 1;
|
|
1225
|
+
readonly maxLength: 64;
|
|
1226
|
+
readonly pattern: "^[a-z0-9-]+$";
|
|
1227
|
+
readonly description: "The bucket's region, as the store names it (`eu-west-1`; `auto` for R2).";
|
|
1228
|
+
};
|
|
1229
|
+
readonly bucket: {
|
|
1230
|
+
readonly type: "string";
|
|
1231
|
+
readonly minLength: 3;
|
|
1232
|
+
readonly maxLength: 63;
|
|
1233
|
+
readonly pattern: "^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$";
|
|
1234
|
+
readonly 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.";
|
|
1235
|
+
};
|
|
1236
|
+
readonly prefix: {
|
|
1237
|
+
readonly $ref: "#/$defs/ObjectPrefix";
|
|
1238
|
+
};
|
|
1239
|
+
readonly pathStyle: {
|
|
1240
|
+
readonly type: "boolean";
|
|
1241
|
+
readonly description: "Address the bucket in the path rather than the host name, as MinIO usually needs. Absent means virtual-hosted style.";
|
|
1242
|
+
};
|
|
1243
|
+
};
|
|
1244
|
+
};
|
|
1245
|
+
readonly LocalSettings: {
|
|
1246
|
+
readonly title: "LocalSettings";
|
|
1247
|
+
readonly type: "object";
|
|
1248
|
+
readonly additionalProperties: false;
|
|
1249
|
+
readonly required: readonly ["kind", "root"];
|
|
1250
|
+
readonly properties: {
|
|
1251
|
+
readonly kind: {
|
|
1252
|
+
readonly const: "local";
|
|
1253
|
+
};
|
|
1254
|
+
readonly root: {
|
|
1255
|
+
readonly type: "string";
|
|
1256
|
+
readonly minLength: 1;
|
|
1257
|
+
readonly maxLength: 1024;
|
|
1258
|
+
readonly pattern: "^/";
|
|
1259
|
+
readonly 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.";
|
|
1260
|
+
};
|
|
1261
|
+
};
|
|
1262
|
+
};
|
|
1263
|
+
readonly StorageConfigId: {
|
|
1264
|
+
readonly title: "StorageConfigId";
|
|
1265
|
+
readonly type: "string";
|
|
1266
|
+
readonly minLength: 1;
|
|
1267
|
+
readonly maxLength: 64;
|
|
1268
|
+
readonly pattern: "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$";
|
|
1269
|
+
readonly 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.";
|
|
1270
|
+
};
|
|
1271
|
+
};
|
|
1272
|
+
};
|
|
1273
|
+
};
|
|
1274
|
+
//# sourceMappingURL=payload.d.ts.map
|