callman-core 1.7.1 → 1.8.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.
Files changed (114) hide show
  1. package/dist/scenario-runner/runScenario.d.ts.map +1 -1
  2. package/dist/scenario-runner/runScenario.js +8 -0
  3. package/dist/scenario-runner/runScenario.js.map +1 -1
  4. package/dist/scenario-runner/templateResolver.d.ts.map +1 -1
  5. package/dist/scenario-runner/templateResolver.js +18 -0
  6. package/dist/scenario-runner/templateResolver.js.map +1 -1
  7. package/dist/scenario-runner/types.d.ts +1 -1
  8. package/dist/scenario-runner/types.d.ts.map +1 -1
  9. package/dist/script/executor.d.ts.map +1 -1
  10. package/dist/script/executor.js +75 -9
  11. package/dist/script/executor.js.map +1 -1
  12. package/dist/script/features/collectionVariables.d.ts +16 -0
  13. package/dist/script/features/collectionVariables.d.ts.map +1 -0
  14. package/dist/script/features/collectionVariables.js +83 -0
  15. package/dist/script/features/collectionVariables.js.map +1 -0
  16. package/dist/script/features/cryptojs.d.ts +8 -12
  17. package/dist/script/features/cryptojs.d.ts.map +1 -1
  18. package/dist/script/features/cryptojs.js +15 -99
  19. package/dist/script/features/cryptojs.js.map +1 -1
  20. package/dist/script/features/environment.d.ts +8 -1
  21. package/dist/script/features/environment.d.ts.map +1 -1
  22. package/dist/script/features/environment.js +25 -1
  23. package/dist/script/features/environment.js.map +1 -1
  24. package/dist/script/features/execution.d.ts +17 -0
  25. package/dist/script/features/execution.d.ts.map +1 -0
  26. package/dist/script/features/execution.js +60 -0
  27. package/dist/script/features/execution.js.map +1 -0
  28. package/dist/script/features/headerList.d.ts +44 -0
  29. package/dist/script/features/headerList.d.ts.map +1 -0
  30. package/dist/script/features/headerList.js +284 -0
  31. package/dist/script/features/headerList.js.map +1 -0
  32. package/dist/script/features/info.d.ts +10 -0
  33. package/dist/script/features/info.d.ts.map +1 -0
  34. package/dist/script/features/info.js +32 -0
  35. package/dist/script/features/info.js.map +1 -0
  36. package/dist/script/features/request.d.ts +3 -2
  37. package/dist/script/features/request.d.ts.map +1 -1
  38. package/dist/script/features/request.js +38 -29
  39. package/dist/script/features/request.js.map +1 -1
  40. package/dist/script/features/response.d.ts +7 -5
  41. package/dist/script/features/response.d.ts.map +1 -1
  42. package/dist/script/features/response.js +16 -8
  43. package/dist/script/features/response.js.map +1 -1
  44. package/dist/script/features/responseAssertions.d.ts +50 -0
  45. package/dist/script/features/responseAssertions.d.ts.map +1 -0
  46. package/dist/script/features/responseAssertions.js +293 -0
  47. package/dist/script/features/responseAssertions.js.map +1 -0
  48. package/dist/script/features/timers.d.ts +17 -0
  49. package/dist/script/features/timers.d.ts.map +1 -0
  50. package/dist/script/features/timers.js +152 -0
  51. package/dist/script/features/timers.js.map +1 -0
  52. package/dist/script/features/variables.d.ts +8 -1
  53. package/dist/script/features/variables.d.ts.map +1 -1
  54. package/dist/script/features/variables.js +57 -11
  55. package/dist/script/features/variables.js.map +1 -1
  56. package/dist/script/scope.d.ts +10 -0
  57. package/dist/script/scope.d.ts.map +1 -1
  58. package/dist/script/scope.js +13 -4
  59. package/dist/script/scope.js.map +1 -1
  60. package/dist/script/types.d.ts +51 -1
  61. package/dist/script/types.d.ts.map +1 -1
  62. package/dist/templating/generator-metadata.d.ts +1 -0
  63. package/dist/templating/generator-metadata.d.ts.map +1 -1
  64. package/dist/templating/generator-metadata.js +76 -0
  65. package/dist/templating/generator-metadata.js.map +1 -1
  66. package/dist/templating/postman-generators.d.ts +12 -0
  67. package/dist/templating/postman-generators.d.ts.map +1 -0
  68. package/dist/templating/postman-generators.js +577 -0
  69. package/dist/templating/postman-generators.js.map +1 -0
  70. package/dist/templating/template-engine.d.ts.map +1 -1
  71. package/dist/templating/template-engine.js +16 -0
  72. package/dist/templating/template-engine.js.map +1 -1
  73. package/dist/variables/resolver.d.ts.map +1 -1
  74. package/dist/variables/resolver.js +15 -0
  75. package/dist/variables/resolver.js.map +1 -1
  76. package/dist-cjs/scenario-runner/runScenario.js +8 -0
  77. package/dist-cjs/scenario-runner/runScenario.js.map +1 -1
  78. package/dist-cjs/scenario-runner/templateResolver.js +18 -0
  79. package/dist-cjs/scenario-runner/templateResolver.js.map +1 -1
  80. package/dist-cjs/script/executor.js +78 -9
  81. package/dist-cjs/script/executor.js.map +1 -1
  82. package/dist-cjs/script/features/collectionVariables.js +87 -0
  83. package/dist-cjs/script/features/collectionVariables.js.map +1 -0
  84. package/dist-cjs/script/features/cryptojs.js +18 -99
  85. package/dist-cjs/script/features/cryptojs.js.map +1 -1
  86. package/dist-cjs/script/features/environment.js +25 -1
  87. package/dist-cjs/script/features/environment.js.map +1 -1
  88. package/dist-cjs/script/features/execution.js +64 -0
  89. package/dist-cjs/script/features/execution.js.map +1 -0
  90. package/dist-cjs/script/features/headerList.js +289 -0
  91. package/dist-cjs/script/features/headerList.js.map +1 -0
  92. package/dist-cjs/script/features/info.js +36 -0
  93. package/dist-cjs/script/features/info.js.map +1 -0
  94. package/dist-cjs/script/features/request.js +38 -29
  95. package/dist-cjs/script/features/request.js.map +1 -1
  96. package/dist-cjs/script/features/response.js +16 -8
  97. package/dist-cjs/script/features/response.js.map +1 -1
  98. package/dist-cjs/script/features/responseAssertions.js +297 -0
  99. package/dist-cjs/script/features/responseAssertions.js.map +1 -0
  100. package/dist-cjs/script/features/timers.js +156 -0
  101. package/dist-cjs/script/features/timers.js.map +1 -0
  102. package/dist-cjs/script/features/variables.js +57 -11
  103. package/dist-cjs/script/features/variables.js.map +1 -1
  104. package/dist-cjs/script/scope.js +13 -4
  105. package/dist-cjs/script/scope.js.map +1 -1
  106. package/dist-cjs/templating/generator-metadata.js +77 -1
  107. package/dist-cjs/templating/generator-metadata.js.map +1 -1
  108. package/dist-cjs/templating/postman-generators.js +581 -0
  109. package/dist-cjs/templating/postman-generators.js.map +1 -0
  110. package/dist-cjs/templating/template-engine.js +16 -0
  111. package/dist-cjs/templating/template-engine.js.map +1 -1
  112. package/dist-cjs/variables/resolver.js +15 -0
  113. package/dist-cjs/variables/resolver.js.map +1 -1
  114. package/package.json +6 -2
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+ // ResponseAssertion — Postman-compatible response-shape shortcuts.
3
+ //
4
+ // Extends PmAssertion with the family of getters and methods that scripts
5
+ // reach for on `pm.response.to.*`:
6
+ //
7
+ // pm.response.to.be.ok // 2xx
8
+ // pm.response.to.be.success // 2xx (alias)
9
+ // pm.response.to.be.info // 1xx
10
+ // pm.response.to.be.redirection // 3xx
11
+ // pm.response.to.be.clientError // 4xx
12
+ // pm.response.to.be.serverError // 5xx
13
+ // pm.response.to.be.notFound // 404
14
+ // pm.response.to.be.unauthorized // 401
15
+ // pm.response.to.be.forbidden // 403
16
+ // pm.response.to.be.badRequest // 400
17
+ // pm.response.to.be.rateLimited // 429
18
+ //
19
+ // pm.response.to.be.json // content-type includes application/json
20
+ // pm.response.to.be.xml // includes xml
21
+ // pm.response.to.be.html // includes html
22
+ //
23
+ // pm.response.to.have.body(text?) // substring or non-empty
24
+ // pm.response.to.have.jsonBody(path?, val?) // dot-path JSON lookup
25
+ //
26
+ // Each predicate honours `.not` for negation, and returns the assertion so
27
+ // chains keep going: `pm.response.to.be.success.and.have.body("ok")`.
28
+ //
29
+ // Back-compat note: PmAssertion already exposes a `.ok` getter that checks
30
+ // truthiness. We override it here to the 2xx range semantic Postman uses.
31
+ // Existing Callman scripts that called `pm.response.to.be.ok` previously
32
+ // always passed (a ResponseApi object is truthy by construction), so the
33
+ // new behaviour is strictly more useful — failing responses now fail the
34
+ // assertion as they should.
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ResponseAssertion = void 0;
37
+ const assertions_js_1 = require("./assertions.js");
38
+ const get_js_1 = require("../../utils/get.js");
39
+ const isObject = (value) => typeof value === "object" && value !== null;
40
+ const formatValue = (value) => {
41
+ if (typeof value === "string")
42
+ return `"${value}"`;
43
+ if (value === undefined)
44
+ return "undefined";
45
+ try {
46
+ return JSON.stringify(value);
47
+ }
48
+ catch {
49
+ return String(value);
50
+ }
51
+ };
52
+ class ResponseAssertion extends assertions_js_1.PmAssertion {
53
+ constructor(actual, flags = {}) {
54
+ super(actual, flags);
55
+ }
56
+ // ── Modifier getters preserve the subclass so the response-specific
57
+ // predicates stay available after .not / .deep / .nested ───────────────
58
+ get not() {
59
+ return new ResponseAssertion(this.actual, {
60
+ ...this.flags,
61
+ negated: !this.flags.negated,
62
+ });
63
+ }
64
+ get deep() {
65
+ return new ResponseAssertion(this.actual, { ...this.flags, deep: true });
66
+ }
67
+ get nested() {
68
+ return new ResponseAssertion(this.actual, {
69
+ ...this.flags,
70
+ nested: true,
71
+ });
72
+ }
73
+ // ── Internal assertion + status helpers ────────────────────────────────
74
+ decide(pass, positiveMessage, negativeMessage) {
75
+ const finalPass = this.flags.negated ? !pass : pass;
76
+ if (!finalPass) {
77
+ throw new Error(this.flags.negated
78
+ ? negativeMessage ?? `Expected NOT: ${positiveMessage}`
79
+ : positiveMessage);
80
+ }
81
+ return this;
82
+ }
83
+ readStatus() {
84
+ if (isObject(this.actual)) {
85
+ const raw = this.actual.status;
86
+ if (typeof raw === "number" && Number.isFinite(raw)) {
87
+ return raw;
88
+ }
89
+ }
90
+ throw new Error("Response shortcut requires a response object (missing numeric `status`)");
91
+ }
92
+ readContentType() {
93
+ if (!isObject(this.actual))
94
+ return "";
95
+ const direct = this.actual.contentType;
96
+ if (typeof direct === "string" && direct.length > 0) {
97
+ return direct.toLowerCase();
98
+ }
99
+ // Fall back to looking it up in the headers HeaderList / record.
100
+ const headers = this.actual.headers;
101
+ if (isObject(headers)) {
102
+ // HeaderList exposes a case-insensitive .get() — prefer it.
103
+ const headerGetter = headers.get;
104
+ if (typeof headerGetter === "function") {
105
+ const got = headerGetter.call(headers, "content-type");
106
+ if (typeof got === "string")
107
+ return got.toLowerCase();
108
+ }
109
+ else {
110
+ const lookup = Object.entries(headers).find(([key]) => key.toLowerCase() === "content-type");
111
+ if (lookup && typeof lookup[1] === "string") {
112
+ return lookup[1].toLowerCase();
113
+ }
114
+ }
115
+ }
116
+ return "";
117
+ }
118
+ readRawBody() {
119
+ if (!isObject(this.actual))
120
+ return "";
121
+ const raw = this.actual.rawBody;
122
+ if (typeof raw === "string")
123
+ return raw;
124
+ const body = this.actual.body;
125
+ if (typeof body === "string")
126
+ return body;
127
+ if (body !== null && body !== undefined) {
128
+ try {
129
+ return JSON.stringify(body);
130
+ }
131
+ catch {
132
+ return String(body);
133
+ }
134
+ }
135
+ return "";
136
+ }
137
+ readJsonBody() {
138
+ if (!isObject(this.actual))
139
+ return undefined;
140
+ const jsonFn = this.actual.json;
141
+ if (typeof jsonFn === "function") {
142
+ try {
143
+ return jsonFn.call(this.actual);
144
+ }
145
+ catch {
146
+ // fall through to other shapes
147
+ }
148
+ }
149
+ const direct = this.actual.jsonBody;
150
+ if (direct !== undefined)
151
+ return direct;
152
+ const body = this.actual.body;
153
+ if (body !== undefined)
154
+ return body;
155
+ return this.actual.data;
156
+ }
157
+ statusInRange(min, max, label) {
158
+ const status = this.readStatus();
159
+ return this.decide(status >= min && status <= max, `Expected status ${status} to be ${label} (${min}-${max})`, `Expected status ${status} NOT to be ${label} (${min}-${max})`);
160
+ }
161
+ statusExactly(expected, label) {
162
+ const status = this.readStatus();
163
+ return this.decide(status === expected, `Expected status ${status} to be ${expected} (${label})`, `Expected status ${status} NOT to be ${expected} (${label})`);
164
+ }
165
+ // ── Status-range predicates ───────────────────────────────────────────
166
+ get ok() {
167
+ return this.statusInRange(200, 299, "OK / 2xx");
168
+ }
169
+ get success() {
170
+ return this.statusInRange(200, 299, "success / 2xx");
171
+ }
172
+ get info() {
173
+ return this.statusInRange(100, 199, "informational / 1xx");
174
+ }
175
+ get redirection() {
176
+ return this.statusInRange(300, 399, "redirection / 3xx");
177
+ }
178
+ get clientError() {
179
+ return this.statusInRange(400, 499, "client error / 4xx");
180
+ }
181
+ get serverError() {
182
+ return this.statusInRange(500, 599, "server error / 5xx");
183
+ }
184
+ get error() {
185
+ // Postman's `.error` matches any 4xx OR 5xx response.
186
+ const status = this.readStatus();
187
+ return this.decide(status >= 400 && status <= 599, `Expected status ${status} to be an error (4xx-5xx)`, `Expected status ${status} NOT to be an error (4xx-5xx)`);
188
+ }
189
+ // ── Status-exact predicates ───────────────────────────────────────────
190
+ get notFound() {
191
+ return this.statusExactly(404, "Not Found");
192
+ }
193
+ get unauthorized() {
194
+ return this.statusExactly(401, "Unauthorized");
195
+ }
196
+ get forbidden() {
197
+ return this.statusExactly(403, "Forbidden");
198
+ }
199
+ get badRequest() {
200
+ return this.statusExactly(400, "Bad Request");
201
+ }
202
+ get rateLimited() {
203
+ return this.statusExactly(429, "Too Many Requests / rate limited");
204
+ }
205
+ get accepted() {
206
+ return this.statusExactly(202, "Accepted");
207
+ }
208
+ get withBody() {
209
+ // Postman shorthand — non-empty body.
210
+ const body = this.readRawBody();
211
+ return this.decide(body.length > 0, "Expected response to have a body", "Expected response NOT to have a body");
212
+ }
213
+ // ── Content-type predicates ───────────────────────────────────────────
214
+ get json() {
215
+ const ct = this.readContentType();
216
+ const isJson = ct.includes("application/json") ||
217
+ ct.includes("+json") ||
218
+ ct.includes("text/json");
219
+ return this.decide(isJson, `Expected response Content-Type to be JSON, got "${ct || "(none)"}"`, `Expected response Content-Type NOT to be JSON, got "${ct || "(none)"}"`);
220
+ }
221
+ get xml() {
222
+ const ct = this.readContentType();
223
+ const isXml = ct.includes("application/xml") ||
224
+ ct.includes("text/xml") ||
225
+ ct.includes("+xml");
226
+ return this.decide(isXml, `Expected response Content-Type to be XML, got "${ct || "(none)"}"`, `Expected response Content-Type NOT to be XML, got "${ct || "(none)"}"`);
227
+ }
228
+ get html() {
229
+ const ct = this.readContentType();
230
+ const isHtml = ct.includes("text/html");
231
+ return this.decide(isHtml, `Expected response Content-Type to be HTML, got "${ct || "(none)"}"`, `Expected response Content-Type NOT to be HTML, got "${ct || "(none)"}"`);
232
+ }
233
+ // ── Body / payload assertions ─────────────────────────────────────────
234
+ /**
235
+ * `.have.body()` — non-empty body.
236
+ * `.have.body("substring")` — body string contains substring.
237
+ */
238
+ body(expected) {
239
+ const raw = this.readRawBody();
240
+ if (expected === undefined) {
241
+ return this.decide(raw.length > 0, "Expected response to have a body", "Expected response NOT to have a body");
242
+ }
243
+ const needle = String(expected);
244
+ return this.decide(raw.includes(needle), `Expected response body to include ${formatValue(needle)}`, `Expected response body NOT to include ${formatValue(needle)}`);
245
+ }
246
+ /**
247
+ * `.have.jsonBody()` — body parses as JSON (non-undefined).
248
+ * `.have.jsonBody("path.to.field")` — dot-path lookup must exist.
249
+ * `.have.jsonBody("path.to.field", expected)` — dot-path lookup must
250
+ * deep-equal `expected`.
251
+ */
252
+ jsonBody(path, expected) {
253
+ const json = this.readJsonBody();
254
+ if (path === undefined) {
255
+ return this.decide(json !== undefined && json !== null, "Expected response body to be valid JSON", "Expected response body NOT to be valid JSON");
256
+ }
257
+ if (typeof path !== "string") {
258
+ throw new TypeError("jsonBody(path) — path must be a string");
259
+ }
260
+ const lookup = (0, get_js_1.safeGet)(json, path);
261
+ if (arguments.length < 2) {
262
+ return this.decide(lookup.exists, `Expected response body to have JSON path "${path}"`, `Expected response body NOT to have JSON path "${path}"`);
263
+ }
264
+ // Two-arg form: assert existence + deep equality.
265
+ if (!lookup.exists) {
266
+ return this.decide(false, `Expected response body to have JSON path "${path}"`, `Expected response body NOT to have JSON path "${path}"`);
267
+ }
268
+ return this.decide(deepEqual(lookup.value, expected), `Expected JSON path "${path}" to equal ${formatValue(expected)}, got ${formatValue(lookup.value)}`, `Expected JSON path "${path}" NOT to equal ${formatValue(expected)}`);
269
+ }
270
+ /**
271
+ * `.have.jsonSchema(schema)` — placeholder. Real implementation arrives
272
+ * in the Phase 2.4 work that bundles ajv. Throws a clear error today so
273
+ * scripts fail fast rather than silently passing.
274
+ */
275
+ jsonSchema(_schema) {
276
+ throw new Error("pm.response.to.have.jsonSchema is not yet supported — Phase 2.4 will land ajv-backed schema validation. Use pm.expect with manual checks for now.");
277
+ }
278
+ }
279
+ exports.ResponseAssertion = ResponseAssertion;
280
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
281
+ const deepEqual = (left, right) => {
282
+ if (Object.is(left, right))
283
+ return true;
284
+ if (Array.isArray(left) && Array.isArray(right)) {
285
+ return (left.length === right.length &&
286
+ left.every((value, index) => deepEqual(value, right[index])));
287
+ }
288
+ if (isRecord(left) && isRecord(right)) {
289
+ const leftKeys = Object.keys(left);
290
+ const rightKeys = Object.keys(right);
291
+ return (leftKeys.length === rightKeys.length &&
292
+ leftKeys.every((key) => Object.prototype.hasOwnProperty.call(right, key) &&
293
+ deepEqual(left[key], right[key])));
294
+ }
295
+ return false;
296
+ };
297
+ //# sourceMappingURL=responseAssertions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responseAssertions.js","sourceRoot":"","sources":["../../../src/script/features/responseAssertions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ // Timer registry — exposes `setTimeout` / `clearTimeout` /
3
+ // `setInterval` / `clearInterval` inside the sandbox without leaking
4
+ // pending callbacks past the script's lifetime.
5
+ //
6
+ // Why this matters: Postman scripts routinely use
7
+ // await new Promise(r => setTimeout(r, 1000))
8
+ // for retry / poll patterns. We had this BLOCKED, so any such script
9
+ // died with `ReferenceError: setTimeout is not defined`. Re-enabling
10
+ // the globals naively would let a runaway `setInterval(fn, 100)`
11
+ // keep firing long after the script completed.
12
+ //
13
+ // The feature builds per-execution wrappers that:
14
+ // • register each timer id in a Map
15
+ // • cap each delay at MAX_TIMER_DELAY_MS (60 s) so a buggy script
16
+ // can't park work forever
17
+ // • cap the number of in-flight timers at MAX_TIMERS_PER_EXEC so a
18
+ // `for (;;) setTimeout(...)` loop can't drown the runtime
19
+ // • are torn down by `dispose()` once the script's outer Promise
20
+ // resolves/rejects (called from the executor's flush path)
21
+ //
22
+ // Each call returns a numeric id (1, 2, 3, ...) — opaque to the user
23
+ // script but unique per execution so clearTimeout works correctly even
24
+ // across nested feature builds.
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.buildTimerFeature = void 0;
27
+ const MAX_TIMER_DELAY_MS = 60_000;
28
+ const MAX_TIMERS_PER_EXEC = 1_000;
29
+ const clampDelay = (raw) => {
30
+ const n = Number(raw);
31
+ if (!Number.isFinite(n) || n < 0)
32
+ return 0;
33
+ return Math.min(n, MAX_TIMER_DELAY_MS);
34
+ };
35
+ const buildTimerFeature = () => {
36
+ const handles = new Map();
37
+ let nextId = 1;
38
+ let totalCreated = 0;
39
+ let disposed = false;
40
+ const allocId = () => {
41
+ const id = nextId;
42
+ nextId += 1;
43
+ return id;
44
+ };
45
+ const clear = (id, alsoActive = true) => {
46
+ const handle = handles.get(id);
47
+ if (!handle)
48
+ return;
49
+ if (alsoActive) {
50
+ if (handle.kind === "timeout") {
51
+ clearTimeout(handle.hostId);
52
+ }
53
+ else {
54
+ clearInterval(handle.hostId);
55
+ }
56
+ }
57
+ handles.delete(id);
58
+ };
59
+ const api = {
60
+ setTimeout: (handler, delay, ...args) => {
61
+ if (disposed) {
62
+ // Once the script has been disposed, any further timer
63
+ // requests are no-ops. Returning 0 (never a valid id) makes
64
+ // a stray `clearTimeout(...)` after disposal harmless too.
65
+ return 0;
66
+ }
67
+ if (typeof handler !== "function") {
68
+ throw new TypeError("setTimeout(handler) — handler must be a function");
69
+ }
70
+ if (handles.size >= MAX_TIMERS_PER_EXEC) {
71
+ throw new Error(`setTimeout: exceeded the per-script timer limit (${MAX_TIMERS_PER_EXEC}). ` +
72
+ `Use a single retry loop instead of scheduling many timers.`);
73
+ }
74
+ const id = allocId();
75
+ totalCreated += 1;
76
+ const ms = clampDelay(delay);
77
+ const hostId = setTimeout(() => {
78
+ // Remove from registry BEFORE firing so the handler can call
79
+ // clearTimeout(id) on itself without throwing on a stale entry.
80
+ handles.delete(id);
81
+ try {
82
+ handler(...args);
83
+ }
84
+ catch (error) {
85
+ // The vm context already routes uncaught script errors back
86
+ // to the executor's catch via Promise rejection. A timer
87
+ // callback that throws after the script's main promise has
88
+ // resolved is logged but doesn't blow up the host.
89
+ // eslint-disable-next-line no-console
90
+ console.error("Script timer callback threw:", error);
91
+ }
92
+ }, ms);
93
+ handles.set(id, { hostId, kind: "timeout" });
94
+ return id;
95
+ },
96
+ clearTimeout: (id) => {
97
+ if (disposed)
98
+ return;
99
+ const numeric = Number(id);
100
+ if (!Number.isInteger(numeric))
101
+ return;
102
+ clear(numeric);
103
+ },
104
+ setInterval: (handler, delay, ...args) => {
105
+ if (disposed)
106
+ return 0;
107
+ if (typeof handler !== "function") {
108
+ throw new TypeError("setInterval(handler) — handler must be a function");
109
+ }
110
+ if (handles.size >= MAX_TIMERS_PER_EXEC) {
111
+ throw new Error(`setInterval: exceeded the per-script timer limit (${MAX_TIMERS_PER_EXEC}).`);
112
+ }
113
+ const id = allocId();
114
+ totalCreated += 1;
115
+ // Intervals must have a positive delay — a 0 ms interval would
116
+ // spin a fire-hose. Clamp to at least 1 ms; the upper bound is
117
+ // the same MAX_TIMER_DELAY_MS cap.
118
+ const ms = Math.max(1, clampDelay(delay));
119
+ const hostId = setInterval(() => {
120
+ try {
121
+ handler(...args);
122
+ }
123
+ catch (error) {
124
+ // eslint-disable-next-line no-console
125
+ console.error("Script interval callback threw:", error);
126
+ }
127
+ }, ms);
128
+ handles.set(id, { hostId, kind: "interval" });
129
+ return id;
130
+ },
131
+ clearInterval: (id) => {
132
+ if (disposed)
133
+ return;
134
+ const numeric = Number(id);
135
+ if (!Number.isInteger(numeric))
136
+ return;
137
+ clear(numeric);
138
+ },
139
+ };
140
+ const dispose = () => {
141
+ if (disposed)
142
+ return;
143
+ disposed = true;
144
+ for (const id of [...handles.keys()]) {
145
+ clear(id);
146
+ }
147
+ };
148
+ return {
149
+ api,
150
+ dispose,
151
+ totalCreated: () => totalCreated,
152
+ activeCount: () => handles.size,
153
+ };
154
+ };
155
+ exports.buildTimerFeature = buildTimerFeature;
156
+ //# sourceMappingURL=timers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timers.js","sourceRoot":"","sources":["../../../src/script/features/timers.ts"],"names":[],"mappings":";AAAA,2DAA2D;AAC3D,qEAAqE;AACrE,gDAAgD;AAChD,EAAE;AACF,kDAAkD;AAClD,gDAAgD;AAChD,qEAAqE;AACrE,qEAAqE;AACrE,iEAAiE;AACjE,+CAA+C;AAC/C,EAAE;AACF,kDAAkD;AAClD,sCAAsC;AACtC,oEAAoE;AACpE,8BAA8B;AAC9B,qEAAqE;AACrE,8DAA8D;AAC9D,mEAAmE;AACnE,+DAA+D;AAC/D,EAAE;AACF,qEAAqE;AACrE,uEAAuE;AACvE,gCAAgC;;;AAEhC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AA0BlC,MAAM,UAAU,GAAG,CAAC,GAAY,EAAU,EAAE;IAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;AACzC,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAG,GAAiB,EAAE;IAClD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,OAAO,GAAG,GAAW,EAAE;QAC3B,MAAM,EAAE,GAAG,MAAM,CAAC;QAClB,MAAM,IAAI,CAAC,CAAC;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,UAAU,GAAG,IAAI,EAAQ,EAAE;QACpD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,YAAY,CAAC,MAAM,CAAC,MAAkD,CAAC,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,aAAa,CAAC,MAAM,CAAC,MAAmD,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,GAAG,GAAa;QACpB,UAAU,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE;YACtC,IAAI,QAAQ,EAAE,CAAC;gBACb,uDAAuD;gBACvD,4DAA4D;gBAC5D,2DAA2D;gBAC3D,OAAO,CAAC,CAAC;YACX,CAAC;YACD,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBAClC,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,IAAI,mBAAmB,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CACb,oDAAoD,mBAAmB,KAAK;oBAC1E,4DAA4D,CAC/D,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;YACrB,YAAY,IAAI,CAAC,CAAC;YAClB,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC7B,6DAA6D;gBAC7D,gEAAgE;gBAChE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACnB,IAAI,CAAC;oBACF,OAAwC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACrD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,4DAA4D;oBAC5D,yDAAyD;oBACzD,2DAA2D;oBAC3D,mDAAmD;oBACnD,sCAAsC;oBACtC,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC,EAAE,EAAE,CAAC,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE;YACnB,IAAI,QAAQ;gBAAE,OAAO;YACrB,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;gBAAE,OAAO;YACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjB,CAAC;QACD,WAAW,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE;YACvC,IAAI,QAAQ;gBAAE,OAAO,CAAC,CAAC;YACvB,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;gBAClC,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,IAAI,mBAAmB,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CACb,qDAAqD,mBAAmB,IAAI,CAC7E,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;YACrB,YAAY,IAAI,CAAC,CAAC;YAClB,+DAA+D;YAC/D,+DAA+D;YAC/D,mCAAmC;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1C,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC9B,IAAI,CAAC;oBACF,OAAwC,CAAC,GAAG,IAAI,CAAC,CAAC;gBACrD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,sCAAsC;oBACtC,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC,EAAE,EAAE,CAAC,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE;YACpB,IAAI,QAAQ;gBAAE,OAAO;YACrB,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;gBAAE,OAAO;YACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjB,CAAC;KACF,CAAC;IAEF,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,EAAE,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,GAAG;QACH,OAAO;QACP,YAAY,EAAE,GAAG,EAAE,CAAC,YAAY;QAChC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI;KAChC,CAAC;AACJ,CAAC,CAAC;AAtHW,QAAA,iBAAiB,qBAsH5B"}
@@ -1,11 +1,20 @@
1
1
  "use strict";
