// Типы для обмена сообщениями между компонентами export type MessageType = | 'REQUEST_PERMISSIONS' | 'PERMISSIONS_GRANTED' | 'PERMISSIONS_DENIED' | 'GET_VIDEO_BUFFER' | 'VIDEO_BUFFER_RESPONSE' | 'GET_RRWEB_EVENTS' | 'RRWEB_EVENTS_RESPONSE' | 'SAVE_ARCHIVE' | 'ARCHIVE_SAVED' | 'START_RECORDING' | 'STOP_RECORDING' | 'RECORDING_ERROR' | 'VIDEO_CHUNK' | 'VIDEO_CHUNK_SAVED' | 'OFFSCREEN_READY'; export interface Message { type: MessageType; data?: T; tabId?: number; } // Видеобуфер export interface VideoChunk { data: Blob; timestamp: number; isFirst?: boolean; } // Лог событий пользователя export interface UserEvent { timestamp: number; type: 'click' | 'input' | 'navigation' | 'js_error' | 'network_error'; target: string; value?: string; url: string; meta?: Record; } // Метаданные сессии export interface SessionMetadata { timestamp: string; url: string; userAgent: string; extensionVersion: string; videoBufferSeconds: number; logDurationMinutes: number; totalEvents: number; } // Сообщения для popup export interface PopupState { isRecording: boolean; hasPermissions: boolean; status: 'idle' | 'saving' | 'done'; } // Ответы от Service Worker export interface VideoBufferResponse { chunks: VideoChunk[]; } export interface RrwebEventsResponse { events: any[]; }