@agent-infra/browser 0.0.2 → 0.0.3-beta.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 (41) hide show
  1. package/dist/browser-finder/chrome-paths.d.ts +10 -0
  2. package/dist/browser-finder/chrome-paths.d.ts.map +1 -0
  3. package/dist/browser-finder/chrome-paths.js +160 -0
  4. package/dist/browser-finder/chrome-paths.js.map +1 -0
  5. package/dist/browser-finder/chrome-paths.mjs +118 -0
  6. package/dist/browser-finder/chrome-paths.mjs.map +1 -0
  7. package/dist/browser-finder/firefox-paths.d.ts +2 -0
  8. package/dist/browser-finder/firefox-paths.d.ts.map +1 -0
  9. package/dist/browser-finder/firefox-paths.js +132 -0
  10. package/dist/browser-finder/firefox-paths.js.map +1 -0
  11. package/dist/browser-finder/firefox-paths.mjs +90 -0
  12. package/dist/browser-finder/firefox-paths.mjs.map +1 -0
  13. package/dist/browser-finder/index.d.ts +15 -0
  14. package/dist/browser-finder/index.d.ts.map +1 -0
  15. package/dist/browser-finder/index.js +151 -0
  16. package/dist/browser-finder/index.js.map +1 -0
  17. package/dist/browser-finder/index.mjs +119 -0
  18. package/dist/browser-finder/index.mjs.map +1 -0
  19. package/dist/browser-finder/index.test.d.ts +2 -0
  20. package/dist/browser-finder/index.test.d.ts.map +1 -0
  21. package/dist/index.js +1 -1
  22. package/dist/index.mjs +1 -1
  23. package/dist/local-browser.d.ts +2 -6
  24. package/dist/local-browser.d.ts.map +1 -1
  25. package/dist/local-browser.js +37 -19
  26. package/dist/local-browser.js.map +1 -1
  27. package/dist/local-browser.mjs +37 -19
  28. package/dist/local-browser.mjs.map +1 -1
  29. package/dist/types.d.ts +11 -2
  30. package/dist/types.d.ts.map +1 -1
  31. package/dist/types.js +0 -15
  32. package/dist/types.mjs +0 -3
  33. package/package.json +5 -2
  34. package/dist/browser-finder.d.ts +0 -59
  35. package/dist/browser-finder.d.ts.map +0 -1
  36. package/dist/browser-finder.js +0 -148
  37. package/dist/browser-finder.js.map +0 -1
  38. package/dist/browser-finder.mjs +0 -116
  39. package/dist/browser-finder.mjs.map +0 -1
  40. package/dist/browser-finder.test.d.ts +0 -2
  41. package/dist/browser-finder.test.d.ts.map +0 -1
package/dist/types.js CHANGED
@@ -4,17 +4,6 @@
4
4
  */
5
5
  "use strict";
6
6
  var __webpack_require__ = {};
7
- (()=>{
8
- __webpack_require__.d = (exports1, definition)=>{
9
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
10
- enumerable: true,
11
- get: definition[key]
12
- });
13
- };
14
- })();
15
- (()=>{
16
- __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
17
- })();
18
7
  (()=>{
19
8
  __webpack_require__.r = function(exports1) {
20
9
  if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
@@ -27,10 +16,6 @@ var __webpack_require__ = {};
27
16
  })();
28
17
  var __webpack_exports__ = {};
29
18
  __webpack_require__.r(__webpack_exports__);
30
- __webpack_require__.d(__webpack_exports__, {
31
- Page: ()=>external_puppeteer_core_namespaceObject.Page
32
- });
33
- const external_puppeteer_core_namespaceObject = require("puppeteer-core");
34
19
  var __webpack_export_target__ = exports;
35
20
  for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__];
36
21
  if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', {
package/dist/types.mjs CHANGED
@@ -2,6 +2,3 @@
2
2
  * Copyright (c) 2025 Bytedance, Inc. and its affiliates.
3
3
  * SPDX-License-Identifier: Apache-2.0
4
4
  */
