@opendatalabs/connect 0.8.1-canary.ff55fb0 → 0.9.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 (139) hide show
  1. package/README.md +35 -33
  2. package/dist/cli/bin.js +8 -0
  3. package/dist/cli/bin.js.map +1 -1
  4. package/dist/cli/index.d.ts +87 -0
  5. package/dist/cli/index.d.ts.map +1 -1
  6. package/dist/cli/index.js +3582 -305
  7. package/dist/cli/index.js.map +1 -1
  8. package/dist/cli/main.d.ts.map +1 -1
  9. package/dist/cli/main.js +8 -0
  10. package/dist/cli/main.js.map +1 -1
  11. package/dist/cli/mcp-server.d.ts +15 -0
  12. package/dist/cli/mcp-server.d.ts.map +1 -0
  13. package/dist/cli/mcp-server.js +199 -0
  14. package/dist/cli/mcp-server.js.map +1 -0
  15. package/dist/cli/queries.d.ts +128 -0
  16. package/dist/cli/queries.d.ts.map +1 -0
  17. package/dist/cli/queries.js +415 -0
  18. package/dist/cli/queries.js.map +1 -0
  19. package/dist/cli/render/capabilities.d.ts +9 -0
  20. package/dist/cli/render/capabilities.d.ts.map +1 -0
  21. package/dist/cli/render/capabilities.js +24 -0
  22. package/dist/cli/render/capabilities.js.map +1 -0
  23. package/dist/cli/render/connect-renderer.d.ts +18 -0
  24. package/dist/cli/render/connect-renderer.d.ts.map +1 -0
  25. package/dist/cli/render/connect-renderer.js +255 -0
  26. package/dist/cli/render/connect-renderer.js.map +1 -0
  27. package/dist/cli/render/format.d.ts +27 -0
  28. package/dist/cli/render/format.d.ts.map +1 -0
  29. package/dist/cli/render/format.js +111 -0
  30. package/dist/cli/render/format.js.map +1 -0
  31. package/dist/cli/render/index.d.ts +7 -0
  32. package/dist/cli/render/index.d.ts.map +1 -0
  33. package/dist/cli/render/index.js +7 -0
  34. package/dist/cli/render/index.js.map +1 -0
  35. package/dist/cli/render/progress.d.ts +11 -0
  36. package/dist/cli/render/progress.d.ts.map +1 -0
  37. package/dist/cli/render/progress.js +56 -0
  38. package/dist/cli/render/progress.js.map +1 -0
  39. package/dist/cli/render/symbols.d.ts +11 -0
  40. package/dist/cli/render/symbols.d.ts.map +1 -0
  41. package/dist/cli/render/symbols.js +21 -0
  42. package/dist/cli/render/symbols.js.map +1 -0
  43. package/dist/cli/render/theme.d.ts +15 -0
  44. package/dist/cli/render/theme.d.ts.map +1 -0
  45. package/dist/cli/render/theme.js +41 -0
  46. package/dist/cli/render/theme.js.map +1 -0
  47. package/dist/cli/search-select.d.ts +17 -0
  48. package/dist/cli/search-select.d.ts.map +1 -0
  49. package/dist/cli/search-select.js +29 -0
  50. package/dist/cli/search-select.js.map +1 -0
  51. package/dist/cli/update-check-worker.d.ts +2 -0
  52. package/dist/cli/update-check-worker.d.ts.map +1 -0
  53. package/dist/cli/update-check-worker.js +55 -0
  54. package/dist/cli/update-check-worker.js.map +1 -0
  55. package/dist/cli/update-check.d.ts +21 -0
  56. package/dist/cli/update-check.d.ts.map +1 -0
  57. package/dist/cli/update-check.js +52 -0
  58. package/dist/cli/update-check.js.map +1 -0
  59. package/dist/connectors/registry.d.ts +27 -1
  60. package/dist/connectors/registry.d.ts.map +1 -1
  61. package/dist/connectors/registry.js +168 -4
  62. package/dist/connectors/registry.js.map +1 -1
  63. package/dist/core/cli-types.d.ts +583 -1
  64. package/dist/core/cli-types.d.ts.map +1 -1
  65. package/dist/core/cli-types.js +262 -1
  66. package/dist/core/cli-types.js.map +1 -1
  67. package/dist/core/index.d.ts +3 -2
  68. package/dist/core/index.d.ts.map +1 -1
  69. package/dist/core/index.js +2 -2
  70. package/dist/core/index.js.map +1 -1
  71. package/dist/core/paths.d.ts +22 -3
  72. package/dist/core/paths.d.ts.map +1 -1
  73. package/dist/core/paths.js +71 -10
  74. package/dist/core/paths.js.map +1 -1
  75. package/dist/core/state-store.d.ts +23 -0
  76. package/dist/core/state-store.d.ts.map +1 -1
  77. package/dist/core/state-store.js +83 -5
  78. package/dist/core/state-store.js.map +1 -1
  79. package/dist/personal-server/client.d.ts +34 -0
  80. package/dist/personal-server/client.d.ts.map +1 -0
  81. package/dist/personal-server/client.js +94 -0
  82. package/dist/personal-server/client.js.map +1 -0
  83. package/dist/personal-server/index.d.ts +10 -0
  84. package/dist/personal-server/index.d.ts.map +1 -1
  85. package/dist/personal-server/index.js +79 -32
  86. package/dist/personal-server/index.js.map +1 -1
  87. package/dist/personal-server/scope-resolver.d.ts +22 -0
  88. package/dist/personal-server/scope-resolver.d.ts.map +1 -0
  89. package/dist/personal-server/scope-resolver.js +68 -0
  90. package/dist/personal-server/scope-resolver.js.map +1 -0
  91. package/dist/runtime/core/contracts.d.ts +84 -0
  92. package/dist/runtime/core/contracts.d.ts.map +1 -0
  93. package/dist/runtime/core/contracts.js +2 -0
  94. package/dist/runtime/core/contracts.js.map +1 -0
  95. package/dist/runtime/core/index.d.ts +2 -0
  96. package/dist/runtime/core/index.d.ts.map +1 -0
  97. package/dist/runtime/core/index.js +2 -0
  98. package/dist/runtime/core/index.js.map +1 -0
  99. package/dist/runtime/index.d.ts +1 -0
  100. package/dist/runtime/index.d.ts.map +1 -1
  101. package/dist/runtime/index.js.map +1 -1
  102. package/dist/runtime/managed-playwright.d.ts +12 -3
  103. package/dist/runtime/managed-playwright.d.ts.map +1 -1
  104. package/dist/runtime/managed-playwright.js +124 -187
  105. package/dist/runtime/managed-playwright.js.map +1 -1
  106. package/dist/runtime/playwright/browser.d.ts +12 -0
  107. package/dist/runtime/playwright/browser.d.ts.map +1 -0
  108. package/dist/runtime/playwright/browser.js +229 -0
  109. package/dist/runtime/playwright/browser.js.map +1 -0
  110. package/dist/runtime/playwright/in-process-run.d.ts +6 -0
  111. package/dist/runtime/playwright/in-process-run.d.ts.map +1 -0
  112. package/dist/runtime/playwright/in-process-run.js +628 -0
  113. package/dist/runtime/playwright/in-process-run.js.map +1 -0
  114. package/dist/runtime/playwright/index.d.ts +3 -0
  115. package/dist/runtime/playwright/index.d.ts.map +1 -0
  116. package/dist/runtime/playwright/index.js +3 -0
  117. package/dist/runtime/playwright/index.js.map +1 -0
  118. package/dist/runtime/repo-paths.d.ts.map +1 -1
  119. package/dist/runtime/repo-paths.js +24 -7
  120. package/dist/runtime/repo-paths.js.map +1 -1
  121. package/dist/skills/index.d.ts +4 -0
  122. package/dist/skills/index.d.ts.map +1 -0
  123. package/dist/skills/index.js +3 -0
  124. package/dist/skills/index.js.map +1 -0
  125. package/dist/skills/paths.d.ts +33 -0
  126. package/dist/skills/paths.d.ts.map +1 -0
  127. package/dist/skills/paths.js +81 -0
  128. package/dist/skills/paths.js.map +1 -0
  129. package/dist/skills/registry.d.ts +48 -0
  130. package/dist/skills/registry.d.ts.map +1 -0
  131. package/dist/skills/registry.js +173 -0
  132. package/dist/skills/registry.js.map +1 -0
  133. package/package.json +34 -9
  134. package/runtime-assets/playwright-runner/entitlements.plist +0 -12
  135. package/runtime-assets/playwright-runner/index.cjs +0 -1011
  136. package/runtime-assets/playwright-runner/package-lock.json +0 -1242
  137. package/runtime-assets/playwright-runner/package.json +0 -29
  138. package/runtime-assets/playwright-runner/scripts/build.js +0 -182
  139. package/runtime-assets/run-connector.cjs +0 -275
