callman-core 1.18.0 → 1.20.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 (105) hide show
  1. package/dist/host/db/connectionMapping.d.ts +4 -0
  2. package/dist/host/db/connectionMapping.d.ts.map +1 -1
  3. package/dist/host/db/connectionMapping.js +4 -0
  4. package/dist/host/db/connectionMapping.js.map +1 -1
  5. package/dist/host/db/pgClientConfig.d.ts +11 -0
  6. package/dist/host/db/pgClientConfig.d.ts.map +1 -0
  7. package/dist/host/db/pgClientConfig.js +83 -0
  8. package/dist/host/db/pgClientConfig.js.map +1 -0
  9. package/dist/host/db/pgSessionManager.d.ts +18 -0
  10. package/dist/host/db/pgSessionManager.d.ts.map +1 -0
  11. package/dist/host/db/pgSessionManager.js +162 -0
  12. package/dist/host/db/pgSessionManager.js.map +1 -0
  13. package/dist/host/db/postgresAdapter.d.ts.map +1 -1
  14. package/dist/host/db/postgresAdapter.js +7 -36
  15. package/dist/host/db/postgresAdapter.js.map +1 -1
  16. package/dist/host/db/queryExecutor.d.ts +4 -0
  17. package/dist/host/db/queryExecutor.d.ts.map +1 -1
  18. package/dist/host/db/queryExecutor.js +40 -2
  19. package/dist/host/db/queryExecutor.js.map +1 -1
  20. package/dist/host/db/sqlState.d.ts +2 -0
  21. package/dist/host/db/sqlState.d.ts.map +1 -0
  22. package/dist/host/db/sqlState.js +14 -0
  23. package/dist/host/db/sqlState.js.map +1 -0
  24. package/dist/host/db/types.d.ts +13 -0
  25. package/dist/host/db/types.d.ts.map +1 -1
  26. package/dist/host/index.d.ts +3 -0
  27. package/dist/host/index.d.ts.map +1 -1
  28. package/dist/host/index.js +7 -0
  29. package/dist/host/index.js.map +1 -1
  30. package/dist/scenario-runner/adapters/connection-config.d.ts +4 -0
  31. package/dist/scenario-runner/adapters/connection-config.d.ts.map +1 -1
  32. package/dist/scenario-runner/adapters/db-executor.d.ts +7 -1
  33. package/dist/scenario-runner/adapters/db-executor.d.ts.map +1 -1
  34. package/dist/scenario-runner/adapters/db-executor.js +106 -1
  35. package/dist/scenario-runner/adapters/db-executor.js.map +1 -1
  36. package/dist/scenario-runner/adapters/index.d.ts +2 -1
  37. package/dist/scenario-runner/adapters/index.d.ts.map +1 -1
  38. package/dist/scenario-runner/adapters/index.js +11 -1
  39. package/dist/scenario-runner/adapters/index.js.map +1 -1
  40. package/dist/scenario-runner/adapters/types.d.ts +9 -0
  41. package/dist/scenario-runner/adapters/types.d.ts.map +1 -1
  42. package/dist/scenario-runner/adapters/websocket-executor.d.ts +4 -0
  43. package/dist/scenario-runner/adapters/websocket-executor.d.ts.map +1 -0
  44. package/dist/scenario-runner/adapters/websocket-executor.js +20 -0
  45. package/dist/scenario-runner/adapters/websocket-executor.js.map +1 -0
  46. package/dist/scenario-runner/condition.d.ts +1 -0
  47. package/dist/scenario-runner/condition.d.ts.map +1 -1
  48. package/dist/scenario-runner/condition.js +138 -2
  49. package/dist/scenario-runner/condition.js.map +1 -1
  50. package/dist/scenario-runner/conditionTypes.d.ts +1 -1
  51. package/dist/scenario-runner/conditionTypes.d.ts.map +1 -1
  52. package/dist/scenario-runner/graphTraversal.d.ts +8 -0
  53. package/dist/scenario-runner/graphTraversal.d.ts.map +1 -1
  54. package/dist/scenario-runner/graphTraversal.js +9 -0
  55. package/dist/scenario-runner/graphTraversal.js.map +1 -1
  56. package/dist/scenario-runner/index.d.ts +1 -0
  57. package/dist/scenario-runner/index.d.ts.map +1 -1
  58. package/dist/scenario-runner/index.js +1 -0
  59. package/dist/scenario-runner/index.js.map +1 -1
  60. package/dist/scenario-runner/nodePolicy.d.ts +2 -2
  61. package/dist/scenario-runner/nodePolicy.d.ts.map +1 -1
  62. package/dist/scenario-runner/nodePolicy.js +2 -0
  63. package/dist/scenario-runner/nodePolicy.js.map +1 -1
  64. package/dist/scenario-runner/runScenario.d.ts.map +1 -1
  65. package/dist/scenario-runner/runScenario.js +202 -2
  66. package/dist/scenario-runner/runScenario.js.map +1 -1
  67. package/dist/scenario-runner/types.d.ts +142 -3
  68. package/dist/scenario-runner/types.d.ts.map +1 -1
  69. package/dist/scenario-runner/websocket.d.ts +17 -0
  70. package/dist/scenario-runner/websocket.d.ts.map +1 -0
  71. package/dist/scenario-runner/websocket.js +74 -0
  72. package/dist/scenario-runner/websocket.js.map +1 -0
  73. package/dist-cjs/host/db/connectionMapping.js +4 -0
  74. package/dist-cjs/host/db/connectionMapping.js.map +1 -1
  75. package/dist-cjs/host/db/pgClientConfig.js +90 -0
  76. package/dist-cjs/host/db/pgClientConfig.js.map +1 -0
  77. package/dist-cjs/host/db/pgSessionManager.js +170 -0
  78. package/dist-cjs/host/db/pgSessionManager.js.map +1 -0
  79. package/dist-cjs/host/db/postgresAdapter.js +7 -36
  80. package/dist-cjs/host/db/postgresAdapter.js.map +1 -1
  81. package/dist-cjs/host/db/queryExecutor.js +40 -2
  82. package/dist-cjs/host/db/queryExecutor.js.map +1 -1
  83. package/dist-cjs/host/db/sqlState.js +18 -0
  84. package/dist-cjs/host/db/sqlState.js.map +1 -0
  85. package/dist-cjs/host/index.js +16 -1
  86. package/dist-cjs/host/index.js.map +1 -1
  87. package/dist-cjs/scenario-runner/adapters/db-executor.js +108 -2
  88. package/dist-cjs/scenario-runner/adapters/db-executor.js.map +1 -1
  89. package/dist-cjs/scenario-runner/adapters/index.js +14 -1
  90. package/dist-cjs/scenario-runner/adapters/index.js.map +1 -1
  91. package/dist-cjs/scenario-runner/adapters/websocket-executor.js +24 -0
  92. package/dist-cjs/scenario-runner/adapters/websocket-executor.js.map +1 -0
  93. package/dist-cjs/scenario-runner/condition.js +140 -3
  94. package/dist-cjs/scenario-runner/condition.js.map +1 -1
  95. package/dist-cjs/scenario-runner/graphTraversal.js +10 -1
  96. package/dist-cjs/scenario-runner/graphTraversal.js.map +1 -1
  97. package/dist-cjs/scenario-runner/index.js +1 -0
  98. package/dist-cjs/scenario-runner/index.js.map +1 -1
  99. package/dist-cjs/scenario-runner/nodePolicy.js +2 -0
  100. package/dist-cjs/scenario-runner/nodePolicy.js.map +1 -1
  101. package/dist-cjs/scenario-runner/runScenario.js +201 -1
  102. package/dist-cjs/scenario-runner/runScenario.js.map +1 -1
  103. package/dist-cjs/scenario-runner/websocket.js +79 -0
  104. package/dist-cjs/scenario-runner/websocket.js.map +1 -0
  105. package/package.json +1 -1
