spell-runtime 1.2.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,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":";;;;;AAoBA,oCAEC;AAED,0CAEC;AAED,sCAiBC;AAED,sCAOC;AAED,oCAuCC;AAED,wDAGC;AApGD,+CAAmF;AACnF,0DAA6B;AAC7B,2CAA4C;AAC5C,yCAA6C;AAiB7C,SAAgB,YAAY,CAAC,IAAY;IACvC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,mBAAI,CAAC,IAAI,CAAC,IAAA,oBAAY,GAAE,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjE,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,IAAY,EAAE,KAAa;IAC7D,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,IAAA,gBAAK,EAAC,IAAA,oBAAY,GAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACzD,MAAM,OAAO,GAAoB;QAC/B,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,eAAe;QACtB,UAAU,EAAE,QAAQ,EAAE,UAAU,IAAI,GAAG;QACvC,UAAU,EAAE,GAAG;KAChB,CAAC;IAEF,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7E,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,IAAY;IAC9C,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,IAAA,iBAAM,EAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IAC3E,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,MAAM,IAAA,aAAE,EAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,YAAY;IAChC,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,IAAA,oBAAY,GAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAoB,EAAE,CAAC;IAErC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QAEvC,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,IAAA,oBAAY,GAAE,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,IAAA,mBAAQ,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,SAAS;QAE7E,MAAM,GAAG,GAAG,MAAiC,CAAC;QAC9C,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;YAAE,SAAS;QACnC,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAC/D,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ;YAAE,SAAS;QAE5C,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;YACrB,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;YACrC,UAAU,EAAE,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;YAC3E,UAAU,EAAE,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;SAC5E,CAAC,CAAC;IACL,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAEM,KAAK,UAAU,sBAAsB;IAC1C,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IACtC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,IAAY;IAC3C,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,IAAA,mBAAQ,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,mBAAU,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,mBAAU,CAAC,uCAAuC,QAAQ,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACnD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,mBAAU,CAAC,qCAAqC,OAAO,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,mBAAU,CAAC,yCAAyC,IAAI,WAAW,UAAU,GAAG,CAAC,CAAC;IAC9F,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC;QACvC,UAAU,EAAE,kBAAkB,CAAC,GAAG,EAAE,YAAY,CAAC;QACjD,UAAU,EAAE,kBAAkB,CAAC,GAAG,EAAE,YAAY,CAAC;KAClD,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,mBAAU,CAAC,gCAAgC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,mBAAU,CAAC,iCAAiC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,GAA4B,EAAE,GAAW;IACnE,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,MAAM,IAAI,mBAAU,CAAC,YAAY,GAAG,UAAU,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC"}
@@ -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":";;;;;AAoBA,8BAoKC;AAxLD,gDAAwB;AACxB,iDAAoD;AACpD,2CAAiF;AACjF,0DAA6E;AAE7E,2CAA4C;AAC5C,+CAAoG;AACpG,mCAAiE;AACjE,6CAAuC;AACvC,iDAA2C;AAC3C,uCAAmD;AACnD,gDAAqF;AACrF,wDAA0D;AAQnD,KAAK,UAAU,SAAS,CAAC,OAAoB;IAClD,MAAM,MAAM,GAAG,IAAA,cAAI,EAAC,EAAE,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE3C,IAAI,WAAW,GAAG,IAAA,8BAAe,EAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC;IAE3E,MAAM,GAAG,GAAiB;QACxB,YAAY,EAAE,WAAW;QACzB,UAAU,EAAE,SAAS;QACrB,WAAW,EAAE,SAAS;QACtB,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,QAAQ;QACpC,KAAK,EAAE,EAAE;QACT,OAAO,EAAE;YACP,IAAI,EAAE,KAAK;YACX,OAAO,EAAE;gBACP,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,CAAC;aACd;YACD,OAAO,EAAE;gBACP,SAAS,EAAE,MAAM;gBACjB,SAAS,EAAE,EAAE;aACd;SACF;QACD,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,KAAK;KACf,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,8BAAsB,EAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACzE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;QAExC,WAAW,GAAG,IAAA,8BAAe,EAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC7D,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC;QAC/B,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;QACrB,GAAG,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC/B,GAAG,CAAC,OAAO,GAAG;YACZ,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;SAC1B,CAAC;QAEF,GAAG,CAAC,SAAS,GAAG;YACd,QAAQ,EAAE,OAAO,CAAC,gBAAgB;YAClC,MAAM,EAAE,SAAS;SAClB,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,IAAA,kBAAU,EAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACtE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;QAElB,MAAM,MAAM,GAAG,MAAM,IAAA,8BAAsB,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAClE,IAAA,kCAA0B,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAE1C,MAAM,SAAS,GAAG,MAAM,IAAA,8BAAqB,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACpF,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,SAAkB;YAC1B,SAAS,EAAE,IAAA,4BAAe,EAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAG,KAAe,CAAC,OAAO;SAClC,CAAC,CAAC,CAAC;QAEJ,GAAG,CAAC,SAAS,GAAG;YACd,QAAQ,EAAE,OAAO,CAAC,gBAAgB;YAClC,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,MAAM,EAAE,SAAS,CAAC,MAAM;SACzB,CAAC;QAEF,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,IAAA,gCAAuB,EAAC,SAAS,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,YAAY,GAAG,IAAA,6BAAkB,GAAE,CAAC;QAC1C,MAAM,cAAc,GAAG,IAAA,sCAA2B,GAAE,CAAC;QACrD,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC;QAC/F,MAAM,UAAU,GAAG,IAAA,0BAAe,EAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QAC/E,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,mBAAU,CAClB,2BAA2B,YAAY,aAAa,QAAQ,CAAC,OAAO,CAAC,SAAS,YAAY,cAAc,oBAAoB,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACnK,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAC/E,MAAM,IAAI,mBAAU,CAAC,QAAQ,QAAQ,CAAC,IAAI,iBAAiB,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YACtD,MAAM,IAAI,mBAAU,CAAC,0CAA0C,CAAC,CAAC;QACnE,CAAC;QAED,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAAG,aAAa,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC;YACpG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,mBAAU,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAA,gCAAsB,EAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE9D,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;YACnB,GAAG,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,MAAM,IAAA,gCAAiB,EAAC,GAAG,CAAC,CAAC;YAC7C,OAAO;gBACL,WAAW,EAAE,WAAW;gBACxB,OAAO;gBACP,OAAO,EAAE,EAAE;aACZ,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,2BAA2B,CAAC,CAAC;YAE1F,MAAM,YAAY,GAAG,MAAM,IAAA,wBAAS,EAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YAClE,GAAG,CAAC,KAAK,GAAG,YAAY,CAAC,WAAW,CAAC;YACrC,GAAG,CAAC,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;YACnC,GAAG,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;YAEjC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;YACnB,GAAG,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,MAAM,IAAA,gCAAiB,EAAC,GAAG,CAAC,CAAC;YAE7C,OAAO;gBACL,WAAW;gBACX,OAAO;gBACP,OAAO,EAAE,YAAY,CAAC,OAAO;aAC9B,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,yBAAyB,CAAC,CAAC;QAExF,MAAM,SAAS,GAAG,MAAM,IAAA,oBAAO,EAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAC7D,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC;QAClC,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QAEhC,MAAM,YAAY,GAAG,MAAM,IAAA,yBAAc,EAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAChG,GAAG,CAAC,MAAM,GAAG,YAAY,CAAC;QAE1B,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,mBAAU,CAAC,iBAAiB,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;QACnB,GAAG,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,MAAM,IAAA,gCAAiB,EAAC,GAAG,CAAC,CAAC;QAE7C,OAAO;YACL,WAAW;YACX,OAAO;YACP,OAAO,EAAE,SAAS,CAAC,OAAO;SAC3B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,GAAI,KAAe,CAAC,OAAO,CAAC;QACrC,GAAG,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,IAAA,gCAAiB,EAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
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":"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"}
@@ -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"}
@@ -4,4 +4,4 @@ export interface HttpStepExecution {
4
4
  responseBody: unknown;
5
5
  status: number;
6
6
  }
