/** * Puppeteer-based Headless Chrome Renderer * * Provides headless Chrome rendering capabilities for HoloScript scenes: * - Screenshot capture (PNG, JPEG, WebP) * - PDF generation * - Pre-rendered HTML for SEO/social sharing * - Visual regression testing support * - Animation capture (GIF/video frames) * * @module render/headless/PuppeteerRenderer * @version 1.0.0 */ export interface ScreenshotOptions { /** Output format */ format?: 'png' | 'jpeg' | 'webp'; /** Quality for JPEG/WebP (0-100) */ quality?: number; /** Viewport width */ width?: number; /** Viewport height */ height?: number; /** Device scale factor for retina screenshots */ deviceScaleFactor?: number; /** Take full page screenshot */ fullPage?: boolean; /** Transparent background (PNG only) */ omitBackground?: boolean; /** Wait for scene to stabilize (ms) */ waitForStable?: number; /** Custom wait selector */ waitForSelector?: string; /** Capture after N animation frames */ captureAfterFrames?: number; } export interface PDFOptions { /** Page format */ format?: 'A4' | 'Letter' | 'Legal' | 'Tabloid' | 'A3' | 'A5'; /** Landscape orientation */ landscape?: boolean; /** Print background graphics */ printBackground?: boolean; /** Page margins */ margin?: { top?: string; right?: string; bottom?: string; left?: string; }; /** Scale (0.1 - 2.0) */ scale?: number; /** Custom width */ width?: string; /** Custom height */ height?: string; } export interface PrerenderOptions { /** Wait for JavaScript to execute */ waitUntil?: 'load' | 'domcontentloaded' | 'networkidle0' | 'networkidle2'; /** Timeout in ms */ timeout?: number; /** Strip JavaScript from output */ removeScripts?: boolean; /** Inline CSS */ inlineStyles?: boolean; /** Add meta tags for SEO */ addMetaTags?: boolean; } export interface AnimationFrameOptions extends ScreenshotOptions { /** Number of frames to capture */ frameCount: number; /** Time between frames in ms */ frameInterval?: number; /** Output directory for frames */ outputDir?: string; /** Frame filename pattern */ filenamePattern?: string; } export interface RenderResult { success: boolean; data?: Buffer | string; error?: string; timing?: { navigationMs: number; renderMs: number; captureMs: number; totalMs: number; }; metadata?: { width: number; height: number; format: string; size: number; }; } export interface PuppeteerRendererOptions { /** Puppeteer executable path (chromium) */ executablePath?: string; /** Run in headless mode (default: true) */ headless?: boolean; /** Browser arguments */ args?: string[]; /** Default viewport size */ defaultViewport?: { width: number; height: number; }; /** Timeout for operations in ms */ timeout?: number; /** Enable debug logging */ debug?: boolean; /** Base URL for the render service */ renderServiceUrl?: string; /** Custom Three.js/WebGL version */ threeVersion?: string; } /** * PuppeteerRenderer - Headless Chrome renderer for HoloScript scenes * * @example * ```typescript * const renderer = new PuppeteerRenderer(); * await renderer.initialize(); * * // Take a screenshot of a scene * const result = await renderer.screenshot(holoCode, { * width: 1920, * height: 1080, * format: 'png' * }); * * // Generate PDF * const pdf = await renderer.generatePDF(holoCode, { format: 'A4' }); * * // Pre-render for SEO * const html = await renderer.prerender(holoCode, { waitUntil: 'networkidle0' }); * * await renderer.close(); * ``` */ export declare class PuppeteerRenderer { private browser; private options; private initialized; private pagePool; private maxPoolSize; constructor(options?: PuppeteerRendererOptions); /** * Initialize the browser instance */ initialize(): Promise; /** * Get or create a page from the pool */ private getPage; /** * Return a page to the pool */ private releasePage; private setRenderContent; /** * Ensure browser is initialized */ private ensureInitialized; /** * Take a screenshot of a HoloScript scene */ screenshot(holoCode: string, options?: ScreenshotOptions): Promise; /** * Generate a PDF of a HoloScript scene */ generatePDF(holoCode: string, options?: PDFOptions): Promise; /** * Pre-render HoloScript for SEO/social sharing * Returns fully rendered HTML with all JavaScript executed */ prerender(holoCode: string, options?: PrerenderOptions): Promise; /** * Capture animation frames for GIF/video generation */ captureAnimationFrames(holoCode: string, options: AnimationFrameOptions): Promise; /** * Run visual regression test - compare scene against baseline */ visualRegression(holoCode: string, baselineBuffer: Buffer, threshold?: number): Promise<{ match: boolean; diffPercentage: number; diffImage?: Buffer; }>; /** * Generate HTML for rendering a HoloScript scene */ private generateRenderHTML; /** * Close the browser and cleanup resources */ close(): Promise; /** * Check if puppeteer is available */ static isAvailable(): Promise; /** * Get browser version */ getVersion(): Promise; /** * Debug logging */ private log; } /** * Convenience function to create and use a renderer */ export declare function renderScreenshot(holoCode: string, options?: ScreenshotOptions): Promise; /** * Convenience function to generate PDF */ export declare function renderPDF(holoCode: string, options?: PDFOptions): Promise; /** * Convenience function to prerender HTML */ export declare function prerenderHTML(holoCode: string, options?: PrerenderOptions): Promise; //# sourceMappingURL=PuppeteerRenderer.d.ts.map