callman-core 1.9.1 → 1.11.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 (146) hide show
  1. package/ai-packs/feature-policy.md +26 -0
  2. package/ai-packs/pm-api.md +213 -0
  3. package/ai-packs/sandbox-globals.md +20 -0
  4. package/ai-packs/templating.md +104 -0
  5. package/dist/host/connections.d.ts +67 -0
  6. package/dist/host/connections.d.ts.map +1 -0
  7. package/dist/host/connections.js +156 -0
  8. package/dist/host/connections.js.map +1 -0
  9. package/dist/host/db/mongoAdapter.d.ts +7 -0
  10. package/dist/host/db/mongoAdapter.d.ts.map +1 -0
  11. package/dist/host/db/mongoAdapter.js +426 -0
  12. package/dist/host/db/mongoAdapter.js.map +1 -0
  13. package/dist/host/db/mysqlAdapter.d.ts +7 -0
  14. package/dist/host/db/mysqlAdapter.d.ts.map +1 -0
  15. package/dist/host/db/mysqlAdapter.js +68 -0
  16. package/dist/host/db/mysqlAdapter.js.map +1 -0
  17. package/dist/host/db/oracleAdapter.d.ts +7 -0
  18. package/dist/host/db/oracleAdapter.d.ts.map +1 -0
  19. package/dist/host/db/oracleAdapter.js +142 -0
  20. package/dist/host/db/oracleAdapter.js.map +1 -0
  21. package/dist/host/db/oracleConnectString.d.ts +10 -0
  22. package/dist/host/db/oracleConnectString.d.ts.map +1 -0
  23. package/dist/host/db/oracleConnectString.js +58 -0
  24. package/dist/host/db/oracleConnectString.js.map +1 -0
  25. package/dist/host/db/postgresAdapter.d.ts +7 -0
  26. package/dist/host/db/postgresAdapter.d.ts.map +1 -0
  27. package/dist/host/db/postgresAdapter.js +67 -0
  28. package/dist/host/db/postgresAdapter.js.map +1 -0
  29. package/dist/host/db/queryExecutor.d.ts +3 -0
  30. package/dist/host/db/queryExecutor.d.ts.map +1 -0
  31. package/dist/host/db/queryExecutor.js +97 -0
  32. package/dist/host/db/queryExecutor.js.map +1 -0
  33. package/dist/host/db/sqlNormalize.d.ts +3 -0
  34. package/dist/host/db/sqlNormalize.d.ts.map +1 -0
  35. package/dist/host/db/sqlNormalize.js +29 -0
  36. package/dist/host/db/sqlNormalize.js.map +1 -0
  37. package/dist/host/db/templateResolver.d.ts +3 -0
  38. package/dist/host/db/templateResolver.d.ts.map +1 -0
  39. package/dist/host/db/templateResolver.js +77 -0
  40. package/dist/host/db/templateResolver.js.map +1 -0
  41. package/dist/host/db/types.d.ts +59 -0
  42. package/dist/host/db/types.d.ts.map +1 -0
  43. package/dist/host/db/types.js +6 -0
  44. package/dist/host/db/types.js.map +1 -0
  45. package/dist/host/index.d.ts +6 -0
  46. package/dist/host/index.d.ts.map +1 -0
  47. package/dist/host/index.js +7 -0
  48. package/dist/host/index.js.map +1 -0
  49. package/dist/host/lazy.d.ts +3 -0
  50. package/dist/host/lazy.d.ts.map +1 -0
  51. package/dist/host/lazy.js +31 -0
  52. package/dist/host/lazy.js.map +1 -0
  53. package/dist/host/redis/redisService.d.ts +9 -0
  54. package/dist/host/redis/redisService.d.ts.map +1 -0
  55. package/dist/host/redis/redisService.js +264 -0
  56. package/dist/host/redis/redisService.js.map +1 -0
  57. package/dist/host/redis/types.d.ts +44 -0
  58. package/dist/host/redis/types.d.ts.map +1 -0
  59. package/dist/host/redis/types.js +4 -0
  60. package/dist/host/redis/types.js.map +1 -0
  61. package/dist/index.d.ts +5 -0
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +4 -0
  64. package/dist/index.js.map +1 -1
  65. package/dist/runner/requestRunner.d.ts.map +1 -1
  66. package/dist/runner/requestRunner.js +120 -0
  67. package/dist/runner/requestRunner.js.map +1 -1
  68. package/dist/runner/runCollection.d.ts +1 -1
  69. package/dist/runner/runCollection.d.ts.map +1 -1
  70. package/dist/runner/runCollection.js +3 -1
  71. package/dist/runner/runCollection.js.map +1 -1
  72. package/dist/scenario-runner/adapters/script-executor.js +3 -3
  73. package/dist/scenario-runner/adapters/script-executor.js.map +1 -1
  74. package/dist/script/features/log.d.ts.map +1 -1
  75. package/dist/script/features/log.js +23 -4
  76. package/dist/script/features/log.js.map +1 -1
  77. package/dist/script/isolated-runner.d.ts +11 -0
  78. package/dist/script/isolated-runner.d.ts.map +1 -0
  79. package/dist/script/isolated-runner.js +172 -0
  80. package/dist/script/isolated-runner.js.map +1 -0
  81. package/dist/script/legacy.d.ts.map +1 -1
  82. package/dist/script/legacy.js +8 -0
  83. package/dist/script/legacy.js.map +1 -1
  84. package/dist/script/pm-api-metadata.d.ts +19 -0
  85. package/dist/script/pm-api-metadata.d.ts.map +1 -0
  86. package/dist/script/pm-api-metadata.js +264 -0
  87. package/dist/script/pm-api-metadata.js.map +1 -0
  88. package/dist/script/scope.d.ts +2 -0
  89. package/dist/script/scope.d.ts.map +1 -1
  90. package/dist/script/scope.js +4 -0
  91. package/dist/script/scope.js.map +1 -1
  92. package/dist/script/worker-entry.d.ts +2 -0
  93. package/dist/script/worker-entry.d.ts.map +1 -0
  94. package/dist/script/worker-entry.js +79 -0
  95. package/dist/script/worker-entry.js.map +1 -0
  96. package/dist/types/index.d.ts +11 -0
  97. package/dist/types/index.d.ts.map +1 -1
  98. package/dist-cjs/host/connections.js +164 -0
  99. package/dist-cjs/host/connections.js.map +1 -0
  100. package/dist-cjs/host/db/mongoAdapter.js +431 -0
  101. package/dist-cjs/host/db/mongoAdapter.js.map +1 -0
  102. package/dist-cjs/host/db/mysqlAdapter.js +73 -0
  103. package/dist-cjs/host/db/mysqlAdapter.js.map +1 -0
  104. package/dist-cjs/host/db/oracleAdapter.js +147 -0
  105. package/dist-cjs/host/db/oracleAdapter.js.map +1 -0
  106. package/dist-cjs/host/db/oracleConnectString.js +63 -0
  107. package/dist-cjs/host/db/oracleConnectString.js.map +1 -0
  108. package/dist-cjs/host/db/postgresAdapter.js +72 -0
  109. package/dist-cjs/host/db/postgresAdapter.js.map +1 -0
  110. package/dist-cjs/host/db/queryExecutor.js +101 -0
  111. package/dist-cjs/host/db/queryExecutor.js.map +1 -0
  112. package/dist-cjs/host/db/sqlNormalize.js +33 -0
  113. package/dist-cjs/host/db/sqlNormalize.js.map +1 -0
  114. package/dist-cjs/host/db/templateResolver.js +81 -0
  115. package/dist-cjs/host/db/templateResolver.js.map +1 -0
  116. package/dist-cjs/host/db/types.js +7 -0
  117. package/dist-cjs/host/db/types.js.map +1 -0
  118. package/dist-cjs/host/index.js +17 -0
  119. package/dist-cjs/host/index.js.map +1 -0
  120. package/dist-cjs/host/lazy.js +69 -0
  121. package/dist-cjs/host/lazy.js.map +1 -0
  122. package/dist-cjs/host/redis/redisService.js +268 -0
  123. package/dist-cjs/host/redis/redisService.js.map +1 -0
  124. package/dist-cjs/host/redis/types.js +5 -0
  125. package/dist-cjs/host/redis/types.js.map +1 -0
  126. package/dist-cjs/index.js +10 -1
  127. package/dist-cjs/index.js.map +1 -1
  128. package/dist-cjs/runner/requestRunner.js +120 -0
  129. package/dist-cjs/runner/requestRunner.js.map +1 -1
  130. package/dist-cjs/runner/runCollection.js +3 -1
  131. package/dist-cjs/runner/runCollection.js.map +1 -1
  132. package/dist-cjs/scenario-runner/adapters/script-executor.js +3 -3
  133. package/dist-cjs/scenario-runner/adapters/script-executor.js.map +1 -1
  134. package/dist-cjs/script/features/log.js +23 -4
  135. package/dist-cjs/script/features/log.js.map +1 -1
  136. package/dist-cjs/script/isolated-runner.js +209 -0
  137. package/dist-cjs/script/isolated-runner.js.map +1 -0
  138. package/dist-cjs/script/legacy.js +8 -0
  139. package/dist-cjs/script/legacy.js.map +1 -1
  140. package/dist-cjs/script/pm-api-metadata.js +267 -0
  141. package/dist-cjs/script/pm-api-metadata.js.map +1 -0
  142. package/dist-cjs/script/scope.js +5 -1
  143. package/dist-cjs/script/scope.js.map +1 -1
  144. package/dist-cjs/script/worker-entry.js +81 -0
  145. package/dist-cjs/script/worker-entry.js.map +1 -0
  146. package/package.json +15 -3
