/** * Mouse Event Recorder * * Records mouse movements, clicks, wheel events, and other mouse interactions * from a browser page for later replay or conversion to test scripts. */ import type { Page } from 'puppeteer-core'; export interface ElementInfo { tag: string; id?: string; className?: string; text?: string; selector?: string; isCanvas?: boolean; isInteractive?: boolean; boundingBox?: { x: number; y: number; width: number; height: number; }; } export interface MouseEvent { type: 'mousemove' | 'mousedown' | 'mouseup' | 'wheel' | 'click' | 'dblclick'; x: number; y: number; timestamp: number; button?: number; buttons?: number; deltaX?: number; deltaY?: number; deltaZ?: number; clickCount?: number; elementInfo?: ElementInfo; } export interface KeyboardEvent { type: 'keydown' | 'keyup'; key: string; code: string; timestamp: number; modifiers?: { ctrl?: boolean; alt?: boolean; shift?: boolean; meta?: boolean; }; repeat?: boolean; targetInfo?: { tag: string; id?: string; isInput?: boolean; }; } export type InputEvent = MouseEvent | KeyboardEvent; export interface RecordingOptions { showOverlay?: boolean; } export interface RecordingSession { connectionReference: string; startTime: number; events: InputEvent[]; isRecording: boolean; isPaused: boolean; } export interface MouseRecordingSession extends RecordingSession { } /** * Start recording mouse events on a page */ export declare function startMouseRecording(page: Page, connectionReference: string, options?: RecordingOptions): Promise<{ success: boolean; error?: string; }>; /** * Stop recording and return captured events */ export declare function stopMouseRecording(page: Page, connectionReference: string): Promise<{ success: boolean; events?: InputEvent[]; duration?: number; error?: string; }>; /** * Check if recording is active for a connection */ export declare function isRecording(connectionReference: string): boolean; /** * Get current event count without stopping recording */ export declare function getRecordingStatus(page: Page, connectionReference: string): Promise<{ isRecording: boolean; eventCount?: number; duration?: number; isPaused?: boolean; state?: string; }>; /** * Simplify recorded events by removing redundant mousemove events * Keeps only significant movements (distance threshold or time gap) * Also collapses consecutive keydown events into typing sequences */ export declare function simplifyMouseEvents(events: InputEvent[], options?: { distanceThreshold?: number; timeThreshold?: number; }): InputEvent[]; export interface CommandConversionOptions { simplify?: boolean; includeHovers?: boolean; preferCoordinates?: boolean; preferSelectors?: boolean; } /** * Convert recorded events to cdp-tools sequence commands */ export declare function eventsToSequenceCommands(events: InputEvent[], options?: CommandConversionOptions): Array<{ tool: string; params: Record; }>; /** * Format events for human review - shows both coordinate and selector options */ export declare function formatEventsForReview(events: InputEvent[]): string; /** * Analyze events and provide summary statistics */ export declare function analyzeEvents(events: InputEvent[]): { totalEvents: number; clicks: number; drags: number; scrolls: number; keyPresses: number; typedCharacters: number; canvasInteractions: number; interactiveElements: number; selectorsAvailable: number; coordinatesOnly: number; }; //# sourceMappingURL=mouse-recorder.d.ts.map