@openvtc/trust-tasks 0.25.2 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/_shared/components.d.ts +10 -1
  3. package/dist/_shared/components.d.ts.map +1 -1
  4. package/dist/vtc/_shared/0.1/room-storage.d.ts +1 -1
  5. package/dist/vtc/_shared/0.1/room-storage.d.ts.map +1 -1
  6. package/dist/vtc/storage/configs/create/0.1/payload.d.ts +50 -10
  7. package/dist/vtc/storage/configs/create/0.1/payload.d.ts.map +1 -1
  8. package/dist/vtc/storage/configs/create/0.1/payload.js +24 -2
  9. package/dist/vtc/storage/configs/create/0.1/payload.js.map +1 -1
  10. package/dist/vtc/storage/configs/get/0.1/payload.d.ts +66 -10
  11. package/dist/vtc/storage/configs/get/0.1/payload.d.ts.map +1 -1
  12. package/dist/vtc/storage/configs/get/0.1/payload.js +32 -2
  13. package/dist/vtc/storage/configs/get/0.1/payload.js.map +1 -1
  14. package/dist/vtc/storage/configs/list/0.1/payload.d.ts +66 -10
  15. package/dist/vtc/storage/configs/list/0.1/payload.d.ts.map +1 -1
  16. package/dist/vtc/storage/configs/list/0.1/payload.js +32 -2
  17. package/dist/vtc/storage/configs/list/0.1/payload.js.map +1 -1
  18. package/dist/vtc/storage/configs/update/0.1/payload.d.ts +50 -10
  19. package/dist/vtc/storage/configs/update/0.1/payload.d.ts.map +1 -1
  20. package/dist/vtc/storage/configs/update/0.1/payload.js +24 -2
  21. package/dist/vtc/storage/configs/update/0.1/payload.js.map +1 -1
  22. package/dist/vtc/storage/credentials/set/0.1/payload.d.ts +46 -2
  23. package/dist/vtc/storage/credentials/set/0.1/payload.d.ts.map +1 -1
  24. package/dist/vtc/storage/credentials/set/0.1/payload.js +22 -0
  25. package/dist/vtc/storage/credentials/set/0.1/payload.js.map +1 -1
  26. package/package.json +1 -1
  27. package/src/_shared/components.ts +10 -1
  28. package/src/vtc/_shared/0.1/room-storage.ts +1 -1
  29. package/src/vtc/storage/configs/create/0.1/payload.ts +26 -4
  30. package/src/vtc/storage/configs/get/0.1/payload.ts +34 -4
  31. package/src/vtc/storage/configs/list/0.1/payload.ts +34 -4
  32. package/src/vtc/storage/configs/update/0.1/payload.ts +26 -4
  33. package/src/vtc/storage/credentials/set/0.1/payload.ts +24 -2
@@ -108,6 +108,10 @@ export const PAYLOAD_SCHEMA = {
108
108
  "none"
109
109
  ]
110
110
  },
111
+ "context": {
112
+ "$ref": "#/$defs/ExternalAccountContextId",
113
+ "description": "Present with `vta-account`."
114
+ },
111
115
  "account": {
112
116
  "$ref": "#/$defs/ExternalAccountId",
113
117
  "description": "Present with `vta-account`."
@@ -136,6 +140,13 @@ export const PAYLOAD_SCHEMA = {
136
140
  "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",
137
141
  "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."
138
142
  },
143
+ "ExternalAccountContextId": {
144
+ "title": "ExternalAccountContextId",
145
+ "type": "string",
146
+ "minLength": 1,
147
+ "maxLength": 256,
148
+ "description": "The context at the community's VTA that owns an external account. The VTA names an account by its context and its identifier, and decides who may use it by act scope in that context: the community must hold `external-auth-use` there, and be bound to the account, for the account to issue it anything. Naming a context grants nothing; the VTA's binding is the gate."
149
+ },
139
150
  "DigestMultibase": {
140
151
  "title": "DigestMultibase",
141
152
  "description": "A cryptographic digest as a multibase-encoded multihash — the encoding the W3C Verifiable Credentials Data Model 2.0 defines for `digestMultibase`, and the one `did:webvh` uses for its SCID and entry hashes.\n\nMultihash carries the hash algorithm in-band, so the value is self-describing and the wire format survives an algorithm change without a schema revision; multibase does the same for the base encoding, so a verifier never infers base58 from base64url by context. A bare hex string or a `sha-256:`-style prefix hard-codes one algorithm into the wire contract and is non-conforming here.\n\nThis definition constrains the *encoding only*. What the digest is computed over is stated by each referencing field, because it differs legitimately: a digest over a JSON document is taken over its RFC 8785 (JCS) canonicalization, while a digest over an opaque artifact is taken over its bytes. A field whose input is a JSON document and which does not name a canonicalization is not reproducible.\n\nRestricted to the two multibase headers W3C Controlled Identifiers 1.0 §2.4 normatively requires — `z` (base58btc) and `u` (base64url-no-pad). CID permits others but states that \"interoperability is not guaranteed between implementations using such values\", and a registry whose purpose is interoperability should not mint digests a conforming verifier may be unable to read. The alphabets are enforced rather than assumed: base58btc excludes 0, O, I and l, and an earlier permissive pattern let three published examples carry digests that were not valid base58 at all. base58btc is RECOMMENDED, for consistency with `did:key` and `did:webvh`.",
@@ -215,6 +226,10 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
215
226
  "none"
216
227
  ]
217
228
  },
