@cotal-ai/core 0.81.1 → 0.82.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/dist/delegated-recovery.d.ts +220 -0
- package/dist/delegated-recovery.d.ts.map +1 -0
- package/dist/delegated-recovery.js +277 -0
- package/dist/delegated-recovery.js.map +1 -0
- package/dist/endpoint.d.ts +2 -0
- package/dist/endpoint.d.ts.map +1 -1
- package/dist/endpoint.js +18 -3
- package/dist/endpoint.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/issued-authority.d.ts +2 -0
- package/dist/issued-authority.d.ts.map +1 -1
- package/dist/issued-authority.js +1 -1
- package/dist/issued-authority.js.map +1 -1
- package/dist/run-admission.d.ts.map +1 -1
- package/dist/run-admission.js +2 -2
- package/dist/run-admission.js.map +1 -1
- package/dist/runtime.d.ts +22 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import type { RetainedAgentAuthority } from "./auth-provider.js";
|
|
2
|
+
import { type RemoteDelegatedUserIntentExecutionRequest, type RemoteManagerEnvelope } from "./remote-manager-authority.js";
|
|
3
|
+
export interface DelegatedRecoveryTarget {
|
|
4
|
+
owner: string;
|
|
5
|
+
actor: string;
|
|
6
|
+
lifecycleUid: string;
|
|
7
|
+
}
|
|
8
|
+
export interface DelegatedRecoveryOrigin {
|
|
9
|
+
space: string;
|
|
10
|
+
accountPublicKey: string;
|
|
11
|
+
managerInstanceId: string;
|
|
12
|
+
managerLifecycleUid: string;
|
|
13
|
+
assignmentRevision: number;
|
|
14
|
+
enrollmentRegistrationRevision: number;
|
|
15
|
+
enrollmentRegistrationDigest: string;
|
|
16
|
+
enrollmentServeEpoch: number;
|
|
17
|
+
intentId: string;
|
|
18
|
+
target: DelegatedRecoveryTarget;
|
|
19
|
+
}
|
|
20
|
+
export interface DelegatedRecoveryLaunchPlan {
|
|
21
|
+
agent: string;
|
|
22
|
+
model?: string;
|
|
23
|
+
variant?: string;
|
|
24
|
+
events: boolean;
|
|
25
|
+
sourceDigest: string;
|
|
26
|
+
}
|
|
27
|
+
export interface DelegatedRecoveryDescriptor {
|
|
28
|
+
v: 1;
|
|
29
|
+
intentId: string;
|
|
30
|
+
origin: DelegatedRecoveryOrigin;
|
|
31
|
+
target: DelegatedRecoveryTarget;
|
|
32
|
+
runtimeKind: string;
|
|
33
|
+
runtimeKey: string;
|
|
34
|
+
launchIdentity: DelegatedRecoveryLaunchPlan & {
|
|
35
|
+
role?: string;
|
|
36
|
+
spawner: string;
|
|
37
|
+
authorityParent: string;
|
|
38
|
+
};
|
|
39
|
+
authorityDigest: string;
|
|
40
|
+
localStoreBindingDigest: string;
|
|
41
|
+
localStoreIdentityDigest: string;
|
|
42
|
+
}
|
|
43
|
+
export interface DelegatedRecoveryLocalProof {
|
|
44
|
+
storeBindingDigest: string;
|
|
45
|
+
storeIdentityDigest: string;
|
|
46
|
+
actorTokenDigest: string;
|
|
47
|
+
sentinelDigest: string;
|
|
48
|
+
}
|
|
49
|
+
export interface DelegatedRecoveryScanBinding {
|
|
50
|
+
scanId: string;
|
|
51
|
+
accountPublicKey: string;
|
|
52
|
+
managerInstanceId: string;
|
|
53
|
+
managerLifecycleUid: string;
|
|
54
|
+
assignmentRevision: number;
|
|
55
|
+
currentRegistrationRevision: number;
|
|
56
|
+
currentServeEpoch: number;
|
|
57
|
+
sourceRevision: number;
|
|
58
|
+
memberCount: number;
|
|
59
|
+
membersDigest: string;
|
|
60
|
+
}
|
|
61
|
+
export declare const DELEGATED_RECOVERY_REASONS: readonly ["provider-unknown", "store-unavailable", "authority-unavailable", "identity-unverified", "descriptor-incomplete", "retiring", "authority-drift", "identity-changed", "scope-changed"];
|
|
62
|
+
export type DelegatedRecoveryReason = (typeof DELEGATED_RECOVERY_REASONS)[number];
|
|
63
|
+
export interface DelegatedRecoveryRecord {
|
|
64
|
+
intentId: string;
|
|
65
|
+
intentRevision: number;
|
|
66
|
+
recoveryRevision: number;
|
|
67
|
+
target: DelegatedRecoveryTarget;
|
|
68
|
+
phase: "incomplete" | "prepared" | "create-unknown" | "eligible" | "bound" | "retiring" | "terminal";
|
|
69
|
+
descriptor: DelegatedRecoveryDescriptor | null;
|
|
70
|
+
descriptorDigest: string | null;
|
|
71
|
+
authority: RetainedAgentAuthority | null;
|
|
72
|
+
localProof: DelegatedRecoveryLocalProof | null;
|
|
73
|
+
startedAt: string | null;
|
|
74
|
+
executionIdentityDigest: string | null;
|
|
75
|
+
reasonCode: DelegatedRecoveryReason | null;
|
|
76
|
+
}
|
|
77
|
+
interface RecoveryEnvelope extends RemoteManagerEnvelope {
|
|
78
|
+
v: 1;
|
|
79
|
+
kind: "manager-delegated-recovery";
|
|
80
|
+
actor: "cli";
|
|
81
|
+
accountPublicKey: string;
|
|
82
|
+
assignmentRevision: number;
|
|
83
|
+
currentRegistrationRevision: number;
|
|
84
|
+
serveEpoch: number;
|
|
85
|
+
}
|
|
86
|
+
type RecoveryOperation = {
|
|
87
|
+
operation: "confirm";
|
|
88
|
+
body: {
|
|
89
|
+
intentId: string;
|
|
90
|
+
target: DelegatedRecoveryTarget;
|
|
91
|
+
expectedIntentRevision: number;
|
|
92
|
+
localProof: DelegatedRecoveryLocalProof;
|
|
93
|
+
};
|
|
94
|
+
} | {
|
|
95
|
+
operation: "scan";
|
|
96
|
+
body: {
|
|
97
|
+
scanBinding?: DelegatedRecoveryScanBinding;
|
|
98
|
+
cursor?: string;
|
|
99
|
+
};
|
|
100
|
+
} | {
|
|
101
|
+
operation: "claim";
|
|
102
|
+
body: {
|
|
103
|
+
intentId: string;
|
|
104
|
+
target: DelegatedRecoveryTarget;
|
|
105
|
+
expectedRecoveryRevision: number;
|
|
106
|
+
expectedOrigin: DelegatedRecoveryOrigin;
|
|
107
|
+
attemptId: string;
|
|
108
|
+
scanBinding: DelegatedRecoveryScanBinding;
|
|
109
|
+
};
|
|
110
|
+
} | {
|
|
111
|
+
operation: "settle";
|
|
112
|
+
body: {
|
|
113
|
+
claimId: string;
|
|
114
|
+
expectedRecoveryRevision: number;
|
|
115
|
+
settleId: string;
|
|
116
|
+
} & ({
|
|
117
|
+
observation: "bound";
|
|
118
|
+
executionIdentityDigest: string;
|
|
119
|
+
} | {
|
|
120
|
+
observation: "held";
|
|
121
|
+
reasonCode: DelegatedRecoveryReason;
|
|
122
|
+
});
|
|
123
|
+
} | {
|
|
124
|
+
operation: "finish";
|
|
125
|
+
body: {
|
|
126
|
+
scanBinding: DelegatedRecoveryScanBinding;
|
|
127
|
+
finishId: string;
|
|
128
|
+
expectedScopeRevision: number;
|
|
129
|
+
};
|
|
130
|
+
} | {
|
|
131
|
+
operation: "watch";
|
|
132
|
+
body: {
|
|
133
|
+
afterRevision: number;
|
|
134
|
+
};
|
|
135
|
+
};
|
|
136
|
+
/** Contract only. A host must opt in; the existing authority dispatch does not admit this family. */
|
|
137
|
+
export type RemoteDelegatedRecoveryRequest = RecoveryEnvelope & RecoveryOperation;
|
|
138
|
+
type RecoveryResultEnvelope = Pick<RecoveryEnvelope, "v" | "kind" | "space" | "accountPublicKey" | "assignmentRevision" | "instanceId" | "managerLifecycleUid" | "currentRegistrationRevision" | "serveEpoch" | "requestId">;
|
|
139
|
+
type RecoveryResult = {
|
|
140
|
+
operation: "confirm";
|
|
141
|
+
result: {
|
|
142
|
+
intentId: string;
|
|
143
|
+
target: DelegatedRecoveryTarget;
|
|
144
|
+
intentRevision: number;
|
|
145
|
+
recoveryRevision: number;
|
|
146
|
+
prepared: true;
|
|
147
|
+
};
|
|
148
|
+
} | {
|
|
149
|
+
operation: "scan";
|
|
150
|
+
result: {
|
|
151
|
+
scanBinding: DelegatedRecoveryScanBinding;
|
|
152
|
+
records: DelegatedRecoveryRecord[];
|
|
153
|
+
nextCursor: string | null;
|
|
154
|
+
complete: boolean;
|
|
155
|
+
};
|
|
156
|
+
} | {
|
|
157
|
+
operation: "claim";
|
|
158
|
+
result: {
|
|
159
|
+
claimId: string;
|
|
160
|
+
attemptId: string;
|
|
161
|
+
record: DelegatedRecoveryRecord;
|
|
162
|
+
claimEpoch: number;
|
|
163
|
+
};
|
|
164
|
+
} | {
|
|
165
|
+
operation: "settle";
|
|
166
|
+
result: {
|
|
167
|
+
claimId: string;
|
|
168
|
+
settleId: string;
|
|
169
|
+
recoveryRevision: number;
|
|
170
|
+
observation: "bound" | "held";
|
|
171
|
+
};
|
|
172
|
+
} | {
|
|
173
|
+
operation: "finish";
|
|
174
|
+
result: {
|
|
175
|
+
finishId: string;
|
|
176
|
+
scanId: string;
|
|
177
|
+
scopeRevision: number;
|
|
178
|
+
admission: "open";
|
|
179
|
+
};
|
|
180
|
+
} | {
|
|
181
|
+
operation: "watch";
|
|
182
|
+
result: {
|
|
183
|
+
revision: number;
|
|
184
|
+
scanInvalidated: boolean;
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
export type RemoteDelegatedRecoveryResult = RecoveryResultEnvelope & (({
|
|
188
|
+
ok: true;
|
|
189
|
+
} & RecoveryResult) | {
|
|
190
|
+
ok: false;
|
|
191
|
+
operation: RecoveryOperation["operation"];
|
|
192
|
+
error: {
|
|
193
|
+
code: "bad-request" | "permission-denied" | "conflict" | "unavailable" | "failed-precondition" | "unimplemented";
|
|
194
|
+
reasonCode?: DelegatedRecoveryReason;
|
|
195
|
+
};
|
|
196
|
+
});
|
|
197
|
+
/** The separate parser keeps legacy hosts rejecting the extended launch instead of ignoring it. */
|
|
198
|
+
export type RemoteDelegatedRecoveryLaunchRequest = Omit<RemoteDelegatedUserIntentExecutionRequest, "execute"> & {
|
|
199
|
+
execute: {
|
|
200
|
+
operation: "launch";
|
|
201
|
+
target: {
|
|
202
|
+
actor: string;
|
|
203
|
+
tokenHash: string;
|
|
204
|
+
};
|
|
205
|
+
recoveryPlan: {
|
|
206
|
+
runtimeKind: string;
|
|
207
|
+
launch: DelegatedRecoveryLaunchPlan;
|
|
208
|
+
localStoreBindingDigest: string;
|
|
209
|
+
localStoreIdentityDigest: string;
|
|
210
|
+
};
|
|
211
|
+
};
|
|
212
|
+
};
|
|
213
|
+
export declare function parseDelegatedRecoveryDescriptor(raw: unknown): DelegatedRecoveryDescriptor;
|
|
214
|
+
/** Parse structure and scope bindings; fresh host authority and durable CAS remain separate checks. */
|
|
215
|
+
export declare function parseRemoteDelegatedRecoveryRequest(raw: unknown): RemoteDelegatedRecoveryRequest;
|
|
216
|
+
export declare function parseRemoteDelegatedRecoveryLaunchRequest(raw: unknown): RemoteDelegatedRecoveryLaunchRequest;
|
|
217
|
+
/** Bind every response to its request before a caller may act on any returned record. */
|
|
218
|
+
export declare function parseRemoteDelegatedRecoveryResult(raw: unknown, request: RemoteDelegatedRecoveryRequest): RemoteDelegatedRecoveryResult;
|
|
219
|
+
export {};
|
|
220
|
+
//# sourceMappingURL=delegated-recovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegated-recovery.d.ts","sourceRoot":"","sources":["../src/delegated-recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { canonicalJson, contractDigest } from "./canonical.js";
|
|
2
|
+
import { EpEnvelopeError } from "./endpoint-error.js";
|
|
3
|
+
import { isAccountNkey } from "./identity.js";
|
|
4
|
+
import { managedRuntimeKey } from "./managed-handoff.js";
|
|
5
|
+
import { parseRemoteDelegatedUserIntentExecutionRequest, parseRemoteManagerEnvelope, } from "./remote-manager-authority.js";
|
|
6
|
+
import { assertDerivedOwnerToken, assertLifecycleToken, assertValidOwnerToken, parsePrincipalKey } from "./subjects.js";
|
|
7
|
+
export const DELEGATED_RECOVERY_REASONS = Object.freeze([
|
|
8
|
+
"provider-unknown", "store-unavailable", "authority-unavailable", "identity-unverified",
|
|
9
|
+
"descriptor-incomplete", "retiring", "authority-drift", "identity-changed", "scope-changed",
|
|
10
|
+
]);
|
|
11
|
+
function refuse(detail) {
|
|
12
|
+
throw new EpEnvelopeError("bad-request", `delegated recovery ${detail}`);
|
|
13
|
+
}
|
|
14
|
+
function object(raw, keys, required = keys) {
|
|
15
|
+
if (raw === null || typeof raw !== "object" || Array.isArray(raw))
|
|
16
|
+
refuse("requires an object");
|
|
17
|
+
const value = raw;
|
|
18
|
+
if (Reflect.ownKeys(value).some(key => typeof key !== "string" || !keys.includes(key)))
|
|
19
|
+
refuse("carries an unknown field");
|
|
20
|
+
if (required.some(key => !Object.hasOwn(value, key)))
|
|
21
|
+
refuse("is missing a required field");
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
function text(raw) {
|
|
25
|
+
if (typeof raw !== "string" || raw.length === 0 || raw.length > 1024 || /[\x00-\x1f]/.test(raw))
|
|
26
|
+
refuse("requires a bounded nonempty string");
|
|
27
|
+
return raw;
|
|
28
|
+
}
|
|
29
|
+
function token(raw) { return assertLifecycleToken(text(raw), "delegated recovery id"); }
|
|
30
|
+
function count(raw) {
|
|
31
|
+
if (typeof raw !== "number" || !Number.isSafeInteger(raw) || raw < 0)
|
|
32
|
+
refuse("requires a non-negative safe integer");
|
|
33
|
+
return raw;
|
|
34
|
+
}
|
|
35
|
+
function flag(raw) {
|
|
36
|
+
if (typeof raw !== "boolean")
|
|
37
|
+
refuse("requires a boolean");
|
|
38
|
+
return raw;
|
|
39
|
+
}
|
|
40
|
+
function digest(raw) {
|
|
41
|
+
if (typeof raw !== "string" || !/^[0-9a-f]{64}$/.test(raw))
|
|
42
|
+
refuse("requires a SHA-256 digest");
|
|
43
|
+
return raw;
|
|
44
|
+
}
|
|
45
|
+
function account(raw) {
|
|
46
|
+
if (!isAccountNkey(raw))
|
|
47
|
+
refuse("requires an account nkey");
|
|
48
|
+
return raw;
|
|
49
|
+
}
|
|
50
|
+
function choice(raw, choices) {
|
|
51
|
+
if (typeof raw !== "string" || !choices.includes(raw))
|
|
52
|
+
refuse("carries an unsupported value");
|
|
53
|
+
return raw;
|
|
54
|
+
}
|
|
55
|
+
function nullable(raw, parse) { return raw === null ? null : parse(raw); }
|
|
56
|
+
function strings(raw) {
|
|
57
|
+
if (!Array.isArray(raw) || raw.length > 64)
|
|
58
|
+
refuse("requires a list of at most 64 strings");
|
|
59
|
+
return raw.map(text);
|
|
60
|
+
}
|
|
61
|
+
function sameTarget(a, b) {
|
|
62
|
+
if (a.owner !== b.owner || a.actor !== b.actor || a.lifecycleUid !== b.lifecycleUid)
|
|
63
|
+
refuse("target does not match its binding");
|
|
64
|
+
}
|
|
65
|
+
function target(raw) {
|
|
66
|
+
const o = object(raw, ["owner", "actor", "lifecycleUid"]);
|
|
67
|
+
return { owner: assertDerivedOwnerToken(text(o.owner)), actor: assertValidOwnerToken(text(o.actor)), lifecycleUid: token(o.lifecycleUid) };
|
|
68
|
+
}
|
|
69
|
+
function localProof(raw) {
|
|
70
|
+
const o = object(raw, ["storeBindingDigest", "storeIdentityDigest", "actorTokenDigest", "sentinelDigest"]);
|
|
71
|
+
return { storeBindingDigest: digest(o.storeBindingDigest), storeIdentityDigest: digest(o.storeIdentityDigest), actorTokenDigest: digest(o.actorTokenDigest), sentinelDigest: digest(o.sentinelDigest) };
|
|
72
|
+
}
|
|
73
|
+
function launchPlan(raw) {
|
|
74
|
+
const o = object(raw, ["agent", "model", "variant", "events", "sourceDigest"], ["agent", "events", "sourceDigest"]);
|
|
75
|
+
return { agent: text(o.agent), ...(Object.hasOwn(o, "model") ? { model: text(o.model) } : {}), ...(Object.hasOwn(o, "variant") ? { variant: text(o.variant) } : {}), events: flag(o.events), sourceDigest: digest(o.sourceDigest) };
|
|
76
|
+
}
|
|
77
|
+
function origin(raw) {
|
|
78
|
+
const o = object(raw, ["space", "accountPublicKey", "managerInstanceId", "managerLifecycleUid", "assignmentRevision", "enrollmentRegistrationRevision", "enrollmentRegistrationDigest", "enrollmentServeEpoch", "intentId", "target"]);
|
|
79
|
+
return { space: text(o.space), accountPublicKey: account(o.accountPublicKey), managerInstanceId: token(o.managerInstanceId), managerLifecycleUid: token(o.managerLifecycleUid), assignmentRevision: count(o.assignmentRevision), enrollmentRegistrationRevision: count(o.enrollmentRegistrationRevision), enrollmentRegistrationDigest: digest(o.enrollmentRegistrationDigest), enrollmentServeEpoch: count(o.enrollmentServeEpoch), intentId: token(o.intentId), target: target(o.target) };
|
|
80
|
+
}
|
|
81
|
+
function scanBinding(raw) {
|
|
82
|
+
const o = object(raw, ["scanId", "accountPublicKey", "managerInstanceId", "managerLifecycleUid", "assignmentRevision", "currentRegistrationRevision", "currentServeEpoch", "sourceRevision", "memberCount", "membersDigest"]);
|
|
83
|
+
return { scanId: token(o.scanId), accountPublicKey: account(o.accountPublicKey), managerInstanceId: token(o.managerInstanceId), managerLifecycleUid: token(o.managerLifecycleUid), assignmentRevision: count(o.assignmentRevision), currentRegistrationRevision: count(o.currentRegistrationRevision), currentServeEpoch: count(o.currentServeEpoch), sourceRevision: count(o.sourceRevision), memberCount: count(o.memberCount), membersDigest: digest(o.membersDigest) };
|
|
84
|
+
}
|
|
85
|
+
function scopeMatches(binding, request) {
|
|
86
|
+
if (binding.accountPublicKey !== request.accountPublicKey || binding.managerInstanceId !== request.instanceId || binding.managerLifecycleUid !== request.managerLifecycleUid || binding.assignmentRevision !== request.assignmentRevision || binding.currentRegistrationRevision !== request.currentRegistrationRevision || binding.currentServeEpoch !== request.serveEpoch)
|
|
87
|
+
refuse("scan belongs to another scope or epoch");
|
|
88
|
+
}
|
|
89
|
+
function originMatches(binding, request) {
|
|
90
|
+
if (binding.space !== request.space || binding.accountPublicKey !== request.accountPublicKey || binding.managerInstanceId !== request.instanceId || binding.managerLifecycleUid !== request.managerLifecycleUid || binding.assignmentRevision !== request.assignmentRevision)
|
|
91
|
+
refuse("origin belongs to another manager or assignment");
|
|
92
|
+
}
|
|
93
|
+
export function parseDelegatedRecoveryDescriptor(raw) {
|
|
94
|
+
const o = object(raw, ["v", "intentId", "origin", "target", "runtimeKind", "runtimeKey", "launchIdentity", "authorityDigest", "localStoreBindingDigest", "localStoreIdentityDigest"]);
|
|
95
|
+
if (o.v !== 1)
|
|
96
|
+
refuse("descriptor version is unsupported");
|
|
97
|
+
const enrolled = origin(o.origin), child = target(o.target), intentId = token(o.intentId);
|
|
98
|
+
sameTarget(enrolled.target, child);
|
|
99
|
+
if (enrolled.intentId !== intentId)
|
|
100
|
+
refuse("descriptor intent does not match its origin");
|
|
101
|
+
const identity = object(o.launchIdentity, ["agent", "model", "variant", "events", "sourceDigest", "role", "spawner", "authorityParent"], ["agent", "events", "sourceDigest", "spawner", "authorityParent"]);
|
|
102
|
+
const { role, spawner, authorityParent, ...plan } = identity;
|
|
103
|
+
const launch = launchPlan(plan);
|
|
104
|
+
const parent = text(authorityParent), principal = parsePrincipalKey(parent);
|
|
105
|
+
if (!principal || principal.owner !== child.owner || text(spawner) !== parent)
|
|
106
|
+
refuse("delegated spawner must be its original user's authority parent");
|
|
107
|
+
const runtimeKey = text(o.runtimeKey);
|
|
108
|
+
if (runtimeKey !== managedRuntimeKey({ space: enrolled.space, ...child }))
|
|
109
|
+
refuse("runtime key does not match the lifecycle");
|
|
110
|
+
return { v: 1, intentId, origin: enrolled, target: child, runtimeKind: text(o.runtimeKind), runtimeKey, launchIdentity: { ...launch, ...(Object.hasOwn(identity, "role") ? { role: text(role) } : {}), spawner: parent, authorityParent: parent }, authorityDigest: digest(o.authorityDigest), localStoreBindingDigest: digest(o.localStoreBindingDigest), localStoreIdentityDigest: digest(o.localStoreIdentityDigest) };
|
|
111
|
+
}
|
|
112
|
+
/** Parse structure and scope bindings; fresh host authority and durable CAS remain separate checks. */
|
|
113
|
+
export function parseRemoteDelegatedRecoveryRequest(raw) {
|
|
114
|
+
const o = object(raw, ["v", "kind", "actor", "space", "accountPublicKey", "assignmentRevision", "instanceId", "managerLifecycleUid", "currentRegistrationRevision", "serveEpoch", "registrationProof", "requestId", "identities", "operation", "body"]);
|
|
115
|
+
const parsed = parseRemoteManagerEnvelope(o, "manager-delegated-recovery", "delegated recovery");
|
|
116
|
+
if (parsed.actor !== "cli")
|
|
117
|
+
refuse('actor must be "cli"');
|
|
118
|
+
const envelope = { ...parsed, v: 1, kind: "manager-delegated-recovery", actor: "cli", accountPublicKey: account(o.accountPublicKey), assignmentRevision: count(o.assignmentRevision), currentRegistrationRevision: count(o.currentRegistrationRevision), serveEpoch: count(o.serveEpoch) };
|
|
119
|
+
switch (o.operation) {
|
|
120
|
+
case "confirm": {
|
|
121
|
+
const b = object(o.body, ["intentId", "target", "expectedIntentRevision", "localProof"]);
|
|
122
|
+
return { ...envelope, operation: "confirm", body: { intentId: token(b.intentId), target: target(b.target), expectedIntentRevision: count(b.expectedIntentRevision), localProof: localProof(b.localProof) } };
|
|
123
|
+
}
|
|
124
|
+
case "scan": {
|
|
125
|
+
const b = object(o.body, ["scanBinding", "cursor"], []);
|
|
126
|
+
if (Object.hasOwn(b, "scanBinding") !== Object.hasOwn(b, "cursor"))
|
|
127
|
+
refuse("scan cursor and binding must occur together");
|
|
128
|
+
if (!Object.hasOwn(b, "scanBinding"))
|
|
129
|
+
return { ...envelope, operation: "scan", body: {} };
|
|
130
|
+
const binding = scanBinding(b.scanBinding);
|
|
131
|
+
scopeMatches(binding, envelope);
|
|
132
|
+
return { ...envelope, operation: "scan", body: { scanBinding: binding, cursor: text(b.cursor) } };
|
|
133
|
+
}
|
|
134
|
+
case "claim": {
|
|
135
|
+
const b = object(o.body, ["intentId", "target", "expectedRecoveryRevision", "expectedOrigin", "attemptId", "scanBinding"]);
|
|
136
|
+
const expectedOrigin = origin(b.expectedOrigin), child = target(b.target), intentId = token(b.intentId), binding = scanBinding(b.scanBinding);
|
|
137
|
+
originMatches(expectedOrigin, envelope);
|
|
138
|
+
scopeMatches(binding, envelope);
|
|
139
|
+
sameTarget(expectedOrigin.target, child);
|
|
140
|
+
if (expectedOrigin.intentId !== intentId)
|
|
141
|
+
refuse("claim intent does not match its origin");
|
|
142
|
+
return { ...envelope, operation: "claim", body: { intentId, target: child, expectedRecoveryRevision: count(b.expectedRecoveryRevision), expectedOrigin, attemptId: token(b.attemptId), scanBinding: binding } };
|
|
143
|
+
}
|
|
144
|
+
case "settle": {
|
|
145
|
+
const b = object(o.body, ["claimId", "expectedRecoveryRevision", "settleId", "observation", "executionIdentityDigest", "reasonCode"], ["claimId", "expectedRecoveryRevision", "settleId", "observation"]);
|
|
146
|
+
const common = { claimId: token(b.claimId), expectedRecoveryRevision: count(b.expectedRecoveryRevision), settleId: token(b.settleId) };
|
|
147
|
+
if (b.observation === "bound" && !Object.hasOwn(b, "reasonCode"))
|
|
148
|
+
return { ...envelope, operation: "settle", body: { ...common, observation: "bound", executionIdentityDigest: digest(b.executionIdentityDigest) } };
|
|
149
|
+
if (b.observation === "held" && !Object.hasOwn(b, "executionIdentityDigest"))
|
|
150
|
+
return { ...envelope, operation: "settle", body: { ...common, observation: "held", reasonCode: choice(b.reasonCode, DELEGATED_RECOVERY_REASONS) } };
|
|
151
|
+
return refuse("settle must report bound identity or held reason, not both");
|
|
152
|
+
}
|
|
153
|
+
case "finish": {
|
|
154
|
+
const b = object(o.body, ["scanBinding", "finishId", "expectedScopeRevision"]), binding = scanBinding(b.scanBinding);
|
|
155
|
+
scopeMatches(binding, envelope);
|
|
156
|
+
return { ...envelope, operation: "finish", body: { scanBinding: binding, finishId: token(b.finishId), expectedScopeRevision: count(b.expectedScopeRevision) } };
|
|
157
|
+
}
|
|
158
|
+
case "watch": {
|
|
159
|
+
const b = object(o.body, ["afterRevision"]);
|
|
160
|
+
return { ...envelope, operation: "watch", body: { afterRevision: count(b.afterRevision) } };
|
|
161
|
+
}
|
|
162
|
+
default: return refuse("operation is unsupported");
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
export function parseRemoteDelegatedRecoveryLaunchRequest(raw) {
|
|
166
|
+
const o = object(raw, ["v", "kind", "space", "actor", "accountPublicKey", "assignmentRevision", "instanceId", "managerLifecycleUid", "requestId", "registrationProof", "serveEpoch", "identities", "intentId", "execute"]);
|
|
167
|
+
const execute = object(o.execute, ["operation", "target", "recoveryPlan"]);
|
|
168
|
+
const { recoveryPlan, ...legacyExecute } = execute;
|
|
169
|
+
const legacy = parseRemoteDelegatedUserIntentExecutionRequest({ ...o, execute: legacyExecute });
|
|
170
|
+
if (legacy.execute.operation !== "launch")
|
|
171
|
+
refuse("recovery plan is only valid for a launch");
|
|
172
|
+
const plan = object(recoveryPlan, ["runtimeKind", "launch", "localStoreBindingDigest", "localStoreIdentityDigest"]);
|
|
173
|
+
return { ...legacy, execute: { ...legacy.execute, recoveryPlan: { runtimeKind: text(plan.runtimeKind), launch: launchPlan(plan.launch), localStoreBindingDigest: digest(plan.localStoreBindingDigest), localStoreIdentityDigest: digest(plan.localStoreIdentityDigest) } } };
|
|
174
|
+
}
|
|
175
|
+
function authority(raw) {
|
|
176
|
+
const o = object(raw, ["owner", "actor", "lifecycleUid", "scope", "allowSubscribe", "allowPublish", "role", "parent"], ["owner", "actor", "lifecycleUid", "scope", "allowSubscribe", "allowPublish"]);
|
|
177
|
+
return { owner: assertDerivedOwnerToken(text(o.owner)), actor: assertValidOwnerToken(text(o.actor)), lifecycleUid: token(o.lifecycleUid), scope: strings(o.scope), allowSubscribe: strings(o.allowSubscribe), allowPublish: strings(o.allowPublish), ...(Object.hasOwn(o, "role") ? { role: text(o.role) } : {}), ...(Object.hasOwn(o, "parent") ? { parent: text(o.parent) } : {}) };
|
|
178
|
+
}
|
|
179
|
+
function record(raw) {
|
|
180
|
+
const o = object(raw, ["intentId", "intentRevision", "recoveryRevision", "target", "phase", "descriptor", "descriptorDigest", "authority", "localProof", "startedAt", "executionIdentityDigest", "reasonCode"]);
|
|
181
|
+
const child = target(o.target), intentId = token(o.intentId), descriptor = nullable(o.descriptor, parseDelegatedRecoveryDescriptor), retained = nullable(o.authority, authority);
|
|
182
|
+
if (descriptor) {
|
|
183
|
+
sameTarget(descriptor.target, child);
|
|
184
|
+
if (descriptor.intentId !== intentId)
|
|
185
|
+
refuse("record intent does not match its descriptor");
|
|
186
|
+
}
|
|
187
|
+
if (retained)
|
|
188
|
+
sameTarget(retained, child);
|
|
189
|
+
const startedAt = nullable(o.startedAt, text), descriptorDigest = nullable(o.descriptorDigest, digest);
|
|
190
|
+
const proof = nullable(o.localProof, localProof), executionIdentityDigest = nullable(o.executionIdentityDigest, digest);
|
|
191
|
+
const phase = choice(o.phase, ["incomplete", "prepared", "create-unknown", "eligible", "bound", "retiring", "terminal"]);
|
|
192
|
+
if (startedAt !== null && (!Number.isFinite(Date.parse(startedAt)) || new Date(startedAt).toISOString() !== startedAt))
|
|
193
|
+
refuse("birth time must be a canonical ISO instant");
|
|
194
|
+
if ((descriptor === null) !== (descriptorDigest === null))
|
|
195
|
+
refuse("descriptor and its digest must occur together");
|
|
196
|
+
if (descriptor && descriptorDigest !== contractDigest(descriptor).slice("sha256:".length))
|
|
197
|
+
refuse("descriptor digest does not match its content");
|
|
198
|
+
if (descriptor && retained && (descriptor.authorityDigest !== contractDigest(retained).slice("sha256:".length) || retained.parent !== descriptor.launchIdentity.authorityParent || retained.role !== descriptor.launchIdentity.role))
|
|
199
|
+
refuse("retained authority does not match its descriptor");
|
|
200
|
+
if (descriptor && proof && (proof.storeBindingDigest !== descriptor.localStoreBindingDigest || proof.storeIdentityDigest !== descriptor.localStoreIdentityDigest))
|
|
201
|
+
refuse("local store proof does not match its descriptor");
|
|
202
|
+
if ((phase === "eligible" || phase === "bound") && [descriptor, retained, proof, startedAt, executionIdentityDigest].some(value => value === null))
|
|
203
|
+
refuse("eligible recovery lacks required evidence");
|
|
204
|
+
return { intentId, intentRevision: count(o.intentRevision), recoveryRevision: count(o.recoveryRevision), target: child, phase, descriptor, descriptorDigest, authority: retained, localProof: proof, startedAt, executionIdentityDigest, reasonCode: nullable(o.reasonCode, value => choice(value, DELEGATED_RECOVERY_REASONS)) };
|
|
205
|
+
}
|
|
206
|
+
/** Bind every response to its request before a caller may act on any returned record. */
|
|
207
|
+
export function parseRemoteDelegatedRecoveryResult(raw, request) {
|
|
208
|
+
const keys = ["v", "kind", "space", "accountPublicKey", "assignmentRevision", "instanceId", "managerLifecycleUid", "currentRegistrationRevision", "serveEpoch", "requestId", "operation", "ok"];
|
|
209
|
+
const o = object(raw, [...keys, "result", "error"], keys);
|
|
210
|
+
const header = { v: request.v, kind: request.kind, space: request.space, accountPublicKey: request.accountPublicKey, assignmentRevision: request.assignmentRevision, instanceId: request.instanceId, managerLifecycleUid: request.managerLifecycleUid, currentRegistrationRevision: request.currentRegistrationRevision, serveEpoch: request.serveEpoch, requestId: request.requestId };
|
|
211
|
+
for (const key of Object.keys(header))
|
|
212
|
+
if (o[key] !== header[key])
|
|
213
|
+
refuse(`response ${key} does not match its request`);
|
|
214
|
+
if (o.operation !== request.operation)
|
|
215
|
+
refuse("response operation does not match its request");
|
|
216
|
+
if (o.ok === false && !Object.hasOwn(o, "result")) {
|
|
217
|
+
const e = object(o.error, ["code", "reasonCode"], ["code"]);
|
|
218
|
+
return { ...header, operation: request.operation, ok: false, error: { code: choice(e.code, ["bad-request", "permission-denied", "conflict", "unavailable", "failed-precondition", "unimplemented"]), ...(Object.hasOwn(e, "reasonCode") ? { reasonCode: choice(e.reasonCode, DELEGATED_RECOVERY_REASONS) } : {}) } };
|
|
219
|
+
}
|
|
220
|
+
if (o.ok !== true || Object.hasOwn(o, "error"))
|
|
221
|
+
refuse("response must contain one result or error");
|
|
222
|
+
switch (request.operation) {
|
|
223
|
+
case "confirm": {
|
|
224
|
+
const r = object(o.result, ["intentId", "target", "intentRevision", "recoveryRevision", "prepared"]), child = target(r.target);
|
|
225
|
+
sameTarget(child, request.body.target);
|
|
226
|
+
if (r.intentId !== request.body.intentId || r.prepared !== true)
|
|
227
|
+
refuse("preparation reply does not match its request");
|
|
228
|
+
return { ...header, ok: true, operation: "confirm", result: { intentId: request.body.intentId, target: child, intentRevision: count(r.intentRevision), recoveryRevision: count(r.recoveryRevision), prepared: true } };
|
|
229
|
+
}
|
|
230
|
+
case "scan": {
|
|
231
|
+
const r = object(o.result, ["scanBinding", "records", "nextCursor", "complete"]), binding = scanBinding(r.scanBinding);
|
|
232
|
+
scopeMatches(binding, request);
|
|
233
|
+
if (request.body.scanBinding && canonicalJson(binding) !== canonicalJson(request.body.scanBinding))
|
|
234
|
+
refuse("scan binding changed during pagination");
|
|
235
|
+
if (!Array.isArray(r.records) || r.records.length > 1024)
|
|
236
|
+
refuse("scan page exceeds its bound");
|
|
237
|
+
const records = r.records.map(record), nextCursor = nullable(r.nextCursor, text), complete = flag(r.complete);
|
|
238
|
+
if (complete !== (nextCursor === null) || records.length > binding.memberCount)
|
|
239
|
+
refuse("scan completeness is inconsistent");
|
|
240
|
+
const seen = new Set();
|
|
241
|
+
for (const item of records) {
|
|
242
|
+
if (seen.has(item.intentId))
|
|
243
|
+
refuse("scan page repeats an intent");
|
|
244
|
+
seen.add(item.intentId);
|
|
245
|
+
if (item.descriptor)
|
|
246
|
+
originMatches(item.descriptor.origin, request);
|
|
247
|
+
}
|
|
248
|
+
return { ...header, ok: true, operation: "scan", result: { scanBinding: binding, records, nextCursor, complete } };
|
|
249
|
+
}
|
|
250
|
+
case "claim": {
|
|
251
|
+
const r = object(o.result, ["claimId", "attemptId", "record", "claimEpoch"]), retained = record(r.record);
|
|
252
|
+
if (r.attemptId !== request.body.attemptId || r.claimEpoch !== request.serveEpoch || retained.intentId !== request.body.intentId)
|
|
253
|
+
refuse("claim reply does not match its request");
|
|
254
|
+
sameTarget(retained.target, request.body.target);
|
|
255
|
+
if (!retained.descriptor || canonicalJson(retained.descriptor.origin) !== canonicalJson(request.body.expectedOrigin))
|
|
256
|
+
refuse("claim origin differs from the expected origin");
|
|
257
|
+
return { ...header, ok: true, operation: "claim", result: { claimId: token(r.claimId), attemptId: request.body.attemptId, record: retained, claimEpoch: request.serveEpoch } };
|
|
258
|
+
}
|
|
259
|
+
case "settle": {
|
|
260
|
+
const r = object(o.result, ["claimId", "settleId", "recoveryRevision", "observation"]);
|
|
261
|
+
if (r.claimId !== request.body.claimId || r.settleId !== request.body.settleId || r.observation !== request.body.observation)
|
|
262
|
+
refuse("settlement reply does not match its request");
|
|
263
|
+
return { ...header, ok: true, operation: "settle", result: { claimId: request.body.claimId, settleId: request.body.settleId, recoveryRevision: count(r.recoveryRevision), observation: request.body.observation } };
|
|
264
|
+
}
|
|
265
|
+
case "finish": {
|
|
266
|
+
const r = object(o.result, ["finishId", "scanId", "scopeRevision", "admission"]);
|
|
267
|
+
if (r.finishId !== request.body.finishId || r.scanId !== request.body.scanBinding.scanId || r.admission !== "open")
|
|
268
|
+
refuse("finish reply does not match its request");
|
|
269
|
+
return { ...header, ok: true, operation: "finish", result: { finishId: request.body.finishId, scanId: request.body.scanBinding.scanId, scopeRevision: count(r.scopeRevision), admission: "open" } };
|
|
270
|
+
}
|
|
271
|
+
case "watch": {
|
|
272
|
+
const r = object(o.result, ["revision", "scanInvalidated"]);
|
|
273
|
+
return { ...header, ok: true, operation: "watch", result: { revision: count(r.revision), scanInvalidated: flag(r.scanInvalidated) } };
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=delegated-recovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegated-recovery.js","sourceRoot":"","sources":["../src/delegated-recovery.ts"],"names":[],"mappings":"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"}
|
package/dist/endpoint.d.ts
CHANGED
|
@@ -39,6 +39,8 @@ export interface EndpointOptions {
|
|
|
39
39
|
card: Omit<AgentCard, "id"> & {
|
|
40
40
|
id?: string;
|
|
41
41
|
};
|
|
42
|
+
/** Opaque presence label. Omitted reads COTAL_ENVIRONMENT; null omits the label without reading it. */
|
|
43
|
+
environment?: string | null;
|
|
42
44
|
/** This incarnation's lifecycle UID (SPEC §13.1), minted ONCE per lifecycle by the provisioning
|
|
43
45
|
* authority (manager/CLI: `mintLifecycleUid()`) and PERSISTED with the agent — never re-minted per
|
|
44
46
|
* process, or a supervised restart would abandon the durable inbox. REQUIRED to bind/create the
|