2
- // pm.variables — collection-runner template resolver.
2
+ // pm.variables — Postman-compatible variable scope.
3
3
  //
4
- // Bridges the script sandbox to callman-core's existing template resolver
5
- // (callman_core/src/variables/resolver.ts). Merges env + globals into a
6
- // single lookup table so user scripts can call:
7
- // pm.variables.resolve("Hello {{name}}")
8
- // regardless of which scope `name` lives in.
4
+ // Postman's `pm.variables` exposes:
5
+ // • `.has(key)` / `.get(key)` / `.set(key, value)` / `.unset(key)` /
6
+ // `.toObject()` — operate on the merged scope (iteration row >
7
+ // environment > globals). Writes go to a transient local store that
8
+ // survives the request's scripts but does NOT mutate the env / globals
9
+ // records visible to other requests in the same run.
10
+ // • `.resolve(template)` / `.replaceIn(template)` — both names supported
11
+ // for compatibility; substitutes `{{var}}` against the merged scope
12
+ // and ALL Postman dynamic tokens (`$randomUUID`, `$timestamp`, etc.).
13
+ //
14
+ // Earlier Callman releases only exposed `.resolve` / `.replaceIn`. The
15
+ // has/get/set/unset/toObject methods are added now so scripts that use
16
+ // `pm.variables.set(...)` and `pm.variables.get(...)` (a very common
17
+ // Postman pattern) work without rewrites.
9
18
  Object.defineProperty(exports, "__esModule", { value: true });
