"}, config: {"autoplay":true,"captions":"","preload":true,"addrum":true,"showHeatmap":false,"trackView":true,"token":"","muted":false,"loop":false,"expires":0,"playsinline":false,"showSpeed":true,"rememberPosition":null,"forceSettings":false,"t":"","lang":"en","levelCap":false,"chromecast":false,"disableIosPlayer":false,"disableAirPlay":false,"drmEngine":"hls","baseUrl":"https://video.bunnycdn.com","isJit":false,"sessionTrackingConfig":{"iframeDomain":"iframe.mediadelivery.net","videoApiHostname":"https://video.bunnycdn.com","serverId":"1348","pullzoneTier":1},"isFairPlay":false,"fairPlayUseHls":false}, startTime: 0, playbackSpeeds: ["0.50","0.75","1.00","1.25","1.50","1.75","2.00","4.00"], heatmapData: null }; let videoPlayer; // Initialize the player and expose its API const initializePlayer = () => { if (!window.VideoPlayer) { throw new Error('VideoPlayer class is not available'); } // Create and initialize the player videoPlayer = new VideoPlayer(playerConfig); videoPlayer.initialize(); // Expose player API on window for external access window.player = { play: () => videoPlayer.video?.play(), pause: () => videoPlayer.video?.pause(), currentTime: { get: () => videoPlayer.video?.currentTime ?? 0, set: (time) => { if (videoPlayer.video) videoPlayer.video.currentTime = time; } }, volume: { get: () => videoPlayer.video?.volume ?? 1, set: (vol) => { if (videoPlayer.video) videoPlayer.video.volume = vol; } }, muted: { get: () => videoPlayer.video?.muted ?? false, set: (mute) => { if (videoPlayer.video) videoPlayer.video.muted = mute; } } }; }; // Wait for both DOM content and module script to load const moduleScript = document.querySelector('script[type="module"]'); if (!moduleScript) { throw new Error('Module script not found'); } // Create a promise that resolves when the module script loads const moduleLoaded = new Promise((resolve, reject) => { moduleScript.addEventListener('load', resolve); moduleScript.addEventListener('error', reject); }); // Create a promise that resolves when the DOM is ready const domReady = new Promise(resolve => { if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', resolve); } else { resolve(); } }); // Initialize when both DOM and module are ready Promise.all([domReady, moduleLoaded]) .then(() => { // Give a small delay for module execution requestAnimationFrame(initializePlayer); // Initialize RUM (Real User Monitoring) if enabled try { if (window.RumJob) { const rumJob = new window.RumJob(); rumJob.start(); } else { console.warn('RUM tracking requested but RumJob is not available'); } } catch (error) { console.error('Failed to initialize RUM:', error); } }) .catch(error => { console.error('Failed to initialize player:', error); });