@zhivex-ai/sandbox-docker 0.0.1 → 0.2.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/README.md +89 -1
- package/dist/docker-client.d.ts +92 -0
- package/dist/docker-client.d.ts.map +1 -0
- package/dist/docker-client.js +464 -0
- package/dist/docker-client.js.map +1 -0
- package/dist/environment.d.ts +119 -0
- package/dist/environment.d.ts.map +1 -0
- package/dist/environment.js +1056 -0
- package/dist/environment.js.map +1 -0
- package/dist/errors.d.ts +7 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +9 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/memory-docker-client.d.ts +13 -0
- package/dist/memory-docker-client.d.ts.map +1 -0
- package/dist/memory-docker-client.js +348 -0
- package/dist/memory-docker-client.js.map +1 -0
- package/dist/network.d.ts +43 -0
- package/dist/network.d.ts.map +1 -0
- package/dist/network.js +323 -0
- package/dist/network.js.map +1 -0
- package/dist/paths.d.ts +7 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +58 -0
- package/dist/paths.js.map +1 -0
- package/dist/stores.d.ts +42 -0
- package/dist/stores.d.ts.map +1 -0
- package/dist/stores.js +396 -0
- package/dist/stores.js.map +1 -0
- package/dist/stream.d.ts +11 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +75 -0
- package/dist/stream.js.map +1 -0
- package/dist/tar.d.ts +13 -0
- package/dist/tar.d.ts.map +1 -0
- package/dist/tar.js +230 -0
- package/dist/tar.js.map +1 -0
- package/dist/tools.d.ts +35 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +90 -0
- package/dist/tools.js.map +1 -0
- package/docker/Dockerfile +11 -0
- package/package.json +46 -4
package/dist/stores.js
ADDED
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import { link, lstat, mkdir, open, readFile, rename, rm, stat, unlink, writeFile } from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { ConflictError } from "@zhivex-ai/core";
|
|
6
|
+
import { SandboxError } from "./errors.js";
|
|
7
|
+
const leaseKey = (runId, scopeKey) => `${scopeKey}\0${runId}`;
|
|
8
|
+
const assertLeaseIdentity = (lease, runId, scopeKey) => {
|
|
9
|
+
if (lease.runId !== runId || lease.scopeKey !== scopeKey) {
|
|
10
|
+
throw new SandboxError("STORE_INVALID", "Sandbox lease identity does not match the requested run.");
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const assertSnapshotIdentity = (snapshot, runId, scopeKey) => {
|
|
14
|
+
if (snapshot.runId !== runId || snapshot.scopeKey !== scopeKey) {
|
|
15
|
+
throw new SandboxError("SNAPSHOT_INVALID", "Sandbox snapshot identity does not match the requested run.");
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
export const createMemorySandboxLeaseStore = () => {
|
|
19
|
+
const records = new Map();
|
|
20
|
+
return {
|
|
21
|
+
async load(runId, scopeKey) {
|
|
22
|
+
assertStoreRunId(runId);
|
|
23
|
+
assertScopeKey(scopeKey);
|
|
24
|
+
const record = records.get(leaseKey(runId, scopeKey));
|
|
25
|
+
if (!record)
|
|
26
|
+
return undefined;
|
|
27
|
+
assertLeaseIdentity(record, runId, scopeKey);
|
|
28
|
+
return structuredClone(record);
|
|
29
|
+
},
|
|
30
|
+
async compareAndSwap(lease, expectedRevision) {
|
|
31
|
+
assertStoreRunId(lease.runId);
|
|
32
|
+
assertScopeKey(lease.scopeKey);
|
|
33
|
+
assertLeaseIdentity(lease, lease.runId, lease.scopeKey);
|
|
34
|
+
const key = leaseKey(lease.runId, lease.scopeKey);
|
|
35
|
+
const current = records.get(key);
|
|
36
|
+
if (current?.revision !== expectedRevision) {
|
|
37
|
+
throw new ConflictError(`Sandbox lease for run "${lease.runId}" changed before it could be saved.`);
|
|
38
|
+
}
|
|
39
|
+
records.set(key, structuredClone(lease));
|
|
40
|
+
return structuredClone(lease);
|
|
41
|
+
},
|
|
42
|
+
async list() {
|
|
43
|
+
return [...records.values()].map(record => structuredClone(record));
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
export const createMemorySandboxSnapshotStore = () => {
|
|
48
|
+
const records = new Map();
|
|
49
|
+
return {
|
|
50
|
+
async load(runId, scopeKey) {
|
|
51
|
+
assertStoreRunId(runId);
|
|
52
|
+
assertScopeKey(scopeKey);
|
|
53
|
+
const record = records.get(leaseKey(runId, scopeKey));
|
|
54
|
+
if (!record)
|
|
55
|
+
return undefined;
|
|
56
|
+
assertSnapshotIdentity(record, runId, scopeKey);
|
|
57
|
+
return {
|
|
58
|
+
...record,
|
|
59
|
+
workspaceTar: new Uint8Array(record.workspaceTar),
|
|
60
|
+
...(record.pendingImageIds ? { pendingImageIds: [...record.pendingImageIds] } : {})
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
async save(snapshot) {
|
|
64
|
+
assertStoreRunId(snapshot.runId);
|
|
65
|
+
assertScopeKey(snapshot.scopeKey);
|
|
66
|
+
assertSnapshotIdentity(snapshot, snapshot.runId, snapshot.scopeKey);
|
|
67
|
+
records.set(leaseKey(snapshot.runId, snapshot.scopeKey), {
|
|
68
|
+
...snapshot,
|
|
69
|
+
workspaceTar: new Uint8Array(snapshot.workspaceTar),
|
|
70
|
+
...(snapshot.pendingImageIds ? { pendingImageIds: [...snapshot.pendingImageIds] } : {})
|
|
71
|
+
});
|
|
72
|
+
},
|
|
73
|
+
async remove(runId, scopeKey) {
|
|
74
|
+
assertStoreRunId(runId);
|
|
75
|
+
assertScopeKey(scopeKey);
|
|
76
|
+
records.delete(leaseKey(runId, scopeKey));
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
const scopeDirectory = (scopeKey) => createHash("sha256").update(scopeKey).digest("hex");
|
|
81
|
+
/** Reject dot segments before they reach path.join. encodeURIComponent leaves "." and ".." unchanged. */
|
|
82
|
+
const assertStoreRunId = (runId) => {
|
|
83
|
+
if (typeof runId !== "string" || runId.length === 0 || runId.length > 512 || runId.includes("\0")) {
|
|
84
|
+
throw new SandboxError("STORE_ID", "Sandbox run id must be a non-empty string.");
|
|
85
|
+
}
|
|
86
|
+
if (runId === "." || runId === "..") {
|
|
87
|
+
throw new SandboxError("STORE_ID", "Sandbox run id cannot be '.' or '..'.");
|
|
88
|
+
}
|
|
89
|
+
const encoded = encodeURIComponent(runId);
|
|
90
|
+
if (encoded === "." || encoded === ".." || encoded.includes("/") || encoded.includes("\\")) {
|
|
91
|
+
throw new SandboxError("STORE_ID", "Sandbox run id cannot escape its scope directory.");
|
|
92
|
+
}
|
|
93
|
+
return encoded;
|
|
94
|
+
};
|
|
95
|
+
const assertScopeKey = (scopeKey) => {
|
|
96
|
+
if (typeof scopeKey !== "string" || scopeKey.length === 0 || scopeKey.length > 4096 || scopeKey.includes("\0")) {
|
|
97
|
+
throw new SandboxError("STORE_ID", "Sandbox scope key must be a non-empty string.");
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
/** Join a scope file and refuse a path whose segments leave the scope directory. */
|
|
101
|
+
const scopeFile = (directory, scopeKey, name) => {
|
|
102
|
+
assertScopeKey(scopeKey);
|
|
103
|
+
const scopeDir = path.resolve(directory, scopeDirectory(scopeKey));
|
|
104
|
+
const resolved = path.resolve(scopeDir, name);
|
|
105
|
+
const relative = path.relative(scopeDir, resolved);
|
|
106
|
+
if (path.isAbsolute(relative) || relative.split(path.sep).includes("..")) {
|
|
107
|
+
throw new SandboxError("STORE_ID", "Sandbox store path escapes its scope directory.");
|
|
108
|
+
}
|
|
109
|
+
return resolved;
|
|
110
|
+
};
|
|
111
|
+
const assertPrivateFile = async (file) => {
|
|
112
|
+
const info = await stat(file);
|
|
113
|
+
if ((info.mode & 0o777) !== 0o600) {
|
|
114
|
+
throw new SandboxError("STORE_PERMISSIONS", `Sandbox state file ${file} must be mode 0600.`);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const writePrivate = async (file, bytes) => {
|
|
118
|
+
await mkdir(path.dirname(file), { recursive: true, mode: 0o700 });
|
|
119
|
+
const temporary = `${file}.${randomUUID()}.tmp`;
|
|
120
|
+
await writeFile(temporary, bytes, { mode: 0o600 });
|
|
121
|
+
await rename(temporary, file);
|
|
122
|
+
await assertPrivateFile(file);
|
|
123
|
+
};
|
|
124
|
+
const LOCK_WAIT_MS = 5_000;
|
|
125
|
+
const MALFORMED_LOCK_MS = 30_000;
|
|
126
|
+
const chains = new Map();
|
|
127
|
+
const withInProcessLock = async (key, operation) => {
|
|
128
|
+
const previous = chains.get(key) ?? Promise.resolve();
|
|
129
|
+
let release;
|
|
130
|
+
const gate = new Promise(resolve => {
|
|
131
|
+
release = resolve;
|
|
132
|
+
});
|
|
133
|
+
const tail = previous.then(() => gate);
|
|
134
|
+
chains.set(key, tail);
|
|
135
|
+
try {
|
|
136
|
+
await previous;
|
|
137
|
+
return await operation();
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
release();
|
|
141
|
+
if (chains.get(key) === tail)
|
|
142
|
+
chains.delete(key);
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
const processAlive = (pid) => {
|
|
146
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
147
|
+
return false;
|
|
148
|
+
try {
|
|
149
|
+
process.kill(pid, 0);
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
return error.code !== "ESRCH";
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
const readLock = async (lockPath) => {
|
|
157
|
+
let handle;
|
|
158
|
+
try {
|
|
159
|
+
handle = await open(lockPath, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
160
|
+
const info = await handle.stat();
|
|
161
|
+
const body = await handle.readFile({ encoding: "utf8" });
|
|
162
|
+
let record;
|
|
163
|
+
try {
|
|
164
|
+
const parsed = JSON.parse(body);
|
|
165
|
+
if (typeof parsed.ownerId === "string" &&
|
|
166
|
+
parsed.ownerId.length > 0 &&
|
|
167
|
+
typeof parsed.pid === "number" &&
|
|
168
|
+
Number.isInteger(parsed.pid) &&
|
|
169
|
+
typeof parsed.createdAt === "number") {
|
|
170
|
+
record = { ownerId: parsed.ownerId, pid: parsed.pid, createdAt: parsed.createdAt };
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
record = undefined;
|
|
175
|
+
}
|
|
176
|
+
return { record, modifiedAt: info.mtimeMs };
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
if (error.code === "ENOENT")
|
|
180
|
+
return undefined;
|
|
181
|
+
throw error;
|
|
182
|
+
}
|
|
183
|
+
finally {
|
|
184
|
+
await handle?.close();
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
const stealLock = async (lockPath, current) => {
|
|
188
|
+
const recovery = `${lockPath}.${randomUUID()}.recovery`;
|
|
189
|
+
try {
|
|
190
|
+
await link(lockPath, recovery);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
const code = error.code;
|
|
194
|
+
if (code === "ENOENT")
|
|
195
|
+
return true;
|
|
196
|
+
if (code === "EEXIST")
|
|
197
|
+
return false;
|
|
198
|
+
throw error;
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
const [lockInfo, recoveryInfo] = await Promise.all([lstat(lockPath), lstat(recovery)]);
|
|
202
|
+
if (lockInfo.dev !== recoveryInfo.dev || lockInfo.ino !== recoveryInfo.ino)
|
|
203
|
+
return false;
|
|
204
|
+
const verified = await readLock(lockPath);
|
|
205
|
+
if (current.record?.ownerId !== verified?.record?.ownerId)
|
|
206
|
+
return false;
|
|
207
|
+
if (!current.record && verified?.record)
|
|
208
|
+
return false;
|
|
209
|
+
await unlink(lockPath);
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
if (error.code === "ENOENT")
|
|
214
|
+
return true;
|
|
215
|
+
throw error;
|
|
216
|
+
}
|
|
217
|
+
finally {
|
|
218
|
+
await unlink(recovery).catch((error) => {
|
|
219
|
+
if (error.code !== "ENOENT")
|
|
220
|
+
throw error;
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
};
|
|
224
|
+
const acquireFileLock = async (lockPath) => {
|
|
225
|
+
const ownerId = randomUUID();
|
|
226
|
+
const startedAt = Date.now();
|
|
227
|
+
const body = JSON.stringify({ ownerId, pid: process.pid, createdAt: startedAt });
|
|
228
|
+
await mkdir(path.dirname(lockPath), { recursive: true, mode: 0o700 });
|
|
229
|
+
while (Date.now() - startedAt <= LOCK_WAIT_MS) {
|
|
230
|
+
let handle;
|
|
231
|
+
try {
|
|
232
|
+
handle = await open(lockPath, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);
|
|
233
|
+
await handle.writeFile(body);
|
|
234
|
+
await handle.close();
|
|
235
|
+
handle = undefined;
|
|
236
|
+
return async () => {
|
|
237
|
+
const current = await readLock(lockPath);
|
|
238
|
+
if (current?.record?.ownerId !== ownerId)
|
|
239
|
+
return;
|
|
240
|
+
await unlink(lockPath).catch((error) => {
|
|
241
|
+
if (error.code !== "ENOENT")
|
|
242
|
+
throw error;
|
|
243
|
+
});
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
if (error.code !== "EEXIST")
|
|
248
|
+
throw error;
|
|
249
|
+
}
|
|
250
|
+
finally {
|
|
251
|
+
await handle?.close();
|
|
252
|
+
}
|
|
253
|
+
const current = await readLock(lockPath);
|
|
254
|
+
if (!current)
|
|
255
|
+
continue;
|
|
256
|
+
const deadOwner = current.record ? !processAlive(current.record.pid) : false;
|
|
257
|
+
const malformedStale = !current.record && Date.now() - current.modifiedAt >= MALFORMED_LOCK_MS;
|
|
258
|
+
if ((deadOwner || malformedStale) && await stealLock(lockPath, current))
|
|
259
|
+
continue;
|
|
260
|
+
if (Date.now() - startedAt >= LOCK_WAIT_MS)
|
|
261
|
+
break;
|
|
262
|
+
await new Promise(resolve => setTimeout(resolve, 25));
|
|
263
|
+
}
|
|
264
|
+
throw new ConflictError("Timed out acquiring the sandbox file lock.");
|
|
265
|
+
};
|
|
266
|
+
const withFileLock = (lockPath, operation) => withInProcessLock(lockPath, async () => {
|
|
267
|
+
const release = await acquireFileLock(lockPath);
|
|
268
|
+
try {
|
|
269
|
+
return await operation();
|
|
270
|
+
}
|
|
271
|
+
finally {
|
|
272
|
+
await release();
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
const readLeaseFile = async (file) => {
|
|
276
|
+
try {
|
|
277
|
+
await assertPrivateFile(file);
|
|
278
|
+
return JSON.parse(await readFile(file, "utf8"));
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
if (error.code === "ENOENT")
|
|
282
|
+
return undefined;
|
|
283
|
+
throw error;
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
export const createFileSandboxLeaseStore = (directory) => {
|
|
287
|
+
const fileFor = (runId, scopeKey) => scopeFile(directory, scopeKey, `${assertStoreRunId(runId)}.json`);
|
|
288
|
+
return {
|
|
289
|
+
async load(runId, scopeKey) {
|
|
290
|
+
try {
|
|
291
|
+
const file = fileFor(runId, scopeKey);
|
|
292
|
+
await assertPrivateFile(file);
|
|
293
|
+
const lease = JSON.parse(await readFile(file, "utf8"));
|
|
294
|
+
assertLeaseIdentity(lease, runId, scopeKey);
|
|
295
|
+
return lease;
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
if (error.code === "ENOENT")
|
|
299
|
+
return undefined;
|
|
300
|
+
throw error;
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
async compareAndSwap(lease, expectedRevision) {
|
|
304
|
+
const file = fileFor(lease.runId, lease.scopeKey);
|
|
305
|
+
return withFileLock(`${file}.lock`, async () => {
|
|
306
|
+
const current = await readLeaseFile(file);
|
|
307
|
+
if (current && (current.runId !== lease.runId || current.scopeKey !== lease.scopeKey)) {
|
|
308
|
+
throw new SandboxError("STORE_INVALID", "Sandbox lease identity does not match the requested run.");
|
|
309
|
+
}
|
|
310
|
+
if (current?.revision !== expectedRevision) {
|
|
311
|
+
throw new ConflictError(`Sandbox lease for run "${lease.runId}" changed before it could be saved.`);
|
|
312
|
+
}
|
|
313
|
+
assertLeaseIdentity(lease, lease.runId, lease.scopeKey);
|
|
314
|
+
await writePrivate(file, JSON.stringify(lease));
|
|
315
|
+
return lease;
|
|
316
|
+
});
|
|
317
|
+
},
|
|
318
|
+
async list() {
|
|
319
|
+
const { readdir } = await import("node:fs/promises");
|
|
320
|
+
const leases = [];
|
|
321
|
+
let scopes = [];
|
|
322
|
+
try {
|
|
323
|
+
scopes = await readdir(directory);
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
if (error.code === "ENOENT")
|
|
327
|
+
return [];
|
|
328
|
+
throw error;
|
|
329
|
+
}
|
|
330
|
+
for (const scope of scopes) {
|
|
331
|
+
const files = await readdir(path.join(directory, scope));
|
|
332
|
+
for (const file of files) {
|
|
333
|
+
if (!file.endsWith(".json"))
|
|
334
|
+
continue;
|
|
335
|
+
const full = path.join(directory, scope, file);
|
|
336
|
+
await assertPrivateFile(full);
|
|
337
|
+
const lease = JSON.parse(await readFile(full, "utf8"));
|
|
338
|
+
if (`${encodeURIComponent(lease.runId)}.json` !== file) {
|
|
339
|
+
throw new SandboxError("STORE_INVALID", "Sandbox lease file name does not match the stored run id.");
|
|
340
|
+
}
|
|
341
|
+
leases.push(lease);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return leases;
|
|
345
|
+
}
|
|
346
|
+
};
|
|
347
|
+
};
|
|
348
|
+
export const createFileSandboxSnapshotStore = (directory) => {
|
|
349
|
+
const base = (runId, scopeKey) => scopeFile(directory, scopeKey, assertStoreRunId(runId));
|
|
350
|
+
const readSnapshot = async (stem, runId, scopeKey) => {
|
|
351
|
+
try {
|
|
352
|
+
await assertPrivateFile(`${stem}.json`);
|
|
353
|
+
await assertPrivateFile(`${stem}.tar`);
|
|
354
|
+
}
|
|
355
|
+
catch (error) {
|
|
356
|
+
if (error.code === "ENOENT")
|
|
357
|
+
return undefined;
|
|
358
|
+
throw error;
|
|
359
|
+
}
|
|
360
|
+
const meta = JSON.parse(await readFile(`${stem}.json`, "utf8"));
|
|
361
|
+
const workspaceTar = new Uint8Array(await readFile(`${stem}.tar`));
|
|
362
|
+
if (meta.tarSha256) {
|
|
363
|
+
const actual = createHash("sha256").update(workspaceTar).digest("hex");
|
|
364
|
+
if (actual !== meta.tarSha256) {
|
|
365
|
+
throw new SandboxError("SNAPSHOT_INVALID", "Sandbox snapshot bytes do not match the stored hash.");
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
const { tarSha256: _hash, ...snapshot } = meta;
|
|
369
|
+
assertSnapshotIdentity(snapshot, runId, scopeKey);
|
|
370
|
+
return { ...snapshot, workspaceTar };
|
|
371
|
+
};
|
|
372
|
+
return {
|
|
373
|
+
async load(runId, scopeKey) {
|
|
374
|
+
const stem = base(runId, scopeKey);
|
|
375
|
+
return withFileLock(`${stem}.lock`, () => readSnapshot(stem, runId, scopeKey));
|
|
376
|
+
},
|
|
377
|
+
async save(snapshot) {
|
|
378
|
+
assertSnapshotIdentity(snapshot, snapshot.runId, snapshot.scopeKey);
|
|
379
|
+
const stem = base(snapshot.runId, snapshot.scopeKey);
|
|
380
|
+
await withFileLock(`${stem}.lock`, async () => {
|
|
381
|
+
const { workspaceTar, ...meta } = snapshot;
|
|
382
|
+
const tarSha256 = createHash("sha256").update(workspaceTar).digest("hex");
|
|
383
|
+
await writePrivate(`${stem}.tar`, workspaceTar);
|
|
384
|
+
await writePrivate(`${stem}.json`, JSON.stringify({ ...meta, tarSha256 }));
|
|
385
|
+
});
|
|
386
|
+
},
|
|
387
|
+
async remove(runId, scopeKey) {
|
|
388
|
+
const stem = base(runId, scopeKey);
|
|
389
|
+
await withFileLock(`${stem}.lock`, async () => {
|
|
390
|
+
await rm(`${stem}.json`, { force: true });
|
|
391
|
+
await rm(`${stem}.tar`, { force: true });
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
};
|
|
395
|
+
};
|
|
396
|
+
//# sourceMappingURL=stores.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stores.js","sourceRoot":"","sources":["../src/stores.ts"],"names":[],"mappings":"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"}
|
package/dist/stream.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const encodeDockerStreamFrame: (type: 1 | 2, payload: Uint8Array) => Uint8Array;
|
|
2
|
+
export declare const readMultiplexedStream: (chunks: AsyncIterable<Uint8Array>, maxBytes: number) => Promise<{
|
|
3
|
+
stdout: Uint8Array;
|
|
4
|
+
stderr: Uint8Array;
|
|
5
|
+
truncated: boolean;
|
|
6
|
+
}>;
|
|
7
|
+
export declare const decodeCappedText: (bytes: Uint8Array, maxBytes: number) => {
|
|
8
|
+
text: string;
|
|
9
|
+
truncated: boolean;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,uBAAuB,SAAU,CAAC,GAAG,CAAC,WAAW,UAAU,KAAG,UAM1E,CAAC;AAEF,eAAO,MAAM,qBAAqB,WACxB,aAAa,CAAC,UAAU,CAAC,YACvB,MAAM,KACf,OAAO,CAAC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CA+CxE,CAAC;AAEF,eAAO,MAAM,gBAAgB,UAAW,UAAU,YAAY,MAAM;IAGhE,IAAI;IACJ,SAAS;CAEZ,CAAC"}
|
package/dist/stream.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
const concat = (left, right) => {
|
|
2
|
+
const out = new Uint8Array(left.length + right.length);
|
|
3
|
+
out.set(left);
|
|
4
|
+
out.set(right, left.length);
|
|
5
|
+
return out;
|
|
6
|
+
};
|
|
7
|
+
export const encodeDockerStreamFrame = (type, payload) => {
|
|
8
|
+
const frame = new Uint8Array(8 + payload.length);
|
|
9
|
+
frame[0] = type;
|
|
10
|
+
new DataView(frame.buffer).setUint32(4, payload.byteLength);
|
|
11
|
+
frame.set(payload, 8);
|
|
12
|
+
return frame;
|
|
13
|
+
};
|
|
14
|
+
export const readMultiplexedStream = async (chunks, maxBytes) => {
|
|
15
|
+
if (!Number.isSafeInteger(maxBytes) || maxBytes < 1) {
|
|
16
|
+
throw new Error("Docker output cap must be a positive safe integer.");
|
|
17
|
+
}
|
|
18
|
+
const stdout = [];
|
|
19
|
+
const stderr = [];
|
|
20
|
+
let stdoutLen = 0;
|
|
21
|
+
let stderrLen = 0;
|
|
22
|
+
let pending = new Uint8Array();
|
|
23
|
+
let truncated = false;
|
|
24
|
+
const append = (target, used, payload) => {
|
|
25
|
+
const room = maxBytes - used;
|
|
26
|
+
if (room <= 0) {
|
|
27
|
+
truncated = true;
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
30
|
+
const slice = payload.length > room ? payload.subarray(0, room) : payload;
|
|
31
|
+
if (slice.length < payload.length)
|
|
32
|
+
truncated = true;
|
|
33
|
+
if (slice.length)
|
|
34
|
+
target.push(slice);
|
|
35
|
+
return slice.length;
|
|
36
|
+
};
|
|
37
|
+
for await (const chunk of chunks) {
|
|
38
|
+
pending = concat(pending, chunk);
|
|
39
|
+
while (pending.length >= 8) {
|
|
40
|
+
const size = new DataView(pending.buffer, pending.byteOffset, pending.byteLength).getUint32(4);
|
|
41
|
+
if (!Number.isSafeInteger(size) || pending.length < 8 + size)
|
|
42
|
+
break;
|
|
43
|
+
const type = pending[0];
|
|
44
|
+
const payload = pending.subarray(8, 8 + size);
|
|
45
|
+
pending = pending.subarray(8 + size);
|
|
46
|
+
if (type === 1) {
|
|
47
|
+
if (stdoutLen >= maxBytes)
|
|
48
|
+
truncated = true;
|
|
49
|
+
else
|
|
50
|
+
stdoutLen += append(stdout, stdoutLen, payload);
|
|
51
|
+
}
|
|
52
|
+
else if (type === 2) {
|
|
53
|
+
if (stderrLen >= maxBytes)
|
|
54
|
+
truncated = true;
|
|
55
|
+
else
|
|
56
|
+
stderrLen += append(stderr, stderrLen, payload);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (stdoutLen >= maxBytes && stderrLen >= maxBytes)
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
stdout: stdout.reduce(concat, new Uint8Array()),
|
|
64
|
+
stderr: stderr.reduce(concat, new Uint8Array()),
|
|
65
|
+
truncated
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
export const decodeCappedText = (bytes, maxBytes) => {
|
|
69
|
+
const slice = bytes.length > maxBytes ? bytes.subarray(0, maxBytes) : bytes;
|
|
70
|
+
return {
|
|
71
|
+
text: new TextDecoder("utf-8", { fatal: false }).decode(slice),
|
|
72
|
+
truncated: bytes.length > maxBytes
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"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"}
|
package/dist/tar.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface TarEntry {
|
|
2
|
+
path: string;
|
|
3
|
+
type: "file" | "directory" | "symlink";
|
|
4
|
+
content?: Uint8Array;
|
|
5
|
+
linkTarget?: string;
|
|
6
|
+
mode?: number;
|
|
7
|
+
uid?: number;
|
|
8
|
+
gid?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare const packTar: (entries: readonly TarEntry[]) => Uint8Array;
|
|
11
|
+
export declare const unpackTar: (bytes: Uint8Array) => TarEntry[];
|
|
12
|
+
export declare const stripTarRoot: (entries: readonly TarEntry[], rootName: string) => TarEntry[];
|
|
13
|
+
//# sourceMappingURL=tar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tar.d.ts","sourceRoot":"","sources":["../src/tar.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;IACvC,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA+FD,eAAO,MAAM,OAAO,YAAa,SAAS,QAAQ,EAAE,KAAG,UAoCtD,CAAC;AAiDF,eAAO,MAAM,SAAS,UAAW,UAAU,KAAG,QAAQ,EA2CrD,CAAC;AAEF,eAAO,MAAM,YAAY,YAAa,SAAS,QAAQ,EAAE,YAAY,MAAM,KAAG,QAAQ,EAMlF,CAAC"}
|