!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.VideoPressIframeApi=t():e.VideoPressIframeApi=t()}(this,()=>(()=>{"use strict";var e={d:(t,n)=>{for(var s in n)e.o(n,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:n[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};function n(e,t,n){return(t=function(e){var t=function(e){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}e.d(t,{default:()=>s});const s=(e,t=null)=>{const s="channel_init",a=new class{constructor(e,t=null){n(this,"initListener",()=>{let e=0;const t=Math.random().toString(36),n=()=>{window.removeEventListener("message",s),clearInterval(a)},s=e=>{e.source===this.iframe.contentWindow&&e.data&&e.data.uid===t&&"iframe_ack_response"===e.data.event&&(n(),this.onIframeLoaded())};window.addEventListener("message",s);const a=setInterval(()=>{e>40?n():this.iframe.contentWindow&&(this.iframe.contentWindow.postMessage({event:"iframe_ack",uid:t},"*"),e++)},300);this.iframe.addEventListener("load",()=>{n(),this.onIframeLoaded()})}),n(this,"onIframeLoaded",()=>{this.channel||(this.channel=new MessageChannel,this.channel.port1.onmessage=e=>this.onMessageReceived(e),this.iframe.contentWindow.postMessage({event:s},"*",[this.channel.port2]))}),n(this,"onChannelInitialized",()=>{this.onReadyCallback&&this.onReadyCallback()}),n(this,"postMessage",(e,t=null,n=null)=>{if(null===this.channel)return;const s={event:e};null!==t&&Array.isArray(t)&&(s.args=t),null!==n&&(s.xchgId=n),this.channel.port1.postMessage(s)}),n(this,"generateXchgId",()=>++this.currentXchgId),n(this,"generateListenerId",()=>++this.currentEventListenerId),n(this,"callMethod",(e,t=null)=>{const n=this.generateXchgId();return new Promise((s,a)=>{this.pendingResolvers[n]={resolve:s,reject:a},this.postMessage(e,t,n)})}),n(this,"listen",(e,t)=>{if(!this.eventListenersByEvent[e])return!1;const n=this.generateListenerId();return this.eventListenersById[n]={event:e,callback:t},this.eventListenersByEvent[e].push(n),n}),n(this,"stopListening",e=>{if(e=Number(e),this.eventListenersById[e]){const t=this.eventListenersById[e],n=this.eventListenersByEvent[t.event].findIndex(t=>e===t);void 0!==n&&this.eventListenersByEvent[t.event].splice(n,1),delete this.eventListenersById[e]}}),n(this,"onMessageReceived",e=>{const t=e.data.event??!1;if(!t)return;if(s===t)return void this.onChannelInitialized();const n=e.data.xchgId??0;n?this.onMessageReceivedWithXchgId(n,t,e):"event"===t&&this.onEventReceived(e)}),n(this,"onEventReceived",e=>{const t=e.data.type??"";if(!t||!this.eventListenersByEvent[t])return;const n=e.data.args??[];this.eventListenersByEvent[t].forEach(e=>{const t=this.eventListenersById[e]??null;t&&t.callback(...n)})}),n(this,"onMessageReceivedWithXchgId",(e,t,n)=>{if(!this.pendingResolvers[e])return;const s=this.pendingResolvers[e];delete this.pendingResolvers[e],"error"===t?s.reject(n.data.code,n.data.message):"result"===t&&s.resolve(n.data.message.result)}),this.currentXchgId=0,this.currentEventListenerId=0,this.pendingResolvers={},this.eventListenersById={},this.eventListenersByEvent={"info.infoUpdated":[],"status.fullscreenChanged":[],"status.playerStatusChanged":[],"status.playbackTimeUpdated":[],"status.timeUpdate":[],"status.chaptersChapterChange":[],"status.chaptersTrackChange":[],"status.borderColorsChanged":[],"status.error":[],"status.segmentsWatched":[],"status.playbackRateUpdate":[]},this.onReadyCallback=t,this.channel=null,this.iframe=e,this.initListener()}}(e,t);return{controls:{play:()=>new Promise((e,t)=>a.callMethod("controls.play",[]).then(e).catch(t)),pause:()=>new Promise((e,t)=>a.callMethod("controls.pause",[]).then(e).catch(t)),seek:e=>new Promise((t,n)=>{if(e=Number(e),!isNaN(e))return a.callMethod("controls.seek",[e]).then(t).catch(n);n("Invalid argument provided for timeMs")}),volume:e=>new Promise((t,n)=>{if(e=Number(e),!isNaN(e))return a.callMethod("controls.volume",[e]).then(t).catch(n);n("Invalid argument provided for volume")}),mute:e=>new Promise((t,n)=>(e=(!("toLowerCase"in Object(e))||"false"!==e.toLowerCase()&&"0"!==e)&&Boolean(e),a.callMethod("controls.mute",[e]).then(t).catch(n))),fullscreen:e=>new Promise((t,n)=>(e=(!("toLowerCase"in Object(e))||"false"!==e.toLowerCase()&&"0"!==e)&&Boolean(e),a.callMethod("controls.fullscreen",[e]).then(t).catch(n))),setChapters:e=>new Promise((t,n)=>{if(Array.isArray(e))return a.callMethod("controls.setChapters",[e]).then(t).catch(n);n("Invalid argument provided for chapters")})},customize:{get:e=>new Promise((t,n)=>(e=String(e),a.callMethod("customize.get",[e]).then(t).catch(n))),set:e=>new Promise((t,n)=>{if("object"==typeof e)return a.callMethod("customize.set",[e]).then(t).catch(n);n("Invalid argument provided for options")})},info:{onInfoUpdated:e=>a.listen("info.infoUpdated",e),offInfoUpdated:e=>a.stopListening(e),duration:(e=JSON.parse(!1))=>new Promise((t,n)=>(e=(!("toLowerCase"in Object(e))||"false"!==e.toLowerCase()&&"0"!==e)&&Boolean(e),a.callMethod("info.duration",[e]).then(t).catch(n))),guid:()=>new Promise((e,t)=>a.callMethod("info.guid",[]).then(e).catch(t)),title:()=>new Promise((e,t)=>a.callMethod("info.title",[]).then(e).catch(t)),poster:()=>new Promise((e,t)=>a.callMethod("info.poster",[]).then(e).catch(t)),privacy:()=>new Promise((e,t)=>a.callMethod("info.privacy",[]).then(e).catch(t)),getThumbnailSample:e=>new Promise((t,n)=>{if(e=Number(e),!isNaN(e))return a.callMethod("info.getThumbnailSample",[e]).then(t).catch(n);n("Invalid argument provided for count")}),enableWatchedSegments:()=>new Promise((e,t)=>a.callMethod("info.enableWatchedSegments",[]).then(e).catch(t)),disableWatchedSegments:()=>new Promise((e,t)=>a.callMethod("info.disableWatchedSegments",[]).then(e).catch(t)),toggleWatchedSegments:()=>new Promise((e,t)=>a.callMethod("info.toggleWatchedSegments",[]).then(e).catch(t)),watched:()=>new Promise((e,t)=>a.callMethod("info.watched",[]).then(e).catch(t)),resetWatched:()=>new Promise((e,t)=>a.callMethod("info.resetWatched",[]).then(e).catch(t))},status:{fullscreen:()=>new Promise((e,t)=>a.callMethod("status.fullscreen",[]).then(e).catch(t)),onFullscreenChanged:e=>a.listen("status.fullscreenChanged",e),offFullscreenChanged:e=>a.stopListening(e),player:()=>new Promise((e,t)=>a.callMethod("status.player",[]).then(e).catch(t)),onPlayerStatusChanged:e=>a.listen("status.playerStatusChanged",e),offPlayerStatusChanged:e=>a.stopListening(e),audio:()=>new Promise((e,t)=>a.callMethod("status.audio",[]).then(e).catch(t)),playbackTime:()=>new Promise((e,t)=>a.callMethod("status.playbackTime",[]).then(e).catch(t)),onPlaybackTimeUpdated:e=>a.listen("status.playbackTimeUpdated",e),offPlaybackTimeUpdated:e=>a.stopListening(e),onTimeUpdate:e=>a.listen("status.timeUpdate",e),offTimeUpdate:e=>a.stopListening(e),onChaptersChapterChange:e=>a.listen("status.chaptersChapterChange",e),offChaptersChapterChange:e=>a.stopListening(e),onChaptersTrackChange:e=>a.listen("status.chaptersTrackChange",e),offChaptersTrackChange:e=>a.stopListening(e),onBorderColorsChanged:e=>a.listen("status.borderColorsChanged",e),offBorderColorsChanged:e=>a.stopListening(e),borderColors:()=>new Promise((e,t)=>a.callMethod("status.borderColors",[]).then(e).catch(t)),onError:e=>a.listen("status.error",e),offError:e=>a.stopListening(e),onSegmentsWatched:e=>a.listen("status.segmentsWatched",e),offSegmentsWatched:e=>a.stopListening(e),onPlaybackRateUpdate:e=>a.listen("status.playbackRateUpdate",e),offPlaybackRateUpdate:e=>a.stopListening(e)}}};return t.default})());; // listen for rlt authentication events and pass them to children of this document. ( function() { var currentToken; var parentOrigin; var iframeOrigins; var registeredIframes = []; var initializationListeners = []; var hasBeenInitialized = false; var RLT_KEY = 'jetpack:wpcomRLT'; // should we inject RLT into this iframe? function rltShouldAuthorizeIframe( frameOrigin ) { if ( ! Array.isArray( iframeOrigins ) ) { return false; } return iframeOrigins.includes( frameOrigin ); } function rltInvalidateWindowToken( token, target, origin ) { if ( target && typeof target.postMessage === 'function' ) { try { target.postMessage( JSON.stringify( { type: 'rltMessage', data: { event: 'invalidate', token: token, sourceOrigin: window.location.origin, }, } ), origin ); } catch ( err ) { return; } } } /** * PUBLIC METHODS */ window.rltInvalidateToken = function( token, sourceOrigin ) { // invalidate in current context if ( token === currentToken ) { currentToken = null; } // remove from localstorage, but only if in a top level window, not iframe try { if ( window.location === window.parent.location && window.localStorage ) { if ( window.localStorage.getItem(RLT_KEY) === token ) { window.localStorage.removeItem(RLT_KEY); } } } catch( e ) { console.info("localstorage access for invalidate denied - probably blocked third-party access", window.location.href); } // invalidate in registered iframes for ( const [ frameOrigin, frameWindow ] of registeredIframes ) { if ( frameOrigin !== sourceOrigin ) { rltInvalidateWindowToken( token, frameWindow, frameOrigin ); } } // invalidate in parent if ( parentOrigin && parentOrigin !== sourceOrigin && window.parent ) { rltInvalidateWindowToken( token, window.parent, parentOrigin ); } } window.rltInjectToken = function( token, target, origin ) { if ( target && typeof target.postMessage === 'function' ) { try { target.postMessage( JSON.stringify( { type: 'loginMessage', data: { event: 'login', success: true, type: 'rlt', token: token, sourceOrigin: window.location.origin, }, } ), origin ); } catch ( err ) { return; } } }; window.rltIsAuthenticated = function() { return !! currentToken; }; window.rltGetToken = function() { return currentToken; }; window.rltAddInitializationListener = function( listener ) { // if RLT is already initialized, call the listener immediately if ( hasBeenInitialized ) { listener( currentToken ); } else { initializationListeners.push( listener ); } }; // store the token in localStorage window.rltStoreToken = function( token ) { currentToken = token; try { if ( window.location === window.parent.location && window.localStorage ) { window.localStorage.setItem( RLT_KEY, token ); } } catch( e ) { console.info("localstorage access denied - probably blocked third-party access", window.location.href); } } window.rltInitialize = function( config ) { if ( ! config || typeof window.postMessage !== 'function' ) { return; } currentToken = config.token; iframeOrigins = config.iframeOrigins; parentOrigin = config.parentOrigin; // needed? // load token from localStorage if possible, but only in top level window try { if ( ! currentToken && window.location === window.parent.location && window.localStorage ) { currentToken = window.localStorage.getItem(RLT_KEY); } } catch( e ) { console.info("localstorage access denied - probably blocked third-party access", window.location.href); } // listen for RLT events from approved origins window.addEventListener( 'message', function( e ) { var message = e && e.data; if ( typeof message === 'string' ) { try { message = JSON.parse( message ); } catch ( err ) { return; } } var type = message && message.type; var data = message && message.data; if ( type === 'loginMessage' ) { if ( data && data.type === 'rlt' && data.token !== currentToken ) { // put into localStorage if running in top-level window (not iframe) rltStoreToken( data.token ); // send to registered iframes for ( const [ frameOrigin, frameWindow ] of registeredIframes ) { rltInjectToken( currentToken, frameWindow, frameOrigin ); } // send to the parent, unless the event was sent _by_ the parent if ( parentOrigin && parentOrigin !== data.sourceOrigin && window.parent ) { rltInjectToken( currentToken, window.parent, parentOrigin ); } } } if ( type === 'rltMessage' ) { if ( data && data.event === 'invalidate' && data.token === currentToken ) { rltInvalidateToken( data.token ); } if ( data && data.event === 'register' ) { if ( rltShouldAuthorizeIframe( e.origin ) ) { registeredIframes.push( [ e.origin, e.source ] ); if ( currentToken ) { rltInjectToken( currentToken, e.source, e.origin ); } } } } } ); initializationListeners.forEach( function( listener ) { listener( currentToken ); } ); initializationListeners = []; // inform the parent that we are ready to receive the RLT token window.parent.postMessage( { type: 'rltMessage', data: { event: 'register' }, }, '*' ); hasBeenInitialized = true; }; } )(); ;