UNPKG

eye-analysis

Version:

Eye Analysis - Browser-based eye tracking and screen recording library for research and experiments

294 lines 7.32 kB
export interface GazePoint { sessionId: string; deviceTimeStamp?: number; systemTimestamp: number; browserTimestamp: number; normalized?: boolean; screenX: number | undefined; screenY: number | undefined; screenWidth: number; screenHeight: number; contentX: number; contentY: number; confidence: number | undefined; leftEye?: EyeData; rightEye?: EyeData; windowState?: WindowState; } export interface GazePointInput { deviceTimeStamp?: number; systemTimestamp?: number; normalized?: boolean; screenX: number | undefined; screenY: number | undefined; confidence: number | undefined; leftEye?: EyeDataInput; rightEye?: EyeDataInput; } export interface EyeDataInput { screenX: number | undefined; screenY: number | undefined; positionX?: number; positionY?: number; positionZ?: number; pupilSize?: number; rotateX?: number; rotateY?: number; rotateZ?: number; } export interface EyeData { screenX: number | undefined; screenY: number | undefined; contentX: number; contentY: number; positionX?: number; positionY?: number; positionZ?: number; pupilSize?: number; rotateX?: number; rotateY?: number; rotateZ?: number; } export interface SessionEvent { id: string; sessionId: string; type: "session_start" | "session_stop" | "recording_start" | "recording_stop" | "user_event"; timestamp: number; browserTimestamp: number; data?: Record<string, unknown>; } export interface SessionConfig { participantId: string; experimentType: string; sessionId?: string; } export interface RecordingConfig { frameRate?: number; quality?: "low" | "medium" | "high"; chunkDuration?: number; captureEntireScreen?: boolean; videoFormat?: "webm" | "mp4"; videoCodec?: "vp8" | "vp9" | "h264"; } export type RecordingMode = "current-tab" | "full-screen"; export interface RecorderState { status: "idle" | "initialized" | "recording" | "stopped" | "error"; currentSession: SessionInfo | null; isRecording: boolean; recordingDuration: number; gazeDataCount: number; eventsCount: number; videoChunksCount: number; error: string | null; lastUpdate: number; recordingConfig?: { availableRecordingModes?: RecordingMode[]; }; startBrowserTime?: number; recordingStream: MediaStream | null; } export interface SessionInfo { sessionId: string; participantId: string; experimentType: string; startTime: number; endTime?: number; config: RecordingConfig; status?: "recording" | "completed" | "error"; recordingMode: RecordingMode; recordingReference?: { screen: ScreenInfo; window: WindowInfo; }; actualContentSize?: { width: number; height: number; }; metadata?: { browser?: string; screen?: string; displayWidth?: number; displayHeight?: number; userAgent?: string; duration?: number; settings?: { screenRecording?: RecordingConfig; }; environment?: { browser?: string; screen?: string; displayWidth?: number; displayHeight?: number; userAgent?: string; }; startBrowserTime?: number; endBrowserTime?: number; }; } export interface SessionData { session: SessionInfo; events: SessionEvent[]; gazeData: GazePoint[]; videoChunks: VideoChunkInfo[]; metadata: { totalDuration: number; gazeDataPoints: number; eventsCount: number; chunksCount: number; exportedAt: string; startBrowserTime?: number; endBrowserTime?: number; }; } export interface VideoChunkInfo { id: string; sessionId: string; timestamp: number; chunkIndex: number; duration: number; size: number; } export interface WindowInfo { innerWidth: number; innerHeight: number; scrollX: number; scrollY: number; devicePixelRatio: number; screenX: number; screenY: number; outerWidth: number; outerHeight: number; } export interface ScreenInfo { width: number; height: number; availWidth: number; availHeight: number; } export interface WindowState { screenX: number; screenY: number; scrollX: number; scrollY: number; innerWidth: number; innerHeight: number; outerWidth: number; outerHeight: number; } export type StateSubscriber = (state: RecorderState) => void; export interface SyncMarker { id: string; sessionId: string; timestamp: number; systemTimestamp: number; browserTimestamp: number; type: string; data?: Record<string, unknown>; } export interface VideoChunk { id: string; sessionId: string; timestamp: number; data: Blob; chunkIndex: number; duration: number; } export interface ExperimentSession { sessionId: string; participantId: string; experimentType: string; startTime: number; endTime?: number; config: RecordingConfig; status?: "recording" | "completed" | "error"; } export interface QualityMetrics { recordingQuality: { averageFrameRate: number; frameDrops: number; duration: number; }; gazeTrackingQuality: { averageSamplingRate: number; dataLossRate: number; averageConfidence: number; }; syncQuality: { maxTimeOffset: number; averageOffset: number; quality: "excellent" | "good" | "fair" | "poor"; }; } export interface ExperimentConfig { participantId: string; experimentType: string; sessionId?: string; recording?: RecordingConfig; enableEyeTracking?: boolean; } export interface MetadataJSON { sessionInfo: SessionInfo; metadata: { totalDuration: number; gazeDataPoints: number; eventsCount: number; chunksCount: number; exportedAt: string; startBrowserTime?: number; endBrowserTime?: number; }; videoChunks: Array<VideoChunkInfo & { note: string; }>; summary: { totalGazePoints: number; totalEvents: number; totalVideoChunks: number; sessionDuration: number; recordingStartTime: string; recordingEndTime: string | null; startBrowserTime?: number; endBrowserTime?: number; elapsedTimeNote: string; }; } export type RecorderAction = { type: "INITIALIZE"; } | { type: "CREATE_SESSION"; payload: SessionInfo; } | { type: "UPDATE_SESSION"; payload: SessionInfo; } | { type: "START_RECORDING"; } | { type: "STOP_RECORDING"; } | { type: "ADD_GAZE_DATA"; payload: GazePoint; } | { type: "ADD_EVENT"; payload: SessionEvent; } | { type: "UPDATE_DURATION"; payload: number; } | { type: "SET_ERROR"; payload: string; } | { type: "CLEAR_ERROR"; } | { type: "RESET"; } | { type: "CLEAR_SESSION"; } | { type: "SET_RECORDING_CONFIG"; payload: { availableRecordingModes?: RecordingMode[]; }; } | { type: "SET_RECORDING_STREAM"; payload: MediaStream | null; }; //# sourceMappingURL=types.d.ts.map