callman-core 1.11.6 → 1.11.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai-packs/db-queries.md +46 -0
- package/ai-packs/feature-policy.md +1 -0
- package/ai-packs/pm-api.md +3 -2
- package/dist/host/db/db-query-reference.d.ts +2 -0
- package/dist/host/db/db-query-reference.d.ts.map +1 -0
- package/dist/host/db/db-query-reference.js +64 -0
- package/dist/host/db/db-query-reference.js.map +1 -0
- package/dist/host/index.d.ts +1 -0
- package/dist/host/index.d.ts.map +1 -1
- package/dist/host/index.js +1 -0
- package/dist/host/index.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/request/executeRequest.d.ts.map +1 -1
- package/dist/request/executeRequest.js +15 -1
- package/dist/request/executeRequest.js.map +1 -1
- package/dist/runner/requestRunner.d.ts.map +1 -1
- package/dist/runner/requestRunner.js +88 -4
- package/dist/runner/requestRunner.js.map +1 -1
- package/dist/runner/runRequestWithDataset.d.ts +3 -0
- package/dist/runner/runRequestWithDataset.d.ts.map +1 -0
- package/dist/runner/runRequestWithDataset.js +109 -0
- package/dist/runner/runRequestWithDataset.js.map +1 -0
- package/dist/script/pm-api-metadata.js +1 -1
- package/dist/script/pm-api-metadata.js.map +1 -1
- package/dist/script/pm-api-reference.d.ts +11 -0
- package/dist/script/pm-api-reference.d.ts.map +1 -0
- package/dist/script/pm-api-reference.js +48 -0
- package/dist/script/pm-api-reference.js.map +1 -0
- package/dist/types/index.d.ts +35 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist-cjs/host/db/db-query-reference.js +68 -0
- package/dist-cjs/host/db/db-query-reference.js.map +1 -0
- package/dist-cjs/host/index.js +3 -1
- package/dist-cjs/host/index.js.map +1 -1
- package/dist-cjs/index.js +5 -1
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/request/executeRequest.js +15 -1
- package/dist-cjs/request/executeRequest.js.map +1 -1
- package/dist-cjs/runner/requestRunner.js +88 -4
- package/dist-cjs/runner/requestRunner.js.map +1 -1
- package/dist-cjs/runner/runRequestWithDataset.js +113 -0
- package/dist-cjs/runner/runRequestWithDataset.js.map +1 -0
- package/dist-cjs/script/pm-api-metadata.js +1 -1
- package/dist-cjs/script/pm-api-metadata.js.map +1 -1
- package/dist-cjs/script/pm-api-reference.js +52 -0
- package/dist-cjs/script/pm-api-reference.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<!-- GENERATED FILE — do not edit by hand. Source: callman_core (npm run ai:packs). -->
|
|
2
|
+
|
|
3
|
+
# Callman data access from scripts (`pm.db.query` / `pm.redis.command`)
|
|
4
|
+
|
|
5
|
+
`pm.db.query({ connectionId, query })` — ALWAYS `await`. `query` is coerced to a string, `{{tokens}}` are resolved, then dispatched by the connection's type. `connectionId` may be omitted to use the request's configured DB connection. IMPORTANT: `pm.db.query` does NOT accept a `params`/bind array — inline values (quote strings) or use `{{env.X}}` tokens; SQL placeholders like `$1` or `?` are NOT bound.
|
|
6
|
+
|
|
7
|
+
## MongoDB
|
|
8
|
+
`query` MUST be a JSON STRING of a command object (use `JSON.stringify`), NOT a `db.coll.find(...)` shell string. The match key is `filter` (a top-level `query` key is rejected).
|
|
9
|
+
|
|
10
|
+
```js
|
|
11
|
+
const body = pm.response.json();
|
|
12
|
+
const res = await pm.db.query({
|
|
13
|
+
connectionId: "…",
|
|
14
|
+
query: JSON.stringify({
|
|
15
|
+
collection: "users",
|
|
16
|
+
operation: "findOne", // find | findOne | aggregate | countDocuments | insertOne | insertMany | updateOne | updateMany | deleteOne | deleteMany | findOneAndUpdate | findOneAndReplace | findOneAndDelete
|
|
17
|
+
filter: { email: body.data.user.email },
|
|
18
|
+
}),
|
|
19
|
+
});
|
|
20
|
+
pm.expect(res.rowCount).to.be.above(0); // existence check
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Per-operation fields: `find`/`findOne` use `filter` (+ optional `projection`,`sort`,`limit`,`skip`); `aggregate` uses `pipeline` (array); `insertOne` uses `document`, `insertMany` uses `documents`; `updateOne`/`updateMany`/`findOneAndUpdate` use `filter`+`update` (Mongo update operators, e.g. `{ $set: { … } }`); `deleteOne`/`deleteMany` use `filter`; `findOneAndUpdate`/`findOneAndReplace` accept `returnDocument: "before"|"after"`. A 24-hex string in a filter is auto-coerced to ObjectId (or use `{ "$oid": "…" }`). Rows are in `res.rows`; write ops surface counts in `res.rowCount`.
|
|
24
|
+
|
|
25
|
+
## PostgreSQL / MySQL / Oracle (SQL)
|
|
26
|
+
`query` is plain SQL text. Because `pm.db.query` binds no params, inline the value and quote strings yourself (or use a `{{token}}`):
|
|
27
|
+
|
|
28
|
+
```js
|
|
29
|
+
const email = pm.response.json().data.user.email;
|
|
30
|
+
const res = await pm.db.query({
|
|
31
|
+
connectionId: "…",
|
|
32
|
+
query: `SELECT id FROM users WHERE email = '${email}'`,
|
|
33
|
+
});
|
|
34
|
+
pm.expect(res.rowCount).to.be.above(0);
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Notes: a trailing `;` is stripped (except Oracle PL/SQL blocks, which keep it). **Oracle** returns column names UPPERCASE — read `res.rows[0].EMAIL`, not `.email`. `res.rowCount` is the row count for SELECT and the affected-row count for INSERT/UPDATE/DELETE.
|
|
38
|
+
|
|
39
|
+
## Redis (`pm.redis.command`)
|
|
40
|
+
`command` is a single string. Only **GET, SET, DEL, EXISTS, TTL** are supported. Quote a value that contains spaces.
|
|
41
|
+
|
|
42
|
+
```js
|
|
43
|
+
const res = await pm.redis.command({ connectionId: "…", command: `GET session:${id}` });
|
|
44
|
+
pm.expect(res.success).to.be.true;
|
|
45
|
+
// res.result / res.resultText hold the value; res.commandName, res.key are set.
|
|
46
|
+
```
|
package/ai-packs/pm-api.md
CHANGED
|
@@ -110,7 +110,7 @@ Fire an ad-hoc HTTP request from inside a script.
|
|
|
110
110
|
|
|
111
111
|
Database access (Oracle / MongoDB / PostgreSQL / MySQL). Disabled by feature policy in some contexts — tests then report SKIP.
|
|
112
112
|
|
|
113
|
-
- `pm.db.query({ connectionId, query })` — 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). _(requires the database capability — may be disabled by feature policy)_
|
|
113
|
+
- `pm.db.query({ connectionId, query })` — Run an ad-hoc query — ALWAYS await it. SQL connections (Oracle/Postgres/MySQL): `query` is the SQL text. MongoDB: `query` is a JSON STRING of a command object, e.g. `JSON.stringify({ collection: 'users', operation: 'findOne', filter: { email } })` — operation is find|findOne|aggregate|countDocuments|insertOne|updateOne|deleteOne|…, the match key is `filter` (NOT a `db.coll.find(...)` shell string and NOT `query`), and aggregate uses `pipeline`. Resolves to { success, error, rowCount, rows, firstRow(), connectionId, connectionName, connectionType, durationMs, executedAt }. firstRow is a FUNCTION: res.firstRow()?.STATUS (Oracle columns are UPPERCASE); for a Mongo existence check assert rowCount > 0. _(requires the database capability — may be disabled by feature policy)_
|
|
114
114
|
- `pm.db.pre` — Result object of the declared pre-request DB query: { success, error, rowCount, rows, firstRow() }. Not a promise — read directly. _(requires the database capability — may be disabled by feature policy)_
|
|
115
115
|
- `pm.db.post` — Result object of the declared post-response DB query (same shape as pm.db.pre). _(stages: post-response, tests)_ _(requires the database capability — may be disabled by feature policy)_
|
|
116
116
|
|
|
@@ -123,8 +123,9 @@ Captured Kafka events from the request's Kafka tab listener.
|
|
|
123
123
|
|
|
124
124
|
## pm.redis
|
|
125
125
|
|
|
126
|
-
|
|
126
|
+
Run ad-hoc Redis commands and read results of declared pre/post commands.
|
|
127
127
|
|
|
128
|
+
- `pm.redis.command({ connectionId, command })` — Run an ad-hoc Redis command (GET/SET/DEL/EXISTS/TTL) — ALWAYS await it. Resolves to { success, error, result, resultText, commandName, key, connectionId, connectionName, command, resolvedCommand, durationMs, executedAt }. Omit connectionId to use the request's configured Redis connection. _(requires the redis capability — may be disabled by feature policy)_
|
|
128
129
|
- `pm.redis.get(key)` — Read a value already captured by a declared GET. _(requires the redis capability — may be disabled by feature policy)_
|
|
129
130
|
- `pm.redis.results.pre` — Array of pre-stage command results (by line index). _(requires the redis capability — may be disabled by feature policy)_
|
|
130
131
|
- `pm.redis.results.post` — Array of post-stage command results. _(stages: post-response, tests)_ _(requires the redis capability — may be disabled by feature policy)_
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-query-reference.d.ts","sourceRoot":"","sources":["../../../src/host/db/db-query-reference.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,sBAAsB,QAAO,MA8C5B,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// Authoritative, human/AI-readable reference for HOW to shape a query passed to
|
|
2
|
+
// `pm.db.query({ connectionId, query })` and `pm.redis.command({ connectionId,
|
|
3
|
+
// command })` from a script — one per backend. Colocated with the adapters that
|
|
4
|
+
// define the real behaviour so it can't silently drift.
|
|
5
|
+
//
|
|
6
|
+
// KEEP IN SYNC with:
|
|
7
|
+
// - mongoAdapter.ts (Mongo command-object shape + supported operations)
|
|
8
|
+
// - postgresAdapter.ts ($1 placeholders — but see note below)
|
|
9
|
+
// - mysqlAdapter.ts (? placeholders — but see note below)
|
|
10
|
+
// - oracleAdapter.ts (UPPERCASE columns, PL/SQL, no bind array)
|
|
11
|
+
// - redisService.ts (supported command set: GET/SET/DEL/EXISTS/TTL)
|
|
12
|
+
// - ../../script/features/db.ts (pm.db.query coerces `query` to String — no params)
|
|
13
|
+
// - ../../script/features/redis.ts (pm.redis.command coerces `command` to String)
|
|
14
|
+
//
|
|
15
|
+
// CRITICAL: `pm.db.query` does NOT forward a `params` array (only the host /
|
|
16
|
+
// scenario executor does). So inside a SCRIPT, SQL bind placeholders (`$1`, `?`)
|
|
17
|
+
// are NOT bound — inline the value (quote strings) or use a `{{token}}` instead.
|
|
18
|
+
export const renderDbQueryReference = () => [
|
|
19
|
+
"# Callman data access from scripts (`pm.db.query` / `pm.redis.command`)",
|
|
20
|
+
"",
|
|
21
|
+
"`pm.db.query({ connectionId, query })` — ALWAYS `await`. `query` is coerced to a string, `{{tokens}}` are resolved, then dispatched by the connection's type. `connectionId` may be omitted to use the request's configured DB connection. IMPORTANT: `pm.db.query` does NOT accept a `params`/bind array — inline values (quote strings) or use `{{env.X}}` tokens; SQL placeholders like `$1` or `?` are NOT bound.",
|
|
22
|
+
"",
|
|
23
|
+
"## MongoDB",
|
|
24
|
+
"`query` MUST be a JSON STRING of a command object (use `JSON.stringify`), NOT a `db.coll.find(...)` shell string. The match key is `filter` (a top-level `query` key is rejected).",
|
|
25
|
+
"",
|
|
26
|
+
"```js",
|
|
27
|
+
"const body = pm.response.json();",
|
|
28
|
+
"const res = await pm.db.query({",
|
|
29
|
+
' connectionId: "…",',
|
|
30
|
+
" query: JSON.stringify({",
|
|
31
|
+
' collection: "users",',
|
|
32
|
+
' operation: "findOne", // find | findOne | aggregate | countDocuments | insertOne | insertMany | updateOne | updateMany | deleteOne | deleteMany | findOneAndUpdate | findOneAndReplace | findOneAndDelete',
|
|
33
|
+
" filter: { email: body.data.user.email },",
|
|
34
|
+
" }),",
|
|
35
|
+
"});",
|
|
36
|
+
"pm.expect(res.rowCount).to.be.above(0); // existence check",
|
|
37
|
+
"```",
|
|
38
|
+
"",
|
|
39
|
+
"Per-operation fields: `find`/`findOne` use `filter` (+ optional `projection`,`sort`,`limit`,`skip`); `aggregate` uses `pipeline` (array); `insertOne` uses `document`, `insertMany` uses `documents`; `updateOne`/`updateMany`/`findOneAndUpdate` use `filter`+`update` (Mongo update operators, e.g. `{ $set: { … } }`); `deleteOne`/`deleteMany` use `filter`; `findOneAndUpdate`/`findOneAndReplace` accept `returnDocument: \"before\"|\"after\"`. A 24-hex string in a filter is auto-coerced to ObjectId (or use `{ \"$oid\": \"…\" }`). Rows are in `res.rows`; write ops surface counts in `res.rowCount`.",
|
|
40
|
+
"",
|
|
41
|
+
"## PostgreSQL / MySQL / Oracle (SQL)",
|
|
42
|
+
"`query` is plain SQL text. Because `pm.db.query` binds no params, inline the value and quote strings yourself (or use a `{{token}}`):",
|
|
43
|
+
"",
|
|
44
|
+
"```js",
|
|
45
|
+
"const email = pm.response.json().data.user.email;",
|
|
46
|
+
"const res = await pm.db.query({",
|
|
47
|
+
' connectionId: "…",',
|
|
48
|
+
" query: `SELECT id FROM users WHERE email = '${email}'`,",
|
|
49
|
+
"});",
|
|
50
|
+
"pm.expect(res.rowCount).to.be.above(0);",
|
|
51
|
+
"```",
|
|
52
|
+
"",
|
|
53
|
+
"Notes: a trailing `;` is stripped (except Oracle PL/SQL blocks, which keep it). **Oracle** returns column names UPPERCASE — read `res.rows[0].EMAIL`, not `.email`. `res.rowCount` is the row count for SELECT and the affected-row count for INSERT/UPDATE/DELETE.",
|
|
54
|
+
"",
|
|
55
|
+
"## Redis (`pm.redis.command`)",
|
|
56
|
+
"`command` is a single string. Only **GET, SET, DEL, EXISTS, TTL** are supported. Quote a value that contains spaces.",
|
|
57
|
+
"",
|
|
58
|
+
"```js",
|
|
59
|
+
'const res = await pm.redis.command({ connectionId: "…", command: `GET session:${id}` });',
|
|
60
|
+
"pm.expect(res.success).to.be.true;",
|
|
61
|
+
"// res.result / res.resultText hold the value; res.commandName, res.key are set.",
|
|
62
|
+
"```",
|
|
63
|
+
].join("\n");
|
|
64
|
+
//# sourceMappingURL=db-query-reference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-query-reference.js","sourceRoot":"","sources":["../../../src/host/db/db-query-reference.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,wDAAwD;AACxD,EAAE;AACF,qBAAqB;AACrB,+EAA+E;AAC/E,kEAAkE;AAClE,iEAAiE;AACjE,sEAAsE;AACtE,2EAA2E;AAC3E,yFAAyF;AACzF,oFAAoF;AACpF,EAAE;AACF,6EAA6E;AAC7E,iFAAiF;AACjF,iFAAiF;AAEjF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAW,EAAE,CACjD;IACE,yEAAyE;IACzE,EAAE;IACF,uZAAuZ;IACvZ,EAAE;IACF,YAAY;IACZ,oLAAoL;IACpL,EAAE;IACF,OAAO;IACP,kCAAkC;IAClC,iCAAiC;IACjC,sBAAsB;IACtB,2BAA2B;IAC3B,0BAA0B;IAC1B,sNAAsN;IACtN,8CAA8C;IAC9C,OAAO;IACP,KAAK;IACL,8DAA8D;IAC9D,KAAK;IACL,EAAE;IACF,olBAAolB;IACplB,EAAE;IACF,sCAAsC;IACtC,uIAAuI;IACvI,EAAE;IACF,OAAO;IACP,mDAAmD;IACnD,iCAAiC;IACjC,sBAAsB;IACtB,2DAA2D;IAC3D,KAAK;IACL,yCAAyC;IACzC,KAAK;IACL,EAAE;IACF,qQAAqQ;IACrQ,EAAE;IACF,+BAA+B;IAC/B,sHAAsH;IACtH,EAAE;IACF,OAAO;IACP,0FAA0F;IAC1F,oCAAoC;IACpC,kFAAkF;IAClF,KAAK;CACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/host/index.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export { executePostgresQuery, testPostgresConnection, __setPostgresDriverForTes
|
|
|
5
5
|
export { executeMysqlQuery, testMysqlConnection, __setMysqlDriverForTests, } from "./db/mysqlAdapter.js";
|
|
6
6
|
export { executeOracleQuery, testOracleConnection, __setOracleDriverForTests, } from "./db/oracleAdapter.js";
|
|
7
7
|
export { stripTrailingSqlTerminator } from "./db/sqlNormalize.js";
|
|
8
|
+
export { renderDbQueryReference } from "./db/db-query-reference.js";
|
|
8
9
|
export { normalizeOracleConnectString, OracleConnectStringError, } from "./db/oracleConnectString.js";
|
|
9
10
|
export { databaseConfigToDbConnection, type CoreDbProvider, type DatabaseConnectionConfigLike, } from "./db/connectionMapping.js";
|
|
10
11
|
export { type DbConnection, type DbConnectionInput, type DbConnectionType, type DbConnectionMode, type DbConnectionTestResult, type DbQueryExecutionResult, type DbQueryPhase, type DbTemplateContext, type ExecuteDbQueryPayload, } from "./db/types.js";
|
package/dist/host/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,4BAA4B,EAC5B,KAAK,cAAc,EACnB,KAAK,4BAA4B,GAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,GAC3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,4BAA4B,EAC5B,KAAK,cAAc,EACnB,KAAK,4BAA4B,GAClC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAC"}
|
package/dist/host/index.js
CHANGED
|
@@ -10,6 +10,7 @@ export { executePostgresQuery, testPostgresConnection, __setPostgresDriverForTes
|
|
|
10
10
|
export { executeMysqlQuery, testMysqlConnection, __setMysqlDriverForTests, } from "./db/mysqlAdapter.js";
|
|
11
11
|
export { executeOracleQuery, testOracleConnection, __setOracleDriverForTests, } from "./db/oracleAdapter.js";
|
|
12
12
|
export { stripTrailingSqlTerminator } from "./db/sqlNormalize.js";
|
|
13
|
+
export { renderDbQueryReference } from "./db/db-query-reference.js";
|
|
13
14
|
export { normalizeOracleConnectString, OracleConnectStringError, } from "./db/oracleConnectString.js";
|
|
14
15
|
export { databaseConfigToDbConnection, } from "./db/connectionMapping.js";
|
|
15
16
|
export { executeRedisCommands } from "./redis/redisService.js";
|
package/dist/host/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,6EAA6E;AAC7E,4EAA4E;AAE5E,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,GASrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,+EAA+E;AAC/E,wEAAwE;AACxE,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,4BAA4B,GAG7B,MAAM,2BAA2B,CAAC;AAanC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,6EAA6E;AAC7E,4EAA4E;AAE5E,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,GASrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,+EAA+E;AAC/E,wEAAwE;AACxE,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,4BAA4B,GAG7B,MAAM,2BAA2B,CAAC;AAanC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { runCollection } from "./runner/runCollection.js";
|
|
2
2
|
export { runRequest } from "./runner/requestRunner.js";
|
|
3
|
+
export { runRequestWithDataset } from "./runner/runRequestWithDataset.js";
|
|
3
4
|
export { executeRequest } from "./request/executeRequest.js";
|
|
4
5
|
export { isXmlContentType, parseXml, looksLikeXml, XML_PARSER_OPTIONS, type ParseXmlResult, } from "./utils/xml.js";
|
|
5
6
|
export { sanitizeJsonBody } from "./utils/jsonc.js";
|
|
@@ -11,6 +12,7 @@ export { runScriptIsolated } from "./script/isolated-runner.js";
|
|
|
11
12
|
export type { RunScriptIsolatedOptions } from "./script/isolated-runner.js";
|
|
12
13
|
export type { CounterSnapshotEntry, ExecuteScriptInput, ExecuteScriptResult, ScriptCapabilities, ScriptCounterCapability, ScriptDbCapability, ScriptDbExecutionInput, ScriptDbExecutionResult, ScriptError, ScriptFeaturePolicy, ScriptKafkaCapability, ScriptKeyValuePair, ScriptLogEntry, ScriptRedisCapability, ScriptRedisExecutionInput, ScriptRedisExecutionResult, ScriptRequestBodyState, ScriptRequestState, ScriptResponseState, ScriptStage, ScriptTestResult, ScriptVariableMutation, SendRequestExecutor, } from "./script/types.js";
|
|
13
14
|
export { PM_API_METADATA, type PmApiMember, type PmApiNamespace, type PmApiStage, } from "./script/pm-api-metadata.js";
|
|
15
|
+
export { renderPmApiReference, type RenderPmApiOptions, } from "./script/pm-api-reference.js";
|
|
14
16
|
export { ALLOWED_GLOBAL_NAMES, BLOCKED_GLOBAL_NAMES, RESERVED_LABEL_NAMES, } from "./script/scope.js";
|
|
15
17
|
export { PmAssertion, createExpectApi } from "./script/features/assertions.js";
|
|
16
18
|
export { PendingKafkaDependencyError, isPendingKafkaValue, } from "./script/features/kafka.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,KAAK,cAAc,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,YAAY,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,KAAK,wBAAwB,GAC9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,cAAc,GACpB,MAAM,uBAAuB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,KAAK,cAAc,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,YAAY,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oBAAoB,EACpB,KAAK,kBAAkB,GACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,KAAK,wBAAwB,GAC9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,cAAc,GACpB,MAAM,uBAAuB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { runCollection } from "./runner/runCollection.js";
|
|
2
2
|
export { runRequest } from "./runner/requestRunner.js";
|
|
3
|
+
export { runRequestWithDataset } from "./runner/runRequestWithDataset.js";
|
|
3
4
|
export { executeRequest } from "./request/executeRequest.js";
|
|
4
5
|
export { isXmlContentType, parseXml, looksLikeXml, XML_PARSER_OPTIONS, } from "./utils/xml.js";
|
|
5
6
|
export { sanitizeJsonBody } from "./utils/jsonc.js";
|
|
@@ -9,6 +10,7 @@ export * from "./templating/index.js";
|
|
|
9
10
|
export { executeScript, validateScript } from "./script/executor.js";
|
|
10
11
|
export { runScriptIsolated } from "./script/isolated-runner.js";
|
|
11
12
|
export { PM_API_METADATA, } from "./script/pm-api-metadata.js";
|
|
13
|
+
export { renderPmApiReference, } from "./script/pm-api-reference.js";
|
|
12
14
|
export { ALLOWED_GLOBAL_NAMES, BLOCKED_GLOBAL_NAMES, RESERVED_LABEL_NAMES, } from "./script/scope.js";
|
|
13
15
|
export { PmAssertion, createExpectApi } from "./script/features/assertions.js";
|
|
14
16
|
export { PendingKafkaDependencyError, isPendingKafkaValue, } from "./script/features/kafka.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,kBAAkB,GAEnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AA2BhE,OAAO,EACL,eAAe,GAIhB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,GAEtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,GAEzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,GAEjB,MAAM,uBAAuB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,kBAAkB,GAEnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AA2BhE,OAAO,EACL,eAAe,GAIhB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oBAAoB,GAErB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,GAEtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,GAEzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,gBAAgB,GAEjB,MAAM,uBAAuB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executeRequest.d.ts","sourceRoot":"","sources":["../../src/request/executeRequest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA4BnF,eAAO,MAAM,kBAAkB,0HAC0F,CAAC;
|
|
1
|
+
{"version":3,"file":"executeRequest.d.ts","sourceRoot":"","sources":["../../src/request/executeRequest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AA4BnF,eAAO,MAAM,kBAAkB,0HAC0F,CAAC;AA2B1H,eAAO,MAAM,cAAc,GAAU,mDAOlC,mBAAmB,KAAG,OAAO,CAAC,oBAAoB,CA+DpD,CAAC"}
|
|
@@ -23,6 +23,20 @@ const withDefaultUserAgent = (headers) => {
|
|
|
23
23
|
}
|
|
24
24
|
return next;
|
|
25
25
|
};
|
|
26
|
+
// Add a default `http://` scheme when the URL has none (e.g. `localhost:9090`
|
|
27
|
+
// or `api.example.com/x`). Browsers/Electron do this implicitly, so a scheme-
|
|
28
|
+
// less URL that works in the desktop app must also work here (CLI/backend) —
|
|
29
|
+
// otherwise axios throws "Unsupported protocol localhost:". Already-schemed and
|
|
30
|
+
// protocol-relative (`//host`) URLs are left untouched.
|
|
31
|
+
const ensureUrlScheme = (url) => {
|
|
32
|
+
const trimmed = url.trim();
|
|
33
|
+
if (!trimmed)
|
|
34
|
+
return trimmed;
|
|
35
|
+
if (/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//.test(trimmed) || trimmed.startsWith("//")) {
|
|
36
|
+
return trimmed;
|
|
37
|
+
}
|
|
38
|
+
return `http://${trimmed}`;
|
|
39
|
+
};
|
|
26
40
|
export const executeRequest = async ({ method, url, headers, query, body, timeoutMs = 30_000, }) => {
|
|
27
41
|
const startedAt = typeof performance !== "undefined" ? performance.now() : Date.now();
|
|
28
42
|
// Strip JSON comments / trailing commas from a JSON string body so a body
|
|
@@ -33,7 +47,7 @@ export const executeRequest = async ({ method, url, headers, query, body, timeou
|
|
|
33
47
|
: body;
|
|
34
48
|
const config = {
|
|
35
49
|
method,
|
|
36
|
-
url,
|
|
50
|
+
url: ensureUrlScheme(url),
|
|
37
51
|
headers: outgoingHeaders,
|
|
38
52
|
params: query,
|
|
39
53
|
data: requestData,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executeRequest.js","sourceRoot":"","sources":["../../src/request/executeRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,iBAAiB,GAAG,CAAC,WAAmB,EAAW,EAAE,CACzD,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAEhC,MAAM,gBAAgB,GAAG,CACvB,OAAgC,EACR,EAAE,CAC1B,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;IAC5C,GAAG;IACH,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;CAC9D,CAAC,CACH,CAAC;AAEJ,MAAM,eAAe,GAAG,CAAC,OAA+B,EAAU,EAAE;IAClE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CACxC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,cAAc,CAChD,CAAC;IACF,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1B,CAAC,CAAC;AAEF,mEAAmE;AACnE,oEAAoE;AACpE,uEAAuE;AACvE,uEAAuE;AACvE,MAAM,CAAC,MAAM,kBAAkB,GAC7B,uHAAuH,CAAC;AAE1H,MAAM,oBAAoB,GAAG,CAC3B,OAA2C,EACnB,EAAE;IAC1B,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;IACpC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,CAAC;IACzF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,GAAG,kBAAkB,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,EACnC,MAAM,EACN,GAAG,EACH,OAAO,EACP,KAAK,EACL,IAAI,EACJ,SAAS,GAAG,MAAM,GACE,EAAiC,EAAE;IACvD,MAAM,SAAS,GACb,OAAO,WAAW,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACtE,0EAA0E;IAC1E,gEAAgE;IAChE,MAAM,eAAe,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,WAAW,GACf,OAAO,IAAI,KAAK,QAAQ,IAAI,iBAAiB,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QAC7E,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC;QACxB,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,MAAM,GAAuB;QACjC,MAAM;QACN,GAAG;
|
|
1
|
+
{"version":3,"file":"executeRequest.js","sourceRoot":"","sources":["../../src/request/executeRequest.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestRunner.d.ts","sourceRoot":"","sources":["../../src/runner/requestRunner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"requestRunner.d.ts","sourceRoot":"","sources":["../../src/runner/requestRunner.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAGV,eAAe,EACf,gBAAgB,EAEjB,MAAM,mBAAmB,CAAC;AAyN3B,eAAO,MAAM,UAAU,GACrB,OAAO,eAAe,KACrB,OAAO,CAAC,gBAAgB,CAiJ1B,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { validateContracts } from "../contract/contractValidator.js";
|
|
2
2
|
import { buildDbExecuteCapability, buildRedisCapability, runConfiguredDbQuery, runRedisCommandsForPhase, } from "../host/connections.js";
|
|
3
3
|
import { executeRequest } from "../request/executeRequest.js";
|
|
4
|
+
import { executeScript } from "../script/executor.js";
|
|
4
5
|
import { runScript } from "../script/scriptEngine.js";
|
|
5
6
|
import { resolveTemplateValue } from "../variables/resolver.js";
|
|
6
7
|
const stringifyEnv = (env) => {
|
|
@@ -10,6 +11,44 @@ const stringifyEnv = (env) => {
|
|
|
10
11
|
}
|
|
11
12
|
return out;
|
|
12
13
|
};
|
|
14
|
+
// ── Pre-request script plumbing ────────────────────────────────────────────
|
|
15
|
+
// The sandbox represents headers/query as key/value arrays; the runner uses
|
|
16
|
+
// flat records. These bridge the two so a pre-request script can mutate the
|
|
17
|
+
// request (pm.request.setHeader) and the mutation reaches the HTTP call.
|
|
18
|
+
const headersToScriptPairs = (record) => Object.entries(record ?? {}).map(([key, value]) => ({ key, value, enabled: true }));
|
|
19
|
+
const scriptPairsToRecord = (pairs) => {
|
|
20
|
+
const out = {};
|
|
21
|
+
for (const pair of pairs) {
|
|
22
|
+
if (pair.enabled === false || !pair.key)
|
|
23
|
+
continue;
|
|
24
|
+
out[pair.key] = pair.value;
|
|
25
|
+
}
|
|
26
|
+
return out;
|
|
27
|
+
};
|
|
28
|
+
const toScriptRequestState = (request) => ({
|
|
29
|
+
method: request.method,
|
|
30
|
+
url: request.url,
|
|
31
|
+
headers: headersToScriptPairs(request.headers),
|
|
32
|
+
query: headersToScriptPairs(request.query),
|
|
33
|
+
body: {
|
|
34
|
+
mode: "raw",
|
|
35
|
+
raw: typeof request.body === "string"
|
|
36
|
+
? request.body
|
|
37
|
+
: request.body != null
|
|
38
|
+
? JSON.stringify(request.body)
|
|
39
|
+
: "",
|
|
40
|
+
formEntries: [],
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
// Apply a script's environment writes back onto the shared EnvStore so later
|
|
44
|
+
// template resolution (and later requests) see the new values.
|
|
45
|
+
const applyScriptEnvMutations = (env, mutations) => {
|
|
46
|
+
for (const mutation of mutations) {
|
|
47
|
+
if (mutation.scope !== "environment")
|
|
48
|
+
continue;
|
|
49
|
+
env.set(mutation.key, mutation.type === "unset" ? "" : (mutation.value ?? ""));
|
|
50
|
+
}
|
|
51
|
+
};
|
|
13
52
|
// Build a `{{response.*}}` template root from an HTTP result so pre/post DB +
|
|
14
53
|
// Redis nodes can reference the response body. Mirrors the desktop host's
|
|
15
54
|
// `buildResponseTemplateRoot`.
|
|
@@ -124,14 +163,59 @@ const buildScriptExtensions = (input) => {
|
|
|
124
163
|
return { db, redis };
|
|
125
164
|
};
|
|
126
165
|
export const runRequest = async (input) => {
|
|
127
|
-
|
|
166
|
+
// `let` so the pre-request script can re-resolve after mutating env/request;
|
|
167
|
+
// the initial value also covers the catch block if something throws early.
|
|
168
|
+
let runtimeRequest = normalizeRequestForExecution(input);
|
|
128
169
|
const connections = input.connections ?? {};
|
|
129
170
|
const featurePolicy = input.featurePolicy;
|
|
130
171
|
const databaseEnabled = featurePolicy ? featurePolicy.database : true;
|
|
131
172
|
const redisConfig = input.request.redis;
|
|
132
173
|
try {
|
|
133
|
-
// ── Pre-request phase: DB node + Redis commands run before the HTTP call.
|
|
134
174
|
const envBefore = stringifyEnv(input.env.all());
|
|
175
|
+
// ── Pre-request script: runs BEFORE the HTTP call (and before template
|
|
176
|
+
// resolution) so `pm.environment.set` tokens and `pm.request.setHeader`
|
|
177
|
+
// mutations reach the outgoing request. Its console output is dropped
|
|
178
|
+
// here; test assertions surface in scriptResults.
|
|
179
|
+
let preRequestTestResults = [];
|
|
180
|
+
if (input.request.preRequestScript?.trim()) {
|
|
181
|
+
const preResult = await executeScript({
|
|
182
|
+
script: input.request.preRequestScript,
|
|
183
|
+
stage: "pre-request",
|
|
184
|
+
filename: "callman-request.script.js",
|
|
185
|
+
capabilities: {
|
|
186
|
+
environment: { values: envBefore, emitMutations: true },
|
|
187
|
+
request: toScriptRequestState(input.request),
|
|
188
|
+
extensions: {
|
|
189
|
+
log: true,
|
|
190
|
+
node: true,
|
|
191
|
+
random: true,
|
|
192
|
+
counter: { snapshot: [] },
|
|
193
|
+
cryptojs: true,
|
|
194
|
+
variables: true,
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
});
|
|
198
|
+
applyScriptEnvMutations(input.env, preResult.variableMutations);
|
|
199
|
+
preRequestTestResults = preResult.testResults;
|
|
200
|
+
const mutatedRequest = preResult.request
|
|
201
|
+
? {
|
|
202
|
+
...input.request,
|
|
203
|
+
method: preResult.request.method,
|
|
204
|
+
url: preResult.request.url,
|
|
205
|
+
headers: scriptPairsToRecord(preResult.request.headers),
|
|
206
|
+
query: scriptPairsToRecord(preResult.request.query),
|
|
207
|
+
body: preResult.request.body.mode === "raw"
|
|
208
|
+
? preResult.request.body.raw
|
|
209
|
+
: input.request.body,
|
|
210
|
+
}
|
|
211
|
+
: input.request;
|
|
212
|
+
// Re-resolve templates against the updated env + mutated request.
|
|
213
|
+
runtimeRequest = normalizeRequestForExecution({
|
|
214
|
+
...input,
|
|
215
|
+
request: mutatedRequest,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
// ── Pre-request phase: DB node + Redis commands run before the HTTP call.
|
|
135
219
|
const preDbResult = databaseEnabled
|
|
136
220
|
? await runConfiguredDbQuery({
|
|
137
221
|
connections,
|
|
@@ -176,7 +260,7 @@ export const runRequest = async (input) => {
|
|
|
176
260
|
redisPre,
|
|
177
261
|
redisPost,
|
|
178
262
|
});
|
|
179
|
-
const
|
|
263
|
+
const testsScriptResults = await runScript(input.request.tests, {
|
|
180
264
|
env: input.env,
|
|
181
265
|
response,
|
|
182
266
|
request: runtimeRequest,
|
|
@@ -193,7 +277,7 @@ export const runRequest = async (input) => {
|
|
|
193
277
|
duration: response.duration,
|
|
194
278
|
response,
|
|
195
279
|
request: runtimeRequest,
|
|
196
|
-
scriptResults,
|
|
280
|
+
scriptResults: [...preRequestTestResults, ...testsScriptResults],
|
|
197
281
|
contractResults,
|
|
198
282
|
},
|
|
199
283
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestRunner.js","sourceRoot":"","sources":["../../src/runner/requestRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,GAEzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"requestRunner.js","sourceRoot":"","sources":["../../src/runner/requestRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { DataContractSet, DataDrivenRunResult, RunRequestInput } from "../types/index.js";
|
|
2
|
+
export declare const runRequestWithDataset: (input: RunRequestInput, dataset: DataContractSet | null | undefined) => Promise<DataDrivenRunResult>;
|
|
3
|
+
//# sourceMappingURL=runRequestWithDataset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runRequestWithDataset.d.ts","sourceRoot":"","sources":["../../src/runner/runRequestWithDataset.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAGV,eAAe,EAEf,mBAAmB,EACnB,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAoD3B,eAAO,MAAM,qBAAqB,GAChC,OAAO,eAAe,EACtB,SAAS,eAAe,GAAG,IAAI,GAAG,SAAS,KAC1C,OAAO,CAAC,mBAAmB,CAoE7B,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// Data-driven contract run for a single request. Runs the request ONCE PER
|
|
2
|
+
// dataset row, injecting the row's values as `{{data.<column>}}` and validating
|
|
3
|
+
// that row's expected result (optional HTTP status + response-field assertions)
|
|
4
|
+
// against the response. Mirrors the scenario `runScenarioWithDataset` idiom but
|
|
5
|
+
// for the request runner, so the CLI, backend and desktop share one primitive.
|
|
6
|
+
//
|
|
7
|
+
// With no rows it falls back to a single plain `runRequest`.
|
|
8
|
+
import { runRequest } from "./requestRunner.js";
|
|
9
|
+
// Build the contract rule array for one row: each assertion becomes a
|
|
10
|
+
// path-scoped contract, and an `expectedStatus` becomes a `response.status`
|
|
11
|
+
// contract (the validator routes `response.*` paths against the HTTP envelope,
|
|
12
|
+
// so this asserts the status code with no dedicated primitive).
|
|
13
|
+
const buildRowContracts = (row) => {
|
|
14
|
+
const contracts = [];
|
|
15
|
+
if (typeof row.expectedStatus === "number") {
|
|
16
|
+
contracts.push({
|
|
17
|
+
name: `Expected status ${row.expectedStatus}`,
|
|
18
|
+
path: "response.status",
|
|
19
|
+
enabled: true,
|
|
20
|
+
rules: { equals: row.expectedStatus },
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
for (const assertion of row.assertions ?? []) {
|
|
24
|
+
if (assertion.enabled === false)
|
|
25
|
+
continue;
|
|
26
|
+
contracts.push({
|
|
27
|
+
path: assertion.path,
|
|
28
|
+
enabled: true,
|
|
29
|
+
rules: assertion.rules,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return contracts;
|
|
33
|
+
};
|
|
34
|
+
// CRITICAL: the request runner's resolver splits `data.column` into nested
|
|
35
|
+
// tokens (`env["data"]["column"]`), so a flat `"data.column"` key would NOT
|
|
36
|
+
// resolve `{{data.column}}`. We must inject a NESTED `data` object.
|
|
37
|
+
const injectRow = (input, row, rowIndex, total) => {
|
|
38
|
+
const scope = {};
|
|
39
|
+
for (const [key, value] of Object.entries(row.data)) {
|
|
40
|
+
scope[key] = value == null ? "" : String(value);
|
|
41
|
+
}
|
|
42
|
+
scope.$index = String(rowIndex + 1);
|
|
43
|
+
scope.$row = String(rowIndex + 1);
|
|
44
|
+
scope.$total = String(total);
|
|
45
|
+
input.env.set("data", scope);
|
|
46
|
+
};
|
|
47
|
+
const hasFailure = (results) => results.some((result) => result.status === "FAIL");
|
|
48
|
+
export const runRequestWithDataset = async (input, dataset) => {
|
|
49
|
+
const rows = dataset?.rows ?? [];
|
|
50
|
+
// No rows → single plain run reported as one iteration (keeps callers simple).
|
|
51
|
+
if (rows.length === 0) {
|
|
52
|
+
const { result } = await runRequest(input);
|
|
53
|
+
const passed = !hasFailure(result.contractResults) && !hasFailure(result.scriptResults);
|
|
54
|
+
return {
|
|
55
|
+
iterations: [
|
|
56
|
+
{
|
|
57
|
+
rowIndex: 0,
|
|
58
|
+
row: {},
|
|
59
|
+
status: result.status,
|
|
60
|
+
durationMs: result.duration,
|
|
61
|
+
scriptResults: result.scriptResults,
|
|
62
|
+
contractResults: result.contractResults,
|
|
63
|
+
passed: passed && result.status >= 200 && result.status < 400,
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
summary: { total: 1, passed: passed ? 1 : 0, failed: passed ? 0 : 1 },
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const iterations = [];
|
|
70
|
+
for (let rowIndex = 0; rowIndex < rows.length; rowIndex += 1) {
|
|
71
|
+
const row = rows[rowIndex] ?? { data: {} };
|
|
72
|
+
injectRow(input, row, rowIndex, rows.length);
|
|
73
|
+
const rowContracts = buildRowContracts(row);
|
|
74
|
+
const { result, response } = await runRequest({
|
|
75
|
+
...input,
|
|
76
|
+
request: { ...input.request, contracts: rowContracts },
|
|
77
|
+
});
|
|
78
|
+
const failingContract = hasFailure(result.contractResults);
|
|
79
|
+
const failingScript = hasFailure(result.scriptResults);
|
|
80
|
+
const statusOk = result.status >= 200 && result.status < 400;
|
|
81
|
+
// When an expected status is declared, the contract check governs the
|
|
82
|
+
// verdict (a mismatch shows up as a failing contract); otherwise fall back
|
|
83
|
+
// to the coarse 2xx/3xx check.
|
|
84
|
+
const passed = !failingContract &&
|
|
85
|
+
!failingScript &&
|
|
86
|
+
(typeof row.expectedStatus === "number" || statusOk);
|
|
87
|
+
iterations.push({
|
|
88
|
+
rowIndex,
|
|
89
|
+
row: row.data,
|
|
90
|
+
status: result.status,
|
|
91
|
+
durationMs: result.duration,
|
|
92
|
+
scriptResults: result.scriptResults,
|
|
93
|
+
contractResults: result.contractResults,
|
|
94
|
+
passed,
|
|
95
|
+
request: result.request,
|
|
96
|
+
response,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
const passed = iterations.filter((iteration) => iteration.passed).length;
|
|
100
|
+
return {
|
|
101
|
+
iterations,
|
|
102
|
+
summary: {
|
|
103
|
+
total: iterations.length,
|
|
104
|
+
passed,
|
|
105
|
+
failed: iterations.length - passed,
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=runRequestWithDataset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runRequestWithDataset.js","sourceRoot":"","sources":["../../src/runner/runRequestWithDataset.ts"],"names":[],"mappings":"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"}
|
|
@@ -141,7 +141,7 @@ export const PM_API_METADATA = [
|
|
|
141
141
|
members: [
|
|
142
142
|
{
|
|
143
143
|
signature: "pm.db.query({ connectionId, query })",
|
|
144
|
-
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).",
|
|
144
|
+
description: "Run an ad-hoc query — ALWAYS await it. SQL connections (Oracle/Postgres/MySQL): `query` is the SQL text. MongoDB: `query` is a JSON STRING of a command object, e.g. `JSON.stringify({ collection: 'users', operation: 'findOne', filter: { email } })` — operation is find|findOne|aggregate|countDocuments|insertOne|updateOne|deleteOne|…, the match key is `filter` (NOT a `db.coll.find(...)` shell string and NOT `query`), and aggregate uses `pipeline`. Resolves to { success, error, rowCount, rows, firstRow(), connectionId, connectionName, connectionType, durationMs, executedAt }. firstRow is a FUNCTION: res.firstRow()?.STATUS (Oracle columns are UPPERCASE); for a Mongo existence check assert rowCount > 0.",
|
|
145
145
|
requires: "database",
|
|
146
146
|
},
|
|
147
147
|
{
|