@sonisoft/now-sdk-ext-cli 5.6.0 → 5.7.1
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.
- package/README.md +139 -80
- package/dist/commands/auth/browser-session.js +2 -2
- package/dist/commands/auth/browser-session.js.map +1 -1
- package/dist/commands/auth/open.d.ts +19 -0
- package/dist/commands/auth/open.d.ts.map +1 -0
- package/dist/commands/auth/open.js +88 -0
- package/dist/commands/auth/open.js.map +1 -0
- package/dist/commands/exec/index.d.ts +2 -0
- package/dist/commands/exec/index.d.ts.map +1 -1
- package/dist/commands/exec/index.js +24 -1
- package/dist/commands/exec/index.js.map +1 -1
- package/dist/common/scope-autocomplete.d.ts.map +1 -1
- package/dist/common/scope-autocomplete.js +5 -3
- package/dist/common/scope-autocomplete.js.map +1 -1
- package/dist/common/script-scope-error.d.ts +32 -0
- package/dist/common/script-scope-error.d.ts.map +1 -0
- package/dist/common/script-scope-error.js +46 -0
- package/dist/common/script-scope-error.js.map +1 -0
- package/dist/common/sdk-logger.d.ts +9 -0
- package/dist/common/sdk-logger.d.ts.map +1 -0
- package/dist/common/sdk-logger.js +21 -0
- package/dist/common/sdk-logger.js.map +1 -0
- package/dist/services/desktop-browser.service.d.ts +56 -0
- package/dist/services/desktop-browser.service.d.ts.map +1 -0
- package/dist/services/desktop-browser.service.js +283 -0
- package/dist/services/desktop-browser.service.js.map +1 -0
- package/oclif.manifest.json +529 -438
- package/package.json +6 -5
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { execFile, spawn } from 'node:child_process';
|
|
2
|
+
import { constants as fsConstants } from 'node:fs';
|
|
3
|
+
import { access, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { createServer } from 'node:net';
|
|
5
|
+
import { homedir } from 'node:os';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { promisify } from 'node:util';
|
|
8
|
+
export const BROWSER_LABELS = {
|
|
9
|
+
brave: 'Brave',
|
|
10
|
+
chrome: 'Chrome',
|
|
11
|
+
edge: 'Edge',
|
|
12
|
+
};
|
|
13
|
+
const ALIAS_PATTERN = /^[A-Za-z0-9._-]+$/;
|
|
14
|
+
const execFileAsync = promisify(execFile);
|
|
15
|
+
/** User-mode TCP pipe so WSL can reach a Windows-loopback DevTools port. */
|
|
16
|
+
export const CDP_RELAY_SOURCE = `'use strict';
|
|
17
|
+
const net = require('net');
|
|
18
|
+
const listenHost = process.argv[2];
|
|
19
|
+
const port = Number(process.argv[3]);
|
|
20
|
+
if (!listenHost || !Number.isInteger(port)) process.exit(2);
|
|
21
|
+
const server = net.createServer((client) => {
|
|
22
|
+
const upstream = net.connect(port, '127.0.0.1');
|
|
23
|
+
const close = () => { client.destroy(); upstream.destroy(); };
|
|
24
|
+
client.pipe(upstream);
|
|
25
|
+
upstream.pipe(client);
|
|
26
|
+
client.on('error', close);
|
|
27
|
+
upstream.on('error', close);
|
|
28
|
+
});
|
|
29
|
+
server.on('error', () => process.exit(1));
|
|
30
|
+
server.listen(port, listenHost);
|
|
31
|
+
`;
|
|
32
|
+
export function isWsl(env = process.env) {
|
|
33
|
+
return Boolean(env.WSL_DISTRO_NAME || env.WSL_INTEROP);
|
|
34
|
+
}
|
|
35
|
+
export function isWindowsBrowserBinary(binary) {
|
|
36
|
+
return /\.exe$/i.test(binary) || /^\/mnt\/[a-z]\//i.test(binary);
|
|
37
|
+
}
|
|
38
|
+
export function profileDirectory(alias, env = process.env) {
|
|
39
|
+
if (!ALIAS_PATTERN.test(alias)) {
|
|
40
|
+
throw new Error('Auth alias must contain only letters, digits, dots, underscores, or hyphens.');
|
|
41
|
+
}
|
|
42
|
+
const root = env.XDG_STATE_HOME || join(homedir(), '.local', 'state');
|
|
43
|
+
return join(root, 'nex', 'ui-profiles', alias);
|
|
44
|
+
}
|
|
45
|
+
export function toWslPath(windowsPath) {
|
|
46
|
+
const match = /^([A-Za-z]):[\\/](.*)$/.exec(windowsPath);
|
|
47
|
+
if (!match)
|
|
48
|
+
return windowsPath.replaceAll('\\', '/');
|
|
49
|
+
return `/mnt/${match[1].toLowerCase()}/${match[2].replaceAll('\\', '/')}`;
|
|
50
|
+
}
|
|
51
|
+
function windowsPaths(name, env) {
|
|
52
|
+
const programFiles = env.PROGRAMFILES || String.raw `C:\Program Files`;
|
|
53
|
+
const programFilesX86 = env['PROGRAMFILES(X86)'] || String.raw `C:\Program Files (x86)`;
|
|
54
|
+
const localAppData = env.LOCALAPPDATA || join(homedir(), 'AppData', 'Local');
|
|
55
|
+
if (name === 'edge') {
|
|
56
|
+
return [
|
|
57
|
+
`${programFilesX86}\\Microsoft\\Edge\\Application\\msedge.exe`,
|
|
58
|
+
`${programFiles}\\Microsoft\\Edge\\Application\\msedge.exe`,
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
if (name === 'chrome') {
|
|
62
|
+
return [
|
|
63
|
+
`${programFiles}\\Google\\Chrome\\Application\\chrome.exe`,
|
|
64
|
+
`${programFilesX86}\\Google\\Chrome\\Application\\chrome.exe`,
|
|
65
|
+
];
|
|
66
|
+
}
|
|
67
|
+
return [
|
|
68
|
+
`${programFiles}\\BraveSoftware\\Brave-Browser\\Application\\brave.exe`,
|
|
69
|
+
`${programFilesX86}\\BraveSoftware\\Brave-Browser\\Application\\brave.exe`,
|
|
70
|
+
`${localAppData}\\BraveSoftware\\Brave-Browser\\Application\\brave.exe`,
|
|
71
|
+
];
|
|
72
|
+
}
|
|
73
|
+
function macPaths(name) {
|
|
74
|
+
if (name === 'edge')
|
|
75
|
+
return ['/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge'];
|
|
76
|
+
if (name === 'chrome')
|
|
77
|
+
return ['/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'];
|
|
78
|
+
return ['/Applications/Brave Browser.app/Contents/MacOS/Brave Browser'];
|
|
79
|
+
}
|
|
80
|
+
function linuxPaths(name) {
|
|
81
|
+
if (name === 'edge')
|
|
82
|
+
return ['/usr/bin/microsoft-edge', '/usr/bin/microsoft-edge-stable', '/usr/bin/msedge'];
|
|
83
|
+
if (name === 'chrome') {
|
|
84
|
+
return ['/usr/bin/google-chrome', '/usr/bin/google-chrome-stable', '/usr/bin/chromium', '/usr/bin/chromium-browser'];
|
|
85
|
+
}
|
|
86
|
+
return ['/usr/bin/brave-browser', '/usr/bin/brave'];
|
|
87
|
+
}
|
|
88
|
+
export function browserCandidates(name, options = {}) {
|
|
89
|
+
const env = options.env ?? process.env;
|
|
90
|
+
const platform = options.platform ?? process.platform;
|
|
91
|
+
const windows = windowsPaths(name, env);
|
|
92
|
+
if (platform === 'win32')
|
|
93
|
+
return windows;
|
|
94
|
+
if (platform === 'darwin')
|
|
95
|
+
return [...macPaths(name), ...linuxPaths(name)];
|
|
96
|
+
const linux = linuxPaths(name);
|
|
97
|
+
if (isWsl(env))
|
|
98
|
+
return [...windows.map(path => toWslPath(path)), ...linux];
|
|
99
|
+
return linux;
|
|
100
|
+
}
|
|
101
|
+
async function defaultExists(path) {
|
|
102
|
+
try {
|
|
103
|
+
await access(path, fsConstants.F_OK);
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
export async function resolveBrowserBinary(name, options = {}) {
|
|
111
|
+
const exists = options.exists ?? defaultExists;
|
|
112
|
+
const matches = await Promise.all(browserCandidates(name, options).map(async (candidate) => ({ candidate, ok: await exists(candidate) })));
|
|
113
|
+
const hit = matches.find(item => item.ok);
|
|
114
|
+
if (hit)
|
|
115
|
+
return hit.candidate;
|
|
116
|
+
throw new Error(`Could not find ${BROWSER_LABELS[name]}. Install it, or pass --cdp after starting the browser with --remote-debugging-port.`);
|
|
117
|
+
}
|
|
118
|
+
export async function allocateLoopbackPort() {
|
|
119
|
+
return new Promise((resolve, reject) => {
|
|
120
|
+
const server = createServer();
|
|
121
|
+
server.once('error', reject);
|
|
122
|
+
server.listen(0, '127.0.0.1', () => {
|
|
123
|
+
const address = server.address();
|
|
124
|
+
server.close(error => {
|
|
125
|
+
if (error)
|
|
126
|
+
reject(error);
|
|
127
|
+
else if (!address || typeof address === 'string')
|
|
128
|
+
reject(new Error('Could not allocate a loopback port.'));
|
|
129
|
+
else
|
|
130
|
+
resolve(address.port);
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
export function browserLaunchArgs(port, userDataDir) {
|
|
136
|
+
return [
|
|
137
|
+
`--user-data-dir=${userDataDir}`,
|
|
138
|
+
`--remote-debugging-port=${port}`,
|
|
139
|
+
'--remote-allow-origins=*',
|
|
140
|
+
'--no-first-run',
|
|
141
|
+
'--no-default-browser-check',
|
|
142
|
+
'about:blank',
|
|
143
|
+
];
|
|
144
|
+
}
|
|
145
|
+
export function spawnDedicatedBrowser(options) {
|
|
146
|
+
const child = (options.spawn ?? spawn)(options.binary, browserLaunchArgs(options.port, options.userDataDir), {
|
|
147
|
+
detached: true,
|
|
148
|
+
stdio: 'ignore',
|
|
149
|
+
});
|
|
150
|
+
child.unref();
|
|
151
|
+
return child;
|
|
152
|
+
}
|
|
153
|
+
export function parseDedicatedBrowserPort(commandLine, alias) {
|
|
154
|
+
if (!ALIAS_PATTERN.test(alias))
|
|
155
|
+
return;
|
|
156
|
+
const marker = `nex\\ui-profiles\\${alias}`;
|
|
157
|
+
const posix = `nex/ui-profiles/${alias}`;
|
|
158
|
+
if (!commandLine.includes(marker) && !commandLine.includes(posix))
|
|
159
|
+
return;
|
|
160
|
+
const match = /--remote-debugging-port=(\d+)/.exec(commandLine);
|
|
161
|
+
if (!match)
|
|
162
|
+
return;
|
|
163
|
+
const port = Number(match[1]);
|
|
164
|
+
return Number.isInteger(port) && port > 0 ? port : undefined;
|
|
165
|
+
}
|
|
166
|
+
export async function findDedicatedWindowsBrowserPort(alias, options = {}) {
|
|
167
|
+
const lines = options.commandLines ?? await listWindowsBrowserCommandLines(options.execFile);
|
|
168
|
+
for (const line of lines) {
|
|
169
|
+
const port = parseDedicatedBrowserPort(line, alias);
|
|
170
|
+
if (port)
|
|
171
|
+
return port;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
async function listWindowsBrowserCommandLines(execFileImpl = execFileAsync) {
|
|
175
|
+
try {
|
|
176
|
+
const { stdout } = await execFileImpl('powershell.exe', ['-NoProfile', '-Command', 'Get-CimInstance Win32_Process -Filter "name=\'msedge.exe\'" | Select-Object -ExpandProperty CommandLine'], { cwd: '/mnt/c/Windows', timeout: 10_000 });
|
|
177
|
+
return stdout.split(/\r?\n/).map(line => line.trim()).filter(Boolean);
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return [];
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
export function windowsProfileDirectory(alias, localAppData) {
|
|
184
|
+
if (!ALIAS_PATTERN.test(alias)) {
|
|
185
|
+
throw new Error('Auth alias must contain only letters, digits, dots, underscores, or hyphens.');
|
|
186
|
+
}
|
|
187
|
+
return `${localAppData}\\nex\\ui-profiles\\${alias}`;
|
|
188
|
+
}
|
|
189
|
+
export function parseProcNetRouteGateway(table) {
|
|
190
|
+
for (const line of table.split(/\r?\n/)) {
|
|
191
|
+
const columns = line.trim().split(/\s+/);
|
|
192
|
+
if (columns[1] !== '00000000' || !columns[2] || columns[2] === '00000000')
|
|
193
|
+
continue;
|
|
194
|
+
const hex = columns[2];
|
|
195
|
+
if (!/^[0-9A-Fa-f]{8}$/.test(hex))
|
|
196
|
+
continue;
|
|
197
|
+
return [hex.slice(6, 8), hex.slice(4, 6), hex.slice(2, 4), hex.slice(0, 2)]
|
|
198
|
+
.map(part => Number.parseInt(part, 16))
|
|
199
|
+
.join('.');
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
export function wslWindowsHost(env = process.env, routeTable) {
|
|
203
|
+
const override = env.NEX_WSL_HOST?.trim();
|
|
204
|
+
if (override)
|
|
205
|
+
return override;
|
|
206
|
+
if (routeTable === undefined)
|
|
207
|
+
return;
|
|
208
|
+
return parseProcNetRouteGateway(routeTable);
|
|
209
|
+
}
|
|
210
|
+
export async function resolveWindowsLocalAppData(env = process.env) {
|
|
211
|
+
const fromEnv = env.LOCALAPPDATA?.trim();
|
|
212
|
+
if (fromEnv)
|
|
213
|
+
return fromEnv;
|
|
214
|
+
const { stdout } = await execFileAsync('cmd.exe', ['/c', 'echo %LOCALAPPDATA%'], {
|
|
215
|
+
cwd: '/mnt/c/Windows',
|
|
216
|
+
timeout: 10_000,
|
|
217
|
+
});
|
|
218
|
+
const value = stdout.trim();
|
|
219
|
+
if (!value || value.includes('%LOCALAPPDATA%')) {
|
|
220
|
+
throw new Error('Could not resolve %LOCALAPPDATA% for a Windows browser profile.');
|
|
221
|
+
}
|
|
222
|
+
return value;
|
|
223
|
+
}
|
|
224
|
+
function windowsNodeCandidates(localAppData) {
|
|
225
|
+
return [
|
|
226
|
+
'/mnt/c/Program Files/nodejs/node.exe',
|
|
227
|
+
`${toWslPath(localAppData)}/hermes/node/node.exe`,
|
|
228
|
+
];
|
|
229
|
+
}
|
|
230
|
+
async function resolveWindowsNodeBinary(localAppData, exists) {
|
|
231
|
+
const matches = await Promise.all(windowsNodeCandidates(localAppData).map(async (candidate) => ({ candidate, ok: await exists(candidate) })));
|
|
232
|
+
const hit = matches.find(item => item.ok);
|
|
233
|
+
if (hit)
|
|
234
|
+
return hit.candidate;
|
|
235
|
+
throw new Error('WSL cannot reach Windows Edge DevTools on 127.0.0.1. Install Node.js on Windows for the localhost relay, or pass --cdp after starting Edge with --remote-debugging-port.');
|
|
236
|
+
}
|
|
237
|
+
export async function readWslWindowsHost(env = process.env) {
|
|
238
|
+
const override = wslWindowsHost(env);
|
|
239
|
+
if (override)
|
|
240
|
+
return override;
|
|
241
|
+
const table = await readFile('/proc/net/route', 'utf8');
|
|
242
|
+
const host = parseProcNetRouteGateway(table);
|
|
243
|
+
if (!host) {
|
|
244
|
+
throw new Error('Could not find the Windows host address from WSL. Set NEX_WSL_HOST or pass --cdp after starting the browser with --remote-debugging-port.');
|
|
245
|
+
}
|
|
246
|
+
return host;
|
|
247
|
+
}
|
|
248
|
+
export async function startWslWindowsCdpBridge(alias, binary, options = {}) {
|
|
249
|
+
const env = options.env ?? process.env;
|
|
250
|
+
const exists = options.exists ?? defaultExists;
|
|
251
|
+
const makeDirectory = options.mkdir ?? mkdir;
|
|
252
|
+
const write = options.writeFile ?? writeFile;
|
|
253
|
+
const localAppData = options.localAppData ?? await resolveWindowsLocalAppData(env);
|
|
254
|
+
const host = options.host ?? await readWslWindowsHost(env);
|
|
255
|
+
const existingPort = options.existingPort ?? (options.port === undefined ? await findDedicatedWindowsBrowserPort(alias) : undefined);
|
|
256
|
+
const port = options.port ?? existingPort ?? await allocateLoopbackPort();
|
|
257
|
+
const userDataDir = windowsProfileDirectory(alias, localAppData);
|
|
258
|
+
const profileOnWsl = toWslPath(userDataDir);
|
|
259
|
+
await makeDirectory(profileOnWsl, { mode: 0o700, recursive: true });
|
|
260
|
+
if (existingPort === undefined) {
|
|
261
|
+
spawnDedicatedBrowser({
|
|
262
|
+
binary,
|
|
263
|
+
port,
|
|
264
|
+
spawn: options.spawn,
|
|
265
|
+
userDataDir,
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
const nodeBinary = options.nodeBinary ?? await resolveWindowsNodeBinary(localAppData, exists);
|
|
269
|
+
const relayWindowsPath = `${localAppData}\\Temp\\nex-cdp-relay.cjs`;
|
|
270
|
+
await write(toWslPath(relayWindowsPath), CDP_RELAY_SOURCE, 'utf8');
|
|
271
|
+
const relay = (options.spawn ?? spawn)(nodeBinary, [relayWindowsPath, host, String(port)], {
|
|
272
|
+
stdio: 'ignore',
|
|
273
|
+
windowsHide: true,
|
|
274
|
+
});
|
|
275
|
+
return {
|
|
276
|
+
cdpUrl: `http://${host}:${port}`,
|
|
277
|
+
dispose() {
|
|
278
|
+
relay.kill();
|
|
279
|
+
},
|
|
280
|
+
userDataDir,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=desktop-browser.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"desktop-browser.service.js","sourceRoot":"","sources":["../../src/services/desktop-browser.service.ts"],"names":[],"mappings":"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"}
|