{"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","node_modules/js-cookie/src/js.cookie.js","analytics/ATInternetDevelopers.js","analytics/MUX.js","analytics/Analytics.js","StreamFincons.js","Stream.js","Uint8ArrayUtils.js","CastQueue.js","MimeResolver.js","Api.js","Receiver.js"],"names":["config","environment","version","customChannel","streamType","accountId","apiUrl","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","chromecast","at_analytics","ati_logger_url","ati_logger_ssl_url","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","collectDomain","collectDomainSSL","ATInternet","Utils","consentReceived","udid","Cookie","Math","round","random","userIdentifier","Tracker","Tag","ignoreEmptyChapterValue","disableCookie","pixelPath","ClientSideUserId","clientSideMode","clientSideUserId","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","stopMediaSession","getMediaInformation","parseCustomData","pageSet","rmSet","richMedia","removeAll","action","send","playerId","mediaLabel","extendedData","richMediaP","PLAYER_LOADING","playerLoadingEvent","playingEvent","PAUSE","pauseEvent","SEEKED","mediaSeekEvent","startMediaSession","sendAction","mInfo","cData","broadcastMode","StreamType","mTypes","pTypes","mediaType","format","mediaLevel2","mediaTheme1","mediaTheme2","mediaTheme3","content","refreshDuration","isEmbedded","add","page","level2","tConst","extended","site","guid","id","genres","longTitle","subGenres","isBoxSet","customVars","dispatch","string","constructor","formatString","replace","parseVideoData","customDataPauseOverlay","videoId","ListingId","ProgramId","videoDuration","videoTitle","MUX","initMux","setVideoChangeData","initChromecastMux","automaticVideoChange","env_key","accessTokenID","player_name","player_init_time","now","modifyChromecastMux","videoData","sendFakeRequestLoadToMux","videoAttrs","video_id","video_duration","video_title","video_series","series","video_content_type","contentType","video_stream_type","mux","isFirstPlay","emit","originalListener","muxListener","removeEventListener","category","CORE","FINE","modifiedMuxListener","decorateMuxListener","originalMuxListener","type","REQUEST_LOAD","isHandyGeneratedEvent","requestLoadEvent","createRequestLoadEvent","originalMuxEmit","RequestEvent","requestData","LoadRequestData","Analytics","analytics","init","analyticsData","push","analyticsLength","analyticsItem","startAnalytics","initEvents","setCustomData","extendData","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","queueData","QueueData","MimeResolver","mediaUrl","mimetype","linkEl","xhr","filename","pathname","pop","responseURL","getMimeType","Api","baseUrl","opts","details","method","body","headers","r","ok","entries","entry","f","isCollection","program","station","stationId","getChannel","DEBUG_LEVEL","isShakaPreset","Receiver","ui","mimeResolver","receiverOption","CastReceiverOptions","useLegacyDashSupport","breakManager","getBreakManager","audioTrackManager","getAudioTracksManager","initCafLoggerLevel","onLoadMessage","hasPauseOverlay","dateTime","initMessageInterceptors","start","queue","getLevel","setLoggerLevel","LoggerLevel","initCoreEventsListener","categoryTypes","ended","show","PLAY","hide","PLAYER_LOAD_COMPLETE","request","textTracksRebuild","setActiveByLanguage","addCustomMessageListener","customEvent","update","system","READY","setMessageInterceptor","MessageType","LOAD","loadRequestData","requestId","JSON","stringify","load","getCustomData","mediaContentId","startsWith","setMimeType","streamOptions","programId","listingId","programPromise","getListing","getProgram","setExtendedData","getStream","contentUrl","waitForShakaIsPreset","setMediaPlaybackInfoHandler","loadRequest","playbackConfig","protectionSystem","ContentProtection","PLAYREADY","CLEARKEY","licenseRequestHandler","networkRequestInfo","widevineChallenge","toBase64","getWidevineLicense","licenseHandler","jsonMsg","license","parse","fromBase64","getWidevineLicenseResponse","WIDEVINE","mediaInfo","promise","newTextTracksManager","getTextTracksManager","tracks","track","idAudio","idText","subtype","waitingForShakaIsLoaded","timer","shaka","clearInterval","ManifestParser","registerParserByMime","dash","DashParser","finally","loadConfig"],"mappings":"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","file":"Receiver.501bf34a.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.24',\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 apiUrl: `https://feed.entertainment.tv.theplatform.eu/f/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 try {\n if (data.chromecast && data.chromecast.at_analytics.ati_logger_url) {\n this.set('collectDomain', data.chromecast.at_analytics.ati_logger_url);\n }\n } catch (e) {\n console.log('chromecast does not exist');\n }\n\n try {\n if (data.chromecast && data.chromecast.at_analytics.ati_logger_ssl_url) {\n this.set('collectDomainSSL', data.chromecast.at_analytics.ati_logger_ssl_url);\n }\n } catch (e) {\n console.log('chromecast 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 extendData() {\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","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t// character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","import Analytic from './Analytic.js';\nimport Cookie from 'js-cookie';\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, collectDomain, collectDomainSSL) {\n super(options, logger);\n this.name = 'AT Internet Developers';\n ATInternet.Utils.consentReceived(true);\n\n let udid = Cookie.get('udid');\n\n if (!udid) {\n udid = Math.round(Math.random() * 1000 * 1000 * 1000 * 1000 * 1000);\n Cookie.set('udid', udid);\n }\n\n const context = {\n userIdentifier: udid\n };\n\n if (collectDomain && collectDomainSSL) {\n this.streamingAnalytics =\n new ATInternet.Tracker.Tag({\n ignoreEmptyChapterValue: true,\n disableCookie: false,\n collectDomain: collectDomain,\n collectDomainSSL: collectDomainSSL,\n pixelPath:'/hit.xiti',\n ClientSideUserId: {\n clientSideMode: 'always'\n }}, context);\n } else {\n this.streamingAnalytics = new ATInternet.Tracker.Tag({ ignoreEmptyChapterValue: true, disableCookie: false, ClientSideUserId: {clientSideMode: 'always', }}, context);\n }\n\n this.streamingAnalytics.clientSideUserId.set(udid);\n\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: 'player_chromecast',\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 startMediaSession() {\n this.stopMediaSession();\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 stopMediaSession() {\n try {\n this.streamingAnalytics.richMedia.removeAll();\n } catch (e) { console.error(e); }\n }\n\n sendAction(action) {\n try {\n this.streamingAnalytics.richMedia.send({\n action,\n playerId: '1',\n mediaLabel: this.extendedData.richMediaP,\n duration: this.extendedData.duration\n });\n } catch (e) { console.error(e); }\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.PLAYER_LOADING,\n (event) => {\n this.playerLoadingEvent(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.PLAYING,\n (event) => {\n this.playingEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.PAUSE,\n (event) => {\n this.pauseEvent(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 playerLoadingEvent(event) {\n this.logger.info(`${this.name}: Player loading Event`);\n this.startMediaSession(event);\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 playingEvent(event) {\n this.logger.info(`${this.name}: Playing Event`);\n this.logger.debug('event', event);\n this.sendAction('play');\n }\n\n pauseEvent(event) {\n this.logger.info(`${this.name}: Pause Event`);\n this.logger.debug('event', event);\n this.sendAction('pause');\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: this.extendedData.duration || 0,\n isEmbedded: false,\n broadcastMode: media.broadcastMode\n };\n\n try {\n this.streamingAnalytics.richMedia.add(options);\n } catch (e) { console.error(e); }\n }\n\n pageSet() {\n try {\n this.streamingAnalytics.page.set({\n name: 'richmedia::virtual_page',\n level2: this.pageTypes.LEVEL2\n });\n } catch (e) { console.error(e); }\n\n const tConst = this.trackConstants;\n const pTypes = this.pageTypes;\n const media = this.media || {};\n const extended = this.extendedData || {};\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: extended.guid || extended.id, // Content_ID\n 5: extended.guid || extended.id, // BRN_ID\n 6: tConst.MEDIA_PLAYER, // 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: extended.channel || '', // Channel\n 11: extended.genres || '', // Genre\n 12: extended.title || extended.longTitle, // Playlist_Prog_Name\n 13: extended.title, // Episode_Name\n 14: 'N/A', // Parent_URL\n 15: extended.episodeNumber || '', // episode_Number\n 16: extended.seriesNumber || '', // Series_Number\n 17: 0, // Radio\n 18: extended.subGenres || '', // Sub_Genre\n 19: '', // content_ID\n 20: extended.isBoxSet || '' // Boxset\n }\n };\n\n try {\n this.streamingAnalytics.customVars.set(options);\n this.streamingAnalytics.dispatch();\n } catch (e) { console.error(e); }\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 extendData (data) {\n this.extendedData = data;\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/* eslint-disable no-use-before-define, no-param-reassign */\n\nfunction parseVideoData(mediaInformation) {\n mediaInformation = mediaInformation || {};\n const customData = mediaInformation.customData || {};\n const customDataPauseOverlay = customData.pauseOverlay || {};\n\n const data = {\n videoId: mediaInformation.metadata.ListingId || mediaInformation.metadata.ProgramId || mediaInformation.contentId || '',\n videoDuration: mediaInformation.duration || mediaInformation.customData.duration || null,\n videoTitle: mediaInformation.metadata.title || customDataPauseOverlay.title || ''\n };\n return data;\n}\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 this.initMux();\n }\n\n /**\n * Initialize events\n */\n initEvents() {\n this.logger.info(`Initialize ${this.name} Analytics Events`, this.options);\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.PLAYER_LOADING,\n (event) => {\n this.playerLoadingEvent(event);\n }\n );\n }\n\n playerLoadingEvent() {\n this.setVideoChangeData();\n }\n\n initMux() {\n initChromecastMux(this.playerManager, {\n debug: false,\n automaticVideoChange: false,\n data: {\n env_key: this.options.accessTokenID, // required\n // Metadata\n player_name: 'Chromecast',\n player_init_time: Date.now()\n }\n });\n modifyChromecastMux(this.playerManager);\n }\n\n setVideoChangeData() {\n const { playerManager, extendedData } = this;\n const mediaInformation = playerManager.getMediaInformation();\n const videoData = parseVideoData(mediaInformation);\n sendFakeRequestLoadToMux(playerManager);\n\n Object.assign(videoData, extendedData);\n\n const videoAttrs = {\n video_id: videoData.videoId,\n video_duration: videoData.videoDuration,\n video_title: videoData.videoTitle,\n video_series: videoData.series,\n video_content_type: videoData.contentType,\n video_stream_type: mediaInformation.streamType === 'LIVE' ? 'live' : 'on_demand'\n };\n\n if (playerManager.mux.isFirstPlay) {\n playerManager.mux.emit('loadstart', videoAttrs);\n playerManager.mux.isFirstPlay = false;\n } else {\n playerManager.mux.emit('videochange', videoAttrs);\n playerManager.mux.emit('loadstart');\n }\n playerManager.mux.emit('play');\n }\n\n extendData (data) {\n this.extendedData = data;\n }\n}\n\n/**\n * To modify Chromecast Mux, that we can improve sending events for \"videochange\" event by self\n */\nfunction modifyChromecastMux(playerManager) {\n const originalListener = playerManager.muxListener;\n playerManager.removeEventListener(cast.framework.events.category.CORE, originalListener);\n playerManager.removeEventListener(cast.framework.events.category.FINE, originalListener);\n playerManager.removeEventListener(cast.framework.events.category.DEBUG, originalListener);\n\n const modifiedMuxListener = decorateMuxListener(originalListener, playerManager);\n playerManager.addEventListener(cast.framework.events.category.CORE, modifiedMuxListener);\n playerManager.addEventListener(cast.framework.events.category.FINE, modifiedMuxListener);\n playerManager.addEventListener(cast.framework.events.category.DEBUG, modifiedMuxListener);\n\n playerManager.muxListener = modifiedMuxListener;\n playerManager.mux.isFirstPlay = true;\n}\n\n/**\n * Decorates originalMuxListener to control a procedure bound on LOAD REQUEST event by own way\n */\nfunction decorateMuxListener(originalMuxListener) {\n return function (event) { // eslint-disable-line\n if (event.type === cast.framework.events.EventType.REQUEST_LOAD) {\n if (!event.isHandyGeneratedEvent) {\n return; // don't propagate native REQUEST_LOAD event to originalMuxListener\n }\n }\n originalMuxListener(event);\n };\n}\n\n/**\n * Sends own Request Load into Chromecast MUX to set inner variables\n */\nfunction sendFakeRequestLoadToMux(playerManager) {\n const mediaInformation = playerManager.getMediaInformation();\n const requestLoadEvent = createRequestLoadEvent(mediaInformation);\n const originalMuxEmit = playerManager.mux.emit;\n playerManager.mux.emit = () => {}; // turn off emitter\n playerManager.muxListener(requestLoadEvent);\n playerManager.mux.emit = originalMuxEmit; // turn on emitter\n}\n\n/**\n * Creates own Request Load\n */\nfunction createRequestLoadEvent(mediaInformation) {\n const event = new cast.framework.events.RequestEvent(\n cast.framework.events.EventType.REQUEST_LOAD\n );\n event.requestData = new cast.framework.messages.LoadRequestData();\n event.requestData.media = mediaInformation;\n event.isHandyGeneratedEvent = true;\n return event;\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, collectDomain, collectDomainSSL) {\n this.context = cast.framework.CastReceiverContext.getInstance();\n this.playerManager = this.context.getPlayerManager();\n this.logger = logger;\n this.collectDomain = collectDomain;\n this.collectDomainSSL = collectDomainSSL;\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, this.collectDomain, this.collectDomainSSL);\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 setExtendedData(data) {\n const analyticsLength = this.analytics.length;\n for (let i = 0; i < analyticsLength; i += 1) {\n this.analytics[i].extendData(data);\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 // PRJ0930RTE-1292\n //if (streamType !== cast.framework.messages.StreamType.LIVE) {\n // endpoint += '&assetTypes=default:isl';\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 Configuration from './config/Configuration.js';\n\nclass Api {\n\n constructor() {\n\n this.baseUrl = Configuration.get('apiUrl');\n }\n\n call (opts) {\n const details = {\n method: opts.method || 'GET'\n };\n\n if (opts.method === 'POST') {\n details.body = opts.body;\n }\n\n if (opts.headers) {\n details.headers = opts.headers;\n }\n\n return fetch(this.baseUrl + opts.endpoint, details)\n .then((r) => {\n\n if (r.ok) {\n return r.json();\n }\n\n return Promise.resolve(null);\n });\n }\n\n getProgram (id) {\n const endpoint = `/rte-prd-prd-all-programs?byId=${id}`;\n\n if (!id) {\n\n return Promise.resolve({});\n }\n\n return this.call({\n method: 'GET',\n endpoint: endpoint\n }).then(r => {\n\n if (!r || !r.entries || !r.entries.length) {\n return {};\n }\n\n const entry = r.entries[0];\n const genres = {\n 'category': [],\n 'subCategory': []\n };\n let isBoxSet = 0;\n let isCollection = 0;\n\n entry['plprogram$tags'].forEach(f => {\n\n if (f['plprogram$scheme'] === 'category' || f['plprogram$scheme'] === 'subCategory') {\n\n genres[f['plprogram$scheme']].push(f['plprogram$title']);\n }\n\n if (f['plprogram$scheme'] === 'programSubType' && f['plprogram$title'] === 'boxset') {\n isBoxSet = 1;\n }\n });\n\n\n return {\n id,\n guid: entry['guid'],\n series: entry['title'],\n contentType: entry['plprogram$programType'],\n channel: entry['rte$station'],\n episodeNumber: entry['plprogram$tvSeasonEpisodeNumber'],\n seriesNumber: entry['plprogram$tvSeasonNumber'],\n genres: genres['category'].join(' '),\n subGenres: genres['subCategory'].join(' '),\n longTitle: entry['plprogram$longTitle'],\n title: entry['title'],\n duration: entry['plprogram$runtime'],\n producer: entry['rte$producer'],\n date: entry['plprogram$pubDate'],\n richMediaP: `${entry['plprogram$longTitle']}::${entry['plprogram$pubDate']}::${entry['rte$producer']}::${entry['guid']}`,\n isBoxSet,\n isCollection\n }\n });\n }\n\n getChannel (id) {\n const endpoint = `/rte-prd-prd-all-stations?byId=${id}`;\n\n if (!id) {\n\n return Promise.resolve({});\n }\n\n return this.call({\n method: 'GET',\n endpoint: endpoint\n })\n .then(r => {\n const entry = r.entries[0];\n\n return {\n title: entry['description'] || entry['title']\n }\n });\n }\n\n getListing (id) {\n const endpoint = `/rte-prd-prd-all-listings?byId=${id}`;\n\n if (!id) {\n\n return Promise.resolve({});\n }\n\n return this.call({\n method: 'GET',\n endpoint: endpoint\n }).then(data => {\n\n const entry = data.entries[0];\n const program = entry['pllisting$program'];\n let station = entry['pllisting$stationId'].split('/');\n let stationId = station[station.length - 1];\n\n return this.getChannel(stationId)\n .then(r => {\n\n return {\n id,\n guid: program['pl$guid'],\n series: program['plprogram$longTitle'],\n contentType: program['plprogram$programType'],\n title: program['plprogram$secondaryTitle'] || program['title'],\n longTitle: program['plprogram$longTitle'],\n channel: r.title,\n date: program['plprogram$pubDate'],\n richMediaP: `${program['plprogram$longTitle'] || program['pl$title']}::${program['plprogram$pubDate']}::live::${program['pl$guid']}`,\n duration: 0\n };\n });\n });\n }\n}\n\nconst instance = new Api();\nObject.freeze(instance);\n\nexport default instance;\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';\nimport Api from './Api.js';\n\n// import BitrateLogger from './BitrateLogger.js';\n\n/* global shaka */\n\nconst DEBUG_LEVEL = config.environment === 'DEVELOPMENT' ? Logger.levelTypes.DEBUG : Logger.levelTypes.NONE;\n\nlet isShakaPreset = false;\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 this.audioTrackManager = this.playerManager.getAudioTracksManager();\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 try {\n this.audioTrackManager.setActiveByLanguage('en');\n } catch (e) {\n\n // Failed to set active language.\n }\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 if (!this.analytics) {\n this.analytics = new Analytics(\n customEvent.data.analytics,\n this.logger,\n Configuration.get('collectDomain'),\n Configuration.get('collectDomainSSL')\n );\n }\n }\n });\n\n this.context.addEventListener(\n cast.framework.system.EventType.READY,\n () => {\n this.logger.debug('[Receiver] system ready event');\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 programId = loadRequestData.media.metadata.ProgramId;\n const listingId = loadRequestData.media.metadata.ListingId;\n let programPromise;\n\n if (listingId) {\n programPromise = Api.getListing(listingId, programId);\n } else {\n programPromise = Api.getProgram(programId);\n }\n\n return programPromise\n .then(program => {\n\n if (this.analytics) {\n this.analytics.setExtendedData(program);\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(waitForShakaIsPreset)\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 }\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\n\nfunction waitingForShakaIsLoaded() {\n console.log('[waitingForShakaIsLoaded] called');\n return new Promise((resolve) => {\n const timer = setInterval(() => {\n if (typeof shaka !== 'undefined') {\n console.log('[waitingForShakaIsLoaded] loaded');\n clearInterval(timer);\n resolve();\n }\n }, 100);\n });\n}\n\nfunction waitForShakaIsPreset() {\n console.log('[waitForShakaIsPreset] called');\n return new Promise((resolve) => {\n if (isShakaPreset) {\n resolve();\n } else {\n waitingForShakaIsLoaded()\n .then(() => {\n // [PRJ0930RTE-1103] 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 .catch((e) => { console.error(e); })\n .finally(() => {\n isShakaPreset = true;\n resolve();\n });\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"]}