@openvtc/trust-tasks 0.26.14 → 0.26.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.
Files changed (197) hide show
  1. package/CHANGELOG.md +114 -0
  2. package/dist/_shared/components.d.ts +392 -1
  3. package/dist/_shared/components.d.ts.map +1 -1
  4. package/dist/index.d.ts +17 -0
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +17 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/rooms/_shared/0.1/personal-label.d.ts +16 -0
  9. package/dist/rooms/_shared/0.1/personal-label.d.ts.map +1 -0
  10. package/dist/rooms/_shared/0.1/personal-label.js +6 -0
  11. package/dist/rooms/_shared/0.1/personal-label.js.map +1 -0
  12. package/dist/rooms/_shared/0.1/room.d.ts +1 -1
  13. package/dist/rooms/_shared/0.1/room.d.ts.map +1 -1
  14. package/dist/rooms/blobs/get/0.1/payload.d.ts +4 -4
  15. package/dist/rooms/blobs/get/0.1/payload.js +2 -2
  16. package/dist/rooms/blobs/get/0.1/payload.js.map +1 -1
  17. package/dist/rooms/blobs/get/0.2/payload.d.ts +4 -4
  18. package/dist/rooms/blobs/get/0.2/payload.js +2 -2
  19. package/dist/rooms/blobs/get/0.2/payload.js.map +1 -1
  20. package/dist/rooms/blobs/upload/begin/0.1/payload.d.ts +4 -4
  21. package/dist/rooms/blobs/upload/begin/0.1/payload.js +2 -2
  22. package/dist/rooms/blobs/upload/begin/0.1/payload.js.map +1 -1
  23. package/dist/rooms/blobs/upload/begin/0.2/payload.d.ts +4 -4
  24. package/dist/rooms/blobs/upload/begin/0.2/payload.js +2 -2
  25. package/dist/rooms/blobs/upload/begin/0.2/payload.js.map +1 -1
  26. package/dist/rooms/epoch/chain/0.1/payload.d.ts +4 -4
  27. package/dist/rooms/epoch/chain/0.1/payload.js +2 -2
  28. package/dist/rooms/epoch/chain/0.1/payload.js.map +1 -1
  29. package/dist/rooms/epoch/commits/0.1/payload.d.ts +4 -4
  30. package/dist/rooms/epoch/commits/0.1/payload.js +2 -2
  31. package/dist/rooms/epoch/commits/0.1/payload.js.map +1 -1
  32. package/dist/rooms/epoch/mint/0.1/payload.d.ts +4 -4
  33. package/dist/rooms/epoch/mint/0.1/payload.js +2 -2
  34. package/dist/rooms/epoch/mint/0.1/payload.js.map +1 -1
  35. package/dist/rooms/epoch/prune/0.1/payload.d.ts +4 -4
  36. package/dist/rooms/epoch/prune/0.1/payload.js +2 -2
  37. package/dist/rooms/epoch/prune/0.1/payload.js.map +1 -1
  38. package/dist/rooms/info/0.1/payload.d.ts +4 -4
  39. package/dist/rooms/info/0.1/payload.js +2 -2
  40. package/dist/rooms/info/0.1/payload.js.map +1 -1
  41. package/dist/rooms/keys/label/0.1/payload.d.ts +757 -0
  42. package/dist/rooms/keys/label/0.1/payload.d.ts.map +1 -0
  43. package/dist/rooms/keys/label/0.1/payload.js +388 -0
  44. package/dist/rooms/keys/label/0.1/payload.js.map +1 -0
  45. package/dist/rooms/keys/list/0.2/payload.d.ts +667 -0
  46. package/dist/rooms/keys/list/0.2/payload.d.ts.map +1 -0
  47. package/dist/rooms/keys/list/0.2/payload.js +350 -0
  48. package/dist/rooms/keys/list/0.2/payload.js.map +1 -0
  49. package/dist/rooms/keys/present/0.2/payload.d.ts +4 -4
  50. package/dist/rooms/keys/present/0.2/payload.js +2 -2
  51. package/dist/rooms/keys/present/0.2/payload.js.map +1 -1
  52. package/dist/rooms/keys/profile/read/0.1/payload.d.ts +1652 -0
  53. package/dist/rooms/keys/profile/read/0.1/payload.d.ts.map +1 -0
  54. package/dist/rooms/keys/profile/read/0.1/payload.js +649 -0
  55. package/dist/rooms/keys/profile/read/0.1/payload.js.map +1 -0
  56. package/dist/rooms/keys/profile/write/0.1/payload.d.ts +583 -0
  57. package/dist/rooms/keys/profile/write/0.1/payload.d.ts.map +1 -0
  58. package/dist/rooms/keys/profile/write/0.1/payload.js +319 -0
  59. package/dist/rooms/keys/profile/write/0.1/payload.js.map +1 -0
  60. package/dist/rooms/owner/claim/0.1/payload.d.ts +4 -4
  61. package/dist/rooms/owner/claim/0.1/payload.js +2 -2
  62. package/dist/rooms/owner/claim/0.1/payload.js.map +1 -1
  63. package/dist/rooms/owner/group/remove/0.2/payload.d.ts +600 -0
  64. package/dist/rooms/owner/group/remove/0.2/payload.d.ts.map +1 -0
  65. package/dist/rooms/owner/group/remove/0.2/payload.js +310 -0
  66. package/dist/rooms/owner/group/remove/0.2/payload.js.map +1 -0
  67. package/dist/rooms/owner/revoke/0.1/payload.d.ts +1481 -0
  68. package/dist/rooms/owner/revoke/0.1/payload.d.ts.map +1 -0
  69. package/dist/rooms/owner/revoke/0.1/payload.js +811 -0
  70. package/dist/rooms/owner/revoke/0.1/payload.js.map +1 -0
  71. package/dist/rooms/owner/transfer/0.1/payload.d.ts +4 -4
  72. package/dist/rooms/owner/transfer/0.1/payload.js +2 -2
  73. package/dist/rooms/owner/transfer/0.1/payload.js.map +1 -1
  74. package/dist/rooms/records/curate/0.1/payload.d.ts +4 -4
  75. package/dist/rooms/records/curate/0.1/payload.js +2 -2
  76. package/dist/rooms/records/curate/0.1/payload.js.map +1 -1
  77. package/dist/rooms/records/get/0.1/payload.d.ts +4 -4
  78. package/dist/rooms/records/get/0.1/payload.js +2 -2
  79. package/dist/rooms/records/get/0.1/payload.js.map +1 -1
  80. package/dist/rooms/records/get/0.2/payload.d.ts +4 -4
  81. package/dist/rooms/records/get/0.2/payload.js +2 -2
  82. package/dist/rooms/records/get/0.2/payload.js.map +1 -1
  83. package/dist/rooms/records/list/0.1/payload.d.ts +4 -4
  84. package/dist/rooms/records/list/0.1/payload.js +2 -2
  85. package/dist/rooms/records/list/0.1/payload.js.map +1 -1
  86. package/dist/rooms/records/list/0.2/payload.d.ts +4 -4
  87. package/dist/rooms/records/list/0.2/payload.js +2 -2
  88. package/dist/rooms/records/list/0.2/payload.js.map +1 -1
  89. package/dist/rooms/records/put/0.1/payload.d.ts +4 -4
  90. package/dist/rooms/records/put/0.1/payload.js +2 -2
  91. package/dist/rooms/records/put/0.1/payload.js.map +1 -1
  92. package/dist/rooms/records/put/0.2/payload.d.ts +4 -4
  93. package/dist/rooms/records/put/0.2/payload.js +2 -2
  94. package/dist/rooms/records/put/0.2/payload.js.map +1 -1
  95. package/dist/rooms/revocations/get/0.1/payload.d.ts +905 -0
  96. package/dist/rooms/revocations/get/0.1/payload.d.ts.map +1 -0
  97. package/dist/rooms/revocations/get/0.1/payload.js +512 -0
  98. package/dist/rooms/revocations/get/0.1/payload.js.map +1 -0
  99. package/dist/rooms/revocations/put/0.1/payload.d.ts +1021 -0
  100. package/dist/rooms/revocations/put/0.1/payload.d.ts.map +1 -0
  101. package/dist/rooms/revocations/put/0.1/payload.js +583 -0
  102. package/dist/rooms/revocations/put/0.1/payload.js.map +1 -0
  103. package/dist/rooms/usage/0.1/payload.d.ts +4 -4
  104. package/dist/rooms/usage/0.1/payload.js +2 -2
  105. package/dist/rooms/usage/0.1/payload.js.map +1 -1
  106. package/dist/vtc/_shared/0.1/community-room.d.ts +1 -1
  107. package/dist/vtc/_shared/0.1/community-room.d.ts.map +1 -1
  108. package/dist/vtc/rooms/community/create/0.1/payload.d.ts +4 -4
  109. package/dist/vtc/rooms/community/create/0.1/payload.js +2 -2
  110. package/dist/vtc/rooms/community/create/0.1/payload.js.map +1 -1
  111. package/dist/vtc/rooms/community/create/0.2/payload.d.ts +989 -0
  112. package/dist/vtc/rooms/community/create/0.2/payload.d.ts.map +1 -0
  113. package/dist/vtc/rooms/community/create/0.2/payload.js +559 -0
  114. package/dist/vtc/rooms/community/create/0.2/payload.js.map +1 -0
  115. package/dist/vtc/rooms/community/create/0.3/payload.d.ts +1013 -0
  116. package/dist/vtc/rooms/community/create/0.3/payload.d.ts.map +1 -0
  117. package/dist/vtc/rooms/community/create/0.3/payload.js +577 -0
  118. package/dist/vtc/rooms/community/create/0.3/payload.js.map +1 -0
  119. package/dist/vtc/rooms/community/get/0.1/payload.d.ts +4 -4
  120. package/dist/vtc/rooms/community/get/0.1/payload.js +2 -2
  121. package/dist/vtc/rooms/community/get/0.1/payload.js.map +1 -1
  122. package/dist/vtc/rooms/community/get/0.2/payload.d.ts +887 -0
  123. package/dist/vtc/rooms/community/get/0.2/payload.d.ts.map +1 -0
  124. package/dist/vtc/rooms/community/get/0.2/payload.js +517 -0
  125. package/dist/vtc/rooms/community/get/0.2/payload.js.map +1 -0
  126. package/dist/vtc/rooms/community/list/0.1/payload.d.ts +4 -4
  127. package/dist/vtc/rooms/community/list/0.1/payload.js +2 -2
  128. package/dist/vtc/rooms/community/list/0.1/payload.js.map +1 -1
  129. package/dist/vtc/rooms/community/list/0.2/payload.d.ts +960 -0
  130. package/dist/vtc/rooms/community/list/0.2/payload.d.ts.map +1 -0
  131. package/dist/vtc/rooms/community/list/0.2/payload.js +544 -0
  132. package/dist/vtc/rooms/community/list/0.2/payload.js.map +1 -0
  133. package/dist/vtc/rooms/community/members/remove/0.2/payload.d.ts +681 -0
  134. package/dist/vtc/rooms/community/members/remove/0.2/payload.d.ts.map +1 -0
  135. package/dist/vtc/rooms/community/members/remove/0.2/payload.js +393 -0
  136. package/dist/vtc/rooms/community/members/remove/0.2/payload.js.map +1 -0
  137. package/dist/vtc/rooms/community/update/0.1/payload.d.ts +1013 -0
  138. package/dist/vtc/rooms/community/update/0.1/payload.d.ts.map +1 -0
  139. package/dist/vtc/rooms/community/update/0.1/payload.js +573 -0
  140. package/dist/vtc/rooms/community/update/0.1/payload.js.map +1 -0
  141. package/dist/vtc/rooms/community/update/0.2/payload.d.ts +1037 -0
  142. package/dist/vtc/rooms/community/update/0.2/payload.d.ts.map +1 -0
  143. package/dist/vtc/rooms/community/update/0.2/payload.js +593 -0
  144. package/dist/vtc/rooms/community/update/0.2/payload.js.map +1 -0
  145. package/dist/vtc/rooms/offers/list/0.1/payload.d.ts +4 -4
  146. package/dist/vtc/rooms/offers/list/0.1/payload.js +2 -2
  147. package/dist/vtc/rooms/offers/list/0.1/payload.js.map +1 -1
  148. package/dist/vtc/rooms/offers/list/0.2/payload.d.ts +736 -0
  149. package/dist/vtc/rooms/offers/list/0.2/payload.d.ts.map +1 -0
  150. package/dist/vtc/rooms/offers/list/0.2/payload.js +430 -0
  151. package/dist/vtc/rooms/offers/list/0.2/payload.js.map +1 -0
  152. package/package.json +1 -1
  153. package/src/_shared/components.ts +426 -1
  154. package/src/index.ts +17 -0
  155. package/src/rooms/_shared/0.1/personal-label.ts +17 -0
  156. package/src/rooms/_shared/0.1/room.ts +1 -1
  157. package/src/rooms/blobs/get/0.1/payload.ts +2 -2
  158. package/src/rooms/blobs/get/0.2/payload.ts +2 -2
  159. package/src/rooms/blobs/upload/begin/0.1/payload.ts +2 -2
  160. package/src/rooms/blobs/upload/begin/0.2/payload.ts +2 -2
  161. package/src/rooms/epoch/chain/0.1/payload.ts +2 -2
  162. package/src/rooms/epoch/commits/0.1/payload.ts +2 -2
  163. package/src/rooms/epoch/mint/0.1/payload.ts +2 -2
  164. package/src/rooms/epoch/prune/0.1/payload.ts +2 -2
  165. package/src/rooms/info/0.1/payload.ts +2 -2
  166. package/src/rooms/keys/label/0.1/payload.ts +474 -0
  167. package/src/rooms/keys/list/0.2/payload.ts +412 -0
  168. package/src/rooms/keys/present/0.2/payload.ts +2 -2
  169. package/src/rooms/keys/profile/read/0.1/payload.ts +1617 -0
  170. package/src/rooms/keys/profile/write/0.1/payload.ts +388 -0
  171. package/src/rooms/owner/claim/0.1/payload.ts +2 -2
  172. package/src/rooms/owner/group/remove/0.2/payload.ts +415 -0
  173. package/src/rooms/owner/revoke/0.1/payload.ts +954 -0
  174. package/src/rooms/owner/transfer/0.1/payload.ts +2 -2
  175. package/src/rooms/records/curate/0.1/payload.ts +2 -2
  176. package/src/rooms/records/get/0.1/payload.ts +2 -2
  177. package/src/rooms/records/get/0.2/payload.ts +2 -2
  178. package/src/rooms/records/list/0.1/payload.ts +2 -2
  179. package/src/rooms/records/list/0.2/payload.ts +2 -2
  180. package/src/rooms/records/put/0.1/payload.ts +2 -2
  181. package/src/rooms/records/put/0.2/payload.ts +2 -2
  182. package/src/rooms/revocations/get/0.1/payload.ts +562 -0
  183. package/src/rooms/revocations/put/0.1/payload.ts +637 -0
  184. package/src/rooms/usage/0.1/payload.ts +2 -2
  185. package/src/vtc/_shared/0.1/community-room.ts +1 -1
  186. package/src/vtc/rooms/community/create/0.1/payload.ts +2 -2
  187. package/src/vtc/rooms/community/create/0.2/payload.ts +613 -0
  188. package/src/vtc/rooms/community/create/0.3/payload.ts +635 -0
  189. package/src/vtc/rooms/community/get/0.1/payload.ts +2 -2
  190. package/src/vtc/rooms/community/get/0.2/payload.ts +549 -0
  191. package/src/vtc/rooms/community/list/0.1/payload.ts +2 -2
  192. package/src/vtc/rooms/community/list/0.2/payload.ts +591 -0
  193. package/src/vtc/rooms/community/members/remove/0.2/payload.ts +439 -0
  194. package/src/vtc/rooms/community/update/0.1/payload.ts +629 -0
  195. package/src/vtc/rooms/community/update/0.2/payload.ts +653 -0
  196. package/src/vtc/rooms/offers/list/0.1/payload.ts +2 -2
  197. package/src/vtc/rooms/offers/list/0.2/payload.ts +473 -0
