@openvtc/trust-tasks 0.22.5 → 0.22.7

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 (199) hide show
  1. package/CHANGELOG.md +80 -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/signing-key/authorize/0.1/payload.d.ts +199 -0
  49. package/dist/auth/signing-key/authorize/0.1/payload.d.ts.map +1 -0
  50. package/dist/auth/signing-key/authorize/0.1/payload.js +108 -0
  51. package/dist/auth/signing-key/authorize/0.1/payload.js.map +1 -0
  52. package/dist/auth/signing-key/enroll/0.2/payload.d.ts +569 -0
  53. package/dist/auth/signing-key/enroll/0.2/payload.d.ts.map +1 -0
  54. package/dist/auth/signing-key/enroll/0.2/payload.js +315 -0
  55. package/dist/auth/signing-key/enroll/0.2/payload.js.map +1 -0
  56. package/dist/auth/step-up/approve-request/0.4/payload.d.ts +672 -0
  57. package/dist/auth/step-up/approve-request/0.4/payload.d.ts.map +1 -0
  58. package/dist/auth/step-up/approve-request/0.4/payload.js +373 -0
  59. package/dist/auth/step-up/approve-request/0.4/payload.js.map +1 -0
  60. package/dist/auth/step-up/approve-response/0.6/payload.d.ts +974 -0
  61. package/dist/auth/step-up/approve-response/0.6/payload.d.ts.map +1 -0
  62. package/dist/auth/step-up/approve-response/0.6/payload.js +552 -0
  63. package/dist/auth/step-up/approve-response/0.6/payload.js.map +1 -0
  64. package/dist/auth/step-up/approver/_shared/0.1/approver.d.ts +16 -0
  65. package/dist/auth/step-up/approver/_shared/0.1/approver.d.ts.map +1 -0
  66. package/dist/auth/step-up/approver/_shared/0.1/approver.js +6 -0
  67. package/dist/auth/step-up/approver/_shared/0.1/approver.js.map +1 -0
  68. package/dist/auth/step-up/approver/attest/0.1/payload.d.ts +174 -0
  69. package/dist/auth/step-up/approver/attest/0.1/payload.d.ts.map +1 -0
  70. package/dist/auth/step-up/approver/attest/0.1/payload.js +97 -0
  71. package/dist/auth/step-up/approver/attest/0.1/payload.js.map +1 -0
  72. package/dist/auth/step-up/approver/enroll/0.1/payload.d.ts +503 -0
  73. package/dist/auth/step-up/approver/enroll/0.1/payload.d.ts.map +1 -0
  74. package/dist/auth/step-up/approver/enroll/0.1/payload.js +285 -0
  75. package/dist/auth/step-up/approver/enroll/0.1/payload.js.map +1 -0
  76. package/dist/auth/step-up/approver/invite/0.1/payload.d.ts +375 -0
  77. package/dist/auth/step-up/approver/invite/0.1/payload.d.ts.map +1 -0
  78. package/dist/auth/step-up/approver/invite/0.1/payload.js +200 -0
  79. package/dist/auth/step-up/approver/invite/0.1/payload.js.map +1 -0
  80. package/dist/auth/step-up/approver/list/0.1/payload.d.ts +477 -0
  81. package/dist/auth/step-up/approver/list/0.1/payload.d.ts.map +1 -0
  82. package/dist/auth/step-up/approver/list/0.1/payload.js +272 -0
  83. package/dist/auth/step-up/approver/list/0.1/payload.js.map +1 -0
  84. package/dist/auth/step-up/approver/redeem/finish/0.1/payload.d.ts +512 -0
  85. package/dist/auth/step-up/approver/redeem/finish/0.1/payload.d.ts.map +1 -0
  86. package/dist/auth/step-up/approver/redeem/finish/0.1/payload.js +290 -0
  87. package/dist/auth/step-up/approver/redeem/finish/0.1/payload.js.map +1 -0
  88. package/dist/auth/step-up/approver/redeem/start/0.1/payload.d.ts +343 -0
  89. package/dist/auth/step-up/approver/redeem/start/0.1/payload.d.ts.map +1 -0
  90. package/dist/auth/step-up/approver/redeem/start/0.1/payload.js +187 -0
  91. package/dist/auth/step-up/approver/redeem/start/0.1/payload.js.map +1 -0
  92. package/dist/auth/step-up/approver/revoke/0.1/payload.d.ts +534 -0
  93. package/dist/auth/step-up/approver/revoke/0.1/payload.d.ts.map +1 -0
  94. package/dist/auth/step-up/approver/revoke/0.1/payload.js +301 -0
  95. package/dist/auth/step-up/approver/revoke/0.1/payload.js.map +1 -0
  96. package/dist/index.d.ts +33 -0
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +33 -0
  99. package/dist/index.js.map +1 -1
  100. package/dist/task-consent/decision/0.2/payload.d.ts +775 -0
  101. package/dist/task-consent/decision/0.2/payload.d.ts.map +1 -0
  102. package/dist/task-consent/decision/0.2/payload.js +450 -0
  103. package/dist/task-consent/decision/0.2/payload.js.map +1 -0
  104. package/dist/vtc/admin/actions/_shared/0.1/action.d.ts +24 -0
  105. package/dist/vtc/admin/actions/_shared/0.1/action.d.ts.map +1 -0
  106. package/dist/vtc/admin/actions/_shared/0.1/action.js +6 -0
  107. package/dist/vtc/admin/actions/_shared/0.1/action.js.map +1 -0
  108. package/dist/vtc/admin/actions/acknowledge/0.1/payload.d.ts +1012 -0
  109. package/dist/vtc/admin/actions/acknowledge/0.1/payload.d.ts.map +1 -0
  110. package/dist/vtc/admin/actions/acknowledge/0.1/payload.js +636 -0
  111. package/dist/vtc/admin/actions/acknowledge/0.1/payload.js.map +1 -0
  112. package/dist/vtc/admin/actions/cancel/0.1/payload.d.ts +1026 -0
  113. package/dist/vtc/admin/actions/cancel/0.1/payload.d.ts.map +1 -0
  114. package/dist/vtc/admin/actions/cancel/0.1/payload.js +641 -0
  115. package/dist/vtc/admin/actions/cancel/0.1/payload.js.map +1 -0
  116. package/dist/vtc/admin/actions/list/0.1/payload.d.ts +1200 -0
  117. package/dist/vtc/admin/actions/list/0.1/payload.d.ts.map +1 -0
  118. package/dist/vtc/admin/actions/list/0.1/payload.js +726 -0
  119. package/dist/vtc/admin/actions/list/0.1/payload.js.map +1 -0
  120. package/dist/vtc/admin/actions/show/0.1/payload.d.ts +1012 -0
  121. package/dist/vtc/admin/actions/show/0.1/payload.d.ts.map +1 -0
  122. package/dist/vtc/admin/actions/show/0.1/payload.js +636 -0
  123. package/dist/vtc/admin/actions/show/0.1/payload.js.map +1 -0
  124. package/dist/vtc/install/claim/finish/0.3/payload.d.ts +379 -0
  125. package/dist/vtc/install/claim/finish/0.3/payload.d.ts.map +1 -0
  126. package/dist/vtc/install/claim/finish/0.3/payload.js +205 -0
  127. package/dist/vtc/install/claim/finish/0.3/payload.js.map +1 -0
  128. package/dist/vtc/install/claim/start/0.3/payload.d.ts +368 -0
  129. package/dist/vtc/install/claim/start/0.3/payload.d.ts.map +1 -0
  130. package/dist/vtc/install/claim/start/0.3/payload.js +201 -0
  131. package/dist/vtc/install/claim/start/0.3/payload.js.map +1 -0
  132. package/dist/vtc/members/authority-reduced-notice/0.1/payload.d.ts +208 -0
  133. package/dist/vtc/members/authority-reduced-notice/0.1/payload.d.ts.map +1 -0
  134. package/dist/vtc/members/authority-reduced-notice/0.1/payload.js +112 -0
  135. package/dist/vtc/members/authority-reduced-notice/0.1/payload.js.map +1 -0
  136. package/dist/vtc/roles/_shared/0.1/role.d.ts +16 -0
  137. package/dist/vtc/roles/_shared/0.1/role.d.ts.map +1 -0
  138. package/dist/vtc/roles/_shared/0.1/role.js +6 -0
  139. package/dist/vtc/roles/_shared/0.1/role.js.map +1 -0
  140. package/dist/vtc/roles/define/0.1/payload.d.ts +703 -0
  141. package/dist/vtc/roles/define/0.1/payload.d.ts.map +1 -0
  142. package/dist/vtc/roles/define/0.1/payload.js +371 -0
  143. package/dist/vtc/roles/define/0.1/payload.js.map +1 -0
  144. package/dist/vtc/roles/delete/0.1/payload.d.ts +281 -0
  145. package/dist/vtc/roles/delete/0.1/payload.d.ts.map +1 -0
  146. package/dist/vtc/roles/delete/0.1/payload.js +152 -0
  147. package/dist/vtc/roles/delete/0.1/payload.js.map +1 -0
  148. package/dist/vtc/roles/list/0.1/payload.d.ts +639 -0
  149. package/dist/vtc/roles/list/0.1/payload.d.ts.map +1 -0
  150. package/dist/vtc/roles/list/0.1/payload.js +345 -0
  151. package/dist/vtc/roles/list/0.1/payload.js.map +1 -0
  152. package/dist/vtc/roles/show/0.1/payload.d.ts +651 -0
  153. package/dist/vtc/roles/show/0.1/payload.d.ts.map +1 -0
  154. package/dist/vtc/roles/show/0.1/payload.js +351 -0
  155. package/dist/vtc/roles/show/0.1/payload.js.map +1 -0
  156. package/package.json +1 -1
  157. package/src/_shared/components.ts +440 -1
  158. package/src/acl/_shared/0.1/acl-entry.ts +1 -1
  159. package/src/acl/_shared/0.2/acl-entry.ts +23 -0
  160. package/src/acl/change-role/0.1/payload.ts +1 -1
  161. package/src/acl/change-role/0.2/payload.ts +1011 -0
  162. package/src/acl/grant/0.1/payload.ts +1 -1
  163. package/src/acl/grant/0.2/payload.ts +990 -0
  164. package/src/acl/list/0.1/payload.ts +1 -1
  165. package/src/acl/list/0.2/payload.ts +1125 -0
  166. package/src/acl/revoke/0.1/payload.ts +1 -1
  167. package/src/acl/revoke/0.2/payload.ts +1122 -0
  168. package/src/acl/show/0.1/payload.ts +1 -1
  169. package/src/acl/show/0.2/payload.ts +1016 -0
  170. package/src/acl/swap-key/0.1/payload.ts +1 -1
  171. package/src/acl/update/0.1/payload.ts +1 -1
  172. package/src/acl/update/0.2/payload.ts +1094 -0
  173. package/src/auth/signing-key/authorize/0.1/payload.ts +141 -0
  174. package/src/auth/signing-key/enroll/0.2/payload.ts +365 -0
  175. package/src/auth/step-up/approve-request/0.4/payload.ts +461 -0
  176. package/src/auth/step-up/approve-response/0.6/payload.ts +648 -0
  177. package/src/auth/step-up/approver/_shared/0.1/approver.ts +17 -0
  178. package/src/auth/step-up/approver/attest/0.1/payload.ts +135 -0
  179. package/src/auth/step-up/approver/enroll/0.1/payload.ts +329 -0
  180. package/src/auth/step-up/approver/invite/0.1/payload.ts +258 -0
  181. package/src/auth/step-up/approver/list/0.1/payload.ts +318 -0
  182. package/src/auth/step-up/approver/redeem/finish/0.1/payload.ts +337 -0
  183. package/src/auth/step-up/approver/redeem/start/0.1/payload.ts +241 -0
  184. package/src/auth/step-up/approver/revoke/0.1/payload.ts +352 -0
  185. package/src/index.ts +33 -0
  186. package/src/task-consent/decision/0.2/payload.ts +537 -0
  187. package/src/vtc/admin/actions/_shared/0.1/action.ts +25 -0
  188. package/src/vtc/admin/actions/acknowledge/0.1/payload.ts +671 -0
  189. package/src/vtc/admin/actions/cancel/0.1/payload.ts +680 -0
  190. package/src/vtc/admin/actions/list/0.1/payload.ts +795 -0
  191. package/src/vtc/admin/actions/show/0.1/payload.ts +671 -0
  192. package/src/vtc/install/claim/finish/0.3/payload.ts +253 -0
  193. package/src/vtc/install/claim/start/0.3/payload.ts +256 -0
  194. package/src/vtc/members/authority-reduced-notice/0.1/payload.ts +162 -0
  195. package/src/vtc/roles/_shared/0.1/role.ts +17 -0
  196. package/src/vtc/roles/define/0.1/payload.ts +435 -0
  197. package/src/vtc/roles/delete/0.1/payload.ts +200 -0
  198. package/src/vtc/roles/list/0.1/payload.ts +389 -0
  199. package/src/vtc/roles/show/0.1/payload.ts +399 -0
