callman-core 1.0.6 → 1.2.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.
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/script/errors.d.ts +3 -0
- package/dist/script/errors.d.ts.map +1 -0
- package/dist/script/errors.js +68 -0
- package/dist/script/errors.js.map +1 -0
- package/dist/script/executor.d.ts +5 -0
- package/dist/script/executor.d.ts.map +1 -0
- package/dist/script/executor.js +301 -0
- package/dist/script/executor.js.map +1 -0
- package/dist/script/features/assertions.d.ts +46 -0
- package/dist/script/features/assertions.d.ts.map +1 -0
- package/dist/script/features/assertions.js +264 -0
- package/dist/script/features/assertions.js.map +1 -0
- package/dist/script/features/counter.d.ts +11 -0
- package/dist/script/features/counter.d.ts.map +1 -0
- package/dist/script/features/counter.js +43 -0
- package/dist/script/features/counter.js.map +1 -0
- package/dist/script/features/cryptojs.d.ts +13 -0
- package/dist/script/features/cryptojs.d.ts.map +1 -0
- package/dist/script/features/cryptojs.js +63 -0
- package/dist/script/features/cryptojs.js.map +1 -0
- package/dist/script/features/db.d.ts +36 -0
- package/dist/script/features/db.d.ts.map +1 -0
- package/dist/script/features/db.js +165 -0
- package/dist/script/features/db.js.map +1 -0
- package/dist/script/features/environment.d.ts +11 -0
- package/dist/script/features/environment.d.ts.map +1 -0
- package/dist/script/features/environment.js +61 -0
- package/dist/script/features/environment.js.map +1 -0
- package/dist/script/features/feature-policy.d.ts +8 -0
- package/dist/script/features/feature-policy.d.ts.map +1 -0
- package/dist/script/features/feature-policy.js +88 -0
- package/dist/script/features/feature-policy.js.map +1 -0
- package/dist/script/features/kafka.d.ts +11 -0
- package/dist/script/features/kafka.d.ts.map +1 -0
- package/dist/script/features/kafka.js +71 -0
- package/dist/script/features/kafka.js.map +1 -0
- package/dist/script/features/log.d.ts +15 -0
- package/dist/script/features/log.d.ts.map +1 -0
- package/dist/script/features/log.js +59 -0
- package/dist/script/features/log.js.map +1 -0
- package/dist/script/features/node.d.ts +14 -0
- package/dist/script/features/node.d.ts.map +1 -0
- package/dist/script/features/node.js +82 -0
- package/dist/script/features/node.js.map +1 -0
- package/dist/script/features/random.d.ts +13 -0
- package/dist/script/features/random.d.ts.map +1 -0
- package/dist/script/features/random.js +111 -0
- package/dist/script/features/random.js.map +1 -0
- package/dist/script/features/redis.d.ts +10 -0
- package/dist/script/features/redis.d.ts.map +1 -0
- package/dist/script/features/redis.js +22 -0
- package/dist/script/features/redis.js.map +1 -0
- package/dist/script/features/request.d.ts +23 -0
- package/dist/script/features/request.d.ts.map +1 -0
- package/dist/script/features/request.js +105 -0
- package/dist/script/features/request.js.map +1 -0
- package/dist/script/features/response.d.ts +25 -0
- package/dist/script/features/response.d.ts.map +1 -0
- package/dist/script/features/response.js +43 -0
- package/dist/script/features/response.js.map +1 -0
- package/dist/script/features/tests.d.ts +15 -0
- package/dist/script/features/tests.d.ts.map +1 -0
- package/dist/script/features/tests.js +147 -0
- package/dist/script/features/tests.js.map +1 -0
- package/dist/script/features/variables.d.ts +6 -0
- package/dist/script/features/variables.d.ts.map +1 -0
- package/dist/script/features/variables.js +25 -0
- package/dist/script/features/variables.js.map +1 -0
- package/dist/script/legacy.d.ts +4 -0
- package/dist/script/legacy.d.ts.map +1 -0
- package/dist/script/legacy.js +128 -0
- package/dist/script/legacy.js.map +1 -0
- package/dist/script/sandbox.d.ts +16 -0
- package/dist/script/sandbox.d.ts.map +1 -0
- package/dist/script/sandbox.js +51 -0
- package/dist/script/sandbox.js.map +1 -0
- package/dist/script/scope.d.ts +23 -0
- package/dist/script/scope.d.ts.map +1 -0
- package/dist/script/scope.js +172 -0
- package/dist/script/scope.js.map +1 -0
- package/dist/script/scriptEngine.d.ts +2 -2
- package/dist/script/scriptEngine.d.ts.map +1 -1
- package/dist/script/scriptEngine.js +7 -105
- package/dist/script/scriptEngine.js.map +1 -1
- package/dist/script/timeout.d.ts +3 -0
- package/dist/script/timeout.d.ts.map +1 -0
- package/dist/script/timeout.js +38 -0
- package/dist/script/timeout.js.map +1 -0
- package/dist/script/types.d.ts +167 -0
- package/dist/script/types.d.ts.map +1 -0
- package/dist/script/types.js +7 -0
- package/dist/script/types.js.map +1 -0
- package/dist-cjs/contract/contractValidator.js +236 -0
- package/dist-cjs/contract/contractValidator.js.map +1 -0
- package/dist-cjs/index.js +47 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/package.json +1 -0
- package/dist-cjs/request/executeRequest.js +33 -0
- package/dist-cjs/request/executeRequest.js.map +1 -0
- package/dist-cjs/runner/requestRunner.js +102 -0
- package/dist-cjs/runner/requestRunner.js.map +1 -0
- package/dist-cjs/runner/runCollection.js +53 -0
- package/dist-cjs/runner/runCollection.js.map +1 -0
- package/dist-cjs/scenario-runner/condition.js +1735 -0
- package/dist-cjs/scenario-runner/condition.js.map +1 -0
- package/dist-cjs/scenario-runner/conditionTypes.js +3 -0
- package/dist-cjs/scenario-runner/conditionTypes.js.map +1 -0
- package/dist-cjs/scenario-runner/executionPolicyRunner.js +53 -0
- package/dist-cjs/scenario-runner/executionPolicyRunner.js.map +1 -0
- package/dist-cjs/scenario-runner/graphTraversal.js +27 -0
- package/dist-cjs/scenario-runner/graphTraversal.js.map +1 -0
- package/dist-cjs/scenario-runner/index.js +39 -0
- package/dist-cjs/scenario-runner/index.js.map +1 -0
- package/dist-cjs/scenario-runner/nodePolicy.js +127 -0
- package/dist-cjs/scenario-runner/nodePolicy.js.map +1 -0
- package/dist-cjs/scenario-runner/notification/index.js +18 -0
- package/dist-cjs/scenario-runner/notification/index.js.map +1 -0
- package/dist-cjs/scenario-runner/notification/providers/provider.interface.js +3 -0
- package/dist-cjs/scenario-runner/notification/providers/provider.interface.js.map +1 -0
- package/dist-cjs/scenario-runner/notification/providers/slack.provider.js +88 -0
- package/dist-cjs/scenario-runner/notification/providers/slack.provider.js.map +1 -0
- package/dist-cjs/scenario-runner/notification/template.js +13 -0
- package/dist-cjs/scenario-runner/notification/template.js.map +1 -0
- package/dist-cjs/scenario-runner/retryExecutor.js +57 -0
- package/dist-cjs/scenario-runner/retryExecutor.js.map +1 -0
- package/dist-cjs/scenario-runner/runScenario.js +1545 -0
- package/dist-cjs/scenario-runner/runScenario.js.map +1 -0
- package/dist-cjs/scenario-runner/templateResolver.js +468 -0
- package/dist-cjs/scenario-runner/templateResolver.js.map +1 -0
- package/dist-cjs/scenario-runner/types.js +3 -0
- package/dist-cjs/scenario-runner/types.js.map +1 -0
- package/dist-cjs/scenario-runner/waitNodeExecutor.js +71 -0
- package/dist-cjs/scenario-runner/waitNodeExecutor.js.map +1 -0
- package/dist-cjs/script/errors.js +72 -0
- package/dist-cjs/script/errors.js.map +1 -0
- package/dist-cjs/script/executor.js +306 -0
- package/dist-cjs/script/executor.js.map +1 -0
- package/dist-cjs/script/features/assertions.js +269 -0
- package/dist-cjs/script/features/assertions.js.map +1 -0
- package/dist-cjs/script/features/counter.js +47 -0
- package/dist-cjs/script/features/counter.js.map +1 -0
- package/dist-cjs/script/features/cryptojs.js +67 -0
- package/dist-cjs/script/features/cryptojs.js.map +1 -0
- package/dist-cjs/script/features/db.js +169 -0
- package/dist-cjs/script/features/db.js.map +1 -0
- package/dist-cjs/script/features/environment.js +65 -0
- package/dist-cjs/script/features/environment.js.map +1 -0
- package/dist-cjs/script/features/feature-policy.js +94 -0
- package/dist-cjs/script/features/feature-policy.js.map +1 -0
- package/dist-cjs/script/features/kafka.js +77 -0
- package/dist-cjs/script/features/kafka.js.map +1 -0
- package/dist-cjs/script/features/log.js +64 -0
- package/dist-cjs/script/features/log.js.map +1 -0
- package/dist-cjs/script/features/node.js +89 -0
- package/dist-cjs/script/features/node.js.map +1 -0
- package/dist-cjs/script/features/random.js +115 -0
- package/dist-cjs/script/features/random.js.map +1 -0
- package/dist-cjs/script/features/redis.js +26 -0
- package/dist-cjs/script/features/redis.js.map +1 -0
- package/dist-cjs/script/features/request.js +109 -0
- package/dist-cjs/script/features/request.js.map +1 -0
- package/dist-cjs/script/features/response.js +47 -0
- package/dist-cjs/script/features/response.js.map +1 -0
- package/dist-cjs/script/features/tests.js +151 -0
- package/dist-cjs/script/features/tests.js.map +1 -0
- package/dist-cjs/script/features/variables.js +29 -0
- package/dist-cjs/script/features/variables.js.map +1 -0
- package/dist-cjs/script/legacy.js +132 -0
- package/dist-cjs/script/legacy.js.map +1 -0
- package/dist-cjs/script/pmApi.js +353 -0
- package/dist-cjs/script/pmApi.js.map +1 -0
- package/dist-cjs/script/sandbox.js +91 -0
- package/dist-cjs/script/sandbox.js.map +1 -0
- package/dist-cjs/script/scope.js +177 -0
- package/dist-cjs/script/scope.js.map +1 -0
- package/dist-cjs/script/scriptEngine.js +12 -0
- package/dist-cjs/script/scriptEngine.js.map +1 -0
- package/dist-cjs/script/timeout.js +43 -0
- package/dist-cjs/script/timeout.js.map +1 -0
- package/dist-cjs/script/types.js +8 -0
- package/dist-cjs/script/types.js.map +1 -0
- package/dist-cjs/types/index.js +3 -0
- package/dist-cjs/types/index.js.map +1 -0
- package/dist-cjs/utils/get.js +52 -0
- package/dist-cjs/utils/get.js.map +1 -0
- package/dist-cjs/utils/random.js +87 -0
- package/dist-cjs/utils/random.js.map +1 -0
- package/dist-cjs/variables/envStore.js +24 -0
- package/dist-cjs/variables/envStore.js.map +1 -0
- package/dist-cjs/variables/resolver.js +95 -0
- package/dist-cjs/variables/resolver.js.map +1 -0
- package/package.json +19 -3
- package/samples/runSample.mjs +0 -128
- package/tests/waitNode.test.mjs +0 -311
- package/tsconfig.json +0 -18
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../../src/script/features/redis.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,sEAAsE;AAStE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAA+C,EAAY,EAAE;IACzF,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEhF,OAAO;QACL,GAAG,EAAE,CAAC,GAAY,EAAW,EAAE;YAC7B,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,GAAI,MAAkC,CAAC,aAAa,CAAC,CAAC;YACjE,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5C,CAAC;QACD,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;KACvB,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ScriptRequestBodyState, ScriptRequestState } from "../types.js";
|
|
2
|
+
export interface RequestApi {
|
|
3
|
+
method: string;
|
|
4
|
+
url: string;
|
|
5
|
+
headers: Record<string, string>;
|
|
6
|
+
query: Record<string, string>;
|
|
7
|
+
body: ScriptRequestBodyState;
|
|
8
|
+
getHeader: (key: string) => string | undefined;
|
|
9
|
+
setHeader: (key: string, value: unknown) => void;
|
|
10
|
+
unsetHeader: (key: string) => void;
|
|
11
|
+
getQueryParam: (key: string) => string | undefined;
|
|
12
|
+
setQueryParam: (key: string, value: unknown) => void;
|
|
13
|
+
unsetQueryParam: (key: string) => void;
|
|
14
|
+
setMethod: (nextMethod: unknown) => void;
|
|
15
|
+
setUrl: (nextUrl: unknown) => void;
|
|
16
|
+
setRawBody: (value: unknown) => void;
|
|
17
|
+
}
|
|
18
|
+
export interface RequestApiBundle {
|
|
19
|
+
api: RequestApi;
|
|
20
|
+
toRequestState: () => ScriptRequestState;
|
|
21
|
+
}
|
|
22
|
+
export declare const buildRequestApi: (request: ScriptRequestState) => RequestApiBundle;
|
|
23
|
+
//# sourceMappingURL=request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../../src/script/features/request.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAEV,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC/C,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACnD,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACtC;AAqCD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,UAAU,CAAC;IAChB,cAAc,EAAE,MAAM,kBAAkB,CAAC;CAC1C;AAED,eAAO,MAAM,eAAe,GAAI,SAAS,kBAAkB,KAAG,gBAqE7D,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
// pm.request — read + mutate request state for pre-request and tests stages.
|
|
2
|
+
//
|
|
3
|
+
// The API mirrors the backend's surface: getHeader/setHeader/unsetHeader,
|
|
4
|
+
// getQueryParam/setQueryParam/unsetQueryParam, setMethod/setUrl/setRawBody.
|
|
5
|
+
// Mutations are applied to a working copy; callers retrieve the final
|
|
6
|
+
// state via `toRequestState()` after the script completes.
|
|
7
|
+
const cloneBody = (body) => ({
|
|
8
|
+
mode: body.mode,
|
|
9
|
+
raw: body.raw,
|
|
10
|
+
formEntries: body.formEntries.map((entry) => ({ ...entry })),
|
|
11
|
+
});
|
|
12
|
+
const toRecord = (entries) => {
|
|
13
|
+
const record = {};
|
|
14
|
+
for (const entry of entries) {
|
|
15
|
+
if (entry.enabled === false) {
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
const key = entry.key.trim();
|
|
19
|
+
if (!key) {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
record[key] = entry.value;
|
|
23
|
+
}
|
|
24
|
+
return record;
|
|
25
|
+
};
|
|
26
|
+
const toEntries = (record) => Object.entries(record).map(([key, value]) => ({
|
|
27
|
+
key,
|
|
28
|
+
value,
|
|
29
|
+
enabled: true,
|
|
30
|
+
}));
|
|
31
|
+
const stringifyHeaderValue = (value) => {
|
|
32
|
+
if (value === undefined || value === null) {
|
|
33
|
+
return "";
|
|
34
|
+
}
|
|
35
|
+
return String(value);
|
|
36
|
+
};
|
|
37
|
+
export const buildRequestApi = (request) => {
|
|
38
|
+
const headers = toRecord(request.headers);
|
|
39
|
+
const query = toRecord(request.query);
|
|
40
|
+
const body = cloneBody(request.body);
|
|
41
|
+
const api = {
|
|
42
|
+
method: request.method,
|
|
43
|
+
url: request.url,
|
|
44
|
+
headers,
|
|
45
|
+
query,
|
|
46
|
+
body,
|
|
47
|
+
getHeader: (key) => headers[String(key ?? "").trim()],
|
|
48
|
+
setHeader: (key, value) => {
|
|
49
|
+
const normalizedKey = String(key ?? "").trim();
|
|
50
|
+
if (!normalizedKey) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
headers[normalizedKey] = stringifyHeaderValue(value);
|
|
54
|
+
},
|
|
55
|
+
unsetHeader: (key) => {
|
|
56
|
+
const normalizedKey = String(key ?? "").trim();
|
|
57
|
+
if (!normalizedKey) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
delete headers[normalizedKey];
|
|
61
|
+
},
|
|
62
|
+
getQueryParam: (key) => query[String(key ?? "").trim()],
|
|
63
|
+
setQueryParam: (key, value) => {
|
|
64
|
+
const normalizedKey = String(key ?? "").trim();
|
|
65
|
+
if (!normalizedKey) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
query[normalizedKey] = stringifyHeaderValue(value);
|
|
69
|
+
},
|
|
70
|
+
unsetQueryParam: (key) => {
|
|
71
|
+
const normalizedKey = String(key ?? "").trim();
|
|
72
|
+
if (!normalizedKey) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
delete query[normalizedKey];
|
|
76
|
+
},
|
|
77
|
+
setMethod(nextMethod) {
|
|
78
|
+
const normalizedValue = String(nextMethod ?? "")
|
|
79
|
+
.trim()
|
|
80
|
+
.toUpperCase();
|
|
81
|
+
if (normalizedValue) {
|
|
82
|
+
this.method = normalizedValue;
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
setUrl(nextUrl) {
|
|
86
|
+
this.url = String(nextUrl ?? "");
|
|
87
|
+
},
|
|
88
|
+
setRawBody(value) {
|
|
89
|
+
this.body.mode = "raw";
|
|
90
|
+
this.body.raw = value === undefined || value === null ? "" : String(value);
|
|
91
|
+
this.body.formEntries = [];
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
return {
|
|
95
|
+
api,
|
|
96
|
+
toRequestState: () => ({
|
|
97
|
+
method: api.method,
|
|
98
|
+
url: api.url,
|
|
99
|
+
headers: toEntries(api.headers),
|
|
100
|
+
query: toEntries(api.query),
|
|
101
|
+
body: cloneBody(api.body),
|
|
102
|
+
}),
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/script/features/request.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { PmAssertion } from "./assertions.js";
|
|
2
|
+
import type { ScriptResponseState } from "../types.js";
|
|
3
|
+
export interface ResponseApi {
|
|
4
|
+
ok: boolean;
|
|
5
|
+
status: number;
|
|
6
|
+
code: number;
|
|
7
|
+
statusText: string;
|
|
8
|
+
headers: Record<string, string>;
|
|
9
|
+
data: unknown;
|
|
10
|
+
body: unknown;
|
|
11
|
+
rawBody: string;
|
|
12
|
+
raw: string;
|
|
13
|
+
contentType: string;
|
|
14
|
+
durationMs: number;
|
|
15
|
+
responseTime: number;
|
|
16
|
+
sizeBytes: number;
|
|
17
|
+
cookies: string[];
|
|
18
|
+
json: () => unknown;
|
|
19
|
+
text: () => string;
|
|
20
|
+
to?: PmAssertion;
|
|
21
|
+
be?: PmAssertion;
|
|
22
|
+
have?: PmAssertion;
|
|
23
|
+
}
|
|
24
|
+
export declare const buildResponseApi: (response: ScriptResponseState | null) => ResponseApi | null;
|
|
25
|
+
//# sourceMappingURL=response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../../src/script/features/response.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAIhC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,eAAO,MAAM,gBAAgB,GAAI,UAAU,mBAAmB,GAAG,IAAI,KAAG,WAAW,GAAG,IAqCrF,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// pm.response — read-only view of the captured response, plus the classic
|
|
2
|
+
// Postman fluent assertion entry points (.to / .be / .have).
|
|
3
|
+
//
|
|
4
|
+
// We return a plain object with the assertion getters spliced on so user
|
|
5
|
+
// scripts can write `pm.response.to.have.status(200)` exactly like Postman.
|
|
6
|
+
// The PmAssertion is a fresh instance bound to the response itself so the
|
|
7
|
+
// chain can drill into headers / status / body via .property() etc.
|
|
8
|
+
import { PmAssertion } from "./assertions.js";
|
|
9
|
+
export const buildResponseApi = (response) => {
|
|
10
|
+
if (!response) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
// Legacy callman-core stored the parsed body under `data`. Newer
|
|
14
|
+
// scenario-runner uses `body` (parsed) + `rawBody` (string). Pick whichever
|
|
15
|
+
// upstream gave us, preferring the parsed JSON body when available.
|
|
16
|
+
const parsedBody = response.jsonBody ?? response.body;
|
|
17
|
+
const api = {
|
|
18
|
+
ok: response.ok,
|
|
19
|
+
status: response.status,
|
|
20
|
+
code: response.status,
|
|
21
|
+
statusText: response.statusText,
|
|
22
|
+
headers: response.headers,
|
|
23
|
+
data: parsedBody,
|
|
24
|
+
body: parsedBody,
|
|
25
|
+
rawBody: response.rawBody,
|
|
26
|
+
raw: response.rawBody,
|
|
27
|
+
contentType: response.contentType,
|
|
28
|
+
durationMs: response.durationMs,
|
|
29
|
+
responseTime: response.durationMs,
|
|
30
|
+
sizeBytes: response.sizeBytes,
|
|
31
|
+
cookies: [...response.cookies],
|
|
32
|
+
json: () => response.jsonBody,
|
|
33
|
+
text: () => response.rawBody,
|
|
34
|
+
};
|
|
35
|
+
// Splice fluent assertion getters onto the same object so chains like
|
|
36
|
+
// `pm.response.to.have.status(200)` work without a helper wrapper.
|
|
37
|
+
const assertion = new PmAssertion(api);
|
|
38
|
+
api.to = assertion;
|
|
39
|
+
api.be = assertion;
|
|
40
|
+
api.have = assertion;
|
|
41
|
+
return api;
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../../src/script/features/response.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,6DAA6D;AAC7D,EAAE;AACF,yEAAyE;AACzE,4EAA4E;AAC5E,0EAA0E;AAC1E,oEAAoE;AAEpE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA4B9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,QAAoC,EAAsB,EAAE;IAC3F,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iEAAiE;IACjE,4EAA4E;IAC5E,oEAAoE;IACpE,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC;IAEtD,MAAM,GAAG,GAAgB;QACvB,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,IAAI,EAAE,QAAQ,CAAC,MAAM;QACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,GAAG,EAAE,QAAQ,CAAC,OAAO;QACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,YAAY,EAAE,QAAQ,CAAC,UAAU;QACjC,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC9B,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ;QAC7B,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO;KAC7B,CAAC;IAEF,sEAAsE;IACtE,mEAAmE;IACnE,MAAM,SAAS,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;IACvC,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IACnB,GAAG,CAAC,EAAE,GAAG,SAAS,CAAC;IACnB,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC;IAErB,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ScriptStage, ScriptTestResult } from "../types.js";
|
|
2
|
+
export interface TestCollector {
|
|
3
|
+
test: (name: string, fn: ((() => unknown | Promise<unknown>) | undefined)) => Promise<void>;
|
|
4
|
+
skip: (name: string, reason?: string) => void;
|
|
5
|
+
testResults: ScriptTestResult[];
|
|
6
|
+
deferredTestNames: string[];
|
|
7
|
+
flush: () => Promise<void>;
|
|
8
|
+
isInsideCallback: () => boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface TestCollectorOptions {
|
|
11
|
+
allowDeferredKafkaTests?: boolean;
|
|
12
|
+
selectedTestNames?: string[];
|
|
13
|
+
}
|
|
14
|
+
export declare const buildTestCollector: (_stage: ScriptStage, options?: TestCollectorOptions) => TestCollector;
|
|
15
|
+
//# sourceMappingURL=tests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tests.d.ts","sourceRoot":"","sources":["../../../src/script/features/tests.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA2DjE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,CACJ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,KACjD,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,gBAAgB,EAAE,MAAM,OAAO,CAAC;CACjC;AAOD,MAAM,WAAW,oBAAoB;IACnC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,WAAW,EACnB,UAAS,oBAAyB,KACjC,aA4FF,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
// pm.test collector — runs each callback as a fire-and-forget Promise that
|
|
2
|
+
// resolves to PASS/FAIL/SKIP and surfaces the result via `flush()`.
|
|
3
|
+
//
|
|
4
|
+
// Two collection-runner extensions:
|
|
5
|
+
// 1. selectedTestNames — when present, only tests whose name appears in
|
|
6
|
+
// the set actually execute. Used for kafka-deferred re-runs where the
|
|
7
|
+
// caller wants to retry only previously-pending tests.
|
|
8
|
+
// 2. allowDeferredKafkaTests — when true, a thrown
|
|
9
|
+
// PendingKafkaDependencyError is caught and routed to deferredTestNames
|
|
10
|
+
// (instead of being recorded as a FAIL). The caller re-invokes the
|
|
11
|
+
// script later with kafka data populated.
|
|
12
|
+
// 3. DisabledFeatureDependencyError is recognized regardless and produces
|
|
13
|
+
// a SKIP test result with a descriptive error message.
|
|
14
|
+
import { DisabledFeatureDependencyError } from "./feature-policy.js";
|
|
15
|
+
import { PendingKafkaDependencyError } from "./kafka.js";
|
|
16
|
+
// Errors thrown inside the vm context cross a realm boundary, which means
|
|
17
|
+
// `error instanceof Error` from the host's perspective is FALSE even when
|
|
18
|
+
// the value has a real .message property. Read the message structurally
|
|
19
|
+
// to keep the recorded text identical to what user scripts see.
|
|
20
|
+
const extractErrorMessage = (error) => {
|
|
21
|
+
if (error instanceof Error) {
|
|
22
|
+
return error.message;
|
|
23
|
+
}
|
|
24
|
+
if (error &&
|
|
25
|
+
typeof error === "object" &&
|
|
26
|
+
"message" in error &&
|
|
27
|
+
typeof error.message === "string") {
|
|
28
|
+
return error.message;
|
|
29
|
+
}
|
|
30
|
+
return String(error);
|
|
31
|
+
};
|
|
32
|
+
// Cross-realm error name extraction — used to recognize symbolically named
|
|
33
|
+
// errors like PendingKafkaDependencyError that may arrive as cross-realm
|
|
34
|
+
// values failing instanceof checks.
|
|
35
|
+
const extractErrorName = (error) => {
|
|
36
|
+
if (error instanceof Error) {
|
|
37
|
+
return error.name;
|
|
38
|
+
}
|
|
39
|
+
if (error &&
|
|
40
|
+
typeof error === "object" &&
|
|
41
|
+
"name" in error &&
|
|
42
|
+
typeof error.name === "string") {
|
|
43
|
+
return error.name;
|
|
44
|
+
}
|
|
45
|
+
return "";
|
|
46
|
+
};
|
|
47
|
+
const isPendingKafkaError = (error) => error instanceof PendingKafkaDependencyError ||
|
|
48
|
+
extractErrorName(error) === "PendingKafkaDependencyError";
|
|
49
|
+
const isDisabledFeatureError = (error) => {
|
|
50
|
+
if (error instanceof DisabledFeatureDependencyError) {
|
|
51
|
+
return { feature: error.feature };
|
|
52
|
+
}
|
|
53
|
+
if (extractErrorName(error) === "DisabledFeatureDependencyError") {
|
|
54
|
+
const feature = error.feature;
|
|
55
|
+
if (feature === "database" || feature === "kafka") {
|
|
56
|
+
return { feature };
|
|
57
|
+
}
|
|
58
|
+
return { feature: "database" };
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
};
|
|
62
|
+
const normalizeName = (name) => {
|
|
63
|
+
const trimmed = String(name ?? "").trim();
|
|
64
|
+
return trimmed || "Unnamed test";
|
|
65
|
+
};
|
|
66
|
+
export const buildTestCollector = (_stage, options = {}) => {
|
|
67
|
+
const orderedResults = [];
|
|
68
|
+
const finalResults = [];
|
|
69
|
+
const deferredTestNames = [];
|
|
70
|
+
const pending = [];
|
|
71
|
+
const selected = options.selectedTestNames ? new Set(options.selectedTestNames) : null;
|
|
72
|
+
let activeCallbackCount = 0;
|
|
73
|
+
const test = (name, fn) => {
|
|
74
|
+
const normalizedName = normalizeName(name);
|
|
75
|
+
if (selected && !selected.has(normalizedName)) {
|
|
76
|
+
return Promise.resolve();
|
|
77
|
+
}
|
|
78
|
+
const resultIndex = orderedResults.push(null) - 1;
|
|
79
|
+
const task = Promise.resolve()
|
|
80
|
+
.then(async () => {
|
|
81
|
+
if (typeof fn !== "function") {
|
|
82
|
+
throw new Error("pm.test requires a callback function");
|
|
83
|
+
}
|
|
84
|
+
activeCallbackCount += 1;
|
|
85
|
+
try {
|
|
86
|
+
await fn();
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
activeCallbackCount = Math.max(0, activeCallbackCount - 1);
|
|
90
|
+
}
|
|
91
|
+
orderedResults[resultIndex] = {
|
|
92
|
+
name: normalizedName,
|
|
93
|
+
status: "PASS",
|
|
94
|
+
};
|
|
95
|
+
})
|
|
96
|
+
.catch((error) => {
|
|
97
|
+
const disabled = isDisabledFeatureError(error);
|
|
98
|
+
if (disabled) {
|
|
99
|
+
orderedResults[resultIndex] = {
|
|
100
|
+
name: normalizedName,
|
|
101
|
+
status: "SKIP",
|
|
102
|
+
error: disabled.feature === "database"
|
|
103
|
+
? "Skipped because database execution is disabled for this collection runner."
|
|
104
|
+
: "Skipped because Kafka execution is disabled for this collection runner.",
|
|
105
|
+
};
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
if (options.allowDeferredKafkaTests && isPendingKafkaError(error)) {
|
|
109
|
+
orderedResults[resultIndex] = null;
|
|
110
|
+
deferredTestNames.push(normalizedName);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
orderedResults[resultIndex] = {
|
|
114
|
+
name: normalizedName,
|
|
115
|
+
status: "FAIL",
|
|
116
|
+
error: extractErrorMessage(error),
|
|
117
|
+
};
|
|
118
|
+
});
|
|
119
|
+
pending.push(task);
|
|
120
|
+
return task;
|
|
121
|
+
};
|
|
122
|
+
const skip = (name, reason) => {
|
|
123
|
+
const result = {
|
|
124
|
+
name: normalizeName(name),
|
|
125
|
+
status: "SKIP",
|
|
126
|
+
...(reason ? { error: reason } : {}),
|
|
127
|
+
};
|
|
128
|
+
orderedResults.push(result);
|
|
129
|
+
};
|
|
130
|
+
const flush = async () => {
|
|
131
|
+
await Promise.allSettled(pending);
|
|
132
|
+
for (const entry of orderedResults) {
|
|
133
|
+
if (entry !== null) {
|
|
134
|
+
finalResults.push(entry);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
return {
|
|
139
|
+
test,
|
|
140
|
+
skip,
|
|
141
|
+
testResults: finalResults,
|
|
142
|
+
deferredTestNames,
|
|
143
|
+
flush,
|
|
144
|
+
isInsideCallback: () => activeCallbackCount > 0,
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
//# sourceMappingURL=tests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tests.js","sourceRoot":"","sources":["../../../src/script/features/tests.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface VariablesApi {
|
|
2
|
+
resolve: (input: unknown) => string;
|
|
3
|
+
replaceIn: (input: unknown) => string;
|
|
4
|
+
}
|
|
5
|
+
export declare const buildVariablesApi: (environment: Record<string, string>, globals: Record<string, string>) => VariablesApi;
|
|
6
|
+
//# sourceMappingURL=variables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variables.d.ts","sourceRoot":"","sources":["../../../src/script/features/variables.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;IACpC,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CACvC;AASD,eAAO,MAAM,iBAAiB,GAC5B,aAAa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACnC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC9B,YAYF,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// pm.variables — collection-runner template resolver.
|
|
2
|
+
//
|
|
3
|
+
// Bridges the script sandbox to callman-core's existing template resolver
|
|
4
|
+
// (callman_core/src/variables/resolver.ts). Merges env + globals into a
|
|
5
|
+
// single lookup table so user scripts can call:
|
|
6
|
+
// pm.variables.resolve("Hello {{name}}")
|
|
7
|
+
// regardless of which scope `name` lives in.
|
|
8
|
+
import { resolveTemplate } from "../../variables/resolver.js";
|
|
9
|
+
const stringifyInput = (value) => {
|
|
10
|
+
if (value === undefined || value === null) {
|
|
11
|
+
return "";
|
|
12
|
+
}
|
|
13
|
+
return String(value);
|
|
14
|
+
};
|
|
15
|
+
export const buildVariablesApi = (environment, globals) => {
|
|
16
|
+
// Merge with environment taking precedence over globals (matches the
|
|
17
|
+
// electron runtime.ts behavior where env was spread after globals).
|
|
18
|
+
const mergedScope = { ...globals, ...environment };
|
|
19
|
+
const resolve = (input) => resolveTemplate(stringifyInput(input), { env: mergedScope });
|
|
20
|
+
return {
|
|
21
|
+
resolve,
|
|
22
|
+
replaceIn: resolve,
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=variables.js.map
|
|
@@ -0,0 +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,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;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;AAEF,MAAM,CAAC,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,eAAe,CAAC,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy.d.ts","sourceRoot":"","sources":["../../src/script/legacy.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAGV,gBAAgB,EAChB,UAAU,EACX,MAAM,mBAAmB,CAAC;AAS3B,YAAY,EAAE,gBAAgB,EAAE,CAAC;AA0FjC,eAAO,MAAM,SAAS,GACpB,QAAQ,MAAM,GAAG,SAAS,EAC1B,SAAS,gBAAgB,KACxB,OAAO,CAAC,UAAU,EAAE,CA0CtB,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// Legacy `runScript` shim — preserves the pre-1.1.0 contract used by
|
|
2
|
+
// callman-core's own `runner/requestRunner.ts` and external CLI consumers.
|
|
3
|
+
//
|
|
4
|
+
// Differences from the canonical `executeScript`:
|
|
5
|
+
// - signature: (script, context) → Promise<TestResult[]>
|
|
6
|
+
// - mutations are applied in-place to the supplied EnvStore
|
|
7
|
+
// - test results map to the legacy `{name, status, message?}` shape
|
|
8
|
+
// (no SKIP — sandbox A never emitted SKIP and we don't introduce one
|
|
9
|
+
// on the legacy path even though the canonical core supports it)
|
|
10
|
+
// - empty/whitespace script → []
|
|
11
|
+
// - top-level throws produce a single FAIL named "Script execution"
|
|
12
|
+
//
|
|
13
|
+
// New code should call `executeScript` directly. This shim exists so
|
|
14
|
+
// callme-cli and `runRequest` keep working without any source changes.
|
|
15
|
+
import { executeScript } from "./executor.js";
|
|
16
|
+
const toEntries = (record) => Object.entries(record ?? {}).map(([key, value]) => ({
|
|
17
|
+
key,
|
|
18
|
+
value: String(value ?? ""),
|
|
19
|
+
enabled: true,
|
|
20
|
+
}));
|
|
21
|
+
const toRequestState = (request) => {
|
|
22
|
+
if (!request) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
const bodyValue = request.body;
|
|
26
|
+
const isString = typeof bodyValue === "string";
|
|
27
|
+
return {
|
|
28
|
+
method: String(request.method ?? "GET").toUpperCase(),
|
|
29
|
+
url: String(request.url ?? ""),
|
|
30
|
+
headers: toEntries(request.headers),
|
|
31
|
+
query: toEntries(request.query),
|
|
32
|
+
body: {
|
|
33
|
+
mode: isString ? "raw" : bodyValue ? "raw" : "none",
|
|
34
|
+
raw: isString
|
|
35
|
+
? bodyValue
|
|
36
|
+
: bodyValue
|
|
37
|
+
? safeJsonStringify(bodyValue)
|
|
38
|
+
: "",
|
|
39
|
+
formEntries: [],
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
const safeJsonStringify = (value) => {
|
|
44
|
+
try {
|
|
45
|
+
return JSON.stringify(value);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return String(value);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const toResponseState = (response) => {
|
|
52
|
+
if (!response) {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
const headers = response.headers ?? {};
|
|
56
|
+
const data = response.data;
|
|
57
|
+
const isStringBody = typeof data === "string";
|
|
58
|
+
const rawBody = isStringBody ? data : safeJsonStringify(data);
|
|
59
|
+
const contentType = Object.entries(headers).find(([key]) => key.toLowerCase() === "content-type")?.[1] ?? "";
|
|
60
|
+
const cookies = Object.entries(headers)
|
|
61
|
+
.filter(([key]) => key.toLowerCase() === "set-cookie")
|
|
62
|
+
.map(([, value]) => String(value));
|
|
63
|
+
return {
|
|
64
|
+
ok: response.status >= 200 && response.status < 400,
|
|
65
|
+
status: response.status,
|
|
66
|
+
statusText: "",
|
|
67
|
+
headers: headers,
|
|
68
|
+
body: data,
|
|
69
|
+
jsonBody: typeof data === "object" ? data : null,
|
|
70
|
+
rawBody,
|
|
71
|
+
contentType,
|
|
72
|
+
durationMs: response.duration ?? 0,
|
|
73
|
+
sizeBytes: rawBody.length,
|
|
74
|
+
cookies,
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
const toLegacyTestResult = (result) => {
|
|
78
|
+
if (result.status === "SKIP") {
|
|
79
|
+
return {
|
|
80
|
+
name: result.name,
|
|
81
|
+
status: "FAIL",
|
|
82
|
+
message: result.error ?? "Skipped",
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
name: result.name,
|
|
87
|
+
status: result.status,
|
|
88
|
+
...(result.error ? { message: result.error } : {}),
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
export const runScript = async (script, context) => {
|
|
92
|
+
if (!script?.trim()) {
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
const initialEnv = {};
|
|
96
|
+
for (const [key, value] of Object.entries(context.env.all())) {
|
|
97
|
+
initialEnv[key] = value === undefined || value === null ? "" : String(value);
|
|
98
|
+
}
|
|
99
|
+
const result = await executeScript({
|
|
100
|
+
script,
|
|
101
|
+
capabilities: {
|
|
102
|
+
environment: { values: initialEnv, emitMutations: true },
|
|
103
|
+
request: toRequestState(context.request),
|
|
104
|
+
response: toResponseState(context.response),
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
// Apply mutations to the caller's EnvStore so callers that read it
|
|
108
|
+
// after `runScript` returns see the changes (sandbox A semantics).
|
|
109
|
+
for (const mutation of result.variableMutations) {
|
|
110
|
+
if (mutation.scope !== "environment") {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
if (mutation.type === "set") {
|
|
114
|
+
context.env.set(mutation.key, mutation.value ?? "");
|
|
115
|
+
}
|
|
116
|
+
// Legacy EnvStore has no `unset` — nothing to do for that branch.
|
|
117
|
+
}
|
|
118
|
+
const testResults = result.testResults.map(toLegacyTestResult);
|
|
119
|
+
if (result.error) {
|
|
120
|
+
testResults.push({
|
|
121
|
+
name: "Script execution",
|
|
122
|
+
status: "FAIL",
|
|
123
|
+
message: result.error.message,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
return testResults;
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=legacy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy.js","sourceRoot":"","sources":["../../src/script/legacy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as vm from "node:vm";
|
|
2
|
+
import type { ScopeBindings } from "./scope.js";
|
|
3
|
+
export declare const SCRIPT_LINE_OFFSET = -2;
|
|
4
|
+
export declare const wrapScriptSource: (script: string) => string;
|
|
5
|
+
export interface CompiledSandboxScript {
|
|
6
|
+
vmScript: vm.Script;
|
|
7
|
+
scope: Record<string, unknown>;
|
|
8
|
+
vmContext: vm.Context;
|
|
9
|
+
}
|
|
10
|
+
export declare const compileScript: (script: string, filename: string) => vm.Script;
|
|
11
|
+
export declare const createSandbox: (bindings: ScopeBindings, filename: string) => {
|
|
12
|
+
scope: Record<string, unknown>;
|
|
13
|
+
vmContext: vm.Context;
|
|
14
|
+
};
|
|
15
|
+
export declare const compileAndPrepare: (script: string, bindings: ScopeBindings, filename: string) => CompiledSandboxScript;
|
|
16
|
+
//# sourceMappingURL=sandbox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/script/sandbox.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,KAAG,MAOpC,CAAC;AAEf,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,EAAE,UAAU,MAAM,KAAG,EAAE,CAAC,MAIhE,CAAC;AAEL,eAAO,MAAM,aAAa,GACxB,UAAU,aAAa,EACvB,UAAU,MAAM,KACf;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAA;CA0BzD,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,MAAM,EACd,UAAU,aAAa,EACvB,UAAU,MAAM,KACf,qBAIF,CAAC"}
|