@dsh-enhanced/assistant-isolation 0.1.67 → 0.1.68
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/README.md +39 -68
- package/lib/cli.d.ts +2 -4
- package/lib/cli.d.ts.map +1 -1
- package/lib/cli.js +51 -77
- package/lib/cli.js.map +1 -1
- package/lib/config.d.ts +4 -7
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +26 -40
- package/lib/config.js.map +1 -1
- package/lib/index.d.ts +3 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/ledger.d.ts +2 -13
- package/lib/ledger.d.ts.map +1 -1
- package/lib/ledger.js +7 -85
- package/lib/ledger.js.map +1 -1
- package/lib/probe.d.ts +0 -3
- package/lib/probe.d.ts.map +1 -1
- package/lib/probe.js +1 -41
- package/lib/probe.js.map +1 -1
- package/lib/service.d.ts +1 -1
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +10 -90
- package/lib/service.js.map +1 -1
- package/lib/types.d.ts +4 -31
- package/lib/types.d.ts.map +1 -1
- package/lib/verifier-runner.d.ts +8 -16
- package/lib/verifier-runner.d.ts.map +1 -1
- package/lib/verifier-runner.js +9 -207
- package/lib/verifier-runner.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +8 -5
- package/lib/cleanup-receipt.d.ts +0 -28
- package/lib/cleanup-receipt.d.ts.map +0 -1
- package/lib/cleanup-receipt.js +0 -137
- package/lib/cleanup-receipt.js.map +0 -1
- package/lib/daemon-binding.d.ts +0 -13
- package/lib/daemon-binding.d.ts.map +0 -1
- package/lib/daemon-binding.js +0 -120
- package/lib/daemon-binding.js.map +0 -1
- package/lib/docker-socket.d.ts +0 -10
- package/lib/docker-socket.d.ts.map +0 -1
- package/lib/docker-socket.js +0 -43
- package/lib/docker-socket.js.map +0 -1
- package/lib/reconcile.d.ts +0 -5
- package/lib/reconcile.d.ts.map +0 -1
- package/lib/reconcile.js +0 -31
- package/lib/reconcile.js.map +0 -1
- package/lib/runner.d.ts +0 -12
- package/lib/runner.d.ts.map +0 -1
- package/lib/runner.js +0 -227
- package/lib/runner.js.map +0 -1
- package/lib/runtime-witness.d.ts +0 -32
- package/lib/runtime-witness.d.ts.map +0 -1
- package/lib/runtime-witness.js +0 -225
- package/lib/runtime-witness.js.map +0 -1
- package/lib/state-socket-binding.d.ts +0 -4
- package/lib/state-socket-binding.d.ts.map +0 -1
- package/lib/state-socket-binding.js +0 -64
- package/lib/state-socket-binding.js.map +0 -1
- package/runtime/supervisor.mjs +0 -300
package/lib/runner.js
DELETED
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
import { fork } from 'node:child_process';
|
|
2
|
-
import { cleanupIsolationResources } from './cleanup-receipt.js';
|
|
3
|
-
import { captureSystemdBinding } from './daemon-binding.js';
|
|
4
|
-
import { captureDaemonWitness, processWitness, sameDaemonWitness } from './runtime-witness.js';
|
|
5
|
-
import { configuredDockerSocketPath, resolveLocalDockerSocket, sameLocalDockerSocket } from './docker-socket.js';
|
|
6
|
-
const NAME = /^dsh-isolation-[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/;
|
|
7
|
-
const IMAGE = /^sha256:[0-9a-f]{64}$/;
|
|
8
|
-
const CLEANUP_GRACE_MS = 45_000;
|
|
9
|
-
function safeEnvironment() {
|
|
10
|
-
return {
|
|
11
|
-
PATH: process.env.PATH === undefined || process.env.PATH === '' ? '/usr/bin:/bin' : process.env.PATH,
|
|
12
|
-
LANG: 'C',
|
|
13
|
-
LC_ALL: 'C',
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
function failure(reason, quiescent = true) {
|
|
17
|
-
return { status: quiescent ? 'failed' : 'unknown', quiescent, stdout: '', stderr: '', reason };
|
|
18
|
-
}
|
|
19
|
-
function validLimits(limits) {
|
|
20
|
-
const maxima = { maxDurationMs: 300_000, maxInputBytes: 1_048_576, maxOutputBytes: 262_144,
|
|
21
|
-
maxArtifactBytes: 1_048_576, maxFiles: 128, memoryMiB: 4096, pidsLimit: 512, cpus: 8, workspaceMiB: 1024, workspaceInodes: 65_536 };
|
|
22
|
-
return Object.entries(maxima).every(([key, maximum]) => {
|
|
23
|
-
const value = limits[key];
|
|
24
|
-
return Number.isFinite(value) && value > 0 && value <= maximum && (key === 'cpus' ? value >= 0.1 : Number.isSafeInteger(value));
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
function validate(input) {
|
|
28
|
-
if (!NAME.test(input.containerName))
|
|
29
|
-
return 'invalid-container-name';
|
|
30
|
-
if (!IMAGE.test(input.image))
|
|
31
|
-
return 'image-must-be-a-sha256-digest';
|
|
32
|
-
if (!input.dockerPath.startsWith('/'))
|
|
33
|
-
return 'docker-path-must-be-absolute';
|
|
34
|
-
if (!input.workspacePath.startsWith('/') || /[\p{Cc},]/u.test(input.workspacePath))
|
|
35
|
-
return 'invalid-workspace-path';
|
|
36
|
-
if (input.artifacts !== undefined && (!Array.isArray(input.artifacts) || input.artifacts.length > input.limits.maxFiles || !input.artifacts.every(path => typeof path === 'string' && path.length > 0 && path.length <= 4096 && !path.startsWith('/') && !/[\p{Cc}\\]/u.test(path) && path.split('/').every(part => part !== '' && part !== '.' && part !== '..'))))
|
|
37
|
-
return 'invalid-artifacts';
|
|
38
|
-
if (typeof input.command !== 'string' || input.command.length === 0)
|
|
39
|
-
return 'invalid-command';
|
|
40
|
-
if (!Number.isSafeInteger(input.deadline) || input.deadline <= Date.now())
|
|
41
|
-
return 'deadline-expired';
|
|
42
|
-
if (!validLimits(input.limits))
|
|
43
|
-
return 'invalid-limits';
|
|
44
|
-
if (!['linux', 'darwin'].includes(process.platform) || typeof process.getuid !== 'function' || process.getuid() === 0)
|
|
45
|
-
return 'non-root-unix-host-required';
|
|
46
|
-
try {
|
|
47
|
-
configuredDockerSocketPath(input.socketPath);
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
return 'invalid-local-docker-socket';
|
|
51
|
-
}
|
|
52
|
-
return undefined;
|
|
53
|
-
}
|
|
54
|
-
function send(child, message) {
|
|
55
|
-
if (!child.connected)
|
|
56
|
-
return false;
|
|
57
|
-
try {
|
|
58
|
-
return child.send(message);
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Starts a one-shot supervisor. The supervisor owns Docker after creation so a
|
|
66
|
-
* Host crash closes IPC and causes container cleanup instead of an orphaned job.
|
|
67
|
-
*/
|
|
68
|
-
export async function runIsolatedProcess(input) {
|
|
69
|
-
const invalid = validate(input);
|
|
70
|
-
if (invalid !== undefined)
|
|
71
|
-
return failure(invalid);
|
|
72
|
-
if (input.signal.aborted)
|
|
73
|
-
return { status: 'cancelled', quiescent: true, stdout: '', stderr: '', reason: 'aborted-before-create' };
|
|
74
|
-
let socket;
|
|
75
|
-
try {
|
|
76
|
-
socket = resolveLocalDockerSocket(configuredDockerSocketPath(input.socketPath));
|
|
77
|
-
}
|
|
78
|
-
catch {
|
|
79
|
-
return failure('local-docker-socket-unavailable');
|
|
80
|
-
}
|
|
81
|
-
const daemonBefore = process.platform === 'linux' ? await captureDaemonWitness({ dockerPath: input.dockerPath, socketPath: socket.path }) : undefined;
|
|
82
|
-
const bindingBefore = daemonBefore ? await captureSystemdBinding(daemonBefore) : undefined;
|
|
83
|
-
if (input.signal.aborted)
|
|
84
|
-
return { status: 'cancelled', quiescent: true, stdout: '', stderr: '', reason: 'aborted-before-create' };
|
|
85
|
-
if (Date.now() >= input.deadline)
|
|
86
|
-
return failure('deadline-expired-before-create');
|
|
87
|
-
const config = {
|
|
88
|
-
dockerPath: input.dockerPath,
|
|
89
|
-
socket,
|
|
90
|
-
containerName: input.containerName,
|
|
91
|
-
image: input.image,
|
|
92
|
-
workspacePath: input.workspacePath,
|
|
93
|
-
artifacts: input.artifacts ?? [],
|
|
94
|
-
command: input.command,
|
|
95
|
-
deadline: input.deadline,
|
|
96
|
-
limits: input.limits,
|
|
97
|
-
};
|
|
98
|
-
const supervisor = fork(new URL('../runtime/supervisor.mjs', import.meta.url), [], {
|
|
99
|
-
detached: true,
|
|
100
|
-
execArgv: [],
|
|
101
|
-
env: safeEnvironment(),
|
|
102
|
-
serialization: 'json',
|
|
103
|
-
stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
|
|
104
|
-
});
|
|
105
|
-
// The supervisor uses IPC for control. Drain diagnostics so an unexpected
|
|
106
|
-
// Node warning cannot block its pipe, but do not mix it with worker output.
|
|
107
|
-
supervisor.stdout?.resume();
|
|
108
|
-
supervisor.stderr?.resume();
|
|
109
|
-
let supervisorWitness;
|
|
110
|
-
return await new Promise((resolve) => {
|
|
111
|
-
let settled = false;
|
|
112
|
-
let ready = false;
|
|
113
|
-
let finalReceipt = false;
|
|
114
|
-
let cancelSent = false;
|
|
115
|
-
let grace;
|
|
116
|
-
let deadlineTimer;
|
|
117
|
-
const settle = (result) => {
|
|
118
|
-
if (settled)
|
|
119
|
-
return;
|
|
120
|
-
settled = true;
|
|
121
|
-
if (grace !== undefined)
|
|
122
|
-
clearTimeout(grace);
|
|
123
|
-
if (deadlineTimer !== undefined)
|
|
124
|
-
clearTimeout(deadlineTimer);
|
|
125
|
-
input.signal.removeEventListener('abort', abort);
|
|
126
|
-
supervisor.removeAllListeners('message');
|
|
127
|
-
supervisor.removeAllListeners('error');
|
|
128
|
-
supervisor.removeAllListeners('exit');
|
|
129
|
-
if (supervisor.connected)
|
|
130
|
-
supervisor.disconnect();
|
|
131
|
-
resolve(result);
|
|
132
|
-
};
|
|
133
|
-
const cancel = (reason) => {
|
|
134
|
-
if (cancelSent)
|
|
135
|
-
return;
|
|
136
|
-
cancelSent = true;
|
|
137
|
-
send(supervisor, { type: 'cancel', reason });
|
|
138
|
-
grace = setTimeout(() => settle({ status: 'unknown', quiescent: false, stdout: '', stderr: '', reason: 'supervisor-cleanup-unconfirmed' }), CLEANUP_GRACE_MS);
|
|
139
|
-
grace.unref();
|
|
140
|
-
};
|
|
141
|
-
const abort = () => cancel('aborted');
|
|
142
|
-
deadlineTimer = setTimeout(() => cancel('deadline-expired'), Math.max(1, input.deadline - Date.now()));
|
|
143
|
-
deadlineTimer.unref();
|
|
144
|
-
input.signal.addEventListener('abort', abort, { once: true });
|
|
145
|
-
supervisor.once('error', (error) => settle(failure(`supervisor-spawn-failed:${error.message}`, false)));
|
|
146
|
-
supervisor.once('exit', (code, signal) => {
|
|
147
|
-
if (!settled && !finalReceipt)
|
|
148
|
-
settle({ status: 'unknown', quiescent: false, stdout: '', stderr: '', reason: `supervisor-exited:${code ?? signal ?? 'unknown'}` });
|
|
149
|
-
});
|
|
150
|
-
supervisor.on('message', async (message) => {
|
|
151
|
-
if (settled)
|
|
152
|
-
return;
|
|
153
|
-
if (message?.type === 'error') {
|
|
154
|
-
settle(failure(message.reason, false));
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
if (message?.type === 'result') {
|
|
158
|
-
if (finalReceipt)
|
|
159
|
-
return;
|
|
160
|
-
finalReceipt = true;
|
|
161
|
-
if (!sameLocalDockerSocket(socket)) {
|
|
162
|
-
settle({ ...message.result, status: 'unknown', quiescent: false, artifacts: [], reason: 'docker-socket-changed' });
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
// Only the supervisor's final receipt brackets the create operations.
|
|
166
|
-
// This is private diagnostic evidence, never by itself a release permit.
|
|
167
|
-
const daemonAfter = message.result.status === 'unknown' && daemonBefore && supervisorWitness
|
|
168
|
-
? await captureDaemonWitness({ dockerPath: input.dockerPath, socketPath: socket.path }) : undefined;
|
|
169
|
-
if (daemonBefore && daemonAfter && supervisorWitness && sameDaemonWitness(daemonBefore, daemonAfter)
|
|
170
|
-
&& supervisorWitness.bootId === daemonBefore.process.bootId) {
|
|
171
|
-
const bindingAfter = bindingBefore ? await captureSystemdBinding(daemonAfter) : undefined;
|
|
172
|
-
const binding = bindingBefore && bindingAfter && JSON.stringify(bindingBefore) === JSON.stringify(bindingAfter) ? bindingAfter : undefined;
|
|
173
|
-
settle({ ...message.result, creationWitness: { daemon: daemonAfter, supervisor: supervisorWitness,
|
|
174
|
-
...(message.settlementProtocol === 'all-cli-closed/v1' && typeof message.requestsSettled === 'boolean' ? { requestsSettled: message.requestsSettled } : {}),
|
|
175
|
-
...(binding ? { binding } : {}) } });
|
|
176
|
-
}
|
|
177
|
-
else
|
|
178
|
-
settle(message.result);
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
if (message?.type !== 'ready' || ready)
|
|
182
|
-
return;
|
|
183
|
-
ready = true;
|
|
184
|
-
if (input.signal.aborted || Date.now() >= input.deadline) {
|
|
185
|
-
cancel(input.signal.aborted ? 'aborted' : 'deadline-expired');
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
let allowed = false;
|
|
189
|
-
try {
|
|
190
|
-
allowed = await input.authorizeStart();
|
|
191
|
-
}
|
|
192
|
-
catch {
|
|
193
|
-
allowed = false;
|
|
194
|
-
}
|
|
195
|
-
if (!allowed || input.signal.aborted || Date.now() >= input.deadline) {
|
|
196
|
-
cancel(!allowed ? 'authorization-denied' : (input.signal.aborted ? 'aborted' : 'deadline-expired'));
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
if (!send(supervisor, { type: 'start' }))
|
|
200
|
-
settle({ status: 'unknown', quiescent: false, stdout: '', stderr: '', reason: 'supervisor-ipc-closed-before-start' });
|
|
201
|
-
});
|
|
202
|
-
const configure = async () => {
|
|
203
|
-
supervisorWitness = supervisor.pid === undefined ? undefined : await processWitness(supervisor.pid);
|
|
204
|
-
if (settled)
|
|
205
|
-
return;
|
|
206
|
-
if (cancelSent || input.signal.aborted || Date.now() >= input.deadline) {
|
|
207
|
-
settle({ status: input.signal.aborted ? 'cancelled' : 'timed-out', quiescent: true, stdout: '', stderr: '', reason: 'cancelled-before-configure' });
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
if (!send(supervisor, { type: 'configure', config }))
|
|
211
|
-
settle({ status: 'unknown', quiescent: false, stdout: '', stderr: '', reason: 'supervisor-ipc-closed-before-configure' });
|
|
212
|
-
};
|
|
213
|
-
void configure();
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
/** Removes only names generated by this plugin; arbitrary Docker names are rejected. */
|
|
217
|
-
export async function removeIsolatedContainer(dockerPath, name, options = {}) {
|
|
218
|
-
let socket;
|
|
219
|
-
try {
|
|
220
|
-
socket = resolveLocalDockerSocket(configuredDockerSocketPath(options.socketPath));
|
|
221
|
-
}
|
|
222
|
-
catch {
|
|
223
|
-
return false;
|
|
224
|
-
}
|
|
225
|
-
return await cleanupIsolationResources(dockerPath, name, { ...options, socketPath: socket.path, socket }) !== undefined;
|
|
226
|
-
}
|
|
227
|
-
//# sourceMappingURL=runner.js.map
|
package/lib/runner.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
package/lib/runtime-witness.d.ts
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { SystemdBinding } from './daemon-binding.js';
|
|
2
|
-
export interface ProcessWitness {
|
|
3
|
-
bootId: string;
|
|
4
|
-
pid: number;
|
|
5
|
-
startTicks: string;
|
|
6
|
-
}
|
|
7
|
-
export interface DaemonWitness {
|
|
8
|
-
process: ProcessWitness;
|
|
9
|
-
engineId: string;
|
|
10
|
-
dockerPath: string;
|
|
11
|
-
socketPath: string;
|
|
12
|
-
pidFile: string;
|
|
13
|
-
}
|
|
14
|
-
export interface CreationWitness {
|
|
15
|
-
daemon: DaemonWitness;
|
|
16
|
-
supervisor: ProcessWitness;
|
|
17
|
-
/** Present only after the supervisor has reaped every CLI it started. */
|
|
18
|
-
requestsSettled?: boolean;
|
|
19
|
-
binding?: SystemdBinding;
|
|
20
|
-
}
|
|
21
|
-
export declare function validateCreationWitness(value: unknown): CreationWitness;
|
|
22
|
-
export declare function processWitness(pid?: number): Promise<ProcessWitness | undefined>;
|
|
23
|
-
export declare function processExited(witness: ProcessWitness): boolean;
|
|
24
|
-
export declare function captureDaemonWitness({ dockerPath, socketPath, pidFile }: {
|
|
25
|
-
dockerPath: string;
|
|
26
|
-
socketPath?: string;
|
|
27
|
-
pidFile?: string;
|
|
28
|
-
}): Promise<DaemonWitness | undefined>;
|
|
29
|
-
export declare function sameDaemonWitness(a: DaemonWitness, b: DaemonWitness): boolean;
|
|
30
|
-
/** Diagnostic candidate only: does not prove socket ownership or authorize quota release. */
|
|
31
|
-
export declare function eligibleRestartWitness(original: CreationWitness): Promise<DaemonWitness | undefined>;
|
|
32
|
-
//# sourceMappingURL=runtime-witness.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-witness.d.ts","sourceRoot":"","sources":["../src/runtime-witness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAOzD,MAAM,WAAW,cAAc;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AACnF,MAAM,WAAW,aAAa;IAAG,OAAO,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACrI,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,aAAa,CAAA;IACrB,UAAU,EAAE,cAAc,CAAA;IAC1B,yEAAyE;IACzE,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,OAAO,CAAC,EAAE,cAAc,CAAA;CACzB;AAeD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAavE;AAoBD,wBAAsB,cAAc,CAAC,GAAG,SAAc,GAAG,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAG3F;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAmB9D;AAkDD,wBAAsB,oBAAoB,CAAC,EAAE,UAAU,EAAE,UAA8B,EAAE,OAAwB,EAAE,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAYtN;AAQD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAG7E;AAED,6FAA6F;AAC7F,wBAAsB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAO1G"}
|
package/lib/runtime-witness.js
DELETED
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
import { constants, readFileSync } from 'node:fs';
|
|
3
|
-
import { chmod, lstat, mkdtemp, open, readFile, realpath, rm, stat } from 'node:fs/promises';
|
|
4
|
-
import { tmpdir } from 'node:os';
|
|
5
|
-
import { isAbsolute, join } from 'node:path';
|
|
6
|
-
const bootIdPattern = /^[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/;
|
|
7
|
-
const ticksPattern = /^[1-9][0-9]{0,63}$/;
|
|
8
|
-
const engineIdPattern = /^[A-Za-z0-9:-]{1,256}$/;
|
|
9
|
-
const pathMaximum = 4096;
|
|
10
|
-
const defaultSocketPath = '/var/run/docker.sock';
|
|
11
|
-
const defaultPidFile = '/run/docker.pid';
|
|
12
|
-
const validPath = (value) => typeof value === 'string' && value.length > 0 && value.length <= pathMaximum && isAbsolute(value) && !/[\p{Cc}]/u.test(value);
|
|
13
|
-
const validProcess = (value) => !!value && typeof value === 'object'
|
|
14
|
-
&& Object.keys(value).length === 3 && typeof value.bootId === 'string' && bootIdPattern.test(value.bootId)
|
|
15
|
-
&& Number.isSafeInteger(value.pid) && value.pid > 0
|
|
16
|
-
&& typeof value.startTicks === 'string' && ticksPattern.test(value.startTicks);
|
|
17
|
-
export function validateCreationWitness(value) {
|
|
18
|
-
if (!value || typeof value !== 'object' || ![2, 3, 4].includes(Object.keys(value).length) || Object.keys(value).some(key => !['daemon', 'supervisor', 'requestsSettled', 'binding'].includes(key)) || !validProcess(value.supervisor))
|
|
19
|
-
throw new TypeError('invalid creation witness');
|
|
20
|
-
const daemon = value.daemon;
|
|
21
|
-
if (!daemon || typeof daemon !== 'object' || Object.keys(daemon).length !== 5 || !validProcess(daemon.process)
|
|
22
|
-
|| typeof daemon.engineId !== 'string' || !engineIdPattern.test(daemon.engineId)
|
|
23
|
-
|| !validPath(daemon.dockerPath) || !validPath(daemon.socketPath) || !validPath(daemon.pidFile))
|
|
24
|
-
throw new TypeError('invalid creation witness');
|
|
25
|
-
if (daemon.process.bootId !== value.supervisor.bootId)
|
|
26
|
-
throw new TypeError('creation witness crosses boot generations');
|
|
27
|
-
const witness = value;
|
|
28
|
-
if (witness.requestsSettled !== undefined && typeof witness.requestsSettled !== 'boolean')
|
|
29
|
-
throw new TypeError('invalid settlement proof');
|
|
30
|
-
if (witness.binding !== undefined && (!witness.binding || Object.keys(witness.binding).length !== 3 || witness.binding.kind !== 'systemd'
|
|
31
|
-
|| !/^[0-9a-f]{32}$/.test(witness.binding.serviceInvocationId) || !/^[0-9a-f]{32}$/.test(witness.binding.socketInvocationId)))
|
|
32
|
-
throw new TypeError('invalid daemon binding');
|
|
33
|
-
return { ...(witness.requestsSettled === undefined ? {} : { requestsSettled: witness.requestsSettled }),
|
|
34
|
-
...(witness.binding === undefined ? {} : { binding: { ...witness.binding } }), daemon: { process: { ...daemon.process }, engineId: daemon.engineId, dockerPath: daemon.dockerPath, socketPath: daemon.socketPath, pidFile: daemon.pidFile }, supervisor: { ...value.supervisor } };
|
|
35
|
-
}
|
|
36
|
-
async function bootId() {
|
|
37
|
-
try {
|
|
38
|
-
const value = (await readFile('/proc/sys/kernel/random/boot_id', 'utf8')).trim().toLowerCase();
|
|
39
|
-
return bootIdPattern.test(value) ? value : undefined;
|
|
40
|
-
}
|
|
41
|
-
catch {
|
|
42
|
-
return undefined;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
async function proc(pid) {
|
|
46
|
-
if (!Number.isSafeInteger(pid) || pid <= 0)
|
|
47
|
-
return undefined;
|
|
48
|
-
try {
|
|
49
|
-
const [currentBootId, raw, metadata] = await Promise.all([bootId(), readFile(`/proc/${pid}/stat`, 'utf8'), stat(`/proc/${pid}`)]);
|
|
50
|
-
const close = raw.lastIndexOf(') ');
|
|
51
|
-
const opening = raw.indexOf('(');
|
|
52
|
-
if (!currentBootId || opening < 0 || close <= opening || !Number.isSafeInteger(metadata.uid))
|
|
53
|
-
return undefined;
|
|
54
|
-
const fields = raw.slice(close + 2).trim().split(/\s+/);
|
|
55
|
-
const startTicks = fields[19];
|
|
56
|
-
if (!startTicks || !ticksPattern.test(startTicks) || !fields[0])
|
|
57
|
-
return undefined;
|
|
58
|
-
return { bootId: currentBootId, pid, startTicks, comm: raw.slice(opening + 1, close), state: fields[0], uid: metadata.uid };
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
return undefined;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
export async function processWitness(pid = process.pid) {
|
|
65
|
-
const value = await proc(pid);
|
|
66
|
-
return value ? { bootId: value.bootId, pid: value.pid, startTicks: value.startTicks } : undefined;
|
|
67
|
-
}
|
|
68
|
-
export function processExited(witness) {
|
|
69
|
-
if (!validProcess(witness))
|
|
70
|
-
return false;
|
|
71
|
-
let currentBootId;
|
|
72
|
-
try {
|
|
73
|
-
currentBootId = readFileSync('/proc/sys/kernel/random/boot_id', 'utf8').trim().toLowerCase();
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
if (!bootIdPattern.test(currentBootId))
|
|
79
|
-
return false;
|
|
80
|
-
if (currentBootId !== witness.bootId)
|
|
81
|
-
return true;
|
|
82
|
-
try {
|
|
83
|
-
const raw = readFileSync(`/proc/${witness.pid}/stat`, 'utf8');
|
|
84
|
-
const close = raw.lastIndexOf(') ');
|
|
85
|
-
if (close < 0)
|
|
86
|
-
return false;
|
|
87
|
-
const fields = raw.slice(close + 2).trim().split(/\s+/);
|
|
88
|
-
// A zombie retains its proc entry; it is not proof that all waiters reaped it.
|
|
89
|
-
if (fields[0] === 'Z' || !fields[19] || !ticksPattern.test(fields[19]))
|
|
90
|
-
return false;
|
|
91
|
-
return fields[19] !== witness.startTicks;
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
return !!error && typeof error === 'object' && 'code' in error && error.code === 'ENOENT';
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
async function stablePidFile(path) {
|
|
98
|
-
if (!validPath(path))
|
|
99
|
-
return undefined;
|
|
100
|
-
try {
|
|
101
|
-
const canonical = await realpath(path);
|
|
102
|
-
if (!isAbsolute(canonical))
|
|
103
|
-
return undefined;
|
|
104
|
-
const handle = await open(canonical, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
|
|
105
|
-
try {
|
|
106
|
-
const before = await handle.stat();
|
|
107
|
-
if (!before.isFile() || before.nlink !== 1 || (before.mode & 0o022) !== 0 || (before.uid !== 0 && before.uid !== process.getuid?.()) || before.size < 1 || before.size >= 64)
|
|
108
|
-
return undefined;
|
|
109
|
-
const bytes = Buffer.alloc(64);
|
|
110
|
-
const read = await handle.read(bytes, 0, bytes.length, 0);
|
|
111
|
-
const after = await handle.stat();
|
|
112
|
-
if (before.dev !== after.dev || before.ino !== after.ino || before.size !== after.size || before.mtimeMs !== after.mtimeMs || before.ctimeMs !== after.ctimeMs)
|
|
113
|
-
return undefined;
|
|
114
|
-
const text = bytes.subarray(0, read.bytesRead).toString('ascii').trim();
|
|
115
|
-
if (!/^[1-9][0-9]{0,15}$/.test(text))
|
|
116
|
-
return undefined;
|
|
117
|
-
const pid = Number(text);
|
|
118
|
-
return Number.isSafeInteger(pid) && pid > 0 ? { path: canonical, pid, uid: before.uid, dev: before.dev, ino: before.ino } : undefined;
|
|
119
|
-
}
|
|
120
|
-
finally {
|
|
121
|
-
await handle.close();
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
catch {
|
|
125
|
-
return undefined;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
async function canonicalSocket(path) {
|
|
129
|
-
if (!validPath(path))
|
|
130
|
-
return undefined;
|
|
131
|
-
try {
|
|
132
|
-
const canonical = await realpath(path);
|
|
133
|
-
const info = await lstat(canonical);
|
|
134
|
-
return isAbsolute(canonical) && info.isSocket() ? { path: canonical, dev: info.dev, ino: info.ino } : undefined;
|
|
135
|
-
}
|
|
136
|
-
catch {
|
|
137
|
-
return undefined;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
async function canonicalExecutable(path) {
|
|
141
|
-
if (!validPath(path))
|
|
142
|
-
return undefined;
|
|
143
|
-
try {
|
|
144
|
-
const canonical = await realpath(path);
|
|
145
|
-
const info = await stat(canonical);
|
|
146
|
-
return isAbsolute(canonical) && info.isFile() && (info.mode & 0o111) !== 0 ? canonical : undefined;
|
|
147
|
-
}
|
|
148
|
-
catch {
|
|
149
|
-
return undefined;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
async function engineId(dockerPath, socketPath) {
|
|
153
|
-
let directory;
|
|
154
|
-
try {
|
|
155
|
-
directory = await mkdtemp(join(tmpdir(), 'dsh-isolation-docker-'));
|
|
156
|
-
await chmod(directory, 0o700);
|
|
157
|
-
return await new Promise(resolve => {
|
|
158
|
-
let output = Buffer.alloc(0);
|
|
159
|
-
let done = false;
|
|
160
|
-
const finish = (value) => { if (done)
|
|
161
|
-
return; done = true; clearTimeout(timer); resolve(value); };
|
|
162
|
-
const child = spawn(dockerPath, ['--config', directory, '-H', `unix://${socketPath}`, 'info', '--format', '{{.ID}}'], { shell: false, env: { PATH: process.env.PATH || '/usr/bin:/bin', LANG: 'C', LC_ALL: 'C' }, stdio: ['ignore', 'pipe', 'ignore'] });
|
|
163
|
-
const timer = setTimeout(() => { child.kill('SIGKILL'); finish(undefined); }, 5_000);
|
|
164
|
-
timer.unref();
|
|
165
|
-
child.stdout.on('data', (chunk) => { if (output.length + chunk.length > 4096) {
|
|
166
|
-
child.kill('SIGKILL');
|
|
167
|
-
finish(undefined);
|
|
168
|
-
}
|
|
169
|
-
else
|
|
170
|
-
output = Buffer.concat([output, chunk]); });
|
|
171
|
-
child.once('error', () => finish(undefined));
|
|
172
|
-
child.once('close', code => { const value = output.toString('utf8').trim(); finish(code === 0 && engineIdPattern.test(value) ? value : undefined); });
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
catch {
|
|
176
|
-
return undefined;
|
|
177
|
-
}
|
|
178
|
-
finally {
|
|
179
|
-
if (directory !== undefined)
|
|
180
|
-
await rm(directory, { recursive: true, force: true }).catch(() => undefined);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
export async function captureDaemonWitness({ dockerPath, socketPath = defaultSocketPath, pidFile = defaultPidFile }) {
|
|
184
|
-
const [executable, socket, pid] = await Promise.all([canonicalExecutable(dockerPath), canonicalSocket(socketPath), stablePidFile(pidFile)]);
|
|
185
|
-
if (!executable || !socket || !pid)
|
|
186
|
-
return undefined;
|
|
187
|
-
const first = await proc(pid.pid);
|
|
188
|
-
if (!first || first.comm !== 'dockerd' || first.uid !== pid.uid || first.state === 'Z')
|
|
189
|
-
return undefined;
|
|
190
|
-
const id = await engineId(executable, socket.path);
|
|
191
|
-
const [recheckedPid, recheckedSocket] = await Promise.all([stablePidFile(pidFile), canonicalSocket(socketPath)]);
|
|
192
|
-
const second = await proc(pid.pid);
|
|
193
|
-
if (!id || !recheckedPid || !recheckedSocket || recheckedPid.path !== pid.path || recheckedPid.dev !== pid.dev || recheckedPid.ino !== pid.ino || recheckedPid.pid !== pid.pid || recheckedPid.uid !== pid.uid
|
|
194
|
-
|| recheckedSocket.path !== socket.path || recheckedSocket.dev !== socket.dev || recheckedSocket.ino !== socket.ino
|
|
195
|
-
|| !second || second.comm !== 'dockerd' || second.uid !== pid.uid || second.state === 'Z' || first.bootId !== second.bootId || first.startTicks !== second.startTicks)
|
|
196
|
-
return undefined;
|
|
197
|
-
return { process: { bootId: second.bootId, pid: second.pid, startTicks: second.startTicks }, engineId: id, dockerPath: executable, socketPath: socket.path, pidFile: pid.path };
|
|
198
|
-
}
|
|
199
|
-
function validDaemon(value) {
|
|
200
|
-
return !!value && typeof value === 'object' && Object.keys(value).length === 5 && validProcess(value.process)
|
|
201
|
-
&& typeof value.engineId === 'string' && engineIdPattern.test(value.engineId)
|
|
202
|
-
&& validPath(value.dockerPath) && validPath(value.socketPath) && validPath(value.pidFile);
|
|
203
|
-
}
|
|
204
|
-
export function sameDaemonWitness(a, b) {
|
|
205
|
-
if (!validDaemon(a) || !validDaemon(b))
|
|
206
|
-
return false;
|
|
207
|
-
return a.process.bootId === b.process.bootId && a.process.pid === b.process.pid && a.process.startTicks === b.process.startTicks && a.engineId === b.engineId && a.dockerPath === b.dockerPath && a.socketPath === b.socketPath && a.pidFile === b.pidFile;
|
|
208
|
-
}
|
|
209
|
-
/** Diagnostic candidate only: does not prove socket ownership or authorize quota release. */
|
|
210
|
-
export async function eligibleRestartWitness(original) {
|
|
211
|
-
let value;
|
|
212
|
-
try {
|
|
213
|
-
value = validateCreationWitness(original);
|
|
214
|
-
}
|
|
215
|
-
catch {
|
|
216
|
-
return undefined;
|
|
217
|
-
}
|
|
218
|
-
if (!processExited(value.supervisor) || !processExited(value.daemon.process))
|
|
219
|
-
return undefined;
|
|
220
|
-
const current = await captureDaemonWitness({ dockerPath: value.daemon.dockerPath, socketPath: value.daemon.socketPath, pidFile: value.daemon.pidFile });
|
|
221
|
-
if (!current || current.engineId !== value.daemon.engineId || current.dockerPath !== value.daemon.dockerPath || current.socketPath !== value.daemon.socketPath || current.pidFile !== value.daemon.pidFile)
|
|
222
|
-
return undefined;
|
|
223
|
-
return current.process.bootId === value.daemon.process.bootId && current.process.pid === value.daemon.process.pid && current.process.startTicks === value.daemon.process.startTicks ? undefined : current;
|
|
224
|
-
}
|
|
225
|
-
//# sourceMappingURL=runtime-witness.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-witness.js","sourceRoot":"","sources":["../src/runtime-witness.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
/** Legacy state roots were Linux-only and always used the default socket. */
|
|
2
|
-
export declare function stateSocketBindingMatches(stateRoot: string, socketPath: string): boolean;
|
|
3
|
-
export declare function bindIsolationStateSocket(stateRoot: string, socketPath: string): void;
|
|
4
|
-
//# sourceMappingURL=state-socket-binding.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state-socket-binding.d.ts","sourceRoot":"","sources":["../src/state-socket-binding.ts"],"names":[],"mappings":"AAoBA,6EAA6E;AAC7E,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAMxF;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAuBpF"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { closeSync, constants, existsSync, fstatSync, fsyncSync, lstatSync, openSync, readFileSync, writeSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { configuredDockerSocketPath } from './docker-socket.js';
|
|
4
|
-
const filename = 'docker-socket-path';
|
|
5
|
-
function readBinding(stateRoot) {
|
|
6
|
-
const file = join(stateRoot, filename);
|
|
7
|
-
if (!existsSync(file))
|
|
8
|
-
return undefined;
|
|
9
|
-
const info = lstatSync(file);
|
|
10
|
-
if (!info.isFile() || info.isSymbolicLink() || info.nlink !== 1 || info.uid !== process.getuid?.() || (info.mode & 0o077) !== 0 || info.size > 4096) {
|
|
11
|
-
throw new Error('assistant-isolation: invalid state Docker socket binding');
|
|
12
|
-
}
|
|
13
|
-
const value = readFileSync(file, 'utf8');
|
|
14
|
-
if (!value.endsWith('\n') || value.slice(0, -1) !== configuredDockerSocketPath(value.slice(0, -1))) {
|
|
15
|
-
throw new Error('assistant-isolation: invalid state Docker socket binding');
|
|
16
|
-
}
|
|
17
|
-
return value.slice(0, -1);
|
|
18
|
-
}
|
|
19
|
-
/** Legacy state roots were Linux-only and always used the default socket. */
|
|
20
|
-
export function stateSocketBindingMatches(stateRoot, socketPath) {
|
|
21
|
-
try {
|
|
22
|
-
if (existsSync(join(stateRoot, 'native-backend')))
|
|
23
|
-
return false;
|
|
24
|
-
const existing = readBinding(stateRoot);
|
|
25
|
-
return existing === undefined ? process.platform === 'linux' && socketPath === '/var/run/docker.sock' : existing === socketPath;
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
export function bindIsolationStateSocket(stateRoot, socketPath) {
|
|
32
|
-
configuredDockerSocketPath(socketPath);
|
|
33
|
-
if (existsSync(join(stateRoot, 'native-backend')))
|
|
34
|
-
throw new Error('assistant-isolation: state root is native-bound');
|
|
35
|
-
const existing = readBinding(stateRoot);
|
|
36
|
-
if (existing !== undefined) {
|
|
37
|
-
if (existing !== socketPath)
|
|
38
|
-
throw new Error('assistant-isolation: state root is bound to a different Docker socket');
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
if (existsSync(join(stateRoot, 'ledger.sqlite')) && !stateSocketBindingMatches(stateRoot, socketPath)) {
|
|
42
|
-
throw new Error('assistant-isolation: legacy state root requires its original Linux Docker socket');
|
|
43
|
-
}
|
|
44
|
-
const file = join(stateRoot, filename);
|
|
45
|
-
let handle;
|
|
46
|
-
try {
|
|
47
|
-
handle = openSync(file, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
if (error && typeof error === 'object' && 'code' in error && error.code === 'EEXIST' && stateSocketBindingMatches(stateRoot, socketPath))
|
|
51
|
-
return;
|
|
52
|
-
throw error;
|
|
53
|
-
}
|
|
54
|
-
try {
|
|
55
|
-
const bytes = Buffer.from(`${socketPath}\n`);
|
|
56
|
-
if (writeSync(handle, bytes) !== bytes.length || !fstatSync(handle).isFile())
|
|
57
|
-
throw new Error('assistant-isolation: cannot persist Docker socket binding');
|
|
58
|
-
fsyncSync(handle);
|
|
59
|
-
}
|
|
60
|
-
finally {
|
|
61
|
-
closeSync(handle);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=state-socket-binding.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state-socket-binding.js","sourceRoot":"","sources":["../src/state-socket-binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC9H,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAA;AAE/D,MAAM,QAAQ,GAAG,oBAAoB,CAAA;AAErC,SAAS,WAAW,CAAC,SAAiB;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IACtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAA;IACvC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;QACpJ,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC7E,CAAC;IACD,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACxC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,0BAA0B,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnG,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC7E,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AAC3B,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,yBAAyB,CAAC,SAAiB,EAAE,UAAkB;IAC7E,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;QAC/D,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;QACvC,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,UAAU,KAAK,sBAAsB,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAA;IACjI,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAA;IAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,SAAiB,EAAE,UAAkB;IAC5E,0BAA0B,CAAC,UAAU,CAAC,CAAA;IACtC,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACrH,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;IACvC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,QAAQ,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAA;QACrH,OAAM;IACR,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC;QACtG,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAA;IACrG,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IACtC,IAAI,MAAc,CAAA;IAClB,IAAI,CAAC;QAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IAAC,CAAC;IACxH,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,yBAAyB,CAAC,SAAS,EAAE,UAAU,CAAC;YAAE,OAAM;QAChJ,MAAM,KAAK,CAAA;IACb,CAAC;IACD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,IAAI,CAAC,CAAA;QAC5C,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;QAC1J,SAAS,CAAC,MAAM,CAAC,CAAA;IACnB,CAAC;YAAS,CAAC;QAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAAC,CAAC;AACjC,CAAC"}
|