@openvtc/trust-tasks 0.22.6 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/dist/_shared/components.d.ts +434 -1
  3. package/dist/_shared/components.d.ts.map +1 -1
  4. package/dist/acl/_shared/0.1/acl-entry.d.ts +1 -1
  5. package/dist/acl/_shared/0.1/acl-entry.d.ts.map +1 -1
  6. package/dist/acl/_shared/0.2/acl-entry.d.ts +22 -0
  7. package/dist/acl/_shared/0.2/acl-entry.d.ts.map +1 -0
  8. package/dist/acl/_shared/0.2/acl-entry.js +6 -0
  9. package/dist/acl/_shared/0.2/acl-entry.js.map +1 -0
  10. package/dist/acl/change-role/0.1/payload.d.ts +1 -1
  11. package/dist/acl/change-role/0.1/payload.d.ts.map +1 -1
  12. package/dist/acl/change-role/0.2/payload.d.ts +1679 -0
  13. package/dist/acl/change-role/0.2/payload.d.ts.map +1 -0
  14. package/dist/acl/change-role/0.2/payload.js +955 -0
  15. package/dist/acl/change-role/0.2/payload.js.map +1 -0
  16. package/dist/acl/grant/0.1/payload.d.ts +1 -1
  17. package/dist/acl/grant/0.1/payload.d.ts.map +1 -1
  18. package/dist/acl/grant/0.2/payload.d.ts +1649 -0
  19. package/dist/acl/grant/0.2/payload.d.ts.map +1 -0
  20. package/dist/acl/grant/0.2/payload.js +942 -0
  21. package/dist/acl/grant/0.2/payload.js.map +1 -0
  22. package/dist/acl/list/0.1/payload.d.ts +1 -1
  23. package/dist/acl/list/0.1/payload.d.ts.map +1 -1
  24. package/dist/acl/list/0.2/payload.d.ts +1853 -0
  25. package/dist/acl/list/0.2/payload.d.ts.map +1 -0
  26. package/dist/acl/list/0.2/payload.js +1041 -0
  27. package/dist/acl/list/0.2/payload.js.map +1 -0
  28. package/dist/acl/revoke/0.1/payload.d.ts +1 -1
  29. package/dist/acl/revoke/0.1/payload.d.ts.map +1 -1
  30. package/dist/acl/revoke/0.2/payload.d.ts +1844 -0
  31. package/dist/acl/revoke/0.2/payload.d.ts.map +1 -0
  32. package/dist/acl/revoke/0.2/payload.js +1052 -0
  33. package/dist/acl/revoke/0.2/payload.js.map +1 -0
  34. package/dist/acl/show/0.1/payload.d.ts +1 -1
  35. package/dist/acl/show/0.1/payload.d.ts.map +1 -1
  36. package/dist/acl/show/0.2/payload.d.ts +1689 -0
  37. package/dist/acl/show/0.2/payload.d.ts.map +1 -0
  38. package/dist/acl/show/0.2/payload.js +968 -0
  39. package/dist/acl/show/0.2/payload.js.map +1 -0
  40. package/dist/acl/swap-key/0.1/payload.d.ts +1 -1
  41. package/dist/acl/swap-key/0.1/payload.d.ts.map +1 -1
  42. package/dist/acl/update/0.1/payload.d.ts +1 -1
  43. package/dist/acl/update/0.1/payload.d.ts.map +1 -1
  44. package/dist/acl/update/0.2/payload.d.ts +1784 -0
  45. package/dist/acl/update/0.2/payload.d.ts.map +1 -0
  46. package/dist/acl/update/0.2/payload.js +1005 -0
  47. package/dist/acl/update/0.2/payload.js.map +1 -0
  48. package/dist/auth/step-up/approve-request/0.4/payload.d.ts +672 -0
  49. package/dist/auth/step-up/approve-request/0.4/payload.d.ts.map +1 -0
  50. package/dist/auth/step-up/approve-request/0.4/payload.js +373 -0
  51. package/dist/auth/step-up/approve-request/0.4/payload.js.map +1 -0
  52. package/dist/auth/step-up/approve-response/0.6/payload.d.ts +974 -0
  53. package/dist/auth/step-up/approve-response/0.6/payload.d.ts.map +1 -0
  54. package/dist/auth/step-up/approve-response/0.6/payload.js +552 -0
  55. package/dist/auth/step-up/approve-response/0.6/payload.js.map +1 -0
  56. package/dist/auth/step-up/approver/_shared/0.1/approver.d.ts +16 -0
  57. package/dist/auth/step-up/approver/_shared/0.1/approver.d.ts.map +1 -0
  58. package/dist/auth/step-up/approver/_shared/0.1/approver.js +6 -0
  59. package/dist/auth/step-up/approver/_shared/0.1/approver.js.map +1 -0
  60. package/dist/auth/step-up/approver/attest/0.1/payload.d.ts +174 -0
  61. package/dist/auth/step-up/approver/attest/0.1/payload.d.ts.map +1 -0
  62. package/dist/auth/step-up/approver/attest/0.1/payload.js +97 -0
  63. package/dist/auth/step-up/approver/attest/0.1/payload.js.map +1 -0
  64. package/dist/auth/step-up/approver/enroll/0.1/payload.d.ts +503 -0
  65. package/dist/auth/step-up/approver/enroll/0.1/payload.d.ts.map +1 -0
  66. package/dist/auth/step-up/approver/enroll/0.1/payload.js +285 -0
  67. package/dist/auth/step-up/approver/enroll/0.1/payload.js.map +1 -0
  68. package/dist/auth/step-up/approver/invite/0.1/payload.d.ts +375 -0
  69. package/dist/auth/step-up/approver/invite/0.1/payload.d.ts.map +1 -0
  70. package/dist/auth/step-up/approver/invite/0.1/payload.js +200 -0
  71. package/dist/auth/step-up/approver/invite/0.1/payload.js.map +1 -0
  72. package/dist/auth/step-up/approver/list/0.1/payload.d.ts +477 -0
  73. package/dist/auth/step-up/approver/list/0.1/payload.d.ts.map +1 -0
  74. package/dist/auth/step-up/approver/list/0.1/payload.js +272 -0
  75. package/dist/auth/step-up/approver/list/0.1/payload.js.map +1 -0
  76. package/dist/auth/step-up/approver/redeem/finish/0.1/payload.d.ts +512 -0
  77. package/dist/auth/step-up/approver/redeem/finish/0.1/payload.d.ts.map +1 -0
  78. package/dist/auth/step-up/approver/redeem/finish/0.1/payload.js +290 -0
  79. package/dist/auth/step-up/approver/redeem/finish/0.1/payload.js.map +1 -0
  80. package/dist/auth/step-up/approver/redeem/start/0.1/payload.d.ts +343 -0
  81. package/dist/auth/step-up/approver/redeem/start/0.1/payload.d.ts.map +1 -0
  82. package/dist/auth/step-up/approver/redeem/start/0.1/payload.js +187 -0
  83. package/dist/auth/step-up/approver/redeem/start/0.1/payload.js.map +1 -0
  84. package/dist/auth/step-up/approver/revoke/0.1/payload.d.ts +534 -0
  85. package/dist/auth/step-up/approver/revoke/0.1/payload.d.ts.map +1 -0
  86. package/dist/auth/step-up/approver/revoke/0.1/payload.js +301 -0
  87. package/dist/auth/step-up/approver/revoke/0.1/payload.js.map +1 -0
  88. package/dist/git-ns/activity/list/0.1/payload.d.ts +21 -0
  89. package/dist/git-ns/activity/list/0.1/payload.d.ts.map +1 -1
  90. package/dist/git-ns/activity/list/0.1/payload.js +8 -0
  91. package/dist/git-ns/activity/list/0.1/payload.js.map +1 -1
  92. package/dist/index.d.ts +31 -0
  93. package/dist/index.d.ts.map +1 -1
  94. package/dist/index.js +31 -0
  95. package/dist/index.js.map +1 -1
  96. package/dist/task-consent/decision/0.2/payload.d.ts +775 -0
  97. package/dist/task-consent/decision/0.2/payload.d.ts.map +1 -0
  98. package/dist/task-consent/decision/0.2/payload.js +450 -0
  99. package/dist/task-consent/decision/0.2/payload.js.map +1 -0
  100. package/dist/vtc/admin/actions/_shared/0.1/action.d.ts +24 -0
  101. package/dist/vtc/admin/actions/_shared/0.1/action.d.ts.map +1 -0
  102. package/dist/vtc/admin/actions/_shared/0.1/action.js +6 -0
  103. package/dist/vtc/admin/actions/_shared/0.1/action.js.map +1 -0
  104. package/dist/vtc/admin/actions/acknowledge/0.1/payload.d.ts +1012 -0
  105. package/dist/vtc/admin/actions/acknowledge/0.1/payload.d.ts.map +1 -0
  106. package/dist/vtc/admin/actions/acknowledge/0.1/payload.js +636 -0
  107. package/dist/vtc/admin/actions/acknowledge/0.1/payload.js.map +1 -0
  108. package/dist/vtc/admin/actions/cancel/0.1/payload.d.ts +1026 -0
  109. package/dist/vtc/admin/actions/cancel/0.1/payload.d.ts.map +1 -0
  110. package/dist/vtc/admin/actions/cancel/0.1/payload.js +641 -0
  111. package/dist/vtc/admin/actions/cancel/0.1/payload.js.map +1 -0
  112. package/dist/vtc/admin/actions/list/0.1/payload.d.ts +1200 -0
  113. package/dist/vtc/admin/actions/list/0.1/payload.d.ts.map +1 -0
  114. package/dist/vtc/admin/actions/list/0.1/payload.js +726 -0
  115. package/dist/vtc/admin/actions/list/0.1/payload.js.map +1 -0
  116. package/dist/vtc/admin/actions/show/0.1/payload.d.ts +1012 -0
  117. package/dist/vtc/admin/actions/show/0.1/payload.d.ts.map +1 -0
  118. package/dist/vtc/admin/actions/show/0.1/payload.js +636 -0
  119. package/dist/vtc/admin/actions/show/0.1/payload.js.map +1 -0
  120. package/dist/vtc/install/claim/finish/0.3/payload.d.ts +379 -0
  121. package/dist/vtc/install/claim/finish/0.3/payload.d.ts.map +1 -0
  122. package/dist/vtc/install/claim/finish/0.3/payload.js +205 -0
  123. package/dist/vtc/install/claim/finish/0.3/payload.js.map +1 -0
  124. package/dist/vtc/install/claim/start/0.3/payload.d.ts +368 -0
  125. package/dist/vtc/install/claim/start/0.3/payload.d.ts.map +1 -0
  126. package/dist/vtc/install/claim/start/0.3/payload.js +201 -0
  127. package/dist/vtc/install/claim/start/0.3/payload.js.map +1 -0
  128. package/dist/vtc/members/authority-reduced-notice/0.1/payload.d.ts +208 -0
  129. package/dist/vtc/members/authority-reduced-notice/0.1/payload.d.ts.map +1 -0
  130. package/dist/vtc/members/authority-reduced-notice/0.1/payload.js +112 -0
  131. package/dist/vtc/members/authority-reduced-notice/0.1/payload.js.map +1 -0
  132. package/dist/vtc/roles/_shared/0.1/role.d.ts +16 -0
  133. package/dist/vtc/roles/_shared/0.1/role.d.ts.map +1 -0
  134. package/dist/vtc/roles/_shared/0.1/role.js +6 -0
  135. package/dist/vtc/roles/_shared/0.1/role.js.map +1 -0
  136. package/dist/vtc/roles/define/0.1/payload.d.ts +703 -0
  137. package/dist/vtc/roles/define/0.1/payload.d.ts.map +1 -0
  138. package/dist/vtc/roles/define/0.1/payload.js +371 -0
  139. package/dist/vtc/roles/define/0.1/payload.js.map +1 -0
  140. package/dist/vtc/roles/delete/0.1/payload.d.ts +281 -0
  141. package/dist/vtc/roles/delete/0.1/payload.d.ts.map +1 -0
  142. package/dist/vtc/roles/delete/0.1/payload.js +152 -0
  143. package/dist/vtc/roles/delete/0.1/payload.js.map +1 -0
  144. package/dist/vtc/roles/list/0.1/payload.d.ts +639 -0
  145. package/dist/vtc/roles/list/0.1/payload.d.ts.map +1 -0
  146. package/dist/vtc/roles/list/0.1/payload.js +345 -0
  147. package/dist/vtc/roles/list/0.1/payload.js.map +1 -0
  148. package/dist/vtc/roles/show/0.1/payload.d.ts +651 -0
  149. package/dist/vtc/roles/show/0.1/payload.d.ts.map +1 -0
  150. package/dist/vtc/roles/show/0.1/payload.js +351 -0
  151. package/dist/vtc/roles/show/0.1/payload.js.map +1 -0
  152. package/package.json +1 -1
  153. package/src/_shared/components.ts +440 -1
  154. package/src/acl/_shared/0.1/acl-entry.ts +1 -1
  155. package/src/acl/_shared/0.2/acl-entry.ts +23 -0
  156. package/src/acl/change-role/0.1/payload.ts +1 -1
  157. package/src/acl/change-role/0.2/payload.ts +1011 -0
  158. package/src/acl/grant/0.1/payload.ts +1 -1
  159. package/src/acl/grant/0.2/payload.ts +990 -0
  160. package/src/acl/list/0.1/payload.ts +1 -1
  161. package/src/acl/list/0.2/payload.ts +1125 -0
  162. package/src/acl/revoke/0.1/payload.ts +1 -1
  163. package/src/acl/revoke/0.2/payload.ts +1122 -0
  164. package/src/acl/show/0.1/payload.ts +1 -1
  165. package/src/acl/show/0.2/payload.ts +1016 -0
  166. package/src/acl/swap-key/0.1/payload.ts +1 -1
  167. package/src/acl/update/0.1/payload.ts +1 -1
  168. package/src/acl/update/0.2/payload.ts +1094 -0
  169. package/src/auth/step-up/approve-request/0.4/payload.ts +461 -0
  170. package/src/auth/step-up/approve-response/0.6/payload.ts +648 -0
  171. package/src/auth/step-up/approver/_shared/0.1/approver.ts +17 -0
  172. package/src/auth/step-up/approver/attest/0.1/payload.ts +135 -0
  173. package/src/auth/step-up/approver/enroll/0.1/payload.ts +329 -0
  174. package/src/auth/step-up/approver/invite/0.1/payload.ts +258 -0
  175. package/src/auth/step-up/approver/list/0.1/payload.ts +318 -0
  176. package/src/auth/step-up/approver/redeem/finish/0.1/payload.ts +337 -0
  177. package/src/auth/step-up/approver/redeem/start/0.1/payload.ts +241 -0
  178. package/src/auth/step-up/approver/revoke/0.1/payload.ts +352 -0
  179. package/src/git-ns/activity/list/0.1/payload.ts +14 -0
  180. package/src/index.ts +31 -0
  181. package/src/task-consent/decision/0.2/payload.ts +537 -0
  182. package/src/vtc/admin/actions/_shared/0.1/action.ts +25 -0
  183. package/src/vtc/admin/actions/acknowledge/0.1/payload.ts +671 -0
  184. package/src/vtc/admin/actions/cancel/0.1/payload.ts +680 -0
  185. package/src/vtc/admin/actions/list/0.1/payload.ts +795 -0
  186. package/src/vtc/admin/actions/show/0.1/payload.ts +671 -0
  187. package/src/vtc/install/claim/finish/0.3/payload.ts +253 -0
  188. package/src/vtc/install/claim/start/0.3/payload.ts +256 -0
  189. package/src/vtc/members/authority-reduced-notice/0.1/payload.ts +162 -0
  190. package/src/vtc/roles/_shared/0.1/role.ts +17 -0
  191. package/src/vtc/roles/define/0.1/payload.ts +435 -0
  192. package/src/vtc/roles/delete/0.1/payload.ts +200 -0
  193. package/src/vtc/roles/list/0.1/payload.ts +389 -0
  194. package/src/vtc/roles/show/0.1/payload.ts +399 -0