229
+ "context": {
230
+ "$ref": "#/$defs/ExternalAccountContextId",
231
+ "description": "Present with `vta-account`."
232
+ },
218
233
  "account": {
219
234
  "$ref": "#/$defs/ExternalAccountId",
220
235
  "description": "Present with `vta-account`."
@@ -243,6 +258,13 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
243
258
  "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",
244
259
  "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."
245
260
  },
261
+ "ExternalAccountContextId": {
262
+ "title": "ExternalAccountContextId",
263
+ "type": "string",
264
+ "minLength": 1,
265
+ "maxLength": 256,
266
+ "description": "The context at the community's VTA that owns an external account. The VTA names an account by its context and its identifier, and decides who may use it by act scope in that context: the community must hold `external-auth-use` there, and be bound to the account, for the account to issue it anything. Naming a context grants nothing; the VTA's binding is the gate."
267
+ },
246
268
  "DigestMultibase": {
247
269
  "title": "DigestMultibase",
248
270
  "description": "A cryptographic digest as a multibase-encoded multihash — the encoding the W3C Verifiable Credentials Data Model 2.0 defines for `digestMultibase`, and the one `did:webvh` uses for its SCID and entry hashes.\n\nMultihash carries the hash algorithm in-band, so the value is self-describing and the wire format survives an algorithm change without a schema revision; multibase does the same for the base encoding, so a verifier never infers base58 from base64url by context. A bare hex string or a `sha-256:`-style prefix hard-codes one algorithm into the wire contract and is non-conforming here.\n\nThis definition constrains the *encoding only*. What the digest is computed over is stated by each referencing field, because it differs legitimately: a digest over a JSON document is taken over its RFC 8785 (JCS) canonicalization, while a digest over an opaque artifact is taken over its bytes. A field whose input is a JSON document and which does not name a canonicalization is not reproducible.\n\nRestricted to the two multibase headers W3C Controlled Identifiers 1.0 §2.4 normatively requires — `z` (base58btc) and `u` (base64url-no-pad). CID permits others but states that \"interoperability is not guaranteed between implementations using such values\", and a registry whose purpose is interoperability should not mint digests a conforming verifier may be unable to read. The alphabets are enforced rather than assumed: base58btc excludes 0, O, I and l, and an earlier permissive pattern let three published examples carry digests that were not valid base58 at all. base58btc is RECOMMENDED, for consistency with `did:key` and `did:webvh`.",
@@ -1 +1 @@
1
- {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../../../../src/vtc/storage/credentials/set/0.1/payload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../../../../src/vtc/storage/credentials/set/0.1/payload.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openvtc/trust-tasks",
3
- "version": "0.25.2",
3
+ "version": "0.26.0",
4
4
  "description": "Generated TypeScript bindings for the Trust Tasks framework registry.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -687,6 +687,10 @@ export type ExpiresAt = string;
687
687
  * @minItems 1
688
688
  */
689
689
  export type ExtCritical = [string, ...string[]];
690
+ /**
691
+ * The context at the community's VTA that owns an external account. The VTA names an account by its context and its identifier, and decides who may use it by act scope in that context: the community must hold `external-auth-use` there, and be bound to the account, for the account to issue it anything. Naming a context grants nothing; the VTA's binding is the gate.
692
+ */
693
+ export type ExternalAccountContextId = string;
690
694
  /**
691
695
  * 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.
692
696
  */
@@ -1222,7 +1226,7 @@ export type Slot = string;
1222
1226
  /**
1223
1227
  * How the community authenticates to a config's backend. Absent on a `local` config, which needs none.
1224
1228
  *
1225
- * `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.
1229
+ * `vta-account` (RECOMMENDED): an external account in the community's VTA, named by the context that owns it and its identifier there. 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.
1226
1230
  *
1227
1231
  * `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`.
1228
1232
  *
@@ -1231,6 +1235,7 @@ export type Slot = string;
1231
1235
  export type StorageAuth =
1232
1236
  | {
1233
1237
  mode: "vta-account";
1238
+ context: ExternalAccountContextId;
1234
1239
  account: ExternalAccountId;
1235
1240
  }
1236
1241
  | {
@@ -4884,6 +4889,10 @@ export interface CredentialScopeCeiling {
4884
4889
  */
4885
4890
  export interface CredentialState {
4886
4891
  status: "vta-account" | "ambient" | "sealed" | "required" | "none";
4892
+ /**
4893
+ * Present with `vta-account`.
4894
+ */
4895
+ context?: ExternalAccountContextId;
4887
4896
  /**
4888
4897
  * Present with `vta-account`.
4889
4898
  */
@@ -14,4 +14,4 @@ export interface VTCSharedRoomStorageDefinitions {
14
14
  * The definitions this shared schema publishes, hoisted to one declaration each.
15
15
  * See "../../../_shared/components.js".
16
16
  */
17
- export type { ConfigState, CredentialState, EffectiveLimits, ExternalAccountId, GcsSettings, HostedRoom, LimitSource, LimitTarget, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigFacts, StorageConfigId, StorageHealth, StorageKind, StorageSettings, WalrusSettings } from "../../../_shared/components.js";
17
+ export type { ConfigState, CredentialState, EffectiveLimits, ExternalAccountContextId, ExternalAccountId, GcsSettings, HostedRoom, LimitSource, LimitTarget, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigFacts, StorageConfigId, StorageHealth, StorageKind, StorageSettings, WalrusSettings } from "../../../_shared/components.js";
@@ -3,7 +3,7 @@
3
3
  * Source: specs/vtc/storage/configs/create/0.1/payload.schema.json
4
4
  */
5
5
 
6
- import type { ConfigState, Ext, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigId, StorageSettings, WalrusSettings } from "../../../../../_shared/components.js";
6
+ import type { ConfigState, Ext, ExternalAccountContextId, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigId, StorageSettings, WalrusSettings } from "../../../../../_shared/components.js";
7
7
 
8
8
 
9
9
  /**
@@ -37,7 +37,7 @@ export interface VTCStorageConfigsCreateResponsePayload {
37
37
  }
38
38
 
39
39
  /** Shared definitions this specification references, re-exported under the names it used to declare them with. */
40
- export type { ConfigState, Ext, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigId, StorageSettings, WalrusSettings };
40
+ export type { ConfigState, Ext, ExternalAccountContextId, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigId, StorageSettings, WalrusSettings };
41
41
 
42
42
  /** Trust Task type URI. */
43
43
  export const TYPE_URI = "https://trusttasks.org/spec/vtc/storage/configs/create/0.1" as const;
@@ -209,19 +209,23 @@ export const PAYLOAD_SCHEMA = {
209
209
  },
210
210
  "StorageAuth": {
211
211
  "title": "StorageAuth",
212
- "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.",
212
+ "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, named by the context that owns it and its identifier there. 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.",
213
213
  "oneOf": [
214
214
  {
215
215
  "type": "object",
216
216
  "additionalProperties": false,
217
217
  "required": [
218
218
  "mode",
219
+ "context",
219
220
  "account"
220
221
  ],
221
222
  "properties": {
222
223
  "mode": {
223
224
  "const": "vta-account"
224
225
  },
226
+ "context": {
227
+ "$ref": "#/$defs/ExternalAccountContextId"
228
+ },
225
229
  "account": {
226
230
  "$ref": "#/$defs/ExternalAccountId"
227
231
  }
@@ -261,6 +265,13 @@ export const PAYLOAD_SCHEMA = {
261
265
  "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",
262
266
  "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."
263
267
  },
268
+ "ExternalAccountContextId": {
269
+ "title": "ExternalAccountContextId",
270
+ "type": "string",
271
+ "minLength": 1,
272
+ "maxLength": 256,
273
+ "description": "The context at the community's VTA that owns an external account. The VTA names an account by its context and its identifier, and decides who may use it by act scope in that context: the community must hold `external-auth-use` there, and be bound to the account, for the account to issue it anything. Naming a context grants nothing; the VTA's binding is the gate."
274
+ },
264
275
  "StorageSettings": {
265
276
  "title": "StorageSettings",
266
277
  "description": "A config's backend settings, discriminated by `kind`. Never a secret: a credential is a StorageAuth, held elsewhere.",
@@ -534,19 +545,23 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
534
545
  },
535
546
  "StorageAuth": {
536
547
  "title": "StorageAuth",
537
- "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.",
548
+ "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, named by the context that owns it and its identifier there. 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.",
538
549
  "oneOf": [
539
550
  {
540
551
  "type": "object",
541
552
  "additionalProperties": false,
542
553
  "required": [
543
554
  "mode",
555
+ "context",
544
556
  "account"
545
557
  ],
546
558
  "properties": {
547
559
  "mode": {
548
560
  "const": "vta-account"
549
561
  },
562
+ "context": {
563
+ "$ref": "#/$defs/ExternalAccountContextId"
564
+ },
550
565
  "account": {
551
566
  "$ref": "#/$defs/ExternalAccountId"
552
567
  }
@@ -586,6 +601,13 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
586
601
  "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",
587
602
  "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."
588
603
  },
604
+ "ExternalAccountContextId": {
605
+ "title": "ExternalAccountContextId",
606
+ "type": "string",
607
+ "minLength": 1,
608
+ "maxLength": 256,
609
+ "description": "The context at the community's VTA that owns an external account. The VTA names an account by its context and its identifier, and decides who may use it by act scope in that context: the community must hold `external-auth-use` there, and be bound to the account, for the account to issue it anything. Naming a context grants nothing; the VTA's binding is the gate."
610
+ },
589
611
  "StorageSettings": {
590
612
  "title": "StorageSettings",
591
613
  "description": "A config's backend settings, discriminated by `kind`. Never a secret: a credential is a StorageAuth, held elsewhere.",
@@ -3,7 +3,7 @@
3
3
  * Source: specs/vtc/storage/configs/get/0.1/payload.schema.json
4
4
  */
5
5
 
6
- import type { ConfigState, CredentialState, DigestMultibase, Ext, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigFacts, StorageConfigId, StorageHealth, StorageSettings, WalrusSettings } from "../../../../../_shared/components.js";
6
+ import type { ConfigState, CredentialState, DigestMultibase, Ext, ExternalAccountContextId, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigFacts, StorageConfigId, StorageHealth, StorageSettings, WalrusSettings } from "../../../../../_shared/components.js";
7
7
 
8
8
 
9
9
  /**
@@ -25,7 +25,7 @@ export interface VTCStorageConfigsGetResponsePayload {
25
25
  }
26
26
 
27
27
  /** Shared definitions this specification references, re-exported under the names it used to declare them with. */
28
- export type { ConfigState, CredentialState, DigestMultibase, Ext, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigFacts, StorageConfigId, StorageHealth, StorageSettings, WalrusSettings };
28
+ export type { ConfigState, CredentialState, DigestMultibase, Ext, ExternalAccountContextId, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigFacts, StorageConfigId, StorageHealth, StorageSettings, WalrusSettings };
29
29
 
30
30
  /** Trust Task type URI. */
31
31
  export const TYPE_URI = "https://trusttasks.org/spec/vtc/storage/configs/get/0.1" as const;
@@ -220,6 +220,10 @@ export const PAYLOAD_SCHEMA = {
220
220
  "none"
221
221
  ]
222
222
  },
223
+ "context": {
224
+ "$ref": "#/$defs/ExternalAccountContextId",
225
+ "description": "Present with `vta-account`."
226
+ },
223
227
  "account": {
224
228
  "$ref": "#/$defs/ExternalAccountId",
225
229
  "description": "Present with `vta-account`."
@@ -248,6 +252,13 @@ export const PAYLOAD_SCHEMA = {
248
252
  "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",
249
253
  "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."
250
254
  },
255
+ "ExternalAccountContextId": {
256
+ "title": "ExternalAccountContextId",
257
+ "type": "string",
258
+ "minLength": 1,
259
+ "maxLength": 256,
260
+ "description": "The context at the community's VTA that owns an external account. The VTA names an account by its context and its identifier, and decides who may use it by act scope in that context: the community must hold `external-auth-use` there, and be bound to the account, for the account to issue it anything. Naming a context grants nothing; the VTA's binding is the gate."
261
+ },
251
262
  "DigestMultibase": {
252
263
  "title": "DigestMultibase",
253
264
  "description": "A cryptographic digest as a multibase-encoded multihash — the encoding the W3C Verifiable Credentials Data Model 2.0 defines for `digestMultibase`, and the one `did:webvh` uses for its SCID and entry hashes.\n\nMultihash carries the hash algorithm in-band, so the value is self-describing and the wire format survives an algorithm change without a schema revision; multibase does the same for the base encoding, so a verifier never infers base58 from base64url by context. A bare hex string or a `sha-256:`-style prefix hard-codes one algorithm into the wire contract and is non-conforming here.\n\nThis definition constrains the *encoding only*. What the digest is computed over is stated by each referencing field, because it differs legitimately: a digest over a JSON document is taken over its RFC 8785 (JCS) canonicalization, while a digest over an opaque artifact is taken over its bytes. A field whose input is a JSON document and which does not name a canonicalization is not reproducible.\n\nRestricted to the two multibase headers W3C Controlled Identifiers 1.0 §2.4 normatively requires — `z` (base58btc) and `u` (base64url-no-pad). CID permits others but states that \"interoperability is not guaranteed between implementations using such values\", and a registry whose purpose is interoperability should not mint digests a conforming verifier may be unable to read. The alphabets are enforced rather than assumed: base58btc excludes 0, O, I and l, and an earlier permissive pattern let three published examples carry digests that were not valid base58 at all. base58btc is RECOMMENDED, for consistency with `did:key` and `did:webvh`.",
@@ -331,19 +342,23 @@ export const PAYLOAD_SCHEMA = {
331
342
  },
332
343
  "StorageAuth": {
333
344
  "title": "StorageAuth",
334
- "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.",
345
+ "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, named by the context that owns it and its identifier there. 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.",
335
346
  "oneOf": [
336
347
  {
337
348
  "type": "object",
338
349
  "additionalProperties": false,
339
350
  "required": [
340
351
  "mode",
352
+ "context",
341
353
  "account"
342
354
  ],
343
355
  "properties": {
344
356
  "mode": {
345
357
  "const": "vta-account"
346
358
  },
359
+ "context": {
360
+ "$ref": "#/$defs/ExternalAccountContextId"
361
+ },
347
362
  "account": {
348
363
  "$ref": "#/$defs/ExternalAccountId"
349
364
  }
@@ -701,6 +716,10 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
701
716
  "none"
702
717
  ]
703
718
  },
719
+ "context": {
720
+ "$ref": "#/$defs/ExternalAccountContextId",
721
+ "description": "Present with `vta-account`."
722
+ },
704
723
  "account": {
705
724
  "$ref": "#/$defs/ExternalAccountId",
706
725
  "description": "Present with `vta-account`."
@@ -729,6 +748,13 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
729
748
  "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",
730
749
  "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."
731
750
  },
751
+ "ExternalAccountContextId": {
752
+ "title": "ExternalAccountContextId",
753
+ "type": "string",
754
+ "minLength": 1,
755
+ "maxLength": 256,
756
+ "description": "The context at the community's VTA that owns an external account. The VTA names an account by its context and its identifier, and decides who may use it by act scope in that context: the community must hold `external-auth-use` there, and be bound to the account, for the account to issue it anything. Naming a context grants nothing; the VTA's binding is the gate."
757
+ },
732
758
  "DigestMultibase": {
733
759
  "title": "DigestMultibase",
734
760
  "description": "A cryptographic digest as a multibase-encoded multihash — the encoding the W3C Verifiable Credentials Data Model 2.0 defines for `digestMultibase`, and the one `did:webvh` uses for its SCID and entry hashes.\n\nMultihash carries the hash algorithm in-band, so the value is self-describing and the wire format survives an algorithm change without a schema revision; multibase does the same for the base encoding, so a verifier never infers base58 from base64url by context. A bare hex string or a `sha-256:`-style prefix hard-codes one algorithm into the wire contract and is non-conforming here.\n\nThis definition constrains the *encoding only*. What the digest is computed over is stated by each referencing field, because it differs legitimately: a digest over a JSON document is taken over its RFC 8785 (JCS) canonicalization, while a digest over an opaque artifact is taken over its bytes. A field whose input is a JSON document and which does not name a canonicalization is not reproducible.\n\nRestricted to the two multibase headers W3C Controlled Identifiers 1.0 §2.4 normatively requires — `z` (base58btc) and `u` (base64url-no-pad). CID permits others but states that \"interoperability is not guaranteed between implementations using such values\", and a registry whose purpose is interoperability should not mint digests a conforming verifier may be unable to read. The alphabets are enforced rather than assumed: base58btc excludes 0, O, I and l, and an earlier permissive pattern let three published examples carry digests that were not valid base58 at all. base58btc is RECOMMENDED, for consistency with `did:key` and `did:webvh`.",
@@ -812,19 +838,23 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
812
838
  },
813
839
  "StorageAuth": {
814
840
  "title": "StorageAuth",
815
- "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.",
841
+ "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, named by the context that owns it and its identifier there. 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.",
816
842
  "oneOf": [
817
843
  {
818
844
  "type": "object",
819
845
  "additionalProperties": false,
820
846
  "required": [
821
847
  "mode",
848
+ "context",
822
849
  "account"
823
850
  ],
824
851
  "properties": {
825
852
  "mode": {
826
853
  "const": "vta-account"
827
854
  },
855
+ "context": {
856
+ "$ref": "#/$defs/ExternalAccountContextId"
857
+ },
828
858
  "account": {
829
859
  "$ref": "#/$defs/ExternalAccountId"
830
860
  }
@@ -3,7 +3,7 @@
3
3
  * Source: specs/vtc/storage/configs/list/0.1/payload.schema.json
4
4
  */
5
5
 
6
- import type { ConfigState, CredentialState, DigestMultibase, Ext, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigFacts, StorageConfigId, StorageHealth, StorageKind, StorageSettings, WalrusSettings } from "../../../../../_shared/components.js";
6
+ import type { ConfigState, CredentialState, DigestMultibase, Ext, ExternalAccountContextId, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigFacts, StorageConfigId, StorageHealth, StorageKind, StorageSettings, WalrusSettings } from "../../../../../_shared/components.js";
7
7
 
8
8
 
9
9
  /**
@@ -42,7 +42,7 @@ export interface ConfigItem {
42
42
  }
43
43
 
44
44
  /** Shared definitions this specification references, re-exported under the names it used to declare them with. */
45
- export type { ConfigState, CredentialState, DigestMultibase, Ext, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigFacts, StorageConfigId, StorageHealth, StorageKind, StorageSettings, WalrusSettings };
45
+ export type { ConfigState, CredentialState, DigestMultibase, Ext, ExternalAccountContextId, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigFacts, StorageConfigId, StorageHealth, StorageKind, StorageSettings, WalrusSettings };
46
46
 
47
47
  /** Trust Task type URI. */
48
48
  export const TYPE_URI = "https://trusttasks.org/spec/vtc/storage/configs/list/0.1" as const;
@@ -257,6 +257,10 @@ export const PAYLOAD_SCHEMA = {
257
257
  "none"
258
258
  ]
259
259
  },
260
+ "context": {
261
+ "$ref": "#/$defs/ExternalAccountContextId",
262
+ "description": "Present with `vta-account`."
263
+ },
260
264
  "account": {
261
265
  "$ref": "#/$defs/ExternalAccountId",
262
266
  "description": "Present with `vta-account`."
@@ -285,6 +289,13 @@ export const PAYLOAD_SCHEMA = {
285
289
  "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",
286
290
  "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."
287
291
  },
292
+ "ExternalAccountContextId": {
293
+ "title": "ExternalAccountContextId",
294
+ "type": "string",
295
+ "minLength": 1,
296
+ "maxLength": 256,
297
+ "description": "The context at the community's VTA that owns an external account. The VTA names an account by its context and its identifier, and decides who may use it by act scope in that context: the community must hold `external-auth-use` there, and be bound to the account, for the account to issue it anything. Naming a context grants nothing; the VTA's binding is the gate."
298
+ },
288
299
  "DigestMultibase": {
289
300
  "title": "DigestMultibase",
290
301
  "description": "A cryptographic digest as a multibase-encoded multihash — the encoding the W3C Verifiable Credentials Data Model 2.0 defines for `digestMultibase`, and the one `did:webvh` uses for its SCID and entry hashes.\n\nMultihash carries the hash algorithm in-band, so the value is self-describing and the wire format survives an algorithm change without a schema revision; multibase does the same for the base encoding, so a verifier never infers base58 from base64url by context. A bare hex string or a `sha-256:`-style prefix hard-codes one algorithm into the wire contract and is non-conforming here.\n\nThis definition constrains the *encoding only*. What the digest is computed over is stated by each referencing field, because it differs legitimately: a digest over a JSON document is taken over its RFC 8785 (JCS) canonicalization, while a digest over an opaque artifact is taken over its bytes. A field whose input is a JSON document and which does not name a canonicalization is not reproducible.\n\nRestricted to the two multibase headers W3C Controlled Identifiers 1.0 §2.4 normatively requires — `z` (base58btc) and `u` (base64url-no-pad). CID permits others but states that \"interoperability is not guaranteed between implementations using such values\", and a registry whose purpose is interoperability should not mint digests a conforming verifier may be unable to read. The alphabets are enforced rather than assumed: base58btc excludes 0, O, I and l, and an earlier permissive pattern let three published examples carry digests that were not valid base58 at all. base58btc is RECOMMENDED, for consistency with `did:key` and `did:webvh`.",
@@ -368,19 +379,23 @@ export const PAYLOAD_SCHEMA = {
368
379
  },
369
380
  "StorageAuth": {
370
381
  "title": "StorageAuth",
371
- "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.",
382
+ "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, named by the context that owns it and its identifier there. 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.",
372
383
  "oneOf": [
373
384
  {
374
385
  "type": "object",
375
386
  "additionalProperties": false,
376
387
  "required": [
377
388
  "mode",
389
+ "context",
378
390
  "account"
379
391
  ],
380
392
  "properties": {
381
393
  "mode": {
382
394
  "const": "vta-account"
383
395
  },
396
+ "context": {
397
+ "$ref": "#/$defs/ExternalAccountContextId"
398
+ },
384
399
  "account": {
385
400
  "$ref": "#/$defs/ExternalAccountId"
386
401
  }
@@ -757,6 +772,10 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
757
772
  "none"
758
773
  ]
759
774
  },
775
+ "context": {
776
+ "$ref": "#/$defs/ExternalAccountContextId",
777
+ "description": "Present with `vta-account`."
778
+ },
760
779
  "account": {
761
780
  "$ref": "#/$defs/ExternalAccountId",
762
781
  "description": "Present with `vta-account`."
@@ -785,6 +804,13 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
785
804
  "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",
786
805
  "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."
787
806
  },
807
+ "ExternalAccountContextId": {
808
+ "title": "ExternalAccountContextId",
809
+ "type": "string",
810
+ "minLength": 1,
811
+ "maxLength": 256,
812
+ "description": "The context at the community's VTA that owns an external account. The VTA names an account by its context and its identifier, and decides who may use it by act scope in that context: the community must hold `external-auth-use` there, and be bound to the account, for the account to issue it anything. Naming a context grants nothing; the VTA's binding is the gate."
813
+ },
788
814
  "DigestMultibase": {
789
815
  "title": "DigestMultibase",
790
816
  "description": "A cryptographic digest as a multibase-encoded multihash — the encoding the W3C Verifiable Credentials Data Model 2.0 defines for `digestMultibase`, and the one `did:webvh` uses for its SCID and entry hashes.\n\nMultihash carries the hash algorithm in-band, so the value is self-describing and the wire format survives an algorithm change without a schema revision; multibase does the same for the base encoding, so a verifier never infers base58 from base64url by context. A bare hex string or a `sha-256:`-style prefix hard-codes one algorithm into the wire contract and is non-conforming here.\n\nThis definition constrains the *encoding only*. What the digest is computed over is stated by each referencing field, because it differs legitimately: a digest over a JSON document is taken over its RFC 8785 (JCS) canonicalization, while a digest over an opaque artifact is taken over its bytes. A field whose input is a JSON document and which does not name a canonicalization is not reproducible.\n\nRestricted to the two multibase headers W3C Controlled Identifiers 1.0 §2.4 normatively requires — `z` (base58btc) and `u` (base64url-no-pad). CID permits others but states that \"interoperability is not guaranteed between implementations using such values\", and a registry whose purpose is interoperability should not mint digests a conforming verifier may be unable to read. The alphabets are enforced rather than assumed: base58btc excludes 0, O, I and l, and an earlier permissive pattern let three published examples carry digests that were not valid base58 at all. base58btc is RECOMMENDED, for consistency with `did:key` and `did:webvh`.",
@@ -868,19 +894,23 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
868
894
  },
869
895
  "StorageAuth": {
870
896
  "title": "StorageAuth",
871
- "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.",
897
+ "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, named by the context that owns it and its identifier there. 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.",
872
898
  "oneOf": [
873
899
  {
874
900
  "type": "object",
875
901
  "additionalProperties": false,
876
902
  "required": [
877
903
  "mode",
904
+ "context",
878
905
  "account"
879
906
  ],
880
907
  "properties": {
881
908
  "mode": {
882
909
  "const": "vta-account"
883
910
  },
911
+ "context": {
912
+ "$ref": "#/$defs/ExternalAccountContextId"
913
+ },
884
914
  "account": {
885
915
  "$ref": "#/$defs/ExternalAccountId"
886
916
  }
@@ -3,7 +3,7 @@
3
3
  * Source: specs/vtc/storage/configs/update/0.1/payload.schema.json
4
4
  */
5
5
 
6
- import type { ConfigState, Ext, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigId, StorageSettings, WalrusSettings } from "../../../../../_shared/components.js";
6
+ import type { ConfigState, Ext, ExternalAccountContextId, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigId, StorageSettings, WalrusSettings } from "../../../../../_shared/components.js";
7
7
 
8
8
 
9
9
  /**
@@ -37,7 +37,7 @@ export interface VTCStorageConfigsUpdateResponsePayload {
37
37
  }
38
38
 
39
39
  /** Shared definitions this specification references, re-exported under the names it used to declare them with. */
40
- export type { ConfigState, Ext, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigId, StorageSettings, WalrusSettings };
40
+ export type { ConfigState, Ext, ExternalAccountContextId, ExternalAccountId, GcsSettings, LocalSettings, ObjectPrefix, S3Settings, StorageAuth, StorageConfig, StorageConfigId, StorageSettings, WalrusSettings };
41
41
 
42
42
  /** Trust Task type URI. */
43
43
  export const TYPE_URI = "https://trusttasks.org/spec/vtc/storage/configs/update/0.1" as const;
@@ -208,19 +208,23 @@ export const PAYLOAD_SCHEMA = {
208
208
  },
209
209
  "StorageAuth": {
210
210
  "title": "StorageAuth",
211
- "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.",
211
+ "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, named by the context that owns it and its identifier there. 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.",
212
212
  "oneOf": [
213
213
  {
214
214
  "type": "object",
215
215
  "additionalProperties": false,
216
216
  "required": [
217
217
  "mode",
218
+ "context",
218
219
  "account"
219
220
  ],
220
221
  "properties": {
221
222
  "mode": {
222
223
  "const": "vta-account"
223
224
  },
225
+ "context": {
226
+ "$ref": "#/$defs/ExternalAccountContextId"
227
+ },
224
228
  "account": {
225
229
  "$ref": "#/$defs/ExternalAccountId"
226
230
  }
@@ -260,6 +264,13 @@ export const PAYLOAD_SCHEMA = {
260
264
  "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",
261
265
  "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."
262
266
  },
267
+ "ExternalAccountContextId": {
268
+ "title": "ExternalAccountContextId",
269
+ "type": "string",
270
+ "minLength": 1,
271
+ "maxLength": 256,
272
+ "description": "The context at the community's VTA that owns an external account. The VTA names an account by its context and its identifier, and decides who may use it by act scope in that context: the community must hold `external-auth-use` there, and be bound to the account, for the account to issue it anything. Naming a context grants nothing; the VTA's binding is the gate."
273
+ },
263
274
  "StorageSettings": {
264
275
  "title": "StorageSettings",
265
276
  "description": "A config's backend settings, discriminated by `kind`. Never a secret: a credential is a StorageAuth, held elsewhere.",
@@ -533,19 +544,23 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
533
544
  },
534
545
  "StorageAuth": {
535
546
  "title": "StorageAuth",
536
- "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.",
547
+ "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, named by the context that owns it and its identifier there. 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.",
537
548
  "oneOf": [
538
549
  {
539
550
  "type": "object",
540
551
  "additionalProperties": false,
541
552
  "required": [
542
553
  "mode",
554
+ "context",
543
555
  "account"
544
556
  ],
545
557
  "properties": {
546
558
  "mode": {
547
559
  "const": "vta-account"
548
560
  },
561
+ "context": {
562
+ "$ref": "#/$defs/ExternalAccountContextId"
563
+ },
549
564
  "account": {
550
565
  "$ref": "#/$defs/ExternalAccountId"
551
566
  }
@@ -585,6 +600,13 @@ export const RESPONSE_PAYLOAD_SCHEMA = {
585
600
  "pattern": "^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$",
586
601
  "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."
587
602
  },
603
+ "ExternalAccountContextId": {
604
+ "title": "ExternalAccountContextId",
605
+ "type": "string",
606
+ "minLength": 1,
607
+ "maxLength": 256,
608
+ "description": "The context at the community's VTA that owns an external account. The VTA names an account by its context and its identifier, and decides who may use it by act scope in that context: the community must hold `external-auth-use` there, and be bound to the account, for the account to issue it anything. Naming a context grants nothing; the VTA's binding is the gate."
609
+ },
588
610
  "StorageSettings": {
589
611
  "title": "StorageSettings",
590
612
  "description": "A config's backend settings, discriminated by `kind`. Never a secret: a credential is a StorageAuth, held elsewhere.",