import type { Browser } from "puppeteer-core";
export type CaptureMode = "beginframe" | "screenshot" | "drawelement";
export type BrowserPoolState = "launching" | "ready" | "closing";
export interface BrowserLaunchFingerprint {
    readonly args: readonly string[];
    readonly executablePath?: string;
    readonly browserTimeoutMs: number;
    readonly protocolTimeoutMs: number;
    readonly requestedCaptureMode: CaptureMode;
}
export interface BrowserLaunchResult {
    browser: Browser;
    captureMode: CaptureMode;
}
export interface BrowserLease extends BrowserLaunchResult {
    readonly fingerprint: Readonly<BrowserLaunchFingerprint>;
    release(): Promise<void>;
    forceRelease(): void;
}
export interface BrowserLeasePoolOptions {
    launch(fingerprint: Readonly<BrowserLaunchFingerprint>): Promise<BrowserLaunchResult>;
    close(browser: Browser): Promise<void>;
    forceClose(browser: Browser): void;
}
/** Owns pooled browser generations and hands callers exactly-once leases. */
export declare class BrowserLeasePool {
    private readonly options;
    private readonly available;
    private readonly entries;
    private readonly leasesByBrowser;
    private drainPromise;
    constructor(options: BrowserLeasePoolOptions);
    acquire(fingerprintInput: BrowserLaunchFingerprint, pooled: boolean): Promise<BrowserLease>;
    private issueLease;
    private reserveEntry;
    /** Preserve legacy release-by-handle only when ownership is unambiguous. */
    releaseByBrowser(browser: Browser): Promise<void>;
    /** Preserve the legacy ambiguous-handle no-op without closing another owner's browser. */
    forceReleaseByBrowser(browser: Browser): void;
    drain(): Promise<void>;
    /** Test-only state reset. Call `drain()` first when entries own real browsers. */
    reset(): void;
    private createEntry;
    private createLease;
    private requestClose;
    private removeLease;
}
//# sourceMappingURL=browserLeasePool.d.ts.map