@@ -0,0 +1,1200 @@
1
+ /**
2
+ * Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
3
+ * Source: specs/vtc/admin/actions/list/0.1/payload.schema.json
4
+ */
5
+ import type { Action, ActionId, DigestMultibase, Ext, Field, Summary } from "../../../../../_shared/components.js";
6
+ /**
7
+ * Enumerate the administrative actions a Verifiable Trust Community holds that the caller is entitled to see, one page at a time, from one of four views. The single-record sibling is vtc/admin/actions/show/0.1. The outer document members (id, type, issuer, recipient, issuedAt, expiresAt, proof) are owned by the framework — SPEC §6.3.
8
+ */
9
+ export interface VTCAdminActionsListPayload {
10
+ /**
11
+ * `waitingForMe` — open actions on which the caller is an eligible approver or acknowledger and has not yet decided. `requestedByMe` — open actions the caller requested. `history` — closed actions the caller requested, decided, or (with the audit-read capability) any closed action, newest first. `all` — every action the caller may see, open and closed.
12
+ */
13
+ view: "waitingForMe" | "requestedByMe" | "history" | "all";
14
+ /**
15
+ * Only with `view: history`: return actions closed at or after this instant. Supplied with any other view it is refused with `invalidFilter` rather than ignored, so a caller never reads a silently unfiltered page as a filtered one.
16
+ */
17
+ since?: string;
18
+ /**
19
+ * Maximum number of actions in the page. The community MAY return fewer.
20
+ */
21
+ limit?: number;
22
+ /**
23
+ * Opaque continuation token from a previous page's `nextCursor`, valid only with the same `view` and `since` it was issued for.
24
+ */
25
+ cursor?: string;
26
+ ext?: Ext;
27
+ }
28
+ /**
29
+ * One page of actions and the caller's badge counts. Failures use trust-task-error, not this shape.
30
+ */
31
+ export interface VTCAdminActionsListResponsePayload {
32
+ /**
33
+ * The page, in the view's order: open views by `expiresAt` soonest first (non-expiring last, then by `createdAt`), `history` by `closedAt` newest first, `all` open-before-closed in those orders. An empty array is a successful answer: nothing in this view.
34
+ *
35
+ * @maxItems 100
36
+ */
37
+ actions: Action[];
38
+ /**
39
+ * Present when more actions follow. Pass it back as `cursor` with the same `view` and `since`.
40
+ */
41
+ nextCursor?: string;
42
+ /**
43
+ * Totals across the whole collection, not the page — what a console badge shows. Computed for the caller regardless of which `view` was requested.
44
+ */
45
+ counts: {
46
+ /**
47
+ * Open actions awaiting the caller's decision or acknowledgement.
48
+ */
49
+ waitingForMe: number;
50
+ /**
51
+ * Open actions the caller requested.
52
+ */
53
+ requestedByMe: number;
54
+ };
55
+ ext?: Ext;
56
+ }
57
+ /** Shared definitions this specification references, re-exported under the names it used to declare them with. */
58
+ export type { Action, ActionId, DigestMultibase, Ext, Field, Summary };
59
+ /** Trust Task type URI. */
60
+ export declare const TYPE_URI: "https://trusttasks.org/spec/vtc/admin/actions/list/0.1";
61
+ /** Stable alias for this specification's request payload shape. */
62
+ export type Payload = VTCAdminActionsListPayload;
63
+ /** Trust Task response type URI (request type URI + "#response"). */
64
+ export declare const RESPONSE_TYPE_URI: "https://trusttasks.org/spec/vtc/admin/actions/list/0.1#response";
65
+ /** Stable alias for this specification's success-response payload shape. */
66
+ export type Response = VTCAdminActionsListResponsePayload;
67
+ /**
68
+ * This specification's payload schema, as a value.
69
+ *
70
+ * SPEC.md §7.2 item 2 is performed against this. It is shipped as data
71
+ * rather than only as a `.json` file because TypeScript types are erased
72
+ * at runtime: without a schema a consumer has nothing to validate, and
73
+ * every REQUIRED payload member is optional in practice. Cross-file
74
+ * `$ref`s are already inlined, so it needs no resolver.
75
+ */
76
+ export declare const PAYLOAD_SCHEMA: {
77
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
78
+ readonly $id: "https://trusttasks.org/spec/vtc/admin/actions/list/0.1";
79
+ readonly title: "VTC Admin Actions — List — payload";
80
+ readonly description: "Enumerate the administrative actions a Verifiable Trust Community holds that the caller is entitled to see, one page at a time, from one of four views. The single-record sibling is vtc/admin/actions/show/0.1. The outer document members (id, type, issuer, recipient, issuedAt, expiresAt, proof) are owned by the framework — SPEC §6.3.";
81
+ readonly type: "object";
82
+ readonly additionalProperties: false;
83
+ readonly required: readonly ["view"];
84
+ readonly properties: {
85
+ readonly view: {
86
+ readonly type: "string";
87
+ readonly enum: readonly ["waitingForMe", "requestedByMe", "history", "all"];
88
+ readonly description: "`waitingForMe` — open actions on which the caller is an eligible approver or acknowledger and has not yet decided. `requestedByMe` — open actions the caller requested. `history` — closed actions the caller requested, decided, or (with the audit-read capability) any closed action, newest first. `all` — every action the caller may see, open and closed.";
89
+ };
90
+ readonly since: {
91
+ readonly type: "string";
92
+ readonly format: "date-time";
93
+ readonly description: "Only with `view: history`: return actions closed at or after this instant. Supplied with any other view it is refused with `invalidFilter` rather than ignored, so a caller never reads a silently unfiltered page as a filtered one.";
94
+ };
95
+ readonly limit: {
96
+ readonly type: "integer";
97
+ readonly minimum: 1;
98
+ readonly maximum: 100;
99
+ readonly default: 25;
100
+ readonly description: "Maximum number of actions in the page. The community MAY return fewer.";
101
+ };
102
+ readonly cursor: {
103
+ readonly type: "string";
104
+ readonly minLength: 1;
105
+ readonly maxLength: 1024;
106
+ readonly description: "Opaque continuation token from a previous page's `nextCursor`, valid only with the same `view` and `since` it was issued for.";
107
+ };
108
+ readonly ext: {
109
+ readonly $ref: "#/$defs/Ext";
110
+ };
111
+ };
112
+ readonly $defs: {
113
+ readonly Response: {
114
+ readonly $anchor: "response";
115
+ readonly title: "VTC Admin Actions — List — response payload";
116
+ readonly description: "One page of actions and the caller's badge counts. Failures use trust-task-error, not this shape.";
117
+ readonly type: "object";
118
+ readonly additionalProperties: false;
119
+ readonly required: readonly ["actions", "counts"];
120
+ readonly properties: {
121
+ readonly actions: {
122
+ readonly type: "array";
123
+ readonly maxItems: 100;
124
+ readonly items: {
125
+ readonly $ref: "#/$defs/Action";
126
+ };
127
+ readonly description: "The page, in the view's order: open views by `expiresAt` soonest first (non-expiring last, then by `createdAt`), `history` by `closedAt` newest first, `all` open-before-closed in those orders. An empty array is a successful answer: nothing in this view.";
128
+ };
129
+ readonly nextCursor: {
130
+ readonly type: "string";
131
+ readonly minLength: 1;
132
+ readonly maxLength: 1024;
133
+ readonly description: "Present when more actions follow. Pass it back as `cursor` with the same `view` and `since`.";
134
+ };
135
+ readonly counts: {
136
+ readonly type: "object";
137
+ readonly additionalProperties: false;
138
+ readonly required: readonly ["waitingForMe", "requestedByMe"];
139
+ readonly description: "Totals across the whole collection, not the page — what a console badge shows. Computed for the caller regardless of which `view` was requested.";
140
+ readonly properties: {
141
+ readonly waitingForMe: {
142
+ readonly type: "integer";
143
+ readonly minimum: 0;
144
+ readonly description: "Open actions awaiting the caller's decision or acknowledgement.";
145
+ };
146
+ readonly requestedByMe: {
147
+ readonly type: "integer";
148
+ readonly minimum: 0;
149
+ readonly description: "Open actions the caller requested.";
150
+ };
151
+ };
152
+ };
153
+ readonly ext: {
154
+ readonly $ref: "#/$defs/Ext";
155
+ };
156
+ };
157
+ };
158
+ readonly Ext: {
159
+ readonly title: "Ext";
160
+ 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.";
161
+ readonly type: "object";
162
+ readonly minProperties: 1;
163
+ readonly additionalProperties: true;
164
+ readonly propertyNames: {
165
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
166
+ };
167
+ };
168
+ readonly Action: {
169
+ readonly title: "Action";
170
+ readonly description: "One parked administrative operation, as the caller is entitled to see it. The same action reads differently to different callers only in `challenge` and `callerRole`, which are per-caller.";
171
+ readonly type: "object";
172
+ readonly additionalProperties: false;
173
+ readonly required: readonly ["actionId", "category", "kind", "typeUri", "requester", "status", "createdAt", "approvals", "summary", "payload", "payloadDigest", "callerRole"];
174
+ readonly properties: {
175
+ readonly actionId: {
176
+ readonly $ref: "#/$defs/ActionId";
177
+ };
178
+ readonly category: {
179
+ readonly type: "string";
180
+ readonly enum: readonly ["approval", "acknowledge", "queue"];
181
+ readonly description: "`approval` — eligible approvers approve or decline, N-of-M; the operation executes when the threshold is met. `acknowledge` — an operation that already happened (an operator's offline or break-glass write) which every remaining administrator must acknowledge; there is nothing to approve or decline. `queue` — an existing human decision (for example a join review) surfaced in the same list, with a threshold of one.";
182
+ };
183
+ readonly kind: {
184
+ readonly type: "string";
185
+ readonly minLength: 1;
186
+ readonly maxLength: 128;
187
+ readonly pattern: "^[a-z][a-zA-Z0-9.]*$";
188
+ readonly description: "The community's name for what kind of operation is parked, dotted and lowerCamelCase (`acl.grant.authority`, `member.join.review`). Selects the summary template. The set is OPEN: a renderer that does not recognise a kind still renders `summary` from its fields.";
189
+ };
190
+ readonly typeUri: {
191
+ readonly type: "string";
192
+ readonly format: "uri";
193
+ readonly minLength: 1;
194
+ readonly description: "The Type URI of the parked operation — the Trust Task the community will execute when the action completes. Together with `payload` it is exactly what will run.";
195
+ };
196
+ readonly requester: {
197
+ readonly type: "string";
198
+ readonly minLength: 1;
199
+ readonly maxLength: 2048;
200
+ readonly description: "VID of the party whose operation was parked. For `acknowledge`, the operator whose offline write is being acknowledged, where the community can attribute one.";
201
+ };
202
+ readonly status: {
203
+ readonly type: "string";
204
+ readonly enum: readonly ["open", "completed", "declined", "expired", "cancelled", "failed"];
205
+ readonly description: "`open` — awaiting decisions. `completed` — the threshold was met and the operation executed (or, for `acknowledge`, every administrator acknowledged). `declined` — an eligible approver denied it. `expired` — it lapsed at `expiresAt`. `cancelled` — the requester withdrew it, or the community invalidated it (see `closedReason`). `failed` — the threshold was met but the re-check at execution refused it, or execution itself failed; the operation did not take effect.";
206
+ };
207
+ readonly createdAt: {
208
+ readonly type: "string";
209
+ readonly format: "date-time";
210
+ readonly description: "When the operation was parked.";
211
+ };
212
+ readonly expiresAt: {
213
+ readonly type: "string";
214
+ readonly format: "date-time";
215
+ readonly description: "When an open action lapses. Absent for an `acknowledge` or `queue` action that does not expire; ALWAYS present for `approval`, whose open life is bounded (72 hours by default; the community configures it between 15 minutes and 14 days).";
216
+ };
217
+ readonly closedAt: {
218
+ readonly type: "string";
219
+ readonly format: "date-time";
220
+ readonly description: "When the action left `open`. Present exactly when `status` is not `open`.";
221
+ };
222
+ readonly closedReason: {
223
+ readonly type: "string";
224
+ readonly enum: readonly ["thresholdMet", "declined", "expired", "cancelledByRequester", "invalidated", "failedRecheck", "acknowledged"];
225
+ readonly description: "Why the action closed. Present exactly when `status` is not `open`. `invalidated` — the community closed it because something it depended on stopped holding before the threshold (an approver or the requester lost standing, the target state moved); `failedRecheck` — the threshold was met but the execution-time re-check refused.";
226
+ };
227
+ readonly threshold: {
228
+ readonly type: "integer";
229
+ readonly minimum: 1;
230
+ readonly description: "The number of distinct approvals the operation needs. Present for `approval`; absent otherwise (a `queue` decision is one decision by construction, and `acknowledge` needs every remaining administrator).";
231
+ };
232
+ readonly approvals: {
233
+ readonly type: "array";
234
+ readonly description: "The decisions in favour recorded so far — approvals for `approval` and `queue`, acknowledgements for `acknowledge` — one entry per distinct subject, in the order recorded. Empty while none has landed.";
235
+ readonly items: {
236
+ readonly type: "object";
237
+ readonly additionalProperties: false;
238
+ readonly required: readonly ["subject", "at"];
239
+ readonly properties: {
240
+ readonly subject: {
241
+ readonly type: "string";
242
+ readonly minLength: 1;
243
+ readonly maxLength: 2048;
244
+ readonly description: "VID of the approver or acknowledger, as proven by the decision's own proof.";
245
+ };
246
+ readonly at: {
247
+ readonly type: "string";
248
+ readonly format: "date-time";
249
+ readonly description: "When the decision was recorded.";
250
+ };
251
+ };
252
+ };
253
+ };
254
+ readonly approversRemaining: {
255
+ readonly type: "integer";
256
+ readonly minimum: 0;
257
+ readonly description: "How many further distinct decisions the action needs while `open` — approvals for `approval`, acknowledgements for `acknowledge`. Lets a console say 'one more' without disclosing the eligible set.";
258
+ };
259
+ readonly summary: {
260
+ readonly $ref: "#/$defs/Summary";
261
+ };
262
+ readonly payload: {
263
+ readonly type: "object";
264
+ readonly description: "The exact payload of the parked operation — the object `payloadDigest` is computed over and the one the community will execute. Carried so an approver can recompute the digest and re-derive every summary field from it rather than trusting the rendering (VTI-APV-013). Deliberately an open object: its shape is governed by the specification `typeUri` names, and a digest is checked over members exactly as received.";
265
+ };
266
+ readonly payloadDigest: {
267
+ readonly $ref: "#/$defs/DigestMultibase";
268
+ readonly description: "Digest of `payload`, taken over its RFC 8785 (JCS) canonicalization. The community re-derives it from the payload it is about to execute and refuses on mismatch. The digest an approver signs over is the challenge-salted one of `task-consent/decision`, not this value; this one lets the approver check that `payload` is what was parked.";
269
+ };
270
+ readonly challenge: {
271
+ readonly type: "string";
272
+ readonly minLength: 16;
273
+ readonly maxLength: 256;
274
+ readonly description: "Present ONLY on an action the CALLER may decide now — an `approval` or `queue` action on which the caller is an eligible approver who has not yet decided. Per-approver: two approvers are shown different challenges for the same action. Echoed verbatim in `task-consent/decision`'s `challenge`, which binds that decision to this approver and this action. Absent for everyone else, including the requester.";
275
+ };
276
+ readonly callerRole: {
277
+ readonly type: "string";
278
+ readonly enum: readonly ["approver", "requester", "acknowledger", "observer"];
279
+ readonly description: "The caller's relation to this action. `approver` — an eligible approver (whether or not already decided). `requester` — the party whose operation was parked. `acknowledger` — an administrator expected to acknowledge it. `observer` — none of these; seen only through the audit-read capability on a `history` or `all` view.";
280
+ };
281
+ readonly requesterOpenActions: {
282
+ readonly type: "integer";
283
+ readonly minimum: 0;
284
+ readonly description: "How many open actions the requester currently has at the community, this one included. For consent-fatigue display: an approver shown the twentieth request from one requester today should be able to see that it is the twentieth.";
285
+ };
286
+ readonly ext: {
287
+ readonly $ref: "#/$defs/Ext";
288
+ };
289
+ };
290
+ };
291
+ readonly Summary: {
292
+ readonly title: "Summary";
293
+ readonly description: "What an approver is shown, rendered from the summary template for the action's `kind`. Title and effect are the template's prose; the fields are the payload values that prose is about, each located by pointer so a renderer can verify it.";
294
+ readonly type: "object";
295
+ readonly additionalProperties: false;
296
+ readonly required: readonly ["title", "fields", "templateDigest"];
297
+ readonly properties: {
298
+ readonly title: {
299
+ readonly type: "string";
300
+ readonly minLength: 1;
301
+ readonly maxLength: 256;
302
+ readonly description: "One-line heading from the template. Prose only: a renderer MUST NOT present the action from this text without the fields.";
303
+ };
304
+ readonly effect: {
305
+ readonly type: "string";
306
+ readonly maxLength: 1024;
307
+ readonly description: "One or two sentences from the template saying what executing the operation will do.";
308
+ };
309
+ readonly fields: {
310
+ readonly type: "object";
311
+ readonly description: "Named values the template displays, keyed by a lowerCamelCase field name. Each locates its value in `payload` by JSON Pointer.";
312
+ readonly propertyNames: {
313
+ readonly pattern: "^[a-z][a-zA-Z0-9]*$";
314
+ readonly maxLength: 64;
315
+ };
316
+ readonly additionalProperties: {
317
+ readonly $ref: "#/$defs/Field";
318
+ };
319
+ };
320
+ readonly templateDigest: {
321
+ readonly $ref: "#/$defs/DigestMultibase";
322
+ readonly description: "Digest of the summary template this summary was rendered from, over its RFC 8785 (JCS) canonicalization. Pinned per `kind`: a renderer that holds the template for a kind refuses a summary naming a different digest, so the community cannot change what approvers are shown for a kind without that change being visible.";
323
+ };
324
+ };
325
+ };
326
+ readonly Field: {
327
+ readonly title: "Field";
328
+ readonly description: "One displayed value, with where it comes from and how to render it.";
329
+ readonly type: "object";
330
+ readonly additionalProperties: false;
331
+ readonly required: readonly ["pointer", "format", "value"];
332
+ readonly properties: {
333
+ readonly pointer: {
334
+ readonly type: "string";
335
+ readonly maxLength: 512;
336
+ readonly pattern: "^(/([^~/]|~[01])*)*$";
337
+ readonly description: "RFC 6901 JSON Pointer into the action's `payload`. The empty string addresses the whole payload.";
338
+ };
339
+ readonly format: {
340
+ readonly type: "string";
341
+ readonly enum: readonly ["did", "capabilityList", "duration", "datetime", "text"];
342
+ readonly description: "How to render the value. `did` — a DID, shown in full or with a verified display name, never truncated to a prefix that two DIDs share. `capabilityList` — an array of capability names. `duration` — an ISO 8601 duration. `datetime` — an RFC 3339 date-time. `text` — anything else, rendered as literal text.";
343
+ };
344
+ readonly value: {
345
+ readonly description: "The value found at `pointer` when the community rendered the summary. A renderer re-derives it from `payload` and refuses to render the action on any mismatch; it is carried so that a mismatch is detectable, not so that it can be trusted.";
346
+ };
347
+ };
348
+ };
349
+ readonly DigestMultibase: {
350
+ readonly title: "DigestMultibase";
351
+ readonly description: "A cryptographic digest as a multibase-encoded multihash — the encoding the W3C Verifiable Credentials Data Model 2.0 defines for `digestMultibase`, and the one `did:webvh` uses for its SCID and entry hashes.\n\nMultihash carries the hash algorithm in-band, so the value is self-describing and the wire format survives an algorithm change without a schema revision; multibase does the same for the base encoding, so a verifier never infers base58 from base64url by context. A bare hex string or a `sha-256:`-style prefix hard-codes one algorithm into the wire contract and is non-conforming here.\n\nThis definition constrains the *encoding only*. What the digest is computed over is stated by each referencing field, because it differs legitimately: a digest over a JSON document is taken over its RFC 8785 (JCS) canonicalization, while a digest over an opaque artifact is taken over its bytes. A field whose input is a JSON document and which does not name a canonicalization is not reproducible.\n\nRestricted to the two multibase headers W3C Controlled Identifiers 1.0 §2.4 normatively requires — `z` (base58btc) and `u` (base64url-no-pad). CID permits others but states that \"interoperability is not guaranteed between implementations using such values\", and a registry whose purpose is interoperability should not mint digests a conforming verifier may be unable to read. The alphabets are enforced rather than assumed: base58btc excludes 0, O, I and l, and an earlier permissive pattern let three published examples carry digests that were not valid base58 at all. base58btc is RECOMMENDED, for consistency with `did:key` and `did:webvh`.";
352
+ readonly type: "string";
353
+ readonly minLength: 16;
354
+ readonly pattern: "^(z[1-9A-HJ-NP-Za-km-z]+|u[A-Za-z0-9_-]+)$";
355
+ readonly examples: readonly ["zQmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR"];
356
+ };
357
+ readonly ActionId: {
358
+ readonly title: "ActionId";
359
+ readonly description: "Opaque, community-minted identifier of one action. A consumer MUST NOT parse or order it; it is compared for equality only. Long enough to be unguessable, because a show of an id the caller may not see is answered `notFound` and an enumerable id would turn that answer into an oracle.";
360
+ readonly type: "string";
361
+ readonly minLength: 16;
362
+ readonly maxLength: 128;
363
+ readonly pattern: "^[A-Za-z0-9._~:-]+$";
364
+ };
365
+ };
366
+ };
367
+ /** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
368
+ export declare const RESPONSE_PAYLOAD_SCHEMA: {
369
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
370
+ readonly $ref: "#/$defs/Response";
371
+ readonly $defs: {
372
+ readonly Response: {
373
+ readonly $anchor: "response";
374
+ readonly title: "VTC Admin Actions — List — response payload";
375
+ readonly description: "One page of actions and the caller's badge counts. Failures use trust-task-error, not this shape.";
376
+ readonly type: "object";
377
+ readonly additionalProperties: false;
378
+ readonly required: readonly ["actions", "counts"];
379
+ readonly properties: {
380
+ readonly actions: {
381
+ readonly type: "array";
382
+ readonly maxItems: 100;
383
+ readonly items: {
384
+ readonly $ref: "#/$defs/Action";
385
+ };
386
+ readonly description: "The page, in the view's order: open views by `expiresAt` soonest first (non-expiring last, then by `createdAt`), `history` by `closedAt` newest first, `all` open-before-closed in those orders. An empty array is a successful answer: nothing in this view.";
387
+ };
388
+ readonly nextCursor: {
389
+ readonly type: "string";
390
+ readonly minLength: 1;
391
+ readonly maxLength: 1024;
392
+ readonly description: "Present when more actions follow. Pass it back as `cursor` with the same `view` and `since`.";
393
+ };
394
+ readonly counts: {
395
+ readonly type: "object";
396
+ readonly additionalProperties: false;
397
+ readonly required: readonly ["waitingForMe", "requestedByMe"];
398
+ readonly description: "Totals across the whole collection, not the page — what a console badge shows. Computed for the caller regardless of which `view` was requested.";
399
+ readonly properties: {
400
+ readonly waitingForMe: {
401
+ readonly type: "integer";
402
+ readonly minimum: 0;
403
+ readonly description: "Open actions awaiting the caller's decision or acknowledgement.";
404
+ };
405
+ readonly requestedByMe: {
406
+ readonly type: "integer";
407
+ readonly minimum: 0;
408
+ readonly description: "Open actions the caller requested.";
409
+ };
410
+ };
411
+ };
412
+ readonly ext: {
413
+ readonly $ref: "#/$defs/Ext";
414
+ };
415
+ };
416
+ };
417
+ readonly Ext: {
418
+ readonly title: "Ext";
419
+ 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.";
420
+ readonly type: "object";
421
+ readonly minProperties: 1;
422
+ readonly additionalProperties: true;
423
+ readonly propertyNames: {
424
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
425
+ };
426
+ };
427
+ readonly Action: {
428
+ readonly title: "Action";
429
+ readonly description: "One parked administrative operation, as the caller is entitled to see it. The same action reads differently to different callers only in `challenge` and `callerRole`, which are per-caller.";
430
+ readonly type: "object";
431
+ readonly additionalProperties: false;
432
+ readonly required: readonly ["actionId", "category", "kind", "typeUri", "requester", "status", "createdAt", "approvals", "summary", "payload", "payloadDigest", "callerRole"];
433
+ readonly properties: {
434
+ readonly actionId: {
435
+ readonly $ref: "#/$defs/ActionId";
436
+ };
437
+ readonly category: {
438
+ readonly type: "string";
439
+ readonly enum: readonly ["approval", "acknowledge", "queue"];
440
+ readonly description: "`approval` — eligible approvers approve or decline, N-of-M; the operation executes when the threshold is met. `acknowledge` — an operation that already happened (an operator's offline or break-glass write) which every remaining administrator must acknowledge; there is nothing to approve or decline. `queue` — an existing human decision (for example a join review) surfaced in the same list, with a threshold of one.";
441
+ };
442
+ readonly kind: {
443
+ readonly type: "string";
444
+ readonly minLength: 1;
445
+ readonly maxLength: 128;
446
+ readonly pattern: "^[a-z][a-zA-Z0-9.]*$";
447
+ readonly description: "The community's name for what kind of operation is parked, dotted and lowerCamelCase (`acl.grant.authority`, `member.join.review`). Selects the summary template. The set is OPEN: a renderer that does not recognise a kind still renders `summary` from its fields.";
448
+ };
449
+ readonly typeUri: {
450
+ readonly type: "string";
451
+ readonly format: "uri";
452
+ readonly minLength: 1;
453
+ readonly description: "The Type URI of the parked operation — the Trust Task the community will execute when the action completes. Together with `payload` it is exactly what will run.";
454
+ };
455
+ readonly requester: {
456
+ readonly type: "string";
457
+ readonly minLength: 1;
458
+ readonly maxLength: 2048;
459
+ readonly description: "VID of the party whose operation was parked. For `acknowledge`, the operator whose offline write is being acknowledged, where the community can attribute one.";
460
+ };
461
+ readonly status: {
462
+ readonly type: "string";
463
+ readonly enum: readonly ["open", "completed", "declined", "expired", "cancelled", "failed"];
464
+ readonly description: "`open` — awaiting decisions. `completed` — the threshold was met and the operation executed (or, for `acknowledge`, every administrator acknowledged). `declined` — an eligible approver denied it. `expired` — it lapsed at `expiresAt`. `cancelled` — the requester withdrew it, or the community invalidated it (see `closedReason`). `failed` — the threshold was met but the re-check at execution refused it, or execution itself failed; the operation did not take effect.";
465
+ };
466
+ readonly createdAt: {
467
+ readonly type: "string";
468
+ readonly format: "date-time";
469
+ readonly description: "When the operation was parked.";
470
+ };
471
+ readonly expiresAt: {
472
+ readonly type: "string";
473
+ readonly format: "date-time";
474
+ readonly description: "When an open action lapses. Absent for an `acknowledge` or `queue` action that does not expire; ALWAYS present for `approval`, whose open life is bounded (72 hours by default; the community configures it between 15 minutes and 14 days).";
475
+ };
476
+ readonly closedAt: {
477
+ readonly type: "string";
478
+ readonly format: "date-time";
479
+ readonly description: "When the action left `open`. Present exactly when `status` is not `open`.";
480
+ };
481
+ readonly closedReason: {
482
+ readonly type: "string";
483
+ readonly enum: readonly ["thresholdMet", "declined", "expired", "cancelledByRequester", "invalidated", "failedRecheck", "acknowledged"];
484
+ readonly description: "Why the action closed. Present exactly when `status` is not `open`. `invalidated` — the community closed it because something it depended on stopped holding before the threshold (an approver or the requester lost standing, the target state moved); `failedRecheck` — the threshold was met but the execution-time re-check refused.";
485
+ };
486
+ readonly threshold: {
487
+ readonly type: "integer";
488
+ readonly minimum: 1;
489
+ readonly description: "The number of distinct approvals the operation needs. Present for `approval`; absent otherwise (a `queue` decision is one decision by construction, and `acknowledge` needs every remaining administrator).";
490
+ };
491
+ readonly approvals: {
492
+ readonly type: "array";
493
+ readonly description: "The decisions in favour recorded so far — approvals for `approval` and `queue`, acknowledgements for `acknowledge` — one entry per distinct subject, in the order recorded. Empty while none has landed.";
494
+ readonly items: {
495
+ readonly type: "object";
496
+ readonly additionalProperties: false;
497
+ readonly required: readonly ["subject", "at"];
498
+ readonly properties: {
499
+ readonly subject: {
500
+ readonly type: "string";
501
+ readonly minLength: 1;
502
+ readonly maxLength: 2048;
503
+ readonly description: "VID of the approver or acknowledger, as proven by the decision's own proof.";
504
+ };
505
+ readonly at: {
506
+ readonly type: "string";
507
+ readonly format: "date-time";
508
+ readonly description: "When the decision was recorded.";
509
+ };
510
+ };
511
+ };
512
+ };
513
+ readonly approversRemaining: {
514
+ readonly type: "integer";
515
+ readonly minimum: 0;
516
+ readonly description: "How many further distinct decisions the action needs while `open` — approvals for `approval`, acknowledgements for `acknowledge`. Lets a console say 'one more' without disclosing the eligible set.";
517
+ };
518
+ readonly summary: {
519
+ readonly $ref: "#/$defs/Summary";
520
+ };
521
+ readonly payload: {
522
+ readonly type: "object";
523
+ readonly description: "The exact payload of the parked operation — the object `payloadDigest` is computed over and the one the community will execute. Carried so an approver can recompute the digest and re-derive every summary field from it rather than trusting the rendering (VTI-APV-013). Deliberately an open object: its shape is governed by the specification `typeUri` names, and a digest is checked over members exactly as received.";
524
+ };
525
+ readonly payloadDigest: {
526
+ readonly $ref: "#/$defs/DigestMultibase";
527
+ readonly description: "Digest of `payload`, taken over its RFC 8785 (JCS) canonicalization. The community re-derives it from the payload it is about to execute and refuses on mismatch. The digest an approver signs over is the challenge-salted one of `task-consent/decision`, not this value; this one lets the approver check that `payload` is what was parked.";
528
+ };
529
+ readonly challenge: {
530
+ readonly type: "string";
531
+ readonly minLength: 16;
532
+ readonly maxLength: 256;
533
+ readonly description: "Present ONLY on an action the CALLER may decide now — an `approval` or `queue` action on which the caller is an eligible approver who has not yet decided. Per-approver: two approvers are shown different challenges for the same action. Echoed verbatim in `task-consent/decision`'s `challenge`, which binds that decision to this approver and this action. Absent for everyone else, including the requester.";
534
+ };
535
+ readonly callerRole: {
536
+ readonly type: "string";
537
+ readonly enum: readonly ["approver", "requester", "acknowledger", "observer"];
538
+ readonly description: "The caller's relation to this action. `approver` — an eligible approver (whether or not already decided). `requester` — the party whose operation was parked. `acknowledger` — an administrator expected to acknowledge it. `observer` — none of these; seen only through the audit-read capability on a `history` or `all` view.";
539
+ };
540
+ readonly requesterOpenActions: {
541
+ readonly type: "integer";
542
+ readonly minimum: 0;
543
+ readonly description: "How many open actions the requester currently has at the community, this one included. For consent-fatigue display: an approver shown the twentieth request from one requester today should be able to see that it is the twentieth.";
544
+ };
545
+ readonly ext: {
546
+ readonly $ref: "#/$defs/Ext";
547
+ };
548
+ };
549
+ };
550
+ readonly Summary: {
551
+ readonly title: "Summary";
552
+ readonly description: "What an approver is shown, rendered from the summary template for the action's `kind`. Title and effect are the template's prose; the fields are the payload values that prose is about, each located by pointer so a renderer can verify it.";
553
+ readonly type: "object";
554
+ readonly additionalProperties: false;
555
+ readonly required: readonly ["title", "fields", "templateDigest"];
556
+ readonly properties: {
557
+ readonly title: {
558
+ readonly type: "string";
559
+ readonly minLength: 1;
560
+ readonly maxLength: 256;
561
+ readonly description: "One-line heading from the template. Prose only: a renderer MUST NOT present the action from this text without the fields.";
562
+ };
563
+ readonly effect: {
564
+ readonly type: "string";
565
+ readonly maxLength: 1024;
566
+ readonly description: "One or two sentences from the template saying what executing the operation will do.";
567
+ };
568
+ readonly fields: {
569
+ readonly type: "object";
570
+ readonly description: "Named values the template displays, keyed by a lowerCamelCase field name. Each locates its value in `payload` by JSON Pointer.";
571
+ readonly propertyNames: {
572
+ readonly pattern: "^[a-z][a-zA-Z0-9]*$";
573
+ readonly maxLength: 64;
574
+ };
575
+ readonly additionalProperties: {
576
+ readonly $ref: "#/$defs/Field";
577
+ };
578
+ };
579
+ readonly templateDigest: {
580
+ readonly $ref: "#/$defs/DigestMultibase";
581
+ readonly description: "Digest of the summary template this summary was rendered from, over its RFC 8785 (JCS) canonicalization. Pinned per `kind`: a renderer that holds the template for a kind refuses a summary naming a different digest, so the community cannot change what approvers are shown for a kind without that change being visible.";
582
+ };
583
+ };
584
+ };
585
+ readonly Field: {
586
+ readonly title: "Field";
587
+ readonly description: "One displayed value, with where it comes from and how to render it.";
588
+ readonly type: "object";
589
+ readonly additionalProperties: false;
590
+ readonly required: readonly ["pointer", "format", "value"];
591
+ readonly properties: {
592
+ readonly pointer: {
593
+ readonly type: "string";
594
+ readonly maxLength: 512;
595
+ readonly pattern: "^(/([^~/]|~[01])*)*$";
596
+ readonly description: "RFC 6901 JSON Pointer into the action's `payload`. The empty string addresses the whole payload.";
597
+ };
598
+ readonly format: {
599
+ readonly type: "string";
600
+ readonly enum: readonly ["did", "capabilityList", "duration", "datetime", "text"];
601
+ readonly description: "How to render the value. `did` — a DID, shown in full or with a verified display name, never truncated to a prefix that two DIDs share. `capabilityList` — an array of capability names. `duration` — an ISO 8601 duration. `datetime` — an RFC 3339 date-time. `text` — anything else, rendered as literal text.";
602
+ };
603
+ readonly value: {
604
+ readonly description: "The value found at `pointer` when the community rendered the summary. A renderer re-derives it from `payload` and refuses to render the action on any mismatch; it is carried so that a mismatch is detectable, not so that it can be trusted.";
605
+ };
606
+ };
607
+ };
608
+ readonly DigestMultibase: {
609
+ readonly title: "DigestMultibase";
610
+ readonly description: "A cryptographic digest as a multibase-encoded multihash — the encoding the W3C Verifiable Credentials Data Model 2.0 defines for `digestMultibase`, and the one `did:webvh` uses for its SCID and entry hashes.\n\nMultihash carries the hash algorithm in-band, so the value is self-describing and the wire format survives an algorithm change without a schema revision; multibase does the same for the base encoding, so a verifier never infers base58 from base64url by context. A bare hex string or a `sha-256:`-style prefix hard-codes one algorithm into the wire contract and is non-conforming here.\n\nThis definition constrains the *encoding only*. What the digest is computed over is stated by each referencing field, because it differs legitimately: a digest over a JSON document is taken over its RFC 8785 (JCS) canonicalization, while a digest over an opaque artifact is taken over its bytes. A field whose input is a JSON document and which does not name a canonicalization is not reproducible.\n\nRestricted to the two multibase headers W3C Controlled Identifiers 1.0 §2.4 normatively requires — `z` (base58btc) and `u` (base64url-no-pad). CID permits others but states that \"interoperability is not guaranteed between implementations using such values\", and a registry whose purpose is interoperability should not mint digests a conforming verifier may be unable to read. The alphabets are enforced rather than assumed: base58btc excludes 0, O, I and l, and an earlier permissive pattern let three published examples carry digests that were not valid base58 at all. base58btc is RECOMMENDED, for consistency with `did:key` and `did:webvh`.";
611
+ readonly type: "string";
612
+ readonly minLength: 16;
613
+ readonly pattern: "^(z[1-9A-HJ-NP-Za-km-z]+|u[A-Za-z0-9_-]+)$";
614
+ readonly examples: readonly ["zQmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR"];
615
+ };
616
+ readonly ActionId: {
617
+ readonly title: "ActionId";
618
+ readonly description: "Opaque, community-minted identifier of one action. A consumer MUST NOT parse or order it; it is compared for equality only. Long enough to be unguessable, because a show of an id the caller may not see is answered `notFound` and an enumerable id would turn that answer into an oracle.";
619
+ readonly type: "string";
620
+ readonly minLength: 16;
621
+ readonly maxLength: 128;
622
+ readonly pattern: "^[A-Za-z0-9._~:-]+$";
623
+ };
624
+ };
625
+ };
626
+ /**
627
+ * SPEC.md §7.2 policy for the request variant, from this specification's
628
+ * front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
629
+ * per-specification and cannot be derived from the document alone, and
630
+ * item 2 needs the schema this carries.
631
+ */
632
+ export declare const SPEC: {
633
+ readonly typeUri: "https://trusttasks.org/spec/vtc/admin/actions/list/0.1";
634
+ readonly isBearer: false;
635
+ readonly isProofRequired: true;
636
+ readonly isRecipientRequired: true;
637
+ readonly isIssuedAtRequired: false;
638
+ readonly payloadSchema: {
639
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
640
+ readonly $id: "https://trusttasks.org/spec/vtc/admin/actions/list/0.1";
641
+ readonly title: "VTC Admin Actions — List — payload";
642
+ readonly description: "Enumerate the administrative actions a Verifiable Trust Community holds that the caller is entitled to see, one page at a time, from one of four views. The single-record sibling is vtc/admin/actions/show/0.1. The outer document members (id, type, issuer, recipient, issuedAt, expiresAt, proof) are owned by the framework — SPEC §6.3.";
643
+ readonly type: "object";
644
+ readonly additionalProperties: false;
645
+ readonly required: readonly ["view"];
646
+ readonly properties: {
647
+ readonly view: {
648
+ readonly type: "string";
649
+ readonly enum: readonly ["waitingForMe", "requestedByMe", "history", "all"];
650
+ readonly description: "`waitingForMe` — open actions on which the caller is an eligible approver or acknowledger and has not yet decided. `requestedByMe` — open actions the caller requested. `history` — closed actions the caller requested, decided, or (with the audit-read capability) any closed action, newest first. `all` — every action the caller may see, open and closed.";
651
+ };
652
+ readonly since: {
653
+ readonly type: "string";
654
+ readonly format: "date-time";
655
+ readonly description: "Only with `view: history`: return actions closed at or after this instant. Supplied with any other view it is refused with `invalidFilter` rather than ignored, so a caller never reads a silently unfiltered page as a filtered one.";
656
+ };
657
+ readonly limit: {
658
+ readonly type: "integer";
659
+ readonly minimum: 1;
660
+ readonly maximum: 100;
661
+ readonly default: 25;
662
+ readonly description: "Maximum number of actions in the page. The community MAY return fewer.";
663
+ };
664
+ readonly cursor: {
665
+ readonly type: "string";
666
+ readonly minLength: 1;
667
+ readonly maxLength: 1024;
668
+ readonly description: "Opaque continuation token from a previous page's `nextCursor`, valid only with the same `view` and `since` it was issued for.";
669
+ };
670
+ readonly ext: {
671
+ readonly $ref: "#/$defs/Ext";
672
+ };
673
+ };
674
+ readonly $defs: {
675
+ readonly Response: {
676
+ readonly $anchor: "response";
677
+ readonly title: "VTC Admin Actions — List — response payload";
678
+ readonly description: "One page of actions and the caller's badge counts. Failures use trust-task-error, not this shape.";
679
+ readonly type: "object";
680
+ readonly additionalProperties: false;
681
+ readonly required: readonly ["actions", "counts"];
682
+ readonly properties: {
683
+ readonly actions: {
684
+ readonly type: "array";
685
+ readonly maxItems: 100;
686
+ readonly items: {
687
+ readonly $ref: "#/$defs/Action";
688
+ };
689
+ readonly description: "The page, in the view's order: open views by `expiresAt` soonest first (non-expiring last, then by `createdAt`), `history` by `closedAt` newest first, `all` open-before-closed in those orders. An empty array is a successful answer: nothing in this view.";
690
+ };
691
+ readonly nextCursor: {
692
+ readonly type: "string";
693
+ readonly minLength: 1;
694
+ readonly maxLength: 1024;
695
+ readonly description: "Present when more actions follow. Pass it back as `cursor` with the same `view` and `since`.";
696
+ };
697
+ readonly counts: {
698
+ readonly type: "object";
699
+ readonly additionalProperties: false;
700
+ readonly required: readonly ["waitingForMe", "requestedByMe"];
701
+ readonly description: "Totals across the whole collection, not the page — what a console badge shows. Computed for the caller regardless of which `view` was requested.";
702
+ readonly properties: {
703
+ readonly waitingForMe: {
704
+ readonly type: "integer";
705
+ readonly minimum: 0;
706
+ readonly description: "Open actions awaiting the caller's decision or acknowledgement.";
707
+ };
708
+ readonly requestedByMe: {
709
+ readonly type: "integer";
710
+ readonly minimum: 0;
711
+ readonly description: "Open actions the caller requested.";
712
+ };
713
+ };
714
+ };
715
+ readonly ext: {
716
+ readonly $ref: "#/$defs/Ext";
717
+ };
718
+ };
719
+ };
720
+ readonly Ext: {
721
+ readonly title: "Ext";
722
+ 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.";
723
+ readonly type: "object";
724
+ readonly minProperties: 1;
725
+ readonly additionalProperties: true;
726
+ readonly propertyNames: {
727
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
728
+ };
729
+ };
730
+ readonly Action: {
731
+ readonly title: "Action";
732
+ readonly description: "One parked administrative operation, as the caller is entitled to see it. The same action reads differently to different callers only in `challenge` and `callerRole`, which are per-caller.";
733
+ readonly type: "object";
734
+ readonly additionalProperties: false;
735
+ readonly required: readonly ["actionId", "category", "kind", "typeUri", "requester", "status", "createdAt", "approvals", "summary", "payload", "payloadDigest", "callerRole"];
736
+ readonly properties: {
737
+ readonly actionId: {
738
+ readonly $ref: "#/$defs/ActionId";
739
+ };
740
+ readonly category: {
741
+ readonly type: "string";
742
+ readonly enum: readonly ["approval", "acknowledge", "queue"];
743
+ readonly description: "`approval` — eligible approvers approve or decline, N-of-M; the operation executes when the threshold is met. `acknowledge` — an operation that already happened (an operator's offline or break-glass write) which every remaining administrator must acknowledge; there is nothing to approve or decline. `queue` — an existing human decision (for example a join review) surfaced in the same list, with a threshold of one.";
744
+ };
745
+ readonly kind: {
746
+ readonly type: "string";
747
+ readonly minLength: 1;
748
+ readonly maxLength: 128;
749
+ readonly pattern: "^[a-z][a-zA-Z0-9.]*$";
750
+ readonly description: "The community's name for what kind of operation is parked, dotted and lowerCamelCase (`acl.grant.authority`, `member.join.review`). Selects the summary template. The set is OPEN: a renderer that does not recognise a kind still renders `summary` from its fields.";
751
+ };
752
+ readonly typeUri: {
753
+ readonly type: "string";
754
+ readonly format: "uri";
755
+ readonly minLength: 1;
756
+ readonly description: "The Type URI of the parked operation — the Trust Task the community will execute when the action completes. Together with `payload` it is exactly what will run.";
757
+ };
758
+ readonly requester: {
759
+ readonly type: "string";
760
+ readonly minLength: 1;
761
+ readonly maxLength: 2048;
762
+ readonly description: "VID of the party whose operation was parked. For `acknowledge`, the operator whose offline write is being acknowledged, where the community can attribute one.";
763
+ };
764
+ readonly status: {
765
+ readonly type: "string";
766
+ readonly enum: readonly ["open", "completed", "declined", "expired", "cancelled", "failed"];
767
+ readonly description: "`open` — awaiting decisions. `completed` — the threshold was met and the operation executed (or, for `acknowledge`, every administrator acknowledged). `declined` — an eligible approver denied it. `expired` — it lapsed at `expiresAt`. `cancelled` — the requester withdrew it, or the community invalidated it (see `closedReason`). `failed` — the threshold was met but the re-check at execution refused it, or execution itself failed; the operation did not take effect.";
768
+ };
769
+ readonly createdAt: {
770
+ readonly type: "string";
771
+ readonly format: "date-time";
772
+ readonly description: "When the operation was parked.";
773
+ };
774
+ readonly expiresAt: {
775
+ readonly type: "string";
776
+ readonly format: "date-time";
777
+ readonly description: "When an open action lapses. Absent for an `acknowledge` or `queue` action that does not expire; ALWAYS present for `approval`, whose open life is bounded (72 hours by default; the community configures it between 15 minutes and 14 days).";
778
+ };
779
+ readonly closedAt: {
780
+ readonly type: "string";
781
+ readonly format: "date-time";
782
+ readonly description: "When the action left `open`. Present exactly when `status` is not `open`.";
783
+ };
784
+ readonly closedReason: {
785
+ readonly type: "string";
786
+ readonly enum: readonly ["thresholdMet", "declined", "expired", "cancelledByRequester", "invalidated", "failedRecheck", "acknowledged"];
787
+ readonly description: "Why the action closed. Present exactly when `status` is not `open`. `invalidated` — the community closed it because something it depended on stopped holding before the threshold (an approver or the requester lost standing, the target state moved); `failedRecheck` — the threshold was met but the execution-time re-check refused.";
788
+ };
789
+ readonly threshold: {
790
+ readonly type: "integer";
791
+ readonly minimum: 1;
792
+ readonly description: "The number of distinct approvals the operation needs. Present for `approval`; absent otherwise (a `queue` decision is one decision by construction, and `acknowledge` needs every remaining administrator).";
793
+ };
794
+ readonly approvals: {
795
+ readonly type: "array";
796
+ readonly description: "The decisions in favour recorded so far — approvals for `approval` and `queue`, acknowledgements for `acknowledge` — one entry per distinct subject, in the order recorded. Empty while none has landed.";
797
+ readonly items: {
798
+ readonly type: "object";
799
+ readonly additionalProperties: false;
800
+ readonly required: readonly ["subject", "at"];
801
+ readonly properties: {
802
+ readonly subject: {
803
+ readonly type: "string";
804
+ readonly minLength: 1;
805
+ readonly maxLength: 2048;
806
+ readonly description: "VID of the approver or acknowledger, as proven by the decision's own proof.";
807
+ };
808
+ readonly at: {
809
+ readonly type: "string";
810
+ readonly format: "date-time";
811
+ readonly description: "When the decision was recorded.";
812
+ };
813
+ };
814
+ };
815
+ };
816
+ readonly approversRemaining: {
817
+ readonly type: "integer";
818
+ readonly minimum: 0;
819
+ readonly description: "How many further distinct decisions the action needs while `open` — approvals for `approval`, acknowledgements for `acknowledge`. Lets a console say 'one more' without disclosing the eligible set.";
820
+ };
821
+ readonly summary: {
822
+ readonly $ref: "#/$defs/Summary";
823
+ };
824
+ readonly payload: {
825
+ readonly type: "object";
826
+ readonly description: "The exact payload of the parked operation — the object `payloadDigest` is computed over and the one the community will execute. Carried so an approver can recompute the digest and re-derive every summary field from it rather than trusting the rendering (VTI-APV-013). Deliberately an open object: its shape is governed by the specification `typeUri` names, and a digest is checked over members exactly as received.";
827
+ };
828
+ readonly payloadDigest: {
829
+ readonly $ref: "#/$defs/DigestMultibase";
830
+ readonly description: "Digest of `payload`, taken over its RFC 8785 (JCS) canonicalization. The community re-derives it from the payload it is about to execute and refuses on mismatch. The digest an approver signs over is the challenge-salted one of `task-consent/decision`, not this value; this one lets the approver check that `payload` is what was parked.";
831
+ };
832
+ readonly challenge: {
833
+ readonly type: "string";
834
+ readonly minLength: 16;
835
+ readonly maxLength: 256;
836
+ readonly description: "Present ONLY on an action the CALLER may decide now — an `approval` or `queue` action on which the caller is an eligible approver who has not yet decided. Per-approver: two approvers are shown different challenges for the same action. Echoed verbatim in `task-consent/decision`'s `challenge`, which binds that decision to this approver and this action. Absent for everyone else, including the requester.";
837
+ };
838
+ readonly callerRole: {
839
+ readonly type: "string";
840
+ readonly enum: readonly ["approver", "requester", "acknowledger", "observer"];
841
+ readonly description: "The caller's relation to this action. `approver` — an eligible approver (whether or not already decided). `requester` — the party whose operation was parked. `acknowledger` — an administrator expected to acknowledge it. `observer` — none of these; seen only through the audit-read capability on a `history` or `all` view.";
842
+ };
843
+ readonly requesterOpenActions: {
844
+ readonly type: "integer";
845
+ readonly minimum: 0;
846
+ readonly description: "How many open actions the requester currently has at the community, this one included. For consent-fatigue display: an approver shown the twentieth request from one requester today should be able to see that it is the twentieth.";
847
+ };
848
+ readonly ext: {
849
+ readonly $ref: "#/$defs/Ext";
850
+ };
851
+ };
852
+ };
853
+ readonly Summary: {
854
+ readonly title: "Summary";
855
+ readonly description: "What an approver is shown, rendered from the summary template for the action's `kind`. Title and effect are the template's prose; the fields are the payload values that prose is about, each located by pointer so a renderer can verify it.";
856
+ readonly type: "object";
857
+ readonly additionalProperties: false;
858
+ readonly required: readonly ["title", "fields", "templateDigest"];
859
+ readonly properties: {
860
+ readonly title: {
861
+ readonly type: "string";
862
+ readonly minLength: 1;
863
+ readonly maxLength: 256;
864
+ readonly description: "One-line heading from the template. Prose only: a renderer MUST NOT present the action from this text without the fields.";
865
+ };
866
+ readonly effect: {
867
+ readonly type: "string";
868
+ readonly maxLength: 1024;
869
+ readonly description: "One or two sentences from the template saying what executing the operation will do.";
870
+ };
871
+ readonly fields: {
872
+ readonly type: "object";
873
+ readonly description: "Named values the template displays, keyed by a lowerCamelCase field name. Each locates its value in `payload` by JSON Pointer.";
874
+ readonly propertyNames: {
875
+ readonly pattern: "^[a-z][a-zA-Z0-9]*$";
876
+ readonly maxLength: 64;
877
+ };
878
+ readonly additionalProperties: {
879
+ readonly $ref: "#/$defs/Field";
880
+ };
881
+ };
882
+ readonly templateDigest: {
883
+ readonly $ref: "#/$defs/DigestMultibase";
884
+ readonly description: "Digest of the summary template this summary was rendered from, over its RFC 8785 (JCS) canonicalization. Pinned per `kind`: a renderer that holds the template for a kind refuses a summary naming a different digest, so the community cannot change what approvers are shown for a kind without that change being visible.";
885
+ };
886
+ };
887
+ };
888
+ readonly Field: {
889
+ readonly title: "Field";
890
+ readonly description: "One displayed value, with where it comes from and how to render it.";
891
+ readonly type: "object";
892
+ readonly additionalProperties: false;
893
+ readonly required: readonly ["pointer", "format", "value"];
894
+ readonly properties: {
895
+ readonly pointer: {
896
+ readonly type: "string";
897
+ readonly maxLength: 512;
898
+ readonly pattern: "^(/([^~/]|~[01])*)*$";
899
+ readonly description: "RFC 6901 JSON Pointer into the action's `payload`. The empty string addresses the whole payload.";
900
+ };
901
+ readonly format: {
902
+ readonly type: "string";
903
+ readonly enum: readonly ["did", "capabilityList", "duration", "datetime", "text"];
904
+ readonly description: "How to render the value. `did` — a DID, shown in full or with a verified display name, never truncated to a prefix that two DIDs share. `capabilityList` — an array of capability names. `duration` — an ISO 8601 duration. `datetime` — an RFC 3339 date-time. `text` — anything else, rendered as literal text.";
905
+ };
906
+ readonly value: {
907
+ readonly description: "The value found at `pointer` when the community rendered the summary. A renderer re-derives it from `payload` and refuses to render the action on any mismatch; it is carried so that a mismatch is detectable, not so that it can be trusted.";
908
+ };
909
+ };
910
+ };
911
+ readonly DigestMultibase: {
912
+ readonly title: "DigestMultibase";
913
+ readonly description: "A cryptographic digest as a multibase-encoded multihash — the encoding the W3C Verifiable Credentials Data Model 2.0 defines for `digestMultibase`, and the one `did:webvh` uses for its SCID and entry hashes.\n\nMultihash carries the hash algorithm in-band, so the value is self-describing and the wire format survives an algorithm change without a schema revision; multibase does the same for the base encoding, so a verifier never infers base58 from base64url by context. A bare hex string or a `sha-256:`-style prefix hard-codes one algorithm into the wire contract and is non-conforming here.\n\nThis definition constrains the *encoding only*. What the digest is computed over is stated by each referencing field, because it differs legitimately: a digest over a JSON document is taken over its RFC 8785 (JCS) canonicalization, while a digest over an opaque artifact is taken over its bytes. A field whose input is a JSON document and which does not name a canonicalization is not reproducible.\n\nRestricted to the two multibase headers W3C Controlled Identifiers 1.0 §2.4 normatively requires — `z` (base58btc) and `u` (base64url-no-pad). CID permits others but states that \"interoperability is not guaranteed between implementations using such values\", and a registry whose purpose is interoperability should not mint digests a conforming verifier may be unable to read. The alphabets are enforced rather than assumed: base58btc excludes 0, O, I and l, and an earlier permissive pattern let three published examples carry digests that were not valid base58 at all. base58btc is RECOMMENDED, for consistency with `did:key` and `did:webvh`.";
914
+ readonly type: "string";
915
+ readonly minLength: 16;
916
+ readonly pattern: "^(z[1-9A-HJ-NP-Za-km-z]+|u[A-Za-z0-9_-]+)$";
917
+ readonly examples: readonly ["zQmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR"];
918
+ };
919
+ readonly ActionId: {
920
+ readonly title: "ActionId";
921
+ readonly description: "Opaque, community-minted identifier of one action. A consumer MUST NOT parse or order it; it is compared for equality only. Long enough to be unguessable, because a show of an id the caller may not see is answered `notFound` and an enumerable id would turn that answer into an oracle.";
922
+ readonly type: "string";
923
+ readonly minLength: 16;
924
+ readonly maxLength: 128;
925
+ readonly pattern: "^[A-Za-z0-9._~:-]+$";
926
+ };
927
+ };
928
+ };
929
+ };
930
+ /**
931
+ * SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
932
+ * tracks the *issuer* party's requirement because a response swaps the
933
+ * parties (§7.3 item 5).
934
+ */
935
+ export declare const RESPONSE_SPEC: {
936
+ readonly typeUri: "https://trusttasks.org/spec/vtc/admin/actions/list/0.1#response";
937
+ readonly isBearer: false;
938
+ readonly isProofRequired: true;
939
+ readonly isRecipientRequired: true;
940
+ readonly isIssuedAtRequired: false;
941
+ readonly payloadSchema: {
942
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
943
+ readonly $ref: "#/$defs/Response";
944
+ readonly $defs: {
945
+ readonly Response: {
946
+ readonly $anchor: "response";
947
+ readonly title: "VTC Admin Actions — List — response payload";
948
+ readonly description: "One page of actions and the caller's badge counts. Failures use trust-task-error, not this shape.";
949
+ readonly type: "object";
950
+ readonly additionalProperties: false;
951
+ readonly required: readonly ["actions", "counts"];
952
+ readonly properties: {
953
+ readonly actions: {
954
+ readonly type: "array";
955
+ readonly maxItems: 100;
956
+ readonly items: {
957
+ readonly $ref: "#/$defs/Action";
958
+ };
959
+ readonly description: "The page, in the view's order: open views by `expiresAt` soonest first (non-expiring last, then by `createdAt`), `history` by `closedAt` newest first, `all` open-before-closed in those orders. An empty array is a successful answer: nothing in this view.";
960
+ };
961
+ readonly nextCursor: {
962
+ readonly type: "string";
963
+ readonly minLength: 1;
964
+ readonly maxLength: 1024;
965
+ readonly description: "Present when more actions follow. Pass it back as `cursor` with the same `view` and `since`.";
966
+ };
967
+ readonly counts: {
968
+ readonly type: "object";
969
+ readonly additionalProperties: false;
970
+ readonly required: readonly ["waitingForMe", "requestedByMe"];
971
+ readonly description: "Totals across the whole collection, not the page — what a console badge shows. Computed for the caller regardless of which `view` was requested.";
972
+ readonly properties: {
973
+ readonly waitingForMe: {
974
+ readonly type: "integer";
975
+ readonly minimum: 0;
976
+ readonly description: "Open actions awaiting the caller's decision or acknowledgement.";
977
+ };
978
+ readonly requestedByMe: {
979
+ readonly type: "integer";
980
+ readonly minimum: 0;
981
+ readonly description: "Open actions the caller requested.";
982
+ };
983
+ };
984
+ };
985
+ readonly ext: {
986
+ readonly $ref: "#/$defs/Ext";
987
+ };
988
+ };
989
+ };
990
+ readonly Ext: {
991
+ readonly title: "Ext";
992
+ 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.";
993
+ readonly type: "object";
994
+ readonly minProperties: 1;
995
+ readonly additionalProperties: true;
996
+ readonly propertyNames: {
997
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
998
+ };
999
+ };
1000
+ readonly Action: {
1001
+ readonly title: "Action";
1002
+ readonly description: "One parked administrative operation, as the caller is entitled to see it. The same action reads differently to different callers only in `challenge` and `callerRole`, which are per-caller.";
1003
+ readonly type: "object";
1004
+ readonly additionalProperties: false;
1005
+ readonly required: readonly ["actionId", "category", "kind", "typeUri", "requester", "status", "createdAt", "approvals", "summary", "payload", "payloadDigest", "callerRole"];
1006
+ readonly properties: {
1007
+ readonly actionId: {
1008
+ readonly $ref: "#/$defs/ActionId";
1009
+ };
1010
+ readonly category: {
1011
+ readonly type: "string";
1012
+ readonly enum: readonly ["approval", "acknowledge", "queue"];
1013
+ readonly description: "`approval` — eligible approvers approve or decline, N-of-M; the operation executes when the threshold is met. `acknowledge` — an operation that already happened (an operator's offline or break-glass write) which every remaining administrator must acknowledge; there is nothing to approve or decline. `queue` — an existing human decision (for example a join review) surfaced in the same list, with a threshold of one.";
1014
+ };
1015
+ readonly kind: {
1016
+ readonly type: "string";
1017
+ readonly minLength: 1;
1018
+ readonly maxLength: 128;
1019
+ readonly pattern: "^[a-z][a-zA-Z0-9.]*$";
1020
+ readonly description: "The community's name for what kind of operation is parked, dotted and lowerCamelCase (`acl.grant.authority`, `member.join.review`). Selects the summary template. The set is OPEN: a renderer that does not recognise a kind still renders `summary` from its fields.";
1021
+ };
1022
+ readonly typeUri: {
1023
+ readonly type: "string";
1024
+ readonly format: "uri";
1025
+ readonly minLength: 1;
1026
+ readonly description: "The Type URI of the parked operation — the Trust Task the community will execute when the action completes. Together with `payload` it is exactly what will run.";
1027
+ };
1028
+ readonly requester: {
1029
+ readonly type: "string";
1030
+ readonly minLength: 1;
1031
+ readonly maxLength: 2048;
1032
+ readonly description: "VID of the party whose operation was parked. For `acknowledge`, the operator whose offline write is being acknowledged, where the community can attribute one.";
1033
+ };
1034
+ readonly status: {
1035
+ readonly type: "string";
1036
+ readonly enum: readonly ["open", "completed", "declined", "expired", "cancelled", "failed"];
1037
+ readonly description: "`open` — awaiting decisions. `completed` — the threshold was met and the operation executed (or, for `acknowledge`, every administrator acknowledged). `declined` — an eligible approver denied it. `expired` — it lapsed at `expiresAt`. `cancelled` — the requester withdrew it, or the community invalidated it (see `closedReason`). `failed` — the threshold was met but the re-check at execution refused it, or execution itself failed; the operation did not take effect.";
1038
+ };
1039
+ readonly createdAt: {
1040
+ readonly type: "string";
1041
+ readonly format: "date-time";
1042
+ readonly description: "When the operation was parked.";
1043
+ };
1044
+ readonly expiresAt: {
1045
+ readonly type: "string";
1046
+ readonly format: "date-time";
1047
+ readonly description: "When an open action lapses. Absent for an `acknowledge` or `queue` action that does not expire; ALWAYS present for `approval`, whose open life is bounded (72 hours by default; the community configures it between 15 minutes and 14 days).";
1048
+ };
1049
+ readonly closedAt: {
1050
+ readonly type: "string";
1051
+ readonly format: "date-time";
1052
+ readonly description: "When the action left `open`. Present exactly when `status` is not `open`.";
1053
+ };
1054
+ readonly closedReason: {
1055
+ readonly type: "string";
1056
+ readonly enum: readonly ["thresholdMet", "declined", "expired", "cancelledByRequester", "invalidated", "failedRecheck", "acknowledged"];
1057
+ readonly description: "Why the action closed. Present exactly when `status` is not `open`. `invalidated` — the community closed it because something it depended on stopped holding before the threshold (an approver or the requester lost standing, the target state moved); `failedRecheck` — the threshold was met but the execution-time re-check refused.";
1058
+ };
1059
+ readonly threshold: {
1060
+ readonly type: "integer";
1061
+ readonly minimum: 1;
1062
+ readonly description: "The number of distinct approvals the operation needs. Present for `approval`; absent otherwise (a `queue` decision is one decision by construction, and `acknowledge` needs every remaining administrator).";
1063
+ };
1064
+ readonly approvals: {
1065
+ readonly type: "array";
1066
+ readonly description: "The decisions in favour recorded so far — approvals for `approval` and `queue`, acknowledgements for `acknowledge` — one entry per distinct subject, in the order recorded. Empty while none has landed.";
1067
+ readonly items: {
1068
+ readonly type: "object";
1069
+ readonly additionalProperties: false;
1070
+ readonly required: readonly ["subject", "at"];
1071
+ readonly properties: {
1072
+ readonly subject: {
1073
+ readonly type: "string";
1074
+ readonly minLength: 1;
1075
+ readonly maxLength: 2048;
1076
+ readonly description: "VID of the approver or acknowledger, as proven by the decision's own proof.";
1077
+ };
1078
+ readonly at: {
1079
+ readonly type: "string";
1080
+ readonly format: "date-time";
1081
+ readonly description: "When the decision was recorded.";
1082
+ };
1083
+ };
1084
+ };
1085
+ };
1086
+ readonly approversRemaining: {
1087
+ readonly type: "integer";
1088
+ readonly minimum: 0;
1089
+ readonly description: "How many further distinct decisions the action needs while `open` — approvals for `approval`, acknowledgements for `acknowledge`. Lets a console say 'one more' without disclosing the eligible set.";
1090
+ };
1091
+ readonly summary: {
1092
+ readonly $ref: "#/$defs/Summary";
1093
+ };
1094
+ readonly payload: {
1095
+ readonly type: "object";
1096
+ readonly description: "The exact payload of the parked operation — the object `payloadDigest` is computed over and the one the community will execute. Carried so an approver can recompute the digest and re-derive every summary field from it rather than trusting the rendering (VTI-APV-013). Deliberately an open object: its shape is governed by the specification `typeUri` names, and a digest is checked over members exactly as received.";
1097
+ };
1098
+ readonly payloadDigest: {
1099
+ readonly $ref: "#/$defs/DigestMultibase";
1100
+ readonly description: "Digest of `payload`, taken over its RFC 8785 (JCS) canonicalization. The community re-derives it from the payload it is about to execute and refuses on mismatch. The digest an approver signs over is the challenge-salted one of `task-consent/decision`, not this value; this one lets the approver check that `payload` is what was parked.";
1101
+ };
1102
+ readonly challenge: {
1103
+ readonly type: "string";
1104
+ readonly minLength: 16;
1105
+ readonly maxLength: 256;
1106
+ readonly description: "Present ONLY on an action the CALLER may decide now — an `approval` or `queue` action on which the caller is an eligible approver who has not yet decided. Per-approver: two approvers are shown different challenges for the same action. Echoed verbatim in `task-consent/decision`'s `challenge`, which binds that decision to this approver and this action. Absent for everyone else, including the requester.";
1107
+ };
1108
+ readonly callerRole: {
1109
+ readonly type: "string";
1110
+ readonly enum: readonly ["approver", "requester", "acknowledger", "observer"];
1111
+ readonly description: "The caller's relation to this action. `approver` — an eligible approver (whether or not already decided). `requester` — the party whose operation was parked. `acknowledger` — an administrator expected to acknowledge it. `observer` — none of these; seen only through the audit-read capability on a `history` or `all` view.";
1112
+ };
1113
+ readonly requesterOpenActions: {
1114
+ readonly type: "integer";
1115
+ readonly minimum: 0;
1116
+ readonly description: "How many open actions the requester currently has at the community, this one included. For consent-fatigue display: an approver shown the twentieth request from one requester today should be able to see that it is the twentieth.";
1117
+ };
1118
+ readonly ext: {
1119
+ readonly $ref: "#/$defs/Ext";
1120
+ };
1121
+ };
1122
+ };
1123
+ readonly Summary: {
1124
+ readonly title: "Summary";
1125
+ readonly description: "What an approver is shown, rendered from the summary template for the action's `kind`. Title and effect are the template's prose; the fields are the payload values that prose is about, each located by pointer so a renderer can verify it.";
1126
+ readonly type: "object";
1127
+ readonly additionalProperties: false;
1128
+ readonly required: readonly ["title", "fields", "templateDigest"];
1129
+ readonly properties: {
1130
+ readonly title: {
1131
+ readonly type: "string";
1132
+ readonly minLength: 1;
1133
+ readonly maxLength: 256;
1134
+ readonly description: "One-line heading from the template. Prose only: a renderer MUST NOT present the action from this text without the fields.";
1135
+ };
1136
+ readonly effect: {
1137
+ readonly type: "string";
1138
+ readonly maxLength: 1024;
1139
+ readonly description: "One or two sentences from the template saying what executing the operation will do.";
1140
+ };
1141
+ readonly fields: {
1142
+ readonly type: "object";
1143
+ readonly description: "Named values the template displays, keyed by a lowerCamelCase field name. Each locates its value in `payload` by JSON Pointer.";
1144
+ readonly propertyNames: {
1145
+ readonly pattern: "^[a-z][a-zA-Z0-9]*$";
1146
+ readonly maxLength: 64;
1147
+ };
1148
+ readonly additionalProperties: {
1149
+ readonly $ref: "#/$defs/Field";
1150
+ };
1151
+ };
1152
+ readonly templateDigest: {
1153
+ readonly $ref: "#/$defs/DigestMultibase";
1154
+ readonly description: "Digest of the summary template this summary was rendered from, over its RFC 8785 (JCS) canonicalization. Pinned per `kind`: a renderer that holds the template for a kind refuses a summary naming a different digest, so the community cannot change what approvers are shown for a kind without that change being visible.";
1155
+ };
1156
+ };
1157
+ };
1158
+ readonly Field: {
1159
+ readonly title: "Field";
1160
+ readonly description: "One displayed value, with where it comes from and how to render it.";
1161
+ readonly type: "object";
1162
+ readonly additionalProperties: false;
1163
+ readonly required: readonly ["pointer", "format", "value"];
1164
+ readonly properties: {
1165
+ readonly pointer: {
1166
+ readonly type: "string";
1167
+ readonly maxLength: 512;
1168
+ readonly pattern: "^(/([^~/]|~[01])*)*$";
1169
+ readonly description: "RFC 6901 JSON Pointer into the action's `payload`. The empty string addresses the whole payload.";
1170
+ };
1171
+ readonly format: {
1172
+ readonly type: "string";
1173
+ readonly enum: readonly ["did", "capabilityList", "duration", "datetime", "text"];
1174
+ readonly description: "How to render the value. `did` — a DID, shown in full or with a verified display name, never truncated to a prefix that two DIDs share. `capabilityList` — an array of capability names. `duration` — an ISO 8601 duration. `datetime` — an RFC 3339 date-time. `text` — anything else, rendered as literal text.";
1175
+ };
1176
+ readonly value: {
1177
+ readonly description: "The value found at `pointer` when the community rendered the summary. A renderer re-derives it from `payload` and refuses to render the action on any mismatch; it is carried so that a mismatch is detectable, not so that it can be trusted.";
1178
+ };
1179
+ };
1180
+ };
1181
+ readonly DigestMultibase: {
1182
+ readonly title: "DigestMultibase";
1183
+ readonly description: "A cryptographic digest as a multibase-encoded multihash — the encoding the W3C Verifiable Credentials Data Model 2.0 defines for `digestMultibase`, and the one `did:webvh` uses for its SCID and entry hashes.\n\nMultihash carries the hash algorithm in-band, so the value is self-describing and the wire format survives an algorithm change without a schema revision; multibase does the same for the base encoding, so a verifier never infers base58 from base64url by context. A bare hex string or a `sha-256:`-style prefix hard-codes one algorithm into the wire contract and is non-conforming here.\n\nThis definition constrains the *encoding only*. What the digest is computed over is stated by each referencing field, because it differs legitimately: a digest over a JSON document is taken over its RFC 8785 (JCS) canonicalization, while a digest over an opaque artifact is taken over its bytes. A field whose input is a JSON document and which does not name a canonicalization is not reproducible.\n\nRestricted to the two multibase headers W3C Controlled Identifiers 1.0 §2.4 normatively requires — `z` (base58btc) and `u` (base64url-no-pad). CID permits others but states that \"interoperability is not guaranteed between implementations using such values\", and a registry whose purpose is interoperability should not mint digests a conforming verifier may be unable to read. The alphabets are enforced rather than assumed: base58btc excludes 0, O, I and l, and an earlier permissive pattern let three published examples carry digests that were not valid base58 at all. base58btc is RECOMMENDED, for consistency with `did:key` and `did:webvh`.";
1184
+ readonly type: "string";
1185
+ readonly minLength: 16;
1186
+ readonly pattern: "^(z[1-9A-HJ-NP-Za-km-z]+|u[A-Za-z0-9_-]+)$";
1187
+ readonly examples: readonly ["zQmbWqxBEKC3P8tqsKc98xmWNzrzDtRLMiMPL8wBuTGsMnR"];
1188
+ };
1189
+ readonly ActionId: {
1190
+ readonly title: "ActionId";
1191
+ readonly description: "Opaque, community-minted identifier of one action. A consumer MUST NOT parse or order it; it is compared for equality only. Long enough to be unguessable, because a show of an id the caller may not see is answered `notFound` and an enumerable id would turn that answer into an oracle.";
1192
+ readonly type: "string";
1193
+ readonly minLength: 16;
1194
+ readonly maxLength: 128;
1195
+ readonly pattern: "^[A-Za-z0-9._~:-]+$";
1196
+ };
1197
+ };
1198
+ };
1199
+ };
1200
+ //# sourceMappingURL=payload.d.ts.map