can1357/oh-my-pi · error · Error
Unsupported browser download: ${browser}
Error message
Unsupported browser download: ${browser} What it means
getDownloadUrl only supports the Chrome product; any other Browser enum value (firefox, chromium, chrome-headless-shell, chromedriver) throws this Error because the Chrome-for-Testing archive URL layout is only valid for Chrome. It is an explicit capability guard in this Puppeteer-compatible shim.
Source
Thrown at packages/utils/src/browsers.ts:158
if (/^\d+$/.test(tag)) {
const metadata = await fetchMetadata<MilestoneVersions>("latest-versions-per-milestone.json");
return metadata.milestones[tag]?.version ?? tag;
}
if (/^\d+\.\d+\.\d+$/.test(tag)) {
const metadata = await fetchMetadata<PatchVersions>("latest-patch-versions-per-build.json");
return metadata.builds[tag]?.version ?? tag;
}
return tag;
}
/** Return the Chrome-for-Testing archive URL for a browser build. */
export function getDownloadUrl(
browser: Browser,
platform: BrowserPlatform,
buildId: string,
baseUrl = CHROME_FOR_TESTING_BASE_URL,
): URL {
if (browser !== Browser.CHROME) throw new Error(`Unsupported browser download: ${browser}`);
const archivePlatform = chromeArchivePlatform(platform);
const root = baseUrl.replace(/\/$/, "");
return new URL(`${root}/${buildId}/${archivePlatform}/chrome-${archivePlatform}.zip`);
}
/** Compute the executable path in Puppeteer's cache layout. */
export function computeExecutablePath(options: ComputeExecutablePathOptions): string {
const platform = options.platform ?? detectBrowserPlatform();
if (!platform) throw new Error("Cannot determine a browser platform for this host");
if (options.browser !== Browser.CHROME) throw new Error(`Unsupported browser executable: ${options.browser}`);
const installDir = installationDir(options.cacheDir, options.browser, platform, options.buildId);
switch (platform) {
case BrowserPlatform.LINUX:
case BrowserPlatform.LINUX_ARM:
return path.join(installDir, "chrome-linux64", "chrome");
case BrowserPlatform.MAC:
return path.join(
installDir,View on GitHub (pinned to 9690622007)
Solutions
- Use Browser.CHROME for downloads through this module.
- For other products (chromium, firefox, chromedriver), use @puppeteer/browsers directly or a dedicated installer.
- Gate user/config-supplied browser values: validate the enum equals Browser.CHROME before calling install().
Example fix
// before
await install({ browser: Browser.FIREFOX, buildId, cacheDir }); // throws
// after
if (browser !== Browser.CHROME) {
throw new Error(`This installer only manages ${Browser.CHROME}; got ${browser}`);
}
await install({ browser: Browser.CHROME, buildId, cacheDir }); Defensive patterns
Strategy: validation
Validate before calling
import { Browser } from './browsers';
if (browser !== Browser.CHROME) {
throw new Error(`Only ${Browser.CHROME} is supported by this installer (got ${browser})`);
} Type guard
function isSupportedForDownload(browser: Browser): browser is Browser.CHROME {
return browser === Browser.CHROME;
} Try / catch
try {
const url = getDownloadUrl(browser, platform, buildId);
} catch (err) {
if (/^Unsupported browser download: /.test(String(err))) {
// route to @puppeteer/browsers or a product-specific installer
} else throw err;
} Prevention
- Whitelist Browser.CHROME in any config surface that feeds install().
- Use @puppeteer/browsers for chromium/firefox/chromedriver/headless-shell.
- Add an enum-narrowing check at your install entry point.
When it happens
Trigger: Calling getDownloadUrl(Browser.FIREFOX | Browser.CHROMIUM | Browser.CHROMEHEADLESSSHELL | Browser.CHROMEDRIVER, platform, buildId) — directly or indirectly via install() with a non-Chrome browser.
Common situations: Configuring install({ browser: Browser.FIREFOX, ... }) assuming all Puppeteer products are supported; switching an app from chrome to chromium without checking support.
Related errors
- Chrome channel ${tag} was not found in Chrome-for-Testing me
- Unsupported browser executable: ${options.browser}
- Cannot determine a browser platform for this host
- Browser archive did not contain its expected executable: ${e
- Failed to fetch Chrome-for-Testing metadata (${response.stat
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/67003ff3e045b74c.
Report an issue: GitHub.