@openvtc/trust-tasks 0.27.1 → 0.27.3
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 +218 -0
- package/dist/_runtime/consume.d.ts +2 -1
- package/dist/_runtime/consume.d.ts.map +1 -1
- package/dist/_runtime/consume.js +26 -1
- package/dist/_runtime/consume.js.map +1 -1
- package/dist/_runtime/document.d.ts +9 -0
- package/dist/_runtime/document.d.ts.map +1 -1
- package/dist/_runtime/document.js +15 -1
- package/dist/_runtime/document.js.map +1 -1
- package/dist/_runtime/freshness.d.ts +4 -2
- package/dist/_runtime/freshness.d.ts.map +1 -1
- package/dist/_runtime/freshness.js +9 -6
- package/dist/_runtime/freshness.js.map +1 -1
- package/dist/_shared/components.d.ts +346 -23
- package/dist/_shared/components.d.ts.map +1 -1
- 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 +4 -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 +4 -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 +4 -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 +4 -2
- package/dist/device/register/0.2/payload.js.map +1 -1
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -1
- 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/create/0.2/payload.d.ts +534 -0
- package/dist/rooms/create/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/create/0.2/payload.js +293 -0
- package/dist/rooms/create/0.2/payload.js.map +1 -0
- package/dist/rooms/epoch/chain/0.2/payload.d.ts +534 -0
- package/dist/rooms/epoch/chain/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/epoch/chain/0.2/payload.js +292 -0
- package/dist/rooms/epoch/chain/0.2/payload.js.map +1 -0
- package/dist/rooms/epoch/prune/0.2/payload.d.ts +467 -0
- package/dist/rooms/epoch/prune/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/epoch/prune/0.2/payload.js +251 -0
- package/dist/rooms/epoch/prune/0.2/payload.js.map +1 -0
- package/dist/rooms/info/0.2/payload.d.ts +1129 -0
- package/dist/rooms/info/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/info/0.2/payload.js +618 -0
- package/dist/rooms/info/0.2/payload.js.map +1 -0
- package/dist/rooms/keys/backfill/0.2/payload.d.ts +380 -0
- package/dist/rooms/keys/backfill/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/keys/backfill/0.2/payload.js +197 -0
- package/dist/rooms/keys/backfill/0.2/payload.js.map +1 -0
- package/dist/rooms/keys/browse/0.1/payload.d.ts +4 -4
- package/dist/rooms/keys/browse/0.1/payload.js +2 -2
- package/dist/rooms/keys/browse/0.1/payload.js.map +1 -1
- package/dist/rooms/keys/browse/0.2/payload.d.ts +941 -0
- package/dist/rooms/keys/browse/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/keys/browse/0.2/payload.js +558 -0
- package/dist/rooms/keys/browse/0.2/payload.js.map +1 -0
- package/dist/rooms/keys/chain/0.2/payload.d.ts +450 -0
- package/dist/rooms/keys/chain/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/keys/chain/0.2/payload.js +248 -0
- package/dist/rooms/keys/chain/0.2/payload.js.map +1 -0
- package/dist/rooms/keys/profile/read/0.1/payload.d.ts +4 -4
- package/dist/rooms/keys/profile/read/0.1/payload.js +2 -2
- package/dist/rooms/keys/profile/read/0.1/payload.js.map +1 -1
- package/dist/rooms/keys/read/0.1/payload.d.ts +4 -4
- package/dist/rooms/keys/read/0.1/payload.js +2 -2
- package/dist/rooms/keys/read/0.1/payload.js.map +1 -1
- package/dist/rooms/owner/anchor/0.1/payload.d.ts +4 -4
- package/dist/rooms/owner/anchor/0.1/payload.js +2 -2
- package/dist/rooms/owner/anchor/0.1/payload.js.map +1 -1
- package/dist/rooms/records/get/0.1/payload.d.ts +4 -4
- package/dist/rooms/records/get/0.1/payload.js +2 -2
- package/dist/rooms/records/get/0.1/payload.js.map +1 -1
- package/dist/rooms/records/get/0.2/payload.d.ts +4 -4
- package/dist/rooms/records/get/0.2/payload.js +2 -2
- package/dist/rooms/records/get/0.2/payload.js.map +1 -1
- package/dist/rooms/records/list/0.1/payload.d.ts +4 -4
- package/dist/rooms/records/list/0.1/payload.js +2 -2
- package/dist/rooms/records/list/0.1/payload.js.map +1 -1
- package/dist/rooms/records/list/0.2/payload.d.ts +4 -4
- package/dist/rooms/records/list/0.2/payload.js +2 -2
- package/dist/rooms/records/list/0.2/payload.js.map +1 -1
- package/dist/rooms/records/list/0.3/payload.d.ts +970 -0
- package/dist/rooms/records/list/0.3/payload.d.ts.map +1 -0
- package/dist/rooms/records/list/0.3/payload.js +526 -0
- package/dist/rooms/records/list/0.3/payload.js.map +1 -0
- package/dist/rooms/records/prune/0.1/payload.d.ts +706 -0
- package/dist/rooms/records/prune/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/records/prune/0.1/payload.js +374 -0
- package/dist/rooms/records/prune/0.1/payload.js.map +1 -0
- package/dist/rooms/records/put/0.3/payload.d.ts +1212 -0
- package/dist/rooms/records/put/0.3/payload.d.ts.map +1 -0
- package/dist/rooms/records/put/0.3/payload.js +646 -0
- package/dist/rooms/records/put/0.3/payload.js.map +1 -0
- package/dist/rooms/records/retention/set/0.1/payload.d.ts +521 -0
- package/dist/rooms/records/retention/set/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/records/retention/set/0.1/payload.js +276 -0
- package/dist/rooms/records/retention/set/0.1/payload.js.map +1 -0
- package/dist/vault/credentials/present/0.1/payload.d.ts +407 -0
- package/dist/vault/credentials/present/0.1/payload.d.ts.map +1 -0
- package/dist/vault/credentials/present/0.1/payload.js +217 -0
- package/dist/vault/credentials/present/0.1/payload.js.map +1 -0
- package/dist/vault/credentials/query/0.1/payload.d.ts +12 -0
- package/dist/vault/credentials/query/0.1/payload.d.ts.map +1 -1
- package/dist/vault/credentials/query/0.1/payload.js +4 -0
- package/dist/vault/credentials/query/0.1/payload.js.map +1 -1
- package/dist/vta/webvh/dids/create/1.2/payload.d.ts +961 -0
- package/dist/vta/webvh/dids/create/1.2/payload.d.ts.map +1 -0
- package/dist/vta/webvh/dids/create/1.2/payload.js +480 -0
- package/dist/vta/webvh/dids/create/1.2/payload.js.map +1 -0
- package/dist/vtc/_shared/0.1/room-migration.d.ts +16 -0
- package/dist/vtc/_shared/0.1/room-migration.d.ts.map +1 -0
- package/dist/vtc/_shared/0.1/room-migration.js +6 -0
- package/dist/vtc/_shared/0.1/room-migration.js.map +1 -0
- package/dist/vtc/_shared/0.1/room-storage.d.ts +1 -1
- package/dist/vtc/_shared/0.1/room-storage.d.ts.map +1 -1
- package/dist/vtc/_shared/0.2/room-storage.d.ts +16 -0
- package/dist/vtc/_shared/0.2/room-storage.d.ts.map +1 -0
- package/dist/vtc/_shared/0.2/room-storage.js +6 -0
- package/dist/vtc/_shared/0.2/room-storage.js.map +1 -0
- package/dist/vtc/admin/events/_shared/0.4/topic.d.ts +31 -0
- package/dist/vtc/admin/events/_shared/0.4/topic.d.ts.map +1 -0
- package/dist/vtc/admin/events/_shared/0.4/topic.js +6 -0
- package/dist/vtc/admin/events/_shared/0.4/topic.js.map +1 -0
- package/dist/vtc/admin/events/event/0.4/payload.d.ts +172 -0
- package/dist/vtc/admin/events/event/0.4/payload.d.ts.map +1 -0
- package/dist/vtc/admin/events/event/0.4/payload.js +103 -0
- package/dist/vtc/admin/events/event/0.4/payload.js.map +1 -0
- package/dist/vtc/admin/events/subscribe/0.4/payload.d.ts +409 -0
- package/dist/vtc/admin/events/subscribe/0.4/payload.d.ts.map +1 -0
- package/dist/vtc/admin/events/subscribe/0.4/payload.js +238 -0
- package/dist/vtc/admin/events/subscribe/0.4/payload.js.map +1 -0
- package/dist/vtc/rooms/get/0.2/payload.d.ts +1966 -0
- package/dist/vtc/rooms/get/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/rooms/get/0.2/payload.js +976 -0
- package/dist/vtc/rooms/get/0.2/payload.js.map +1 -0
- package/dist/vtc/rooms/storage/migrate/0.2/payload.d.ts +595 -0
- package/dist/vtc/rooms/storage/migrate/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/rooms/storage/migrate/0.2/payload.js +336 -0
- package/dist/vtc/rooms/storage/migrate/0.2/payload.js.map +1 -0
- package/dist/vtc/storage/configs/create/0.1/payload.d.ts +1 -1
- package/dist/vtc/storage/configs/create/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/storage/configs/create/0.2/payload.d.ts +1360 -0
- package/dist/vtc/storage/configs/create/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/storage/configs/create/0.2/payload.js +783 -0
- package/dist/vtc/storage/configs/create/0.2/payload.js.map +1 -0
- package/dist/vtc/storage/configs/get/0.1/payload.d.ts +1 -1
- package/dist/vtc/storage/configs/get/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/storage/configs/get/0.2/payload.d.ts +1854 -0
- package/dist/vtc/storage/configs/get/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/storage/configs/get/0.2/payload.js +1075 -0
- package/dist/vtc/storage/configs/get/0.2/payload.js.map +1 -0
- package/dist/vtc/storage/configs/list/0.1/payload.d.ts +1 -1
- package/dist/vtc/storage/configs/list/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/storage/configs/list/0.2/payload.d.ts +1955 -0
- package/dist/vtc/storage/configs/list/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/storage/configs/list/0.2/payload.js +1125 -0
- package/dist/vtc/storage/configs/list/0.2/payload.js.map +1 -0
- package/dist/vtc/storage/configs/update/0.1/payload.d.ts +1 -1
- package/dist/vtc/storage/configs/update/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/storage/configs/update/0.2/payload.d.ts +1362 -0
- package/dist/vtc/storage/configs/update/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/storage/configs/update/0.2/payload.js +782 -0
- package/dist/vtc/storage/configs/update/0.2/payload.js.map +1 -0
- package/dist/vtc/storage/credentials/set/0.1/payload.d.ts +1 -1
- package/dist/vtc/storage/credentials/set/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/storage/credentials/set/0.2/payload.d.ts +979 -0
- package/dist/vtc/storage/credentials/set/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/storage/credentials/set/0.2/payload.js +573 -0
- package/dist/vtc/storage/credentials/set/0.2/payload.js.map +1 -0
- package/package.json +1 -1
- package/src/_runtime/consume.ts +26 -2
- package/src/_runtime/document.ts +17 -1
- package/src/_runtime/freshness.ts +9 -7
- package/src/_shared/components.ts +372 -23
- package/src/device/list/0.1/payload.ts +4 -2
- package/src/device/list/0.2/payload.ts +4 -2
- package/src/device/register/0.1/payload.ts +4 -2
- package/src/device/register/0.2/payload.ts +4 -2
- package/src/index.ts +25 -0
- package/src/rooms/_shared/0.1/room.ts +1 -1
- package/src/rooms/create/0.2/payload.ts +364 -0
- package/src/rooms/epoch/chain/0.2/payload.ts +347 -0
- package/src/rooms/epoch/prune/0.2/payload.ts +315 -0
- package/src/rooms/info/0.2/payload.ts +700 -0
- package/src/rooms/keys/backfill/0.2/payload.ts +260 -0
- package/src/rooms/keys/browse/0.1/payload.ts +2 -2
- package/src/rooms/keys/browse/0.2/payload.ts +628 -0
- package/src/rooms/keys/chain/0.2/payload.ts +308 -0
- package/src/rooms/keys/profile/read/0.1/payload.ts +2 -2
- package/src/rooms/keys/read/0.1/payload.ts +2 -2
- package/src/rooms/owner/anchor/0.1/payload.ts +2 -2
- package/src/rooms/records/get/0.1/payload.ts +2 -2
- package/src/rooms/records/get/0.2/payload.ts +2 -2
- package/src/rooms/records/list/0.1/payload.ts +2 -2
- package/src/rooms/records/list/0.2/payload.ts +2 -2
- package/src/rooms/records/list/0.3/payload.ts +601 -0
- package/src/rooms/records/prune/0.1/payload.ts +451 -0
- package/src/rooms/records/put/0.3/payload.ts +741 -0
- package/src/rooms/records/retention/set/0.1/payload.ts +338 -0
- package/src/vault/credentials/present/0.1/payload.ts +283 -0
- package/src/vault/credentials/query/0.1/payload.ts +8 -0
- package/src/vta/webvh/dids/create/1.2/payload.ts +660 -0
- package/src/vtc/_shared/0.1/room-migration.ts +17 -0
- package/src/vtc/_shared/0.1/room-storage.ts +1 -1
- package/src/vtc/_shared/0.2/room-storage.ts +17 -0
- package/src/vtc/admin/events/_shared/0.4/topic.ts +32 -0
- package/src/vtc/admin/events/event/0.4/payload.ts +137 -0
- package/src/vtc/admin/events/subscribe/0.4/payload.ts +318 -0
- package/src/vtc/rooms/get/0.2/payload.ts +1372 -0
- package/src/vtc/rooms/storage/migrate/0.2/payload.ts +408 -0
- package/src/vtc/storage/configs/create/0.1/payload.ts +1 -1
- package/src/vtc/storage/configs/create/0.2/payload.ts +830 -0
- package/src/vtc/storage/configs/get/0.1/payload.ts +1 -1
- package/src/vtc/storage/configs/get/0.2/payload.ts +1110 -0
- package/src/vtc/storage/configs/list/0.1/payload.ts +1 -1
- package/src/vtc/storage/configs/list/0.2/payload.ts +1177 -0
- package/src/vtc/storage/configs/update/0.1/payload.ts +1 -1
- package/src/vtc/storage/configs/update/0.2/payload.ts +829 -0
- package/src/vtc/storage/credentials/set/0.1/payload.ts +1 -1
- package/src/vtc/storage/credentials/set/0.2/payload.ts +619 -0
|
@@ -379,6 +379,10 @@ export type AuthModel = "aws-roles-anywhere" | "gcp-wif-pinned" | "azure-cert" |
|
|
|
379
379
|
export type AuthorityScope = AuthorityScopeAll | AuthorityScopeNone | AuthorityScopeContexts;
|
|
380
380
|
export type AwsArn = string;
|
|
381
381
|
export type AwsRegion = string;
|
|
382
|
+
/**
|
|
383
|
+
* The ARN of an AWS IAM role, in any AWS partition (`arn:aws:`, `arn:aws-cn:`, `arn:aws-us-gov:`). Validated here because the community passes it to STS AssumeRole and derives the partition of the session policy's resources from it; it must never carry anything but a role ARN.
|
|
384
|
+
*/
|
|
385
|
+
export type AwsRoleArn = string;
|
|
382
386
|
export type BindingId = string;
|
|
383
387
|
export type BindingSpec = RoomBindingSpec | GrantsBindingSpec | RoleBindingSpec;
|
|
384
388
|
/**
|
|
@@ -416,11 +420,11 @@ export type Capability_AclV0_2 = string;
|
|
|
416
420
|
/**
|
|
417
421
|
* Fine-grained capability flag scoped to the device's allowed contexts. See SPEC.md for the full semantics of each. Capability values are additive: a consumer MUST ignore a value it does not recognise rather than reject the binding, and MUST NOT treat an unrecognised value as conferring anything.
|
|
418
422
|
*/
|
|
419
|
-
export type Capability_DeviceV0_1 = "vault-read" | "vault-write" | "proxy-login" | "fill-release" | "policy-admin" | "device-admin" | "sign" | "key-mint" | "sign-trust-task" | "credential-write" | "memory-read" | "memory-write" | "room-present" | "room-open" | "key-export" | "sign-sshsig" | "sign-jws" | "sign-csr" | "sign-document" | "external-accounts-manage" | "external-auth-use" | "pcs-vetter" | "pcs-applicant" | "witness-request" | "pcs-voter" | "pcs-trustee";
|
|
423
|
+
export type Capability_DeviceV0_1 = "vault-read" | "vault-write" | "proxy-login" | "fill-release" | "policy-admin" | "device-admin" | "sign" | "key-mint" | "sign-trust-task" | "credential-write" | "memory-read" | "memory-write" | "room-present" | "room-open" | "key-export" | "sign-sshsig" | "sign-jws" | "sign-csr" | "sign-document" | "external-accounts-manage" | "external-auth-use" | "pcs-vetter" | "pcs-applicant" | "witness-request" | "pcs-voter" | "pcs-trustee" | "credential-present";
|
|
420
424
|
/**
|
|
421
425
|
* Fine-grained capability flag scoped to the device's allowed contexts. See SPEC.md for the full semantics of each. Capability values are additive: a consumer MUST ignore a value it does not recognise rather than reject the binding, and MUST NOT treat an unrecognised value as conferring anything.
|
|
422
426
|
*/
|
|
423
|
-
export type Capability_DeviceV0_2 = "vaultRead" | "vaultWrite" | "proxyLogin" | "fillRelease" | "policyAdmin" | "deviceAdmin" | "sign" | "keyMint" | "signTrustTask" | "credentialWrite" | "memoryRead" | "memoryWrite" | "roomPresent" | "roomOpen" | "keyExport" | "signSshsig" | "signJws" | "signCsr" | "signDocument" | "externalAccountsManage" | "externalAuthUse" | "pcsVetter" | "pcsApplicant" | "witnessRequest" | "pcsVoter" | "pcsTrustee";
|
|
427
|
+
export type Capability_DeviceV0_2 = "vaultRead" | "vaultWrite" | "proxyLogin" | "fillRelease" | "policyAdmin" | "deviceAdmin" | "sign" | "keyMint" | "signTrustTask" | "credentialWrite" | "memoryRead" | "memoryWrite" | "roomPresent" | "roomOpen" | "keyExport" | "signSshsig" | "signJws" | "signCsr" | "signDocument" | "externalAccountsManage" | "externalAuthUse" | "pcsVetter" | "pcsApplicant" | "witnessRequest" | "pcsVoter" | "pcsTrustee" | "credentialPresent";
|
|
424
428
|
/**
|
|
425
429
|
* Number of chunks in the bundle, equal to ceil(expectedSizeBytes / chunkSize). Bounded at 4096 so that the manifest itself — one digest per chunk — fits in the single document that carries it under the same message-size reasoning as a chunk.
|
|
426
430
|
*/
|
|
@@ -608,6 +612,26 @@ export type EnrolledVia = "install" | "invite" | "selfService" | "offline";
|
|
|
608
612
|
* Opaque identifier of one directory entry: `dir_` followed by 16 to 64 base64url characters. Random, scoped to one community, and stable for the life of the membership — it survives a rotation of the member's DID, which is why groups, notes and cards are keyed by it. It MUST NOT be derived from, and MUST NOT reveal, any DID of the member, and the same person's entries in two communities MUST NOT share one. Compared by exact string equality.
|
|
609
613
|
*/
|
|
610
614
|
export type EntryId = string;
|
|
615
|
+
/**
|
|
616
|
+
* The earliest epoch whose storage key a room still lets anybody derive: its chain was pruned below it (`rooms/epoch/prune`), and every epoch under it is meant to be unreadable — at the host, and, as far as each of them conforms, at every member's key holder. Absent means the room's chain has never been pruned.
|
|
617
|
+
*
|
|
618
|
+
* **The off-by-one, stated once.** A rung (`EpochLink`) numbered `e` opens with epoch `e`'s key and yields epoch `e − 1`'s. A prune with `beforeEpoch: N` drops the rungs numbered below `N`, so rung `N` survives and still yields epoch `N − 1`'s key; the floor after it is therefore `N − 1`, never `N`. A party applying a floor `F` discards the rungs numbered `F` and below — rung `F` would yield `F − 1` — and every key for an epoch below `F`.
|
|
619
|
+
*
|
|
620
|
+
* **Monotonic.** A floor only rises. A host raises the room's to the higher of the floor it held and `beforeEpoch − 1` at each prune it performs, and never lowers it; every other party keeps the highest it has learnt for the room, from any source, and never lowers it either. A lower floor learnt later — from a stale response, or a host that has not been pruned — changes nothing.
|
|
621
|
+
*
|
|
622
|
+
* **A host** that holds a floor for a room MUST NOT store, accept or serve a rung numbered at or below it, and MUST serve the floor wherever a response can carry it (`rooms/epoch/chain` 0.2, `rooms/epoch/prune` 0.2).
|
|
623
|
+
*
|
|
624
|
+
* **A member's key holder** — and any client of the member that keeps the room's rungs or keys itself — on learning a floor `F` above the one it held, by any means (`rooms/epoch/chain` 0.2 in its own reads, `rooms/keys/backfill` 0.2, `rooms/keys/chain` 0.2 from its principal):
|
|
625
|
+
* 1. MUST discard every rung it holds for the room numbered `F` or below, and every storage key, file key or other key material it holds or has cached for an epoch below `F` — including one it derived in passing while applying commits through those epochs (`rooms/keys/commit`, `rooms/epoch/commits`);
|
|
626
|
+
* 2. MUST NOT store such a rung or key again from any source — a delivery from its principal, a backfill, a repair, a catch-up, or a host that has not been pruned — and MUST NOT ask for one;
|
|
627
|
+
* 3. MUST refuse to derive or use a key for an epoch below `F`, answering exactly as it answers for an epoch its chain does not reach (`beyondChain`, with an earliest epoch at or above `F`), whatever it still holds;
|
|
628
|
+
* 4. MUST keep `F` itself for as long as it holds anything for the room, since it is what makes items 2 and 3 enforceable after the material is gone.
|
|
629
|
+
*
|
|
630
|
+
* A key holder SHOULD learn the floor whenever it fetches rungs or catches up, and SHOULD ask for it — a `rooms/epoch/chain` 0.2 read carries it whatever `fromEpoch` and `limit` it names — at least as often as it otherwise reads the room. One that never asks never learns, and keeps what it held.
|
|
631
|
+
*
|
|
632
|
+
* **What a floor does not do, stated plainly.** It is honoured by parties that conform; it does not reach into one that does not, and it recalls nothing. Plaintext a key holder already returned, records a member already opened, files already downloaded and decrypted, exports, and any key a member's own software extracted are beyond it. What it guarantees cryptographically is what the prune guarantees: a party that had not derived a key below the floor before the host erased its rungs can never derive it afterwards. What it adds is that every conforming key holder stops being able to — so that a restart, a new device or an agent's next recall reads nothing below the floor, rather than everything its holder happened to keep.
|
|
633
|
+
*/
|
|
634
|
+
export type EpochFloor = number;
|
|
611
635
|
/**
|
|
612
636
|
* Lowercase hex SHA-256 of the whole bundle's bytes. Kept in the hex form the 1.0 descriptor published rather than moved to DigestMultibase, because it is an unchanged member of an existing descriptor and re-encoding it would break every stream producer for no gain in what it checks. For a chunked transfer it is the check over the reassembled bundle, applied after every chunk has verified individually, so that a correct set of chunks assembled in the wrong order is still caught.
|
|
613
637
|
*/
|
|
@@ -752,7 +776,7 @@ export type Handle = string;
|
|
|
752
776
|
*
|
|
753
777
|
* **Derived from the same set as the root, and not read from the room's own counter.** The two agree for any host that has never erased a record — versions are assigned strictly increasing and a retraction keeps its tombstone — but they are not interchangeable, because a root and a counter are *two reads*, and two reads are not a snapshot. A write landing between them yields a pair that is individually correct and jointly false: two members holding roots taken over different trees, labelled with one version. That reads as equivocation and is not, and a **false accusation discredits the mechanism rather than the host** — the worst outcome available here. Taken from the committed set, the version cannot disagree with the root it labels, whatever else is happening to the room.
|
|
754
778
|
*
|
|
755
|
-
*
|
|
779
|
+
* **A prune is the one mutation that removes leaves, and it takes a version too.** A host that **erases** records — as distinct from retracting them, which leaves a tombstone in the tree — moves the root, and taken from the records alone this value need not move with it: it would stay put, or even fall if the erased record held the highest version, and two members straddling the erasure would see one version over two roots, which reads as equivocation and is not. So on a room whose records have been pruned (`rooms/records/prune`), this value is the higher of the highest version among the records the tree covers and the `version` of the room's latest `RecordPrune`, computed from the same snapshot as the root. A prune takes the next version from the room's counter exactly as a put or a curation does, so the pair stays a snapshot: a root and a head that agree before a prune and a root and a head that agree after it, never one head over two roots. A room that has never been pruned is unaffected.
|
|
756
780
|
*
|
|
757
781
|
* **This is what makes two roots comparable at all**, and without it the comparison this family is built on cannot be performed. A room moves: every put, curate and retraction assigns a new version, so two roots taken at two moments differ legitimately and a reader learns nothing from the difference. Shown two different roots, a host that equivocated and a host that was merely written to are indistinguishable — the first can always answer *the room moved between your reads*, and nothing contradicts it.
|
|
758
782
|
*
|
|
@@ -892,6 +916,18 @@ export type MembershipSource = "added" | "joined" | "requestApproved" | "rule";
|
|
|
892
916
|
* @maxItems 64
|
|
893
917
|
*/
|
|
894
918
|
export type MerklePath = DigestMultibase[];
|
|
919
|
+
/**
|
|
920
|
+
* A one-line summary of the last failure, for an administrator: the step, the config and the backend's error code or status (`put to eu-s3-primary: 503 SlowDown`). Never a credential, a presigned URL, a signed request, a room identifier or anything derived from a room's contents.
|
|
921
|
+
*/
|
|
922
|
+
export type MigrationLastError = string;
|
|
923
|
+
/**
|
|
924
|
+
* Why a migration is `paused`. `capacity`: the destination config cannot hold the rest. `source`: a config the blobs are being moved off keeps failing to serve them. `destination`: the destination config keeps refusing writes, or is no longer `active`. `credential`: the community cannot obtain a credential for one of the configs.
|
|
925
|
+
*/
|
|
926
|
+
export type MigrationPauseCause = "capacity" | "source" | "destination" | "credential";
|
|
927
|
+
/**
|
|
928
|
+
* `queued`: approved and waiting for another migration on this community to finish; nothing copied yet (a community that runs one migration at a time). `running`: copying, including while it retries a failing step with backoff. `paused`: halted after its automatic retries reached their cap without success, or on a cause that retrying cannot clear (`pausedCause`); resumed by issuing vtc/rooms/storage/migrate again, and by the community itself at `nextAttemptAt` when present. `complete`: every blob that was to move has moved. `failed`: halted on a blob whose copy did not verify against its manifest; that blob stays where it was.
|
|
929
|
+
*/
|
|
930
|
+
export type MigrationState = "queued" | "running" | "paused" | "complete" | "failed";
|
|
895
931
|
/**
|
|
896
932
|
* How the request reaches the approver. A CLOSED list. Version 0.1 defines `scan`: the starter shows a trigger link (as a QR code that is also a clickable link, TRIGGER-LINK.md) and the approver's wallet reads it. `code` (a typed code of at least 8 characters, under strict rate limits) and `push` (sent to the approver's enrolled devices) are reserved names.
|
|
897
933
|
*/
|
|
@@ -1223,6 +1259,21 @@ export type Queue = "receive" | "send";
|
|
|
1223
1259
|
* Why the administrator is making this change. Recorded with it in the audit trail. 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.
|
|
1224
1260
|
*/
|
|
1225
1261
|
export type Reason = string;
|
|
1262
|
+
/**
|
|
1263
|
+
* What kind of claim a record is, as its author states it. OPTIONAL wherever it appears; absent means the author did not say, and a reader shows it as unstated rather than assuming any of these.
|
|
1264
|
+
*
|
|
1265
|
+
* - `declared` — the author's own statement: a decision, a preference, an intention, a commitment. True because the author says so, and only as far as the author speaks for it.
|
|
1266
|
+
* - `observed` — something the author saw, measured or was told directly, recorded as found.
|
|
1267
|
+
* - `verified` — checked against evidence that somebody else can check again, such as a credential or another record. A record that says `verified` SHOULD name that evidence in `evidence`; one that does not is an unsupported claim to have checked, and a reader SHOULD present it so.
|
|
1268
|
+
* - `inferred` — derived by reasoning from other information: an agent's conclusion, a summary's generalisation, a model's guess. The value an agent writer uses when it does not know which of the others applies.
|
|
1269
|
+
*
|
|
1270
|
+
* The values are the author's account of their own record, signed with it. They are not checked by anybody, confer nothing, and say nothing about whether the record is right — `inferred` can be correct and `observed` mistaken. Aligned with the provenance vocabulary of personal agent memory, so that a record moved between a member's memory and a room keeps its meaning.
|
|
1271
|
+
*/
|
|
1272
|
+
export type RecordBasis = "declared" | "observed" | "verified" | "inferred";
|
|
1273
|
+
/**
|
|
1274
|
+
* The author's own estimate, from 0 to 1, that what the record says is correct. OPTIONAL; absent means no estimate was given, never 1. Meaningful only beside the author who gave it: two writers' numbers are not on one scale, so a reader MUST NOT rank records by `confidence` across authors as though they were, and an agent that weights by it SHOULD weight within an author's own records. Never authority.
|
|
1275
|
+
*/
|
|
1276
|
+
export type RecordConfidence = number;
|
|
1226
1277
|
/**
|
|
1227
1278
|
* How many records the room held when `DataCommitment` was computed — the number of leaves in that tree, tombstones included, since a tombstone is a record.
|
|
1228
1279
|
*
|
|
@@ -1233,6 +1284,22 @@ export type Reason = string;
|
|
|
1233
1284
|
* **It counts the room, never the page.** The same rule `DataCommitment` states, and the same trap: a count scoped to what was returned is one a host satisfies by construction. So this is only comparable against a listing read to the end with **no** `prefix` and **no** `sinceVersion` — a filtered listing legitimately holds fewer, and a reader that compares one against this has found a discrepancy it created itself.
|
|
1234
1285
|
*/
|
|
1235
1286
|
export type RecordCount = number;
|
|
1287
|
+
/**
|
|
1288
|
+
* One thing a record cites in its support, discriminated by `kind`.
|
|
1289
|
+
*
|
|
1290
|
+
* - `record` names a record of a room by its key, and optionally the version cited and the room. Absent `roomId` means the record's own room.
|
|
1291
|
+
* - `credential` names a credential by its `id`, and optionally a digest of the credential as cited.
|
|
1292
|
+
*
|
|
1293
|
+
* **A reference, never a locator, and never proof.** A reader MUST NOT fetch, resolve or dereference a `credentialId` because a record names it, and MUST NOT read a record of another room on the strength of a citation: the rule that a room's identifiers are identifiers and not addresses (`AuthorityPresentation`) applies here for the same reasons — fetching would signal to whoever answers which member read which record, and when. A reader MAY show a cited record of the same room that it already holds or reads anyway, and MAY match a cited credential against ones its member already holds. What the citation proves is only that the author cited it; whether the evidence exists, says what the author claims, or supports the record is for whoever follows it up to judge.
|
|
1294
|
+
*/
|
|
1295
|
+
export type RecordEvidence = RecordEvidenceRecord | RecordEvidenceCredential;
|
|
1296
|
+
/**
|
|
1297
|
+
* What the author offers in support of the record: other records and credentials, by reference. OPTIONAL; absent means none was named, and an empty array is not a permitted spelling of that. Order carries no meaning. Bounded so that a reader's cost of showing a record's support is bounded too.
|
|
1298
|
+
*
|
|
1299
|
+
* @minItems 1
|
|
1300
|
+
* @maxItems 32
|
|
1301
|
+
*/
|
|
1302
|
+
export type RecordEvidenceList = [RecordEvidence, ...RecordEvidence[]];
|
|
1236
1303
|
/**
|
|
1237
1304
|
* The path from one record's leaf to the room's `DataCommitment` — a Merkle inclusion proof, in the vocabulary this work already uses for it.
|
|
1238
1305
|
*
|
|
@@ -1267,6 +1334,10 @@ export type RecordTrace = {
|
|
|
1267
1334
|
* Whether the record asserts an authorization or a recognition relationship.
|
|
1268
1335
|
*/
|
|
1269
1336
|
export type RecordType = "authorization" | "recognition";
|
|
1337
|
+
/**
|
|
1338
|
+
* The instant after which the record's author no longer stands behind it as current. OPTIONAL; absent means the record does not expire. A reader hides a record whose `validUntil` has passed from default listings, search and recall, and shows it only on explicit request (`SealedRecordBody`, **Expiry**). No host enforces it.
|
|
1339
|
+
*/
|
|
1340
|
+
export type RecordValidUntil = string;
|
|
1270
1341
|
/**
|
|
1271
1342
|
* What it takes to let a value LEAVE. Distinct from `Sensitivity`, which governs showing it to the holder.
|
|
1272
1343
|
*
|
|
@@ -1401,6 +1472,48 @@ export type SealedEnvelope_VaultV0_1 = DidcommAuthcryptEnvelope_VaultV0_1 | Hpke
|
|
|
1401
1472
|
* Discriminated by `envelope`. Exactly one variant matches per document.
|
|
1402
1473
|
*/
|
|
1403
1474
|
export type SealedEnvelope_VaultV0_2 = DidcommAuthcryptEnvelope_VaultV0_2 | HpkeArmoredEnvelope_VaultV0_2 | TspMessageEnvelope_VaultV0_2;
|
|
1475
|
+
/**
|
|
1476
|
+
* The cleartext inside the sealed block of vtc/storage/credentials/set/0.2, discriminated by `kind`, which must equal the config's kind. It names the config it is for inside the seal, so that a block captured on its way to one config cannot be replayed into another: a community MUST refuse a block whose `configId` differs from the request's. Never appears on the wire outside a seal, and is never returned. A `local` config has no credential.
|
|
1477
|
+
*/
|
|
1478
|
+
export type SealedStorageCredential = {
|
|
1479
|
+
kind: "s3";
|
|
1480
|
+
configId: StorageConfigId;
|
|
1481
|
+
/**
|
|
1482
|
+
* The access key's identifier.
|
|
1483
|
+
*/
|
|
1484
|
+
accessKeyId: string;
|
|
1485
|
+
/**
|
|
1486
|
+
* The secret half.
|
|
1487
|
+
*/
|
|
1488
|
+
secretAccessKey: string;
|
|
1489
|
+
/**
|
|
1490
|
+
* Present when the pair is a temporary one that needs it. A temporary pair stops working at its own expiry, after which the config reports failures until another is set; it is accepted for evaluation, never recommended.
|
|
1491
|
+
*/
|
|
1492
|
+
sessionToken?: string;
|
|
1493
|
+
} | {
|
|
1494
|
+
kind: "gcs";
|
|
1495
|
+
configId: StorageConfigId;
|
|
1496
|
+
/**
|
|
1497
|
+
* The service-account key exactly as Google issues it — the JSON key file, as an object, its member names carried verbatim in Google's own snake_case. Members beyond the four required (`project_id`, `client_id`, `token_uri`, `universe_domain` and the rest) are permitted, and a community MAY discard them: it authenticates with `client_email`, `private_key_id` and `private_key` alone, against Google's own token endpoint, and never against a `token_uri` the key file names.
|
|
1498
|
+
*/
|
|
1499
|
+
serviceAccountKey: {
|
|
1500
|
+
type: "service_account";
|
|
1501
|
+
client_email: string;
|
|
1502
|
+
private_key_id: string;
|
|
1503
|
+
/**
|
|
1504
|
+
* The PKCS #8 PEM private key.
|
|
1505
|
+
*/
|
|
1506
|
+
private_key: string;
|
|
1507
|
+
[k: string]: unknown | undefined;
|
|
1508
|
+
};
|
|
1509
|
+
} | {
|
|
1510
|
+
kind: "walrus";
|
|
1511
|
+
configId: StorageConfigId;
|
|
1512
|
+
/**
|
|
1513
|
+
* The private key in Sui's Bech32 `suiprivkey` encoding (SIP-15), which carries its signature scheme.
|
|
1514
|
+
*/
|
|
1515
|
+
suiPrivateKey: string;
|
|
1516
|
+
};
|
|
1404
1517
|
/**
|
|
1405
1518
|
* A sealed-transfer bundle: OpenPGP-style ASCII armor around an HPKE-sealed `SealedPayloadV1` (base mode, X25519-HKDF-SHA256 KEM, HKDF-SHA256 KDF, ChaCha20-Poly1305 AEAD, info string `vta-sealed-transfer/v1`), with a producer assertion and Bundle-Id, Chunk and Digest-Algo headers bound into the associated data. Each task states the key it is sealed to: a single-use wrapping key from keys/import-wrapping-key for external/accounts/secret/set, and the caller's key-agreement key for external/credentials/issue. Its cleartext is an ExternalSecretPayload, an ExternalCredentialPayload or, from external/credentials/issue 0.2 for `s3-static-presign`, a PresignedRequestSet. The only form in which secret material crosses the wire in this family, in either direction: the seal is what keeps a terminating proxy, a relay, a request log or a debug dump of "the response" from ever holding a usable secret, whatever transport carried the document.
|
|
1406
1519
|
*/
|
|
@@ -1505,12 +1618,36 @@ export type Slot = string;
|
|
|
1505
1618
|
*
|
|
1506
1619
|
* `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.
|
|
1507
1620
|
*/
|
|
1508
|
-
export type
|
|
1621
|
+
export type StorageAuth_VtcV0_1 = {
|
|
1622
|
+
mode: "vta-account";
|
|
1623
|
+
context: ExternalAccountContextId;
|
|
1624
|
+
account: ExternalAccountId;
|
|
1625
|
+
} | {
|
|
1626
|
+
mode: "ambient";
|
|
1627
|
+
} | {
|
|
1628
|
+
mode: "sealed";
|
|
1629
|
+
};
|
|
1630
|
+
/**
|
|
1631
|
+
* How the community authenticates to a config's backend. Absent on a `local` config, which needs none.
|
|
1632
|
+
*
|
|
1633
|
+
* `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.
|
|
1634
|
+
*
|
|
1635
|
+
* `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 under the rules of vtc/storage/configs/create/0.2 — on `s3`, by assuming `roleArn` (or the role the host is configured with) with an inline session policy; on `gcs`, by a Credential Access Boundary. Not audited or rate-limited by the VTA, and usable by anything on that machine that reaches the metadata endpoint. Not valid for `walrus`; `roleArn` is valid only on `s3`.
|
|
1636
|
+
*
|
|
1637
|
+
* `sealed` (discouraged): a long-lived credential stored by the community, set with vtc/storage/credentials/set (0.2: a `SealedStorageCredential`). Protects against every administrator through every surface the community offers; does NOT protect against whoever operates the machine, and a community labels it so wherever the config is shown.
|
|
1638
|
+
*
|
|
1639
|
+
* `ambient` and `sealed` are host-operator choices: a community MAY refuse either by its own host configuration, whatever its administrators ask.
|
|
1640
|
+
*/
|
|
1641
|
+
export type StorageAuth_VtcV0_2 = {
|
|
1509
1642
|
mode: "vta-account";
|
|
1510
1643
|
context: ExternalAccountContextId;
|
|
1511
1644
|
account: ExternalAccountId;
|
|
1512
1645
|
} | {
|
|
1513
1646
|
mode: "ambient";
|
|
1647
|
+
/**
|
|
1648
|
+
* `s3` only: the IAM role the community assumes, with the machine's ambient identity, to obtain each room-scoped session. Absent, the community assumes the role its host configuration names, and with none configured, the role of the ambient identity itself (which must then trust itself to be assumed). Refused on any other kind with `authNotAllowed`.
|
|
1649
|
+
*/
|
|
1650
|
+
roleArn?: AwsRoleArn;
|
|
1514
1651
|
} | {
|
|
1515
1652
|
mode: "sealed";
|
|
1516
1653
|
};
|
|
@@ -1552,6 +1689,10 @@ export type Topic_VtcAdminEventsV0_2 = "actions" | "acknowledgements" | "joinReq
|
|
|
1552
1689
|
* One kind of change a console can be told about. A closed set: a topic not listed here is a new MINOR version of this component, not an `ext` member, because each topic is bound to the read that authorizes it.
|
|
1553
1690
|
*/
|
|
1554
1691
|
export type Topic_VtcAdminEventsV0_3 = "actions" | "acknowledgements" | "joinRequests" | "members" | "singleAdminMode" | "config" | "rooms" | "directory" | "groups";
|
|
1692
|
+
/**
|
|
1693
|
+
* One kind of change a console can be told about. A closed set: a topic not listed here is a new MINOR version of this component, not an `ext` member, because each topic is bound to the read that authorizes it.
|
|
1694
|
+
*/
|
|
1695
|
+
export type Topic_VtcAdminEventsV0_4 = "actions" | "acknowledgements" | "joinRequests" | "members" | "singleAdminMode" | "config" | "rooms" | "directory" | "groups" | "communityRooms";
|
|
1555
1696
|
/**
|
|
1556
1697
|
* How the traffic reached or left the mediator. `peerMediator` is mediator-to-mediator forwarding.
|
|
1557
1698
|
*/
|
|
@@ -5452,7 +5593,7 @@ export interface CredentialScopeCeiling {
|
|
|
5452
5593
|
/**
|
|
5453
5594
|
* Whether a config can authenticate now, and how — never the credential. `status`: `vta-account`, `ambient` and `sealed` are usable; `required` means the config cannot store until a credential is provided (a `sealed` config never set, or set before a restore, which carries no credential); `none` is a `local` config.
|
|
5454
5595
|
*/
|
|
5455
|
-
export interface
|
|
5596
|
+
export interface CredentialState_VtcV0_1 {
|
|
5456
5597
|
status: "vta-account" | "ambient" | "sealed" | "required" | "none";
|
|
5457
5598
|
/**
|
|
5458
5599
|
* Present with `vta-account`.
|
|
@@ -5475,6 +5616,32 @@ export interface CredentialState {
|
|
|
5475
5616
|
*/
|
|
5476
5617
|
roomsHoldingCredentials?: number;
|
|
5477
5618
|
}
|
|
5619
|
+
/**
|
|
5620
|
+
* Whether a config can authenticate now, and how — never the credential. `status`: `vta-account`, `ambient` and `sealed` are usable; `required` means the config cannot store until a credential is provided (a `sealed` config never set, or set before a restore, which carries no credential); `notAllowed` means the config's mode is one the community's host configuration no longer permits, so it cannot store until its `auth` is changed; `none` is a `local` config.
|
|
5621
|
+
*/
|
|
5622
|
+
export interface CredentialState_VtcV0_2 {
|
|
5623
|
+
status: "vta-account" | "ambient" | "sealed" | "required" | "notAllowed" | "none";
|
|
5624
|
+
/**
|
|
5625
|
+
* Present with `vta-account`.
|
|
5626
|
+
*/
|
|
5627
|
+
context?: ExternalAccountContextId;
|
|
5628
|
+
/**
|
|
5629
|
+
* Present with `vta-account`.
|
|
5630
|
+
*/
|
|
5631
|
+
account?: ExternalAccountId;
|
|
5632
|
+
/**
|
|
5633
|
+
* Present with `sealed`: a digest identifying the stored credential, so an administrator can tell which one is set without anyone being able to read it. Computed over the credential with a community-held key, never a bare hash of a low-entropy secret.
|
|
5634
|
+
*/
|
|
5635
|
+
fingerprint?: DigestMultibase;
|
|
5636
|
+
/**
|
|
5637
|
+
* Present with `sealed`: when the stored credential was last set.
|
|
5638
|
+
*/
|
|
5639
|
+
setAt?: string;
|
|
5640
|
+
/**
|
|
5641
|
+
* Present with `vta-account`, `ambient` and `sealed`: how many rooms the community currently holds a live room-scoped credential for.
|
|
5642
|
+
*/
|
|
5643
|
+
roomsHoldingCredentials?: number;
|
|
5644
|
+
}
|
|
5478
5645
|
/**
|
|
5479
5646
|
* A W3C Data Integrity proof by the card's publisher. Additional Data Integrity members (e.g. `created`) are permitted and are covered as the cryptosuite defines.
|
|
5480
5647
|
*/
|
|
@@ -8152,6 +8319,28 @@ export interface PeerDepth {
|
|
|
8152
8319
|
bytes: number;
|
|
8153
8320
|
oldestAgeSeconds?: number;
|
|
8154
8321
|
}
|
|
8322
|
+
/**
|
|
8323
|
+
* What the author permits the record to be used for — for example, that a learner's record is for instructional personalisation only. OPTIONAL; absent means the author stated no limit beyond the room's own terms.
|
|
8324
|
+
*
|
|
8325
|
+
* **Two halves, because purpose has both a machine and a human reading.** `purposes` names purposes by IRI, so that an agent can match them without parsing prose; `note` says it in words, for the nuance an identifier cannot carry. Either may be given alone.
|
|
8326
|
+
*
|
|
8327
|
+
* **No vocabulary of this family's own.** Purpose vocabularies exist and are maintained elsewhere — the W3C Data Privacy Vocabulary (`https://w3id.org/dpv#…`) is the one a writer SHOULD reach for first — and a short list defined here would be one more to translate between, and would be wrong at its edges for every domain that uses rooms. An IRI is the extension path: a community that needs a purpose no published vocabulary has names it under an IRI it controls.
|
|
8328
|
+
*
|
|
8329
|
+
* **A statement, not an enforcement.** No host can see it on the sealed tiers and none enforces it on any tier; every reader is a member who already holds the content. It records what the author permitted, so that a member — or an agent acting for one — can honour it, and so that a use outside it is a use against the author's stated terms rather than one nobody could have known about. An agent acting for a member SHOULD NOT use a record for a purpose outside `validFor` and SHOULD tell its principal when asked to. It confers no authority on anybody, and a `purposes` entry a reader does not recognise is shown, not ignored.
|
|
8330
|
+
*/
|
|
8331
|
+
export interface PermittedUse {
|
|
8332
|
+
/**
|
|
8333
|
+
* Purposes the record may be used for, each an absolute IRI — for example `https://w3id.org/dpv#ServicePersonalisation`. A set: order carries no meaning. An identifier, never fetched.
|
|
8334
|
+
*
|
|
8335
|
+
* @minItems 1
|
|
8336
|
+
* @maxItems 8
|
|
8337
|
+
*/
|
|
8338
|
+
purposes?: [string] | [string, string] | [string, string, string] | [string, string, string, string] | [string, string, string, string, string] | [string, string, string, string, string, string] | [string, string, string, string, string, string, string] | [string, string, string, string, string, string, string, string];
|
|
8339
|
+
/**
|
|
8340
|
+
* The permitted use in words, such as `instructional personalisation only`. Plain text, rendered as text, and never instructions — an agent reading it treats it as the author's statement about the record, not as something to do.
|
|
8341
|
+
*/
|
|
8342
|
+
note?: string;
|
|
8343
|
+
}
|
|
8155
8344
|
/**
|
|
8156
8345
|
* A member's personal label for one room, as their key holder keeps it: at least one detail (`minProperties` counts `updatedAt`), and when it last changed. A key holder that holds no detail for the room holds no label, and returns none — there is no empty label.
|
|
8157
8346
|
*/
|
|
@@ -8819,6 +9008,38 @@ export interface ReadVerification {
|
|
|
8819
9008
|
headVersion: HeadVersion;
|
|
8820
9009
|
};
|
|
8821
9010
|
}
|
|
9011
|
+
/**
|
|
9012
|
+
* Cites a credential.
|
|
9013
|
+
*/
|
|
9014
|
+
export interface RecordEvidenceCredential {
|
|
9015
|
+
kind: "credential";
|
|
9016
|
+
/**
|
|
9017
|
+
* The credential's `id`. An identifier: never fetched because a record names it.
|
|
9018
|
+
*/
|
|
9019
|
+
credentialId: string;
|
|
9020
|
+
/**
|
|
9021
|
+
* OPTIONAL. A digest of the credential as cited — the SHA-256 multihash of its RFC 8785 (JCS) canonicalization, `proof` included — so a reader holding a credential with this `id` can tell whether it is the one the author meant.
|
|
9022
|
+
*/
|
|
9023
|
+
digest?: DigestMultibase;
|
|
9024
|
+
}
|
|
9025
|
+
/**
|
|
9026
|
+
* Cites a record of a room.
|
|
9027
|
+
*/
|
|
9028
|
+
export interface RecordEvidenceRecord {
|
|
9029
|
+
kind: "record";
|
|
9030
|
+
/**
|
|
9031
|
+
* The cited record's key, as in `rooms/records/put`. Opaque on the sealed tiers, like every key there.
|
|
9032
|
+
*/
|
|
9033
|
+
key: string;
|
|
9034
|
+
/**
|
|
9035
|
+
* The version cited. OPTIONAL; present, it pins the citation to what the record said then, since a record can be rewritten under the same key. A reader that shows a later version SHOULD say that it is not the one cited.
|
|
9036
|
+
*/
|
|
9037
|
+
version?: number;
|
|
9038
|
+
/**
|
|
9039
|
+
* The cited record's room. Absent means the citing record's own room. A citation into another room tells the reader that room's identifier, so a writer SHOULD NOT cite into a room the citing room's readers are not meant to learn of.
|
|
9040
|
+
*/
|
|
9041
|
+
roomId?: string;
|
|
9042
|
+
}
|
|
8822
9043
|
/**
|
|
8823
9044
|
* What `rooms/records/list` returns. Never the body: ranking happens on the client, and a host that returned every body would make the caller pay for the whole room on every listing.
|
|
8824
9045
|
*/
|
|
@@ -8894,6 +9115,50 @@ export interface RecordMetadataV2 {
|
|
|
8894
9115
|
*/
|
|
8895
9116
|
blobs?: [BlobRef];
|
|
8896
9117
|
}
|
|
9118
|
+
/**
|
|
9119
|
+
* The mark a prune leaves: **that** records were removed, when, and how many — never which, and never anything they said.
|
|
9120
|
+
*
|
|
9121
|
+
* A prune removes records outright, tombstones included, so the room's record tree loses leaves and an incremental reader has nothing left to learn the removal from. This is what it learns from instead. A host keeps the latest one per room and serves it with every listing that can carry it (`rooms/records/list` 0.3, as `lastPrune`); a reader whose own copy of the room was synchronised to a version below `version` MUST rebuild that copy from a full listing — no `sinceVersion` — and drop every record the full listing no longer holds. Without that, a record the room removed lives on in every cache that synchronised before the prune, and a record retracted while the reader was away comes back as current.
|
|
9122
|
+
*
|
|
9123
|
+
* **What a host keeps and what it does not.** A host keeps this marker, and in its audit trail the prune's `reason`, its requester where the tier discloses one, and the retention it was made under. It MUST NOT keep anything a pruned record said — body, ciphertext, cleartext, title, description, file or blob — and SHOULD NOT keep pruned records' keys: the count is the audit, and a list of keys on an `open` room, where keys may be descriptive, is content by another name.
|
|
9124
|
+
*/
|
|
9125
|
+
export interface RecordPrune {
|
|
9126
|
+
/**
|
|
9127
|
+
* The version the prune took from the room's counter, as a put or a curation would. No record carries it; it is what moves `HeadVersion` past the removal, so that a root taken before and a root taken after are never labelled with one version.
|
|
9128
|
+
*/
|
|
9129
|
+
version: number;
|
|
9130
|
+
/**
|
|
9131
|
+
* When the host performed it.
|
|
9132
|
+
*/
|
|
9133
|
+
at: string;
|
|
9134
|
+
/**
|
|
9135
|
+
* How many records were removed, tombstones included. A prune that removed nothing leaves no mark.
|
|
9136
|
+
*/
|
|
9137
|
+
removed: number;
|
|
9138
|
+
}
|
|
9139
|
+
/**
|
|
9140
|
+
* How long a room keeps its records, by age: the room's **record retention**. Records older than it states become **eligible** to be removed by `rooms/records/prune`; nothing is removed until a holder of `admin` asks for a prune, and nothing a prune removes can be brought back.
|
|
9141
|
+
*
|
|
9142
|
+
* **Not `retentionPolicy`, and not `retentionDays`.** Both names are taken in this family and mean other things. `retentionPolicy` (`RetentionPolicy`) is whether a room's *key chain* lets a member read epochs from before they joined, fixed at creation because key material either exists for an epoch or it does not. `retentionDays` (`rooms/create`) is how long a host keeps a whole room after it lapses unrenewed. This is a third question — how long the room keeps its *records* while it is live — and unlike the first it is a decision a room revisits, so it is changeable (`rooms/records/retention/set`). A name sharing either's would invite a reader to apply one's rules to the other.
|
|
9143
|
+
*
|
|
9144
|
+
* **Age is the host's to measure, so age is `updatedAt`.** On the sealed tiers a host can read nothing of a record but its key, version, status, pinning and when it last changed, so a policy the host applies can only be stated in those terms. That is also why it cannot use a record's own `validUntil`, which is sealed: expiry is a reader's rule, retention a host's. A curation is a change, so it restarts a record's age — a retraction starts a tombstone's.
|
|
9145
|
+
*
|
|
9146
|
+
* **Absent, or `{}`, means no record is ever eligible by age**, and that is the reading a host MUST apply whenever it cannot read a policy: removing data under a rule nobody stated is the failure this member exists to prevent. Every member can read the policy in force (`rooms/info`), so a record is never removed under a rule its readers could not have known.
|
|
9147
|
+
*/
|
|
9148
|
+
export interface RecordRetention {
|
|
9149
|
+
/**
|
|
9150
|
+
* Days a retracted record's tombstone is kept after its retraction. A tombstone whose `updatedAt` is more than this long ago is eligible. Tombstones exist so that a member syncing incrementally learns of a retraction (`rooms/records/curate`); this is how long a member may stay away and still learn of one that way rather than by rebuilding their copy of the room. Absent means tombstones are never eligible.
|
|
9151
|
+
*/
|
|
9152
|
+
tombstoneDays?: number;
|
|
9153
|
+
/**
|
|
9154
|
+
* Days a record is kept after it last changed, whatever its standing. A record — `active`, `deprecated` or `retracted` — whose `updatedAt` is more than this long ago is eligible, **unless it is pinned**: pinning says what matters in the room, and a room that wants a pinned record gone unpins it first. Absent means records are never eligible by age.
|
|
9155
|
+
*/
|
|
9156
|
+
recordDays?: number;
|
|
9157
|
+
/**
|
|
9158
|
+
* Ecosystem-defined extension members per SPEC.md §4.5.1. A host MUST NOT treat a member here as making more records eligible: a removal rule a member's reader cannot understand is one they were never told about.
|
|
9159
|
+
*/
|
|
9160
|
+
ext?: Ext;
|
|
9161
|
+
}
|
|
8897
9162
|
/**
|
|
8898
9163
|
* A passkey already bound to a subject, as listed by `auth/passkey/list` and targeted by `auth/passkey/revoke/*`. This is the auth service's own management view of a credential — not a WebAuthn dictionary — so its members are camelCase per SPEC.md §4.10. The exception is `transports`, whose values are the externally-owned WebAuthn transport tokens and are carried verbatim.
|
|
8899
9164
|
*/
|
|
@@ -10235,34 +10500,42 @@ export interface StepUpProof_VaultV0_2 {
|
|
|
10235
10500
|
challengeId: string;
|
|
10236
10501
|
}
|
|
10237
10502
|
/**
|
|
10238
|
-
*
|
|
10503
|
+
* What a config holds and whether it works, computed at the time of the read. Ciphertext bytes throughout.
|
|
10239
10504
|
*/
|
|
10240
|
-
export interface
|
|
10241
|
-
id: StorageConfigId;
|
|
10505
|
+
export interface StorageConfigFacts_VtcV0_1 {
|
|
10242
10506
|
/**
|
|
10243
|
-
*
|
|
10507
|
+
* Rooms assigned to this config.
|
|
10244
10508
|
*/
|
|
10245
|
-
|
|
10246
|
-
settings: StorageSettings;
|
|
10247
|
-
auth?: StorageAuth;
|
|
10509
|
+
rooms: number;
|
|
10248
10510
|
/**
|
|
10249
|
-
*
|
|
10511
|
+
* Blobs stored on this config that are not yet deleted, wherever their rooms are now assigned.
|
|
10250
10512
|
*/
|
|
10251
|
-
|
|
10252
|
-
state: ConfigState;
|
|
10513
|
+
files: number;
|
|
10253
10514
|
/**
|
|
10254
|
-
*
|
|
10515
|
+
* Their total size. Counts against `capacityBytes` until the backend deletion has actually happened, unlike room and member usage, which stop counting an orphaned blob at once.
|
|
10255
10516
|
*/
|
|
10256
|
-
|
|
10257
|
-
|
|
10258
|
-
|
|
10259
|
-
|
|
10260
|
-
|
|
10517
|
+
bytes: number;
|
|
10518
|
+
/**
|
|
10519
|
+
* Bytes of orphaned blobs awaiting deletion after their grace window.
|
|
10520
|
+
*/
|
|
10521
|
+
pendingDeleteBytes: number;
|
|
10522
|
+
credential: CredentialState_VtcV0_1;
|
|
10523
|
+
health: StorageHealth;
|
|
10524
|
+
/**
|
|
10525
|
+
* Present on a `walrus` config.
|
|
10526
|
+
*/
|
|
10527
|
+
walrus?: {
|
|
10528
|
+
/**
|
|
10529
|
+
* The Sui address that pays for storage, derived from the VTA account's key.
|
|
10530
|
+
*/
|
|
10531
|
+
signerAddress?: string;
|
|
10532
|
+
nextExtensionDueAt?: string;
|
|
10533
|
+
};
|
|
10261
10534
|
}
|
|
10262
10535
|
/**
|
|
10263
10536
|
* What a config holds and whether it works, computed at the time of the read. Ciphertext bytes throughout.
|
|
10264
10537
|
*/
|
|
10265
|
-
export interface
|
|
10538
|
+
export interface StorageConfigFacts_VtcV0_2 {
|
|
10266
10539
|
/**
|
|
10267
10540
|
* Rooms assigned to this config.
|
|
10268
10541
|
*/
|
|
@@ -10279,7 +10552,7 @@ export interface StorageConfigFacts {
|
|
|
10279
10552
|
* Bytes of orphaned blobs awaiting deletion after their grace window.
|
|
10280
10553
|
*/
|
|
10281
10554
|
pendingDeleteBytes: number;
|
|
10282
|
-
credential:
|
|
10555
|
+
credential: CredentialState_VtcV0_2;
|
|
10283
10556
|
health: StorageHealth;
|
|
10284
10557
|
/**
|
|
10285
10558
|
* Present on a `walrus` config.
|
|
@@ -10292,6 +10565,56 @@ export interface StorageConfigFacts {
|
|
|
10292
10565
|
nextExtensionDueAt?: string;
|
|
10293
10566
|
};
|
|
10294
10567
|
}
|
|
10568
|
+
/**
|
|
10569
|
+
* One storage config as the community holds it. Carries no secret.
|
|
10570
|
+
*/
|
|
10571
|
+
export interface StorageConfig_VtcV0_1 {
|
|
10572
|
+
id: StorageConfigId;
|
|
10573
|
+
/**
|
|
10574
|
+
* 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.
|
|
10575
|
+
*/
|
|
10576
|
+
label: string;
|
|
10577
|
+
settings: StorageSettings;
|
|
10578
|
+
auth?: StorageAuth_VtcV0_1;
|
|
10579
|
+
/**
|
|
10580
|
+
* 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.
|
|
10581
|
+
*/
|
|
10582
|
+
capacityBytes?: number;
|
|
10583
|
+
state: ConfigState;
|
|
10584
|
+
/**
|
|
10585
|
+
* True for the config a room is assigned to when neither the community's policy nor its creator names one.
|
|
10586
|
+
*/
|
|
10587
|
+
isDefault?: boolean;
|
|
10588
|
+
createdBy: string;
|
|
10589
|
+
createdAt: string;
|
|
10590
|
+
updatedBy?: string;
|
|
10591
|
+
updatedAt?: string;
|
|
10592
|
+
}
|
|
10593
|
+
/**
|
|
10594
|
+
* One storage config as the community holds it. Carries no secret.
|
|
10595
|
+
*/
|
|
10596
|
+
export interface StorageConfig_VtcV0_2 {
|
|
10597
|
+
id: StorageConfigId;
|
|
10598
|
+
/**
|
|
10599
|
+
* 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.
|
|
10600
|
+
*/
|
|
10601
|
+
label: string;
|
|
10602
|
+
settings: StorageSettings;
|
|
10603
|
+
auth?: StorageAuth_VtcV0_2;
|
|
10604
|
+
/**
|
|
10605
|
+
* 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.
|
|
10606
|
+
*/
|
|
10607
|
+
capacityBytes?: number;
|
|
10608
|
+
state: ConfigState;
|
|
10609
|
+
/**
|
|
10610
|
+
* True for the config a room is assigned to when neither the community's policy nor its creator names one.
|
|
10611
|
+
*/
|
|
10612
|
+
isDefault?: boolean;
|
|
10613
|
+
createdBy: string;
|
|
10614
|
+
createdAt: string;
|
|
10615
|
+
updatedBy?: string;
|
|
10616
|
+
updatedAt?: string;
|
|
10617
|
+
}
|
|
10295
10618
|
/**
|
|
10296
10619
|
* The last evidence the community has that a config works. Every member is optional: a config never probed and never used has none.
|
|
10297
10620
|
*/
|