@openvtc/trust-tasks 0.20.8 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +233 -0
- package/dist/_shared/components.d.ts +299 -2
- package/dist/_shared/components.d.ts.map +1 -1
- package/dist/auth/passkey/enroll/invite/0.2/payload.d.ts +456 -0
- package/dist/auth/passkey/enroll/invite/0.2/payload.d.ts.map +1 -0
- package/dist/auth/passkey/enroll/invite/0.2/payload.js +248 -0
- package/dist/auth/passkey/enroll/invite/0.2/payload.js.map +1 -0
- package/dist/auth/passkey/enroll/redeem/finish/0.1/payload.d.ts +728 -0
- package/dist/auth/passkey/enroll/redeem/finish/0.1/payload.d.ts.map +1 -0
- package/dist/auth/passkey/enroll/redeem/finish/0.1/payload.js +430 -0
- package/dist/auth/passkey/enroll/redeem/finish/0.1/payload.js.map +1 -0
- package/dist/auth/passkey/enroll/redeem/start/0.1/payload.d.ts +1043 -0
- package/dist/auth/passkey/enroll/redeem/start/0.1/payload.d.ts.map +1 -0
- package/dist/auth/passkey/enroll/redeem/start/0.1/payload.js +628 -0
- package/dist/auth/passkey/enroll/redeem/start/0.1/payload.js.map +1 -0
- package/dist/auth/passkey/revoke/finish/0.2/payload.d.ts +533 -0
- package/dist/auth/passkey/revoke/finish/0.2/payload.d.ts.map +1 -0
- package/dist/auth/passkey/revoke/finish/0.2/payload.js +315 -0
- package/dist/auth/passkey/revoke/finish/0.2/payload.js.map +1 -0
- package/dist/auth/passkey/revoke/start/0.2/payload.d.ts +511 -0
- package/dist/auth/passkey/revoke/start/0.2/payload.d.ts.map +1 -0
- package/dist/auth/passkey/revoke/start/0.2/payload.js +297 -0
- package/dist/auth/passkey/revoke/start/0.2/payload.js.map +1 -0
- package/dist/auth/step-up/approve-response/0.5/payload.d.ts +887 -0
- package/dist/auth/step-up/approve-response/0.5/payload.d.ts.map +1 -0
- package/dist/auth/step-up/approve-response/0.5/payload.js +504 -0
- package/dist/auth/step-up/approve-response/0.5/payload.js.map +1 -0
- package/dist/device/list/0.1/payload.d.ts +4 -4
- package/dist/device/list/0.1/payload.d.ts.map +1 -1
- package/dist/device/list/0.1/payload.js +4 -2
- package/dist/device/list/0.1/payload.js.map +1 -1
- package/dist/device/list/0.2/payload.d.ts +4 -4
- package/dist/device/list/0.2/payload.d.ts.map +1 -1
- package/dist/device/list/0.2/payload.js +4 -2
- package/dist/device/list/0.2/payload.js.map +1 -1
- package/dist/device/register/0.1/payload.d.ts +4 -4
- package/dist/device/register/0.1/payload.d.ts.map +1 -1
- package/dist/device/register/0.1/payload.js +4 -2
- package/dist/device/register/0.1/payload.js.map +1 -1
- package/dist/device/register/0.2/payload.d.ts +4 -4
- package/dist/device/register/0.2/payload.d.ts.map +1 -1
- package/dist/device/register/0.2/payload.js +4 -2
- package/dist/device/register/0.2/payload.js.map +1 -1
- package/dist/git-ns/_shared/0.4/git-ns.d.ts +16 -0
- package/dist/git-ns/_shared/0.4/git-ns.d.ts.map +1 -0
- package/dist/git-ns/_shared/0.4/git-ns.js +6 -0
- package/dist/git-ns/_shared/0.4/git-ns.js.map +1 -0
- package/dist/git-ns/account/link-status/0.1/payload.d.ts +2 -2
- package/dist/git-ns/account/link-status/0.1/payload.js +2 -2
- package/dist/git-ns/account/link-status/0.1/payload.js.map +1 -1
- package/dist/git-ns/account/unlink/0.1/payload.d.ts +411 -0
- package/dist/git-ns/account/unlink/0.1/payload.d.ts.map +1 -0
- package/dist/git-ns/account/unlink/0.1/payload.js +228 -0
- package/dist/git-ns/account/unlink/0.1/payload.js.map +1 -0
- package/dist/git-ns/bridge/event/0.3/payload.d.ts +1682 -0
- package/dist/git-ns/bridge/event/0.3/payload.d.ts.map +1 -0
- package/dist/git-ns/bridge/event/0.3/payload.js +971 -0
- package/dist/git-ns/bridge/event/0.3/payload.js.map +1 -0
- package/dist/git-ns/bridge/job/0.4/payload.d.ts +1068 -0
- package/dist/git-ns/bridge/job/0.4/payload.d.ts.map +1 -0
- package/dist/git-ns/bridge/job/0.4/payload.js +573 -0
- package/dist/git-ns/bridge/job/0.4/payload.js.map +1 -0
- package/dist/git-ns/drift/resolve/0.3/payload.d.ts +1072 -0
- package/dist/git-ns/drift/resolve/0.3/payload.d.ts.map +1 -0
- package/dist/git-ns/drift/resolve/0.3/payload.js +634 -0
- package/dist/git-ns/drift/resolve/0.3/payload.js.map +1 -0
- package/dist/git-ns/namespace/reseat/0.3/payload.d.ts +515 -0
- package/dist/git-ns/namespace/reseat/0.3/payload.d.ts.map +1 -0
- package/dist/git-ns/namespace/reseat/0.3/payload.js +296 -0
- package/dist/git-ns/namespace/reseat/0.3/payload.js.map +1 -0
- package/dist/git-ns/repo/create/0.3/payload.d.ts +1101 -0
- package/dist/git-ns/repo/create/0.3/payload.d.ts.map +1 -0
- package/dist/git-ns/repo/create/0.3/payload.js +646 -0
- package/dist/git-ns/repo/create/0.3/payload.js.map +1 -0
- package/dist/git-ns/right/break-glass/0.1/payload.d.ts +685 -0
- package/dist/git-ns/right/break-glass/0.1/payload.d.ts.map +1 -0
- package/dist/git-ns/right/break-glass/0.1/payload.js +397 -0
- package/dist/git-ns/right/break-glass/0.1/payload.js.map +1 -0
- package/dist/git-ns/right/break-glass-notice/0.1/payload.d.ts +384 -0
- package/dist/git-ns/right/break-glass-notice/0.1/payload.d.ts.map +1 -0
- package/dist/git-ns/right/break-glass-notice/0.1/payload.js +216 -0
- package/dist/git-ns/right/break-glass-notice/0.1/payload.js.map +1 -0
- package/dist/git-ns/right/grant/0.3/payload.d.ts +678 -0
- package/dist/git-ns/right/grant/0.3/payload.d.ts.map +1 -0
- package/dist/git-ns/right/grant/0.3/payload.js +383 -0
- package/dist/git-ns/right/grant/0.3/payload.js.map +1 -0
- package/dist/git-ns/right/ratify/0.1/payload.d.ts +702 -0
- package/dist/git-ns/right/ratify/0.1/payload.d.ts.map +1 -0
- package/dist/git-ns/right/ratify/0.1/payload.js +404 -0
- package/dist/git-ns/right/ratify/0.1/payload.js.map +1 -0
- package/dist/git-ns/right/revoke/0.3/payload.d.ts +664 -0
- package/dist/git-ns/right/revoke/0.3/payload.d.ts.map +1 -0
- package/dist/git-ns/right/revoke/0.3/payload.js +378 -0
- package/dist/git-ns/right/revoke/0.3/payload.js.map +1 -0
- package/dist/git-ns/roles/reproject/0.1/payload.d.ts +325 -0
- package/dist/git-ns/roles/reproject/0.1/payload.d.ts.map +1 -0
- package/dist/git-ns/roles/reproject/0.1/payload.js +176 -0
- package/dist/git-ns/roles/reproject/0.1/payload.js.map +1 -0
- package/dist/git-ns/view/0.1/payload.d.ts +2 -2
- package/dist/git-ns/view/0.1/payload.js +2 -2
- package/dist/git-ns/view/0.1/payload.js.map +1 -1
- package/dist/git-ns/view/0.2/payload.d.ts +2 -2
- package/dist/git-ns/view/0.2/payload.js +2 -2
- package/dist/git-ns/view/0.2/payload.js.map +1 -1
- package/dist/git-ns/view/0.3/payload.d.ts +2 -2
- package/dist/git-ns/view/0.3/payload.js +2 -2
- package/dist/git-ns/view/0.3/payload.js.map +1 -1
- package/dist/git-ns/view/0.4/payload.d.ts +1696 -0
- package/dist/git-ns/view/0.4/payload.d.ts.map +1 -0
- package/dist/git-ns/view/0.4/payload.js +1012 -0
- package/dist/git-ns/view/0.4/payload.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -1
- package/dist/messaging/message/status/0.1/payload.d.ts +372 -0
- package/dist/messaging/message/status/0.1/payload.d.ts.map +1 -0
- package/dist/messaging/message/status/0.1/payload.js +214 -0
- package/dist/messaging/message/status/0.1/payload.js.map +1 -0
- package/dist/vta/_shared/0.3/did-key-roles.d.ts +16 -0
- package/dist/vta/_shared/0.3/did-key-roles.d.ts.map +1 -0
- package/dist/vta/_shared/0.3/did-key-roles.js +6 -0
- package/dist/vta/_shared/0.3/did-key-roles.js.map +1 -0
- package/dist/vta/attestation/mnemonic-export/1.0/payload.d.ts +326 -0
- package/dist/vta/attestation/mnemonic-export/1.0/payload.d.ts.map +1 -0
- package/dist/vta/attestation/mnemonic-export/1.0/payload.js +175 -0
- package/dist/vta/attestation/mnemonic-export/1.0/payload.js.map +1 -0
- package/dist/vta/webvh/dids/keys/add/1.0/payload.d.ts +1914 -0
- package/dist/vta/webvh/dids/keys/add/1.0/payload.d.ts.map +1 -0
- package/dist/vta/webvh/dids/keys/add/1.0/payload.js +1128 -0
- package/dist/vta/webvh/dids/keys/add/1.0/payload.js.map +1 -0
- package/dist/vta/webvh/dids/keys/list/1.0/payload.d.ts +1603 -0
- package/dist/vta/webvh/dids/keys/list/1.0/payload.d.ts.map +1 -0
- package/dist/vta/webvh/dids/keys/list/1.0/payload.js +942 -0
- package/dist/vta/webvh/dids/keys/list/1.0/payload.js.map +1 -0
- package/dist/vta/webvh/dids/keys/retire/1.0/payload.d.ts +1914 -0
- package/dist/vta/webvh/dids/keys/retire/1.0/payload.d.ts.map +1 -0
- package/dist/vta/webvh/dids/keys/retire/1.0/payload.js +1123 -0
- package/dist/vta/webvh/dids/keys/retire/1.0/payload.js.map +1 -0
- package/dist/vta/webvh/dids/keys/revoke/1.0/payload.d.ts +2021 -0
- package/dist/vta/webvh/dids/keys/revoke/1.0/payload.d.ts.map +1 -0
- package/dist/vta/webvh/dids/keys/revoke/1.0/payload.js +1168 -0
- package/dist/vta/webvh/dids/keys/revoke/1.0/payload.js.map +1 -0
- package/dist/vta/webvh/dids/rotate-keys/2.0/payload.d.ts +1992 -0
- package/dist/vta/webvh/dids/rotate-keys/2.0/payload.d.ts.map +1 -0
- package/dist/vta/webvh/dids/rotate-keys/2.0/payload.js +1151 -0
- package/dist/vta/webvh/dids/rotate-keys/2.0/payload.js.map +1 -0
- package/dist/vta/webvh/dids/update/2.0/payload.d.ts +1062 -0
- package/dist/vta/webvh/dids/update/2.0/payload.d.ts.map +1 -0
- package/dist/vta/webvh/dids/update/2.0/payload.js +616 -0
- package/dist/vta/webvh/dids/update/2.0/payload.js.map +1 -0
- package/dist/vtc/credentials/reissue/0.1/payload.d.ts +502 -0
- package/dist/vtc/credentials/reissue/0.1/payload.d.ts.map +1 -0
- package/dist/vtc/credentials/reissue/0.1/payload.js +282 -0
- package/dist/vtc/credentials/reissue/0.1/payload.js.map +1 -0
- package/dist/vtc/members/personhood/challenge/0.1/payload.d.ts +2 -2
- package/dist/vtc/members/personhood/challenge/0.1/payload.js +2 -2
- package/dist/vtc/members/personhood/challenge/0.1/payload.js.map +1 -1
- package/dist/vtc/vetting/vetters/profile/0.1/payload.d.ts +2 -2
- package/dist/vtc/vetting/vetters/profile/0.1/payload.js +2 -2
- package/dist/vtc/vetting/vetters/profile/0.1/payload.js.map +1 -1
- package/dist/vtc/vetting/vetters/resend/0.1/payload.d.ts +2 -2
- package/dist/vtc/vetting/vetters/resend/0.1/payload.js +2 -2
- package/dist/vtc/vetting/vetters/resend/0.1/payload.js.map +1 -1
- package/package.json +1 -1
- package/src/_shared/components.ts +313 -2
- package/src/auth/passkey/enroll/invite/0.2/payload.ts +325 -0
- package/src/auth/passkey/enroll/redeem/finish/0.1/payload.ts +499 -0
- package/src/auth/passkey/enroll/redeem/start/0.1/payload.ts +700 -0
- package/src/auth/passkey/revoke/finish/0.2/payload.ts +379 -0
- package/src/auth/passkey/revoke/start/0.2/payload.ts +349 -0
- package/src/auth/step-up/approve-response/0.5/payload.ts +593 -0
- package/src/device/list/0.1/payload.ts +4 -2
- package/src/device/list/0.2/payload.ts +4 -2
- package/src/device/register/0.1/payload.ts +4 -2
- package/src/device/register/0.2/payload.ts +4 -2
- package/src/git-ns/_shared/0.4/git-ns.ts +17 -0
- package/src/git-ns/account/link-status/0.1/payload.ts +2 -2
- package/src/git-ns/account/unlink/0.1/payload.ts +274 -0
- package/src/git-ns/bridge/event/0.3/payload.ts +1132 -0
- package/src/git-ns/bridge/job/0.4/payload.ts +691 -0
- package/src/git-ns/drift/resolve/0.3/payload.ts +707 -0
- package/src/git-ns/namespace/reseat/0.3/payload.ts +342 -0
- package/src/git-ns/repo/create/0.3/payload.ts +706 -0
- package/src/git-ns/right/break-glass/0.1/payload.ts +443 -0
- package/src/git-ns/right/break-glass-notice/0.1/payload.ts +258 -0
- package/src/git-ns/right/grant/0.3/payload.ts +434 -0
- package/src/git-ns/right/ratify/0.1/payload.ts +455 -0
- package/src/git-ns/right/revoke/0.3/payload.ts +425 -0
- package/src/git-ns/roles/reproject/0.1/payload.ts +220 -0
- package/src/git-ns/view/0.1/payload.ts +2 -2
- package/src/git-ns/view/0.2/payload.ts +2 -2
- package/src/git-ns/view/0.3/payload.ts +2 -2
- package/src/git-ns/view/0.4/payload.ts +1075 -0
- package/src/index.ts +30 -0
- package/src/messaging/message/status/0.1/payload.ts +270 -0
- package/src/vta/_shared/0.3/did-key-roles.ts +17 -0
- package/src/vta/attestation/mnemonic-export/1.0/payload.ts +232 -0
- package/src/vta/webvh/dids/keys/add/1.0/payload.ts +1217 -0
- package/src/vta/webvh/dids/keys/list/1.0/payload.ts +1004 -0
- package/src/vta/webvh/dids/keys/retire/1.0/payload.ts +1212 -0
- package/src/vta/webvh/dids/keys/revoke/1.0/payload.ts +1276 -0
- package/src/vta/webvh/dids/rotate-keys/2.0/payload.ts +1262 -0
- package/src/vta/webvh/dids/update/2.0/payload.ts +713 -0
- package/src/vtc/credentials/reissue/0.1/payload.ts +357 -0
- package/src/vtc/members/personhood/challenge/0.1/payload.ts +2 -2
- package/src/vtc/vetting/vetters/profile/0.1/payload.ts +2 -2
- package/src/vtc/vetting/vetters/resend/0.1/payload.ts +2 -2
|
@@ -0,0 +1,1062 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated by scripts/build-ts-bindings.mjs — DO NOT EDIT BY HAND.
|
|
3
|
+
* Source: specs/vta/webvh/dids/update/2.0/payload.schema.json
|
|
4
|
+
*/
|
|
5
|
+
import type { DidDocumentChange, DidDocumentPreview, DidVerificationRelationship, Ext, KeyRole, KeyRoleApprovalState, KeyRoleChangeOutcome, KeyType } from "../../../../../_shared/components.js";
|
|
6
|
+
/**
|
|
7
|
+
* Ask a Verifiable Trust Agent to publish a new entry in a did:webvh log it holds the update key for, changing anything but the DID's keys. Keys change only through the key-role tasks (vta/_shared/0.3/CONVENTIONS.md).
|
|
8
|
+
*/
|
|
9
|
+
export interface WebVHDIDUpdatePayload {
|
|
10
|
+
/**
|
|
11
|
+
* The did:webvh being updated. The agent MUST verify it speaks for this subject.
|
|
12
|
+
*/
|
|
13
|
+
did: string;
|
|
14
|
+
/**
|
|
15
|
+
* The new DID document. Omit to leave it unchanged. It MUST carry, unchanged, the current `verificationMethod`, `authentication`, `assertionMethod`, `keyAgreement`, `capabilityInvocation`, `capabilityDelegation` and `keyRoles` members: a change to any of them is refused with `vta/webvh/dids/update:keyMembersManaged`, because keys change only through the key-role tasks. Appending the entry still rotates the DID's update key under pre-rotation, which a consent surface MUST render from the executor's preview, never from this document.
|
|
16
|
+
*/
|
|
17
|
+
document?: {};
|
|
18
|
+
/**
|
|
19
|
+
* Number of pre-rotation commitments to publish. Omit to keep the current count. `0` is refused for a durable node identity (`vta/webvh/dids:preRotationRequired`).
|
|
20
|
+
*/
|
|
21
|
+
preRotationCount?: number;
|
|
22
|
+
/**
|
|
23
|
+
* New witness configuration. Omit to keep the current one.
|
|
24
|
+
*/
|
|
25
|
+
witnesses?: {
|
|
26
|
+
[k: string]: unknown | undefined;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* New watcher URLs. Omit to keep the current set; an empty array removes them.
|
|
30
|
+
*/
|
|
31
|
+
watchers?: string[];
|
|
32
|
+
/**
|
|
33
|
+
* New TTL in seconds. Omit to keep the current value.
|
|
34
|
+
*/
|
|
35
|
+
ttl?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Operator-facing audit label.
|
|
38
|
+
*/
|
|
39
|
+
label?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Optimistic-concurrency precondition: the versionId the caller based this edit on. The agent MUST refuse the update if the DID's latest entry no longer matches. Without it a `get -> edit -> save` cycle silently overwrites a concurrent edit with a chain that is structurally valid, verifies perfectly, and is based on a stale read. Where a human approves the update the window is minutes wide, so this is a routine race rather than an exotic one. OPTIONAL because a scripted caller with no concurrent writers has nothing to protect against; not optional for anything a person looked at.
|
|
42
|
+
*/
|
|
43
|
+
expectedVersionId?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Compute and return the preview without writing anything but the plan (CONVENTIONS.md §3.1). Absent reads as false.
|
|
46
|
+
*/
|
|
47
|
+
dryRun?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Apply exactly the plan a previous dry run of this same request returned; what an approval is bound to (CONVENTIONS.md §3.1–§3.2).
|
|
50
|
+
*/
|
|
51
|
+
previewId?: string;
|
|
52
|
+
ext?: Ext;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* The outcome. `preview` and `pendingApproval` carry the plan; `applied` carries the published entry.
|
|
56
|
+
*/
|
|
57
|
+
export interface WebVHDIDUpdateResponsePayload {
|
|
58
|
+
did: string;
|
|
59
|
+
outcome: KeyRoleChangeOutcome;
|
|
60
|
+
preview?: DidDocumentPreview;
|
|
61
|
+
approvals?: KeyRoleApprovalState;
|
|
62
|
+
/**
|
|
63
|
+
* versionId of the entry just appended. A caller intending a further edit SHOULD pass this back as the next request's `expectedVersionId`.
|
|
64
|
+
*/
|
|
65
|
+
newVersionId?: string;
|
|
66
|
+
newScid?: string;
|
|
67
|
+
/**
|
|
68
|
+
* The appended log entry, as JSON text.
|
|
69
|
+
*/
|
|
70
|
+
newLogEntry?: string;
|
|
71
|
+
/**
|
|
72
|
+
* Update keys authorized AFTER this entry. Where `document` was supplied these are new keys — the previous ones no longer authorize anything.
|
|
73
|
+
*/
|
|
74
|
+
updateKeysCount?: number;
|
|
75
|
+
/**
|
|
76
|
+
* Pre-rotation commitments published by this entry.
|
|
77
|
+
*/
|
|
78
|
+
preRotationKeyCount?: number;
|
|
79
|
+
/**
|
|
80
|
+
* True when the agent holds the log itself and no hosting server was published to — the operator must fetch and redeploy `did.jsonl`.
|
|
81
|
+
*/
|
|
82
|
+
serverless?: boolean;
|
|
83
|
+
ext?: Ext;
|
|
84
|
+
}
|
|
85
|
+
/** Shared definitions this specification references, re-exported under the names it used to declare them with. */
|
|
86
|
+
export type { DidDocumentChange, DidDocumentPreview, DidVerificationRelationship, Ext, KeyRole, KeyRoleApprovalState, KeyRoleChangeOutcome, KeyType };
|
|
87
|
+
/** Trust Task type URI. */
|
|
88
|
+
export declare const TYPE_URI: "https://trusttasks.org/spec/vta/webvh/dids/update/2.0";
|
|
89
|
+
/** Stable alias for this specification's request payload shape. */
|
|
90
|
+
export type Payload = WebVHDIDUpdatePayload;
|
|
91
|
+
/** Trust Task response type URI (request type URI + "#response"). */
|
|
92
|
+
export declare const RESPONSE_TYPE_URI: "https://trusttasks.org/spec/vta/webvh/dids/update/2.0#response";
|
|
93
|
+
/** Stable alias for this specification's success-response payload shape. */
|
|
94
|
+
export type Response = WebVHDIDUpdateResponsePayload;
|
|
95
|
+
/**
|
|
96
|
+
* This specification's payload schema, as a value.
|
|
97
|
+
*
|
|
98
|
+
* SPEC.md §7.2 item 2 is performed against this. It is shipped as data
|
|
99
|
+
* rather than only as a `.json` file because TypeScript types are erased
|
|
100
|
+
* at runtime: without a schema a consumer has nothing to validate, and
|
|
101
|
+
* every REQUIRED payload member is optional in practice. Cross-file
|
|
102
|
+
* `$ref`s are already inlined, so it needs no resolver.
|
|
103
|
+
*/
|
|
104
|
+
export declare const PAYLOAD_SCHEMA: {
|
|
105
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
106
|
+
readonly $id: "https://trusttasks.org/spec/vta/webvh/dids/update/2.0";
|
|
107
|
+
readonly title: "WebVH DID Update — payload";
|
|
108
|
+
readonly description: "Ask a Verifiable Trust Agent to publish a new entry in a did:webvh log it holds the update key for, changing anything but the DID's keys. Keys change only through the key-role tasks (vta/_shared/0.3/CONVENTIONS.md).";
|
|
109
|
+
readonly type: "object";
|
|
110
|
+
readonly additionalProperties: false;
|
|
111
|
+
readonly required: readonly ["did"];
|
|
112
|
+
readonly properties: {
|
|
113
|
+
readonly did: {
|
|
114
|
+
readonly type: "string";
|
|
115
|
+
readonly minLength: 1;
|
|
116
|
+
readonly description: "The did:webvh being updated. The agent MUST verify it speaks for this subject.";
|
|
117
|
+
};
|
|
118
|
+
readonly document: {
|
|
119
|
+
readonly type: "object";
|
|
120
|
+
readonly description: "The new DID document. Omit to leave it unchanged. It MUST carry, unchanged, the current `verificationMethod`, `authentication`, `assertionMethod`, `keyAgreement`, `capabilityInvocation`, `capabilityDelegation` and `keyRoles` members: a change to any of them is refused with `vta/webvh/dids/update:keyMembersManaged`, because keys change only through the key-role tasks. Appending the entry still rotates the DID's update key under pre-rotation, which a consent surface MUST render from the executor's preview, never from this document.";
|
|
121
|
+
};
|
|
122
|
+
readonly preRotationCount: {
|
|
123
|
+
readonly type: "integer";
|
|
124
|
+
readonly minimum: 0;
|
|
125
|
+
readonly description: "Number of pre-rotation commitments to publish. Omit to keep the current count. `0` is refused for a durable node identity (`vta/webvh/dids:preRotationRequired`).";
|
|
126
|
+
};
|
|
127
|
+
readonly witnesses: {
|
|
128
|
+
readonly description: "New witness configuration. Omit to keep the current one.";
|
|
129
|
+
};
|
|
130
|
+
readonly watchers: {
|
|
131
|
+
readonly type: "array";
|
|
132
|
+
readonly items: {
|
|
133
|
+
readonly type: "string";
|
|
134
|
+
};
|
|
135
|
+
readonly description: "New watcher URLs. Omit to keep the current set; an empty array removes them.";
|
|
136
|
+
};
|
|
137
|
+
readonly ttl: {
|
|
138
|
+
readonly type: "integer";
|
|
139
|
+
readonly minimum: 0;
|
|
140
|
+
readonly description: "New TTL in seconds. Omit to keep the current value.";
|
|
141
|
+
};
|
|
142
|
+
readonly label: {
|
|
143
|
+
readonly type: "string";
|
|
144
|
+
readonly maxLength: 256;
|
|
145
|
+
readonly description: "Operator-facing audit label.";
|
|
146
|
+
};
|
|
147
|
+
readonly expectedVersionId: {
|
|
148
|
+
readonly type: "string";
|
|
149
|
+
readonly minLength: 1;
|
|
150
|
+
readonly description: "Optimistic-concurrency precondition: the versionId the caller based this edit on. The agent MUST refuse the update if the DID's latest entry no longer matches. Without it a `get -> edit -> save` cycle silently overwrites a concurrent edit with a chain that is structurally valid, verifies perfectly, and is based on a stale read. Where a human approves the update the window is minutes wide, so this is a routine race rather than an exotic one. OPTIONAL because a scripted caller with no concurrent writers has nothing to protect against; not optional for anything a person looked at.";
|
|
151
|
+
};
|
|
152
|
+
readonly dryRun: {
|
|
153
|
+
readonly type: "boolean";
|
|
154
|
+
readonly description: "Compute and return the preview without writing anything but the plan (CONVENTIONS.md §3.1). Absent reads as false.";
|
|
155
|
+
};
|
|
156
|
+
readonly previewId: {
|
|
157
|
+
readonly type: "string";
|
|
158
|
+
readonly minLength: 16;
|
|
159
|
+
readonly description: "Apply exactly the plan a previous dry run of this same request returned; what an approval is bound to (CONVENTIONS.md §3.1–§3.2).";
|
|
160
|
+
};
|
|
161
|
+
readonly ext: {
|
|
162
|
+
readonly $ref: "#/$defs/Ext";
|
|
163
|
+
};
|
|
164
|
+
};
|
|
165
|
+
readonly $defs: {
|
|
166
|
+
readonly Response: {
|
|
167
|
+
readonly $anchor: "response";
|
|
168
|
+
readonly title: "WebVH DID Update — response payload";
|
|
169
|
+
readonly description: "The outcome. `preview` and `pendingApproval` carry the plan; `applied` carries the published entry.";
|
|
170
|
+
readonly type: "object";
|
|
171
|
+
readonly additionalProperties: false;
|
|
172
|
+
readonly required: readonly ["did", "outcome"];
|
|
173
|
+
readonly properties: {
|
|
174
|
+
readonly did: {
|
|
175
|
+
readonly type: "string";
|
|
176
|
+
};
|
|
177
|
+
readonly outcome: {
|
|
178
|
+
readonly $ref: "#/$defs/KeyRoleChangeOutcome";
|
|
179
|
+
};
|
|
180
|
+
readonly preview: {
|
|
181
|
+
readonly $ref: "#/$defs/DidDocumentPreview";
|
|
182
|
+
};
|
|
183
|
+
readonly approvals: {
|
|
184
|
+
readonly $ref: "#/$defs/KeyRoleApprovalState";
|
|
185
|
+
};
|
|
186
|
+
readonly newVersionId: {
|
|
187
|
+
readonly type: "string";
|
|
188
|
+
readonly description: "versionId of the entry just appended. A caller intending a further edit SHOULD pass this back as the next request's `expectedVersionId`.";
|
|
189
|
+
};
|
|
190
|
+
readonly newScid: {
|
|
191
|
+
readonly type: "string";
|
|
192
|
+
};
|
|
193
|
+
readonly newLogEntry: {
|
|
194
|
+
readonly type: "string";
|
|
195
|
+
readonly description: "The appended log entry, as JSON text.";
|
|
196
|
+
};
|
|
197
|
+
readonly updateKeysCount: {
|
|
198
|
+
readonly type: "integer";
|
|
199
|
+
readonly minimum: 0;
|
|
200
|
+
readonly description: "Update keys authorized AFTER this entry. Where `document` was supplied these are new keys — the previous ones no longer authorize anything.";
|
|
201
|
+
};
|
|
202
|
+
readonly preRotationKeyCount: {
|
|
203
|
+
readonly type: "integer";
|
|
204
|
+
readonly minimum: 0;
|
|
205
|
+
readonly description: "Pre-rotation commitments published by this entry.";
|
|
206
|
+
};
|
|
207
|
+
readonly serverless: {
|
|
208
|
+
readonly type: "boolean";
|
|
209
|
+
readonly description: "True when the agent holds the log itself and no hosting server was published to — the operator must fetch and redeploy `did.jsonl`.";
|
|
210
|
+
};
|
|
211
|
+
readonly ext: {
|
|
212
|
+
readonly $ref: "#/$defs/Ext";
|
|
213
|
+
};
|
|
214
|
+
};
|
|
215
|
+
};
|
|
216
|
+
readonly Ext: {
|
|
217
|
+
readonly title: "Ext";
|
|
218
|
+
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.";
|
|
219
|
+
readonly type: "object";
|
|
220
|
+
readonly minProperties: 1;
|
|
221
|
+
readonly additionalProperties: true;
|
|
222
|
+
readonly propertyNames: {
|
|
223
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
224
|
+
};
|
|
225
|
+
};
|
|
226
|
+
readonly KeyRoleApprovalState: {
|
|
227
|
+
readonly title: "KeyRoleApprovalState";
|
|
228
|
+
readonly type: "object";
|
|
229
|
+
readonly additionalProperties: false;
|
|
230
|
+
readonly required: readonly ["required", "received", "expiresAt"];
|
|
231
|
+
readonly description: "Approval progress of a change the VTA's policy gates on more than one approval (CONVENTIONS.md §3.3).";
|
|
232
|
+
readonly properties: {
|
|
233
|
+
readonly required: {
|
|
234
|
+
readonly type: "integer";
|
|
235
|
+
readonly minimum: 1;
|
|
236
|
+
readonly description: "Distinct approvals the VTA's policy requires.";
|
|
237
|
+
};
|
|
238
|
+
readonly received: {
|
|
239
|
+
readonly type: "integer";
|
|
240
|
+
readonly minimum: 0;
|
|
241
|
+
readonly description: "Distinct approvals recorded so far, including the initiator's own.";
|
|
242
|
+
};
|
|
243
|
+
readonly approvers: {
|
|
244
|
+
readonly type: "array";
|
|
245
|
+
readonly items: {
|
|
246
|
+
readonly type: "string";
|
|
247
|
+
};
|
|
248
|
+
readonly uniqueItems: true;
|
|
249
|
+
readonly description: "VIDs whose approvals were recorded. Custody projection only; omitted from a response to anyone who is not themselves an eligible approver of this change.";
|
|
250
|
+
};
|
|
251
|
+
readonly expiresAt: {
|
|
252
|
+
readonly type: "string";
|
|
253
|
+
readonly format: "date-time";
|
|
254
|
+
readonly description: "When the preview, and every approval bound to it, stops being usable.";
|
|
255
|
+
};
|
|
256
|
+
};
|
|
257
|
+
};
|
|
258
|
+
readonly DidDocumentPreview: {
|
|
259
|
+
readonly title: "DidDocumentPreview";
|
|
260
|
+
readonly type: "object";
|
|
261
|
+
readonly additionalProperties: false;
|
|
262
|
+
readonly required: readonly ["previewId", "baseVersionId", "expiresAt", "changes", "document", "updateKeyRotates"];
|
|
263
|
+
readonly description: "What a change would publish, computed by the VTA by running the handler it would run to apply it, and nothing else (CONVENTIONS.md §3.1). This is what a consent surface renders and what an approval is bound to.";
|
|
264
|
+
readonly properties: {
|
|
265
|
+
readonly previewId: {
|
|
266
|
+
readonly type: "string";
|
|
267
|
+
readonly minLength: 16;
|
|
268
|
+
readonly description: "Opaque, unguessable identifier for this exact plan. Carried back by the apply request, and the thing every approval is bound to.";
|
|
269
|
+
};
|
|
270
|
+
readonly baseVersionId: {
|
|
271
|
+
readonly type: "string";
|
|
272
|
+
readonly description: "versionId of the log entry the plan was computed against. The plan is void once the log moves past it.";
|
|
273
|
+
};
|
|
274
|
+
readonly expiresAt: {
|
|
275
|
+
readonly type: "string";
|
|
276
|
+
readonly format: "date-time";
|
|
277
|
+
};
|
|
278
|
+
readonly changes: {
|
|
279
|
+
readonly type: "array";
|
|
280
|
+
readonly items: {
|
|
281
|
+
readonly $ref: "#/$defs/DidDocumentChange";
|
|
282
|
+
};
|
|
283
|
+
readonly description: "Every change the entry would make, including the ones the caller did not ask for — in particular `rotateUpdateKey`, which accompanies every entry appended under pre-rotation.";
|
|
284
|
+
};
|
|
285
|
+
readonly document: {
|
|
286
|
+
readonly type: "object";
|
|
287
|
+
readonly description: "The complete DID document the entry would publish. Public data by construction; no key material beyond public halves.";
|
|
288
|
+
};
|
|
289
|
+
readonly warnings: {
|
|
290
|
+
readonly type: "array";
|
|
291
|
+
readonly items: {
|
|
292
|
+
readonly type: "string";
|
|
293
|
+
readonly enum: readonly ["preRotationDisabled", "singleKeyRole", "algorithmNotInAcceptedSet", "roleWillHaveNoClassicalKey", "attestationReissuanceRequired", "serverless"];
|
|
294
|
+
};
|
|
295
|
+
readonly uniqueItems: true;
|
|
296
|
+
readonly description: "Conditions a human should be shown before approving. `preRotationDisabled` — the entry leaves no committed successor, so a later update-key compromise can only end in deactivation. `singleKeyRole` — the role will hold one active key, so its next compromise empties it until replaced. `algorithmNotInAcceptedSet` — a verifier population the VTA knows of does not accept the new key's algorithm. `roleWillHaveNoClassicalKey` — every remaining key is post-quantum, which verifiers without post-quantum support cannot check. `attestationReissuanceRequired` — revoking this `attestation` key obliges the node to re-issue every attestation artefact still in force and re-sign every status list (VTI-KEY-133). `serverless` — the VTA will not publish the entry; the operator must.";
|
|
297
|
+
};
|
|
298
|
+
readonly updateKeyRotates: {
|
|
299
|
+
readonly type: "boolean";
|
|
300
|
+
readonly description: "True when appending this entry also moves the DID's update key to a committed successor. Stated as its own member, not left to be found in `changes`, because it is the consequence a reviewer most often misses.";
|
|
301
|
+
};
|
|
302
|
+
};
|
|
303
|
+
};
|
|
304
|
+
readonly DidDocumentChange: {
|
|
305
|
+
readonly title: "DidDocumentChange";
|
|
306
|
+
readonly type: "object";
|
|
307
|
+
readonly additionalProperties: false;
|
|
308
|
+
readonly required: readonly ["op", "role"];
|
|
309
|
+
readonly properties: {
|
|
310
|
+
readonly op: {
|
|
311
|
+
readonly type: "string";
|
|
312
|
+
readonly enum: readonly ["addKey", "retireKey", "revokeKey", "rotateUpdateKey", "setPreRotation"];
|
|
313
|
+
readonly description: "`addKey` — a verification method is added, listed in its role's relationship and in `keyRoles`. `retireKey` — a verification method leaves its relationship, `keyRoles` and the document. `revokeKey` — a verification method leaves its relationship and `keyRoles`, and the compromise is recorded (CONVENTIONS.md §7). `rotateUpdateKey` — the log's update key moves to a committed successor. `setPreRotation` — the number of successors committed changes.";
|
|
314
|
+
};
|
|
315
|
+
readonly role: {
|
|
316
|
+
readonly $ref: "#/$defs/KeyRole";
|
|
317
|
+
};
|
|
318
|
+
readonly verificationMethod: {
|
|
319
|
+
readonly type: "string";
|
|
320
|
+
};
|
|
321
|
+
readonly keyType: {
|
|
322
|
+
readonly $ref: "#/$defs/KeyType";
|
|
323
|
+
};
|
|
324
|
+
readonly publicKeyMultibase: {
|
|
325
|
+
readonly type: "string";
|
|
326
|
+
};
|
|
327
|
+
readonly relationships: {
|
|
328
|
+
readonly type: "array";
|
|
329
|
+
readonly items: {
|
|
330
|
+
readonly $ref: "#/$defs/DidVerificationRelationship";
|
|
331
|
+
};
|
|
332
|
+
readonly uniqueItems: true;
|
|
333
|
+
};
|
|
334
|
+
readonly preRotationCount: {
|
|
335
|
+
readonly type: "integer";
|
|
336
|
+
readonly minimum: 0;
|
|
337
|
+
};
|
|
338
|
+
};
|
|
339
|
+
};
|
|
340
|
+
readonly DidVerificationRelationship: {
|
|
341
|
+
readonly title: "DidVerificationRelationship";
|
|
342
|
+
readonly type: "string";
|
|
343
|
+
readonly enum: readonly ["authentication", "assertionMethod", "keyAgreement", "capabilityInvocation", "capabilityDelegation"];
|
|
344
|
+
readonly description: "A DID Core verification relationship.";
|
|
345
|
+
};
|
|
346
|
+
readonly KeyRole: {
|
|
347
|
+
readonly title: "KeyRole";
|
|
348
|
+
readonly type: "string";
|
|
349
|
+
readonly enum: readonly ["attestation", "operational", "messaging", "update"];
|
|
350
|
+
readonly description: "The named key role a key occupies in the DID (VTI-KEY-070 onward). `attestation` — the only keys in `assertionMethod`; sign the DID's attestation artefacts (membership and role credentials, endorsements, status lists, every other credential the node issues), through the VTA's signing service and nowhere else. Generated inside the VTA, never derived, never exportable, never in a backup. `operational` — the only keys in `authentication`; sign the node's own traffic (Trust Task requests and responses, DIDComm and TSP message signatures, invitations, notices, audit checkpoints) with proof purpose `authentication`. `messaging` — the only keys in `keyAgreement`; sign nothing. `update` — the keys that authorize appending to the DID's log (a did:webvh `updateKeys` entry) and the pre-rotation commitments that authorize the next ones; never a verification method, never in `keyRoles`. Generated inside the VTA, never derived, never exportable, never in a backup. No role permits `capabilityInvocation` or `capabilityDelegation` (VTI-KEY-075); both are reserved for a future role. The mapping is normative and is set out in CONVENTIONS.md §1. The set is an extensible registry and growing it is a MINOR change: a consumer that receives a role it does not implement MUST refuse the document rather than map the key onto a role it does know.";
|
|
351
|
+
};
|
|
352
|
+
readonly KeyType: {
|
|
353
|
+
readonly title: "KeyType";
|
|
354
|
+
readonly type: "string";
|
|
355
|
+
readonly enum: readonly ["ed25519", "x25519", "p256", "mldsa44", "mldsa65"];
|
|
356
|
+
readonly description: "Cryptographic algorithm the key material belongs to. `ed25519` signs (EdDSA), `x25519` performs key agreement and never signs, `p256` signs (ES256), and `mldsa44` and `mldsa65` sign with the post-quantum ML-DSA scheme of US NIST FIPS 204. The set is expected to grow as algorithms are standardised, and growing it is a MINOR change under SPEC.md §5.2: `keyType` selects no schema branch, so adding a value relaxes a constraint rather than narrowing one, and the generated libraries mark this enumeration non-exhaustive so that a consumer absorbs a new value rather than failing to compile. Two ML-DSA parameter sets are carried because two specifications require different ones — W3C Quantum-Resistant Cryptosuites defines Data Integrity suites only for ML-DSA-44, while Trust Spanning Protocol Rev 3 §8.1 mandates ML-DSA-65 — so the parameter set is chosen by whatever consumes the key and the two are not redundant. A consumer that does not implement a value it receives MUST refuse the document rather than substitute one it does support.";
|
|
357
|
+
};
|
|
358
|
+
readonly KeyRoleChangeOutcome: {
|
|
359
|
+
readonly title: "KeyRoleChangeOutcome";
|
|
360
|
+
readonly type: "string";
|
|
361
|
+
readonly enum: readonly ["preview", "applied", "pendingApproval"];
|
|
362
|
+
readonly description: "`preview` — nothing was written; the response carries the plan. `applied` — the entry was appended (and published, unless `serverless`). `pendingApproval` — the plan is recorded and awaits further approvals; nothing is published until they arrive (CONVENTIONS.md §3.3).";
|
|
363
|
+
};
|
|
364
|
+
};
|
|
365
|
+
};
|
|
366
|
+
/** As {@link PAYLOAD_SCHEMA}, for the success-response variant. */
|
|
367
|
+
export declare const RESPONSE_PAYLOAD_SCHEMA: {
|
|
368
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
369
|
+
readonly $ref: "#/$defs/Response";
|
|
370
|
+
readonly $defs: {
|
|
371
|
+
readonly Response: {
|
|
372
|
+
readonly $anchor: "response";
|
|
373
|
+
readonly title: "WebVH DID Update — response payload";
|
|
374
|
+
readonly description: "The outcome. `preview` and `pendingApproval` carry the plan; `applied` carries the published entry.";
|
|
375
|
+
readonly type: "object";
|
|
376
|
+
readonly additionalProperties: false;
|
|
377
|
+
readonly required: readonly ["did", "outcome"];
|
|
378
|
+
readonly properties: {
|
|
379
|
+
readonly did: {
|
|
380
|
+
readonly type: "string";
|
|
381
|
+
};
|
|
382
|
+
readonly outcome: {
|
|
383
|
+
readonly $ref: "#/$defs/KeyRoleChangeOutcome";
|
|
384
|
+
};
|
|
385
|
+
readonly preview: {
|
|
386
|
+
readonly $ref: "#/$defs/DidDocumentPreview";
|
|
387
|
+
};
|
|
388
|
+
readonly approvals: {
|
|
389
|
+
readonly $ref: "#/$defs/KeyRoleApprovalState";
|
|
390
|
+
};
|
|
391
|
+
readonly newVersionId: {
|
|
392
|
+
readonly type: "string";
|
|
393
|
+
readonly description: "versionId of the entry just appended. A caller intending a further edit SHOULD pass this back as the next request's `expectedVersionId`.";
|
|
394
|
+
};
|
|
395
|
+
readonly newScid: {
|
|
396
|
+
readonly type: "string";
|
|
397
|
+
};
|
|
398
|
+
readonly newLogEntry: {
|
|
399
|
+
readonly type: "string";
|
|
400
|
+
readonly description: "The appended log entry, as JSON text.";
|
|
401
|
+
};
|
|
402
|
+
readonly updateKeysCount: {
|
|
403
|
+
readonly type: "integer";
|
|
404
|
+
readonly minimum: 0;
|
|
405
|
+
readonly description: "Update keys authorized AFTER this entry. Where `document` was supplied these are new keys — the previous ones no longer authorize anything.";
|
|
406
|
+
};
|
|
407
|
+
readonly preRotationKeyCount: {
|
|
408
|
+
readonly type: "integer";
|
|
409
|
+
readonly minimum: 0;
|
|
410
|
+
readonly description: "Pre-rotation commitments published by this entry.";
|
|
411
|
+
};
|
|
412
|
+
readonly serverless: {
|
|
413
|
+
readonly type: "boolean";
|
|
414
|
+
readonly description: "True when the agent holds the log itself and no hosting server was published to — the operator must fetch and redeploy `did.jsonl`.";
|
|
415
|
+
};
|
|
416
|
+
readonly ext: {
|
|
417
|
+
readonly $ref: "#/$defs/Ext";
|
|
418
|
+
};
|
|
419
|
+
};
|
|
420
|
+
};
|
|
421
|
+
readonly Ext: {
|
|
422
|
+
readonly title: "Ext";
|
|
423
|
+
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.";
|
|
424
|
+
readonly type: "object";
|
|
425
|
+
readonly minProperties: 1;
|
|
426
|
+
readonly additionalProperties: true;
|
|
427
|
+
readonly propertyNames: {
|
|
428
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
429
|
+
};
|
|
430
|
+
};
|
|
431
|
+
readonly KeyRoleApprovalState: {
|
|
432
|
+
readonly title: "KeyRoleApprovalState";
|
|
433
|
+
readonly type: "object";
|
|
434
|
+
readonly additionalProperties: false;
|
|
435
|
+
readonly required: readonly ["required", "received", "expiresAt"];
|
|
436
|
+
readonly description: "Approval progress of a change the VTA's policy gates on more than one approval (CONVENTIONS.md §3.3).";
|
|
437
|
+
readonly properties: {
|
|
438
|
+
readonly required: {
|
|
439
|
+
readonly type: "integer";
|
|
440
|
+
readonly minimum: 1;
|
|
441
|
+
readonly description: "Distinct approvals the VTA's policy requires.";
|
|
442
|
+
};
|
|
443
|
+
readonly received: {
|
|
444
|
+
readonly type: "integer";
|
|
445
|
+
readonly minimum: 0;
|
|
446
|
+
readonly description: "Distinct approvals recorded so far, including the initiator's own.";
|
|
447
|
+
};
|
|
448
|
+
readonly approvers: {
|
|
449
|
+
readonly type: "array";
|
|
450
|
+
readonly items: {
|
|
451
|
+
readonly type: "string";
|
|
452
|
+
};
|
|
453
|
+
readonly uniqueItems: true;
|
|
454
|
+
readonly description: "VIDs whose approvals were recorded. Custody projection only; omitted from a response to anyone who is not themselves an eligible approver of this change.";
|
|
455
|
+
};
|
|
456
|
+
readonly expiresAt: {
|
|
457
|
+
readonly type: "string";
|
|
458
|
+
readonly format: "date-time";
|
|
459
|
+
readonly description: "When the preview, and every approval bound to it, stops being usable.";
|
|
460
|
+
};
|
|
461
|
+
};
|
|
462
|
+
};
|
|
463
|
+
readonly DidDocumentPreview: {
|
|
464
|
+
readonly title: "DidDocumentPreview";
|
|
465
|
+
readonly type: "object";
|
|
466
|
+
readonly additionalProperties: false;
|
|
467
|
+
readonly required: readonly ["previewId", "baseVersionId", "expiresAt", "changes", "document", "updateKeyRotates"];
|
|
468
|
+
readonly description: "What a change would publish, computed by the VTA by running the handler it would run to apply it, and nothing else (CONVENTIONS.md §3.1). This is what a consent surface renders and what an approval is bound to.";
|
|
469
|
+
readonly properties: {
|
|
470
|
+
readonly previewId: {
|
|
471
|
+
readonly type: "string";
|
|
472
|
+
readonly minLength: 16;
|
|
473
|
+
readonly description: "Opaque, unguessable identifier for this exact plan. Carried back by the apply request, and the thing every approval is bound to.";
|
|
474
|
+
};
|
|
475
|
+
readonly baseVersionId: {
|
|
476
|
+
readonly type: "string";
|
|
477
|
+
readonly description: "versionId of the log entry the plan was computed against. The plan is void once the log moves past it.";
|
|
478
|
+
};
|
|
479
|
+
readonly expiresAt: {
|
|
480
|
+
readonly type: "string";
|
|
481
|
+
readonly format: "date-time";
|
|
482
|
+
};
|
|
483
|
+
readonly changes: {
|
|
484
|
+
readonly type: "array";
|
|
485
|
+
readonly items: {
|
|
486
|
+
readonly $ref: "#/$defs/DidDocumentChange";
|
|
487
|
+
};
|
|
488
|
+
readonly description: "Every change the entry would make, including the ones the caller did not ask for — in particular `rotateUpdateKey`, which accompanies every entry appended under pre-rotation.";
|
|
489
|
+
};
|
|
490
|
+
readonly document: {
|
|
491
|
+
readonly type: "object";
|
|
492
|
+
readonly description: "The complete DID document the entry would publish. Public data by construction; no key material beyond public halves.";
|
|
493
|
+
};
|
|
494
|
+
readonly warnings: {
|
|
495
|
+
readonly type: "array";
|
|
496
|
+
readonly items: {
|
|
497
|
+
readonly type: "string";
|
|
498
|
+
readonly enum: readonly ["preRotationDisabled", "singleKeyRole", "algorithmNotInAcceptedSet", "roleWillHaveNoClassicalKey", "attestationReissuanceRequired", "serverless"];
|
|
499
|
+
};
|
|
500
|
+
readonly uniqueItems: true;
|
|
501
|
+
readonly description: "Conditions a human should be shown before approving. `preRotationDisabled` — the entry leaves no committed successor, so a later update-key compromise can only end in deactivation. `singleKeyRole` — the role will hold one active key, so its next compromise empties it until replaced. `algorithmNotInAcceptedSet` — a verifier population the VTA knows of does not accept the new key's algorithm. `roleWillHaveNoClassicalKey` — every remaining key is post-quantum, which verifiers without post-quantum support cannot check. `attestationReissuanceRequired` — revoking this `attestation` key obliges the node to re-issue every attestation artefact still in force and re-sign every status list (VTI-KEY-133). `serverless` — the VTA will not publish the entry; the operator must.";
|
|
502
|
+
};
|
|
503
|
+
readonly updateKeyRotates: {
|
|
504
|
+
readonly type: "boolean";
|
|
505
|
+
readonly description: "True when appending this entry also moves the DID's update key to a committed successor. Stated as its own member, not left to be found in `changes`, because it is the consequence a reviewer most often misses.";
|
|
506
|
+
};
|
|
507
|
+
};
|
|
508
|
+
};
|
|
509
|
+
readonly DidDocumentChange: {
|
|
510
|
+
readonly title: "DidDocumentChange";
|
|
511
|
+
readonly type: "object";
|
|
512
|
+
readonly additionalProperties: false;
|
|
513
|
+
readonly required: readonly ["op", "role"];
|
|
514
|
+
readonly properties: {
|
|
515
|
+
readonly op: {
|
|
516
|
+
readonly type: "string";
|
|
517
|
+
readonly enum: readonly ["addKey", "retireKey", "revokeKey", "rotateUpdateKey", "setPreRotation"];
|
|
518
|
+
readonly description: "`addKey` — a verification method is added, listed in its role's relationship and in `keyRoles`. `retireKey` — a verification method leaves its relationship, `keyRoles` and the document. `revokeKey` — a verification method leaves its relationship and `keyRoles`, and the compromise is recorded (CONVENTIONS.md §7). `rotateUpdateKey` — the log's update key moves to a committed successor. `setPreRotation` — the number of successors committed changes.";
|
|
519
|
+
};
|
|
520
|
+
readonly role: {
|
|
521
|
+
readonly $ref: "#/$defs/KeyRole";
|
|
522
|
+
};
|
|
523
|
+
readonly verificationMethod: {
|
|
524
|
+
readonly type: "string";
|
|
525
|
+
};
|
|
526
|
+
readonly keyType: {
|
|
527
|
+
readonly $ref: "#/$defs/KeyType";
|
|
528
|
+
};
|
|
529
|
+
readonly publicKeyMultibase: {
|
|
530
|
+
readonly type: "string";
|
|
531
|
+
};
|
|
532
|
+
readonly relationships: {
|
|
533
|
+
readonly type: "array";
|
|
534
|
+
readonly items: {
|
|
535
|
+
readonly $ref: "#/$defs/DidVerificationRelationship";
|
|
536
|
+
};
|
|
537
|
+
readonly uniqueItems: true;
|
|
538
|
+
};
|
|
539
|
+
readonly preRotationCount: {
|
|
540
|
+
readonly type: "integer";
|
|
541
|
+
readonly minimum: 0;
|
|
542
|
+
};
|
|
543
|
+
};
|
|
544
|
+
};
|
|
545
|
+
readonly DidVerificationRelationship: {
|
|
546
|
+
readonly title: "DidVerificationRelationship";
|
|
547
|
+
readonly type: "string";
|
|
548
|
+
readonly enum: readonly ["authentication", "assertionMethod", "keyAgreement", "capabilityInvocation", "capabilityDelegation"];
|
|
549
|
+
readonly description: "A DID Core verification relationship.";
|
|
550
|
+
};
|
|
551
|
+
readonly KeyRole: {
|
|
552
|
+
readonly title: "KeyRole";
|
|
553
|
+
readonly type: "string";
|
|
554
|
+
readonly enum: readonly ["attestation", "operational", "messaging", "update"];
|
|
555
|
+
readonly description: "The named key role a key occupies in the DID (VTI-KEY-070 onward). `attestation` — the only keys in `assertionMethod`; sign the DID's attestation artefacts (membership and role credentials, endorsements, status lists, every other credential the node issues), through the VTA's signing service and nowhere else. Generated inside the VTA, never derived, never exportable, never in a backup. `operational` — the only keys in `authentication`; sign the node's own traffic (Trust Task requests and responses, DIDComm and TSP message signatures, invitations, notices, audit checkpoints) with proof purpose `authentication`. `messaging` — the only keys in `keyAgreement`; sign nothing. `update` — the keys that authorize appending to the DID's log (a did:webvh `updateKeys` entry) and the pre-rotation commitments that authorize the next ones; never a verification method, never in `keyRoles`. Generated inside the VTA, never derived, never exportable, never in a backup. No role permits `capabilityInvocation` or `capabilityDelegation` (VTI-KEY-075); both are reserved for a future role. The mapping is normative and is set out in CONVENTIONS.md §1. The set is an extensible registry and growing it is a MINOR change: a consumer that receives a role it does not implement MUST refuse the document rather than map the key onto a role it does know.";
|
|
556
|
+
};
|
|
557
|
+
readonly KeyType: {
|
|
558
|
+
readonly title: "KeyType";
|
|
559
|
+
readonly type: "string";
|
|
560
|
+
readonly enum: readonly ["ed25519", "x25519", "p256", "mldsa44", "mldsa65"];
|
|
561
|
+
readonly description: "Cryptographic algorithm the key material belongs to. `ed25519` signs (EdDSA), `x25519` performs key agreement and never signs, `p256` signs (ES256), and `mldsa44` and `mldsa65` sign with the post-quantum ML-DSA scheme of US NIST FIPS 204. The set is expected to grow as algorithms are standardised, and growing it is a MINOR change under SPEC.md §5.2: `keyType` selects no schema branch, so adding a value relaxes a constraint rather than narrowing one, and the generated libraries mark this enumeration non-exhaustive so that a consumer absorbs a new value rather than failing to compile. Two ML-DSA parameter sets are carried because two specifications require different ones — W3C Quantum-Resistant Cryptosuites defines Data Integrity suites only for ML-DSA-44, while Trust Spanning Protocol Rev 3 §8.1 mandates ML-DSA-65 — so the parameter set is chosen by whatever consumes the key and the two are not redundant. A consumer that does not implement a value it receives MUST refuse the document rather than substitute one it does support.";
|
|
562
|
+
};
|
|
563
|
+
readonly KeyRoleChangeOutcome: {
|
|
564
|
+
readonly title: "KeyRoleChangeOutcome";
|
|
565
|
+
readonly type: "string";
|
|
566
|
+
readonly enum: readonly ["preview", "applied", "pendingApproval"];
|
|
567
|
+
readonly description: "`preview` — nothing was written; the response carries the plan. `applied` — the entry was appended (and published, unless `serverless`). `pendingApproval` — the plan is recorded and awaits further approvals; nothing is published until they arrive (CONVENTIONS.md §3.3).";
|
|
568
|
+
};
|
|
569
|
+
};
|
|
570
|
+
};
|
|
571
|
+
/**
|
|
572
|
+
* SPEC.md §7.2 policy for the request variant, from this specification's
|
|
573
|
+
* front matter. Pass to `consumeInbound` — items 5b, 7 and 8 are
|
|
574
|
+
* per-specification and cannot be derived from the document alone, and
|
|
575
|
+
* item 2 needs the schema this carries.
|
|
576
|
+
*/
|
|
577
|
+
export declare const SPEC: {
|
|
578
|
+
readonly typeUri: "https://trusttasks.org/spec/vta/webvh/dids/update/2.0";
|
|
579
|
+
readonly isBearer: false;
|
|
580
|
+
readonly isProofRequired: true;
|
|
581
|
+
readonly isRecipientRequired: true;
|
|
582
|
+
readonly isIssuedAtRequired: true;
|
|
583
|
+
readonly payloadSchema: {
|
|
584
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
585
|
+
readonly $id: "https://trusttasks.org/spec/vta/webvh/dids/update/2.0";
|
|
586
|
+
readonly title: "WebVH DID Update — payload";
|
|
587
|
+
readonly description: "Ask a Verifiable Trust Agent to publish a new entry in a did:webvh log it holds the update key for, changing anything but the DID's keys. Keys change only through the key-role tasks (vta/_shared/0.3/CONVENTIONS.md).";
|
|
588
|
+
readonly type: "object";
|
|
589
|
+
readonly additionalProperties: false;
|
|
590
|
+
readonly required: readonly ["did"];
|
|
591
|
+
readonly properties: {
|
|
592
|
+
readonly did: {
|
|
593
|
+
readonly type: "string";
|
|
594
|
+
readonly minLength: 1;
|
|
595
|
+
readonly description: "The did:webvh being updated. The agent MUST verify it speaks for this subject.";
|
|
596
|
+
};
|
|
597
|
+
readonly document: {
|
|
598
|
+
readonly type: "object";
|
|
599
|
+
readonly description: "The new DID document. Omit to leave it unchanged. It MUST carry, unchanged, the current `verificationMethod`, `authentication`, `assertionMethod`, `keyAgreement`, `capabilityInvocation`, `capabilityDelegation` and `keyRoles` members: a change to any of them is refused with `vta/webvh/dids/update:keyMembersManaged`, because keys change only through the key-role tasks. Appending the entry still rotates the DID's update key under pre-rotation, which a consent surface MUST render from the executor's preview, never from this document.";
|
|
600
|
+
};
|
|
601
|
+
readonly preRotationCount: {
|
|
602
|
+
readonly type: "integer";
|
|
603
|
+
readonly minimum: 0;
|
|
604
|
+
readonly description: "Number of pre-rotation commitments to publish. Omit to keep the current count. `0` is refused for a durable node identity (`vta/webvh/dids:preRotationRequired`).";
|
|
605
|
+
};
|
|
606
|
+
readonly witnesses: {
|
|
607
|
+
readonly description: "New witness configuration. Omit to keep the current one.";
|
|
608
|
+
};
|
|
609
|
+
readonly watchers: {
|
|
610
|
+
readonly type: "array";
|
|
611
|
+
readonly items: {
|
|
612
|
+
readonly type: "string";
|
|
613
|
+
};
|
|
614
|
+
readonly description: "New watcher URLs. Omit to keep the current set; an empty array removes them.";
|
|
615
|
+
};
|
|
616
|
+
readonly ttl: {
|
|
617
|
+
readonly type: "integer";
|
|
618
|
+
readonly minimum: 0;
|
|
619
|
+
readonly description: "New TTL in seconds. Omit to keep the current value.";
|
|
620
|
+
};
|
|
621
|
+
readonly label: {
|
|
622
|
+
readonly type: "string";
|
|
623
|
+
readonly maxLength: 256;
|
|
624
|
+
readonly description: "Operator-facing audit label.";
|
|
625
|
+
};
|
|
626
|
+
readonly expectedVersionId: {
|
|
627
|
+
readonly type: "string";
|
|
628
|
+
readonly minLength: 1;
|
|
629
|
+
readonly description: "Optimistic-concurrency precondition: the versionId the caller based this edit on. The agent MUST refuse the update if the DID's latest entry no longer matches. Without it a `get -> edit -> save` cycle silently overwrites a concurrent edit with a chain that is structurally valid, verifies perfectly, and is based on a stale read. Where a human approves the update the window is minutes wide, so this is a routine race rather than an exotic one. OPTIONAL because a scripted caller with no concurrent writers has nothing to protect against; not optional for anything a person looked at.";
|
|
630
|
+
};
|
|
631
|
+
readonly dryRun: {
|
|
632
|
+
readonly type: "boolean";
|
|
633
|
+
readonly description: "Compute and return the preview without writing anything but the plan (CONVENTIONS.md §3.1). Absent reads as false.";
|
|
634
|
+
};
|
|
635
|
+
readonly previewId: {
|
|
636
|
+
readonly type: "string";
|
|
637
|
+
readonly minLength: 16;
|
|
638
|
+
readonly description: "Apply exactly the plan a previous dry run of this same request returned; what an approval is bound to (CONVENTIONS.md §3.1–§3.2).";
|
|
639
|
+
};
|
|
640
|
+
readonly ext: {
|
|
641
|
+
readonly $ref: "#/$defs/Ext";
|
|
642
|
+
};
|
|
643
|
+
};
|
|
644
|
+
readonly $defs: {
|
|
645
|
+
readonly Response: {
|
|
646
|
+
readonly $anchor: "response";
|
|
647
|
+
readonly title: "WebVH DID Update — response payload";
|
|
648
|
+
readonly description: "The outcome. `preview` and `pendingApproval` carry the plan; `applied` carries the published entry.";
|
|
649
|
+
readonly type: "object";
|
|
650
|
+
readonly additionalProperties: false;
|
|
651
|
+
readonly required: readonly ["did", "outcome"];
|
|
652
|
+
readonly properties: {
|
|
653
|
+
readonly did: {
|
|
654
|
+
readonly type: "string";
|
|
655
|
+
};
|
|
656
|
+
readonly outcome: {
|
|
657
|
+
readonly $ref: "#/$defs/KeyRoleChangeOutcome";
|
|
658
|
+
};
|
|
659
|
+
readonly preview: {
|
|
660
|
+
readonly $ref: "#/$defs/DidDocumentPreview";
|
|
661
|
+
};
|
|
662
|
+
readonly approvals: {
|
|
663
|
+
readonly $ref: "#/$defs/KeyRoleApprovalState";
|
|
664
|
+
};
|
|
665
|
+
readonly newVersionId: {
|
|
666
|
+
readonly type: "string";
|
|
667
|
+
readonly description: "versionId of the entry just appended. A caller intending a further edit SHOULD pass this back as the next request's `expectedVersionId`.";
|
|
668
|
+
};
|
|
669
|
+
readonly newScid: {
|
|
670
|
+
readonly type: "string";
|
|
671
|
+
};
|
|
672
|
+
readonly newLogEntry: {
|
|
673
|
+
readonly type: "string";
|
|
674
|
+
readonly description: "The appended log entry, as JSON text.";
|
|
675
|
+
};
|
|
676
|
+
readonly updateKeysCount: {
|
|
677
|
+
readonly type: "integer";
|
|
678
|
+
readonly minimum: 0;
|
|
679
|
+
readonly description: "Update keys authorized AFTER this entry. Where `document` was supplied these are new keys — the previous ones no longer authorize anything.";
|
|
680
|
+
};
|
|
681
|
+
readonly preRotationKeyCount: {
|
|
682
|
+
readonly type: "integer";
|
|
683
|
+
readonly minimum: 0;
|
|
684
|
+
readonly description: "Pre-rotation commitments published by this entry.";
|
|
685
|
+
};
|
|
686
|
+
readonly serverless: {
|
|
687
|
+
readonly type: "boolean";
|
|
688
|
+
readonly description: "True when the agent holds the log itself and no hosting server was published to — the operator must fetch and redeploy `did.jsonl`.";
|
|
689
|
+
};
|
|
690
|
+
readonly ext: {
|
|
691
|
+
readonly $ref: "#/$defs/Ext";
|
|
692
|
+
};
|
|
693
|
+
};
|
|
694
|
+
};
|
|
695
|
+
readonly Ext: {
|
|
696
|
+
readonly title: "Ext";
|
|
697
|
+
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.";
|
|
698
|
+
readonly type: "object";
|
|
699
|
+
readonly minProperties: 1;
|
|
700
|
+
readonly additionalProperties: true;
|
|
701
|
+
readonly propertyNames: {
|
|
702
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
703
|
+
};
|
|
704
|
+
};
|
|
705
|
+
readonly KeyRoleApprovalState: {
|
|
706
|
+
readonly title: "KeyRoleApprovalState";
|
|
707
|
+
readonly type: "object";
|
|
708
|
+
readonly additionalProperties: false;
|
|
709
|
+
readonly required: readonly ["required", "received", "expiresAt"];
|
|
710
|
+
readonly description: "Approval progress of a change the VTA's policy gates on more than one approval (CONVENTIONS.md §3.3).";
|
|
711
|
+
readonly properties: {
|
|
712
|
+
readonly required: {
|
|
713
|
+
readonly type: "integer";
|
|
714
|
+
readonly minimum: 1;
|
|
715
|
+
readonly description: "Distinct approvals the VTA's policy requires.";
|
|
716
|
+
};
|
|
717
|
+
readonly received: {
|
|
718
|
+
readonly type: "integer";
|
|
719
|
+
readonly minimum: 0;
|
|
720
|
+
readonly description: "Distinct approvals recorded so far, including the initiator's own.";
|
|
721
|
+
};
|
|
722
|
+
readonly approvers: {
|
|
723
|
+
readonly type: "array";
|
|
724
|
+
readonly items: {
|
|
725
|
+
readonly type: "string";
|
|
726
|
+
};
|
|
727
|
+
readonly uniqueItems: true;
|
|
728
|
+
readonly description: "VIDs whose approvals were recorded. Custody projection only; omitted from a response to anyone who is not themselves an eligible approver of this change.";
|
|
729
|
+
};
|
|
730
|
+
readonly expiresAt: {
|
|
731
|
+
readonly type: "string";
|
|
732
|
+
readonly format: "date-time";
|
|
733
|
+
readonly description: "When the preview, and every approval bound to it, stops being usable.";
|
|
734
|
+
};
|
|
735
|
+
};
|
|
736
|
+
};
|
|
737
|
+
readonly DidDocumentPreview: {
|
|
738
|
+
readonly title: "DidDocumentPreview";
|
|
739
|
+
readonly type: "object";
|
|
740
|
+
readonly additionalProperties: false;
|
|
741
|
+
readonly required: readonly ["previewId", "baseVersionId", "expiresAt", "changes", "document", "updateKeyRotates"];
|
|
742
|
+
readonly description: "What a change would publish, computed by the VTA by running the handler it would run to apply it, and nothing else (CONVENTIONS.md §3.1). This is what a consent surface renders and what an approval is bound to.";
|
|
743
|
+
readonly properties: {
|
|
744
|
+
readonly previewId: {
|
|
745
|
+
readonly type: "string";
|
|
746
|
+
readonly minLength: 16;
|
|
747
|
+
readonly description: "Opaque, unguessable identifier for this exact plan. Carried back by the apply request, and the thing every approval is bound to.";
|
|
748
|
+
};
|
|
749
|
+
readonly baseVersionId: {
|
|
750
|
+
readonly type: "string";
|
|
751
|
+
readonly description: "versionId of the log entry the plan was computed against. The plan is void once the log moves past it.";
|
|
752
|
+
};
|
|
753
|
+
readonly expiresAt: {
|
|
754
|
+
readonly type: "string";
|
|
755
|
+
readonly format: "date-time";
|
|
756
|
+
};
|
|
757
|
+
readonly changes: {
|
|
758
|
+
readonly type: "array";
|
|
759
|
+
readonly items: {
|
|
760
|
+
readonly $ref: "#/$defs/DidDocumentChange";
|
|
761
|
+
};
|
|
762
|
+
readonly description: "Every change the entry would make, including the ones the caller did not ask for — in particular `rotateUpdateKey`, which accompanies every entry appended under pre-rotation.";
|
|
763
|
+
};
|
|
764
|
+
readonly document: {
|
|
765
|
+
readonly type: "object";
|
|
766
|
+
readonly description: "The complete DID document the entry would publish. Public data by construction; no key material beyond public halves.";
|
|
767
|
+
};
|
|
768
|
+
readonly warnings: {
|
|
769
|
+
readonly type: "array";
|
|
770
|
+
readonly items: {
|
|
771
|
+
readonly type: "string";
|
|
772
|
+
readonly enum: readonly ["preRotationDisabled", "singleKeyRole", "algorithmNotInAcceptedSet", "roleWillHaveNoClassicalKey", "attestationReissuanceRequired", "serverless"];
|
|
773
|
+
};
|
|
774
|
+
readonly uniqueItems: true;
|
|
775
|
+
readonly description: "Conditions a human should be shown before approving. `preRotationDisabled` — the entry leaves no committed successor, so a later update-key compromise can only end in deactivation. `singleKeyRole` — the role will hold one active key, so its next compromise empties it until replaced. `algorithmNotInAcceptedSet` — a verifier population the VTA knows of does not accept the new key's algorithm. `roleWillHaveNoClassicalKey` — every remaining key is post-quantum, which verifiers without post-quantum support cannot check. `attestationReissuanceRequired` — revoking this `attestation` key obliges the node to re-issue every attestation artefact still in force and re-sign every status list (VTI-KEY-133). `serverless` — the VTA will not publish the entry; the operator must.";
|
|
776
|
+
};
|
|
777
|
+
readonly updateKeyRotates: {
|
|
778
|
+
readonly type: "boolean";
|
|
779
|
+
readonly description: "True when appending this entry also moves the DID's update key to a committed successor. Stated as its own member, not left to be found in `changes`, because it is the consequence a reviewer most often misses.";
|
|
780
|
+
};
|
|
781
|
+
};
|
|
782
|
+
};
|
|
783
|
+
readonly DidDocumentChange: {
|
|
784
|
+
readonly title: "DidDocumentChange";
|
|
785
|
+
readonly type: "object";
|
|
786
|
+
readonly additionalProperties: false;
|
|
787
|
+
readonly required: readonly ["op", "role"];
|
|
788
|
+
readonly properties: {
|
|
789
|
+
readonly op: {
|
|
790
|
+
readonly type: "string";
|
|
791
|
+
readonly enum: readonly ["addKey", "retireKey", "revokeKey", "rotateUpdateKey", "setPreRotation"];
|
|
792
|
+
readonly description: "`addKey` — a verification method is added, listed in its role's relationship and in `keyRoles`. `retireKey` — a verification method leaves its relationship, `keyRoles` and the document. `revokeKey` — a verification method leaves its relationship and `keyRoles`, and the compromise is recorded (CONVENTIONS.md §7). `rotateUpdateKey` — the log's update key moves to a committed successor. `setPreRotation` — the number of successors committed changes.";
|
|
793
|
+
};
|
|
794
|
+
readonly role: {
|
|
795
|
+
readonly $ref: "#/$defs/KeyRole";
|
|
796
|
+
};
|
|
797
|
+
readonly verificationMethod: {
|
|
798
|
+
readonly type: "string";
|
|
799
|
+
};
|
|
800
|
+
readonly keyType: {
|
|
801
|
+
readonly $ref: "#/$defs/KeyType";
|
|
802
|
+
};
|
|
803
|
+
readonly publicKeyMultibase: {
|
|
804
|
+
readonly type: "string";
|
|
805
|
+
};
|
|
806
|
+
readonly relationships: {
|
|
807
|
+
readonly type: "array";
|
|
808
|
+
readonly items: {
|
|
809
|
+
readonly $ref: "#/$defs/DidVerificationRelationship";
|
|
810
|
+
};
|
|
811
|
+
readonly uniqueItems: true;
|
|
812
|
+
};
|
|
813
|
+
readonly preRotationCount: {
|
|
814
|
+
readonly type: "integer";
|
|
815
|
+
readonly minimum: 0;
|
|
816
|
+
};
|
|
817
|
+
};
|
|
818
|
+
};
|
|
819
|
+
readonly DidVerificationRelationship: {
|
|
820
|
+
readonly title: "DidVerificationRelationship";
|
|
821
|
+
readonly type: "string";
|
|
822
|
+
readonly enum: readonly ["authentication", "assertionMethod", "keyAgreement", "capabilityInvocation", "capabilityDelegation"];
|
|
823
|
+
readonly description: "A DID Core verification relationship.";
|
|
824
|
+
};
|
|
825
|
+
readonly KeyRole: {
|
|
826
|
+
readonly title: "KeyRole";
|
|
827
|
+
readonly type: "string";
|
|
828
|
+
readonly enum: readonly ["attestation", "operational", "messaging", "update"];
|
|
829
|
+
readonly description: "The named key role a key occupies in the DID (VTI-KEY-070 onward). `attestation` — the only keys in `assertionMethod`; sign the DID's attestation artefacts (membership and role credentials, endorsements, status lists, every other credential the node issues), through the VTA's signing service and nowhere else. Generated inside the VTA, never derived, never exportable, never in a backup. `operational` — the only keys in `authentication`; sign the node's own traffic (Trust Task requests and responses, DIDComm and TSP message signatures, invitations, notices, audit checkpoints) with proof purpose `authentication`. `messaging` — the only keys in `keyAgreement`; sign nothing. `update` — the keys that authorize appending to the DID's log (a did:webvh `updateKeys` entry) and the pre-rotation commitments that authorize the next ones; never a verification method, never in `keyRoles`. Generated inside the VTA, never derived, never exportable, never in a backup. No role permits `capabilityInvocation` or `capabilityDelegation` (VTI-KEY-075); both are reserved for a future role. The mapping is normative and is set out in CONVENTIONS.md §1. The set is an extensible registry and growing it is a MINOR change: a consumer that receives a role it does not implement MUST refuse the document rather than map the key onto a role it does know.";
|
|
830
|
+
};
|
|
831
|
+
readonly KeyType: {
|
|
832
|
+
readonly title: "KeyType";
|
|
833
|
+
readonly type: "string";
|
|
834
|
+
readonly enum: readonly ["ed25519", "x25519", "p256", "mldsa44", "mldsa65"];
|
|
835
|
+
readonly description: "Cryptographic algorithm the key material belongs to. `ed25519` signs (EdDSA), `x25519` performs key agreement and never signs, `p256` signs (ES256), and `mldsa44` and `mldsa65` sign with the post-quantum ML-DSA scheme of US NIST FIPS 204. The set is expected to grow as algorithms are standardised, and growing it is a MINOR change under SPEC.md §5.2: `keyType` selects no schema branch, so adding a value relaxes a constraint rather than narrowing one, and the generated libraries mark this enumeration non-exhaustive so that a consumer absorbs a new value rather than failing to compile. Two ML-DSA parameter sets are carried because two specifications require different ones — W3C Quantum-Resistant Cryptosuites defines Data Integrity suites only for ML-DSA-44, while Trust Spanning Protocol Rev 3 §8.1 mandates ML-DSA-65 — so the parameter set is chosen by whatever consumes the key and the two are not redundant. A consumer that does not implement a value it receives MUST refuse the document rather than substitute one it does support.";
|
|
836
|
+
};
|
|
837
|
+
readonly KeyRoleChangeOutcome: {
|
|
838
|
+
readonly title: "KeyRoleChangeOutcome";
|
|
839
|
+
readonly type: "string";
|
|
840
|
+
readonly enum: readonly ["preview", "applied", "pendingApproval"];
|
|
841
|
+
readonly description: "`preview` — nothing was written; the response carries the plan. `applied` — the entry was appended (and published, unless `serverless`). `pendingApproval` — the plan is recorded and awaits further approvals; nothing is published until they arrive (CONVENTIONS.md §3.3).";
|
|
842
|
+
};
|
|
843
|
+
};
|
|
844
|
+
};
|
|
845
|
+
};
|
|
846
|
+
/**
|
|
847
|
+
* SPEC.md §7.2 policy for the success-response variant. `isRecipientRequired`
|
|
848
|
+
* tracks the *issuer* party's requirement because a response swaps the
|
|
849
|
+
* parties (§7.3 item 5).
|
|
850
|
+
*/
|
|
851
|
+
export declare const RESPONSE_SPEC: {
|
|
852
|
+
readonly typeUri: "https://trusttasks.org/spec/vta/webvh/dids/update/2.0#response";
|
|
853
|
+
readonly isBearer: false;
|
|
854
|
+
readonly isProofRequired: true;
|
|
855
|
+
readonly isRecipientRequired: true;
|
|
856
|
+
readonly isIssuedAtRequired: true;
|
|
857
|
+
readonly payloadSchema: {
|
|
858
|
+
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
859
|
+
readonly $ref: "#/$defs/Response";
|
|
860
|
+
readonly $defs: {
|
|
861
|
+
readonly Response: {
|
|
862
|
+
readonly $anchor: "response";
|
|
863
|
+
readonly title: "WebVH DID Update — response payload";
|
|
864
|
+
readonly description: "The outcome. `preview` and `pendingApproval` carry the plan; `applied` carries the published entry.";
|
|
865
|
+
readonly type: "object";
|
|
866
|
+
readonly additionalProperties: false;
|
|
867
|
+
readonly required: readonly ["did", "outcome"];
|
|
868
|
+
readonly properties: {
|
|
869
|
+
readonly did: {
|
|
870
|
+
readonly type: "string";
|
|
871
|
+
};
|
|
872
|
+
readonly outcome: {
|
|
873
|
+
readonly $ref: "#/$defs/KeyRoleChangeOutcome";
|
|
874
|
+
};
|
|
875
|
+
readonly preview: {
|
|
876
|
+
readonly $ref: "#/$defs/DidDocumentPreview";
|
|
877
|
+
};
|
|
878
|
+
readonly approvals: {
|
|
879
|
+
readonly $ref: "#/$defs/KeyRoleApprovalState";
|
|
880
|
+
};
|
|
881
|
+
readonly newVersionId: {
|
|
882
|
+
readonly type: "string";
|
|
883
|
+
readonly description: "versionId of the entry just appended. A caller intending a further edit SHOULD pass this back as the next request's `expectedVersionId`.";
|
|
884
|
+
};
|
|
885
|
+
readonly newScid: {
|
|
886
|
+
readonly type: "string";
|
|
887
|
+
};
|
|
888
|
+
readonly newLogEntry: {
|
|
889
|
+
readonly type: "string";
|
|
890
|
+
readonly description: "The appended log entry, as JSON text.";
|
|
891
|
+
};
|
|
892
|
+
readonly updateKeysCount: {
|
|
893
|
+
readonly type: "integer";
|
|
894
|
+
readonly minimum: 0;
|
|
895
|
+
readonly description: "Update keys authorized AFTER this entry. Where `document` was supplied these are new keys — the previous ones no longer authorize anything.";
|
|
896
|
+
};
|
|
897
|
+
readonly preRotationKeyCount: {
|
|
898
|
+
readonly type: "integer";
|
|
899
|
+
readonly minimum: 0;
|
|
900
|
+
readonly description: "Pre-rotation commitments published by this entry.";
|
|
901
|
+
};
|
|
902
|
+
readonly serverless: {
|
|
903
|
+
readonly type: "boolean";
|
|
904
|
+
readonly description: "True when the agent holds the log itself and no hosting server was published to — the operator must fetch and redeploy `did.jsonl`.";
|
|
905
|
+
};
|
|
906
|
+
readonly ext: {
|
|
907
|
+
readonly $ref: "#/$defs/Ext";
|
|
908
|
+
};
|
|
909
|
+
};
|
|
910
|
+
};
|
|
911
|
+
readonly Ext: {
|
|
912
|
+
readonly title: "Ext";
|
|
913
|
+
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.";
|
|
914
|
+
readonly type: "object";
|
|
915
|
+
readonly minProperties: 1;
|
|
916
|
+
readonly additionalProperties: true;
|
|
917
|
+
readonly propertyNames: {
|
|
918
|
+
readonly pattern: "^[a-z][a-z0-9-]*(\\.[a-z0-9-]+)+$";
|
|
919
|
+
};
|
|
920
|
+
};
|
|
921
|
+
readonly KeyRoleApprovalState: {
|
|
922
|
+
readonly title: "KeyRoleApprovalState";
|
|
923
|
+
readonly type: "object";
|
|
924
|
+
readonly additionalProperties: false;
|
|
925
|
+
readonly required: readonly ["required", "received", "expiresAt"];
|
|
926
|
+
readonly description: "Approval progress of a change the VTA's policy gates on more than one approval (CONVENTIONS.md §3.3).";
|
|
927
|
+
readonly properties: {
|
|
928
|
+
readonly required: {
|
|
929
|
+
readonly type: "integer";
|
|
930
|
+
readonly minimum: 1;
|
|
931
|
+
readonly description: "Distinct approvals the VTA's policy requires.";
|
|
932
|
+
};
|
|
933
|
+
readonly received: {
|
|
934
|
+
readonly type: "integer";
|
|
935
|
+
readonly minimum: 0;
|
|
936
|
+
readonly description: "Distinct approvals recorded so far, including the initiator's own.";
|
|
937
|
+
};
|
|
938
|
+
readonly approvers: {
|
|
939
|
+
readonly type: "array";
|
|
940
|
+
readonly items: {
|
|
941
|
+
readonly type: "string";
|
|
942
|
+
};
|
|
943
|
+
readonly uniqueItems: true;
|
|
944
|
+
readonly description: "VIDs whose approvals were recorded. Custody projection only; omitted from a response to anyone who is not themselves an eligible approver of this change.";
|
|
945
|
+
};
|
|
946
|
+
readonly expiresAt: {
|
|
947
|
+
readonly type: "string";
|
|
948
|
+
readonly format: "date-time";
|
|
949
|
+
readonly description: "When the preview, and every approval bound to it, stops being usable.";
|
|
950
|
+
};
|
|
951
|
+
};
|
|
952
|
+
};
|
|
953
|
+
readonly DidDocumentPreview: {
|
|
954
|
+
readonly title: "DidDocumentPreview";
|
|
955
|
+
readonly type: "object";
|
|
956
|
+
readonly additionalProperties: false;
|
|
957
|
+
readonly required: readonly ["previewId", "baseVersionId", "expiresAt", "changes", "document", "updateKeyRotates"];
|
|
958
|
+
readonly description: "What a change would publish, computed by the VTA by running the handler it would run to apply it, and nothing else (CONVENTIONS.md §3.1). This is what a consent surface renders and what an approval is bound to.";
|
|
959
|
+
readonly properties: {
|
|
960
|
+
readonly previewId: {
|
|
961
|
+
readonly type: "string";
|
|
962
|
+
readonly minLength: 16;
|
|
963
|
+
readonly description: "Opaque, unguessable identifier for this exact plan. Carried back by the apply request, and the thing every approval is bound to.";
|
|
964
|
+
};
|
|
965
|
+
readonly baseVersionId: {
|
|
966
|
+
readonly type: "string";
|
|
967
|
+
readonly description: "versionId of the log entry the plan was computed against. The plan is void once the log moves past it.";
|
|
968
|
+
};
|
|
969
|
+
readonly expiresAt: {
|
|
970
|
+
readonly type: "string";
|
|
971
|
+
readonly format: "date-time";
|
|
972
|
+
};
|
|
973
|
+
readonly changes: {
|
|
974
|
+
readonly type: "array";
|
|
975
|
+
readonly items: {
|
|
976
|
+
readonly $ref: "#/$defs/DidDocumentChange";
|
|
977
|
+
};
|
|
978
|
+
readonly description: "Every change the entry would make, including the ones the caller did not ask for — in particular `rotateUpdateKey`, which accompanies every entry appended under pre-rotation.";
|
|
979
|
+
};
|
|
980
|
+
readonly document: {
|
|
981
|
+
readonly type: "object";
|
|
982
|
+
readonly description: "The complete DID document the entry would publish. Public data by construction; no key material beyond public halves.";
|
|
983
|
+
};
|
|
984
|
+
readonly warnings: {
|
|
985
|
+
readonly type: "array";
|
|
986
|
+
readonly items: {
|
|
987
|
+
readonly type: "string";
|
|
988
|
+
readonly enum: readonly ["preRotationDisabled", "singleKeyRole", "algorithmNotInAcceptedSet", "roleWillHaveNoClassicalKey", "attestationReissuanceRequired", "serverless"];
|
|
989
|
+
};
|
|
990
|
+
readonly uniqueItems: true;
|
|
991
|
+
readonly description: "Conditions a human should be shown before approving. `preRotationDisabled` — the entry leaves no committed successor, so a later update-key compromise can only end in deactivation. `singleKeyRole` — the role will hold one active key, so its next compromise empties it until replaced. `algorithmNotInAcceptedSet` — a verifier population the VTA knows of does not accept the new key's algorithm. `roleWillHaveNoClassicalKey` — every remaining key is post-quantum, which verifiers without post-quantum support cannot check. `attestationReissuanceRequired` — revoking this `attestation` key obliges the node to re-issue every attestation artefact still in force and re-sign every status list (VTI-KEY-133). `serverless` — the VTA will not publish the entry; the operator must.";
|
|
992
|
+
};
|
|
993
|
+
readonly updateKeyRotates: {
|
|
994
|
+
readonly type: "boolean";
|
|
995
|
+
readonly description: "True when appending this entry also moves the DID's update key to a committed successor. Stated as its own member, not left to be found in `changes`, because it is the consequence a reviewer most often misses.";
|
|
996
|
+
};
|
|
997
|
+
};
|
|
998
|
+
};
|
|
999
|
+
readonly DidDocumentChange: {
|
|
1000
|
+
readonly title: "DidDocumentChange";
|
|
1001
|
+
readonly type: "object";
|
|
1002
|
+
readonly additionalProperties: false;
|
|
1003
|
+
readonly required: readonly ["op", "role"];
|
|
1004
|
+
readonly properties: {
|
|
1005
|
+
readonly op: {
|
|
1006
|
+
readonly type: "string";
|
|
1007
|
+
readonly enum: readonly ["addKey", "retireKey", "revokeKey", "rotateUpdateKey", "setPreRotation"];
|
|
1008
|
+
readonly description: "`addKey` — a verification method is added, listed in its role's relationship and in `keyRoles`. `retireKey` — a verification method leaves its relationship, `keyRoles` and the document. `revokeKey` — a verification method leaves its relationship and `keyRoles`, and the compromise is recorded (CONVENTIONS.md §7). `rotateUpdateKey` — the log's update key moves to a committed successor. `setPreRotation` — the number of successors committed changes.";
|
|
1009
|
+
};
|
|
1010
|
+
readonly role: {
|
|
1011
|
+
readonly $ref: "#/$defs/KeyRole";
|
|
1012
|
+
};
|
|
1013
|
+
readonly verificationMethod: {
|
|
1014
|
+
readonly type: "string";
|
|
1015
|
+
};
|
|
1016
|
+
readonly keyType: {
|
|
1017
|
+
readonly $ref: "#/$defs/KeyType";
|
|
1018
|
+
};
|
|
1019
|
+
readonly publicKeyMultibase: {
|
|
1020
|
+
readonly type: "string";
|
|
1021
|
+
};
|
|
1022
|
+
readonly relationships: {
|
|
1023
|
+
readonly type: "array";
|
|
1024
|
+
readonly items: {
|
|
1025
|
+
readonly $ref: "#/$defs/DidVerificationRelationship";
|
|
1026
|
+
};
|
|
1027
|
+
readonly uniqueItems: true;
|
|
1028
|
+
};
|
|
1029
|
+
readonly preRotationCount: {
|
|
1030
|
+
readonly type: "integer";
|
|
1031
|
+
readonly minimum: 0;
|
|
1032
|
+
};
|
|
1033
|
+
};
|
|
1034
|
+
};
|
|
1035
|
+
readonly DidVerificationRelationship: {
|
|
1036
|
+
readonly title: "DidVerificationRelationship";
|
|
1037
|
+
readonly type: "string";
|
|
1038
|
+
readonly enum: readonly ["authentication", "assertionMethod", "keyAgreement", "capabilityInvocation", "capabilityDelegation"];
|
|
1039
|
+
readonly description: "A DID Core verification relationship.";
|
|
1040
|
+
};
|
|
1041
|
+
readonly KeyRole: {
|
|
1042
|
+
readonly title: "KeyRole";
|
|
1043
|
+
readonly type: "string";
|
|
1044
|
+
readonly enum: readonly ["attestation", "operational", "messaging", "update"];
|
|
1045
|
+
readonly description: "The named key role a key occupies in the DID (VTI-KEY-070 onward). `attestation` — the only keys in `assertionMethod`; sign the DID's attestation artefacts (membership and role credentials, endorsements, status lists, every other credential the node issues), through the VTA's signing service and nowhere else. Generated inside the VTA, never derived, never exportable, never in a backup. `operational` — the only keys in `authentication`; sign the node's own traffic (Trust Task requests and responses, DIDComm and TSP message signatures, invitations, notices, audit checkpoints) with proof purpose `authentication`. `messaging` — the only keys in `keyAgreement`; sign nothing. `update` — the keys that authorize appending to the DID's log (a did:webvh `updateKeys` entry) and the pre-rotation commitments that authorize the next ones; never a verification method, never in `keyRoles`. Generated inside the VTA, never derived, never exportable, never in a backup. No role permits `capabilityInvocation` or `capabilityDelegation` (VTI-KEY-075); both are reserved for a future role. The mapping is normative and is set out in CONVENTIONS.md §1. The set is an extensible registry and growing it is a MINOR change: a consumer that receives a role it does not implement MUST refuse the document rather than map the key onto a role it does know.";
|
|
1046
|
+
};
|
|
1047
|
+
readonly KeyType: {
|
|
1048
|
+
readonly title: "KeyType";
|
|
1049
|
+
readonly type: "string";
|
|
1050
|
+
readonly enum: readonly ["ed25519", "x25519", "p256", "mldsa44", "mldsa65"];
|
|
1051
|
+
readonly description: "Cryptographic algorithm the key material belongs to. `ed25519` signs (EdDSA), `x25519` performs key agreement and never signs, `p256` signs (ES256), and `mldsa44` and `mldsa65` sign with the post-quantum ML-DSA scheme of US NIST FIPS 204. The set is expected to grow as algorithms are standardised, and growing it is a MINOR change under SPEC.md §5.2: `keyType` selects no schema branch, so adding a value relaxes a constraint rather than narrowing one, and the generated libraries mark this enumeration non-exhaustive so that a consumer absorbs a new value rather than failing to compile. Two ML-DSA parameter sets are carried because two specifications require different ones — W3C Quantum-Resistant Cryptosuites defines Data Integrity suites only for ML-DSA-44, while Trust Spanning Protocol Rev 3 §8.1 mandates ML-DSA-65 — so the parameter set is chosen by whatever consumes the key and the two are not redundant. A consumer that does not implement a value it receives MUST refuse the document rather than substitute one it does support.";
|
|
1052
|
+
};
|
|
1053
|
+
readonly KeyRoleChangeOutcome: {
|
|
1054
|
+
readonly title: "KeyRoleChangeOutcome";
|
|
1055
|
+
readonly type: "string";
|
|
1056
|
+
readonly enum: readonly ["preview", "applied", "pendingApproval"];
|
|
1057
|
+
readonly description: "`preview` — nothing was written; the response carries the plan. `applied` — the entry was appended (and published, unless `serverless`). `pendingApproval` — the plan is recorded and awaits further approvals; nothing is published until they arrive (CONVENTIONS.md §3.3).";
|
|
1058
|
+
};
|
|
1059
|
+
};
|
|
1060
|
+
};
|
|
1061
|
+
};
|
|
1062
|
+
//# sourceMappingURL=payload.d.ts.map
|