Vilnius Transport MCP Server
- src
import fs from "node:fs"
import path from "node:path"
import os from "node:os"
import { BrowserNotFoundError } from "./error"
interface Browser {
name: string
executable: {
win32: string
darwin: string
}
userDataDir: {
win32: string
darwin: string
}
}
const HOME_DIR = os.homedir()
const browsers: Browser[] = [
{
name: "Brave",
executable: {
win32:
"C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe",
darwin: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",
},
userDataDir: {
win32: `${process.env.LOCALAPPDATA}\\BraveSoftware\\Brave-Browser\\User Data`,
darwin: `${HOME_DIR}/Library/Application Support/BraveSoftware/Brave-Browser`,
},
},
{
name: "Chromium",
executable: {
win32: "C:\\Program Files\\Chromium\\Application\\chrome.exe",
darwin: "/Applications/Chromium.app/Contents/MacOS/Chromium",
},
userDataDir: {
win32: `${process.env.LOCALAPPDATA}\\Chromium\\User Data`,
darwin: `${HOME_DIR}/Library/Application Support/Chromium`,
},
},
{
name: "Google Chrome Canary",
executable: {
win32:
"C:\\Program Files\\Google\\Chrome Canary\\Application\\chrome.exe",
darwin:
"/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary",
},
userDataDir: {
win32: `${process.env.LOCALAPPDATA}\\Google\\Chrome Canary\\User Data`,
darwin: `${HOME_DIR}/Library/Application Support/Google/Chrome Canary`,
},
},
{
name: "Google Chrome",
executable: {
win32: "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
darwin: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
},
userDataDir: {
win32: `${process.env.LOCALAPPDATA}\\Google\\Chrome\\User Data`,
darwin: `${HOME_DIR}/Library/Application Support/Google/Chrome`,
},
},
{
name: "Microsoft Edge Canary",
executable: {
win32:
"C:\\Program Files (x86)\\Microsoft\\Edge Canary\\Application\\msedge.exe",
darwin:
"/Applications/Microsoft Edge Canary.app/Contents/MacOS/Microsoft Edge Canary",
},
userDataDir: {
win32: `${process.env.LOCALAPPDATA}\\Microsoft\\Edge Canary\\User Data`,
darwin: `${HOME_DIR}/Library/Application Support/Microsoft Edge Canary`,
},
},
{
name: "Microsoft Edge",
executable: {
win32:
"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe",
darwin: "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge",
},
userDataDir: {
win32: `${process.env.LOCALAPPDATA}\\Microsoft\\Edge\\User Data`,
darwin: `${HOME_DIR}/Library/Application Support/Microsoft Edge`,
},
},
]
export function findBrowser(name?: string) {
const platform = process.platform
if (platform !== "darwin" && platform !== "win32") {
throw new BrowserNotFoundError("Unsupported platform: " + platform)
}
const browser = name
? browsers.find(
(b) => b.name === name && fs.existsSync(b.executable[platform]),
)
: browsers.find((browser) => fs.existsSync(browser.executable[platform]))
if (!browser) {
if (name) {
throw new BrowserNotFoundError(`Cannot find browser: ${name}`)
}
throw new BrowserNotFoundError(
"Cannot find a chrome-based browser on your system, please install one of: Chrome, Edge, Brave",
)
}
return {
executable: browser.executable[platform],
userDataDir: browser.userDataDir[platform],
}
}
export function getBrowserProfiles(browserName?: string) {
const browser = findBrowser(browserName)
const profileInfo: {
[profileName: string]: {
name: string
}
} = JSON.parse(
fs.readFileSync(path.join(browser.userDataDir, "Local State"), "utf8"),
).profile.info_cache
const profiles: { displayName: string; path: string }[] = []
for (const profileName in profileInfo) {
const profilePath = path.join(browser.userDataDir, profileName)
const profileDisplayName = profileInfo[profileName].name
profiles.push({
displayName: profileDisplayName,
path: profilePath,
})
}
return profiles
}