callman-core 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dist/scenario-runner/adapters/connection-config.d.ts +34 -0
  2. package/dist/scenario-runner/adapters/connection-config.d.ts.map +1 -0
  3. package/dist/scenario-runner/adapters/connection-config.js +6 -0
  4. package/dist/scenario-runner/adapters/connection-config.js.map +1 -0
  5. package/dist/scenario-runner/adapters/db-executor.d.ts +4 -0
  6. package/dist/scenario-runner/adapters/db-executor.d.ts.map +1 -0
  7. package/dist/scenario-runner/adapters/db-executor.js +42 -0
  8. package/dist/scenario-runner/adapters/db-executor.js.map +1 -0
  9. package/dist/scenario-runner/adapters/helpers/abort.d.ts +4 -0
  10. package/dist/scenario-runner/adapters/helpers/abort.d.ts.map +1 -0
  11. package/dist/scenario-runner/adapters/helpers/abort.js +47 -0
  12. package/dist/scenario-runner/adapters/helpers/abort.js.map +1 -0
  13. package/dist/scenario-runner/adapters/helpers/failure-messages.d.ts +29 -0
  14. package/dist/scenario-runner/adapters/helpers/failure-messages.d.ts.map +1 -0
  15. package/dist/scenario-runner/adapters/helpers/failure-messages.js +64 -0
  16. package/dist/scenario-runner/adapters/helpers/failure-messages.js.map +1 -0
  17. package/dist/scenario-runner/adapters/helpers/mutations.d.ts +7 -0
  18. package/dist/scenario-runner/adapters/helpers/mutations.d.ts.map +1 -0
  19. package/dist/scenario-runner/adapters/helpers/mutations.js +28 -0
  20. package/dist/scenario-runner/adapters/helpers/mutations.js.map +1 -0
  21. package/dist/scenario-runner/adapters/helpers/request-helpers.d.ts +31 -0
  22. package/dist/scenario-runner/adapters/helpers/request-helpers.d.ts.map +1 -0
  23. package/dist/scenario-runner/adapters/helpers/request-helpers.js +247 -0
  24. package/dist/scenario-runner/adapters/helpers/request-helpers.js.map +1 -0
  25. package/dist/scenario-runner/adapters/helpers/response-shapes.d.ts +3 -0
  26. package/dist/scenario-runner/adapters/helpers/response-shapes.d.ts.map +1 -0
  27. package/dist/scenario-runner/adapters/helpers/response-shapes.js +32 -0
  28. package/dist/scenario-runner/adapters/helpers/response-shapes.js.map +1 -0
  29. package/dist/scenario-runner/adapters/helpers/templates.d.ts +2 -0
  30. package/dist/scenario-runner/adapters/helpers/templates.d.ts.map +1 -0
  31. package/dist/scenario-runner/adapters/helpers/templates.js +30 -0
  32. package/dist/scenario-runner/adapters/helpers/templates.js.map +1 -0
  33. package/dist/scenario-runner/adapters/index.d.ts +12 -0
  34. package/dist/scenario-runner/adapters/index.d.ts.map +1 -0
  35. package/dist/scenario-runner/adapters/index.js +30 -0
  36. package/dist/scenario-runner/adapters/index.js.map +1 -0
  37. package/dist/scenario-runner/adapters/kafka-executor.d.ts +4 -0
  38. package/dist/scenario-runner/adapters/kafka-executor.d.ts.map +1 -0
  39. package/dist/scenario-runner/adapters/kafka-executor.js +35 -0
  40. package/dist/scenario-runner/adapters/kafka-executor.js.map +1 -0
  41. package/dist/scenario-runner/adapters/notification-executor.d.ts +4 -0
  42. package/dist/scenario-runner/adapters/notification-executor.d.ts.map +1 -0
  43. package/dist/scenario-runner/adapters/notification-executor.js +67 -0
  44. package/dist/scenario-runner/adapters/notification-executor.js.map +1 -0
  45. package/dist/scenario-runner/adapters/redis-executor.d.ts +4 -0
  46. package/dist/scenario-runner/adapters/redis-executor.d.ts.map +1 -0
  47. package/dist/scenario-runner/adapters/redis-executor.js +78 -0
  48. package/dist/scenario-runner/adapters/redis-executor.js.map +1 -0
  49. package/dist/scenario-runner/adapters/request-executor.d.ts +4 -0
  50. package/dist/scenario-runner/adapters/request-executor.d.ts.map +1 -0
  51. package/dist/scenario-runner/adapters/request-executor.js +262 -0
  52. package/dist/scenario-runner/adapters/request-executor.js.map +1 -0
  53. package/dist/scenario-runner/adapters/script-executor.d.ts +4 -0
  54. package/dist/scenario-runner/adapters/script-executor.d.ts.map +1 -0
  55. package/dist/scenario-runner/adapters/script-executor.js +113 -0
  56. package/dist/scenario-runner/adapters/script-executor.js.map +1 -0
  57. package/dist/scenario-runner/adapters/types.d.ts +82 -0
  58. package/dist/scenario-runner/adapters/types.d.ts.map +1 -0
  59. package/dist/scenario-runner/adapters/types.js +9 -0
  60. package/dist/scenario-runner/adapters/types.js.map +1 -0
  61. package/dist/scenario-runner/index.d.ts +1 -0
  62. package/dist/scenario-runner/index.d.ts.map +1 -1
  63. package/dist/scenario-runner/index.js +1 -0
  64. package/dist/scenario-runner/index.js.map +1 -1
  65. package/dist-cjs/scenario-runner/adapters/connection-config.js +7 -0
  66. package/dist-cjs/scenario-runner/adapters/connection-config.js.map +1 -0
  67. package/dist-cjs/scenario-runner/adapters/db-executor.js +46 -0
  68. package/dist-cjs/scenario-runner/adapters/db-executor.js.map +1 -0
  69. package/dist-cjs/scenario-runner/adapters/helpers/abort.js +52 -0
  70. package/dist-cjs/scenario-runner/adapters/helpers/abort.js.map +1 -0
  71. package/dist-cjs/scenario-runner/adapters/helpers/failure-messages.js +69 -0
  72. package/dist-cjs/scenario-runner/adapters/helpers/failure-messages.js.map +1 -0
  73. package/dist-cjs/scenario-runner/adapters/helpers/mutations.js +32 -0
  74. package/dist-cjs/scenario-runner/adapters/helpers/mutations.js.map +1 -0
  75. package/dist-cjs/scenario-runner/adapters/helpers/request-helpers.js +263 -0
  76. package/dist-cjs/scenario-runner/adapters/helpers/request-helpers.js.map +1 -0
  77. package/dist-cjs/scenario-runner/adapters/helpers/response-shapes.js +36 -0
  78. package/dist-cjs/scenario-runner/adapters/helpers/response-shapes.js.map +1 -0
  79. package/dist-cjs/scenario-runner/adapters/helpers/templates.js +34 -0
  80. package/dist-cjs/scenario-runner/adapters/helpers/templates.js.map +1 -0
  81. package/dist-cjs/scenario-runner/adapters/index.js +40 -0
  82. package/dist-cjs/scenario-runner/adapters/index.js.map +1 -0
  83. package/dist-cjs/scenario-runner/adapters/kafka-executor.js +39 -0
  84. package/dist-cjs/scenario-runner/adapters/kafka-executor.js.map +1 -0
  85. package/dist-cjs/scenario-runner/adapters/notification-executor.js +71 -0
  86. package/dist-cjs/scenario-runner/adapters/notification-executor.js.map +1 -0
  87. package/dist-cjs/scenario-runner/adapters/redis-executor.js +82 -0
  88. package/dist-cjs/scenario-runner/adapters/redis-executor.js.map +1 -0
  89. package/dist-cjs/scenario-runner/adapters/request-executor.js +266 -0
  90. package/dist-cjs/scenario-runner/adapters/request-executor.js.map +1 -0
  91. package/dist-cjs/scenario-runner/adapters/script-executor.js +117 -0
  92. package/dist-cjs/scenario-runner/adapters/script-executor.js.map +1 -0
  93. package/dist-cjs/scenario-runner/adapters/types.js +10 -0
  94. package/dist-cjs/scenario-runner/adapters/types.js.map +1 -0
  95. package/dist-cjs/scenario-runner/index.js +1 -0
  96. package/dist-cjs/scenario-runner/index.js.map +1 -1
  97. package/package.json +1 -1
