@torkbot/sandbox 0.1.0-pre.0 → 0.1.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 +239 -2
- package/dist/artifacts.d.ts +12 -0
- package/dist/artifacts.d.ts.map +1 -0
- package/dist/artifacts.js +77 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +51 -0
- package/dist/cli.js.map +1 -0
- package/dist/control-codec.d.ts +4 -0
- package/dist/control-codec.d.ts.map +1 -0
- package/dist/control-codec.js +88 -0
- package/dist/control-codec.js.map +1 -0
- package/dist/control.d.ts +24 -0
- package/dist/control.d.ts.map +1 -0
- package/dist/control.js +192 -0
- package/dist/control.js.map +1 -0
- package/dist/host-filesystem-tools.d.ts +3 -0
- package/dist/host-filesystem-tools.d.ts.map +1 -0
- package/dist/host-filesystem-tools.js +330 -0
- package/dist/host-filesystem-tools.js.map +1 -0
- package/dist/host-process.d.ts +21 -0
- package/dist/host-process.d.ts.map +1 -0
- package/dist/host-process.js +607 -0
- package/dist/host-process.js.map +1 -0
- package/dist/index.d.ts +270 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +452 -0
- package/dist/index.js.map +1 -0
- package/dist/spawn-options.d.ts +44 -0
- package/dist/spawn-options.d.ts.map +1 -0
- package/dist/spawn-options.js +2 -0
- package/dist/spawn-options.js.map +1 -0
- package/dist/vfs.d.ts +3 -0
- package/dist/vfs.d.ts.map +1 -0
- package/dist/vfs.js +8 -0
- package/dist/vfs.js.map +1 -0
- package/package.json +27 -5
package/dist/index.js
ADDED
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
import { HostControlTransport } from "./control.js";
|
|
2
|
+
import { HostProcessSandboxVm } from "./host-process.js";
|
|
3
|
+
import { createSandboxHostFileSystemTools } from "./host-filesystem-tools.js";
|
|
4
|
+
import { isSandboxWritableFileSystem } from "./vfs.js";
|
|
5
|
+
export { HostControlTransport } from "./control.js";
|
|
6
|
+
export function projectKernel(options = {}) {
|
|
7
|
+
return {
|
|
8
|
+
kind: "project-kernel",
|
|
9
|
+
...options,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function projectInit() {
|
|
13
|
+
return {
|
|
14
|
+
kind: "project-init",
|
|
15
|
+
crate: "sandbox-init",
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function prebuiltRootfs(path, options) {
|
|
19
|
+
return {
|
|
20
|
+
kind: "prebuilt-rootfs",
|
|
21
|
+
path,
|
|
22
|
+
readonly: options.readonly ?? true,
|
|
23
|
+
format: options.format,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export function scratchFs() {
|
|
27
|
+
return {
|
|
28
|
+
kind: "scratch-fs",
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function linuxOverlayFs(input) {
|
|
32
|
+
return {
|
|
33
|
+
kind: "linux-overlay-fs",
|
|
34
|
+
lower: input.lower,
|
|
35
|
+
upper: input.upper,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function virtualFsMount(path, fileSystem) {
|
|
39
|
+
return {
|
|
40
|
+
kind: "virtual-fs",
|
|
41
|
+
path,
|
|
42
|
+
fileSystem,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export function mount(path, fileSystem) {
|
|
46
|
+
return virtualFsMount(path, fileSystem);
|
|
47
|
+
}
|
|
48
|
+
export function binding(path, fileSystem) {
|
|
49
|
+
return {
|
|
50
|
+
kind: "filesystem-binding",
|
|
51
|
+
path,
|
|
52
|
+
fileSystem,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export function acceptTcp(input) {
|
|
56
|
+
return {
|
|
57
|
+
action: "accept",
|
|
58
|
+
protocol: "tcp",
|
|
59
|
+
cidr: input.cidr,
|
|
60
|
+
ports: input.ports,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export function acceptUdp(input) {
|
|
64
|
+
return {
|
|
65
|
+
action: "accept",
|
|
66
|
+
protocol: "udp",
|
|
67
|
+
cidr: input.cidr,
|
|
68
|
+
ports: input.ports,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
export function acceptPublicInternet(input = {}) {
|
|
72
|
+
return {
|
|
73
|
+
action: "accept",
|
|
74
|
+
scope: "public-internet",
|
|
75
|
+
ports: input.ports,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export async function spawnSandbox(options) {
|
|
79
|
+
validateSandboxOptions(options);
|
|
80
|
+
const hostOptions = toHostSpawnOptions(options, []);
|
|
81
|
+
const hostVm = await HostProcessSandboxVm.spawn(options, hostOptions, new Map());
|
|
82
|
+
return new HostBackedSandboxVm(hostVm, options);
|
|
83
|
+
}
|
|
84
|
+
export function createSandbox(options) {
|
|
85
|
+
validateSandboxOptions(options);
|
|
86
|
+
return new ConfiguredSandboxBuilder(options);
|
|
87
|
+
}
|
|
88
|
+
class ConfiguredSandboxBuilder {
|
|
89
|
+
http;
|
|
90
|
+
#options;
|
|
91
|
+
#requestHeaderHooks = new Set();
|
|
92
|
+
#nextRequestHeaderHookId = 1;
|
|
93
|
+
#runStarted = false;
|
|
94
|
+
#vm = null;
|
|
95
|
+
#closed = false;
|
|
96
|
+
constructor(options) {
|
|
97
|
+
this.#options = options;
|
|
98
|
+
this.http = {
|
|
99
|
+
onRequest: (selector, hook) => {
|
|
100
|
+
this.#assertOpen();
|
|
101
|
+
if (this.#runStarted) {
|
|
102
|
+
throw new Error("sandbox has already been run");
|
|
103
|
+
}
|
|
104
|
+
const registration = {
|
|
105
|
+
id: `http-request-headers-${this.#nextRequestHeaderHookId++}`,
|
|
106
|
+
selector,
|
|
107
|
+
hook,
|
|
108
|
+
active: true,
|
|
109
|
+
};
|
|
110
|
+
this.#requestHeaderHooks.add(registration);
|
|
111
|
+
return new ConfiguredSandboxHttpHook(this, registration);
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
async run() {
|
|
116
|
+
this.#assertOpen();
|
|
117
|
+
if (this.#runStarted) {
|
|
118
|
+
throw new Error("sandbox has already been run");
|
|
119
|
+
}
|
|
120
|
+
this.#runStarted = true;
|
|
121
|
+
const registrations = Array.from(this.#requestHeaderHooks);
|
|
122
|
+
const hostOptions = toHostSpawnOptions(this.#options, registrations);
|
|
123
|
+
const hostVm = await HostProcessSandboxVm.spawn(this.#options, hostOptions, new Map(registrations.map((registration) => [registration.id, registration])));
|
|
124
|
+
this.#vm = new HostBackedSandboxVm(hostVm, this.#options);
|
|
125
|
+
return this.#vm;
|
|
126
|
+
}
|
|
127
|
+
async [Symbol.asyncDispose]() {
|
|
128
|
+
if (this.#closed) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
this.#closed = true;
|
|
132
|
+
await this.#vm?.close();
|
|
133
|
+
this.#requestHeaderHooks.clear();
|
|
134
|
+
}
|
|
135
|
+
async removeHook(registration) {
|
|
136
|
+
registration.active = false;
|
|
137
|
+
this.#requestHeaderHooks.delete(registration);
|
|
138
|
+
}
|
|
139
|
+
#assertOpen() {
|
|
140
|
+
if (this.#closed) {
|
|
141
|
+
throw new Error("sandbox is closed");
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
class ConfiguredSandboxHttpHook {
|
|
146
|
+
#sandbox;
|
|
147
|
+
#registration;
|
|
148
|
+
#disposed = false;
|
|
149
|
+
constructor(sandbox, registration) {
|
|
150
|
+
this.#sandbox = sandbox;
|
|
151
|
+
this.#registration = registration;
|
|
152
|
+
}
|
|
153
|
+
async [Symbol.asyncDispose]() {
|
|
154
|
+
if (this.#disposed) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
this.#disposed = true;
|
|
158
|
+
await this.#sandbox.removeHook(this.#registration);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
class HostBackedSandboxVm {
|
|
162
|
+
mounts;
|
|
163
|
+
control;
|
|
164
|
+
diagnostics;
|
|
165
|
+
#hostVm;
|
|
166
|
+
#closed = false;
|
|
167
|
+
constructor(hostVm, options) {
|
|
168
|
+
this.#hostVm = hostVm;
|
|
169
|
+
this.mounts = new ConfiguredSandboxMounts(options.mounts ?? [], options.bindings ?? []);
|
|
170
|
+
this.control = new HostControlTransport({
|
|
171
|
+
connected: hostVm.hasControlSocket,
|
|
172
|
+
channel: hostVm,
|
|
173
|
+
});
|
|
174
|
+
if (hostVm.terminateHostForTest !== undefined) {
|
|
175
|
+
this.diagnostics = {
|
|
176
|
+
terminateHostForTest: () => hostVm.terminateHostForTest?.() ?? Promise.resolve(),
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
async close() {
|
|
181
|
+
if (this.#closed) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
this.#closed = true;
|
|
185
|
+
await this.control.close();
|
|
186
|
+
await this.#hostVm.close();
|
|
187
|
+
}
|
|
188
|
+
async [Symbol.asyncDispose]() {
|
|
189
|
+
await this.close();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
class ConfiguredSandboxMounts {
|
|
193
|
+
#mounts = new Map();
|
|
194
|
+
#virtualMounts = new Map();
|
|
195
|
+
#hostTools = new Map();
|
|
196
|
+
constructor(mounts, bindings) {
|
|
197
|
+
for (const mount of mounts) {
|
|
198
|
+
this.#mounts.set(mount.path, mount.fileSystem);
|
|
199
|
+
this.#virtualMounts.set(mount.path, mount.fileSystem);
|
|
200
|
+
this.#hostTools.set(mount.path, createSandboxHostFileSystemTools(mount.fileSystem));
|
|
201
|
+
}
|
|
202
|
+
for (const binding of bindings) {
|
|
203
|
+
this.#hostTools.set(binding.path, createSandboxHostFileSystemTools(binding.fileSystem));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
get(path) {
|
|
207
|
+
const mount = this.#mounts.get(path);
|
|
208
|
+
if (mount === undefined) {
|
|
209
|
+
throw new Error(`sandbox mount not found: ${path}`);
|
|
210
|
+
}
|
|
211
|
+
return mount;
|
|
212
|
+
}
|
|
213
|
+
virtualFs(path) {
|
|
214
|
+
const mount = this.#virtualMounts.get(path);
|
|
215
|
+
if (mount === undefined) {
|
|
216
|
+
throw new Error(`virtualFs mount not found: ${path}`);
|
|
217
|
+
}
|
|
218
|
+
return mount;
|
|
219
|
+
}
|
|
220
|
+
host(path) {
|
|
221
|
+
const tools = this.#hostTools.get(path);
|
|
222
|
+
if (tools === undefined) {
|
|
223
|
+
throw new Error(`host filesystem tools not found: ${path}`);
|
|
224
|
+
}
|
|
225
|
+
return tools;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
function toHostSpawnOptions(options, requestHeaderHooks) {
|
|
229
|
+
const rootfs = lowerNativeRootfs(options.rootfs);
|
|
230
|
+
if ((requestHeaderHooks.length > 0 || options.network?.http !== undefined)
|
|
231
|
+
&& options.network?.outbound === undefined) {
|
|
232
|
+
throw new Error("invalid spawnSandbox options: network.outbound is required when HTTP interception is configured");
|
|
233
|
+
}
|
|
234
|
+
const network = options.network === undefined && requestHeaderHooks.length === 0
|
|
235
|
+
? undefined
|
|
236
|
+
: {
|
|
237
|
+
outbound: options.network?.outbound,
|
|
238
|
+
http: requestHeaderHooks.length === 0
|
|
239
|
+
&& options.network?.http?.certificateAuthority === undefined
|
|
240
|
+
? undefined
|
|
241
|
+
: {
|
|
242
|
+
caCertificatePem: options.network?.http?.certificateAuthority?.certificatePem,
|
|
243
|
+
caPrivateKeyPem: options.network?.http?.certificateAuthority?.privateKeyPem,
|
|
244
|
+
requestHeaderHooks: requestHeaderHooks.map((hook) => ({
|
|
245
|
+
id: hook.id,
|
|
246
|
+
origin: hook.selector.origin,
|
|
247
|
+
})),
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
return {
|
|
251
|
+
name: options.name,
|
|
252
|
+
cpu: options.cpu,
|
|
253
|
+
memory: options.memory,
|
|
254
|
+
kernel: {
|
|
255
|
+
format: options.kernel.format,
|
|
256
|
+
},
|
|
257
|
+
init: {
|
|
258
|
+
crateName: options.init.crate,
|
|
259
|
+
},
|
|
260
|
+
rootfs: {
|
|
261
|
+
path: rootfs.path,
|
|
262
|
+
readonly: rootfs.readonly,
|
|
263
|
+
format: rootfs.format,
|
|
264
|
+
},
|
|
265
|
+
rootfsOverlay: options.rootfs.kind === "linux-overlay-fs"
|
|
266
|
+
? { mode: "writable" }
|
|
267
|
+
: undefined,
|
|
268
|
+
mounts: options.mounts?.map((mount) => {
|
|
269
|
+
return {
|
|
270
|
+
kind: mount.kind,
|
|
271
|
+
path: mount.path,
|
|
272
|
+
writable: isSandboxWritableFileSystem(mount.fileSystem),
|
|
273
|
+
};
|
|
274
|
+
}),
|
|
275
|
+
network,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
function lowerNativeRootfs(rootfs) {
|
|
279
|
+
if (rootfs.kind === "prebuilt-rootfs") {
|
|
280
|
+
return rootfs;
|
|
281
|
+
}
|
|
282
|
+
if (rootfs.lower.kind !== "prebuilt-rootfs") {
|
|
283
|
+
throw new Error(`rootfs ${rootfs.kind} lower ${rootfs.lower.kind} is not implemented yet`);
|
|
284
|
+
}
|
|
285
|
+
if (rootfs.upper.kind !== "scratch-fs") {
|
|
286
|
+
throw new Error(`rootfs ${rootfs.kind} upper ${rootfs.upper.kind} is not implemented yet`);
|
|
287
|
+
}
|
|
288
|
+
return {
|
|
289
|
+
...rootfs.lower,
|
|
290
|
+
readonly: true,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
function validateSandboxOptions(options) {
|
|
294
|
+
if (options.cpu?.vcpus !== undefined && (!Number.isInteger(options.cpu.vcpus) || options.cpu.vcpus <= 0)) {
|
|
295
|
+
throw new Error("invalid spawnSandbox options: cpu.vcpus must be greater than zero");
|
|
296
|
+
}
|
|
297
|
+
if (options.cpu?.vcpus !== undefined && options.cpu.vcpus > 255) {
|
|
298
|
+
throw new Error("invalid spawnSandbox options: cpu.vcpus must be less than or equal to 255");
|
|
299
|
+
}
|
|
300
|
+
if (options.memory?.mib !== undefined && (!Number.isInteger(options.memory.mib) || options.memory.mib <= 0)) {
|
|
301
|
+
throw new Error("invalid spawnSandbox options: memory.mib must be greater than zero");
|
|
302
|
+
}
|
|
303
|
+
if (options.init.crate !== "sandbox-init") {
|
|
304
|
+
throw new Error(`invalid spawnSandbox options: unsupported init crate: ${options.init.crate}`);
|
|
305
|
+
}
|
|
306
|
+
validateRootfsConfig(options.rootfs, "rootfs");
|
|
307
|
+
const mountPaths = new Set();
|
|
308
|
+
for (const mount of options.mounts ?? []) {
|
|
309
|
+
validateGuestPath(mount.path, "mount.path");
|
|
310
|
+
if (mountPaths.has(mount.path)) {
|
|
311
|
+
throw new Error(`invalid spawnSandbox options: duplicate mount path: ${mount.path}`);
|
|
312
|
+
}
|
|
313
|
+
mountPaths.add(mount.path);
|
|
314
|
+
}
|
|
315
|
+
const bindingPaths = new Set();
|
|
316
|
+
for (const binding of options.bindings ?? []) {
|
|
317
|
+
validateGuestPath(binding.path, "binding.path");
|
|
318
|
+
if (mountPaths.has(binding.path)) {
|
|
319
|
+
throw new Error(`invalid spawnSandbox options: binding path conflicts with mount path: ${binding.path}`);
|
|
320
|
+
}
|
|
321
|
+
if (bindingPaths.has(binding.path)) {
|
|
322
|
+
throw new Error(`invalid spawnSandbox options: duplicate binding path: ${binding.path}`);
|
|
323
|
+
}
|
|
324
|
+
bindingPaths.add(binding.path);
|
|
325
|
+
}
|
|
326
|
+
if (options.network?.outbound?.policy !== undefined && options.network.outbound.policy !== "deny") {
|
|
327
|
+
throw new Error("invalid spawnSandbox options: network.outbound.policy must be deny");
|
|
328
|
+
}
|
|
329
|
+
for (const rule of options.network?.outbound?.rules ?? []) {
|
|
330
|
+
if ("cidr" in rule) {
|
|
331
|
+
validateCidr(rule.cidr);
|
|
332
|
+
}
|
|
333
|
+
validateOutboundPorts(rule.ports);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
function validateRootfsConfig(rootfs, field) {
|
|
337
|
+
if (rootfs.kind === "prebuilt-rootfs") {
|
|
338
|
+
if (rootfs.path.length === 0) {
|
|
339
|
+
throw new Error(`invalid spawnSandbox options: ${field}.path must not be empty`);
|
|
340
|
+
}
|
|
341
|
+
if (rootfs.format === "directory") {
|
|
342
|
+
const prefix = field === "rootfs" ? "" : `${field} `;
|
|
343
|
+
throw new Error(`invalid spawnSandbox options: ${prefix}directory rootfs is not supported for sandboxed VM launch; use an EROFS rootfs`);
|
|
344
|
+
}
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
if (rootfs.kind === "linux-overlay-fs") {
|
|
348
|
+
validateRootfsConfig(rootfs.lower, `${field}.lower`);
|
|
349
|
+
validateRootfsConfig(rootfs.upper, `${field}.upper`);
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
if (rootfs.kind === "scratch-fs") {
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
throw new Error(`invalid spawnSandbox options: unsupported ${field} kind`);
|
|
356
|
+
}
|
|
357
|
+
function validateGuestPath(path, field) {
|
|
358
|
+
if (!path.startsWith("/")) {
|
|
359
|
+
throw new Error(`invalid spawnSandbox options: ${field} must be absolute`);
|
|
360
|
+
}
|
|
361
|
+
if (path === "/") {
|
|
362
|
+
throw new Error(`invalid spawnSandbox options: ${field} must not be root`);
|
|
363
|
+
}
|
|
364
|
+
if (path.includes("\0")) {
|
|
365
|
+
throw new Error(`invalid spawnSandbox options: ${field} must not contain NUL bytes`);
|
|
366
|
+
}
|
|
367
|
+
if (path.split("/").some((component) => component === "." || component === "..")) {
|
|
368
|
+
throw new Error(`invalid spawnSandbox options: ${field} must not contain '.' or '..' components`);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
function validateOutboundPorts(ports) {
|
|
372
|
+
for (const port of ports ?? []) {
|
|
373
|
+
if (!Number.isInteger(port) || port < 1 || port > 65_535) {
|
|
374
|
+
throw new Error(`invalid spawnSandbox options: invalid outbound network port: ${port}`);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
function validateCidr(range) {
|
|
379
|
+
const [address, prefixText, extra] = range.split("/");
|
|
380
|
+
if (address === undefined || prefixText === undefined || extra !== undefined) {
|
|
381
|
+
throw new Error(`invalid spawnSandbox options: invalid CIDR range: ${range}`);
|
|
382
|
+
}
|
|
383
|
+
const prefix = Number(prefixText);
|
|
384
|
+
if (!Number.isInteger(prefix)) {
|
|
385
|
+
throw new Error(`invalid spawnSandbox options: invalid CIDR prefix: ${range}`);
|
|
386
|
+
}
|
|
387
|
+
if (address.includes(":")) {
|
|
388
|
+
if (prefix < 0 || prefix > 128) {
|
|
389
|
+
throw new Error(`invalid spawnSandbox options: invalid CIDR prefix: ${range}`);
|
|
390
|
+
}
|
|
391
|
+
if (parseIpv6Address(address) === null) {
|
|
392
|
+
throw new Error(`invalid spawnSandbox options: invalid CIDR address: ${range}`);
|
|
393
|
+
}
|
|
394
|
+
throw new Error(`invalid spawnSandbox options: IPv6 outbound CIDR ranges are not supported yet: ${range}`);
|
|
395
|
+
}
|
|
396
|
+
if (prefix < 0 || prefix > 32) {
|
|
397
|
+
throw new Error(`invalid spawnSandbox options: invalid CIDR prefix: ${range}`);
|
|
398
|
+
}
|
|
399
|
+
if (parseIpv4Address(address) === null) {
|
|
400
|
+
throw new Error(`invalid spawnSandbox options: invalid CIDR address: ${range}`);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
function parseIpv4Address(address) {
|
|
404
|
+
const parts = address.split(".");
|
|
405
|
+
if (parts.length !== 4) {
|
|
406
|
+
return null;
|
|
407
|
+
}
|
|
408
|
+
let value = 0;
|
|
409
|
+
for (const part of parts) {
|
|
410
|
+
if (!/^\d+$/.test(part)) {
|
|
411
|
+
return null;
|
|
412
|
+
}
|
|
413
|
+
const octet = Number(part);
|
|
414
|
+
if (octet < 0 || octet > 255) {
|
|
415
|
+
return null;
|
|
416
|
+
}
|
|
417
|
+
value = ((value << 8) | octet) >>> 0;
|
|
418
|
+
}
|
|
419
|
+
return value;
|
|
420
|
+
}
|
|
421
|
+
function parseIpv6Address(address) {
|
|
422
|
+
const zoneIndex = address.indexOf("%");
|
|
423
|
+
if (zoneIndex !== -1) {
|
|
424
|
+
return null;
|
|
425
|
+
}
|
|
426
|
+
const doubleColonParts = address.split("::");
|
|
427
|
+
if (doubleColonParts.length > 2) {
|
|
428
|
+
return null;
|
|
429
|
+
}
|
|
430
|
+
const head = doubleColonParts[0] === "" ? [] : doubleColonParts[0]?.split(":") ?? [];
|
|
431
|
+
const tail = doubleColonParts.length === 1 || doubleColonParts[1] === ""
|
|
432
|
+
? []
|
|
433
|
+
: doubleColonParts[1]?.split(":") ?? [];
|
|
434
|
+
const hasCompression = doubleColonParts.length === 2;
|
|
435
|
+
const missing = 8 - head.length - tail.length;
|
|
436
|
+
if ((!hasCompression && missing !== 0) || (hasCompression && missing < 1)) {
|
|
437
|
+
return null;
|
|
438
|
+
}
|
|
439
|
+
const groups = [...head, ...Array(hasCompression ? missing : 0).fill("0"), ...tail];
|
|
440
|
+
if (groups.length !== 8) {
|
|
441
|
+
return null;
|
|
442
|
+
}
|
|
443
|
+
let value = 0n;
|
|
444
|
+
for (const group of groups) {
|
|
445
|
+
if (!/^[0-9a-fA-F]{1,4}$/.test(group)) {
|
|
446
|
+
return null;
|
|
447
|
+
}
|
|
448
|
+
value = (value << 16n) | BigInt(Number.parseInt(group, 16));
|
|
449
|
+
}
|
|
450
|
+
return value;
|
|
451
|
+
}
|
|
452
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { OutboundNetworkRule } from "./index.ts";
|
|
2
|
+
export type HostSpawnSandboxOptions = {
|
|
3
|
+
readonly name?: string;
|
|
4
|
+
readonly cpu?: {
|
|
5
|
+
readonly vcpus?: number;
|
|
6
|
+
};
|
|
7
|
+
readonly memory?: {
|
|
8
|
+
readonly mib?: number;
|
|
9
|
+
};
|
|
10
|
+
readonly kernel: {
|
|
11
|
+
readonly format?: "auto" | "raw" | "elf" | "pe-gz" | "image-gz" | "image-zstd";
|
|
12
|
+
};
|
|
13
|
+
readonly init: {
|
|
14
|
+
readonly crateName: "sandbox-init";
|
|
15
|
+
};
|
|
16
|
+
readonly rootfs: {
|
|
17
|
+
readonly path: string;
|
|
18
|
+
readonly readonly?: boolean;
|
|
19
|
+
readonly format: "directory" | "erofs";
|
|
20
|
+
};
|
|
21
|
+
readonly rootfsOverlay?: {
|
|
22
|
+
readonly mode: "writable";
|
|
23
|
+
};
|
|
24
|
+
readonly mounts?: readonly {
|
|
25
|
+
readonly kind: "virtual-fs";
|
|
26
|
+
readonly path: string;
|
|
27
|
+
readonly writable?: boolean;
|
|
28
|
+
}[];
|
|
29
|
+
readonly network?: {
|
|
30
|
+
readonly outbound?: {
|
|
31
|
+
readonly policy: "deny";
|
|
32
|
+
readonly rules: readonly OutboundNetworkRule[];
|
|
33
|
+
};
|
|
34
|
+
readonly http?: {
|
|
35
|
+
readonly caCertificatePem?: string;
|
|
36
|
+
readonly caPrivateKeyPem?: string;
|
|
37
|
+
readonly requestHeaderHooks?: readonly {
|
|
38
|
+
readonly id: string;
|
|
39
|
+
readonly origin: string;
|
|
40
|
+
}[];
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=spawn-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn-options.d.ts","sourceRoot":"","sources":["../src/spawn-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE;QACb,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,UAAU,GAAG,YAAY,CAAC;KAChF,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE;QACb,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;KACpC,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;QAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC;KACxC,CAAC;IACF,QAAQ,CAAC,aAAa,CAAC,EAAE;QACvB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;KAC3B,CAAC;IACF,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS;QACzB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;QAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;KAC7B,EAAE,CAAC;IACJ,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAClB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;YACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;SAChD,CAAC;QACF,QAAQ,CAAC,IAAI,CAAC,EAAE;YACd,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;YACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;YAClC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS;gBACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;aACzB,EAAE,CAAC;SACL,CAAC;KACH,CAAC;CACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn-options.js","sourceRoot":"","sources":["../src/spawn-options.ts"],"names":[],"mappings":""}
|
package/dist/vfs.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vfs.d.ts","sourceRoot":"","sources":["../src/vfs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,OAAO,GAClB,UAAU,IAAI,yBAAyB,CAMzC"}
|
package/dist/vfs.js
ADDED
package/dist/vfs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vfs.js","sourceRoot":"","sources":["../src/vfs.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,2BAA2B,CACzC,UAAmB;IAEnB,OAAO,OAAO,UAAU,KAAK,QAAQ;WAChC,UAAU,KAAK,IAAI;WACnB,YAAY,IAAI,UAAU;WAC1B,OAAO,IAAI,UAAU;WACrB,UAAU,IAAI,UAAU,CAAC;AAChC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,18 +1,40 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@torkbot/sandbox",
|
|
3
|
-
"version": "0.1.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"private": false,
|
|
5
|
-
"
|
|
5
|
+
"type": "module",
|
|
6
|
+
"description": "A TypeScript-first Node.js library for spawning libkrun-backed microVMs.",
|
|
6
7
|
"license": "MIT OR Apache-2.0",
|
|
7
8
|
"repository": {
|
|
8
9
|
"type": "git",
|
|
9
10
|
"url": "https://github.com/torkbot/sandbox"
|
|
10
11
|
},
|
|
11
12
|
"publishConfig": {
|
|
12
|
-
"access": "public"
|
|
13
|
-
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"default": "./dist/index.js"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"bin": {
|
|
23
|
+
"sandbox": "./dist/cli.js"
|
|
14
24
|
},
|
|
15
25
|
"files": [
|
|
26
|
+
"dist",
|
|
16
27
|
"README.md"
|
|
17
|
-
]
|
|
28
|
+
],
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=24.0.0"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"bson": "^7.2.0",
|
|
34
|
+
"just-bash": "^2.14.5"
|
|
35
|
+
},
|
|
36
|
+
"optionalDependencies": {
|
|
37
|
+
"@torkbot/sandbox-darwin-arm64": "0.1.0",
|
|
38
|
+
"@torkbot/sandbox-linux-x64-gnu": "0.1.0"
|
|
39
|
+
}
|
|
18
40
|
}
|