@intentic/browser 1.282.0 → 1.284.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.
package/README.md CHANGED
@@ -31,15 +31,25 @@ fails loudly, which is the behaviour worth having.
31
31
 
32
32
  ## Which browser it drives
33
33
 
34
- **Not the user's own.** A browser only speaks CDP if it was started with `--remote-debugging-port`, and nobody's
35
- everyday browser was; restarting theirs to add the flag would close every tab they had open. So: if a debugging
36
- endpoint is already there, it is used; otherwise a separate instance starts with its own profile directory under
37
- `~/.intentic/browser`.
34
+ **Their browser, not their profile.** A browser only speaks CDP if it was started with `--remote-debugging-port`,
35
+ and nobody's everyday browser was; restarting theirs to add the flag would close every tab they had open. So: if a
36
+ debugging endpoint is already there, it is used; otherwise a separate instance starts with its own profile
37
+ directory under `~/.intentic/browser`.
38
38
 
39
39
  That separate profile is a feature rather than a compromise. It is empty the first time, so the user signs into
40
40
  whatever is needed once, in a window they can watch, and it persists afterwards. Their own session is never
41
41
  automated and never at risk from a misfired click.
42
42
 
43
+ Which *binary* gets started is asked of the OS, not guessed: the browser registered for `https` (Windows'
44
+ `UserChoice` ProgId, `xdg-settings get default-web-browser` on Linux), used whenever it is Chromium-family. A
45
+ default that cannot speak CDP — Firefox, Safari — falls through to the guesses in `browserCandidates`, and those
46
+ are ordered so a browser installed on purpose outranks one the OS shipped: Brave, then Chrome, then Edge. Edge
47
+ exists on every Windows whether its owner wanted one or not, so finding it says nothing about what they use.
48
+
49
+ A Windows caveat worth knowing before someone reports it as a bug: the registered default is frequently Edge on a
50
+ machine whose owner lives in another browser, because setting a default in Windows takes a deliberate trip through
51
+ Settings and a fresh install does not always win one. The browser that opens is then correct and still surprising.
52
+
43
53
  ## Why hand-rolled CDP rather than Puppeteer or Playwright
44
54
 
45
55
  **Not because Playwright is too heavy to ship.** It bundles into the `bun build --compile` binary this ends up
@@ -62,8 +72,9 @@ If a later pair connects, Playwright's accessibility snapshot is a better instru
62
72
 
63
73
  ## What is testable without a browser
64
74
 
65
- `snapshot.ts`'s renderer and ref parsing, and the per-platform browser search: all pure. The CDP calls end in a
66
- real Chrome painting a real page; those need a machine, not a test.
75
+ `snapshot.ts`'s renderer and ref parsing, the per-platform candidate list, and the parsing of what the OS answers
76
+ about its default browser (a registry open command, a `.desktop` Exec line): all pure. Asking the OS shells out,
77
+ and the CDP calls end in a real browser painting a real page; those need a machine, not a test.
67
78
 
68
79
  ## Key files
69
80
 
package/dist/launch.d.ts CHANGED
@@ -1,6 +1,11 @@
1
1
  export declare const DEFAULT_PORT = 9222;
2
2
  export declare const profileDir: () => string;
3
+ export declare const isChromiumFamily: (path: string) => boolean;
3
4
  export declare const browserCandidates: (platform: NodeJS.Platform) => string[];