5
- import * as __WEBPACK_EXTERNAL_MODULE_puppeteer_core_17481843__ from "puppeteer-core";
6
- var __webpack_exports__Page = __WEBPACK_EXTERNAL_MODULE_puppeteer_core_17481843__.Page;
7
- export { __webpack_exports__Page as Page };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@agent-infra/browser",
3
3
  "description": "A tiny Browser Control library, built for Agent Tars.",
4
- "version": "0.0.2",
4
+ "version": "0.0.3-beta.0",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
7
7
  "types": "dist/index.d.ts",
@@ -16,11 +16,14 @@
16
16
  "dist"
17
17
  ],
18
18
  "dependencies": {
19
- "puppeteer-core": "24.1.1",
19
+ "puppeteer-core": "24.7.2",
20
+ "which": "5.0.0",
21
+ "edge-paths": "3.0.5",
20
22
  "@agent-infra/logger": "0.0.1",
21
23
  "@agent-infra/shared": "0.0.1"
22
24
  },
23
25
  "devDependencies": {
26
+ "@types/which": "3.0.4",
24
27
  "@types/node": "20.14.8",
25
28
  "typescript": "^5.7.3",
26
29
  "vitest": "3.0.7",
@@ -1,59 +0,0 @@
1
- /**
2
- * The following code is modified based on
3
- * https://github.com/egoist/local-web-search/blob/main/src/find-browser.ts
4
- *
5
- * MIT Licensed
6
- * Copyright (c) 2025 ChatWise (https://chatwise.app) <kevin@chatwise.app>
7
- * https://github.com/egoist/local-web-search/blob/main/LICENSE
8
- */
9
- import { Logger } from '@agent-infra/logger';
10
- /**
11
- * Class responsible for finding and managing browser installations
12
- * Detects installed browsers and their profiles across different platforms
13
- */
14
- export declare class BrowserFinder {
15
- /**
16
- * Logger instance for diagnostic output
17
- * @private
18
- */
19
- private logger;
20
- /**
21
- * Creates a new BrowserFinder instance
22
- * @param {Logger} [logger] - Optional custom logger
23
- */
24
- constructor(logger?: Logger);
25
- /**
26
- * Getter that returns the list of supported browsers with their platform-specific paths
27
- * @returns {Browser[]} Array of browser configurations
28
- * @private
29
- */
30
- private get browsers();
31
- /**
32
- * Find a specific browser or the first available browser
33
- * @param {string} [name] - Optional browser name to find
34
- * @returns {{ executable: string; userDataDir: string }} Browser executable and user data paths
35
- * @throws {Error} If no supported browser is found or the platform is unsupported
36
- */
37
- findBrowser(name?: string): {
38
- executable: string;
39
- userDataDir: string;
40
- };
41
- /**
42
- * Get browser profiles for a specific browser
43
- * Reads the Local State file to extract profile information
44
- * @param {string} [browserName] - Optional browser name to get profiles for
45
- * @returns {Array<{ displayName: string; path: string }>} Array of profile objects with display names and paths
46
- */
47
- getBrowserProfiles(browserName?: string): Array<{
48
- displayName: string;
49
- path: string;
50
- }>;
51
- /**
52
- * Legacy method for backwards compatibility
53
- * Finds Chrome browser executable path
54
- * @deprecated Use findBrowser instead
55
- * @returns {string | null} Chrome executable path or null if not found
56
- */
57
- findChrome(): string | null;
58
- }
59
- //# sourceMappingURL=browser-finder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-finder.d.ts","sourceRoot":"","sources":["../src/browser-finder.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,MAAM,EAAiB,MAAM,qBAAqB,CAAC;AAsC5D;;;GAGG;AACH,qBAAa,aAAa;IACxB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAS;IAEvB;;;OAGG;gBACS,MAAM,CAAC,EAAE,MAAM;IAI3B;;;;OAIG;IACH,OAAO,KAAK,QAAQ,GAiDnB;IAED;;;;;OAKG;IACH,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG;QAC1B,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB;IAuCD;;;;;OAKG;IACH,kBAAkB,CAChB,WAAW,CAAC,EAAE,MAAM,GACnB,KAAK,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAoB/C;;;;;OAKG;IACH,UAAU,IAAI,MAAM,GAAG,IAAI;CAQ5B"}
@@ -1,148 +0,0 @@
1
- /**
2
- * Copyright (c) 2025 Bytedance, Inc. and its affiliates.
3
- * SPDX-License-Identifier: Apache-2.0
4
- */
5
- "use strict";
6
- var __webpack_require__ = {};
7
- (()=>{
8
- __webpack_require__.d = (exports1, definition)=>{
9
- for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
10
- enumerable: true,
11
- get: definition[key]
12
- });
13
- };
14
- })();
15
- (()=>{
16
- __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
17
- })();
18
- (()=>{
19
- __webpack_require__.r = function(exports1) {
20
- if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
21
- value: 'Module'
22
- });
23
- Object.defineProperty(exports1, '__esModule', {
24
- value: true
25
- });
26
- };
27
- })();
28
- var __webpack_exports__ = {};
29
- __webpack_require__.r(__webpack_exports__);
30
- __webpack_require__.d(__webpack_exports__, {
31
- BrowserFinder: ()=>BrowserFinder
32
- });
33
- const external_fs_namespaceObject = require("fs");
34
- const external_path_namespaceObject = require("path");
35
- const external_os_namespaceObject = require("os");
36
- const logger_namespaceObject = require("@agent-infra/logger");
37
- function _define_property(obj, key, value) {
38
- if (key in obj) Object.defineProperty(obj, key, {
39
- value: value,
40
- enumerable: true,
41
- configurable: true,
42
- writable: true
43
- });
44
- else obj[key] = value;
45
- return obj;
46
- }
47
- class BrowserFinder {
48
- get browsers() {
49
- const HOME_DIR = external_os_namespaceObject.homedir();
50
- const LOCAL_APP_DATA = process.env.LOCALAPPDATA;
51
- return [
52
- {
53
- name: 'Chromium',
54
- executable: {
55
- win32: 'C:\\Program Files\\Chromium\\Application\\chrome.exe',
56
- darwin: '/Applications/Chromium.app/Contents/MacOS/Chromium',
57
- linux: '/usr/bin/chromium'
58
- },
59
- userDataDir: {
60
- win32: `${LOCAL_APP_DATA}\\Chromium\\User Data`,
61
- darwin: `${HOME_DIR}/Library/Application Support/Chromium`,
62
- linux: `${HOME_DIR}/.config/chromium`
63
- }
64
- },
65
- {
66
- name: 'Google Chrome',
67
- executable: {
68
- win32: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
69
- darwin: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
70
- linux: '/usr/bin/google-chrome'
71
- },
72
- userDataDir: {
73
- win32: `${LOCAL_APP_DATA}\\Google\\Chrome\\User Data`,
74
- darwin: `${HOME_DIR}/Library/Application Support/Google/Chrome`,
75
- linux: `${HOME_DIR}/.config/google-chrome`
76
- }
77
- },
78
- {
79
- name: 'Google Chrome Canary',
80
- executable: {
81
- win32: 'C:\\Program Files\\Google\\Chrome Canary\\Application\\chrome.exe',
82
- darwin: '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary',
83
- linux: '/usr/bin/google-chrome-canary'
84
- },
85
- userDataDir: {
86
- win32: `${LOCAL_APP_DATA}\\Google\\Chrome Canary\\User Data`,
87
- darwin: `${HOME_DIR}/Library/Application Support/Google/Chrome Canary`,
88
- linux: `${HOME_DIR}/.config/google-chrome-canary`
89
- }
90
- }
91
- ];
92
- }
93
- findBrowser(name) {
94
- const platform = process.platform;
95
- this.logger.info('Finding browser on platform:', platform);
96
- if ('darwin' !== platform && 'win32' !== platform && 'linux' !== platform) {
97
- const error = new Error(`Unsupported platform: ${platform}`);
98
- this.logger.error(error.message);
99
- throw error;
100
- }
101
- const browser = name ? this.browsers.find((b)=>b.name === name && external_fs_namespaceObject.existsSync(b.executable[platform])) : this.browsers.find((b)=>external_fs_namespaceObject.existsSync(b.executable[platform]));
102
- this.logger.log('browser', browser);
103
- if (!browser) {
104
- const error = name ? new Error(`Cannot find browser: ${name}`) : new Error('Cannot find a supported browser on your system. Please install Chrome, Edge, or Brave.');
105
- this.logger.error(error.message);
106
- throw error;
107
- }
108
- const result = {
109
- executable: browser.executable[platform],
110
- userDataDir: browser.userDataDir[platform]
111
- };
112
- this.logger.success(`Found browser: ${browser.name}`);
113
- this.logger.info('Browser details:', result);
114
- return result;
115
- }
116
- getBrowserProfiles(browserName) {
117
- const browser = this.findBrowser(browserName);
118
- try {
119
- const localState = JSON.parse(external_fs_namespaceObject.readFileSync(external_path_namespaceObject.join(browser.userDataDir, 'Local State'), 'utf8'));
120
- const profileInfo = localState.profile.info_cache;
121
- return Object.entries(profileInfo).map(([profileName, info])=>({
122
- displayName: info.name,
123
- path: external_path_namespaceObject.join(browser.userDataDir, profileName)
124
- }));
125
- } catch (error) {
126
- return [];
127
- }
128
- }
129
- findChrome() {
130
- try {
131
- const { executable } = this.findBrowser('Google Chrome');
132
- return executable;
133
- } catch {
134
- return null;
135
- }
136
- }
137
- constructor(logger){
138
- _define_property(this, "logger", void 0);
139
- this.logger = logger ?? logger_namespaceObject.defaultLogger;
140
- }
141
- }
142
- var __webpack_export_target__ = exports;
143
- for(var __webpack_i__ in __webpack_exports__)__webpack_export_target__[__webpack_i__] = __webpack_exports__[__webpack_i__];
144
- if (__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, '__esModule', {
145
- value: true
146
- });
147
-
148
- //# sourceMappingURL=browser-finder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-finder.js","sources":["webpack://@agent-infra/browser/./src/browser-finder.ts"],"sourcesContent":["/**\n * The following code is modified based on\n * https://github.com/egoist/local-web-search/blob/main/src/find-browser.ts\n *\n * MIT Licensed\n * Copyright (c) 2025 ChatWise (https://chatwise.app) <kevin@chatwise.app>\n * https://github.com/egoist/local-web-search/blob/main/LICENSE\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { Logger, defaultLogger } from '@agent-infra/logger';\n\n/**\n * Interface defining browser locations and configurations\n * Contains paths and settings for different operating systems\n * @interface Browser\n */\ninterface Browser {\n /**\n * Browser name identifier\n */\n name: string;\n\n /**\n * Executable paths by platform\n * @property {string} win32 - Windows executable path\n * @property {string} darwin - macOS executable path\n * @property {string} linux - Linux executable path\n */\n executable: {\n win32: string;\n darwin: string;\n linux: string;\n };\n\n /**\n * User data directory paths by platform\n * @property {string} win32 - Windows user data directory\n * @property {string} darwin - macOS user data directory\n * @property {string} linux - Linux user data directory\n */\n userDataDir: {\n win32: string;\n darwin: string;\n linux: string;\n };\n}\n\n/**\n * Class responsible for finding and managing browser installations\n * Detects installed browsers and their profiles across different platforms\n */\nexport class BrowserFinder {\n /**\n * Logger instance for diagnostic output\n * @private\n */\n private logger: Logger;\n\n /**\n * Creates a new BrowserFinder instance\n * @param {Logger} [logger] - Optional custom logger\n */\n constructor(logger?: Logger) {\n this.logger = logger ?? defaultLogger;\n }\n\n /**\n * Getter that returns the list of supported browsers with their platform-specific paths\n * @returns {Browser[]} Array of browser configurations\n * @private\n */\n private get browsers(): Browser[] {\n // Get HOME_DIR inside the getter to ensure it's always current\n const HOME_DIR = os.homedir();\n const LOCAL_APP_DATA = process.env.LOCALAPPDATA;\n\n return [\n {\n name: 'Chromium',\n executable: {\n win32: 'C:\\\\Program Files\\\\Chromium\\\\Application\\\\chrome.exe',\n darwin: '/Applications/Chromium.app/Contents/MacOS/Chromium',\n linux: '/usr/bin/chromium',\n },\n userDataDir: {\n win32: `${LOCAL_APP_DATA}\\\\Chromium\\\\User Data`,\n darwin: `${HOME_DIR}/Library/Application Support/Chromium`,\n linux: `${HOME_DIR}/.config/chromium`,\n },\n },\n {\n name: 'Google Chrome',\n executable: {\n win32: 'C:\\\\Program Files\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe',\n darwin:\n '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',\n linux: '/usr/bin/google-chrome',\n },\n userDataDir: {\n win32: `${LOCAL_APP_DATA}\\\\Google\\\\Chrome\\\\User Data`,\n darwin: `${HOME_DIR}/Library/Application Support/Google/Chrome`,\n linux: `${HOME_DIR}/.config/google-chrome`,\n },\n },\n {\n name: 'Google Chrome Canary',\n executable: {\n win32:\n 'C:\\\\Program Files\\\\Google\\\\Chrome Canary\\\\Application\\\\chrome.exe',\n darwin:\n '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary',\n linux: '/usr/bin/google-chrome-canary',\n },\n userDataDir: {\n win32: `${LOCAL_APP_DATA}\\\\Google\\\\Chrome Canary\\\\User Data`,\n darwin: `${HOME_DIR}/Library/Application Support/Google/Chrome Canary`,\n linux: `${HOME_DIR}/.config/google-chrome-canary`,\n },\n },\n ];\n }\n\n /**\n * Find a specific browser or the first available browser\n * @param {string} [name] - Optional browser name to find\n * @returns {{ executable: string; userDataDir: string }} Browser executable and user data paths\n * @throws {Error} If no supported browser is found or the platform is unsupported\n */\n findBrowser(name?: string): {\n executable: string;\n userDataDir: string;\n } {\n const platform = process.platform;\n this.logger.info('Finding browser on platform:', platform);\n\n if (platform !== 'darwin' && platform !== 'win32' && platform !== 'linux') {\n const error = new Error(`Unsupported platform: ${platform}`);\n this.logger.error(error.message);\n throw error;\n }\n\n const browser = name\n ? this.browsers.find(\n (b) => b.name === name && fs.existsSync(b.executable[platform]),\n )\n : this.browsers.find((b) => fs.existsSync(b.executable[platform]));\n\n this.logger.log('browser', browser);\n\n if (!browser) {\n const error = name\n ? new Error(`Cannot find browser: ${name}`)\n : new Error(\n 'Cannot find a supported browser on your system. Please install Chrome, Edge, or Brave.',\n );\n this.logger.error(error.message);\n throw error;\n }\n\n const result = {\n executable: browser.executable[platform],\n userDataDir: browser.userDataDir[platform],\n };\n\n this.logger.success(`Found browser: ${browser.name}`);\n this.logger.info('Browser details:', result);\n\n return result;\n }\n\n /**\n * Get browser profiles for a specific browser\n * Reads the Local State file to extract profile information\n * @param {string} [browserName] - Optional browser name to get profiles for\n * @returns {Array<{ displayName: string; path: string }>} Array of profile objects with display names and paths\n */\n getBrowserProfiles(\n browserName?: string,\n ): Array<{ displayName: string; path: string }> {\n const browser = this.findBrowser(browserName);\n\n try {\n const localState = JSON.parse(\n fs.readFileSync(path.join(browser.userDataDir, 'Local State'), 'utf8'),\n );\n const profileInfo = localState.profile.info_cache;\n\n return Object.entries(profileInfo).map(\n ([profileName, info]: [string, any]) => ({\n displayName: info.name,\n path: path.join(browser.userDataDir, profileName),\n }),\n );\n } catch (error) {\n return [];\n }\n }\n\n /**\n * Legacy method for backwards compatibility\n * Finds Chrome browser executable path\n * @deprecated Use findBrowser instead\n * @returns {string | null} Chrome executable path or null if not found\n */\n findChrome(): string | null {\n try {\n const { executable } = this.findBrowser('Google Chrome');\n return executable;\n } catch {\n return null;\n }\n }\n}\n"],"names":["BrowserFinder","HOME_DIR","os","LOCAL_APP_DATA","process","name","platform","error","Error","browser","b","fs","result","browserName","localState","JSON","path","profileInfo","Object","profileName","info","executable","logger","defaultLogger"],"mappings":"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"}
@@ -1,116 +0,0 @@
1
- /**
2
- * Copyright (c) 2025 Bytedance, Inc. and its affiliates.
3
- * SPDX-License-Identifier: Apache-2.0
4
- */
5
- import * as __WEBPACK_EXTERNAL_MODULE_fs__ from "fs";
6
- import * as __WEBPACK_EXTERNAL_MODULE_path__ from "path";
7
- import * as __WEBPACK_EXTERNAL_MODULE_os__ from "os";
8
- import * as __WEBPACK_EXTERNAL_MODULE__agent_infra_logger_ddae3da2__ from "@agent-infra/logger";
9
- function _define_property(obj, key, value) {
10
- if (key in obj) Object.defineProperty(obj, key, {
11
- value: value,
12
- enumerable: true,
13
- configurable: true,
14
- writable: true
15
- });
16
- else obj[key] = value;
17
- return obj;
18
- }
19
- class BrowserFinder {
20
- get browsers() {
21
- const HOME_DIR = __WEBPACK_EXTERNAL_MODULE_os__.homedir();
22
- const LOCAL_APP_DATA = process.env.LOCALAPPDATA;
23
- return [
24
- {
25
- name: 'Chromium',
26
- executable: {
27
- win32: 'C:\\Program Files\\Chromium\\Application\\chrome.exe',
28
- darwin: '/Applications/Chromium.app/Contents/MacOS/Chromium',
29
- linux: '/usr/bin/chromium'
30
- },
31
- userDataDir: {
32
- win32: `${LOCAL_APP_DATA}\\Chromium\\User Data`,
33
- darwin: `${HOME_DIR}/Library/Application Support/Chromium`,
34
- linux: `${HOME_DIR}/.config/chromium`
35
- }
36
- },
37
- {
38
- name: 'Google Chrome',
39
- executable: {
40
- win32: 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
41
- darwin: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
42
- linux: '/usr/bin/google-chrome'
43
- },
44
- userDataDir: {
45
- win32: `${LOCAL_APP_DATA}\\Google\\Chrome\\User Data`,
46
- darwin: `${HOME_DIR}/Library/Application Support/Google/Chrome`,
47
- linux: `${HOME_DIR}/.config/google-chrome`
48
- }
49
- },
50
- {
51
- name: 'Google Chrome Canary',
52
- executable: {
53
- win32: 'C:\\Program Files\\Google\\Chrome Canary\\Application\\chrome.exe',
54
- darwin: '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary',
55
- linux: '/usr/bin/google-chrome-canary'
56
- },
57
- userDataDir: {
58
- win32: `${LOCAL_APP_DATA}\\Google\\Chrome Canary\\User Data`,
59
- darwin: `${HOME_DIR}/Library/Application Support/Google/Chrome Canary`,
60
- linux: `${HOME_DIR}/.config/google-chrome-canary`
61
- }
62
- }
63
- ];
64
- }
65
- findBrowser(name) {
66
- const platform = process.platform;
67
- this.logger.info('Finding browser on platform:', platform);
68
- if ('darwin' !== platform && 'win32' !== platform && 'linux' !== platform) {
69
- const error = new Error(`Unsupported platform: ${platform}`);
70
- this.logger.error(error.message);
71
- throw error;
72
- }
73
- const browser = name ? this.browsers.find((b)=>b.name === name && __WEBPACK_EXTERNAL_MODULE_fs__.existsSync(b.executable[platform])) : this.browsers.find((b)=>__WEBPACK_EXTERNAL_MODULE_fs__.existsSync(b.executable[platform]));
74
- this.logger.log('browser', browser);
75
- if (!browser) {
76
- const error = name ? new Error(`Cannot find browser: ${name}`) : new Error('Cannot find a supported browser on your system. Please install Chrome, Edge, or Brave.');
77
- this.logger.error(error.message);
78
- throw error;
79
- }
80
- const result = {
81
- executable: browser.executable[platform],
82
- userDataDir: browser.userDataDir[platform]
83
- };
84
- this.logger.success(`Found browser: ${browser.name}`);
85
- this.logger.info('Browser details:', result);
86
- return result;
87
- }
88
- getBrowserProfiles(browserName) {
89
- const browser = this.findBrowser(browserName);
90
- try {
91
- const localState = JSON.parse(__WEBPACK_EXTERNAL_MODULE_fs__.readFileSync(__WEBPACK_EXTERNAL_MODULE_path__.join(browser.userDataDir, 'Local State'), 'utf8'));
92
- const profileInfo = localState.profile.info_cache;
93
- return Object.entries(profileInfo).map(([profileName, info])=>({
94
- displayName: info.name,
95
- path: __WEBPACK_EXTERNAL_MODULE_path__.join(browser.userDataDir, profileName)
96
- }));
97
- } catch (error) {
98
- return [];
99
- }
100
- }
101
- findChrome() {
102
- try {
103
- const { executable } = this.findBrowser('Google Chrome');
104
- return executable;
105
- } catch {
106
- return null;
107
- }
108
- }
109
- constructor(logger){
110
- _define_property(this, "logger", void 0);
111
- this.logger = logger ?? __WEBPACK_EXTERNAL_MODULE__agent_infra_logger_ddae3da2__.defaultLogger;
112
- }
113
- }
114
- export { BrowserFinder };
115
-
116
- //# sourceMappingURL=browser-finder.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-finder.mjs","sources":["webpack://@agent-infra/browser/./src/browser-finder.ts"],"sourcesContent":["/**\n * The following code is modified based on\n * https://github.com/egoist/local-web-search/blob/main/src/find-browser.ts\n *\n * MIT Licensed\n * Copyright (c) 2025 ChatWise (https://chatwise.app) <kevin@chatwise.app>\n * https://github.com/egoist/local-web-search/blob/main/LICENSE\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as os from 'os';\nimport { Logger, defaultLogger } from '@agent-infra/logger';\n\n/**\n * Interface defining browser locations and configurations\n * Contains paths and settings for different operating systems\n * @interface Browser\n */\ninterface Browser {\n /**\n * Browser name identifier\n */\n name: string;\n\n /**\n * Executable paths by platform\n * @property {string} win32 - Windows executable path\n * @property {string} darwin - macOS executable path\n * @property {string} linux - Linux executable path\n */\n executable: {\n win32: string;\n darwin: string;\n linux: string;\n };\n\n /**\n * User data directory paths by platform\n * @property {string} win32 - Windows user data directory\n * @property {string} darwin - macOS user data directory\n * @property {string} linux - Linux user data directory\n */\n userDataDir: {\n win32: string;\n darwin: string;\n linux: string;\n };\n}\n\n/**\n * Class responsible for finding and managing browser installations\n * Detects installed browsers and their profiles across different platforms\n */\nexport class BrowserFinder {\n /**\n * Logger instance for diagnostic output\n * @private\n */\n private logger: Logger;\n\n /**\n * Creates a new BrowserFinder instance\n * @param {Logger} [logger] - Optional custom logger\n */\n constructor(logger?: Logger) {\n this.logger = logger ?? defaultLogger;\n }\n\n /**\n * Getter that returns the list of supported browsers with their platform-specific paths\n * @returns {Browser[]} Array of browser configurations\n * @private\n */\n private get browsers(): Browser[] {\n // Get HOME_DIR inside the getter to ensure it's always current\n const HOME_DIR = os.homedir();\n const LOCAL_APP_DATA = process.env.LOCALAPPDATA;\n\n return [\n {\n name: 'Chromium',\n executable: {\n win32: 'C:\\\\Program Files\\\\Chromium\\\\Application\\\\chrome.exe',\n darwin: '/Applications/Chromium.app/Contents/MacOS/Chromium',\n linux: '/usr/bin/chromium',\n },\n userDataDir: {\n win32: `${LOCAL_APP_DATA}\\\\Chromium\\\\User Data`,\n darwin: `${HOME_DIR}/Library/Application Support/Chromium`,\n linux: `${HOME_DIR}/.config/chromium`,\n },\n },\n {\n name: 'Google Chrome',\n executable: {\n win32: 'C:\\\\Program Files\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe',\n darwin:\n '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',\n linux: '/usr/bin/google-chrome',\n },\n userDataDir: {\n win32: `${LOCAL_APP_DATA}\\\\Google\\\\Chrome\\\\User Data`,\n darwin: `${HOME_DIR}/Library/Application Support/Google/Chrome`,\n linux: `${HOME_DIR}/.config/google-chrome`,\n },\n },\n {\n name: 'Google Chrome Canary',\n executable: {\n win32:\n 'C:\\\\Program Files\\\\Google\\\\Chrome Canary\\\\Application\\\\chrome.exe',\n darwin:\n '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary',\n linux: '/usr/bin/google-chrome-canary',\n },\n userDataDir: {\n win32: `${LOCAL_APP_DATA}\\\\Google\\\\Chrome Canary\\\\User Data`,\n darwin: `${HOME_DIR}/Library/Application Support/Google/Chrome Canary`,\n linux: `${HOME_DIR}/.config/google-chrome-canary`,\n },\n },\n ];\n }\n\n /**\n * Find a specific browser or the first available browser\n * @param {string} [name] - Optional browser name to find\n * @returns {{ executable: string; userDataDir: string }} Browser executable and user data paths\n * @throws {Error} If no supported browser is found or the platform is unsupported\n */\n findBrowser(name?: string): {\n executable: string;\n userDataDir: string;\n } {\n const platform = process.platform;\n this.logger.info('Finding browser on platform:', platform);\n\n if (platform !== 'darwin' && platform !== 'win32' && platform !== 'linux') {\n const error = new Error(`Unsupported platform: ${platform}`);\n this.logger.error(error.message);\n throw error;\n }\n\n const browser = name\n ? this.browsers.find(\n (b) => b.name === name && fs.existsSync(b.executable[platform]),\n )\n : this.browsers.find((b) => fs.existsSync(b.executable[platform]));\n\n this.logger.log('browser', browser);\n\n if (!browser) {\n const error = name\n ? new Error(`Cannot find browser: ${name}`)\n : new Error(\n 'Cannot find a supported browser on your system. Please install Chrome, Edge, or Brave.',\n );\n this.logger.error(error.message);\n throw error;\n }\n\n const result = {\n executable: browser.executable[platform],\n userDataDir: browser.userDataDir[platform],\n };\n\n this.logger.success(`Found browser: ${browser.name}`);\n this.logger.info('Browser details:', result);\n\n return result;\n }\n\n /**\n * Get browser profiles for a specific browser\n * Reads the Local State file to extract profile information\n * @param {string} [browserName] - Optional browser name to get profiles for\n * @returns {Array<{ displayName: string; path: string }>} Array of profile objects with display names and paths\n */\n getBrowserProfiles(\n browserName?: string,\n ): Array<{ displayName: string; path: string }> {\n const browser = this.findBrowser(browserName);\n\n try {\n const localState = JSON.parse(\n fs.readFileSync(path.join(browser.userDataDir, 'Local State'), 'utf8'),\n );\n const profileInfo = localState.profile.info_cache;\n\n return Object.entries(profileInfo).map(\n ([profileName, info]: [string, any]) => ({\n displayName: info.name,\n path: path.join(browser.userDataDir, profileName),\n }),\n );\n } catch (error) {\n return [];\n }\n }\n\n /**\n * Legacy method for backwards compatibility\n * Finds Chrome browser executable path\n * @deprecated Use findBrowser instead\n * @returns {string | null} Chrome executable path or null if not found\n */\n findChrome(): string | null {\n try {\n const { executable } = this.findBrowser('Google Chrome');\n return executable;\n } catch {\n return null;\n }\n }\n}\n"],"names":["BrowserFinder","HOME_DIR","os","LOCAL_APP_DATA","process","name","platform","error","Error","browser","b","fs","result","browserName","localState","JSON","path","profileInfo","Object","profileName","info","executable","logger","defaultLogger"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=browser-finder.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-finder.test.d.ts","sourceRoot":"","sources":["../src/browser-finder.test.ts"],"names":[],"mappings":""}