/** * Analytics Adapter Interface & Implementations * * This module provides the analytics system for the video player. * It includes: * - Base adapter interface * - Console logging adapter (for development) * - HTTP adapter (for production) * - Adapter factory for easy creation */ import type { AnalyticsAdapter, AnalyticsEventPayload, AnalyticsConfig, AnalyticsEventName } from '../types'; /** * Console logging adapter for development and debugging * Logs all analytics events to the browser console with formatting */ export declare class ConsoleAnalyticsAdapter implements AnalyticsAdapter { private prefix; private enableColors; constructor(options?: { prefix?: string; enableColors?: boolean; }); trackEvent(payload: AnalyticsEventPayload): void; private getEventStyles; flush(): void; destroy(): void; } export interface HttpAdapterOptions { /** API endpoint URL */ endpoint: string; /** HTTP method (default: POST) */ method?: 'POST' | 'PUT'; /** Additional headers */ headers?: Record; /** Batch events before sending (count) */ batchSize?: number; /** Batch events before sending (time in ms) */ batchTimeout?: number; /** Retry failed requests */ retryOnFailure?: boolean; /** Number of retry attempts */ maxRetries?: number; /** Transform payload before sending */ transformPayload?: (payload: AnalyticsEventPayload) => unknown; /** Called on successful send */ onSuccess?: (payload: AnalyticsEventPayload[]) => void; /** Called on send failure */ onError?: (error: Error, payload: AnalyticsEventPayload[]) => void; } /** * HTTP analytics adapter for production use * Sends analytics events to a backend API endpoint * Supports batching, retries, and offline queuing */ export declare class HttpAnalyticsAdapter implements AnalyticsAdapter { private endpoint; private method; private headers; private batchSize; private batchTimeout; private retryOnFailure; private maxRetries; private transformPayload; private onSuccess?; private onError?; private eventQueue; private batchTimer; private isDestroyed; constructor(options: HttpAdapterOptions); trackEvent(payload: AnalyticsEventPayload): Promise; flush(): Promise; private sendEvents; destroy(): void; } /** * Analytics Manager - coordinates analytics tracking for the player */ export declare class AnalyticsManager { private config; private adapter; private sessionId; private heartbeatTimer; private lastTimeUpdate; private sourceUrl; private isDestroyed; constructor(config: AnalyticsConfig); /** * Initialize analytics session */ initialize(sourceUrl: string): void; /** * Start heartbeat tracking */ startHeartbeat(getState: () => { currentTime: number; duration: number; volume: number; muted: boolean; playbackRate: number; }): void; /** * Stop heartbeat tracking */ stopHeartbeat(): void; /** * Track a player event */ trackEvent(eventName: AnalyticsEventName, state: { currentTime: number; duration: number; volume: number; muted: boolean; playbackRate: number; quality?: string; }, customData?: Record): void; /** * End analytics session */ endSession(state: { currentTime: number; duration: number; volume: number; muted: boolean; playbackRate: number; }): void; /** * Destroy analytics manager */ destroy(): void; /** * Generate unique session ID */ private generateSessionId; /** * Get current session ID */ getSessionId(): string; } export type AdapterType = 'console' | 'http'; export interface AdapterFactoryOptions { type: AdapterType; httpOptions?: HttpAdapterOptions; consoleOptions?: { prefix?: string; enableColors?: boolean; }; } /** * Factory function to create analytics adapters */ export declare function createAnalyticsAdapter(options: AdapterFactoryOptions): AnalyticsAdapter; /** * Example adapter configured for a typical backend API * Customize this for your specific backend */ export declare function createExampleBackendAdapter(baseUrl: string, authToken?: string): HttpAnalyticsAdapter;