@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.
- package/CHANGELOG.md +80 -0
- package/dist/_shared/components.d.ts +434 -1
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/acl/_shared/0.1/acl-entry.d.ts +1 -1
- package/dist/acl/_shared/0.1/acl-entry.d.ts.map +1 -1
- package/dist/acl/_shared/0.2/acl-entry.d.ts +22 -0
- package/dist/acl/_shared/0.2/acl-entry.d.ts.map +1 -0
- package/dist/acl/_shared/0.2/acl-entry.js +6 -0
- package/dist/acl/_shared/0.2/acl-entry.js.map +1 -0
- package/dist/acl/change-role/0.1/payload.d.ts +1 -1
- package/dist/acl/change-role/0.1/payload.d.ts.map +1 -1
- package/dist/acl/change-role/0.2/payload.d.ts +1679 -0
- package/dist/acl/change-role/0.2/payload.d.ts.map +1 -0
- package/dist/acl/change-role/0.2/payload.js +955 -0
- package/dist/acl/change-role/0.2/payload.js.map +1 -0
- package/dist/acl/grant/0.1/payload.d.ts +1 -1
- package/dist/acl/grant/0.1/payload.d.ts.map +1 -1
- package/dist/acl/grant/0.2/payload.d.ts +1649 -0
- package/dist/acl/grant/0.2/payload.d.ts.map +1 -0
- package/dist/acl/grant/0.2/payload.js +942 -0
- package/dist/acl/grant/0.2/payload.js.map +1 -0
- package/dist/acl/list/0.1/payload.d.ts +1 -1
- package/dist/acl/list/0.1/payload.d.ts.map +1 -1
- package/dist/acl/list/0.2/payload.d.ts +1853 -0
- package/dist/acl/list/0.2/payload.d.ts.map +1 -0
- package/dist/acl/list/0.2/payload.js +1041 -0
- package/dist/acl/list/0.2/payload.js.map +1 -0
- package/dist/acl/revoke/0.1/payload.d.ts +1 -1
- package/dist/acl/revoke/0.1/payload.d.ts.map +1 -1
- package/dist/acl/revoke/0.2/payload.d.ts +1844 -0
- package/dist/acl/revoke/0.2/payload.d.ts.map +1 -0
- package/dist/acl/revoke/0.2/payload.js +1052 -0
- package/dist/acl/revoke/0.2/payload.js.map +1 -0
- package/dist/acl/show/0.1/payload.d.ts +1 -1
- package/dist/acl/show/0.1/payload.d.ts.map +1 -1
- package/dist/acl/show/0.2/payload.d.ts +1689 -0
- package/dist/acl/show/0.2/payload.d.ts.map +1 -0
- package/dist/acl/show/0.2/payload.js +968 -0
- package/dist/acl/show/0.2/payload.js.map +1 -0
- package/dist/acl/swap-key/0.1/payload.d.ts +1 -1
- package/dist/acl/swap-key/0.1/payload.d.ts.map +1 -1
- package/dist/acl/update/0.1/payload.d.ts +1 -1
- package/dist/acl/update/0.1/payload.d.ts.map +1 -1
- package/dist/acl/update/0.2/payload.d.ts +1784 -0
- package/dist/acl/update/0.2/payload.d.ts.map +1 -0
- package/dist/acl/update/0.2/payload.js +1005 -0
- package/dist/acl/update/0.2/payload.js.map +1 -0
- package/dist/auth/signing-key/authorize/0.1/payload.d.ts +199 -0
- package/dist/auth/signing-key/authorize/0.1/payload.d.ts.map +1 -0
- package/dist/auth/signing-key/authorize/0.1/payload.js +108 -0
- package/dist/auth/signing-key/authorize/0.1/payload.js.map +1 -0
- package/dist/auth/signing-key/enroll/0.2/payload.d.ts +569 -0
- package/dist/auth/signing-key/enroll/0.2/payload.d.ts.map +1 -0
- package/dist/auth/signing-key/enroll/0.2/payload.js +315 -0
- package/dist/auth/signing-key/enroll/0.2/payload.js.map +1 -0
- package/dist/auth/step-up/approve-request/0.4/payload.d.ts +672 -0
- package/dist/auth/step-up/approve-request/0.4/payload.d.ts.map +1 -0
- package/dist/auth/step-up/approve-request/0.4/payload.js +373 -0
- package/dist/auth/step-up/approve-request/0.4/payload.js.map +1 -0
- package/dist/auth/step-up/approve-response/0.6/payload.d.ts +974 -0
- package/dist/auth/step-up/approve-response/0.6/payload.d.ts.map +1 -0
- package/dist/auth/step-up/approve-response/0.6/payload.js +552 -0
- package/dist/auth/step-up/approve-response/0.6/payload.js.map +1 -0
- package/dist/auth/step-up/approver/_shared/0.1/approver.d.ts +16 -0
- package/dist/auth/step-up/approver/_shared/0.1/approver.d.ts.map +1 -0
- package/dist/auth/step-up/approver/_shared/0.1/approver.js +6 -0
- package/dist/auth/step-up/approver/_shared/0.1/approver.js.map +1 -0
- package/dist/auth/step-up/approver/attest/0.1/payload.d.ts +174 -0
- package/dist/auth/step-up/approver/attest/0.1/payload.d.ts.map +1 -0
- package/dist/auth/step-up/approver/attest/0.1/payload.js +97 -0
- package/dist/auth/step-up/approver/attest/0.1/payload.js.map +1 -0
- package/dist/auth/step-up/approver/enroll/0.1/payload.d.ts +503 -0
- package/dist/auth/step-up/approver/enroll/0.1/payload.d.ts.map +1 -0
- package/dist/auth/step-up/approver/enroll/0.1/payload.js +285 -0
- package/dist/auth/step-up/approver/enroll/0.1/payload.js.map +1 -0
- package/dist/auth/step-up/approver/invite/0.1/payload.d.ts +375 -0
- package/dist/auth/step-up/approver/invite/0.1/payload.d.ts.map +1 -0
- package/dist/auth/step-up/approver/invite/0.1/payload.js +200 -0
- package/dist/auth/step-up/approver/invite/0.1/payload.js.map +1 -0
- package/dist/auth/step-up/approver/list/0.1/payload.d.ts +477 -0
- package/dist/auth/step-up/approver/list/0.1/payload.d.ts.map +1 -0
- package/dist/auth/step-up/approver/list/0.1/payload.js +272 -0
- package/dist/auth/step-up/approver/list/0.1/payload.js.map +1 -0
- package/dist/auth/step-up/approver/redeem/finish/0.1/payload.d.ts +512 -0
- package/dist/auth/step-up/approver/redeem/finish/0.1/payload.d.ts.map +1 -0
- package/dist/auth/step-up/approver/redeem/finish/0.1/payload.js +290 -0
- package/dist/auth/step-up/approver/redeem/finish/0.1/payload.js.map +1 -0
- package/dist/auth/step-up/approver/redeem/start/0.1/payload.d.ts +343 -0
- package/dist/auth/step-up/approver/redeem/start/0.1/payload.d.ts.map +1 -0
- package/dist/auth/step-up/approver/redeem/start/0.1/payload.js +187 -0
- package/dist/auth/step-up/approver/redeem/start/0.1/payload.js.map +1 -0
- package/dist/auth/step-up/approver/revoke/0.1/payload.d.ts +534 -0
- package/dist/auth/step-up/approver/revoke/0.1/payload.d.ts.map +1 -0
- package/dist/auth/step-up/approver/revoke/0.1/payload.js +301 -0
- package/dist/auth/step-up/approver/revoke/0.1/payload.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -1
- package/dist/task-consent/decision/0.2/payload.d.ts +775 -0
- package/dist/task-consent/decision/0.2/payload.d.ts.map +1 -0
- package/dist/task-consent/decision/0.2/payload.js +450 -0
- package/dist/task-consent/decision/0.2/payload.js.map +1 -0
- package/dist/vtc/admin/actions/_shared/0.1/action.d.ts +24 -0
- package/dist/vtc/admin/actions/_shared/0.1/action.d.ts.map +1 -0
- package/dist/vtc/admin/actions/_shared/0.1/action.js +6 -0
- package/dist/vtc/admin/actions/_shared/0.1/action.js.map +1 -0
- package/dist/vtc/admin/actions/acknowledge/0.1/payload.d.ts +1012 -0
- package/dist/vtc/admin/actions/acknowledge/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/admin/actions/acknowledge/0.1/payload.js +636 -0
- package/dist/vtc/admin/actions/acknowledge/0.1/payload.js.map +1 -0
- package/dist/vtc/admin/actions/cancel/0.1/payload.d.ts +1026 -0
- package/dist/vtc/admin/actions/cancel/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/admin/actions/cancel/0.1/payload.js +641 -0
- package/dist/vtc/admin/actions/cancel/0.1/payload.js.map +1 -0
- package/dist/vtc/admin/actions/list/0.1/payload.d.ts +1200 -0
- package/dist/vtc/admin/actions/list/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/admin/actions/list/0.1/payload.js +726 -0
- package/dist/vtc/admin/actions/list/0.1/payload.js.map +1 -0
- package/dist/vtc/admin/actions/show/0.1/payload.d.ts +1012 -0
- package/dist/vtc/admin/actions/show/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/admin/actions/show/0.1/payload.js +636 -0
- package/dist/vtc/admin/actions/show/0.1/payload.js.map +1 -0
- package/dist/vtc/install/claim/finish/0.3/payload.d.ts +379 -0
- package/dist/vtc/install/claim/finish/0.3/payload.d.ts.map +1 -0
- package/dist/vtc/install/claim/finish/0.3/payload.js +205 -0
- package/dist/vtc/install/claim/finish/0.3/payload.js.map +1 -0
- package/dist/vtc/install/claim/start/0.3/payload.d.ts +368 -0
- package/dist/vtc/install/claim/start/0.3/payload.d.ts.map +1 -0
- package/dist/vtc/install/claim/start/0.3/payload.js +201 -0
- package/dist/vtc/install/claim/start/0.3/payload.js.map +1 -0
- package/dist/vtc/members/authority-reduced-notice/0.1/payload.d.ts +208 -0
- package/dist/vtc/members/authority-reduced-notice/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/members/authority-reduced-notice/0.1/payload.js +112 -0
- package/dist/vtc/members/authority-reduced-notice/0.1/payload.js.map +1 -0
- package/dist/vtc/roles/_shared/0.1/role.d.ts +16 -0
- package/dist/vtc/roles/_shared/0.1/role.d.ts.map +1 -0
- package/dist/vtc/roles/_shared/0.1/role.js +6 -0
- package/dist/vtc/roles/_shared/0.1/role.js.map +1 -0
- package/dist/vtc/roles/define/0.1/payload.d.ts +703 -0
- package/dist/vtc/roles/define/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/roles/define/0.1/payload.js +371 -0
- package/dist/vtc/roles/define/0.1/payload.js.map +1 -0
- package/dist/vtc/roles/delete/0.1/payload.d.ts +281 -0
- package/dist/vtc/roles/delete/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/roles/delete/0.1/payload.js +152 -0
- package/dist/vtc/roles/delete/0.1/payload.js.map +1 -0
- package/dist/vtc/roles/list/0.1/payload.d.ts +639 -0
- package/dist/vtc/roles/list/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/roles/list/0.1/payload.js +345 -0
- package/dist/vtc/roles/list/0.1/payload.js.map +1 -0
- package/dist/vtc/roles/show/0.1/payload.d.ts +651 -0
- package/dist/vtc/roles/show/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/roles/show/0.1/payload.js +351 -0
- package/dist/vtc/roles/show/0.1/payload.js.map +1 -0
- package/package.json +1 -1
- package/src/_shared/components.ts +440 -1
- package/src/acl/_shared/0.1/acl-entry.ts +1 -1
- package/src/acl/_shared/0.2/acl-entry.ts +23 -0
- package/src/acl/change-role/0.1/payload.ts +1 -1
- package/src/acl/change-role/0.2/payload.ts +1011 -0
- package/src/acl/grant/0.1/payload.ts +1 -1
- package/src/acl/grant/0.2/payload.ts +990 -0
- package/src/acl/list/0.1/payload.ts +1 -1
- package/src/acl/list/0.2/payload.ts +1125 -0
- package/src/acl/revoke/0.1/payload.ts +1 -1
- package/src/acl/revoke/0.2/payload.ts +1122 -0
- package/src/acl/show/0.1/payload.ts +1 -1
- package/src/acl/show/0.2/payload.ts +1016 -0
- package/src/acl/swap-key/0.1/payload.ts +1 -1
- package/src/acl/update/0.1/payload.ts +1 -1
- package/src/acl/update/0.2/payload.ts +1094 -0
- package/src/auth/signing-key/authorize/0.1/payload.ts +141 -0
- package/src/auth/signing-key/enroll/0.2/payload.ts +365 -0
- package/src/auth/step-up/approve-request/0.4/payload.ts +461 -0
- package/src/auth/step-up/approve-response/0.6/payload.ts +648 -0
- package/src/auth/step-up/approver/_shared/0.1/approver.ts +17 -0
- package/src/auth/step-up/approver/attest/0.1/payload.ts +135 -0
- package/src/auth/step-up/approver/enroll/0.1/payload.ts +329 -0
- package/src/auth/step-up/approver/invite/0.1/payload.ts +258 -0
- package/src/auth/step-up/approver/list/0.1/payload.ts +318 -0
- package/src/auth/step-up/approver/redeem/finish/0.1/payload.ts +337 -0
- package/src/auth/step-up/approver/redeem/start/0.1/payload.ts +241 -0
- package/src/auth/step-up/approver/revoke/0.1/payload.ts +352 -0
- package/src/index.ts +33 -0
- package/src/task-consent/decision/0.2/payload.ts +537 -0
- package/src/vtc/admin/actions/_shared/0.1/action.ts +25 -0
- package/src/vtc/admin/actions/acknowledge/0.1/payload.ts +671 -0
- package/src/vtc/admin/actions/cancel/0.1/payload.ts +680 -0
- package/src/vtc/admin/actions/list/0.1/payload.ts +795 -0
- package/src/vtc/admin/actions/show/0.1/payload.ts +671 -0
- package/src/vtc/install/claim/finish/0.3/payload.ts +253 -0
- package/src/vtc/install/claim/start/0.3/payload.ts +256 -0
- package/src/vtc/members/authority-reduced-notice/0.1/payload.ts +162 -0
- package/src/vtc/roles/_shared/0.1/role.ts +17 -0
- package/src/vtc/roles/define/0.1/payload.ts +435 -0
- package/src/vtc/roles/delete/0.1/payload.ts +200 -0
- package/src/vtc/roles/list/0.1/payload.ts +389 -0
- package/src/vtc/roles/show/0.1/payload.ts +399 -0
|
@@ -20,6 +20,10 @@ export type AcceptsCriterionId = string;
|
|
|
20
20
|
* The account's role at the mediator. `standard` is an ordinary served account; `admin`/`rootAdmin` may administer other accounts; `mediator` is the mediator's own account. Only a rootAdmin may assign or modify the rootAdmin role.
|
|
21
21
|
*/
|
|
22
22
|
export type AccountType = "standard" | "admin" | "rootAdmin" | "mediator";
|
|
23
|
+
/**
|
|
24
|
+
* 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.
|
|
25
|
+
*/
|
|
26
|
+
export type ActionId = string;
|
|
23
27
|
/**
|
|
24
28
|
* How the community decides a submission that meets the criterion. `automatic`: it admits the applicant without a person deciding. `review`: it refers the submission to an administrator, who admits or rejects it; meeting the criterion never admits by itself. Which a criterion uses is the community's policy; this definition prefers neither.
|
|
25
29
|
*/
|
|
@@ -36,6 +40,18 @@ export type Admission = "automatic" | "review";
|
|
|
36
40
|
* Deliberately not a duration. A room that promised "daily" would be making a claim its owner's availability cannot keep, and a member comparing against a clock would read an owner's holiday as a host's misbehaviour.
|
|
37
41
|
*/
|
|
38
42
|
export type AnchorCadence = "never" | "renewal" | "manual";
|
|
43
|
+
/**
|
|
44
|
+
* An explicit statement of the capabilities a subject may approve. Exactly one of `ceiling` (the role's full approve ceiling), `none`, or `listed` with a NON-EMPTY list of CapabilityRef.
|
|
45
|
+
*/
|
|
46
|
+
export type ApproveCapabilityScope = CapabilityScopeCeiling | CapabilityScopeNone | ApproveCapabilityScopeListed;
|
|
47
|
+
/**
|
|
48
|
+
* A step-up approver, as an Ed25519 `did:key` (`z6Mk…`). `did:key` only, because its document is a function of the key and resolves with no network, so verifying an approver's statement never depends on a fetch, and a key whose DID document could be rewritten after enrolment would not be the key that was enrolled. Distinct from the subject's DID, from every verification method in the subject's DID document, and from every key the subject can sign operations with at the relying party.
|
|
49
|
+
*/
|
|
50
|
+
export type ApproverDid = string;
|
|
51
|
+
/**
|
|
52
|
+
* A human-readable name for where the approver lives — e.g. `Browser plugin — work laptop`. Chosen by the subject (or suggested by an inviter), untrusted, and attributed to its author wherever it is rendered. Absent rather than invented when none was chosen.
|
|
53
|
+
*/
|
|
54
|
+
export type ApproverLabel = string;
|
|
39
55
|
/**
|
|
40
56
|
* The kind of privileged change recorded in the audit log.
|
|
41
57
|
*/
|
|
@@ -50,6 +66,10 @@ export type AuditAction =
|
|
|
50
66
|
| "accountChangeQueueLimits"
|
|
51
67
|
| "adminAdd"
|
|
52
68
|
| "adminStrip";
|
|
69
|
+
/**
|
|
70
|
+
* An explicit authority scope — used for both the act scope and the approve scope of an entry. Exactly one of three shapes, discriminated by `scope`: `all`, `none`, or `contexts` with a NON-EMPTY list. The empty list is not a fourth shape: it is invalid, so a serializer that drops or empties the list produces a document that fails validation rather than one that silently means something else.
|
|
71
|
+
*/
|
|
72
|
+
export type AuthorityScope = AuthorityScopeAll | AuthorityScopeNone | AuthorityScopeContexts;
|
|
53
73
|
/**
|
|
54
74
|
* The control-plane account of a bundle transfer: which algorithm, on what terms, until when. Exactly one of the two shapes — they are mutually exclusive, since StreamDescriptor requires `transportUrl` and `transportToken` and forbids `chunks`, and ChunkedDescriptor requires `chunks` and forbids both.
|
|
55
75
|
*/
|
|
@@ -62,6 +82,14 @@ export type BundleId = string;
|
|
|
62
82
|
* A calendar date, `YYYY-MM-DD` (RFC 3339 full-date), with no time or zone. Compared as a UTC date.
|
|
63
83
|
*/
|
|
64
84
|
export type CalendarDate = string;
|
|
85
|
+
/**
|
|
86
|
+
* An explicit statement of the capabilities an entry holds. Exactly one of three shapes, discriminated by `scope`: `ceiling` (the role's full ceiling), `none`, or `listed` with a NON-EMPTY list of CapabilityGrant. The empty list is invalid, not a fourth shape.
|
|
87
|
+
*/
|
|
88
|
+
export type CapabilityScope = CapabilityScopeCeiling | CapabilityScopeNone | CapabilityScopeListed;
|
|
89
|
+
/**
|
|
90
|
+
* 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.
|
|
91
|
+
*/
|
|
92
|
+
export type Capability_AclV0_2 = string;
|
|
65
93
|
/**
|
|
66
94
|
* Fine-grained capability flag scoped to the device's allowed contexts. See SPEC.md for the full semantics of each. Capability values are additive: a consumer MUST ignore a value it does not recognise rather than reject the binding, and MUST NOT treat an unrecognised value as conferring anything.
|
|
67
95
|
*/
|
|
@@ -132,6 +160,10 @@ export type ConsumerKind_DeviceV0_1 = Companion_DeviceV0_1 | Service_DeviceV0_1;
|
|
|
132
160
|
* Discriminator: is this consumer a user-driven Companion or a headless Service?
|
|
133
161
|
*/
|
|
134
162
|
export type ConsumerKind_DeviceV0_2 = Companion_DeviceV0_2 | Service_DeviceV0_2;
|
|
163
|
+
/**
|
|
164
|
+
* Opaque identifier of one of the maintainer's contexts, compared by the maintainer's own ancestry predicate. Its grammar is the maintainer's.
|
|
165
|
+
*/
|
|
166
|
+
export type ContextPath = string;
|
|
135
167
|
/**
|
|
136
168
|
* An ISO 3166-1 alpha-2 country code, upper case, e.g. `DE`.
|
|
137
169
|
*/
|
|
@@ -262,6 +294,10 @@ export type Effect_ConsentV0_1 = "allow" | "deny";
|
|
|
262
294
|
* The three rights that carry authority over other people's rights: `git.ns.admin`, `git.repo.create` (which makes its holder the owner of every repository they create) and `git.repo.own`. Separation of duties applies to these: nobody grants one to themselves through git-ns/right/grant, or records one for themselves through any other task that grants on the actor's own authority. The explicit self-grant is git-ns/right/break-glass. `git.repo.maintain` and `git.commit.sign` are not elevated.
|
|
263
295
|
*/
|
|
264
296
|
export type ElevatedRight = "git.ns.admin" | "git.repo.create" | "git.repo.own";
|
|
297
|
+
/**
|
|
298
|
+
* The anchor the binding rested on, recorded so an incident review can see how each factor came to exist. `install`: claimed with the community's install token (vtc/install/claim/finish/0.3). `invite`: redeemed from an administrator's invite (auth/step-up/approver/redeem/finish/0.1). `selfService`: added by the subject behind a factor they already held (auth/step-up/approver/enroll/0.1). `offline`: redeemed from an invite minted by the operator with host access while the service was stopped — an `invite`-shaped redemption whose issuer was the host rather than an administrator.
|
|
299
|
+
*/
|
|
300
|
+
export type EnrolledVia = "install" | "invite" | "selfService" | "offline";
|
|
265
301
|
/**
|
|
266
302
|
* Lowercase hex SHA-256 of the whole bundle's bytes. Kept in the hex form the 1.0 descriptor published rather than moved to DigestMultibase, because it is an unchanged member of an existing descriptor and re-encoding it would break every stream producer for no gain in what it checks. For a chunked transfer it is the check over the reassembled bundle, applied after every chunk has verified individually, so that a correct set of chunks assembled in the wrong order is still caught.
|
|
267
303
|
*/
|
|
@@ -371,6 +407,10 @@ export type KeyRoleChangeOutcome = "preview" | "applied" | "pendingApproval";
|
|
|
371
407
|
* Which view of the DID's key roles the caller was given (CONVENTIONS.md §5). `public` — only what the published document and log already reveal to anyone who resolves the DID. `custody` — additionally the VTA's own custody state: pending keys, the custodian record behind each key, overlap deadlines, who initiated and approved each change, and why. The response always states which it is, so a caller never mistakes an absent member for a statement that the thing does not exist.
|
|
372
408
|
*/
|
|
373
409
|
export type KeyRoleProjection = "public" | "custody";
|
|
410
|
+
/**
|
|
411
|
+
* An explicit key scope. Exactly one of three shapes, discriminated by `scope`: `all`, `none`, or `listed` with a NON-EMPTY list of key identifiers. The empty list is invalid, not a fourth shape.
|
|
412
|
+
*/
|
|
413
|
+
export type KeyScope = KeyScopeAll | KeyScopeNone | KeyScopeListed;
|
|
374
414
|
/**
|
|
375
415
|
* Lifecycle state. Only an `active` key may be named in a signing request; a `revoked` key is retained so historic signatures remain attributable, and MUST NOT be reactivated.
|
|
376
416
|
*/
|
|
@@ -593,6 +633,10 @@ export type RequestedAttributes = RequestedAttribute[];
|
|
|
593
633
|
* A forge-qualified resource: `<forge-host>/<owner>` for a namespace, or `<forge-host>/<owner>/<repo>` for one repository, all lowercase — `github.com/acme`, `github.com/acme/widgets`, `codeberg.org/acme`. The forge is never implied: `acme/widgets` alone is not a resource. Containment is by whole segment: `github.com/acme` contains `github.com/acme/widgets` and does not contain `github.com/acme-labs/x` or `codeberg.org/acme/widgets`.
|
|
594
634
|
*/
|
|
595
635
|
export type Resource = string;
|
|
636
|
+
/**
|
|
637
|
+
* 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.
|
|
638
|
+
*/
|
|
639
|
+
export type ResourceQualifier = string;
|
|
596
640
|
/**
|
|
597
641
|
* Whether a room keeps its history readable across a membership change, fixed at creation and immutable thereafter — like `Visibility`, and for the same reason: the rungs of an epoch key chain either exist for an epoch or they do not, and no later change of mind can seal key material that was never sealed or unseal what was already severed. `chained`: each advance produces an `EpochLink`, so every member reads the room's whole retained history however long they have been in it — what a **library** wants, at the cost of post-compromise security for record content, since a compromised current key then reaches every retained epoch. `fromJoin`: no rungs are produced, so a member reads only from the epoch their group state is at — what a **stream** wants, and what a room under a strict forward-secrecy obligation wants, at the cost that a joining member finds an empty-looking room and nobody can reread a record once their group state has moved past the epoch it was sealed under. Absent means `chained`; see the prose on why the absent case is the readable one.
|
|
598
642
|
*/
|
|
@@ -609,6 +653,10 @@ export type RightOrigin = "recorded" | "roleDerived";
|
|
|
609
653
|
* Where a key is in its role's lifecycle. `pending` — planned by a preview or a change awaiting approval; not published; custody projection only. `staged` — published and bound to its role, but not yet used: a planned rotation publishes the successor and waits until the entry's cache horizon — publication plus the longer of the document's TTL and the verifier cache cap (CONVENTIONS.md §11.1) — before the VTA first uses it, so that no verifier holding a cached document sees a signature by a key it has never seen (VTI-KEY-122). Becomes `active` at the rotation's `activatesAt`. `active` — the key the VTA uses for new signatures (or, for `messaging`, advertises for new sessions). `retiring` — still published so that what it signed and sessions keyed to it keep working, but never used again: from the successor's first use the VTA MUST NOT sign with it, while a retiring `messaging` key stays usable for decryption, and senders may still encrypt to it, until it is retired (CONVENTIONS.md §11.3). `retired` — removed by planned rotation; what it signed while published remains valid, judged against the DID version current at issuance (CONVENTIONS.md §7). A retired `attestation` or `messaging` key is destroyed at retirement. `revoked` — removed from every relationship and from `keyRoles` in one entry, without overlap, because it is or may be compromised; what it signed from `compromisedSince` onward establishes nothing. `retired` and `revoked` are terminal.
|
|
610
654
|
*/
|
|
611
655
|
export type RoleKeyState = "pending" | "staged" | "active" | "retiring" | "retired" | "revoked";
|
|
656
|
+
/**
|
|
657
|
+
* 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`.
|
|
658
|
+
*/
|
|
659
|
+
export type RoleName = string;
|
|
612
660
|
/**
|
|
613
661
|
* `planned` — a successor was staged, activated, and the predecessor retired on the operator's schedule. `compromise` — a key was revoked and, where the role would otherwise be empty, replaced in the same log entry. `addition` — a key was added to a role without anything leaving it (for example a post-quantum key alongside a classical one).
|
|
614
662
|
*/
|
|
@@ -1154,7 +1202,7 @@ export interface AclChangedEvent_SyncV0_2 {
|
|
|
1154
1202
|
subject: string;
|
|
1155
1203
|
change: "granted" | "revoked" | "roleChanged" | "swapped" | "deviceDisabled" | "deviceWiped";
|
|
1156
1204
|
}
|
|
1157
|
-
export interface
|
|
1205
|
+
export interface AclEntry_AclV0_1 {
|
|
1158
1206
|
/**
|
|
1159
1207
|
* VID of the party in the ACL. Compared by exact string equality (SPEC.md §4.8); producers SHOULD emit canonical form.
|
|
1160
1208
|
*/
|
|
@@ -1224,6 +1272,172 @@ export interface AclEntry {
|
|
|
1224
1272
|
*/
|
|
1225
1273
|
ext?: Ext;
|
|
1226
1274
|
}
|
|
1275
|
+
/**
|
|
1276
|
+
* One access-control entry: who the grant is for (`subject`), the ceiling it is held under (`role`), where the subject may act (`act`) and approve (`approve`), and which capabilities it may exercise (`capabilities`) and approve (`approveCapabilities`).
|
|
1277
|
+
*
|
|
1278
|
+
* The act axis and the approve axis are independent and a consumer MUST resolve them separately: `act` + `capabilities` (+ `keys`) answer "may this subject do X"; `approve` + `approveCapabilities` answer "may this subject ratify someone else doing X". Neither implies the other. An entry with `act: {scope: none}` and an approve scope other than none is a least-privilege approver — able to satisfy an approval and unable to initiate any change.
|
|
1279
|
+
*/
|
|
1280
|
+
export interface AclEntry_AclV0_2 {
|
|
1281
|
+
/**
|
|
1282
|
+
* VID of the party in the ACL. Compared by exact string equality (SPEC.md §4.8); producers SHOULD emit canonical form.
|
|
1283
|
+
*/
|
|
1284
|
+
subject: string;
|
|
1285
|
+
/**
|
|
1286
|
+
* Opaque role identifier interpreted by the ACL maintainer. A role is a CEILING, never a grant: it bounds the capabilities the entry may hold and never adds to them. A consumer that does not recognise the role MUST treat the entry as conferring no authority and MUST NOT fall back to a default role. Act scope and role are independent members; a consumer MUST NOT compute either from the other.
|
|
1287
|
+
*/
|
|
1288
|
+
role: string;
|
|
1289
|
+
/**
|
|
1290
|
+
* REQUIRED explicit act scope: where this subject may make a change itself. Exactly one of `{"scope": "all"}` (unrestricted — every context the maintainer has), `{"scope": "none"}` (may act nowhere), or `{"scope": "contexts", "contexts": [...]}` with at least one context path (the named contexts and, where the maintainer's contexts are hierarchical, their descendants). There is no default and no implicit form: an entry without `act`, or with an empty `contexts` list, is malformed and MUST be refused, never read as `all` and never read as `none`. A maintainer that has no contexts (for example a community node that narrows authority with resource qualifiers instead) states `all` or `none` only. Replaces 0.1's `scopes`.
|
|
1291
|
+
*/
|
|
1292
|
+
act: AuthorityScope;
|
|
1293
|
+
/**
|
|
1294
|
+
* OPTIONAL approve scope: where this subject may ratify a change made by someone else (a step-up ratification, a consent decision, an N-of-M approval). Same three shapes as `act`, resolved independently of it. ABSENT MEANS NONE — the subject may ratify nothing — so a consumer that has not implemented the member confers less than the producer intended, never more. A producer SHOULD state `{"scope": "none"}` explicitly rather than rely on omission. A subject MUST NOT confer approve authority wider than the approve authority it holds itself (see acl/grant `approveWiderThanGranter`). Replaces 0.1's `approve {all, scopes}`.
|
|
1295
|
+
*/
|
|
1296
|
+
approve?: AuthorityScope;
|
|
1297
|
+
/**
|
|
1298
|
+
* REQUIRED explicit capability scope: which capabilities this entry holds. Exactly one of `{"scope": "ceiling"}` (the role's full ceiling, unnarrowed), `{"scope": "none"}` (no capabilities), or `{"scope": "listed", "grants": [...]}` with at least one CapabilityGrant. For `listed`, the EFFECTIVE set is (the role's ceiling ∩ the non-additive grants) ∪ the additive grants; it can only narrow the ceiling, except through an explicit additive grant, which only an unrestricted granter may make. There is no implicit form: an entry without `capabilities`, or with an empty `grants` list, is malformed and MUST be refused. A non-additive grant outside the role's ceiling is refused when written, never accepted with the capability silently dropped; a capability the consumer does not recognise is never treated as granted. Producers SHOULD NOT list the same (capability, resource) pair twice; a consumer MAY refuse a list that does.
|
|
1299
|
+
*/
|
|
1300
|
+
capabilities: CapabilityScope;
|
|
1301
|
+
/**
|
|
1302
|
+
* OPTIONAL explicit approvable-capability scope: which capabilities this subject may APPROVE an action needing — independent of what it may do itself, so an approver can ratify a capability it does not hold (the least-privilege approver). One of `{"scope": "ceiling"}` (the role's full approve ceiling; at a maintainer whose roles define no capability-level approve ceiling, any action within `approve`), `{"scope": "none"}`, or `{"scope": "listed", "grants": [...]}` with at least one CapabilityRef (intersected with the role's approve ceiling where one is defined). ABSENT MEANS NONE: the subject may approve no capability, because absence derives no authority. Bounded by `approve`: where `approve` is absent or `{"scope": "none"}` this member confers nothing whatever it states. A subject MUST NOT confer approvable capabilities it cannot itself approve.
|
|
1303
|
+
*/
|
|
1304
|
+
approveCapabilities?: ApproveCapabilityScope;
|
|
1305
|
+
/**
|
|
1306
|
+
* VID of the granter whose authority this entry was delegated from and is bounded by. The entry MUST NOT hold authority the granter did not hold when it was written, and MUST NOT retain authority the granter has since lost, so a maintainer re-evaluates it when the granter's own entry narrows or is removed. Distinct from `createdBy`, which records who wrote the entry: the two differ where an entry is written on a granter's behalf (for example after an N-of-M approval, or by an offline operator). Set by the maintainer from the granter it authorized; absent on an entry that derives from no granter's authority (the first administrator, an operator-written recovery entry).
|
|
1307
|
+
*/
|
|
1308
|
+
delegatedBy?: string;
|
|
1309
|
+
/**
|
|
1310
|
+
* REQUIRED explicit key scope: which keys this subject may invoke the maintainer's signing oracle on. Exactly one of `{"scope": "all"}` (every key the entry's act scope reaches), `{"scope": "none"}` (no keys), or `{"scope": "listed", "keys": [...]}` with at least one key identifier. INTERSECTS WITH `act` — it can only narrow, never widen: a listed key that lies outside the entry's act scope remains unreachable, exactly as if it were not listed. There is no implicit form: an entry without `keys`, or with an empty `keys` list, is malformed and MUST be refused. A maintainer that operates no signing oracle states `{"scope": "none"}`. Replaces 0.1's `allowedKeys`, whose absence meant every key.
|
|
1311
|
+
*/
|
|
1312
|
+
keys: KeyScope;
|
|
1313
|
+
/**
|
|
1314
|
+
* Optional human-readable label. Confers nothing.
|
|
1315
|
+
*/
|
|
1316
|
+
label?: string;
|
|
1317
|
+
createdAt?: string;
|
|
1318
|
+
/**
|
|
1319
|
+
* VID of the party that originally wrote this entry.
|
|
1320
|
+
*/
|
|
1321
|
+
createdBy?: string;
|
|
1322
|
+
updatedAt?: string;
|
|
1323
|
+
/**
|
|
1324
|
+
* VID of the party that last modified this entry.
|
|
1325
|
+
*/
|
|
1326
|
+
updatedBy?: string;
|
|
1327
|
+
/**
|
|
1328
|
+
* Optional time after which the entry confers no authority. Evaluated at every authorization decision, not only when a session is established.
|
|
1329
|
+
*/
|
|
1330
|
+
expiresAt?: string;
|
|
1331
|
+
/**
|
|
1332
|
+
* Per-entry authentication step-up configuration, consumed by the ACL maintainer when it gates an operation behind a step-up (see auth/step-up/policy). ADDITIVE-ONLY: a per-entry setting MAY raise the assurance required of this subject above the maintainer's system-wide floor, but MUST NOT lower it. The maintainer resolves the effective requirement as the strictest of (system floor, this entry). Carried forward from 0.1 unchanged.
|
|
1333
|
+
*/
|
|
1334
|
+
stepUp?: {
|
|
1335
|
+
/**
|
|
1336
|
+
* VID authorized to ratify step-up for this subject — the `recipient` the maintainer addresses an auth/step-up/approve-request to (e.g. the holder's mobile authenticator or browser companion). Absent → the subject is its own approver (mode `self`) when it holds a usable authenticator; if neither an `approver` nor a self authenticator exists, no step-up method is available for this subject and the maintainer's fail-closed rule applies.
|
|
1337
|
+
*/
|
|
1338
|
+
approver?: string;
|
|
1339
|
+
/**
|
|
1340
|
+
* Minimum step-up mode this subject MUST satisfy for gated operations, raising the system floor. `self` = the subject re-authenticates its own session; `delegated` = a separate `approver` MUST ratify. Omitted → the system floor applies unchanged. A value weaker than the resolved floor is ignored (additive-only).
|
|
1341
|
+
*/
|
|
1342
|
+
require?: "self" | "delegated";
|
|
1343
|
+
};
|
|
1344
|
+
/**
|
|
1345
|
+
* Ecosystem-defined extension members per SPEC.md §4.5.1. Reverse-DNS-namespaced; consumers MUST ignore unrecognized namespaces. An extension member MUST NOT be interpreted as conferring authority.
|
|
1346
|
+
*/
|
|
1347
|
+
ext?: Ext;
|
|
1348
|
+
}
|
|
1349
|
+
/**
|
|
1350
|
+
* 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.
|
|
1351
|
+
*/
|
|
1352
|
+
export interface Action {
|
|
1353
|
+
actionId: ActionId;
|
|
1354
|
+
/**
|
|
1355
|
+
* `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.
|
|
1356
|
+
*/
|
|
1357
|
+
category: "approval" | "acknowledge" | "queue";
|
|
1358
|
+
/**
|
|
1359
|
+
* 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.
|
|
1360
|
+
*/
|
|
1361
|
+
kind: string;
|
|
1362
|
+
/**
|
|
1363
|
+
* 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.
|
|
1364
|
+
*/
|
|
1365
|
+
typeUri: string;
|
|
1366
|
+
/**
|
|
1367
|
+
* VID of the party whose operation was parked. For `acknowledge`, the operator whose offline write is being acknowledged, where the community can attribute one.
|
|
1368
|
+
*/
|
|
1369
|
+
requester: string;
|
|
1370
|
+
/**
|
|
1371
|
+
* `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.
|
|
1372
|
+
*/
|
|
1373
|
+
status: "open" | "completed" | "declined" | "expired" | "cancelled" | "failed";
|
|
1374
|
+
/**
|
|
1375
|
+
* When the operation was parked.
|
|
1376
|
+
*/
|
|
1377
|
+
createdAt: string;
|
|
1378
|
+
/**
|
|
1379
|
+
* 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).
|
|
1380
|
+
*/
|
|
1381
|
+
expiresAt?: string;
|
|
1382
|
+
/**
|
|
1383
|
+
* When the action left `open`. Present exactly when `status` is not `open`.
|
|
1384
|
+
*/
|
|
1385
|
+
closedAt?: string;
|
|
1386
|
+
/**
|
|
1387
|
+
* 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.
|
|
1388
|
+
*/
|
|
1389
|
+
closedReason?:
|
|
1390
|
+
| "thresholdMet"
|
|
1391
|
+
| "declined"
|
|
1392
|
+
| "expired"
|
|
1393
|
+
| "cancelledByRequester"
|
|
1394
|
+
| "invalidated"
|
|
1395
|
+
| "failedRecheck"
|
|
1396
|
+
| "acknowledged";
|
|
1397
|
+
/**
|
|
1398
|
+
* 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).
|
|
1399
|
+
*/
|
|
1400
|
+
threshold?: number;
|
|
1401
|
+
/**
|
|
1402
|
+
* 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.
|
|
1403
|
+
*/
|
|
1404
|
+
approvals: {
|
|
1405
|
+
/**
|
|
1406
|
+
* VID of the approver or acknowledger, as proven by the decision's own proof.
|
|
1407
|
+
*/
|
|
1408
|
+
subject: string;
|
|
1409
|
+
/**
|
|
1410
|
+
* When the decision was recorded.
|
|
1411
|
+
*/
|
|
1412
|
+
at: string;
|
|
1413
|
+
}[];
|
|
1414
|
+
/**
|
|
1415
|
+
* 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.
|
|
1416
|
+
*/
|
|
1417
|
+
approversRemaining?: number;
|
|
1418
|
+
summary: Summary;
|
|
1419
|
+
/**
|
|
1420
|
+
* 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.
|
|
1421
|
+
*/
|
|
1422
|
+
payload: {};
|
|
1423
|
+
/**
|
|
1424
|
+
* 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.
|
|
1425
|
+
*/
|
|
1426
|
+
payloadDigest: DigestMultibase;
|
|
1427
|
+
/**
|
|
1428
|
+
* 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.
|
|
1429
|
+
*/
|
|
1430
|
+
challenge?: string;
|
|
1431
|
+
/**
|
|
1432
|
+
* 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.
|
|
1433
|
+
*/
|
|
1434
|
+
callerRole: "approver" | "requester" | "acknowledger" | "observer";
|
|
1435
|
+
/**
|
|
1436
|
+
* 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.
|
|
1437
|
+
*/
|
|
1438
|
+
requesterOpenActions?: number;
|
|
1439
|
+
ext?: Ext;
|
|
1440
|
+
}
|
|
1227
1441
|
/**
|
|
1228
1442
|
* A privileged account at the mediator (an `admin` or `rootAdmin`).
|
|
1229
1443
|
*/
|
|
@@ -1336,6 +1550,38 @@ export interface AppStateRecord {
|
|
|
1336
1550
|
*/
|
|
1337
1551
|
deletedAt?: string;
|
|
1338
1552
|
}
|
|
1553
|
+
/**
|
|
1554
|
+
* Exactly the listed capabilities, intersected with the role's approve ceiling where the maintainer's roles define one.
|
|
1555
|
+
*/
|
|
1556
|
+
export interface ApproveCapabilityScopeListed {
|
|
1557
|
+
scope: "listed";
|
|
1558
|
+
/**
|
|
1559
|
+
* Non-empty list of approvable capabilities. An empty array is invalid.
|
|
1560
|
+
*
|
|
1561
|
+
* @minItems 1
|
|
1562
|
+
*/
|
|
1563
|
+
grants: [CapabilityRef, ...CapabilityRef[]];
|
|
1564
|
+
}
|
|
1565
|
+
/**
|
|
1566
|
+
* One step-up approver binding, as its subject or an administrator sees it. The binding confers nothing of its own: it is read only when the relying party checks the evidence of a step-up asked of `subject`.
|
|
1567
|
+
*/
|
|
1568
|
+
export interface Approver {
|
|
1569
|
+
approverDid: ApproverDid;
|
|
1570
|
+
/**
|
|
1571
|
+
* The one subject DID this approver is bound to. An approver DID is bound to at most one subject at a relying party.
|
|
1572
|
+
*/
|
|
1573
|
+
subject: string;
|
|
1574
|
+
label?: ApproverLabel;
|
|
1575
|
+
/**
|
|
1576
|
+
* When the binding was written.
|
|
1577
|
+
*/
|
|
1578
|
+
enrolledAt: string;
|
|
1579
|
+
enrolledVia: EnrolledVia;
|
|
1580
|
+
/**
|
|
1581
|
+
* When a statement by this approver last satisfied a step-up. Absent when it never has.
|
|
1582
|
+
*/
|
|
1583
|
+
lastUsedAt?: string;
|
|
1584
|
+
}
|
|
1339
1585
|
/**
|
|
1340
1586
|
* Who approves inbound-messaging consent for a given platform within a VTA context, and how the prompt reaches them.
|
|
1341
1587
|
*/
|
|
@@ -1405,6 +1651,10 @@ export interface AttachmentRef_VaultV0_3 {
|
|
|
1405
1651
|
*/
|
|
1406
1652
|
contentType?: string;
|
|
1407
1653
|
}
|
|
1654
|
+
/**
|
|
1655
|
+
* A complete, signed auth/step-up/approver/attest/0.1 Trust Task document — envelope, payload and proof — issued by the approver. Deliberately an open object here rather than a typed one: the consumer verifies it as a document in its own right (envelope, proof and payload against that specification's schemas), and verifies its proof over the members exactly as received, which a binding that narrowed it to a typed struct and re-serialised it could silently break.
|
|
1656
|
+
*/
|
|
1657
|
+
export interface AttestStatement {}
|
|
1408
1658
|
/**
|
|
1409
1659
|
* One atomic fact a holder keeps about themselves. Several attributes MAY share a `type` — three phone numbers, a legal name and a preferred name — which is why `attributeId` is the identity of a fact and `type` is not. The pool is flat and unordered; ordering is a profile's concern.
|
|
1410
1660
|
*/
|
|
@@ -1603,6 +1853,30 @@ export interface AuthorityPresentation {
|
|
|
1603
1853
|
*/
|
|
1604
1854
|
subjectBinding?: string;
|
|
1605
1855
|
}
|
|
1856
|
+
/**
|
|
1857
|
+
* Unrestricted: every context the maintainer holds, present and future. On the act axis this is a super-administrator (or, at a maintainer without contexts, an entry whose authority is not narrowed by location).
|
|
1858
|
+
*/
|
|
1859
|
+
export interface AuthorityScopeAll {
|
|
1860
|
+
scope: "all";
|
|
1861
|
+
}
|
|
1862
|
+
/**
|
|
1863
|
+
* The named contexts and, where the maintainer's contexts are hierarchical, every descendant of them — and nowhere else. `contexts` MUST carry at least one path.
|
|
1864
|
+
*/
|
|
1865
|
+
export interface AuthorityScopeContexts {
|
|
1866
|
+
scope: "contexts";
|
|
1867
|
+
/**
|
|
1868
|
+
* Non-empty set of context paths. An empty array is invalid (it is neither `all` nor `none`).
|
|
1869
|
+
*
|
|
1870
|
+
* @minItems 1
|
|
1871
|
+
*/
|
|
1872
|
+
contexts: [ContextPath, ...ContextPath[]];
|
|
1873
|
+
}
|
|
1874
|
+
/**
|
|
1875
|
+
* No authority on this axis. Stated, not implied: `none` is how an entry says it may not act (a least-privilege approver) or may not approve.
|
|
1876
|
+
*/
|
|
1877
|
+
export interface AuthorityScopeNone {
|
|
1878
|
+
scope: "none";
|
|
1879
|
+
}
|
|
1606
1880
|
/**
|
|
1607
1881
|
* The effective configuration — defaults filled in — and the last sweep.
|
|
1608
1882
|
*/
|
|
@@ -1721,6 +1995,20 @@ export interface BreakGlass {
|
|
|
1721
1995
|
*/
|
|
1722
1996
|
ratifiedAt?: string;
|
|
1723
1997
|
}
|
|
1998
|
+
/**
|
|
1999
|
+
* A capability held by an entry, optionally qualified by a resource, optionally marked additive. A qualified grant confers nothing without a live entry for the same subject, and is bounded as delegated authority is.
|
|
2000
|
+
*/
|
|
2001
|
+
export interface CapabilityGrant {
|
|
2002
|
+
capability: Capability_AclV0_2;
|
|
2003
|
+
/**
|
|
2004
|
+
* Optional qualifier. Absent covers every resource of the capability's kind.
|
|
2005
|
+
*/
|
|
2006
|
+
resource?: ResourceQualifier;
|
|
2007
|
+
/**
|
|
2008
|
+
* `true` declares an ADDITIVE grant: a capability no role implies, granted to this entry beside its role rather than through it, and therefore not intersected with the role's ceiling. Granting one requires unrestricted act authority (`act: {scope: all}`) of the granter, and an entry never acquires one by virtue of its role. Absent or `false` → an ordinary grant, intersected with the role's ceiling, and refused when written if it lies outside it. A consumer MUST refuse `additive: true` on a capability the role's ceiling already includes, so that the flag cannot be used to make an ordinary capability survive a later role change.
|
|
2009
|
+
*/
|
|
2010
|
+
additive?: boolean;
|
|
2011
|
+
}
|
|
1724
2012
|
/**
|
|
1725
2013
|
* The self-description of a pluggable community capability: the Trust Task families it serves, the trust-registry vocabulary it reads and writes, the roles that may operate it, the membership lifecycle hooks it consumes, and the external adapters that act on its decisions. The manifest is what governance approves, what discovery advertises, and what a management UX renders.
|
|
1726
2014
|
*/
|
|
@@ -1797,6 +2085,40 @@ export interface CapabilityManifest {
|
|
|
1797
2085
|
configSchema?: string;
|
|
1798
2086
|
ext?: Ext;
|
|
1799
2087
|
}
|
|
2088
|
+
/**
|
|
2089
|
+
* 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.
|
|
2090
|
+
*/
|
|
2091
|
+
export interface CapabilityRef {
|
|
2092
|
+
capability: Capability_AclV0_2;
|
|
2093
|
+
/**
|
|
2094
|
+
* Optional qualifier. Absent covers every resource of the capability's kind.
|
|
2095
|
+
*/
|
|
2096
|
+
resource?: ResourceQualifier;
|
|
2097
|
+
}
|
|
2098
|
+
/**
|
|
2099
|
+
* The role's full ceiling on this axis, unnarrowed: what the role admits, the entry holds (or, for approvable capabilities, may approve). Stated, not implied — it is the explicit spelling of "no narrowing".
|
|
2100
|
+
*/
|
|
2101
|
+
export interface CapabilityScopeCeiling {
|
|
2102
|
+
scope: "ceiling";
|
|
2103
|
+
}
|
|
2104
|
+
/**
|
|
2105
|
+
* Exactly the listed grants: (role ceiling ∩ non-additive grants) ∪ additive grants.
|
|
2106
|
+
*/
|
|
2107
|
+
export interface CapabilityScopeListed {
|
|
2108
|
+
scope: "listed";
|
|
2109
|
+
/**
|
|
2110
|
+
* Non-empty list of capability grants. An empty array is invalid (it is neither `ceiling` nor `none`).
|
|
2111
|
+
*
|
|
2112
|
+
* @minItems 1
|
|
2113
|
+
*/
|
|
2114
|
+
grants: [CapabilityGrant, ...CapabilityGrant[]];
|
|
2115
|
+
}
|
|
2116
|
+
/**
|
|
2117
|
+
* No capabilities on this axis.
|
|
2118
|
+
*/
|
|
2119
|
+
export interface CapabilityScopeNone {
|
|
2120
|
+
scope: "none";
|
|
2121
|
+
}
|
|
1800
2122
|
/**
|
|
1801
2123
|
* The terms of a `chunkedTrustTask` transfer, committed before any chunk moves. On export the recipient states them in the descriptor; on import the producer pre-commits them in the request and the recipient echoes them. Either way the manifest arrives in a document whose proof is REQUIRED, so the per-chunk digests are authenticated by the party that computed them and each chunk can be verified — and a single bad chunk re-fetched or refused — on arrival rather than only after reassembly.
|
|
1802
2124
|
*
|
|
@@ -2982,6 +3304,25 @@ export interface Exposure {
|
|
|
2982
3304
|
export interface Ext {
|
|
2983
3305
|
[k: string]: unknown | undefined;
|
|
2984
3306
|
}
|
|
3307
|
+
/**
|
|
3308
|
+
* One displayed value, with where it comes from and how to render it.
|
|
3309
|
+
*/
|
|
3310
|
+
export interface Field {
|
|
3311
|
+
/**
|
|
3312
|
+
* RFC 6901 JSON Pointer into the action's `payload`. The empty string addresses the whole payload.
|
|
3313
|
+
*/
|
|
3314
|
+
pointer: string;
|
|
3315
|
+
/**
|
|
3316
|
+
* 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.
|
|
3317
|
+
*/
|
|
3318
|
+
format: "did" | "capabilityList" | "duration" | "datetime" | "text";
|
|
3319
|
+
/**
|
|
3320
|
+
* 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.
|
|
3321
|
+
*/
|
|
3322
|
+
value: {
|
|
3323
|
+
[k: string]: unknown | undefined;
|
|
3324
|
+
};
|
|
3325
|
+
}
|
|
2985
3326
|
/**
|
|
2986
3327
|
* A person's account on one forge. `id` is authoritative; `login` is for display only, because logins can be renamed and re-registered.
|
|
2987
3328
|
*/
|
|
@@ -3408,6 +3749,30 @@ export interface KeyRoleApprovalState {
|
|
|
3408
3749
|
*/
|
|
3409
3750
|
expiresAt: string;
|
|
3410
3751
|
}
|
|
3752
|
+
/**
|
|
3753
|
+
* Every key the entry's act scope reaches.
|
|
3754
|
+
*/
|
|
3755
|
+
export interface KeyScopeAll {
|
|
3756
|
+
scope: "all";
|
|
3757
|
+
}
|
|
3758
|
+
/**
|
|
3759
|
+
* Exactly the listed keys, intersected with the entry's act scope.
|
|
3760
|
+
*/
|
|
3761
|
+
export interface KeyScopeListed {
|
|
3762
|
+
scope: "listed";
|
|
3763
|
+
/**
|
|
3764
|
+
* Non-empty set of key identifiers. An empty array is invalid (it is neither `all` nor `none`).
|
|
3765
|
+
*
|
|
3766
|
+
* @minItems 1
|
|
3767
|
+
*/
|
|
3768
|
+
keys: [string, ...string[]];
|
|
3769
|
+
}
|
|
3770
|
+
/**
|
|
3771
|
+
* No keys.
|
|
3772
|
+
*/
|
|
3773
|
+
export interface KeyScopeNone {
|
|
3774
|
+
scope: "none";
|
|
3775
|
+
}
|
|
3411
3776
|
/**
|
|
3412
3777
|
* The mediator's per-account access-control capability set, expressed as named booleans (the transport-agnostic form of the mediator's internal capability flags). On a set request, members omitted are left unchanged; a get/response carries the full realized set.
|
|
3413
3778
|
*/
|
|
@@ -4663,6 +5028,57 @@ export interface RightRecord_GitNsV0_4 {
|
|
|
4663
5028
|
*/
|
|
4664
5029
|
breakGlass?: BreakGlass;
|
|
4665
5030
|
}
|
|
5031
|
+
/**
|
|
5032
|
+
* 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.
|
|
5033
|
+
*
|
|
5034
|
+
* A 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.
|
|
5035
|
+
*
|
|
5036
|
+
* NO 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.
|
|
5037
|
+
*
|
|
5038
|
+
* BUILT-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):
|
|
5039
|
+
* - `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.
|
|
5040
|
+
* - `moderator` — ceiling: `vtc.members.manage`, `vtc.join.decide`, `vtc.invitations.manage`; approve ceiling: the same.
|
|
5041
|
+
* - `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.
|
|
5042
|
+
* - `repo-manager` — ceiling: `git.repo.manage` and `git.ns.admin` (held qualified by namespace or repository); approve ceiling: the same, at the same qualifier.
|
|
5043
|
+
* - `credential-officer` — ceiling: `vtc.credentials.issue`, `vtc.credentials.revoke`; approve ceiling: the same.
|
|
5044
|
+
* - `auditor` — ceiling: `vtc.audit.read`; approve ceiling: none.
|
|
5045
|
+
* - `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.
|
|
5046
|
+
*
|
|
5047
|
+
* CUSTOM 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.
|
|
5048
|
+
*/
|
|
5049
|
+
export interface RoleDefinition {
|
|
5050
|
+
name: RoleName;
|
|
5051
|
+
/**
|
|
5052
|
+
* `true` for a role fixed by the VTC implementation, which cannot be changed or deleted; `false` for a community-defined custom role.
|
|
5053
|
+
*/
|
|
5054
|
+
builtIn: boolean;
|
|
5055
|
+
/**
|
|
5056
|
+
* Optional human-readable description. Confers nothing.
|
|
5057
|
+
*/
|
|
5058
|
+
description?: string;
|
|
5059
|
+
/**
|
|
5060
|
+
* 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.
|
|
5061
|
+
*/
|
|
5062
|
+
ceiling: CapabilityRef[];
|
|
5063
|
+
/**
|
|
5064
|
+
* 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.
|
|
5065
|
+
*/
|
|
5066
|
+
approveScope: CapabilityRef[];
|
|
5067
|
+
createdAt?: string;
|
|
5068
|
+
/**
|
|
5069
|
+
* VID of the administrator whose request created the role (for a custom role created by approval, the requester). Absent on a built-in role.
|
|
5070
|
+
*/
|
|
5071
|
+
createdBy?: string;
|
|
5072
|
+
updatedAt?: string;
|
|
5073
|
+
/**
|
|
5074
|
+
* VID of the administrator whose request last replaced the role. Absent on a built-in role and on a custom role never replaced.
|
|
5075
|
+
*/
|
|
5076
|
+
updatedBy?: string;
|
|
5077
|
+
/**
|
|
5078
|
+
* Ecosystem-defined extension members per SPEC.md §4.5.1. An extension member MUST NOT be interpreted as widening a ceiling.
|
|
5079
|
+
*/
|
|
5080
|
+
ext?: Ext;
|
|
5081
|
+
}
|
|
4666
5082
|
/**
|
|
4667
5083
|
* One key in one role. A key is in exactly one role for its whole life; a change of role is a retirement from one and an addition to another, under a new verification-method identifier.
|
|
4668
5084
|
*/
|
|
@@ -5320,6 +5736,29 @@ export interface StreamDescriptor {
|
|
|
5320
5736
|
expectedSizeBytes: ExpectedSizeBytes;
|
|
5321
5737
|
expiresAt: ExpiresAt;
|
|
5322
5738
|
}
|
|
5739
|
+
/**
|
|
5740
|
+
* 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.
|
|
5741
|
+
*/
|
|
5742
|
+
export interface Summary {
|
|
5743
|
+
/**
|
|
5744
|
+
* One-line heading from the template. Prose only: a renderer MUST NOT present the action from this text without the fields.
|
|
5745
|
+
*/
|
|
5746
|
+
title: string;
|
|
5747
|
+
/**
|
|
5748
|
+
* One or two sentences from the template saying what executing the operation will do.
|
|
5749
|
+
*/
|
|
5750
|
+
effect?: string;
|
|
5751
|
+
/**
|
|
5752
|
+
* Named values the template displays, keyed by a lowerCamelCase field name. Each locates its value in `payload` by JSON Pointer.
|
|
5753
|
+
*/
|
|
5754
|
+
fields: {
|
|
5755
|
+
[k: string]: Field | undefined;
|
|
5756
|
+
};
|
|
5757
|
+
/**
|
|
5758
|
+
* 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.
|
|
5759
|
+
*/
|
|
5760
|
+
templateDigest: DigestMultibase;
|
|
5761
|
+
}
|
|
5323
5762
|
/**
|
|
5324
5763
|
* How the forge compares with the VTC's projection for one repository.
|
|
5325
5764
|
*/
|
|
@@ -16,4 +16,4 @@ export interface AclEntrySharedDefinitionForTheAclSpecFamily {
|
|
|
16
16
|
* The definitions this shared schema publishes, hoisted to one declaration each.
|
|
17
17
|
* See "../../../_shared/components.js".
|
|
18
18
|
*/
|
|
19
|
-
export type { AclEntry } from "../../../_shared/components.js";
|
|
19
|
+
export type { AclEntry_AclV0_1 as AclEntry } from "../../../_shared/components.js";
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
|
|
3
|
+
* Source: specs/acl/_shared/0.2/acl-entry.schema.json
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Canonical AclEntry 0.2 and its component $defs, referenced by the 0.2 acl/* specifications and by any family that reuses the capability shape (vtc/roles). Not itself a Trust Task specification (the `_shared` folder is skipped by the registry build and the codegen). See CONVENTIONS.md beside this file for the rules a consumer applies across tasks.
|
|
8
|
+
*
|
|
9
|
+
* What 0.2 changes over 0.1: authority is STATED, never inferred from a shape. 0.1's `scopes` — a list whose emptiness meant `everywhere` for one role and `nowhere` for another, depending on a maintainer convention the wire could not carry — is replaced by `act`, an explicit act scope that is one of `all`, `none`, or a non-empty list of contexts. 0.1's `approve {all, scopes}` is replaced by the same explicit three-shape scope. 0.1's `allowedKeys` — where absent meant every key and empty meant none — is replaced by an explicit, REQUIRED `keys` scope. Capability-level authority is new and equally explicit: `capabilities` is REQUIRED and states `ceiling`, `none` or a listed set; `approveCapabilities` states the same three or is absent, which means none. No member's absence, and no collection's emptiness, ever confers authority. Delegation provenance (`delegatedBy`) is new. CONVENTIONS.md §8 documents how a maintainer maps a 0.1 entry onto 0.2.
|
|
10
|
+
*
|
|
11
|
+
* Role and capability identifiers are OPAQUE to this family: the acl/* tasks are used by maintainers with different vocabularies (a VTA's context administrators, a VTC's administrative roles). A maintainer publishes its own role set and capability registry; the vtc/roles family is one such vocabulary.
|
|
12
|
+
*
|
|
13
|
+
* Timestamp invariants (SHOULD-level, prose — not expressible in JSON Schema): when both `createdAt` and `updatedAt` are present, `updatedAt >= createdAt`; when both `createdAt` and `expiresAt` are present, `expiresAt > createdAt`. Consumers SHOULD reject documents that violate either.
|
|
14
|
+
*/
|
|
15
|
+
export interface AclEntry02SharedDefinitionsForTheAclSpecFamily {
|
|
16
|
+
[k: string]: unknown | undefined;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The definitions this shared schema publishes, hoisted to one declaration each.
|
|
21
|
+
* See "../../../_shared/components.js".
|
|
22
|
+
*/
|
|
23
|
+
export type { AclEntry_AclV0_2 as AclEntry, ApproveCapabilityScope, ApproveCapabilityScopeListed, AuthorityScope, AuthorityScopeAll, AuthorityScopeContexts, AuthorityScopeNone, Capability_AclV0_2 as Capability, CapabilityGrant, CapabilityRef, CapabilityScope, CapabilityScopeCeiling, CapabilityScopeListed, CapabilityScopeNone, ContextPath, KeyScope, KeyScopeAll, KeyScopeListed, KeyScopeNone, ResourceQualifier } from "../../../_shared/components.js";
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Source: specs/acl/change-role/0.1/payload.schema.json
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { AclEntry, Ext } from "../../../_shared/components.js";
|
|
6
|
+
import type { AclEntry_AclV0_1 as AclEntry, Ext } from "../../../_shared/components.js";
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
export interface ACLChangeRolePayload {
|