isol8 0.8.1 → 0.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/cli.js +75 -23
- package/dist/index.js +52 -19
- package/dist/src/engine/docker.d.ts.map +1 -1
- package/dist/src/engine/image-builder.d.ts.map +1 -1
- package/dist/src/engine/utils.d.ts +9 -0
- package/dist/src/engine/utils.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,6 +15,7 @@ Secure code execution engine for AI agents. Run untrusted Python, Node.js, Bun,
|
|
|
15
15
|
- **Fast** — warm container pool for sub-100ms execution latency
|
|
16
16
|
- **Security first** — read-only rootfs, `no-new-privileges`, PID/memory/CPU limits
|
|
17
17
|
- **Network control** — `none` (default), `host`, or `filtered` (HTTP/HTTPS proxy with regex whitelist/blacklist)
|
|
18
|
+
- **Secure File I/O** — streaming file content avoids process argument leaks
|
|
18
19
|
- **File I/O** — upload files into and download files from sandboxes
|
|
19
20
|
- **Runtime packages** — install pip/npm/bun packages on-the-fly (`--install`)
|
|
20
21
|
- **Modern Node.js** — defaults to ESM (`.mjs`), supports CommonJS (`.cjs`)
|
package/dist/cli.js
CHANGED
|
@@ -6316,12 +6316,23 @@ var require_bcrypt_pbkdf = __commonJS((exports, module) => {
|
|
|
6316
6316
|
};
|
|
6317
6317
|
});
|
|
6318
6318
|
|
|
6319
|
+
// node_modules/cpu-features/build/Release/cpufeatures.node
|
|
6320
|
+
var require_cpufeatures = __commonJS((exports, module) => {
|
|
6321
|
+
module.exports = __require("./cpufeatures-tjjrgpt7.node");
|
|
6322
|
+
});
|
|
6323
|
+
|
|
6324
|
+
// node_modules/cpu-features/lib/index.js
|
|
6325
|
+
var require_lib2 = __commonJS((exports, module) => {
|
|
6326
|
+
var binding = require_cpufeatures();
|
|
6327
|
+
module.exports = binding.getCPUInfo;
|
|
6328
|
+
});
|
|
6329
|
+
|
|
6319
6330
|
// node_modules/ssh2/lib/protocol/constants.js
|
|
6320
6331
|
var require_constants = __commonJS((exports, module) => {
|
|
6321
6332
|
var crypto = __require("crypto");
|
|
6322
6333
|
var cpuInfo;
|
|
6323
6334
|
try {
|
|
6324
|
-
cpuInfo = (
|
|
6335
|
+
cpuInfo = require_lib2()();
|
|
6325
6336
|
} catch {}
|
|
6326
6337
|
var { bindingAvailable, CIPHER_INFO, MAC_INFO } = require_crypto();
|
|
6327
6338
|
var eddsaSupported = (() => {
|
|
@@ -20964,7 +20975,7 @@ var require_keygen = __commonJS((exports, module) => {
|
|
|
20964
20975
|
});
|
|
20965
20976
|
|
|
20966
20977
|
// node_modules/ssh2/lib/index.js
|
|
20967
|
-
var
|
|
20978
|
+
var require_lib3 = __commonJS((exports, module) => {
|
|
20968
20979
|
var {
|
|
20969
20980
|
AgentProtocol,
|
|
20970
20981
|
BaseAgent,
|
|
@@ -21010,7 +21021,7 @@ var require_lib2 = __commonJS((exports, module) => {
|
|
|
21010
21021
|
|
|
21011
21022
|
// node_modules/docker-modem/lib/ssh.js
|
|
21012
21023
|
var require_ssh = __commonJS((exports, module) => {
|
|
21013
|
-
var Client =
|
|
21024
|
+
var Client = require_lib3().Client;
|
|
21014
21025
|
var http = __require("http");
|
|
21015
21026
|
module.exports = function(opt) {
|
|
21016
21027
|
var conn = new Client;
|
|
@@ -55172,6 +55183,7 @@ var init_pool = __esm(() => {
|
|
|
55172
55183
|
// src/engine/utils.ts
|
|
55173
55184
|
var exports_utils = {};
|
|
55174
55185
|
__export(exports_utils, {
|
|
55186
|
+
validatePackageName: () => validatePackageName,
|
|
55175
55187
|
truncateOutput: () => truncateOutput,
|
|
55176
55188
|
parseMemoryLimit: () => parseMemoryLimit,
|
|
55177
55189
|
maskSecrets: () => maskSecrets,
|
|
@@ -55266,31 +55278,43 @@ function extractFromTar(tarBuffer, targetPath) {
|
|
|
55266
55278
|
}
|
|
55267
55279
|
throw new Error(`File "${targetPath}" not found in tar archive`);
|
|
55268
55280
|
}
|
|
55281
|
+
function validatePackageName(name) {
|
|
55282
|
+
if (!/^[@a-zA-Z0-9_./\-=]+$/.test(name)) {
|
|
55283
|
+
throw new Error(`Invalid package name: "${name}". Only alphanumeric, -, _, ., /, @, and = are allowed.`);
|
|
55284
|
+
}
|
|
55285
|
+
return name;
|
|
55286
|
+
}
|
|
55269
55287
|
|
|
55270
55288
|
// src/engine/docker.ts
|
|
55271
55289
|
var exports_docker = {};
|
|
55272
55290
|
__export(exports_docker, {
|
|
55273
55291
|
DockerIsol8: () => DockerIsol8
|
|
55274
55292
|
});
|
|
55293
|
+
import { spawn } from "node:child_process";
|
|
55275
55294
|
import { randomUUID } from "node:crypto";
|
|
55276
55295
|
import { existsSync as existsSync2, readFileSync as readFileSync2 } from "node:fs";
|
|
55277
55296
|
import { PassThrough } from "node:stream";
|
|
55278
55297
|
async function writeFileViaExec(container, filePath, content) {
|
|
55279
55298
|
const data = typeof content === "string" ? Buffer.from(content, "utf-8") : content;
|
|
55280
|
-
|
|
55281
|
-
|
|
55282
|
-
|
|
55283
|
-
|
|
55299
|
+
return new Promise((resolve2, reject) => {
|
|
55300
|
+
const child = spawn("docker", ["exec", "-i", "-u", "sandbox", container.id, "sh", "-c", `cat > ${filePath}`], {
|
|
55301
|
+
stdio: ["pipe", "ignore", "pipe"]
|
|
55302
|
+
});
|
|
55303
|
+
child.on("error", (err) => {
|
|
55304
|
+
reject(new Error(`Failed to spawn docker exec: ${err.message}`));
|
|
55305
|
+
});
|
|
55306
|
+
let stderr = "";
|
|
55307
|
+
child.stderr.on("data", (chunk) => stderr += chunk.toString());
|
|
55308
|
+
child.stdin.write(data);
|
|
55309
|
+
child.stdin.end();
|
|
55310
|
+
child.on("close", (code) => {
|
|
55311
|
+
if (code !== 0) {
|
|
55312
|
+
reject(new Error(`Failed to write file ${filePath}: ${stderr} (exit code ${code})`));
|
|
55313
|
+
} else {
|
|
55314
|
+
resolve2();
|
|
55315
|
+
}
|
|
55316
|
+
});
|
|
55284
55317
|
});
|
|
55285
|
-
await exec.start({ Detach: true });
|
|
55286
|
-
let info2 = await exec.inspect();
|
|
55287
|
-
while (info2.Running) {
|
|
55288
|
-
await new Promise((r) => setTimeout(r, 50));
|
|
55289
|
-
info2 = await exec.inspect();
|
|
55290
|
-
}
|
|
55291
|
-
if (info2.ExitCode !== 0) {
|
|
55292
|
-
throw new Error(`Failed to write file ${filePath} in container (exit code ${info2.ExitCode})`);
|
|
55293
|
-
}
|
|
55294
55318
|
}
|
|
55295
55319
|
async function readFileViaExec(container, filePath) {
|
|
55296
55320
|
const exec = await container.exec({
|
|
@@ -55958,11 +55982,16 @@ class DockerIsol8 {
|
|
|
55958
55982
|
let stderr = "";
|
|
55959
55983
|
let truncated = false;
|
|
55960
55984
|
let settled = false;
|
|
55985
|
+
let stdoutEnded = false;
|
|
55986
|
+
let stderrEnded = false;
|
|
55961
55987
|
const timer = setTimeout(() => {
|
|
55962
55988
|
if (settled) {
|
|
55963
55989
|
return;
|
|
55964
55990
|
}
|
|
55965
55991
|
settled = true;
|
|
55992
|
+
if (stream.destroy) {
|
|
55993
|
+
stream.destroy();
|
|
55994
|
+
}
|
|
55966
55995
|
resolve2({ stdout, stderr: `${stderr}
|
|
55967
55996
|
--- EXECUTION TIMED OUT ---`, truncated });
|
|
55968
55997
|
}, timeoutMs);
|
|
@@ -55985,13 +56014,23 @@ class DockerIsol8 {
|
|
|
55985
56014
|
truncated = true;
|
|
55986
56015
|
}
|
|
55987
56016
|
});
|
|
55988
|
-
|
|
56017
|
+
const checkDone = () => {
|
|
55989
56018
|
if (settled) {
|
|
55990
56019
|
return;
|
|
55991
56020
|
}
|
|
55992
|
-
|
|
55993
|
-
|
|
55994
|
-
|
|
56021
|
+
if (stdoutEnded && stderrEnded) {
|
|
56022
|
+
settled = true;
|
|
56023
|
+
clearTimeout(timer);
|
|
56024
|
+
resolve2({ stdout, stderr, truncated });
|
|
56025
|
+
}
|
|
56026
|
+
};
|
|
56027
|
+
stdoutStream.on("end", () => {
|
|
56028
|
+
stdoutEnded = true;
|
|
56029
|
+
checkDone();
|
|
56030
|
+
});
|
|
56031
|
+
stderrStream.on("end", () => {
|
|
56032
|
+
stderrEnded = true;
|
|
56033
|
+
checkDone();
|
|
55995
56034
|
});
|
|
55996
56035
|
stream.on("error", (err) => {
|
|
55997
56036
|
if (settled) {
|
|
@@ -56001,6 +56040,18 @@ class DockerIsol8 {
|
|
|
56001
56040
|
clearTimeout(timer);
|
|
56002
56041
|
reject(err);
|
|
56003
56042
|
});
|
|
56043
|
+
stream.on("end", () => {
|
|
56044
|
+
if (settled) {
|
|
56045
|
+
return;
|
|
56046
|
+
}
|
|
56047
|
+
setTimeout(() => {
|
|
56048
|
+
if (!settled) {
|
|
56049
|
+
stdoutEnded = true;
|
|
56050
|
+
stderrEnded = true;
|
|
56051
|
+
checkDone();
|
|
56052
|
+
}
|
|
56053
|
+
}, 100);
|
|
56054
|
+
});
|
|
56004
56055
|
});
|
|
56005
56056
|
}
|
|
56006
56057
|
postProcessOutput(output, _truncated) {
|
|
@@ -56045,7 +56096,7 @@ var package_default;
|
|
|
56045
56096
|
var init_package = __esm(() => {
|
|
56046
56097
|
package_default = {
|
|
56047
56098
|
name: "isol8",
|
|
56048
|
-
version: "0.8.
|
|
56099
|
+
version: "0.8.2",
|
|
56049
56100
|
description: "Secure code execution engine for AI agents",
|
|
56050
56101
|
author: "Illusion47586",
|
|
56051
56102
|
license: "MIT",
|
|
@@ -61458,8 +61509,9 @@ async function buildCustomImage(docker, runtime, packages, onProgress) {
|
|
|
61458
61509
|
const dockerfileContent = `FROM isol8:${runtime}
|
|
61459
61510
|
${installCmd}
|
|
61460
61511
|
`;
|
|
61461
|
-
const { createTarBuffer: createTarBuffer2 } = await Promise.resolve().then(() => exports_utils);
|
|
61512
|
+
const { createTarBuffer: createTarBuffer2, validatePackageName: validatePackageName2 } = await Promise.resolve().then(() => exports_utils);
|
|
61462
61513
|
const { Readable } = await import("node:stream");
|
|
61514
|
+
packages.forEach(validatePackageName2);
|
|
61463
61515
|
const tarBuffer = createTarBuffer2("Dockerfile", dockerfileContent);
|
|
61464
61516
|
const stream = await docker.buildImage(Readable.from(tarBuffer), {
|
|
61465
61517
|
t: tag,
|
|
@@ -62052,4 +62104,4 @@ if (!process.argv.slice(2).length) {
|
|
|
62052
62104
|
}
|
|
62053
62105
|
program2.parse();
|
|
62054
62106
|
|
|
62055
|
-
//# debugId=
|
|
62107
|
+
//# debugId=6B900589B43971DE64756E2164756E21
|
package/dist/index.js
CHANGED
|
@@ -451,26 +451,32 @@ var exports_docker = {};
|
|
|
451
451
|
__export(exports_docker, {
|
|
452
452
|
DockerIsol8: () => DockerIsol8
|
|
453
453
|
});
|
|
454
|
+
import { spawn } from "node:child_process";
|
|
454
455
|
import { randomUUID } from "node:crypto";
|
|
455
456
|
import { existsSync as existsSync2, readFileSync as readFileSync2 } from "node:fs";
|
|
456
457
|
import { PassThrough } from "node:stream";
|
|
457
458
|
import Docker from "dockerode";
|
|
458
459
|
async function writeFileViaExec(container, filePath, content) {
|
|
459
460
|
const data = typeof content === "string" ? Buffer.from(content, "utf-8") : content;
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
461
|
+
return new Promise((resolve2, reject) => {
|
|
462
|
+
const child = spawn("docker", ["exec", "-i", "-u", "sandbox", container.id, "sh", "-c", `cat > ${filePath}`], {
|
|
463
|
+
stdio: ["pipe", "ignore", "pipe"]
|
|
464
|
+
});
|
|
465
|
+
child.on("error", (err) => {
|
|
466
|
+
reject(new Error(`Failed to spawn docker exec: ${err.message}`));
|
|
467
|
+
});
|
|
468
|
+
let stderr = "";
|
|
469
|
+
child.stderr.on("data", (chunk) => stderr += chunk.toString());
|
|
470
|
+
child.stdin.write(data);
|
|
471
|
+
child.stdin.end();
|
|
472
|
+
child.on("close", (code) => {
|
|
473
|
+
if (code !== 0) {
|
|
474
|
+
reject(new Error(`Failed to write file ${filePath}: ${stderr} (exit code ${code})`));
|
|
475
|
+
} else {
|
|
476
|
+
resolve2();
|
|
477
|
+
}
|
|
478
|
+
});
|
|
464
479
|
});
|
|
465
|
-
await exec.start({ Detach: true });
|
|
466
|
-
let info = await exec.inspect();
|
|
467
|
-
while (info.Running) {
|
|
468
|
-
await new Promise((r) => setTimeout(r, 50));
|
|
469
|
-
info = await exec.inspect();
|
|
470
|
-
}
|
|
471
|
-
if (info.ExitCode !== 0) {
|
|
472
|
-
throw new Error(`Failed to write file ${filePath} in container (exit code ${info.ExitCode})`);
|
|
473
|
-
}
|
|
474
480
|
}
|
|
475
481
|
async function readFileViaExec(container, filePath) {
|
|
476
482
|
const exec = await container.exec({
|
|
@@ -1138,11 +1144,16 @@ class DockerIsol8 {
|
|
|
1138
1144
|
let stderr = "";
|
|
1139
1145
|
let truncated = false;
|
|
1140
1146
|
let settled = false;
|
|
1147
|
+
let stdoutEnded = false;
|
|
1148
|
+
let stderrEnded = false;
|
|
1141
1149
|
const timer = setTimeout(() => {
|
|
1142
1150
|
if (settled) {
|
|
1143
1151
|
return;
|
|
1144
1152
|
}
|
|
1145
1153
|
settled = true;
|
|
1154
|
+
if (stream.destroy) {
|
|
1155
|
+
stream.destroy();
|
|
1156
|
+
}
|
|
1146
1157
|
resolve2({ stdout, stderr: `${stderr}
|
|
1147
1158
|
--- EXECUTION TIMED OUT ---`, truncated });
|
|
1148
1159
|
}, timeoutMs);
|
|
@@ -1165,13 +1176,23 @@ class DockerIsol8 {
|
|
|
1165
1176
|
truncated = true;
|
|
1166
1177
|
}
|
|
1167
1178
|
});
|
|
1168
|
-
|
|
1179
|
+
const checkDone = () => {
|
|
1169
1180
|
if (settled) {
|
|
1170
1181
|
return;
|
|
1171
1182
|
}
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1183
|
+
if (stdoutEnded && stderrEnded) {
|
|
1184
|
+
settled = true;
|
|
1185
|
+
clearTimeout(timer);
|
|
1186
|
+
resolve2({ stdout, stderr, truncated });
|
|
1187
|
+
}
|
|
1188
|
+
};
|
|
1189
|
+
stdoutStream.on("end", () => {
|
|
1190
|
+
stdoutEnded = true;
|
|
1191
|
+
checkDone();
|
|
1192
|
+
});
|
|
1193
|
+
stderrStream.on("end", () => {
|
|
1194
|
+
stderrEnded = true;
|
|
1195
|
+
checkDone();
|
|
1175
1196
|
});
|
|
1176
1197
|
stream.on("error", (err) => {
|
|
1177
1198
|
if (settled) {
|
|
@@ -1181,6 +1202,18 @@ class DockerIsol8 {
|
|
|
1181
1202
|
clearTimeout(timer);
|
|
1182
1203
|
reject(err);
|
|
1183
1204
|
});
|
|
1205
|
+
stream.on("end", () => {
|
|
1206
|
+
if (settled) {
|
|
1207
|
+
return;
|
|
1208
|
+
}
|
|
1209
|
+
setTimeout(() => {
|
|
1210
|
+
if (!settled) {
|
|
1211
|
+
stdoutEnded = true;
|
|
1212
|
+
stderrEnded = true;
|
|
1213
|
+
checkDone();
|
|
1214
|
+
}
|
|
1215
|
+
}, 100);
|
|
1216
|
+
});
|
|
1184
1217
|
});
|
|
1185
1218
|
}
|
|
1186
1219
|
postProcessOutput(output, _truncated) {
|
|
@@ -1424,7 +1457,7 @@ init_logger();
|
|
|
1424
1457
|
// package.json
|
|
1425
1458
|
var package_default = {
|
|
1426
1459
|
name: "isol8",
|
|
1427
|
-
version: "0.8.
|
|
1460
|
+
version: "0.8.2",
|
|
1428
1461
|
description: "Secure code execution engine for AI agents",
|
|
1429
1462
|
author: "Illusion47586",
|
|
1430
1463
|
license: "MIT",
|
|
@@ -1759,4 +1792,4 @@ export {
|
|
|
1759
1792
|
BunAdapter
|
|
1760
1793
|
};
|
|
1761
1794
|
|
|
1762
|
-
//# debugId=
|
|
1795
|
+
//# debugId=D81C2764EAFDC14264756E2164756E21
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../src/engine/docker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../../src/engine/docker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,MAAM,MAAM,WAAW,CAAC;AAG/B,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,WAAW,EAEX,YAAY,EAIZ,WAAW,EACZ,MAAM,UAAU,CAAC;AAiTlB,2HAA2H;AAC3H,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,WAAY,YAAW,WAAW;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IAEjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,IAAI,CAA8B;IAE1C;;;OAGG;gBACS,OAAO,GAAE,kBAAuB,EAAE,aAAa,SAAK;IAwBhE;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,kFAAkF;IAC5E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B;;;OAGG;IACG,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAW9D;;;;;;;OAOG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpE;;;;;;OAMG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB5C,6GAA6G;IAC7G,IAAI,WAAW,IAAI,MAAM,GAAG,IAAI,CAE/B;IAED;;;OAGG;IACI,aAAa,CAAC,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAAC,WAAW,CAAC;YAsFzD,YAAY;YAcZ,gBAAgB;YA0GhB,iBAAiB;YA8FjB,aAAa;YAkBb,oBAAoB;YASpB,wBAAwB;IA4BtC,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,eAAe;IA2BvB,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,yBAAyB;IAyBjC,OAAO,CAAC,QAAQ;YAwCD,gBAAgB;YA8EjB,iBAAiB;IAiG/B,OAAO,CAAC,iBAAiB;IAYzB;;;;;;;;;;;;;;;;;;;;OAoBG;WACU,OAAO,CAClB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CA2BlE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-builder.d.ts","sourceRoot":"","sources":["../../../src/engine/image-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAmB5C,mDAAmD;AACnD,UAAU,aAAa;IACrB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;IACtC,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,gBAAgB,GAAG,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;AAE1D;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkBf;
|
|
1
|
+
{"version":3,"file":"image-builder.d.ts","sourceRoot":"","sources":["../../../src/engine/image-builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAmB5C,mDAAmD;AACnD,UAAU,aAAa;IACrB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;IACtC,+DAA+D;IAC/D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,KAAK,gBAAgB,GAAG,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;AAE1D;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,UAAU,CAAC,EAAE,gBAAgB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkBf;AAgED;;GAEG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOrF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa/F"}
|
|
@@ -59,4 +59,13 @@ export declare function createTarBuffer(filePath: string, content: Buffer | stri
|
|
|
59
59
|
* @throws {Error} If the file is not found in the archive.
|
|
60
60
|
*/
|
|
61
61
|
export declare function extractFromTar(tarBuffer: Buffer, targetPath: string): Buffer;
|
|
62
|
+
/**
|
|
63
|
+
* Validates a package name to prevent command injection.
|
|
64
|
+
* allow alphanumeric, dash, underscore, dot, @, / (for scoped packages), and = (for versions)
|
|
65
|
+
*
|
|
66
|
+
* @param name - The package name to validate.
|
|
67
|
+
* @returns The name if valid.
|
|
68
|
+
* @throws {Error} If the name contains invalid characters.
|
|
69
|
+
*/
|
|
70
|
+
export declare function validatePackageName(name: string): string;
|
|
62
71
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/engine/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiBtD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAetC;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAQjF;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CA8ClF;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAoC5E"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/engine/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAiBtD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAetC;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAQjF;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CA8ClF;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAoC5E;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQxD"}
|