@@ -1,29 +0,0 @@
1
- {
2
- "name": "dataconnect-playwright-runner",
3
- "version": "1.0.0",
4
- "description": "Playwright sidecar for DataConnect connectors",
5
- "main": "index.cjs",
6
- "type": "module",
7
- "scripts": {
8
- "start": "node index.cjs",
9
- "build": "node scripts/build.js",
10
- "build:lean": "node scripts/build.js --lean",
11
- "postinstall": "playwright install chromium"
12
- },
13
- "pkg": {
14
- "assets": [],
15
- "targets": [
16
- "node20-macos-arm64",
17
- "node20-macos-x64",
18
- "node20-win-x64",
19
- "node20-linux-x64"
20
- ],
21
- "outputPath": "dist"
22
- },
23
- "dependencies": {
24
- "playwright": "^1.40.0"
25
- },
26
- "devDependencies": {
27
- "@yao-pkg/pkg": "^5.12.0"
28
- }
29
- }
@@ -1,182 +0,0 @@
1
- /**
2
- * Build script for playwright-runner
3
- *
4
- * Creates standalone binaries with bundled Node.js and copies Playwright browsers.
5
- */
6
-
7
- import { execSync } from "child_process";
8
- import {
9
- existsSync,
10
- mkdirSync,
11
- cpSync,
12
- rmSync,
13
- readdirSync,
14
- statSync,
15
- } from "fs";
16
- import { join, dirname } from "path";
17
- import { fileURLToPath } from "url";
18
- import { homedir, platform, arch } from "os";
19
-
20
- const __dirname = dirname(fileURLToPath(import.meta.url));
21
- const ROOT = join(__dirname, "..");
22
- const DIST = join(ROOT, "dist");
23
-
24
- // Determine current platform
25
- const PLATFORM = platform();
26
- const ARCH = arch();
27
-
28
- function log(msg) {
29
- console.log(`[build] ${msg}`);
30
- }
31
-
32
- function exec(cmd, opts = {}) {
33
- log(`Running: ${cmd}`);
34
- execSync(cmd, { stdio: "inherit", cwd: ROOT, ...opts });
35
- }
36
-
37
- // Get Playwright browser path
38
- function getPlaywrightBrowserPath() {
39
- // Playwright stores browsers in different locations depending on OS:
40
- // - macOS: ~/Library/Caches/ms-playwright
41
- // - Linux: ~/.cache/ms-playwright
42
- // - Windows: %LOCALAPPDATA%\ms-playwright
43
- if (PLATFORM === "darwin") {
44
- return join(homedir(), "Library", "Caches", "ms-playwright");
45
- } else if (PLATFORM === "win32") {
46
- return join(process.env.LOCALAPPDATA || "", "ms-playwright");
47
- }
48
- return join(homedir(), ".cache", "ms-playwright");
49
- }
50
-
51
- // Find the chromium directory
52
- function findChromiumDir(basePath) {
53
- if (!existsSync(basePath)) {
54
- return null;
55
- }
56
-
57
- const entries = readdirSync(basePath);
58
- const chromiumDir = entries.find((e) => e.startsWith("chromium-"));
59
-
60
- if (chromiumDir) {
61
- return join(basePath, chromiumDir);
62
- }
63
- return null;
64
- }
65
-
66
- // Get pkg target for current platform
67
- function getPkgTarget() {
68
- const nodeVersion = "node20";
69
-
70
- if (PLATFORM === "darwin") {
71
- return ARCH === "arm64"
72
- ? `${nodeVersion}-macos-arm64`
73
- : `${nodeVersion}-macos-x64`;
74
- } else if (PLATFORM === "win32") {
75
- return `${nodeVersion}-win-x64`;
76
- } else {
77
- return `${nodeVersion}-linux-x64`;
78
- }
79
- }
80
-
81
- // Get output binary name
82
- function getOutputName() {
83
- const base = "playwright-runner";
84
- if (PLATFORM === "win32") {
85
- return `${base}.exe`;
86
- }
87
- return base;
88
- }
89
-
90
- async function build() {
91
- // Check for --lean flag (production builds without bundled Chromium)
92
- const isLean = process.argv.includes("--lean");
93
-
94
- log(`Starting ${isLean ? "LEAN " : ""}build...`);
95
- if (isLean) {
96
- log(
97
- "Lean mode: Chromium will NOT be bundled (downloaded on-demand at runtime)",
98
- );
99
- }
100
-
101
- // Clean dist
102
- if (existsSync(DIST)) {
103
- rmSync(DIST, { recursive: true });
104
- }
105
- mkdirSync(DIST, { recursive: true });
106
-
107
- // Only install browsers if not lean build (needed for pkg to bundle playwright-core)
108
- if (!isLean) {
109
- log("Ensuring Playwright browsers are installed...");
110
- exec("npx playwright install chromium");
111
- }
112
-
113
- // Build with pkg
114
- const target = getPkgTarget();
115
- const outputName = getOutputName();
116
- const outputPath = join(DIST, outputName);
117
-
118
- log(`Building for target: ${target}`);
119
- exec(
120
- `npx pkg index.cjs -t ${target} -o "${outputPath}" --no-bytecode --public-packages '*' --public`,
121
- );
122
-
123
- // Copy Playwright browser (only for non-lean builds)
124
- if (!isLean) {
125
- const browserSrc = getPlaywrightBrowserPath();
126
- const chromiumDir = findChromiumDir(browserSrc);
127
-
128
- if (chromiumDir) {
129
- const browserDest = join(DIST, "browsers");
130
- mkdirSync(browserDest, { recursive: true });
131
-
132
- const chromiumDirName =
133
- chromiumDir.split("/").pop() || chromiumDir.split("\\").pop();
134
- const destPath = join(browserDest, chromiumDirName);
135
-
136
- log(`Copying Chromium from ${chromiumDir} to ${destPath}...`);
137
- cpSync(chromiumDir, destPath, { recursive: true });
138
-
139
- log("Browser copied successfully");
140
- } else {
141
- log(
142
- 'WARNING: Could not find Chromium browser. Run "npx playwright install chromium" first.',
143
- );
144
- }
145
- } else {
146
- log("Skipping browser copy (lean build)");
147
- }
148
-
149
- // Sign the binary on macOS (required for it to run after being copied)
150
- if (PLATFORM === "darwin") {
151
- log("Signing binary for macOS...");
152
- try {
153
- execSync(`codesign --force --sign - "${outputPath}"`, {
154
- stdio: "inherit",
155
- });
156
- log("Binary signed successfully");
157
- } catch {
158
- log(
159
- "Warning: Failed to sign binary (may cause issues running the binary)",
160
- );
161
- }
162
- }
163
-
164
- log("Build complete!");
165
- log(`Output: ${DIST}`);
166
-
167
- // List output
168
- const files = readdirSync(DIST);
169
- log("Contents:");
170
- for (const file of files) {
171
- const stat = statSync(join(DIST, file));
172
- const size = stat.isDirectory()
173
- ? "dir"
174
- : `${(stat.size / 1024 / 1024).toFixed(1)}MB`;
175
- log(` ${file} (${size})`);
176
- }
177
- }
178
-
179
- build().catch((err) => {
180
- console.error("Build failed:", err);
181
- process.exit(1);
182
- });
@@ -1,275 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * run-connector.cjs — Run a data connector headlessly.
4
- *
5
- * Usage: node run-connector.cjs <connector-path> [start-url] [options]
6
- *
7
- * Options:
8
- * --inputs '{"key":"val"}' Pre-supply credentials/2FA
9
- * --output <path> Result file path (default: ~/.dataconnect/last-result.json)
10
- * --pretty Human-readable colored output instead of JSON
11
- * --runner-dir <path> Path to playwright-runner (auto-detected if not set)
12
- *
13
- * Exit codes: 0 success, 1 error, 2 needs input, 3 legacy auth unsupported.
14
- *
15
- * Default output is line-delimited JSON on stdout:
16
- * need-input, legacy-auth, result, log, error
17
- *
18
- * With --pretty, output is colored human-readable text.
19
- */
20
-
21
- const { spawn } = require('child_process');
22
- const fs = require('fs');
23
- const path = require('path');
24
- const os = require('os');
25
-
26
- const homedir = os.homedir();
27
-
28
- const rawArgs = process.argv.slice(2);
29
- const positional = [];
30
- let preSuppliedInputs = {};
31
- let pretty = false;
32
- let outputPath = path.join(homedir, '.dataconnect', 'last-result.json');
33
- let runnerDir = null;
34
-
35
- for (let i = 0; i < rawArgs.length; i++) {
36
- if (rawArgs[i] === '--inputs' && rawArgs[i + 1]) {
37
- try { preSuppliedInputs = JSON.parse(rawArgs[++i]); }
38
- catch (e) { console.error('Invalid --inputs JSON:', e.message); process.exit(1); }
39
- } else if (rawArgs[i] === '--output' && rawArgs[i + 1]) {
40
- outputPath = rawArgs[++i];
41
- } else if (rawArgs[i] === '--runner-dir' && rawArgs[i + 1]) {
42
- runnerDir = rawArgs[++i];
43
- } else if (rawArgs[i] === '--pretty') {
44
- pretty = true;
45
- } else if (!rawArgs[i].startsWith('--')) {
46
- positional.push(rawArgs[i]);
47
- }
48
- }
49
-
50
- const connectorPath = positional[0];
51
- const startUrl = positional[1] || 'about:blank';
52
-
53
- if (!connectorPath) {
54
- console.error('Usage: node run-connector.cjs <connector-path> [start-url] [--inputs \'{"key":"val"}\'] [--pretty]');
55
- process.exit(1);
56
- }
57
-
58
- const connectorSlug = path.basename(connectorPath, path.extname(connectorPath));
59
- const runId = `${connectorSlug}-${Date.now()}`;
60
- const PENDING_INPUT_PATH = path.join(homedir, '.dataconnect', `pending-input-${runId}.json`);
61
- const INPUT_RESPONSE_PATH = path.join(homedir, '.dataconnect', `input-response-${runId}.json`);
62
-
63
- const c = {
64
- reset: '\x1b[0m', bold: '\x1b[1m', dim: '\x1b[2m',
65
- red: '\x1b[31m', green: '\x1b[32m', yellow: '\x1b[33m',
66
- blue: '\x1b[34m', magenta: '\x1b[35m', cyan: '\x1b[36m', gray: '\x1b[90m',
67
- };
68
-
69
- function prettyPrint(color, prefix, msg) {
70
- const ts = new Date().toLocaleTimeString('en-US', { hour12: false });
71
- console.log(`${c.gray}${ts}${c.reset} ${color}${prefix}${c.reset} ${msg}`);
72
- }
73
-
74
- function emit(obj) {
75
- if (pretty) {
76
- switch (obj.type) {
77
- case 'need-input':
78
- prettyPrint(c.magenta, '[input]', obj.message);
79
- if (obj.schema?.properties) {
80
- prettyPrint(c.dim, ' ', `Fields: ${Object.keys(obj.schema.properties).join(', ')}`);
81
- }
82
- break;
83
- case 'legacy-auth':
84
- prettyPrint(c.yellow, '[auth] ', obj.message);
85
- break;
86
- case 'result': {
87
- const size = fs.existsSync(obj.resultPath)
88
- ? (fs.statSync(obj.resultPath).size / 1024).toFixed(1) + ' KB'
89
- : '';
90
- prettyPrint(c.green, '[result]', `Saved to ${obj.resultPath} ${size ? `(${size})` : ''}`);
91
- break;
92
- }
93
- case 'log':
94
- prettyPrint(c.gray, '[log] ', obj.message || '');
95
- break;
96
- case 'error':
97
- prettyPrint(c.red, '[error]', obj.message || '');
98
- break;
99
- }
100
- } else {
101
- console.log(JSON.stringify(obj));
102
- }
103
- }
104
-
105
- function resolveRunnerDir() {
106
- if (runnerDir) {
107
- if (fs.existsSync(path.join(runnerDir, 'index.cjs'))) return runnerDir;
108
- console.error(`Runner not found at: ${runnerDir}`);
109
- process.exit(1);
110
- }
111
-
112
- const candidates = [
113
- path.join(homedir, '.dataconnect', 'playwright-runner'),
114
- process.env.PLAYWRIGHT_RUNNER_DIR,
115
- ].filter(Boolean);
116
-
117
- for (const dir of candidates) {
118
- if (fs.existsSync(path.join(dir, 'index.cjs'))) return dir;
119
- }
120
-
121
- console.error('Could not find playwright-runner. Run `vana setup` first.');
122
- process.exit(1);
123
- }
124
-
125
- try { fs.unlinkSync(PENDING_INPUT_PATH); } catch {}
126
- try { fs.unlinkSync(INPUT_RESPONSE_PATH); } catch {}
127
-
128
- const resolvedRunnerDir = resolveRunnerDir();
129
-
130
- if (pretty) {
131
- console.log(`${c.bold}run-connector${c.reset}`);
132
- console.log(` ${c.cyan}Connector:${c.reset} ${connectorPath}`);
133
- console.log(` ${c.cyan}URL:${c.reset} ${startUrl}`);
134
- console.log(` ${c.cyan}Output:${c.reset} ${outputPath}`);
135
- console.log(` ${c.cyan}Runner:${c.reset} ${resolvedRunnerDir}`);
136
- console.log('');
137
- }
138
-
139
- const runner = spawn(process.execPath, ['index.cjs'], {
140
- cwd: resolvedRunnerDir,
141
- stdio: ['pipe', 'pipe', 'pipe'],
142
- });
143
-
144
- runner.stderr.on('data', (chunk) => {
145
- if (pretty) {
146
- for (const line of chunk.toString().split('\n').filter(l => l.trim())) {
147
- prettyPrint(c.dim, '[runner]', line.replace('[PlaywrightRunner] ', ''));
148
- }
149
- } else {
150
- process.stderr.write(chunk);
151
- }
152
- });
153
-
154
- let buffer = '';
155
- const consumedFields = new Set();
156
-
157
- runner.stdout.on('data', (chunk) => {
158
- buffer += chunk.toString();
159
- const lines = buffer.split('\n');
160
- buffer = lines.pop();
161
- for (const line of lines) {
162
- if (!line.trim()) continue;
163
- try { handleMessage(JSON.parse(line)); }
164
- catch (e) { process.stderr.write('[non-json] ' + line + '\n'); }
165
- }
166
- });
167
-
168
- function handleMessage(msg) {
169
- switch (msg.type) {
170
- case 'ready':
171
- runner.stdin.write(JSON.stringify({
172
- type: 'run', runId,
173
- connectorPath: path.resolve(connectorPath),
174
- url: startUrl, headless: true, allowHeaded: false,
175
- }) + '\n');
176
- if (pretty) prettyPrint(c.green, '[ready]', 'Connected, starting connector...');
177
- break;
178
-
179
- case 'request-input': {
180
- const { requestId, payload } = msg;
181
- const schema = payload?.schema;
182
- const fields = schema?.properties ? Object.keys(schema.properties) : [];
183
- const available = fields.filter(f => f in preSuppliedInputs && !consumedFields.has(f));
184
-
185
- if (available.length > 0) {
186
- const data = {};
187
- for (const f of fields) {
188
- if (f in preSuppliedInputs && !consumedFields.has(f)) {
189
- data[f] = preSuppliedInputs[f];
190
- consumedFields.add(f);
191
- }
192
- }
193
- runner.stdin.write(JSON.stringify({
194
- type: 'input-response', runId, requestId, data,
195
- }) + '\n');
196
- } else {
197
- const pendingInput = {
198
- requestId,
199
- message: payload?.message || 'Input required',
200
- schema: schema || {},
201
- previousInputs: [...consumedFields],
202
- timestamp: new Date().toISOString(),
203
- };
204
- fs.writeFileSync(PENDING_INPUT_PATH, JSON.stringify(pendingInput, null, 2));
205
-
206
- emit({
207
- type: 'need-input',
208
- message: pendingInput.message,
209
- schema: pendingInput.schema,
210
- pendingInputPath: PENDING_INPUT_PATH,
211
- responseInputPath: INPUT_RESPONSE_PATH,
212
- ...(consumedFields.size > 0 && { previousInputs: pendingInput.previousInputs }),
213
- });
214
-
215
- const poll = setInterval(() => {
216
- if (!fs.existsSync(INPUT_RESPONSE_PATH)) {
217
- return;
218
- }
219
-
220
- clearInterval(poll);
221
- try {
222
- const response = JSON.parse(fs.readFileSync(INPUT_RESPONSE_PATH, 'utf-8'));
223
- try { fs.unlinkSync(INPUT_RESPONSE_PATH); } catch {}
224
- try { fs.unlinkSync(PENDING_INPUT_PATH); } catch {}
225
-
226
- if (response && typeof response === 'object') {
227
- for (const f of Object.keys(response)) consumedFields.add(f);
228
- }
229
-
230
- runner.stdin.write(JSON.stringify({
231
- type: 'input-response', runId, requestId, data: response,
232
- }) + '\n');
233
- } catch (e) {
234
- try { fs.unlinkSync(INPUT_RESPONSE_PATH); } catch {}
235
- try { fs.unlinkSync(PENDING_INPUT_PATH); } catch {}
236
- runner.stdin.write(JSON.stringify({
237
- type: 'input-response', runId, requestId,
238
- error: 'Invalid response file: ' + e.message,
239
- }) + '\n');
240
- }
241
- }, 1000);
242
- }
243
- break;
244
- }
245
-
246
- case 'run-completed':
247
- if (msg.result?.ok) {
248
- fs.mkdirSync(path.dirname(outputPath), { recursive: true });
249
- fs.writeFileSync(outputPath, JSON.stringify(msg.result.data, null, 2));
250
- emit({ type: 'result', resultPath: outputPath });
251
- process.exit(0);
252
- }
253
- emit({
254
- type: 'error',
255
- message: msg.result?.error || 'Connector run failed.',
256
- });
257
- process.exit(1);
258
- break;
259
-
260
- case 'run-error':
261
- if (String(msg.error || '').includes('showBrowser') || String(msg.error || '').includes('promptUser')) {
262
- emit({
263
- type: 'legacy-auth',
264
- message: 'This connector uses legacy authentication (showBrowser/promptUser) which is not supported in batch mode. Either use a migrated connector that supports requestInput, or establish a session manually first.',
265
- });
266
- process.exit(3);
267
- }
268
- emit({
269
- type: 'error',
270
- message: msg.error || 'Runner error.',
271
- });
272
- process.exit(1);
273
- break;
274
- }
275
- }