spell-runtime 1.1.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,12 @@
1
+ export interface StoredLicense {
2
+ name: string;
3
+ hasToken: boolean;
4
+ created_at?: string;
5
+ updated_at?: string;
6
+ }
7
+ export declare function toLicenseKey(name: string): string;
8
+ export declare function licenseFilePath(name: string): string;
9
+ export declare function upsertLicense(name: string, token: string): Promise<void>;
10
+ export declare function removeLicense(name: string): Promise<boolean>;
11
+ export declare function listLicenses(): Promise<StoredLicense[]>;
12
+ export declare function findFirstUsableLicense(): Promise<StoredLicense | null>;
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.toLicenseKey = toLicenseKey;
7
+ exports.licenseFilePath = licenseFilePath;
8
+ exports.upsertLicense = upsertLicense;
9
+ exports.removeLicense = removeLicense;
10
+ exports.listLicenses = listLicenses;
11
+ exports.findFirstUsableLicense = findFirstUsableLicense;
12
+ const promises_1 = require("node:fs/promises");
13
+ const node_path_1 = __importDefault(require("node:path"));
14
+ const errors_1 = require("../util/errors");
15
+ const paths_1 = require("../util/paths");
16
+ function toLicenseKey(name) {
17
+ return Buffer.from(name, "utf8").toString("base64url");
18
+ }
19
+ function licenseFilePath(name) {
20
+ return node_path_1.default.join((0, paths_1.licensesRoot)(), `${toLicenseKey(name)}.json`);
21
+ }
22
+ async function upsertLicense(name, token) {
23
+ const normalizedName = normalizeName(name);
24
+ const normalizedToken = normalizeToken(token);
25
+ await (0, promises_1.mkdir)((0, paths_1.licensesRoot)(), { recursive: true });
26
+ const now = new Date().toISOString();
27
+ const existing = await loadLicenseRecord(normalizedName);
28
+ const payload = {
29
+ version: "v1",
30
+ name: normalizedName,
31
+ token: normalizedToken,
32
+ created_at: existing?.created_at ?? now,
33
+ updated_at: now
34
+ };
35
+ const filePath = licenseFilePath(normalizedName);
36
+ await (0, promises_1.writeFile)(filePath, `${JSON.stringify(payload, null, 2)}\n`, "utf8");
37
+ }
38
+ async function removeLicense(name) {
39
+ const normalizedName = normalizeName(name);
40
+ const filePath = licenseFilePath(normalizedName);
41
+ const existed = await (0, promises_1.access)(filePath).then(() => true).catch(() => false);
42
+ if (!existed)
43
+ return false;
44
+ await (0, promises_1.rm)(filePath, { force: true });
45
+ return true;
46
+ }
47
+ async function listLicenses() {
48
+ const entries = await (0, promises_1.readdir)((0, paths_1.licensesRoot)()).catch(() => []);
49
+ const licenses = [];
50
+ for (const entry of entries) {
51
+ if (!entry.endsWith(".json"))
52
+ continue;
53
+ const filePath = node_path_1.default.join((0, paths_1.licensesRoot)(), entry);
54
+ let raw;
55
+ try {
56
+ raw = await (0, promises_1.readFile)(filePath, "utf8");
57
+ }
58
+ catch {
59
+ continue;
60
+ }
61
+ let parsed;
62
+ try {
63
+ parsed = JSON.parse(raw);
64
+ }
65
+ catch {
66
+ continue;
67
+ }
68
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
69
+ continue;
70
+ const obj = parsed;
71
+ if (obj.version !== "v1")
72
+ continue;
73
+ if (typeof obj.name !== "string" || !obj.name.trim())
74
+ continue;
75
+ if (typeof obj.token !== "string")
76
+ continue;
77
+ licenses.push({
78
+ name: obj.name.trim(),
79
+ hasToken: obj.token.trim().length > 0,
80
+ created_at: typeof obj.created_at === "string" ? obj.created_at : undefined,
81
+ updated_at: typeof obj.updated_at === "string" ? obj.updated_at : undefined
82
+ });
83
+ }
84
+ licenses.sort((a, b) => a.name.localeCompare(b.name));
85
+ return licenses;
86
+ }
87
+ async function findFirstUsableLicense() {
88
+ const licenses = await listLicenses();
89
+ return licenses.find((entry) => entry.hasToken) ?? null;
90
+ }
91
+ async function loadLicenseRecord(name) {
92
+ const filePath = licenseFilePath(name);
93
+ let raw;
94
+ try {
95
+ raw = await (0, promises_1.readFile)(filePath, "utf8");
96
+ }
97
+ catch {
98
+ return null;
99
+ }
100
+ let parsed;
101
+ try {
102
+ parsed = JSON.parse(raw);
103
+ }
104
+ catch {
105
+ throw new errors_1.SpellError(`failed to parse license file: ${filePath}`);
106
+ }
107
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
108
+ throw new errors_1.SpellError(`license file must be a JSON object: ${filePath}`);
109
+ }
110
+ const obj = parsed;
111
+ const version = readRequiredString(obj, "version");
112
+ if (version !== "v1") {
113
+ throw new errors_1.SpellError(`unsupported license file version: ${version}`);
114
+ }
115
+ const parsedName = readRequiredString(obj, "name");
116
+ if (parsedName !== name) {
117
+ throw new errors_1.SpellError(`license file name mismatch: expected '${name}', got '${parsedName}'`);
118
+ }
119
+ return {
120
+ version: "v1",
121
+ name: parsedName,
122
+ token: readRequiredString(obj, "token"),
123
+ created_at: readRequiredString(obj, "created_at"),
124
+ updated_at: readRequiredString(obj, "updated_at")
125
+ };
126
+ }
127
+ function normalizeName(name) {
128
+ const trimmed = name.trim();
129
+ if (!trimmed) {
130
+ throw new errors_1.SpellError("license name must be non-empty");
131
+ }
132
+ return trimmed;
133
+ }
134
+ function normalizeToken(token) {
135
+ const trimmed = token.trim();
136
+ if (!trimmed) {
137
+ throw new errors_1.SpellError("license token must be non-empty");
138
+ }
139
+ return trimmed;
140
+ }
141
+ function readRequiredString(obj, key) {
142
+ const value = obj[key];
143
+ if (typeof value !== "string" || !value.trim()) {
144
+ throw new errors_1.SpellError(`missing '${key}' string`);
145
+ }
146
+ return value.trim();
147
+ }
148
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/license/store.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,8 @@ const dockerRunner_1 = require("./dockerRunner");
16
16
  const summary_1 = require("./summary");