10
19
  exports.buildVariablesApi = void 0;
11
20
  const resolver_js_1 = require("../../variables/resolver.js");
@@ -15,12 +24,49 @@ const stringifyInput = (value) => {
15
24
  }
16
25
  return String(value);
17
26
  };
18
- const buildVariablesApi = (environment, globals) => {
19
- // Merge with environment taking precedence over globals (matches the
20
- // electron runtime.ts behavior where env was spread after globals).
21
- const mergedScope = { ...globals, ...environment };
22
- const resolve = (input) => (0, resolver_js_1.resolveTemplate)(stringifyInput(input), { env: mergedScope });
27
+ const buildVariablesApi = (environment, globals, options = {}) => {
28
+ // Local (request-scoped) overlay. Writes via `pm.variables.set` land
29
+ // here so they take precedence over env / globals for subsequent reads
30
+ // in the same script execution, without polluting persistent state.
31
+ const local = {};
32
+ const collection = options.collectionVariables ?? {};
33
+ // Precedence on read: local > collection > environment > globals.
34
+ // This mirrors Postman's documented order.
35
+ const readMerged = () => ({
36
+ ...globals,
37
+ ...environment,
38
+ ...collection,
39
+ ...local,
40
+ });
41
+ const resolve = (input) => (0, resolver_js_1.resolveTemplate)(stringifyInput(input), { env: readMerged() });
23
42
  return {
43
+ has: (key) => {
44
+ const normalisedKey = String(key ?? "").trim();
45
+ if (!normalisedKey)
46
+ return false;
47
+ const merged = readMerged();
48
+ return Object.prototype.hasOwnProperty.call(merged, normalisedKey);
49
+ },
50
+ get: (key) => {
51
+ const normalisedKey = String(key ?? "").trim();
52
+ if (!normalisedKey)
53
+ return undefined;
54
+ const merged = readMerged();
55
+ return merged[normalisedKey];
56
+ },
57
+ set: (key, value) => {
58
+ const normalisedKey = String(key ?? "").trim();
59
+ if (!normalisedKey)
60
+ return;
61
+ local[normalisedKey] = stringifyInput(value);
62
+ },
63
+ unset: (key) => {
64
+ const normalisedKey = String(key ?? "").trim();
65
+ if (!normalisedKey)
66
+ return;
67
+ delete local[normalisedKey];
68
+ },
69
+ toObject: () => readMerged(),
24
70
  resolve,
25
71
  replaceIn: resolve,
26
72
  };
@@ -1 +1 @@
1
- {"version":3,"file":"variables.js","sourceRoot":"","sources":["../../../src/script/features/variables.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,gDAAgD;AAChD,2CAA2C;AAC3C,6CAA6C;;;AAE7C,6DAA8D;AAO9D,MAAM,cAAc,GAAG,CAAC,KAAc,EAAU,EAAE;IAChD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAG,CAC/B,WAAmC,EACnC,OAA+B,EACjB,EAAE;IAChB,qEAAqE;IACrE,oEAAoE;IACpE,MAAM,WAAW,GAA2B,EAAE,GAAG,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC;IAE3E,MAAM,OAAO,GAAG,CAAC,KAAc,EAAU,EAAE,CACzC,IAAA,6BAAe,EAAC,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;IAE/D,OAAO;QACL,OAAO;QACP,SAAS,EAAE,OAAO;KACnB,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,iBAAiB,qBAe5B"}
1
+ {"version":3,"file":"variables.js","sourceRoot":"","sources":["../../../src/script/features/variables.ts"],"names":[],"mappings":";AAAA,oDAAoD;AACpD,EAAE;AACF,oCAAoC;AACpC,uEAAuE;AACvE,mEAAmE;AACnE,wEAAwE;AACxE,2EAA2E;AAC3E,yDAAyD;AACzD,2EAA2E;AAC3E,wEAAwE;AACxE,0EAA0E;AAC1E,EAAE;AACF,uEAAuE;AACvE,uEAAuE;AACvE,qEAAqE;AACrE,0CAA0C;;;AAE1C,6DAA8D;AAY9D,MAAM,cAAc,GAAG,CAAC,KAAc,EAAU,EAAE;IAChD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAG,CAC/B,WAAmC,EACnC,OAA+B,EAC/B,UAA4D,EAAE,EAChD,EAAE;IAChB,qEAAqE;IACrE,uEAAuE;IACvE,oEAAoE;IACpE,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,OAAO,CAAC,mBAAmB,IAAI,EAAE,CAAC;IAErD,kEAAkE;IAClE,2CAA2C;IAC3C,MAAM,UAAU,GAAG,GAA2B,EAAE,CAAC,CAAC;QAChD,GAAG,OAAO;QACV,GAAG,WAAW;QACd,GAAG,UAAU;QACb,GAAG,KAAK;KACT,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,CAAC,KAAc,EAAU,EAAE,CACzC,IAAA,6BAAe,EAAC,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IAEhE,OAAO;QACL,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa;gBAAE,OAAO,KAAK,CAAC;YACjC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACrE,CAAC;QACD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;YACX,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa;gBAAE,OAAO,SAAS,CAAC;YACrC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC;QAC/B,CAAC;QACD,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YAClB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa;gBAAE,OAAO;YAC3B,KAAK,CAAC,aAAa,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;YACb,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa;gBAAE,OAAO;YAC3B,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC;QAC9B,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE;QAC5B,OAAO;QACP,SAAS,EAAE,OAAO;KACnB,CAAC;AACJ,CAAC,CAAC;AAlDW,QAAA,iBAAiB,qBAkD5B"}
@@ -88,10 +88,10 @@ const BLOCKED_GLOBALS = [
88
88
  "eval",
89
89
  "Function",
90
90
  "Buffer",
91
- "setTimeout",
92
- "clearTimeout",
93
- "setInterval",
94
- "clearInterval",
91
+ // setTimeout / clearTimeout / setInterval / clearInterval are NOT
92
+ // blocked here — the executor injects safe per-execution wrappers
93
+ // via `bindings.timers` (see `features/timers.ts`). Disposal on
94
+ // script completion guarantees no callbacks fire past the run.
95
95
  "fetch",
96
96
  "XMLHttpRequest",
97
97
  "WebSocket",
@@ -177,6 +177,15 @@ const buildScopeTarget = (bindings) => {
177
177
  if (bindings.CryptoJS !== undefined) {
178
178
  target.CryptoJS = bindings.CryptoJS;
179
179
  }
180
+ if (bindings.lodash !== undefined) {
181
+ target._ = bindings.lodash;
182
+ }
183
+ if (bindings.timers !== undefined) {
184
+ target.setTimeout = bindings.timers.setTimeout;
185
+ target.clearTimeout = bindings.timers.clearTimeout;
186
+ target.setInterval = bindings.timers.setInterval;
187
+ target.clearInterval = bindings.timers.clearInterval;
188
+ }
180
189
  if (bindings.labelGlobals) {
181
190
  for (const [name, value] of Object.entries(bindings.labelGlobals)) {
182
191
  target[name] = value;
@@ -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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"}