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,164 @@
1
+ "use strict";
2
+ // Bridges resolved connection runtimes (from the pipeline bundle) into the
3
+ // script capabilities callman-core's executor understands. This is the glue
4
+ // that lets the collection runner execute `pm.db.query`, pre-/post-request DB
5
+ // nodes, and Redis commands locally — the same surface the Electron host wires
6
+ // up, but driven by connections the runner receives instead of an in-process
7
+ // store.
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.buildRedisCapability = exports.buildRedisValueCache = exports.runRedisCommandsForPhase = exports.runConfiguredDbQuery = exports.buildDbExecuteCapability = void 0;
10
+ const queryExecutor_js_1 = require("./db/queryExecutor.js");
11
+ const redisService_js_1 = require("./redis/redisService.js");
12
+ const toDbConnectionInput = (runtime) => ({
13
+ id: runtime.id,
14
+ name: runtime.name,
15
+ type: runtime.type,
16
+ connectionMode: runtime.connectionMode ??
17
+ (runtime.connectionString?.trim() ? "connectionString" : "detailed"),
18
+ connectionString: runtime.connectionString,
19
+ host: runtime.host ?? "",
20
+ port: runtime.port ?? 0,
21
+ database: runtime.database,
22
+ serviceName: runtime.serviceName,
23
+ username: runtime.username ?? "",
24
+ password: runtime.password ?? "",
25
+ ssl: runtime.ssl,
26
+ });
27
+ const toRedisConnectionInput = (runtime) => ({
28
+ id: runtime.id,
29
+ name: runtime.name,
30
+ type: "redis",
31
+ host: runtime.host,
32
+ port: runtime.port,
33
+ password: runtime.password,
34
+ dbIndex: runtime.dbIndex,
35
+ });
36
+ const toScriptDbResult = (result) => ({
37
+ success: result.success,
38
+ error: result.error ?? null,
39
+ phase: result.phase,
40
+ connectionId: result.connectionId,
41
+ connectionName: result.connectionName,
42
+ connectionType: result.connectionType,
43
+ query: result.query,
44
+ resolvedQuery: result.resolvedQuery,
45
+ rows: result.rows,
46
+ rowCount: result.rowCount,
47
+ durationMs: result.durationMs,
48
+ executedAt: result.executedAt,
49
+ });
50
+ const buildMissingConnectionResult = (input) => ({
51
+ success: false,
52
+ error: `Database connection "${input.connectionId}" was not found in the run bundle`,
53
+ phase: input.phase,
54
+ connectionId: input.connectionId,
55
+ connectionName: "",
56
+ connectionType: "mongo",
57
+ query: input.query,
58
+ resolvedQuery: input.query,
59
+ rows: [],
60
+ rowCount: 0,
61
+ durationMs: 0,
62
+ executedAt: new Date().toISOString(),
63
+ });
64
+ // ── DB capability ───────────────────────────────────────────────────
65
+ // Builds the `execute` callback powering `pm.db.query(...)`. Resolves the
66
+ // connectionId against the bundle, runs the query against the right driver,
67
+ // and maps the result into the canonical `ScriptDbExecutionResult`.
68
+ const buildDbExecuteCapability = (connections) => async (input) => {
69
+ const runtime = connections[input.connectionId];
70
+ if (!runtime || runtime.kind !== "db") {
71
+ return buildMissingConnectionResult({
72
+ connectionId: input.connectionId,
73
+ query: input.query,
74
+ phase: input.phase,
75
+ });
76
+ }
77
+ const result = await (0, queryExecutor_js_1.executeQuery)({
78
+ connectionId: input.connectionId,
79
+ connection: toDbConnectionInput(runtime),
80
+ query: input.query,
81
+ phase: input.phase,
82
+ context: {
83
+ response: input.context?.response ?? null,
84
+ env: input.context?.env ?? {},
85
+ global: input.context?.global ?? {},
86
+ },
87
+ });
88
+ return toScriptDbResult(result);
89
+ };
90
+ exports.buildDbExecuteCapability = buildDbExecuteCapability;
91
+ // Runs a configured pre-request / post-response DB node, producing the result
92
+ // surfaced as `pm.db.pre` / `pm.db.post`. Returns null when the node is
93
+ // disabled or incomplete (so it's never wired into the capability).
94
+ const runConfiguredDbQuery = async (input) => {
95
+ const { config } = input;
96
+ if (!config?.enabled || !config.connectionId || !config.query?.trim()) {
97
+ return null;
98
+ }
99
+ const execute = (0, exports.buildDbExecuteCapability)(input.connections);
100
+ return execute({
101
+ connectionId: config.connectionId,
102
+ query: config.query,
103
+ phase: input.phase,
104
+ context: {
105
+ response: input.context.response ?? null,
106
+ env: input.context.env ?? {},
107
+ global: input.context.global ?? {},
108
+ },
109
+ });
110
+ };
111
+ exports.runConfiguredDbQuery = runConfiguredDbQuery;
112
+ // ── Redis capability ────────────────────────────────────────────────
113
+ const runRedisCommandsForPhase = async (input) => {
114
+ const connectionId = input.connectionId?.trim() ?? "";
115
+ const commands = (input.commands ?? []).map((command) => command.trim()).filter(Boolean);
116
+ if (!connectionId || commands.length === 0) {
117
+ return [];
118
+ }
119
+ const runtime = input.connections[connectionId];
120
+ const connection = runtime && runtime.kind === "redis" ? toRedisConnectionInput(runtime) : undefined;
121
+ return (0, redisService_js_1.executeRedisCommands)({
122
+ connectionId,
123
+ connection,
124
+ commands,
125
+ phase: input.phase,
126
+ context: {
127
+ response: input.context.response ?? null,
128
+ env: input.context.env ?? {},
129
+ global: input.context.global ?? {},
130
+ },
131
+ });
132
+ };
133
+ exports.runRedisCommandsForPhase = runRedisCommandsForPhase;
134
+ // Mirror of the desktop `buildRedisValueCache`
135
+ // (`pmanfrontend/src/features/redis/lib/redisAssertions.ts`). Maps successful
136
+ // command results to a `key → value` map for `pm.redis.get(key)`.
137
+ const buildRedisValueCache = (results) => {
138
+ const cache = {};
139
+ for (const result of results) {
140
+ if (!result.success || !result.key) {
141
+ continue;
142
+ }
143
+ if (result.commandName === "GET" || result.commandName === "SET") {
144
+ cache[result.key] = result.result;
145
+ continue;
146
+ }
147
+ if (result.commandName === "DEL") {
148
+ cache[result.key] = null;
149
+ continue;
150
+ }
151
+ if (result.commandName === "EXISTS" && result.result === false) {
152
+ cache[result.key] = null;
153
+ }
154
+ }
155
+ return cache;
156
+ };
157
+ exports.buildRedisValueCache = buildRedisValueCache;
158
+ // Assembles the read-only `pm.redis` capability from pre/post command results.
159
+ const buildRedisCapability = (pre, post) => ({
160
+ values: (0, exports.buildRedisValueCache)([...pre, ...post]),
161
+ results: { pre, post },
162
+ });
163
+ exports.buildRedisCapability = buildRedisCapability;
164
+ //# sourceMappingURL=connections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connections.js","sourceRoot":"","sources":["../../src/host/connections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,431 @@
1
+ "use strict";
2
+ // MongoDB adapter. Ported from `pmanfrontend/electron/db/mongoAdapter.ts`.
3
+ // The only change vs. the desktop original is driver loading: instead of
4
+ // `createRequire`, the `mongodb` / `bson` packages are loaded lazily via
5
+ // `loadOptionalModule` so callman-core stays driver-agnostic.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.executeMongoQuery = exports.testMongoConnection = void 0;
8
+ const lazy_js_1 = require("../lazy.js");
9
+ const unwrap = (mod) => (mod && mod.default && !mod.MongoClient ? mod.default : mod);
10
+ const loadMongoDriver = async () => {
11
+ try {
12
+ return unwrap(await (0, lazy_js_1.loadOptionalModule)("mongodb"));
13
+ }
14
+ catch {
15
+ throw new Error("MongoDB driver (`mongodb`) is not installed. Install `mongodb` to use Mongo connections.");
16
+ }
17
+ };
18
+ // `bson` is a soft dependency (only needed to render Decimal128 from a plain
19
+ // object). It ships with `mongodb`, but we load it independently and cache it
20
+ // synchronously so the recursive value normaliser can stay sync.
21
+ let cachedBson = null;
22
+ let bsonLoaded = false;
23
+ const ensureBson = async () => {
24
+ if (!bsonLoaded) {
25
+ cachedBson = unwrap(await (0, lazy_js_1.loadOptionalModuleOrNull)("bson"));
26
+ bsonLoaded = true;
27
+ }
28
+ return cachedBson;
29
+ };
30
+ const buildMongoUri = (connection) => {
31
+ if (connection.connectionString?.trim()) {
32
+ return connection.connectionString.trim();
33
+ }
34
+ const username = encodeURIComponent(connection.username);
35
+ const password = encodeURIComponent(connection.password);
36
+ const database = connection.database?.trim() || "admin";
37
+ return `mongodb://${username}:${password}@${connection.host.trim()}:${connection.port}/${database}`;
38
+ };
39
+ const getMongoDatabaseName = (connection) => {
40
+ if (connection.database?.trim()) {
41
+ return connection.database.trim();
42
+ }
43
+ if (connection.connectionString?.trim()) {
44
+ try {
45
+ const uri = connection.connectionString.trim();
46
+ const normalizedUri = uri.startsWith("mongodb+srv://")
47
+ ? uri.replace("mongodb+srv://", "https://")
48
+ : uri.replace("mongodb://", "http://");
49
+ const parsedUrl = new URL(normalizedUri);
50
+ const pathname = parsedUrl.pathname.replace(/^\/+/, "").trim();
51
+ if (pathname) {
52
+ return pathname;
53
+ }
54
+ }
55
+ catch {
56
+ return "admin";
57
+ }
58
+ }
59
+ return "admin";
60
+ };
61
+ const ensureMongoCommand = (value) => {
62
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
63
+ throw new Error("Mongo query must be a JSON object. Example: {\"collection\":\"users\",\"operation\":\"find\",\"filter\":{}}");
64
+ }
65
+ const command = value;
66
+ if (!command.collection?.trim()) {
67
+ throw new Error("Mongo query must include a collection name");
68
+ }
69
+ if (!command.operation?.trim()) {
70
+ throw new Error("Mongo query must include an operation");
71
+ }
72
+ return command;
73
+ };
74
+ const formatUuidFromBytes = (bytes) => {
75
+ const hex = Buffer.from(bytes).toString("hex");
76
+ return [
77
+ hex.slice(0, 8),
78
+ hex.slice(8, 12),
79
+ hex.slice(12, 16),
80
+ hex.slice(16, 20),
81
+ hex.slice(20, 32),
82
+ ].join("-");
83
+ };
84
+ const normalizeBinaryBytes = (bytes, preferUuid = false) => {
85
+ if (preferUuid && bytes.byteLength === 16) {
86
+ return formatUuidFromBytes(bytes);
87
+ }
88
+ return Buffer.from(bytes).toString("hex");
89
+ };
90
+ const toUint8Array = (value) => {
91
+ if (Buffer.isBuffer(value)) {
92
+ return value;
93
+ }
94
+ if (value instanceof Uint8Array) {
95
+ return value;
96
+ }
97
+ if (ArrayBuffer.isView(value)) {
98
+ return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
99
+ }
100
+ if (value instanceof ArrayBuffer) {
101
+ return new Uint8Array(value);
102
+ }
103
+ return null;
104
+ };
105
+ const toUint8ArrayFromIndexedObject = (value) => {
106
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
107
+ return null;
108
+ }
109
+ const entries = Object.entries(value);
110
+ if (entries.length === 0 ||
111
+ !entries.every(([key, entryValue]) => /^\d+$/.test(key) && typeof entryValue === "number" && Number.isInteger(entryValue))) {
112
+ return null;
113
+ }
114
+ return Uint8Array.from(entries
115
+ .sort(([leftKey], [rightKey]) => Number(leftKey) - Number(rightKey))
116
+ .map(([, byteValue]) => byteValue));
117
+ };
118
+ const isMongoObjectId = (value) => {
119
+ if (!value || typeof value !== "object") {
120
+ return false;
121
+ }
122
+ const candidate = value;
123
+ return (candidate._bsontype === "ObjectId" ||
124
+ typeof candidate.toHexString === "function");
125
+ };
126
+ const getMongoBsonType = (value) => {
127
+ if (!value || typeof value !== "object") {
128
+ return null;
129
+ }
130
+ return typeof value._bsontype === "string"
131
+ ? (value._bsontype)
132
+ : null;
133
+ };
134
+ const normalizeMongoNumericValue = (value) => {
135
+ const rawValue = typeof value.valueOf === "function" ? value.valueOf() : undefined;
136
+ if (typeof rawValue === "number") {
137
+ return rawValue;
138
+ }
139
+ if (typeof rawValue === "bigint") {
140
+ return rawValue <= BigInt(Number.MAX_SAFE_INTEGER) &&
141
+ rawValue >= BigInt(Number.MIN_SAFE_INTEGER)
142
+ ? Number(rawValue)
143
+ : rawValue.toString();
144
+ }
145
+ if (typeof rawValue === "string") {
146
+ const parsedNumber = Number(rawValue);
147
+ if (rawValue.trim() &&
148
+ Number.isFinite(parsedNumber) &&
149
+ Number.isSafeInteger(parsedNumber) &&
150
+ String(parsedNumber) === rawValue) {
151
+ return parsedNumber;
152
+ }
153
+ return rawValue;
154
+ }
155
+ return typeof value.toString === "function" ? value.toString() : String(value);
156
+ };
157
+ const normalizePlainDecimal128Object = (value) => {
158
+ if (!("bytes" in value)) {
159
+ return null;
160
+ }
161
+ const bytes = toUint8Array(value.bytes) ?? toUint8ArrayFromIndexedObject(value.bytes);
162
+ if (!bytes || bytes.byteLength !== 16) {
163
+ return null;
164
+ }
165
+ if (!cachedBson?.Decimal128) {
166
+ return null;
167
+ }
168
+ try {
169
+ return new cachedBson.Decimal128(bytes).toString();
170
+ }
171
+ catch {
172
+ return null;
173
+ }
174
+ };
175
+ const normalizeMongoSpecialObject = (value) => {
176
+ const bsonType = getMongoBsonType(value);
177
+ if (!bsonType) {
178
+ return normalizePlainDecimal128Object(value);
179
+ }
180
+ if (bsonType === "ObjectId") {
181
+ return isMongoObjectId(value) ? value.toHexString() : String(value);
182
+ }
183
+ if (bsonType === "Decimal128") {
184
+ return typeof value.toString === "function" ? value.toString() : String(value);
185
+ }
186
+ if (bsonType === "Long" || bsonType === "Int32" || bsonType === "Double") {
187
+ return normalizeMongoNumericValue(value);
188
+ }
189
+ if (bsonType === "Timestamp") {
190
+ const seconds = typeof value.getHighBits === "function"
191
+ ? value.getHighBits()
192
+ : null;
193
+ const increment = typeof value.getLowBits === "function"
194
+ ? value.getLowBits()
195
+ : null;
196
+ if (seconds !== null || increment !== null) {
197
+ return {
198
+ seconds,
199
+ increment,
200
+ };
201
+ }
202
+ return typeof value.toString === "function" ? value.toString() : String(value);
203
+ }
204
+ if (bsonType === "Binary" || bsonType === "UUID") {
205
+ const rawBytes = toUint8Array(value.buffer) ??
206
+ (typeof value.value === "function" ? toUint8Array(value.value()) : null);
207
+ const subtype = typeof value.sub_type === "number"
208
+ ? value.sub_type
209
+ : typeof value.subtype === "number"
210
+ ? value.subtype
211
+ : null;
212
+ if (rawBytes) {
213
+ return normalizeBinaryBytes(rawBytes, bsonType === "UUID" || subtype === 3 || subtype === 4);
214
+ }
215
+ return typeof value.toString === "function" ? value.toString() : String(value);
216
+ }
217
+ if (bsonType === "BSONRegExp") {
218
+ const pattern = typeof value.pattern === "string" ? value.pattern : "";
219
+ const options = typeof value.options === "string" ? value.options : "";
220
+ return `/${pattern}/${options}`;
221
+ }
222
+ if (bsonType === "DBRef") {
223
+ return {
224
+ $ref: typeof value.collection === "string" ? value.collection : "",
225
+ $id: normalizeMongoValue(value.oid ?? null),
226
+ ...(typeof value.db === "string" ? { $db: value.db } : {}),
227
+ };
228
+ }
229
+ if (bsonType === "Code") {
230
+ return {
231
+ code: typeof value.code === "string" ? value.code : String(value.code ?? ""),
232
+ ...(value.scope && typeof value.scope === "object"
233
+ ? { scope: normalizeMongoValue(value.scope) }
234
+ : {}),
235
+ };
236
+ }
237
+ if (bsonType === "MinKey" || bsonType === "MaxKey") {
238
+ return bsonType;
239
+ }
240
+ return null;
241
+ };
242
+ const normalizeMongoValue = (value) => {
243
+ if (value === null || value === undefined) {
244
+ return value;
245
+ }
246
+ if (typeof value === "string" ||
247
+ typeof value === "number" ||
248
+ typeof value === "boolean") {
249
+ return value;
250
+ }
251
+ if (value instanceof Date) {
252
+ return value.toISOString();
253
+ }
254
+ if (typeof value === "bigint") {
255
+ return value.toString();
256
+ }
257
+ if (isMongoObjectId(value)) {
258
+ return value.toHexString();
259
+ }
260
+ const binaryValue = toUint8Array(value);
261
+ if (binaryValue) {
262
+ return normalizeBinaryBytes(binaryValue);
263
+ }
264
+ if (Array.isArray(value)) {
265
+ return value.map(normalizeMongoValue);
266
+ }
267
+ if (typeof value === "object") {
268
+ const normalizedSpecialObject = normalizeMongoSpecialObject(value);
269
+ if (normalizedSpecialObject !== null) {
270
+ return normalizedSpecialObject;
271
+ }
272
+ return Object.fromEntries(Object.entries(value).map(([key, entryValue]) => [
273
+ key,
274
+ normalizeMongoValue(entryValue),
275
+ ]));
276
+ }
277
+ return String(value);
278
+ };
279
+ const normalizeMongoResult = (value) => {
280
+ if (Array.isArray(value)) {
281
+ const rows = value.map(normalizeMongoValue);
282
+ return {
283
+ rows,
284
+ rowCount: rows.length,
285
+ };
286
+ }
287
+ if (value === null || value === undefined) {
288
+ return {
289
+ rows: [],
290
+ rowCount: 0,
291
+ };
292
+ }
293
+ return {
294
+ rows: [normalizeMongoValue(value)],
295
+ rowCount: 1,
296
+ };
297
+ };
298
+ const OBJECTID_HEX_PATTERN = /^[a-f\d]{24}$/i;
299
+ const coerceMongoFilterValue = (value, ObjectId) => {
300
+ if (typeof value === "string" && OBJECTID_HEX_PATTERN.test(value)) {
301
+ try {
302
+ return new ObjectId(value);
303
+ }
304
+ catch {
305
+ return value;
306
+ }
307
+ }
308
+ if (Array.isArray(value)) {
309
+ return value.map((item) => coerceMongoFilterValue(item, ObjectId));
310
+ }
311
+ if (typeof value === "object" && value !== null) {
312
+ const obj = value;
313
+ // Support Extended JSON $oid syntax: { "$oid": "hexstring" }
314
+ if (typeof obj.$oid === "string") {
315
+ try {
316
+ return new ObjectId(obj.$oid);
317
+ }
318
+ catch {
319
+ return value;
320
+ }
321
+ }
322
+ return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, coerceMongoFilterValue(v, ObjectId)]));
323
+ }
324
+ return value;
325
+ };
326
+ const coerceMongoFilter = (filter, ObjectId) => {
327
+ if (!filter) {
328
+ return {};
329
+ }
330
+ return Object.fromEntries(Object.entries(filter).map(([key, value]) => [key, coerceMongoFilterValue(value, ObjectId)]));
331
+ };
332
+ const testMongoConnection = async (connection) => {
333
+ const { MongoClient } = await loadMongoDriver();
334
+ const client = new MongoClient(buildMongoUri(connection));
335
+ await client.connect();
336
+ try {
337
+ await client.db(getMongoDatabaseName(connection)).command({ ping: 1 });
338
+ }
339
+ finally {
340
+ await client.close();
341
+ }
342
+ };
343
+ exports.testMongoConnection = testMongoConnection;
344
+ const executeMongoQuery = async (connection, query) => {
345
+ const { MongoClient, ObjectId } = await loadMongoDriver();
346
+ await ensureBson();
347
+ const command = ensureMongoCommand(query);
348
+ const client = new MongoClient(buildMongoUri(connection));
349
+ await client.connect();
350
+ try {
351
+ const db = client.db(getMongoDatabaseName(connection));
352
+ const collection = db.collection(command.collection);
353
+ const options = command.options ?? {};
354
+ const filter = coerceMongoFilter(command.filter, ObjectId);
355
+ switch (command.operation) {
356
+ case "find": {
357
+ const cursor = collection.find(filter, {
358
+ ...options,
359
+ projection: command.projection,
360
+ sort: command.sort,
361
+ skip: command.skip,
362
+ limit: command.limit,
363
+ });
364
+ const rows = (await cursor.toArray()).map(normalizeMongoValue);
365
+ return {
366
+ rows,
367
+ rowCount: rows.length,
368
+ };
369
+ }
370
+ case "findOne": {
371
+ const row = await collection.findOne(filter, {
372
+ ...options,
373
+ projection: command.projection,
374
+ sort: command.sort,
375
+ skip: command.skip,
376
+ });
377
+ return normalizeMongoResult(row);
378
+ }
379
+ case "aggregate": {
380
+ const rows = (await collection.aggregate(command.pipeline ?? [], options).toArray()).map(normalizeMongoValue);
381
+ return {
382
+ rows,
383
+ rowCount: rows.length,
384
+ };
385
+ }
386
+ case "insertOne": {
387
+ const result = await collection.insertOne(command.document ?? {}, options);
388
+ return normalizeMongoResult({
389
+ acknowledged: result.acknowledged,
390
+ insertedId: result.insertedId,
391
+ });
392
+ }
393
+ case "updateOne": {
394
+ const result = await collection.updateOne(filter, command.update ?? {}, options);
395
+ return normalizeMongoResult({
396
+ acknowledged: result.acknowledged,
397
+ matchedCount: result.matchedCount,
398
+ modifiedCount: result.modifiedCount,
399
+ upsertedId: result.upsertedId ?? null,
400
+ });
401
+ }
402
+ case "deleteOne": {
403
+ const result = await collection.deleteOne(filter, options);
404
+ return normalizeMongoResult({
405
+ acknowledged: result.acknowledged,
406
+ deletedCount: result.deletedCount,
407
+ });
408
+ }
409
+ case "deleteMany": {
410
+ const result = await collection.deleteMany(filter, options);
411
+ return normalizeMongoResult({
412
+ acknowledged: result.acknowledged,
413
+ deletedCount: result.deletedCount,
414
+ });
415
+ }
416
+ case "countDocuments": {
417
+ const count = await collection.countDocuments(command.filter ?? {}, options);
418
+ return normalizeMongoResult({
419
+ count,
420
+ });
421
+ }
422
+ default:
423
+ throw new Error(`Unsupported Mongo operation: ${command.operation}`);
424
+ }
425
+ }
426
+ finally {
427
+ await client.close();
428
+ }
429
+ };
430
+ exports.executeMongoQuery = executeMongoQuery;
431
+ //# sourceMappingURL=mongoAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongoAdapter.js","sourceRoot":"","sources":["../../../src/host/db/mongoAdapter.ts"],"names":[],"mappings":"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"}