@openvtc/trust-tasks 0.28.14 → 0.28.15
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 +43 -0
- package/dist/_extends.d.ts.map +1 -1
- package/dist/_extends.js +5 -0
- package/dist/_extends.js.map +1 -1
- package/dist/_shared/components.d.ts +344 -1
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/did-management/stats/set-resolution/0.1/payload.d.ts +398 -0
- package/dist/did-management/stats/set-resolution/0.1/payload.d.ts.map +1 -0
- package/dist/did-management/stats/set-resolution/0.1/payload.js +247 -0
- package/dist/did-management/stats/set-resolution/0.1/payload.js.map +1 -0
- package/dist/index.d.ts +75 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +75 -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/_shared/0.2/room.d.ts +1 -1
- package/dist/rooms/_shared/0.2/room.d.ts.map +1 -1
- package/dist/rooms/_shared/0.3/member-profile.d.ts +11 -0
- package/dist/rooms/_shared/0.3/member-profile.d.ts.map +1 -0
- package/dist/rooms/_shared/0.3/member-profile.js +6 -0
- package/dist/rooms/_shared/0.3/member-profile.js.map +1 -0
- package/dist/rooms/changed/0.1/payload.d.ts +139 -0
- package/dist/rooms/changed/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/changed/0.1/payload.js +84 -0
- package/dist/rooms/changed/0.1/payload.js.map +1 -0
- package/dist/rooms/keys/act/0.1/payload.d.ts +4 -4
- package/dist/rooms/keys/act/0.1/payload.js +1 -1
- package/dist/rooms/keys/act/0.10/payload.d.ts +14 -2
- package/dist/rooms/keys/act/0.10/payload.d.ts.map +1 -1
- package/dist/rooms/keys/act/0.10/payload.js +1 -1
- package/dist/rooms/keys/act/0.10/payload.js.map +1 -1
- package/dist/rooms/keys/act/0.11/payload.d.ts +572 -0
- package/dist/rooms/keys/act/0.11/payload.d.ts.map +1 -0
- package/dist/rooms/keys/act/0.11/payload.js +319 -0
- package/dist/rooms/keys/act/0.11/payload.js.map +1 -0
- package/dist/rooms/keys/act/0.12/payload.d.ts +560 -0
- package/dist/rooms/keys/act/0.12/payload.d.ts.map +1 -0
- package/dist/rooms/keys/act/0.12/payload.js +319 -0
- package/dist/rooms/keys/act/0.12/payload.js.map +1 -0
- package/dist/rooms/keys/act/0.2/payload.d.ts +4 -4
- package/dist/rooms/keys/act/0.2/payload.js +1 -1
- package/dist/rooms/keys/act/0.3/payload.d.ts +4 -4
- package/dist/rooms/keys/act/0.3/payload.js +1 -1
- package/dist/rooms/keys/act/0.4/payload.d.ts +4 -4
- package/dist/rooms/keys/act/0.4/payload.js +1 -1
- package/dist/rooms/keys/act/0.5/payload.d.ts +4 -4
- package/dist/rooms/keys/act/0.5/payload.js +1 -1
- package/dist/rooms/keys/act/0.6/payload.d.ts +4 -4
- package/dist/rooms/keys/act/0.6/payload.js +1 -1
- package/dist/rooms/keys/act/0.7/payload.d.ts +4 -4
- package/dist/rooms/keys/act/0.7/payload.js +1 -1
- package/dist/rooms/keys/act/0.8/payload.d.ts +4 -4
- package/dist/rooms/keys/act/0.8/payload.js +1 -1
- package/dist/rooms/keys/act/0.9/payload.d.ts +4 -4
- package/dist/rooms/keys/act/0.9/payload.js +1 -1
- package/dist/rooms/keys/browse/0.1/payload.d.ts +4 -4
- package/dist/rooms/keys/browse/0.1/payload.js +1 -1
- package/dist/rooms/keys/browse/0.2/payload.d.ts +4 -4
- package/dist/rooms/keys/browse/0.2/payload.js +1 -1
- package/dist/rooms/keys/browse/0.3/payload.d.ts +14 -2
- package/dist/rooms/keys/browse/0.3/payload.d.ts.map +1 -1
- package/dist/rooms/keys/browse/0.3/payload.js +1 -1
- package/dist/rooms/keys/browse/0.3/payload.js.map +1 -1
- package/dist/rooms/keys/browse/0.4/payload.d.ts +1127 -0
- package/dist/rooms/keys/browse/0.4/payload.d.ts.map +1 -0
- package/dist/rooms/keys/browse/0.4/payload.js +658 -0
- package/dist/rooms/keys/browse/0.4/payload.js.map +1 -0
- package/dist/rooms/keys/changed/0.1/payload.d.ts +173 -0
- package/dist/rooms/keys/changed/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/keys/changed/0.1/payload.js +99 -0
- package/dist/rooms/keys/changed/0.1/payload.js.map +1 -0
- package/dist/rooms/keys/profile/read/0.1/payload.d.ts +56 -4
- package/dist/rooms/keys/profile/read/0.1/payload.d.ts.map +1 -1
- package/dist/rooms/keys/profile/read/0.1/payload.js +28 -2
- package/dist/rooms/keys/profile/read/0.1/payload.js.map +1 -1
- package/dist/rooms/keys/profile/write/0.1/payload.d.ts +56 -4
- package/dist/rooms/keys/profile/write/0.1/payload.d.ts.map +1 -1
- package/dist/rooms/keys/profile/write/0.1/payload.js +28 -2
- package/dist/rooms/keys/profile/write/0.1/payload.js.map +1 -1
- package/dist/rooms/keys/read/0.1/payload.d.ts +14 -2
- package/dist/rooms/keys/read/0.1/payload.d.ts.map +1 -1
- package/dist/rooms/keys/read/0.1/payload.js +1 -1
- package/dist/rooms/keys/read/0.1/payload.js.map +1 -1
- package/dist/rooms/keys/read/0.2/payload.d.ts +1287 -0
- package/dist/rooms/keys/read/0.2/payload.d.ts.map +1 -0
- package/dist/rooms/keys/read/0.2/payload.js +689 -0
- package/dist/rooms/keys/read/0.2/payload.js.map +1 -0
- package/dist/rooms/keys/seal/0.1/payload.d.ts +4 -4
- package/dist/rooms/keys/seal/0.1/payload.js +1 -1
- package/dist/rooms/keys/seal/0.2/payload.d.ts +13 -2
- package/dist/rooms/keys/seal/0.2/payload.d.ts.map +1 -1
- package/dist/rooms/keys/seal/0.2/payload.js +1 -1
- package/dist/rooms/keys/seal/0.2/payload.js.map +1 -1
- package/dist/rooms/keys/seal/0.3/payload.d.ts +402 -0
- package/dist/rooms/keys/seal/0.3/payload.d.ts.map +1 -0
- package/dist/rooms/keys/seal/0.3/payload.js +229 -0
- package/dist/rooms/keys/seal/0.3/payload.js.map +1 -0
- package/dist/rooms/keys/watch/0.1/payload.d.ts +652 -0
- package/dist/rooms/keys/watch/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/keys/watch/0.1/payload.js +343 -0
- package/dist/rooms/keys/watch/0.1/payload.js.map +1 -0
- package/dist/rooms/records/get/0.1/payload.d.ts +4 -4
- package/dist/rooms/records/get/0.1/payload.js +1 -1
- package/dist/rooms/records/get/0.2/payload.d.ts +13 -2
- package/dist/rooms/records/get/0.2/payload.d.ts.map +1 -1
- package/dist/rooms/records/get/0.2/payload.js +1 -1
- package/dist/rooms/records/get/0.2/payload.js.map +1 -1
- package/dist/rooms/records/get/0.3/payload.d.ts +1064 -0
- package/dist/rooms/records/get/0.3/payload.d.ts.map +1 -0
- package/dist/rooms/records/get/0.3/payload.js +571 -0
- package/dist/rooms/records/get/0.3/payload.js.map +1 -0
- package/dist/rooms/records/list/0.1/payload.d.ts +4 -4
- package/dist/rooms/records/list/0.1/payload.js +1 -1
- package/dist/rooms/records/list/0.2/payload.d.ts +4 -4
- package/dist/rooms/records/list/0.2/payload.js +1 -1
- package/dist/rooms/records/list/0.3/payload.d.ts +4 -4
- package/dist/rooms/records/list/0.3/payload.js +1 -1
- package/dist/rooms/records/list/0.4/payload.d.ts +4 -4
- package/dist/rooms/records/list/0.4/payload.js +1 -1
- package/dist/rooms/records/list/0.5/payload.d.ts +13 -2
- package/dist/rooms/records/list/0.5/payload.d.ts.map +1 -1
- package/dist/rooms/records/list/0.5/payload.js +1 -1
- package/dist/rooms/records/list/0.5/payload.js.map +1 -1
- package/dist/rooms/records/list/0.6/payload.d.ts +1096 -0
- package/dist/rooms/records/list/0.6/payload.d.ts.map +1 -0
- package/dist/rooms/records/list/0.6/payload.js +596 -0
- package/dist/rooms/records/list/0.6/payload.js.map +1 -0
- package/dist/rooms/records/put/0.1/payload.d.ts +4 -4
- package/dist/rooms/records/put/0.1/payload.js +1 -1
- package/dist/rooms/records/put/0.2/payload.d.ts +4 -4
- package/dist/rooms/records/put/0.2/payload.js +1 -1
- package/dist/rooms/records/put/0.3/payload.d.ts +4 -4
- package/dist/rooms/records/put/0.3/payload.js +1 -1
- package/dist/rooms/records/put/0.4/payload.d.ts +146 -6
- package/dist/rooms/records/put/0.4/payload.d.ts.map +1 -1
- package/dist/rooms/records/put/0.4/payload.js +81 -3
- package/dist/rooms/records/put/0.4/payload.js.map +1 -1
- package/dist/rooms/records/put/0.5/payload.d.ts +1808 -0
- package/dist/rooms/records/put/0.5/payload.d.ts.map +1 -0
- package/dist/rooms/records/put/0.5/payload.js +984 -0
- package/dist/rooms/records/put/0.5/payload.js.map +1 -0
- package/dist/rooms/watch/0.1/payload.d.ts +497 -0
- package/dist/rooms/watch/0.1/payload.d.ts.map +1 -0
- package/dist/rooms/watch/0.1/payload.js +268 -0
- package/dist/rooms/watch/0.1/payload.js.map +1 -0
- package/dist/vtc/_shared/0.7/network-membership.d.ts +16 -0
- package/dist/vtc/_shared/0.7/network-membership.d.ts.map +1 -0
- package/dist/vtc/_shared/0.7/network-membership.js +6 -0
- package/dist/vtc/_shared/0.7/network-membership.js.map +1 -0
- package/dist/vtc/boards/delete/0.1/payload.d.ts +416 -0
- package/dist/vtc/boards/delete/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/boards/delete/0.1/payload.js +236 -0
- package/dist/vtc/boards/delete/0.1/payload.js.map +1 -0
- package/dist/vtc/boards/update/0.1/payload.d.ts +147 -2
- package/dist/vtc/boards/update/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/boards/update/0.1/payload.js +72 -0
- package/dist/vtc/boards/update/0.1/payload.js.map +1 -1
- package/dist/vtc/elections/list/0.5/payload.d.ts +3 -3
- package/dist/vtc/elections/list/0.5/payload.js +1 -1
- package/dist/vtc/elections/list/0.5/payload.js.map +1 -1
- package/dist/vtc/elections/show/0.6/payload.d.ts +3 -3
- package/dist/vtc/elections/show/0.6/payload.js +1 -1
- package/dist/vtc/elections/show/0.6/payload.js.map +1 -1
- package/dist/vtc/elections/tombstones/show/0.1/payload.d.ts +593 -0
- package/dist/vtc/elections/tombstones/show/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/elections/tombstones/show/0.1/payload.js +335 -0
- package/dist/vtc/elections/tombstones/show/0.1/payload.js.map +1 -0
- package/dist/vtc/networks/deliver/0.1/payload.d.ts +354 -0
- package/dist/vtc/networks/deliver/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/networks/deliver/0.1/payload.js +213 -0
- package/dist/vtc/networks/deliver/0.1/payload.js.map +1 -0
- package/dist/vtc/networks/evidence/0.1/payload.d.ts +14 -2
- package/dist/vtc/networks/evidence/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/networks/evidence/0.1/payload.js +1 -1
- package/dist/vtc/networks/evidence/0.1/payload.js.map +1 -1
- package/dist/vtc/networks/evidence/0.2/payload.d.ts +412 -0
- package/dist/vtc/networks/evidence/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/networks/evidence/0.2/payload.js +233 -0
- package/dist/vtc/networks/evidence/0.2/payload.js.map +1 -0
- package/dist/vtc/networks/groups/register/0.1/payload.d.ts +14 -2
- package/dist/vtc/networks/groups/register/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/networks/groups/register/0.1/payload.js +1 -1
- package/dist/vtc/networks/groups/register/0.1/payload.js.map +1 -1
- package/dist/vtc/networks/groups/register/0.2/payload.d.ts +680 -0
- package/dist/vtc/networks/groups/register/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/networks/groups/register/0.2/payload.js +401 -0
- package/dist/vtc/networks/groups/register/0.2/payload.js.map +1 -0
- package/dist/vtc/networks/join/0.1/payload.d.ts +14 -2
- package/dist/vtc/networks/join/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/networks/join/0.1/payload.js +1 -1
- package/dist/vtc/networks/join/0.1/payload.js.map +1 -1
- package/dist/vtc/networks/join/0.2/payload.d.ts +760 -0
- package/dist/vtc/networks/join/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/networks/join/0.2/payload.js +445 -0
- package/dist/vtc/networks/join/0.2/payload.js.map +1 -0
- package/dist/vtc/networks/leave/0.1/payload.d.ts +14 -2
- package/dist/vtc/networks/leave/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/networks/leave/0.1/payload.js +1 -1
- package/dist/vtc/networks/leave/0.1/payload.js.map +1 -1
- package/dist/vtc/networks/leave/0.2/payload.d.ts +664 -0
- package/dist/vtc/networks/leave/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/networks/leave/0.2/payload.js +393 -0
- package/dist/vtc/networks/leave/0.2/payload.js.map +1 -0
- package/dist/vtc/networks/list/0.1/payload.d.ts +14 -2
- package/dist/vtc/networks/list/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/networks/list/0.1/payload.js +1 -1
- package/dist/vtc/networks/list/0.1/payload.js.map +1 -1
- package/dist/vtc/networks/list/0.2/payload.d.ts +713 -0
- package/dist/vtc/networks/list/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/networks/list/0.2/payload.js +417 -0
- package/dist/vtc/networks/list/0.2/payload.js.map +1 -0
- package/dist/vtc/networks/repudiate/0.1/payload.d.ts +14 -2
- package/dist/vtc/networks/repudiate/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/networks/repudiate/0.1/payload.js +1 -1
- package/dist/vtc/networks/repudiate/0.1/payload.js.map +1 -1
- package/dist/vtc/networks/repudiate/0.2/payload.d.ts +680 -0
- package/dist/vtc/networks/repudiate/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/networks/repudiate/0.2/payload.js +400 -0
- package/dist/vtc/networks/repudiate/0.2/payload.js.map +1 -0
- package/dist/vtc/networks/show/0.1/payload.d.ts +14 -2
- package/dist/vtc/networks/show/0.1/payload.d.ts.map +1 -1
- package/dist/vtc/networks/show/0.1/payload.js +1 -1
- package/dist/vtc/networks/show/0.1/payload.js.map +1 -1
- package/dist/vtc/networks/show/0.2/payload.d.ts +650 -0
- package/dist/vtc/networks/show/0.2/payload.d.ts.map +1 -0
- package/dist/vtc/networks/show/0.2/payload.js +388 -0
- package/dist/vtc/networks/show/0.2/payload.js.map +1 -0
- package/package.json +1 -1
- package/src/_extends.ts +5 -0
- package/src/_shared/components.ts +352 -1
- package/src/did-management/stats/set-resolution/0.1/payload.ts +312 -0
- package/src/index.ts +75 -0
- package/src/rooms/_shared/0.1/room.ts +1 -1
- package/src/rooms/_shared/0.2/room.ts +1 -1
- package/src/rooms/_shared/0.3/member-profile.ts +11 -0
- package/src/rooms/changed/0.1/payload.ts +115 -0
- package/src/rooms/keys/act/0.1/payload.ts +5 -5
- package/src/rooms/keys/act/0.10/payload.ts +15 -3
- package/src/rooms/keys/act/0.11/payload.ts +408 -0
- package/src/rooms/keys/act/0.12/payload.ts +396 -0
- package/src/rooms/keys/act/0.2/payload.ts +5 -5
- package/src/rooms/keys/act/0.3/payload.ts +5 -5
- package/src/rooms/keys/act/0.4/payload.ts +5 -5
- package/src/rooms/keys/act/0.5/payload.ts +5 -5
- package/src/rooms/keys/act/0.6/payload.ts +5 -5
- package/src/rooms/keys/act/0.7/payload.ts +5 -5
- package/src/rooms/keys/act/0.8/payload.ts +5 -5
- package/src/rooms/keys/act/0.9/payload.ts +5 -5
- package/src/rooms/keys/browse/0.1/payload.ts +5 -5
- package/src/rooms/keys/browse/0.2/payload.ts +5 -5
- package/src/rooms/keys/browse/0.3/payload.ts +15 -3
- package/src/rooms/keys/browse/0.4/payload.ts +730 -0
- package/src/rooms/keys/changed/0.1/payload.ts +138 -0
- package/src/rooms/keys/profile/read/0.1/payload.ts +28 -2
- package/src/rooms/keys/profile/write/0.1/payload.ts +28 -2
- package/src/rooms/keys/read/0.1/payload.ts +15 -3
- package/src/rooms/keys/read/0.2/payload.ts +855 -0
- package/src/rooms/keys/seal/0.1/payload.ts +5 -5
- package/src/rooms/keys/seal/0.2/payload.ts +14 -3
- package/src/rooms/keys/seal/0.3/payload.ts +282 -0
- package/src/rooms/keys/watch/0.1/payload.ts +452 -0
- package/src/rooms/records/get/0.1/payload.ts +5 -5
- package/src/rooms/records/get/0.2/payload.ts +14 -3
- package/src/rooms/records/get/0.3/payload.ts +684 -0
- package/src/rooms/records/list/0.1/payload.ts +5 -5
- package/src/rooms/records/list/0.2/payload.ts +5 -5
- package/src/rooms/records/list/0.3/payload.ts +5 -5
- package/src/rooms/records/list/0.4/payload.ts +5 -5
- package/src/rooms/records/list/0.5/payload.ts +14 -3
- package/src/rooms/records/list/0.6/payload.ts +673 -0
- package/src/rooms/records/put/0.1/payload.ts +5 -5
- package/src/rooms/records/put/0.2/payload.ts +5 -5
- package/src/rooms/records/put/0.3/payload.ts +5 -5
- package/src/rooms/records/put/0.4/payload.ts +95 -5
- package/src/rooms/records/put/0.5/payload.ts +1095 -0
- package/src/rooms/watch/0.1/payload.ts +340 -0
- package/src/vtc/_shared/0.7/network-membership.ts +17 -0
- package/src/vtc/boards/delete/0.1/payload.ts +293 -0
- package/src/vtc/boards/update/0.1/payload.ts +91 -2
- package/src/vtc/elections/list/0.5/payload.ts +2 -2
- package/src/vtc/elections/show/0.6/payload.ts +2 -2
- package/src/vtc/elections/tombstones/show/0.1/payload.ts +401 -0
- package/src/vtc/networks/deliver/0.1/payload.ts +254 -0
- package/src/vtc/networks/evidence/0.1/payload.ts +15 -3
- package/src/vtc/networks/evidence/0.2/payload.ts +290 -0
- package/src/vtc/networks/groups/register/0.1/payload.ts +15 -3
- package/src/vtc/networks/groups/register/0.2/payload.ts +446 -0
- package/src/vtc/networks/join/0.1/payload.ts +15 -3
- package/src/vtc/networks/join/0.2/payload.ts +492 -0
- package/src/vtc/networks/leave/0.1/payload.ts +15 -3
- package/src/vtc/networks/leave/0.2/payload.ts +434 -0
- package/src/vtc/networks/list/0.1/payload.ts +15 -3
- package/src/vtc/networks/list/0.2/payload.ts +463 -0
- package/src/vtc/networks/repudiate/0.1/payload.ts +15 -3
- package/src/vtc/networks/repudiate/0.2/payload.ts +445 -0
- package/src/vtc/networks/show/0.1/payload.ts +15 -3
- package/src/vtc/networks/show/0.2/payload.ts +425 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../../../src/rooms/records/list/0.6/payload.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Source: specs/rooms/records/put/0.1/payload.schema.json
|
|
4
4
|
*/
|
|
5
5
|
import type { AuthorityPresentation, Ext, SealedRecord } from "../../../../_shared/components.js";
|
|
6
|
-
/** @deprecated superseded by rooms/records/put/0.
|
|
6
|
+
/** @deprecated superseded by rooms/records/put/0.5 */
|
|
7
7
|
export interface RoomsRecordsPutPayload {
|
|
8
8
|
/**
|
|
9
9
|
* The room's identifier. A host verifies the presentation against credentials issued by this identifier, never against a member list of its own — which is what lets a room move hosts without reissuing a credential.
|
|
@@ -45,7 +45,7 @@ export interface RoomsRecordsPutPayload {
|
|
|
45
45
|
/**
|
|
46
46
|
* Success response to rooms/records/put. Type https://trusttasks.org/spec/rooms/records/put/0.1#response.
|
|
47
47
|
*
|
|
48
|
-
* @deprecated superseded by rooms/records/put/0.
|
|
48
|
+
* @deprecated superseded by rooms/records/put/0.5
|
|
49
49
|
*/
|
|
50
50
|
export interface RoomsRecordsPutResponsePayload {
|
|
51
51
|
/**
|
|
@@ -83,7 +83,7 @@ export declare const DEPRECATION: string | null;
|
|
|
83
83
|
/**
|
|
84
84
|
* Stable alias for this specification's request payload shape.
|
|
85
85
|
*
|
|
86
|
-
* @deprecated superseded by rooms/records/put/0.
|
|
86
|
+
* @deprecated superseded by rooms/records/put/0.5
|
|
87
87
|
*/
|
|
88
88
|
export type Payload = RoomsRecordsPutPayload;
|
|
89
89
|
/** Trust Task response type URI (request type URI + "#response"). */
|
|
@@ -91,7 +91,7 @@ export declare const RESPONSE_TYPE_URI: "https://trusttasks.org/spec/rooms/recor
|
|
|
91
91
|
/**
|
|
92
92
|
* Stable alias for this specification's success-response payload shape.
|
|
93
93
|
*
|
|
94
|
-
* @deprecated superseded by rooms/records/put/0.
|
|
94
|
+
* @deprecated superseded by rooms/records/put/0.5
|
|
95
95
|
*/
|
|
96
96
|
export type Response = RoomsRecordsPutResponsePayload;
|
|
97
97
|
/**
|
|
@@ -17,7 +17,7 @@ export const EXTENDS = null;
|
|
|
17
17
|
* this package in a later scheduled batch (SPEC "Superseded and Withdrawn
|
|
18
18
|
* Versions").
|
|
19
19
|
*/
|
|
20
|
-
export const DEPRECATION = "superseded by rooms/records/put/0.
|
|
20
|
+
export const DEPRECATION = "superseded by rooms/records/put/0.5";
|
|
21
21
|
/** Trust Task response type URI (request type URI + "#response"). */
|
|
22
22
|
export const RESPONSE_TYPE_URI = "https://trusttasks.org/spec/rooms/records/put/0.1#response";
|
|
23
23
|
/**
|
|
@@ -6,7 +6,7 @@ import type { AuthorityPresentation, BlobRef, DigestMultibase, Ext, SealedRecord
|
|
|
6
6
|
/**
|
|
7
7
|
* A member writes a record to a data room, authorized by an authority chain the room itself issued. 0.2 adds `blobs`: a record can carry a file, whose ciphertext the host stores outside the record and whose description is sealed inside it.
|
|
8
8
|
*
|
|
9
|
-
* @deprecated superseded by rooms/records/put/0.
|
|
9
|
+
* @deprecated superseded by rooms/records/put/0.5
|
|
10
10
|
*/
|
|
11
11
|
export interface RoomsRecordsPutPayload {
|
|
12
12
|
/**
|
|
@@ -56,7 +56,7 @@ export interface RoomsRecordsPutPayload {
|
|
|
56
56
|
/**
|
|
57
57
|
* Success response to rooms/records/put. Type https://trusttasks.org/spec/rooms/records/put/0.2#response.
|
|
58
58
|
*
|
|
59
|
-
* @deprecated superseded by rooms/records/put/0.
|
|
59
|
+
* @deprecated superseded by rooms/records/put/0.5
|
|
60
60
|
*/
|
|
61
61
|
export interface RoomsRecordsPutResponsePayload {
|
|
62
62
|
/**
|
|
@@ -94,7 +94,7 @@ export declare const DEPRECATION: string | null;
|
|
|
94
94
|
/**
|
|
95
95
|
* Stable alias for this specification's request payload shape.
|
|
96
96
|
*
|
|
97
|
-
* @deprecated superseded by rooms/records/put/0.
|
|
97
|
+
* @deprecated superseded by rooms/records/put/0.5
|
|
98
98
|
*/
|
|
99
99
|
export type Payload = RoomsRecordsPutPayload;
|
|
100
100
|
/** Trust Task response type URI (request type URI + "#response"). */
|
|
@@ -102,7 +102,7 @@ export declare const RESPONSE_TYPE_URI: "https://trusttasks.org/spec/rooms/recor
|
|
|
102
102
|
/**
|
|
103
103
|
* Stable alias for this specification's success-response payload shape.
|
|
104
104
|
*
|
|
105
|
-
* @deprecated superseded by rooms/records/put/0.
|
|
105
|
+
* @deprecated superseded by rooms/records/put/0.5
|
|
106
106
|
*/
|
|
107
107
|
export type Response = RoomsRecordsPutResponsePayload;
|
|
108
108
|
/**
|
|
@@ -17,7 +17,7 @@ export const EXTENDS = null;
|
|
|
17
17
|
* this package in a later scheduled batch (SPEC "Superseded and Withdrawn
|
|
18
18
|
* Versions").
|
|
19
19
|
*/
|
|
20
|
-
export const DEPRECATION = "superseded by rooms/records/put/0.
|
|
20
|
+
export const DEPRECATION = "superseded by rooms/records/put/0.5";
|
|
21
21
|
/** Trust Task response type URI (request type URI + "#response"). */
|
|
22
22
|
export const RESPONSE_TYPE_URI = "https://trusttasks.org/spec/rooms/records/put/0.2#response";
|
|
23
23
|
/**
|
|
@@ -6,7 +6,7 @@ import type { AuthorityPresentation, BlobRef, DigestMultibase, Ext, PermittedUse
|
|
|
6
6
|
/**
|
|
7
7
|
* A member writes a record to a data room, authorized by an authority chain the room itself issued. 0.2 added `blobs`: a record can carry a file, whose ciphertext the host stores outside the record and whose description is sealed inside it. 0.3 lets an `open` room's `cleartext` carry the record's provenance — `basis`, `confidence`, `evidence`, `validFor` — and its `validUntil`, which the sealed tiers carry inside the signed `SealedRecordBody`.
|
|
8
8
|
*
|
|
9
|
-
* @deprecated superseded by rooms/records/put/0.
|
|
9
|
+
* @deprecated superseded by rooms/records/put/0.5
|
|
10
10
|
*/
|
|
11
11
|
export interface RoomsRecordsPutPayload {
|
|
12
12
|
/**
|
|
@@ -67,7 +67,7 @@ export interface RoomsRecordsPutPayload {
|
|
|
67
67
|
/**
|
|
68
68
|
* Success response to rooms/records/put. Type https://trusttasks.org/spec/rooms/records/put/0.3#response.
|
|
69
69
|
*
|
|
70
|
-
* @deprecated superseded by rooms/records/put/0.
|
|
70
|
+
* @deprecated superseded by rooms/records/put/0.5
|
|
71
71
|
*/
|
|
72
72
|
export interface RoomsRecordsPutResponsePayload {
|
|
73
73
|
/**
|
|
@@ -105,7 +105,7 @@ export declare const DEPRECATION: string | null;
|
|
|
105
105
|
/**
|
|
106
106
|
* Stable alias for this specification's request payload shape.
|
|
107
107
|
*
|
|
108
|
-
* @deprecated superseded by rooms/records/put/0.
|
|
108
|
+
* @deprecated superseded by rooms/records/put/0.5
|
|
109
109
|
*/
|
|
110
110
|
export type Payload = RoomsRecordsPutPayload;
|
|
111
111
|
/** Trust Task response type URI (request type URI + "#response"). */
|
|
@@ -113,7 +113,7 @@ export declare const RESPONSE_TYPE_URI: "https://trusttasks.org/spec/rooms/recor
|
|
|
113
113
|
/**
|
|
114
114
|
* Stable alias for this specification's success-response payload shape.
|
|
115
115
|
*
|
|
116
|
-
* @deprecated superseded by rooms/records/put/0.
|
|
116
|
+
* @deprecated superseded by rooms/records/put/0.5
|
|
117
117
|
*/
|
|
118
118
|
export type Response = RoomsRecordsPutResponsePayload;
|
|
119
119
|
/**
|
|
@@ -17,7 +17,7 @@ export const EXTENDS = null;
|
|
|
17
17
|
* this package in a later scheduled batch (SPEC "Superseded and Withdrawn
|
|
18
18
|
* Versions").
|
|
19
19
|
*/
|
|
20
|
-
export const DEPRECATION = "superseded by rooms/records/put/0.
|
|
20
|
+
export const DEPRECATION = "superseded by rooms/records/put/0.5";
|
|
21
21
|
/** Trust Task response type URI (request type URI + "#response"). */
|
|
22
22
|
export const RESPONSE_TYPE_URI = "https://trusttasks.org/spec/rooms/records/put/0.3#response";
|
|
23
23
|
/**
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
import type { AuthorityPresentation, BlobRef, DigestMultibase, Ext, FileManifest, PermittedUse, RecordBasis, RecordConfidence, RecordEvidence, RecordEvidenceCredential, RecordEvidenceList, RecordEvidenceRecord, RecordValidUntil, SealedRecord } from "../../../../_shared/components.js";
|
|
6
6
|
/**
|
|
7
7
|
* A member writes a record to a data room, authorized by an authority chain the room itself issued. 0.2 added `blobs`: a record can carry a file, whose ciphertext the host stores outside the record and whose description is sealed inside it. 0.3 lets an `open` room's `cleartext` carry the record's provenance — `basis`, `confidence`, `evidence`, `validFor` — and its `validUntil`, which the sealed tiers carry inside the signed `SealedRecordBody`. 0.4 lets an `open` room's record carry a file: its `FileManifest`, with the file key it was sealed under, in `cleartext.file`.
|
|
8
|
+
*
|
|
9
|
+
* @deprecated superseded by rooms/records/put/0.5
|
|
8
10
|
*/
|
|
9
11
|
export interface RoomsRecordsPutPayload {
|
|
10
12
|
/**
|
|
@@ -68,6 +70,8 @@ export interface RoomsRecordsPutPayload {
|
|
|
68
70
|
}
|
|
69
71
|
/**
|
|
70
72
|
* Success response to rooms/records/put. Type https://trusttasks.org/spec/rooms/records/put/0.3#response.
|
|
73
|
+
*
|
|
74
|
+
* @deprecated superseded by rooms/records/put/0.5
|
|
71
75
|
*/
|
|
72
76
|
export interface RoomsRecordsPutResponsePayload {
|
|
73
77
|
/**
|
|
@@ -102,11 +106,19 @@ export declare const EXTENDS: string | null;
|
|
|
102
106
|
* Versions").
|
|
103
107
|
*/
|
|
104
108
|
export declare const DEPRECATION: string | null;
|
|
105
|
-
/**
|
|
109
|
+
/**
|
|
110
|
+
* Stable alias for this specification's request payload shape.
|
|
111
|
+
*
|
|
112
|
+
* @deprecated superseded by rooms/records/put/0.5
|
|
113
|
+
*/
|
|
106
114
|
export type Payload = RoomsRecordsPutPayload;
|
|
107
115
|
/** Trust Task response type URI (request type URI + "#response"). */
|
|
108
116
|
export declare const RESPONSE_TYPE_URI: "https://trusttasks.org/spec/rooms/records/put/0.4#response";
|
|
109
|
-
/**
|
|
117
|
+
/**
|
|
118
|
+
* Stable alias for this specification's success-response payload shape.
|
|
119
|
+
*
|
|
120
|
+
* @deprecated superseded by rooms/records/put/0.5
|
|
121
|
+
*/
|
|
110
122
|
export type Response = RoomsRecordsPutResponsePayload;
|
|
111
123
|
/**
|
|
112
124
|
* This specification's payload schema, as a value.
|
|
@@ -269,7 +281,7 @@ export declare const PAYLOAD_SCHEMA: {
|
|
|
269
281
|
readonly type: "object";
|
|
270
282
|
readonly additionalProperties: false;
|
|
271
283
|
readonly required: readonly ["fileId", "name", "size", "digest", "epoch", "segmentSize", "blobRef"];
|
|
272
|
-
readonly description: "Everything that describes a file. On an `attributed` or `private` room it is the `file` member of the sealed record body: sealed with the record, signed by the record's author, and never seen by the host. On an `open` room it is the `file` member of the record's `cleartext` (rooms/records/put/0.4), carrying its own `fileKey`, and the host reads it like the rest of the record. Defined here so that clients interoperate.\n\n**Byte encodings.** In every derivation below, `fileId` is its **32 decoded bytes**, never its base64url text; `roomId` is the **UTF-8 bytes** of the room identifier exactly as it appears on the wire; string constants are their ASCII bytes; `u8`, `u32be` and `u64be` are unsigned integers of that width, big-endian. Epochs are unsigned 64-bit on the wire. An implementation that holds epochs in a narrower type **MUST** refuse a value it cannot represent with `malformedRequest` (or, reading a manifest, refuse the file), and **MUST NOT** truncate it.\n\n**The file key.** `file_key = HKDF-SHA256(ikm = storage_key(epoch), salt = fileId, info = \"openvtc/room/file/v1\" || roomId || u64be(epoch))`, where `storage_key(epoch)` is the room's per-epoch storage key, the one records are sealed under. It is derived per file and never stored. It is bound to the room and the epoch, so a key released for one room cannot open a blob relocated from another, and releasing it exposes one file and nothing else.\n\n**The file key on an `open` room.** An open room has no group and so no storage key to derive from. There the uploader mints the file key itself — 32 bytes from a cryptographically secure random source, for this file only — and carries it in `fileKey`; a reader uses that key and derives nothing. Everything else below (padding, STREAM, the associated data, reading) is the same on every tier, with `epoch` the room's epoch when the file was written. `fileKey` **MUST** be present in an open room's manifest and **MUST** be absent from a sealed record body's, where the key is derived; a reader **MUST** refuse a file whose manifest breaks either rule. The key in the clear withholds nothing from the host or from anyone it serves the record to — the open tier withholds nothing from them — but it keeps the stored blob opaque to whoever holds only the storage, and keeps one blob format, and one reader, for every tier.\n\n**Padding.** With `padding: \"padme\"`, the plaintext of length `L = size` is extended with zero bytes to `padme(L)`: for `L < 2`, `padme(L) = L`; otherwise `E = floor(log2 L)`, `S = floor(log2 E) + 1`, `z = E − S`, `mask = 2^z − 1`, and `padme(L) = (L + mask) & ~mask`. The padded length is `padme(size)`; without padding it is `size`. Padding bytes **MUST** be zero.\n\n**The STREAM construction.** The padded plaintext is cut into `segmentSize`-byte segments, the last holding the remainder; an empty plaintext is one empty final segment. Segment `i` is sealed with ChaCha20-Poly1305 under `file_key`, with nonce `u32be(0) || u64be(i)` and associated data `\"openvtc/room/file/v1\" || roomId || fileId || u64be(epoch) || u64be(i) || u8(final)`, where `final` is 1 on the last segment and 0 on every other. A host that truncates, reorders or splices ciphertext produces an authentication failure, never a shorter or rearranged file. The nonces are counters, so a `file_key` MUST NOT seal two different files; a fresh random `fileId` is what guarantees it. Each sealed segment is one transfer chunk of the blob (BlobManifest), so `segmentSize + 16` is the blob's `chunks.chunkSize`, and an empty file is one 16-byte chunk.\n\n**Reading.** A reader opens the record, derives or obtains the file key, and **MUST**, before trusting a byte:\n- check that the blob's `chunks.chunkSize` equals `segmentSize + 16` and that `chunks.chunkCount` equals `max(1, ceil(paddedLength / segmentSize))`, and refuse the file otherwise;\n- decrypt every segment in order, refusing the file on any authentication failure or on a final flag anywhere but the last segment;\n- check that the decrypted length equals the padded length, that every padding byte is zero, and, after removing the padding, that the plaintext matches `digest`.\n\nA reader **MUST** refuse a file that fails any check, and **MUST NOT** present it with a warning instead. A reader that streams **MUST NOT** treat the plaintext as received — save it under its final name, render it, or hand it to another component — until the digest has verified; it writes to a temporary destination and discards that destination on a mismatch.";
|
|
284
|
+
readonly description: "Everything that describes a file. On an `attributed` or `private` room it is the `file` member of the sealed record body: sealed with the record, signed by the record's author, and never seen by the host. On an `open` room it is the `file` member of the record's `cleartext` (rooms/records/put/0.4), carrying its own `fileKey`, and the host reads it like the rest of the record. Defined here so that clients interoperate.\n\n**Byte encodings.** In every derivation below, `fileId` is its **32 decoded bytes**, never its base64url text; `roomId` is the **UTF-8 bytes** of the room identifier exactly as it appears on the wire; string constants are their ASCII bytes; `u8`, `u32be` and `u64be` are unsigned integers of that width, big-endian. Epochs are unsigned 64-bit on the wire. An implementation that holds epochs in a narrower type **MUST** refuse a value it cannot represent with `malformedRequest` (or, reading a manifest, refuse the file), and **MUST NOT** truncate it.\n\n**The file key.** `file_key = HKDF-SHA256(ikm = storage_key(epoch), salt = fileId, info = \"openvtc/room/file/v1\" || roomId || u64be(epoch))`, where `storage_key(epoch)` is the room's per-epoch storage key, the one records are sealed under. It is derived per file and never stored. It is bound to the room and the epoch, so a key released for one room cannot open a blob relocated from another, and releasing it exposes one file and nothing else.\n\n**The file key on an `open` room.** An open room has no group and so no storage key to derive from. There the uploader mints the file key itself — 32 bytes from a cryptographically secure random source, for this file only — and carries it in `fileKey`; a reader uses that key and derives nothing. Everything else below (padding, STREAM, the associated data, reading) is the same on every tier, with `epoch` the room's epoch when the file was written. `fileKey` **MUST** be present in an open room's manifest and **MUST** be absent from a sealed record body's, where the key is derived; a reader **MUST** refuse a file whose manifest breaks either rule. The key in the clear withholds nothing from the host or from anyone it serves the record to — the open tier withholds nothing from them — but it keeps the stored blob opaque to whoever holds only the storage, and keeps one blob format, and one reader, for every tier.\n\n**Padding.** With `padding: \"padme\"`, the plaintext of length `L = size` is extended with zero bytes to `padme(L)`: for `L < 2`, `padme(L) = L`; otherwise `E = floor(log2 L)`, `S = floor(log2 E) + 1`, `z = E − S`, `mask = 2^z − 1`, and `padme(L) = (L + mask) & ~mask`. The padded length is `padme(size)`; without padding it is `size`. Padding bytes **MUST** be zero.\n\n**The STREAM construction.** The padded plaintext is cut into `segmentSize`-byte segments, the last holding the remainder; an empty plaintext is one empty final segment. Segment `i` is sealed with ChaCha20-Poly1305 under `file_key`, with nonce `u32be(0) || u64be(i)` and associated data `\"openvtc/room/file/v1\" || roomId || fileId || u64be(epoch) || u64be(i) || u8(final)`, where `final` is 1 on the last segment and 0 on every other. A host that truncates, reorders or splices ciphertext produces an authentication failure, never a shorter or rearranged file. The nonces are counters, so a `file_key` MUST NOT seal two different files; a fresh random `fileId` is what guarantees it. Each sealed segment is one transfer chunk of the blob (BlobManifest), so `segmentSize + 16` is the blob's `chunks.chunkSize`, and an empty file is one 16-byte chunk.\n\n**Reading.** A reader opens the record, derives or obtains the file key, and **MUST**, before trusting a byte:\n- check that the blob's `chunks.chunkSize` equals `segmentSize + 16` and that `chunks.chunkCount` equals `max(1, ceil(paddedLength / segmentSize))`, and refuse the file otherwise;\n- decrypt every segment in order, refusing the file on any authentication failure or on a final flag anywhere but the last segment;\n- check that the decrypted length equals the padded length, that every padding byte is zero, and, after removing the padding, that the plaintext matches `digest`.\n\nA reader **MUST** refuse a file that fails any check, and **MUST NOT** present it with a warning instead. A reader that streams **MUST NOT** treat the plaintext as received — save it under its final name, render it, or hand it to another component — until the digest has verified; it writes to a temporary destination and discards that destination on a mismatch.\n\n**An image's size and preview.** `width`, `height` and `preview` are OPTIONAL and advisory: they let a reader lay out an image, and show something, before it fetches and decrypts the blob. A reader that fetches the file checks them against the bytes — the decoded image's dimensions, and that the file is an image at all — and on a mismatch uses the bytes and discards them; it MUST NOT treat any of them as evidence about the file. On `attributed` and `private` rooms they are inside the sealed, signed body like the rest of the manifest, so the host learns nothing from them; on an `open` room they are in the clear, as everything there is, and a writer carries them only with `rooms/records/put/0.5` or later. A writer uses them only once the room's profile lists them in `recordMembers` (`RoomProfile`), as with the other members a reader that predates them refuses.";
|
|
273
285
|
readonly properties: {
|
|
274
286
|
readonly fileId: {
|
|
275
287
|
readonly type: "string";
|
|
@@ -321,6 +333,38 @@ export declare const PAYLOAD_SCHEMA: {
|
|
|
321
333
|
readonly pattern: "^[A-Za-z0-9_-]{43}$";
|
|
322
334
|
readonly description: "The file key itself, 32 bytes base64url without padding: present on an `open` room only, where there is no storage key to derive it from. Minted by the uploader from a cryptographically secure random source for this one file and never reused. MUST be absent on `attributed` and `private` rooms, where the key is derived and never stored.";
|
|
323
335
|
};
|
|
336
|
+
readonly width: {
|
|
337
|
+
readonly type: "integer";
|
|
338
|
+
readonly minimum: 1;
|
|
339
|
+
readonly maximum: 1048576;
|
|
340
|
+
readonly description: "The image's width in pixels, as the uploader read it. Advisory. A writer sets `width` and `height` together or neither; a reader ignores one without the other. A reader checks it against the decoded image.";
|
|
341
|
+
};
|
|
342
|
+
readonly height: {
|
|
343
|
+
readonly type: "integer";
|
|
344
|
+
readonly minimum: 1;
|
|
345
|
+
readonly maximum: 1048576;
|
|
346
|
+
readonly description: "The image's height in pixels, as the uploader read it. Advisory. A writer sets `width` and `height` together or neither; a reader ignores one without the other. A reader checks it against the decoded image.";
|
|
347
|
+
};
|
|
348
|
+
readonly preview: {
|
|
349
|
+
readonly type: "object";
|
|
350
|
+
readonly additionalProperties: false;
|
|
351
|
+
readonly required: readonly ["mediaType", "data"];
|
|
352
|
+
readonly description: "A small image standing in for the file until it is fetched: at most 8192 bytes before encoding, enough for a blurred thumbnail and small enough not to swell the record every listing reader opens. A reader renders it only as a raster image it decodes itself — never as SVG or any other type that can carry active content, never as a link, never fetching anything — and replaces it with the file once fetched. It is the uploader's rendering of the file, not a digest of it: a reader MUST NOT present it as the file's contents.";
|
|
353
|
+
readonly properties: {
|
|
354
|
+
readonly mediaType: {
|
|
355
|
+
readonly type: "string";
|
|
356
|
+
readonly enum: readonly ["image/jpeg", "image/png", "image/webp"];
|
|
357
|
+
readonly description: "The preview's own media type. Raster types only.";
|
|
358
|
+
};
|
|
359
|
+
readonly data: {
|
|
360
|
+
readonly type: "string";
|
|
361
|
+
readonly pattern: "^[A-Za-z0-9_-]+$";
|
|
362
|
+
readonly minLength: 1;
|
|
363
|
+
readonly maxLength: 10923;
|
|
364
|
+
readonly description: "The preview's bytes, base64url without padding: at most 8192 bytes decoded.";
|
|
365
|
+
};
|
|
366
|
+
};
|
|
367
|
+
};
|
|
324
368
|
};
|
|
325
369
|
};
|
|
326
370
|
readonly RecordValidUntil: {
|
|
@@ -556,7 +600,7 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
|
556
600
|
readonly type: "object";
|
|
557
601
|
readonly additionalProperties: false;
|
|
558
602
|
readonly required: readonly ["fileId", "name", "size", "digest", "epoch", "segmentSize", "blobRef"];
|
|
559
|
-
readonly description: "Everything that describes a file. On an `attributed` or `private` room it is the `file` member of the sealed record body: sealed with the record, signed by the record's author, and never seen by the host. On an `open` room it is the `file` member of the record's `cleartext` (rooms/records/put/0.4), carrying its own `fileKey`, and the host reads it like the rest of the record. Defined here so that clients interoperate.\n\n**Byte encodings.** In every derivation below, `fileId` is its **32 decoded bytes**, never its base64url text; `roomId` is the **UTF-8 bytes** of the room identifier exactly as it appears on the wire; string constants are their ASCII bytes; `u8`, `u32be` and `u64be` are unsigned integers of that width, big-endian. Epochs are unsigned 64-bit on the wire. An implementation that holds epochs in a narrower type **MUST** refuse a value it cannot represent with `malformedRequest` (or, reading a manifest, refuse the file), and **MUST NOT** truncate it.\n\n**The file key.** `file_key = HKDF-SHA256(ikm = storage_key(epoch), salt = fileId, info = \"openvtc/room/file/v1\" || roomId || u64be(epoch))`, where `storage_key(epoch)` is the room's per-epoch storage key, the one records are sealed under. It is derived per file and never stored. It is bound to the room and the epoch, so a key released for one room cannot open a blob relocated from another, and releasing it exposes one file and nothing else.\n\n**The file key on an `open` room.** An open room has no group and so no storage key to derive from. There the uploader mints the file key itself — 32 bytes from a cryptographically secure random source, for this file only — and carries it in `fileKey`; a reader uses that key and derives nothing. Everything else below (padding, STREAM, the associated data, reading) is the same on every tier, with `epoch` the room's epoch when the file was written. `fileKey` **MUST** be present in an open room's manifest and **MUST** be absent from a sealed record body's, where the key is derived; a reader **MUST** refuse a file whose manifest breaks either rule. The key in the clear withholds nothing from the host or from anyone it serves the record to — the open tier withholds nothing from them — but it keeps the stored blob opaque to whoever holds only the storage, and keeps one blob format, and one reader, for every tier.\n\n**Padding.** With `padding: \"padme\"`, the plaintext of length `L = size` is extended with zero bytes to `padme(L)`: for `L < 2`, `padme(L) = L`; otherwise `E = floor(log2 L)`, `S = floor(log2 E) + 1`, `z = E − S`, `mask = 2^z − 1`, and `padme(L) = (L + mask) & ~mask`. The padded length is `padme(size)`; without padding it is `size`. Padding bytes **MUST** be zero.\n\n**The STREAM construction.** The padded plaintext is cut into `segmentSize`-byte segments, the last holding the remainder; an empty plaintext is one empty final segment. Segment `i` is sealed with ChaCha20-Poly1305 under `file_key`, with nonce `u32be(0) || u64be(i)` and associated data `\"openvtc/room/file/v1\" || roomId || fileId || u64be(epoch) || u64be(i) || u8(final)`, where `final` is 1 on the last segment and 0 on every other. A host that truncates, reorders or splices ciphertext produces an authentication failure, never a shorter or rearranged file. The nonces are counters, so a `file_key` MUST NOT seal two different files; a fresh random `fileId` is what guarantees it. Each sealed segment is one transfer chunk of the blob (BlobManifest), so `segmentSize + 16` is the blob's `chunks.chunkSize`, and an empty file is one 16-byte chunk.\n\n**Reading.** A reader opens the record, derives or obtains the file key, and **MUST**, before trusting a byte:\n- check that the blob's `chunks.chunkSize` equals `segmentSize + 16` and that `chunks.chunkCount` equals `max(1, ceil(paddedLength / segmentSize))`, and refuse the file otherwise;\n- decrypt every segment in order, refusing the file on any authentication failure or on a final flag anywhere but the last segment;\n- check that the decrypted length equals the padded length, that every padding byte is zero, and, after removing the padding, that the plaintext matches `digest`.\n\nA reader **MUST** refuse a file that fails any check, and **MUST NOT** present it with a warning instead. A reader that streams **MUST NOT** treat the plaintext as received — save it under its final name, render it, or hand it to another component — until the digest has verified; it writes to a temporary destination and discards that destination on a mismatch.";
|
|
603
|
+
readonly description: "Everything that describes a file. On an `attributed` or `private` room it is the `file` member of the sealed record body: sealed with the record, signed by the record's author, and never seen by the host. On an `open` room it is the `file` member of the record's `cleartext` (rooms/records/put/0.4), carrying its own `fileKey`, and the host reads it like the rest of the record. Defined here so that clients interoperate.\n\n**Byte encodings.** In every derivation below, `fileId` is its **32 decoded bytes**, never its base64url text; `roomId` is the **UTF-8 bytes** of the room identifier exactly as it appears on the wire; string constants are their ASCII bytes; `u8`, `u32be` and `u64be` are unsigned integers of that width, big-endian. Epochs are unsigned 64-bit on the wire. An implementation that holds epochs in a narrower type **MUST** refuse a value it cannot represent with `malformedRequest` (or, reading a manifest, refuse the file), and **MUST NOT** truncate it.\n\n**The file key.** `file_key = HKDF-SHA256(ikm = storage_key(epoch), salt = fileId, info = \"openvtc/room/file/v1\" || roomId || u64be(epoch))`, where `storage_key(epoch)` is the room's per-epoch storage key, the one records are sealed under. It is derived per file and never stored. It is bound to the room and the epoch, so a key released for one room cannot open a blob relocated from another, and releasing it exposes one file and nothing else.\n\n**The file key on an `open` room.** An open room has no group and so no storage key to derive from. There the uploader mints the file key itself — 32 bytes from a cryptographically secure random source, for this file only — and carries it in `fileKey`; a reader uses that key and derives nothing. Everything else below (padding, STREAM, the associated data, reading) is the same on every tier, with `epoch` the room's epoch when the file was written. `fileKey` **MUST** be present in an open room's manifest and **MUST** be absent from a sealed record body's, where the key is derived; a reader **MUST** refuse a file whose manifest breaks either rule. The key in the clear withholds nothing from the host or from anyone it serves the record to — the open tier withholds nothing from them — but it keeps the stored blob opaque to whoever holds only the storage, and keeps one blob format, and one reader, for every tier.\n\n**Padding.** With `padding: \"padme\"`, the plaintext of length `L = size` is extended with zero bytes to `padme(L)`: for `L < 2`, `padme(L) = L`; otherwise `E = floor(log2 L)`, `S = floor(log2 E) + 1`, `z = E − S`, `mask = 2^z − 1`, and `padme(L) = (L + mask) & ~mask`. The padded length is `padme(size)`; without padding it is `size`. Padding bytes **MUST** be zero.\n\n**The STREAM construction.** The padded plaintext is cut into `segmentSize`-byte segments, the last holding the remainder; an empty plaintext is one empty final segment. Segment `i` is sealed with ChaCha20-Poly1305 under `file_key`, with nonce `u32be(0) || u64be(i)` and associated data `\"openvtc/room/file/v1\" || roomId || fileId || u64be(epoch) || u64be(i) || u8(final)`, where `final` is 1 on the last segment and 0 on every other. A host that truncates, reorders or splices ciphertext produces an authentication failure, never a shorter or rearranged file. The nonces are counters, so a `file_key` MUST NOT seal two different files; a fresh random `fileId` is what guarantees it. Each sealed segment is one transfer chunk of the blob (BlobManifest), so `segmentSize + 16` is the blob's `chunks.chunkSize`, and an empty file is one 16-byte chunk.\n\n**Reading.** A reader opens the record, derives or obtains the file key, and **MUST**, before trusting a byte:\n- check that the blob's `chunks.chunkSize` equals `segmentSize + 16` and that `chunks.chunkCount` equals `max(1, ceil(paddedLength / segmentSize))`, and refuse the file otherwise;\n- decrypt every segment in order, refusing the file on any authentication failure or on a final flag anywhere but the last segment;\n- check that the decrypted length equals the padded length, that every padding byte is zero, and, after removing the padding, that the plaintext matches `digest`.\n\nA reader **MUST** refuse a file that fails any check, and **MUST NOT** present it with a warning instead. A reader that streams **MUST NOT** treat the plaintext as received — save it under its final name, render it, or hand it to another component — until the digest has verified; it writes to a temporary destination and discards that destination on a mismatch.\n\n**An image's size and preview.** `width`, `height` and `preview` are OPTIONAL and advisory: they let a reader lay out an image, and show something, before it fetches and decrypts the blob. A reader that fetches the file checks them against the bytes — the decoded image's dimensions, and that the file is an image at all — and on a mismatch uses the bytes and discards them; it MUST NOT treat any of them as evidence about the file. On `attributed` and `private` rooms they are inside the sealed, signed body like the rest of the manifest, so the host learns nothing from them; on an `open` room they are in the clear, as everything there is, and a writer carries them only with `rooms/records/put/0.5` or later. A writer uses them only once the room's profile lists them in `recordMembers` (`RoomProfile`), as with the other members a reader that predates them refuses.";
|
|
560
604
|
readonly properties: {
|
|
561
605
|
readonly fileId: {
|
|
562
606
|
readonly type: "string";
|
|
@@ -608,6 +652,38 @@ export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
|
608
652
|
readonly pattern: "^[A-Za-z0-9_-]{43}$";
|
|
609
653
|
readonly description: "The file key itself, 32 bytes base64url without padding: present on an `open` room only, where there is no storage key to derive it from. Minted by the uploader from a cryptographically secure random source for this one file and never reused. MUST be absent on `attributed` and `private` rooms, where the key is derived and never stored.";
|
|
610
654
|
};
|
|
655
|
+
readonly width: {
|
|
656
|
+
readonly type: "integer";
|
|
657
|
+
readonly minimum: 1;
|
|
658
|
+
readonly maximum: 1048576;
|
|
659
|
+
readonly description: "The image's width in pixels, as the uploader read it. Advisory. A writer sets `width` and `height` together or neither; a reader ignores one without the other. A reader checks it against the decoded image.";
|
|
660
|
+
};
|
|
661
|
+
readonly height: {
|
|
662
|
+
readonly type: "integer";
|
|
663
|
+
readonly minimum: 1;
|
|
664
|
+
readonly maximum: 1048576;
|
|
665
|
+
readonly description: "The image's height in pixels, as the uploader read it. Advisory. A writer sets `width` and `height` together or neither; a reader ignores one without the other. A reader checks it against the decoded image.";
|
|
666
|
+
};
|
|
667
|
+
readonly preview: {
|
|
668
|
+
readonly type: "object";
|
|
669
|
+
readonly additionalProperties: false;
|
|
670
|
+
readonly required: readonly ["mediaType", "data"];
|
|
671
|
+
readonly description: "A small image standing in for the file until it is fetched: at most 8192 bytes before encoding, enough for a blurred thumbnail and small enough not to swell the record every listing reader opens. A reader renders it only as a raster image it decodes itself — never as SVG or any other type that can carry active content, never as a link, never fetching anything — and replaces it with the file once fetched. It is the uploader's rendering of the file, not a digest of it: a reader MUST NOT present it as the file's contents.";
|
|
672
|
+
readonly properties: {
|
|
673
|
+
readonly mediaType: {
|
|
674
|
+
readonly type: "string";
|
|
675
|
+
readonly enum: readonly ["image/jpeg", "image/png", "image/webp"];
|
|
676
|
+
readonly description: "The preview's own media type. Raster types only.";
|
|
677
|
+
};
|
|
678
|
+
readonly data: {
|
|
679
|
+
readonly type: "string";
|
|
680
|
+
readonly pattern: "^[A-Za-z0-9_-]+$";
|
|
681
|
+
readonly minLength: 1;
|
|
682
|
+
readonly maxLength: 10923;
|
|
683
|
+
readonly description: "The preview's bytes, base64url without padding: at most 8192 bytes decoded.";
|
|
684
|
+
};
|
|
685
|
+
};
|
|
686
|
+
};
|
|
611
687
|
};
|
|
612
688
|
};
|
|
613
689
|
readonly RecordValidUntil: {
|
|
@@ -946,7 +1022,7 @@ export declare const SPEC: {
|
|
|
946
1022
|
readonly type: "object";
|
|
947
1023
|
readonly additionalProperties: false;
|
|
948
1024
|
readonly required: readonly ["fileId", "name", "size", "digest", "epoch", "segmentSize", "blobRef"];
|
|
949
|
-
readonly description: "Everything that describes a file. On an `attributed` or `private` room it is the `file` member of the sealed record body: sealed with the record, signed by the record's author, and never seen by the host. On an `open` room it is the `file` member of the record's `cleartext` (rooms/records/put/0.4), carrying its own `fileKey`, and the host reads it like the rest of the record. Defined here so that clients interoperate.\n\n**Byte encodings.** In every derivation below, `fileId` is its **32 decoded bytes**, never its base64url text; `roomId` is the **UTF-8 bytes** of the room identifier exactly as it appears on the wire; string constants are their ASCII bytes; `u8`, `u32be` and `u64be` are unsigned integers of that width, big-endian. Epochs are unsigned 64-bit on the wire. An implementation that holds epochs in a narrower type **MUST** refuse a value it cannot represent with `malformedRequest` (or, reading a manifest, refuse the file), and **MUST NOT** truncate it.\n\n**The file key.** `file_key = HKDF-SHA256(ikm = storage_key(epoch), salt = fileId, info = \"openvtc/room/file/v1\" || roomId || u64be(epoch))`, where `storage_key(epoch)` is the room's per-epoch storage key, the one records are sealed under. It is derived per file and never stored. It is bound to the room and the epoch, so a key released for one room cannot open a blob relocated from another, and releasing it exposes one file and nothing else.\n\n**The file key on an `open` room.** An open room has no group and so no storage key to derive from. There the uploader mints the file key itself — 32 bytes from a cryptographically secure random source, for this file only — and carries it in `fileKey`; a reader uses that key and derives nothing. Everything else below (padding, STREAM, the associated data, reading) is the same on every tier, with `epoch` the room's epoch when the file was written. `fileKey` **MUST** be present in an open room's manifest and **MUST** be absent from a sealed record body's, where the key is derived; a reader **MUST** refuse a file whose manifest breaks either rule. The key in the clear withholds nothing from the host or from anyone it serves the record to — the open tier withholds nothing from them — but it keeps the stored blob opaque to whoever holds only the storage, and keeps one blob format, and one reader, for every tier.\n\n**Padding.** With `padding: \"padme\"`, the plaintext of length `L = size` is extended with zero bytes to `padme(L)`: for `L < 2`, `padme(L) = L`; otherwise `E = floor(log2 L)`, `S = floor(log2 E) + 1`, `z = E − S`, `mask = 2^z − 1`, and `padme(L) = (L + mask) & ~mask`. The padded length is `padme(size)`; without padding it is `size`. Padding bytes **MUST** be zero.\n\n**The STREAM construction.** The padded plaintext is cut into `segmentSize`-byte segments, the last holding the remainder; an empty plaintext is one empty final segment. Segment `i` is sealed with ChaCha20-Poly1305 under `file_key`, with nonce `u32be(0) || u64be(i)` and associated data `\"openvtc/room/file/v1\" || roomId || fileId || u64be(epoch) || u64be(i) || u8(final)`, where `final` is 1 on the last segment and 0 on every other. A host that truncates, reorders or splices ciphertext produces an authentication failure, never a shorter or rearranged file. The nonces are counters, so a `file_key` MUST NOT seal two different files; a fresh random `fileId` is what guarantees it. Each sealed segment is one transfer chunk of the blob (BlobManifest), so `segmentSize + 16` is the blob's `chunks.chunkSize`, and an empty file is one 16-byte chunk.\n\n**Reading.** A reader opens the record, derives or obtains the file key, and **MUST**, before trusting a byte:\n- check that the blob's `chunks.chunkSize` equals `segmentSize + 16` and that `chunks.chunkCount` equals `max(1, ceil(paddedLength / segmentSize))`, and refuse the file otherwise;\n- decrypt every segment in order, refusing the file on any authentication failure or on a final flag anywhere but the last segment;\n- check that the decrypted length equals the padded length, that every padding byte is zero, and, after removing the padding, that the plaintext matches `digest`.\n\nA reader **MUST** refuse a file that fails any check, and **MUST NOT** present it with a warning instead. A reader that streams **MUST NOT** treat the plaintext as received — save it under its final name, render it, or hand it to another component — until the digest has verified; it writes to a temporary destination and discards that destination on a mismatch.";
|
|
1025
|
+
readonly description: "Everything that describes a file. On an `attributed` or `private` room it is the `file` member of the sealed record body: sealed with the record, signed by the record's author, and never seen by the host. On an `open` room it is the `file` member of the record's `cleartext` (rooms/records/put/0.4), carrying its own `fileKey`, and the host reads it like the rest of the record. Defined here so that clients interoperate.\n\n**Byte encodings.** In every derivation below, `fileId` is its **32 decoded bytes**, never its base64url text; `roomId` is the **UTF-8 bytes** of the room identifier exactly as it appears on the wire; string constants are their ASCII bytes; `u8`, `u32be` and `u64be` are unsigned integers of that width, big-endian. Epochs are unsigned 64-bit on the wire. An implementation that holds epochs in a narrower type **MUST** refuse a value it cannot represent with `malformedRequest` (or, reading a manifest, refuse the file), and **MUST NOT** truncate it.\n\n**The file key.** `file_key = HKDF-SHA256(ikm = storage_key(epoch), salt = fileId, info = \"openvtc/room/file/v1\" || roomId || u64be(epoch))`, where `storage_key(epoch)` is the room's per-epoch storage key, the one records are sealed under. It is derived per file and never stored. It is bound to the room and the epoch, so a key released for one room cannot open a blob relocated from another, and releasing it exposes one file and nothing else.\n\n**The file key on an `open` room.** An open room has no group and so no storage key to derive from. There the uploader mints the file key itself — 32 bytes from a cryptographically secure random source, for this file only — and carries it in `fileKey`; a reader uses that key and derives nothing. Everything else below (padding, STREAM, the associated data, reading) is the same on every tier, with `epoch` the room's epoch when the file was written. `fileKey` **MUST** be present in an open room's manifest and **MUST** be absent from a sealed record body's, where the key is derived; a reader **MUST** refuse a file whose manifest breaks either rule. The key in the clear withholds nothing from the host or from anyone it serves the record to — the open tier withholds nothing from them — but it keeps the stored blob opaque to whoever holds only the storage, and keeps one blob format, and one reader, for every tier.\n\n**Padding.** With `padding: \"padme\"`, the plaintext of length `L = size` is extended with zero bytes to `padme(L)`: for `L < 2`, `padme(L) = L`; otherwise `E = floor(log2 L)`, `S = floor(log2 E) + 1`, `z = E − S`, `mask = 2^z − 1`, and `padme(L) = (L + mask) & ~mask`. The padded length is `padme(size)`; without padding it is `size`. Padding bytes **MUST** be zero.\n\n**The STREAM construction.** The padded plaintext is cut into `segmentSize`-byte segments, the last holding the remainder; an empty plaintext is one empty final segment. Segment `i` is sealed with ChaCha20-Poly1305 under `file_key`, with nonce `u32be(0) || u64be(i)` and associated data `\"openvtc/room/file/v1\" || roomId || fileId || u64be(epoch) || u64be(i) || u8(final)`, where `final` is 1 on the last segment and 0 on every other. A host that truncates, reorders or splices ciphertext produces an authentication failure, never a shorter or rearranged file. The nonces are counters, so a `file_key` MUST NOT seal two different files; a fresh random `fileId` is what guarantees it. Each sealed segment is one transfer chunk of the blob (BlobManifest), so `segmentSize + 16` is the blob's `chunks.chunkSize`, and an empty file is one 16-byte chunk.\n\n**Reading.** A reader opens the record, derives or obtains the file key, and **MUST**, before trusting a byte:\n- check that the blob's `chunks.chunkSize` equals `segmentSize + 16` and that `chunks.chunkCount` equals `max(1, ceil(paddedLength / segmentSize))`, and refuse the file otherwise;\n- decrypt every segment in order, refusing the file on any authentication failure or on a final flag anywhere but the last segment;\n- check that the decrypted length equals the padded length, that every padding byte is zero, and, after removing the padding, that the plaintext matches `digest`.\n\nA reader **MUST** refuse a file that fails any check, and **MUST NOT** present it with a warning instead. A reader that streams **MUST NOT** treat the plaintext as received — save it under its final name, render it, or hand it to another component — until the digest has verified; it writes to a temporary destination and discards that destination on a mismatch.\n\n**An image's size and preview.** `width`, `height` and `preview` are OPTIONAL and advisory: they let a reader lay out an image, and show something, before it fetches and decrypts the blob. A reader that fetches the file checks them against the bytes — the decoded image's dimensions, and that the file is an image at all — and on a mismatch uses the bytes and discards them; it MUST NOT treat any of them as evidence about the file. On `attributed` and `private` rooms they are inside the sealed, signed body like the rest of the manifest, so the host learns nothing from them; on an `open` room they are in the clear, as everything there is, and a writer carries them only with `rooms/records/put/0.5` or later. A writer uses them only once the room's profile lists them in `recordMembers` (`RoomProfile`), as with the other members a reader that predates them refuses.";
|
|
950
1026
|
readonly properties: {
|
|
951
1027
|
readonly fileId: {
|
|
952
1028
|
readonly type: "string";
|
|
@@ -998,6 +1074,38 @@ export declare const SPEC: {
|
|
|
998
1074
|
readonly pattern: "^[A-Za-z0-9_-]{43}$";
|
|
999
1075
|
readonly description: "The file key itself, 32 bytes base64url without padding: present on an `open` room only, where there is no storage key to derive it from. Minted by the uploader from a cryptographically secure random source for this one file and never reused. MUST be absent on `attributed` and `private` rooms, where the key is derived and never stored.";
|
|
1000
1076
|
};
|
|
1077
|
+
readonly width: {
|
|
1078
|
+
readonly type: "integer";
|
|
1079
|
+
readonly minimum: 1;
|
|
1080
|
+
readonly maximum: 1048576;
|
|
1081
|
+
readonly description: "The image's width in pixels, as the uploader read it. Advisory. A writer sets `width` and `height` together or neither; a reader ignores one without the other. A reader checks it against the decoded image.";
|
|
1082
|
+
};
|
|
1083
|
+
readonly height: {
|
|
1084
|
+
readonly type: "integer";
|
|
1085
|
+
readonly minimum: 1;
|
|
1086
|
+
readonly maximum: 1048576;
|
|
1087
|
+
readonly description: "The image's height in pixels, as the uploader read it. Advisory. A writer sets `width` and `height` together or neither; a reader ignores one without the other. A reader checks it against the decoded image.";
|
|
1088
|
+
};
|
|
1089
|
+
readonly preview: {
|
|
1090
|
+
readonly type: "object";
|
|
1091
|
+
readonly additionalProperties: false;
|
|
1092
|
+
readonly required: readonly ["mediaType", "data"];
|
|
1093
|
+
readonly description: "A small image standing in for the file until it is fetched: at most 8192 bytes before encoding, enough for a blurred thumbnail and small enough not to swell the record every listing reader opens. A reader renders it only as a raster image it decodes itself — never as SVG or any other type that can carry active content, never as a link, never fetching anything — and replaces it with the file once fetched. It is the uploader's rendering of the file, not a digest of it: a reader MUST NOT present it as the file's contents.";
|
|
1094
|
+
readonly properties: {
|
|
1095
|
+
readonly mediaType: {
|
|
1096
|
+
readonly type: "string";
|
|
1097
|
+
readonly enum: readonly ["image/jpeg", "image/png", "image/webp"];
|
|
1098
|
+
readonly description: "The preview's own media type. Raster types only.";
|
|
1099
|
+
};
|
|
1100
|
+
readonly data: {
|
|
1101
|
+
readonly type: "string";
|
|
1102
|
+
readonly pattern: "^[A-Za-z0-9_-]+$";
|
|
1103
|
+
readonly minLength: 1;
|
|
1104
|
+
readonly maxLength: 10923;
|
|
1105
|
+
readonly description: "The preview's bytes, base64url without padding: at most 8192 bytes decoded.";
|
|
1106
|
+
};
|
|
1107
|
+
};
|
|
1108
|
+
};
|
|
1001
1109
|
};
|
|
1002
1110
|
};
|
|
1003
1111
|
readonly RecordValidUntil: {
|
|
@@ -1244,7 +1352,7 @@ export declare const RESPONSE_SPEC: {
|
|
|
1244
1352
|
readonly type: "object";
|
|
1245
1353
|
readonly additionalProperties: false;
|
|
1246
1354
|
readonly required: readonly ["fileId", "name", "size", "digest", "epoch", "segmentSize", "blobRef"];
|
|
1247
|
-
readonly description: "Everything that describes a file. On an `attributed` or `private` room it is the `file` member of the sealed record body: sealed with the record, signed by the record's author, and never seen by the host. On an `open` room it is the `file` member of the record's `cleartext` (rooms/records/put/0.4), carrying its own `fileKey`, and the host reads it like the rest of the record. Defined here so that clients interoperate.\n\n**Byte encodings.** In every derivation below, `fileId` is its **32 decoded bytes**, never its base64url text; `roomId` is the **UTF-8 bytes** of the room identifier exactly as it appears on the wire; string constants are their ASCII bytes; `u8`, `u32be` and `u64be` are unsigned integers of that width, big-endian. Epochs are unsigned 64-bit on the wire. An implementation that holds epochs in a narrower type **MUST** refuse a value it cannot represent with `malformedRequest` (or, reading a manifest, refuse the file), and **MUST NOT** truncate it.\n\n**The file key.** `file_key = HKDF-SHA256(ikm = storage_key(epoch), salt = fileId, info = \"openvtc/room/file/v1\" || roomId || u64be(epoch))`, where `storage_key(epoch)` is the room's per-epoch storage key, the one records are sealed under. It is derived per file and never stored. It is bound to the room and the epoch, so a key released for one room cannot open a blob relocated from another, and releasing it exposes one file and nothing else.\n\n**The file key on an `open` room.** An open room has no group and so no storage key to derive from. There the uploader mints the file key itself — 32 bytes from a cryptographically secure random source, for this file only — and carries it in `fileKey`; a reader uses that key and derives nothing. Everything else below (padding, STREAM, the associated data, reading) is the same on every tier, with `epoch` the room's epoch when the file was written. `fileKey` **MUST** be present in an open room's manifest and **MUST** be absent from a sealed record body's, where the key is derived; a reader **MUST** refuse a file whose manifest breaks either rule. The key in the clear withholds nothing from the host or from anyone it serves the record to — the open tier withholds nothing from them — but it keeps the stored blob opaque to whoever holds only the storage, and keeps one blob format, and one reader, for every tier.\n\n**Padding.** With `padding: \"padme\"`, the plaintext of length `L = size` is extended with zero bytes to `padme(L)`: for `L < 2`, `padme(L) = L`; otherwise `E = floor(log2 L)`, `S = floor(log2 E) + 1`, `z = E − S`, `mask = 2^z − 1`, and `padme(L) = (L + mask) & ~mask`. The padded length is `padme(size)`; without padding it is `size`. Padding bytes **MUST** be zero.\n\n**The STREAM construction.** The padded plaintext is cut into `segmentSize`-byte segments, the last holding the remainder; an empty plaintext is one empty final segment. Segment `i` is sealed with ChaCha20-Poly1305 under `file_key`, with nonce `u32be(0) || u64be(i)` and associated data `\"openvtc/room/file/v1\" || roomId || fileId || u64be(epoch) || u64be(i) || u8(final)`, where `final` is 1 on the last segment and 0 on every other. A host that truncates, reorders or splices ciphertext produces an authentication failure, never a shorter or rearranged file. The nonces are counters, so a `file_key` MUST NOT seal two different files; a fresh random `fileId` is what guarantees it. Each sealed segment is one transfer chunk of the blob (BlobManifest), so `segmentSize + 16` is the blob's `chunks.chunkSize`, and an empty file is one 16-byte chunk.\n\n**Reading.** A reader opens the record, derives or obtains the file key, and **MUST**, before trusting a byte:\n- check that the blob's `chunks.chunkSize` equals `segmentSize + 16` and that `chunks.chunkCount` equals `max(1, ceil(paddedLength / segmentSize))`, and refuse the file otherwise;\n- decrypt every segment in order, refusing the file on any authentication failure or on a final flag anywhere but the last segment;\n- check that the decrypted length equals the padded length, that every padding byte is zero, and, after removing the padding, that the plaintext matches `digest`.\n\nA reader **MUST** refuse a file that fails any check, and **MUST NOT** present it with a warning instead. A reader that streams **MUST NOT** treat the plaintext as received — save it under its final name, render it, or hand it to another component — until the digest has verified; it writes to a temporary destination and discards that destination on a mismatch.";
|
|
1355
|
+
readonly description: "Everything that describes a file. On an `attributed` or `private` room it is the `file` member of the sealed record body: sealed with the record, signed by the record's author, and never seen by the host. On an `open` room it is the `file` member of the record's `cleartext` (rooms/records/put/0.4), carrying its own `fileKey`, and the host reads it like the rest of the record. Defined here so that clients interoperate.\n\n**Byte encodings.** In every derivation below, `fileId` is its **32 decoded bytes**, never its base64url text; `roomId` is the **UTF-8 bytes** of the room identifier exactly as it appears on the wire; string constants are their ASCII bytes; `u8`, `u32be` and `u64be` are unsigned integers of that width, big-endian. Epochs are unsigned 64-bit on the wire. An implementation that holds epochs in a narrower type **MUST** refuse a value it cannot represent with `malformedRequest` (or, reading a manifest, refuse the file), and **MUST NOT** truncate it.\n\n**The file key.** `file_key = HKDF-SHA256(ikm = storage_key(epoch), salt = fileId, info = \"openvtc/room/file/v1\" || roomId || u64be(epoch))`, where `storage_key(epoch)` is the room's per-epoch storage key, the one records are sealed under. It is derived per file and never stored. It is bound to the room and the epoch, so a key released for one room cannot open a blob relocated from another, and releasing it exposes one file and nothing else.\n\n**The file key on an `open` room.** An open room has no group and so no storage key to derive from. There the uploader mints the file key itself — 32 bytes from a cryptographically secure random source, for this file only — and carries it in `fileKey`; a reader uses that key and derives nothing. Everything else below (padding, STREAM, the associated data, reading) is the same on every tier, with `epoch` the room's epoch when the file was written. `fileKey` **MUST** be present in an open room's manifest and **MUST** be absent from a sealed record body's, where the key is derived; a reader **MUST** refuse a file whose manifest breaks either rule. The key in the clear withholds nothing from the host or from anyone it serves the record to — the open tier withholds nothing from them — but it keeps the stored blob opaque to whoever holds only the storage, and keeps one blob format, and one reader, for every tier.\n\n**Padding.** With `padding: \"padme\"`, the plaintext of length `L = size` is extended with zero bytes to `padme(L)`: for `L < 2`, `padme(L) = L`; otherwise `E = floor(log2 L)`, `S = floor(log2 E) + 1`, `z = E − S`, `mask = 2^z − 1`, and `padme(L) = (L + mask) & ~mask`. The padded length is `padme(size)`; without padding it is `size`. Padding bytes **MUST** be zero.\n\n**The STREAM construction.** The padded plaintext is cut into `segmentSize`-byte segments, the last holding the remainder; an empty plaintext is one empty final segment. Segment `i` is sealed with ChaCha20-Poly1305 under `file_key`, with nonce `u32be(0) || u64be(i)` and associated data `\"openvtc/room/file/v1\" || roomId || fileId || u64be(epoch) || u64be(i) || u8(final)`, where `final` is 1 on the last segment and 0 on every other. A host that truncates, reorders or splices ciphertext produces an authentication failure, never a shorter or rearranged file. The nonces are counters, so a `file_key` MUST NOT seal two different files; a fresh random `fileId` is what guarantees it. Each sealed segment is one transfer chunk of the blob (BlobManifest), so `segmentSize + 16` is the blob's `chunks.chunkSize`, and an empty file is one 16-byte chunk.\n\n**Reading.** A reader opens the record, derives or obtains the file key, and **MUST**, before trusting a byte:\n- check that the blob's `chunks.chunkSize` equals `segmentSize + 16` and that `chunks.chunkCount` equals `max(1, ceil(paddedLength / segmentSize))`, and refuse the file otherwise;\n- decrypt every segment in order, refusing the file on any authentication failure or on a final flag anywhere but the last segment;\n- check that the decrypted length equals the padded length, that every padding byte is zero, and, after removing the padding, that the plaintext matches `digest`.\n\nA reader **MUST** refuse a file that fails any check, and **MUST NOT** present it with a warning instead. A reader that streams **MUST NOT** treat the plaintext as received — save it under its final name, render it, or hand it to another component — until the digest has verified; it writes to a temporary destination and discards that destination on a mismatch.\n\n**An image's size and preview.** `width`, `height` and `preview` are OPTIONAL and advisory: they let a reader lay out an image, and show something, before it fetches and decrypts the blob. A reader that fetches the file checks them against the bytes — the decoded image's dimensions, and that the file is an image at all — and on a mismatch uses the bytes and discards them; it MUST NOT treat any of them as evidence about the file. On `attributed` and `private` rooms they are inside the sealed, signed body like the rest of the manifest, so the host learns nothing from them; on an `open` room they are in the clear, as everything there is, and a writer carries them only with `rooms/records/put/0.5` or later. A writer uses them only once the room's profile lists them in `recordMembers` (`RoomProfile`), as with the other members a reader that predates them refuses.";
|
|
1248
1356
|
readonly properties: {
|
|
1249
1357
|
readonly fileId: {
|
|
1250
1358
|
readonly type: "string";
|
|
@@ -1296,6 +1404,38 @@ export declare const RESPONSE_SPEC: {
|
|
|
1296
1404
|
readonly pattern: "^[A-Za-z0-9_-]{43}$";
|
|
1297
1405
|
readonly description: "The file key itself, 32 bytes base64url without padding: present on an `open` room only, where there is no storage key to derive it from. Minted by the uploader from a cryptographically secure random source for this one file and never reused. MUST be absent on `attributed` and `private` rooms, where the key is derived and never stored.";
|
|
1298
1406
|
};
|
|
1407
|
+
readonly width: {
|
|
1408
|
+
readonly type: "integer";
|
|
1409
|
+
readonly minimum: 1;
|
|
1410
|
+
readonly maximum: 1048576;
|
|
1411
|
+
readonly description: "The image's width in pixels, as the uploader read it. Advisory. A writer sets `width` and `height` together or neither; a reader ignores one without the other. A reader checks it against the decoded image.";
|
|
1412
|
+
};
|
|
1413
|
+
readonly height: {
|
|
1414
|
+
readonly type: "integer";
|
|
1415
|
+
readonly minimum: 1;
|
|
1416
|
+
readonly maximum: 1048576;
|
|
1417
|
+
readonly description: "The image's height in pixels, as the uploader read it. Advisory. A writer sets `width` and `height` together or neither; a reader ignores one without the other. A reader checks it against the decoded image.";
|
|
1418
|
+
};
|
|
1419
|
+
readonly preview: {
|
|
1420
|
+
readonly type: "object";
|
|
1421
|
+
readonly additionalProperties: false;
|
|
1422
|
+
readonly required: readonly ["mediaType", "data"];
|
|
1423
|
+
readonly description: "A small image standing in for the file until it is fetched: at most 8192 bytes before encoding, enough for a blurred thumbnail and small enough not to swell the record every listing reader opens. A reader renders it only as a raster image it decodes itself — never as SVG or any other type that can carry active content, never as a link, never fetching anything — and replaces it with the file once fetched. It is the uploader's rendering of the file, not a digest of it: a reader MUST NOT present it as the file's contents.";
|
|
1424
|
+
readonly properties: {
|
|
1425
|
+
readonly mediaType: {
|
|
1426
|
+
readonly type: "string";
|
|
1427
|
+
readonly enum: readonly ["image/jpeg", "image/png", "image/webp"];
|
|
1428
|
+
readonly description: "The preview's own media type. Raster types only.";
|
|
1429
|
+
};
|
|
1430
|
+
readonly data: {
|
|
1431
|
+
readonly type: "string";
|
|
1432
|
+
readonly pattern: "^[A-Za-z0-9_-]+$";
|
|
1433
|
+
readonly minLength: 1;
|
|
1434
|
+
readonly maxLength: 10923;
|
|
1435
|
+
readonly description: "The preview's bytes, base64url without padding: at most 8192 bytes decoded.";
|
|
1436
|
+
};
|
|
1437
|
+
};
|
|
1438
|
+
};
|
|
1299
1439
|
};
|
|
1300
1440
|
};
|
|
1301
1441
|
readonly RecordValidUntil: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../../../src/rooms/records/put/0.4/payload.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAG7R
|
|
1
|
+
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../../../src/rooms/records/put/0.4/payload.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAG7R;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,YAAY,EAAE,qBAAqB,CAAC;IACpC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;QACb;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB;;WAEG;QACH,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,UAAU,CAAC,EAAE,gBAAgB,CAAC;QAC9B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;QAC9B,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB;;WAEG;QACH,UAAU,CAAC,EAAE,gBAAgB,CAAC;QAC9B;;WAEG;QACH,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,CAAC;IACF;;;;;OAKG;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAClB;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AACD;;;;GAIG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAED,kHAAkH;AAClH,YAAY,EAAE,qBAAqB,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC;AAEpP,2BAA2B;AAC3B,eAAO,MAAM,QAAQ,EAAG,mDAA4D,CAAC;AAErF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,GAAG,IAAY,CAAC;AAE5C;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,GAAG,IAA4C,CAAC;AAEhF;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,sBAAsB,CAAC;AAE7C,qEAAqE;AACrE,eAAO,MAAM,iBAAiB,EAAG,4DAAqE,CAAC;AAEvG;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,8BAA8B,CAAC;AAEtD;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2cjB,CAAC;AAEX,mEAAmE;AACnE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyW1B,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOP,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOhB,CAAC"}
|