callman-core 1.9.0 → 1.10.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.
Files changed (60) hide show
  1. package/ai-packs/feature-policy.md +26 -0
  2. package/ai-packs/pm-api.md +213 -0
  3. package/ai-packs/sandbox-globals.md +20 -0
  4. package/ai-packs/templating.md +104 -0
  5. package/dist/index.d.ts +5 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +4 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/request/executeRequest.d.ts.map +1 -1
  10. package/dist/request/executeRequest.js +10 -2
  11. package/dist/request/executeRequest.js.map +1 -1
  12. package/dist/scenario-runner/adapters/helpers/request-helpers.d.ts.map +1 -1
  13. package/dist/scenario-runner/adapters/helpers/request-helpers.js +8 -2
  14. package/dist/scenario-runner/adapters/helpers/request-helpers.js.map +1 -1
  15. package/dist/scenario-runner/adapters/script-executor.js +3 -3
  16. package/dist/scenario-runner/adapters/script-executor.js.map +1 -1
  17. package/dist/script/features/log.d.ts.map +1 -1
  18. package/dist/script/features/log.js +23 -4
  19. package/dist/script/features/log.js.map +1 -1
  20. package/dist/script/isolated-runner.d.ts +11 -0
  21. package/dist/script/isolated-runner.d.ts.map +1 -0
  22. package/dist/script/isolated-runner.js +172 -0
  23. package/dist/script/isolated-runner.js.map +1 -0
  24. package/dist/script/pm-api-metadata.d.ts +19 -0
  25. package/dist/script/pm-api-metadata.d.ts.map +1 -0
  26. package/dist/script/pm-api-metadata.js +264 -0
  27. package/dist/script/pm-api-metadata.js.map +1 -0
  28. package/dist/script/scope.d.ts +2 -0
  29. package/dist/script/scope.d.ts.map +1 -1
  30. package/dist/script/scope.js +4 -0
  31. package/dist/script/scope.js.map +1 -1
  32. package/dist/script/worker-entry.d.ts +2 -0
  33. package/dist/script/worker-entry.d.ts.map +1 -0
  34. package/dist/script/worker-entry.js +79 -0
  35. package/dist/script/worker-entry.js.map +1 -0
  36. package/dist/utils/jsonc.d.ts +2 -0
  37. package/dist/utils/jsonc.d.ts.map +1 -0
  38. package/dist/utils/jsonc.js +101 -0
  39. package/dist/utils/jsonc.js.map +1 -0
  40. package/dist-cjs/index.js +11 -1
  41. package/dist-cjs/index.js.map +1 -1
  42. package/dist-cjs/request/executeRequest.js +10 -2
  43. package/dist-cjs/request/executeRequest.js.map +1 -1
  44. package/dist-cjs/scenario-runner/adapters/helpers/request-helpers.js +8 -2
  45. package/dist-cjs/scenario-runner/adapters/helpers/request-helpers.js.map +1 -1
  46. package/dist-cjs/scenario-runner/adapters/script-executor.js +3 -3
  47. package/dist-cjs/scenario-runner/adapters/script-executor.js.map +1 -1
  48. package/dist-cjs/script/features/log.js +23 -4
  49. package/dist-cjs/script/features/log.js.map +1 -1
  50. package/dist-cjs/script/isolated-runner.js +209 -0
  51. package/dist-cjs/script/isolated-runner.js.map +1 -0
  52. package/dist-cjs/script/pm-api-metadata.js +267 -0
  53. package/dist-cjs/script/pm-api-metadata.js.map +1 -0
  54. package/dist-cjs/script/scope.js +5 -1
  55. package/dist-cjs/script/scope.js.map +1 -1
  56. package/dist-cjs/script/worker-entry.js +81 -0
  57. package/dist-cjs/script/worker-entry.js.map +1 -0
  58. package/dist-cjs/utils/jsonc.js +105 -0
  59. package/dist-cjs/utils/jsonc.js.map +1 -0
  60. package/package.json +8 -3
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ // Worker-isolated script runner.
3
+ //
4
+ // `executeScript` runs the user script in a vm with a `timeout`, but that
5
+ // timeout only bounds *synchronous* execution and a host running it inline is
6
+ // still blocked for up to `timeoutMs` (and a pathological loop that defeats the
7
+ // vm watchdog blocks it forever). Running the script in a worker_threads Worker
8
+ // keeps the HOST thread (Electron main / backend BullMQ worker) responsive: the
9
+ // host-side watchdog can always fire and hard-kill the worker via terminate().
10
+ //
11
+ // Scenario script-node capabilities are fully serializable EXCEPT the
12
+ // `pm.sendRequest` host executor, which is proxied back to the host over the
13
+ // MessagePort (the only RPC needed). db/kafka/redis host executors are not used
14
+ // by scenario scripts and are dropped before the worker runs.
15
+ //
16
+ // Node-only: imports `node:worker_threads`. The renderer never imports this
17
+ // module (it provides its own scenario adapters), so it never enters the
18
+ // browser bundle. Both Node consumers (electron main + backend) load the CJS
19
+ // build, where `__dirname` resolves the sibling worker entry.
20
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ var desc = Object.getOwnPropertyDescriptor(m, k);
23
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
24
+ desc = { enumerable: true, get: function() { return m[k]; } };
25
+ }
26
+ Object.defineProperty(o, k2, desc);
27
+ }) : (function(o, m, k, k2) {
28
+ if (k2 === undefined) k2 = k;
29
+ o[k2] = m[k];
30
+ }));
31
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
32
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
33
+ }) : function(o, v) {
34
+ o["default"] = v;
35
+ });
36
+ var __importStar = (this && this.__importStar) || (function () {
37
+ var ownKeys = function(o) {
38
+ ownKeys = Object.getOwnPropertyNames || function (o) {
39
+ var ar = [];
40
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
41
+ return ar;
42
+ };
43
+ return ownKeys(o);
44
+ };
45
+ return function (mod) {
46
+ if (mod && mod.__esModule) return mod;
47
+ var result = {};
48
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
49
+ __setModuleDefault(result, mod);
50
+ return result;
51
+ };
52
+ })();
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ exports.runScriptIsolated = void 0;
55
+ // `node:worker_threads` / `node:path` are imported LAZILY inside the worker
56
+ // branch (not at module top level). The barrel re-exports runScriptIsolated, so
57
+ // this module is pulled into the renderer's bundle even though it never calls
58
+ // it; a top-level node-builtin import would be externalized by Vite and throw
59
+ // at module-eval time ("Module node:worker_threads has been externalized…").
60
+ // Type-only imports are erased, so they're safe.
61
+ const executor_js_1 = require("./executor.js");
62
+ const errors_js_1 = require("./errors.js");
63
+ const DEFAULT_TIMEOUT_MS = 15_000;
64
+ // Grace beyond the in-worker vm timeout before the host hard-kills the worker.
65
+ // The vm `timeout` should reject first on a normal CPU loop; this backstop
66
+ // guarantees termination even if the worker event loop is wedged.
67
+ const HARD_KILL_MARGIN_MS = 2_000;
68
+ // Strip non-serializable callbacks from capabilities before posting to the
69
+ // worker. sendRequest is re-attached inside the worker as an RPC proxy; db /
70
+ // kafka / redis host executors are dropped (unused by scenario scripts).
71
+ const toWorkerCapabilities = (capabilities) => {
72
+ const extensions = capabilities.extensions ?? {};
73
+ return {
74
+ ...capabilities,
75
+ extensions: {
76
+ log: extensions.log,
77
+ node: extensions.node,
78
+ cryptojs: extensions.cryptojs,
79
+ variables: extensions.variables,
80
+ counter: extensions.counter,
81
+ // `{ rng }` carries a function — fall back to the worker's default RNG.
82
+ random: typeof extensions.random === "object" ? true : extensions.random,
83
+ },
84
+ };
85
+ };
86
+ const buildTerminalResult = (input, message, error) => ({
87
+ success: false,
88
+ error: typeof error !== "undefined"
89
+ ? (0, errors_js_1.toSerializableError)(input.stage ?? "script", error)
90
+ : { stage: input.stage ?? "script", message, lineNumber: null, column: null, stack: null },
91
+ testResults: [],
92
+ variableMutations: [],
93
+ logs: [],
94
+ hasReturnValue: false,
95
+ });
96
+ const runScriptIsolated = async (input, options = {}) => {
97
+ const timeoutMs = input.timeoutMs ?? DEFAULT_TIMEOUT_MS;
98
+ // The worker entry sits next to this module; resolve it via __dirname, which
99
+ // only exists in the CommonJS build. Both Node hosts (Electron main, backend
100
+ // worker) load the CJS build → full worker isolation. In the ESM build
101
+ // __dirname is undefined (tests / non-Node consumers) → fall back to inline
102
+ // execution; the Phase-1 log caps + the vm-level timeout still bound the
103
+ // script. Direct eval keeps the bare `__dirname` out of the ESM compile
104
+ // (where the name is unresolved) while still seeing it in the CJS scope.
105
+ // eslint-disable-next-line no-eval
106
+ const moduleDir = eval("typeof __dirname !== 'undefined' ? __dirname : undefined");
107
+ if (!moduleDir) {
108
+ return (0, executor_js_1.executeScript)(options.onSendRequest
109
+ ? {
110
+ ...input,
111
+ capabilities: {
112
+ ...input.capabilities,
113
+ extensions: {
114
+ ...(input.capabilities.extensions ?? {}),
115
+ sendRequest: { execute: options.onSendRequest },
116
+ },
117
+ },
118
+ }
119
+ : input);
120
+ }
121
+ // Lazy node-builtin imports — only reached in the CJS Node hosts, never in
122
+ // the renderer (which never calls this function).
123
+ const { Worker } = await Promise.resolve().then(() => __importStar(require("node:worker_threads")));
124
+ const { join } = await Promise.resolve().then(() => __importStar(require("node:path")));
125
+ const workerPath = join(moduleDir, "worker-entry.js");
126
+ const workerInput = {
127
+ ...input,
128
+ capabilities: toWorkerCapabilities(input.capabilities),
129
+ };
130
+ return await new Promise((resolve) => {
131
+ let settled = false;
132
+ let worker;
133
+ const finish = (result) => {
134
+ if (settled) {
135
+ return;
136
+ }
137
+ settled = true;
138
+ clearTimeout(killTimer);
139
+ options.signal?.removeEventListener?.("abort", onAbort);
140
+ void worker?.terminate();
141
+ resolve(result);
142
+ };
143
+ const killTimer = setTimeout(() => {
144
+ finish(buildTerminalResult(input, `Script timed out after ${timeoutMs}ms`));
145
+ }, timeoutMs + HARD_KILL_MARGIN_MS);
146
+ const onAbort = () => {
147
+ finish(buildTerminalResult(input, "Script execution aborted"));
148
+ };
149
+ if (options.signal?.aborted) {
150
+ clearTimeout(killTimer);
151
+ resolve(buildTerminalResult(input, "Script execution aborted"));
152
+ return;
153
+ }
154
+ options.signal?.addEventListener?.("abort", onAbort, { once: true });
155
+ try {
156
+ worker = new Worker(workerPath, {
157
+ workerData: {
158
+ input: workerInput,
159
+ enableSendRequest: Boolean(options.onSendRequest),
160
+ },
161
+ });
162
+ }
163
+ catch (error) {
164
+ finish(buildTerminalResult(input, "Failed to start script worker", error));
165
+ return;
166
+ }
167
+ worker.on("message", (message) => {
168
+ if (message.type === "done") {
169
+ finish(message.result);
170
+ return;
171
+ }
172
+ if (message.type === "sendRequest") {
173
+ const id = message.id;
174
+ const requestInput = message.input;
175
+ void (async () => {
176
+ try {
177
+ if (!options.onSendRequest) {
178
+ throw new Error("pm.sendRequest is not available in this context.");
179
+ }
180
+ const result = await options.onSendRequest(requestInput);
181
+ if (!settled) {
182
+ worker.postMessage({ type: "sendRequestResult", id, ok: true, result });
183
+ }
184
+ }
185
+ catch (error) {
186
+ if (!settled) {
187
+ worker.postMessage({
188
+ type: "sendRequestResult",
189
+ id,
190
+ ok: false,
191
+ error: error instanceof Error ? error.message : String(error),
192
+ });
193
+ }
194
+ }
195
+ })();
196
+ }
197
+ });
198
+ worker.on("error", (error) => {
199
+ finish(buildTerminalResult(input, "Script worker crashed", error));
200
+ });
201
+ worker.on("exit", (code) => {
202
+ if (!settled) {
203
+ finish(buildTerminalResult(input, `Script worker exited unexpectedly (code ${code})`));
204
+ }
205
+ });
206
+ });
207
+ };
208
+ exports.runScriptIsolated = runScriptIsolated;
209
+ //# sourceMappingURL=isolated-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isolated-runner.js","sourceRoot":"","sources":["../../src/script/isolated-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+ // Canonical, machine-readable description of the `pm.*` scripting surface.
3
+ // Same philosophy as templating/generator-metadata.ts: ONE runtime data
4
+ // structure, colocated with the implementation, consumed by every surface
5
+ // that needs to know "what exists" — today the AI knowledge-pack generator
6
+ // (scripts/generate-ai-packs.mjs), tomorrow the desktop autocomplete.
7
+ //
8
+ // When a feature module gains/loses a method, update THIS file in the same
9
+ // commit. The CI drift check regenerates ai-packs/ and fails on a diff, so
10
+ // the metadata cannot silently fall behind the docs the AI sees.
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PM_API_METADATA = void 0;
13
+ exports.PM_API_METADATA = [
14
+ {
15
+ name: "pm.test",
16
+ description: "Register a named test. The callback's assertion failures mark the test failed without aborting the script.",
17
+ members: [
18
+ {
19
+ signature: "pm.test(name, fn)",
20
+ description: "Runs fn (sync or async); pass/fail lands in the run's test results.",
21
+ },
22
+ ],
23
+ },
24
+ {
25
+ name: "pm.expect",
26
+ description: "Chai-style assertions plus Jest-style matchers.",
27
+ members: [
28
+ {
29
+ signature: "pm.expect(value)",
30
+ description: "Assertion chain. Equality: .to.equal(x) (identity), .to.eql(x) / .to.deep.equal(x) / .toEqual(x) (deep). Existence: .to.exist, .toBeDefined(), .toBeNull(). Strings/arrays: .to.include(x) / .toContain(x), .oneOf([..]). Numbers: .toBeGreaterThan / .toBeLessThan / .to.be.above(n) / .to.be.below(n). Types: .to.be.a('string'|'number'|...). Negation: .to.not.<...> / .not.<matcher>. Properties: .to.have.property('name', value?).",
31
+ },
32
+ { signature: "pm.expect.fail(message?)", description: "Fails the surrounding test immediately." },
33
+ ],
34
+ },
35
+ {
36
+ name: "pm.environment",
37
+ description: "Active environment variables (alias: pm.env). Writes are scoped to the run and surface as variable mutations.",
38
+ members: [
39
+ { signature: "pm.environment.get(key)", description: "Read a variable (string or undefined)." },
40
+ { signature: "pm.environment.set(key, value)", description: "Write a variable for subsequent steps." },
41
+ { signature: "pm.environment.unset(key)", description: "Remove a variable." },
42
+ { signature: "pm.environment.has(key)", description: "true when the key exists." },
43
+ { signature: "pm.environment.clear()", description: "Remove every variable in the scope." },
44
+ { signature: "pm.environment.toObject()", description: "Plain { key: value } snapshot." },
45
+ { signature: "pm.environment.replaceIn(template)", description: "Resolve {{tokens}} inside a string." },
46
+ { signature: "pm.environment.name", description: "Active environment's name." },
47
+ ],
48
+ },
49
+ {
50
+ name: "pm.globals",
51
+ description: "Workspace-level global variables. Same surface as pm.environment.",
52
+ members: [
53
+ { signature: "pm.globals.get(key)", description: "Read a global." },
54
+ { signature: "pm.globals.set(key, value)", description: "Write a global for the run." },
55
+ { signature: "pm.globals.unset(key)", description: "Remove a global." },
56
+ { signature: "pm.globals.has(key)", description: "true when the key exists." },
57
+ { signature: "pm.globals.clear()", description: "Remove every global in the scope." },
58
+ { signature: "pm.globals.toObject()", description: "Plain snapshot." },
59
+ { signature: "pm.globals.replaceIn(template)", description: "Resolve {{tokens}} inside a string." },
60
+ ],
61
+ },
62
+ {
63
+ name: "pm.collectionVariables",
64
+ description: "Collection-scoped variables that survive across requests within one collection run iteration.",
65
+ members: [
66
+ { signature: "pm.collectionVariables.get(key)", description: "Read a collection variable." },
67
+ { signature: "pm.collectionVariables.set(key, value)", description: "Write; persists across the iteration." },
68
+ { signature: "pm.collectionVariables.unset(key)", description: "Remove a collection variable." },
69
+ { signature: "pm.collectionVariables.has(key)", description: "true when the key exists." },
70
+ { signature: "pm.collectionVariables.clear()", description: "Remove all collection variables." },
71
+ { signature: "pm.collectionVariables.toObject()", description: "Plain snapshot." },
72
+ { signature: "pm.collectionVariables.replaceIn(template)", description: "Resolve {{tokens}}." },
73
+ ],
74
+ },
75
+ {
76
+ name: "pm.variables",
77
+ description: "Layered read across all scopes (per-iteration > environment > globals) plus template resolution.",
78
+ members: [
79
+ { signature: "pm.variables.get(key)", description: "Read through the precedence chain." },
80
+ { signature: "pm.variables.set(key, value)", description: "Write to the run-local layer." },
81
+ { signature: "pm.variables.unset(key)", description: "Remove from the run-local layer." },
82
+ { signature: "pm.variables.has(key)", description: "true when any layer has the key." },
83
+ { signature: "pm.variables.toObject()", description: "Merged snapshot." },
84
+ { signature: "pm.variables.replaceIn(template)", description: "Resolve {{tokens}} in a string." },
85
+ {
86
+ signature: "pm.variables.resolve(template)",
87
+ description: "Like replaceIn, but also resolves scenario node-output references.",
88
+ },
89
+ ],
90
+ },
91
+ {
92
+ name: "pm.request",
93
+ description: "The outgoing request. Mutations only have effect in pre-request scripts (the call has not fired yet).",
94
+ members: [
95
+ { signature: "pm.request.url", description: "Resolved URL string." },
96
+ { signature: "pm.request.method", description: "HTTP method." },
97
+ { signature: "pm.request.body", description: "Body snapshot (mode + content)." },
98
+ { signature: "pm.request.headers", description: "HeaderList: .all() .get(name) .has(name) .add({key,value}) .upsert({key,value}) .remove(name) .idx(i)." },
99
+ { signature: "pm.request.query", description: "Query params as a HeaderList." },
100
+ { signature: "pm.request.getHeader(name)", description: "Read one header value." },
101
+ { signature: "pm.request.setHeader(name, value)", description: "Set/replace a header.", stages: ["pre-request", "scenario-script"] },
102
+ { signature: "pm.request.unsetHeader(name)", description: "Remove a header.", stages: ["pre-request", "scenario-script"] },
103
+ { signature: "pm.request.getQueryParam(name)", description: "Read one query param." },
104
+ { signature: "pm.request.setQueryParam(name, value)", description: "Set/replace a query param.", stages: ["pre-request", "scenario-script"] },
105
+ { signature: "pm.request.unsetQueryParam(name)", description: "Remove a query param.", stages: ["pre-request", "scenario-script"] },
106
+ { signature: "pm.request.setUrl(url)", description: "Replace the URL.", stages: ["pre-request", "scenario-script"] },
107
+ { signature: "pm.request.setMethod(method)", description: "Replace the method.", stages: ["pre-request", "scenario-script"] },
108
+ { signature: "pm.request.setRawBody(value)", description: "Replace the raw body (string or object → JSON).", stages: ["pre-request", "scenario-script"] },
109
+ ],
110
+ },
111
+ {
112
+ name: "pm.response",
113
+ description: "The received response. Not available in pre-request scripts.",
114
+ members: [
115
+ { signature: "pm.response.code", description: "Status code (number).", stages: ["post-response", "tests", "scenario-script"] },
116
+ { signature: "pm.response.status", description: "Status code (number, alias).", stages: ["post-response", "tests", "scenario-script"] },
117
+ { signature: "pm.response.statusText", description: "Status text.", stages: ["post-response", "tests", "scenario-script"] },
118
+ { signature: "pm.response.json()", description: "Parsed JSON body — call once into a const (`const body = pm.response.json()`); throws on non-JSON, so guard with try/catch or pm.response.to.be.json when the content type is uncertain.", stages: ["post-response", "tests", "scenario-script"] },
119
+ { signature: "pm.response.text()", description: "Raw body as string.", stages: ["post-response", "tests", "scenario-script"] },
120
+ { signature: "pm.response.rawBody", description: "Raw body string.", stages: ["post-response", "tests", "scenario-script"] },
121
+ { signature: "pm.response.headers", description: "Response HeaderList.", stages: ["post-response", "tests", "scenario-script"] },
122
+ { signature: "pm.response.responseTime", description: "Duration in ms.", stages: ["post-response", "tests", "scenario-script"] },
123
+ { signature: "pm.response.responseSize", description: "Body size in bytes.", stages: ["post-response", "tests", "scenario-script"] },
124
+ {
125
+ signature: "pm.response.to.have.status(code)",
126
+ description: "Assertion shortcuts; also .to.have.header/.jsonBody/.body and .to.be.ok/.json/.success/.clientError/... plus .to.not.<predicate>.",
127
+ stages: ["post-response", "tests", "scenario-script"],
128
+ },
129
+ ],
130
+ },
131
+ {
132
+ name: "pm.sendRequest",
133
+ description: "Fire an ad-hoc HTTP request from inside a script.",
134
+ members: [
135
+ {
136
+ signature: "pm.sendRequest(urlOrOptions, callback?)",
137
+ description: "Options: { url, method, header: {name: value}, body }. Body accepts a plain object (auto-JSON) OR Postman style { mode: 'raw', raw: JSON.stringify({...}) } / { mode: 'urlencoded', urlencoded: [{key, value}] }. Prefer `const res = await pm.sendRequest({...})`; callback form gets (err, res). The response object is { code, status, statusText, headers, body, responseTime, json(), text() } — note it is NOT pm.response.",
138
+ },
139
+ ],
140
+ },
141
+ {
142
+ name: "pm.db",
143
+ description: "Database access (Oracle / MongoDB / PostgreSQL / MySQL). Disabled by feature policy in some contexts — tests then report SKIP.",
144
+ members: [
145
+ {
146
+ signature: "pm.db.query({ connectionId, query })",
147
+ description: "Run an ad-hoc query — ALWAYS await it. Resolves to { success, error, rowCount, rows, firstRow(), connectionId, connectionName, connectionType, durationMs, executedAt }. firstRow is a FUNCTION: res.firstRow()?.STATUS (Oracle columns are UPPERCASE).",
148
+ requires: "database",
149
+ },
150
+ {
151
+ signature: "pm.db.pre",
152
+ description: "Result object of the declared pre-request DB query: { success, error, rowCount, rows, firstRow() }. Not a promise — read directly.",
153
+ requires: "database",
154
+ },
155
+ {
156
+ signature: "pm.db.post",
157
+ description: "Result object of the declared post-response DB query (same shape as pm.db.pre).",
158
+ requires: "database",
159
+ stages: ["post-response", "tests"],
160
+ },
161
+ ],
162
+ },
163
+ {
164
+ name: "pm.kafka",
165
+ description: "Captured Kafka events from the request's Kafka tab listener.",
166
+ members: [
167
+ { signature: "pm.kafka.event()", description: "The matched event's parsed payload (or null).", requires: "kafka", stages: ["post-response", "tests"] },
168
+ { signature: "pm.kafka.messages()", description: "Every captured message in the listen window.", requires: "kafka", stages: ["post-response", "tests"] },
169
+ ],
170
+ },
171
+ {
172
+ name: "pm.redis",
173
+ description: "Results of the declared pre/post Redis commands.",
174
+ members: [
175
+ { signature: "pm.redis.get(key)", description: "Read a value already captured by a declared GET.", requires: "redis" },
176
+ { signature: "pm.redis.results.pre", description: "Array of pre-stage command results (by line index).", requires: "redis" },
177
+ { signature: "pm.redis.results.post", description: "Array of post-stage command results.", requires: "redis", stages: ["post-response", "tests"] },
178
+ ],
179
+ },
180
+ {
181
+ name: "pm.random",
182
+ description: "Deterministic-format random data generators.",
183
+ members: [
184
+ { signature: "pm.random.uuid()", description: "UUID v4." },
185
+ { signature: "pm.random.email()", description: "Random email address." },
186
+ { signature: "pm.random.string(length?)", description: "Alphanumeric string." },
187
+ { signature: "pm.random.int(min, max)", description: "Integer in range." },
188
+ { signature: "pm.random.bigdecimal(min, max, scale)", description: "Decimal with given scale." },
189
+ { signature: "pm.random.boolean()", description: "true/false." },
190
+ { signature: "pm.random.phone()", description: "Phone number string." },
191
+ { signature: "pm.random.name()", description: "Person name." },
192
+ { signature: "pm.random.date(format?)", description: "Date string." },
193
+ ],
194
+ },
195
+ {
196
+ name: "pm.counter",
197
+ description: "Monotonic counter scoped to the run.",
198
+ members: [
199
+ { signature: "pm.counter.next()", description: "Next value (starts at 1)." },
200
+ { signature: "pm.counter.start(startAt?)", description: "Counter starting at a custom value." },
201
+ ],
202
+ },
203
+ {
204
+ name: "pm.info",
205
+ description: "Execution metadata snapshot.",
206
+ members: [
207
+ { signature: "pm.info.eventName", description: "\"prerequest\" | \"test\"." },
208
+ { signature: "pm.info.iteration", description: "Zero-based data-driven iteration index." },
209
+ {
210
+ signature: "pm.info.iterationCount",
211
+ description: "Total iterations — only meaningful in collection/data-driven runs. Never use it to gate token/cache logic in single sends.",
212
+ },
213
+ { signature: "pm.info.requestName", description: "Current request's name." },
214
+ { signature: "pm.info.requestId", description: "Current request's id." },
215
+ ],
216
+ },
217
+ {
218
+ name: "pm.execution",
219
+ description: "Collection-run flow control.",
220
+ members: [
221
+ { signature: "pm.execution.setNextRequest(name)", description: "Jump to a named request next (collection runs)." },
222
+ { signature: "pm.execution.skipRequest()", description: "Skip the current request.", stages: ["pre-request"] },
223
+ { signature: "pm.execution.location", description: "Folder path of the current request." },
224
+ ],
225
+ },
226
+ {
227
+ name: "pm.node",
228
+ description: "Scenario workflow context (only meaningful inside scenario script nodes).",
229
+ members: [
230
+ { signature: "pm.node.nodeLabel", description: "Current node's label.", stages: ["scenario-script"] },
231
+ { signature: "pm.node.setNextRequest(name)", description: "Route the workflow to a named node.", stages: ["scenario-script"] },
232
+ ],
233
+ },
234
+ {
235
+ name: "pm.log",
236
+ description: "Structured logging into the run report.",
237
+ members: [{ signature: "pm.log(...args)", description: "Like console.log; entries land in the run's log panel." }],
238
+ },
239
+ {
240
+ name: "CryptoJS",
241
+ description: "crypto-js global (NOT under pm.*).",
242
+ members: [
243
+ { signature: "CryptoJS.SHA256(msg) / SHA1 / SHA512 / MD5", description: "Hashes; .toString() or .toString(CryptoJS.enc.Hex)." },
244
+ { signature: "CryptoJS.HmacSHA256(msg, key)", description: "HMAC family (SHA1/224/384/512, MD5 variants)." },
245
+ { signature: "CryptoJS.AES.encrypt(msg, key) / .decrypt(cipher, key)", description: "AES; decrypt result needs .toString(CryptoJS.enc.Utf8)." },
246
+ { signature: "CryptoJS.PBKDF2(password, salt, options)", description: "Key derivation." },
247
+ { signature: "CryptoJS.enc.Utf8 / Base64 / Hex / Latin1", description: "Encoders for .toString(...)." },
248
+ { signature: "CryptoJS.lib.WordArray.create / random(n)", description: "Raw word arrays (e.g. random IVs)." },
249
+ ],
250
+ },
251
+ {
252
+ name: "_",
253
+ description: "lodash global (NOT under pm.*).",
254
+ members: [
255
+ { signature: "_.get(obj, path, default?) / _.pick / _.groupBy / _.sortBy / _.uniq / ...", description: "Full lodash surface for data wrangling." },
256
+ ],
257
+ },
258
+ {
259
+ name: "timers",
260
+ description: "Safe per-execution timer wrappers (callbacks never outlive the run).",
261
+ members: [
262
+ { signature: "setTimeout(fn, ms) / clearTimeout(id)", description: "Use with await new Promise(r => setTimeout(r, ms)) for polling loops." },
263
+ { signature: "setInterval(fn, ms) / clearInterval(id)", description: "Interval variant." },
264
+ ],
265
+ },
266
+ ];
267
+ //# sourceMappingURL=pm-api-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pm-api-metadata.js","sourceRoot":"","sources":["../../src/script/pm-api-metadata.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  // The "blocked" set is the safety floor: these names are always undefined
11
11
  // in user scripts, regardless of what the caller passes in `bindings`.
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.createScopeProxy = exports.buildScopeTarget = exports.VALID_LABEL_IDENTIFIER_PATTERN = exports.RESERVED_LABEL_NAMES = void 0;
13
+ exports.createScopeProxy = exports.buildScopeTarget = exports.VALID_LABEL_IDENTIFIER_PATTERN = exports.RESERVED_LABEL_NAMES = exports.BLOCKED_GLOBAL_NAMES = exports.ALLOWED_GLOBAL_NAMES = void 0;
14
14
  // Resolve a host-global lazily and only if it's actually a function. This