@@ -0,0 +1,905 @@
1
+ /**
2
+ * Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
3
+ * Source: specs/rooms/revocations/get/0.1/payload.schema.json
4
+ */
5
+ import type { AuthorityPresentation, CredentialRevocation, Ext, RevocationEntry, RevocationList, RoomRevocation, SubjectRevocation } from "../../../../_shared/components.js";
6
+ /**
7
+ * An administrator of a room reads the revocation list its host holds and enforces for it.
8
+ */
9
+ export interface RoomsRevocationsGetPayload {
10
+ /**
11
+ * The room.
12
+ */
13
+ roomId: string;
14
+ /**
15
+ * Must confer the `admin` action at this room's scope. The list names withdrawn parties on `open` and `attributed` rooms, which is the room's administration and not a member's business.
16
+ */
17
+ presentation: AuthorityPresentation;
18
+ /**
19
+ * Ecosystem-defined extension members per SPEC.md §4.5.1.
20
+ */
21
+ ext?: Ext;
22
+ }
23
+ /**
24
+ * Success response to rooms/revocations/get. Type https://trusttasks.org/spec/rooms/revocations/get/0.1#response. The list the host holds, exactly as the room signed it, or nothing when it holds none.
25
+ */
26
+ export interface RoomsRevocationsGetResponsePayload {
27
+ roomId: string;
28
+ /**
29
+ * The list the host holds, as the room signed it. Absent when the host holds none. A reader MUST verify it as a host does — the room's own key, this room — before relying on it, and MUST NOT adopt it in place of a list it holds at a higher sequence.
30
+ */
31
+ list?: RevocationList;
32
+ /**
33
+ * When the host began enforcing `list`. Present with it.
34
+ */
35
+ inForceAt?: string;
36
+ ext?: Ext;
37
+ }
38
+ /** Shared definitions this specification references, re-exported under the names it used to declare them with. */
39
+ export type { AuthorityPresentation, CredentialRevocation, Ext, RevocationEntry, RevocationList, RoomRevocation, SubjectRevocation };
40
+ /** Trust Task type URI. */
41
+ export declare const TYPE_URI: "https://trusttasks.org/spec/rooms/revocations/get/0.1";
42
+ /** Stable alias for this specification's request payload shape. */
43
+ export type Payload = RoomsRevocationsGetPayload;
44
+ /** Trust Task response type URI (request type URI + "#response"). */
45
+ export declare const RESPONSE_TYPE_URI: "https://trusttasks.org/spec/rooms/revocations/get/0.1#response";
46
+ /** Stable alias for this specification's success-response payload shape. */
47
+ export type Response = RoomsRevocationsGetResponsePayload;
48
+ /**
49
+ * This specification's payload schema, as a value.
50
+ *
51
+ * SPEC.md §7.2 item 2 is performed against this. It is shipped as data
52
+ * rather than only as a `.json` file because TypeScript types are erased
53
+ * at runtime: without a schema a consumer has nothing to validate, and
54
+ * every REQUIRED payload member is optional in practice. Cross-file
55
+ * `$ref`s are already inlined, so it needs no resolver.
56
+ */
57
+ export declare const PAYLOAD_SCHEMA: {
58
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
59
+ readonly $id: "https://trusttasks.org/spec/rooms/revocations/get/0.1";
60
+ readonly title: "Rooms Revocations Get — payload";
61
+ readonly description: "An administrator of a room reads the revocation list its host holds and enforces for it.";
62
+ readonly type: "object";
63
+ readonly additionalProperties: false;
64
+ readonly required: readonly ["roomId", "presentation"];
65
+ readonly properties: {
66
+ readonly roomId: {
67
+ readonly type: "string";
68
+ readonly minLength: 1;
69
+ readonly maxLength: 512;
70
+ readonly description: "The room.";
71
+ };
72
+ readonly presentation: {
73
+ readonly $ref: "#/$defs/AuthorityPresentation";
74
+ readonly description: "Must confer the `admin` action at this room's scope. The list names withdrawn parties on `open` and `attributed` rooms, which is the room's administration and not a member's business.";
75
+ };
76
+ readonly ext: {
77
+ readonly $ref: "#/$defs/Ext";
78
+ readonly description: "Ecosystem-defined extension members per SPEC.md §4.5.1.";
79
+ };
80
+ };
81
+ readonly $defs: {
82
+ readonly Response: {
83
+ readonly $anchor: "response";
84
+ readonly title: "Rooms Revocations Get — response payload";
85
+ readonly description: "Success response to rooms/revocations/get. Type https://trusttasks.org/spec/rooms/revocations/get/0.1#response. The list the host holds, exactly as the room signed it, or nothing when it holds none.";
86
+ readonly type: "object";
87
+ readonly additionalProperties: false;
88
+ readonly required: readonly ["roomId"];
89
+ readonly properties: {
90
+ readonly roomId: {
91
+ readonly type: "string";
92
+ readonly minLength: 1;
93
+ readonly maxLength: 512;
94
+ };
95
+ readonly list: {
96
+ readonly $ref: "#/$defs/RevocationList";
97
+ readonly description: "The list the host holds, as the room signed it. Absent when the host holds none. A reader MUST verify it as a host does — the room's own key, this room — before relying on it, and MUST NOT adopt it in place of a list it holds at a higher sequence.";
98
+ };
99
+ readonly inForceAt: {
100
+ readonly type: "string";
101
+ readonly format: "date-time";
102
+ readonly description: "When the host began enforcing `list`. Present with it.";
103
+ };
104
+ readonly ext: {
105
+ readonly $ref: "#/$defs/Ext";
106
+ };
107
+ };
108
+ };
109
+ readonly Ext: {
110
+ readonly title: "Ext";
111
+ readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
112
+ readonly type: "object";
113
+ readonly minProperties: 1;
114
+ readonly additionalProperties: true;
115
+ readonly propertyNames: {
116
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
117
+ };
118
+ };
119
+ readonly RevocationList: {
120
+ readonly title: "RevocationList";
121
+ readonly type: "object";
122
+ readonly additionalProperties: false;
123
+ readonly required: readonly ["roomId", "sequence", "issuedAt", "entries", "proof"];
124
+ readonly description: "The room's own statement of which credentials it has withdrawn before they expire — signed by the room, cumulative, and numbered, so that it means the same thing at every host it is delivered to.\n\n**Why the room signs it, and why it is cumulative.** A host authorizes from credentials the room issued and keeps no roster; a withdrawal kept only as a host's own state would make the room unmovable and the host part of the membership. A list the room signed is room state: it moves with the room, any host it is delivered to reaches the same decision, and nothing a host invents can be mistaken for it. It is cumulative — every list carries every entry still in force — so a host holding any one list holds the room's whole withdrawal state, and a host that missed a list loses nothing once it receives a later one.\n\n**Producing.** The room's key holder builds the object without `proof` and signs it with a W3C Data Integrity proof whose `verificationMethod` is a key the room's DID document lists for `assertionMethod` and whose `proofPurpose` is `assertionMethod`. A producer MUST support `eddsa-jcs-2022`. Each list's `sequence` is exactly one greater than the last list the room signed, and the producer MUST NOT sign two different lists at one `sequence`.\n\n**Accepting.** A host MUST refuse a list unless: (1) `roomId` is the room it is delivered for; (2) `proof` verifies with a key of `roomId` listed for `assertionMethod` — a list signed by any other key, however valid the signature, is not the room's; (3) `sequence` is greater than that of the list it holds, or equal with an identical list (a repeat, answered as accepted and changing nothing); (4) it is **append-only** against the list it holds: every entry of the held list appears in it unchanged, unless that entry's `until` has passed. A list that lowers the sequence is a rollback and one that drops a live entry is a reinstatement nobody signed for, and both are refused; two different lists at one `sequence` is the room's key equivocating, and the host keeps the list it holds.\n\n**Applying.** A credential is revoked by an accepted list when any entry matches it (see `RevocationEntry`). An entry whose `until` has passed MAY be discarded by a host and omitted from later lists; no other entry is ever dropped.\n\n**Size.** A list is bounded at 4096 entries. A room that would exceed it uses a `room` entry, which withdraws everything issued before it and lets the room re-issue to those who remain.";
125
+ readonly properties: {
126
+ readonly roomId: {
127
+ readonly type: "string";
128
+ readonly minLength: 1;
129
+ readonly maxLength: 512;
130
+ readonly description: "The room whose credentials this list withdraws, exactly as on the wire. Signed, so a list cannot be replayed against another room.";
131
+ };
132
+ readonly sequence: {
133
+ readonly type: "integer";
134
+ readonly minimum: 1;
135
+ readonly description: "The list's position in the room's sequence: exactly one greater than the last list the room signed. A host accepts only a list whose sequence is above the one it holds, which is what stops a host, a relayer or an attacker holding an old list from rolling the room's withdrawals back.";
136
+ };
137
+ readonly issuedAt: {
138
+ readonly type: "string";
139
+ readonly format: "date-time";
140
+ readonly description: "When the room signed this list.";
141
+ };
142
+ readonly entries: {
143
+ readonly type: "array";
144
+ readonly maxItems: 4096;
145
+ readonly items: {
146
+ readonly $ref: "#/$defs/RevocationEntry";
147
+ };
148
+ readonly description: "Every withdrawal still in force, in the order the room made them. Empty is valid: a room that has revoked nothing, or whose every entry has lapsed, can still state its sequence.";
149
+ };
150
+ readonly proof: {
151
+ readonly type: "object";
152
+ readonly description: "The room's Data Integrity proof over every other member, made with a key the room's DID document lists for `assertionMethod`.";
153
+ };
154
+ };
155
+ };
156
+ readonly RevocationEntry: {
157
+ readonly title: "RevocationEntry";
158
+ readonly description: "One withdrawal in a `RevocationList`, discriminated by `kind`.\n\n - `credential` withdraws one credential, named by its `id`. It matches the membership credential or any authority link whose `id` equals `credentialId`.\n - `subject` withdraws a party: every credential the room's chain gave them **before** `revokedAt`. It matches the membership credential or any authority link whose `credentialSubject` id **or** `issuer` is `subject` and whose `validFrom` is earlier than `revokedAt`. Matching the issuer as well as the subject withdraws what the party delegated before their removal, which no re-admission revives. A credential carrying no `validFrom` is treated as issued before every entry.\n - `room` withdraws every credential whose `validFrom` is earlier than `revokedAt`, whoever holds it. It is how a room resets access — after a compromise, or on a `private` room, where naming a party would disclose who was a member.\n\n**Keyed on time, so a party can come back.** A `subject` or `room` entry withdraws what was issued before it and nothing after, so a room that re-admits a removed party issues fresh credentials and they verify. A `credential` entry is permanent for that one credential, which nobody re-issues.\n\n**Tiers.** On a `private` room a host MUST refuse a list carrying a `credential` or `subject` entry: a presentation there withholds the credential and its subject, so such an entry is one the host cannot apply and a disclosure of who was in the room. Only `room` entries are permitted, and a host serving a `private` room MUST refuse any presentation for which it cannot establish that no credential in it has a `validFrom` earlier than the latest `room` entry's `revokedAt`.";
159
+ readonly oneOf: readonly [{
160
+ readonly $ref: "#/$defs/CredentialRevocation";
161
+ }, {
162
+ readonly $ref: "#/$defs/SubjectRevocation";
163
+ }, {
164
+ readonly $ref: "#/$defs/RoomRevocation";
165
+ }];
166
+ };
167
+ readonly RoomRevocation: {
168
+ readonly title: "RoomRevocation";
169
+ readonly type: "object";
170
+ readonly additionalProperties: false;
171
+ readonly required: readonly ["kind", "revokedAt"];
172
+ readonly description: "Withdraws every credential whose `validFrom` is earlier than `revokedAt`, whoever holds it.";
173
+ readonly properties: {
174
+ readonly kind: {
175
+ readonly const: "room";
176
+ };
177
+ readonly revokedAt: {
178
+ readonly type: "string";
179
+ readonly format: "date-time";
180
+ readonly description: "When the room made this withdrawal.";
181
+ };
182
+ readonly until: {
183
+ readonly type: "string";
184
+ readonly format: "date-time";
185
+ readonly description: "OPTIONAL. After this instant every credential the entry matches has expired anyway, so a host MAY discard the entry and the room MAY omit it from later lists. Absent means the entry is kept for as long as the room keeps a list.";
186
+ };
187
+ };
188
+ };
189
+ readonly SubjectRevocation: {
190
+ readonly title: "SubjectRevocation";
191
+ readonly type: "object";
192
+ readonly additionalProperties: false;
193
+ readonly required: readonly ["kind", "subject", "revokedAt"];
194
+ readonly description: "Withdraws a party: every credential naming them as subject or issuer whose `validFrom` is earlier than `revokedAt`.";
195
+ readonly properties: {
196
+ readonly kind: {
197
+ readonly const: "subject";
198
+ };
199
+ readonly subject: {
200
+ readonly type: "string";
201
+ readonly pattern: "^did:";
202
+ readonly maxLength: 2048;
203
+ readonly description: "The party withdrawn. Never the room itself.";
204
+ };
205
+ readonly revokedAt: {
206
+ readonly type: "string";
207
+ readonly format: "date-time";
208
+ readonly description: "When the room made this withdrawal.";
209
+ };
210
+ readonly until: {
211
+ readonly type: "string";
212
+ readonly format: "date-time";
213
+ readonly description: "OPTIONAL. After this instant every credential the entry matches has expired anyway, so a host MAY discard the entry and the room MAY omit it from later lists. Absent means the entry is kept for as long as the room keeps a list.";
214
+ };
215
+ };
216
+ };
217
+ readonly CredentialRevocation: {
218
+ readonly title: "CredentialRevocation";
219
+ readonly type: "object";
220
+ readonly additionalProperties: false;
221
+ readonly required: readonly ["kind", "credentialId", "revokedAt"];
222
+ readonly description: "Withdraws one credential — a membership credential or any authority link — by its `id`.";
223
+ readonly properties: {
224
+ readonly kind: {
225
+ readonly const: "credential";
226
+ };
227
+ readonly credentialId: {
228
+ readonly type: "string";
229
+ readonly minLength: 1;
230
+ readonly maxLength: 2048;
231
+ readonly description: "The `id` of the credential withdrawn, as `rooms/owner/issue-authority` and `rooms/owner/issue-membership` return it, or as an attenuated credential carries it.";
232
+ };
233
+ readonly revokedAt: {
234
+ readonly type: "string";
235
+ readonly format: "date-time";
236
+ readonly description: "When the room made this withdrawal.";
237
+ };
238
+ readonly until: {
239
+ readonly type: "string";
240
+ readonly format: "date-time";
241
+ readonly description: "OPTIONAL. After this instant every credential the entry matches has expired anyway, so a host MAY discard the entry and the room MAY omit it from later lists. Absent means the entry is kept for as long as the room keeps a list.";
242
+ };
243
+ };
244
+ };
245
+ readonly AuthorityPresentation: {
246
+ readonly title: "AuthorityPresentation";
247
+ readonly type: "object";
248
+ readonly additionalProperties: false;
249
+ readonly required: readonly ["membership", "authority"];
250
+ readonly description: "What a party presents to act on a room. Carries the whole authority chain: a host MUST NOT dereference an authority credential's `parent` to fetch a link it was not given. Resolving over the network would make verification depend on availability, turn every identifier into a request the host can be induced to make against an address the holder chooses, and signal credential use to whoever hosts the identifier. A host MUST bind the presenter to the chain's leaf. A chain that verifies is evidence that authority was conferred on somebody; it is not evidence that the party presenting it is that somebody. The leaf's subject MUST equal the party the host authenticated for this request — an identity the transport established or a document `proof` proved, never one named in a payload. A host that omits this check authorizes every captured presentation, and the omission is silent, because the chain still verifies.\n\n**Every credential is its issuer's attestation, and only its issuer's.** For the membership credential and for every link of `authority`, a host MUST verify the credential's `proof` with a key that the credential's own `issuer` lists for `assertionMethod` in its DID document, and MUST refuse a credential whose proof names a verification method that is not its issuer's. A proof that verifies under some other party's key is that party's statement, not the issuer's, and confers nothing. The same binding holds for every other document a room signs, such as a `RevocationList`.\n\n**A chain that verifies may still be revoked.** A host that has accepted a `RevocationList` for the room (`rooms/revocations/put`) MUST, from the moment it accepted it, refuse every presentation in which the membership credential or any link of `authority` is revoked by that list, under every task and every version of every task it serves for the room. A chain from which any link is revoked is refused whole: a credential delegated from a revoked one confers nothing, however it was attenuated. The refusal is the same `permissionDenied` as any other failed presentation.";
251
+ readonly properties: {
252
+ readonly membership: {
253
+ readonly type: "string";
254
+ readonly description: "The presenter's membership credential for this room, or — on a `private` room — a zero-knowledge presentation of it. Serialized per the governing profile.";
255
+ };
256
+ readonly authority: {
257
+ readonly type: "array";
258
+ readonly minItems: 1;
259
+ readonly maxItems: 8;
260
+ readonly items: {
261
+ readonly type: "string";
262
+ };
263
+ readonly description: "The authority chain, LEAF FIRST: the first element is the credential being relied on and the last MUST be one issued by the room itself. Every link the presenter relies on is present, because the host will not fetch one. Capped at 8: verification is linear in chain length and runs on every operation, so an unbounded chain is a denial-of-service surface against the host. The known uses need 2 to 3 — a person attenuating to an agent, and that agent to a sub-agent.";
264
+ };
265
+ readonly subjectBinding: {
266
+ readonly type: "string";
267
+ readonly description: "REQUIRED on a `private` room, where the subject identifier is withheld: a proof that the membership credential and the authority chain's leaf describe the SAME subject. Without it two parties pool credentials — one contributes membership, the other authority — and the combination verifies as a single party holding both. A host MUST refuse a private-room presentation that omits this.";
268
+ };
269
+ };
270
+ };
271
+ };
272
+ };
273
+ /** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
274
+ export declare const RESPONSE_PAYLOAD_SCHEMA: {
275
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
276
+ readonly $ref: "#/$defs/Response";
277
+ readonly $defs: {
278
+ readonly Response: {
279
+ readonly $anchor: "response";
280
+ readonly title: "Rooms Revocations Get — response payload";
281
+ readonly description: "Success response to rooms/revocations/get. Type https://trusttasks.org/spec/rooms/revocations/get/0.1#response. The list the host holds, exactly as the room signed it, or nothing when it holds none.";
282
+ readonly type: "object";
283
+ readonly additionalProperties: false;
284
+ readonly required: readonly ["roomId"];
285
+ readonly properties: {
286
+ readonly roomId: {
287
+ readonly type: "string";
288
+ readonly minLength: 1;
289
+ readonly maxLength: 512;
290
+ };
291
+ readonly list: {
292
+ readonly $ref: "#/$defs/RevocationList";
293
+ readonly description: "The list the host holds, as the room signed it. Absent when the host holds none. A reader MUST verify it as a host does — the room's own key, this room — before relying on it, and MUST NOT adopt it in place of a list it holds at a higher sequence.";
294
+ };
295
+ readonly inForceAt: {
296
+ readonly type: "string";
297
+ readonly format: "date-time";
298
+ readonly description: "When the host began enforcing `list`. Present with it.";
299
+ };
300
+ readonly ext: {
301
+ readonly $ref: "#/$defs/Ext";
302
+ };
303
+ };
304
+ };
305
+ readonly Ext: {
306
+ readonly title: "Ext";
307
+ readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
308
+ readonly type: "object";
309
+ readonly minProperties: 1;
310
+ readonly additionalProperties: true;
311
+ readonly propertyNames: {
312
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
313
+ };
314
+ };
315
+ readonly RevocationList: {
316
+ readonly title: "RevocationList";
317
+ readonly type: "object";
318
+ readonly additionalProperties: false;
319
+ readonly required: readonly ["roomId", "sequence", "issuedAt", "entries", "proof"];
320
+ readonly description: "The room's own statement of which credentials it has withdrawn before they expire — signed by the room, cumulative, and numbered, so that it means the same thing at every host it is delivered to.\n\n**Why the room signs it, and why it is cumulative.** A host authorizes from credentials the room issued and keeps no roster; a withdrawal kept only as a host's own state would make the room unmovable and the host part of the membership. A list the room signed is room state: it moves with the room, any host it is delivered to reaches the same decision, and nothing a host invents can be mistaken for it. It is cumulative — every list carries every entry still in force — so a host holding any one list holds the room's whole withdrawal state, and a host that missed a list loses nothing once it receives a later one.\n\n**Producing.** The room's key holder builds the object without `proof` and signs it with a W3C Data Integrity proof whose `verificationMethod` is a key the room's DID document lists for `assertionMethod` and whose `proofPurpose` is `assertionMethod`. A producer MUST support `eddsa-jcs-2022`. Each list's `sequence` is exactly one greater than the last list the room signed, and the producer MUST NOT sign two different lists at one `sequence`.\n\n**Accepting.** A host MUST refuse a list unless: (1) `roomId` is the room it is delivered for; (2) `proof` verifies with a key of `roomId` listed for `assertionMethod` — a list signed by any other key, however valid the signature, is not the room's; (3) `sequence` is greater than that of the list it holds, or equal with an identical list (a repeat, answered as accepted and changing nothing); (4) it is **append-only** against the list it holds: every entry of the held list appears in it unchanged, unless that entry's `until` has passed. A list that lowers the sequence is a rollback and one that drops a live entry is a reinstatement nobody signed for, and both are refused; two different lists at one `sequence` is the room's key equivocating, and the host keeps the list it holds.\n\n**Applying.** A credential is revoked by an accepted list when any entry matches it (see `RevocationEntry`). An entry whose `until` has passed MAY be discarded by a host and omitted from later lists; no other entry is ever dropped.\n\n**Size.** A list is bounded at 4096 entries. A room that would exceed it uses a `room` entry, which withdraws everything issued before it and lets the room re-issue to those who remain.";
321
+ readonly properties: {
322
+ readonly roomId: {
323
+ readonly type: "string";
324
+ readonly minLength: 1;
325
+ readonly maxLength: 512;
326
+ readonly description: "The room whose credentials this list withdraws, exactly as on the wire. Signed, so a list cannot be replayed against another room.";
327
+ };
328
+ readonly sequence: {
329
+ readonly type: "integer";
330
+ readonly minimum: 1;
331
+ readonly description: "The list's position in the room's sequence: exactly one greater than the last list the room signed. A host accepts only a list whose sequence is above the one it holds, which is what stops a host, a relayer or an attacker holding an old list from rolling the room's withdrawals back.";
332
+ };
333
+ readonly issuedAt: {
334
+ readonly type: "string";
335
+ readonly format: "date-time";
336
+ readonly description: "When the room signed this list.";
337
+ };
338
+ readonly entries: {
339
+ readonly type: "array";
340
+ readonly maxItems: 4096;
341
+ readonly items: {
342
+ readonly $ref: "#/$defs/RevocationEntry";
343
+ };
344
+ readonly description: "Every withdrawal still in force, in the order the room made them. Empty is valid: a room that has revoked nothing, or whose every entry has lapsed, can still state its sequence.";
345
+ };
346
+ readonly proof: {
347
+ readonly type: "object";
348
+ readonly description: "The room's Data Integrity proof over every other member, made with a key the room's DID document lists for `assertionMethod`.";
349
+ };
350
+ };
351
+ };
352
+ readonly RevocationEntry: {
353
+ readonly title: "RevocationEntry";
354
+ readonly description: "One withdrawal in a `RevocationList`, discriminated by `kind`.\n\n - `credential` withdraws one credential, named by its `id`. It matches the membership credential or any authority link whose `id` equals `credentialId`.\n - `subject` withdraws a party: every credential the room's chain gave them **before** `revokedAt`. It matches the membership credential or any authority link whose `credentialSubject` id **or** `issuer` is `subject` and whose `validFrom` is earlier than `revokedAt`. Matching the issuer as well as the subject withdraws what the party delegated before their removal, which no re-admission revives. A credential carrying no `validFrom` is treated as issued before every entry.\n - `room` withdraws every credential whose `validFrom` is earlier than `revokedAt`, whoever holds it. It is how a room resets access — after a compromise, or on a `private` room, where naming a party would disclose who was a member.\n\n**Keyed on time, so a party can come back.** A `subject` or `room` entry withdraws what was issued before it and nothing after, so a room that re-admits a removed party issues fresh credentials and they verify. A `credential` entry is permanent for that one credential, which nobody re-issues.\n\n**Tiers.** On a `private` room a host MUST refuse a list carrying a `credential` or `subject` entry: a presentation there withholds the credential and its subject, so such an entry is one the host cannot apply and a disclosure of who was in the room. Only `room` entries are permitted, and a host serving a `private` room MUST refuse any presentation for which it cannot establish that no credential in it has a `validFrom` earlier than the latest `room` entry's `revokedAt`.";
355
+ readonly oneOf: readonly [{
356
+ readonly $ref: "#/$defs/CredentialRevocation";
357
+ }, {
358
+ readonly $ref: "#/$defs/SubjectRevocation";
359
+ }, {
360
+ readonly $ref: "#/$defs/RoomRevocation";
361
+ }];
362
+ };
363
+ readonly RoomRevocation: {
364
+ readonly title: "RoomRevocation";
365
+ readonly type: "object";
366
+ readonly additionalProperties: false;
367
+ readonly required: readonly ["kind", "revokedAt"];
368
+ readonly description: "Withdraws every credential whose `validFrom` is earlier than `revokedAt`, whoever holds it.";
369
+ readonly properties: {
370
+ readonly kind: {
371
+ readonly const: "room";
372
+ };
373
+ readonly revokedAt: {
374
+ readonly type: "string";
375
+ readonly format: "date-time";
376
+ readonly description: "When the room made this withdrawal.";
377
+ };
378
+ readonly until: {
379
+ readonly type: "string";
380
+ readonly format: "date-time";
381
+ readonly description: "OPTIONAL. After this instant every credential the entry matches has expired anyway, so a host MAY discard the entry and the room MAY omit it from later lists. Absent means the entry is kept for as long as the room keeps a list.";
382
+ };
383
+ };
384
+ };
385
+ readonly SubjectRevocation: {
386
+ readonly title: "SubjectRevocation";
387
+ readonly type: "object";
388
+ readonly additionalProperties: false;
389
+ readonly required: readonly ["kind", "subject", "revokedAt"];
390
+ readonly description: "Withdraws a party: every credential naming them as subject or issuer whose `validFrom` is earlier than `revokedAt`.";
391
+ readonly properties: {
392
+ readonly kind: {
393
+ readonly const: "subject";
394
+ };
395
+ readonly subject: {
396
+ readonly type: "string";
397
+ readonly pattern: "^did:";
398
+ readonly maxLength: 2048;
399
+ readonly description: "The party withdrawn. Never the room itself.";
400
+ };
401
+ readonly revokedAt: {
402
+ readonly type: "string";
403
+ readonly format: "date-time";
404
+ readonly description: "When the room made this withdrawal.";
405
+ };
406
+ readonly until: {
407
+ readonly type: "string";
408
+ readonly format: "date-time";
409
+ readonly description: "OPTIONAL. After this instant every credential the entry matches has expired anyway, so a host MAY discard the entry and the room MAY omit it from later lists. Absent means the entry is kept for as long as the room keeps a list.";
410
+ };
411
+ };
412
+ };
413
+ readonly CredentialRevocation: {
414
+ readonly title: "CredentialRevocation";
415
+ readonly type: "object";
416
+ readonly additionalProperties: false;
417
+ readonly required: readonly ["kind", "credentialId", "revokedAt"];
418
+ readonly description: "Withdraws one credential — a membership credential or any authority link — by its `id`.";
419
+ readonly properties: {
420
+ readonly kind: {
421
+ readonly const: "credential";
422
+ };
423
+ readonly credentialId: {
424
+ readonly type: "string";
425
+ readonly minLength: 1;
426
+ readonly maxLength: 2048;
427
+ readonly description: "The `id` of the credential withdrawn, as `rooms/owner/issue-authority` and `rooms/owner/issue-membership` return it, or as an attenuated credential carries it.";
428
+ };
429
+ readonly revokedAt: {
430
+ readonly type: "string";
431
+ readonly format: "date-time";
432
+ readonly description: "When the room made this withdrawal.";
433
+ };
434
+ readonly until: {
435
+ readonly type: "string";
436
+ readonly format: "date-time";
437
+ readonly description: "OPTIONAL. After this instant every credential the entry matches has expired anyway, so a host MAY discard the entry and the room MAY omit it from later lists. Absent means the entry is kept for as long as the room keeps a list.";
438
+ };
439
+ };
440
+ };
441
+ readonly AuthorityPresentation: {
442
+ readonly title: "AuthorityPresentation";
443
+ readonly type: "object";
444
+ readonly additionalProperties: false;
445
+ readonly required: readonly ["membership", "authority"];
446
+ readonly description: "What a party presents to act on a room. Carries the whole authority chain: a host MUST NOT dereference an authority credential's `parent` to fetch a link it was not given. Resolving over the network would make verification depend on availability, turn every identifier into a request the host can be induced to make against an address the holder chooses, and signal credential use to whoever hosts the identifier. A host MUST bind the presenter to the chain's leaf. A chain that verifies is evidence that authority was conferred on somebody; it is not evidence that the party presenting it is that somebody. The leaf's subject MUST equal the party the host authenticated for this request — an identity the transport established or a document `proof` proved, never one named in a payload. A host that omits this check authorizes every captured presentation, and the omission is silent, because the chain still verifies.\n\n**Every credential is its issuer's attestation, and only its issuer's.** For the membership credential and for every link of `authority`, a host MUST verify the credential's `proof` with a key that the credential's own `issuer` lists for `assertionMethod` in its DID document, and MUST refuse a credential whose proof names a verification method that is not its issuer's. A proof that verifies under some other party's key is that party's statement, not the issuer's, and confers nothing. The same binding holds for every other document a room signs, such as a `RevocationList`.\n\n**A chain that verifies may still be revoked.** A host that has accepted a `RevocationList` for the room (`rooms/revocations/put`) MUST, from the moment it accepted it, refuse every presentation in which the membership credential or any link of `authority` is revoked by that list, under every task and every version of every task it serves for the room. A chain from which any link is revoked is refused whole: a credential delegated from a revoked one confers nothing, however it was attenuated. The refusal is the same `permissionDenied` as any other failed presentation.";
447
+ readonly properties: {
448
+ readonly membership: {
449
+ readonly type: "string";
450
+ readonly description: "The presenter's membership credential for this room, or — on a `private` room — a zero-knowledge presentation of it. Serialized per the governing profile.";
451
+ };
452
+ readonly authority: {
453
+ readonly type: "array";
454
+ readonly minItems: 1;
455
+ readonly maxItems: 8;
456
+ readonly items: {
457
+ readonly type: "string";
458
+ };
459
+ readonly description: "The authority chain, LEAF FIRST: the first element is the credential being relied on and the last MUST be one issued by the room itself. Every link the presenter relies on is present, because the host will not fetch one. Capped at 8: verification is linear in chain length and runs on every operation, so an unbounded chain is a denial-of-service surface against the host. The known uses need 2 to 3 — a person attenuating to an agent, and that agent to a sub-agent.";
460
+ };
461
+ readonly subjectBinding: {
462
+ readonly type: "string";
463
+ readonly description: "REQUIRED on a `private` room, where the subject identifier is withheld: a proof that the membership credential and the authority chain's leaf describe the SAME subject. Without it two parties pool credentials — one contributes membership, the other authority — and the combination verifies as a single party holding both. A host MUST refuse a private-room presentation that omits this.";
464
+ };
465
+ };
466
+ };
467
+ };
468
+ };
469
+ /**
470
+ * SPEC.md §7.2 policy for the request variant, from this specification's
471
+ * front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
472
+ * per-specification and cannot be derived from the document alone, and
473
+ * item 2 needs the schema this carries.
474
+ */
475
+ export declare const SPEC: {
476
+ readonly typeUri: "https://trusttasks.org/spec/rooms/revocations/get/0.1";
477
+ readonly isBearer: false;
478
+ readonly isProofRequired: true;
479
+ readonly isRecipientRequired: true;
480
+ readonly isIssuedAtRequired: true;
481
+ readonly payloadSchema: {
482
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
483
+ readonly $id: "https://trusttasks.org/spec/rooms/revocations/get/0.1";
484
+ readonly title: "Rooms Revocations Get — payload";
485
+ readonly description: "An administrator of a room reads the revocation list its host holds and enforces for it.";
486
+ readonly type: "object";
487
+ readonly additionalProperties: false;
488
+ readonly required: readonly ["roomId", "presentation"];
489
+ readonly properties: {
490
+ readonly roomId: {
491
+ readonly type: "string";
492
+ readonly minLength: 1;
493
+ readonly maxLength: 512;
494
+ readonly description: "The room.";
495
+ };
496
+ readonly presentation: {
497
+ readonly $ref: "#/$defs/AuthorityPresentation";
498
+ readonly description: "Must confer the `admin` action at this room's scope. The list names withdrawn parties on `open` and `attributed` rooms, which is the room's administration and not a member's business.";
499
+ };
500
+ readonly ext: {
501
+ readonly $ref: "#/$defs/Ext";
502
+ readonly description: "Ecosystem-defined extension members per SPEC.md §4.5.1.";
503
+ };
504
+ };
505
+ readonly $defs: {
506
+ readonly Response: {
507
+ readonly $anchor: "response";
508
+ readonly title: "Rooms Revocations Get — response payload";
509
+ readonly description: "Success response to rooms/revocations/get. Type https://trusttasks.org/spec/rooms/revocations/get/0.1#response. The list the host holds, exactly as the room signed it, or nothing when it holds none.";
510
+ readonly type: "object";
511
+ readonly additionalProperties: false;
512
+ readonly required: readonly ["roomId"];
513
+ readonly properties: {
514
+ readonly roomId: {
515
+ readonly type: "string";
516
+ readonly minLength: 1;
517
+ readonly maxLength: 512;
518
+ };
519
+ readonly list: {
520
+ readonly $ref: "#/$defs/RevocationList";
521
+ readonly description: "The list the host holds, as the room signed it. Absent when the host holds none. A reader MUST verify it as a host does — the room's own key, this room — before relying on it, and MUST NOT adopt it in place of a list it holds at a higher sequence.";
522
+ };
523
+ readonly inForceAt: {
524
+ readonly type: "string";
525
+ readonly format: "date-time";
526
+ readonly description: "When the host began enforcing `list`. Present with it.";
527
+ };
528
+ readonly ext: {
529
+ readonly $ref: "#/$defs/Ext";
530
+ };
531
+ };
532
+ };
533
+ readonly Ext: {
534
+ readonly title: "Ext";
535
+ readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
536
+ readonly type: "object";
537
+ readonly minProperties: 1;
538
+ readonly additionalProperties: true;
539
+ readonly propertyNames: {
540
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
541
+ };
542
+ };
543
+ readonly RevocationList: {
544
+ readonly title: "RevocationList";
545
+ readonly type: "object";
546
+ readonly additionalProperties: false;
547
+ readonly required: readonly ["roomId", "sequence", "issuedAt", "entries", "proof"];
548
+ readonly description: "The room's own statement of which credentials it has withdrawn before they expire — signed by the room, cumulative, and numbered, so that it means the same thing at every host it is delivered to.\n\n**Why the room signs it, and why it is cumulative.** A host authorizes from credentials the room issued and keeps no roster; a withdrawal kept only as a host's own state would make the room unmovable and the host part of the membership. A list the room signed is room state: it moves with the room, any host it is delivered to reaches the same decision, and nothing a host invents can be mistaken for it. It is cumulative — every list carries every entry still in force — so a host holding any one list holds the room's whole withdrawal state, and a host that missed a list loses nothing once it receives a later one.\n\n**Producing.** The room's key holder builds the object without `proof` and signs it with a W3C Data Integrity proof whose `verificationMethod` is a key the room's DID document lists for `assertionMethod` and whose `proofPurpose` is `assertionMethod`. A producer MUST support `eddsa-jcs-2022`. Each list's `sequence` is exactly one greater than the last list the room signed, and the producer MUST NOT sign two different lists at one `sequence`.\n\n**Accepting.** A host MUST refuse a list unless: (1) `roomId` is the room it is delivered for; (2) `proof` verifies with a key of `roomId` listed for `assertionMethod` — a list signed by any other key, however valid the signature, is not the room's; (3) `sequence` is greater than that of the list it holds, or equal with an identical list (a repeat, answered as accepted and changing nothing); (4) it is **append-only** against the list it holds: every entry of the held list appears in it unchanged, unless that entry's `until` has passed. A list that lowers the sequence is a rollback and one that drops a live entry is a reinstatement nobody signed for, and both are refused; two different lists at one `sequence` is the room's key equivocating, and the host keeps the list it holds.\n\n**Applying.** A credential is revoked by an accepted list when any entry matches it (see `RevocationEntry`). An entry whose `until` has passed MAY be discarded by a host and omitted from later lists; no other entry is ever dropped.\n\n**Size.** A list is bounded at 4096 entries. A room that would exceed it uses a `room` entry, which withdraws everything issued before it and lets the room re-issue to those who remain.";
549
+ readonly properties: {
550
+ readonly roomId: {
551
+ readonly type: "string";
552
+ readonly minLength: 1;
553
+ readonly maxLength: 512;
554
+ readonly description: "The room whose credentials this list withdraws, exactly as on the wire. Signed, so a list cannot be replayed against another room.";
555
+ };
556
+ readonly sequence: {
557
+ readonly type: "integer";
558
+ readonly minimum: 1;
559
+ readonly description: "The list's position in the room's sequence: exactly one greater than the last list the room signed. A host accepts only a list whose sequence is above the one it holds, which is what stops a host, a relayer or an attacker holding an old list from rolling the room's withdrawals back.";
560
+ };
561
+ readonly issuedAt: {
562
+ readonly type: "string";
563
+ readonly format: "date-time";
564
+ readonly description: "When the room signed this list.";
565
+ };
566
+ readonly entries: {
567
+ readonly type: "array";
568
+ readonly maxItems: 4096;
569
+ readonly items: {
570
+ readonly $ref: "#/$defs/RevocationEntry";
571
+ };
572
+ readonly description: "Every withdrawal still in force, in the order the room made them. Empty is valid: a room that has revoked nothing, or whose every entry has lapsed, can still state its sequence.";
573
+ };
574
+ readonly proof: {
575
+ readonly type: "object";
576
+ readonly description: "The room's Data Integrity proof over every other member, made with a key the room's DID document lists for `assertionMethod`.";
577
+ };
578
+ };
579
+ };
580
+ readonly RevocationEntry: {
581
+ readonly title: "RevocationEntry";
582
+ readonly description: "One withdrawal in a `RevocationList`, discriminated by `kind`.\n\n - `credential` withdraws one credential, named by its `id`. It matches the membership credential or any authority link whose `id` equals `credentialId`.\n - `subject` withdraws a party: every credential the room's chain gave them **before** `revokedAt`. It matches the membership credential or any authority link whose `credentialSubject` id **or** `issuer` is `subject` and whose `validFrom` is earlier than `revokedAt`. Matching the issuer as well as the subject withdraws what the party delegated before their removal, which no re-admission revives. A credential carrying no `validFrom` is treated as issued before every entry.\n - `room` withdraws every credential whose `validFrom` is earlier than `revokedAt`, whoever holds it. It is how a room resets access — after a compromise, or on a `private` room, where naming a party would disclose who was a member.\n\n**Keyed on time, so a party can come back.** A `subject` or `room` entry withdraws what was issued before it and nothing after, so a room that re-admits a removed party issues fresh credentials and they verify. A `credential` entry is permanent for that one credential, which nobody re-issues.\n\n**Tiers.** On a `private` room a host MUST refuse a list carrying a `credential` or `subject` entry: a presentation there withholds the credential and its subject, so such an entry is one the host cannot apply and a disclosure of who was in the room. Only `room` entries are permitted, and a host serving a `private` room MUST refuse any presentation for which it cannot establish that no credential in it has a `validFrom` earlier than the latest `room` entry's `revokedAt`.";
583
+ readonly oneOf: readonly [{
584
+ readonly $ref: "#/$defs/CredentialRevocation";
585
+ }, {
586
+ readonly $ref: "#/$defs/SubjectRevocation";
587
+ }, {
588
+ readonly $ref: "#/$defs/RoomRevocation";
589
+ }];
590
+ };
591
+ readonly RoomRevocation: {
592
+ readonly title: "RoomRevocation";
593
+ readonly type: "object";
594
+ readonly additionalProperties: false;
595
+ readonly required: readonly ["kind", "revokedAt"];
596
+ readonly description: "Withdraws every credential whose `validFrom` is earlier than `revokedAt`, whoever holds it.";
597
+ readonly properties: {
598
+ readonly kind: {
599
+ readonly const: "room";
600
+ };
601
+ readonly revokedAt: {
602
+ readonly type: "string";
603
+ readonly format: "date-time";
604
+ readonly description: "When the room made this withdrawal.";
605
+ };
606
+ readonly until: {
607
+ readonly type: "string";
608
+ readonly format: "date-time";
609
+ readonly description: "OPTIONAL. After this instant every credential the entry matches has expired anyway, so a host MAY discard the entry and the room MAY omit it from later lists. Absent means the entry is kept for as long as the room keeps a list.";
610
+ };
611
+ };
612
+ };
613
+ readonly SubjectRevocation: {
614
+ readonly title: "SubjectRevocation";
615
+ readonly type: "object";
616
+ readonly additionalProperties: false;
617
+ readonly required: readonly ["kind", "subject", "revokedAt"];
618
+ readonly description: "Withdraws a party: every credential naming them as subject or issuer whose `validFrom` is earlier than `revokedAt`.";
619
+ readonly properties: {
620
+ readonly kind: {
621
+ readonly const: "subject";
622
+ };
623
+ readonly subject: {
624
+ readonly type: "string";
625
+ readonly pattern: "^did:";
626
+ readonly maxLength: 2048;
627
+ readonly description: "The party withdrawn. Never the room itself.";
628
+ };
629
+ readonly revokedAt: {
630
+ readonly type: "string";
631
+ readonly format: "date-time";
632
+ readonly description: "When the room made this withdrawal.";
633
+ };
634
+ readonly until: {
635
+ readonly type: "string";
636
+ readonly format: "date-time";
637
+ readonly description: "OPTIONAL. After this instant every credential the entry matches has expired anyway, so a host MAY discard the entry and the room MAY omit it from later lists. Absent means the entry is kept for as long as the room keeps a list.";
638
+ };
639
+ };
640
+ };
641
+ readonly CredentialRevocation: {
642
+ readonly title: "CredentialRevocation";
643
+ readonly type: "object";
644
+ readonly additionalProperties: false;
645
+ readonly required: readonly ["kind", "credentialId", "revokedAt"];
646
+ readonly description: "Withdraws one credential — a membership credential or any authority link — by its `id`.";
647
+ readonly properties: {
648
+ readonly kind: {
649
+ readonly const: "credential";
650
+ };
651
+ readonly credentialId: {
652
+ readonly type: "string";
653
+ readonly minLength: 1;
654
+ readonly maxLength: 2048;
655
+ readonly description: "The `id` of the credential withdrawn, as `rooms/owner/issue-authority` and `rooms/owner/issue-membership` return it, or as an attenuated credential carries it.";
656
+ };
657
+ readonly revokedAt: {
658
+ readonly type: "string";
659
+ readonly format: "date-time";
660
+ readonly description: "When the room made this withdrawal.";
661
+ };
662
+ readonly until: {
663
+ readonly type: "string";
664
+ readonly format: "date-time";
665
+ readonly description: "OPTIONAL. After this instant every credential the entry matches has expired anyway, so a host MAY discard the entry and the room MAY omit it from later lists. Absent means the entry is kept for as long as the room keeps a list.";
666
+ };
667
+ };
668
+ };
669
+ readonly AuthorityPresentation: {
670
+ readonly title: "AuthorityPresentation";
671
+ readonly type: "object";
672
+ readonly additionalProperties: false;
673
+ readonly required: readonly ["membership", "authority"];
674
+ readonly description: "What a party presents to act on a room. Carries the whole authority chain: a host MUST NOT dereference an authority credential's `parent` to fetch a link it was not given. Resolving over the network would make verification depend on availability, turn every identifier into a request the host can be induced to make against an address the holder chooses, and signal credential use to whoever hosts the identifier. A host MUST bind the presenter to the chain's leaf. A chain that verifies is evidence that authority was conferred on somebody; it is not evidence that the party presenting it is that somebody. The leaf's subject MUST equal the party the host authenticated for this request — an identity the transport established or a document `proof` proved, never one named in a payload. A host that omits this check authorizes every captured presentation, and the omission is silent, because the chain still verifies.\n\n**Every credential is its issuer's attestation, and only its issuer's.** For the membership credential and for every link of `authority`, a host MUST verify the credential's `proof` with a key that the credential's own `issuer` lists for `assertionMethod` in its DID document, and MUST refuse a credential whose proof names a verification method that is not its issuer's. A proof that verifies under some other party's key is that party's statement, not the issuer's, and confers nothing. The same binding holds for every other document a room signs, such as a `RevocationList`.\n\n**A chain that verifies may still be revoked.** A host that has accepted a `RevocationList` for the room (`rooms/revocations/put`) MUST, from the moment it accepted it, refuse every presentation in which the membership credential or any link of `authority` is revoked by that list, under every task and every version of every task it serves for the room. A chain from which any link is revoked is refused whole: a credential delegated from a revoked one confers nothing, however it was attenuated. The refusal is the same `permissionDenied` as any other failed presentation.";
675
+ readonly properties: {
676
+ readonly membership: {
677
+ readonly type: "string";
678
+ readonly description: "The presenter's membership credential for this room, or — on a `private` room — a zero-knowledge presentation of it. Serialized per the governing profile.";
679
+ };
680
+ readonly authority: {
681
+ readonly type: "array";
682
+ readonly minItems: 1;
683
+ readonly maxItems: 8;
684
+ readonly items: {
685
+ readonly type: "string";
686
+ };
687
+ readonly description: "The authority chain, LEAF FIRST: the first element is the credential being relied on and the last MUST be one issued by the room itself. Every link the presenter relies on is present, because the host will not fetch one. Capped at 8: verification is linear in chain length and runs on every operation, so an unbounded chain is a denial-of-service surface against the host. The known uses need 2 to 3 — a person attenuating to an agent, and that agent to a sub-agent.";
688
+ };
689
+ readonly subjectBinding: {
690
+ readonly type: "string";
691
+ readonly description: "REQUIRED on a `private` room, where the subject identifier is withheld: a proof that the membership credential and the authority chain's leaf describe the SAME subject. Without it two parties pool credentials — one contributes membership, the other authority — and the combination verifies as a single party holding both. A host MUST refuse a private-room presentation that omits this.";
692
+ };
693
+ };
694
+ };
695
+ };
696
+ };
697
+ };
698
+ /**
699
+ * SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
700
+ * tracks the *issuer* party's requirement because a response swaps the
701
+ * parties (§7.3 item 5).
702
+ */
703
+ export declare const RESPONSE_SPEC: {
704
+ readonly typeUri: "https://trusttasks.org/spec/rooms/revocations/get/0.1#response";
705
+ readonly isBearer: false;
706
+ readonly isProofRequired: true;
707
+ readonly isRecipientRequired: true;
708
+ readonly isIssuedAtRequired: true;
709
+ readonly payloadSchema: {
710
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
711
+ readonly $ref: "#/$defs/Response";
712
+ readonly $defs: {
713
+ readonly Response: {
714
+ readonly $anchor: "response";
715
+ readonly title: "Rooms Revocations Get — response payload";
716
+ readonly description: "Success response to rooms/revocations/get. Type https://trusttasks.org/spec/rooms/revocations/get/0.1#response. The list the host holds, exactly as the room signed it, or nothing when it holds none.";
717
+ readonly type: "object";
718
+ readonly additionalProperties: false;
719
+ readonly required: readonly ["roomId"];
720
+ readonly properties: {
721
+ readonly roomId: {
722
+ readonly type: "string";
723
+ readonly minLength: 1;
724
+ readonly maxLength: 512;
725
+ };
726
+ readonly list: {
727
+ readonly $ref: "#/$defs/RevocationList";
728
+ readonly description: "The list the host holds, as the room signed it. Absent when the host holds none. A reader MUST verify it as a host does — the room's own key, this room — before relying on it, and MUST NOT adopt it in place of a list it holds at a higher sequence.";
729
+ };
730
+ readonly inForceAt: {
731
+ readonly type: "string";
732
+ readonly format: "date-time";
733
+ readonly description: "When the host began enforcing `list`. Present with it.";
734
+ };
735
+ readonly ext: {
736
+ readonly $ref: "#/$defs/Ext";
737
+ };
738
+ };
739
+ };
740
+ readonly Ext: {
741
+ readonly title: "Ext";
742
+ readonly description: "Vendor-namespaced extension object per SPEC.md §4.5.1. Each immediate key MUST be a reverse-DNS namespace; structure under each namespace is opaque to the framework.";
743
+ readonly type: "object";
744
+ readonly minProperties: 1;
745
+ readonly additionalProperties: true;
746
+ readonly propertyNames: {
747
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
748
+ };
749
+ };
750
+ readonly RevocationList: {
751
+ readonly title: "RevocationList";
752
+ readonly type: "object";
753
+ readonly additionalProperties: false;
754
+ readonly required: readonly ["roomId", "sequence", "issuedAt", "entries", "proof"];
755
+ readonly description: "The room's own statement of which credentials it has withdrawn before they expire — signed by the room, cumulative, and numbered, so that it means the same thing at every host it is delivered to.\n\n**Why the room signs it, and why it is cumulative.** A host authorizes from credentials the room issued and keeps no roster; a withdrawal kept only as a host's own state would make the room unmovable and the host part of the membership. A list the room signed is room state: it moves with the room, any host it is delivered to reaches the same decision, and nothing a host invents can be mistaken for it. It is cumulative — every list carries every entry still in force — so a host holding any one list holds the room's whole withdrawal state, and a host that missed a list loses nothing once it receives a later one.\n\n**Producing.** The room's key holder builds the object without `proof` and signs it with a W3C Data Integrity proof whose `verificationMethod` is a key the room's DID document lists for `assertionMethod` and whose `proofPurpose` is `assertionMethod`. A producer MUST support `eddsa-jcs-2022`. Each list's `sequence` is exactly one greater than the last list the room signed, and the producer MUST NOT sign two different lists at one `sequence`.\n\n**Accepting.** A host MUST refuse a list unless: (1) `roomId` is the room it is delivered for; (2) `proof` verifies with a key of `roomId` listed for `assertionMethod` — a list signed by any other key, however valid the signature, is not the room's; (3) `sequence` is greater than that of the list it holds, or equal with an identical list (a repeat, answered as accepted and changing nothing); (4) it is **append-only** against the list it holds: every entry of the held list appears in it unchanged, unless that entry's `until` has passed. A list that lowers the sequence is a rollback and one that drops a live entry is a reinstatement nobody signed for, and both are refused; two different lists at one `sequence` is the room's key equivocating, and the host keeps the list it holds.\n\n**Applying.** A credential is revoked by an accepted list when any entry matches it (see `RevocationEntry`). An entry whose `until` has passed MAY be discarded by a host and omitted from later lists; no other entry is ever dropped.\n\n**Size.** A list is bounded at 4096 entries. A room that would exceed it uses a `room` entry, which withdraws everything issued before it and lets the room re-issue to those who remain.";
756
+ readonly properties: {
757
+ readonly roomId: {
758
+ readonly type: "string";
759
+ readonly minLength: 1;
760
+ readonly maxLength: 512;
761
+ readonly description: "The room whose credentials this list withdraws, exactly as on the wire. Signed, so a list cannot be replayed against another room.";
762
+ };
763
+ readonly sequence: {
764
+ readonly type: "integer";
765
+ readonly minimum: 1;
766
+ readonly description: "The list's position in the room's sequence: exactly one greater than the last list the room signed. A host accepts only a list whose sequence is above the one it holds, which is what stops a host, a relayer or an attacker holding an old list from rolling the room's withdrawals back.";
767
+ };
768
+ readonly issuedAt: {
769
+ readonly type: "string";
770
+ readonly format: "date-time";
771
+ readonly description: "When the room signed this list.";
772
+ };
773
+ readonly entries: {
774
+ readonly type: "array";
775
+ readonly maxItems: 4096;
776
+ readonly items: {
777
+ readonly $ref: "#/$defs/RevocationEntry";
778
+ };
779
+ readonly description: "Every withdrawal still in force, in the order the room made them. Empty is valid: a room that has revoked nothing, or whose every entry has lapsed, can still state its sequence.";
780
+ };
781
+ readonly proof: {
782
+ readonly type: "object";
783
+ readonly description: "The room's Data Integrity proof over every other member, made with a key the room's DID document lists for `assertionMethod`.";
784
+ };
785
+ };
786
+ };
787
+ readonly RevocationEntry: {
788
+ readonly title: "RevocationEntry";
789
+ readonly description: "One withdrawal in a `RevocationList`, discriminated by `kind`.\n\n - `credential` withdraws one credential, named by its `id`. It matches the membership credential or any authority link whose `id` equals `credentialId`.\n - `subject` withdraws a party: every credential the room's chain gave them **before** `revokedAt`. It matches the membership credential or any authority link whose `credentialSubject` id **or** `issuer` is `subject` and whose `validFrom` is earlier than `revokedAt`. Matching the issuer as well as the subject withdraws what the party delegated before their removal, which no re-admission revives. A credential carrying no `validFrom` is treated as issued before every entry.\n - `room` withdraws every credential whose `validFrom` is earlier than `revokedAt`, whoever holds it. It is how a room resets access — after a compromise, or on a `private` room, where naming a party would disclose who was a member.\n\n**Keyed on time, so a party can come back.** A `subject` or `room` entry withdraws what was issued before it and nothing after, so a room that re-admits a removed party issues fresh credentials and they verify. A `credential` entry is permanent for that one credential, which nobody re-issues.\n\n**Tiers.** On a `private` room a host MUST refuse a list carrying a `credential` or `subject` entry: a presentation there withholds the credential and its subject, so such an entry is one the host cannot apply and a disclosure of who was in the room. Only `room` entries are permitted, and a host serving a `private` room MUST refuse any presentation for which it cannot establish that no credential in it has a `validFrom` earlier than the latest `room` entry's `revokedAt`.";
790
+ readonly oneOf: readonly [{
791
+ readonly $ref: "#/$defs/CredentialRevocation";
792
+ }, {
793
+ readonly $ref: "#/$defs/SubjectRevocation";
794
+ }, {
795
+ readonly $ref: "#/$defs/RoomRevocation";
796
+ }];
797
+ };
798
+ readonly RoomRevocation: {
799
+ readonly title: "RoomRevocation";
800
+ readonly type: "object";
801
+ readonly additionalProperties: false;
802
+ readonly required: readonly ["kind", "revokedAt"];
803
+ readonly description: "Withdraws every credential whose `validFrom` is earlier than `revokedAt`, whoever holds it.";
804
+ readonly properties: {
805
+ readonly kind: {
806
+ readonly const: "room";
807
+ };
808
+ readonly revokedAt: {
809
+ readonly type: "string";
810
+ readonly format: "date-time";
811
+ readonly description: "When the room made this withdrawal.";
812
+ };
813
+ readonly until: {
814
+ readonly type: "string";
815
+ readonly format: "date-time";
816
+ readonly description: "OPTIONAL. After this instant every credential the entry matches has expired anyway, so a host MAY discard the entry and the room MAY omit it from later lists. Absent means the entry is kept for as long as the room keeps a list.";
817
+ };
818
+ };
819
+ };
820
+ readonly SubjectRevocation: {
821
+ readonly title: "SubjectRevocation";
822
+ readonly type: "object";
823
+ readonly additionalProperties: false;
824
+ readonly required: readonly ["kind", "subject", "revokedAt"];
825
+ readonly description: "Withdraws a party: every credential naming them as subject or issuer whose `validFrom` is earlier than `revokedAt`.";
826
+ readonly properties: {
827
+ readonly kind: {
828
+ readonly const: "subject";
829
+ };
830
+ readonly subject: {
831
+ readonly type: "string";
832
+ readonly pattern: "^did:";
833
+ readonly maxLength: 2048;
834
+ readonly description: "The party withdrawn. Never the room itself.";
835
+ };
836
+ readonly revokedAt: {
837
+ readonly type: "string";
838
+ readonly format: "date-time";
839
+ readonly description: "When the room made this withdrawal.";
840
+ };
841
+ readonly until: {
842
+ readonly type: "string";
843
+ readonly format: "date-time";
844
+ readonly description: "OPTIONAL. After this instant every credential the entry matches has expired anyway, so a host MAY discard the entry and the room MAY omit it from later lists. Absent means the entry is kept for as long as the room keeps a list.";
845
+ };
846
+ };
847
+ };
848
+ readonly CredentialRevocation: {
849
+ readonly title: "CredentialRevocation";
850
+ readonly type: "object";
851
+ readonly additionalProperties: false;
852
+ readonly required: readonly ["kind", "credentialId", "revokedAt"];
853
+ readonly description: "Withdraws one credential — a membership credential or any authority link — by its `id`.";
854
+ readonly properties: {
855
+ readonly kind: {
856
+ readonly const: "credential";
857
+ };
858
+ readonly credentialId: {
859
+ readonly type: "string";
860
+ readonly minLength: 1;
861
+ readonly maxLength: 2048;
862
+ readonly description: "The `id` of the credential withdrawn, as `rooms/owner/issue-authority` and `rooms/owner/issue-membership` return it, or as an attenuated credential carries it.";
863
+ };
864
+ readonly revokedAt: {
865
+ readonly type: "string";
866
+ readonly format: "date-time";
867
+ readonly description: "When the room made this withdrawal.";
868
+ };
869
+ readonly until: {
870
+ readonly type: "string";
871
+ readonly format: "date-time";
872
+ readonly description: "OPTIONAL. After this instant every credential the entry matches has expired anyway, so a host MAY discard the entry and the room MAY omit it from later lists. Absent means the entry is kept for as long as the room keeps a list.";
873
+ };
874
+ };
875
+ };
876
+ readonly AuthorityPresentation: {
877
+ readonly title: "AuthorityPresentation";
878
+ readonly type: "object";
879
+ readonly additionalProperties: false;
880
+ readonly required: readonly ["membership", "authority"];
881
+ readonly description: "What a party presents to act on a room. Carries the whole authority chain: a host MUST NOT dereference an authority credential's `parent` to fetch a link it was not given. Resolving over the network would make verification depend on availability, turn every identifier into a request the host can be induced to make against an address the holder chooses, and signal credential use to whoever hosts the identifier. A host MUST bind the presenter to the chain's leaf. A chain that verifies is evidence that authority was conferred on somebody; it is not evidence that the party presenting it is that somebody. The leaf's subject MUST equal the party the host authenticated for this request — an identity the transport established or a document `proof` proved, never one named in a payload. A host that omits this check authorizes every captured presentation, and the omission is silent, because the chain still verifies.\n\n**Every credential is its issuer's attestation, and only its issuer's.** For the membership credential and for every link of `authority`, a host MUST verify the credential's `proof` with a key that the credential's own `issuer` lists for `assertionMethod` in its DID document, and MUST refuse a credential whose proof names a verification method that is not its issuer's. A proof that verifies under some other party's key is that party's statement, not the issuer's, and confers nothing. The same binding holds for every other document a room signs, such as a `RevocationList`.\n\n**A chain that verifies may still be revoked.** A host that has accepted a `RevocationList` for the room (`rooms/revocations/put`) MUST, from the moment it accepted it, refuse every presentation in which the membership credential or any link of `authority` is revoked by that list, under every task and every version of every task it serves for the room. A chain from which any link is revoked is refused whole: a credential delegated from a revoked one confers nothing, however it was attenuated. The refusal is the same `permissionDenied` as any other failed presentation.";
882
+ readonly properties: {
883
+ readonly membership: {
884
+ readonly type: "string";
885
+ readonly description: "The presenter's membership credential for this room, or — on a `private` room — a zero-knowledge presentation of it. Serialized per the governing profile.";
886
+ };
887
+ readonly authority: {
888
+ readonly type: "array";
889
+ readonly minItems: 1;
890
+ readonly maxItems: 8;
891
+ readonly items: {
892
+ readonly type: "string";
893
+ };
894
+ readonly description: "The authority chain, LEAF FIRST: the first element is the credential being relied on and the last MUST be one issued by the room itself. Every link the presenter relies on is present, because the host will not fetch one. Capped at 8: verification is linear in chain length and runs on every operation, so an unbounded chain is a denial-of-service surface against the host. The known uses need 2 to 3 — a person attenuating to an agent, and that agent to a sub-agent.";
895
+ };
896
+ readonly subjectBinding: {
897
+ readonly type: "string";
898
+ readonly description: "REQUIRED on a `private` room, where the subject identifier is withheld: a proof that the membership credential and the authority chain's leaf describe the SAME subject. Without it two parties pool credentials — one contributes membership, the other authority — and the combination verifies as a single party holding both. A host MUST refuse a private-room presentation that omits this.";
899
+ };
900
+ };
901
+ };
902
+ };
903
+ };
904
+ };
905
+ //# sourceMappingURL=payload.d.ts.map