mcp-chrome-bridge
Version:
Chrome Native-Messaging host (Node)
229 lines • 9.65 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.BrowserType = void 0;
exports.getBrowserConfig = getBrowserConfig;
exports.detectInstalledBrowsers = detectInstalledBrowsers;
exports.getAllBrowserConfigs = getAllBrowserConfigs;
exports.parseBrowserType = parseBrowserType;
const fs = __importStar(require("fs"));
const os = __importStar(require("os"));
const path = __importStar(require("path"));
const child_process_1 = require("child_process");
const constant_1 = require("./constant");
var BrowserType;
(function (BrowserType) {
BrowserType["CHROME"] = "chrome";
BrowserType["CHROMIUM"] = "chromium";
})(BrowserType || (exports.BrowserType = BrowserType = {}));
/**
* Get the user-level manifest path for a specific browser
*/
function getUserManifestPathForBrowser(browser) {
const platform = os.platform();
if (platform === 'win32') {
const appData = process.env.APPDATA || path.join(os.homedir(), 'AppData', 'Roaming');
switch (browser) {
case BrowserType.CHROME:
return path.join(appData, 'Google', 'Chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
case BrowserType.CHROMIUM:
return path.join(appData, 'Chromium', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
default:
return path.join(appData, 'Google', 'Chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
}
}
else if (platform === 'darwin') {
const home = os.homedir();
switch (browser) {
case BrowserType.CHROME:
return path.join(home, 'Library', 'Application Support', 'Google', 'Chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
case BrowserType.CHROMIUM:
return path.join(home, 'Library', 'Application Support', 'Chromium', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
default:
return path.join(home, 'Library', 'Application Support', 'Google', 'Chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
}
}
else {
// Linux
const home = os.homedir();
switch (browser) {
case BrowserType.CHROME:
return path.join(home, '.config', 'google-chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
case BrowserType.CHROMIUM:
return path.join(home, '.config', 'chromium', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
default:
return path.join(home, '.config', 'google-chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
}
}
}
/**
* Get the system-level manifest path for a specific browser
*/
function getSystemManifestPathForBrowser(browser) {
const platform = os.platform();
if (platform === 'win32') {
const programFiles = process.env.ProgramFiles || 'C:\\Program Files';
switch (browser) {
case BrowserType.CHROME:
return path.join(programFiles, 'Google', 'Chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
case BrowserType.CHROMIUM:
return path.join(programFiles, 'Chromium', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
default:
return path.join(programFiles, 'Google', 'Chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
}
}
else if (platform === 'darwin') {
switch (browser) {
case BrowserType.CHROME:
return path.join('/Library', 'Google', 'Chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
case BrowserType.CHROMIUM:
return path.join('/Library', 'Application Support', 'Chromium', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
default:
return path.join('/Library', 'Google', 'Chrome', 'NativeMessagingHosts', `${constant_1.HOST_NAME}.json`);
}
}
else {
// Linux
switch (browser) {
case BrowserType.CHROME:
return path.join('/etc', 'opt', 'chrome', 'native-messaging-hosts', `${constant_1.HOST_NAME}.json`);
case BrowserType.CHROMIUM:
return path.join('/etc', 'chromium', 'native-messaging-hosts', `${constant_1.HOST_NAME}.json`);
default:
return path.join('/etc', 'opt', 'chrome', 'native-messaging-hosts', `${constant_1.HOST_NAME}.json`);
}
}
}
/**
* Get Windows registry keys for a browser
*/
function getRegistryKeys(browser) {
if (os.platform() !== 'win32')
return undefined;
const browserPaths = {
[BrowserType.CHROME]: {
user: `HKCU\\Software\\Google\\Chrome\\NativeMessagingHosts\\${constant_1.HOST_NAME}`,
system: `HKLM\\Software\\Google\\Chrome\\NativeMessagingHosts\\${constant_1.HOST_NAME}`,
},
[BrowserType.CHROMIUM]: {
user: `HKCU\\Software\\Chromium\\NativeMessagingHosts\\${constant_1.HOST_NAME}`,
system: `HKLM\\Software\\Chromium\\NativeMessagingHosts\\${constant_1.HOST_NAME}`,
},
};
return browserPaths[browser];
}
/**
* Get browser configuration
*/
function getBrowserConfig(browser) {
const registryKeys = getRegistryKeys(browser);
return {
type: browser,
displayName: browser.charAt(0).toUpperCase() + browser.slice(1),
userManifestPath: getUserManifestPathForBrowser(browser),
systemManifestPath: getSystemManifestPathForBrowser(browser),
registryKey: registryKeys === null || registryKeys === void 0 ? void 0 : registryKeys.user,
systemRegistryKey: registryKeys === null || registryKeys === void 0 ? void 0 : registryKeys.system,
};
}
/**
* Detect installed browsers on the system
*/
function detectInstalledBrowsers() {
const detectedBrowsers = [];
const platform = os.platform();
if (platform === 'win32') {
// Check Windows registry for installed browsers
const browsers = [
{ type: BrowserType.CHROME, registryPath: 'HKLM\\SOFTWARE\\Google\\Chrome' },
{ type: BrowserType.CHROMIUM, registryPath: 'HKLM\\SOFTWARE\\Chromium' },
];
for (const browser of browsers) {
try {
(0, child_process_1.execSync)(`reg query "${browser.registryPath}" 2>nul`, { stdio: 'pipe' });
detectedBrowsers.push(browser.type);
}
catch (_a) {
// Browser not installed
}
}
}
else if (platform === 'darwin') {
// Check macOS Applications folder
const browsers = [
{ type: BrowserType.CHROME, appPath: '/Applications/Google Chrome.app' },
{ type: BrowserType.CHROMIUM, appPath: '/Applications/Chromium.app' },
];
for (const browser of browsers) {
if (fs.existsSync(browser.appPath)) {
detectedBrowsers.push(browser.type);
}
}
}
else {
// Check Linux paths using which command
const browsers = [
{ type: BrowserType.CHROME, commands: ['google-chrome', 'google-chrome-stable'] },
{ type: BrowserType.CHROMIUM, commands: ['chromium', 'chromium-browser'] },
];
for (const browser of browsers) {
for (const cmd of browser.commands) {
try {
(0, child_process_1.execSync)(`which ${cmd} 2>/dev/null`, { stdio: 'pipe' });
detectedBrowsers.push(browser.type);
break; // Found one command, no need to check others
}
catch (_b) {
// Command not found
}
}
}
}
return detectedBrowsers;
}
/**
* Get all supported browser configs
*/
function getAllBrowserConfigs() {
return Object.values(BrowserType).map((browser) => getBrowserConfig(browser));
}
/**
* Parse browser type from string
*/
function parseBrowserType(browserStr) {
const normalized = browserStr.toLowerCase();
return Object.values(BrowserType).find((type) => type === normalized);
}
//# sourceMappingURL=browser-config.js.map