@@ -10,6 +10,8 @@ const mongoAdapter_js_1 = require("./mongoAdapter.js");
10
10
  const mysqlAdapter_js_1 = require("./mysqlAdapter.js");
11
11
  const oracleAdapter_js_1 = require("./oracleAdapter.js");
12
12
  const postgresAdapter_js_1 = require("./postgresAdapter.js");
13
+ const pgSessionManager_js_1 = require("./pgSessionManager.js");
14
+ const sqlState_js_1 = require("./sqlState.js");
13
15
  const templateResolver_js_1 = require("./templateResolver.js");
14
16
  const mssqlAdapter_js_1 = require("./mssqlAdapter.js");
15
17
  const executeAgainstConnection = async (connection, resolvedQuery, params = []) => {
@@ -30,7 +32,27 @@ const executeAgainstConnection = async (connection, resolvedQuery, params = [])
30
32
  // right driver, WITHOUT re-resolving templates. This is the canonical entry for
31
33
  // the scenario / `databaseExecutor` path (core's scenario runner resolves the
32
34
  // template before calling the host), so hosts must not duplicate adapter logic.
33
- const executeResolvedDbQuery = (input) => executeAgainstConnection(normalizeConnectionInput(input.connection), input.resolvedQuery, input.params ?? []);
35
+ //
36
+ // `session` (additive) routes the query through the run-scoped Postgres
37
+ // session instead of a one-shot client — see pgSessionManager. Only Postgres
38
+ // supports sessions; other providers fail with an actionable message so a
39
+ // `useSession` node never silently runs autocommit.
40
+ const executeResolvedDbQuery = (input) => {
41
+ const connection = normalizeConnectionInput(input.connection);
42
+ if (input.session) {
43
+ if (connection.type !== "postgres") {
44
+ return Promise.reject(new Error(`Scenario DB sessions are only supported for PostgreSQL connections (got "${connection.type}"). Disable 'Run in scenario transaction' on this node.`));
45
+ }
46
+ return (0, pgSessionManager_js_1.executePostgresQueryInSession)({
47
+ connection,
48
+ runId: input.session.runId,
49
+ transactionMode: input.session.transactionMode,
50
+ query: input.resolvedQuery,
51
+ params: input.params ?? [],
52
+ });
53
+ }
54
+ return executeAgainstConnection(connection, input.resolvedQuery, input.params ?? []);
55
+ };
34
56
  exports.executeResolvedDbQuery = executeResolvedDbQuery;
35
57
  const normalizeConnectionInput = (connectionInput) => ({
36
58
  id: connectionInput.id?.trim() || "runtime-connection",
@@ -50,6 +72,10 @@ const normalizeConnectionInput = (connectionInput) => ({
50
72
  password: connectionInput.password,
51
73
  ssl: connectionInput.ssl,
52
74
  trustServerCertificate: connectionInput.trustServerCertificate,
75
+ sslMode: connectionInput.sslMode,
76
+ caCert: connectionInput.caCert,
77
+ clientCert: connectionInput.clientCert,
78
+ clientKey: connectionInput.clientKey,
53
79
  });
54
80
  // Connectivity check for a draft/saved connection. Ported from the desktop
55
81
  // host so consumers (Electron `db:test-connection`) don't reimplement it.
@@ -109,7 +135,18 @@ const executeQuery = async (payload) => {
109
135
  }
110
136
  try {
111
137
  const resolvedQuery = (0, templateResolver_js_1.resolveTemplate)(payload.query, payload.context ?? {});
112
- const result = await executeAgainstConnection(connection, resolvedQuery, payload.params ?? []);
138
+ if (payload.session && connection.type !== "postgres") {
139
+ throw new Error(`Scenario DB sessions are only supported for PostgreSQL connections (got "${connection.type}"). Disable 'Run in scenario transaction' on this node.`);
140
+ }
141
+ const result = payload.session
142
+ ? await (0, pgSessionManager_js_1.executePostgresQueryInSession)({
143
+ connection,
144
+ runId: payload.session.runId,
145
+ transactionMode: payload.session.transactionMode,
146
+ query: resolvedQuery,
147
+ params: payload.params ?? [],
148
+ })
149
+ : await executeAgainstConnection(connection, resolvedQuery, payload.params ?? []);
113
150
  return {
114
151
  success: true,
115
152
  phase: payload.phase,
@@ -140,6 +177,7 @@ const executeQuery = async (payload) => {
140
177
  durationMs: Math.round(node_perf_hooks_1.performance.now() - startedAt),
141
178
  executedAt: new Date().toISOString(),
142
179
  error: error instanceof Error ? error.message : String(error),
180
+ ...((0, sqlState_js_1.extractSqlState)(error) ? { sqlState: (0, sqlState_js_1.extractSqlState)(error) } : {}),
143
181
  };
144
182
  }
145
183
  };
@@ -1 +1 @@
1
- {"version":3,"file":"queryExecutor.js","sourceRoot":"","sources":["../../../src/host/db/queryExecutor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queryExecutor.js","sourceRoot":"","sources":["../../../src/host/db/queryExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractSqlState = void 0;
4
+ // SQLSTATE extraction shared by the scenario db-executor, the host query
5
+ // executor, and desktop adapters. Postgres SQLSTATE is 5 alphanumeric chars;
6
+ // `pg` errors expose it as `.code`. `.sqlState` is checked first so hosts
7
+ // can attach it explicitly without colliding with Node's `error.code`
8
+ // values (e.g. ECONNREFUSED).
9
+ const extractSqlState = (error) => {
10
+ if (!error || typeof error !== "object")
11
+ return undefined;
12
+ const candidate = error.sqlState ?? error.code;
13
+ return typeof candidate === "string" && /^[0-9A-Z]{5}$/.test(candidate)
14
+ ? candidate
15
+ : undefined;
16
+ };
17
+ exports.extractSqlState = extractSqlState;
18
+ //# sourceMappingURL=sqlState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlState.js","sourceRoot":"","sources":["../../../src/host/db/sqlState.ts"],"names":[],"mappings":";;;AAAA,yEAAyE;AACzE,6EAA6E;AAC7E,0EAA0E;AAC1E,sEAAsE;AACtE,8BAA8B;AACvB,MAAM,eAAe,GAAG,CAAC,KAAc,EAAsB,EAAE;IACpE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,SAAS,GACZ,KAAgC,CAAC,QAAQ,IAAK,KAA4B,CAAC,IAAI,CAAC;IACnF,OAAO,OAAO,SAAS,KAAK,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC;QACrE,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC,CAAC;AAPW,QAAA,eAAe,mBAO1B"}
@@ -3,7 +3,7 @@
3
3
  // resolved connection runtimes into script capabilities. Lets the collection
4
4
  // runner execute `pm.db.*` and `pm.redis` without an external host process.
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.__setRedisDriverForTests = exports.REDIS_COMMAND_SPECS = exports.parseRedisCommand = exports.executeRedisCommands = exports.databaseConfigToDbConnection = exports.OracleConnectStringError = exports.normalizeOracleConnectString = exports.renderDbQueryReference = exports.stripTrailingSqlTerminator = exports.__setMssqlDriverForTests = exports.testMssqlConnection = exports.executeMssqlQuery = exports.__setOracleDriverForTests = exports.testOracleConnection = exports.executeOracleQuery = exports.__setMysqlDriverForTests = exports.testMysqlConnection = exports.executeMysqlQuery = exports.__setPostgresDriverForTests = exports.testPostgresConnection = exports.executePostgresQuery = exports.__setMongoDriverForTests = exports.testMongoConnection = exports.executeMongoQuery = exports.testDbConnection = exports.executeResolvedDbQuery = exports.executeQuery = exports.buildRedisCapability = exports.buildRedisValueCache = exports.runRedisCommandsForPhase = exports.runConfiguredDbQuery = exports.buildDbExecuteCapability = void 0;
6
+ exports.__setRedisDriverForTests = exports.REDIS_COMMAND_SPECS = exports.parseRedisCommand = exports.executeRedisCommands = exports.databaseConfigToDbConnection = exports.OracleConnectStringError = exports.normalizeOracleConnectString = exports.renderDbQueryReference = exports.extractSqlState = exports.buildPgClientConfig = exports.buildPgSslConfig = exports.stripTrailingSqlTerminator = exports.__setMssqlDriverForTests = exports.testMssqlConnection = exports.executeMssqlQuery = exports.__setOracleDriverForTests = exports.testOracleConnection = exports.executeOracleQuery = exports.__setMysqlDriverForTests = exports.testMysqlConnection = exports.executeMysqlQuery = exports.__setPostgresDriverForTests = exports.testPostgresConnection = exports.executePostgresQuery = exports.__setMongoDriverForTests = exports.testMongoConnection = exports.executeMongoQuery = exports.__getPgSessionCountForTests = exports.__setPgSessionDriverForTests = exports.closeAllPostgresSessions = exports.releasePostgresSessionsForRun = exports.executePostgresQueryInSession = exports.testDbConnection = exports.executeResolvedDbQuery = exports.executeQuery = exports.buildRedisCapability = exports.buildRedisValueCache = exports.runRedisCommandsForPhase = exports.runConfiguredDbQuery = exports.buildDbExecuteCapability = void 0;
7
7
  var connections_js_1 = require("./connections.js");
8
8
  Object.defineProperty(exports, "buildDbExecuteCapability", { enumerable: true, get: function () { return connections_js_1.buildDbExecuteCapability; } });
9
9
  Object.defineProperty(exports, "runConfiguredDbQuery", { enumerable: true, get: function () { return connections_js_1.runConfiguredDbQuery; } });
@@ -14,6 +14,16 @@ var queryExecutor_js_1 = require("./db/queryExecutor.js");
14
14
  Object.defineProperty(exports, "executeQuery", { enumerable: true, get: function () { return queryExecutor_js_1.executeQuery; } });
15
15
  Object.defineProperty(exports, "executeResolvedDbQuery", { enumerable: true, get: function () { return queryExecutor_js_1.executeResolvedDbQuery; } });
16
16
  Object.defineProperty(exports, "testDbConnection", { enumerable: true, get: function () { return queryExecutor_js_1.testDbConnection; } });
17
+ // Run-scoped Postgres sessions for `useSession` db nodes (BEGIN…ROLLBACK
18
+ // spanning multiple nodes). Hosts wire `releasePostgresSessionsForRun` into
19
+ // the `databaseSessionRelease` driver and `closeAllPostgresSessions` into
20
+ // process shutdown.
21
+ var pgSessionManager_js_1 = require("./db/pgSessionManager.js");
22
+ Object.defineProperty(exports, "executePostgresQueryInSession", { enumerable: true, get: function () { return pgSessionManager_js_1.executePostgresQueryInSession; } });
23
+ Object.defineProperty(exports, "releasePostgresSessionsForRun", { enumerable: true, get: function () { return pgSessionManager_js_1.releasePostgresSessionsForRun; } });
24
+ Object.defineProperty(exports, "closeAllPostgresSessions", { enumerable: true, get: function () { return pgSessionManager_js_1.closeAllPostgresSessions; } });
25
+ Object.defineProperty(exports, "__setPgSessionDriverForTests", { enumerable: true, get: function () { return pgSessionManager_js_1.__setPgSessionDriverForTests; } });
26
+ Object.defineProperty(exports, "__getPgSessionCountForTests", { enumerable: true, get: function () { return pgSessionManager_js_1.__getPgSessionCountForTests; } });
17
27
  // Individual adapters + connectivity checks, so hosts (Electron, backend) call
18
28
  // the single shared implementation instead of duplicating driver logic.
19
29
  var mongoAdapter_js_1 = require("./db/mongoAdapter.js");
@@ -38,6 +48,11 @@ Object.defineProperty(exports, "testMssqlConnection", { enumerable: true, get: f
38
48
  Object.defineProperty(exports, "__setMssqlDriverForTests", { enumerable: true, get: function () { return mssqlAdapter_js_1.__setMssqlDriverForTests; } });
39
49
  var sqlNormalize_js_1 = require("./db/sqlNormalize.js");
40
50
  Object.defineProperty(exports, "stripTrailingSqlTerminator", { enumerable: true, get: function () { return sqlNormalize_js_1.stripTrailingSqlTerminator; } });
51
+ var pgClientConfig_js_1 = require("./db/pgClientConfig.js");
52
+ Object.defineProperty(exports, "buildPgSslConfig", { enumerable: true, get: function () { return pgClientConfig_js_1.buildPgSslConfig; } });
53
+ Object.defineProperty(exports, "buildPgClientConfig", { enumerable: true, get: function () { return pgClientConfig_js_1.buildPgClientConfig; } });
54
+ var sqlState_js_1 = require("./db/sqlState.js");
55
+ Object.defineProperty(exports, "extractSqlState", { enumerable: true, get: function () { return sqlState_js_1.extractSqlState; } });
41
56
  var db_query_reference_js_1 = require("./db/db-query-reference.js");
42
57
  Object.defineProperty(exports, "renderDbQueryReference", { enumerable: true, get: function () { return db_query_reference_js_1.renderDbQueryReference; } });
43
58
  var oracleConnectString_js_1 = require("./db/oracleConnectString.js");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,6EAA6E;AAC7E,4EAA4E;;;AAE5E,mDAc0B;AAbxB,0HAAA,wBAAwB,OAAA;AACxB,sHAAA,oBAAoB,OAAA;AACpB,0HAAA,wBAAwB,OAAA;AACxB,sHAAA,oBAAoB,OAAA;AACpB,sHAAA,oBAAoB,OAAA;AAWtB,0DAI+B;AAH7B,gHAAA,YAAY,OAAA;AACZ,0HAAA,sBAAsB,OAAA;AACtB,oHAAA,gBAAgB,OAAA;AAElB,+EAA+E;AAC/E,wEAAwE;AACxE,wDAI8B;AAH5B,oHAAA,iBAAiB,OAAA;AACjB,sHAAA,mBAAmB,OAAA;AACnB,2HAAA,wBAAwB,OAAA;AAE1B,8DAIiC;AAH/B,0HAAA,oBAAoB,OAAA;AACpB,4HAAA,sBAAsB,OAAA;AACtB,iIAAA,2BAA2B,OAAA;AAE7B,wDAI8B;AAH5B,oHAAA,iBAAiB,OAAA;AACjB,sHAAA,mBAAmB,OAAA;AACnB,2HAAA,wBAAwB,OAAA;AAE1B,0DAI+B;AAH7B,sHAAA,kBAAkB,OAAA;AAClB,wHAAA,oBAAoB,OAAA;AACpB,6HAAA,yBAAyB,OAAA;AAE3B,wDAI8B;AAH5B,oHAAA,iBAAiB,OAAA;AACjB,sHAAA,mBAAmB,OAAA;AACnB,2HAAA,wBAAwB,OAAA;AAE1B,wDAAkE;AAAzD,6HAAA,0BAA0B,OAAA;AACnC,oEAAoE;AAA3D,+HAAA,sBAAsB,OAAA;AAC/B,sEAGqC;AAFnC,sIAAA,4BAA4B,OAAA;AAC5B,kIAAA,wBAAwB,OAAA;AAE1B,kEAImC;AAHjC,oIAAA,4BAA4B,OAAA;AAgB9B,2DAQiC;AAP/B,uHAAA,oBAAoB,OAAA;AACpB,oHAAA,iBAAiB,OAAA;AACjB,sHAAA,mBAAmB,OAAA;AACnB,2HAAA,wBAAwB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/host/index.ts"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,6EAA6E;AAC7E,4EAA4E;;;AAE5E,mDAc0B;AAbxB,0HAAA,wBAAwB,OAAA;AACxB,sHAAA,oBAAoB,OAAA;AACpB,0HAAA,wBAAwB,OAAA;AACxB,sHAAA,oBAAoB,OAAA;AACpB,sHAAA,oBAAoB,OAAA;AAWtB,0DAI+B;AAH7B,gHAAA,YAAY,OAAA;AACZ,0HAAA,sBAAsB,OAAA;AACtB,oHAAA,gBAAgB,OAAA;AAElB,yEAAyE;AACzE,4EAA4E;AAC5E,0EAA0E;AAC1E,oBAAoB;AACpB,gEAQkC;AAPhC,oIAAA,6BAA6B,OAAA;AAC7B,oIAAA,6BAA6B,OAAA;AAC7B,+HAAA,wBAAwB,OAAA;AACxB,mIAAA,4BAA4B,OAAA;AAC5B,kIAAA,2BAA2B,OAAA;AAI7B,+EAA+E;AAC/E,wEAAwE;AACxE,wDAI8B;AAH5B,oHAAA,iBAAiB,OAAA;AACjB,sHAAA,mBAAmB,OAAA;AACnB,2HAAA,wBAAwB,OAAA;AAE1B,8DAIiC;AAH/B,0HAAA,oBAAoB,OAAA;AACpB,4HAAA,sBAAsB,OAAA;AACtB,iIAAA,2BAA2B,OAAA;AAE7B,wDAI8B;AAH5B,oHAAA,iBAAiB,OAAA;AACjB,sHAAA,mBAAmB,OAAA;AACnB,2HAAA,wBAAwB,OAAA;AAE1B,0DAI+B;AAH7B,sHAAA,kBAAkB,OAAA;AAClB,wHAAA,oBAAoB,OAAA;AACpB,6HAAA,yBAAyB,OAAA;AAE3B,wDAI8B;AAH5B,oHAAA,iBAAiB,OAAA;AACjB,sHAAA,mBAAmB,OAAA;AACnB,2HAAA,wBAAwB,OAAA;AAE1B,wDAAkE;AAAzD,6HAAA,0BAA0B,OAAA;AACnC,4DAA+E;AAAtE,qHAAA,gBAAgB,OAAA;AAAE,wHAAA,mBAAmB,OAAA;AAC9C,gDAAmD;AAA1C,8GAAA,eAAe,OAAA;AACxB,oEAAoE;AAA3D,+HAAA,sBAAsB,OAAA;AAC/B,sEAGqC;AAFnC,sIAAA,4BAA4B,OAAA;AAC5B,kIAAA,wBAAwB,OAAA;AAE1B,kEAImC;AAHjC,oIAAA,4BAA4B,OAAA;AAgB9B,2DAQiC;AAP/B,uHAAA,oBAAoB,OAAA;AACpB,oHAAA,iBAAiB,OAAA;AACjB,sHAAA,mBAAmB,OAAA;AACnB,2HAAA,wBAAwB,OAAA"}
@@ -3,17 +3,90 @@
3
3
  // Resolves the workspace connection, defers the actual query execution
4
4
  // to the host-supplied `databaseExecutor` driver (mongoose / oracledb /
5
5
  // postgres / etc.), wraps the result in the scenario adapter shape.
6
+ //
7
+ // Also owns the two stored-function-testing semantics that must behave
8
+ // identically on every host: session capability detection (a `useSession`
9
+ // node on a host without `databaseSessionRelease` fails fast instead of
10
+ // silently running autocommit) and expected-error evaluation (pgTAP
11
+ // `throws_ok` equivalent — a matching failure PASSES the node).
6
12
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.buildDbExecutor = void 0;
13
+ exports.buildDbExecutor = exports.matchDbExpectedError = exports.extractSqlState = void 0;
8
14
  const abort_js_1 = require("./helpers/abort.js");
15
+ const sqlState_js_1 = require("../../host/db/sqlState.js");
16
+ Object.defineProperty(exports, "extractSqlState", { enumerable: true, get: function () { return sqlState_js_1.extractSqlState; } });
17
+ // Shared with hosts that build their own dbExecutor (desktop's IPC-backed
18
+ // adapter) so expectError semantics never drift between runners.
19
+ const matchDbExpectedError = (expectation, message, sqlState) => {
20
+ const wantedState = expectation.sqlState?.trim();
21
+ const wantedPattern = expectation.messagePattern?.trim();
22
+ if (wantedState && wantedState.toUpperCase() !== (sqlState ?? "").toUpperCase()) {
23
+ return {
24
+ matched: false,
25
+ mismatchReason: `expected SQLSTATE ${wantedState}, got ${sqlState ?? "none"}`,
26
+ };
27
+ }
28
+ if (wantedPattern) {
29
+ let re;
30
+ try {
31
+ re = new RegExp(wantedPattern);
32
+ }
33
+ catch {
34
+ return {
35
+ matched: false,
36
+ mismatchReason: `invalid expectError.messagePattern regex: ${wantedPattern}`,
37
+ };
38
+ }
39
+ if (!re.test(message)) {
40
+ return {
41
+ matched: false,
42
+ mismatchReason: `error message did not match /${wantedPattern}/`,
43
+ };
44
+ }
45
+ }
46
+ if (!wantedState && !wantedPattern) {
47
+ // An empty expectation still means "this query must fail".
48
+ return { matched: true, mismatchReason: null };
49
+ }
50
+ return { matched: true, mismatchReason: null };
51
+ };
52
+ exports.matchDbExpectedError = matchDbExpectedError;
9
53
  const buildDbExecutor = (options) => async (input) => {
10
54
  const connection = await options.resolveConnection(input.node.data.config.connectionId);
55
+ const expectError = input.node.data.config.expectError;
56
+ const hasExpectation = Boolean(expectError && (expectError.sqlState?.trim() || expectError.messagePattern?.trim()));
57
+ if (input.session && !options.drivers.databaseSessionRelease) {
58
+ return {
59
+ rawResult: { success: false, rows: [], rowCount: 0, error: "sessions unsupported" },
60
+ dbResult: null,
61
+ outputData: null,
62
+ failureMessage: "This node uses a scenario DB session, but the current runner does not support DB sessions. Run it via a host with session support or disable 'Run in scenario transaction'.",
63
+ };
64
+ }
11
65
  try {
12
66
  const result = await (0, abort_js_1.withAbortAndTimeout)(options.drivers.databaseExecutor({
13
67
  connection,
14
68
  resolvedQuery: input.resolvedQuery,
15
69
  resolvedParams: input.resolvedParams,
70
+ session: input.session,
16
71
  }), options.nodeTimeoutMs, `Database node ${input.stepId}`, input.signal);
72
+ if (hasExpectation) {
73
+ return {
74
+ rawResult: {
75
+ success: false,
76
+ rows: result.rows,
77
+ rowCount: result.rowCount,
78
+ error: "expected an error but the query succeeded",
79
+ },
80
+ dbResult: result.rows,
81
+ outputData: { rows: result.rows, rowCount: result.rowCount },
82
+ failureMessage: `Expected the query to fail (${[
83
+ expectError?.sqlState ? `SQLSTATE ${expectError.sqlState}` : null,
84
+ expectError?.messagePattern ? `message /${expectError.messagePattern}/` : null,
85
+ ]
86
+ .filter(Boolean)
87
+ .join(", ")}), but it succeeded.`,
88
+ };
89
+ }
17
90
  return {
18
91
  rawResult: {
19
92
  success: true,
@@ -30,16 +103,49 @@ const buildDbExecutor = (options) => async (input) => {
30
103
  }
31
104
  catch (error) {
32
105
  const message = error instanceof Error ? error.message : String(error);
106
+ const sqlState = (0, sqlState_js_1.extractSqlState)(error);
107
+ if (hasExpectation && expectError) {
108
+ const { matched, mismatchReason } = (0, exports.matchDbExpectedError)(expectError, message, sqlState);
109
+ if (matched) {
110
+ const expectedError = { sqlState: sqlState ?? null, message };
111
+ return {
112
+ rawResult: {
113
+ success: true,
114
+ rows: [],
115
+ rowCount: 0,
116
+ ...(sqlState ? { sqlState } : {}),
117
+ },
118
+ dbResult: null,
119
+ outputData: { expectedError, rows: [], rowCount: 0 },
120
+ failureMessage: null,
121
+ };
122
+ }
123
+ return {
124
+ rawResult: {
125
+ success: false,
126
+ rows: [],
127
+ rowCount: 0,
128
+ error: message,
129
+ ...(sqlState ? { sqlState } : {}),
130
+ },
131
+ dbResult: null,
132
+ outputData: null,
133
+ failureMessage: `Query failed, but not as expected (${mismatchReason}). Actual error: ${message}`,
134
+ };
135
+ }
33
136
  return {
34
137
  rawResult: {
35
138
  success: false,
36
139
  rows: [],
37
140
  rowCount: 0,
38
141
  error: message,
142
+ ...(sqlState ? { sqlState } : {}),
39
143
  },
40
144
  dbResult: null,
41
145
  outputData: null,
42
- failureMessage: message || "Database query failed.",
146
+ failureMessage: sqlState
147
+ ? `${sqlState}: ${message || "Database query failed."}`
148
+ : message || "Database query failed.",
43
149
  };
44
150
  }
45
151
  };
@@ -1 +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,iDAAyD;AAGlD,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,IAAA,8BAAmB,EACtC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAC/B,UAAU;YACV,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,cAAc,EAAE,KAAK,CAAC,cAAc;SACrC,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;AA5CS,QAAA,eAAe,mBA4CxB"}
1
+ {"version":3,"file":"db-executor.js","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/db-executor.ts"],"names":[],"mappings":"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"}
@@ -8,25 +8,36 @@
8
8
  // (HTTP, DB, Redis, Kafka). Script + notification executors default to
9
9
  // canonical core implementations but can be overridden.
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.summarizeContractResults = exports.buildRequestFailureMessage = exports.evaluateScenarioExpectedStatus = exports.buildScriptExecutor = exports.buildRequestExecutor = exports.buildRedisExecutor = exports.buildNotificationExecutor = exports.buildKafkaExecutor = exports.buildDbExecutor = exports.buildScenarioRuntimeAdapters = void 0;
11
+ exports.summarizeContractResults = exports.buildRequestFailureMessage = exports.evaluateScenarioExpectedStatus = exports.buildWebsocketExecutor = exports.buildScriptExecutor = exports.buildRequestExecutor = exports.buildRedisExecutor = exports.buildNotificationExecutor = exports.buildKafkaExecutor = exports.matchDbExpectedError = exports.extractSqlState = exports.buildDbExecutor = exports.buildScenarioRuntimeAdapters = void 0;
12
12
  const db_executor_js_1 = require("./db-executor.js");
13
13
  const kafka_executor_js_1 = require("./kafka-executor.js");
14
14
  const notification_executor_js_1 = require("./notification-executor.js");
15
15
  const redis_executor_js_1 = require("./redis-executor.js");
16
16
  const request_executor_js_1 = require("./request-executor.js");
17
17
  const script_executor_js_1 = require("./script-executor.js");
18
+ const websocket_executor_js_1 = require("./websocket-executor.js");
18
19
  const buildScenarioRuntimeAdapters = (options) => ({
19
20
  requestExecutor: (0, request_executor_js_1.buildRequestExecutor)(options),
20
21
  dbExecutor: (0, db_executor_js_1.buildDbExecutor)(options),
21
22
  redisExecutor: (0, redis_executor_js_1.buildRedisExecutor)(options),
22
23
  kafkaExecutor: (0, kafka_executor_js_1.buildKafkaExecutor)(options),
24
+ websocketExecutor: (0, websocket_executor_js_1.buildWebsocketExecutor)(options),
23
25
  scriptExecutor: options.scriptExecutor ?? (0, script_executor_js_1.buildScriptExecutor)(options),
24
26
  notificationExecutor: options.notificationExecutor ?? (0, notification_executor_js_1.buildNotificationExecutor)(options),
27
+ // Present only when the host driver supports run-scoped DB sessions —
28
+ // its absence is how the runner detects "sessions unsupported here".
29
+ ...(options.drivers.databaseSessionRelease
30
+ ? {
31
+ dbSessionRelease: (input) => options.drivers.databaseSessionRelease(input),
32
+ }
33
+ : {}),
25
34
  });
26
35
  exports.buildScenarioRuntimeAdapters = buildScenarioRuntimeAdapters;
27
36
  // Re-exports so callers don't have to import from sibling files.
28
37
  var db_executor_js_2 = require("./db-executor.js");
29
38
  Object.defineProperty(exports, "buildDbExecutor", { enumerable: true, get: function () { return db_executor_js_2.buildDbExecutor; } });
39
+ Object.defineProperty(exports, "extractSqlState", { enumerable: true, get: function () { return db_executor_js_2.extractSqlState; } });
40
+ Object.defineProperty(exports, "matchDbExpectedError", { enumerable: true, get: function () { return db_executor_js_2.matchDbExpectedError; } });
30
41
  var kafka_executor_js_2 = require("./kafka-executor.js");
31
42
  Object.defineProperty(exports, "buildKafkaExecutor", { enumerable: true, get: function () { return kafka_executor_js_2.buildKafkaExecutor; } });
32
43
  var notification_executor_js_2 = require("./notification-executor.js");
@@ -37,6 +48,8 @@ var request_executor_js_2 = require("./request-executor.js");
37
48
  Object.defineProperty(exports, "buildRequestExecutor", { enumerable: true, get: function () { return request_executor_js_2.buildRequestExecutor; } });
38
49
  var script_executor_js_2 = require("./script-executor.js");
39
50
  Object.defineProperty(exports, "buildScriptExecutor", { enumerable: true, get: function () { return script_executor_js_2.buildScriptExecutor; } });
51
+ var websocket_executor_js_2 = require("./websocket-executor.js");
52
+ Object.defineProperty(exports, "buildWebsocketExecutor", { enumerable: true, get: function () { return websocket_executor_js_2.buildWebsocketExecutor; } });
40
53
  // Expected-status (no-code negative testing) + failure-message helpers —
41
54
  // exported so hosts with their own request pipelines (desktop interactive
42
55
  // run) evaluate the exact same semantics instead of duplicating them.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/index.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,EAAE;AACF,gEAAgE;AAChE,6DAA6D;AAC7D,qEAAqE;AACrE,qEAAqE;AACrE,uEAAuE;AACvE,wDAAwD;;;AAIxD,qDAAmD;AACnD,2DAAyD;AACzD,yEAAuE;AACvE,2DAAyD;AACzD,+DAA6D;AAC7D,6DAA2D;AAIpD,MAAM,4BAA4B,GAAG,CAC1C,OAA6C,EACpB,EAAE,CAAC,CAAC;IAC7B,eAAe,EAAE,IAAA,0CAAoB,EAAC,OAAO,CAAC;IAC9C,UAAU,EAAE,IAAA,gCAAe,EAAC,OAAO,CAAC;IACpC,aAAa,EAAE,IAAA,sCAAkB,EAAC,OAAO,CAAC;IAC1C,aAAa,EAAE,IAAA,sCAAkB,EAAC,OAAO,CAAC;IAC1C,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAA,wCAAmB,EAAC,OAAO,CAAC;IACtE,oBAAoB,EAClB,OAAO,CAAC,oBAAoB,IAAI,IAAA,oDAAyB,EAAC,OAAO,CAAC;CACrE,CAAC,CAAC;AAVU,QAAA,4BAA4B,gCAUtC;AAEH,iEAAiE;AACjE,mDAAmD;AAA1C,iHAAA,eAAe,OAAA;AACxB,yDAAyD;AAAhD,uHAAA,kBAAkB,OAAA;AAC3B,uEAAuE;AAA9D,qIAAA,yBAAyB,OAAA;AAClC,yDAAyD;AAAhD,uHAAA,kBAAkB,OAAA;AAC3B,6DAA6D;AAApD,2HAAA,oBAAoB,OAAA;AAC7B,2DAA2D;AAAlD,yHAAA,mBAAmB,OAAA;AAC5B,yEAAyE;AACzE,0EAA0E;AAC1E,sEAAsE;AACtE,mEAGsC;AAFpC,oIAAA,8BAA8B,OAAA;AAGhC,qEAIuC;AAHrC,iIAAA,0BAA0B,OAAA;AAC1B,+HAAA,wBAAwB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/index.ts"],"names":[],"mappings":";AAAA,6DAA6D;AAC7D,EAAE;AACF,gEAAgE;AAChE,6DAA6D;AAC7D,qEAAqE;AACrE,qEAAqE;AACrE,uEAAuE;AACvE,wDAAwD;;;AAIxD,qDAAmD;AACnD,2DAAyD;AACzD,yEAAuE;AACvE,2DAAyD;AACzD,+DAA6D;AAC7D,6DAA2D;AAC3D,mEAAiE;AAI1D,MAAM,4BAA4B,GAAG,CAC1C,OAA6C,EACpB,EAAE,CAAC,CAAC;IAC7B,eAAe,EAAE,IAAA,0CAAoB,EAAC,OAAO,CAAC;IAC9C,UAAU,EAAE,IAAA,gCAAe,EAAC,OAAO,CAAC;IACpC,aAAa,EAAE,IAAA,sCAAkB,EAAC,OAAO,CAAC;IAC1C,aAAa,EAAE,IAAA,sCAAkB,EAAC,OAAO,CAAC;IAC1C,iBAAiB,EAAE,IAAA,8CAAsB,EAAC,OAAO,CAAC;IAClD,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAA,wCAAmB,EAAC,OAAO,CAAC;IACtE,oBAAoB,EAClB,OAAO,CAAC,oBAAoB,IAAI,IAAA,oDAAyB,EAAC,OAAO,CAAC;IACpE,sEAAsE;IACtE,qEAAqE;IACrE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,sBAAsB;QACxC,CAAC,CAAC;YACE,gBAAgB,EAAE,CAAC,KAAwD,EAAE,EAAE,CAC7E,OAAO,CAAC,OAAO,CAAC,sBAAuB,CAAC,KAAK,CAAC;SACjD;QACH,CAAC,CAAC,EAAE,CAAC;CACR,CAAC,CAAC;AAnBU,QAAA,4BAA4B,gCAmBtC;AAEH,iEAAiE;AACjE,mDAI0B;AAHxB,iHAAA,eAAe,OAAA;AACf,iHAAA,eAAe,OAAA;AACf,sHAAA,oBAAoB,OAAA;AAEtB,yDAAyD;AAAhD,uHAAA,kBAAkB,OAAA;AAC3B,uEAAuE;AAA9D,qIAAA,yBAAyB,OAAA;AAClC,yDAAyD;AAAhD,uHAAA,kBAAkB,OAAA;AAC3B,6DAA6D;AAApD,2HAAA,oBAAoB,OAAA;AAC7B,2DAA2D;AAAlD,yHAAA,mBAAmB,OAAA;AAC5B,iEAAiE;AAAxD,+HAAA,sBAAsB,OAAA;AAC/B,yEAAyE;AACzE,0EAA0E;AAC1E,sEAAsE;AACtE,mEAGsC;AAFpC,oIAAA,8BAA8B,OAAA;AAGhC,qEAIuC;AAHrC,iIAAA,0BAA0B,OAAA;AAC1B,+HAAA,wBAAwB,OAAA"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ // Canonical websocket executor — the node has NO stored connection (the URL
3
+ // lives inline like the request node), so this is a thin dispatch to the
4
+ // host-supplied conversation driver. A host without one fails the node with
5
+ // an actionable message instead of a TypeError.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.buildWebsocketExecutor = void 0;
8
+ const buildWebsocketExecutor = (options) => async (input) => {
9
+ const driver = options.drivers.websocketExecutor;
10
+ if (!driver) {
11
+ return {
12
+ connected: false,
13
+ connectError: "This host cannot run WebSocket nodes (driver missing).",
14
+ messages: [],
15
+ stepOutcomes: [],
16
+ closeCode: null,
17
+ closeReason: null,
18
+ durationMs: 0,
19
+ };
20
+ }
21
+ return driver(input);
22
+ };
23
+ exports.buildWebsocketExecutor = buildWebsocketExecutor;
24
+ //# sourceMappingURL=websocket-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-executor.js","sourceRoot":"","sources":["../../../src/scenario-runner/adapters/websocket-executor.ts"],"names":[],"mappings":";AAAA,4EAA4E;AAC5E,yEAAyE;AACzE,4EAA4E;AAC5E,gDAAgD;;;AASzC,MAAM,sBAAsB,GAAG,CACpC,OAA6C,EAC7C,EAAE,CACF,KAAK,EACH,KAAsC,EACK,EAAE;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;IACjD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,wDAAwD;YACtE,QAAQ,EAAE,EAAE;YACZ,YAAY,EAAE,EAAE;YAChB,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,CAAC;SACd,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC,CAAC;AAnBS,QAAA,sBAAsB,0BAmB/B"}