@@ -0,0 +1,651 @@
1
+ /**
2
+ * Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
3
+ * Source: specs/vtc/roles/show/0.1/payload.schema.json
4
+ */
5
+ import type { Capability_AclV0_2 as Capability, CapabilityRef, Ext, ResourceQualifier, RoleDefinition, RoleName } from "../../../../_shared/components.js";
6
+ /**
7
+ * Fetch one administrative role of a VTC by name. The outer document members are owned by the framework — SPEC §6.3.
8
+ */
9
+ export interface VTCRolesShowPayload {
10
+ /**
11
+ * Name of the role, built-in or custom.
12
+ */
13
+ name: RoleName;
14
+ /**
15
+ * Ecosystem-defined extension members per SPEC.md §4.5.1.
16
+ */
17
+ ext?: Ext;
18
+ }
19
+ /**
20
+ * The success response to a vtc/roles/show/0.1 request. Carried in a Trust Task document whose type is https://trusttasks.org/spec/vtc/roles/show/0.1#response.
21
+ */
22
+ export interface VTCRolesShowResponsePayload {
23
+ /**
24
+ * The role record.
25
+ */
26
+ role: RoleDefinition;
27
+ /**
28
+ * Optional: the number of ACL entries currently holding this role. A count, never a list of subjects. A VTC MAY omit it where the querying party may not learn it.
29
+ */
30
+ holders?: number;
31
+ /**
32
+ * Ecosystem-defined extension members per SPEC.md §4.5.1.
33
+ */
34
+ ext?: Ext;
35
+ }
36
+ /** Shared definitions this specification references, re-exported under the names it used to declare them with. */
37
+ export type { Capability, CapabilityRef, Ext, ResourceQualifier, RoleDefinition, RoleName };
38
+ /** Trust Task type URI. */
39
+ export declare const TYPE_URI: "https://trusttasks.org/spec/vtc/roles/show/0.1";
40
+ /** Stable alias for this specification's request payload shape. */
41
+ export type Payload = VTCRolesShowPayload;
42
+ /** Trust Task response type URI (request type URI + "#response"). */
43
+ export declare const RESPONSE_TYPE_URI: "https://trusttasks.org/spec/vtc/roles/show/0.1#response";
44
+ /** Stable alias for this specification's success-response payload shape. */
45
+ export type Response = VTCRolesShowResponsePayload;
46
+ /**
47
+ * This specification's payload schema, as a value.
48
+ *
49
+ * SPEC.md §7.2 item 2 is performed against this. It is shipped as data
50
+ * rather than only as a `.json` file because TypeScript types are erased
51
+ * at runtime: without a schema a consumer has nothing to validate, and
52
+ * every REQUIRED payload member is optional in practice. Cross-file
53
+ * `$ref`s are already inlined, so it needs no resolver.
54
+ */
55
+ export declare const PAYLOAD_SCHEMA: {
56
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
57
+ readonly $id: "https://trusttasks.org/spec/vtc/roles/show/0.1";
58
+ readonly title: "VTC Roles — Show — payload";
59
+ readonly description: "Fetch one administrative role of a VTC by name. The outer document members are owned by the framework — SPEC §6.3.";
60
+ readonly type: "object";
61
+ readonly additionalProperties: false;
62
+ readonly required: readonly ["name"];
63
+ readonly properties: {
64
+ readonly name: {
65
+ readonly $ref: "#/$defs/RoleName";
66
+ readonly description: "Name of the role, built-in or custom.";
67
+ };
68
+ readonly ext: {
69
+ readonly $ref: "#/$defs/Ext";
70
+ readonly description: "Ecosystem-defined extension members per SPEC.md §4.5.1.";
71
+ };
72
+ };
73
+ readonly $defs: {
74
+ readonly Response: {
75
+ readonly $anchor: "response";
76
+ readonly title: "VTC Roles — Show — response payload";
77
+ readonly description: "The success response to a vtc/roles/show/0.1 request. Carried in a Trust Task document whose type is https://trusttasks.org/spec/vtc/roles/show/0.1#response.";
78
+ readonly type: "object";
79
+ readonly additionalProperties: false;
80
+ readonly required: readonly ["role"];
81
+ readonly properties: {
82
+ readonly role: {
83
+ readonly $ref: "#/$defs/RoleDefinition";
84
+ readonly description: "The role record.";
85
+ };
86
+ readonly holders: {
87
+ readonly type: "integer";
88
+ readonly minimum: 0;
89
+ readonly description: "Optional: the number of ACL entries currently holding this role. A count, never a list of subjects. A VTC MAY omit it where the querying party may not learn it.";
90
+ };
91
+ readonly ext: {
92
+ readonly $ref: "#/$defs/Ext";
93
+ readonly description: "Ecosystem-defined extension members per SPEC.md §4.5.1.";
94
+ };
95
+ };
96
+ };
97
+ readonly Ext: {
98
+ readonly title: "Ext";
99
+ 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.";
100
+ readonly type: "object";
101
+ readonly minProperties: 1;
102
+ readonly additionalProperties: true;
103
+ readonly propertyNames: {
104
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
105
+ };
106
+ };
107
+ readonly RoleDefinition: {
108
+ readonly title: "RoleDefinition";
109
+ readonly description: "One administrative role of a VTC: a name, the CEILING of capabilities an entry holding the role may hold, and the approve ceiling of capabilities it may approve.\n\nA ROLE IS A CEILING, NOT A GRANT. It states the most an entry with this role could be allowed; the entry's own `capabilities` say what it does hold, and may be narrower. An entry's effective capabilities are this whole `ceiling` where the entry states `capabilities: {scope: ceiling}`, nothing where it states `none`, and this `ceiling` ∩ its listed grants (plus any additive grant) where it states `listed`. Holding the role confers nothing an entry has not been granted. Likewise `approveScope` bounds what an entry may approve: the entry's `approveCapabilities` select from it (`ceiling` = all of it, `listed` = an intersection, absent or `none` = nothing), and the entry's `approve` scope must not be none for any of it to apply.\n\nNO WILDCARDS. A ceiling lists its capabilities explicitly, even where it is meant to be \"everything\"; a role whose ceiling is empty holds no capability, and one whose approve ceiling is empty approves none. Built-in roles whose intent is the whole registry enumerate it, and their records grow when the registry grows — by release, never by policy.\n\nBUILT-IN ROLES (`builtIn: true`) are fixed by the VTC implementation and MUST NOT be changed or deleted through vtc/roles/define or vtc/roles/delete. The built-in set, with the ceilings a VTC is expected to ship (descriptive; the authoritative ceiling is the record the VTC returns):\n- `community-admin` — ceiling: every `vtc.*` capability and `git.ns.admin` unqualified; approve ceiling: every capability. With its full ceiling it is the community's unrestricted administrator.\n- `moderator` — ceiling: `vtc.members.manage`, `vtc.join.decide`, `vtc.invitations.manage`; approve ceiling: the same.\n- `vetting-lead` — ceiling: `vtc.vetting.manage` (an entry may qualify it by criterion); approve ceiling: `vtc.vetting.manage`, so vetting leads approve vetter grants and other vetting leads at their qualifier.\n- `repo-manager` — ceiling: `git.repo.manage` and `git.ns.admin` (held qualified by namespace or repository); approve ceiling: the same, at the same qualifier.\n- `credential-officer` — ceiling: `vtc.credentials.issue`, `vtc.credentials.revoke`; approve ceiling: the same.\n- `auditor` — ceiling: `vtc.audit.read`; approve ceiling: none.\n- `approver` — ceiling: none (an entry holding it states `act: {scope: none}`); approve ceiling: every capability, narrowed by the entry's `approveCapabilities` — the least-privilege approver.\n\nCUSTOM ROLES (`builtIn: false`) are created, changed and deleted by a community through vtc/roles/define and vtc/roles/delete. A VTC implementing this family takes those changes only through an N-of-M approval among its administrators, never through policy (Rego or otherwise) — authority-defining records are host-enforced, and policy may only refuse. That is a description of the VTC's model, not a requirement this schema can carry. An entry holds at most one administrative role; a combination (repo manager AND vetting lead) is expressed as a custom role.";
110
+ readonly type: "object";
111
+ readonly additionalProperties: false;
112
+ readonly required: readonly ["name", "builtIn", "ceiling", "approveScope"];
113
+ readonly properties: {
114
+ readonly name: {
115
+ readonly $ref: "#/$defs/RoleName";
116
+ };
117
+ readonly builtIn: {
118
+ readonly type: "boolean";
119
+ readonly description: "`true` for a role fixed by the VTC implementation, which cannot be changed or deleted; `false` for a community-defined custom role.";
120
+ };
121
+ readonly description: {
122
+ readonly type: "string";
123
+ readonly maxLength: 512;
124
+ readonly description: "Optional human-readable description. Confers nothing.";
125
+ };
126
+ readonly ceiling: {
127
+ readonly type: "array";
128
+ readonly items: {
129
+ readonly $ref: "#/$defs/CapabilityRef";
130
+ };
131
+ readonly description: "The capabilities an entry holding this role MAY hold, each optionally qualified by a resource. An entry may hold a capability at a qualifier inside the ceiling's (a ceiling of `git.repo.manage` unqualified admits `git.repo.manage @ git-ns:github.com/acme`), never outside it. EMPTY means the role admits no capability. A capability the VTC classes as additive never appears in a ceiling — an additive capability is by definition one no role implies.";
132
+ };
133
+ readonly approveScope: {
134
+ readonly type: "array";
135
+ readonly items: {
136
+ readonly $ref: "#/$defs/CapabilityRef";
137
+ };
138
+ readonly description: "The capabilities an entry holding this role MAY approve an action needing — the role's approve ceiling, independent of `ceiling`. An entry approves all of it with `approveCapabilities: {scope: ceiling}`, an intersection with `listed`, and nothing when `approveCapabilities` is absent or `none`; the entry's `approve` scope must be other than none for any of it to apply. EMPTY means the role approves nothing.";
139
+ };
140
+ readonly createdAt: {
141
+ readonly type: "string";
142
+ readonly format: "date-time";
143
+ };
144
+ readonly createdBy: {
145
+ readonly type: "string";
146
+ readonly minLength: 1;
147
+ readonly maxLength: 2048;
148
+ readonly description: "VID of the administrator whose request created the role (for a custom role created by approval, the requester). Absent on a built-in role.";
149
+ };
150
+ readonly updatedAt: {
151
+ readonly type: "string";
152
+ readonly format: "date-time";
153
+ };
154
+ readonly updatedBy: {
155
+ readonly type: "string";
156
+ readonly minLength: 1;
157
+ readonly maxLength: 2048;
158
+ readonly description: "VID of the administrator whose request last replaced the role. Absent on a built-in role and on a custom role never replaced.";
159
+ };
160
+ readonly ext: {
161
+ readonly $ref: "#/$defs/Ext";
162
+ readonly description: "Ecosystem-defined extension members per SPEC.md §4.5.1. An extension member MUST NOT be interpreted as widening a ceiling.";
163
+ };
164
+ };
165
+ };
166
+ readonly RoleName: {
167
+ readonly title: "RoleName";
168
+ readonly description: "A role identifier: lowercase, hyphen-separated, at most 64 characters. Compared by exact string equality. It is the value an AclEntry 0.2 carries in `role`.";
169
+ readonly type: "string";
170
+ readonly pattern: "^[a-z][a-z0-9-]{0,63}$";
171
+ };
172
+ readonly CapabilityRef: {
173
+ readonly title: "CapabilityRef";
174
+ readonly description: "A capability, optionally qualified by a resource. Used where a capability is named but not granted — a role's ceiling, a role's approve ceiling, an entry's approvable capabilities. An unqualified reference covers every resource of the capability's kind.";
175
+ readonly type: "object";
176
+ readonly additionalProperties: false;
177
+ readonly required: readonly ["capability"];
178
+ readonly properties: {
179
+ readonly capability: {
180
+ readonly $ref: "#/$defs/Capability";
181
+ };
182
+ readonly resource: {
183
+ readonly $ref: "#/$defs/ResourceQualifier";
184
+ readonly description: "Optional qualifier. Absent covers every resource of the capability's kind.";
185
+ };
186
+ };
187
+ };
188
+ readonly ResourceQualifier: {
189
+ readonly title: "ResourceQualifier";
190
+ readonly description: "Opaque qualifier naming the part of the maintainer's resources a capability applies to (e.g. `git-ns:github.com/acme`, `git-repo:github.com/acme/r#4211`, `policy:join`). Its grammar and containment rule are the maintainer's: a qualified capability covers the named resource and the resources inside it. A qualifier MUST NOT be read as widening the entry's act scope.";
191
+ readonly type: "string";
192
+ readonly minLength: 1;
193
+ readonly maxLength: 512;
194
+ };
195
+ readonly Capability: {
196
+ readonly title: "Capability";
197
+ readonly description: "Opaque identifier of one administrative power in the maintainer's capability registry — lowercase dot-separated segments (e.g. `keys.sign`, `vtc.roles.assign`, `git.repo.manage`). A consumer MUST NOT treat a capability it does not recognise as granted.";
198
+ readonly type: "string";
199
+ readonly minLength: 1;
200
+ readonly maxLength: 128;
201
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)*$";
202
+ };
203
+ };
204
+ };
205
+ /** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
206
+ export declare const RESPONSE_PAYLOAD_SCHEMA: {
207
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
208
+ readonly $ref: "#/$defs/Response";
209
+ readonly $defs: {
210
+ readonly Response: {
211
+ readonly $anchor: "response";
212
+ readonly title: "VTC Roles — Show — response payload";
213
+ readonly description: "The success response to a vtc/roles/show/0.1 request. Carried in a Trust Task document whose type is https://trusttasks.org/spec/vtc/roles/show/0.1#response.";
214
+ readonly type: "object";
215
+ readonly additionalProperties: false;
216
+ readonly required: readonly ["role"];
217
+ readonly properties: {
218
+ readonly role: {
219
+ readonly $ref: "#/$defs/RoleDefinition";
220
+ readonly description: "The role record.";
221
+ };
222
+ readonly holders: {
223
+ readonly type: "integer";
224
+ readonly minimum: 0;
225
+ readonly description: "Optional: the number of ACL entries currently holding this role. A count, never a list of subjects. A VTC MAY omit it where the querying party may not learn it.";
226
+ };
227
+ readonly ext: {
228
+ readonly $ref: "#/$defs/Ext";
229
+ readonly description: "Ecosystem-defined extension members per SPEC.md §4.5.1.";
230
+ };
231
+ };
232
+ };
233
+ readonly Ext: {
234
+ readonly title: "Ext";
235
+ 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.";
236
+ readonly type: "object";
237
+ readonly minProperties: 1;
238
+ readonly additionalProperties: true;
239
+ readonly propertyNames: {
240
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
241
+ };
242
+ };
243
+ readonly RoleDefinition: {
244
+ readonly title: "RoleDefinition";
245
+ readonly description: "One administrative role of a VTC: a name, the CEILING of capabilities an entry holding the role may hold, and the approve ceiling of capabilities it may approve.\n\nA ROLE IS A CEILING, NOT A GRANT. It states the most an entry with this role could be allowed; the entry's own `capabilities` say what it does hold, and may be narrower. An entry's effective capabilities are this whole `ceiling` where the entry states `capabilities: {scope: ceiling}`, nothing where it states `none`, and this `ceiling` ∩ its listed grants (plus any additive grant) where it states `listed`. Holding the role confers nothing an entry has not been granted. Likewise `approveScope` bounds what an entry may approve: the entry's `approveCapabilities` select from it (`ceiling` = all of it, `listed` = an intersection, absent or `none` = nothing), and the entry's `approve` scope must not be none for any of it to apply.\n\nNO WILDCARDS. A ceiling lists its capabilities explicitly, even where it is meant to be \"everything\"; a role whose ceiling is empty holds no capability, and one whose approve ceiling is empty approves none. Built-in roles whose intent is the whole registry enumerate it, and their records grow when the registry grows — by release, never by policy.\n\nBUILT-IN ROLES (`builtIn: true`) are fixed by the VTC implementation and MUST NOT be changed or deleted through vtc/roles/define or vtc/roles/delete. The built-in set, with the ceilings a VTC is expected to ship (descriptive; the authoritative ceiling is the record the VTC returns):\n- `community-admin` — ceiling: every `vtc.*` capability and `git.ns.admin` unqualified; approve ceiling: every capability. With its full ceiling it is the community's unrestricted administrator.\n- `moderator` — ceiling: `vtc.members.manage`, `vtc.join.decide`, `vtc.invitations.manage`; approve ceiling: the same.\n- `vetting-lead` — ceiling: `vtc.vetting.manage` (an entry may qualify it by criterion); approve ceiling: `vtc.vetting.manage`, so vetting leads approve vetter grants and other vetting leads at their qualifier.\n- `repo-manager` — ceiling: `git.repo.manage` and `git.ns.admin` (held qualified by namespace or repository); approve ceiling: the same, at the same qualifier.\n- `credential-officer` — ceiling: `vtc.credentials.issue`, `vtc.credentials.revoke`; approve ceiling: the same.\n- `auditor` — ceiling: `vtc.audit.read`; approve ceiling: none.\n- `approver` — ceiling: none (an entry holding it states `act: {scope: none}`); approve ceiling: every capability, narrowed by the entry's `approveCapabilities` — the least-privilege approver.\n\nCUSTOM ROLES (`builtIn: false`) are created, changed and deleted by a community through vtc/roles/define and vtc/roles/delete. A VTC implementing this family takes those changes only through an N-of-M approval among its administrators, never through policy (Rego or otherwise) — authority-defining records are host-enforced, and policy may only refuse. That is a description of the VTC's model, not a requirement this schema can carry. An entry holds at most one administrative role; a combination (repo manager AND vetting lead) is expressed as a custom role.";
246
+ readonly type: "object";
247
+ readonly additionalProperties: false;
248
+ readonly required: readonly ["name", "builtIn", "ceiling", "approveScope"];
249
+ readonly properties: {
250
+ readonly name: {
251
+ readonly $ref: "#/$defs/RoleName";
252
+ };
253
+ readonly builtIn: {
254
+ readonly type: "boolean";
255
+ readonly description: "`true` for a role fixed by the VTC implementation, which cannot be changed or deleted; `false` for a community-defined custom role.";
256
+ };
257
+ readonly description: {
258
+ readonly type: "string";
259
+ readonly maxLength: 512;
260
+ readonly description: "Optional human-readable description. Confers nothing.";
261
+ };
262
+ readonly ceiling: {
263
+ readonly type: "array";
264
+ readonly items: {
265
+ readonly $ref: "#/$defs/CapabilityRef";
266
+ };
267
+ readonly description: "The capabilities an entry holding this role MAY hold, each optionally qualified by a resource. An entry may hold a capability at a qualifier inside the ceiling's (a ceiling of `git.repo.manage` unqualified admits `git.repo.manage @ git-ns:github.com/acme`), never outside it. EMPTY means the role admits no capability. A capability the VTC classes as additive never appears in a ceiling — an additive capability is by definition one no role implies.";
268
+ };
269
+ readonly approveScope: {
270
+ readonly type: "array";
271
+ readonly items: {
272
+ readonly $ref: "#/$defs/CapabilityRef";
273
+ };
274
+ readonly description: "The capabilities an entry holding this role MAY approve an action needing — the role's approve ceiling, independent of `ceiling`. An entry approves all of it with `approveCapabilities: {scope: ceiling}`, an intersection with `listed`, and nothing when `approveCapabilities` is absent or `none`; the entry's `approve` scope must be other than none for any of it to apply. EMPTY means the role approves nothing.";
275
+ };
276
+ readonly createdAt: {
277
+ readonly type: "string";
278
+ readonly format: "date-time";
279
+ };
280
+ readonly createdBy: {
281
+ readonly type: "string";
282
+ readonly minLength: 1;
283
+ readonly maxLength: 2048;
284
+ readonly description: "VID of the administrator whose request created the role (for a custom role created by approval, the requester). Absent on a built-in role.";
285
+ };
286
+ readonly updatedAt: {
287
+ readonly type: "string";
288
+ readonly format: "date-time";
289
+ };
290
+ readonly updatedBy: {
291
+ readonly type: "string";
292
+ readonly minLength: 1;
293
+ readonly maxLength: 2048;
294
+ readonly description: "VID of the administrator whose request last replaced the role. Absent on a built-in role and on a custom role never replaced.";
295
+ };
296
+ readonly ext: {
297
+ readonly $ref: "#/$defs/Ext";
298
+ readonly description: "Ecosystem-defined extension members per SPEC.md §4.5.1. An extension member MUST NOT be interpreted as widening a ceiling.";
299
+ };
300
+ };
301
+ };
302
+ readonly RoleName: {
303
+ readonly title: "RoleName";
304
+ readonly description: "A role identifier: lowercase, hyphen-separated, at most 64 characters. Compared by exact string equality. It is the value an AclEntry 0.2 carries in `role`.";
305
+ readonly type: "string";
306
+ readonly pattern: "^[a-z][a-z0-9-]{0,63}$";
307
+ };
308
+ readonly CapabilityRef: {
309
+ readonly title: "CapabilityRef";
310
+ readonly description: "A capability, optionally qualified by a resource. Used where a capability is named but not granted — a role's ceiling, a role's approve ceiling, an entry's approvable capabilities. An unqualified reference covers every resource of the capability's kind.";
311
+ readonly type: "object";
312
+ readonly additionalProperties: false;
313
+ readonly required: readonly ["capability"];
314
+ readonly properties: {
315
+ readonly capability: {
316
+ readonly $ref: "#/$defs/Capability";
317
+ };
318
+ readonly resource: {
319
+ readonly $ref: "#/$defs/ResourceQualifier";
320
+ readonly description: "Optional qualifier. Absent covers every resource of the capability's kind.";
321
+ };
322
+ };
323
+ };
324
+ readonly ResourceQualifier: {
325
+ readonly title: "ResourceQualifier";
326
+ readonly description: "Opaque qualifier naming the part of the maintainer's resources a capability applies to (e.g. `git-ns:github.com/acme`, `git-repo:github.com/acme/r#4211`, `policy:join`). Its grammar and containment rule are the maintainer's: a qualified capability covers the named resource and the resources inside it. A qualifier MUST NOT be read as widening the entry's act scope.";
327
+ readonly type: "string";
328
+ readonly minLength: 1;
329
+ readonly maxLength: 512;
330
+ };
331
+ readonly Capability: {
332
+ readonly title: "Capability";
333
+ readonly description: "Opaque identifier of one administrative power in the maintainer's capability registry — lowercase dot-separated segments (e.g. `keys.sign`, `vtc.roles.assign`, `git.repo.manage`). A consumer MUST NOT treat a capability it does not recognise as granted.";
334
+ readonly type: "string";
335
+ readonly minLength: 1;
336
+ readonly maxLength: 128;
337
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)*$";
338
+ };
339
+ };
340
+ };
341
+ /**
342
+ * SPEC.md §7.2 policy for the request variant, from this specification's
343
+ * front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
344
+ * per-specification and cannot be derived from the document alone, and
345
+ * item 2 needs the schema this carries.
346
+ */
347
+ export declare const SPEC: {
348
+ readonly typeUri: "https://trusttasks.org/spec/vtc/roles/show/0.1";
349
+ readonly isBearer: false;
350
+ readonly isProofRequired: false;
351
+ readonly isRecipientRequired: true;
352
+ readonly isIssuedAtRequired: false;
353
+ readonly payloadSchema: {
354
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
355
+ readonly $id: "https://trusttasks.org/spec/vtc/roles/show/0.1";
356
+ readonly title: "VTC Roles — Show — payload";
357
+ readonly description: "Fetch one administrative role of a VTC by name. The outer document members are owned by the framework — SPEC §6.3.";
358
+ readonly type: "object";
359
+ readonly additionalProperties: false;
360
+ readonly required: readonly ["name"];
361
+ readonly properties: {
362
+ readonly name: {
363
+ readonly $ref: "#/$defs/RoleName";
364
+ readonly description: "Name of the role, built-in or custom.";
365
+ };
366
+ readonly ext: {
367
+ readonly $ref: "#/$defs/Ext";
368
+ readonly description: "Ecosystem-defined extension members per SPEC.md §4.5.1.";
369
+ };
370
+ };
371
+ readonly $defs: {
372
+ readonly Response: {
373
+ readonly $anchor: "response";
374
+ readonly title: "VTC Roles — Show — response payload";
375
+ readonly description: "The success response to a vtc/roles/show/0.1 request. Carried in a Trust Task document whose type is https://trusttasks.org/spec/vtc/roles/show/0.1#response.";
376
+ readonly type: "object";
377
+ readonly additionalProperties: false;
378
+ readonly required: readonly ["role"];
379
+ readonly properties: {
380
+ readonly role: {
381
+ readonly $ref: "#/$defs/RoleDefinition";
382
+ readonly description: "The role record.";
383
+ };
384
+ readonly holders: {
385
+ readonly type: "integer";
386
+ readonly minimum: 0;
387
+ readonly description: "Optional: the number of ACL entries currently holding this role. A count, never a list of subjects. A VTC MAY omit it where the querying party may not learn it.";
388
+ };
389
+ readonly ext: {
390
+ readonly $ref: "#/$defs/Ext";
391
+ readonly description: "Ecosystem-defined extension members per SPEC.md §4.5.1.";
392
+ };
393
+ };
394
+ };
395
+ readonly Ext: {
396
+ readonly title: "Ext";
397
+ 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.";
398
+ readonly type: "object";
399
+ readonly minProperties: 1;
400
+ readonly additionalProperties: true;
401
+ readonly propertyNames: {
402
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
403
+ };
404
+ };
405
+ readonly RoleDefinition: {
406
+ readonly title: "RoleDefinition";
407
+ readonly description: "One administrative role of a VTC: a name, the CEILING of capabilities an entry holding the role may hold, and the approve ceiling of capabilities it may approve.\n\nA ROLE IS A CEILING, NOT A GRANT. It states the most an entry with this role could be allowed; the entry's own `capabilities` say what it does hold, and may be narrower. An entry's effective capabilities are this whole `ceiling` where the entry states `capabilities: {scope: ceiling}`, nothing where it states `none`, and this `ceiling` ∩ its listed grants (plus any additive grant) where it states `listed`. Holding the role confers nothing an entry has not been granted. Likewise `approveScope` bounds what an entry may approve: the entry's `approveCapabilities` select from it (`ceiling` = all of it, `listed` = an intersection, absent or `none` = nothing), and the entry's `approve` scope must not be none for any of it to apply.\n\nNO WILDCARDS. A ceiling lists its capabilities explicitly, even where it is meant to be \"everything\"; a role whose ceiling is empty holds no capability, and one whose approve ceiling is empty approves none. Built-in roles whose intent is the whole registry enumerate it, and their records grow when the registry grows — by release, never by policy.\n\nBUILT-IN ROLES (`builtIn: true`) are fixed by the VTC implementation and MUST NOT be changed or deleted through vtc/roles/define or vtc/roles/delete. The built-in set, with the ceilings a VTC is expected to ship (descriptive; the authoritative ceiling is the record the VTC returns):\n- `community-admin` — ceiling: every `vtc.*` capability and `git.ns.admin` unqualified; approve ceiling: every capability. With its full ceiling it is the community's unrestricted administrator.\n- `moderator` — ceiling: `vtc.members.manage`, `vtc.join.decide`, `vtc.invitations.manage`; approve ceiling: the same.\n- `vetting-lead` — ceiling: `vtc.vetting.manage` (an entry may qualify it by criterion); approve ceiling: `vtc.vetting.manage`, so vetting leads approve vetter grants and other vetting leads at their qualifier.\n- `repo-manager` — ceiling: `git.repo.manage` and `git.ns.admin` (held qualified by namespace or repository); approve ceiling: the same, at the same qualifier.\n- `credential-officer` — ceiling: `vtc.credentials.issue`, `vtc.credentials.revoke`; approve ceiling: the same.\n- `auditor` — ceiling: `vtc.audit.read`; approve ceiling: none.\n- `approver` — ceiling: none (an entry holding it states `act: {scope: none}`); approve ceiling: every capability, narrowed by the entry's `approveCapabilities` — the least-privilege approver.\n\nCUSTOM ROLES (`builtIn: false`) are created, changed and deleted by a community through vtc/roles/define and vtc/roles/delete. A VTC implementing this family takes those changes only through an N-of-M approval among its administrators, never through policy (Rego or otherwise) — authority-defining records are host-enforced, and policy may only refuse. That is a description of the VTC's model, not a requirement this schema can carry. An entry holds at most one administrative role; a combination (repo manager AND vetting lead) is expressed as a custom role.";
408
+ readonly type: "object";
409
+ readonly additionalProperties: false;
410
+ readonly required: readonly ["name", "builtIn", "ceiling", "approveScope"];
411
+ readonly properties: {
412
+ readonly name: {
413
+ readonly $ref: "#/$defs/RoleName";
414
+ };
415
+ readonly builtIn: {
416
+ readonly type: "boolean";
417
+ readonly description: "`true` for a role fixed by the VTC implementation, which cannot be changed or deleted; `false` for a community-defined custom role.";
418
+ };
419
+ readonly description: {
420
+ readonly type: "string";
421
+ readonly maxLength: 512;
422
+ readonly description: "Optional human-readable description. Confers nothing.";
423
+ };
424
+ readonly ceiling: {
425
+ readonly type: "array";
426
+ readonly items: {
427
+ readonly $ref: "#/$defs/CapabilityRef";
428
+ };
429
+ readonly description: "The capabilities an entry holding this role MAY hold, each optionally qualified by a resource. An entry may hold a capability at a qualifier inside the ceiling's (a ceiling of `git.repo.manage` unqualified admits `git.repo.manage @ git-ns:github.com/acme`), never outside it. EMPTY means the role admits no capability. A capability the VTC classes as additive never appears in a ceiling — an additive capability is by definition one no role implies.";
430
+ };
431
+ readonly approveScope: {
432
+ readonly type: "array";
433
+ readonly items: {
434
+ readonly $ref: "#/$defs/CapabilityRef";
435
+ };
436
+ readonly description: "The capabilities an entry holding this role MAY approve an action needing — the role's approve ceiling, independent of `ceiling`. An entry approves all of it with `approveCapabilities: {scope: ceiling}`, an intersection with `listed`, and nothing when `approveCapabilities` is absent or `none`; the entry's `approve` scope must be other than none for any of it to apply. EMPTY means the role approves nothing.";
437
+ };
438
+ readonly createdAt: {
439
+ readonly type: "string";
440
+ readonly format: "date-time";
441
+ };
442
+ readonly createdBy: {
443
+ readonly type: "string";
444
+ readonly minLength: 1;
445
+ readonly maxLength: 2048;
446
+ readonly description: "VID of the administrator whose request created the role (for a custom role created by approval, the requester). Absent on a built-in role.";
447
+ };
448
+ readonly updatedAt: {
449
+ readonly type: "string";
450
+ readonly format: "date-time";
451
+ };
452
+ readonly updatedBy: {
453
+ readonly type: "string";
454
+ readonly minLength: 1;
455
+ readonly maxLength: 2048;
456
+ readonly description: "VID of the administrator whose request last replaced the role. Absent on a built-in role and on a custom role never replaced.";
457
+ };
458
+ readonly ext: {
459
+ readonly $ref: "#/$defs/Ext";
460
+ readonly description: "Ecosystem-defined extension members per SPEC.md §4.5.1. An extension member MUST NOT be interpreted as widening a ceiling.";
461
+ };
462
+ };
463
+ };
464
+ readonly RoleName: {
465
+ readonly title: "RoleName";
466
+ readonly description: "A role identifier: lowercase, hyphen-separated, at most 64 characters. Compared by exact string equality. It is the value an AclEntry 0.2 carries in `role`.";
467
+ readonly type: "string";
468
+ readonly pattern: "^[a-z][a-z0-9-]{0,63}$";
469
+ };
470
+ readonly CapabilityRef: {
471
+ readonly title: "CapabilityRef";
472
+ readonly description: "A capability, optionally qualified by a resource. Used where a capability is named but not granted — a role's ceiling, a role's approve ceiling, an entry's approvable capabilities. An unqualified reference covers every resource of the capability's kind.";
473
+ readonly type: "object";
474
+ readonly additionalProperties: false;
475
+ readonly required: readonly ["capability"];
476
+ readonly properties: {
477
+ readonly capability: {
478
+ readonly $ref: "#/$defs/Capability";
479
+ };
480
+ readonly resource: {
481
+ readonly $ref: "#/$defs/ResourceQualifier";
482
+ readonly description: "Optional qualifier. Absent covers every resource of the capability's kind.";
483
+ };
484
+ };
485
+ };
486
+ readonly ResourceQualifier: {
487
+ readonly title: "ResourceQualifier";
488
+ readonly description: "Opaque qualifier naming the part of the maintainer's resources a capability applies to (e.g. `git-ns:github.com/acme`, `git-repo:github.com/acme/r#4211`, `policy:join`). Its grammar and containment rule are the maintainer's: a qualified capability covers the named resource and the resources inside it. A qualifier MUST NOT be read as widening the entry's act scope.";
489
+ readonly type: "string";
490
+ readonly minLength: 1;
491
+ readonly maxLength: 512;
492
+ };
493
+ readonly Capability: {
494
+ readonly title: "Capability";
495
+ readonly description: "Opaque identifier of one administrative power in the maintainer's capability registry — lowercase dot-separated segments (e.g. `keys.sign`, `vtc.roles.assign`, `git.repo.manage`). A consumer MUST NOT treat a capability it does not recognise as granted.";
496
+ readonly type: "string";
497
+ readonly minLength: 1;
498
+ readonly maxLength: 128;
499
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)*$";
500
+ };
501
+ };
502
+ };
503
+ };
504
+ /**
505
+ * SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
506
+ * tracks the *issuer* party's requirement because a response swaps the
507
+ * parties (§7.3 item 5).
508
+ */
509
+ export declare const RESPONSE_SPEC: {
510
+ readonly typeUri: "https://trusttasks.org/spec/vtc/roles/show/0.1#response";
511
+ readonly isBearer: false;
512
+ readonly isProofRequired: false;
513
+ readonly isRecipientRequired: true;
514
+ readonly isIssuedAtRequired: false;
515
+ readonly payloadSchema: {
516
+ readonly $schema: "https://json-schema.org/draft/2020-12/schema";
517
+ readonly $ref: "#/$defs/Response";
518
+ readonly $defs: {
519
+ readonly Response: {
520
+ readonly $anchor: "response";
521
+ readonly title: "VTC Roles — Show — response payload";
522
+ readonly description: "The success response to a vtc/roles/show/0.1 request. Carried in a Trust Task document whose type is https://trusttasks.org/spec/vtc/roles/show/0.1#response.";
523
+ readonly type: "object";
524
+ readonly additionalProperties: false;
525
+ readonly required: readonly ["role"];
526
+ readonly properties: {
527
+ readonly role: {
528
+ readonly $ref: "#/$defs/RoleDefinition";
529
+ readonly description: "The role record.";
530
+ };
531
+ readonly holders: {
532
+ readonly type: "integer";
533
+ readonly minimum: 0;
534
+ readonly description: "Optional: the number of ACL entries currently holding this role. A count, never a list of subjects. A VTC MAY omit it where the querying party may not learn it.";
535
+ };
536
+ readonly ext: {
537
+ readonly $ref: "#/$defs/Ext";
538
+ readonly description: "Ecosystem-defined extension members per SPEC.md §4.5.1.";
539
+ };
540
+ };
541
+ };
542
+ readonly Ext: {
543
+ readonly title: "Ext";
544
+ 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.";
545
+ readonly type: "object";
546
+ readonly minProperties: 1;
547
+ readonly additionalProperties: true;
548
+ readonly propertyNames: {
549
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
550
+ };
551
+ };
552
+ readonly RoleDefinition: {
553
+ readonly title: "RoleDefinition";
554
+ readonly description: "One administrative role of a VTC: a name, the CEILING of capabilities an entry holding the role may hold, and the approve ceiling of capabilities it may approve.\n\nA ROLE IS A CEILING, NOT A GRANT. It states the most an entry with this role could be allowed; the entry's own `capabilities` say what it does hold, and may be narrower. An entry's effective capabilities are this whole `ceiling` where the entry states `capabilities: {scope: ceiling}`, nothing where it states `none`, and this `ceiling` ∩ its listed grants (plus any additive grant) where it states `listed`. Holding the role confers nothing an entry has not been granted. Likewise `approveScope` bounds what an entry may approve: the entry's `approveCapabilities` select from it (`ceiling` = all of it, `listed` = an intersection, absent or `none` = nothing), and the entry's `approve` scope must not be none for any of it to apply.\n\nNO WILDCARDS. A ceiling lists its capabilities explicitly, even where it is meant to be \"everything\"; a role whose ceiling is empty holds no capability, and one whose approve ceiling is empty approves none. Built-in roles whose intent is the whole registry enumerate it, and their records grow when the registry grows — by release, never by policy.\n\nBUILT-IN ROLES (`builtIn: true`) are fixed by the VTC implementation and MUST NOT be changed or deleted through vtc/roles/define or vtc/roles/delete. The built-in set, with the ceilings a VTC is expected to ship (descriptive; the authoritative ceiling is the record the VTC returns):\n- `community-admin` — ceiling: every `vtc.*` capability and `git.ns.admin` unqualified; approve ceiling: every capability. With its full ceiling it is the community's unrestricted administrator.\n- `moderator` — ceiling: `vtc.members.manage`, `vtc.join.decide`, `vtc.invitations.manage`; approve ceiling: the same.\n- `vetting-lead` — ceiling: `vtc.vetting.manage` (an entry may qualify it by criterion); approve ceiling: `vtc.vetting.manage`, so vetting leads approve vetter grants and other vetting leads at their qualifier.\n- `repo-manager` — ceiling: `git.repo.manage` and `git.ns.admin` (held qualified by namespace or repository); approve ceiling: the same, at the same qualifier.\n- `credential-officer` — ceiling: `vtc.credentials.issue`, `vtc.credentials.revoke`; approve ceiling: the same.\n- `auditor` — ceiling: `vtc.audit.read`; approve ceiling: none.\n- `approver` — ceiling: none (an entry holding it states `act: {scope: none}`); approve ceiling: every capability, narrowed by the entry's `approveCapabilities` — the least-privilege approver.\n\nCUSTOM ROLES (`builtIn: false`) are created, changed and deleted by a community through vtc/roles/define and vtc/roles/delete. A VTC implementing this family takes those changes only through an N-of-M approval among its administrators, never through policy (Rego or otherwise) — authority-defining records are host-enforced, and policy may only refuse. That is a description of the VTC's model, not a requirement this schema can carry. An entry holds at most one administrative role; a combination (repo manager AND vetting lead) is expressed as a custom role.";
555
+ readonly type: "object";
556
+ readonly additionalProperties: false;
557
+ readonly required: readonly ["name", "builtIn", "ceiling", "approveScope"];
558
+ readonly properties: {
559
+ readonly name: {
560
+ readonly $ref: "#/$defs/RoleName";
561
+ };
562
+ readonly builtIn: {
563
+ readonly type: "boolean";
564
+ readonly description: "`true` for a role fixed by the VTC implementation, which cannot be changed or deleted; `false` for a community-defined custom role.";
565
+ };
566
+ readonly description: {
567
+ readonly type: "string";
568
+ readonly maxLength: 512;
569
+ readonly description: "Optional human-readable description. Confers nothing.";
570
+ };
571
+ readonly ceiling: {
572
+ readonly type: "array";
573
+ readonly items: {
574
+ readonly $ref: "#/$defs/CapabilityRef";
575
+ };
576
+ readonly description: "The capabilities an entry holding this role MAY hold, each optionally qualified by a resource. An entry may hold a capability at a qualifier inside the ceiling's (a ceiling of `git.repo.manage` unqualified admits `git.repo.manage @ git-ns:github.com/acme`), never outside it. EMPTY means the role admits no capability. A capability the VTC classes as additive never appears in a ceiling — an additive capability is by definition one no role implies.";
577
+ };
578
+ readonly approveScope: {
579
+ readonly type: "array";
580
+ readonly items: {
581
+ readonly $ref: "#/$defs/CapabilityRef";
582
+ };
583
+ readonly description: "The capabilities an entry holding this role MAY approve an action needing — the role's approve ceiling, independent of `ceiling`. An entry approves all of it with `approveCapabilities: {scope: ceiling}`, an intersection with `listed`, and nothing when `approveCapabilities` is absent or `none`; the entry's `approve` scope must be other than none for any of it to apply. EMPTY means the role approves nothing.";
584
+ };
585
+ readonly createdAt: {
586
+ readonly type: "string";
587
+ readonly format: "date-time";
588
+ };
589
+ readonly createdBy: {
590
+ readonly type: "string";
591
+ readonly minLength: 1;
592
+ readonly maxLength: 2048;
593
+ readonly description: "VID of the administrator whose request created the role (for a custom role created by approval, the requester). Absent on a built-in role.";
594
+ };
595
+ readonly updatedAt: {
596
+ readonly type: "string";
597
+ readonly format: "date-time";
598
+ };
599
+ readonly updatedBy: {
600
+ readonly type: "string";
601
+ readonly minLength: 1;
602
+ readonly maxLength: 2048;
603
+ readonly description: "VID of the administrator whose request last replaced the role. Absent on a built-in role and on a custom role never replaced.";
604
+ };
605
+ readonly ext: {
606
+ readonly $ref: "#/$defs/Ext";
607
+ readonly description: "Ecosystem-defined extension members per SPEC.md §4.5.1. An extension member MUST NOT be interpreted as widening a ceiling.";
608
+ };
609
+ };
610
+ };
611
+ readonly RoleName: {
612
+ readonly title: "RoleName";
613
+ readonly description: "A role identifier: lowercase, hyphen-separated, at most 64 characters. Compared by exact string equality. It is the value an AclEntry 0.2 carries in `role`.";
614
+ readonly type: "string";
615
+ readonly pattern: "^[a-z][a-z0-9-]{0,63}$";
616
+ };
617
+ readonly CapabilityRef: {
618
+ readonly title: "CapabilityRef";
619
+ readonly description: "A capability, optionally qualified by a resource. Used where a capability is named but not granted — a role's ceiling, a role's approve ceiling, an entry's approvable capabilities. An unqualified reference covers every resource of the capability's kind.";
620
+ readonly type: "object";
621
+ readonly additionalProperties: false;
622
+ readonly required: readonly ["capability"];
623
+ readonly properties: {
624
+ readonly capability: {
625
+ readonly $ref: "#/$defs/Capability";
626
+ };
627
+ readonly resource: {
628
+ readonly $ref: "#/$defs/ResourceQualifier";
629
+ readonly description: "Optional qualifier. Absent covers every resource of the capability's kind.";
630
+ };
631
+ };
632
+ };
633
+ readonly ResourceQualifier: {
634
+ readonly title: "ResourceQualifier";
635
+ readonly description: "Opaque qualifier naming the part of the maintainer's resources a capability applies to (e.g. `git-ns:github.com/acme`, `git-repo:github.com/acme/r#4211`, `policy:join`). Its grammar and containment rule are the maintainer's: a qualified capability covers the named resource and the resources inside it. A qualifier MUST NOT be read as widening the entry's act scope.";
636
+ readonly type: "string";
637
+ readonly minLength: 1;
638
+ readonly maxLength: 512;
639
+ };
640
+ readonly Capability: {
641
+ readonly title: "Capability";
642
+ readonly description: "Opaque identifier of one administrative power in the maintainer's capability registry — lowercase dot-separated segments (e.g. `keys.sign`, `vtc.roles.assign`, `git.repo.manage`). A consumer MUST NOT treat a capability it does not recognise as granted.";
643
+ readonly type: "string";
644
+ readonly minLength: 1;
645
+ readonly maxLength: 128;
646
+ readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)*$";
647
+ };
648
+ };
649
+ };
650
+ };
651
+ //# sourceMappingURL=payload.d.ts.map