{"version":3,"sources":["config/config.js","config/Configuration.js","PauseOverlay.js","DateTime.js","Media.js","Ui.js","Logger.js","analytics/Analytic.js","analytics/ComScore.js","analytics/ATInternetDevelopers.js","analytics/MUX.js","analytics/Analytics.js","StreamFincons.js","Stream.js","Uint8ArrayUtils.js","CastQueue.js","MimeResolver.js","Receiver.js"],"names":["config","environment","version","customChannel","streamType","accountId","endpoint","drmType","subtitleFilter","configUrl","dvrWindowLength","instance","Configuration","data","Promise","resolve","get","fetch","then","response","json","parseData","catch","all","api","fincons","mpx_config","account_pid","set","e","console","log","features","ads","key","value","valObject","keys","split","dataObject","length","undefined","nextDataObject","shift","nextKey","join","Object","freeze","PauseOverlay","customData","pauseOverlay","document","getElementById","innerHTML","title","description","thumbnailUrl","img","createElement","src","thumbNode","firstChild","removeChild","appendChild","next","subtitle","style","backgroundImage","display","recommendations","recommendNode","recommendationlength","i","parentDiv","className","textDiv","titleSpan","subtitleSpan","DateTime","element","ticker","el","dateTimeStart","changeTime","setInterval","date","Date","formatDate","dateArray","toString","dayName","dayNum","getDate","monthName","hours","zeroFill","getHours","minutes","getMinutes","number","requiredWidth","realWidth","Array","test","Media","contentId","Ui","logger","obj","playerElement","debug","prototype","hasOwnProperty","call","info","setProperty","splashImage","logoImage","fontFamily","levelTypes","NONE","ERROR","WARNING","INFO","DEBUG","V1","V2","Logger","options","assign","debugLevel","currentLevel","window","bind","alwaysWarn","warn","setLevel","level","nop","error","warning","Analytic","context","cast","framework","CastReceiverContext","getInstance","playerManager","getPlayerManager","metadata","messages","GenericMediaMetadata","ComScore","name","publisherId","streamingAnalytics","ns_","StreamingAnalytics","setLabels","ns_site","ns_st_mp","ns_st_mv","ns_st_it","addEventListener","events","EventType","BITRATE_CHANGED","event","bitrateChangedEvent","BUFFERING","bufferingEvent","CLIP_ENDED","clipEndedEvent","errorEvent","MEDIA_FINISHED","mediaFinishedEvent","MEDIA_STATUS","mediaStatusEvent","SEGMENT_DOWNLOADED","segmentDownloadedEvent","BREAK_STARTED","breakEvent","BREAK_ENDED","BREAK_CLIP_LOADING","BREAK_CLIP_STARTED","BREAK_CLIP_ENDED","asset","getPlaybackSession","setAsset","notifyChangeBitrate","totalBitrate","isBuffering","notifyBufferStart","notifyBufferStop","getAsset","setLabel","notifyError","notifyEnd","currentMediaTime","mediaStatus","playerState","notifyPlay","currentTime","notifyPause","notifyCustomEvent","ns_st_ev","download_time","downloadTime","size","ATInternetDevelopers","ATInternet","Tracker","Tag","media","mediaInformation","PLAYING","PAUSED","broadcastTypes","LIVE","VOD","mediaTypes","VIDEO","playerTypes","pageTypes","NAME","LEVEL2","trackConstants","MEDIA_TYPE","PLATFORM","APP_NAME","CONTENT_TYPE","LANGUAGE","TITLE","MEDIA_PLAYER","PLAYER_VERSION","resetMedia","duration","channel","genre","playlistProgName","episodeName","episodeNumber","seriesNumber","subGenre","pubDate","producer","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","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","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","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","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","getStream","contentUrl","waitForShakaIsPreset","setMediaPlaybackInfoHandler","loadRequest","playbackConfig","protectionSystem","ContentProtection","PLAYREADY","CLEARKEY","licenseRequestHandler","networkRequestInfo","widevineChallenge","toBase64","getWidevineLicense","licenseHandler","jsonMsg","license","parse","fromBase64","getWidevineLicenseResponse","WIDEVINE","mediaInfo","promise","contentType","newTextTracksManager","getTextTracksManager","tracks","track","idAudio","idText","id","subtype","waitingForShakaIsLoaded","timer","shaka","clearInterval","ManifestParser","registerParserByMime","dash","DashParser","finally","loadConfig"],"mappings":"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","file":"Receiver.cb7f4a32.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.23',\n\n /** @member {String} customChannel Namespace for custom message channel */\n customChannel: 'urn:x-cast:com.rte.chromecast',\n\n /** @member {String} streamType The RTE stream type */\n streamType: 'fincons',\n\n accountId: '1uC-gC', // dev: '9nl_gC',, prod: 1uC-gC\n\n /** @member {String} endpoint Endpoint URL returning SMIL (including Stream URL and Ads URL) */\n endpoint: 'https://link.theplatform.eu/s/[account]/media/[media]?auth=[auth]&sdk=PDK%205.7.16&formats=[formats]&format=SMIL&embedded=true&tracking=true',\n\n /** @member {String} drmType DRM type. The one from 'widevine', 'playready' */\n drmType: 'widevine',\n\n /** @member {Bollean} subtitleFilter */\n subtitleFilter: true,\n\n /** @member {String} configUrl Returning configuration for App */\n configUrl: 'https://www.rte.ie/wordpress/wp-content/uploads/standard/smartott/config.json',\n\n /**\n * @member {Bollean} dvrWindowLength DVR window length in seconds.\n * The additional property included in live stream request. TMGRIS-40\n */\n dvrWindowLength: 30\n};\n\nif (config.environment === 'DEVELOPMENT') {\n // config.configUrl = 'https://pl-cms-test.rte.host/wordpress/wp-content/uploads/standard/smartott/config.json';\n}\n\nexport default config;\n","import config from './config.js';\n\nclass Configuration {\n constructor() {\n if (!Configuration.instance) {\n this.data = { ...config };\n Configuration.instance = this;\n }\n\n return Configuration.instance;\n }\n\n loadConfig() {\n return new Promise((resolve) => {\n const configUrl = this.get('configUrl');\n if (configUrl) {\n fetch(configUrl)\n .then(response => response.json())\n .then((data) => {\n this.parseData(data);\n resolve();\n })\n .catch(() => {\n resolve();\n });\n } else {\n resolve();\n }\n });\n }\n\n parseData(data) {\n try {\n if (data.all.api.fincons.mpx_config.account_pid) {\n this.set('accountId', data.all.api.fincons.mpx_config.account_pid);\n }\n } catch (e) {\n console.log('account id does not exist');\n }\n\n try {\n if (data.all.features.ads) {\n this.set('ads', data.all.features.ads);\n }\n } catch (e) {\n console.log('ads does not exist');\n }\n }\n\n set(key, value) {\n this.data[key] = value;\n }\n\n get(key, valObject) {\n const keys = key.split('.');\n const dataObject = valObject || this.data;\n\n if (keys.length === 1) {\n if (dataObject[key]) {\n return dataObject[key];\n }\n return undefined;\n }\n\n if (dataObject[keys[0]]) {\n const nextDataObject = dataObject[keys[0]];\n keys.shift();\n const nextKey = keys.join('.');\n return this.get(nextKey, nextDataObject);\n }\n return undefined;\n }\n}\n\nconst instance = new Configuration();\nObject.freeze(instance);\n\nexport default instance;\n","import Configuration from './config/Configuration.js';\n\nexport default class PauseOverlay {\n /**\n * Initialize Pause overlay\n * @param {Object} customData\n */\n static init(customData) {\n const maxReccomendation = 3;\n\n if (typeof (customData.pauseOverlay) === 'undefined') {\n return false;\n }\n const data = customData.pauseOverlay;\n\n if (Configuration.get('version')) {\n document.getElementById('version').innerHTML = 'Version: ' + Configuration.get('version');\n }\n\n if (data.title) {\n document.getElementById('header-title').innerHTML = data.title;\n } else {\n document.getElementById('header-title').innerHTML = '';\n }\n if (data.description) {\n document.getElementById('header-description').innerHTML = data.description;\n } else {\n document.getElementById('header-description').innerHTML = '';\n }\n if (data.thumbnailUrl) {\n const img = document.createElement('img');\n img.src = data.thumbnailUrl;\n const thumbNode = document.getElementById('header-thumb');\n // Remove old images\n while (thumbNode.firstChild) {\n thumbNode.removeChild(thumbNode.firstChild);\n }\n thumbNode.appendChild(img);\n } else {\n const thumbNode = document.getElementById('header-thumb');\n // Remove old images\n while (thumbNode.firstChild) {\n thumbNode.removeChild(thumbNode.firstChild);\n }\n }\n\n if (data.next) {\n if (data.next.title) {\n document.getElementById('next-title').innerHTML = data.next.title;\n } else {\n document.getElementById('next-title').innerHTML = '';\n }\n if (data.next.subtitle) {\n document.getElementById('next-subtitle').innerHTML = data.next.subtitle;\n } else {\n document.getElementById('next-subtitle').innerHTML = '';\n }\n if (data.next.thumbnailUrl) {\n document.getElementById('next-thumb').style.backgroundImage = `url('${data.next.thumbnailUrl}')`;\n } else {\n document.getElementById('next-thumb').style.backgroundImage = 'none';\n }\n document.getElementById('next').style.display = 'inline-block';\n } else {\n document.getElementById('next').style.display = 'none';\n }\n\n if (data.recommendations) {\n const recommendNode = document.getElementById('recommendations-row');\n // Clear old recommendations\n while (recommendNode.firstChild) {\n recommendNode.removeChild(recommendNode.firstChild);\n }\n const recommendationlength = (\n data.recommendations.length\n && data.recommendations.length <= maxReccomendation\n ) ? data.recommendations.length : maxReccomendation;\n for (let i = 0; i < recommendationlength; i += 1) {\n const parentDiv = document.createElement('div');\n parentDiv.className = 'recommendations-thumb';\n if (data.recommendations[i].thumbnailUrl) {\n parentDiv.style.backgroundImage = `url('${data.recommendations[i].thumbnailUrl}')`;\n }\n const textDiv = document.createElement('div');\n textDiv.className = 'recommendations-text';\n\n if (data.recommendations[i].title) {\n const titleSpan = document.createElement('span');\n titleSpan.className = 'recommendations-title';\n titleSpan.innerHTML = data.recommendations[i].title;\n textDiv.appendChild(titleSpan);\n }\n\n if (data.recommendations[i].subtitle) {\n const subtitleSpan = document.createElement('span');\n subtitleSpan.className = 'recommendations-subtitle';\n subtitleSpan.innerHTML = data.recommendations[i].subtitle;\n textDiv.appendChild(subtitleSpan);\n }\n\n parentDiv.appendChild(textDiv);\n recommendNode.appendChild(parentDiv);\n document.getElementById('recommendations').style.display = 'inline-block';\n }\n } else {\n document.getElementById('recommendations').style.display = 'none';\n }\n return true;\n }\n\n /**\n * Show pause Modal\n */\n static show() {\n document.getElementById('pauseModal').style.display = 'block';\n }\n\n /**\n * Hide pause Modal\n */\n static hide() {\n document.getElementById('pauseModal').style.display = 'none';\n }\n}\n","export default class DateTime {\n /**\n * Constructor\n * @param {Object} element Html element\n */\n constructor(element) {\n this.ticker = null;\n this.el = element;\n this.dateTimeStart();\n }\n\n /**\n * Starting ticker\n */\n dateTimeStart() {\n this.changeTime();\n this.ticker = setInterval(() => {\n this.changeTime();\n }, 10000);\n }\n\n /**\n * Changing date string in the main HTML element\n */\n changeTime() {\n const date = new Date();\n this.el.innerHTML = DateTime.formatDate(date);\n }\n\n /**\n * Convert date object do the formated string\n * @param {Object} Date\n * @returns {String}\n */\n static formatDate(date) {\n const dateArray = date.toString().split(' ');\n const dayName = dateArray[0];\n const dayNum = date.getDate();\n const monthName = dateArray[1];\n const hours = DateTime.zeroFill(date.getHours(), 2);\n const minutes = DateTime.zeroFill(date.getMinutes(), 2);\n return `${dayName} ${dayNum} ${monthName} | ${hours}:${minutes}`;\n }\n\n /**\n * Padding number with zero, it depends on the width\n * @param {Integer} number\n * @param {Integer} requiredWidth\n */\n static zeroFill(number, requiredWidth) {\n const realWidth = requiredWidth - number.toString().length;\n if (realWidth > 0) {\n return new Array(realWidth + (/\\./.test(number) ? 2 : 1)).join('0') + number;\n }\n return number.toString(); // always return a string\n }\n\n}\n","export default class Media {\n static load(contentId) {\n // console.log(`Load media for id: ${contentId}`);\n }\n}","export default class Ui {\n constructor(logger) {\n this.logger = logger;\n }\n\n update(obj) {\n const playerElement = document.getElementById('player');\n this.logger.debug(obj);\n\n if (Object.prototype.hasOwnProperty.call(obj, 'backgroundImage')) {\n this.logger.info(`Update ui with new background image: ${obj.backgroundImage}`);\n playerElement.style.setProperty('--background-image', `url(\"${obj.backgroundImage}\")`);\n }\n\n if (Object.prototype.hasOwnProperty.call(obj, 'splashImage')) {\n this.logger.info(`Update ui with new splash image: ${obj.backgroundImage}`);\n playerElement.style.setProperty('--splash-image', `url(\"${obj.splashImage}\")`);\n }\n\n if (Object.prototype.hasOwnProperty.call(obj, 'logoImage')) {\n this.logger.info(`Update ui with new logo: ${obj.backgroundImage}`);\n playerElement.style.setProperty('--logo-image', `url(\"${obj.logoImage}\")`);\n }\n\n if (Object.prototype.hasOwnProperty.call(obj, 'fontFamily')) {\n this.logger.info(`Update ui with new font family: ${obj.backgroundImage}`);\n playerElement.style.setProperty('--font-family', `url(\"${obj.fontFamily}\")`);\n }\n }\n}","const levelTypes = {\n NONE: 0,\n ERROR: 1,\n WARNING: 2,\n INFO: 3,\n DEBUG: 4,\n V1: 5,\n V2: 6\n};\n\nexport default class Logger {\n /**\n * Log constructor\n * @param {Object} options\n */\n constructor(options) {\n const defaultOptions = {\n debugLevel: 0\n };\n this.options = Object.assign(defaultOptions, options);\n this.currentLevel = 0;\n\n // IE8 has no console unless it is opened in advance.\n // IE9 console methods are not Functions and have no bind.\n if (window.console && window.console.log.bind) {\n this.alwaysWarn = console.warn.bind(console);\n this.setLevel(this.options.debugLevel);\n }\n }\n\n /**\n * Set debug level\n * @param {number} level\n */\n setLevel(level) {\n const nop = function () {};\n\n this.currentLevel = level;\n\n this.error = (level >= levelTypes.ERROR) ? console.error.bind(console) : nop;\n this.warning = (level >= levelTypes.WARNING) ? console.warn.bind(console) : nop;\n this.info = (level >= levelTypes.INFO) ? console.info.bind(console) : nop;\n this.debug = (level >= levelTypes.DEBUG) ? console.log.bind(console) : nop;\n }\n\n /**\n * @returns {number} The debug level\n */\n getLevel() {\n return this.currentLevel;\n }\n\n /* eslint-disable lines-between-class-members, class-methods-use-this */\n alwaysWarn() {}\n error() {}\n warning() {}\n info() {}\n debug() {}\n}\n\nLogger.levelTypes = levelTypes;\n","// eslint\n/* global cast */\n\nexport default class Analytic {\n /**\n * Analytic constructor\n * @param {Object} options\n * @param {Logger} logger\n */\n constructor(options, logger) {\n this.context = cast.framework.CastReceiverContext.getInstance();\n this.playerManager = this.context.getPlayerManager();\n const defaultOptions = {\n title: null\n };\n this.options = Object.assign(defaultOptions, options);\n this.logger = logger;\n this.metadata = new cast.framework.messages.GenericMediaMetadata();\n }\n\n initEvents() {\n return;\n }\n\n setCustomData() {\n return;\n }\n\n sendAction() {\n return;\n }\n\n mediaFinishedEvent() {\n return;\n }\n\n mediaStatusEvent() {\n return;\n }\n\n mediaSeekEvent() {\n return;\n }\n}\n","import Analytic from './Analytic.js';\n\n// eslint\n/* global cast, ns_ */\n\nexport default class ComScore extends Analytic {\n /**\n * Create ComScore Analytics\n * @param {Object} options\n * @param {Logger} logger\n */\n constructor(options, logger) {\n super(options, logger);\n this.name = 'ComScore';\n\n const defaultOptions = {\n publisherId: null\n };\n this.options = Object.assign(defaultOptions, this.options);\n\n this.streamingAnalytics = new ns_.StreamingAnalytics({\n publisherId: this.options.publisherId,\n debug: true\n });\n\n this.streamingAnalytics.setLabels({\n ns_site: 'test',\n ns_st_mp: '24i-smartott',\n ns_st_mv: 1.0,\n ns_st_it: 'c'\n });\n }\n\n /**\n * Initialize events\n */\n initEvents() {\n this.logger.info(`Initialize ${this.name} Analytics Events`);\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BITRATE_CHANGED,\n (event) => {\n this.bitrateChangedEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BUFFERING,\n (event) => {\n this.bufferingEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.CLIP_ENDED,\n (event) => {\n this.clipEndedEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.ERROR,\n (event) => {\n this.errorEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.MEDIA_FINISHED,\n (event) => {\n this.mediaFinishedEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.MEDIA_STATUS,\n (event) => {\n this.mediaStatusEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.SEGMENT_DOWNLOADED,\n (event) => {\n this.segmentDownloadedEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BREAK_STARTED,\n (event) => {\n this.breakEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BREAK_ENDED,\n (event) => {\n this.breakEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BREAK_CLIP_LOADING,\n (event) => {\n this.breakEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BREAK_CLIP_STARTED,\n (event) => {\n this.breakEvent(event);\n }\n );\n\n this.playerManager.addEventListener(\n cast.framework.events.EventType.BREAK_CLIP_ENDED,\n (event) => {\n this.breakEvent(event);\n }\n );\n }\n\n setAsset(asset) {\n this.streamingAnalytics.getPlaybackSession().setAsset(asset);\n }\n\n bitrateChangedEvent(event) {\n // notifyChangeBitrate\n this.logger.info(`${this.name}: BitRate Change Event`);\n this.logger.debug('event', event);\n this.streamingAnalytics.notifyChangeBitrate(event.totalBitrate);\n }\n\n bufferingEvent(event) {\n // notifyBufferStart\n if (event.isBuffering) {\n this.logger.info(`${this.name}: Buffering Start Event`);\n this.streamingAnalytics.notifyBufferStart();\n } else {\n this.logger.info(`${this.name}: Buffering Stop Event`);\n this.streamingAnalytics.notifyBufferStop();\n }\n this.logger.debug('event', event);\n }\n\n clipEndedEvent(event) {\n this.logger.info(`${this.name}: Clip Ended Event`);\n this.logger.debug('event', event);\n }\n\n errorEvent(event) {\n // notifyError\n this.logger.info(`${this.name}: Error Event`);\n this.logger.debug('event', event);\n\n this.streamingAnalytics.getPlaybackSession().getAsset().setLabel('ns_st_er', event.error);\n this.streamingAnalytics.notifyError();\n }\n\n mediaFinishedEvent(event) {\n // notifyEnd\n this.logger.info(`${this.name}: Media Finished Event`);\n this.logger.debug('event', event);\n\n this.streamingAnalytics.notifyEnd(event.currentMediaTime);\n }\n\n mediaStatusEvent(event) {\n this.logger.info(`${this.name}: Media Status Event`);\n this.logger.debug('event', event);\n if (event.mediaStatus.playerState === 'PLAYING') {\n this.streamingAnalytics.notifyPlay(event.mediaStatus.currentTime);\n } else if (event.mediaStatus.playerState === 'PAUSED') {\n this.streamingAnalytics.notifyPause(event.mediaStatus.currentTime);\n }\n }\n\n segmentDownloadedEvent(event) {\n this.logger.info(`${this.name}: Segment Downloaded Event`);\n this.logger.debug('event', event);\n\n this.streamingAnalytics.notifyCustomEvent({\n ns_st_ev: 'segment_downloaded',\n download_time: event.downloadTime,\n size: event.size\n });\n }\n\n breakEvent(event) {\n this.logger.info(`${this.name}: Break Event`);\n this.logger.debug('event', event);\n }\n}\n","import Analytic from './Analytic.js';\n\n// eslint\n/* global cast, ATInternet */\n\nexport default class ATInternetDevelopers extends Analytic {\n /**\n * Create ATInternet Developers Analytics\n * @param {Object} options\n * @param {Logger} logger\n */\n constructor(options, logger) {\n super(options, logger);\n this.name = 'AT Internet Developers';\n this.streamingAnalytics = new ATInternet.Tracker.Tag();\n this.media = {};\n this.mediaInformation = {};\n this.customData = {};\n this.mediaStatus = {\n PLAYING: 'PLAYING',\n PAUSED: 'PAUSED'\n };\n this.broadcastTypes = {\n LIVE: 'live',\n VOD: 'clip'\n };\n this.mediaTypes = {\n VIDEO: 'video'\n };\n this.playerTypes = {\n VIDEO: 1\n };\n this.pageTypes = {\n NAME: 'player',\n LEVEL2: 7\n };\n this.trackConstants = {\n MEDIA_TYPE: 'vid',\n PLATFORM: 'ott',\n APP_NAME: 'pl',\n CONTENT_TYPE: 'index',\n LANGUAGE: 'en',\n TITLE: 'Discover Standard | RTÉ Player',\n MEDIA_PLAYER: 'rte_smarttv_player',\n PLAYER_VERSION: '1.0'\n };\n this.resetMedia();\n }\n\n resetMedia() {\n this.media = {\n contentId: '',\n title: '',\n duration: 0,\n channel: '',\n genre: '',\n playlistProgName: '',\n episodeName: '',\n episodeNumber: '',\n seriesNumber: '',\n subGenre: '',\n pubDate: '',\n producer: ''\n };\n }\n\n 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.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 } = this;\n const mediaInformation = playerManager.getMediaInformation();\n const videoData = parseVideoData(mediaInformation);\n sendFakeRequestLoadToMux(playerManager);\n\n const videoAttrs = {\n video_id: videoData.videoId,\n video_duration: videoData.videoDuration,\n video_title: videoData.videoTitle\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\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) {\n this.context = cast.framework.CastReceiverContext.getInstance();\n this.playerManager = this.context.getPlayerManager();\n this.logger = logger;\n this.analytics = [];\n\n this.init(data);\n }\n\n init(data) {\n let analyticsData = [];\n if (!(data instanceof Array)) {\n analyticsData.push(data);\n } else {\n analyticsData = data;\n }\n\n if (analyticsData instanceof Array) {\n this.logger.info('Initialize Analytics Array');\n const analyticsLength = analyticsData.length;\n for (let i = 0; i < analyticsLength; i += 1) {\n const analyticsItem = analyticsData[i];\n this.logger.info(analyticsItem);\n this.logger.info(`Initialize Analytics ${analyticsItem.type}`);\n this.analytics[i] = this.startAnalytics(\n analyticsItem.type,\n analyticsItem.options\n );\n if (this.analytics[i]) {\n this.analytics[i].initEvents();\n }\n }\n }\n }\n\n /**\n * @param {string} type\n * @param {Object} options\n */\n startAnalytics(type, options) {\n this.logger.info(`Start Analytic for type: ${type}`);\n\n switch (type) {\n case 'comscore':\n return new ComScore(options, this.logger);\n case 'atinternetdevelopers':\n return new ATInternetDevelopers(options, this.logger);\n case 'mux':\n return new MUX(options, this.logger);\n default:\n this.logger.warning(`Start for analytic ${type} not supported`);\n return null;\n }\n }\n\n /**\n * Set custom data for each analytic\n * @param {*} customData\n */\n setCustomData(customData) {\n const analyticsLength = this.analytics.length;\n for (let i = 0; i < analyticsLength; i += 1) {\n this.analytics[i].setCustomData(customData);\n }\n }\n}\n","import Configuration from './config/Configuration.js';\n\n// eslint\n/* global cast */\n\nexport default class StreamFincons {\n /**\n * Create Stream Fincons\n * @param {Object} options\n * @param {String} options.authToken\n * @param {String} options.mediaId\n * @param {cast.framework.messages.StreamType} options.streamType\n * @param {Logger} logger\n */\n constructor(options, logger) {\n const defaultOptions = {\n authToken: null,\n mediaId: null,\n streamType: cast.framework.messages.StreamType.NONE,\n formats: 'mpeg-dash', // ISM, mpeg-dash, M3U\n drmType: 'widevine',\n subtitleFilter: false\n };\n this.options = Object.assign(defaultOptions, options);\n this.logger = logger;\n }\n\n call() {\n return new Promise((resolve) => {\n this.logger.info('[StreamFincons] Start to prepare endpoint');\n const { streamType, authToken } = this.options;\n\n let endpoint = Configuration.get('endpoint').replace('[auth]', authToken);\n endpoint = endpoint.replace('[account]', Configuration.get('accountId'));\n endpoint = endpoint.replace('[media]', this.options.mediaId);\n endpoint = endpoint.replace('[formats]', this.options.formats);\n\n const ads = Configuration.get('ads') || {};\n const googleAds = ads.google;\n if (ads.enabled && googleAds) {\n const isStreamLive = cast.framework.messages.StreamType.LIVE === streamType;\n const adPolicy = Configuration.get('ads.google.ad_policy') || '';\n const playerTypeKey = isStreamLive ? 'liveChannels' : 'VOD';\n const adUnitKey = authToken ? 'logged' : 'not_logged';\n\n const adUnit = Configuration.get(`ads.google.ad_unit.${adUnitKey}`) || '';\n const playerType = Configuration.get(`ads.google.ad_unit.type.${playerTypeKey}`) || '';\n const platform = Configuration.get('ads.google.ad_unit.platform.chromecast') || '';\n\n let iu = adUnit.replace('{type}', playerType);\n iu = iu.replace('{platform}', platform);\n\n endpoint += `&policy=${adPolicy}&iu=${iu}`;\n }\n // 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 PauseOverlay from './PauseOverlay.js';\nimport DateTime from './DateTime.js';\nimport Media from './Media.js';\nimport Ui from './Ui.js';\nimport Logger from './Logger.js';\nimport Analytics from './analytics/Analytics.js';\nimport Stream from './Stream.js';\nimport Uint8ArrayUtils from './Uint8ArrayUtils.js';\nimport CastQueue from './CastQueue.js';\nimport MimeResolver from './MimeResolver.js';\nimport config from './config/config.js';\nimport Configuration from './config/Configuration.js';\n// import BitrateLogger from './BitrateLogger.js';\n\n/* global shaka */\n\nconst DEBUG_LEVEL = config.environment === 'DEVELOPMENT' ? Logger.levelTypes.DEBUG : Logger.levelTypes.NONE;\n\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 );\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 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 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"]}