{"version":3,"sources":["config/config.js","config/Configuration.js","PauseOverlay.js","DateTime.js","Media.js","Ui.js","Logger.js","analytics/Analytic.js","analytics/ComScore.js","analytics/ATInternetDevelopers.js","analytics/MUX.js","analytics/Analytics.js","StreamFincons.js","Stream.js","Uint8ArrayUtils.js","CastQueue.js","MimeResolver.js","Receiver.js"],"names":["config","environment","version","customChannel","streamType","accountId","endpoint","drmType","subtitleFilter","configUrl","dvrWindowLength","instance","Configuration","data","Promise","resolve","get","fetch","then","response","json","parseData","catch","all","api","fincons","mpx_config","account_pid","set","e","console","log","features","ads","key","value","valObject","keys","split","dataObject","length","undefined","nextDataObject","shift","nextKey","join","Object","freeze","PauseOverlay","customData","pauseOverlay","document","getElementById","innerHTML","title","description","thumbnailUrl","img","createElement","src","thumbNode","firstChild","removeChild","appendChild","next","subtitle","style","backgroundImage","display","recommendations","recommendNode","recommendationlength","i","parentDiv","className","textDiv","titleSpan","subtitleSpan","DateTime","element","ticker","el","dateTimeStart","changeTime","setInterval","date","Date","formatDate","dateArray","toString","dayName","dayNum","getDate","monthName","hours","zeroFill","getHours","minutes","getMinutes","number","requiredWidth","realWidth","Array","test","Media","contentId","Ui","logger","obj","playerElement","debug","prototype","hasOwnProperty","call","info","setProperty","splashImage","logoImage","fontFamily","levelTypes","NONE","ERROR","WARNING","INFO","DEBUG","V1","V2","Logger","options","assign","debugLevel","currentLevel","window","bind","alwaysWarn","warn","setLevel","level","nop","error","warning","Analytic","context","cast","framework","CastReceiverContext","getInstance","playerManager","getPlayerManager","metadata","messages","GenericMediaMetadata","ComScore","name","publisherId","streamingAnalytics","ns_","StreamingAnalytics","setLabels","ns_site","ns_st_mp","ns_st_mv","ns_st_it","addEventListener","events","EventType","BITRATE_CHANGED","event","bitrateChangedEvent","BUFFERING","bufferingEvent","CLIP_ENDED","clipEndedEvent","errorEvent","MEDIA_FINISHED","mediaFinishedEvent","MEDIA_STATUS","mediaStatusEvent","SEGMENT_DOWNLOADED","segmentDownloadedEvent","BREAK_STARTED","breakEvent","BREAK_ENDED","BREAK_CLIP_LOADING","BREAK_CLIP_STARTED","BREAK_CLIP_ENDED","asset","getPlaybackSession","setAsset","notifyChangeBitrate","totalBitrate","isBuffering","notifyBufferStart","notifyBufferStop","getAsset","setLabel","notifyError","notifyEnd","currentMediaTime","mediaStatus","playerState","notifyPlay","currentTime","notifyPause","notifyCustomEvent","ns_st_ev","download_time","downloadTime","size","ATInternetDevelopers","ATInternet","Tracker","Tag","media","mediaInformation","PLAYING","PAUSED","broadcastTypes","LIVE","VOD","mediaTypes","VIDEO","playerTypes","pageTypes","NAME","LEVEL2","trackConstants","MEDIA_TYPE","PLATFORM","APP_NAME","CONTENT_TYPE","LANGUAGE","TITLE","MEDIA_PLAYER","PLAYER_VERSION","resetMedia","duration","channel","genre","playlistProgName","episodeName","episodeNumber","seriesNumber","subGenre","pubDate","producer","getMediaInformation","parseCustomData","pageSet","rmSet","action","richMedia","send","playerId","mediaLabel","SEEKED","mediaSeekEvent","sendAction","mInfo","cData","broadcastMode","StreamType","mTypes","pTypes","mediaType","format","mediaLevel2","mediaTheme1","mediaTheme2","mediaTheme3","content","refreshDuration","isEmbedded","add","page","level2","tConst","site","customVars","dispatch","string","constructor","formatString","replace","MUX","mux","emit","setData","initData","initChromecastMux","env_key","accessTokenID","player_name","player_init_time","now","video_id","video_duration","video_title","Analytics","analytics","init","analyticsData","push","analyticsLength","analyticsItem","type","startAnalytics","initEvents","setCustomData","StreamFincons","defaultOptions","authToken","mediaId","formats","googleAds","google","enabled","isStreamLive","adPolicy","playerTypeKey","adUnitKey","adUnit","playerType","platform","iu","oReq","XMLHttpRequest","parseResponse","open","target","status","xmlDoc","responseXML","DOMParser","parseFromString","responseText","parseSmilXml","seqEl","querySelector","getFirstAdEl","getFirstVideoSwitchEl","convertDataToObject","adEl","switchEl","videoEl","getElementsByTagName","trackingDataParamEl","adTagUrl","getAttribute","videoUrl","videoTrackingDataObj","releasePid","pid","aid","hasDrm","accountUrl","encodeURIComponent","streamInfo","stream","buildVideoUrl","licenseUrl","buildLicenseUrl","account","buildAdUrl","isStreamBuffered","BUFFERED","url","dvrWindow","search","match","p1","p2","includes","params","urlToChange","dvrWindowLengthParameter","regexTime","RegExp","indexOf","adUrl","pageUrl","location","href","outputFormat","dataString","separator","array","object","forEach","item","arr","children","nodeName","Stream","Uint8ArrayUtils","btoa","String","fromCharCode","Uint8Array","enc","TextDecoder","decode","str","bytes","atob","result","charCodeAt","QueueBase","CastQueue","requestData","queueData","QueueData","MimeResolver","mediaUrl","mimetype","linkEl","xhr","filename","pathname","pop","responseURL","getMimeType","DEBUG_LEVEL","Receiver","ui","mimeResolver","receiverOption","CastReceiverOptions","useLegacyDashSupport","breakManager","getBreakManager","initCafLoggerLevel","onLoadMessage","hasPauseOverlay","dateTime","initMessageInterceptors","start","queue","getLevel","setLoggerLevel","LoggerLevel","initCoreEventsListener","categoryTypes","category","CORE","PAUSE","ended","show","PLAY","hide","PLAYER_LOAD_COMPLETE","request","textTracksRebuild","addCustomMessageListener","customEvent","update","system","READY","shaka","ManifestParser","registerParserByMime","dash","DashParser","setMessageInterceptor","MessageType","LOAD","loadRequestData","requestId","JSON","stringify","load","getCustomData","mediaContentId","startsWith","setMimeType","streamOptions","getStream","contentUrl","setMediaPlaybackInfoHandler","loadRequest","playbackConfig","protectionSystem","ContentProtection","PLAYREADY","CLEARKEY","licenseRequestHandler","networkRequestInfo","widevineChallenge","toBase64","getWidevineLicense","licenseHandler","jsonMsg","license","parse","fromBase64","getWidevineLicenseResponse","WIDEVINE","mediaInfo","promise","contentType","newTextTracksManager","getTextTracksManager","tracks","track","idAudio","idText","id","subtype","loadConfig"],"mappings":"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","file":"Receiver.0a48b263.map","sourceRoot":"..","sourcesContent":["/**\n * Configuration object\n */\nconst config = {\n /** @member {String} environment The one from 'PRODUCTION', 'DEVELOPMENT' */\n environment: 'PRODUCTION',\n\n /** @member {String} version Application version */\n version: '1.0.19',\n\n /** @member {String} customChannel Namespace for custom message channel */\n customChannel: 'urn:x-cast:com.rte.chromecast',\n\n /** @member {String} streamType The RTE stream type */\n streamType: 'fincons',\n\n accountId: '1uC-gC', // dev: '9nl_gC',, prod: 1uC-gC\n\n /** @member {String} endpoint Endpoint URL returning SMIL (including Stream URL and Ads URL) */\n endpoint: 'https://link.theplatform.eu/s/[account]/media/[media]?auth=[auth]&sdk=PDK%205.7.16&formats=[formats]&format=SMIL&embedded=true&tracking=true',\n\n /** @member {String} drmType DRM type. The one from 'widevine', 'playready' */\n drmType: 'widevine',\n\n /** @member {Bollean} subtitleFilter */\n subtitleFilter: true,\n\n /** @member {String} configUrl Returning configuration for App */\n configUrl: 'https://www.rte.ie/wordpress/wp-content/uploads/standard/smartott/config.json',\n\n /**\n * @member {Bollean} dvrWindowLength DVR window length in seconds.\n * The additional property included in live stream request. TMGRIS-40\n */\n dvrWindowLength: 30\n};\n\nif (config.environment === 'DEVELOPMENT') {\n // config.configUrl = 'https://pl-cms-test.rte.host/wordpress/wp-content/uploads/standard/smartott/config.json';\n}\n\nexport default config;\n","import config from './config.js';\n\nclass Configuration {\n constructor() {\n if (!Configuration.instance) {\n this.data = { ...config };\n Configuration.instance = this;\n }\n\n return Configuration.instance;\n }\n\n loadConfig() {\n return new Promise((resolve) => {\n const configUrl = this.get('configUrl');\n if (configUrl) {\n fetch(configUrl)\n .then(response => response.json())\n .then((data) => {\n this.parseData(data);\n resolve();\n })\n .catch(() => {\n resolve();\n });\n } else {\n resolve();\n }\n });\n }\n\n parseData(data) {\n try {\n if (data.all.api.fincons.mpx_config.account_pid) {\n this.set('accountId', data.all.api.fincons.mpx_config.account_pid);\n }\n } catch (e) {\n console.log('account id does not exist');\n }\n\n try {\n if (data.all.features.ads) {\n this.set('ads', data.all.features.ads);\n }\n } catch (e) {\n console.log('ads does not exist');\n }\n }\n\n set(key, value) {\n this.data[key] = value;\n }\n\n get(key, valObject) {\n const keys = key.split('.');\n const dataObject = valObject || this.data;\n\n if (keys.length === 1) {\n if (dataObject[key]) {\n return dataObject[key];\n }\n return undefined;\n }\n\n if (dataObject[keys[0]]) {\n const nextDataObject = dataObject[keys[0]];\n keys.shift();\n const nextKey = keys.join('.');\n return this.get(nextKey, nextDataObject);\n }\n return undefined;\n }\n}\n\nconst instance = new Configuration();\nObject.freeze(instance);\n\nexport default instance;\n","import Configuration from './config/Configuration.js';\n\nexport default class PauseOverlay {\n /**\n * Initialize Pause overlay\n * @param {Object} customData\n */\n static init(customData) {\n const maxReccomendation = 3;\n\n if (typeof (customData.pauseOverlay) === 'undefined') {\n return false;\n }\n const data = customData.pauseOverlay;\n\n if (Configuration.get('version')) {\n document.getElementById('version').innerHTML = 'Version: ' + Configuration.get('version');\n }\n\n if (data.title) {\n document.getElementById('header-title').innerHTML = data.title;\n } else {\n document.getElementById('header-title').innerHTML = '';\n }\n if (data.description) {\n document.getElementById('header-description').innerHTML = data.description;\n } else {\n document.getElementById('header-description').innerHTML = '';\n }\n if (data.thumbnailUrl) {\n const img = document.createElement('img');\n img.src = data.thumbnailUrl;\n const thumbNode = document.getElementById('header-thumb');\n // Remove old images\n while (thumbNode.firstChild) {\n thumbNode.removeChild(thumbNode.firstChild);\n }\n thumbNode.appendChild(img);\n } else {\n const thumbNode = document.getElementById('header-thumb');\n // Remove old images\n while (thumbNode.firstChild) {\n thumbNode.removeChild(thumbNode.firstChild);\n }\n }\n\n if (data.next) {\n if (data.next.title) {\n document.getElementById('next-title').innerHTML = data.next.title;\n } else {\n document.getElementById('next-title').innerHTML = '';\n }\n if (data.next.subtitle) {\n document.getElementById('next-subtitle').innerHTML = data.next.subtitle;\n } else {\n document.getElementById('next-subtitle').innerHTML = '';\n }\n if (data.next.thumbnailUrl) {\n document.getElementById('next-thumb').style.backgroundImage = `url('${data.next.thumbnailUrl}')`;\n } else {\n document.getElementById('next-thumb').style.backgroundImage = 'none';\n }\n document.getElementById('next').style.display = 'inline-block';\n } else {\n document.getElementById('next').style.display = 'none';\n }\n\n if (data.recommendations) {\n const recommendNode = document.getElementById('recommendations-row');\n // Clear old recommendations\n while (recommendNode.firstChild) {\n recommendNode.removeChild(recommendNode.firstChild);\n }\n const recommendationlength = (\n data.recommendations.length\n && data.recommendations.length <= maxReccomendation\n ) ? data.recommendations.length : maxReccomendation;\n for (let i = 0; i < recommendationlength; i += 1) {\n const parentDiv = document.createElement('div');\n parentDiv.className = 'recommendations-thumb';\n if (data.recommendations[i].thumbnailUrl) {\n parentDiv.style.backgroundImage = `url('${data.recommendations[i].thumbnailUrl}')`;\n }\n const textDiv = document.createElement('div');\n textDiv.className = 'recommendations-text';\n\n if (data.recommendations[i].title) {\n const titleSpan = document.createElement('span');\n titleSpan.className = 'recommendations-title';\n titleSpan.innerHTML = data.recommendations[i].title;\n textDiv.appendChild(titleSpan);\n }\n\n if (data.recommendations[i].subtitle) {\n const subtitleSpan = document.createElement('span');\n subtitleSpan.className = 'recommendations-subtitle';\n subtitleSpan.innerHTML = data.recommendations[i].subtitle;\n textDiv.appendChild(subtitleSpan);\n }\n\n parentDiv.appendChild(textDiv);\n recommendNode.appendChild(parentDiv);\n document.getElementById('recommendations').style.display = 'inline-block';\n }\n } else {\n document.getElementById('recommendations').style.display = 'none';\n }\n return true;\n }\n\n /**\n * Show pause Modal\n */\n static show() {\n document.getElementById('pauseModal').style.display = 'block';\n }\n\n /**\n * Hide pause Modal\n */\n static hide() {\n document.getElementById('pauseModal').style.display = 'none';\n }\n}\n","export default class DateTime {\n /**\n * Constructor\n * @param {Object} element Html element\n */\n constructor(element) {\n this.ticker = null;\n this.el = element;\n this.dateTimeStart();\n }\n\n /**\n * Starting ticker\n */\n dateTimeStart() {\n this.changeTime();\n this.ticker = setInterval(() => {\n this.changeTime();\n }, 10000);\n }\n\n /**\n * Changing date string in the main HTML element\n */\n changeTime() {\n const date = new Date();\n this.el.innerHTML = DateTime.formatDate(date);\n }\n\n /**\n * Convert date object do the formated string\n * @param {Object} Date\n * @returns {String}\n */\n static formatDate(date) {\n const dateArray = date.toString().split(' ');\n const dayName = dateArray[0];\n const dayNum = date.getDate();\n const monthName = dateArray[1];\n const hours = DateTime.zeroFill(date.getHours(), 2);\n const minutes = DateTime.zeroFill(date.getMinutes(), 2);\n return `${dayName} ${dayNum} ${monthName} | ${hours}:${minutes}`;\n }\n\n /**\n * Padding number with zero, it depends on the width\n * @param {Integer} number\n * @param {Integer} requiredWidth\n */\n static zeroFill(number, requiredWidth) {\n const realWidth = requiredWidth - number.toString().length;\n if (realWidth > 0) {\n return new Array(realWidth + (/\\./.test(number) ? 2 : 1)).join('0') + number;\n }\n return number.toString(); // always return a string\n }\n\n}\n","export default class Media {\n static load(contentId) {\n // console.log(`Load media for id: ${contentId}`);\n }\n}","export default class Ui {\n constructor(logger) {\n this.logger = logger;\n }\n\n update(obj) {\n const playerElement = document.getElementById('player');\n this.logger.debug(obj);\n\n if (Object.prototype.hasOwnProperty.call(obj, 'backgroundImage')) {\n this.logger.info(`Update ui with new background image: ${obj.backgroundImage}`);\n playerElement.style.setProperty('--background-image', `url(\"${obj.backgroundImage}\")`);\n }\n\n if (Object.prototype.hasOwnProperty.call(obj, 'splashImage')) {\n this.logger.info(`Update ui with new splash image: ${obj.backgroundImage}`);\n playerElement.style.setProperty('--splash-image', `url(\"${obj.splashImage}\")`);\n }\n\n if (Object.prototype.hasOwnProperty.call(obj, 'logoImage')) {\n this.logger.info(`Update ui with new logo: ${obj.backgroundImage}`);\n playerElement.style.setProperty('--logo-image', `url(\"${obj.logoImage}\")`);\n }\n\n if (Object.prototype.hasOwnProperty.call(obj, 'fontFamily')) {\n this.logger.info(`Update ui with new font family: ${obj.backgroundImage}`);\n playerElement.style.setProperty('--font-family', `url(\"${obj.fontFamily}\")`);\n }\n }\n}","const levelTypes = {\n NONE: 0,\n ERROR: 1,\n WARNING: 2,\n INFO: 3,\n DEBUG: 4,\n V1: 5,\n V2: 6\n};\n\nexport default class Logger {\n /**\n * Log constructor\n * @param {Object} options\n */\n constructor(options) {\n const defaultOptions = {\n debugLevel: 0\n };\n this.options = Object.assign(defaultOptions, options);\n this.currentLevel = 0;\n\n // IE8 has no console unless it is opened in advance.\n // IE9 console methods are not Functions and have no bind.\n if (window.console && window.console.log.bind) {\n this.alwaysWarn = console.warn.bind(console);\n this.setLevel(this.options.debugLevel);\n }\n }\n\n /**\n * Set debug level\n * @param {number} level\n */\n setLevel(level) {\n const nop = function () {};\n\n this.currentLevel = level;\n\n this.error = (level >= levelTypes.ERROR) ? console.error.bind(console) : nop;\n this.warning = (level >= levelTypes.WARNING) ? console.warn.bind(console) : nop;\n this.info = (level >= levelTypes.INFO) ? console.info.bind(console) : nop;\n this.debug = (level >= levelTypes.DEBUG) ? console.log.bind(console) : nop;\n }\n\n /**\n * @returns {number} The debug level\n */\n getLevel() {\n return this.currentLevel;\n }\n\n /* eslint-disable lines-between-class-members, class-methods-use-this */\n alwaysWarn() {}\n error() {}\n warning() {}\n info() {}\n debug() {}\n}\n\nLogger.levelTypes = levelTypes;\n","// eslint\n/* global cast */\n\nexport default class Analytic {\n /**\n * Analytic constructor\n * @param {Object} options\n * @param {Logger} logger\n */\n constructor(options, logger) {\n this.context = cast.framework.CastReceiverContext.getInstance();\n this.playerManager = this.context.getPlayerManager();\n const defaultOptions = {\n title: null\n };\n this.options = Object.assign(defaultOptions, options);\n this.logger = logger;\n this.metadata = new cast.framework.messages.GenericMediaMetadata();\n }\n\n initEvents() {\n return;\n }\n\n setCustomData() {\n return;\n }\n\n sendAction() {\n return;\n }\n\n mediaFinishedEvent() {\n return;\n }\n\n mediaStatusEvent() {\n return;\n }\n\n mediaSeekEvent() {\n return;\n }\n}\n","import Analytic from './Analytic.js';\n\n// eslint\n/* global cast, ns_ */\n\nexport default class ComScore extends Analytic {\n /**\n * Create ComScore Analytics\n * @param {Object} options\n * @param {Logger} logger\n */\n constructor(options, logger) {\n super(options, logger);\n this.name = 'ComScore';\n\n const defaultOptions = {\n publisherId: null\n };\n this.options = Object.assign(defaultOptions, this.options);\n\n this.streamingAnalytics = new ns_.StreamingAnalytics({\n publisherId: this.options.publisherId,\n debug: true\n });\n\n this.streamingAnalytics.setLabels({\n ns_site: 'test',\n ns_st_mp: '24i-smartott',\n ns_st_mv: 1.0,\n ns_st_it: 'c'\n });\n }\n\n /**\n * Initialize events\n */\n initEvents() {\n this.logger.info(`Initialize ${this.name} Analytics Events`);\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BITRATE_CHANGED,\n (event) => {\n this.bitrateChangedEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BUFFERING,\n (event) => {\n this.bufferingEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.CLIP_ENDED,\n (event) => {\n this.clipEndedEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.ERROR,\n (event) => {\n this.errorEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.MEDIA_FINISHED,\n (event) => {\n this.mediaFinishedEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.MEDIA_STATUS,\n (event) => {\n this.mediaStatusEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.SEGMENT_DOWNLOADED,\n (event) => {\n this.segmentDownloadedEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BREAK_STARTED,\n (event) => {\n this.breakEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BREAK_ENDED,\n (event) => {\n this.breakEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BREAK_CLIP_LOADING,\n (event) => {\n this.breakEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BREAK_CLIP_STARTED,\n (event) => {\n this.breakEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BREAK_CLIP_ENDED,\n (event) => {\n this.breakEvent(event);\n }\n );\n }\n\n setAsset(asset) {\n this.streamingAnalytics.getPlaybackSession().setAsset(asset);\n }\n\n bitrateChangedEvent(event) {\n // notifyChangeBitrate\n this.logger.info(`${this.name}: BitRate Change Event`);\n this.logger.debug('event', event);\n this.streamingAnalytics.notifyChangeBitrate(event.totalBitrate);\n }\n\n bufferingEvent(event) {\n // notifyBufferStart\n if (event.isBuffering) {\n this.logger.info(`${this.name}: Buffering Start Event`);\n this.streamingAnalytics.notifyBufferStart();\n } else {\n this.logger.info(`${this.name}: Buffering Stop Event`);\n this.streamingAnalytics.notifyBufferStop();\n }\n this.logger.debug('event', event);\n }\n\n clipEndedEvent(event) {\n this.logger.info(`${this.name}: Clip Ended Event`);\n this.logger.debug('event', event);\n }\n\n errorEvent(event) {\n // notifyError\n this.logger.info(`${this.name}: Error Event`);\n this.logger.debug('event', event);\n\n this.streamingAnalytics.getPlaybackSession().getAsset().setLabel('ns_st_er', event.error);\n this.streamingAnalytics.notifyError();\n }\n\n mediaFinishedEvent(event) {\n // notifyEnd\n this.logger.info(`${this.name}: Media Finished Event`);\n this.logger.debug('event', event);\n\n this.streamingAnalytics.notifyEnd(event.currentMediaTime);\n }\n\n mediaStatusEvent(event) {\n this.logger.info(`${this.name}: Media Status Event`);\n this.logger.debug('event', event);\n if (event.mediaStatus.playerState === 'PLAYING') {\n this.streamingAnalytics.notifyPlay(event.mediaStatus.currentTime);\n } else if (event.mediaStatus.playerState === 'PAUSED') {\n this.streamingAnalytics.notifyPause(event.mediaStatus.currentTime);\n }\n }\n\n segmentDownloadedEvent(event) {\n this.logger.info(`${this.name}: Segment Downloaded Event`);\n this.logger.debug('event', event);\n\n this.streamingAnalytics.notifyCustomEvent({\n ns_st_ev: 'segment_downloaded',\n download_time: event.downloadTime,\n size: event.size\n });\n }\n\n breakEvent(event) {\n this.logger.info(`${this.name}: Break Event`);\n this.logger.debug('event', event);\n }\n}\n","import Analytic from './Analytic.js';\n\n// eslint\n/* global cast, ATInternet */\n\nexport default class ATInternetDevelopers extends Analytic {\n /**\n * Create ATInternet Developers Analytics\n * @param {Object} options\n * @param {Logger} logger\n */\n constructor(options, logger) {\n super(options, logger);\n this.name = 'AT Internet Developers';\n this.streamingAnalytics = new ATInternet.Tracker.Tag();\n this.media = {};\n this.mediaInformation = {};\n this.customData = {};\n this.mediaStatus = {\n PLAYING: 'PLAYING',\n PAUSED: 'PAUSED'\n };\n this.broadcastTypes = {\n LIVE: 'live',\n VOD: 'clip'\n };\n this.mediaTypes = {\n VIDEO: 'video'\n };\n this.playerTypes = {\n VIDEO: 1\n };\n this.pageTypes = {\n NAME: 'player',\n LEVEL2: 7\n };\n this.trackConstants = {\n MEDIA_TYPE: 'vid',\n PLATFORM: 'ott',\n APP_NAME: 'pl',\n CONTENT_TYPE: 'index',\n LANGUAGE: 'en',\n TITLE: 'Discover Standard | RTÉ Player',\n MEDIA_PLAYER: 'rte_smarttv_player',\n PLAYER_VERSION: '1.0'\n };\n this.resetMedia();\n }\n\n resetMedia() {\n this.media = {\n contentId: '',\n title: '',\n duration: 0,\n channel: '',\n genre: '',\n playlistProgName: '',\n episodeName: '',\n episodeNumber: '',\n seriesNumber: '',\n subGenre: '',\n pubDate: '',\n producer: ''\n };\n }\n\n setCustomData() {\n this.logger.info(`setCustomData ${this.name} Analytics Events`, this.options);\n this.mediaInformation = this.playerManager.getMediaInformation();\n this.customData = (this.mediaInformation && this.mediaInformation.customData) || {};\n this.resetMedia();\n this.parseCustomData();\n\n this.pageSet();\n this.rmSet();\n }\n\n sendAction(action) {\n this.streamingAnalytics.richMedia.send({\n action,\n playerId: '1',\n mediaLabel: this.media.title\n });\n }\n\n /**\n * Initialize events\n */\n initEvents() {\n this.logger.info(`Initialize ${this.name} Analytics Events`);\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.MEDIA_FINISHED,\n (event) => {\n this.mediaFinishedEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.MEDIA_STATUS,\n (event) => {\n this.mediaStatusEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.SEEKED,\n (event) => {\n this.mediaSeekEvent(event);\n }\n );\n\n // Fired when the first break clip in a break starts loading.\n // Event is cast.framework.events.BreaksEvent.\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BREAK_STARTED,\n (event) => {\n console.warn('BREAK_STARTED');\n }\n );\n\n // Fired when the last break clip in a break ends.\n // Event is cast.framework.events.BreaksEvent.\n // Note: This event fires even if a user skips the last break clip in a break\n // to end the break.\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BREAK_ENDED,\n (event) => {\n console.warn('BREAK_ENDED');\n }\n );\n\n // Fired when a break clip starts loading. Event is cast.framework.events.BreaksEvent.\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BREAK_CLIP_LOADING,\n (event) => {\n console.warn('BREAK_CLIP_LOADING');\n }\n );\n\n // Fired when a break clip starts. Event is cast.framework.events.BreaksEvent.\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BREAK_CLIP_STARTED,\n (event) => {\n console.warn('BREAK_CLIP_STARTED');\n }\n );\n\n // Fired when a break clip ends. Event is cast.framework.events.BreaksEvent.\n // Note: This event fires even if a user skips a break clip.\n // Please check the endedReason property of BreaksEvent. To figure out amount of time\n // the break clip was watched please check getBreakClipCurrentTimeSec\n // and getBreakClipDurationSec of PlayerManager.\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BREAK_CLIP_ENDED,\n (event) => {\n console.warn('BREAK_CLIP_ENDED');\n }\n );\n }\n\n mediaFinishedEvent(event) {\n // notifyEnd\n this.logger.info(`${this.name}: Media Finished Event`);\n this.logger.debug('event', event);\n this.sendAction('stop');\n }\n\n mediaStatusEvent(event) {\n this.logger.info(`${this.name}: Media Status Event`);\n this.logger.debug('event', event);\n if (event.mediaStatus.playerState === this.mediaStatus.PLAYING) {\n this.sendAction('play');\n } else if (event.mediaStatus.playerState === this.mediaStatus.PAUSED) {\n this.sendAction('pause');\n }\n }\n\n mediaSeekEvent(event) {\n this.logger.info(`${this.name}: Media Seek Event`);\n this.logger.debug('event', event);\n this.sendAction('move');\n }\n\n parseCustomData() {\n const mInfo = this.mediaInformation || {};\n const cData = (this.customData && this.customData.pauseOverlay) || {};\n const { media } = this;\n\n media.contentId = mInfo.contentId || '';\n media.title = cData.title || '';\n media.duration = cData.duration || 0;\n media.pubDate = cData.pubDate || '';\n media.channel = cData.channel || '';\n media.genre = cData.genre || '';\n media.playlistProgName = cData.playlistProgName || '';\n media.episodeName = cData.episodeName || '';\n media.episodeNumber = cData.episodeNumber || '';\n media.seriesNumber = cData.seriesNumber || '';\n media.subGenre = cData.subGenre || '';\n media.pubDate = cData.pubDate || '';\n media.producer = cData.producer || '';\n media.broadcastMode = (mInfo.streamType === cast.framework.messages.StreamType.LIVE)\n ? this.broadcastTypes.LIVE : this.broadcastTypes.VOD;\n }\n\n rmSet() {\n const mTypes = this.mediaTypes;\n const pTypes = this.pageTypes;\n const media = this.media || {};\n\n const options = {\n mediaType: mTypes.VIDEO,\n mediaLabel: media.title && this.format(media.title),\n mediaLevel2: pTypes.LEVEL2,\n mediaTheme1: media.playlistProgName && this.format(media.playlistProgName), // Playlist name\n mediaTheme2: media.pubDate && this.format(media.pubDate), // Publication date\n mediaTheme3: media.producer && this.format(media.producer), // Content provider\n content: media.contentId && this.format(media.contentId),\n playerId: '1',\n refreshDuration: 5,\n duration: media.duration,\n isEmbedded: false,\n broadcastMode: media.broadcastMode\n };\n this.streamingAnalytics.richMedia.add(options);\n }\n\n pageSet() {\n this.streamingAnalytics.page.set({\n name: this.pageTypes.NAME,\n level2: this.pageTypes.LEVEL2\n });\n\n const tConst = this.trackConstants;\n const pTypes = this.pageTypes;\n const media = this.media || {};\n\n const options = {\n site: {\n 1: tConst.MEDIA_TYPE, // Media_Type\n 2: tConst.PLATFORM, // Platform\n 3: tConst.APP_NAME, // App_Name\n 4: media.contentId && this.format(media.contentId), // Content_ID\n 5: media.contentId && this.format(media.contentId), // BRN_ID\n 6: this.format(tConst.APP_NAME), // Media_Player\n 7: this.format(tConst.PLAYER_VERSION), // Player_Version\n 8: pTypes.LEVEL2, // Level2\n 9: this.format(pTypes.NAME), // Chapter1\n 10: media.channel && this.format(media.channel), // Channel\n 11: media.genre && this.format(media.genre), // Genre\n 12: media.playlistProgName && this.format(media.playlistProgName), // Playlist_Prog_Name\n 13: media.episodeName && this.format(media.episodeName), // Episode_Name\n 14: '', // Parent_URL\n 15: media.episodeNumber, // episode_Number\n 16: media.seriesNumber, // Series_Number\n 17: 0, // Radio\n 18: media.subGenre && this.format(media.subGenre), // Sub_Genre\n 19: '', // content_ID\n 20: '' // Boxset\n }\n };\n\n this.streamingAnalytics.customVars.set(options);\n this.streamingAnalytics.dispatch();\n }\n\n format(string) {\n if (!string) {\n return false;\n }\n\n /*\n * According to ATInternet documentation,\n * all site/page vars strings must be between brackets.\n */\n return `[${this.constructor.formatString(string)}]`;\n }\n\n static formatString(string) {\n return string && string.replace(/\\s/g, '_');\n }\n}\n","import Analytic from './Analytic.js';\n\n// eslint\n/* global initChromecastMux */\n\nexport default class MUX extends Analytic {\n /**\n * Create MUX Analytics\n * @param {Object} options\n * @param {Logger} logger\n */\n constructor(options, logger) {\n super(options, logger);\n this.name = 'MUX';\n }\n\n /**\n * Initialize events\n */\n initEvents() {\n this.logger.info(`Initialize ${this.name} Analytics Events`, this.options);\n }\n\n setCustomData() {\n if (this.playerManager.mux && this.playerManager.mux.emit) {\n this.setData();\n } else {\n this.initData();\n }\n }\n\n initData() {\n const mediaInformation = this.playerManager.getMediaInformation();\n\n initChromecastMux(this.playerManager, {\n debug: false,\n data: {\n env_key: this.options.accessTokenID, // required\n\n // Metadata\n player_name: 'Custom Player',\n player_init_time: Date.now(),\n\n // ... additional metadata\n video_id: mediaInformation.contentId || '',\n video_duration: mediaInformation.duration || mediaInformation.customData.duration || null,\n video_title: mediaInformation.metadata.title || mediaInformation.customData.pauseOverlay.title || ''\n }\n });\n }\n\n setData() {\n const mediaInformation = this.playerManager.getMediaInformation();\n\n this.playerManager.mux.emit('videochange', {\n data: {\n video_id: mediaInformation.contentId || '',\n video_duration: mediaInformation.duration || mediaInformation.customData.duration || null,\n video_title: mediaInformation.metadata.title || mediaInformation.customData.pauseOverlay.title || ''\n }\n });\n }\n}\n","import ComScore from './ComScore.js';\nimport ATInternetDevelopers from './ATInternetDevelopers.js';\nimport MUX from './MUX.js';\n\n// eslint\n/* global cast */\n\nexport default class Analytics {\n /**\n * Initialize each analytic defined in the data\n * @param {Object|Array} data analytic settings data\n */\n constructor(data, logger) {\n this.context = cast.framework.CastReceiverContext.getInstance();\n this.playerManager = this.context.getPlayerManager();\n this.logger = logger;\n this.analytics = [];\n\n this.init(data);\n }\n\n init(data) {\n let analyticsData = [];\n if (!(data instanceof Array)) {\n analyticsData.push(data);\n } else {\n analyticsData = data;\n }\n\n if (analyticsData instanceof Array) {\n this.logger.info('Initialize Analytics Array');\n const analyticsLength = analyticsData.length;\n for (let i = 0; i < analyticsLength; i += 1) {\n const analyticsItem = analyticsData[i];\n this.logger.info(analyticsItem);\n this.logger.info(`Initialize Analytics ${analyticsItem.type}`);\n this.analytics[i] = this.startAnalytics(\n analyticsItem.type,\n analyticsItem.options\n );\n if (this.analytics[i]) {\n this.analytics[i].initEvents();\n }\n }\n }\n }\n\n /**\n * @param {string} type\n * @param {Object} options\n */\n startAnalytics(type, options) {\n this.logger.info(`Start Analytic for type: ${type}`);\n\n switch (type) {\n case 'comscore':\n return new ComScore(options, this.logger);\n case 'atinternetdevelopers':\n return new ATInternetDevelopers(options, this.logger);\n case 'mux':\n return new MUX(options, this.logger);\n default:\n this.logger.warning(`Start for analytic ${type} not supported`);\n return null;\n }\n }\n\n /**\n * Set custom data for each analytic\n * @param {*} customData\n */\n setCustomData(customData) {\n const analyticsLength = this.analytics.length;\n for (let i = 0; i < analyticsLength; i += 1) {\n this.analytics[i].setCustomData(customData);\n }\n }\n}\n","import Configuration from './config/Configuration.js';\n\n// eslint\n/* global cast */\n\nexport default class StreamFincons {\n /**\n * Create Stream Fincons\n * @param {Object} options\n * @param {String} options.authToken\n * @param {String} options.mediaId\n * @param {cast.framework.messages.StreamType} options.streamType\n * @param {Logger} logger\n */\n constructor(options, logger) {\n const defaultOptions = {\n authToken: null,\n mediaId: null,\n streamType: cast.framework.messages.StreamType.NONE,\n formats: 'mpeg-dash', // ISM, mpeg-dash, M3U\n drmType: 'widevine',\n subtitleFilter: false\n };\n this.options = Object.assign(defaultOptions, options);\n this.logger = logger;\n }\n\n call() {\n return new Promise((resolve) => {\n this.logger.info('[StreamFincons] Start to prepare endpoint');\n const { streamType, authToken } = this.options;\n\n let endpoint = Configuration.get('endpoint').replace('[auth]', authToken);\n endpoint = endpoint.replace('[account]', Configuration.get('accountId'));\n endpoint = endpoint.replace('[media]', this.options.mediaId);\n endpoint = endpoint.replace('[formats]', this.options.formats);\n\n const ads = Configuration.get('ads') || {};\n const googleAds = ads.google;\n if (ads.enabled && googleAds) {\n const isStreamLive = cast.framework.messages.StreamType.LIVE === streamType;\n const adPolicy = Configuration.get('ads.google.ad_policy') || '';\n const playerTypeKey = isStreamLive ? 'liveChannels' : 'VOD';\n const adUnitKey = authToken ? 'logged' : 'not_logged';\n\n const adUnit = Configuration.get(`ads.google.ad_unit.${adUnitKey}`) || '';\n const playerType = Configuration.get(`ads.google.ad_unit.type.${playerTypeKey}`) || '';\n const platform = Configuration.get('ads.google.ad_unit.platform.chromecast') || '';\n\n let iu = adUnit.replace('{type}', playerType);\n iu = iu.replace('{platform}', platform);\n\n endpoint += `&policy=${adPolicy}&iu=${iu}`;\n }\n\n this.logger.info('[StreamFincons] Finished preparing endpoint');\n this.logger.info(`[StreamFincons] Start to fetch SMIL file, url: ${endpoint}`);\n const oReq = new XMLHttpRequest();\n oReq.addEventListener('load', (event) => {\n this.logger.info(`[StreamFincons] Finished fetching endpoint, url: ${endpoint}`);\n resolve(this.parseResponse(event));\n });\n oReq.open('GET', endpoint);\n oReq.send();\n });\n }\n\n parseResponse(event) {\n if (event.target.status !== 200) {\n this.logger.error(`[StreamFincons] Failed to load SMIL file, status: ${event.target.status}`);\n return {};\n }\n let xmlDoc = null;\n if (event.target.responseXML) {\n xmlDoc = event.target.responseXML;\n } else {\n const parser = new DOMParser();\n xmlDoc = parser.parseFromString(event.target.responseText, 'text/xml');\n }\n return this.parseSmilXml(xmlDoc);\n }\n\n parseSmilXml(xmlDoc) {\n this.logger.info('[StreamFincons] Start parsing XML smil');\n if (!xmlDoc) {\n this.logger.info('[StreamFincons] Failed to parse SMIL, missing response XML object');\n return {};\n }\n\n const seqEl = xmlDoc.querySelector('body seq');\n if (!seqEl) {\n this.logger.info('[StreamFincons] Failed SMIL parsing, missing element');\n return {};\n }\n const { getFirstAdEl, getFirstVideoSwitchEl, convertDataToObject } = StreamFincons;\n\n const adEl = getFirstAdEl(seqEl);\n const switchEl = getFirstVideoSwitchEl(seqEl);\n if (!switchEl) {\n this.logger.info('[StreamFincons] Failed SMIL parsing, missing element');\n return {};\n }\n const videoEl = switchEl.getElementsByTagName('video')[0];\n const trackingDataParamEl = switchEl.querySelector('param[name=\"trackingData\"]');\n\n const adTagUrl = adEl ? adEl.getAttribute('src') || '' : '';\n const videoUrl = videoEl ? videoEl.getAttribute('src') || '' : '';\n const videoTrackingDataStr = trackingDataParamEl ? trackingDataParamEl.getAttribute('value') || '' : '';\n const videoTrackingDataObj = convertDataToObject(videoTrackingDataStr);\n\n const { pid: releasePid, aid: accountId } = videoTrackingDataObj;\n const hasDrm = releasePid ? true : false;\n const accountUrl = encodeURIComponent(`http://access.auth.theplatform.com/data/Account/${accountId}`);\n\n const streamInfo = {\n stream: this.buildVideoUrl(videoUrl),\n licenseUrl: hasDrm ? this.buildLicenseUrl({ releasePid, account: accountUrl }) : '',\n releasePid,\n adTagUrl: StreamFincons.buildAdUrl(adTagUrl)\n };\n\n this.logger.debug(streamInfo);\n return streamInfo;\n }\n\n buildVideoUrl(videoUrl) {\n const { streamType } = this.options;\n const isStreamBuffered = streamType === cast.framework.messages.StreamType.BUFFERED;\n let url = videoUrl;\n // if the stream type is LIVE, then we need add another information to the endpoint\n // TMGRIS-40\n url = this.dvrWindow(url);\n\n // https://ott-jira.finconsgroup.com/browse/RTE-686\n // adding url postfix for getting only one subtitle track\n if (Configuration.get('subtitleFilter') && isStreamBuffered) {\n const subtitleFilter = '(type==\"video\"||type==\"audio\"||fourcc==\"stpp\")';\n if (url.search(/([?&]filter=)([^&\\n]*)/) > -1) {\n url = url.replace(/([?&]filter=)([^&\\n]*)/, (match, p1, p2) => {\n if (p2) { return `${p1}${p2}%26%26${subtitleFilter}`; }\n return `${p1}${subtitleFilter}`;\n });\n } else {\n url += url.includes('?') ? '&' : '?';\n url += `filter=${subtitleFilter}`;\n }\n }\n return url;\n }\n\n buildLicenseUrl(params) {\n const { account, releasePid } = params;\n const { authToken } = this.options;\n const drmType = Configuration.get('drmType');\n\n let licenseUrl = '';\n switch (drmType) {\n case 'playready':\n licenseUrl = `https://green.playready.entitlement.theplatform.eu/playready/rightsmanager.asmx?account=${account}&auth=${authToken}&releasePid=${releasePid}&schema=1.0`;\n break;\n case 'widevine':\n licenseUrl = `https://widevine.entitlement.theplatform.eu/wv/web/ModularDrm?form=json&schema=1.0&token=${authToken}&account=${account}`;\n // let raWlicenseUrl = `https://widevine.entitlement.theplatform.eu/wv/web/ModularDrm/getRawWidevineLicense?schema=1.0&token=${authToken}&releasePid=${releasePid}&account=${account}`;\n break;\n default:\n break;\n }\n return licenseUrl;\n }\n\n static buildAdUrl(adUrl) {\n let url = adUrl;\n if (!url) {\n return '';\n }\n\n // set the `url` param in URL\n const pageUrl = window.location.href;\n if (url.search(/([?&]url=)([^&\\n]*)/) > -1) {\n url = url.replace(/([?&]url=)([^&\\n]*)/, `$1${pageUrl}`);\n } else {\n url += url.includes('?') ? '&' : '?';\n url += `url=${pageUrl}`;\n }\n\n // set the `output` param in URL\n const outputFormat = 'vmap';\n if (url.search(/([?&]output=)([^&\\n]*)/) > -1) {\n url = url.replace(/([?&]output=)([^&\\n]*)/, `$1${outputFormat}`);\n } else {\n url += url.includes('?') ? '&' : '?';\n url += `output=${outputFormat}`;\n }\n return url;\n }\n\n /**\n * To convert data in string format to object.\n * @param {String} dataString to be converted to object. E.g.: \"key=value|aid=125jk5\"\n * @param {String='|'} separator\n * @return {Object} output object. E.g. {key: \"value\", aid: \"125jk5\"}\n */\n static convertDataToObject(dataString, separator = '|') {\n const array = dataString.split(separator);\n const object = {};\n array.forEach((item) => {\n const arr = item.split('=');\n if (arr.length > 1) {\n const key = arr[0];\n const value = arr[1];\n object[key] = value;\n }\n });\n return object;\n }\n\n static getFirstAdEl(seqEl) {\n const el = seqEl.children[0];\n if (el.nodeName === 'ref' && el.getAttribute('src')) {\n return el;\n }\n return null;\n }\n\n static getFirstVideoSwitchEl(seqEl) {\n const switchEl = seqEl.getElementsByTagName('switch')[0];\n if (switchEl) {\n return switchEl;\n }\n return null;\n }\n\n dvrWindow(url) {\n let urlToChange = url;\n if (this.options.streamType === cast.framework.messages.StreamType.LIVE) {\n const dvrWindowLengthParameter = `dvr_window_length=${Configuration.get('dvrWindowLength')}`;\n const regexTime = new RegExp(/\\.*(t=)(.*Z)(&)/);\n if (regexTime.test(urlToChange)) {\n urlToChange = urlToChange.replace(regexTime, `${dvrWindowLengthParameter}$3`);\n } else {\n urlToChange += (urlToChange.indexOf('?') > -1) ? '&' : '?';\n urlToChange += dvrWindowLengthParameter;\n }\n }\n return urlToChange;\n }\n}\n","import StreamFincons from './StreamFincons.js';\nimport Configuration from './config/Configuration.js';\n\nexport default class Stream {\n /**\n * @param {Object} options\n * @param {String} options.authToken\n * @param {String} options.mediaId\n * @param {cast.framework.messages.StreamType} options.streamType\n * @param {Logger} logger\n * @returns {StreamFincons|null}\n */\n static getStream(options, logger) {\n logger.info(`Get Stream for type: ${Configuration.get('streamType')}`);\n\n if (Configuration.get('streamType') === 'fincons') {\n return new StreamFincons(options, logger);\n }\n logger.warning('Stream type not supported');\n return null;\n }\n}\n","export default class Uint8ArrayUtils {\n /**\n * Convert a Uint8Array to a base64 string.\n * @param {!Uint8Array} arr\n * @returns {string}\n */\n static toBase64(arr) {\n return btoa(String.fromCharCode(...new Uint8Array(arr)));\n }\n\n /**\n * Convert a Uint8Array to a string.\n * @param {!Uint8Array} arr\n * @returns {string}\n */\n static toString(arr) {\n const enc = new TextDecoder();\n return enc.decode(arr);\n }\n\n /**\n * Convert a base64 string to a Uint8Array.\n * @param {string} str\n * @return {!Uint8Array}\n */\n static fromBase64(str) {\n // atob creates a \"raw string\" where each character is interpreted as a byte.\n const bytes = window.atob(str.replace(/-/g, '+').replace(/_/g, '/'));\n const result = new Uint8Array(bytes.length);\n for (let i = 0; i < bytes.length; i += 1) {\n result[i] = bytes.charCodeAt(i);\n }\n return result;\n }\n}","// eslint\n/* global cast */\n\nexport default class CastQueue extends cast.framework.QueueBase {\n /**\n * @param {Logger} logger\n */\n constructor(logger) {\n super();\n this.logger = logger;\n }\n\n /**\n * Initializes the queue.\n * @param {!cast.framework.messages.LoadRequestData} requestData\n * @return {!cast.framework.messages.QueueData}\n * or non-null Promise containing nullable cast.framework.messages.QueueData\n */\n initialize(requestData) {\n this.logger.info('Initialize CastQueue', requestData);\n if (typeof (requestData.queueData) === 'undefined') {\n this.logger.info('No queueData found, default behaviour');\n return null; // enable default behaviour\n }\n this.logger.info('Queuedata found!');\n const queueData = requestData.queueData || new cast.framework.messages.QueueData();\n return queueData;\n }\n}\n","/**\n * MIME Resolver class\n */\nexport default class MimeResolver {\n /**\n * @param {Logger} logger\n */\n constructor(logger) {\n this.logger = logger;\n }\n\n /**\n * To get MIME type from media URL\n * @param {string} mediaUrl\n * @returns {promise} including Media MIME type or empty string\n */\n getMimeType(mediaUrl) {\n this.logger.info(`[Receiver] getMimeType for url: ${mediaUrl}`);\n\n return new Promise((resolve) => {\n let mimetype = '';\n const linkEl = document.createElement('a');\n let xhr = null;\n linkEl.href = mediaUrl;\n const filename = linkEl.pathname.match(/\\/[^/]*$/gi)[0];\n switch (filename.split('.').pop()) {\n case 'mp4':\n case 'mov':\n mimetype = 'video/mp4';\n break;\n case 'mp3':\n mimetype = 'audio/mp3';\n break;\n case 'm3u':\n case 'm3u8':\n mimetype = 'application/x-mpegURL';\n break;\n case 'mpd':\n mimetype = 'application/dash+xml';\n break;\n case '/':\n xhr = new XMLHttpRequest();\n xhr.addEventListener('load', (event) => {\n if (event.target.responseURL) {\n // TODO check if working\n mimetype = this.getMimeType(event.target.responseURL);\n } else {\n mimetype = this.getMimeType(event.target.responseText);\n }\n resolve(mimetype);\n });\n xhr.open('GET', mediaUrl);\n xhr.send();\n break;\n default:\n mimetype = '';\n resolve(mimetype);\n break;\n }\n if (mimetype !== '') {\n resolve(mimetype);\n }\n });\n }\n}\n","import PauseOverlay from './PauseOverlay.js';\nimport DateTime from './DateTime.js';\nimport Media from './Media.js';\nimport Ui from './Ui.js';\nimport Logger from './Logger.js';\nimport Analytics from './analytics/Analytics.js';\nimport Stream from './Stream.js';\nimport Uint8ArrayUtils from './Uint8ArrayUtils.js';\nimport CastQueue from './CastQueue.js';\nimport MimeResolver from './MimeResolver.js';\nimport config from './config/config.js';\nimport Configuration from './config/Configuration.js';\n// import BitrateLogger from './BitrateLogger.js';\n\n/* global shaka */\n\nconst DEBUG_LEVEL = config.environment === 'DEVELOPMENT' ? Logger.levelTypes.DEBUG : Logger.levelTypes.NONE;\n\nclass Receiver {\n constructor(options, logger, ui) {\n this.options = options;\n this.logger = logger;\n this.ui = ui;\n this.logger.info(`[Receiver] constructor, version: ${config.version}, env: ${config.environment}`);\n\n this.mimeResolver = new MimeResolver(logger);\n this.context = cast.framework.CastReceiverContext.getInstance();\n this.receiverOption = new cast.framework.CastReceiverOptions(); // TODO: looks like useless variable\n this.receiverOption.useLegacyDashSupport = false;\n this.playerManager = this.context.getPlayerManager();\n this.breakManager = this.playerManager.getBreakManager();\n\n this.initCafLoggerLevel();\n\n this.onLoadMessage = this.onLoadMessage.bind(this);\n\n this.hasPauseOverlay = false;\n this.dateTime = new DateTime(document.getElementById('time'));\n this.initEvents();\n this.initMessageInterceptors();\n\n this.analytics = null;\n // this.bitrateLogger = new BitrateLogger(this.playerManager, this.logger);\n this.context.start({ queue: new CastQueue(logger) });\n }\n\n /**\n * To set CAF logger level. For development purpose ONLY\n */\n initCafLoggerLevel() {\n if (this.logger.getLevel() > Logger.levelTypes.NONE) {\n this.context.setLoggerLevel(cast.framework.LoggerLevel.DEBUG);\n this.initCoreEventsListener();\n }\n }\n\n /**\n * Listen to all Core Events. For development purpose ONLY\n */\n initCoreEventsListener() {\n const categoryTypes = cast.framework.events.category;\n this.playerManager.addEventListener(categoryTypes.CORE, (event) => {\n this.logger.debug(event);\n });\n this.playerManager.addEventListener(categoryTypes.DEBUG, (event) => {\n this.logger.debug(event);\n });\n }\n\n initEvents() {\n this.playerManager.addEventListener(\n cast.framework.events.EventType.PAUSE,\n (event) => {\n if (this.hasPauseOverlay && !event.ended) {\n this.logger.info('PAUSE EVENT - Show pause overlay');\n PauseOverlay.show();\n }\n }\n );\n this.playerManager.addEventListener(\n cast.framework.events.EventType.PLAY,\n () => {\n if (this.hasPauseOverlay) {\n this.logger.info('PLAY EVENT - Hide pause overlay');\n PauseOverlay.hide();\n }\n }\n );\n\n // When in queue mode, it's not executing the play and pause events\n this.playerManager.addEventListener(\n cast.framework.events.EventType.MEDIA_STATUS,\n (event) => {\n this.logger.info('Media Status Event', event);\n if (this.hasPauseOverlay) {\n if (event.mediaStatus.playerState === 'PAUSED') {\n this.logger.info('MEDIA STATUS PAUSE - Show pause overlay');\n PauseOverlay.show();\n } else if (event.mediaStatus.playerState === 'PLAYING' || event.mediaStatus.playerState === 'IDLE') {\n this.logger.info('MEDIA STATUS PLAYING - Hide pause overlay');\n PauseOverlay.hide();\n }\n }\n }\n );\n\n // closed captions handling (subtitles)\n this.playerManager.addEventListener(\n cast.framework.events.EventType.PLAYER_LOAD_COMPLETE,\n (request) => {\n this.textTracksRebuild(request);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.ERROR,\n (event) => {\n console.warn('ERROR', event);\n }\n );\n\n this.context.addCustomMessageListener(Configuration.get('customChannel'),\n (customEvent) => {\n this.logger.info('Got a Custom event');\n this.logger.debug('Event data', customEvent.data);\n if (Object.prototype.hasOwnProperty.call(customEvent.data, 'ui')) {\n this.logger.info('Initialize UI');\n this.ui.update(customEvent.data.ui);\n }\n this.logger.info(customEvent);\n if (Object.prototype.hasOwnProperty.call(customEvent.data, 'analytics')) {\n this.analytics = new Analytics(\n customEvent.data.analytics,\n this.logger\n );\n }\n });\n\n this.context.addEventListener(\n cast.framework.system.EventType.READY,\n () => {\n this.logger.debug('[Receiver] system ready event');\n // added special MPEG-DASH MIME type of Ads media files used in Google VAST\n shaka.media.ManifestParser.registerParserByMime('video/vnd.mpeg.dash.mpd', shaka.dash.DashParser);\n }\n );\n }\n\n initMessageInterceptors() {\n this.playerManager.setMessageInterceptor(\n cast.framework.messages.MessageType.LOAD,\n this.onLoadMessage\n );\n }\n\n /**\n * @param {cast.framework.messages.LoadRequestData} loadRequestData\n * @return {promise | cast.framework.messages.LoadRequestData}\n */\n onLoadMessage(loadRequestData) {\n this.logger.info(`[Receiver] onLoadMessage, id: ${loadRequestData.requestId}`);\n this.logger.info(JSON.stringify(loadRequestData));\n if (loadRequestData.media && loadRequestData.media.contentId) {\n\n if (loadRequestData.media.streamType === cast.framework.messages.StreamType.LIVE) {\n loadRequestData.currentTime = undefined; // hotfix for Android client sending currentTime = 0\n }\n\n Media.load(loadRequestData.media.contentId);\n this.logger.info(`DRM config: ${Configuration.get('drmType')}`);\n this.logger.debug('loadRequestData', loadRequestData);\n const customData = this.getCustomData(loadRequestData);\n this.hasPauseOverlay = PauseOverlay.init(customData);\n if (this.analytics) {\n this.analytics.setCustomData(customData);\n }\n\n // if it starts with http(s) it's not a media id and can't get smill\n // file with license info etc.\n const mediaContentId = loadRequestData.media.contentId;\n if (mediaContentId.startsWith('http://') || mediaContentId.startsWith('https://')) {\n return this.setMimeType(loadRequestData.media).then(() => loadRequestData);\n }\n\n const streamOptions = {\n authToken: customData.authToken,\n mediaId: loadRequestData.media.contentId,\n streamType: loadRequestData.media.streamType\n };\n\n const streamInfo = Stream.getStream(streamOptions, this.logger);\n\n return streamInfo.call().then((stream) => {\n this.logger.info('In promise for stream info');\n this.logger.debug('Stream', stream);\n loadRequestData.media.contentUrl = stream.stream;\n\n return this.setMimeType(loadRequestData.media)\n .then(() => {\n this.logger.info('setMediaPlaybackInfoHandler');\n this.playerManager.setMediaPlaybackInfoHandler(\n (loadRequest, playbackConfig) => {\n this.logger.info('In setMediaPlaybackInfoHandler');\n if (stream.licenseUrl) {\n playbackConfig.licenseUrl = stream.licenseUrl;\n this.logger.info(`Set ${Configuration.get('drmType')} licenseUrl on playbackConfig: ${stream.licenseUrl}`);\n switch (Configuration.get('drmType')) {\n case 'playready':\n playbackConfig.protectionSystem = cast.framework.ContentProtection.PLAYREADY;\n break;\n case 'clearkey':\n playbackConfig.protectionSystem = cast.framework.ContentProtection.CLEARKEY;\n break;\n case 'widevine':\n playbackConfig.licenseRequestHandler = (networkRequestInfo) => {\n this.logger.info('WideVine LicenseRequest Handler');\n const widevineChallenge = Uint8ArrayUtils.toBase64(networkRequestInfo.content);\n const content = {\n getWidevineLicense: {\n releasePid: stream.releasePid,\n widevineChallenge\n }\n };\n // Replace content with a json string for the license server\n networkRequestInfo.content = JSON.stringify(content);\n this.logger.info(`New WideVine license uri: ${networkRequestInfo.url}`);\n };\n playbackConfig.licenseHandler = (arr) => {\n this.logger.info('WideVince LicenseHandler');\n // Convert uint8array to string and parse json\n const jsonMsg = Uint8ArrayUtils.toString(arr);\n const license = JSON.parse(jsonMsg);\n // Return Uint8Array from the license in the json\n return Uint8ArrayUtils.fromBase64(license.getWidevineLicenseResponse.license);\n };\n playbackConfig.protectionSystem = cast.framework.ContentProtection.WIDEVINE;\n break;\n default:\n playbackConfig.protectionSystem = cast.framework.ContentProtection.NONE;\n break;\n }\n } else {\n this.logger.info('No license url found');\n }\n return playbackConfig;\n }\n );\n \n // if (stream.adTagUrl) {\n // loadRequestData.media.vmapAdsRequest = {\n // adTagUrl: stream.adTagUrl\n // };\n // }\n \n return loadRequestData;\n });\n });\n }\n return loadRequestData;\n }\n\n setMimeType(mediaInfo) {\n this.logger.info('[Receiver] setMimeType');\n let url = mediaInfo.contentUrl;\n if (!url) {\n url = mediaInfo.contentId;\n }\n const promise = this.mimeResolver.getMimeType(url);\n promise.then((mimetype) => {\n this.logger.debug(`[Receiver] finished setMimeType, mimetype: ${mimetype}`);\n // switching off for the non-functional android app\n return mediaInfo;\n /*\n mediaInfo.contentType = mimetype;\n if (['application/x-mpegURL', 'application/dash+xml'].indexOf(mediaInfo.contentType) > -1) {\n mediaInfo.metadata.metadataType = cast.framework.messages.GenericMediaMetadata;\n mediaInfo.streamType = cast.framework.messages.StreamType.LIVE;\n } else if (mediaInfo.contentType.match(/^audio/gi)) {\n mediaInfo.metadata.metadataType = cast.framework.messages.MusicTrackMediaMetadata;\n mediaInfo.streamType = cast.framework.messages.StreamType.BUFFERED;\n } else {\n mediaInfo.metadata.metadataType = cast.framework.messages.MovieMediaMetadata;\n mediaInfo.streamType = cast.framework.messages.StreamType.BUFFERED;\n }\n\n return mediaInfo;\n */\n });\n return promise;\n }\n\n /**\n * Fetch custom data from the loadRequestData, for some reason\n * the customdata is in different places when\n * using the queue or single media item.\n * @param {!cast.framework.messages.LoadRequestData} loadRequestData\n * @returns {Object}\n */\n getCustomData(loadRequestData) {\n if (typeof (loadRequestData.queueData) !== 'undefined') {\n if (typeof (loadRequestData.customData) !== 'undefined') {\n return loadRequestData.customData;\n }\n this.logger.warning('No custom data found in queue loadRequestData?');\n return {};\n }\n\n if (typeof (loadRequestData.media.customData) !== 'undefined') {\n return loadRequestData.media.customData;\n }\n this.logger.warning('No custom data found in NON queue loadRequestData?');\n return {};\n }\n\n /**\n * Modifing tracks data, especialy for mpeg-dash stream\n * @param {Object} request object of requested data\n * @returns {void}\n */\n textTracksRebuild(request) {\n // only for dash\n if (request.media.contentType !== 'application/dash+xml') {\n return;\n }\n\n const newTextTracksManager = this.playerManager.getTextTracksManager();\n const { tracks } = request.media;\n\n let track = {};\n let idAudio = 0;\n let idText = 0;\n let id = '';\n for (let i = 0; i < tracks.length; i += 1) {\n track = tracks[i];\n id = '';\n if (track.type === 'AUDIO') {\n idAudio += 1;\n id = idAudio;\n }\n if (track.type === 'TEXT') {\n idText += 1;\n id = idText;\n }\n track.name = track.name || `Track ${id}`;\n delete track.subtype;\n }\n }\n}\n\nConfiguration.loadConfig()\n .then(() => {\n const logger = new Logger({ debugLevel: DEBUG_LEVEL });\n const ui = new Ui(logger);\n const receiver = new Receiver(config, logger, ui);\n });\n"]}