@isol8/core 0.15.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/remote.d.ts +11 -1
- package/dist/client/remote.d.ts.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -3
- package/dist/index.js.map +5 -5
- package/dist/types.d.ts +30 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/schema/isol8.config.schema.json +26 -0
package/dist/client/remote.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* {@link Isol8Engine} interface, so it can be used interchangeably with
|
|
6
6
|
* {@link DockerIsol8} for local-vs-remote execution.
|
|
7
7
|
*/
|
|
8
|
-
import type { ExecutionRequest, ExecutionResult, Isol8Engine, Isol8Options, StartOptions, StreamEvent } from "../types";
|
|
8
|
+
import type { ExecutionRequest, ExecutionResult, Isol8Engine, Isol8Options, SessionInfo, StartOptions, StreamEvent } from "../types";
|
|
9
9
|
/** Connection options for the remote isol8 client. */
|
|
10
10
|
export interface RemoteIsol8Options {
|
|
11
11
|
/** Base URL of the isol8 server (e.g. `"http://localhost:3000"`). */
|
|
@@ -71,6 +71,16 @@ export declare class RemoteIsol8 implements Isol8Engine {
|
|
|
71
71
|
putFile(path: string, content: Buffer | string): Promise<void>;
|
|
72
72
|
/** Download a file from the remote container (persistent mode only). */
|
|
73
73
|
getFile(path: string): Promise<Buffer>;
|
|
74
|
+
/**
|
|
75
|
+
* List all active sessions on the remote server.
|
|
76
|
+
* Requires authentication but no session ID.
|
|
77
|
+
*/
|
|
78
|
+
listSessions(): Promise<SessionInfo[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Delete a specific session on the remote server by ID.
|
|
81
|
+
* The session's container is stopped and removed.
|
|
82
|
+
*/
|
|
83
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
74
84
|
/** Internal fetch wrapper that attaches auth and content-type headers. */
|
|
75
85
|
private fetch;
|
|
76
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/client/remote.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EAEZ,MAAM,UAAU,CAAC;AAElB,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IACjC,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,0GAA0G;IAC1G,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,WAAY,YAAW,WAAW;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAe;IAC7C,gFAAgF;IAChF,OAAO,CAAC,WAAW,CAAwB;IAE3C;;;OAGG;gBACS,OAAO,EAAE,kBAAkB,EAAE,YAAY,CAAC,EAAE,YAAY;IAOpE,+EAA+E;IACzE,KAAK,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD,4EAA4E;IACtE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,+DAA+D;IACzD,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAkB9D;;;;OAIG;IACI,aAAa,CAAC,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAAC,WAAW,CAAC;IAoBvE;;;OAGG;YACY,eAAe;IA+F9B;;;OAGG;YACY,gBAAgB;IA0D/B;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBpE,wEAAwE;IAClE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgB5C,0EAA0E;YAC5D,KAAK;CAUpB"}
|
|
1
|
+
{"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../src/client/remote.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EAEZ,MAAM,UAAU,CAAC;AAElB,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IACjC,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,0GAA0G;IAC1G,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,WAAY,YAAW,WAAW;IAC7C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAe;IAC7C,gFAAgF;IAChF,OAAO,CAAC,WAAW,CAAwB;IAE3C;;;OAGG;gBACS,OAAO,EAAE,kBAAkB,EAAE,YAAY,CAAC,EAAE,YAAY;IAOpE,+EAA+E;IACzE,KAAK,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD,4EAA4E;IACtE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,+DAA+D;IACzD,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAkB9D;;;;OAIG;IACI,aAAa,CAAC,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAAC,WAAW,CAAC;IAoBvE;;;OAGG;YACY,eAAe;IA+F9B;;;OAGG;YACY,gBAAgB;IA0D/B;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBpE,wEAAwE;IAClE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgB5C;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAY5C;;;OAGG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrD,0EAA0E;YAC5D,KAAK;CAUpB"}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;;GAGG;AACH,QAAA,MAAM,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;;GAGG;AACH,QAAA,MAAM,cAAc,EAAE,WA+DrB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,CAepD;AAqDD,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export { DockerIsol8 } from "./engine/docker";
|
|
|
13
13
|
export { buildBaseImages, buildCustomImage, buildCustomImages, getCustomImageTag, } from "./engine/image-builder";
|
|
14
14
|
export { BunAdapter, bashAdapter, DenoAdapter, NodeAdapter, PythonAdapter, RuntimeRegistry, } from "./runtime";
|
|
15
15
|
export type { RuntimeAdapter } from "./runtime/adapter";
|
|
16
|
-
export type { ExecutionRequest, ExecutionResult, Isol8Config, Isol8Engine, Isol8Mode, Isol8Options, NetworkFilterConfig, NetworkMode, RemoteCodePolicy, Runtime, StreamEvent, WsClientMessage, WsServerMessage, } from "./types";
|
|
16
|
+
export type { AuthConfig, ExecutionRequest, ExecutionResult, Isol8Config, Isol8Engine, Isol8Mode, Isol8Options, NetworkFilterConfig, NetworkMode, RemoteCodePolicy, Runtime, SessionInfo, StreamEvent, WsClientMessage, WsServerMessage, } from "./types";
|
|
17
17
|
export { logger } from "./utils/logger";
|
|
18
18
|
export { VERSION } from "./version";
|
|
19
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,WAAW,EACX,SAAS,EACT,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,eAAe,EACf,eAAe,GAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,eAAe,GAChB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,WAAW,EACX,SAAS,EACT,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,WAAW,EACX,WAAW,EACX,eAAe,EACf,eAAe,GAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -776,6 +776,22 @@ class RemoteIsol8 {
|
|
|
776
776
|
const body = await res.json();
|
|
777
777
|
return Buffer.from(body.content, "base64");
|
|
778
778
|
}
|
|
779
|
+
async listSessions() {
|
|
780
|
+
const res = await this.fetch("/sessions");
|
|
781
|
+
if (!res.ok) {
|
|
782
|
+
const body2 = await res.json().catch(() => ({}));
|
|
783
|
+
throw new Error(`Failed to list sessions: ${body2.error ?? res.statusText}`);
|
|
784
|
+
}
|
|
785
|
+
const body = await res.json();
|
|
786
|
+
return body.sessions;
|
|
787
|
+
}
|
|
788
|
+
async deleteSession(sessionId) {
|
|
789
|
+
const res = await this.fetch(`/session/${sessionId}`, { method: "DELETE" });
|
|
790
|
+
if (!res.ok) {
|
|
791
|
+
const body = await res.json().catch(() => ({}));
|
|
792
|
+
throw new Error(`Failed to delete session: ${body.error ?? res.statusText}`);
|
|
793
|
+
}
|
|
794
|
+
}
|
|
779
795
|
async fetch(path, init) {
|
|
780
796
|
return globalThis.fetch(`${this.host}${path}`, {
|
|
781
797
|
...init,
|
|
@@ -848,6 +864,11 @@ var DEFAULT_CONFIG = {
|
|
|
848
864
|
includeCode: false,
|
|
849
865
|
includeOutput: false
|
|
850
866
|
},
|
|
867
|
+
auth: {
|
|
868
|
+
enabled: false,
|
|
869
|
+
defaultTtlMs: 86400000,
|
|
870
|
+
cleanupIntervalMs: 3600000
|
|
871
|
+
},
|
|
851
872
|
debug: false
|
|
852
873
|
};
|
|
853
874
|
function loadConfig(cwd) {
|
|
@@ -901,6 +922,10 @@ function mergeConfig(defaults, overrides) {
|
|
|
901
922
|
...defaults.audit,
|
|
902
923
|
...overrides.audit
|
|
903
924
|
},
|
|
925
|
+
auth: {
|
|
926
|
+
...defaults.auth,
|
|
927
|
+
...overrides.auth
|
|
928
|
+
},
|
|
904
929
|
debug: overrides.debug ?? defaults.debug
|
|
905
930
|
};
|
|
906
931
|
}
|
|
@@ -2835,7 +2860,7 @@ init_logger();
|
|
|
2835
2860
|
// package.json
|
|
2836
2861
|
var package_default = {
|
|
2837
2862
|
name: "@isol8/core",
|
|
2838
|
-
version: "0.
|
|
2863
|
+
version: "0.17.0",
|
|
2839
2864
|
description: "Sandboxed code execution engine for AI agents and apps (Docker, runtime and network controls)",
|
|
2840
2865
|
author: "Illusion47586",
|
|
2841
2866
|
license: "MIT",
|
|
@@ -2863,7 +2888,7 @@ var package_default = {
|
|
|
2863
2888
|
"test:prod": "echo 'No production tests in core package'",
|
|
2864
2889
|
"lint:check": "ultracite check",
|
|
2865
2890
|
"lint:fix": "ultracite fix",
|
|
2866
|
-
schema: "ts-json-schema-generator --path src/types.ts --type Isol8UserConfig --tsconfig tsconfig.json -o schema/isol8.config.schema.json && ultracite fix schema/isol8.config.schema.json"
|
|
2891
|
+
schema: "ts-json-schema-generator --path src/types.ts --type Isol8UserConfig --tsconfig tsconfig.json --no-type-check -o schema/isol8.config.schema.json && ultracite fix schema/isol8.config.schema.json"
|
|
2867
2892
|
},
|
|
2868
2893
|
dependencies: {
|
|
2869
2894
|
dockerode: "^4.0.9",
|
|
@@ -2919,4 +2944,4 @@ export {
|
|
|
2919
2944
|
BunAdapter
|
|
2920
2945
|
};
|
|
2921
2946
|
|
|
2922
|
-
//# debugId=
|
|
2947
|
+
//# debugId=52A84C2338D09E5564756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
"/**\n * @module logger\n *\n * Centralized logging utility for isol8.\n * Supports debug mode toggling and standardized log formatting.\n */\n\nclass Logger {\n private debugMode = false;\n\n /**\n * Enable or disable debug logging.\n */\n setDebug(enabled: boolean) {\n this.debugMode = enabled;\n }\n\n /**\n * Log a debug message. Only prints if debug mode is enabled.\n */\n debug(...args: unknown[]) {\n if (this.debugMode) {\n console.log(\"[DEBUG]\", ...args);\n }\n }\n\n /**\n * Log an info message. Always prints.\n */\n info(...args: unknown[]) {\n console.log(...args);\n }\n\n /**\n * Log a warning message. Always prints.\n */\n warn(...args: unknown[]) {\n console.warn(\"[WARN]\", ...args);\n }\n\n /**\n * Log an error message. Always prints.\n */\n error(...args: unknown[]) {\n console.error(\"[ERROR]\", ...args);\n }\n}\n\nexport const logger = new Logger();\n",
|
|
13
13
|
"/**\n * @module engine/utils\n *\n * Low-level utility functions used by the Docker engine: memory parsing,\n * output truncation, secret masking, and POSIX tar archive creation/extraction.\n */\n\n/**\n * Parses a human-readable memory limit string into bytes.\n *\n * @param limit - Memory string (e.g. `\"512m\"`, `\"1g\"`, `\"256k\"`, `\"1024\"`).\n * @returns The limit in bytes.\n * @throws {Error} If the format is invalid.\n *\n * @example\n * ```typescript\n * parseMemoryLimit(\"512m\"); // 536870912\n * parseMemoryLimit(\"1g\"); // 1073741824\n * ```\n */\nexport function parseMemoryLimit(limit: string): number {\n const match = limit.match(/^(\\d+(?:\\.\\d+)?)\\s*([kmgt]?)b?$/i);\n if (!match) {\n throw new Error(`Invalid memory limit format: \"${limit}\". Use e.g. \"512m\", \"1g\".`);\n }\n const value = Number.parseFloat(match[1]!);\n const unit = (match[2] || \"b\").toLowerCase();\n\n const multipliers: Record<string, number> = {\n b: 1,\n k: 1024,\n m: 1024 ** 2,\n g: 1024 ** 3,\n t: 1024 ** 4,\n };\n\n return Math.floor(value * (multipliers[unit] ?? 1));\n}\n\n/**\n * Truncates output to a maximum byte length. If truncated, appends a\n * summary line indicating the original and limit sizes.\n *\n * @param output - The full output string.\n * @param maxBytes - Maximum allowed byte length.\n * @returns Object with the (possibly truncated) text and a truncation flag.\n */\nexport function truncateOutput(\n output: string,\n maxBytes: number\n): { text: string; truncated: boolean } {\n const encoder = new TextEncoder();\n const bytes = encoder.encode(output);\n\n if (bytes.length <= maxBytes) {\n return { text: output, truncated: false };\n }\n\n // Truncate at byte boundary, decode back\n const decoder = new TextDecoder(\"utf-8\", { fatal: false });\n const truncated = decoder.decode(bytes.slice(0, maxBytes));\n return {\n text: `${truncated}\\n\\n--- OUTPUT TRUNCATED (${bytes.length} bytes, limit: ${maxBytes}) ---`,\n truncated: true,\n };\n}\n\n/**\n * Replaces all occurrences of secret values in a string with `***`.\n * Empty secret values are skipped.\n *\n * @param text - The text to sanitize.\n * @param secrets - Map of secret names to values.\n * @returns The sanitized text.\n */\nexport function maskSecrets(text: string, secrets: Record<string, string>): string {\n let result = text;\n for (const value of Object.values(secrets)) {\n if (value.length > 0) {\n result = result.replaceAll(value, \"***\");\n }\n }\n return result;\n}\n\n/**\n * Creates a POSIX tar archive buffer containing a single file.\n *\n * Uses a minimal tar header (512-byte blocks) followed by data blocks\n * and a 1024-byte end-of-archive marker.\n *\n * @param filePath - Path for the file inside the archive (leading `/` is stripped).\n * @param content - File contents as a string or Buffer.\n * @returns A Buffer containing the complete tar archive.\n */\nexport function createTarBuffer(filePath: string, content: Buffer | string): Buffer {\n const data = typeof content === \"string\" ? Buffer.from(content, \"utf-8\") : content;\n const headerSize = 512;\n const dataBlocks = Math.ceil(data.length / 512);\n const totalSize = headerSize + dataBlocks * 512 + 1024; // +1024 for end-of-archive\n const buf = Buffer.alloc(totalSize);\n\n // Filename (0..100)\n buf.write(filePath.replace(/^\\//, \"\"), 0, 100, \"utf-8\");\n // Mode (100..108)\n buf.write(\"0000644\\0\", 100, 8, \"utf-8\");\n // UID (108..116)\n buf.write(\"0000000\\0\", 108, 8, \"utf-8\");\n // GID (116..124)\n buf.write(\"0000000\\0\", 116, 8, \"utf-8\");\n // Size (124..136) - octal\n buf.write(`${data.length.toString(8).padStart(11, \"0\")}\\0`, 124, 12, \"utf-8\");\n // Mtime (136..148)\n buf.write(\n `${Math.floor(Date.now() / 1000)\n .toString(8)\n .padStart(11, \"0\")}\\0`,\n 136,\n 12,\n \"utf-8\"\n );\n // Type flag (156) - '0' = regular file\n buf.write(\"0\", 156, 1, \"utf-8\");\n // Magic (257..263)\n buf.write(\"ustar\\0\", 257, 6, \"utf-8\");\n // Version (263..265)\n buf.write(\"00\", 263, 2, \"utf-8\");\n\n // Compute checksum\n // First fill checksum field with spaces\n buf.write(\" \", 148, 8, \"utf-8\");\n let checksum = 0;\n for (let i = 0; i < headerSize; i++) {\n checksum += buf[i]!;\n }\n buf.write(`${checksum.toString(8).padStart(6, \"0\")}\\0 `, 148, 8, \"utf-8\");\n\n // Write data\n data.copy(buf, headerSize);\n\n return buf;\n}\n\n/**\n * Extracts a single file from a tar archive buffer.\n *\n * @param tarBuffer - The tar archive buffer.\n * @param targetPath - Path of the file to extract (leading `/` is stripped for matching).\n * @returns The extracted file contents as a Buffer.\n * @throws {Error} If the file is not found in the archive.\n */\nexport function extractFromTar(tarBuffer: Buffer, targetPath: string): Buffer {\n const normalizedTarget = targetPath.replace(/^\\//, \"\");\n const basename = targetPath.split(\"/\").pop() ?? targetPath;\n let offset = 0;\n\n while (offset < tarBuffer.length - 512) {\n // Read filename from header\n const nameEnd = tarBuffer.indexOf(0, offset);\n const name = tarBuffer.subarray(offset, Math.min(nameEnd, offset + 100)).toString(\"utf-8\");\n\n if (name.length === 0) {\n break;\n }\n\n // Read size\n const sizeStr = tarBuffer\n .subarray(offset + 124, offset + 136)\n .toString(\"utf-8\")\n .trim();\n const size = Number.parseInt(sizeStr, 8);\n\n if (Number.isNaN(size)) {\n break;\n }\n\n const dataStart = offset + 512;\n const dataBlocks = Math.ceil(size / 512);\n\n if (name === normalizedTarget || name.endsWith(`/${normalizedTarget}`) || name === basename) {\n return Buffer.from(tarBuffer.subarray(dataStart, dataStart + size));\n }\n\n offset = dataStart + dataBlocks * 512;\n }\n\n throw new Error(`File \"${targetPath}\" not found in tar archive`);\n}\n\n/**\n * Validates a package name to prevent command injection.\n * allow alphanumeric, dash, underscore, dot, @, / (for scoped packages), and = (for versions)\n *\n * @param name - The package name to validate.\n * @returns The name if valid.\n * @throws {Error} If the name contains invalid characters.\n */\nexport function validatePackageName(name: string): string {\n // Allow @scope/pkg, pkg@version, pkg==version, pkg-name, pkg_name, pkg.name\n if (!/^[@a-zA-Z0-9_./\\-=]+$/.test(name)) {\n throw new Error(\n `Invalid package name: \"${name}\". Only alphanumeric, -, _, ., /, @, and = are allowed.`\n );\n }\n return name;\n}\n",
|
|
14
14
|
"/**\n * @module engine/image-builder\n *\n * Builds Docker images for each supported runtime. Base images are built from\n * the multi-stage `docker/Dockerfile`. Custom images layer user-specified\n * packages on top of the base images.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport type Docker from \"dockerode\";\nimport { RuntimeRegistry } from \"../runtime\";\nimport type { Isol8Config } from \"../types\";\nimport { logger } from \"../utils/logger\";\n\n/**\n * Resolve the `docker/` directory containing the Dockerfile and proxy.\n *\n * When running from source (`src/engine/image-builder.ts`), the path is\n * `../../docker` relative to this file. When running from the bundled CLI\n * (`dist/cli.js`), it is `./docker` (same directory). We try both and use\n * whichever exists.\n */\nfunction resolveDockerDir(): string {\n // 1. Try relative to the current executable (for isol8-server standalone)\n // In a Bun compiled binary, process.execPath is the binary itself (e.g. dist/isol8-server).\n const fromExec = join(dirname(process.execPath), \"docker\");\n if (existsSync(fromExec) && statSync(fromExec).isDirectory()) {\n return fromExec;\n }\n\n // 2. Try production/bundled path: dist/cli.js -> ./docker\n // Guard against $bunfs paths which are virtual and won't resolve correctly on real FS\n if (!import.meta.url.includes(\"$bunfs\")) {\n const fromBundled = new URL(\"./docker\", import.meta.url).pathname;\n if (existsSync(fromBundled)) {\n return fromBundled;\n }\n }\n\n // 3. Fallback to dev path: src/engine/image-builder.ts -> ../../docker\n // When running via `bun run src/cli.ts` or tests\n if (!import.meta.url.includes(\"$bunfs\")) {\n const fromDev = new URL(\"../../docker\", import.meta.url).pathname;\n if (existsSync(fromDev)) {\n return fromDev;\n }\n }\n\n // 4. Last resort: current working directory (e.g. tests running from repo root)\n const fromCwd = join(process.cwd(), \"docker\");\n if (existsSync(fromCwd)) {\n return fromCwd;\n }\n\n // Default fallback (will likely throw but provides a predictable path)\n return new URL(\"../../docker\", import.meta.url).pathname;\n}\n\nconst DOCKERFILE_DIR = resolveDockerDir();\n\n/** Label keys for image metadata */\nconst LABELS = {\n dockerHash: \"org.isol8.build.hash\",\n depsHash: \"org.isol8.deps.hash\",\n} as const;\n\n/** Files in docker directory that affect the build */\nconst DOCKER_BUILD_FILES = [\"Dockerfile\", \"proxy.sh\", \"proxy-handler.sh\"];\n\n/**\n * Computes a SHA256 hash of all relevant files in the docker directory.\n * This is used to detect when the Dockerfile or proxy scripts have changed.\n */\nfunction computeDockerDirHash(): string {\n const hash = createHash(\"sha256\");\n\n // Sort files for consistent hashing\n const files = [...DOCKER_BUILD_FILES].sort();\n\n for (const file of files) {\n const filePath = join(DOCKERFILE_DIR, file);\n if (existsSync(filePath)) {\n const content = readFileSync(filePath);\n hash.update(file);\n hash.update(content);\n }\n }\n\n return hash.digest(\"hex\");\n}\n\n/**\n * Computes a SHA256 hash of the dependency list for a specific runtime.\n */\nfunction computeDepsHash(runtime: string, packages: string[]): string {\n const hash = createHash(\"sha256\");\n hash.update(runtime);\n // Sort packages for consistent hashing\n for (const pkg of [...packages].sort()) {\n hash.update(pkg);\n }\n return hash.digest(\"hex\");\n}\n\n/**\n * Normalize package lists for stable tags/cache hits.\n * - trims whitespace\n * - removes empty entries\n * - de-duplicates\n * - sorts lexicographically\n */\nexport function normalizePackages(packages: string[]): string[] {\n return [...new Set(packages.map((pkg) => pkg.trim()).filter(Boolean))].sort();\n}\n\n/**\n * Returns deterministic custom image tag for a runtime + package set.\n * Uses a short deps hash suffix to avoid tag collisions across different\n * dependency sets for the same runtime.\n */\nexport function getCustomImageTag(runtime: string, packages: string[]): string {\n const normalizedPackages = normalizePackages(packages);\n const depsHash = computeDepsHash(runtime, normalizedPackages);\n const shortHash = depsHash.slice(0, 12);\n return `isol8:${runtime}-custom-${shortHash}`;\n}\n\n/**\n * Gets the labels from an existing Docker image.\n * Returns null if the image doesn't exist.\n */\nasync function getImageLabels(\n docker: Docker,\n imageName: string\n): Promise<Record<string, string> | null> {\n try {\n const image = docker.getImage(imageName);\n const inspect = await image.inspect();\n return (inspect.Config?.Labels as Record<string, string>) ?? {};\n } catch {\n return null;\n }\n}\n\n/**\n * Removes a Docker image by ID.\n * Silently fails if the image doesn't exist or can't be removed.\n */\nasync function removeImage(docker: Docker, imageId: string): Promise<void> {\n try {\n const image = docker.getImage(imageId);\n await image.remove();\n logger.debug(`[ImageBuilder] Removed old image: ${imageId.slice(0, 12)}`);\n } catch (err) {\n // Image might be in use or already removed - log but don't fail\n logger.debug(`[ImageBuilder] Could not remove image ${imageId.slice(0, 12)}: ${err}`);\n }\n}\n\n/** Progress update emitted during image builds. */\ninterface BuildProgress {\n /** Runtime being built (e.g. `\"python\"`). */\n runtime: string;\n /** Current build status. */\n status: \"building\" | \"done\" | \"error\";\n /** Optional status message (error text, package list, etc). */\n message?: string;\n}\n\ntype ProgressCallback = (progress: BuildProgress) => void;\n\n/**\n * Builds the base `isol8:<runtime>` images for all registered runtimes.\n * Each image is built from the multi-stage Dockerfile in `docker/`.\n *\n * Uses smart build logic: computes a hash of the docker directory contents\n * and skips builds if the image already exists with matching hash.\n * Cleans up dangling images after rebuilding.\n *\n * @param docker - Dockerode instance.\n * @param onProgress - Optional callback for build progress updates.\n * @param force - If true, always rebuild even if image is up to date.\n */\nexport async function buildBaseImages(\n docker: Docker,\n onProgress?: ProgressCallback,\n force = false,\n onlyRuntimes?: string[]\n): Promise<void> {\n const allRuntimes = RuntimeRegistry.list();\n const runtimes = onlyRuntimes\n ? allRuntimes.filter((r) => onlyRuntimes.includes(r.name))\n : allRuntimes;\n const dockerHash = computeDockerDirHash();\n logger.debug(`[ImageBuilder] Docker directory hash: ${dockerHash.slice(0, 16)}...`);\n\n for (const adapter of runtimes) {\n const target = adapter.name;\n const imageName = adapter.image;\n\n // Check if we can skip the build\n if (!force) {\n const labels = await getImageLabels(docker, imageName);\n if (labels && labels[LABELS.dockerHash] === dockerHash) {\n logger.debug(`[ImageBuilder] Base image ${target} is up to date, skipping build`);\n onProgress?.({ runtime: target, status: \"done\", message: \"Up to date\" });\n continue;\n }\n }\n\n // Get the old image ID before building (for cleanup)\n let oldImageId: string | null = null;\n try {\n const oldImage = await docker.getImage(imageName).inspect();\n oldImageId = oldImage.Id;\n logger.debug(`[ImageBuilder] Existing image ${target} ID: ${oldImageId.slice(0, 12)}`);\n } catch {\n // Image doesn't exist yet\n logger.debug(`[ImageBuilder] No existing image for ${target}`);\n }\n\n onProgress?.({ runtime: target, status: \"building\" });\n\n try {\n const stream = await docker.buildImage(\n { context: DOCKERFILE_DIR, src: DOCKER_BUILD_FILES },\n {\n t: imageName,\n target,\n dockerfile: \"Dockerfile\",\n labels: {\n [LABELS.dockerHash]: dockerHash,\n },\n }\n );\n\n // Wait for build to complete\n await new Promise<void>((resolve, reject) => {\n docker.modem.followProgress(stream, (err) => {\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n });\n });\n\n // Clean up the old image if it existed and was replaced\n if (oldImageId) {\n await removeImage(docker, oldImageId);\n }\n\n onProgress?.({ runtime: target, status: \"done\" });\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n onProgress?.({ runtime: target, status: \"error\", message });\n throw new Error(`Failed to build image for ${target}: ${message}`);\n }\n }\n}\n\n/**\n * Builds custom images with user-specified dependencies layered on top of\n * the base images. Reads package lists from the config's `dependencies` field.\n *\n * Uses smart build logic: computes a hash of the dependency list and\n * skips builds if the image already exists with matching hash.\n * Cleans up dangling images after rebuilding.\n *\n * @param docker - Dockerode instance.\n * @param config - Resolved isol8 configuration.\n * @param onProgress - Optional callback for build progress updates.\n * @param force - If true, always rebuild even if image is up to date.\n */\nexport async function buildCustomImages(\n docker: Docker,\n config: Isol8Config,\n onProgress?: ProgressCallback,\n force = false\n): Promise<void> {\n const deps = config.dependencies;\n\n const python = deps.python ? normalizePackages(deps.python) : [];\n const node = deps.node ? normalizePackages(deps.node) : [];\n const bun = deps.bun ? normalizePackages(deps.bun) : [];\n const deno = deps.deno ? normalizePackages(deps.deno) : [];\n const bash = deps.bash ? normalizePackages(deps.bash) : [];\n\n if (python.length) {\n await buildCustomImage(docker, \"python\", python, onProgress, force);\n }\n if (node.length) {\n await buildCustomImage(docker, \"node\", node, onProgress, force);\n }\n if (bun.length) {\n await buildCustomImage(docker, \"bun\", bun, onProgress, force);\n }\n if (deno.length) {\n await buildCustomImage(docker, \"deno\", deno, onProgress, force);\n }\n if (bash.length) {\n await buildCustomImage(docker, \"bash\", bash, onProgress, force);\n }\n}\n\nexport async function buildCustomImage(\n docker: Docker,\n runtime: import(\"../types\").Runtime | string,\n packages: string[],\n onProgress?: ProgressCallback,\n force = false\n): Promise<void> {\n const normalizedPackages = normalizePackages(packages);\n const tag = getCustomImageTag(runtime, normalizedPackages);\n const depsHash = computeDepsHash(runtime, normalizedPackages);\n logger.debug(`[ImageBuilder] ${runtime} custom deps hash: ${depsHash.slice(0, 16)}...`);\n\n // Check if we can skip the build\n if (!force) {\n const labels = await getImageLabels(docker, tag);\n if (labels && labels[LABELS.depsHash] === depsHash) {\n logger.debug(`[ImageBuilder] Custom image ${runtime} is up to date, skipping build`);\n onProgress?.({ runtime, status: \"done\", message: \"Up to date\" });\n return;\n }\n }\n\n // Get the old image ID before building (for cleanup)\n let oldImageId: string | null = null;\n try {\n const oldImage = await docker.getImage(tag).inspect();\n oldImageId = oldImage.Id;\n logger.debug(`[ImageBuilder] Existing custom image ${runtime} ID: ${oldImageId.slice(0, 12)}`);\n } catch {\n // Image doesn't exist yet\n logger.debug(`[ImageBuilder] No existing custom image for ${runtime}`);\n }\n\n onProgress?.({\n runtime,\n status: \"building\",\n message: `Custom: ${normalizedPackages.join(\", \")}`,\n });\n\n // Generate a Dockerfile that extends the base image\n let installCmd: string;\n switch (runtime) {\n case \"python\":\n installCmd = `RUN pip install --no-cache-dir ${normalizedPackages.join(\" \")}`;\n break;\n case \"node\":\n installCmd = `RUN npm install -g ${normalizedPackages.join(\" \")}`;\n break;\n case \"bun\":\n installCmd = `RUN bun install -g ${normalizedPackages.join(\" \")}`;\n break;\n case \"deno\":\n // Deno uses URL imports, but we can pre-cache\n installCmd = normalizedPackages.map((p) => `RUN deno cache ${p}`).join(\"\\n\");\n break;\n case \"bash\":\n installCmd = `RUN apk add --no-cache ${normalizedPackages.join(\" \")}`;\n break;\n default:\n throw new Error(`Unknown runtime: ${runtime}`);\n }\n\n const dockerfileContent = `FROM isol8:${runtime}\\n${installCmd}\\n`;\n\n // Build using dockerode with an inline tar containing just the Dockerfile\n const { createTarBuffer, validatePackageName } = await import(\"./utils\");\n const { Readable } = await import(\"node:stream\");\n\n // Validate all packages before building\n normalizedPackages.forEach(validatePackageName);\n\n const tarBuffer = createTarBuffer(\"Dockerfile\", dockerfileContent);\n\n const stream = await docker.buildImage(Readable.from(tarBuffer), {\n t: tag,\n dockerfile: \"Dockerfile\",\n labels: {\n [LABELS.depsHash]: depsHash,\n },\n });\n\n await new Promise<void>((resolve, reject) => {\n docker.modem.followProgress(stream, (err) => {\n if (err) {\n reject(err);\n } else {\n resolve();\n }\n });\n });\n\n // Clean up the old image if it existed and was replaced\n if (oldImageId) {\n await removeImage(docker, oldImageId);\n }\n\n onProgress?.({ runtime, status: \"done\" });\n}\n\n/**\n * Checks if an image exists locally.\n */\nexport async function imageExists(docker: Docker, imageName: string): Promise<boolean> {\n try {\n await docker.getImage(imageName).inspect();\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Ensures all base images are built.\n */\nexport async function ensureImages(docker: Docker, onProgress?: ProgressCallback): Promise<void> {\n const runtimes = RuntimeRegistry.list();\n\n const missing: string[] = [];\n for (const adapter of runtimes) {\n if (!(await imageExists(docker, adapter.image))) {\n missing.push(adapter.name);\n }\n }\n\n if (missing.length > 0) {\n await buildBaseImages(docker, onProgress, false, missing);\n }\n}\n",
|
|
15
|
-
"/**\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 StartOptions,\n StreamEvent,\n WsClientMessage,\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 /** Whether WebSocket streaming is available on the server. `null` = unknown. */\n private wsAvailable: boolean | null = null;\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(_options?: StartOptions): 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.\n * Attempts WebSocket first, falls back to SSE if WebSocket is unavailable.\n * Yields {@link StreamEvent} objects as they arrive from the server.\n */\n async *executeStream(req: ExecutionRequest): AsyncIterable<StreamEvent> {\n // Try WebSocket if we haven't determined it's unavailable\n if (this.wsAvailable !== false) {\n try {\n yield* this.executeStreamWs(req);\n return;\n } catch (err) {\n // If WebSocket fails on first attempt, fall back to SSE\n if (this.wsAvailable === null) {\n this.wsAvailable = false;\n } else {\n throw err;\n }\n }\n }\n\n // Fall back to SSE\n yield* this.executeStreamSse(req);\n }\n\n /**\n * Execute code on the remote server and stream output chunks via WebSocket.\n * @internal\n */\n private async *executeStreamWs(req: ExecutionRequest): AsyncIterable<StreamEvent> {\n const wsUrl = `${this.host.replace(/^http/, \"ws\")}/execute/ws`;\n\n const events: StreamEvent[] = [];\n let resolve: (() => void) | null = null;\n let done = false;\n let wsError: Error | null = null;\n\n // Bun's WebSocket supports custom headers via a second options argument.\n // The standard WebSocket type doesn't include this, so we cast through unknown.\n const ws = new WebSocket(wsUrl, {\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n },\n } as never);\n\n const waitForEvent = (): Promise<void> =>\n new Promise<void>((r) => {\n if (events.length > 0 || done) {\n r();\n } else {\n resolve = r;\n }\n });\n\n ws.onopen = () => {\n this.wsAvailable = true;\n const msg: WsClientMessage = {\n type: \"execute\",\n request: req,\n ...(this.isol8Options ? { options: this.isol8Options } : {}),\n };\n ws.send(JSON.stringify(msg));\n };\n\n ws.onmessage = (evt) => {\n try {\n const event = JSON.parse(\n typeof evt.data === \"string\" ? evt.data : String(evt.data)\n ) as StreamEvent;\n events.push(event);\n if (resolve) {\n const r = resolve;\n resolve = null;\n r();\n }\n } catch {\n // Ignore malformed messages\n }\n };\n\n ws.onerror = () => {\n if (!done) {\n wsError = new Error(\"WebSocket connection failed\");\n done = true;\n if (resolve) {\n const r = resolve;\n resolve = null;\n r();\n }\n }\n };\n\n ws.onclose = () => {\n done = true;\n if (resolve) {\n const r = resolve;\n resolve = null;\n r();\n }\n };\n\n try {\n while (true) {\n await waitForEvent();\n\n if (wsError) {\n throw wsError;\n }\n\n while (events.length > 0) {\n yield events.shift()!;\n }\n\n if (done) {\n break;\n }\n }\n } finally {\n if (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING) {\n ws.close();\n }\n }\n }\n\n /**\n * Execute code on the remote server and stream output chunks via SSE.\n * @internal\n */\n private async *executeStreamSse(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",
|
|
16
|
-
"/**\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 readonlyRootFs: true,\n },\n network: {\n whitelist: [],\n blacklist: [],\n },\n cleanup: {\n autoPrune: true,\n maxContainerAgeMs: 3_600_000,\n },\n poolStrategy: \"fast\",\n poolSize: { clean: 1, dirty: 1 },\n dependencies: {},\n security: {\n seccomp: \"strict\",\n },\n remoteCode: {\n enabled: false,\n allowedSchemes: [\"https\"],\n allowedHosts: [],\n blockedHosts: [\n \"^localhost$\",\n \"^127(?:\\\\.[0-9]{1,3}){3}$\",\n \"^\\\\[::1\\\\]$\",\n \"^::1$\",\n \"^10(?:\\\\.[0-9]{1,3}){3}$\",\n \"^172\\\\.(?:1[6-9]|2[0-9]|3[0-1])(?:\\\\.[0-9]{1,3}){2}$\",\n \"^192\\\\.168(?:\\\\.[0-9]{1,3}){2}$\",\n \"^169\\\\.254(?:\\\\.[0-9]{1,3}){2}$\",\n \"^metadata\\\\.google\\\\.internal$\",\n \"^169\\\\.254\\\\.169\\\\.254$\",\n ],\n maxCodeSize: 10 * 1024 * 1024,\n fetchTimeoutMs: 30_000,\n requireHash: false,\n enableCache: true,\n cacheTtl: 3600,\n },\n audit: {\n enabled: false,\n destination: \"filesystem\",\n logDir: undefined,\n postLogScript: undefined,\n trackResources: true,\n retentionDays: 90,\n includeCode: false,\n includeOutput: false,\n },\n debug: false,\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 readonlyRootFs: overrides.defaults?.readonlyRootFs ?? defaults.defaults.readonlyRootFs,\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 poolStrategy: overrides.poolStrategy ?? defaults.poolStrategy,\n poolSize: overrides.poolSize ?? defaults.poolSize,\n dependencies: {\n ...defaults.dependencies,\n ...overrides.dependencies,\n },\n security: {\n seccomp: overrides.security?.seccomp ?? defaults.security.seccomp,\n customProfilePath:\n overrides.security?.customProfilePath ?? defaults.security.customProfilePath,\n },\n remoteCode: {\n ...defaults.remoteCode,\n ...overrides.remoteCode,\n allowedSchemes: overrides.remoteCode?.allowedSchemes ?? defaults.remoteCode.allowedSchemes,\n allowedHosts: overrides.remoteCode?.allowedHosts ?? defaults.remoteCode.allowedHosts,\n blockedHosts: overrides.remoteCode?.blockedHosts ?? defaults.remoteCode.blockedHosts,\n },\n audit: {\n ...defaults.audit,\n ...overrides.audit,\n },\n debug: overrides.debug ?? defaults.debug,\n };\n}\n\nexport { DEFAULT_CONFIG };\n",
|
|
15
|
+
"/**\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 SessionInfo,\n StartOptions,\n StreamEvent,\n WsClientMessage,\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 /** Whether WebSocket streaming is available on the server. `null` = unknown. */\n private wsAvailable: boolean | null = null;\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(_options?: StartOptions): 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.\n * Attempts WebSocket first, falls back to SSE if WebSocket is unavailable.\n * Yields {@link StreamEvent} objects as they arrive from the server.\n */\n async *executeStream(req: ExecutionRequest): AsyncIterable<StreamEvent> {\n // Try WebSocket if we haven't determined it's unavailable\n if (this.wsAvailable !== false) {\n try {\n yield* this.executeStreamWs(req);\n return;\n } catch (err) {\n // If WebSocket fails on first attempt, fall back to SSE\n if (this.wsAvailable === null) {\n this.wsAvailable = false;\n } else {\n throw err;\n }\n }\n }\n\n // Fall back to SSE\n yield* this.executeStreamSse(req);\n }\n\n /**\n * Execute code on the remote server and stream output chunks via WebSocket.\n * @internal\n */\n private async *executeStreamWs(req: ExecutionRequest): AsyncIterable<StreamEvent> {\n const wsUrl = `${this.host.replace(/^http/, \"ws\")}/execute/ws`;\n\n const events: StreamEvent[] = [];\n let resolve: (() => void) | null = null;\n let done = false;\n let wsError: Error | null = null;\n\n // Bun's WebSocket supports custom headers via a second options argument.\n // The standard WebSocket type doesn't include this, so we cast through unknown.\n const ws = new WebSocket(wsUrl, {\n headers: {\n Authorization: `Bearer ${this.apiKey}`,\n },\n } as never);\n\n const waitForEvent = (): Promise<void> =>\n new Promise<void>((r) => {\n if (events.length > 0 || done) {\n r();\n } else {\n resolve = r;\n }\n });\n\n ws.onopen = () => {\n this.wsAvailable = true;\n const msg: WsClientMessage = {\n type: \"execute\",\n request: req,\n ...(this.isol8Options ? { options: this.isol8Options } : {}),\n };\n ws.send(JSON.stringify(msg));\n };\n\n ws.onmessage = (evt) => {\n try {\n const event = JSON.parse(\n typeof evt.data === \"string\" ? evt.data : String(evt.data)\n ) as StreamEvent;\n events.push(event);\n if (resolve) {\n const r = resolve;\n resolve = null;\n r();\n }\n } catch {\n // Ignore malformed messages\n }\n };\n\n ws.onerror = () => {\n if (!done) {\n wsError = new Error(\"WebSocket connection failed\");\n done = true;\n if (resolve) {\n const r = resolve;\n resolve = null;\n r();\n }\n }\n };\n\n ws.onclose = () => {\n done = true;\n if (resolve) {\n const r = resolve;\n resolve = null;\n r();\n }\n };\n\n try {\n while (true) {\n await waitForEvent();\n\n if (wsError) {\n throw wsError;\n }\n\n while (events.length > 0) {\n yield events.shift()!;\n }\n\n if (done) {\n break;\n }\n }\n } finally {\n if (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING) {\n ws.close();\n }\n }\n }\n\n /**\n * Execute code on the remote server and stream output chunks via SSE.\n * @internal\n */\n private async *executeStreamSse(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 /**\n * List all active sessions on the remote server.\n * Requires authentication but no session ID.\n */\n async listSessions(): Promise<SessionInfo[]> {\n const res = await this.fetch(\"/sessions\");\n if (!res.ok) {\n const body = await res.json().catch(() => ({}));\n throw new Error(\n `Failed to list sessions: ${(body as { error?: string }).error ?? res.statusText}`\n );\n }\n const body = (await res.json()) as { sessions: SessionInfo[] };\n return body.sessions;\n }\n\n /**\n * Delete a specific session on the remote server by ID.\n * The session's container is stopped and removed.\n */\n async deleteSession(sessionId: string): Promise<void> {\n const res = await this.fetch(`/session/${sessionId}`, { method: \"DELETE\" });\n if (!res.ok) {\n const body = await res.json().catch(() => ({}));\n throw new Error(\n `Failed to delete session: ${(body as { error?: string }).error ?? res.statusText}`\n );\n }\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",
|
|
16
|
+
"/**\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 readonlyRootFs: true,\n },\n network: {\n whitelist: [],\n blacklist: [],\n },\n cleanup: {\n autoPrune: true,\n maxContainerAgeMs: 3_600_000,\n },\n poolStrategy: \"fast\",\n poolSize: { clean: 1, dirty: 1 },\n dependencies: {},\n security: {\n seccomp: \"strict\",\n },\n remoteCode: {\n enabled: false,\n allowedSchemes: [\"https\"],\n allowedHosts: [],\n blockedHosts: [\n \"^localhost$\",\n \"^127(?:\\\\.[0-9]{1,3}){3}$\",\n \"^\\\\[::1\\\\]$\",\n \"^::1$\",\n \"^10(?:\\\\.[0-9]{1,3}){3}$\",\n \"^172\\\\.(?:1[6-9]|2[0-9]|3[0-1])(?:\\\\.[0-9]{1,3}){2}$\",\n \"^192\\\\.168(?:\\\\.[0-9]{1,3}){2}$\",\n \"^169\\\\.254(?:\\\\.[0-9]{1,3}){2}$\",\n \"^metadata\\\\.google\\\\.internal$\",\n \"^169\\\\.254\\\\.169\\\\.254$\",\n ],\n maxCodeSize: 10 * 1024 * 1024,\n fetchTimeoutMs: 30_000,\n requireHash: false,\n enableCache: true,\n cacheTtl: 3600,\n },\n audit: {\n enabled: false,\n destination: \"filesystem\",\n logDir: undefined,\n postLogScript: undefined,\n trackResources: true,\n retentionDays: 90,\n includeCode: false,\n includeOutput: false,\n },\n auth: {\n enabled: false,\n defaultTtlMs: 86_400_000, // 24 hours\n cleanupIntervalMs: 3_600_000, // 1 hour\n },\n debug: false,\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 readonlyRootFs: overrides.defaults?.readonlyRootFs ?? defaults.defaults.readonlyRootFs,\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 poolStrategy: overrides.poolStrategy ?? defaults.poolStrategy,\n poolSize: overrides.poolSize ?? defaults.poolSize,\n dependencies: {\n ...defaults.dependencies,\n ...overrides.dependencies,\n },\n security: {\n seccomp: overrides.security?.seccomp ?? defaults.security.seccomp,\n customProfilePath:\n overrides.security?.customProfilePath ?? defaults.security.customProfilePath,\n },\n remoteCode: {\n ...defaults.remoteCode,\n ...overrides.remoteCode,\n allowedSchemes: overrides.remoteCode?.allowedSchemes ?? defaults.remoteCode.allowedSchemes,\n allowedHosts: overrides.remoteCode?.allowedHosts ?? defaults.remoteCode.allowedHosts,\n blockedHosts: overrides.remoteCode?.blockedHosts ?? defaults.remoteCode.blockedHosts,\n },\n audit: {\n ...defaults.audit,\n ...overrides.audit,\n },\n auth: {\n ...defaults.auth,\n ...overrides.auth,\n },\n debug: overrides.debug ?? defaults.debug,\n };\n}\n\nexport { DEFAULT_CONFIG };\n",
|
|
17
17
|
"/**\n * @module engine/concurrency\n *\n * Async semaphore for limiting the number of concurrent container executions.\n * Used by {@link DockerIsol8} to prevent resource exhaustion.\n */\n\n/**\n * A counting semaphore for limiting concurrent async operations.\n *\n * @example\n * ```typescript\n * const sem = new Semaphore(3); // allow 3 concurrent operations\n *\n * await sem.acquire();\n * try {\n * await doWork();\n * } finally {\n * sem.release();\n * }\n * ```\n */\nexport class Semaphore {\n private current = 0;\n private readonly queue: (() => void)[] = [];\n\n /**\n * @param max - Maximum number of concurrent acquisitions. Must be ≥ 1.\n * @throws {Error} If `max` is less than 1.\n */\n constructor(private readonly max: number) {\n if (max < 1) {\n throw new Error(\"Semaphore max must be >= 1\");\n }\n }\n\n /** The number of permits currently available. */\n get available(): number {\n return this.max - this.current;\n }\n\n /** The number of callers waiting to acquire a permit. */\n get pending(): number {\n return this.queue.length;\n }\n\n /**\n * Acquire a permit. Resolves immediately if one is available,\n * otherwise queues the caller until a permit is released.\n */\n async acquire(): Promise<void> {\n if (this.current < this.max) {\n this.current++;\n return;\n }\n\n return new Promise<void>((resolve) => {\n this.queue.push(resolve);\n });\n }\n\n /**\n * Release a permit. If callers are queued, the next one is resolved.\n * Must be called exactly once for each successful `acquire()`.\n */\n release(): void {\n const next = this.queue.shift();\n if (next) {\n next();\n } else {\n this.current--;\n }\n }\n}\n",
|
|
18
18
|
"/**\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 { existsSync, readFileSync } from \"node:fs\";\nimport Docker from \"dockerode\";\nimport { RuntimeRegistry } from \"../runtime\";\nimport type { RuntimeAdapter } from \"../runtime/adapter\";\nimport type {\n ExecutionRequest,\n ExecutionResult,\n Isol8Dependencies,\n Isol8Engine,\n Isol8Mode,\n Isol8Options,\n NetworkFilterConfig,\n NetworkMode,\n RemoteCodePolicy,\n SecurityConfig,\n StartOptions,\n StreamEvent,\n} from \"../types\";\nimport { logger } from \"../utils/logger\";\nimport { AuditLogger } from \"./audit\";\nimport { fetchRemoteCode } from \"./code-fetcher\";\nimport { Semaphore } from \"./concurrency\";\nimport { EMBEDDED_DEFAULT_SECCOMP_PROFILE } from \"./default-seccomp-profile\";\nimport { getCustomImageTag, normalizePackages } from \"./image-builder\";\nimport { ExecutionManager, NetworkManager, VolumeManager } from \"./managers\";\nimport { ContainerPool } from \"./pool\";\nimport { type ContainerResourceUsage, calculateResourceDelta, getContainerStats } from \"./stats\";\nimport { parseMemoryLimit } from \"./utils\";\n\nconst SANDBOX_WORKDIR = \"/sandbox\";\nconst MAX_OUTPUT_BYTES = 1024 * 1024; // 1MB default\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 private readonly security: SecurityConfig;\n private readonly persist: boolean;\n private readonly logNetwork: boolean;\n private readonly poolStrategy: \"secure\" | \"fast\";\n private readonly poolSize: number | { clean: number; dirty: number };\n private readonly dependencies: Isol8Dependencies;\n private readonly auditLogger?: AuditLogger;\n private readonly remoteCodePolicy: RemoteCodePolicy;\n\n private readonly networkManager: NetworkManager;\n private readonly executionManager: ExecutionManager;\n private readonly volumeManager: VolumeManager;\n\n private container: Docker.Container | null = null;\n private persistentRuntime: RuntimeAdapter | null = null;\n private pool: ContainerPool | null = null;\n private readonly imageCache = new Map<string, string>();\n\n private async resolveExecutionRequest(\n req: ExecutionRequest\n ): Promise<ExecutionRequest & { code: string }> {\n const inlineCode = req.code?.trim();\n const codeUrl = req.codeUrl?.trim();\n\n if (inlineCode && codeUrl) {\n throw new Error(\"ExecutionRequest.code and ExecutionRequest.codeUrl are mutually exclusive.\");\n }\n if (!(inlineCode || codeUrl)) {\n throw new Error(\"ExecutionRequest must include either code or codeUrl.\");\n }\n\n if (inlineCode) {\n return { ...req, code: req.code! };\n }\n\n const fetched = await fetchRemoteCode(\n {\n codeUrl: codeUrl!,\n codeHash: req.codeHash,\n allowInsecureCodeUrl: req.allowInsecureCodeUrl,\n },\n this.remoteCodePolicy\n );\n\n return { ...req, code: fetched.code };\n }\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 this.persist = options.persist ?? false;\n this.security = options.security ?? { seccomp: \"strict\" };\n this.logNetwork = options.logNetwork ?? false;\n this.poolStrategy = options.poolStrategy ?? \"fast\";\n this.poolSize = options.poolSize ?? { clean: 1, dirty: 1 };\n this.dependencies = options.dependencies ?? {};\n this.remoteCodePolicy = options.remoteCode ?? {\n enabled: false,\n allowedSchemes: [\"https\"],\n allowedHosts: [],\n blockedHosts: [],\n maxCodeSize: 10 * 1024 * 1024,\n fetchTimeoutMs: 30_000,\n requireHash: false,\n enableCache: true,\n cacheTtl: 3600,\n };\n\n // Initialize audit logger if audit config is provided\n if (options.audit) {\n this.auditLogger = new AuditLogger(options.audit);\n }\n\n // Initialize managers\n this.networkManager = new NetworkManager({\n network: this.network,\n networkFilter: this.networkFilter,\n });\n\n this.executionManager = new ExecutionManager({\n secrets: this.secrets,\n maxOutputSize: this.maxOutputSize,\n });\n\n this.volumeManager = new VolumeManager({\n readonlyRootFs: this.readonlyRootFs,\n sandboxWorkdir: SANDBOX_WORKDIR,\n });\n\n if (options.debug) {\n logger.setDebug(true);\n }\n }\n\n /**\n * Initialize isol8.\n *\n * In ephemeral mode this can optionally pre-warm the container pool.\n * In persistent mode the container is created lazily on first execute.\n */\n async start(options: StartOptions = {}): Promise<void> {\n if (this.mode !== \"ephemeral\") {\n return;\n }\n\n const prewarm = options.prewarm;\n if (!prewarm) {\n return;\n }\n\n const pool = this.ensurePool();\n const images = new Set<string>();\n\n const adapters =\n typeof prewarm === \"object\" && prewarm.runtimes?.length\n ? prewarm.runtimes.map((runtime) => RuntimeRegistry.get(runtime))\n : RuntimeRegistry.list();\n\n for (const adapter of adapters) {\n try {\n images.add(await this.resolveImage(adapter));\n } catch (err) {\n logger.debug(`[Pool] Pre-warm image resolution failed for ${adapter.name}: ${err}`);\n }\n }\n\n await Promise.all(\n [...images].map(async (image) => {\n try {\n await pool.warm(image);\n logger.debug(`[Pool] Pre-warmed image: ${image}`);\n } catch (err) {\n logger.debug(`[Pool] Pre-warm failed for ${image}: ${err}`);\n }\n })\n );\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 const startTime = Date.now();\n try {\n const request = await this.resolveExecutionRequest(req);\n const result =\n this.mode === \"persistent\"\n ? await this.executePersistent(request, startTime)\n : await this.executeEphemeral(request, startTime);\n\n return result;\n } finally {\n this.semaphore.release();\n }\n }\n\n /**\n * Record an audit entry for the execution.\n */\n private async recordAudit(\n req: ExecutionRequest & { code: string },\n result: ExecutionResult,\n startTime: number,\n container?: Docker.Container\n ): Promise<void> {\n try {\n // Calculate code hash using Web Crypto API\n const enc = new TextEncoder();\n const data = enc.encode(req.code);\n const digest = await crypto.subtle.digest(\"SHA-256\", data);\n const codeHash = Array.from(new Uint8Array(digest))\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n\n // Collect security events if container is available\n let securityEvents: import(\"../types\").SecurityEvent[] | undefined;\n if (container && this.network === \"filtered\") {\n securityEvents = await this.collectSecurityEvents(container);\n if (securityEvents.length === 0) {\n securityEvents = undefined;\n }\n }\n\n // Collect network logs if enabled\n let networkLogs: import(\"../types\").NetworkLogEntry[] | undefined;\n if (this.logNetwork && result.networkLogs) {\n networkLogs = result.networkLogs;\n }\n\n const audit = {\n executionId: result.executionId,\n userId: req.metadata?.userId || \"\",\n timestamp: new Date(startTime).toISOString(),\n runtime: result.runtime,\n codeHash,\n containerId: result.containerId || \"\",\n exitCode: result.exitCode,\n durationMs: result.durationMs,\n resourceUsage: result.resourceUsage,\n securityEvents,\n networkLogs,\n metadata: req.metadata,\n };\n\n // Apply privacy filtering and record\n this.auditLogger!.record(audit);\n } catch (err) {\n logger.error(\"Failed to record audit log:\", err);\n }\n }\n\n /**\n * Collect security events from the container (e.g., network filter blocks).\n */\n private async collectSecurityEvents(\n container: Docker.Container\n ): Promise<import(\"../types\").SecurityEvent[]> {\n const events: import(\"../types\").SecurityEvent[] = [];\n\n try {\n // Read security events from proxy log\n const exec = await container.exec({\n Cmd: [\"cat\", \"/tmp/isol8-proxy/security-events.jsonl\"],\n AttachStdout: true,\n AttachStderr: false,\n User: \"root\",\n });\n\n const stream = await exec.start({ Tty: false });\n const chunks: Buffer[] = [];\n\n for await (const chunk of stream as AsyncIterable<Buffer>) {\n chunks.push(chunk);\n }\n\n const output = Buffer.concat(chunks).toString(\"utf-8\").trim();\n if (output) {\n for (const line of output.split(\"\\n\")) {\n if (line.trim()) {\n try {\n const event = JSON.parse(line);\n events.push({\n type: event.type || \"unknown\",\n message: `Security event: ${event.type}`,\n details: event.details || {},\n timestamp: event.timestamp || new Date().toISOString(),\n });\n } catch {\n // Skip malformed lines\n }\n }\n }\n }\n } catch {\n // No security events file or container doesn't exist anymore\n }\n\n return events;\n }\n\n /**\n * Collect network logs from the container (requests made through the proxy).\n */\n private async collectNetworkLogs(\n container: Docker.Container\n ): Promise<import(\"../types\").NetworkLogEntry[]> {\n const logs: import(\"../types\").NetworkLogEntry[] = [];\n\n try {\n const exec = await container.exec({\n Cmd: [\"cat\", \"/tmp/isol8-proxy/network.jsonl\"],\n AttachStdout: true,\n AttachStderr: false,\n User: \"root\",\n });\n\n const stream = await exec.start({ Tty: false });\n const chunks: Buffer[] = [];\n\n for await (const chunk of stream as AsyncIterable<Buffer>) {\n chunks.push(chunk);\n }\n\n const output = Buffer.concat(chunks).toString(\"utf-8\").trim();\n logger.debug(\n `[NetworkLogs] Raw output length: ${output.length}, first 100 chars: ${output.substring(0, 100).replace(/\\\\n/g, \"\\\\n\")}`\n );\n // Filter to only lines that contain valid JSON\n // Find the JSON object by looking for the first { and last }\n const jsonLines = output.split(\"\\n\").filter((line) => line.includes(\"timestamp\"));\n logger.debug(\n `[NetworkLogs] Found ${jsonLines.length} JSON lines out of ${output.split(\"\\n\").length} total lines`\n );\n for (const line of jsonLines) {\n // Extract JSON by finding the first { and last }\n const startIdx = line.indexOf(\"{\");\n const endIdx = line.lastIndexOf(\"}\");\n if (startIdx === -1 || endIdx === -1) {\n continue;\n }\n const jsonStr = line.substring(startIdx, endIdx + 1);\n try {\n const entry = JSON.parse(jsonStr);\n logs.push({\n timestamp: entry.timestamp || new Date().toISOString(),\n method: entry.method || \"UNKNOWN\",\n host: entry.host || \"\",\n path: entry.path,\n action: entry.action || \"ALLOW\",\n durationMs: entry.durationMs || 0,\n });\n logger.debug(`[NetworkLogs] Successfully parsed line: ${JSON.stringify(entry)}`);\n } catch (e) {\n logger.debug(\n `[NetworkLogs] Failed to parse line: ${line.substring(0, 50)}..., error: ${e}`\n );\n }\n }\n logger.debug(`[NetworkLogs] Total parsed logs: ${logs.length}`);\n } catch {\n // No network logs file or container doesn't exist anymore\n }\n\n return logs;\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 await this.volumeManager.putFile(this.container, path, content);\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 return this.volumeManager.getFile(this.container, 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 request = await this.resolveExecutionRequest(req);\n const adapter = this.getAdapter(request.runtime);\n const timeoutMs = request.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.executionManager.buildEnv(\n undefined,\n this.networkManager.proxyPort,\n this.network,\n this.networkFilter\n ),\n NetworkDisabled: this.network === \"none\",\n HostConfig: this.buildHostConfig(),\n StopTimeout: 2,\n });\n\n try {\n await container.start();\n\n await this.networkManager.startProxy(container);\n await this.networkManager.setupIptables(container);\n\n // Write code\n const ext = request.fileExtension ?? adapter.getFileExtension();\n const filePath = `${SANDBOX_WORKDIR}/main${ext}`;\n await this.volumeManager.writeFileViaExec(container, filePath, request.code);\n\n // Install packages if requested\n if (request.installPackages?.length) {\n await this.executionManager.installPackages(\n container,\n request.runtime,\n request.installPackages,\n timeoutMs\n );\n }\n\n // Inject input files\n if (request.files) {\n for (const [fPath, fContent] of Object.entries(request.files)) {\n await this.volumeManager.writeFileViaExec(container, fPath, fContent);\n }\n }\n\n // Build command\n const rawCmd = adapter.getCommand(request.code, filePath);\n const timeoutSec = Math.ceil(timeoutMs / 1000);\n let cmd: string[];\n if (request.stdin) {\n const stdinPath = `${SANDBOX_WORKDIR}/_stdin`;\n await this.volumeManager.writeFileViaExec(container, stdinPath, request.stdin);\n const cmdStr = rawCmd.map((a) => `'${a.replace(/'/g, \"'\\\\''\")}'`).join(\" \");\n cmd = this.executionManager.wrapWithTimeout(\n [\"sh\", \"-c\", `cat ${stdinPath} | ${cmdStr}`],\n timeoutSec\n );\n } else {\n cmd = this.executionManager.wrapWithTimeout(rawCmd, timeoutSec);\n }\n\n const exec = await container.exec({\n Cmd: cmd,\n Env: this.executionManager.buildEnv(\n request.env,\n this.networkManager.proxyPort,\n this.network,\n this.networkFilter\n ),\n AttachStdout: true,\n AttachStderr: true,\n WorkingDir: SANDBOX_WORKDIR,\n User: \"sandbox\",\n });\n\n const execStream = await exec.start({ Tty: false });\n\n yield* this.executionManager.streamExecOutput(execStream, exec, container, timeoutMs);\n } finally {\n if (this.persist) {\n logger.debug(`[Persist] Leaving container running for inspection: ${container.id}`);\n } else {\n try {\n await container.remove({ force: true });\n } catch {\n // Best effort cleanup\n }\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\n const cacheKey = adapter.image;\n const cached = this.imageCache.get(cacheKey);\n if (cached) {\n return cached;\n }\n\n let resolvedImage = adapter.image;\n const configuredDeps = this.dependencies[adapter.name];\n const normalizedDeps = configuredDeps ? normalizePackages(configuredDeps) : [];\n\n if (normalizedDeps.length > 0) {\n const hashedCustomTag = getCustomImageTag(adapter.name, normalizedDeps);\n try {\n await this.docker.getImage(hashedCustomTag).inspect();\n resolvedImage = hashedCustomTag;\n } catch {\n logger.debug(\n `[ImageBuilder] Hashed custom image not found for ${adapter.name}: ${hashedCustomTag}`\n );\n }\n }\n\n if (resolvedImage === adapter.image) {\n // Backward-compatible fallback to legacy non-hashed custom tag.\n const legacyCustomTag = `${adapter.image}-custom`;\n try {\n await this.docker.getImage(legacyCustomTag).inspect();\n resolvedImage = legacyCustomTag;\n } catch {\n // keep base image\n }\n }\n\n // Ensure the resolved image exists. If not, build it.\n try {\n await this.docker.getImage(resolvedImage).inspect();\n } catch {\n logger.debug(`[ImageBuilder] Image ${resolvedImage} not found. Building...`);\n const { buildBaseImages, buildCustomImage } = await import(\"./image-builder\");\n\n if (resolvedImage !== adapter.image && normalizedDeps.length > 0) {\n // Building custom image: ensure base image exists first\n try {\n await this.docker.getImage(adapter.image).inspect();\n } catch {\n logger.debug(`[ImageBuilder] Base image ${adapter.image} missing. Building...`);\n await buildBaseImages(this.docker, undefined, false, [adapter.name]);\n }\n logger.debug(`[ImageBuilder] Building custom image for ${adapter.name}...`);\n await buildCustomImage(this.docker, adapter.name, normalizedDeps);\n } else {\n // Building base image\n logger.debug(`[ImageBuilder] Building base image for ${adapter.name}...`);\n await buildBaseImages(this.docker, undefined, false, [adapter.name]);\n }\n }\n\n this.imageCache.set(cacheKey, resolvedImage);\n return resolvedImage;\n }\n\n private ensurePool(): ContainerPool {\n if (!this.pool) {\n this.pool = new ContainerPool({\n docker: this.docker,\n poolStrategy: this.poolStrategy,\n poolSize: this.poolSize,\n networkMode: this.network,\n securityMode: this.security.seccomp ?? \"strict\",\n createOptions: {\n Cmd: [\"sleep\", \"infinity\"],\n WorkingDir: SANDBOX_WORKDIR,\n Env: this.executionManager.buildEnv(\n undefined,\n this.networkManager.proxyPort,\n this.network,\n this.networkFilter\n ),\n NetworkDisabled: this.network === \"none\",\n HostConfig: this.buildHostConfig(),\n StopTimeout: 2,\n },\n });\n }\n\n return this.pool;\n }\n\n private async executeEphemeral(\n req: ExecutionRequest & { code: string },\n startTime: number\n ): 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 const pool = this.ensurePool();\n\n // Acquire a pre-warmed container from the pool\n const container = await pool.acquire(image);\n\n // Collect baseline stats if resource tracking is enabled\n let startStats: ContainerResourceUsage | undefined;\n if (this.auditLogger) {\n try {\n startStats = await getContainerStats(container);\n } catch (err) {\n logger.debug(\"Failed to collect baseline stats:\", err);\n }\n }\n\n try {\n // Start proxy for filtered network mode\n await this.networkManager.startProxy(container);\n await this.networkManager.setupIptables(container);\n\n // Fast path: for simple executions, avoid file write and execute inline.\n // Falls back to file-based path for runtimes that require file input (e.g. Deno)\n // or when request options require filesystem artifacts.\n const canUseInline =\n !(req.stdin || req.files || req.outputPaths) &&\n (!req.installPackages || req.installPackages.length === 0);\n\n let rawCmd: string[];\n if (canUseInline) {\n try {\n rawCmd = adapter.getCommand(req.code);\n } catch {\n const ext = req.fileExtension ?? adapter.getFileExtension();\n const filePath = `${SANDBOX_WORKDIR}/main${ext}`;\n await this.volumeManager.writeFileViaExec(container, filePath, req.code);\n rawCmd = adapter.getCommand(req.code, filePath);\n }\n } else {\n const ext = req.fileExtension ?? adapter.getFileExtension();\n const filePath = `${SANDBOX_WORKDIR}/main${ext}`;\n await this.volumeManager.writeFileViaExec(container, filePath, req.code);\n rawCmd = adapter.getCommand(req.code, filePath);\n }\n\n // Install packages if requested\n if (req.installPackages?.length) {\n await this.executionManager.installPackages(\n container,\n req.runtime,\n req.installPackages,\n timeoutMs\n );\n }\n\n // Execute the actual command, wrapped with timeout to ensure kill on expiry\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 this.volumeManager.writeFileViaExec(container, stdinPath, req.stdin);\n const cmdStr = rawCmd.map((a) => `'${a.replace(/'/g, \"'\\\\''\")}' `).join(\"\");\n cmd = this.executionManager.wrapWithTimeout(\n [\"sh\", \"-c\", `cat ${stdinPath} | ${cmdStr}`],\n timeoutSec\n );\n } else {\n cmd = this.executionManager.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 this.volumeManager.writeFileViaExec(container, fPath, fContent);\n }\n }\n\n const exec = await container.exec({\n Cmd: cmd,\n Env: this.executionManager.buildEnv(\n req.env,\n this.networkManager.proxyPort,\n this.network,\n this.networkFilter\n ),\n AttachStdout: true,\n AttachStderr: true,\n WorkingDir: SANDBOX_WORKDIR,\n User: \"sandbox\",\n });\n\n const start = performance.now();\n const execStream = await exec.start({ Tty: false });\n\n const { stdout, stderr, truncated } = await this.executionManager.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 // Collect final stats and calculate resource usage delta\n let resourceUsage: ExecutionResult[\"resourceUsage\"];\n if (startStats) {\n try {\n const endStats = await getContainerStats(container);\n resourceUsage = calculateResourceDelta(startStats, endStats);\n } catch (err) {\n logger.debug(\"Failed to collect final stats:\", err);\n }\n }\n\n // Collect network logs if enabled and network mode is filtered\n let networkLogs: ExecutionResult[\"networkLogs\"];\n if (this.logNetwork && this.network === \"filtered\") {\n try {\n networkLogs = await this.collectNetworkLogs(container);\n if (networkLogs.length === 0) {\n networkLogs = undefined;\n }\n } catch (err) {\n logger.debug(\"Failed to collect network logs:\", err);\n }\n }\n\n const result: ExecutionResult = {\n stdout: this.executionManager.postProcessOutput(stdout, truncated),\n stderr: this.executionManager.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 ...(resourceUsage ? { resourceUsage } : {}),\n ...(networkLogs ? { networkLogs } : {}),\n ...(req.outputPaths\n ? { files: await this.volumeManager.retrieveFiles(container, req.outputPaths) }\n : {}),\n };\n\n // Record audit log if audit logger is configured\n if (this.auditLogger) {\n await this.recordAudit(req, result, startTime, container);\n }\n\n return result;\n } finally {\n if (this.persist) {\n logger.debug(`[Persist] Leaving container running for inspection: ${container.id}`);\n } else {\n // Return container to pool for reuse - fire-and-forget for performance\n pool.release(container, image).catch((err) => {\n logger.debug(`[Pool] release failed: ${err}`);\n container.remove({ force: true }).catch(() => {});\n });\n }\n }\n }\n\n private async executePersistent(\n req: ExecutionRequest & { code: string },\n startTime: number\n ): 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 ext = req.fileExtension ?? adapter.getFileExtension();\n const filePath = `${SANDBOX_WORKDIR}/exec_${Date.now()}${ext}`;\n\n // Write code to the container\n await this.volumeManager.putFile(this.container!, filePath, req.code);\n\n // Inject input files\n if (req.files) {\n for (const [fPath, fContent] of Object.entries(req.files)) {\n await this.volumeManager.putFile(this.container!, fPath, fContent);\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 this.executionManager.installPackages(\n this.container!,\n req.runtime,\n req.installPackages,\n timeoutMs\n );\n }\n\n // Handle stdin\n let cmd: string[];\n if (req.stdin) {\n const stdinPath = `${SANDBOX_WORKDIR}/_stdin_${Date.now()}`;\n await this.volumeManager.writeFileViaExec(this.container!, stdinPath, req.stdin);\n const cmdStr = rawCmd.map((a) => `'${a.replace(/'/g, \"'\\\\''\")}' `).join(\"\");\n cmd = this.executionManager.wrapWithTimeout(\n [\"sh\", \"-c\", `cat ${stdinPath} | ${cmdStr}`],\n timeoutSec\n );\n } else {\n cmd = this.executionManager.wrapWithTimeout(rawCmd, timeoutSec);\n }\n\n const execEnv = this.executionManager.buildEnv(\n req.env,\n this.networkManager.proxyPort,\n this.network,\n this.networkFilter\n );\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 User: \"sandbox\",\n });\n\n const start = performance.now();\n const execStream = await exec.start({ Tty: false });\n\n const { stdout, stderr, truncated } = await this.executionManager.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 // Collect resource stats if tracking is enabled\n let resourceUsage: ExecutionResult[\"resourceUsage\"];\n if (this.auditLogger) {\n try {\n const endStats = await getContainerStats(this.container!);\n // For persistent mode, we don't have baseline, so use current values\n resourceUsage = {\n cpuPercent: endStats.cpuPercent,\n memoryMB: endStats.memoryMB,\n networkBytesIn: endStats.networkBytesIn,\n networkBytesOut: endStats.networkBytesOut,\n };\n } catch (err) {\n logger.debug(\"Failed to collect resource stats:\", err);\n }\n }\n\n // Collect network logs if enabled and network mode is filtered\n let networkLogs: ExecutionResult[\"networkLogs\"];\n if (this.logNetwork && this.network === \"filtered\") {\n try {\n networkLogs = await this.collectNetworkLogs(this.container!);\n if (networkLogs.length === 0) {\n networkLogs = undefined;\n }\n } catch (err) {\n logger.debug(\"Failed to collect network logs:\", err);\n }\n }\n\n const result: ExecutionResult = {\n stdout: this.executionManager.postProcessOutput(stdout, truncated),\n stderr: this.executionManager.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 ...(resourceUsage ? { resourceUsage } : {}),\n ...(networkLogs ? { networkLogs } : {}),\n ...(req.outputPaths\n ? { files: await this.retrieveFiles(this.container!, req.outputPaths) }\n : {}),\n };\n\n // Record audit log if audit logger is configured\n if (this.auditLogger) {\n await this.recordAudit(req, result, startTime, this.container!);\n }\n\n return result;\n }\n\n private async retrieveFiles(\n container: Docker.Container,\n paths: string[]\n ): Promise<Record<string, string>> {\n return this.volumeManager.retrieveFiles(container, paths);\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.executionManager.buildEnv(\n undefined,\n this.networkManager.proxyPort,\n this.network,\n this.networkFilter\n ),\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 await this.networkManager.startProxy(this.container);\n await this.networkManager.setupIptables(this.container);\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},uid=100,gid=101`,\n },\n SecurityOpt: this.buildSecurityOpts(),\n };\n\n if (this.network === \"filtered\") {\n config.NetworkMode = \"bridge\";\n // CAP_NET_ADMIN is required for iptables rules that enforce proxy-only\n // outbound traffic from the sandbox user. The capability is used once\n // at container startup (by root) to set rules, then the sandbox user\n // (which runs all user code) cannot modify them.\n config.CapAdd = [\"NET_ADMIN\"];\n } else if (this.network === \"host\") {\n config.NetworkMode = \"host\";\n }\n\n return config;\n }\n\n private buildSecurityOpts(): string[] {\n const opts = [\"no-new-privileges\"];\n\n if (this.security.seccomp === \"unconfined\") {\n opts.push(\"seccomp=unconfined\");\n return opts;\n }\n\n if (this.security.seccomp === \"custom\" && this.security.customProfilePath) {\n try {\n const profile = readFileSync(this.security.customProfilePath, \"utf-8\");\n opts.push(`seccomp=${profile}`);\n } catch (e) {\n throw new Error(\n `Failed to load custom seccomp profile at ${this.security.customProfilePath}: ${e}`\n );\n }\n return opts;\n }\n\n // Default strict mode\n try {\n const profile = this.loadDefaultSeccompProfile();\n opts.push(`seccomp=${profile}`);\n } catch (e) {\n throw new Error(`Failed to load default seccomp profile: ${e}`);\n }\n\n return opts;\n }\n\n private loadDefaultSeccompProfile(): string {\n // Try resolving relative to this file (dev mode)\n // Note: in bundled code, import.meta.url might point to dist/index.js\n\n // 1. Try ../../docker/seccomp-profile.json (Development structure)\n // In dev: src/engine/docker.ts -> ../../docker\n const devPath = new URL(\"../../docker/seccomp-profile.json\", import.meta.url);\n if (existsSync(devPath)) {\n return readFileSync(devPath, \"utf-8\");\n }\n\n // 2. Try ./docker/seccomp-profile.json (Production/Dist structure)\n // In dist: dist/index.js -> ./docker\n const prodPath = new URL(\"./docker/seccomp-profile.json\", import.meta.url);\n if (existsSync(prodPath)) {\n return readFileSync(prodPath, \"utf-8\");\n }\n\n // 3. Embedded fallback for standalone compiled binaries.\n if (EMBEDDED_DEFAULT_SECCOMP_PROFILE.length > 0) {\n logger.debug(\n `Default seccomp profile file not found. Using embedded profile. Tried: ${devPath.pathname}, ${prodPath.pathname}`\n );\n return EMBEDDED_DEFAULT_SECCOMP_PROFILE;\n }\n\n throw new Error(\"Embedded default seccomp profile is unavailable\");\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:`.\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((c) => c.Image.startsWith(\"isol8:\"));\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 /**\n * Remove all isol8 Docker images.\n *\n * Images are identified by repo tags starting with `isol8:`\n * (for example `isol8:python` or `isol8:python-custom-<hash>`).\n */\n static async cleanupImages(\n docker?: Docker\n ): Promise<{ removed: number; failed: number; errors: string[] }> {\n const dockerInstance = docker ?? new Docker();\n\n const images = await dockerInstance.listImages({ all: true });\n const isol8Images = images.filter((img) =>\n img.RepoTags?.some((tag) => tag.startsWith(\"isol8:\"))\n );\n\n let removed = 0;\n let failed = 0;\n const errors: string[] = [];\n\n for (const imageInfo of isol8Images) {\n try {\n const image = dockerInstance.getImage(imageInfo.Id);\n await image.remove({ force: true });\n removed++;\n } catch (err) {\n failed++;\n const errorMsg = err instanceof Error ? err.message : String(err);\n const imageRef = imageInfo.RepoTags?.[0] ?? imageInfo.Id.slice(0, 12);\n errors.push(`${imageRef}: ${errorMsg}`);\n }\n }\n\n return { removed, failed, errors };\n }\n}\n",
|
|
19
19
|
"/**\n * Pluggable audit logger for execution provenance.\n *\n * Records ExecutionAudit objects to various destinations based on configuration.\n * Supports filesystem and stdout logging, with extensibility for cloud services.\n */\n\nimport { spawn } from \"node:child_process\";\nimport { appendFileSync, existsSync, mkdirSync, readdirSync, statSync, unlinkSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { AuditConfig, ExecutionAudit } from \"../types\";\nimport { logger } from \"../utils/logger\";\n\nexport class AuditLogger {\n private readonly config: AuditConfig;\n private readonly auditFile: string;\n\n constructor(config: AuditConfig) {\n this.config = config;\n\n // Set up audit file path based on config\n const auditDir =\n config.logDir ?? process.env.ISOL8_AUDIT_DIR ?? join(process.cwd(), \"./.isol8_audit\");\n this.auditFile = join(auditDir, \"executions.log\");\n\n // Create audit directory if it doesn't exist\n if (!existsSync(auditDir)) {\n try {\n mkdirSync(auditDir, { recursive: true });\n } catch (err) {\n logger.error(\"Failed to create audit dir:\", err);\n }\n }\n\n // Clean up old logs based on retention policy\n this.cleanupOldLogs();\n }\n\n /**\n * Clean up audit log files older than retentionDays.\n * Checks both the main executions.log and any rotated/archived logs.\n */\n private cleanupOldLogs(): void {\n if (!this.config.enabled || this.config.retentionDays <= 0) {\n return;\n }\n\n try {\n const auditDir = join(this.auditFile, \"..\");\n if (!existsSync(auditDir)) {\n return;\n }\n\n const cutoffTime = Date.now() - this.config.retentionDays * 24 * 60 * 60 * 1000;\n const files = readdirSync(auditDir);\n let cleanedCount = 0;\n\n for (const file of files) {\n // Clean up old log files (executions.log and any rotated versions)\n if (file.endsWith(\".log\") || file.endsWith(\".jsonl\")) {\n const filePath = join(auditDir, file);\n try {\n const stats = statSync(filePath);\n if (stats.mtimeMs < cutoffTime) {\n unlinkSync(filePath);\n cleanedCount++;\n logger.debug(`Cleaned up old audit log: ${file}`);\n }\n } catch (err) {\n logger.debug(`Failed to check/remove old log file ${file}:`, err);\n }\n }\n }\n\n if (cleanedCount > 0) {\n logger.info(`Audit log cleanup: removed ${cleanedCount} old log files`);\n }\n } catch (err) {\n logger.error(\"Failed to cleanup old audit logs:\", err);\n }\n }\n\n /**\n * Record an audit entry based on the current configuration.\n */\n record(audit: ExecutionAudit): void {\n if (!this.config.enabled) {\n return; // Don't record if audit is disabled\n }\n\n try {\n // Apply privacy filtering based on config\n const filteredAudit = this.filterAuditData(audit);\n\n const line = `${JSON.stringify(filteredAudit)}\\n`;\n\n switch (this.config.destination) {\n case \"file\":\n case \"filesystem\":\n appendFileSync(this.auditFile, line, { encoding: \"utf-8\" });\n break;\n case \"stdout\":\n console.log(\"AUDIT_LOG:\", filteredAudit);\n break;\n default:\n // For other destinations, log an error\n logger.error(`Unsupported audit destination: ${this.config.destination}`);\n return;\n }\n\n logger.debug(\"Audit record written:\", audit.executionId);\n\n // Run post-log script if configured\n if (this.config.postLogScript) {\n this.runPostLogScript();\n }\n } catch (err) {\n logger.error(\"Failed to write audit record:\", err);\n }\n }\n\n /**\n * Run the configured post-log script.\n * The script receives the audit file path as its first argument.\n */\n private runPostLogScript(): void {\n if (!this.config.postLogScript) {\n return;\n }\n\n try {\n // Spawn script with file path as argument, detached so it doesn't block\n const child = spawn(this.config.postLogScript, [this.auditFile], {\n detached: true,\n stdio: \"ignore\",\n });\n\n child.on(\"error\", (err) => {\n logger.error(\"Failed to run post-log script:\", err);\n });\n\n // Unref so parent can exit without waiting for child\n child.unref();\n } catch (err) {\n logger.error(\"Failed to spawn post-log script:\", err);\n }\n }\n\n /**\n * Apply privacy filtering to audit data based on configuration.\n */\n private filterAuditData(audit: ExecutionAudit): ExecutionAudit {\n // Start with required fields\n const result: ExecutionAudit = {\n executionId: audit.executionId,\n userId: audit.userId,\n timestamp: audit.timestamp,\n runtime: audit.runtime,\n codeHash: audit.codeHash,\n containerId: audit.containerId,\n exitCode: audit.exitCode,\n durationMs: audit.durationMs,\n };\n\n // Add optional fields if present\n if (audit.resourceUsage !== undefined) {\n result.resourceUsage = audit.resourceUsage;\n }\n if (audit.securityEvents !== undefined) {\n result.securityEvents = audit.securityEvents;\n }\n if (audit.metadata !== undefined) {\n result.metadata = audit.metadata;\n }\n\n // Conditionally add privacy-sensitive fields based on config\n if (this.config.includeCode && audit.code !== undefined) {\n (result as ExecutionAudit & { code?: string }).code = audit.code;\n }\n if (this.config.includeOutput) {\n if (audit.stdout !== undefined) {\n (result as ExecutionAudit & { stdout?: string }).stdout = audit.stdout;\n }\n if (audit.stderr !== undefined) {\n (result as ExecutionAudit & { stderr?: string }).stderr = audit.stderr;\n }\n }\n\n return result;\n }\n}\n",
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
"import { PassThrough } from \"node:stream\";\nimport type Docker from \"dockerode\";\nimport { createTarBuffer, extractFromTar } from \"../utils\";\n\nexport interface VolumeManagerOptions {\n readonlyRootFs: boolean;\n sandboxWorkdir?: string;\n}\n\nexport class VolumeManager {\n private readonly readonlyRootFs: boolean;\n private readonly sandboxWorkdir: string;\n\n constructor(options: VolumeManagerOptions) {\n this.readonlyRootFs = options.readonlyRootFs;\n this.sandboxWorkdir = options.sandboxWorkdir ?? \"/sandbox\";\n }\n\n async 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 if (b64.length < 20_000) {\n const exec = await container.exec({\n Cmd: [\"sh\", \"-c\", `printf '%s' '${b64}' | base64 -d > ${filePath}`],\n User: \"sandbox\",\n });\n\n await exec.start({ Detach: true });\n\n let info = await exec.inspect();\n while (info.Running) {\n await new Promise((r) => setTimeout(r, 5));\n info = await exec.inspect();\n }\n\n if (info.ExitCode !== 0) {\n throw new Error(\n `Failed to write file ${filePath} in container (exit code ${info.ExitCode})`\n );\n }\n return;\n }\n\n const tempPath = `/tmp/b64_${Date.now()}.tmp`;\n\n const chunkSize = 8000;\n for (let i = 0; i < b64.length; i += chunkSize) {\n const chunk = b64.slice(i, i + chunkSize);\n const exec = await container.exec({\n Cmd: [\"sh\", \"-c\", `printf '%s' '${chunk}' >> ${tempPath}`],\n User: \"sandbox\",\n });\n await exec.start({ Detach: true });\n await exec.inspect();\n }\n\n const decodeExec = await container.exec({\n Cmd: [\"sh\", \"-c\", `base64 -d ${tempPath} > ${filePath} && rm ${tempPath}`],\n User: \"sandbox\",\n });\n await decodeExec.start({ Detach: true });\n\n let info = await decodeExec.inspect();\n while (info.Running) {\n await new Promise((r) => setTimeout(r, 5));\n info = await decodeExec.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 async 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 User: \"sandbox\",\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\n 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 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 this.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 async putFile(\n container: Docker.Container,\n path: string,\n content: Buffer | string\n ): Promise<void> {\n if (this.readonlyRootFs) {\n await this.writeFileViaExec(container, path, content);\n } else {\n const tar = createTarBuffer(path, content);\n await container.putArchive(tar, { path: \"/\" });\n }\n }\n\n async getFile(container: Docker.Container, path: string): Promise<Buffer> {\n if (this.readonlyRootFs) {\n return this.readFileViaExec(container, path);\n }\n return this.getFileFromContainer(container, path);\n }\n}\n",
|
|
25
25
|
"/**\n * @module engine/pool\n *\n * Warm container pool for fast ephemeral execution. Pre-creates and\n * starts containers so they're ready for immediate use, eliminating\n * the create+start overhead (~100-200ms per execution).\n *\n * Supports two strategies:\n * - \"secure\": Clean container before returning (slower but ensures clean state)\n * - \"fast\": Dual-pool system - instant acquire from clean pool, background cleanup\n */\n\nimport type Docker from \"dockerode\";\nimport { logger } from \"../utils/logger\";\n\n/** Configuration for the container pool. */\nexport interface PoolOptions {\n /** Docker client instance. */\n docker: Docker;\n /** Pool strategy: \"secure\" or \"fast\". @default \"fast\" */\n poolStrategy?: \"secure\" | \"fast\";\n /** Pool size configuration.\n * For \"secure\" mode: number of containers to keep warm\n * For \"fast\" mode: { clean: ready containers, dirty: being cleaned }\n * @default 1 (for fast mode: { clean: 1, dirty: 1 })\n */\n poolSize?: number | { clean: number; dirty: number };\n /** Container creation options (HostConfig, Env, etc). */\n createOptions: Omit<Docker.ContainerCreateOptions, \"Image\">;\n /** Network mode to determine if iptables cleanup is needed. */\n networkMode: \"none\" | \"host\" | \"filtered\";\n /** Security mode - if strict, run process cleanup between executions */\n securityMode: \"strict\" | \"unconfined\" | \"custom\";\n}\n\ninterface PoolEntry {\n container: Docker.Container;\n createdAt: number;\n}\n\ninterface PoolState {\n clean: PoolEntry[];\n dirty: PoolEntry[];\n}\n\n/**\n * A per-image warm container pool. Maintains pre-started containers\n * ready for immediate exec, recycling them after use.\n *\n * Supports two strategies:\n * - \"secure\": Single pool, cleanup in acquire (current behavior)\n * - \"fast\": Dual pools (clean/dirty), instant acquire, background cleanup\n */\nexport class ContainerPool {\n private readonly docker: Docker;\n private readonly poolStrategy: \"secure\" | \"fast\";\n private readonly cleanPoolSize: number;\n private readonly dirtyPoolSize: number;\n private readonly createOptions: Omit<Docker.ContainerCreateOptions, \"Image\">;\n private readonly networkMode: \"none\" | \"host\" | \"filtered\";\n private readonly securityMode: \"strict\" | \"unconfined\" | \"custom\";\n private readonly pools = new Map<string, PoolState>();\n private readonly replenishing = new Set<string>();\n private readonly pendingReplenishments = new Set<Promise<void>>();\n private cleaningInterval: ReturnType<typeof setInterval> | null = null;\n\n constructor(options: PoolOptions) {\n this.docker = options.docker;\n this.poolStrategy = options.poolStrategy ?? \"fast\";\n this.createOptions = options.createOptions;\n this.networkMode = options.networkMode;\n this.securityMode = options.securityMode;\n\n // Parse pool size\n if (typeof options.poolSize === \"number\") {\n this.cleanPoolSize = options.poolSize;\n this.dirtyPoolSize = options.poolSize;\n } else if (options.poolSize) {\n this.cleanPoolSize = options.poolSize.clean ?? 1;\n this.dirtyPoolSize = options.poolSize.dirty ?? 1;\n } else {\n // Default: 1 clean, 1 dirty for fast mode\n this.cleanPoolSize = 1;\n this.dirtyPoolSize = 1;\n }\n\n // Start background cleaning for fast mode\n if (this.poolStrategy === \"fast\") {\n this.startBackgroundCleaning();\n }\n }\n\n /**\n * Acquire a started container for the given image.\n * - \"secure\" mode: Clean container before returning\n * - \"fast\" mode: Instant return from clean pool, create new if empty\n */\n async acquire(image: string): Promise<Docker.Container> {\n const pool = this.pools.get(image) ?? { clean: [], dirty: [] };\n\n if (this.poolStrategy === \"fast\") {\n // Fast mode: instant acquire from clean pool\n if (pool.clean.length > 0) {\n const entry = pool.clean.shift()!;\n this.pools.set(image, pool);\n\n // Fire-and-forget replenishment\n this.replenish(image);\n\n return entry.container;\n }\n\n // No clean containers available\n // Try to immediately clean one from dirty pool if available\n if (pool.dirty.length > 0 && pool.clean.length < this.cleanPoolSize) {\n await this.cleanDirtyImmediate(image);\n\n // Check again after cleanup\n const updatedPool = this.pools.get(image);\n if (updatedPool && updatedPool.clean.length > 0) {\n const entry = updatedPool.clean.shift()!;\n this.pools.set(image, updatedPool);\n this.replenish(image);\n return entry.container;\n }\n }\n\n // Create new container as fallback\n return this.createContainer(image);\n }\n // Secure mode: single pool, clean before returning\n if (pool.clean && pool.clean.length > 0) {\n const entry = pool.clean.shift()!;\n this.pools.set(image, { clean: pool.clean, dirty: [] });\n\n // Clean before returning - this ensures container is ready\n await this.cleanupContainer(entry.container);\n\n // Fire-and-forget replenishment\n this.replenish(image);\n return entry.container;\n }\n\n // Cold path: create + start inline\n return this.createContainer(image);\n }\n\n /**\n * Return a container to the pool.\n * - \"secure\" mode: Add to pool, cleanup happens on next acquire\n * - \"fast\" mode: Add to dirty pool for background cleaning\n */\n async release(container: Docker.Container, image: string): Promise<void> {\n let pool = this.pools.get(image);\n\n if (!pool) {\n pool = { clean: [], dirty: [] };\n this.pools.set(image, pool);\n }\n\n if (this.poolStrategy === \"fast\") {\n // Fast mode: add to dirty pool\n if (pool.dirty.length >= this.dirtyPoolSize) {\n // Dirty pool full, destroy container\n await container.remove({ force: true }).catch(() => {});\n return;\n }\n\n pool.dirty.push({ container, createdAt: Date.now() });\n } else {\n // Secure mode: add to clean pool\n if (pool.clean.length >= this.cleanPoolSize) {\n await container.remove({ force: true }).catch(() => {});\n return;\n }\n\n // For secure mode, we use single array\n if (!pool.clean) {\n pool.clean = [];\n }\n pool.clean.push({ container, createdAt: Date.now() });\n }\n }\n\n /**\n * Start background cleaning for fast mode.\n * Runs every 5 seconds to clean dirty containers.\n */\n private startBackgroundCleaning(): void {\n this.cleaningInterval = setInterval(async () => {\n for (const [_image, pool] of this.pools) {\n // Clean up to dirtyPoolSize containers per cycle\n for (let i = 0; i < this.dirtyPoolSize; i++) {\n if (pool.dirty.length > 0 && pool.clean.length < this.cleanPoolSize) {\n const entry = pool.dirty.shift()!;\n\n try {\n await this.cleanupContainer(entry.container);\n pool.clean.push(entry);\n } catch {\n entry.container.remove({ force: true }).catch(() => {});\n }\n }\n }\n }\n }, 5000); // Run every 5 seconds\n }\n\n /**\n * Clean a dirty container immediately and add to clean pool.\n */\n private async cleanDirtyImmediate(image: string): Promise<void> {\n const pool = this.pools.get(image);\n if (!pool || pool.dirty.length === 0 || pool.clean.length >= this.cleanPoolSize) {\n return;\n }\n\n const entry = pool.dirty.shift()!;\n try {\n await this.cleanupContainer(entry.container);\n pool.clean.push(entry);\n } catch {\n entry.container.remove({ force: true }).catch(() => {});\n }\n }\n\n private async cleanupContainer(container: Docker.Container): Promise<void> {\n const needsCleanup = this.securityMode === \"strict\";\n const needsIptables = this.networkMode === \"filtered\" && needsCleanup;\n\n if (!needsCleanup) {\n return;\n }\n\n try {\n const cleanupCmd = needsIptables\n ? \"pkill -9 -u sandbox 2>/dev/null; /usr/sbin/iptables -F OUTPUT 2>/dev/null; rm -rf /sandbox/* /sandbox/.[!.]* 2>/dev/null; true\"\n : \"pkill -9 -u sandbox 2>/dev/null; rm -rf /sandbox/* /sandbox/.[!.]* 2>/dev/null; true\";\n\n const cleanExec = await container.exec({\n Cmd: [\"sh\", \"-c\", cleanupCmd],\n });\n await cleanExec.start({ Detach: true });\n\n let info = await cleanExec.inspect();\n while (info.Running) {\n await new Promise((r) => setTimeout(r, 5));\n info = await cleanExec.inspect();\n }\n } catch {\n // Ignore cleanup errors\n }\n }\n\n /**\n * Pre-warm the pool for a specific image.\n */\n async warm(image: string): Promise<void> {\n const pool = this.pools.get(image) ?? { clean: [], dirty: [] };\n this.pools.set(image, pool);\n\n const needed =\n this.poolStrategy === \"fast\"\n ? this.cleanPoolSize - pool.clean.length\n : this.cleanPoolSize - (pool.clean?.length ?? 0);\n\n if (needed <= 0) {\n return;\n }\n\n const promises: Promise<void>[] = [];\n\n for (let i = 0; i < needed; i++) {\n promises.push(\n this.createContainer(image).then((container) => {\n if (this.poolStrategy === \"fast\") {\n pool.clean.push({ container, createdAt: Date.now() });\n } else {\n if (!pool.clean) {\n pool.clean = [];\n }\n pool.clean.push({ container, createdAt: Date.now() });\n }\n })\n );\n }\n\n await Promise.all(promises);\n }\n\n /**\n * Stop the pool and clean up resources.\n * Alias for drain() - destroys all containers and stops background cleaning.\n */\n async stop(): Promise<void> {\n return this.drain();\n }\n\n /**\n * Destroy all pooled containers and clear the pool.\n */\n async drain(): Promise<void> {\n // Stop background cleaning\n if (this.cleaningInterval) {\n clearInterval(this.cleaningInterval);\n this.cleaningInterval = null;\n }\n\n // Wait for pending operations\n await Promise.all(this.pendingReplenishments);\n\n const promises: Promise<void>[] = [];\n\n for (const [, pool] of this.pools) {\n for (const entry of pool.clean ?? []) {\n promises.push(entry.container.remove({ force: true }).catch(() => {}));\n }\n for (const entry of pool.dirty) {\n promises.push(entry.container.remove({ force: true }).catch(() => {}));\n }\n }\n\n await Promise.all(promises);\n this.pools.clear();\n }\n\n private async createContainer(image: string): Promise<Docker.Container> {\n const container = await this.docker.createContainer({\n ...this.createOptions,\n Image: image,\n });\n logger.debug(`[Pool] Container ${container.id} created for image: ${image}`);\n await container.start();\n logger.debug(`[Pool] Container ${container.id} started`);\n return container;\n }\n\n private replenish(image: string): void {\n if (this.replenishing.has(image)) {\n return;\n }\n\n const pool = this.pools.get(image);\n const currentSize = pool\n ? this.poolStrategy === \"fast\"\n ? pool.clean.length\n : (pool.clean?.length ?? 0)\n : 0;\n const targetSize = this.cleanPoolSize;\n\n if (currentSize >= targetSize) {\n return;\n }\n\n this.replenishing.add(image);\n\n const promise = this.createContainer(image)\n .then((container) => {\n const p = this.pools.get(image);\n if (!p) {\n container.remove({ force: true }).catch(() => {});\n return;\n }\n\n if (this.poolStrategy === \"fast\") {\n if (p.clean.length < this.cleanPoolSize) {\n p.clean.push({ container, createdAt: Date.now() });\n } else {\n container.remove({ force: true }).catch(() => {});\n }\n } else {\n if (!p.clean) {\n p.clean = [];\n }\n if (p.clean.length < this.cleanPoolSize) {\n p.clean.push({ container, createdAt: Date.now() });\n } else {\n container.remove({ force: true }).catch(() => {});\n }\n }\n })\n .catch((err) => {\n logger.error(`[Pool] Error during replenishment for ${image}:`, err);\n })\n .finally(() => {\n this.replenishing.delete(image);\n this.pendingReplenishments.delete(promise);\n });\n\n this.pendingReplenishments.add(promise);\n }\n}\n",
|
|
26
26
|
"/**\n * @module engine/stats\n *\n * Resource usage statistics collection from Docker containers.\n * Uses dockerode's container.stats() API to get CPU, memory, and network metrics.\n */\n\nimport type Docker from \"dockerode\";\n\n/**\n * Resource usage metrics for a container execution.\n */\nexport interface ContainerResourceUsage {\n /** CPU usage as percentage (0-100 * num_cores) */\n cpuPercent: number;\n /** Current memory usage in megabytes */\n memoryMB: number;\n /** Peak memory usage in megabytes (if tracked) */\n peakMemoryMB?: number;\n /** Bytes received during execution */\n networkBytesIn: number;\n /** Bytes sent during execution */\n networkBytesOut: number;\n}\n\n/**\n * Docker stats response structure.\n */\ninterface DockerStats {\n read: string;\n precpu_stats: {\n cpu_usage: {\n total_usage: number;\n percpu_usage?: number[];\n };\n system_cpu_usage: number;\n };\n cpu_stats: {\n cpu_usage: {\n total_usage: number;\n percpu_usage?: number[];\n };\n system_cpu_usage: number;\n online_cpus?: number;\n };\n memory_stats: {\n usage: number;\n max_usage?: number;\n limit: number;\n stats?: {\n cache?: number;\n rss?: number;\n };\n };\n networks?: Record<\n string,\n {\n rx_bytes: number;\n tx_bytes: number;\n rx_packets: number;\n tx_packets: number;\n }\n >;\n}\n\n/**\n * Calculate CPU percentage from docker stats.\n * Formula: (cpu_delta / system_delta) * num_cpus * 100\n */\nfunction calculateCPUPercent(stats: DockerStats): number {\n const cpuDelta = stats.cpu_stats.cpu_usage.total_usage - stats.precpu_stats.cpu_usage.total_usage;\n const systemDelta = stats.cpu_stats.system_cpu_usage - stats.precpu_stats.system_cpu_usage;\n\n if (systemDelta === 0 || cpuDelta === 0) {\n return 0;\n }\n\n const numCores =\n stats.cpu_stats.online_cpus ?? stats.cpu_stats.cpu_usage.percpu_usage?.length ?? 1;\n\n return (cpuDelta / systemDelta) * numCores * 100;\n}\n\n/**\n * Extract network stats (sum across all interfaces).\n */\nfunction calculateNetworkStats(stats: DockerStats): { in: number; out: number } {\n if (!stats.networks) {\n return { in: 0, out: 0 };\n }\n\n let rxBytes = 0;\n let txBytes = 0;\n\n for (const iface of Object.values(stats.networks)) {\n rxBytes += iface.rx_bytes;\n txBytes += iface.tx_bytes;\n }\n\n return { in: rxBytes, out: txBytes };\n}\n\n/**\n * Get resource usage snapshot for a container.\n *\n * @param container - Docker container instance\n * @returns Resource usage metrics\n */\nexport async function getContainerStats(\n container: Docker.Container\n): Promise<ContainerResourceUsage> {\n // Get single stats snapshot (stream: false)\n const stats = (await container.stats({\n stream: false,\n })) as unknown as DockerStats;\n\n const cpuPercent = calculateCPUPercent(stats);\n const memoryBytes = stats.memory_stats.usage;\n const network = calculateNetworkStats(stats);\n\n return {\n cpuPercent: Math.round(cpuPercent * 100) / 100, // Round to 2 decimals\n memoryMB: Math.round(memoryBytes / (1024 * 1024)),\n networkBytesIn: network.in,\n networkBytesOut: network.out,\n };\n}\n\n/**\n * Calculate resource usage delta between two stat snapshots.\n * Useful for getting per-execution metrics.\n */\nexport function calculateResourceDelta(\n before: ContainerResourceUsage,\n after: ContainerResourceUsage\n): ContainerResourceUsage {\n return {\n // CPU is already a rate, use the final value\n cpuPercent: after.cpuPercent,\n // Memory use final value\n memoryMB: after.memoryMB,\n // Network/Block I/O are cumulative, calculate delta\n networkBytesIn: after.networkBytesIn - before.networkBytesIn,\n networkBytesOut: after.networkBytesOut - before.networkBytesOut,\n };\n}\n",
|
|
27
|
-
"/**\n * @module @isol8/core\n *\n * Public API for the isol8 secure code execution engine.\n * Import from `\"@isol8/core\"` to access the engine, client, config, runtime registry.\n */\n\n// ─── Core Types ───\n\nexport type { RemoteIsol8Options } from \"./client/remote\";\n// ─── Client ───\nexport { RemoteIsol8 } from \"./client/remote\";\n// ─── Config ───\nexport { loadConfig } from \"./config\";\nexport { Semaphore } from \"./engine/concurrency\";\nexport type { DockerIsol8Options } from \"./engine/docker\";\n// ─── Engine ───\nexport { DockerIsol8 } from \"./engine/docker\";\nexport {\n buildBaseImages,\n buildCustomImage,\n buildCustomImages,\n getCustomImageTag,\n} from \"./engine/image-builder\";\n// ─── Runtime ───\nexport {\n BunAdapter,\n bashAdapter,\n DenoAdapter,\n NodeAdapter,\n PythonAdapter,\n RuntimeRegistry,\n} from \"./runtime\";\nexport type { RuntimeAdapter } from \"./runtime/adapter\";\n// ─── Types ───\nexport type {\n ExecutionRequest,\n ExecutionResult,\n Isol8Config,\n Isol8Engine,\n Isol8Mode,\n Isol8Options,\n NetworkFilterConfig,\n NetworkMode,\n RemoteCodePolicy,\n Runtime,\n StreamEvent,\n WsClientMessage,\n WsServerMessage,\n} from \"./types\";\n// ─── Utils ───\nexport { logger } from \"./utils/logger\";\n// ─── Version ───\nexport { VERSION } from \"./version\";\n",
|
|
27
|
+
"/**\n * @module @isol8/core\n *\n * Public API for the isol8 secure code execution engine.\n * Import from `\"@isol8/core\"` to access the engine, client, config, runtime registry.\n */\n\n// ─── Core Types ───\n\nexport type { RemoteIsol8Options } from \"./client/remote\";\n// ─── Client ───\nexport { RemoteIsol8 } from \"./client/remote\";\n// ─── Config ───\nexport { loadConfig } from \"./config\";\nexport { Semaphore } from \"./engine/concurrency\";\nexport type { DockerIsol8Options } from \"./engine/docker\";\n// ─── Engine ───\nexport { DockerIsol8 } from \"./engine/docker\";\nexport {\n buildBaseImages,\n buildCustomImage,\n buildCustomImages,\n getCustomImageTag,\n} from \"./engine/image-builder\";\n// ─── Runtime ───\nexport {\n BunAdapter,\n bashAdapter,\n DenoAdapter,\n NodeAdapter,\n PythonAdapter,\n RuntimeRegistry,\n} from \"./runtime\";\nexport type { RuntimeAdapter } from \"./runtime/adapter\";\n// ─── Types ───\nexport type {\n AuthConfig,\n ExecutionRequest,\n ExecutionResult,\n Isol8Config,\n Isol8Engine,\n Isol8Mode,\n Isol8Options,\n NetworkFilterConfig,\n NetworkMode,\n RemoteCodePolicy,\n Runtime,\n SessionInfo,\n StreamEvent,\n WsClientMessage,\n WsServerMessage,\n} from \"./types\";\n// ─── Utils ───\nexport { logger } from \"./utils/logger\";\n// ─── Version ───\nexport { VERSION } from \"./version\";\n",
|
|
28
28
|
"/**\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"
|
|
29
29
|
],
|
|
30
|
-
"mappings": "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",
|
|
31
|
-
"debugId": "
|
|
30
|
+
"mappings": "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",
|
|
31
|
+
"debugId": "52A84C2338D09E5564756E2164756E21",
|
|
32
32
|
"names": []
|
|
33
33
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -228,6 +228,18 @@ export interface ExecutionAudit {
|
|
|
228
228
|
stderr?: string;
|
|
229
229
|
metadata?: Record<string, string>;
|
|
230
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* Information about a persistent session on a remote isol8 server.
|
|
233
|
+
* Returned by the `GET /sessions` endpoint.
|
|
234
|
+
*/
|
|
235
|
+
export interface SessionInfo {
|
|
236
|
+
/** The session identifier. */
|
|
237
|
+
id: string;
|
|
238
|
+
/** Whether the session is currently executing a request. */
|
|
239
|
+
isActive: boolean;
|
|
240
|
+
/** ISO 8601 timestamp of when the session was last accessed. */
|
|
241
|
+
lastAccessedAt: string;
|
|
242
|
+
}
|
|
231
243
|
/**
|
|
232
244
|
* Isol8 lifecycle mode.
|
|
233
245
|
*
|
|
@@ -453,6 +465,20 @@ export interface SecurityConfig {
|
|
|
453
465
|
/** Path to a custom seccomp profile JSON file. Required if seccomp is "custom". */
|
|
454
466
|
customProfilePath?: string;
|
|
455
467
|
}
|
|
468
|
+
/** Configuration for database-backed API key authentication. */
|
|
469
|
+
export interface AuthConfig {
|
|
470
|
+
/** Enable DB-backed auth. When false, only static key auth is used. @default false */
|
|
471
|
+
enabled: boolean;
|
|
472
|
+
/**
|
|
473
|
+
* Database connection string. Omit for the default SQLite database at `~/.isol8/auth.db`.
|
|
474
|
+
* Set to a `postgres://` or `postgresql://` URL for PostgreSQL, or `mysql://` for MySQL.
|
|
475
|
+
*/
|
|
476
|
+
connectionString?: string;
|
|
477
|
+
/** Default token TTL in milliseconds. @default 86400000 (24h) */
|
|
478
|
+
defaultTtlMs: number;
|
|
479
|
+
/** Auto-cleanup interval for expired keys in milliseconds. @default 3600000 (1h) */
|
|
480
|
+
cleanupIntervalMs: number;
|
|
481
|
+
}
|
|
456
482
|
/** Configuration for audit logging. */
|
|
457
483
|
export interface AuditConfig {
|
|
458
484
|
/** Enable audit logging. @default false */
|
|
@@ -511,6 +537,8 @@ export interface Isol8Config {
|
|
|
511
537
|
remoteCode: RemoteCodePolicy;
|
|
512
538
|
/** Audit logging configuration. */
|
|
513
539
|
audit: AuditConfig;
|
|
540
|
+
/** Database-backed API key authentication configuration. */
|
|
541
|
+
auth: AuthConfig;
|
|
514
542
|
/** Enable debug logging. @default false */
|
|
515
543
|
debug: boolean;
|
|
516
544
|
}
|
|
@@ -552,5 +580,7 @@ export interface Isol8UserConfig {
|
|
|
552
580
|
remoteCode?: Partial<RemoteCodePolicy>;
|
|
553
581
|
/** Audit logging configuration. */
|
|
554
582
|
audit?: Partial<AuditConfig>;
|
|
583
|
+
/** Database-backed API key authentication configuration. */
|
|
584
|
+
auth?: Partial<AuthConfig>;
|
|
555
585
|
}
|
|
556
586
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@isol8/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.0",
|
|
4
4
|
"description": "Sandboxed code execution engine for AI agents and apps (Docker, runtime and network controls)",
|
|
5
5
|
"author": "Illusion47586",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"test:prod": "echo 'No production tests in core package'",
|
|
29
29
|
"lint:check": "ultracite check",
|
|
30
30
|
"lint:fix": "ultracite fix",
|
|
31
|
-
"schema": "ts-json-schema-generator --path src/types.ts --type Isol8UserConfig --tsconfig tsconfig.json -o schema/isol8.config.schema.json && ultracite fix schema/isol8.config.schema.json"
|
|
31
|
+
"schema": "ts-json-schema-generator --path src/types.ts --type Isol8UserConfig --tsconfig tsconfig.json --no-type-check -o schema/isol8.config.schema.json && ultracite fix schema/isol8.config.schema.json"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"dockerode": "^4.0.9",
|
|
@@ -99,6 +99,32 @@
|
|
|
99
99
|
},
|
|
100
100
|
"type": "object"
|
|
101
101
|
},
|
|
102
|
+
"auth": {
|
|
103
|
+
"additionalProperties": false,
|
|
104
|
+
"description": "Database-backed API key authentication configuration.",
|
|
105
|
+
"properties": {
|
|
106
|
+
"cleanupIntervalMs": {
|
|
107
|
+
"default": "3600000 (1h)",
|
|
108
|
+
"description": "Auto-cleanup interval for expired keys in milliseconds.",
|
|
109
|
+
"type": "number"
|
|
110
|
+
},
|
|
111
|
+
"connectionString": {
|
|
112
|
+
"description": "Database connection string. Omit for the default SQLite database at `~/.isol8/auth.db`. Set to a `postgres://` or `postgresql://` URL for PostgreSQL, or `mysql://` for MySQL.",
|
|
113
|
+
"type": "string"
|
|
114
|
+
},
|
|
115
|
+
"defaultTtlMs": {
|
|
116
|
+
"default": "86400000 (24h)",
|
|
117
|
+
"description": "Default token TTL in milliseconds.",
|
|
118
|
+
"type": "number"
|
|
119
|
+
},
|
|
120
|
+
"enabled": {
|
|
121
|
+
"default": false,
|
|
122
|
+
"description": "Enable DB-backed auth. When false, only static key auth is used.",
|
|
123
|
+
"type": "boolean"
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
"type": "object"
|
|
127
|
+
},
|
|
102
128
|
"cleanup": {
|
|
103
129
|
"additionalProperties": false,
|
|
104
130
|
"description": "Container cleanup and lifecycle settings. (Partial override allowed).",
|