@@ -0,0 +1,34 @@
1
+ export type DatabaseConnectionMode = "detailed" | "connectionString";
2
+ export interface DatabaseConnectionConfig {
3
+ connectionMode: DatabaseConnectionMode;
4
+ connectionString?: string;
5
+ host?: string;
6
+ port?: number;
7
+ database?: string;
8
+ serviceName?: string;
9
+ username?: string;
10
+ password?: string;
11
+ ssl?: boolean;
12
+ }
13
+ export interface RedisConnectionConfig {
14
+ host: string;
15
+ port: number;
16
+ password?: string;
17
+ dbIndex?: number;
18
+ ssl?: boolean;
19
+ }
20
+ export interface KafkaConnectionConfig {
21
+ brokers: string[];
22
+ clientId: string;
23
+ groupId: string;
24
+ ssl?: boolean;
25
+ username?: string;
26
+ password?: string;
27
+ saslMechanism?: "plain" | "scram-sha-256" | "scram-sha-512";
28
+ }
29
+ export interface NotificationConnectionConfig {
30
+ webhookUrl: string;
31
+ defaultChannel?: string;
32
+ }
33
+ export type ConnectionRuntimeConfig = DatabaseConnectionConfig | RedisConnectionConfig | KafkaConnectionConfig | NotificationConnectionConfig;
34
+ //# sourceMappingURL=connection-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-config.d.ts","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/connection-config.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,kBAAkB,CAAC;AAErE,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,sBAAsB,CAAC;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,GAAG,eAAe,GAAG,eAAe,CAAC;CAC7D;AAED,MAAM,WAAW,4BAA4B;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,uBAAuB,GAC/B,wBAAwB,GACxB,qBAAqB,GACrB,qBAAqB,GACrB,4BAA4B,CAAC"}
@@ -0,0 +1,6 @@
1
+ // Connection config shapes shared by core adapter orchestration. Mirror
2
+ // the backend's `connection.types.ts` definitions but framework-agnostic
3
+ // (no Mongoose, no Oracle, etc.). Hosts flatten their richer types into
4
+ // these shapes when calling `resolveConnection`.
5
+ export {};
6
+ //# sourceMappingURL=connection-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-config.js","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/connection-config.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,yEAAyE;AACzE,wEAAwE;AACxE,iDAAiD"}
@@ -0,0 +1,4 @@
1
+ import type { ScenarioDbExecutionInput, ScenarioDbExecutionResult } from "../types.js";
2
+ import type { ScenarioRuntimeAdapterFactoryOptions } from "./types.js";
3
+ export declare const buildDbExecutor: (options: ScenarioRuntimeAdapterFactoryOptions) => (input: ScenarioDbExecutionInput) => Promise<ScenarioDbExecutionResult>;
4
+ //# sourceMappingURL=db-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-executor.d.ts","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/db-executor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,YAAY,CAAC;AAEvE,eAAO,MAAM,eAAe,GAC1B,SAAS,oCAAoC,MAEtC,OAAO,wBAAwB,KAAG,OAAO,CAAC,yBAAyB,CAwCzE,CAAC"}
@@ -0,0 +1,42 @@
1
+ // Canonical DB executor — orchestrates a single Database scenario node.
2
+ // Resolves the workspace connection, defers the actual query execution
3
+ // to the host-supplied `databaseExecutor` driver (mongoose / oracledb /
4
+ // postgres / etc.), wraps the result in the scenario adapter shape.
5
+ import { withAbortAndTimeout } from "./helpers/abort.js";
6
+ export const buildDbExecutor = (options) => async (input) => {
7
+ const connection = await options.resolveConnection(input.node.data.config.connectionId);
8
+ try {
9
+ const result = await withAbortAndTimeout(options.drivers.databaseExecutor({
10
+ connection,
11
+ resolvedQuery: input.resolvedQuery,
12
+ }), options.nodeTimeoutMs, `Database node ${input.stepId}`, input.signal);
13
+ return {
14
+ rawResult: {
15
+ success: true,
16
+ rows: result.rows,
17
+ rowCount: result.rowCount,
18
+ },
19
+ dbResult: result.rows,
20
+ outputData: {
21
+ rows: result.rows,
22
+ rowCount: result.rowCount,
23
+ },
24
+ failureMessage: null,
25
+ };
26
+ }
27
+ catch (error) {
28
+ const message = error instanceof Error ? error.message : String(error);
29
+ return {
30
+ rawResult: {
31
+ success: false,
32
+ rows: [],
33
+ rowCount: 0,
34
+ error: message,
35
+ },
36
+ dbResult: null,
37
+ outputData: null,
38
+ failureMessage: message || "Database query failed.",
39
+ };
40
+ }
41
+ };
42
+ //# sourceMappingURL=db-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-executor.js","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/db-executor.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,uEAAuE;AACvE,wEAAwE;AACxE,oEAAoE;AAOpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,OAA6C,EAC7C,EAAE,CACF,KAAK,EAAE,KAA+B,EAAsC,EAAE;IAC5E,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAExF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACtC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAC/B,UAAU;YACV,aAAa,EAAE,KAAK,CAAC,aAAa;SACnC,CAAC,EACF,OAAO,CAAC,aAAa,EACrB,iBAAiB,KAAK,CAAC,MAAM,EAAE,EAC/B,KAAK,CAAC,MAAM,CACb,CAAC;QACF,OAAO;YACL,SAAS,EAAE;gBACT,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B;YACD,QAAQ,EAAE,MAAM,CAAC,IAAI;YACrB,UAAU,EAAE;gBACV,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B;YACD,cAAc,EAAE,IAAI;SACrB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,OAAO;YACL,SAAS,EAAE;gBACT,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,EAAE;gBACR,QAAQ,EAAE,CAAC;gBACX,KAAK,EAAE,OAAO;aACf;YACD,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE,OAAO,IAAI,wBAAwB;SACpD,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { AbortLikeSignal } from "../../types.js";
2
+ export declare const attachAbortHandler: (signal: AbortLikeSignal | undefined, handler: () => void) => (() => void);
3
+ export declare const withAbortAndTimeout: <T>(task: Promise<T>, timeoutMs: number, label: string, signal?: AbortLikeSignal) => Promise<T>;
4
+ //# sourceMappingURL=abort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort.d.ts","sourceRoot":"","sources":["../../../../src/scenario-runner/adapters/helpers/abort.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,eAAe,GAAG,SAAS,EACnC,SAAS,MAAM,IAAI,KAClB,CAAC,MAAM,IAAI,CAUb,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAU,CAAC,EACzC,MAAM,OAAO,CAAC,CAAC,CAAC,EAChB,WAAW,MAAM,EACjB,OAAO,MAAM,EACb,SAAS,eAAe,KACvB,OAAO,CAAC,CAAC,CAiCR,CAAC"}
@@ -0,0 +1,47 @@
1
+ // Abort signal + timeout helpers shared by every scenario adapter.
2
+ // Lifted from p_man_backend/src/modules/scenario-runner/adapters/runtime-adapters.ts
3
+ // (lines 56-111). Uses callman-core's existing `AbortLikeSignal` type so
4
+ // custom abort dispatchers (not just DOM AbortSignal) can be supplied.
5
+ //
6
+ // `attachAbortHandler` returns a detach function so callers can clean up
7
+ // listeners without leaking when the underlying task settles before the
8
+ // signal fires. `withAbortAndTimeout` wraps a task with both a timeout
9
+ // rejection and an abort rejection, whichever comes first.
10
+ export const attachAbortHandler = (signal, handler) => {
11
+ if (!signal?.addEventListener || !signal?.removeEventListener) {
12
+ return () => undefined;
13
+ }
14
+ if (signal.aborted) {
15
+ handler();
16
+ return () => undefined;
17
+ }
18
+ signal.addEventListener("abort", handler, { once: true });
19
+ return () => signal.removeEventListener?.("abort", handler);
20
+ };
21
+ export const withAbortAndTimeout = async (task, timeoutMs, label, signal) => await new Promise((resolve, reject) => {
22
+ const timer = setTimeout(() => {
23
+ cleanup();
24
+ reject(new Error(`${label} timed out after ${timeoutMs}ms`));
25
+ }, timeoutMs);
26
+ const handleAbort = () => {
27
+ cleanup();
28
+ reject(new Error(`${label} cancelled`));
29
+ };
30
+ const cleanup = () => {
31
+ clearTimeout(timer);
32
+ signal?.removeEventListener?.("abort", handleAbort);
33
+ };
34
+ if (signal?.aborted) {
35
+ handleAbort();
36
+ return;
37
+ }
38
+ signal?.addEventListener?.("abort", handleAbort, { once: true });
39
+ task.then((value) => {
40
+ cleanup();
41
+ resolve(value);
42
+ }, (error) => {
43
+ cleanup();
44
+ reject(error);
45
+ });
46
+ });
47
+ //# sourceMappingURL=abort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort.js","sourceRoot":"","sources":["../../../../src/scenario-runner/adapters/helpers/abort.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,qFAAqF;AACrF,yEAAyE;AACzE,uEAAuE;AACvE,EAAE;AACF,yEAAyE;AACzE,wEAAwE;AACxE,uEAAuE;AACvE,2DAA2D;AAI3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,MAAmC,EACnC,OAAmB,EACL,EAAE;IAChB,IAAI,CAAC,MAAM,EAAE,gBAAgB,IAAI,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC;QAC9D,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;IACzB,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,EAAE,CAAC;QACV,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC;IACzB,CAAC;IACD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,IAAgB,EAChB,SAAiB,EACjB,KAAa,EACb,MAAwB,EACZ,EAAE,CACd,MAAM,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IACvC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,OAAO,EAAE,CAAC;QACV,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,oBAAoB,SAAS,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC,EAAE,SAAS,CAAC,CAAC;IAEd,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,OAAO,EAAE,CAAC;QACV,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,EAAE,mBAAmB,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,WAAW,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,MAAM,EAAE,gBAAgB,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,IAAI,CAAC,IAAI,CACP,CAAC,KAAK,EAAE,EAAE;QACR,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;QACjB,OAAO,EAAE,CAAC;QACV,MAAM,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { ScenarioRequestResponse } from "../../types.js";
2
+ export interface FailureMessageInput {
3
+ response: ScenarioRequestResponse;
4
+ postResponseError?: {
5
+ message: string;
6
+ } | null;
7
+ testsError?: {
8
+ message: string;
9
+ } | null;
10
+ testResults: Array<{
11
+ name: string;
12
+ status: "PASS" | "FAIL" | "SKIP";
13
+ error?: string;
14
+ }>;
15
+ contractResults: Array<{
16
+ status?: "PASS" | "FAIL" | "SKIP";
17
+ message?: string;
18
+ }>;
19
+ }
20
+ export declare const buildRequestFailureMessage: ({ response, postResponseError, testsError, testResults, contractResults, }: FailureMessageInput) => string | null;
21
+ export declare const summarizeContractResults: (contractResults: Array<{
22
+ status?: "PASS" | "FAIL" | "SKIP";
23
+ }>) => {
24
+ total: number;
25
+ passed: number;
26
+ failed: number;
27
+ skipped: number;
28
+ };
29
+ //# sourceMappingURL=failure-messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure-messages.d.ts","sourceRoot":"","sources":["../../../../src/scenario-runner/adapters/helpers/failure-messages.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,iBAAiB,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/C,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACxC,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvF,eAAe,EAAE,KAAK,CAAC;QAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjF;AAED,eAAO,MAAM,0BAA0B,GAAI,4EAMxC,mBAAmB,KAAG,MAAM,GAAG,IAmCjC,CAAC;AAGF,eAAO,MAAM,wBAAwB,GACnC,iBAAiB,KAAK,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC,KAC5D;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAmBlE,CAAC"}
@@ -0,0 +1,64 @@
1
+ // Build a human-readable failure message from a request executor's outcome.
2
+ // Lifted from p_man_backend/src/modules/scenario-runner/adapters/runtime-adapters.ts
3
+ // (createFailureMessage, line 415). Pure function — same priority order as
4
+ // the backend's current behavior; renderer-side variant collapses into the
5
+ // same logic post-unification.
6
+ //
7
+ // Priority: response error → response.ok=false → first FAIL test → first
8
+ // FAIL contract → null (success).
9
+ export const buildRequestFailureMessage = ({ response, postResponseError, testsError, testResults, contractResults, }) => {
10
+ // Backend's current behavior elevates explicit script errors above
11
+ // response/contract failures so the operator sees the root cause first.
12
+ if (postResponseError?.message) {
13
+ return `Post-response script failed: ${postResponseError.message}`;
14
+ }
15
+ if (testsError?.message) {
16
+ return `Tests script failed: ${testsError.message}`;
17
+ }
18
+ if (!response.ok || response.errorMessage) {
19
+ if (response.errorMessage?.trim()) {
20
+ return response.errorMessage;
21
+ }
22
+ if (response.status > 0) {
23
+ return `Request failed with status ${response.status}`;
24
+ }
25
+ return "Request execution failed.";
26
+ }
27
+ const failedTest = testResults.find((entry) => entry.status === "FAIL");
28
+ if (failedTest) {
29
+ return failedTest.error
30
+ ? `Script test failed: ${failedTest.name} (${failedTest.error})`
31
+ : `Script test failed: ${failedTest.name}`;
32
+ }
33
+ const failedContract = contractResults.find((entry) => entry?.status === "FAIL");
34
+ if (failedContract) {
35
+ return failedContract.message
36
+ ? `Contract validation failed: ${failedContract.message}`
37
+ : "Contract validation failed.";
38
+ }
39
+ return null;
40
+ };
41
+ // Convenience helper for callers that want the contract counts in one go.
42
+ export const summarizeContractResults = (contractResults) => {
43
+ let passed = 0;
44
+ let failed = 0;
45
+ let skipped = 0;
46
+ for (const entry of contractResults) {
47
+ if (entry?.status === "PASS") {
48
+ passed += 1;
49
+ }
50
+ else if (entry?.status === "FAIL") {
51
+ failed += 1;
52
+ }
53
+ else if (entry?.status === "SKIP") {
54
+ skipped += 1;
55
+ }
56
+ }
57
+ return {
58
+ total: contractResults.length,
59
+ passed,
60
+ failed,
61
+ skipped,
62
+ };
63
+ };
64
+ //# sourceMappingURL=failure-messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failure-messages.js","sourceRoot":"","sources":["../../../../src/scenario-runner/adapters/helpers/failure-messages.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,qFAAqF;AACrF,2EAA2E;AAC3E,2EAA2E;AAC3E,+BAA+B;AAC/B,EAAE;AACF,yEAAyE;AACzE,kCAAkC;AAYlC,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,EACzC,QAAQ,EACR,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,eAAe,GACK,EAAiB,EAAE;IACvC,mEAAmE;IACnE,wEAAwE;IACxE,IAAI,iBAAiB,EAAE,OAAO,EAAE,CAAC;QAC/B,OAAO,gCAAgC,iBAAiB,CAAC,OAAO,EAAE,CAAC;IACrE,CAAC;IACD,IAAI,UAAU,EAAE,OAAO,EAAE,CAAC;QACxB,OAAO,wBAAwB,UAAU,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC1C,IAAI,QAAQ,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC;YAClC,OAAO,QAAQ,CAAC,YAAY,CAAC;QAC/B,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,8BAA8B,QAAQ,CAAC,MAAM,EAAE,CAAC;QACzD,CAAC;QACD,OAAO,2BAA2B,CAAC;IACrC,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IACxE,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC,KAAK;YACrB,CAAC,CAAC,uBAAuB,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,KAAK,GAAG;YAChE,CAAC,CAAC,uBAAuB,UAAU,CAAC,IAAI,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IACjF,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC,OAAO;YAC3B,CAAC,CAAC,+BAA+B,cAAc,CAAC,OAAO,EAAE;YACzD,CAAC,CAAC,6BAA6B,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,0EAA0E;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,eAA6D,EACO,EAAE;IACtE,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;aAAM,IAAI,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;YACpC,MAAM,IAAI,CAAC,CAAC;QACd,CAAC;aAAM,IAAI,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO;QACL,KAAK,EAAE,eAAe,CAAC,MAAM;QAC7B,MAAM;QACN,MAAM;QACN,OAAO;KACR,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ScenarioVariableMutation } from "../../types.js";
2
+ export interface MutableScopes {
3
+ environment: Record<string, string>;
4
+ globals: Record<string, string>;
5
+ }
6
+ export declare const applyVariableMutations: (scopes: MutableScopes, mutations: ScenarioVariableMutation[]) => void;
7
+ //# sourceMappingURL=mutations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutations.d.ts","sourceRoot":"","sources":["../../../../src/scenario-runner/adapters/helpers/mutations.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,eAAO,MAAM,sBAAsB,GACjC,QAAQ,aAAa,EACrB,WAAW,wBAAwB,EAAE,KACpC,IAgBF,CAAC"}
@@ -0,0 +1,28 @@
1
+ // Apply pm.environment / pm.globals mutations emitted by a scenario script
2
+ // onto plain mutable record instances. Pure function — no async, no side
3
+ // effects beyond the supplied records. Used by every executor that runs a
4
+ // pre/post/test script and needs to thread the mutated state forward.
5
+ //
6
+ // Mutation log shape comes from `ScenarioVariableMutation` in canonical
7
+ // types (set/unset, scope=environment|global). The log itself is produced
8
+ // by the script sandbox; this helper only consumes it.
9
+ export const applyVariableMutations = (scopes, mutations) => {
10
+ for (const mutation of mutations) {
11
+ if (mutation.scope === "environment") {
12
+ if (mutation.type === "unset") {
13
+ delete scopes.environment[mutation.key];
14
+ }
15
+ else {
16
+ scopes.environment[mutation.key] = mutation.value ?? "";
17
+ }
18
+ continue;
19
+ }
20
+ if (mutation.type === "unset") {
21
+ delete scopes.globals[mutation.key];
22
+ }
23
+ else {
24
+ scopes.globals[mutation.key] = mutation.value ?? "";
25
+ }
26
+ }
27
+ };
28
+ //# sourceMappingURL=mutations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutations.js","sourceRoot":"","sources":["../../../../src/scenario-runner/adapters/helpers/mutations.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,yEAAyE;AACzE,0EAA0E;AAC1E,sEAAsE;AACtE,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,uDAAuD;AASvD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,MAAqB,EACrB,SAAqC,EAC/B,EAAE;IACR,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;YACrC,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC9B,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1D,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC9B,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { ExecuteRequestResult } from "../../../types/index.js";
2
+ import type { RequestScenarioNode, ScenarioRequestResponse } from "../../types.js";
3
+ import type { ScriptRequestState, ScriptResponseState } from "../../../script/types.js";
4
+ export declare const isJsonLike: (value: string) => boolean;
5
+ export declare const safeJsonParse: (value: string) => unknown | null;
6
+ export declare const normalizeHeaderPairs: (headers: Record<string, string>) => Array<{
7
+ key: string;
8
+ value: string;
9
+ }>;
10
+ export declare const findHeader: (headers: Record<string, string>, name: string) => string;
11
+ export declare const normalizeCookies: (headers: Record<string, string>) => string[];
12
+ export declare const normalizeResponseValue: (value: unknown) => string;
13
+ export declare const applyAuthToRequest: (request: ScriptRequestState, auth: RequestScenarioNode["data"]["config"]["auth"] | undefined, resolveValue: (value: string) => string) => void;
14
+ export interface BodyResolverHelpers {
15
+ replaceScenarioTemplateTokensForJsonValidation: (raw: string) => string;
16
+ resolveScenarioJsonTemplateString: (raw: string, values: Record<string, string>) => string;
17
+ resolveScenarioTemplateString: (raw: string, values: Record<string, string>) => string;
18
+ }
19
+ export declare const resolveRequestBody: (request: ScriptRequestState, helpers: BodyResolverHelpers, templateValues: Record<string, string>) => unknown;
20
+ export declare const createRequestStateFromNode: (node: RequestScenarioNode) => ScriptRequestState;
21
+ export declare const normalizeRequestForExecution: (request: ScriptRequestState, auth: RequestScenarioNode["data"]["config"]["auth"] | undefined, helpers: BodyResolverHelpers, templateValues: Record<string, string>) => {
22
+ method: string;
23
+ url: string;
24
+ headers: Record<string, string>;
25
+ query: Record<string, string>;
26
+ body: unknown;
27
+ };
28
+ export declare const normalizeExecuteRequestFailure: (error: unknown) => ExecuteRequestResult;
29
+ export declare const toRequestResponse: (executionResult: ExecuteRequestResult) => ScenarioRequestResponse;
30
+ export declare const toRequestScriptResponse: (response: ScenarioRequestResponse) => ScriptResponseState;
31
+ //# sourceMappingURL=request-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-helpers.d.ts","sourceRoot":"","sources":["../../../../src/scenario-runner/adapters/helpers/request-helpers.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAyBlC,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,OAG1C,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,OAAO,GAAG,IAMvD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC9B,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAC0B,CAAC;AAElE,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,MAAM,KAAG,MAK1E,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAG,MAAM,EASxE,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,OAAO,OAAO,KAAG,MAYvD,CAAC;AAMF,eAAO,MAAM,kBAAkB,GAC7B,SAAS,kBAAkB,EAC3B,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,EAC/D,cAAc,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,KACtC,IAkCF,CAAC;AAKF,MAAM,WAAW,mBAAmB;IAClC,8CAA8C,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACxE,iCAAiC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC;IAC3F,6BAA6B,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC;CACxF;AAED,eAAO,MAAM,kBAAkB,GAC7B,SAAS,kBAAkB,EAC3B,SAAS,mBAAmB,EAC5B,gBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACrC,OA+BF,CAAC;AAIF,eAAO,MAAM,0BAA0B,GACrC,MAAM,mBAAmB,KACxB,kBAsBD,CAAC;AAKH,eAAO,MAAM,4BAA4B,GACvC,SAAS,kBAAkB,EAC3B,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,SAAS,EAC/D,SAAS,mBAAmB,EAC5B,gBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACrC;IACD,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,OAAO,CAAC;CA4Cf,CAAC;AAEF,eAAO,MAAM,8BAA8B,GAAI,OAAO,OAAO,KAAG,oBAO9D,CAAC;AAEH,eAAO,MAAM,iBAAiB,GAC5B,iBAAiB,oBAAoB,KACpC,uBAiCF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,UAAU,uBAAuB,KAChC,mBAYD,CAAC"}
@@ -0,0 +1,247 @@
1
+ // Helpers shared by the request executor: response shape coercion,
2
+ // auth header injection, body resolution, header utilities, JSON parsing,
3
+ // failure normalization. All lifted from
4
+ // p_man_backend/src/modules/scenario-runner/adapters/runtime-adapters.ts
5
+ // (lines 113-413) and reworked to be Node-agnostic — `Buffer` calls
6
+ // rewritten using `TextEncoder` and a pure base64 encoder so the helpers
7
+ // run in the browser/renderer too.
8
+ const BASE64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
9
+ const encodeBase64 = (bytes) => {
10
+ let output = "";
11
+ const length = bytes.length;
12
+ for (let index = 0; index < length; index += 3) {
13
+ const b0 = bytes[index];
14
+ const b1 = index + 1 < length ? bytes[index + 1] : 0;
15
+ const b2 = index + 2 < length ? bytes[index + 2] : 0;
16
+ const triplet = (b0 << 16) | (b1 << 8) | b2;
17
+ output += BASE64_CHARS[(triplet >> 18) & 0x3f];
18
+ output += BASE64_CHARS[(triplet >> 12) & 0x3f];
19
+ output += index + 1 < length ? BASE64_CHARS[(triplet >> 6) & 0x3f] : "=";
20
+ output += index + 2 < length ? BASE64_CHARS[triplet & 0x3f] : "=";
21
+ }
22
+ return output;
23
+ };
24
+ const utf8Encode = (input) => new TextEncoder().encode(input);
25
+ const utf8ByteLength = (input) => utf8Encode(input).length;
26
+ export const isJsonLike = (value) => {
27
+ const trimmed = value.trim();
28
+ return trimmed.startsWith("{") || trimmed.startsWith("[");
29
+ };
30
+ export const safeJsonParse = (value) => {
31
+ try {
32
+ return JSON.parse(value);
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ };
38
+ export const normalizeHeaderPairs = (headers) => Object.entries(headers).map(([key, value]) => ({ key, value }));
39
+ export const findHeader = (headers, name) => {
40
+ const normalizedName = name.toLowerCase();
41
+ return (Object.entries(headers).find(([key]) => key.toLowerCase() === normalizedName)?.[1] ?? "");
42
+ };
43
+ export const normalizeCookies = (headers) => {
44
+ const cookieHeader = findHeader(headers, "set-cookie");
45
+ if (!cookieHeader.trim()) {
46
+ return [];
47
+ }
48
+ return cookieHeader
49
+ .split(/\s*,\s*(?=[^;,]+?=)/)
50
+ .map((entry) => entry.trim())
51
+ .filter(Boolean);
52
+ };
53
+ export const normalizeResponseValue = (value) => {
54
+ if (typeof value === "string") {
55
+ return value;
56
+ }
57
+ if (value === null || value === undefined) {
58
+ return "";
59
+ }
60
+ try {
61
+ return JSON.stringify(value, null, 2);
62
+ }
63
+ catch {
64
+ return String(value);
65
+ }
66
+ };
67
+ // Apply pre-script auth (bearer / basic / apikey) to the mutable request
68
+ // state. `resolveValue` is supplied by the caller — typically a thin
69
+ // wrapper around `resolveScenarioTemplateString` so auth values can use
70
+ // `{{var}}` substitution.
71
+ export const applyAuthToRequest = (request, auth, resolveValue) => {
72
+ if (!auth || auth.type === "none") {
73
+ return;
74
+ }
75
+ if (auth.type === "bearer") {
76
+ request.headers.push({
77
+ key: "Authorization",
78
+ value: `Bearer ${resolveValue(auth.bearerToken)}`,
79
+ enabled: true,
80
+ });
81
+ return;
82
+ }
83
+ if (auth.type === "basic") {
84
+ const username = resolveValue(auth.basicUsername);
85
+ const password = resolveValue(auth.basicPassword);
86
+ request.headers.push({
87
+ key: "Authorization",
88
+ value: `Basic ${encodeBase64(utf8Encode(`${username}:${password}`))}`,
89
+ enabled: true,
90
+ });
91
+ return;
92
+ }
93
+ if (auth.type === "apikey") {
94
+ const key = resolveValue(auth.apiKeyKey);
95
+ if (!key.trim()) {
96
+ return;
97
+ }
98
+ const value = resolveValue(auth.apiKeyValue);
99
+ const target = auth.apiKeyLocation === "query" ? request.query : request.headers;
100
+ target.push({ key, value, enabled: true });
101
+ }
102
+ };
103
+ export const resolveRequestBody = (request, helpers, templateValues) => {
104
+ if (request.body.mode === "none") {
105
+ return undefined;
106
+ }
107
+ if (request.body.mode === "raw") {
108
+ const raw = request.body.raw ?? "";
109
+ if (!raw.trim()) {
110
+ return "";
111
+ }
112
+ if (isJsonLike(raw)) {
113
+ const validationCandidate = helpers.replaceScenarioTemplateTokensForJsonValidation(raw);
114
+ if (safeJsonParse(validationCandidate) !== null) {
115
+ const resolvedJson = helpers.resolveScenarioJsonTemplateString(raw, templateValues);
116
+ const parsedJson = safeJsonParse(resolvedJson);
117
+ if (parsedJson !== null) {
118
+ return parsedJson;
119
+ }
120
+ }
121
+ }
122
+ return helpers.resolveScenarioTemplateString(raw, templateValues);
123
+ }
124
+ return Object.fromEntries(request.body.formEntries
125
+ .filter((entry) => entry.enabled !== false && entry.key.trim())
126
+ .map((entry) => [
127
+ helpers.resolveScenarioTemplateString(entry.key, templateValues),
128
+ helpers.resolveScenarioTemplateString(entry.value, templateValues),
129
+ ]));
130
+ };
131
+ // Build the script-shaped request state from a node config (initial state
132
+ // for pre-request scripts and ongoing mutation tracking).
133
+ export const createRequestStateFromNode = (node) => ({
134
+ method: node.data.config.method,
135
+ url: node.data.config.url,
136
+ headers: (node.data.config.headers ?? []).map((entry) => ({
137
+ key: entry.key,
138
+ value: entry.value,
139
+ enabled: entry.enabled ?? true,
140
+ })),
141
+ query: (node.data.config.query ?? []).map((entry) => ({
142
+ key: entry.key,
143
+ value: entry.value,
144
+ enabled: entry.enabled ?? true,
145
+ })),
146
+ body: {
147
+ mode: node.data.config.body.mode,
148
+ raw: node.data.config.body.raw,
149
+ formEntries: (node.data.config.body.formEntries ?? []).map((entry) => ({
150
+ key: entry.key,
151
+ value: entry.value,
152
+ enabled: entry.enabled ?? true,
153
+ })),
154
+ },
155
+ });
156
+ // Final normalization step before the HTTP call: apply auth, resolve all
157
+ // templates, drop disabled entries. Returns a plain executable shape
158
+ // (records, not key/value pair arrays) suitable for direct driver use.
159
+ export const normalizeRequestForExecution = (request, auth, helpers, templateValues) => {
160
+ const mutableRequest = {
161
+ method: request.method,
162
+ url: request.url,
163
+ headers: request.headers.map((entry) => ({ ...entry })),
164
+ query: request.query.map((entry) => ({ ...entry })),
165
+ body: {
166
+ mode: request.body.mode,
167
+ raw: request.body.raw,
168
+ formEntries: request.body.formEntries.map((entry) => ({ ...entry })),
169
+ },
170
+ };
171
+ applyAuthToRequest(mutableRequest, auth, (value) => helpers.resolveScenarioTemplateString(value, templateValues));
172
+ const headers = Object.fromEntries(mutableRequest.headers
173
+ .filter((entry) => entry.enabled !== false && entry.key.trim())
174
+ .map((entry) => [
175
+ helpers.resolveScenarioTemplateString(entry.key, templateValues),
176
+ helpers.resolveScenarioTemplateString(entry.value, templateValues),
177
+ ]));
178
+ const query = Object.fromEntries(mutableRequest.query
179
+ .filter((entry) => entry.enabled !== false && entry.key.trim())
180
+ .map((entry) => [
181
+ helpers.resolveScenarioTemplateString(entry.key, templateValues),
182
+ helpers.resolveScenarioTemplateString(entry.value, templateValues),
183
+ ]));
184
+ return {
185
+ method: helpers
186
+ .resolveScenarioTemplateString(mutableRequest.method, templateValues)
187
+ .trim()
188
+ .toUpperCase(),
189
+ url: helpers.resolveScenarioTemplateString(mutableRequest.url, templateValues),
190
+ headers,
191
+ query,
192
+ body: resolveRequestBody(mutableRequest, helpers, templateValues),
193
+ };
194
+ };
195
+ export const normalizeExecuteRequestFailure = (error) => ({
196
+ status: 0,
197
+ data: {
198
+ error: error instanceof Error ? error.message : String(error),
199
+ },
200
+ headers: {},
201
+ duration: 0,
202
+ });
203
+ export const toRequestResponse = (executionResult) => {
204
+ const bodyJson = executionResult.data && typeof executionResult.data === "object"
205
+ ? executionResult.data
206
+ : typeof executionResult.data === "string"
207
+ ? safeJsonParse(executionResult.data)
208
+ : null;
209
+ const bodyText = normalizeResponseValue(executionResult.data);
210
+ const cookies = normalizeCookies(executionResult.headers);
211
+ const contentType = findHeader(executionResult.headers, "content-type");
212
+ return {
213
+ ok: executionResult.status >= 200 && executionResult.status < 400,
214
+ status: executionResult.status,
215
+ statusText: executionResult.status === 0 ? "Request Error" : "",
216
+ durationMs: executionResult.duration,
217
+ sizeBytes: utf8ByteLength(bodyText),
218
+ headers: normalizeHeaderPairs(executionResult.headers),
219
+ cookies,
220
+ contentType,
221
+ bodyText,
222
+ bodyJson,
223
+ kafkaResult: null,
224
+ redisResult: null,
225
+ cancelled: false,
226
+ errorMessage: executionResult.status === 0 &&
227
+ executionResult.data &&
228
+ typeof executionResult.data === "object" &&
229
+ "error" in executionResult.data
230
+ ? String(executionResult.data.error ?? "Request failed")
231
+ : undefined,
232
+ };
233
+ };
234
+ export const toRequestScriptResponse = (response) => ({
235
+ ok: response.ok,
236
+ status: response.status,
237
+ statusText: response.statusText,
238
+ headers: Object.fromEntries(response.headers.map((entry) => [entry.key, entry.value])),
239
+ body: response.bodyJson ?? response.bodyText,
240
+ jsonBody: response.bodyJson,
241
+ rawBody: response.bodyText,
242
+ contentType: response.contentType,
243
+ durationMs: response.durationMs,
244
+ sizeBytes: response.sizeBytes,
245
+ cookies: [...response.cookies],
246
+ });
247
+ //# sourceMappingURL=request-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-helpers.js","sourceRoot":"","sources":["../../../../src/scenario-runner/adapters/helpers/request-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ScenarioRequestResponse } from "../../types.js";
2
+ export declare const buildResponseRoot: (response: ScenarioRequestResponse) => Record<string, unknown>;
3
+ //# sourceMappingURL=response-shapes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-shapes.d.ts","sourceRoot":"","sources":["../../../../src/scenario-runner/adapters/helpers/response-shapes.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAK9D,eAAO,MAAM,iBAAiB,GAAI,UAAU,uBAAuB,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAmB3F,CAAC"}