import { type Page } from "patchright"; export type BrowserName = "chromium" | "firefox" | "webkit"; export type BrowserEngine = "patchright" | "cdp"; export interface StartOptions { browser?: BrowserName; headless?: boolean; width?: number; height?: number; userAgent?: string; userDataDir?: string; channel?: "chrome" | "chrome-beta" | "chrome-dev" | "chrome-canary" | "msedge"; locale?: string; timezoneId?: string; proxy?: { server: string; username?: string; password?: string; bypass?: string; }; geolocation?: { latitude: number; longitude: number; accuracy?: number; }; colorScheme?: "light" | "dark" | "no-preference"; device?: string; mobile?: boolean; cdpEndpoint?: string; recordVideo?: { dir?: string; width?: number; height?: number; }; } export interface RouteRule { id: string; kind: "block" | "mock"; urlPattern: string; resourceTypes?: string[]; status?: number; } export interface PageInfo { id: string; active: boolean; closed: boolean; url: string; title?: string; } export interface NetworkRequest { id: string; url: string; method: string; status?: number; statusText?: string; type: string; timestamp: number; duration?: number; fromCache: boolean; headers: Record; } export interface ConsoleMessage { type: string; text: string; timestamp: number; location?: { url?: string; lineNumber?: number; columnNumber?: number; }; } export interface BrowserStatus { running: boolean; engine: BrowserEngine; browser?: BrowserName; headless?: boolean; userDataDir?: string; persistent?: boolean; activePageId?: string; url?: string; title?: string; pages: number; recording?: boolean; videoDir?: string; } export declare class BrowserManager { private readonly defaultOptions; constructor(defaultOptions?: StartOptions); private browser?; private context?; private activePage?; private activePages; private pageOwners; private pageIds; private trackedPages; private nextPageId; private nextRouteId; private nextNetworkRequestId; private pageRegistrations; private engine; private options?; private startPromise?; private videoDir?; private _networkRequests; private _consoleMessages; private _routeRules; runAsOwner(owner: string | undefined, fn: () => Promise): Promise; private currentOwner; private pageForOwner; private claimPage; private availablePage; private ownerForRoute; private registerPage; private queuePageRegistration; private waitForPageRegistrations; start(options?: StartOptions): Promise; private startFresh; getPage(): Promise; newPage(url?: string): Promise; listPages(): Promise; switchPage(pageId: string): Promise; closePage(pageId?: string): Promise; closeOwnerPages(owner: string): Promise; status(): Promise; /** Path of the in-progress video for the active page. File is finalized when the page/context closes. */ videoInfo(): Promise<{ recording: boolean; dir?: string; pendingFile?: string; }>; /** Request that the active page's video be written to a specific path (finalizes on page/context close). */ saveVideoAs(targetPath: string): Promise<{ ok: boolean; savedTo?: string; pendingFile?: string; error?: string; }>; trackPage(page: Page): void; addBlockRoute(opts: { urlPattern?: string; resourceTypes?: string[]; }): Promise; addMockRoute(opts: { urlPattern: string; status?: number; body?: string; contentType?: string; }): Promise; clearRoutes(): Promise; listRoutes(): RouteRule[]; getNetworkRequests(activeOnly?: boolean): NetworkRequest[]; getConsoleMessages(): ConsoleMessage[]; getNetworkRequestByIndex(index: number): NetworkRequest | undefined; getNetworkRequestById(id: string): NetworkRequest | undefined; close(): Promise<{ videos: string[]; }>; private removeSingletonFiles; private registerExistingPages; private idFor; private findPage; private pageInfo; }