/** * AudioContextGuard - Robust AudioContext lifecycle management for background playback * * Handles: * - AudioContext suspension/interruption detection and recovery * - Browser tab visibility changes * - User gesture requirements for resume * - UI banner for manual resume when needed */ export type AudioContextState = 'running' | 'suspended' | 'interrupted' | 'closed'; export interface AudioContextGuardConfig { /** AudioContext instance to guard */ audioContext: AudioContext; /** Callback when context state changes */ onStateChange?: (state: AudioContextState) => void; /** Callback when user gesture is required to resume */ onResumeRequired?: () => void; /** Callback when resume succeeds after user gesture */ onResumeSuccess?: () => void; /** Enable debug logging */ debug?: boolean; } export declare class AudioContextGuard { private audioContext; private onStateChange?; private onResumeRequired?; private onResumeSuccess?; private debug; private visibilityChangeHandler?; private focusHandler?; private blurHandler?; private pageShowHandler?; private stateChangeHandler?; private isActive; private resumeAttempts; private readonly MAX_AUTO_RESUME_ATTEMPTS; private lastResumeAttempt; private readonly RESUME_THROTTLE_MS; constructor(config: AudioContextGuardConfig); /** * Start monitoring AudioContext and attach event listeners */ start(): void; /** * Stop monitoring and detach event listeners */ stop(): void; /** * Manually ensure AudioContext is running (call from user gesture) */ ensureRunning(): Promise; /** * Get current AudioContext state */ getState(): AudioContextState; private handleVisibilityChange; private handleFocus; private handleBlur; private handlePageShow; private handleStateChange; private checkAndResume; private attemptResume; private log; }