@@ -0,0 +1,142 @@
1
+ // Oracle adapter. Ported from `pmanfrontend/electron/db/oracleAdapter.ts` with
2
+ // lazy `oracledb` loading via `loadOptionalModule`. node-oracledb 6 runs in
3
+ // Thin mode (pure JS, no Instant Client), so it installs cleanly as an
4
+ // optional dependency.
5
+ import { loadOptionalModule } from "../lazy.js";
6
+ import { OracleConnectStringError, normalizeOracleConnectString, } from "./oracleConnectString.js";
7
+ import { stripTrailingSqlTerminator } from "./sqlNormalize.js";
8
+ const unwrap = (mod) => (mod && mod.default ? mod.default : mod);
9
+ const loadOracleDriver = async () => {
10
+ try {
11
+ return unwrap(await loadOptionalModule("oracledb"));
12
+ }
13
+ catch {
14
+ throw new Error("Oracle driver (`oracledb`) is not installed. Install `oracledb` to use Oracle connections.");
15
+ }
16
+ };
17
+ // node-oracledb in Thin mode only supports Oracle 12.1+, so old servers
18
+ // (e.g. 11.2) report NJS-138 here. Point the user at the server-side path,
19
+ // which runs Thick mode.
20
+ const describeOracleError = (error) => {
21
+ const message = error instanceof Error ? error.message : String(error);
22
+ if (/NJS-138/i.test(message)) {
23
+ return new Error(`${message} — Oracle Thin mode only supports Oracle 12.1+. To use an older ` +
24
+ `Oracle server (e.g. 11.2), connect through the server (it runs Thick mode).`);
25
+ }
26
+ return error instanceof Error ? error : new Error(message);
27
+ };
28
+ const buildConnectString = (connection) => {
29
+ if (connection.connectionString?.trim()) {
30
+ try {
31
+ return normalizeOracleConnectString(connection.connectionString);
32
+ }
33
+ catch (error) {
34
+ if (error instanceof OracleConnectStringError) {
35
+ throw new Error(error.message);
36
+ }
37
+ throw error;
38
+ }
39
+ }
40
+ const serviceName = connection.serviceName?.trim() || connection.database?.trim();
41
+ if (!serviceName) {
42
+ throw new Error("Oracle service name is required");
43
+ }
44
+ return `${connection.host.trim()}:${connection.port}/${serviceName}`;
45
+ };
46
+ const formatUuidFromBytes = (bytes) => {
47
+ const hex = Buffer.from(bytes).toString("hex");
48
+ return [
49
+ hex.slice(0, 8),
50
+ hex.slice(8, 12),
51
+ hex.slice(12, 16),
52
+ hex.slice(16, 20),
53
+ hex.slice(20, 32),
54
+ ].join("-");
55
+ };
56
+ const normalizeOracleBinaryValue = (value) => {
57
+ if (value.byteLength === 16) {
58
+ return formatUuidFromBytes(value);
59
+ }
60
+ return Buffer.from(value).toString("hex");
61
+ };
62
+ const normalizeOracleValue = (value) => {
63
+ if (value === null || value === undefined) {
64
+ return value;
65
+ }
66
+ if (typeof value === "string" ||
67
+ typeof value === "number" ||
68
+ typeof value === "boolean") {
69
+ return value;
70
+ }
71
+ if (typeof value === "bigint") {
72
+ return value.toString();
73
+ }
74
+ if (value instanceof Date) {
75
+ return value.toISOString();
76
+ }
77
+ if (Buffer.isBuffer(value)) {
78
+ return normalizeOracleBinaryValue(value);
79
+ }
80
+ if (value instanceof Uint8Array) {
81
+ return normalizeOracleBinaryValue(value);
82
+ }
83
+ if (Array.isArray(value)) {
84
+ return value.map(normalizeOracleValue);
85
+ }
86
+ if (typeof value === "object") {
87
+ return Object.fromEntries(Object.entries(value).map(([key, entryValue]) => [
88
+ key,
89
+ normalizeOracleValue(entryValue),
90
+ ]));
91
+ }
92
+ return String(value);
93
+ };
94
+ export const testOracleConnection = async (connection) => {
95
+ const oracledb = await loadOracleDriver();
96
+ let client;
97
+ try {
98
+ client = await oracledb.getConnection({
99
+ user: connection.username,
100
+ password: connection.password,
101
+ connectString: buildConnectString(connection),
102
+ });
103
+ }
104
+ catch (error) {
105
+ throw describeOracleError(error);
106
+ }
107
+ await client.close();
108
+ };
109
+ export const executeOracleQuery = async (connection, query) => {
110
+ const oracledb = await loadOracleDriver();
111
+ let client;
112
+ try {
113
+ client = await oracledb.getConnection({
114
+ user: connection.username,
115
+ password: connection.password,
116
+ connectString: buildConnectString(connection),
117
+ });
118
+ }
119
+ catch (error) {
120
+ throw describeOracleError(error);
121
+ }
122
+ try {
123
+ const finalQuery = stripTrailingSqlTerminator(query, "oracle");
124
+ const result = await client.execute(finalQuery, [], {
125
+ outFormat: oracledb.OUT_FORMAT_OBJECT,
126
+ // Each query runs on a fresh connection that closes immediately, so
127
+ // without auto-commit DML would be silently rolled back on close.
128
+ autoCommit: true,
129
+ });
130
+ const rows = Array.isArray(result.rows)
131
+ ? result.rows.map(normalizeOracleValue)
132
+ : [];
133
+ return {
134
+ rows,
135
+ rowCount: typeof result.rowsAffected === "number" ? result.rowsAffected : rows.length,
136
+ };
137
+ }
138
+ finally {
139
+ await client.close();
140
+ }
141
+ };
142
+ //# sourceMappingURL=oracleAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oracleAdapter.js","sourceRoot":"","sources":["../../../src/host/db/oracleAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare class OracleConnectStringError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ /**
5
+ * Normalise an Oracle connect string into a form node-oracledb accepts.
6
+ * Non-JDBC input is returned untouched. Simple JDBC thin URLs are converted;
7
+ * anything that can't be safely converted throws `OracleConnectStringError`.
8
+ */
9
+ export declare const normalizeOracleConnectString: (raw: string) => string;
10
+ //# sourceMappingURL=oracleConnectString.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oracleConnectString.d.ts","sourceRoot":"","sources":["../../../src/host/db/oracleConnectString.ts"],"names":[],"mappings":"AAcA,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAID;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,GAAI,KAAK,MAAM,KAAG,MAwC1D,CAAC"}
@@ -0,0 +1,58 @@
1
+ // Oracle connect-string normalisation for the host adapter.
2
+ //
3
+ // node-oracledb only accepts "Easy Connect" strings (host:port/service) or a
4
+ // full TNS connect descriptor — it rejects Java JDBC URLs with NJS-515. Users
5
+ // routinely paste a JDBC thin URL (`jdbc:oracle:thin:@host:port:SID`) copied
6
+ // from DBeaver / SQL Developer, so we transparently convert the simple,
7
+ // unambiguous JDBC shapes and raise an actionable error for the rest instead
8
+ // of silently guessing a wrong descriptor.
9
+ //
10
+ // Ported from `pmanfrontend/electron/db/oracleConnectString.ts` (itself a
11
+ // mirror of `p_man_backend/.../oracle-connect-string.ts`). Keep the copies in
12
+ // sync.
13
+ // Carries a user-facing message; the adapter re-wraps it as a plain Error.
14
+ export class OracleConnectStringError extends Error {
15
+ constructor(message) {
16
+ super(message);
17
+ this.name = "OracleConnectStringError";
18
+ }
19
+ }
20
+ const JDBC_THIN_PREFIX = /^jdbc:oracle:thin:@/i;
21
+ /**
22
+ * Normalise an Oracle connect string into a form node-oracledb accepts.
23
+ * Non-JDBC input is returned untouched. Simple JDBC thin URLs are converted;
24
+ * anything that can't be safely converted throws `OracleConnectStringError`.
25
+ */
26
+ export const normalizeOracleConnectString = (raw) => {
27
+ const s = raw.trim();
28
+ // Already Easy Connect / TNS descriptor / something node-oracledb handles.
29
+ if (!JDBC_THIN_PREFIX.test(s)) {
30
+ return s;
31
+ }
32
+ let rest = s.replace(JDBC_THIN_PREFIX, "").trim();
33
+ // Full TNS connect descriptor — node-oracledb supports it verbatim.
34
+ if (rest.startsWith("(")) {
35
+ return rest;
36
+ }
37
+ // `//host:port/service` — drop the leading slashes and fall through.
38
+ if (rest.startsWith("//")) {
39
+ rest = rest.slice(2);
40
+ }
41
+ // `host:port/service` — unambiguous Easy Connect.
42
+ if (/^[^:/@\s]+:\d+\/[^:\s]+$/.test(rest)) {
43
+ return rest;
44
+ }
45
+ // `host:port:SID` — SID form. Easy Connect can't reliably express a SID, so
46
+ // build an explicit TNS descriptor.
47
+ const sidMatch = rest.match(/^([^:/@\s]+):(\d+):([^:/\s]+)$/);
48
+ if (sidMatch) {
49
+ const [, host, port, sid] = sidMatch;
50
+ return `(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=${host})(PORT=${port}))(CONNECT_DATA=(SID=${sid})))`;
51
+ }
52
+ // LDAP, bare TNS alias, multi-ADDRESS failover, wallet refs, etc. — don't
53
+ // guess; tell the user the supported format.
54
+ throw new OracleConnectStringError(`Bu JDBC connection string avtomatik çevrilə bilmir: "${raw}". ` +
55
+ `Easy Connect formatından istifadə et: host:port/service_name ` +
56
+ `(məs. 172.31.0.232:1521/kobiltest) və ya SID üçün: host:port:SID.`);
57
+ };
58
+ //# sourceMappingURL=oracleConnectString.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oracleConnectString.js","sourceRoot":"","sources":["../../../src/host/db/oracleConnectString.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,6EAA6E;AAC7E,wEAAwE;AACxE,6EAA6E;AAC7E,2CAA2C;AAC3C,EAAE;AACF,0EAA0E;AAC1E,8EAA8E;AAC9E,QAAQ;AAER,2EAA2E;AAC3E,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AAED,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,GAAW,EAAU,EAAE;IAClE,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAErB,2EAA2E;IAC3E,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAElD,oEAAoE;IACpE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qEAAqE;IACrE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,kDAAkD;IAClD,IAAI,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4EAA4E;IAC5E,oCAAoC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC9D,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC;QACrC,OAAO,6CAA6C,IAAI,UAAU,IAAI,wBAAwB,GAAG,KAAK,CAAC;IACzG,CAAC;IAED,0EAA0E;IAC1E,6CAA6C;IAC7C,MAAM,IAAI,wBAAwB,CAChC,wDAAwD,GAAG,KAAK;QAC9D,+DAA+D;QAC/D,mEAAmE,CACtE,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { DbConnection } from "./types.js";
2
+ export declare const testPostgresConnection: (connection: DbConnection) => Promise<void>;
3
+ export declare const executePostgresQuery: (connection: DbConnection, query: string, params?: unknown[]) => Promise<{
4
+ rows: unknown[];
5
+ rowCount: number;
6
+ }>;
7
+ //# sourceMappingURL=postgresAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgresAdapter.d.ts","sourceRoot":"","sources":["../../../src/host/db/postgresAdapter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA2C/C,eAAO,MAAM,sBAAsB,GAAU,YAAY,YAAY,KAAG,OAAO,CAAC,IAAI,CASnF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,YAAY,YAAY,EACxB,OAAO,MAAM,EACb,SAAQ,OAAO,EAAO,KACrB,OAAO,CAAC;IAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAe/C,CAAC"}
@@ -0,0 +1,67 @@
1
+ // PostgreSQL adapter. Ported from `pmanfrontend/electron/db/postgresAdapter.ts`
2
+ // with lazy `pg` loading via `loadOptionalModule`.
3
+ import { loadOptionalModule } from "../lazy.js";
4
+ import { stripTrailingSqlTerminator } from "./sqlNormalize.js";
5
+ const unwrap = (mod) => (mod && mod.default && !mod.Client ? mod.default : mod);
6
+ const loadPgDriver = async () => {
7
+ try {
8
+ return unwrap(await loadOptionalModule("pg"));
9
+ }
10
+ catch {
11
+ throw new Error("PostgreSQL driver (`pg`) is not installed. Install `pg` to use PostgreSQL connections.");
12
+ }
13
+ };
14
+ const buildClientConfig = (connection) => {
15
+ const ssl = connection.ssl ? { rejectUnauthorized: false } : undefined;
16
+ if (connection.connectionString?.trim()) {
17
+ return { connectionString: connection.connectionString.trim(), ssl, connectionTimeoutMillis: 8000 };
18
+ }
19
+ return {
20
+ host: connection.host,
21
+ port: connection.port,
22
+ database: connection.database,
23
+ user: connection.username,
24
+ password: connection.password,
25
+ ssl,
26
+ connectionTimeoutMillis: 8000,
27
+ };
28
+ };
29
+ const normalizePgValue = (value) => JSON.parse(JSON.stringify(value, (_key, entry) => {
30
+ if (typeof entry === "bigint")
31
+ return entry.toString();
32
+ if (entry instanceof Date)
33
+ return entry.toISOString();
34
+ if (Buffer.isBuffer(entry) || entry instanceof Uint8Array) {
35
+ return Buffer.from(entry).toString("hex");
36
+ }
37
+ return entry;
38
+ }));
39
+ export const testPostgresConnection = async (connection) => {
40
+ const { Client } = await loadPgDriver();
41
+ const client = new Client(buildClientConfig(connection));
42
+ await client.connect();
43
+ try {
44
+ await client.query("SELECT 1");
45
+ }
46
+ finally {
47
+ await client.end();
48
+ }
49
+ };
50
+ export const executePostgresQuery = async (connection, query, params = []) => {
51
+ const { Client } = await loadPgDriver();
52
+ const client = new Client(buildClientConfig(connection));
53
+ await client.connect();
54
+ try {
55
+ const finalQuery = stripTrailingSqlTerminator(query, "postgres");
56
+ const result = await client.query(finalQuery, params);
57
+ const rows = Array.isArray(result.rows) ? result.rows.map(normalizePgValue) : [];
58
+ return {
59
+ rows,
60
+ rowCount: typeof result.rowCount === "number" ? result.rowCount : rows.length,
61
+ };
62
+ }
63
+ finally {
64
+ await client.end();
65
+ }
66
+ };
67
+ //# sourceMappingURL=postgresAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgresAdapter.js","sourceRoot":"","sources":["../../../src/host/db/postgresAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { DbQueryExecutionResult, ExecuteDbQueryPayload } from "./types.js";
2
+ export declare const executeQuery: (payload: ExecuteDbQueryPayload) => Promise<DbQueryExecutionResult>;
3
+ //# sourceMappingURL=queryExecutor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryExecutor.d.ts","sourceRoot":"","sources":["../../../src/host/db/queryExecutor.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAGV,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAsCpB,eAAO,MAAM,YAAY,GACvB,SAAS,qBAAqB,KAC7B,OAAO,CAAC,sBAAsB,CA2DhC,CAAC"}
@@ -0,0 +1,97 @@
1
+ // Host-side DB query executor. Ported from
2
+ // `pmanfrontend/electron/db/queryExecutor.ts`. The desktop original falls back
3
+ // to a local encrypted connection store (`dbManager`); callman-core has no such
4
+ // store, so the caller (runner) MUST provide the resolved `connection`.
5
+ import { performance } from "node:perf_hooks";
6
+ import { executeMongoQuery } from "./mongoAdapter.js";
7
+ import { executeMysqlQuery } from "./mysqlAdapter.js";
8
+ import { executeOracleQuery } from "./oracleAdapter.js";
9
+ import { executePostgresQuery } from "./postgresAdapter.js";
10
+ import { resolveTemplate } from "./templateResolver.js";
11
+ const executeAgainstConnection = async (connection, resolvedQuery, params = []) => {
12
+ switch (connection.type) {
13
+ case "mongo":
14
+ return executeMongoQuery(connection, JSON.parse(resolvedQuery));
15
+ case "postgres":
16
+ return executePostgresQuery(connection, resolvedQuery, params);
17
+ case "mysql":
18
+ return executeMysqlQuery(connection, resolvedQuery, params);
19
+ default:
20
+ return executeOracleQuery(connection, resolvedQuery);
21
+ }
22
+ };
23
+ const normalizeConnectionInput = (connectionInput) => ({
24
+ id: connectionInput.id?.trim() || "runtime-connection",
25
+ name: connectionInput.name.trim(),
26
+ type: connectionInput.type,
27
+ connectionMode: connectionInput.connectionMode === "connectionString" ||
28
+ Boolean(connectionInput.connectionString?.trim())
29
+ ? "connectionString"
30
+ : "detailed",
31
+ connectionString: connectionInput.connectionString?.trim() || undefined,
32
+ host: connectionInput.host.trim(),
33
+ port: Number(connectionInput.port),
34
+ database: connectionInput.database?.trim() || undefined,
35
+ serviceName: connectionInput.serviceName?.trim() || undefined,
36
+ username: connectionInput.username.trim(),
37
+ password: connectionInput.password,
38
+ ssl: connectionInput.ssl,
39
+ });
40
+ export const executeQuery = async (payload) => {
41
+ const startedAt = performance.now();
42
+ const connection = payload.connection
43
+ ? normalizeConnectionInput(payload.connection)
44
+ : null;
45
+ if (!connection) {
46
+ return {
47
+ success: false,
48
+ phase: payload.phase,
49
+ connectionId: payload.connectionId,
50
+ connectionName: "",
51
+ connectionType: "mongo",
52
+ query: payload.query,
53
+ resolvedQuery: payload.query,
54
+ rows: [],
55
+ rowCount: 0,
56
+ durationMs: Math.round(performance.now() - startedAt),
57
+ executedAt: new Date().toISOString(),
58
+ error: "Database connection not found",
59
+ };
60
+ }
61
+ try {
62
+ const resolvedQuery = resolveTemplate(payload.query, payload.context ?? {});
63
+ const result = await executeAgainstConnection(connection, resolvedQuery, payload.params ?? []);
64
+ return {
65
+ success: true,
66
+ phase: payload.phase,
67
+ connectionId: connection.id,
68
+ connectionName: connection.name,
69
+ connectionType: connection.type,
70
+ query: payload.query,
71
+ resolvedQuery,
72
+ rows: result.rows,
73
+ rowCount: result.rowCount,
74
+ durationMs: Math.round(performance.now() - startedAt),
75
+ executedAt: new Date().toISOString(),
76
+ };
77
+ }
78
+ catch (error) {
79
+ return {
80
+ success: false,
81
+ phase: payload.phase,
82
+ connectionId: connection.id,
83
+ connectionName: connection.name,
84
+ connectionType: connection.type,
85
+ query: payload.query,
86
+ resolvedQuery: connection.type === "mongo"
87
+ ? payload.query
88
+ : resolveTemplate(payload.query, payload.context ?? {}),
89
+ rows: [],
90
+ rowCount: 0,
91
+ durationMs: Math.round(performance.now() - startedAt),
92
+ executedAt: new Date().toISOString(),
93
+ error: error instanceof Error ? error.message : String(error),
94
+ };
95
+ }
96
+ };
97
+ //# sourceMappingURL=queryExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryExecutor.js","sourceRoot":"","sources":["../../../src/host/db/queryExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type SqlProvider = "oracle" | "postgres" | "mysql";
2
+ export declare const stripTrailingSqlTerminator: (sql: string, provider: SqlProvider) => string;
3
+ //# sourceMappingURL=sqlNormalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlNormalize.d.ts","sourceRoot":"","sources":["../../../src/host/db/sqlNormalize.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAE1D,eAAO,MAAM,0BAA0B,GAAI,KAAK,MAAM,EAAE,UAAU,WAAW,KAAG,MAe/E,CAAC"}
@@ -0,0 +1,29 @@
1
+ // Strips trailing SQL statement terminators (";") that some drivers reject.
2
+ //
3
+ // Users habitually end queries with a semicolon (as Postman/other tools allow),
4
+ // but Oracle's oracledb driver rejects a trailing ";" with
5
+ // ORA-00933 ("SQL command not properly ended"). We normalize the query right
6
+ // before it reaches the driver so behaviour is consistent across providers.
7
+ //
8
+ // Only the trailing ";" (plus surrounding whitespace, including repeated ";;")
9
+ // is removed — semicolons INSIDE the query (e.g. in string literals) are left
10
+ // untouched. For Oracle PL/SQL blocks the trailing ";" is required syntax, so
11
+ // those statements are detected and returned unchanged.
12
+ //
13
+ // Ported verbatim from `pmanfrontend/electron/db/sqlNormalize.ts`.
14
+ const ORACLE_PLSQL_HEAD = /^(DECLARE|BEGIN)\b|^CREATE\s+(OR\s+REPLACE\s+)?(PROCEDURE|FUNCTION|PACKAGE(\s+BODY)?|TRIGGER|TYPE(\s+BODY)?)\b/i;
15
+ export const stripTrailingSqlTerminator = (sql, provider) => {
16
+ if (typeof sql !== "string") {
17
+ return sql;
18
+ }
19
+ // PL/SQL blocks need their terminating ";" (e.g. END;) — leave them as-is.
20
+ if (provider === "oracle" && ORACLE_PLSQL_HEAD.test(sql.replace(/^\s+/, ""))) {
21
+ return sql;
22
+ }
23
+ let out = sql.replace(/\s+$/, "");
24
+ while (out.endsWith(";")) {
25
+ out = out.slice(0, -1).replace(/\s+$/, "");
26
+ }
27
+ return out;
28
+ };
29
+ //# sourceMappingURL=sqlNormalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlNormalize.js","sourceRoot":"","sources":["../../../src/host/db/sqlNormalize.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,EAAE;AACF,gFAAgF;AAChF,2DAA2D;AAC3D,6EAA6E;AAC7E,4EAA4E;AAC5E,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,8EAA8E;AAC9E,wDAAwD;AACxD,EAAE;AACF,mEAAmE;AAEnE,MAAM,iBAAiB,GACrB,iHAAiH,CAAC;AAIpH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,GAAW,EAAE,QAAqB,EAAU,EAAE;IACvF,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,2EAA2E;IAC3E,IAAI,QAAQ,KAAK,QAAQ,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7E,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClC,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { DbTemplateContext } from "./types.js";
2
+ export declare const resolveTemplate: (input: string, context: DbTemplateContext) => string;
3
+ //# sourceMappingURL=templateResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templateResolver.d.ts","sourceRoot":"","sources":["../../../src/host/db/templateResolver.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAsEpD,eAAO,MAAM,eAAe,GAC1B,OAAO,MAAM,EACb,SAAS,iBAAiB,KACzB,MAuBF,CAAC"}
@@ -0,0 +1,77 @@
1
+ // DB query template resolution — thin shim that pre-resolves
2
+ // scope-prefixed path tokens (`{{response.body.id}}`, `{{env.x}}`,
3
+ // `{{global.x}}`) then delegates remaining tokens (`{{random.uuid}}`,
4
+ // `{{counter}}`, plain `{{varname}}`) to callman-core's canonical
5
+ // Postman-style template engine.
6
+ //
7
+ // Ported from `pmanfrontend/electron/db/templateResolver.ts`; the only change
8
+ // is importing the template engine from callman-core's own module instead of
9
+ // the published package.
10
+ import { createTemplateRuntimeContext, resolveTemplate as resolveTemplateCore, } from "../../templating/index.js";
11
+ const SCOPE_TOKEN_PATTERN = /\{\{\s*((?:response|env|global)(?:\.[^.{}\s]+)*)\s*\}\}/g;
12
+ const getByPath = (value, path) => {
13
+ let currentValue = value;
14
+ for (const segment of path) {
15
+ if (currentValue === null || currentValue === undefined) {
16
+ return undefined;
17
+ }
18
+ if (Array.isArray(currentValue)) {
19
+ const index = Number(segment);
20
+ if (!Number.isInteger(index)) {
21
+ return undefined;
22
+ }
23
+ currentValue = currentValue[index];
24
+ continue;
25
+ }
26
+ if (typeof currentValue !== "object") {
27
+ return undefined;
28
+ }
29
+ currentValue = currentValue[segment];
30
+ }
31
+ return currentValue;
32
+ };
33
+ const stringifyResolvedValue = (value) => {
34
+ if (value === null || value === undefined) {
35
+ return "";
36
+ }
37
+ if (typeof value === "string") {
38
+ return value;
39
+ }
40
+ if (typeof value === "number" || typeof value === "boolean") {
41
+ return String(value);
42
+ }
43
+ return JSON.stringify(value);
44
+ };
45
+ const resolveScopeExpression = (expression, context) => {
46
+ if (expression === "response" || expression.startsWith("response.")) {
47
+ const path = expression === "response" ? [] : expression.slice("response.".length).split(".");
48
+ return stringifyResolvedValue(getByPath(context.response, path));
49
+ }
50
+ if (expression.startsWith("env.")) {
51
+ return context.env[expression.slice("env.".length)] ?? "";
52
+ }
53
+ if (expression.startsWith("global.")) {
54
+ return context.global[expression.slice("global.".length)] ?? "";
55
+ }
56
+ return "";
57
+ };
58
+ export const resolveTemplate = (input, context) => {
59
+ if (!input.includes("{{")) {
60
+ return input;
61
+ }
62
+ const normalizedContext = {
63
+ response: context.response ?? null,
64
+ env: context.env ?? {},
65
+ global: context.global ?? {},
66
+ };
67
+ const scopeResolved = input.replace(SCOPE_TOKEN_PATTERN, (_match, expression) => resolveScopeExpression(expression, normalizedContext));
68
+ // Plain `{{varname}}` still resolves against env+global flat lookup so
69
+ // the legacy non-prefixed syntax keeps working alongside random/counter.
70
+ const flatEnvironment = {
71
+ ...normalizedContext.global,
72
+ ...normalizedContext.env,
73
+ };
74
+ const runtimeContext = createTemplateRuntimeContext(flatEnvironment);
75
+ return resolveTemplateCore(scopeResolved, runtimeContext);
76
+ };
77
+ //# sourceMappingURL=templateResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templateResolver.js","sourceRoot":"","sources":["../../../src/host/db/templateResolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ export type DbConnectionType = "oracle" | "mongo" | "postgres" | "mysql";
2
+ export type DbQueryPhase = "pre" | "post" | "manual";
3
+ export type DbConnectionMode = "detailed" | "connectionString";
4
+ export interface DbConnection {
5
+ id: string;
6
+ name: string;
7
+ type: DbConnectionType;
8
+ connectionMode: DbConnectionMode;
9
+ connectionString?: string;
10
+ host: string;
11
+ port: number;
12
+ database?: string;
13
+ serviceName?: string;
14
+ username: string;
15
+ password: string;
16
+ ssl?: boolean;
17
+ }
18
+ export interface DbConnectionInput {
19
+ id?: string;
20
+ name: string;
21
+ type: DbConnectionType;
22
+ connectionMode: DbConnectionMode;
23
+ connectionString?: string;
24
+ host: string;
25
+ port: number;
26
+ database?: string;
27
+ serviceName?: string;
28
+ username: string;
29
+ password: string;
30
+ ssl?: boolean;
31
+ }
32
+ export interface DbTemplateContext {
33
+ response?: unknown | null;
34
+ env?: Record<string, string>;
35
+ global?: Record<string, string>;
36
+ }
37
+ export interface ExecuteDbQueryPayload {
38
+ connectionId: string;
39
+ connection?: DbConnectionInput;
40
+ query: string;
41
+ params?: unknown[];
42
+ phase: DbQueryPhase;
43
+ context?: DbTemplateContext;
44
+ }
45
+ export interface DbQueryExecutionResult {
46
+ success: boolean;
47
+ phase: DbQueryPhase;
48
+ connectionId: string;
49
+ connectionName: string;
50
+ connectionType: DbConnectionType;
51
+ query: string;
52
+ resolvedQuery: string;
53
+ rows: unknown[];
54
+ rowCount: number;
55
+ durationMs: number;
56
+ executedAt: string;
57
+ error?: string;
58
+ }
59
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/host/db/types.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC;AAEzE,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;AAErD,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,kBAAkB,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,gBAAgB,CAAC;IACvB,cAAc,EAAE,gBAAgB,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,gBAAgB,CAAC;IACvB,cAAc,EAAE,gBAAgB,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IAGrB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IAEd,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,gBAAgB,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,6 @@
1
+ // Host-side database execution types. Ported from the desktop app
2
+ // (`pmanfrontend/electron/db/types.ts`) so the collection runner can execute
3
+ // `pm.db.query` / pre-/post-request DB nodes locally instead of delegating to
4
+ // an Electron host.
5
+ export {};
6
+ //# sourceMappingURL=types.js.map