5
+ export declare const registryValue: (output: string) => string | undefined;
6
+ export declare const executableFromCommand: (command: string) => string | undefined;
7
+ export declare const executableFromDesktopEntry: (contents: string) => string | undefined;
8
+ export declare const defaultBrowser: (platform?: NodeJS.Platform) => Promise<string | undefined>;
4
9
  export declare const ensureBrowser: (port?: number, url?: string) => Promise<{
5
10
  started: boolean;
6
11
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../src/launch.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,YAAY,OAAO,CAAC;AAGjC,eAAO,MAAM,UAAU,QAAO,MAAiD,CAAC;AAIhF,eAAO,MAAM,iBAAiB,aAAc,MAAM,CAAC,QAAQ,KAAG,MAAM,EAqBnE,CAAC;AAqBF,eAAO,MAAM,aAAa,UAAgB,MAAM,QAAuB,MAAM,KAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAgB3G,CAAC"}
1
+ {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../src/launch.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,YAAY,OAAO,CAAC;AAGjC,eAAO,MAAM,UAAU,QAAO,MAAiD,CAAC;AAIhF,eAAO,MAAM,gBAAgB,SAAU,MAAM,KAAG,OAA2E,CAAC;AAK5H,eAAO,MAAM,iBAAiB,aAAc,MAAM,CAAC,QAAQ,KAAG,MAAM,EA2BnE,CAAC;AAYF,eAAO,MAAM,aAAa,WAAY,MAAM,KAAG,MAAM,GAAG,SAAiE,CAAC;AAG1H,eAAO,MAAM,qBAAqB,YAAa,MAAM,KAAG,MAAM,GAAG,SAIhE,CAAC;AAGF,eAAO,MAAM,0BAA0B,aAAc,MAAM,KAAG,MAAM,GAAG,SAOtE,CAAC;AA6DF,eAAO,MAAM,cAAc,cAAoB,MAAM,CAAC,QAAQ,KAAsB,OAAO,CAAC,MAAM,GAAG,SAAS,CAG7G,CAAC;AAsBF,eAAO,MAAM,aAAa,UAAgB,MAAM,QAAuB,MAAM,KAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAgB3G,CAAC"}
package/dist/launch.js CHANGED
@@ -1,17 +1,21 @@
1
- import { spawn } from "node:child_process";
2
- import { existsSync } from "node:fs";
1
+ import { execFile, spawn } from "node:child_process";
2
+ import { existsSync, readFileSync } from "node:fs";
3
3
  import { homedir } from "node:os";
4
4
  import { join } from "node:path";
5
5
  import { probe, waitForPort } from "./cdp.js";
6
6
  import { BrowserError } from "./types.js";
7
7
  export const DEFAULT_PORT = 9222;
8
8
  export const profileDir = () => join(homedir(), ".intentic", "browser");
9
+ export const isChromiumFamily = (path) => /(chrome|chromium|edge|brave|vivaldi|opera|thorium)/i.test(path);
9
10
  export const browserCandidates = (platform) => {
10
11
  if (platform === "win32") {
11
12
  const programFiles = process.env["ProgramFiles"] ?? "C:\\Program Files";
12
13
  const programFilesX86 = process.env["ProgramFiles(x86)"] ?? "C:\\Program Files (x86)";
13
14
  const local = process.env["LOCALAPPDATA"] ?? join(homedir(), "AppData", "Local");
14
15
  return [
16
+ join(programFiles, "BraveSoftware\\Brave-Browser\\Application\\brave.exe"),
17
+ join(programFilesX86, "BraveSoftware\\Brave-Browser\\Application\\brave.exe"),
18
+ join(local, "BraveSoftware\\Brave-Browser\\Application\\brave.exe"),
15
19
  join(programFiles, "Google\\Chrome\\Application\\chrome.exe"),
16
20
  join(programFilesX86, "Google\\Chrome\\Application\\chrome.exe"),
17
21
  join(local, "Google\\Chrome\\Application\\chrome.exe"),
@@ -20,6 +24,9 @@ export const browserCandidates = (platform) => {
20
24
  ];
21
25
  }
22
26
  return [
27
+ "/usr/bin/brave-browser",
28
+ "/usr/bin/brave-browser-stable",
29
+ "/snap/bin/brave",
23
30
  "/usr/bin/google-chrome",
24
31
  "/usr/bin/google-chrome-stable",
25
32
  "/usr/bin/chromium",
@@ -28,7 +35,74 @@ export const browserCandidates = (platform) => {
28
35
  "/snap/bin/chromium",
29
36
  ];
30
37
  };
31
- const findBrowser = () => browserCandidates(process.platform).find((path) => existsSync(path));
38
+ const PROBE_TIMEOUT_MS = 3_000;
39
+ const run = async (command, args) => await new Promise((resolve) => {
40
+ execFile(command, args, { timeout: PROBE_TIMEOUT_MS, windowsHide: true }, (error, stdout) => resolve(error === null ? stdout : ""));
41
+ });
42
+ export const registryValue = (output) => output.match(/REG_[A-Z_]+\s{2,}(.+)$/m)?.[1]?.trim();
43
+ export const executableFromCommand = (command) => {
44
+ const trimmed = command.trim();
45
+ const path = trimmed.startsWith(`"`) ? trimmed.slice(1).split(`"`)[0] : trimmed.split(/\s+/)[0];
46
+ return path === undefined || path === "" ? undefined : path;
47
+ };
48
+ export const executableFromDesktopEntry = (contents) => {
49
+ const exec = contents.match(/^Exec=(.+)$/m)?.[1]?.trim();
50
+ if (exec === undefined) {
51
+ return undefined;
52
+ }
53
+ const command = exec.replace(/%[a-zA-Z]/g, "").trim();
54
+ return executableFromCommand(command);
55
+ };
56
+ const windowsDefault = async () => {
57
+ const reg = join(process.env["SystemRoot"] ?? "C:\\Windows", "System32", "reg.exe");
58
+ const choice = await run(reg, [
59
+ "query",
60
+ "HKCU\\SOFTWARE\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\https\\UserChoice",
61
+ "/v",
62
+ "ProgId",
63
+ ]);
64
+ const progId = registryValue(choice);
65
+ if (progId === undefined || !/^[A-Za-z0-9._-]+$/.test(progId)) {
66
+ return undefined;
67
+ }
68
+ const command = registryValue(await run(reg, ["query", `HKCR\\${progId}\\shell\\open\\command`, "/ve"]));
69
+ return command === undefined ? undefined : executableFromCommand(command);
70
+ };
71
+ const desktopEntryDirs = () => {
72
+ const dataHome = process.env["XDG_DATA_HOME"] ?? join(homedir(), ".local", "share");
73
+ const dataDirs = (process.env["XDG_DATA_DIRS"] ?? "/usr/local/share:/usr/share").split(":").filter((dir) => dir !== "");
74
+ return [dataHome, ...dataDirs, "/var/lib/flatpak/exports/share", "/var/lib/snapd/desktop"].map((dir) => join(dir, "applications"));
75
+ };
76
+ const readDesktopEntry = (name) => {
77
+ for (const dir of desktopEntryDirs()) {
78
+ const path = join(dir, name);
79
+ if (existsSync(path)) {
80
+ return readFileSync(path, "utf8");
81
+ }
82
+ }
83
+ return undefined;
84
+ };
85
+ const resolveBin = (command) => {
86
+ if (command.includes("/")) {
87
+ return existsSync(command) ? command : undefined;
88
+ }
89
+ return ["/usr/bin", "/usr/local/bin", "/snap/bin"].map((dir) => join(dir, command)).find((path) => existsSync(path));
90
+ };
91
+ const linuxDefault = async () => {
92
+ const name = (await run("xdg-settings", ["get", "default-web-browser"])).trim() ||
93
+ (await run("xdg-mime", ["query", "default", "x-scheme-handler/https"])).trim();
94
+ if (name === "" || !name.endsWith(".desktop")) {
95
+ return undefined;
96
+ }
97
+ const entry = readDesktopEntry(name);
98
+ const exec = entry === undefined ? undefined : executableFromDesktopEntry(entry);
99
+ return exec === undefined ? undefined : resolveBin(exec);
100
+ };
101
+ export const defaultBrowser = async (platform = process.platform) => {
102
+ const path = platform === "win32" ? await windowsDefault() : platform === "linux" ? await linuxDefault() : undefined;
103
+ return path !== undefined && isChromiumFamily(path) && existsSync(path) ? path : undefined;
104
+ };
105
+ const findBrowser = async () => (await defaultBrowser()) ?? browserCandidates(process.platform).find((path) => existsSync(path));
32
106
  const flags = (port, url) => [
33
107
  `--remote-debugging-port=${port}`,
34
108
  `--user-data-dir=${profileDir()}`,
@@ -43,9 +117,9 @@ export const ensureBrowser = async (port = DEFAULT_PORT, url) => {
43
117
  if (await probe(port)) {
44
118
  return { started: false };
45
119
  }
46
- const binary = findBrowser();
120
+ const binary = await findBrowser();
47
121
  if (binary === undefined) {
48
- throw new BrowserError("This computer has no Chrome, Chromium or Edge, and browser control needs one of them.", "Install Google Chrome (or Chromium) and try again.");
122
+ throw new BrowserError("This computer has no Brave, Chrome, Chromium or Edge, and browser control needs one of them.", "Install Brave (or Google Chrome) and try again.");
49
123
  }
50
124
  const child = spawn(binary, flags(port, url), { detached: true, stdio: "ignore" });
51
125
  child.unref();
@@ -1 +1 @@
1
- {"version":3,"file":"launch.js","sourceRoot":"","sources":["../src/launch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"launch.js","sourceRoot":"","sources":["../src/launch.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intentic/browser",
3
- "version": "1.282.0",
3
+ "version": "1.284.0",
4
4
  "description": "Drive a Chromium browser from Node over CDP — open pages, read them as structured text, click and type by element reference. No dependencies.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -41,7 +41,7 @@
41
41
  }
42
42
  },
43
43
  "dependencies": {
44
- "@intentic/base": "1.282.0",
44
+ "@intentic/base": "1.284.0",
45
45
  "tslib": "2.8.1"
46
46
  },
47
47
  "devDependencies": {