7
- export declare function runHttpStep(step: SpellStep, runPath: string, input: Record<string, unknown>, env: NodeJS.ProcessEnv): Promise<HttpStepExecution>;
7
+ export declare function runHttpStep(step: SpellStep, runPath: string, input: Record<string, unknown>, env: NodeJS.ProcessEnv, signal?: AbortSignal): Promise<HttpStepExecution>;
@@ -5,7 +5,7 @@ const promises_1 = require("node:fs/promises");
5
5
  const errors_1 = require("../util/errors");
6
6
  const http_1 = require("../util/http");
7
7
  const template_1 = require("../util/template");
8
- async function runHttpStep(step, runPath, input, env) {
8
+ async function runHttpStep(step, runPath, input, env, signal) {
9
9
  const started = new Date().toISOString();
10
10
  const raw = await (0, promises_1.readFile)(runPath, "utf8");
11
11
  let parsed;
@@ -43,11 +43,25 @@ async function runHttpStep(step, runPath, input, env) {
43
43
  }
44
44
  }
45
45
  }
46
- const response = await (0, http_1.fetchHttp)(resolvedUrl, {
47
- method: resolvedMethod,
48
- headers,
49
- body
50
- });
46
+ let response;
47
+ try {
48
+ response = await (0, http_1.fetchHttp)(resolvedUrl, {
49
+ method: resolvedMethod,
50
+ headers,
51
+ body,
52
+ signal
53
+ });
54
+ }
55
+ catch (error) {
56
+ if (signal?.aborted) {
57
+ const reason = signal.reason;
58
+ if (reason instanceof Error) {
59
+ throw reason;
60
+ }
61
+ throw new errors_1.SpellError(`http step '${step.name}' aborted`);
62
+ }
63
+ throw new errors_1.SpellError(`http step '${step.name}' request failed: ${error.message}`);
64
+ }
51
65
  const responseText = await response.text();
52
66
  let responseBody;
53
67
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"httpStep.js","sourceRoot":"","sources":["../../src/steps/httpStep.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"httpStep.js","sourceRoot":"","sources":["../../src/steps/httpStep.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,8 @@ export interface ShellStepExecution {
4
4
  stdout: string;
5
5
  stderr: string;
6
6
  }
7
- export declare function runShellStep(step: SpellStep, runPath: string, cwd: string, env: NodeJS.ProcessEnv): Promise<ShellStepExecution>;
7
+ export interface ShellStepRunOptions {
8
+ maxDurationMs?: number;
9
+ executionTimeoutMs?: number;
10
+ }
11
+ export declare function runShellStep(step: SpellStep, runPath: string, cwd: string, env: NodeJS.ProcessEnv, options?: ShellStepRunOptions): Promise<ShellStepExecution>;