15
15
  // lets us bind Node 18+ web-compat APIs (`atob`, `btoa`, `structuredClone`)
16
16
  // without crashing on older runtimes that don't ship them. A missing API
@@ -108,6 +108,10 @@ const BLOCKED_GLOBALS = [
108
108
  "navigator",
109
109
  "importScripts",
110
110
  ];
111
+ // Exposed for the AI knowledge-pack generator (scripts/generate-ai-packs.mjs)
112
+ // so the sandbox surface documentation is derived from the live lists.
113
+ exports.ALLOWED_GLOBAL_NAMES = Object.keys(ALLOWED_GLOBALS);
114
+ exports.BLOCKED_GLOBAL_NAMES = [...BLOCKED_GLOBALS];
111
115
  // Names that the caller cannot use as a "label-as-global" workflow key.
112
116
  // Exposing a workflow node named `pm` or `eval` would shadow the built-in
113
117
  // API or reintroduce a blocked global, so we reject these reservations
@@ -1 +1 @@
1
- {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/script/scope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/script/scope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ // worker_threads entry for runScriptIsolated. Runs the canonical executeScript
3
+ // inside the worker so a runaway/CPU-bound user script blocks only this worker
4
+ // thread — the host hard-kills it via worker.terminate() on timeout.
5
+ //
6
+ // pm.sendRequest (when the host enabled it) is proxied back to the host over
7
+ // the MessagePort: each call posts a "sendRequest" message and awaits the
8
+ // matching "sendRequestResult" reply.
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const node_worker_threads_1 = require("node:worker_threads");
11
+ const executor_js_1 = require("./executor.js");
12
+ const port = node_worker_threads_1.parentPort;
13
+ const data = node_worker_threads_1.workerData;
14
+ // Drop values JSON can't represent (functions/symbols/cyclic) so the result is
15
+ // always structured-cloneable back to the host. returnValue is template-
16
+ // resolved as JSON downstream anyway.
17
+ const jsonSafe = (value) => {
18
+ try {
19
+ return JSON.parse(JSON.stringify(value ?? null));
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ };
25
+ if (port) {
26
+ const pendingSendRequests = new Map();
27
+ let nextRequestId = 1;
28
+ port.on("message", (message) => {
29
+ if (message.type === "sendRequestResult") {
30
+ const pending = pendingSendRequests.get(message.id);
31
+ if (!pending) {
32
+ return;
33
+ }
34
+ pendingSendRequests.delete(message.id);
35
+ if (message.ok) {
36
+ pending.resolve(message.result);
37
+ }
38
+ else {
39
+ pending.reject(new Error(String(message.error ?? "pm.sendRequest failed")));
40
+ }
41
+ }
42
+ });
43
+ const sendRequestProxy = (input) => new Promise((resolve, reject) => {
44
+ const id = nextRequestId++;
45
+ pendingSendRequests.set(id, { resolve, reject });
46
+ port.postMessage({ type: "sendRequest", id, input });
47
+ });
48
+ if (data.enableSendRequest) {
49
+ data.input.capabilities.extensions = {
50
+ ...(data.input.capabilities.extensions ?? {}),
51
+ sendRequest: { execute: sendRequestProxy },
52
+ };
53
+ }
54
+ void (async () => {
55
+ let result;
56
+ try {
57
+ result = await (0, executor_js_1.executeScript)(data.input);
58
+ }
59
+ catch (error) {
60
+ result = {
61
+ success: false,
62
+ error: {
63
+ stage: data.input.stage ?? "script",
64
+ message: error instanceof Error ? error.message : String(error),
65
+ lineNumber: null,
66
+ column: null,
67
+ stack: error instanceof Error ? (error.stack ?? null) : null,
68
+ },
69
+ testResults: [],
70
+ variableMutations: [],
71
+ logs: [],
72
+ hasReturnValue: false,
73
+ };
74
+ }
75
+ if (result.hasReturnValue) {
76
+ result = { ...result, returnValue: jsonSafe(result.returnValue) };
77
+ }
78
+ port.postMessage({ type: "done", result });
79
+ })();
80
+ }
81
+ //# sourceMappingURL=worker-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-entry.js","sourceRoot":"","sources":["../../src/script/worker-entry.ts"],"names":[],"mappings":"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"}