Connects to user's running Brave via Chrome DevTools Protocol to automate ChatGPT interaction. Uses puppeteer-core to open a tab, send the prompt, wait for response, and extract the result. No cookies, no separate profiles, no copy/paste. Just connects to the browser where the user is already logged in. One-time setup: relaunch Brave with --remote-debugging-port=9222 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
153 lines
5.0 KiB
TypeScript
153 lines
5.0 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright 2026 Google Inc.
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
import type { Browser, BrowserPlatform } from './browser-data/browser-data.js';
|
|
/**
|
|
* Options passed to a provider.
|
|
* @public
|
|
*/
|
|
export interface DownloadOptions {
|
|
browser: Browser;
|
|
platform: BrowserPlatform;
|
|
buildId: string;
|
|
}
|
|
/**
|
|
* Interface for custom browser provider implementations.
|
|
* Allows users to implement alternative download sources for browsers.
|
|
*
|
|
* ⚠️ **IMPORTANT**: Custom providers are NOT officially supported by
|
|
* Puppeteer.
|
|
*
|
|
* By implementing this interface, you accept full responsibility for:
|
|
*
|
|
* - Ensuring downloaded binaries are compatible with Puppeteer's expectations
|
|
* - Testing that browser launch and other features work with your binaries
|
|
* - Maintaining compatibility when Puppeteer or your download source changes
|
|
* - Version consistency across platforms if mixing sources
|
|
*
|
|
* Puppeteer only tests and guarantees Chrome for Testing binaries.
|
|
*
|
|
* @example
|
|
*
|
|
* ```typescript
|
|
* class ElectronDownloader implements BrowserProvider {
|
|
* supports(options: DownloadOptions): boolean {
|
|
* return options.browser === Browser.CHROMEDRIVER;
|
|
* }
|
|
*
|
|
* getDownloadUrl(options: DownloadOptions): URL {
|
|
* const platform = mapToPlatform(options.platform);
|
|
* return new URL(
|
|
* `v${options.buildId}/chromedriver-v${options.buildId}-${platform}.zip`,
|
|
* 'https://github.com/electron/electron/releases/download/',
|
|
* );
|
|
* }
|
|
*
|
|
* getExecutablePath(options): string {
|
|
* const ext = options.platform.includes('win') ? '.exe' : '';
|
|
* return `chromedriver/chromedriver${ext}`;
|
|
* }
|
|
* }
|
|
* ```
|
|
*
|
|
* @public
|
|
*/
|
|
export interface BrowserProvider {
|
|
/**
|
|
* Check if this provider supports the given browser/platform.
|
|
* Used for filtering before attempting downloads.
|
|
*
|
|
* Can be synchronous for quick checks or asynchronous if version
|
|
* resolution/network requests are needed.
|
|
*
|
|
* @param options - Download options to check
|
|
* @returns True if this provider supports the browser/platform combination
|
|
*/
|
|
supports(options: DownloadOptions): Promise<boolean> | boolean;
|
|
/**
|
|
* Get the download URL for the requested browser.
|
|
*
|
|
* The buildId can be either an exact version (e.g., "131.0.6778.109")
|
|
* or an alias (e.g., "latest", "stable"). Custom providers should handle
|
|
* version resolution internally if they support aliases.
|
|
*
|
|
* Returns null if the buildId cannot be resolved to a valid version.
|
|
* The URL is not validated - download will fail later if URL doesn't exist.
|
|
*
|
|
* Can be synchronous for simple URL construction or asynchronous if version
|
|
* resolution/network requests are needed.
|
|
*
|
|
* @param options - Download options (buildId may be alias or exact version)
|
|
* @returns Download URL, or null if version cannot be resolved
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Synchronous example
|
|
* getDownloadUrl(options) {
|
|
* const platform = mapPlatform(options.platform);
|
|
* return new URL(`https://releases.example.com/v${options.buildId}/${platform}.zip`);
|
|
* }
|
|
*
|
|
* // Asynchronous example with version mapping
|
|
* async getDownloadUrl(options) {
|
|
* const electronVersion = await resolveElectronVersion(options.buildId);
|
|
* if (!electronVersion) return null;
|
|
*
|
|
* const platform = mapPlatform(options.platform);
|
|
* return new URL(`https://github.com/electron/electron/releases/download/v${electronVersion}/${platform}.zip`);
|
|
* }
|
|
* ```
|
|
*/
|
|
getDownloadUrl(options: DownloadOptions): Promise<URL | null> | URL | null;
|
|
/**
|
|
* Get the relative path to the executable within the extracted archive.
|
|
*
|
|
* @param options - Browser, buildId, and platform
|
|
* @returns Relative path to the executable
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* // Electron uses simple structure
|
|
* getExecutablePath() {
|
|
* return 'chromedriver/chromedriver';
|
|
* }
|
|
*
|
|
* // Custom provider with platform-specific paths
|
|
* getExecutablePath(options) {
|
|
* return `binaries/${options.browser}-${options.platform}`;
|
|
* }
|
|
* ```
|
|
*/
|
|
getExecutablePath(options: {
|
|
browser: Browser;
|
|
buildId: string;
|
|
platform: BrowserPlatform;
|
|
}): Promise<string> | string;
|
|
/**
|
|
* Get the name of this provider.
|
|
* Used for error messages and logging purposes.
|
|
*
|
|
* @returns The provider name (e.g., "DefaultProvider", "CustomProvider")
|
|
*
|
|
* @remarks
|
|
* This method is used instead of `constructor.name` to avoid issues with
|
|
* minification in production builds.
|
|
*
|
|
* @example
|
|
*
|
|
* ```ts
|
|
* getName() {
|
|
* return 'MyCustomProvider';
|
|
* }
|
|
* ```
|
|
*/
|
|
getName(): string;
|
|
}
|
|
/**
|
|
* Utility function to build a standard archive filename.
|
|
* @public
|
|
*/
|
|
export declare function buildArchiveFilename(browser: Browser, platform: BrowserPlatform, buildId: string, extension?: string): string;
|
|
//# sourceMappingURL=provider.d.ts.map
|