/**
 * Render a JS-heavy page in the device's existing Chromium and return its DOM.
 *
 * This is the stateless retrieval path: each call creates its own blank target,
 * navigates, reads the rendered DOM, and closes the target. Interactive
 * automation (which keeps a page alive across calls) lives in cdp-actions.ts on
 * a persistent BrowserSession. Both share the transport primitives in
 * cdp-session.ts.
 *
 *   PUT /json/new                  create a blank target, get its WS URL
 *        │
 *        ▼
 *   ws://…/devtools/page/<id>      Page.enable → Page.navigate(url)
 *        │                         await Page.loadEventFired (load-timeout)
 *        ▼
 *   Runtime.evaluate               outerHTML + body.innerText (returnByValue)
 *        │
 *        ▼
 *   PUT /json/close/<id>           always, even on the error paths above
 */
import { type CdpDeps, type CdpOutcome } from "./cdp-session.js";
export type RenderDeps = CdpDeps;
export type { MinimalWebSocket, WebSocketCtor } from "./cdp-session.js";
export type RenderOutcome = CdpOutcome;
export interface RenderResult {
    url: string;
    rendered: boolean;
    outcome: RenderOutcome;
    domBytes: number;
    text: string;
    html: string;
    detail?: string;
}
export interface RenderOptions {
    /** Cap on the whole navigate→load wait. */
    loadTimeoutMs?: number;
    /** Cap on each CDP command round-trip (enable, navigate, evaluate). */
    commandTimeoutMs?: number;
}
/** Render `url` in the device Chromium and return its rendered DOM text.
 *  Always returns a structured RenderResult — never throws, never returns a
 *  silent empty page. */
export declare function renderPage(url: string, opts: RenderOptions, deps: RenderDeps): Promise<RenderResult>;
//# sourceMappingURL=cdp-render.d.ts.map