17
17
  const verify_1 = require("../signature/verify");
18
18
  const trustStore_1 = require("../signature/trustStore");
19
+ const store_2 = require("../license/store");
20
+ const runtimeLimits_1 = require("./runtimeLimits");
19
21
  async function castSpell(options) {
20
22
  const logger = (0, pino_1.default)({ level: options.verbose ? "debug" : "info" });
21
23
  const startedAt = new Date().toISOString();
@@ -38,6 +40,9 @@ async function castSpell(options) {
38
40
  runtime: {
39
41
  execution: "host",
40
42
  platforms: []
43
+ },
44
+ license: {
45
+ licensed: false
41
46
  }
42
47
  },
43
48
  steps: [],
@@ -46,6 +51,8 @@ async function castSpell(options) {
46
51
  success: false
47
52
  };
48
53
  try {
54
+ const runtimeInputMaxBytes = (0, runtimeLimits_1.readRuntimeInputMaxBytes)();
55
+ const runtimeExecutionTimeoutMs = (0, runtimeLimits_1.readRuntimeExecutionTimeoutMs)();
49
56
  const loaded = await (0, store_1.resolveInstalledBundle)(options.id, options.version);
50
57
  const { manifest, bundlePath } = loaded;
51
58
  executionId = (0, executionLog_1.makeExecutionId)(manifest.id, manifest.version);
@@ -55,13 +62,20 @@ async function castSpell(options) {
55
62
  log.summary = {
56
63
  risk: manifest.risk,
57
64
  billing: manifest.billing,
58
- runtime: manifest.runtime
65
+ runtime: manifest.runtime,
66
+ license: {
67
+ licensed: false
68
+ }
59
69
  };
60
70
  log.signature = {
61
71
  required: options.requireSignature,
62
72
  status: "skipped"
63
73
  };
64
74
  const input = await (0, input_1.buildInput)(options.inputFile, options.paramPairs);
75
+ const inputSizeBytes = Buffer.byteLength(JSON.stringify(input), "utf8");
76
+ if (inputSizeBytes > runtimeInputMaxBytes) {
77
+ throw new errors_1.SpellError(`merged input is ${inputSizeBytes} bytes, exceeds SPELL_RUNTIME_INPUT_MAX_BYTES=${runtimeInputMaxBytes}`);
78
+ }
65
79
  log.input = input;
66
80
  const schema = await (0, store_1.readSchemaFromManifest)(manifest, bundlePath);
67
81
  (0, input_1.validateInputAgainstSchema)(schema, input);
@@ -96,6 +110,16 @@ async function castSpell(options) {
96
110
  if (manifest.billing.enabled && !options.allowBilling) {
97
111
  throw new errors_1.SpellError("billing enabled requires --allow-billing");
98
112
  }
113
+ if (manifest.billing.enabled) {
114
+ const matchedLicense = await (0, store_2.findFirstUsableLicense)();
115
+ if (!matchedLicense) {
116
+ throw new errors_1.SpellError("billing enabled requires license token (spell license add ...)");
117
+ }
118
+ log.summary.license = {
119
+ licensed: true,
120
+ name: matchedLicense.name
121
+ };
122
+ }
99
123
  for (const permission of manifest.permissions) {
100
124
  const tokenKey = `CONNECTOR_${permission.connector.toUpperCase().replace(/[^A-Z0-9]/g, "_")}_TOKEN`;
101
125
  if (!process.env[tokenKey]) {
@@ -115,7 +139,7 @@ async function castSpell(options) {
115
139
  }
116
140
  if (manifest.runtime.execution === "docker") {
117
141
  logger.debug({ id: manifest.id, version: manifest.version }, "starting docker execution");
118
- const dockerResult = await (0, dockerRunner_1.runDocker)(manifest, bundlePath, input);
142
+ const dockerResult = await (0, dockerRunner_1.runDocker)(manifest, bundlePath, input, runtimeExecutionTimeoutMs);
119
143
  log.steps = dockerResult.stepResults;
120
144
  log.outputs = dockerResult.outputs;
121
145
  log.checks = dockerResult.checks;
@@ -129,7 +153,7 @@ async function castSpell(options) {
129
153
  };
130
154
  }
131
155
  logger.debug({ id: manifest.id, version: manifest.version }, "starting host execution");
132
- const runResult = await (0, hostRunner_1.runHost)(manifest, bundlePath, input);
156
+ const runResult = await (0, hostRunner_1.runHost)(manifest, bundlePath, input, runtimeExecutionTimeoutMs);
133
157
  log.steps = runResult.stepResults;
134
158
  log.outputs = runResult.outputs;
135
159
  const checkResults = await (0, evaluate_1.evaluateChecks)(manifest.checks, bundlePath, runResult.outputs, true);
@@ -1 +1 @@
1
- {"version":3,"file":"cast.js","sourceRoot":"","sources":["../../src/runner/cast.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cast.js","sourceRoot":"","sources":["../../src/runner/cast.ts"],"names":[],"mappings":"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"}
@@ -6,4 +6,4 @@ export interface DockerRunnerResult {
6
6
  outputs: Record<string, unknown>;
7
7
  checks: CheckResult[];
8
8
  }
9
- export declare function runDocker(manifest: SpellBundleManifest, bundlePath: string, input: Record<string, unknown>): Promise<DockerRunnerResult>;
9
+ export declare function runDocker(manifest: SpellBundleManifest, bundlePath: string, input: Record<string, unknown>, executionTimeoutMs?: number): Promise<DockerRunnerResult>;
@@ -9,7 +9,8 @@ const node_os_1 = require("node:os");
9
9
  const node_path_1 = __importDefault(require("node:path"));
10
10
  const node_child_process_1 = require("node:child_process");
11
11
  const errors_1 = require("../util/errors");
12
- async function runDocker(manifest, bundlePath, input) {
12
+ const runtimeLimits_1 = require("./runtimeLimits");
13
+ async function runDocker(manifest, bundlePath, input, executionTimeoutMs) {
13
14
  const dockerImage = manifest.runtime.docker_image;
14
15
  if (!dockerImage) {
15
16
  throw new errors_1.SpellError("runtime.docker_image is required when runtime.execution=docker");
@@ -19,7 +20,10 @@ async function runDocker(manifest, bundlePath, input) {
19
20
  await (0, promises_1.writeFile)(inputPath, JSON.stringify(input), "utf8");
20
21
  try {
21
22
  const args = buildDockerArgs(dockerImage, bundlePath, tempDir, manifest);
22
- const { code, stdout, stderr } = await runProcess("docker", args, process.cwd());
23
+ const { code, stdout, stderr, timedOut } = await runProcess("docker", args, process.cwd(), executionTimeoutMs);
24
+ if (timedOut && executionTimeoutMs !== undefined) {
25
+ throw new errors_1.SpellError((0, runtimeLimits_1.formatExecutionTimeoutMessage)(executionTimeoutMs));
26
+ }
23
27
  if (code !== 0) {
24
28
  throw new errors_1.SpellError(stderr.trim() || `docker exited with code ${code}`);
25
29
  }
@@ -64,7 +68,7 @@ function buildDockerArgs(dockerImage, bundlePath, tempDir, manifest) {
64
68
  }
65
69
  function collectEnvVarsToPass(manifest) {
66
70
  const out = [];
67
- // pass connector tokens only (and fail earlier if missing)
71
+ // pass connector tokens (and fail earlier if missing)
68
72
  for (const permission of manifest.permissions) {
69
73
  const tokenKey = `CONNECTOR_${permission.connector.toUpperCase().replace(/[^A-Z0-9]/g, "_")}_TOKEN`;
70
74
  const value = process.env[tokenKey];
@@ -72,6 +76,10 @@ function collectEnvVarsToPass(manifest) {
72
76
  out.push([tokenKey, value]);
73
77
  }
74
78
  }
79
+ const stepTimeout = process.env.SPELL_RUNTIME_STEP_TIMEOUT_MS;
80
+ if (typeof stepTimeout === "string" && stepTimeout.trim() !== "") {
81
+ out.push(["SPELL_RUNTIME_STEP_TIMEOUT_MS", stepTimeout.trim()]);
82
+ }
75
83
  return out;
76
84
  }
77
85
  function parseRunnerJson(stdout) {
@@ -98,7 +106,7 @@ function parseRunnerJson(stdout) {
98
106
  checks: Array.isArray(obj.checks) ? obj.checks : []
99
107
  };
100
108
  }
101
- async function runProcess(command, args, cwd) {
109
+ async function runProcess(command, args, cwd, timeoutMs) {
102
110
  const child = (0, node_child_process_1.spawn)(command, args, {
103
111
  shell: false,
104
112
  cwd,
@@ -112,10 +120,26 @@ async function runProcess(command, args, cwd) {
112
120
  child.stderr.on("data", (chunk) => {
113
121
  stderr += chunk.toString();
114
122
  });
115
- const code = await new Promise((resolve, reject) => {
116
- child.once("error", reject);
117
- child.once("close", (exitCode) => resolve(exitCode ?? 1));
118
- });
119
- return { code, stdout, stderr };
123
+ let timedOut = false;
124
+ let timer;
125
+ if (timeoutMs !== undefined) {
126
+ timer = setTimeout(() => {
127
+ timedOut = true;
128
+ child.kill("SIGKILL");
129
+ }, timeoutMs);
130
+ }
131
+ let code;
132
+ try {
133
+ code = await new Promise((resolve, reject) => {
134
+ child.once("error", reject);
135
+ child.once("close", (exitCode) => resolve(exitCode ?? 1));
136
+ });
137
+ }
138
+ finally {
139
+ if (timer) {
140
+ clearTimeout(timer);
141
+ }
142
+ }
143
+ return { code, stdout, stderr, timedOut };
120
144
  }
121
145
  //# sourceMappingURL=dockerRunner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dockerRunner.js","sourceRoot":"","sources":["../../src/runner/dockerRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dockerRunner.js","sourceRoot":"","sources":["../../src/runner/dockerRunner.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { SpellBundleManifest, StepResult } from "../types";
2
- export declare function runHost(manifest: SpellBundleManifest, bundlePath: string, input: Record<string, unknown>): Promise<{
2
+ export declare function runHost(manifest: SpellBundleManifest, bundlePath: string, input: Record<string, unknown>, executionTimeoutMs?: number): Promise<{
3
3
  outputs: Record<string, unknown>;
4
4
  stepResults: StepResult[];
5
5
  }>;
@@ -10,10 +10,12 @@ const node_path_1 = __importDefault(require("node:path"));
10
10
  const errors_1 = require("../util/errors");
11
11
  const httpStep_1 = require("../steps/httpStep");
12
12
  const shellStep_1 = require("../steps/shellStep");
13
- async function runHost(manifest, bundlePath, input) {
13
+ const runtimeLimits_1 = require("./runtimeLimits");
14
+ async function runHost(manifest, bundlePath, input, executionTimeoutMs) {
14
15
  const tempDir = await (0, promises_1.mkdtemp)(node_path_1.default.join((0, node_os_1.tmpdir)(), "spell-input-"));
15
16
  const inputPath = node_path_1.default.join(tempDir, "input.json");
16
17
  await (0, promises_1.writeFile)(inputPath, JSON.stringify(input), "utf8");
18
+ const executionDeadlineMs = executionTimeoutMs !== undefined ? Date.now() + executionTimeoutMs : undefined;
17
19
  const env = {
18
20
  ...process.env,
19
21
  INPUT_JSON: inputPath
@@ -22,14 +24,21 @@ async function runHost(manifest, bundlePath, input) {
22
24
  const stepResults = [];
23
25
  for (const step of manifest.steps) {
24
26
  const runPath = node_path_1.default.resolve(bundlePath, step.run);
27
+ const remainingExecutionMs = executionDeadlineMs !== undefined ? executionDeadlineMs - Date.now() : undefined;
28
+ if (remainingExecutionMs !== undefined && remainingExecutionMs <= 0) {
29
+ throw new errors_1.SpellError((0, runtimeLimits_1.formatExecutionTimeoutMessage)(executionTimeoutMs, step.name));
30
+ }
25
31
  if (step.uses === "shell") {
26
- const result = await (0, shellStep_1.runShellStep)(step, runPath, bundlePath, env);
32
+ const result = await (0, shellStep_1.runShellStep)(step, runPath, bundlePath, env, {
33
+ maxDurationMs: remainingExecutionMs,
34
+ executionTimeoutMs
35
+ });
27
36
  stepResults.push(result.stepResult);
28
37
  outputs[`step.${step.name}.stdout`] = result.stdout;
29
38
  continue;
30
39
  }
31
40
  if (step.uses === "http") {
32
- const result = await (0, httpStep_1.runHttpStep)(step, runPath, input, env);
41
+ const result = await runHttpStepWithExecutionTimeout(step, runPath, input, env, remainingExecutionMs, executionTimeoutMs);
33
42
  stepResults.push(result.stepResult);
34
43
  outputs[`step.${step.name}.json`] = result.responseBody;
35
44
  continue;
@@ -38,4 +47,22 @@ async function runHost(manifest, bundlePath, input) {
38
47
  }
39
48
  return { outputs, stepResults };
40
49
  }
50
+ async function runHttpStepWithExecutionTimeout(step, runPath, input, env, remainingExecutionMs, executionTimeoutMs) {
51
+ if (remainingExecutionMs === undefined) {
52
+ return (0, httpStep_1.runHttpStep)(step, runPath, input, env);
53
+ }
54
+ if (remainingExecutionMs <= 0) {
55
+ throw new errors_1.SpellError((0, runtimeLimits_1.formatExecutionTimeoutMessage)(executionTimeoutMs, step.name));
56
+ }
57
+ const controller = new AbortController();
58
+ const timer = setTimeout(() => {
59
+ controller.abort(new errors_1.SpellError((0, runtimeLimits_1.formatExecutionTimeoutMessage)(executionTimeoutMs, step.name)));
60
+ }, remainingExecutionMs);
61
+ try {
62
+ return await (0, httpStep_1.runHttpStep)(step, runPath, input, env, controller.signal);
63
+ }
64
+ finally {
65
+ clearTimeout(timer);
66
+ }
67
+ }
41
68
  //# sourceMappingURL=hostRunner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hostRunner.js","sourceRoot":"","sources":["../../src/runner/hostRunner.ts"],"names":[],"mappings":";;;;;AAQA,0BAsCC;AA9CD,+CAAsD;AACtD,qCAAiC;AACjC,0DAA6B;AAE7B,2CAA4C;AAC5C,gDAAgD;AAChD,kDAAkD;AAE3C,KAAK,UAAU,OAAO,CAC3B,QAA6B,EAC7B,UAAkB,EAClB,KAA8B;IAE9B,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,mBAAI,CAAC,IAAI,CAAC,IAAA,gBAAM,GAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACnD,MAAM,IAAA,oBAAS,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IAE1D,MAAM,GAAG,GAAG;QACV,GAAG,OAAO,CAAC,GAAG;QACd,UAAU,EAAE,SAAS;KACtB,CAAC;IAEF,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,mBAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAEnD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAY,EAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;YAClE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACpC,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YACpD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,IAAA,sBAAW,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YAC5D,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACpC,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;YACxD,SAAS;QACX,CAAC;QAED,MAAM,IAAI,mBAAU,CAAC,0BAA0B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"hostRunner.js","sourceRoot":"","sources":["../../src/runner/hostRunner.ts"],"names":[],"mappings":";;;;;AASA,0BAuDC;AAhED,+CAAsD;AACtD,qCAAiC;AACjC,0DAA6B;AAE7B,2CAA4C;AAC5C,gDAAgD;AAChD,kDAAkD;AAClD,mDAAgE;AAEzD,KAAK,UAAU,OAAO,CAC3B,QAA6B,EAC7B,UAAkB,EAClB,KAA8B,EAC9B,kBAA2B;IAE3B,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,mBAAI,CAAC,IAAI,CAAC,IAAA,gBAAM,GAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACnD,MAAM,IAAA,oBAAS,EAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,mBAAmB,GAAG,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3G,MAAM,GAAG,GAAG;QACV,GAAG,OAAO,CAAC,GAAG;QACd,UAAU,EAAE,SAAS;KACtB,CAAC;IAEF,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,mBAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,oBAAoB,GAAG,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAE9G,IAAI,oBAAoB,KAAK,SAAS,IAAI,oBAAoB,IAAI,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,mBAAU,CAAC,IAAA,6CAA6B,EAAC,kBAA4B,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/F,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAY,EAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE;gBAChE,aAAa,EAAE,oBAAoB;gBACnC,kBAAkB;aACnB,CAAC,CAAC;YACH,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACpC,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YACpD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,MAAM,+BAA+B,CAClD,IAAI,EACJ,OAAO,EACP,KAAK,EACL,GAAG,EACH,oBAAoB,EACpB,kBAAkB,CACnB,CAAC;YACF,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACpC,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC;YACxD,SAAS;QACX,CAAC;QAED,MAAM,IAAI,mBAAU,CAAC,0BAA0B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,+BAA+B,CAC5C,IAA0C,EAC1C,OAAe,EACf,KAA8B,EAC9B,GAAsB,EACtB,oBAAwC,EACxC,kBAAsC;IAEtC,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,IAAA,sBAAW,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,oBAAoB,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,mBAAU,CAAC,IAAA,6CAA6B,EAAC,kBAA4B,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,UAAU,CAAC,KAAK,CAAC,IAAI,mBAAU,CAAC,IAAA,6CAA6B,EAAC,kBAA4B,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3G,CAAC,EAAE,oBAAoB,CAAC,CAAC;IAEzB,IAAI,CAAC;QACH,OAAO,MAAM,IAAA,sBAAW,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACzE,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare const DEFAULT_RUNTIME_INPUT_MAX_BYTES: number;
2
+ export declare const DEFAULT_RUNTIME_STEP_TIMEOUT_MS = 60000;
3
+ export declare function readRuntimeInputMaxBytes(env?: NodeJS.ProcessEnv): number;
4
+ export declare function readRuntimeStepTimeoutMs(env?: NodeJS.ProcessEnv): number;
5
+ export declare function readRuntimeExecutionTimeoutMs(env?: NodeJS.ProcessEnv): number | undefined;
6
+ export declare function formatExecutionTimeoutMessage(timeoutMs: number, stepName?: string): string;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_RUNTIME_STEP_TIMEOUT_MS = exports.DEFAULT_RUNTIME_INPUT_MAX_BYTES = void 0;
4
+ exports.readRuntimeInputMaxBytes = readRuntimeInputMaxBytes;
5
+ exports.readRuntimeStepTimeoutMs = readRuntimeStepTimeoutMs;
6
+ exports.readRuntimeExecutionTimeoutMs = readRuntimeExecutionTimeoutMs;
7
+ exports.formatExecutionTimeoutMessage = formatExecutionTimeoutMessage;
8
+ const errors_1 = require("../util/errors");
9
+ exports.DEFAULT_RUNTIME_INPUT_MAX_BYTES = 64 * 1024;
10
+ exports.DEFAULT_RUNTIME_STEP_TIMEOUT_MS = 60_000;
11
+ function readRuntimeInputMaxBytes(env = process.env) {
12
+ return readPositiveIntegerEnv("SPELL_RUNTIME_INPUT_MAX_BYTES", exports.DEFAULT_RUNTIME_INPUT_MAX_BYTES, env);
13
+ }
14
+ function readRuntimeStepTimeoutMs(env = process.env) {
15
+ return readPositiveIntegerEnv("SPELL_RUNTIME_STEP_TIMEOUT_MS", exports.DEFAULT_RUNTIME_STEP_TIMEOUT_MS, env);
16
+ }
17
+ function readRuntimeExecutionTimeoutMs(env = process.env) {
18
+ const raw = env.SPELL_RUNTIME_EXECUTION_TIMEOUT_MS;
19
+ if (raw === undefined || raw.trim() === "") {
20
+ return undefined;
21
+ }
22
+ const value = Number(raw);
23
+ if (!Number.isInteger(value) || value < 0) {
24
+ throw new errors_1.SpellError("SPELL_RUNTIME_EXECUTION_TIMEOUT_MS must be an integer >= 0");
25
+ }
26
+ if (value === 0) {
27
+ return undefined;
28
+ }
29
+ return value;
30
+ }
31
+ function formatExecutionTimeoutMessage(timeoutMs, stepName) {
32
+ if (stepName) {
33
+ return `cast execution timed out after ${timeoutMs}ms while running step '${stepName}'`;
34
+ }
35
+ return `cast execution timed out after ${timeoutMs}ms`;
36
+ }
37
+ function readPositiveIntegerEnv(name, fallback, env) {
38
+ const raw = env[name];
39
+ if (raw === undefined || raw.trim() === "") {
40
+ return fallback;
41
+ }
42
+ const value = Number(raw);
43
+ if (!Number.isInteger(value) || value < 1) {
44
+ throw new errors_1.SpellError(`${name} must be an integer >= 1`);
45
+ }
46
+ return value;
47
+ }
48
+ //# sourceMappingURL=runtimeLimits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtimeLimits.js","sourceRoot":"","sources":["../../src/runner/runtimeLimits.ts"],"names":[],"mappings":";;;AAKA,4DAEC;AAED,4DAEC;AAED,sEAgBC;AAED,sEAMC;AArCD,2CAA4C;AAE/B,QAAA,+BAA+B,GAAG,EAAE,GAAG,IAAI,CAAC;AAC5C,QAAA,+BAA+B,GAAG,MAAM,CAAC;AAEtD,SAAgB,wBAAwB,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC3E,OAAO,sBAAsB,CAAC,+BAA+B,EAAE,uCAA+B,EAAE,GAAG,CAAC,CAAC;AACvG,CAAC;AAED,SAAgB,wBAAwB,CAAC,MAAyB,OAAO,CAAC,GAAG;IAC3E,OAAO,sBAAsB,CAAC,+BAA+B,EAAE,uCAA+B,EAAE,GAAG,CAAC,CAAC;AACvG,CAAC;AAED,SAAgB,6BAA6B,CAAC,MAAyB,OAAO,CAAC,GAAG;IAChF,MAAM,GAAG,GAAG,GAAG,CAAC,kCAAkC,CAAC;IACnD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,mBAAU,CAAC,4DAA4D,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,6BAA6B,CAAC,SAAiB,EAAE,QAAiB;IAChF,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,kCAAkC,SAAS,0BAA0B,QAAQ,GAAG,CAAC;IAC1F,CAAC;IAED,OAAO,kCAAkC,SAAS,IAAI,CAAC;AACzD,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY,EAAE,QAAgB,EAAE,GAAsB;IACpF,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,mBAAU,CAAC,GAAG,IAAI,0BAA0B,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,27 @@
1
+ interface KeygenOptions {
2
+ publisher: string;
3
+ keyId: string;
4
+ outDir: string;
5
+ }
6
+ export interface KeygenResult {
7
+ publisher: string;
8
+ keyId: string;
9
+ privateKeyPath: string;
10
+ publicKeyPath: string;
11
+ publicKeyBase64Url: string;
12
+ }
13
+ interface SignBundleOptions {
14
+ bundlePath: string;
15
+ privateKeyPath: string;
16
+ keyId: string;
17
+ publisher?: string;
18
+ }
19
+ export interface SignBundleResult {
20
+ signaturePath: string;
21
+ digestHex: string;
22
+ publisher: string;
23
+ keyId: string;
24
+ }
25
+ export declare function generateSigningKeypair(options: KeygenOptions): Promise<KeygenResult>;
26
+ export declare function signBundleFromPrivateKey(options: SignBundleOptions): Promise<SignBundleResult>;
27
+ export {};