isol8 0.4.0 → 0.4.1
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/cli.js +6 -2
- package/dist/cli.js.map +3 -3
- package/dist/index.js +7 -3
- package/dist/index.js.map +3 -3
- package/dist/src/engine/docker.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -619,7 +619,7 @@ function getInstallCommand(runtime, packages) {
|
|
|
619
619
|
case "python":
|
|
620
620
|
return ["pip", "install", "--user", "--no-cache-dir", "--break-system-packages", ...packages];
|
|
621
621
|
case "node":
|
|
622
|
-
return ["npm", "install", "
|
|
622
|
+
return ["npm", "install", "--prefix", "/sandbox", ...packages];
|
|
623
623
|
case "bun":
|
|
624
624
|
return ["bun", "install", "-g", "--global-dir=/sandbox/.bun-global", ...packages];
|
|
625
625
|
case "deno":
|
|
@@ -642,6 +642,10 @@ async function installPackages(container, runtime, packages) {
|
|
|
642
642
|
env.push("NPM_CONFIG_PREFIX=/sandbox/.npm-global");
|
|
643
643
|
env.push("NPM_CONFIG_CACHE=/sandbox/.npm-cache");
|
|
644
644
|
env.push("npm_config_cache=/sandbox/.npm-cache");
|
|
645
|
+
} else if (runtime === "bun") {
|
|
646
|
+
env.push("BUN_INSTALL_GLOBAL_DIR=/sandbox/.bun-global");
|
|
647
|
+
env.push("BUN_INSTALL_CACHE_DIR=/sandbox/.bun-cache");
|
|
648
|
+
env.push("BUN_INSTALL_BIN=/sandbox/.bun-global/bin");
|
|
645
649
|
} else if (runtime === "deno") {
|
|
646
650
|
env.push("DENO_DIR=/sandbox/.deno");
|
|
647
651
|
}
|
|
@@ -1379,7 +1383,7 @@ function createServer(options) {
|
|
|
1379
1383
|
// package.json
|
|
1380
1384
|
var package_default = {
|
|
1381
1385
|
name: "isol8",
|
|
1382
|
-
version: "0.
|
|
1386
|
+
version: "0.4.0",
|
|
1383
1387
|
description: "Secure code execution engine for AI agents",
|
|
1384
1388
|
author: "Illusion47586",
|
|
1385
1389
|
license: "MIT",
|
|
@@ -1497,4 +1501,4 @@ export {
|
|
|
1497
1501
|
BunAdapter
|
|
1498
1502
|
};
|
|
1499
1503
|
|
|
1500
|
-
//# debugId=
|
|
1504
|
+
//# debugId=E29B0D9338BB963564756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * @module client/remote\n *\n * HTTP client for communicating with a remote isol8 server. Implements the\n * {@link Isol8Engine} interface, so it can be used interchangeably with\n * {@link DockerIsol8} for local-vs-remote execution.\n */\n\nimport type {\n ExecutionRequest,\n ExecutionResult,\n Isol8Engine,\n Isol8Options,\n StreamEvent,\n} from \"../types\";\n\n/** Connection options for the remote isol8 client. */\nexport interface RemoteIsol8Options {\n /** Base URL of the isol8 server (e.g. `\"http://localhost:3000\"`). */\n host: string;\n /** API key for Bearer token authentication. */\n apiKey: string;\n /** Optional session ID for persistent mode. If set, the server maintains container state across calls. */\n sessionId?: string;\n}\n\n/**\n * Remote isol8 client that communicates with an isol8 server over HTTP.\n * Implements the {@link Isol8Engine} interface for seamless local/remote switching.\n *\n * @example\n * ```typescript\n * const isol8 = new RemoteIsol8(\n * { host: \"http://localhost:3000\", apiKey: \"secret\" },\n * { network: \"none\" }\n * );\n * await isol8.start();\n * const result = await isol8.execute({ code: \"print(1)\", runtime: \"python\" });\n * await isol8.stop();\n * ```\n */\nexport class RemoteIsol8 implements Isol8Engine {\n private readonly host: string;\n private readonly apiKey: string;\n private readonly sessionId?: string;\n private readonly isol8Options?: Isol8Options;\n\n /**\n * @param options - Connection options (host, API key, session ID).\n * @param isol8Options - Isol8 configuration to send to the server.\n */\n constructor(options: RemoteIsol8Options, isol8Options?: Isol8Options) {\n this.host = options.host.replace(/\\/$/, \"\");\n this.apiKey = options.apiKey;\n this.sessionId = options.sessionId;\n this.isol8Options = isol8Options;\n }\n\n /** Verify the remote server is reachable by hitting the `/health` endpoint. */\n async start(): Promise<void> {\n // Verify server is reachable\n const res = await this.fetch(\"/health\");\n if (!res.ok) {\n throw new Error(`Remote server health check failed: ${res.status}`);\n }\n }\n\n /** Destroy the remote session (if persistent). No-op for ephemeral mode. */\n async stop(): Promise<void> {\n if (this.sessionId) {\n await this.fetch(`/session/${this.sessionId}`, { method: \"DELETE\" });\n }\n }\n\n /** Execute code on the remote server and return the result. */\n async execute(req: ExecutionRequest): Promise<ExecutionResult> {\n const res = await this.fetch(\"/execute\", {\n method: \"POST\",\n body: JSON.stringify({\n request: req,\n options: this.isol8Options,\n sessionId: this.sessionId,\n }),\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({}));\n throw new Error(`Execution failed: ${(body as { error?: string }).error ?? res.statusText}`);\n }\n\n return res.json() as Promise<ExecutionResult>;\n }\n\n /**\n * Execute code on the remote server and stream output chunks via SSE.\n * Yields {@link StreamEvent} objects as they arrive from the server.\n */\n async *executeStream(req: ExecutionRequest): AsyncIterable<StreamEvent> {\n const res = await this.fetch(\"/execute/stream\", {\n method: \"POST\",\n body: JSON.stringify({\n request: req,\n options: this.isol8Options,\n sessionId: this.sessionId,\n }),\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({}));\n throw new Error(`Stream failed: ${(body as { error?: string }).error ?? res.statusText}`);\n }\n\n if (!res.body) {\n throw new Error(\"No response body for streaming\");\n }\n\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n\n // Parse SSE lines\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n const json = line.slice(6).trim();\n if (json) {\n yield JSON.parse(json) as StreamEvent;\n }\n }\n }\n }\n\n // Process remaining buffer\n if (buffer.startsWith(\"data: \")) {\n const json = buffer.slice(6).trim();\n if (json) {\n yield JSON.parse(json) as StreamEvent;\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n /**\n * Upload a file to the remote container (persistent mode only).\n * Content is Base64-encoded for transport.\n */\n async putFile(path: string, content: Buffer | string): Promise<void> {\n if (!this.sessionId) {\n throw new Error(\"File operations require a sessionId (persistent mode)\");\n }\n\n const base64 =\n typeof content === \"string\"\n ? Buffer.from(content).toString(\"base64\")\n : content.toString(\"base64\");\n\n const res = await this.fetch(\"/file\", {\n method: \"POST\",\n body: JSON.stringify({\n sessionId: this.sessionId,\n path,\n content: base64,\n }),\n });\n\n if (!res.ok) {\n throw new Error(`File upload failed: ${res.statusText}`);\n }\n }\n\n /** Download a file from the remote container (persistent mode only). */\n async getFile(path: string): Promise<Buffer> {\n if (!this.sessionId) {\n throw new Error(\"File operations require a sessionId (persistent mode)\");\n }\n\n const params = new URLSearchParams({ sessionId: this.sessionId, path });\n const res = await this.fetch(`/file?${params}`);\n\n if (!res.ok) {\n throw new Error(`File download failed: ${res.statusText}`);\n }\n\n const body = (await res.json()) as { content: string };\n return Buffer.from(body.content, \"base64\");\n }\n\n /** Internal fetch wrapper that attaches auth and content-type headers. */\n private async fetch(path: string, init?: RequestInit): Promise<Response> {\n return globalThis.fetch(`${this.host}${path}`, {\n ...init,\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${this.apiKey}`,\n ...(init?.headers ?? {}),\n },\n });\n }\n}\n",
|
|
6
6
|
"/**\n * @module config\n *\n * Configuration discovery and loading for isol8. Searches for `isol8.config.json`\n * in the working directory and then in `~/.isol8/config.json`, merging any found\n * config with built-in defaults.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport type { Isol8Config } from \"./types\";\n\n/**\n * Built-in default configuration. Used as the base for all config merges.\n * All values here are the \"safe defaults\" — network disabled, conservative limits.\n */\nconst DEFAULT_CONFIG: Isol8Config = {\n maxConcurrent: 10,\n defaults: {\n timeoutMs: 30_000,\n memoryLimit: \"512m\",\n cpuLimit: 1.0,\n network: \"none\",\n sandboxSize: \"512m\",\n tmpSize: \"256m\",\n },\n network: {\n whitelist: [],\n blacklist: [],\n },\n cleanup: {\n autoPrune: true,\n maxContainerAgeMs: 3_600_000,\n },\n dependencies: {},\n};\n\n/**\n * Discovers and loads the isol8 configuration file.\n *\n * Search order (first match wins):\n * 1. `isol8.config.json` in CWD (or the provided `cwd` argument)\n * 2. `~/.isol8/config.json`\n *\n * If no config file is found, returns a copy of {@link DEFAULT_CONFIG}.\n * Partial configs are deep-merged with defaults — you only need to specify\n * the fields you want to override.\n *\n * @param cwd - Optional working directory to search from (defaults to `process.cwd()`).\n * @returns The resolved configuration.\n *\n * @example\n * ```typescript\n * const config = loadConfig();\n * console.log(config.defaults.timeoutMs); // 30000\n * ```\n */\nexport function loadConfig(cwd?: string): Isol8Config {\n const searchPaths = [\n join(resolve(cwd ?? process.cwd()), \"isol8.config.json\"),\n join(homedir(), \".isol8\", \"config.json\"),\n ];\n\n for (const configPath of searchPaths) {\n if (existsSync(configPath)) {\n const raw = readFileSync(configPath, \"utf-8\");\n const parsed = JSON.parse(raw) as Partial<Isol8Config>;\n return mergeConfig(DEFAULT_CONFIG, parsed);\n }\n }\n\n return { ...DEFAULT_CONFIG };\n}\n\n/**\n * Deep-merges a partial config with defaults. Each top-level section is merged\n * independently so that specifying e.g. `{ defaults: { timeoutMs: 5000 } }`\n * preserves all other default values.\n */\nfunction mergeConfig(defaults: Isol8Config, overrides: Partial<Isol8Config>): Isol8Config {\n return {\n maxConcurrent: overrides.maxConcurrent ?? defaults.maxConcurrent,\n defaults: {\n ...defaults.defaults,\n ...overrides.defaults,\n },\n network: {\n whitelist: overrides.network?.whitelist ?? defaults.network.whitelist,\n blacklist: overrides.network?.blacklist ?? defaults.network.blacklist,\n },\n cleanup: {\n ...defaults.cleanup,\n ...overrides.cleanup,\n },\n dependencies: {\n ...defaults.dependencies,\n ...overrides.dependencies,\n },\n };\n}\n\nexport { DEFAULT_CONFIG };\n",
|
|
7
|
-
"/**\n * @module engine/docker\n *\n * The Docker-backed isol8 engine. Creates and manages Docker containers\n * for executing untrusted code with resource limits, network controls, and\n * output sanitization.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { PassThrough } from \"node:stream\";\nimport Docker from \"dockerode\";\nimport { RuntimeRegistry } from \"../runtime\";\nimport type { RuntimeAdapter } from \"../runtime/adapter\";\nimport type {\n ExecutionRequest,\n ExecutionResult,\n Isol8Engine,\n Isol8Mode,\n Isol8Options,\n NetworkFilterConfig,\n NetworkMode,\n StreamEvent,\n} from \"../types\";\nimport { Semaphore } from \"./concurrency\";\nimport { ContainerPool } from \"./pool\";\nimport {\n createTarBuffer,\n extractFromTar,\n maskSecrets,\n parseMemoryLimit,\n truncateOutput,\n} from \"./utils\";\n\n/**\n * Writes a file into a running container using `docker exec`.\n * This bypasses the `putArchive` limitation where Docker rejects archive\n * uploads when `ReadonlyRootfs` is enabled — even to writable tmpfs mounts.\n *\n * Uses detached exec with polling to avoid Bun/dockerode hijack incompatibilities.\n */\nasync function writeFileViaExec(\n container: Docker.Container,\n filePath: string,\n content: Buffer | string\n): Promise<void> {\n const data = typeof content === \"string\" ? Buffer.from(content, \"utf-8\") : content;\n const b64 = data.toString(\"base64\");\n\n const exec = await container.exec({\n Cmd: [\"sh\", \"-c\", `printf '%s' '${b64}' | base64 -d > ${filePath}`],\n });\n\n // Run detached — avoids hijack/stream issues with Bun\n await exec.start({ Detach: true });\n\n // Poll until the exec completes\n let info = await exec.inspect();\n while (info.Running) {\n await new Promise((r) => setTimeout(r, 50));\n info = await exec.inspect();\n }\n\n if (info.ExitCode !== 0) {\n throw new Error(`Failed to write file ${filePath} in container (exit code ${info.ExitCode})`);\n }\n}\n\n/**\n * Reads a file from a running container using `docker exec`.\n * This bypasses the `getArchive` limitation where Docker rejects archive\n * downloads when `ReadonlyRootfs` is enabled — even from writable tmpfs mounts.\n *\n * Works by running `base64 <path>` and decoding the output.\n */\nasync function readFileViaExec(container: Docker.Container, filePath: string): Promise<Buffer> {\n const exec = await container.exec({\n Cmd: [\"base64\", filePath],\n AttachStdout: true,\n AttachStderr: true,\n });\n\n const stream = await exec.start({ Tty: false });\n\n const chunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n\n const stdoutStream = new PassThrough();\n const stderrStream = new PassThrough();\n container.modem.demuxStream(stream, stdoutStream, stderrStream);\n\n stdoutStream.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n stderrStream.on(\"data\", (chunk: Buffer) => stderrChunks.push(chunk));\n\n await new Promise<void>((resolve, reject) => {\n stream.on(\"end\", resolve);\n stream.on(\"error\", reject);\n });\n\n const inspectResult = await exec.inspect();\n if (inspectResult.ExitCode !== 0) {\n const stderr = Buffer.concat(stderrChunks).toString(\"utf-8\").trim();\n throw new Error(\n `Failed to read file ${filePath} in container: ${stderr} (exit code ${inspectResult.ExitCode})`\n );\n }\n\n const b64Output = Buffer.concat(chunks).toString(\"utf-8\").trim();\n return Buffer.from(b64Output, \"base64\");\n}\n\nconst SANDBOX_WORKDIR = \"/sandbox\";\nconst MAX_OUTPUT_BYTES = 1024 * 1024; // 1MB default\nconst PROXY_PORT = 8118;\nconst PROXY_STARTUP_TIMEOUT_MS = 5000;\nconst PROXY_POLL_INTERVAL_MS = 100;\n\n/**\n * Starts proxy.mjs inside the container for filtered network mode.\n * Waits until the proxy is listening on PROXY_PORT before returning.\n */\nasync function startProxy(\n container: Docker.Container,\n networkFilter?: { whitelist: string[]; blacklist: string[] }\n): Promise<void> {\n const envParts: string[] = [];\n if (networkFilter) {\n envParts.push(`ISOL8_WHITELIST='${JSON.stringify(networkFilter.whitelist)}'`);\n envParts.push(`ISOL8_BLACKLIST='${JSON.stringify(networkFilter.blacklist)}'`);\n }\n const envPrefix = envParts.length > 0 ? `${envParts.join(\" \")} ` : \"\";\n\n // Start proxy in background\n const startExec = await container.exec({\n Cmd: [\"sh\", \"-c\", `${envPrefix}node /usr/local/bin/proxy.mjs &`],\n });\n await startExec.start({ Detach: true });\n\n // Poll until proxy is ready\n const deadline = Date.now() + PROXY_STARTUP_TIMEOUT_MS;\n while (Date.now() < deadline) {\n try {\n const checkExec = await container.exec({\n Cmd: [\"sh\", \"-c\", `nc -z 127.0.0.1 ${PROXY_PORT} 2>/dev/null`],\n });\n await checkExec.start({ Detach: true });\n let info = await checkExec.inspect();\n while (info.Running) {\n await new Promise((r) => setTimeout(r, 50));\n info = await checkExec.inspect();\n }\n if (info.ExitCode === 0) {\n return;\n }\n } catch {\n // Ignore, keep polling\n }\n await new Promise((r) => setTimeout(r, PROXY_POLL_INTERVAL_MS));\n }\n throw new Error(\"Proxy failed to start within timeout\");\n}\n\n/**\n * Wraps a command with the `timeout` utility so the process is killed\n * after the specified duration. Returns the wrapped command.\n */\nfunction wrapWithTimeout(cmd: string[], timeoutSec: number): string[] {\n return [\"timeout\", \"-s\", \"KILL\", String(timeoutSec), ...cmd];\n}\n\n/**\n * Returns the package manager install command for a given runtime.\n */\nfunction getInstallCommand(runtime: string, packages: string[]): string[] {\n switch (runtime) {\n case \"python\":\n return [\"pip\", \"install\", \"--user\", \"--no-cache-dir\", \"--break-system-packages\", ...packages];\n case \"node\":\n // Install to /sandbox/.npm-global (writable location with exec allowed)\n return [\"npm\", \"install\", \"-g\", \"--prefix=/sandbox/.npm-global\", ...packages];\n case \"bun\":\n // Bun global install - use /sandbox for writable location\n return [\"bun\", \"install\", \"-g\", \"--global-dir=/sandbox/.bun-global\", ...packages];\n case \"deno\":\n // Deno uses URL imports; cache modules to /sandbox\n return [\"sh\", \"-c\", packages.map((p) => `deno cache ${p}`).join(\" && \")];\n case \"bash\":\n return [\"apk\", \"add\", \"--no-cache\", ...packages];\n default:\n throw new Error(`Unknown runtime for package install: ${runtime}`);\n }\n}\n\n/**\n * Installs packages inside a container using the runtime's package manager.\n */\nasync function installPackages(\n container: Docker.Container,\n runtime: string,\n packages: string[]\n): Promise<void> {\n const cmd = getInstallCommand(runtime, packages);\n // Debug log\n console.error(`[DEBUG] Installing packages: ${JSON.stringify(cmd)}`);\n\n // Set environment for writable install locations\n // Use /sandbox instead of /tmp because /tmp has noexec flag which prevents loading .so files\n const env: string[] = [\n \"PATH=/sandbox/.local/bin:/sandbox/.npm-global/bin:/sandbox/.bun-global/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin\",\n ];\n\n if (runtime === \"python\") {\n env.push(\"PYTHONUSERBASE=/sandbox/.local\");\n } else if (runtime === \"node\") {\n env.push(\"NPM_CONFIG_PREFIX=/sandbox/.npm-global\");\n env.push(\"NPM_CONFIG_CACHE=/sandbox/.npm-cache\");\n env.push(\"npm_config_cache=/sandbox/.npm-cache\");\n } else if (runtime === \"deno\") {\n env.push(\"DENO_DIR=/sandbox/.deno\");\n }\n\n const exec = await container.exec({\n Cmd: cmd,\n AttachStdout: true,\n AttachStderr: true,\n Env: env,\n });\n\n const stream = await exec.start({ Detach: false, Tty: false });\n\n return new Promise<void>((resolve, reject) => {\n let stderr = \"\";\n const stdoutStream = new PassThrough();\n const stderrStream = new PassThrough();\n\n container.modem.demuxStream(stream, stdoutStream, stderrStream);\n\n stderrStream.on(\"data\", (chunk) => {\n stderr += chunk.toString();\n });\n\n stream.on(\"end\", async () => {\n try {\n const info = await exec.inspect();\n if (info.ExitCode !== 0) {\n reject(new Error(`Package install failed (exit code ${info.ExitCode}): ${stderr}`));\n } else {\n resolve();\n }\n } catch (err) {\n reject(err);\n }\n });\n\n stream.on(\"error\", reject);\n });\n}\n\n/** Options for constructing a {@link DockerIsol8} instance. Extends {@link Isol8Options} with Docker-specific settings. */\nexport interface DockerIsol8Options extends Isol8Options {\n /** Custom dockerode instance. Defaults to connecting to the local Docker socket. */\n docker?: Docker;\n}\n\n/**\n * Docker-backed isol8 engine that executes code in isolated containers.\n *\n * Supports two modes:\n * - **Ephemeral** — a new container is created and destroyed per `execute()` call.\n * - **Persistent** — a long-lived container is reused across calls, preserving state.\n *\n * @example\n * ```typescript\n * const isol8 = new DockerIsol8({ network: \"none\", memoryLimit: \"256m\" });\n * await isol8.start();\n * const result = await isol8.execute({ code: \"print(1+1)\", runtime: \"python\" });\n * await isol8.stop();\n * ```\n */\nexport class DockerIsol8 implements Isol8Engine {\n private readonly docker: Docker;\n private readonly mode: Isol8Mode;\n private readonly network: NetworkMode;\n private readonly networkFilter?: NetworkFilterConfig;\n private readonly cpuLimit: number;\n private readonly memoryLimit: string;\n private readonly pidsLimit: number;\n private readonly readonlyRootFs: boolean;\n private readonly maxOutputSize: number;\n private readonly secrets: Record<string, string>;\n private readonly defaultTimeoutMs: number;\n private readonly overrideImage?: string;\n private readonly semaphore: Semaphore;\n private readonly sandboxSize: string;\n private readonly tmpSize: string;\n\n private container: Docker.Container | null = null;\n private persistentRuntime: RuntimeAdapter | null = null;\n private pool: ContainerPool | null = null;\n\n /**\n * @param options - Sandbox configuration options.\n * @param maxConcurrent - Maximum number of concurrent executions (controls the internal semaphore).\n */\n constructor(options: DockerIsol8Options = {}, maxConcurrent = 10) {\n this.docker = options.docker ?? new Docker();\n this.mode = options.mode ?? \"ephemeral\";\n this.network = options.network ?? \"none\";\n this.networkFilter = options.networkFilter;\n this.cpuLimit = options.cpuLimit ?? 1.0;\n this.memoryLimit = options.memoryLimit ?? \"512m\";\n this.pidsLimit = options.pidsLimit ?? 64;\n this.readonlyRootFs = options.readonlyRootFs ?? true;\n this.maxOutputSize = options.maxOutputSize ?? MAX_OUTPUT_BYTES;\n this.secrets = options.secrets ?? {};\n this.defaultTimeoutMs = options.timeoutMs ?? 30_000;\n this.overrideImage = options.image;\n this.semaphore = new Semaphore(maxConcurrent);\n this.sandboxSize = options.sandboxSize ?? \"512m\";\n this.tmpSize = options.tmpSize ?? \"256m\";\n }\n\n /**\n * Initialize isol8. Currently a no-op — containers are created\n * lazily on first `execute()` call.\n */\n async start(): Promise<void> {\n // For persistent mode, container is started lazily on first execute\n // For ephemeral mode, this is a no-op\n }\n\n /** Stop and remove the container (if one exists). Safe to call multiple times. */\n async stop(): Promise<void> {\n if (this.container) {\n try {\n await this.container.stop({ t: 2 });\n } catch {\n // Container may already be stopped\n }\n try {\n await this.container.remove({ force: true });\n } catch {\n // Container may already be removed\n }\n this.container = null;\n this.persistentRuntime = null;\n }\n\n // Drain the warm container pool\n if (this.pool) {\n await this.pool.drain();\n this.pool = null;\n }\n }\n\n /**\n * Execute code in isol8. Acquires a semaphore permit to enforce\n * the concurrency limit, then delegates to ephemeral or persistent execution.\n */\n async execute(req: ExecutionRequest): Promise<ExecutionResult> {\n await this.semaphore.acquire();\n try {\n return this.mode === \"persistent\"\n ? await this.executePersistent(req)\n : await this.executeEphemeral(req);\n } finally {\n this.semaphore.release();\n }\n }\n\n /**\n * Upload a file into the running container via a tar archive.\n * Only available in persistent mode after at least one `execute()` call.\n *\n * @param path - Absolute path inside the container.\n * @param content - File contents.\n * @throws {Error} If no container is active.\n */\n async putFile(path: string, content: Buffer | string): Promise<void> {\n if (!this.container) {\n throw new Error(\"No active container. Call execute() first in persistent mode.\");\n }\n if (this.readonlyRootFs) {\n await writeFileViaExec(this.container, path, content);\n } else {\n const tar = createTarBuffer(path, content);\n await this.container.putArchive(tar, { path: \"/\" });\n }\n }\n\n /**\n * Download a file from the running container.\n *\n * @param path - Absolute path inside the container.\n * @returns File contents as a Buffer.\n * @throws {Error} If no container is active.\n */\n async getFile(path: string): Promise<Buffer> {\n if (!this.container) {\n throw new Error(\"No active container. Call execute() first in persistent mode.\");\n }\n\n if (this.readonlyRootFs) {\n return readFileViaExec(this.container, path);\n }\n\n const stream = await this.container.getArchive({ path });\n\n const chunks: Buffer[] = [];\n for await (const chunk of stream as AsyncIterable<Buffer>) {\n chunks.push(chunk);\n }\n const tarBuffer = Buffer.concat(chunks);\n return extractFromTar(tarBuffer, path);\n }\n\n /** The Docker container ID, or `null` if no container is active. Used by the server for session tracking. */\n get containerId(): string | null {\n return this.container?.id ?? null;\n }\n\n /**\n * Execute code and stream output chunks as they arrive.\n * Yields {@link StreamEvent} objects for stdout, stderr, exit, and error events.\n */\n async *executeStream(req: ExecutionRequest): AsyncIterable<StreamEvent> {\n await this.semaphore.acquire();\n try {\n const adapter = this.getAdapter(req.runtime);\n const timeoutMs = req.timeoutMs ?? this.defaultTimeoutMs;\n const image = await this.resolveImage(adapter);\n\n // Create container (always ephemeral-style for streaming)\n const container = await this.docker.createContainer({\n Image: image,\n Cmd: [\"sleep\", \"infinity\"],\n WorkingDir: SANDBOX_WORKDIR,\n Env: this.buildEnv(),\n NetworkDisabled: this.network === \"none\",\n HostConfig: this.buildHostConfig(),\n StopTimeout: 2,\n });\n\n try {\n await container.start();\n\n if (this.network === \"filtered\") {\n await startProxy(container, this.networkFilter);\n }\n\n // Write code\n const filePath = `${SANDBOX_WORKDIR}/main${adapter.getFileExtension()}`;\n await writeFileViaExec(container, filePath, req.code);\n\n // Install packages if requested\n if (req.installPackages?.length) {\n await installPackages(container, req.runtime, req.installPackages);\n }\n\n // Inject input files\n if (req.files) {\n for (const [fPath, fContent] of Object.entries(req.files)) {\n await writeFileViaExec(container, fPath, fContent);\n }\n }\n\n // Build command\n const rawCmd = adapter.getCommand(req.code, filePath);\n const timeoutSec = Math.ceil(timeoutMs / 1000);\n let cmd: string[];\n if (req.stdin) {\n const stdinPath = `${SANDBOX_WORKDIR}/_stdin`;\n await writeFileViaExec(container, stdinPath, req.stdin);\n const cmdStr = rawCmd.map((a) => `'${a.replace(/'/g, \"'\\\\''\")}'`).join(\" \");\n cmd = wrapWithTimeout([\"sh\", \"-c\", `cat ${stdinPath} | ${cmdStr}`], timeoutSec);\n } else {\n cmd = wrapWithTimeout(rawCmd, timeoutSec);\n }\n\n const exec = await container.exec({\n Cmd: cmd,\n Env: this.buildEnv(req.env),\n AttachStdout: true,\n AttachStderr: true,\n WorkingDir: SANDBOX_WORKDIR,\n });\n\n const execStream = await exec.start({ Tty: false });\n\n yield* this.streamExecOutput(execStream, exec, container, timeoutMs);\n } finally {\n try {\n await container.remove({ force: true });\n } catch {\n // Best effort cleanup\n }\n }\n } finally {\n this.semaphore.release();\n }\n }\n\n // ─── Private methods ───\n\n private async resolveImage(adapter: RuntimeAdapter): Promise<string> {\n if (this.overrideImage) {\n return this.overrideImage;\n }\n // Prefer custom image if it exists\n const customTag = `${adapter.image}-custom`;\n try {\n await this.docker.getImage(customTag).inspect();\n return customTag;\n } catch {\n return adapter.image;\n }\n }\n\n private async executeEphemeral(req: ExecutionRequest): Promise<ExecutionResult> {\n const adapter = this.getAdapter(req.runtime);\n const timeoutMs = req.timeoutMs ?? this.defaultTimeoutMs;\n const image = await this.resolveImage(adapter);\n\n // Lazily initialize the container pool\n if (!this.pool) {\n this.pool = new ContainerPool({\n docker: this.docker,\n poolSize: 2,\n createOptions: {\n Cmd: [\"sleep\", \"infinity\"],\n WorkingDir: SANDBOX_WORKDIR,\n Env: this.buildEnv(),\n NetworkDisabled: this.network === \"none\",\n HostConfig: this.buildHostConfig(),\n StopTimeout: 2,\n },\n });\n }\n\n // Acquire a pre-warmed container from the pool\n const container = await this.pool.acquire(image);\n\n try {\n // Start proxy for filtered network mode\n if (this.network === \"filtered\") {\n await startProxy(container, this.networkFilter);\n }\n\n // Write code to the active tmpfs via exec (putArchive fails with ReadonlyRootfs)\n const filePath = `${SANDBOX_WORKDIR}/main${adapter.getFileExtension()}`;\n await writeFileViaExec(container, filePath, req.code);\n\n // Install packages if requested\n if (req.installPackages?.length) {\n await installPackages(container, req.runtime, req.installPackages);\n }\n\n // Execute the actual command, wrapped with timeout to ensure kill on expiry\n const rawCmd = adapter.getCommand(req.code, filePath);\n const timeoutSec = Math.ceil(timeoutMs / 1000);\n\n // Handle stdin: write to file and pipe into command\n let cmd: string[];\n if (req.stdin) {\n const stdinPath = `${SANDBOX_WORKDIR}/_stdin`;\n await writeFileViaExec(container, stdinPath, req.stdin);\n const cmdStr = rawCmd.map((a) => `'${a.replace(/'/g, \"'\\\\''\")}' `).join(\"\");\n cmd = wrapWithTimeout([\"sh\", \"-c\", `cat ${stdinPath} | ${cmdStr}`], timeoutSec);\n } else {\n cmd = wrapWithTimeout(rawCmd, timeoutSec);\n }\n\n // Inject input files\n if (req.files) {\n for (const [fPath, fContent] of Object.entries(req.files)) {\n await writeFileViaExec(container, fPath, fContent);\n }\n }\n\n const exec = await container.exec({\n Cmd: cmd,\n Env: this.buildEnv(req.env),\n AttachStdout: true,\n AttachStderr: true,\n WorkingDir: SANDBOX_WORKDIR,\n });\n\n const start = performance.now();\n const execStream = await exec.start({ Tty: false });\n\n const { stdout, stderr, truncated } = await this.collectExecOutput(\n execStream,\n container,\n timeoutMs\n );\n const durationMs = Math.round(performance.now() - start);\n\n const inspectResult = await exec.inspect();\n\n return {\n stdout: this.postProcessOutput(stdout, truncated),\n stderr: this.postProcessOutput(stderr, false),\n exitCode: inspectResult.ExitCode ?? 1,\n durationMs,\n truncated,\n executionId: randomUUID(),\n runtime: req.runtime,\n timestamp: new Date().toISOString(),\n containerId: container.id,\n ...(req.outputPaths ? { files: await this.retrieveFiles(container, req.outputPaths) } : {}),\n };\n } finally {\n // Return container to pool for reuse (pool will clean sandbox)\n await this.pool!.release(container, image);\n }\n }\n\n private async executePersistent(req: ExecutionRequest): Promise<ExecutionResult> {\n const adapter = this.getAdapter(req.runtime);\n const timeoutMs = req.timeoutMs ?? this.defaultTimeoutMs;\n\n // Lazily create the persistent container\n if (!this.container) {\n await this.startPersistentContainer(adapter);\n } else if (this.persistentRuntime?.name !== adapter.name) {\n throw new Error(\n `Cannot switch runtime from \"${this.persistentRuntime?.name}\" to \"${adapter.name}\". Each persistent container supports a single runtime. Create a new Isol8 instance for a different runtime.`\n );\n }\n\n const filePath = `${SANDBOX_WORKDIR}/exec_${Date.now()}${adapter.getFileExtension()}`;\n\n // Write code to the container\n if (this.readonlyRootFs) {\n await writeFileViaExec(this.container!, filePath, req.code);\n } else {\n const tar = createTarBuffer(filePath, req.code);\n await this.container!.putArchive(tar, { path: \"/\" });\n }\n\n // Inject input files\n if (req.files) {\n for (const [fPath, fContent] of Object.entries(req.files)) {\n if (this.readonlyRootFs) {\n await writeFileViaExec(this.container!, fPath, fContent);\n } else {\n const tar = createTarBuffer(fPath, fContent);\n await this.container!.putArchive(tar, { path: \"/\" });\n }\n }\n }\n\n const rawCmd = adapter.getCommand(req.code, filePath);\n const timeoutSec = Math.ceil(timeoutMs / 1000);\n\n // Install packages if requested\n if (req.installPackages?.length) {\n await installPackages(this.container!, req.runtime, req.installPackages);\n }\n\n // Handle stdin\n let cmd: string[];\n if (req.stdin) {\n const stdinPath = `${SANDBOX_WORKDIR}/_stdin_${Date.now()}`;\n await writeFileViaExec(this.container!, stdinPath, req.stdin);\n const cmdStr = rawCmd.map((a) => `'${a.replace(/'/g, \"'\\\\''\")}' `).join(\"\");\n cmd = wrapWithTimeout([\"sh\", \"-c\", `cat ${stdinPath} | ${cmdStr}`], timeoutSec);\n } else {\n cmd = wrapWithTimeout(rawCmd, timeoutSec);\n }\n\n const execEnv = this.buildEnv(req.env);\n\n const exec = await this.container!.exec({\n Cmd: cmd,\n Env: execEnv,\n AttachStdout: true,\n AttachStderr: true,\n WorkingDir: SANDBOX_WORKDIR,\n });\n\n const start = performance.now();\n const execStream = await exec.start({ Tty: false });\n\n const { stdout, stderr, truncated } = await this.collectExecOutput(\n execStream,\n this.container!,\n timeoutMs\n );\n const durationMs = Math.round(performance.now() - start);\n\n const inspectResult = await exec.inspect();\n\n return {\n stdout: this.postProcessOutput(stdout, truncated),\n stderr: this.postProcessOutput(stderr, false),\n exitCode: inspectResult.ExitCode ?? 1,\n durationMs,\n truncated,\n executionId: randomUUID(),\n runtime: req.runtime,\n timestamp: new Date().toISOString(),\n containerId: this.container?.id,\n ...(req.outputPaths\n ? { files: await this.retrieveFiles(this.container!, req.outputPaths) }\n : {}),\n };\n }\n\n private async retrieveFiles(\n container: Docker.Container,\n paths: string[]\n ): Promise<Record<string, string>> {\n const files: Record<string, string> = {};\n for (const p of paths) {\n try {\n const buf = this.readonlyRootFs\n ? await readFileViaExec(container, p)\n : await this.getFileFromContainer(container, p);\n files[p] = buf.toString(\"base64\");\n } catch {\n // Skip files that don't exist\n }\n }\n return files;\n }\n\n private async getFileFromContainer(container: Docker.Container, path: string): Promise<Buffer> {\n const stream = await container.getArchive({ path });\n const chunks: Buffer[] = [];\n for await (const chunk of stream as AsyncIterable<Buffer>) {\n chunks.push(chunk);\n }\n return extractFromTar(Buffer.concat(chunks), path);\n }\n\n private async startPersistentContainer(adapter: RuntimeAdapter): Promise<void> {\n const image = await this.resolveImage(adapter);\n\n this.container = await this.docker.createContainer({\n Image: image,\n Cmd: [\"sleep\", \"infinity\"],\n WorkingDir: SANDBOX_WORKDIR,\n Env: this.buildEnv(),\n NetworkDisabled: this.network === \"none\",\n HostConfig: this.buildHostConfig(),\n StopTimeout: 2,\n Labels: {\n \"isol8.managed\": \"true\",\n \"isol8.runtime\": adapter.name,\n },\n });\n\n await this.container.start();\n\n // Start proxy for filtered network mode\n if (this.network === \"filtered\") {\n await startProxy(this.container, this.networkFilter);\n }\n\n this.persistentRuntime = adapter;\n }\n\n private getAdapter(runtime: string): RuntimeAdapter {\n return RuntimeRegistry.get(runtime);\n }\n\n private buildHostConfig(): Docker.HostConfig {\n const config: Docker.HostConfig = {\n Memory: parseMemoryLimit(this.memoryLimit),\n NanoCpus: Math.floor(this.cpuLimit * 1e9),\n PidsLimit: this.pidsLimit,\n ReadonlyRootfs: this.readonlyRootFs,\n Tmpfs: {\n \"/tmp\": `rw,noexec,nosuid,nodev,size=${this.tmpSize}`,\n [SANDBOX_WORKDIR]: `rw,exec,nosuid,nodev,size=${this.sandboxSize}`,\n },\n SecurityOpt: [\"no-new-privileges\"],\n };\n\n if (this.network === \"filtered\") {\n config.NetworkMode = \"bridge\";\n } else if (this.network === \"host\") {\n config.NetworkMode = \"host\";\n }\n\n return config;\n }\n\n private buildEnv(extra?: Record<string, string>): string[] {\n const env: string[] = [\n \"PYTHONUNBUFFERED=1\",\n \"PYTHONUSERBASE=/sandbox/.local\",\n \"NPM_CONFIG_PREFIX=/sandbox/.npm-global\",\n \"DENO_DIR=/sandbox/.deno\",\n \"PATH=/sandbox/.local/bin:/sandbox/.npm-global/bin:/sandbox/.bun-global/bin:/usr/local/bin:/usr/bin:/bin\",\n \"NODE_PATH=/usr/local/lib/node_modules:/sandbox/.npm-global/lib/node_modules:/sandbox/node_modules\",\n ];\n\n // Add secrets as env vars\n for (const [key, value] of Object.entries(this.secrets)) {\n env.push(`${key}=${value}`);\n }\n\n // Add extra env vars\n if (extra) {\n for (const [key, value] of Object.entries(extra)) {\n env.push(`${key}=${value}`);\n }\n }\n\n // Add proxy config for filtered mode\n if (this.network === \"filtered\" && this.networkFilter) {\n env.push(`ISOL8_WHITELIST=${JSON.stringify(this.networkFilter.whitelist)}`);\n env.push(`ISOL8_BLACKLIST=${JSON.stringify(this.networkFilter.blacklist)}`);\n env.push(`HTTP_PROXY=http://127.0.0.1:${PROXY_PORT}`);\n env.push(`HTTPS_PROXY=http://127.0.0.1:${PROXY_PORT}`);\n env.push(`http_proxy=http://127.0.0.1:${PROXY_PORT}`);\n env.push(`https_proxy=http://127.0.0.1:${PROXY_PORT}`);\n }\n\n return env;\n }\n\n private async *streamExecOutput(\n stream: NodeJS.ReadableStream,\n exec: Docker.Exec,\n container: Docker.Container,\n timeoutMs: number\n ): AsyncGenerator<StreamEvent> {\n // Bridge event-based stream to async generator via a queue\n const queue: StreamEvent[] = [];\n let resolve: (() => void) | null = null;\n let done = false;\n\n const push = (event: StreamEvent) => {\n queue.push(event);\n if (resolve) {\n resolve();\n resolve = null;\n }\n };\n\n const timer = setTimeout(() => {\n push({ type: \"error\", data: \"EXECUTION TIMED OUT\" });\n push({ type: \"exit\", data: \"137\" });\n done = true;\n }, timeoutMs);\n\n const stdoutStream = new PassThrough();\n const stderrStream = new PassThrough();\n\n container.modem.demuxStream(stream, stdoutStream, stderrStream);\n\n stdoutStream.on(\"data\", (chunk: Buffer) => {\n let text = chunk.toString(\"utf-8\");\n if (Object.keys(this.secrets).length > 0) {\n text = maskSecrets(text, this.secrets);\n }\n push({ type: \"stdout\", data: text });\n });\n\n stderrStream.on(\"data\", (chunk: Buffer) => {\n let text = chunk.toString(\"utf-8\");\n if (Object.keys(this.secrets).length > 0) {\n text = maskSecrets(text, this.secrets);\n }\n push({ type: \"stderr\", data: text });\n });\n\n stream.on(\"end\", async () => {\n clearTimeout(timer);\n try {\n const info = await exec.inspect();\n push({ type: \"exit\", data: (info.ExitCode ?? 0).toString() });\n } catch {\n push({ type: \"exit\", data: \"1\" });\n }\n done = true;\n });\n\n stream.on(\"error\", (err: Error) => {\n clearTimeout(timer);\n push({ type: \"error\", data: err.message });\n push({ type: \"exit\", data: \"1\" });\n done = true;\n });\n\n // Drain the queue as events arrive\n while (!done || queue.length > 0) {\n if (queue.length > 0) {\n yield queue.shift()!;\n } else if (resolve) {\n await new Promise<void>((r) => {\n resolve = r;\n });\n } else {\n await new Promise((r) => setTimeout(r, 10));\n }\n }\n }\n\n private async collectExecOutput(\n stream: NodeJS.ReadableStream,\n container: Docker.Container,\n timeoutMs: number\n ): Promise<{ stdout: string; stderr: string; truncated: boolean }> {\n return new Promise((resolve, reject) => {\n let stdout = \"\";\n let stderr = \"\";\n let truncated = false;\n let settled = false;\n\n const timer = setTimeout(() => {\n if (settled) {\n return;\n }\n settled = true;\n resolve({ stdout, stderr: `${stderr}\\n--- EXECUTION TIMED OUT ---`, truncated });\n }, timeoutMs);\n\n const stdoutStream = new PassThrough();\n const stderrStream = new PassThrough();\n\n container.modem.demuxStream(stream, stdoutStream, stderrStream);\n\n stdoutStream.on(\"data\", (chunk: Buffer) => {\n stdout += chunk.toString(\"utf-8\");\n if (stdout.length > this.maxOutputSize) {\n const result = truncateOutput(stdout, this.maxOutputSize);\n stdout = result.text;\n truncated = true;\n }\n });\n\n stderrStream.on(\"data\", (chunk: Buffer) => {\n stderr += chunk.toString(\"utf-8\");\n if (stderr.length > this.maxOutputSize) {\n const result = truncateOutput(stderr, this.maxOutputSize);\n stderr = result.text;\n truncated = true;\n }\n });\n\n stream.on(\"end\", () => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timer);\n resolve({ stdout, stderr, truncated });\n });\n\n stream.on(\"error\", (err: Error) => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timer);\n reject(err);\n });\n });\n }\n\n private postProcessOutput(output: string, _truncated: boolean): string {\n let result = output;\n\n // Mask secrets\n if (Object.keys(this.secrets).length > 0) {\n result = maskSecrets(result, this.secrets);\n }\n\n // Trim trailing whitespace\n return result.trimEnd();\n }\n\n /**\n * Remove all isol8 containers (both running and stopped).\n *\n * This static utility method finds and removes all containers created by isol8,\n * identified by images starting with `isol8:` or `isol8-custom:`.\n *\n * @param docker - Optional Docker instance. If not provided, creates a new one.\n * @returns Promise resolving to an object with counts of removed and failed containers.\n *\n * @example\n * ```typescript\n * import { DockerIsol8 } from \"isol8\";\n *\n * // Remove all isol8 containers\n * const result = await DockerIsol8.cleanup();\n * console.log(`Removed ${result.removed} containers`);\n * if (result.failed > 0) {\n * console.log(`Failed to remove ${result.failed} containers`);\n * }\n * ```\n */\n static async cleanup(\n docker?: Docker\n ): Promise<{ removed: number; failed: number; errors: string[] }> {\n const dockerInstance = docker ?? new Docker();\n\n // Find all isol8 containers\n const containers = await dockerInstance.listContainers({ all: true });\n const isol8Containers = containers.filter(\n (c) => c.Image.startsWith(\"isol8:\") || c.Image.startsWith(\"isol8-custom:\")\n );\n\n let removed = 0;\n let failed = 0;\n const errors: string[] = [];\n\n for (const containerInfo of isol8Containers) {\n try {\n const container = dockerInstance.getContainer(containerInfo.Id);\n await container.remove({ force: true });\n removed++;\n } catch (err) {\n failed++;\n const errorMsg = err instanceof Error ? err.message : String(err);\n errors.push(`${containerInfo.Id.slice(0, 12)}: ${errorMsg}`);\n }\n }\n\n return { removed, failed, errors };\n }\n}\n",
|
|
7
|
+
"/**\n * @module engine/docker\n *\n * The Docker-backed isol8 engine. Creates and manages Docker containers\n * for executing untrusted code with resource limits, network controls, and\n * output sanitization.\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { PassThrough } from \"node:stream\";\nimport Docker from \"dockerode\";\nimport { RuntimeRegistry } from \"../runtime\";\nimport type { RuntimeAdapter } from \"../runtime/adapter\";\nimport type {\n ExecutionRequest,\n ExecutionResult,\n Isol8Engine,\n Isol8Mode,\n Isol8Options,\n NetworkFilterConfig,\n NetworkMode,\n StreamEvent,\n} from \"../types\";\nimport { Semaphore } from \"./concurrency\";\nimport { ContainerPool } from \"./pool\";\nimport {\n createTarBuffer,\n extractFromTar,\n maskSecrets,\n parseMemoryLimit,\n truncateOutput,\n} from \"./utils\";\n\n/**\n * Writes a file into a running container using `docker exec`.\n * This bypasses the `putArchive` limitation where Docker rejects archive\n * uploads when `ReadonlyRootfs` is enabled — even to writable tmpfs mounts.\n *\n * Uses detached exec with polling to avoid Bun/dockerode hijack incompatibilities.\n */\nasync function writeFileViaExec(\n container: Docker.Container,\n filePath: string,\n content: Buffer | string\n): Promise<void> {\n const data = typeof content === \"string\" ? Buffer.from(content, \"utf-8\") : content;\n const b64 = data.toString(\"base64\");\n\n const exec = await container.exec({\n Cmd: [\"sh\", \"-c\", `printf '%s' '${b64}' | base64 -d > ${filePath}`],\n });\n\n // Run detached — avoids hijack/stream issues with Bun\n await exec.start({ Detach: true });\n\n // Poll until the exec completes\n let info = await exec.inspect();\n while (info.Running) {\n await new Promise((r) => setTimeout(r, 50));\n info = await exec.inspect();\n }\n\n if (info.ExitCode !== 0) {\n throw new Error(`Failed to write file ${filePath} in container (exit code ${info.ExitCode})`);\n }\n}\n\n/**\n * Reads a file from a running container using `docker exec`.\n * This bypasses the `getArchive` limitation where Docker rejects archive\n * downloads when `ReadonlyRootfs` is enabled — even from writable tmpfs mounts.\n *\n * Works by running `base64 <path>` and decoding the output.\n */\nasync function readFileViaExec(container: Docker.Container, filePath: string): Promise<Buffer> {\n const exec = await container.exec({\n Cmd: [\"base64\", filePath],\n AttachStdout: true,\n AttachStderr: true,\n });\n\n const stream = await exec.start({ Tty: false });\n\n const chunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n\n const stdoutStream = new PassThrough();\n const stderrStream = new PassThrough();\n container.modem.demuxStream(stream, stdoutStream, stderrStream);\n\n stdoutStream.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n stderrStream.on(\"data\", (chunk: Buffer) => stderrChunks.push(chunk));\n\n await new Promise<void>((resolve, reject) => {\n stream.on(\"end\", resolve);\n stream.on(\"error\", reject);\n });\n\n const inspectResult = await exec.inspect();\n if (inspectResult.ExitCode !== 0) {\n const stderr = Buffer.concat(stderrChunks).toString(\"utf-8\").trim();\n throw new Error(\n `Failed to read file ${filePath} in container: ${stderr} (exit code ${inspectResult.ExitCode})`\n );\n }\n\n const b64Output = Buffer.concat(chunks).toString(\"utf-8\").trim();\n return Buffer.from(b64Output, \"base64\");\n}\n\nconst SANDBOX_WORKDIR = \"/sandbox\";\nconst MAX_OUTPUT_BYTES = 1024 * 1024; // 1MB default\nconst PROXY_PORT = 8118;\nconst PROXY_STARTUP_TIMEOUT_MS = 5000;\nconst PROXY_POLL_INTERVAL_MS = 100;\n\n/**\n * Starts proxy.mjs inside the container for filtered network mode.\n * Waits until the proxy is listening on PROXY_PORT before returning.\n */\nasync function startProxy(\n container: Docker.Container,\n networkFilter?: { whitelist: string[]; blacklist: string[] }\n): Promise<void> {\n const envParts: string[] = [];\n if (networkFilter) {\n envParts.push(`ISOL8_WHITELIST='${JSON.stringify(networkFilter.whitelist)}'`);\n envParts.push(`ISOL8_BLACKLIST='${JSON.stringify(networkFilter.blacklist)}'`);\n }\n const envPrefix = envParts.length > 0 ? `${envParts.join(\" \")} ` : \"\";\n\n // Start proxy in background\n const startExec = await container.exec({\n Cmd: [\"sh\", \"-c\", `${envPrefix}node /usr/local/bin/proxy.mjs &`],\n });\n await startExec.start({ Detach: true });\n\n // Poll until proxy is ready\n const deadline = Date.now() + PROXY_STARTUP_TIMEOUT_MS;\n while (Date.now() < deadline) {\n try {\n const checkExec = await container.exec({\n Cmd: [\"sh\", \"-c\", `nc -z 127.0.0.1 ${PROXY_PORT} 2>/dev/null`],\n });\n await checkExec.start({ Detach: true });\n let info = await checkExec.inspect();\n while (info.Running) {\n await new Promise((r) => setTimeout(r, 50));\n info = await checkExec.inspect();\n }\n if (info.ExitCode === 0) {\n return;\n }\n } catch {\n // Ignore, keep polling\n }\n await new Promise((r) => setTimeout(r, PROXY_POLL_INTERVAL_MS));\n }\n throw new Error(\"Proxy failed to start within timeout\");\n}\n\n/**\n * Wraps a command with the `timeout` utility so the process is killed\n * after the specified duration. Returns the wrapped command.\n */\nfunction wrapWithTimeout(cmd: string[], timeoutSec: number): string[] {\n return [\"timeout\", \"-s\", \"KILL\", String(timeoutSec), ...cmd];\n}\n\n/**\n * Returns the package manager install command for a given runtime.\n */\nfunction getInstallCommand(runtime: string, packages: string[]): string[] {\n switch (runtime) {\n case \"python\":\n return [\"pip\", \"install\", \"--user\", \"--no-cache-dir\", \"--break-system-packages\", ...packages];\n case \"node\":\n // Install to /sandbox (local node_modules) so resolution works for both CJS and ESM\n return [\"npm\", \"install\", \"--prefix\", \"/sandbox\", ...packages];\n case \"bun\":\n // Bun global install - use /sandbox for writable location\n return [\"bun\", \"install\", \"-g\", \"--global-dir=/sandbox/.bun-global\", ...packages];\n case \"deno\":\n // Deno uses URL imports; cache modules to /sandbox\n return [\"sh\", \"-c\", packages.map((p) => `deno cache ${p}`).join(\" && \")];\n case \"bash\":\n return [\"apk\", \"add\", \"--no-cache\", ...packages];\n default:\n throw new Error(`Unknown runtime for package install: ${runtime}`);\n }\n}\n\n/**\n * Installs packages inside a container using the runtime's package manager.\n */\nasync function installPackages(\n container: Docker.Container,\n runtime: string,\n packages: string[]\n): Promise<void> {\n const cmd = getInstallCommand(runtime, packages);\n // Debug log\n console.error(`[DEBUG] Installing packages: ${JSON.stringify(cmd)}`);\n\n // Set environment for writable install locations\n // Use /sandbox instead of /tmp because /tmp has noexec flag which prevents loading .so files\n const env: string[] = [\n \"PATH=/sandbox/.local/bin:/sandbox/.npm-global/bin:/sandbox/.bun-global/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin\",\n ];\n\n if (runtime === \"python\") {\n env.push(\"PYTHONUSERBASE=/sandbox/.local\");\n } else if (runtime === \"node\") {\n env.push(\"NPM_CONFIG_PREFIX=/sandbox/.npm-global\");\n env.push(\"NPM_CONFIG_CACHE=/sandbox/.npm-cache\");\n env.push(\"npm_config_cache=/sandbox/.npm-cache\");\n } else if (runtime === \"bun\") {\n env.push(\"BUN_INSTALL_GLOBAL_DIR=/sandbox/.bun-global\");\n env.push(\"BUN_INSTALL_CACHE_DIR=/sandbox/.bun-cache\");\n env.push(\"BUN_INSTALL_BIN=/sandbox/.bun-global/bin\");\n } else if (runtime === \"deno\") {\n env.push(\"DENO_DIR=/sandbox/.deno\");\n }\n\n const exec = await container.exec({\n Cmd: cmd,\n AttachStdout: true,\n AttachStderr: true,\n Env: env,\n });\n\n const stream = await exec.start({ Detach: false, Tty: false });\n\n return new Promise<void>((resolve, reject) => {\n let stderr = \"\";\n const stdoutStream = new PassThrough();\n const stderrStream = new PassThrough();\n\n container.modem.demuxStream(stream, stdoutStream, stderrStream);\n\n stderrStream.on(\"data\", (chunk) => {\n stderr += chunk.toString();\n });\n\n stream.on(\"end\", async () => {\n try {\n const info = await exec.inspect();\n if (info.ExitCode !== 0) {\n reject(new Error(`Package install failed (exit code ${info.ExitCode}): ${stderr}`));\n } else {\n resolve();\n }\n } catch (err) {\n reject(err);\n }\n });\n\n stream.on(\"error\", reject);\n });\n}\n\n/** Options for constructing a {@link DockerIsol8} instance. Extends {@link Isol8Options} with Docker-specific settings. */\nexport interface DockerIsol8Options extends Isol8Options {\n /** Custom dockerode instance. Defaults to connecting to the local Docker socket. */\n docker?: Docker;\n}\n\n/**\n * Docker-backed isol8 engine that executes code in isolated containers.\n *\n * Supports two modes:\n * - **Ephemeral** — a new container is created and destroyed per `execute()` call.\n * - **Persistent** — a long-lived container is reused across calls, preserving state.\n *\n * @example\n * ```typescript\n * const isol8 = new DockerIsol8({ network: \"none\", memoryLimit: \"256m\" });\n * await isol8.start();\n * const result = await isol8.execute({ code: \"print(1+1)\", runtime: \"python\" });\n * await isol8.stop();\n * ```\n */\nexport class DockerIsol8 implements Isol8Engine {\n private readonly docker: Docker;\n private readonly mode: Isol8Mode;\n private readonly network: NetworkMode;\n private readonly networkFilter?: NetworkFilterConfig;\n private readonly cpuLimit: number;\n private readonly memoryLimit: string;\n private readonly pidsLimit: number;\n private readonly readonlyRootFs: boolean;\n private readonly maxOutputSize: number;\n private readonly secrets: Record<string, string>;\n private readonly defaultTimeoutMs: number;\n private readonly overrideImage?: string;\n private readonly semaphore: Semaphore;\n private readonly sandboxSize: string;\n private readonly tmpSize: string;\n\n private container: Docker.Container | null = null;\n private persistentRuntime: RuntimeAdapter | null = null;\n private pool: ContainerPool | null = null;\n\n /**\n * @param options - Sandbox configuration options.\n * @param maxConcurrent - Maximum number of concurrent executions (controls the internal semaphore).\n */\n constructor(options: DockerIsol8Options = {}, maxConcurrent = 10) {\n this.docker = options.docker ?? new Docker();\n this.mode = options.mode ?? \"ephemeral\";\n this.network = options.network ?? \"none\";\n this.networkFilter = options.networkFilter;\n this.cpuLimit = options.cpuLimit ?? 1.0;\n this.memoryLimit = options.memoryLimit ?? \"512m\";\n this.pidsLimit = options.pidsLimit ?? 64;\n this.readonlyRootFs = options.readonlyRootFs ?? true;\n this.maxOutputSize = options.maxOutputSize ?? MAX_OUTPUT_BYTES;\n this.secrets = options.secrets ?? {};\n this.defaultTimeoutMs = options.timeoutMs ?? 30_000;\n this.overrideImage = options.image;\n this.semaphore = new Semaphore(maxConcurrent);\n this.sandboxSize = options.sandboxSize ?? \"512m\";\n this.tmpSize = options.tmpSize ?? \"256m\";\n }\n\n /**\n * Initialize isol8. Currently a no-op — containers are created\n * lazily on first `execute()` call.\n */\n async start(): Promise<void> {\n // For persistent mode, container is started lazily on first execute\n // For ephemeral mode, this is a no-op\n }\n\n /** Stop and remove the container (if one exists). Safe to call multiple times. */\n async stop(): Promise<void> {\n if (this.container) {\n try {\n await this.container.stop({ t: 2 });\n } catch {\n // Container may already be stopped\n }\n try {\n await this.container.remove({ force: true });\n } catch {\n // Container may already be removed\n }\n this.container = null;\n this.persistentRuntime = null;\n }\n\n // Drain the warm container pool\n if (this.pool) {\n await this.pool.drain();\n this.pool = null;\n }\n }\n\n /**\n * Execute code in isol8. Acquires a semaphore permit to enforce\n * the concurrency limit, then delegates to ephemeral or persistent execution.\n */\n async execute(req: ExecutionRequest): Promise<ExecutionResult> {\n await this.semaphore.acquire();\n try {\n return this.mode === \"persistent\"\n ? await this.executePersistent(req)\n : await this.executeEphemeral(req);\n } finally {\n this.semaphore.release();\n }\n }\n\n /**\n * Upload a file into the running container via a tar archive.\n * Only available in persistent mode after at least one `execute()` call.\n *\n * @param path - Absolute path inside the container.\n * @param content - File contents.\n * @throws {Error} If no container is active.\n */\n async putFile(path: string, content: Buffer | string): Promise<void> {\n if (!this.container) {\n throw new Error(\"No active container. Call execute() first in persistent mode.\");\n }\n if (this.readonlyRootFs) {\n await writeFileViaExec(this.container, path, content);\n } else {\n const tar = createTarBuffer(path, content);\n await this.container.putArchive(tar, { path: \"/\" });\n }\n }\n\n /**\n * Download a file from the running container.\n *\n * @param path - Absolute path inside the container.\n * @returns File contents as a Buffer.\n * @throws {Error} If no container is active.\n */\n async getFile(path: string): Promise<Buffer> {\n if (!this.container) {\n throw new Error(\"No active container. Call execute() first in persistent mode.\");\n }\n\n if (this.readonlyRootFs) {\n return readFileViaExec(this.container, path);\n }\n\n const stream = await this.container.getArchive({ path });\n\n const chunks: Buffer[] = [];\n for await (const chunk of stream as AsyncIterable<Buffer>) {\n chunks.push(chunk);\n }\n const tarBuffer = Buffer.concat(chunks);\n return extractFromTar(tarBuffer, path);\n }\n\n /** The Docker container ID, or `null` if no container is active. Used by the server for session tracking. */\n get containerId(): string | null {\n return this.container?.id ?? null;\n }\n\n /**\n * Execute code and stream output chunks as they arrive.\n * Yields {@link StreamEvent} objects for stdout, stderr, exit, and error events.\n */\n async *executeStream(req: ExecutionRequest): AsyncIterable<StreamEvent> {\n await this.semaphore.acquire();\n try {\n const adapter = this.getAdapter(req.runtime);\n const timeoutMs = req.timeoutMs ?? this.defaultTimeoutMs;\n const image = await this.resolveImage(adapter);\n\n // Create container (always ephemeral-style for streaming)\n const container = await this.docker.createContainer({\n Image: image,\n Cmd: [\"sleep\", \"infinity\"],\n WorkingDir: SANDBOX_WORKDIR,\n Env: this.buildEnv(),\n NetworkDisabled: this.network === \"none\",\n HostConfig: this.buildHostConfig(),\n StopTimeout: 2,\n });\n\n try {\n await container.start();\n\n if (this.network === \"filtered\") {\n await startProxy(container, this.networkFilter);\n }\n\n // Write code\n const filePath = `${SANDBOX_WORKDIR}/main${adapter.getFileExtension()}`;\n await writeFileViaExec(container, filePath, req.code);\n\n // Install packages if requested\n if (req.installPackages?.length) {\n await installPackages(container, req.runtime, req.installPackages);\n }\n\n // Inject input files\n if (req.files) {\n for (const [fPath, fContent] of Object.entries(req.files)) {\n await writeFileViaExec(container, fPath, fContent);\n }\n }\n\n // Build command\n const rawCmd = adapter.getCommand(req.code, filePath);\n const timeoutSec = Math.ceil(timeoutMs / 1000);\n let cmd: string[];\n if (req.stdin) {\n const stdinPath = `${SANDBOX_WORKDIR}/_stdin`;\n await writeFileViaExec(container, stdinPath, req.stdin);\n const cmdStr = rawCmd.map((a) => `'${a.replace(/'/g, \"'\\\\''\")}'`).join(\" \");\n cmd = wrapWithTimeout([\"sh\", \"-c\", `cat ${stdinPath} | ${cmdStr}`], timeoutSec);\n } else {\n cmd = wrapWithTimeout(rawCmd, timeoutSec);\n }\n\n const exec = await container.exec({\n Cmd: cmd,\n Env: this.buildEnv(req.env),\n AttachStdout: true,\n AttachStderr: true,\n WorkingDir: SANDBOX_WORKDIR,\n });\n\n const execStream = await exec.start({ Tty: false });\n\n yield* this.streamExecOutput(execStream, exec, container, timeoutMs);\n } finally {\n try {\n await container.remove({ force: true });\n } catch {\n // Best effort cleanup\n }\n }\n } finally {\n this.semaphore.release();\n }\n }\n\n // ─── Private methods ───\n\n private async resolveImage(adapter: RuntimeAdapter): Promise<string> {\n if (this.overrideImage) {\n return this.overrideImage;\n }\n // Prefer custom image if it exists\n const customTag = `${adapter.image}-custom`;\n try {\n await this.docker.getImage(customTag).inspect();\n return customTag;\n } catch {\n return adapter.image;\n }\n }\n\n private async executeEphemeral(req: ExecutionRequest): Promise<ExecutionResult> {\n const adapter = this.getAdapter(req.runtime);\n const timeoutMs = req.timeoutMs ?? this.defaultTimeoutMs;\n const image = await this.resolveImage(adapter);\n\n // Lazily initialize the container pool\n if (!this.pool) {\n this.pool = new ContainerPool({\n docker: this.docker,\n poolSize: 2,\n createOptions: {\n Cmd: [\"sleep\", \"infinity\"],\n WorkingDir: SANDBOX_WORKDIR,\n Env: this.buildEnv(),\n NetworkDisabled: this.network === \"none\",\n HostConfig: this.buildHostConfig(),\n StopTimeout: 2,\n },\n });\n }\n\n // Acquire a pre-warmed container from the pool\n const container = await this.pool.acquire(image);\n\n try {\n // Start proxy for filtered network mode\n if (this.network === \"filtered\") {\n await startProxy(container, this.networkFilter);\n }\n\n // Write code to the active tmpfs via exec (putArchive fails with ReadonlyRootfs)\n const filePath = `${SANDBOX_WORKDIR}/main${adapter.getFileExtension()}`;\n await writeFileViaExec(container, filePath, req.code);\n\n // Install packages if requested\n if (req.installPackages?.length) {\n await installPackages(container, req.runtime, req.installPackages);\n }\n\n // Execute the actual command, wrapped with timeout to ensure kill on expiry\n const rawCmd = adapter.getCommand(req.code, filePath);\n const timeoutSec = Math.ceil(timeoutMs / 1000);\n\n // Handle stdin: write to file and pipe into command\n let cmd: string[];\n if (req.stdin) {\n const stdinPath = `${SANDBOX_WORKDIR}/_stdin`;\n await writeFileViaExec(container, stdinPath, req.stdin);\n const cmdStr = rawCmd.map((a) => `'${a.replace(/'/g, \"'\\\\''\")}' `).join(\"\");\n cmd = wrapWithTimeout([\"sh\", \"-c\", `cat ${stdinPath} | ${cmdStr}`], timeoutSec);\n } else {\n cmd = wrapWithTimeout(rawCmd, timeoutSec);\n }\n\n // Inject input files\n if (req.files) {\n for (const [fPath, fContent] of Object.entries(req.files)) {\n await writeFileViaExec(container, fPath, fContent);\n }\n }\n\n const exec = await container.exec({\n Cmd: cmd,\n Env: this.buildEnv(req.env),\n AttachStdout: true,\n AttachStderr: true,\n WorkingDir: SANDBOX_WORKDIR,\n });\n\n const start = performance.now();\n const execStream = await exec.start({ Tty: false });\n\n const { stdout, stderr, truncated } = await this.collectExecOutput(\n execStream,\n container,\n timeoutMs\n );\n const durationMs = Math.round(performance.now() - start);\n\n const inspectResult = await exec.inspect();\n\n return {\n stdout: this.postProcessOutput(stdout, truncated),\n stderr: this.postProcessOutput(stderr, false),\n exitCode: inspectResult.ExitCode ?? 1,\n durationMs,\n truncated,\n executionId: randomUUID(),\n runtime: req.runtime,\n timestamp: new Date().toISOString(),\n containerId: container.id,\n ...(req.outputPaths ? { files: await this.retrieveFiles(container, req.outputPaths) } : {}),\n };\n } finally {\n // Return container to pool for reuse (pool will clean sandbox)\n await this.pool!.release(container, image);\n }\n }\n\n private async executePersistent(req: ExecutionRequest): Promise<ExecutionResult> {\n const adapter = this.getAdapter(req.runtime);\n const timeoutMs = req.timeoutMs ?? this.defaultTimeoutMs;\n\n // Lazily create the persistent container\n if (!this.container) {\n await this.startPersistentContainer(adapter);\n } else if (this.persistentRuntime?.name !== adapter.name) {\n throw new Error(\n `Cannot switch runtime from \"${this.persistentRuntime?.name}\" to \"${adapter.name}\". Each persistent container supports a single runtime. Create a new Isol8 instance for a different runtime.`\n );\n }\n\n const filePath = `${SANDBOX_WORKDIR}/exec_${Date.now()}${adapter.getFileExtension()}`;\n\n // Write code to the container\n if (this.readonlyRootFs) {\n await writeFileViaExec(this.container!, filePath, req.code);\n } else {\n const tar = createTarBuffer(filePath, req.code);\n await this.container!.putArchive(tar, { path: \"/\" });\n }\n\n // Inject input files\n if (req.files) {\n for (const [fPath, fContent] of Object.entries(req.files)) {\n if (this.readonlyRootFs) {\n await writeFileViaExec(this.container!, fPath, fContent);\n } else {\n const tar = createTarBuffer(fPath, fContent);\n await this.container!.putArchive(tar, { path: \"/\" });\n }\n }\n }\n\n const rawCmd = adapter.getCommand(req.code, filePath);\n const timeoutSec = Math.ceil(timeoutMs / 1000);\n\n // Install packages if requested\n if (req.installPackages?.length) {\n await installPackages(this.container!, req.runtime, req.installPackages);\n }\n\n // Handle stdin\n let cmd: string[];\n if (req.stdin) {\n const stdinPath = `${SANDBOX_WORKDIR}/_stdin_${Date.now()}`;\n await writeFileViaExec(this.container!, stdinPath, req.stdin);\n const cmdStr = rawCmd.map((a) => `'${a.replace(/'/g, \"'\\\\''\")}' `).join(\"\");\n cmd = wrapWithTimeout([\"sh\", \"-c\", `cat ${stdinPath} | ${cmdStr}`], timeoutSec);\n } else {\n cmd = wrapWithTimeout(rawCmd, timeoutSec);\n }\n\n const execEnv = this.buildEnv(req.env);\n\n const exec = await this.container!.exec({\n Cmd: cmd,\n Env: execEnv,\n AttachStdout: true,\n AttachStderr: true,\n WorkingDir: SANDBOX_WORKDIR,\n });\n\n const start = performance.now();\n const execStream = await exec.start({ Tty: false });\n\n const { stdout, stderr, truncated } = await this.collectExecOutput(\n execStream,\n this.container!,\n timeoutMs\n );\n const durationMs = Math.round(performance.now() - start);\n\n const inspectResult = await exec.inspect();\n\n return {\n stdout: this.postProcessOutput(stdout, truncated),\n stderr: this.postProcessOutput(stderr, false),\n exitCode: inspectResult.ExitCode ?? 1,\n durationMs,\n truncated,\n executionId: randomUUID(),\n runtime: req.runtime,\n timestamp: new Date().toISOString(),\n containerId: this.container?.id,\n ...(req.outputPaths\n ? { files: await this.retrieveFiles(this.container!, req.outputPaths) }\n : {}),\n };\n }\n\n private async retrieveFiles(\n container: Docker.Container,\n paths: string[]\n ): Promise<Record<string, string>> {\n const files: Record<string, string> = {};\n for (const p of paths) {\n try {\n const buf = this.readonlyRootFs\n ? await readFileViaExec(container, p)\n : await this.getFileFromContainer(container, p);\n files[p] = buf.toString(\"base64\");\n } catch {\n // Skip files that don't exist\n }\n }\n return files;\n }\n\n private async getFileFromContainer(container: Docker.Container, path: string): Promise<Buffer> {\n const stream = await container.getArchive({ path });\n const chunks: Buffer[] = [];\n for await (const chunk of stream as AsyncIterable<Buffer>) {\n chunks.push(chunk);\n }\n return extractFromTar(Buffer.concat(chunks), path);\n }\n\n private async startPersistentContainer(adapter: RuntimeAdapter): Promise<void> {\n const image = await this.resolveImage(adapter);\n\n this.container = await this.docker.createContainer({\n Image: image,\n Cmd: [\"sleep\", \"infinity\"],\n WorkingDir: SANDBOX_WORKDIR,\n Env: this.buildEnv(),\n NetworkDisabled: this.network === \"none\",\n HostConfig: this.buildHostConfig(),\n StopTimeout: 2,\n Labels: {\n \"isol8.managed\": \"true\",\n \"isol8.runtime\": adapter.name,\n },\n });\n\n await this.container.start();\n\n // Start proxy for filtered network mode\n if (this.network === \"filtered\") {\n await startProxy(this.container, this.networkFilter);\n }\n\n this.persistentRuntime = adapter;\n }\n\n private getAdapter(runtime: string): RuntimeAdapter {\n return RuntimeRegistry.get(runtime);\n }\n\n private buildHostConfig(): Docker.HostConfig {\n const config: Docker.HostConfig = {\n Memory: parseMemoryLimit(this.memoryLimit),\n NanoCpus: Math.floor(this.cpuLimit * 1e9),\n PidsLimit: this.pidsLimit,\n ReadonlyRootfs: this.readonlyRootFs,\n Tmpfs: {\n \"/tmp\": `rw,noexec,nosuid,nodev,size=${this.tmpSize}`,\n [SANDBOX_WORKDIR]: `rw,exec,nosuid,nodev,size=${this.sandboxSize}`,\n },\n SecurityOpt: [\"no-new-privileges\"],\n };\n\n if (this.network === \"filtered\") {\n config.NetworkMode = \"bridge\";\n } else if (this.network === \"host\") {\n config.NetworkMode = \"host\";\n }\n\n return config;\n }\n\n private buildEnv(extra?: Record<string, string>): string[] {\n const env: string[] = [\n \"PYTHONUNBUFFERED=1\",\n \"PYTHONUSERBASE=/sandbox/.local\",\n \"NPM_CONFIG_PREFIX=/sandbox/.npm-global\",\n \"DENO_DIR=/sandbox/.deno\",\n \"PATH=/sandbox/.local/bin:/sandbox/.npm-global/bin:/sandbox/.bun-global/bin:/usr/local/bin:/usr/bin:/bin\",\n \"NODE_PATH=/usr/local/lib/node_modules:/sandbox/.npm-global/lib/node_modules:/sandbox/node_modules\",\n ];\n\n // Add secrets as env vars\n for (const [key, value] of Object.entries(this.secrets)) {\n env.push(`${key}=${value}`);\n }\n\n // Add extra env vars\n if (extra) {\n for (const [key, value] of Object.entries(extra)) {\n env.push(`${key}=${value}`);\n }\n }\n\n // Add proxy config for filtered mode\n if (this.network === \"filtered\" && this.networkFilter) {\n env.push(`ISOL8_WHITELIST=${JSON.stringify(this.networkFilter.whitelist)}`);\n env.push(`ISOL8_BLACKLIST=${JSON.stringify(this.networkFilter.blacklist)}`);\n env.push(`HTTP_PROXY=http://127.0.0.1:${PROXY_PORT}`);\n env.push(`HTTPS_PROXY=http://127.0.0.1:${PROXY_PORT}`);\n env.push(`http_proxy=http://127.0.0.1:${PROXY_PORT}`);\n env.push(`https_proxy=http://127.0.0.1:${PROXY_PORT}`);\n }\n\n return env;\n }\n\n private async *streamExecOutput(\n stream: NodeJS.ReadableStream,\n exec: Docker.Exec,\n container: Docker.Container,\n timeoutMs: number\n ): AsyncGenerator<StreamEvent> {\n // Bridge event-based stream to async generator via a queue\n const queue: StreamEvent[] = [];\n let resolve: (() => void) | null = null;\n let done = false;\n\n const push = (event: StreamEvent) => {\n queue.push(event);\n if (resolve) {\n resolve();\n resolve = null;\n }\n };\n\n const timer = setTimeout(() => {\n push({ type: \"error\", data: \"EXECUTION TIMED OUT\" });\n push({ type: \"exit\", data: \"137\" });\n done = true;\n }, timeoutMs);\n\n const stdoutStream = new PassThrough();\n const stderrStream = new PassThrough();\n\n container.modem.demuxStream(stream, stdoutStream, stderrStream);\n\n stdoutStream.on(\"data\", (chunk: Buffer) => {\n let text = chunk.toString(\"utf-8\");\n if (Object.keys(this.secrets).length > 0) {\n text = maskSecrets(text, this.secrets);\n }\n push({ type: \"stdout\", data: text });\n });\n\n stderrStream.on(\"data\", (chunk: Buffer) => {\n let text = chunk.toString(\"utf-8\");\n if (Object.keys(this.secrets).length > 0) {\n text = maskSecrets(text, this.secrets);\n }\n push({ type: \"stderr\", data: text });\n });\n\n stream.on(\"end\", async () => {\n clearTimeout(timer);\n try {\n const info = await exec.inspect();\n push({ type: \"exit\", data: (info.ExitCode ?? 0).toString() });\n } catch {\n push({ type: \"exit\", data: \"1\" });\n }\n done = true;\n });\n\n stream.on(\"error\", (err: Error) => {\n clearTimeout(timer);\n push({ type: \"error\", data: err.message });\n push({ type: \"exit\", data: \"1\" });\n done = true;\n });\n\n // Drain the queue as events arrive\n while (!done || queue.length > 0) {\n if (queue.length > 0) {\n yield queue.shift()!;\n } else if (resolve) {\n await new Promise<void>((r) => {\n resolve = r;\n });\n } else {\n await new Promise((r) => setTimeout(r, 10));\n }\n }\n }\n\n private async collectExecOutput(\n stream: NodeJS.ReadableStream,\n container: Docker.Container,\n timeoutMs: number\n ): Promise<{ stdout: string; stderr: string; truncated: boolean }> {\n return new Promise((resolve, reject) => {\n let stdout = \"\";\n let stderr = \"\";\n let truncated = false;\n let settled = false;\n\n const timer = setTimeout(() => {\n if (settled) {\n return;\n }\n settled = true;\n resolve({ stdout, stderr: `${stderr}\\n--- EXECUTION TIMED OUT ---`, truncated });\n }, timeoutMs);\n\n const stdoutStream = new PassThrough();\n const stderrStream = new PassThrough();\n\n container.modem.demuxStream(stream, stdoutStream, stderrStream);\n\n stdoutStream.on(\"data\", (chunk: Buffer) => {\n stdout += chunk.toString(\"utf-8\");\n if (stdout.length > this.maxOutputSize) {\n const result = truncateOutput(stdout, this.maxOutputSize);\n stdout = result.text;\n truncated = true;\n }\n });\n\n stderrStream.on(\"data\", (chunk: Buffer) => {\n stderr += chunk.toString(\"utf-8\");\n if (stderr.length > this.maxOutputSize) {\n const result = truncateOutput(stderr, this.maxOutputSize);\n stderr = result.text;\n truncated = true;\n }\n });\n\n stream.on(\"end\", () => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timer);\n resolve({ stdout, stderr, truncated });\n });\n\n stream.on(\"error\", (err: Error) => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timer);\n reject(err);\n });\n });\n }\n\n private postProcessOutput(output: string, _truncated: boolean): string {\n let result = output;\n\n // Mask secrets\n if (Object.keys(this.secrets).length > 0) {\n result = maskSecrets(result, this.secrets);\n }\n\n // Trim trailing whitespace\n return result.trimEnd();\n }\n\n /**\n * Remove all isol8 containers (both running and stopped).\n *\n * This static utility method finds and removes all containers created by isol8,\n * identified by images starting with `isol8:` or `isol8-custom:`.\n *\n * @param docker - Optional Docker instance. If not provided, creates a new one.\n * @returns Promise resolving to an object with counts of removed and failed containers.\n *\n * @example\n * ```typescript\n * import { DockerIsol8 } from \"isol8\";\n *\n * // Remove all isol8 containers\n * const result = await DockerIsol8.cleanup();\n * console.log(`Removed ${result.removed} containers`);\n * if (result.failed > 0) {\n * console.log(`Failed to remove ${result.failed} containers`);\n * }\n * ```\n */\n static async cleanup(\n docker?: Docker\n ): Promise<{ removed: number; failed: number; errors: string[] }> {\n const dockerInstance = docker ?? new Docker();\n\n // Find all isol8 containers\n const containers = await dockerInstance.listContainers({ all: true });\n const isol8Containers = containers.filter(\n (c) => c.Image.startsWith(\"isol8:\") || c.Image.startsWith(\"isol8-custom:\")\n );\n\n let removed = 0;\n let failed = 0;\n const errors: string[] = [];\n\n for (const containerInfo of isol8Containers) {\n try {\n const container = dockerInstance.getContainer(containerInfo.Id);\n await container.remove({ force: true });\n removed++;\n } catch (err) {\n failed++;\n const errorMsg = err instanceof Error ? err.message : String(err);\n errors.push(`${containerInfo.Id.slice(0, 12)}: ${errorMsg}`);\n }\n }\n\n return { removed, failed, errors };\n }\n}\n",
|
|
8
8
|
"/**\n * @module runtime/adapter\n *\n * Defines the {@link RuntimeAdapter} interface and the global {@link RuntimeRegistry}\n * for looking up runtime adapters by name or file extension.\n */\n\nimport type { Runtime } from \"../types\";\n\n/**\n * A runtime adapter provides the container image and command construction\n * for a specific language runtime (Python, Node, Bun, Deno).\n *\n * Adapters are registered in {@link RuntimeRegistry} and looked up by name\n * or by file extension when the runtime is auto-detected.\n */\nexport interface RuntimeAdapter {\n /** Runtime identifier (e.g. `\"python\"`, `\"node\"`). */\n readonly name: Runtime;\n\n /** Docker image tag for this runtime (e.g. `\"isol8:python\"`). */\n readonly image: string;\n\n /**\n * Build the shell command to execute code.\n *\n * @param code - The source code string. Used for inline execution.\n * @param filePath - If provided, the code is read from this file inside the container.\n * @returns Command array (e.g. `[\"python3\", \"-c\", \"print(1)\"]`).\n */\n getCommand(code: string, filePath?: string): string[];\n\n /** Default file extension for this runtime (e.g. `\".py\"`). */\n getFileExtension(): string;\n}\n\nconst adapters = new Map<string, RuntimeAdapter>();\n\nconst extensionMap = new Map<string, RuntimeAdapter>();\n\n/**\n * Central registry of all available runtime adapters.\n *\n * Built-in adapters (Python, Node, Bun, Deno) are registered automatically\n * when `src/runtime/index.ts` is imported.\n */\nexport const RuntimeRegistry = {\n /**\n * Register a runtime adapter. Overwrites any existing adapter with the same\n * name or file extension.\n */\n register(adapter: RuntimeAdapter): void {\n adapters.set(adapter.name, adapter);\n extensionMap.set(adapter.getFileExtension(), adapter);\n },\n\n /**\n * Look up a runtime adapter by name.\n *\n * @param name - Runtime name (e.g. `\"python\"`).\n * @throws {Error} If no adapter is registered with that name.\n */\n get(name: string): RuntimeAdapter {\n const adapter = adapters.get(name);\n if (!adapter) {\n throw new Error(`Unknown runtime: \"${name}\". Available: ${[...adapters.keys()].join(\", \")}`);\n }\n return adapter;\n },\n\n /**\n * Auto-detect the runtime from a filename's extension.\n *\n * @param filename - Filename or path (e.g. `\"script.py\"`, `\"app.js\"`).\n * @throws {Error} If the extension doesn't match any registered adapter.\n */\n detect(filename: string): RuntimeAdapter {\n const ext = `.${filename.split(\".\").pop()}`;\n const adapter = extensionMap.get(ext);\n if (!adapter) {\n throw new Error(\n `Cannot detect runtime for \"${filename}\". Known extensions: ${[...extensionMap.keys()].join(\", \")}`\n );\n }\n return adapter;\n },\n\n /** Returns all registered runtime adapters. */\n list(): RuntimeAdapter[] {\n return [...adapters.values()];\n },\n};\n",
|
|
9
9
|
"import type { RuntimeAdapter } from \"../adapter\";\n\nexport const bashAdapter: RuntimeAdapter = {\n name: \"bash\",\n image: \"isol8:bash\",\n getCommand(code: string, filePath?: string): string[] {\n if (filePath) {\n return [\"bash\", filePath];\n }\n return [\"bash\", \"-c\", code];\n },\n getFileExtension() {\n return \".sh\";\n },\n};\n",
|
|
10
10
|
"/** Bun runtime adapter — uses `bun` from the `isol8:bun` image. Maps to `.ts` extension. */\nimport type { RuntimeAdapter } from \"../adapter\";\n\nexport const BunAdapter: RuntimeAdapter = {\n name: \"bun\",\n image: \"isol8:bun\",\n\n getCommand(code: string, filePath?: string): string[] {\n if (filePath) {\n return [\"bun\", \"run\", filePath];\n }\n return [\"bun\", \"-e\", code];\n },\n\n getFileExtension(): string {\n return \".ts\";\n },\n};\n",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"/**\n * @module server/auth\n *\n * Bearer token authentication middleware for the Hono server.\n * Skips auth for the `/health` endpoint.\n */\n\nimport type { Context, Next } from \"hono\";\n\n/**\n * Creates a Hono middleware that validates `Authorization: Bearer <token>` headers.\n * Returns 401 if the header is missing, 403 if the token is invalid.\n * The `/health` endpoint is excluded from auth checks.\n *\n * @param apiKey - The expected API key.\n */\nexport function authMiddleware(apiKey: string) {\n return async (c: Context, next: Next) => {\n // Skip auth for health check\n if (c.req.path === \"/health\") {\n return next();\n }\n\n const authHeader = c.req.header(\"Authorization\");\n if (!authHeader) {\n return c.json({ error: \"Missing Authorization header\" }, 401);\n }\n\n const token = authHeader.replace(/^Bearer\\s+/i, \"\");\n if (token !== apiKey) {\n return c.json({ error: \"Invalid API key\" }, 403);\n }\n\n return next();\n };\n}\n",
|
|
20
20
|
"/**\n * @module version\n *\n * Exports the current version of isol8.\n */\n\nimport packageJson from \"../package.json\";\n\n/**\n * Current version of isol8.\n * @example\n * ```typescript\n * import { VERSION } from \"isol8\";\n * console.log(`Using isol8 v${VERSION}`);\n * ```\n */\nexport const VERSION = packageJson.version;\n"
|
|
21
21
|
],
|
|
22
|
-
"mappings": "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",
|
|
23
|
-
"debugId": "
|
|
22
|
+
"mappings": "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",
|
|
23
|
+
"debugId": "E29B0D9338BB963564756E2164756E21",
|
|
24
24
|
"names": []
|
|
25
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../src/engine/docker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,MAAM,MAAM,WAAW,CAAC;AAG/B,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,WAAW,EAEX,YAAY,EAGZ,WAAW,EACZ,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../src/engine/docker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,MAAM,MAAM,WAAW,CAAC;AAG/B,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,WAAW,EAEX,YAAY,EAGZ,WAAW,EACZ,MAAM,UAAU,CAAC;AA+OlB,2HAA2H;AAC3H,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,WAAY,YAAW,WAAW;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,IAAI,CAA8B;IAE1C;;;OAGG;gBACS,OAAO,GAAE,kBAAuB,EAAE,aAAa,SAAK;IAkBhE;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,kFAAkF;IAC5E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B;;;OAGG;IACG,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAW9D;;;;;;;OAOG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE;;;;;;OAMG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB5C,6GAA6G;IAC7G,IAAI,WAAW,IAAI,MAAM,GAAG,IAAI,CAE/B;IAED;;;OAGG;IACI,aAAa,CAAC,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAAC,WAAW,CAAC;YA+EzD,YAAY;YAcZ,gBAAgB;YAmGhB,iBAAiB;YA4FjB,aAAa;YAkBb,oBAAoB;YASpB,wBAAwB;IA2BtC,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,eAAe;IAsBvB,OAAO,CAAC,QAAQ;YAmCD,gBAAgB;YA8EjB,iBAAiB;IA8D/B,OAAO,CAAC,iBAAiB;IAYzB;;;;;;;;;;;;;;;;;;;;OAoBG;WACU,OAAO,CAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CA2BlE"}
|