{"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","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","Tracker","Tag","pixelPath","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","format","PLAYER_LOADING","playerLoadingEvent","playingEvent","PAUSE","pauseEvent","SEEKED","mediaSeekEvent","startMediaSession","sendAction","mInfo","cData","broadcastMode","StreamType","mTypes","pTypes","mediaType","mediaLevel2","mediaTheme1","mediaTheme2","mediaTheme3","content","refreshDuration","isEmbedded","add","page","level2","tConst","site","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","extendedData","videoData","sendFakeRequestLoadToMux","videoAttrs","video_id","video_duration","video_title","video_series","series","video_content_type","contentType","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","id","entries","DEBUG_LEVEL","isShakaPreset","Receiver","ui","mimeResolver","receiverOption","CastReceiverOptions","useLegacyDashSupport","breakManager","getBreakManager","initCafLoggerLevel","onLoadMessage","hasPauseOverlay","dateTime","initMessageInterceptors","start","queue","getLevel","setLoggerLevel","LoggerLevel","initCoreEventsListener","categoryTypes","ended","show","PLAY","hide","PLAYER_LOAD_COMPLETE","request","textTracksRebuild","addCustomMessageListener","customEvent","update","system","READY","setMessageInterceptor","MessageType","LOAD","loadRequestData","requestId","JSON","stringify","load","getCustomData","mediaContentId","startsWith","setMimeType","streamOptions","programId","listingId","programPromise","getListing","getProgram","program","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.2471adb5.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","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, collectDomain, collectDomainSSL) {\n super(options, logger);\n this.name = 'AT Internet Developers';\n if (collectDomain && collectDomainSSL) {\n this.streamingAnalytics = new ATInternet.Tracker.Tag({ collectDomain: collectDomain, collectDomainSSL: collectDomainSSL, pixelPath:'/hit.xiti' });\n } else {\n this.streamingAnalytics = new ATInternet.Tracker.Tag();\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: '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 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.media.title && this.format(this.media.title)\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: media.duration,\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: this.pageTypes.NAME,\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\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 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 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 };\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 => r.json());\n }\n\n getProgram (id) {\n const endpoint = `/rte-prd-prd-all-programs?byId=${id}`;\n\n return this.call({\n method: 'GET',\n endpoint: endpoint\n }).then(r => {\n return {\n series: r.entries[0]['title'],\n contentType: r.entries[0]['plprogram$programType']\n }\n });\n }\n\n getListing (id) {\n const endpoint = `/rte-prd-prd-all-listings?byId=${id}`;\n\n return this.call({\n method: 'GET',\n endpoint: endpoint\n })\n .then(r => {\n return {\n series: r.entries[0]['pllisting$program']['plprogram$longTitle'],\n contentType: r.entries[0]['pllisting$program']['plprogram$programType']\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// 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\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 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);\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"]}