/** * Performance metrics collector — captures Core Web Vitals and navigation timing * for pages visited during crawl runs. * Collects LCP, CLS, INP, TTFB, long tasks, and slow resources via PerformanceObserver * and the Navigation/Resource Timing APIs. */ import type { Page } from 'playwright'; export type CwvScore = 'good' | 'needs-improvement' | 'poor'; export interface LcpMetric { value: number; score: CwvScore; elementTag: string | null; url: string | null; } export interface ClsMetric { value: number; score: CwvScore; shiftCount: number; } export interface InpMetric { p75: number; score: CwvScore; sampleCount: number; } export interface NavTimingMetric { ttfb: number; ttfbScore: CwvScore; domContentLoaded: number; domComplete: number; loadComplete: number; transferSizeBytes: number; protocol: string; } export interface SlowResource { path: string; durationMs: number; transferSizeBytes: number; initiatorType: string; } export interface PerformanceMetricsResult { lcp: LcpMetric | null; cls: ClsMetric | null; inp: InpMetric | null; navTiming: NavTimingMetric | null; slowResources: SlowResource[]; longTaskCount: number; captureSuccess: boolean; } export declare function injectPerformanceObservers(page: Page): Promise; export declare function collectPagePerformance(page: Page): Promise;