{"version":3,"sources":["../node_modules/es6-object-assign/index.js","../node_modules/es6-promise/dist/lib/es6-promise/utils.js","../node_modules/es6-promise/dist/lib/es6-promise/asap.js","../node_modules/es6-promise/dist/lib/es6-promise/then.js","../node_modules/es6-promise/dist/lib/es6-promise/promise/resolve.js","../node_modules/es6-promise/dist/lib/es6-promise/-internal.js","../node_modules/es6-promise/dist/lib/es6-promise/enumerator.js","../node_modules/es6-promise/dist/lib/es6-promise/promise/all.js","../node_modules/es6-promise/dist/lib/es6-promise/promise/race.js","../node_modules/es6-promise/dist/lib/es6-promise/promise/reject.js","../node_modules/es6-promise/dist/lib/es6-promise/promise.js","../node_modules/es6-promise/dist/lib/es6-promise/polyfill.js","../node_modules/es6-promise/dist/lib/es6-promise.js","../node_modules/es6-promise/auto.js","../../node_modules/tslib/tslib.es6.js","../src/enum/LogLevel.ts","../src/util/enum/MediaCapabilitiesMimeType.ts","../src/core/BaseClass.ts","../src/core/CoreEvent.ts","../src/core/LinkedList.ts","../src/enum/TextTrackKind.ts","../src/enum/FileExtensionToMimeType.ts","../src/core/Util.ts","../src/enum/Browser.ts","../src/enum/XhrResponseType.ts","../src/core/Emitter.ts","../src/core/Logger.ts","../src/enum/Network.ts","../src/dataservice/RecoveryEnabledRequest.ts","../src/dataservice/ScriptLoader.ts","../node_modules/axios/lib/helpers/bind.js","../node_modules/axios/lib/utils.js","../node_modules/axios/lib/helpers/buildURL.js","../node_modules/axios/lib/core/InterceptorManager.js","../node_modules/axios/lib/core/transformData.js","../node_modules/axios/lib/cancel/isCancel.js","../node_modules/axios/lib/helpers/normalizeHeaderName.js","../node_modules/axios/lib/core/createError.js","../node_modules/axios/lib/core/enhanceError.js","../node_modules/axios/lib/core/settle.js","../node_modules/axios/lib/helpers/cookies.js","../node_modules/axios/lib/core/buildFullPath.js","../node_modules/axios/lib/helpers/isAbsoluteURL.js","../node_modules/axios/lib/helpers/combineURLs.js","../node_modules/axios/lib/helpers/parseHeaders.js","../node_modules/axios/lib/helpers/isURLSameOrigin.js","../node_modules/axios/lib/adapters/xhr.js","../node_modules/axios/lib/defaults.js","../node_modules/axios/lib/core/dispatchRequest.js","../node_modules/axios/lib/core/mergeConfig.js","../node_modules/axios/lib/core/Axios.js","../node_modules/axios/lib/cancel/Cancel.js","../node_modules/axios/lib/cancel/CancelToken.js","../node_modules/axios/lib/axios.js","../node_modules/axios/lib/helpers/spread.js","../node_modules/axios/lib/helpers/isAxiosError.js","../node_modules/axios/index.js","../src/dataservice/AsyncDataRequestOptions.ts","../src/dataservice/AsyncDataRequest.ts","../src/core/QueryString.ts","../src/core/Request.ts","../src/playback/util/WebVTTParser.ts","../src/enum/ServiceName.ts","../src/playback/surface/ThumbnailTrackSurface.ts","../src/core/Utilities.ts","../src/enum/AccessibilityAction.ts","../src/enum/DiagnosticAction.ts","../src/enum/NativePlugin.ts","../src/enum/NonPrintingKey.ts","../src/enum/PluginPriority.ts","../src/core/BuildInfo.ts","../src/util/KeyCode.ts","../src/enum/QualityMode.ts","../src/playback/enum/TextTrackSurfaceEvents.ts","../src/playback/enum/TextTrackType.ts","../src/playback/enum/VideoSurfaceEvents.ts","../src/enum/TextTrackEvent.ts","../src/enum/TextTrackMode.ts","../src/app/AppResources.ts","../src/util/Async.ts","../src/playback/util/SmpteToVttCueConverter.ts","../src/enum/ActiveState.ts","../src/enum/AdapterRole.ts","../src/enum/AdBreakType.ts","../src/enum/AdContext.ts","../src/enum/AdTechnology.ts","../src/enum/ApiMetric.ts","../src/enum/Autoplay.ts","../src/enum/Device.ts","../src/enum/ErrorCode.ts","../src/enum/HookType.ts","../src/enum/KeyboardScope.ts","../src/enum/LocalizedLanguage.ts","../src/enum/MetricType.ts","../src/enum/Os.ts","../src/enum/PerformanceMode.ts","../src/enum/Platform.ts","../src/enum/PlaybackState.ts","../src/enum/PlayerEvent.ts","../src/enum/QualityCategory.ts","../src/enum/QualityLabel.ts","../src/enum/StreamType.ts","../src/enum/VideoFormat.ts","../src/playback/surface/TextTrackSurface.ts","../src/playback/surface/Html5VideoSurface.ts","../src/playback/surface/MetadataSurface.ts","../src/enum/WildCard.ts","../src/app/adapter/playback/PlaybackAdapterBase.ts","../src/core/Metric.ts","../src/enum/Header.ts","../src/enum/LocalizationId.ts","../src/enum/UiMetric.ts","../src/error/CoreError.ts","../src/playback/enum/PlaybackAdapterType.ts","../src/util/enum/DrmType.ts","../src/error/HookError.ts","../src/error/PlayerError.ts","../src/enum/ProxyName.ts","../src/util/Timer.ts","../src/sdk.ts","../src/mvc/MvcMessages.ts","../src/service/ServiceContainer.ts","../src/mvc/Observer.ts","../src/mvc/View.ts","../src/mvc/Controller.ts","../src/mvc/Model.ts","../src/mvc/Notification.ts","../src/mvc/Facade.ts","../src/service/ServiceBase.ts","../src/util/System.ts","../src/util/VirtualVideoElement.ts","../src/util/enum/MediaCapabilitiesCodec.ts","../src/service/SystemService.ts","../src/service/AutoplayCapabilitiesService.ts","../src/util/config/MediaDecodeConfigs.ts","../src/service/MediaCapabilitiesService.ts","../src/enum/MediatorName.ts","../src/enum/PlayerDom.ts","../src/enum/ModelName.ts","../src/enum/NotificationName.ts","../src/enum/NotificationType.ts","../src/enum/VideoMode.ts","../src/app/ResourceConfiguration.ts","../src/mvc/Notifier.ts","../src/playback/enum/PlaybackAdapterEvents.ts","../src/view/LogAwareMediator.ts","../src/mvc/AbstractMediator.ts","../src/deprecated/cvui/UiMediator.ts","../src/playback/adapter/BasePlaybackAdapter.ts","../src/deprecated/TwitchLowLatencyAdapter.ts","../src/deprecated/Deprecated.ts","../src/mvc/Proxy.ts","../src/model/HookProxy.ts","../src/util/QualityMap.ts","../src/util/Utils.ts","../src/service/LogService.ts","../src/app/event_map.ts","../src/view/AppMediator.ts","../src/app/AbstractApplication.ts","../src/app/ApiDecorators.ts","../src/mvc/AbstractSimpleCommand.ts","../src/controller/LogAwareSimpleCommand.ts","../src/controller/AbrSwitchCommand.ts","../src/mvc/AbstractMacroCommand.ts","../src/model/ActivityProxy.ts","../src/controller/command-helpers/PlayerDomCreator.ts","../src/controller/boot/CreateDomCommand.ts","../src/model/AdapterProxy.ts","../src/model/LocalizationProxy.ts","../src/model/ModelCollectionProxy.ts","../src/view/TimerMediator.ts","../src/model/PerformanceProxy.ts","../src/model/PlayerDomProxy.ts","../src/model/PlaylistProxy.ts","../src/model/TextTrackProxy.ts","../src/model/vo/Validator.ts","../src/model/cfg/ad_break_info_config.ts","../src/model/cfg/ad_item_config.ts","../src/model/cfg/content_playback_state_config.ts","../src/model/cfg/player_options_config.ts","../src/model/vo/Transformer.ts","../src/model/cfg/index.ts","../src/model/cfg/player_dom_config.ts","../src/model/cfg/presentation_state_config.ts","../src/model/vo/Generator.ts","../src/model/vo/ConfigurablePropertyContainer.ts","../src/model/vo/AdBreakInfo.ts","../src/model/vo/AdItem.ts","../src/model/vo/ContentPlaybackState.ts","../src/model/vo/PlayerDom.ts","../src/model/vo/PlayerOptions.ts","../src/model/vo/PresentationState.ts","../src/model/vo/ModelCollection.ts","../src/controller/boot/PrepModelCommand.ts","../src/app/PluginServices.ts","../src/view/PluginMediator.ts","../src/controller/boot/PrepPluginsCommand.ts","../src/controller/boot/PrepTimerCommand.ts","../src/view/AbstractKeyCommandMediator.ts","../src/view/AccessibilityKeyCommandMediator.ts","../node_modules/screenfull/dist/screenfull.js","../src/playback/enum/DashEmsg.ts","../src/view/FullscreenMediator.ts","../src/view/UserKeyCommandMediator.ts","../src/controller/boot/PrepViewCommand.ts","../src/controller/boot/BootCommand.ts","../src/event/PlayerErrorEvent.ts","../src/event/AdErrorEvent.ts","../src/controller/HandleErrorCommand.ts","../src/controller/KillResourcePresentationCommand.ts","../src/controller/LocalizationCommand.ts","../src/controller/MetricCommand.ts","../src/controller/PlaybackCommand.ts","../src/controller/PlaylistCommand.ts","../src/deprecated/ad/dai-api/StreamEvent.ts","../src/deprecated/ad/dai-api/Ad.ts","../src/deprecated/ad/dai-api/AdPodInfo.ts","../src/deprecated/ad/dai-api/StreamManager.ts","../src/deprecated/ad/dai-api/VODStreamRequest.ts","../src/deprecated/ad/dai-api/DaiProxyApi.ts","../src/deprecated/ad/MoatTracker.ts","../src/deprecated/ad/GamAdService.ts","../src/deprecated/ad/DaiAdService.ts","../src/app/adapter/playback/PlaybackAdapterDelegate.ts","../src/playback/enum/ExtLibEndpoint.ts","../src/playback/enum/StreamingLibraryVersion.ts","../src/playback/enum/HlsjsRobustness.ts","../src/playback/enum/Playback.ts","../src/app/adapter/playback/PlaybackAdapterWrapper.ts","../src/playback/adapter/BaseHtml5Adapter.ts","../src/enum/MediaError.ts","../src/playback/enum/DrmVendor.ts","../src/playback/adapter/HlsjsAdapter.ts","../src/playback/util/FairPlay.ts","../src/playback/enum/PlayStation.ts","../src/playback/adapter/Html5Adapter.ts","../src/playback/surface/WebMafVideoSurface.ts","../src/playback/enum/ShakaRobustness.ts","../src/playback/adapter/PlayStationAdapter.ts","../src/playback/adapter/ShakaAdapter.ts","../src/playback/adapter/PlaybackAdapterFactory.ts","../src/view/CommonPresentationMediator.ts","../src/view/AbstractPresentationMediator.ts","../src/deprecated/ad/AdDataProxy.ts","../src/deprecated/ad/ad_util.ts","../src/deprecated/ad/AdBreakSchedule.ts","../src/enum/ImaVpaidMode.ts","../src/deprecated/ad/DaiStreamManager.ts","../src/deprecated/ad/gam_static_params.ts","../src/deprecated/ad/AdParamAssembler.ts","../src/deprecated/ad/DaiStreamRequestAssembler.ts","../src/deprecated/ad/DaiPresentationMediator.ts","../src/deprecated/ad/ImaAdsLoader.ts","../src/enum/Env.ts","../src/deprecated/ad/ImaAdService.ts","../src/deprecated/ad/ImaAdCallAssembler.ts","../src/deprecated/ad/ImaAdPlayer.ts","../src/deprecated/ad/ImaPresentationMediator.ts","../src/model/ContentPlaybackStateProxy.ts","../src/model/ResourceProxy.ts","../src/view/AdPresentationMediator.ts","../src/view/ContentPresentationMediator.ts","../src/controller/PrepPlaybackCommand.ts","../src/controller/command-helpers/ResourceValidator.ts","../src/controller/PrepResourceCommand.ts","../src/controller/PresentationStateChangeCommand.ts","../src/controller/ReadyCommand.ts","../src/controller/ResumePlaybackCommand.ts","../src/controller/command-helpers/CmsDataRetriever.ts","../src/controller/RetrieveResourceCommand.ts","../src/controller/StartPresentationCommand.ts","../src/controller/SuspendPlaybackCommand.ts","../src/controller/TransformResourceCommand.ts","../src/controller/UserKeyboardCommand.ts","../src/app/command_map.ts","../src/app/VideoPlayer.ts","../src/app/Shell.ts","../src/index.ts"],"names":["assign","target","firstSource","TypeError","to","Object","i","arguments","length","nextSource","keysArray","keys","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","undefined","enumerable","es6ObjectAssign","polyfill","defineProperty","configurable","writable","value","objectOrFunction","x","type","isFunction","isArray","Array","prototype","toString","call","vertxNext","customSchedulerFn","asap","callback","arg","queue","flush","scheduleFlush","setScheduler","scheduleFn","setAsap","asapFn","browserWindow","window","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","self","process","isWorker","Uint8ClampedArray","importScripts","MessageChannel","useNextTick","nextTick","useVertxTimer","useSetTimeout","useMutationObserver","iterations","observer","node","document","createTextNode","observe","characterData","data","useMessageChannel","channel","port1","onmessage","port2","postMessage","globalSetTimeout","setTimeout","attemptVertx","vertx","Function","require","runOnLoop","runOnContext","e","then","onFulfillment","onRejection","parent","this","child","constructor","noop","PROMISE_ID","makePromise","_state","invokeCallback","_result","subscribe","resolve","object","Constructor","promise","_resolve","Math","random","substring","PENDING","FULFILLED","REJECTED","selfFulfillment","cannotReturnOwn","tryThen","fulfillmentHandler","rejectionHandler","handleForeignThenable","thenable","sealed","error","fulfill","reason","reject","_label","handleOwnThenable","handleMaybeThenable","maybeThenable","originalThen","originalResolve","publishRejection","_onerror","publish","_subscribers","subscribers","settled","detail","hasCallback","succeeded","initializePromise","resolver","id","nextId","validationError","Error","Enumerator","input","_instanceConstructor","_remaining","_enumerate","_eachEntry","entry","c","_then","didError","_settledAt","Promise","_willSettleAt","state","enumerator","all","entries","race","_","_reject","needsResolver","needsNew","catch","finally","local","global","P","promiseToString","cast","Resolve","Reject","_setScheduler","_setAsap","_asap","require$$0","extendStatics","d","b","setPrototypeOf","__proto__","p","hasOwnProperty","__extends","String","__","create","LogLevel","__assign","t","s","n","apply","__decorate","decorators","key","r","Reflect","decorate","__awaiter","thisArg","_arguments","generator","fulfilled","step","next","rejected","result","done","__generator","body","f","y","g","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","pop","push","__spreadArray","from","pack","ar","l","slice","concat","MediaCapabilitiesMimeType","BaseClass","name","timeStamp","Date","now","LinkedNode","LinkedList","head","tail","forEach","func","add","has","delete","previous","clear","TextTrackKind","FileExtensionToMimeType","VTT","XML","M3U8","HLS","MPD","DASH","TS","TS_VIDEO","MP4","MP4_VIDEO","MPV","MPA","MP4_AUDIO","WEBM","WEBM_VIDEO","Browser","XhrResponseType","Util","camelToDash","term","replace","cdr","dre","toLowerCase","uid8","s4","floor","isEmpty","obj","isObject","isString","isUndefined","isNumber","isBoolean","includes","search","item","indexOf","tgt","args","_i","values","reduce","a","k","fromEntries","o","_a","padStart","str","targetLength","padString","repeat","count","merge","override","base","overrides","getOwnPropertyNames","baseValue","acc","secToHms","seconds","max","isNaN","time","zeroFill","msToHms","ms","formatTime","offset","hmsToSec","timeCode","framerate","NaN","pieces","split","parseInt","parts","pow","shift","date","format","tz","timezone","getTimezoneOffset","getTime","round","hours","getUTCHours","minutes","getUTCMinutes","getUTCSeconds","milliseconds","getUTCMilliseconds","twelve","hh","h","HH","H","mm","m","sss","ss","A","toUpperCase","z","findIndex","arr","predicate","find","index","template","context","open","close","regex","RegExp","match","token","toArray","list","forEachReverse","debounce","delay","timeout","cancel","clearTimeout","run","pending","clampValue","min","inRange","lower","upper","mapToRange","fromMin","fromMax","toMin","toMax","base64DecodeUint8Array","raw","atob","rawLength","array","Uint8Array","ArrayBuffer","charCodeAt","base64EncodeUint8Array","fromCharCode","btoa","xmlToJson","xml","nodeType","attributes","j","attribute","nodeName","nodeValue","text","childNodes","XMLSerializer","serializeToString","tagName","hasChildNodes","old","getNumLines","roundTo","num","makeUrl","ssl","location","parseLanguageTag","tag","language","extended","script","region","getFileExtension","uri","getMimeType","ext","clearCue","textTrack","Cue","VTTCue","TextTrackCue","addCue","eventsToPromise","success","failure","timeoutId","undo","cleanUp","u","action","events","on","off","complete","event","bufferToString","buffer","arrayToString","uint16array","Uint16Array","stringToArray","string","strLen","getResourceMimeType","resource","mimeType","mediaUrl","normalizeQuality","bitrate","height","width","codec","codecs","getIndexForBitrate","isMinLookup","rate","findDefaultTrack","tracks","track","test","short","default","dedupeCues","map","cues","activeCues","cue","startTime","endTime","mapped","removeCue","isTextTrack","kind","CAPTIONS","SUBTITLES","Emitter","options","_this","_super","opts","eventMap","q","charAt","destroy","offAll","handlers","once","handler","remove","hasListenerFor","empty","emit","CoreEvent","dispatchEvt","Levels","_a$5","OFF","ERROR","WARN","INFO","DEBUG","Logger","useConsole","console","tzero","logLevel","warn","log","deprecated","msg","deprecatedCounts","maxDeprecatedWarnings","pLogLevel","level","assert","expression","items","LOG_EVENT","assembleEvent","shouldLog","unshift","getStamp","dir","lbl","Network","RecoveryEnabledRequest","retryCount","limit","retryIntervals","er","errorRecovery","retryAttempts","shouldRetry","atLimit","incrementAttempts","ScriptLoader","TIMEOUT","timeoutHandles","hasListener","COMPLETE","url","loadScript","urls","loadScripts","load","onComplete","timedOut","scriptUrl","completeListener","scr","createElement","protocol","hLoad","hLoadOrError","hError","scriptEl","mapObj","async","addEventListener","appendChild","src","removeEventListener","retryInterval","bind","fn","val","isPlainObject","getPrototypeOf","utils","isArrayBuffer","isBuffer","isFormData","FormData","isArrayBufferView","isView","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","navigator","product","assignValue","extend","trim","stripBOM","content","encode","encodeURIComponent","buildURL","params","paramsSerializer","serializedParams","toISOString","JSON","stringify","join","hashmarkIndex","InterceptorManager","use","eject","InterceptorManager_1","isCancel","__CANCEL__","enhanceError","config","code","request","response","isAxiosError","toJSON","message","description","number","fileName","lineNumber","columnNumber","stack","createError","cookies","write","expires","path","domain","secure","cookie","toGMTString","read","decodeURIComponent","isAbsoluteURL","combineURLs","baseURL","relativeURL","ignoreDuplicateOf","isURLSameOrigin","originURL","msie","userAgent","urlParsingNode","resolveURL","href","setAttribute","host","hash","hostname","port","pathname","requestURL","parsed","settle","validateStatus","status","require$$2","require$$3","buildFullPath","requestedURL","parseHeaders","headers","line","substr","require$$6","require$$7","xhr","requestData","requestHeaders","XMLHttpRequest","auth","username","password","unescape","Authorization","fullPath","method","onreadystatechange","readyState","responseURL","responseHeaders","getAllResponseHeaders","responseType","responseText","statusText","onabort","onerror","ontimeout","timeoutErrorMessage","xsrfValue","withCredentials","xsrfCookieName","xsrfHeaderName","setRequestHeader","onDownloadProgress","onUploadProgress","upload","cancelToken","abort","send","normalizeHeaderName","normalizedName","DEFAULT_CONTENT_TYPE","Content-Type","setContentTypeIfUnset","adapter","defaults","transformRequest","transformResponse","parse","maxContentLength","maxBodyLength","common","Accept","defaults_1","transformData","fns","throwIfCancellationRequested","throwIfRequested","mergeConfig","config1","config2","valueFromConfig2Keys","mergeDeepPropertiesKeys","defaultToConfig2Keys","directMergeKeys","getMergedValue","source","mergeDeepProperties","prop","axiosKeys","otherKeys","filter","require$$1","dispatchRequest","require$$4","Axios","instanceConfig","interceptors","chain","interceptor","getUri","Axios_1","Cancel","Cancel_1","CancelToken","executor","resolvePromise","CancelToken_1","createInstance","defaultConfig","instance","axios","require$$5","promises","spread","payload","axiosModule","AsyncDataRequestOptions","getBody","encodeList","sendJson","objOrStr","enc","asJson","useEnc","getValue","AsyncDataRequest","createXhr","requestOptions","processSmilResponse","emitCompleteWithError","emitComplete","statusMessages","res","contentType","errResponse","cfg","getMsg","stat","errorData","parsedData","DOMParser","parseFromString","Document","0","500","404","403","QueryString","decode","results","$0","$1","$2","$3","parseValue","temp","parseFloat","append","query","ServiceName","WebVTTParser","parseCaption","caption","style","timecode","times","settings","txt","captions","ignore","ThumbnailTrackSurface","getCueAt","renderCueAt","container","renderThumbnail","absolute","relative","TEXT","file","kv","backgroundImage","backgroundPositionX","backgroundPositionY","Utilities","smpteToVtt","system","DOCUMENT","smpteCues","querySelectorAll","align","browser","SAFARI","lineOffset","isVTTCueSupported","textContent","lc","_lineCountPrev","_lineCountNext","nextItem","begin","getAttribute","metadata","querySelector","snapToLines","col","row","position","positionAlign","AccessibilityAction","DiagnosticAction","NativePlugin","NonPrintingKey","PluginPriority","buildInfo","freeze","env","playerVersion","playerName","buildTime","QualityMode","TextTrackSurfaceEvents","TextTrackType","VideoSurfaceEvents","TextTrackEvent","TextTrackMode","KeyCode","AppResources","blankVideoUrl","blankDataUrl","userKeyCmdDefs","DIAGNOSTIC_PLUGIN","primaryKey","keyCode","requireCtrl","requireShift","CONFIG_TO_CLIPBOARD","CONFIG_TO_TEST_PAGE","accessibilityKeyCmdDefs","ENTER_FULLSCREEN","INCREASE_VOLUME","ARROW_UP","DECREASE_VOLUME","ARROW_DOWN","SEEK_BACK","ARROW_LEFT","SEEK_FORWARD","ARROW_RIGHT","TOGGLE_PLAY","SPACE","TOGGLE_MUTE","TOGGLE_TT","STOP","PLAYLIST_NEXT","PLAYLIST_PREV","nativePluginConfig","factory","avia","priority","HIGH","messages","ABR_UNAVAILABLE","ABR_MANUAL_SWITCHING_REACHED_LOWER_BOUNDS","ABR_MANUAL_SWITCHING_REACHED_UPPER_BOUNDS","ABR_MIN_BITRATE_RESTRICTION_UNAVAILABLE","AD_STALLED","ADAPTER_UNAVAILABLE","ADAPTER_LIB_UNAVAILABLE","ADAPTER_NOT_FOUND","CAP_LEVEL_MAXBITRATE","CMS_RESOURCE_UNAVAILABLE","CMS_UNKNOWN","CONTENT_PLAYBACK_SETTING_IGNORED","DAI_MISSING_ASSET_URL","DAI_SDK_UNAVAILABLE","ENVIRONMENT_NOT_SUPPORTED","FAIRPLAY_LICENSE_ERROR","FAIRPLAY_APP_CERT_ERROR","FAIRPLAY_NO_CONTENT_ID","FAIRPLAY_WEBKIT_ERROR","FATAL_PLAYBACK_MEDIA_ERROR","FATAL_PLAYBACK_NETWORK_ERROR","IMA_SDK_MISSING","INVALID_PLAYLIST_INDEX","INVALID_RESOURCE","MANUAL_ABR_SWITCHING_UNAVAILABLE","PAUSING_LINEAR_LIVE_STREAM_NOT_ALLOWED","PLUGIN_LOAD_ERROR","RESOURCE_MISSING","RESOURCE_NOT_SUPPORTED","RETRY_PLAYBACK_MEDIA_ERROR","RETRY_PLAYBACK_NETWORK_ERROR","UNEXPECTED_CONDITION","UNSPECIFIED_ERROR","VIDEO_PLAYBACK_UNAVAILABLE","WEBKIT_KEY_ADDED_SUCCESS","WEBKIT_MEDIA_KEYS_NOT_SUPPORTED","waitUntil","interval","setInterval","clearInterval","waitForEvent","fail","waitForTime","HTMLVideoElement","ActiveState","AdapterRole","AdBreakType","AdContext","AdTechnology","ApiMetric","Autoplay","Device","ErrorCode","HookType","KeyboardScope","LocalizedLanguage","MetricType","Os","PerformanceMode","Platform","PlaybackState","PlayerEvent","QualityCategory","QualityLabel","StreamType","VideoFormat","SmpteToVttCueConverter","convert","loadXml","tt","div","convertToVTTCues","newCue","end","metadataToPosition","xpos","cccol","getAlignString","ccrow","getLineOffset","TextTrackSurface","pTextTracks","currentTextTrack","currentTextTrackMode","DISABLED","allowTextTrackCueDispatch","existingTrack","onVideoTextTrackAdded","expired","onTextTrackAdded","METADATA","addTracks","onTextTrackChange","processTracks","onCueChange","mode","HIDDEN","TEXT_CUEPOINT","video","textTracks","textTrackSettings","native","addEvents","logger","removeEvents","cleanupTrack","element","removeChild","currentTime","cleanupCue","textTrack1","textTrack2","isTTML","isEmbedded","createVttTextTrack","processSmpteTimedText","setTrackMode","newTrack","isValidTrack","TEXT_TRACK_CHANGE","modeChanged","applyMode","TEXT_TRACK_DISPLAY_MODE_CHANGE","SHOWING","addTrack","CUE_CHANGE","TEXT_TRACK_ADDED","invalid","isExpired","isDuplicateTrack","TEXT_TRACK_AVAILABLE","enabled","enabledMode","textTrackMode","track_1","track_2","ADD_TRACK","CHANGE","some","el","srclang","createSmpteTextTrack","t_1","addTextTrack","Html5VideoSurface","useTextTrackSurface","timeAtLastBufferCheck","textTrackSurface","pBuffering","pSeeking","pVideoEventHandler","onVideoElementEvent","pTextTrackEventHandler","onTextTrackSurfaceEvent","pVideo","LOADED_METADATA","seek","play","error_1","AUTOPLAY_BLOCKED","pause","SEEKED","volume","muted","paused","duration","timeTextSrc","buffered","threshold","stalled","seeking","frames","webkitDecodedFrameCount","mozPresentedFrames","Number","droppedVideoFrames","totalVideoFrames","hasWebKit","getVideoPlaybackQuality","webkitDroppedFrameCount","SEEKING","TIME_UPDATE","MetadataSurface","onMetadataCuepoint","metadataTracks","id3Map","daiId3","maxId3DedupeLength","MAX_ID3_DEDUPE_LENGTH","processId3","onSeeking","clearId3","id3OwnerIds","playback","playerOptions","info","isMetadataTrack","PlaybackAdapterBase","useTextSurface","multiCdnHeaderPresent","liveStreamInfo","isPlayingLive","liveEdgeOffset","dvrWindowSize","safeSeekingDuration","safeSeekingTime","relativeTime","relativeDuration","absoluteStart","absoluteTime","absoluteDuration","lastKnownTimes","textTrackInfo","qualityInfo","quality","qualities","AUTO","audioTrackInfo","delegate","getDelegate","videoSurface","createVideoSurface","onSurfaceEvent","createMetadataSurface","metadataCuepoint","enableSurfaceEvents","timeUpdate","PLAYING","playing","PAUSE","seeked","ENDED","ended","DURATION_CHANGE","durationChange","VOLUME_CHANGE","volumeChange","textCuepoints","textTrackDisplayModeChange","textTrackInfoChange","textTrackChange","getSegmentDuration","getSeekable","start","range","seekable","getErrorMessage","isFatal","retry","throwError","fatal","getIsLiveStream","getDuration","Infinity","setAutoQualitySwitching","auto","setQuality","setMinBitrate","setMaxBitrate","setTextTrack","setTextTrackMode","setAudioTrack","getType","getCurrentTime","getBufferLength","bufferLength","getLiveStreamInfo","details","_b","segmentDuration","liveEdgeSyncFragmentCount","safeSeekDuration","ceil","delta","suspend","resume","resize","clearText","getMetrics","bandwidth","createSidecarTextTrack","isVtt","Header","LocalizationId","UiMetric","PlaybackAdapterType","DrmType","CoreError","cause","HookError","PlayerError","ProxyName","Timer","pInterval","timer","pCount","stop","running","TIC_EVENT","TICK","ErrorMessage","MvcMessages","ServiceContainer","serviceContainerMap","ERROR_KEY_EXISTS","multiCoreKey","serviceMap","getInstance","removeServiceContainer","removeService","registerService","service","onRegister","retrieveService","serviceName","hasService","Observer","notifyMethod","notifyContext","setNotifyMethod","setNotifyContext","notify","getNotifyMethod","getNotifyContext","notifyObserver","notification","compareNotifyContext","View","viewMap","mediatorMap","observerMap","initializeView","removeView","removeMediator","registerObserver","notificationName","notifyObservers","observers_ref","observers","removeObserver","splice","registerMediator","mediator","interests","obs","initializeNotifier","listNotificationInterests","handleNotification","retrieveMediator","mediatorName","onRemove","hasMediator","Controller","controllerMap","commandMap","view","initializeController","removeController","removeCommand","executeCommand","commandClassRef","commandInstance","execute","registerCommand","hasCommand","Model","proxyMap","modelMap","initializeModel","removeModel","removeProxy","registerProxy","proxy","retrieveProxy","proxyName","hasProxy","Notification","pName","pBody","pType","bdy","typ","Facade","model","controller","serviceContainer","initialized","initializeFacade","registerCommands","removeCore","facadeMap","hasCore","ERROR_NO_KEY","createFacade","Logging","registerGlobalServices","svcCollection","sendNotification","param1","param2","initializeServiceContainer","ServiceBase","facadeKey","getLogger","getService","getModel","getModelCollection","ModelCollectionProxy","System","sysInfo","pGlobal","initialize","ua","platformInfo","getPlatform","browserInfo","getBrowser","osVer","osVersion","osMajVer","osMajorVersion","re","CHROME","CHROME_IOS","FIREFOX_IOS","EDGE","FIREFOX","OPERA","MSIE","ANDROID","SILK","PLAYSTATION_4_WEBMAF","PLAYSTATION_5","UNKNOWN","isChromeIos","assembleInfo","bName","exec","out","browserVersion","browserMajorVersion","mv","name_1","getMsBrowser","device","KINDLE","isPS5","PLAYSTATION_4","platform","os","PROSPERO","ORBIS","getSafariBrowser","test_1","OPERA_MOBILE","reEdge","reIe","tri","browserName","ual","IOS","MAC","IPHONE","IPAD","LINUX","CHROMECAST","pStr","tests","isLinux","isMac","isWin","ti","isArm","CHROMIUM","test_2","test_3","ANDROID_PHONE","WEBOS","LG_SMART_TV","SMARTCAST","VIZIO_SMART_TV","TIZEN","test_4","SAMSUNG_SMART_TV","$badger","COMCAST_X1","EMBEDDED","DESKTOP","OSX","test_5","devices","names","IPOD","version","win","WINDOWS","WINDOWS_PHONE","test_6","osVersionNbr","XBOX_ONE","WINDOWS10","WINDOWS_VISTA","WINDOWS7","WINDOWS8","MediaCapabilitiesCodec","VirtualVideoElement","SystemService","appNs","ns","isWebMaf","isDesktop","parseVerStr","createSimpleVideoInterface","majorVersion","minorVersion","versionString","spl","mj","mn","AutoplayCapabilitiesService","AutoplayCapabilities","testDom","checkCompleted","testVideoSrc","isMobile","supportsUnmutedAutoplay","supportsMutedAutoplay","destory","detectCapabilities","detecting","createTestDom","internalCallback","checkUnmutedAutoplay","finishCheck","unmutedOk","mutedOk","setInfo","parentNode","createVideoElement","detectMobileCapabilities","checkMutedAutoplay","isEarlySafari11","si","isD","maj","browserVersionInfo","majMinMatch","verStr","verArr","isAutoplayEligibleAndroid","isAutoplayEligibleIos","isChromeAutoplayEligible","is10","isOkSafari","isOkChrome","doc","ds","top","left","media_decode_configs","audio","channels","samplerate","MediatorName","PlayerDom","ModelName","NotificationName","NotificationType","VideoMode","MediaCapabilitiesService","MediaCapabilities","types","AVC","HEVC","WEBM_VP8","VP8","WEBM_VP9","VP9","WEBM_AUDIO","pCapabilities","mediaCapabilitiesResult","mediaDecodeCapabilitiesResults","drmCapabilitiesResults","hasMediaSource","hasEncryptedMediaSource","isWebKit","supportsVp8","supportsMediaDecodeConfigurations","supportsNativeHls","isTypeSupported","supportsRequestMediaKeySystemAccess","supportsAvc","supportsHevc","supportsWebM","supportsVp9","testMediaDecodeCapabilities","mcResult","mDcr","supported","MediaSource","MediaKeys","WebKitMediaKeys","MSMediaKeys","WebKitMediaSource","MediaKeySystemAccess","mediaCapabilities","canPlayType","hResults","runTest","mdcResult","decodingInfo","smooth","powerEfficient","ResourceConfiguration","ad","showPrerollOnNonZeroStart","suppressAdUi","viewabilityTracking","partner","viewGuid","pageType","adTagParameters","description_url","sz","iu","ad_rule","ciu_szs","pp","cmsid","vid","hl","msid","an","nofb","ppid","tfcd","npa","cust_params","csai","adCallUrl","loadVideoTimeoutMs","enableAdPreloading","enableStalledAdCheck","stalledAdThreshold","preloadContentAtEndOfPreRoll","ignoreAnomalousConditionOnSeek","fw","ssai","apiKey","authToken","adParameters","contentSourceId","videoId","assetKey","useApi","isLive","filterOutPremiumAudioCodecs","ima","dai","daiVideoId","ssbStreamUrl","streamActivityMonitorId","cms","tokenMap","cmsUri","textTrackUrl","thumbnailTrackUrl","posterImageUrl","drm","sessionId","ticket","playready","header","widevine","fairplay","appCertUrl","licenseUrl","aes","provider","preloadContent","enableAdvancedCodecs","abr","maxBitrate","minBitrate","startBitrate","capQualityToScreenSize","tracking","PlaybackAdapterEvents","Notifier","facade","LogAwareMediator","viewControl","AbstractMediator","pViewControl","getProxy","UiMediator","seekRedirectPending","ccEnabled","ccAvail","fullScreenAccessRestricted","increment","controlsVisible","adErrorOccurred","LocalizationProxy","ui","setLocalizationService","setThumbnailService","getThumbnail","ContentPlaybackStateProxy","enums","fsm","ControlName","suppressAdView","flag","uiIsStandardView","isStandardView","setSeekNotice","setFullScreenAccessRestricted","killUi","enumCollection","init","enableControl","disableControl","enableFullscreen","isFullScreenAvailable","controlNames","FULLSCREEN_TOGGLE","disableFullscreen","setMuteState","forceControlsVisible","setSeekable","engageSeek","beginSeekMove","disengageSeek","endSeekMove","moveSeekBy","inc","setVolume","setTransportType","LIVE","DVR","setIsPlayingLive","setClosedCaptionState","updateProgress","pdi","playheadTime","cn","SEEK_FORWARD_BUTTON","SEEK_BACK_BUTTON","setClickCatcherState","PlayState","PAUSED","hideClickCatcher","displayPoster","showDecorator","DecoratorName","POSTER","activatePoster","showUnmutePrompt","UNMUTE_PROMPT","displaySpinner","SPINNER","setAccVolumeLevelIndicator","setVideoMode","AD","adViewSuppressed","CONTENT","resetUi","setChapterMarkers","IDLE","ENABLE_UI","activateControls","DISABLE_UI","inactivateControls","VIDEO_LOAD_START","VIDEO_LOAD_COMPLETE","CONTENT_TIME_UPDATE","contentTime","contentDuration","AD_CUEPOINTS_AVAILABLE","cuepoints","AD_TIME_UPDATE","CC_TOGGLE","activateCaptions","doCaptionCheckOnControlVisChange","SEEK","CONTENT_SEEKING","setSeekComplete","SEEK_REDIRECT_START","SEEK_REDIRECT_COMPLETE","CONTENT_SEEKED","CONTENT_BUFFERING","FULLSCREEN_AVAILABLE","FULLSCREEN_CHANGE","setFullscreenState","isFullscreen","PRESENTATION_SIZE_CHANGE","updateSize","CONTENT_PLAYING","setPlayState","CONTENT_PAUSED","AD_BREAK_START","hidePanelsForAdPlay","AD_PAUSED","AD_PLAYING","CONTENT_START","CONTENT_SEGMENT_START","AD_ERROR","AD_BREAK_COMPLETE","CONTENT_SEGMENT_END","RESOURCE_INTERRUPTED","CONTENT_COMPLETE","resetProgress","READY","LANGUAGE_CHANGE","updateText","STREAM_TYPE_CHANGE","CONTENT_IS_LIVE_CHANGED","hVisibilityEvent","PresentationState","isCurrentVideoAd","ce","ControlEvent","BEFORE_CONTROLS_VISIBLE","updateControlsVisible","CONTROLS_VISIBLE","BEFORE_CONTROLS_HIDDEN","CONTROLS_HIDDEN","hActionEvent","note","MUTE","UNMUTE","PLAY","PLAY_ON_USER_GESTURE","ENTER_FULLSCREEN_REQUEST","EXIT_FULLSCREEN_REQUEST","SEEK_TO_LIVE","USER_SETTINGS_REQUEST","UI","TT_OFFSET_REQUEST","hGestureEvent","MOUSE_ENTER_PRESENTATION","MOUSE_LEAVE_PRESENTATION","SWITCH_TEXT_MODE","fsMediator","isFullScreenPermitted","FULLSCREEN","visibilityHandler","gestureHandler","ACTION","BasePlaybackAdapter","enableLogger","networkErrorRetryCount","mediaErrorRetryCount","minAutoLevel","maxAutoLevel","pIsLiveStream","lowLevelDvrDetails","liveStreamInfoVO","blockTimeUpdateEvent","loaded","pauseTime","videoSurfaceEventHandler","onVideoSurfaceEvent","videoEventMap","enumToEventMap","textEventMap","enableLowLevelStreamingLogs","metadataSurface","METADATA_CUEPOINT","normalizedAudioTracks","pendingLoad","textTrackSrc","loadMediaUrl","loadComplete","audioTracks","metrics","buffering","loadedMetadata","getStreamMetadata","manifest","fragment","fragmentType","checkAbrConstraints","manifestQualities","constraints","getCurrentAbrConstraints","updateAbrConstraints","minIdx","maxIdx","profile","ABR_CONSTRAINTS_CHANGE","minIndex","maxIndex","STALLED","ABORT","handleVideoSurfaceError","MediaError","MEDIA_ERR_ABORTED","MEDIA_ABORTED","dict","mapEvent","normalizeAudioTracks","lang","mergeStreamingConfigs","TwitchLowLatencyAdapter","MAX_BITRATE_CLEAR_VALUE","TWITCH_LOW_LATENCY","twitch","IVSPlayer","autoMaxBitrate","POSITIVE_INFINITY","twitchEventMap","PlayerState","onReady","PlayerEventType","QUALITY_CHANGED","onQualityChange","onError","AUDIO_BLOCKED","PLAYBACK_BLOCKED","player","attachHTMLVideoElement","setAutoplay","setLogLevel","rebufferToLive","setRebufferToLive","getVersion","getPosition","getAutoSwitchQuality","setAutoSwitchQuality","getQuality","getQualities","setAutoMaxBitrate","sort","getLiveLatency","MANIFEST_PARSED","ABR_QUALITY_LOADED","ErrorType","NETWORK_IO","NETWORK","NOT_AVAILABLE","TWITCH_NETWORK_ERROR","INVALID_DATA","TWITCH_PARSE_ERROR","NOT_SUPPORTED","TWITCH_SRC_NOT_SUPPORTED","ErrorSource","DECODER","RENDERER","SEGMENT","TWITCH_MEDIA_ERROR","UNSPECIFIED_TWITCH_ERROR","Deprecated","checkEventName","createUi","sysSvc","playerOpts","domProxy","PlayerDomProxy","uic","uiConfig","isIos","isAndroid","exclude","viewController","controlContainer","getMain","panelContainer","getElement","PANEL_CONTAINER","zOrigin","getSafeZIndex","systemInfo","configuration","omitVolume","VideoType","getModelSnapShot","appMediator","snapshot","getSnapshot","BuildInfo","performXhr","setResource","attachResource","createTwitch","getAutoplayCapabilities","Proxy","pData","hook_config","_a$4","EVENT","multiple","AD_BREAK","HookProxy","hookMap","registerHook","hook","removeHook","applyHook","hooks","cancelled","transform","QualityMap","_a$3","UHD_8K","UHD_4K","UHD","HD","SD","Utils","getMinAndMaxValuesForCategory","category","getQualityCategoryForVideoHeight","ht","classFromQualifiedName","qName","serializeConfigSnapshot","playlist","spacing","currentResource","rmNullAndNan","poStr","HTMLElement","po","dataTransformers","getNativePluginConfig","plugin","dependencies","LogService","pLogger","event_map","_a$2","POSTER_CLICK","VIDEO_START_ERROR","VIDEO_PLAYBACK_ERROR","RESOURCE_ERROR","PLAYLIST_ADVANCED","PLAYLIST_COMPLETE","PLAYLIST_CHANGE","PLAYLIST_CLEARED","PLAYLIST_CURRENT_RESOURCE_CLEARED","RESOURCE_START","RESOURCE_END","PLAYLIST_OUT_OF_RANGE","PLAYBACK_SUSPENDED","PLAYBACK_RESUMED","PLAYBACK_STATE_CHANGE","AUDIO_TRACK_INFO_CHANGE","AUDIO_TRACK_CHANGE","QUALITY_CHANGE","QUALITY_INFO_CHANGE","CDN_CHANGE","CONTENT_DURATION_AVAILABLE","CONTENT_PROGRESS","RESOURCE_BUFFERING","SEEK_START","SEEK_COMPLETE","CONTENT_IS_PLAYING_LIVE","STREAM_METADATA","STREAM_ID_AVAILABLE","DRM_KEYSYSTEM_CREATED","TEXT_TRACK_INFO_CHANGE","THUMBNAIL_TRACK_AVAILABLE","AD_SEGMENT_START","AD_SEGMENT_END","AD_BREAK_METADATA","AD_START","AD_PROGRESS","AD_FIRST_QUARTILE","AD_MIDPOINT","AD_THIRD_QUARTILE","AD_COMPLETE","AD_BREAK_DISCARDED","AD_BUFFERING","AD_CLICK","AD_SKIPPED","USER_PAUSE","USER_SETTINGS","LIVE_PRESENTATION_STOPPED","FULLSCREEN_ENTER","FULLSCREEN_EXIT","USER_KEYBOARD_COMMAND","HOTKEY_ACTION","MUTE_CHANGE","AppMediator","app","setFullscreenElement","fullscreenElement","getFullscreenElement","getAppApi","getApi","loadNativePlugin","pim","PLUGIN_MEDIATOR","loadPlugin","collection","getConfigAsJson","PlayerOptions","Playlist","validateSeek","pm","pbp","linear","streamType","isPlaybackSuspended","suspended","getContainerRect","getPresentationRect","onStopComplete","softClear","stopPresentation","sendAsyncNotification","PREP_RESOURCE_COLLECTION","getCurrentResource","ResourceProxy","killCurrentResource","PRESENTATION_MEDIATOR","EXTERNAL","skipAd","getPlugin","dispatchPluginEvent","sendEvent","PLUGIN_EVENT","prepForPlayerRemoval","uim","getMuteState","presoModel","isMuted","getVolume","getDimensions","getAdBreakTimes","grabFrame","vidEl","getVideo","ctx","dUrl","img","cvs","getContext","w","videoWidth","videoHeight","drawImage","toDataURL","APP_EVENT","sendErrorEvent","pe","AbstractApplication","pAppId","pFacade","mdlCollProxy","createLoggingService","logLvl","appId","onLogEvent","gServices","APPLICATION","createApplicationMediator","am","apiMethod","propertyKey","descriptor","apiMethods","apiAccessor","readonly","apiAccessors","get","set","apiCollection","pd","LogAwareSimpleCommand","AbstractSimpleCommand","AbrSwitchCommand","presoMediator","stateProxy","isAbrSwitchingAvailable","SWITCH_BITRATE","idx","switchToIndex","SWITCH_QUALITY_CATEGORY","userQualityCategory","switchQualityCategory","AUTO_QUALITY_SWITCHING","autoQualitySwitching","qualitySwitchingMode","getAbrMode","MIN_BITRATE","MAX_BITRATE","UNAVAILABLE","currentIndex","qia","MANUAL","AbstractMacroCommand","subCommands","initializeMacroCommand","addSubCommand","cmd","ActivityProxy","activeState","INACTIVE","mouseDown","mouseOver","idleDelay","idleEvents","onMouseDown","onMouseUp","onMouseEnter","onMouseLeave","onKeyDown","reset","idle","applyListeners","passive","ACTIVE","activeElement","active","contains","ACTIVE_CHANGE","PlayerDomCreator","main","backgroundColor","dataset","elementId","skipEls","coll","MAIN_CONTAINER","padding","margin","overflow","roles","AD_CONTAINER","CC_CONTAINER","VIDEO_CONTAINER","classList","refNode","firstChild","role","insertBefore","_c","reuseVideoElement","VIDEO_EL","AD_CLICK_EL","createAdClickEl","display","fontSize","background","lineHeight","color","right","textAlign","innerHTML","CreateDomCommand","useNativeControls","dc","domColl","setModel","showAdContainer","setVideoAttribute","playsInline","AdapterProxy","adapterMap","registerAdapter","adapterConfig","retrieveAdapter","removeAdapter","getAdaptersByRole","createContext","services","createPluginServices","dom","presentationState","textTrackProxy","TextTrackProxy","performanceProxy","PerformanceProxy","webMafPlayer","autoplay","isAutoplay","isMuteAtPlayStart","performanceSettings","createAdapter","delegateFactory","adapters","list_1","_d","pLocalizationData","pLocale","pLanguage","registerLocalizationData","LocalizationData","pExternalData","pLanguageTag","defaultLanguage","changeLanguage","locale","objs","localize","messageId","lookup","en","_a$1","MEDIA_PLAYER","es","resettables","AdBreakInfo","AdItem","ContentPlaybackState","pdp","removeDom","psi","skipAutoplayCheck","autoplaySupport","started","streamDuration","streamTime","TimerMediator","INTERVAL","onTic","killTimer","TIMER_TIC","INTERNAL","pOverrides","pMode","performanceMode","calculatePerformanceMode","sys","isTv","TV","MOBILE","bufferingSampleRate","controlVisCssClass","children","removePanelContainer","setControlVisibility","zIndex","getTextTrackContainer","setVideoVolume","getVideoVolume","showAdClickElement","showContainer","getBoundingClientRect","muteVideo","att","removeAttribute","primeVideo","removeVideoAttribute","recreateVideo","exclude_1","getAttributeNames","replaceChild","VIDEO_ELEMENT_REMOVED","VIDEO_ELEMENT_ADDED","PlaylistProxy","pCurrentIndex","cachedApi","pList","cur","advance","prev","addResources","resources","notifyChanged","removeResourceAtIndex","itm","interruptedResource","Validator","checkType","allowNull","notEmpty","validNumber","defVal","isTypedArray","isType","isPositiveNumber","ad_break_info_config","adBreakDuration","defaultValue","setterTransformer","adTotal","adBreakPosition","adBreakType","MID","POST","PRE","adServerName","validator","ad_item_config","adDuration","adTitle","adId","adPosition","adAssetUrl","isVpaid","wrapperAdId","creativeId","wrapperCreativeId","vastMediaWidth","vastMediaHeight","vastMediaBitrate","content_playback_state_config","VOD","cdn","drmType","contentSegment","maxBandwidth","averageDroppedFps","player_options_config","plugins","nativePlugins","NONE","offsetTextOnControlsVisible","networkErrorRecovery","networkTimeout","renderTextTrackNatively","useNativeFullscreen","localization","enableOm","Transformer","lowerCase","strToNum","pf","player_dom_config","videoContainer","ccContainer","adContainer","adClickEl","presentation_state_config","userHasUnmuted","usesSsai","streamId","Generator","generateModel","scope","dataContainer","defaultValueContainer","createProperty","dataCtr","defaultValueCtr","defValue","getTransformer","getterTransformer","txVal","pCfg","which","tx","blankTransformer","ConfigurablePropertyContainer","defaultValues","ModelCollection","mdlCollection","createModels","models","modelName","classToCfgName","PrepModelCommand","mdlColl","setPlayerOptions","loc","createDomProxy","pOptsMdl","mdl","domCollProxy","PluginServices","dispatch","util","queryStrFromObj","vc","playerApi","bi","appNamespace","_e","PluginMediator","pendingLoads","diagnosticPlugin","diagnosticPluginVisible","killPlugin","removePlugin","createPlugin","DIAGNOSTIC","registerDiagnosticPlugin","toggleDiagnosticPlugin","createDiagnosticPlugin","show","hide","LOAD_PLUGINS","REMOVE_PLUGIN","loadPlugins","loadPendingPlugins","initPluginServices","dCfg","createPlugins","loadTimeout","ref","classRef","qualifiedClassName","notStarted","low","LOW","high","PrepPluginsCommand","PrepTimerCommand","TIMER_MEDIATOR","AbstractKeyCommandMediator","defs","pScope","keyUpHandler","keyDownHandler","pDisabled","suppressed","scopeActive","activateScope","mt","scp","registerCommandDef","cmdDef","disable","enable","validatePrimaryKey","def","kl","kc","getCommand","checkModifiers","hasRequiredModifiers","c1","ctrlKey","c2","shiftKey","c3","requireMeta","metaKey","hKeyDown","hKeyUp","AccessibilityKeyCommandMediator","vpi","seekMoving","seekEnabled","VOLUME_INCREMENT","SEEK_FACTOR_DISCRETE","SEEK_INCREMENT_CONTINUOUS","tZero","isControl","disabled","processKeyEvent","up","down","space","back","fwd","rep","shouldSeekContinuous","mul","stopEvent","preventDefault","appMed","stopImmediatePropagation","META","SHIFT","CONTROL","doAction","cv","enterFullscreen","togglePlayPause","textTrackEnabled","nn","isCommonjs","module","exports","fnMap","ret","eventNameMap","change","fullscreenchange","fullscreenerror","screenfull","onFullScreenEntered","returnPromise","documentElement","requestFullscreen","exit","onFullScreenExit","exitFullscreen","toggle","onchange","eventName","defineProperties","Boolean","isEnabled","fullscreenEnabled","DashEmsg","FullscreenMediator","fsElement","pIsAndroidFirefox","fsMgr","useCustomFullscreen","iosPropNames","ENTER_EVENT","EXIT_EVENT","ENTER_METHOD","EXIT_METHOD","SUPPORTED","changeHandler","hChange","systemService","enter","sendFullscreenNotification","enterFsIos","exitFsIos","isFullScreen","VIDEO_LOADED_METADATA","handleMetadataLoaded","webkitIosEnabled","checkWebkitIsoState","isAndroidFirefox","dp","UserKeyCommandMediator","USER_KEY_COMMAND","ucd","PrepViewCommand","cvui","getScopeForKeys","keyboardScope","akm","ACC_KEY_CMD_MEDIATOR","ukm","KEY_COMMAND","getPlayerContainer","PLAYER","BootCommand","PlayerErrorEvent","pCode","pMessage","pFatal","AdErrorEvent","eInfo","errorCode","innerErrorMessage","sdkVersion","vastErrorCode","requestContext","adInfo","HandleErrorCommand","playerEvt","evt","isAdRelatedError","fe","FATAL_ERROR","KillResourcePresentationCommand","LocalizationCommand","CHANGE_LANGUAGE","localization_1","MetricCommand","METRIC","PlaybackCommand","pos","presoMdl","cps","contentPlaybackStateProxy","invokePlayOnUserGesture","pl","hasPreso","r_1","isVod_1","isVod","SWITCH_AUDIO_TRACK","audioTrack","SWITCH_TEXT_TRACK","getTextTrackById","mute","uiMed","shouldSkipPriming","skipPriming","beforePlayOnUserGesture","playOnUserGesture","ev_1","v_1","h_1","PlaylistCommand","sendAppEventNotification","presoM","StreamEvent","streamData","Type","getAd","getStreamData","LOADED","AD_BREAK_STARTED","AD_BREAK_ENDED","STARTED","FIRST_QUARTILE","MIDPOINT","THIRD_QUARTILE","AD_PERIOD_STARTED","AD_PERIOD_ENDED","CUEPOINTS_CHANGED","STREAM_INITIALIZED","CLICK","Ad","adResponse","podInfo","getAdId","ad_id","getAdPodInfo","getAdSystem","advertiser","getAdvertiserName","getApiFramework","getCreativeAdId","creative_ad_id","getCreativeId","creative_id","getDealId","deal_id","getDescription","getTitle","title","getDaiWrapperData","creativeAdId","wrappers","w0","getWrapperAdIds","getWrapperPropArray","getWrapperCreativeIds","getWrapperCreativeAdIds","getWrapperAdSystems","getCompanionAds","propName","AdPodInfo","adPos","podIdx","getAdPosition","setAdPosition","getMaxDuration","getPodIndex","setPodIndex","getTimeOffset","getTotalAds","ads","StreamManager","SimpleVideoInterface","adBreaks","currBreak","currBreakIndex","currAd","breakStatus","breakPoints","pollId","lastRecordedTime","currEventStatus","createEventStatus","vidIface","setClickElement","requestStream","streamReq","correlator","getCorrelator","getUrl","gatherStreamInfo","emitCues","beginPoll","emitLoaded","emitError","DAI_NETWORK_ERROR","clickElement","clickEl","clickThruHandler","hClickThru","contentTimeForStreamTime","bks","breakSum","streamDur","streamTimeForContentTime","sum","previousCuePointForStreamTime","played","cuePointFromBreak","onTimedMetadata","mvu","TXXX","processMetadata","timestamp","resetUponAdComplete","checkState","getBreakForStreamTime","break","emitAdPeriodStarted","beginBreak","ck","monitorAdStatus","endBreak","brk","brkSt","monitorCurrentAd","adSt","btl","beginAd","evts","emitProg","emitAdComplete","eventStatusMap","createStreamData","emitProgress","sd","seq","clickthrough_url","assembleCuePoints","ap","createAdProgressData","adProgressData","stream_id","subtitles","manifestFormat","getFormat","stream_manifest","errorMessage","streamResumeTime","adPeriodDuration","totalAds","first","mid","third","cpa","cid","DAI_BASE_URL","STREAM_PATH","adTechnology","SSAI","isHls","isDsh","gatherBreakInfo","nBreaks","midSeq","adStat","total_duration","media_verification_url","ad_breaks","firstquartile","midpoint","thirdquartile","VODStreamRequest","vodStrReq","req","DaiProxyApi","MoatTracker","MOAT_PARTNER_CODE","adContextToVpaidEventMap","skip","volumechange","dai_sdk","controlpause","controlplay","controlvolumeset","controlmute","controlunmute","trackingObj","adData","ids","level1","level2","level3","level4","slicer1","slicer2","slicer3","moatVASTSystem","moatVASTAdID","vguid","ptype","zMoatVGUID","zMoatPT","initMoat","adVideoContainer","untrack","trackEvent","vpEvt","dispatchEvent","adVolume","sfx","ownerDocument","defaultView","parentWindow","GamAdService","adContext","moatTracker","trackingData","getGamPlatformString","setTrackingData","getAdContext","setContainer","getAdBreakTypeFromPodIndex","assembleAdBreakInfo","adTech","pi","assembleAdInfo","isAdStart","idInfo","getIdInfo","isIma","IMA","adObject","getMediaUrl","getIsVpaid","getVastMediaHeight","getVastMediaWidth","getVastMediaBitrate","trackAd","td","trackAdEvent","untrackAd","createViewabilityTracker","getWrapperId","defId","getContentType","DaiAdService","sdk","DAI_API","DAI_SDK","pSdk","usesApi","videoIface","streamMgr","initViewabilityTracking","google","api","getSdkVersion","setVideoInterface","setMuted","setDuration","setCurrentTime","getStreamManager","ExtLibEndpoint","StreamingLibraryVersion","HlsjsRobustness","Playback","PlaybackAdapterDelegate","pManifestParsed","qualityChange","qualityInfoChange","err","audioTrackChange","audioTrackInfoChange","AUDIO_TRACK_UPDATED","cdnChange","MULTI_CDN","drmKeySystemCreated","keySystem","keysystem","PlaybackAdapterWrapper","pPaused","pConstraints","DrmVendor","BaseHtml5Adapter","edge","clearOutOfBoundsDvrBuffer","lsi","HlsjsAdapter","HLSJS","Hls","pFramerate","pFragmentType","hlsjsEventMap","Events","onManifestParsed","LEVEL_LOADED","onLevelLoaded","LEVEL_UPDATED","onLevelUpdated","LEVEL_SWITCHING","onLevelSwitching","LEVEL_SWITCHED","onLevelSwitched","FRAG_LOADED","onFragmentLoaded","FRAG_PARSING_DATA","onFragmentParsingData","AUDIO_TRACKS_UPDATED","onAudioTrackUpdated","AUDIO_TRACK_SWITCHED","onAudioTrackSwitched","SUBTITLE_TRACKS_UPDATED","onSubtitleTracksUpdated","SUBTITLE_TRACK_SWITCH","onSubtitleTrackSwitch","enabledSubtitles","subtitleTrack","hlsConfig","debug","capLevelToPlayerSize","autoStartLoad","liveSyncDurationCount","manifestLoadingMaxRetry","MANIFEST_RETRY_ATTEMPTS","manifestLoadingRetryDelay","MANIFEST_RETRY_DELAY","levelLoadingRetryDelay","LEVEL_RETRY_DELAY","fragLoadingRetryDelay","FRAGMENT_RETRY_DELAY","enableCEA708Captions","forwardBufferLength","maxBufferLength","backBufferLength","liveBackBufferLength","topQualityForwardBufferLength","maxMaxBufferLength","xhrSetup","onRequest","subtitleDisplay","loading","MANIFEST_LOADED","loadSource","initNativeTextTracks","attaching","MEDIA_ATTACHED","attachMedia","startLoad","setBitrateRestrictionAtStartup","destroyNativeTextTracks","MEDIA_DETACHING","stopLoad","loadLevel","nextLoadLevel","minAutoBitrate","levels","autoLevelCapping","attrs","CODECS","totalduration","averagetargetduration","live","ABR_QUALITY_SWITCHING","frag","stats","bw","performance","trequest","FRAGMENT_LOADED","nb","endPTS","startPTS","FRAGMENT_PARSED","selectSubtitles","setTextTracks","subtitleTracks","HEADERS_RECEIVED","getResponseHeader","UNSPECIFIED_HLSJS_ERROR","ErrorTypes","NETWORK_ERROR","handleNetworkErrors","MEDIA_ERROR","handleMediaErrors","MUX_ERROR","HLSJS_MUX_ERROR","FATAL_ERROR_RECOVERY_ATTEMPTS","ErrorDetails","LEVEL_LOAD_ERROR","FRAG_LOAD_ERROR","HLSJS_NETWORK_ERROR","MANIFEST_PARSING_ERROR","HLSJS_PARSE_ERROR","MANIFEST_INCOMPATIBLE_CODECS_ERROR","HLSJS_SRC_NOT_SUPPORTED","HLSJS_MEDIA_ERROR","startLevel","hasManifestTracks","Map","getEnabled","onChange","textTracksAvailable","onAddTrack","normalized","PlayStation","FairPlay","WEBKIT_KEY_MESSAGE","WEBKIT_KEY_ADDED","WEBKIT_KEY_ERROR","appCertLoaded","webKitNeedKeyCalled","webkitNeedKeyHandler","onWebkitNeedKey","drmInfo","WEBKIT_NEED_KEY","ARRAY_BUFFER","onAppCertLoaded","appCertData","initializeFairplayCDM","initData","onLicenseRequestReady","drmVendor","getDrmVendor","session","onLicenseLoaded","IRDETO","contentId","setRequestHeaders","throwFatalError","FAIRPLAY_LIC_ERROR","update","onWebkitKeyAdded","onWebkitError","licenseServerUrl","getLicenseServerUrl","getId","errMsg","webkitKeys","FAIRPLAY_1_0","webkitSetMediaKeys","appCertInitData","concatInitDataIdAndCertificate","keySession","createSession","cert","byteLength","dataView","DataView","setUint32","idArray","SessionId","Ticket","extractContentId","ContentId","assetId","DRM_TODAY","Html5Adapter","HTML5","audioTrackIdx","fairPlayEventHandler","onFairplayEvent","hasFairplayDrm","updateAudioTracks","CAN_PLAY_THROUGH","audioTracksInitialized","enabledAudioTrackIdx","getEnabledAudioTrackId","CAN_PLAY","PROGRESS","drmParams","MEDIA_ERR_NETWORK","HTML5_NETWORK_ERROR","MEDIA_ERR_DECODE","HTML5_MEDIA_ERROR","MEDIA_ERR_SRC_NOT_SUPPORTED","HTML5_SRC_NOT_SUPPORTED","UNSPECIFIED_VIDEO_PLAYBACK_ERROR","ShakaRobustness","WebMafVideoSurface","onTicHandler","pTime","pDuration","abrProfileCount","pMasterBitrateProfile","audioTrackUpdated","pStartTime","debugMode","fatalErrorInProgress","cea608708Detected","cea608708Enabled","WM_videoPlayer","accessfunction","json","pMetrics","videometrics","onBitrateChange","TTY","tty","TTYLevel","callExternalWebMafApi","starTime","pStatePreSeek","pState","BUFFERING","renderedFramerate","bufferedRange","currentBitrate","command","external","user","poll","respondToPlaybackTime","elapsedTime","videoBitrate","parseAudioInfo","rawTracks","audioNumChannels","returnObj","currentAudioTrack","GET_AUDIO_TRACKS","respondToAudioTrackInfo","GET_VIDEO_REP_COUNT","respondToVideoRepCount","GET_VIDEO_REP_INFO","respondToVideoRepInfo","GET_SUBTITLE_TRACKS","respondToGetSubtitleTracks","GET_PLAYBACK_TIME","NETWORK_STATUS_CHANGE","CONTENT_AVAILABLE","respondToContentAvailable","PLAYER_SUBTITLE","respondToPlayerSubtitle","GET_SEEK_WINDOW","PLAYER_TIMED_EVENT","respondToTimedMetadataEvent","PLAYER_ERROR","PLAYER_STREAMING_ERROR","respondToError","PLAYER_STATUS_CHANGE","respondToPlayerStatusChange","playerState","respondToPlayerStatusReady","DISPLAYING_VIDEO","END_OF_STREAM","respondToPlayerStatusEOS","WEBMAF_START_ERROR","WEBMAF_NETWORK_ERROR","error_info","status_code","datatype","info_1","detectDaiImpression","cueList","totalLength","PlayStationAdapter","PLAY_STATION","psEventMap","onBubble","surface","startingBitrate","authorization","loadAes","loadDrm","droppedFrame","masterBitrateProfile","ShakaAdapter","SHAKA","shaka","pSegmentDuration","playerEventMap","onBitrateChanged","onEmsg","onTracksChanged","onVariantChanged","onAdaptation","onDrmSessionUpdate","onTextTrackVisibility","onTimelineRegionEnter","onCueChangeHandler","audioSwitching","cleanUpVtt","updateTextTracks","installAll","Player","playerConfig","getConfiguration","streaming","retryParameters","maxAttempts","baseDelay","FATAL_ERROR_RECOVERY_DELAY","backoffFactor","FATAL_ERROR_RECOVERY_BACKOFF","fuzzFactor","FATAL_ERROR_RECOVERY_FUZZ","MANIFEST_RETRY_INTERVAL","networkEngine","getNetworkingEngine","registerRequestFilter","registerResponseFilter","onResponse","servers","abrConfig","restrictions","minBandwidth","defaultBandwidthEstimate","bufferingGoal","bufferBehind","alwaysStreamText","pbk","userVideoCodecs","preferredVideoCodecs","userAudioCodecs","preferredAudioCodecs","configure","getVariantTracks","clientWidth","clientHeight","maxWidth","maxHeight","pTextTrack","variant","rebufferingGoal","seekRange","isActive","selectVariantTrack","constrainAbr","selectAudioLanguage","getStats","droppedFrames","frameRate","setTextTrackVisibility","selectTextTrack","getVariantTrack","mime","createPlayerError","getManifest","presentationTimeline","getMaxSegmentDuration","net","NetworkingEngine","RequestType","LICENSE","estimatedBandwidth","emsg","schemeIdUri","messageData","getAudioTrackIndex","eventElement","audioRoles","getAudioLanguagesAndRoles","isUnd","getTextTracks","available","Category","Code","toError","SHAKA_NETWORK_ERROR","MANIFEST","SHAKA_PARSE_ERROR","MEDIA","VIDEO_ERROR","SHAKA_SRC_NOT_SUPPORTED","SHAKA_MEDIA_ERROR","DRM","SHAKA_DRM_ERROR","UNSPECIFIED_SHAKA_ERROR","PlaybackAdapterFactory","getAdapterOverride","getAdapterType","rules","condition","isTwitchLowLatencyAdapter","isPlayStationAdapter","isHTML5Adapter","isDashAdapter","isHlsAdapter","rule_1","rule","resolveVersionTemplate","VERSION","HLSJS_GZIP_CDN","SHAKA_GZIP_CDN","TWITCH_GZIP_CDN","TWITCH","loadLib","lib","checkSslForUrl","getScriptLoaderTimeout","getErrorRecoveryFromConfig","getAdapter","loadError","HLS_SDK_MISSING","SHAKA_SDK_MISSING","TWITCH_SDK_MISSING","fairplayDetected","isSafari","isIOS","osVersionInfo","isM3u8","HLS_ALT","capabilities","baseUrl","isWebOs","streamingLibLoaderTimeout","CommonPresentationMediator","contentDurationReleased","resumeTimeMaxProximityToAdBreak","isClickToPlay","fullscreenRestrictedDuringAdPlay","hasContent","contentComplete","timeSpent","lastTime","sessionTime","playbackTime","mUrl","resourceProxy","closing","adPlaying","isAdPlaying","respondToPlaybackStateChange","STOPPED","isReady","adapterTask","closeAds","isContentComplete","adInterrupted","setAdPlaying","uiMediator","getPlayerVersionInfo","startContentSegment","prepareForPlayback","seekVideo","releaseContentDuration","updateTimeSpent","elapsed","adjustStartTimeForAdBreakProximity","requestedStartTime","breaks","diff","playbackState","respondToFullscreenChange","checkSize","respondToVideoPaused","RESOURCE_PAUSED","respondToVideoPlaying","RESOURCE_PLAYING","respondToVideoSeeking","respondToVideoSeeked","respondToVideoProgress","VIDEO_PROGRESS","respondToQualityChange","sendErrorNotification","respondToVideoEnd","RESOURCE_COMPLETE","respondToBufferingStatusCheck","checkVideoBuffering","respondToId3Data","respondToVideoTimeUpdate","contentPlaybackState","elapsedTimeMs","respondToDurationChange","dur","respondToSizeChange","respondToTextTrackModeChange","rect","currentRect","setForClickToPlay","m_1","lr_1","setPausedState","setPlayingState","AbstractPresentationMediator","minDvrDuration","onLoadError","previousPlaybackState","contentIsBuffering","adapterEventHandler","hPlaybackAdaptorEvents","videoEventHandler","hVideoAdapterEvents","textTrackEventHandler","hTextTrackEvents","endFreezeTimeoutHandle","offsetTtOnControlVis","isMonitoringCueEvents","respondToTextTrackInfoChange","pAdapter","loadVideo","playVideo","pauseVideo","respondToWaiting","mod","isFinite","respondToIsPlayingLiveChange","respondToStreamTypeChange","waiting","WAITING","notWaiting","respondToTtOffsetRequest","monitorTtCues","ctt","respondToTtCue","forcePlay","initializing","initializeAdapter","legacyAdapter","PLAYBACK","exposePlaybackAdapter","error_2","updateQualityProfile","processQualityProfile","thumbnailTrack","updateLiveStreamInfo","isLiveStream","protectAgainstEndFreeze","calculateStreamType","dvr","AdDataProxy","mcp","breakModel","adItemModel","resetAll","resetAd","ai","SZ","SZ_DEFAULT","SZ_MUTED","REFERER_KEY_SSAI","HOST_KEY_SSAI","rand16","getHost","URL","getReferer","referrer","ImaVpaidMode","AdBreakSchedule","cueTimes","cuePoints","contentDur","pre","post","breaksById","createBreaksFromTimes","createBreaksFromCuepoints","hasMidRolls","hasPostRoll","getBreakById","podId","updateBreaks","hasPlayed","streamStartTime","isBreakPending","proximity","processMid","getBreakForContentSeekTime","markPlayed","sst","midIdx","brkTimeTotal","makeBrkId","makeBreak","addBreak","CSAI","prefix","breakId","DaiStreamManager","adService","streamInfo","adBreakSchedule","pStreamDuration","pContentDuration","breakMetadataPending","cuesReleased","adBreakInProgress","breakCount","unlockedBreaks","rawScheduleReleased","isIgnoringEvents","omEnabled","mgr","streamEventHandler","hStreamEvent","listenToStreamManager","getCuePoints","getCuePointsInContentTime","pts","streamTimeStart","streamTimeEnd","ignoreAdEvents","setUnlockedBreaks","breakTimes","getUnlockedBreaks","addUnlockedBreak","checkForAdPeriod","suppressEvent","diffStart","diff1Ok","diff2Ok","isUnlockedBreak","getPermittedSeekTime","requestedSeekTime","pendingCues","updateBreakSchedule","releaseCues","md","requestVODStream","requestObject","enableOmFullAccess","requestLiveStream","LiveStreamRequest","usesDaiApi","omidAccessModeRules","OmidAccessMode","FULL","evtType","gamType","myEvent","handleStreamLoaded","RAW_AD_SCHEDULE_AVAILABLE","schedule","getRawSchedule","handleAdStart","trackQuartile","handleAdComplete","updateUnlockedBreaks","videoInterface","abi","assetUrl","MEDIA_URL_AVAILABLE","updateUnlockedScheduleItems","ba","qlist","DAI_DATA_ERROR","getEventInterests","valid","gam_static_params","output","unviewed_position_start","gdfp_req","AdParamAssembler","assembleStdParams","rc","constParams","stdp","trkp","szStr","getSzStringForPlayback","mutedPlayback","substituteStringForMutedPlayback","objFromQueryStr","DaiStreamRequestAssembler","assembleStreamRequest","skipEncode","versionInfo","stdParamsObj","daiParams","FILTER_OUT_PREMIUM_AUDIO","atp","DaiPresentationMediator","contentSegmentStarted","contentStartReleased","pendingSeekTime","contentCompleteReleased","presoComplete","rawAdSchedule","streamManager","adDataProxy","initStreamManager","streamRequest","pOpts","buildEnv","useLegacyGam","useFw","playername_version","skipHostAndReferer","hasHost","hasRef","imafw_playername_version","t2","actualSeekTime","GOOGLE_DAI","willSkipBreak","signalContentStart","signalContentComplete","cd","DaiAd","handleMediaUrlAvailable","suppliedContentStartTime","showPreRoll","actualContentStartTime","checkForBreaksToUnlock","brkTimes","st","dse","breakInfo","adBreakInfo","cpsMdl","Env","ImaAdsLoader","eMap","errorHandler","adsMgrLoadedHandler","hAdsMgrLoaded","adsLoader","AdsManagerLoadedEvent","ADS_MANAGER_LOADED","AdsLoader","adc","AdDisplayContainer","imaSettings","getSettings","populateSdkSettings","requestAds","adsRequest","userRequestContext","sdkObj","adErrorInfo","parseAdErrorEvent","ADS_LOADER_ERROR","parseAdError","cbsImaSettings","sdkSettings","vpaidMode","ImaSdkSettings","VpaidMode","setVpaidMode","setDisableCustomPlaybackForIOS10Plus","disableCustomPlaybackForIOS10Plus","setPlayerType","playerType","setPlayerVersion","ImaAdService","pAdsLoader","pAdsLoaderOptions","INSECURE","enablePreloading","loadVideoTimeout","playAdsAfterTime","restoreCustomPlaybackStateOnAdBreakComplete","createAdsLoader","initializeAdsLoader","getError","reqCtx","getUserRequestContext","inner","getInnerError","getAdErrorType","getErrorCode","getVastErrorCode","getMessage","AdError","AD_LOAD","ImaAdCallAssembler","assembleAdCall","contextInfo","adCallTemplate","custParamsStr","DEV","ImaAdPlayer","pIsFullscreen","inProgressAd","inProgressBreakId","isPaused","breakStartReleased","pendingSeekedBreakId","markedAsPlayed","addTzero","pollTzero","timeoutHandle","stallThreshold","pollInterval","presentationContainer","adsLoaderEventMap","iae","hAdsLoaderError","adEventHandler","hAdEvent","errorEventHandler","hAdsManagerAdError","listenToAdsLoader","listenToAdsManager","adsManager","renderingSettings","br","updateAdsRenderingSettings","pauseAd","resumeAd","unmute","startAds","getRect","ViewMode","NORMAL","adError","AD_INIT_ERROR","IMA_INIT_FAILURE","markAsPlayed","getBreakForSeekTime","cancelPendingBreak","isUsingContentVideoElement","isCustomPlaybackUsed","isUsingCustomClickTracker","isCustomClickTrackingUsed","setContentComplete","vm","IMA_AD_ERROR","AdEvent","getAdData","myEvt","restartPoll","CONTENT_PAUSE_REQUESTED","CONTENT_RESUME_REQUESTED","processBreakComplete","processAdLoadOrStart","adBreakId","checkForCustomClickTracking","beginPollForProgress","processProgress","processQuartile","processAdComplete","ALL_ADS_COMPLETED","processAllComplete","RESUMED","AD_RESUMED","SKIPPED","processSkip","LOG","processLogEvent","USER_CLOSE","killAd","VOLUME_CHANGED","VOLUME_MUTED","processVolumeChange","checkAdProgress","AD_CLICK_ELEMENT_VISIBILITY_REQUESTED","apd","currT","getRemainingTime","discardAdBreak","isStart","emitAdLoaded","AD_LOADED","tRem","imaEvent","localEvent","imaEvt","imaEvtType","AdsRequest","adTagUrl","linearAdSlotWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","setAdWillAutoPlay","initialPlayState","setAdWillPlayMuted","amle","getRenderingSettings","getAdsManager","playheadInterface","createAdBreakSchedule","rs","AdsRenderingSettings","sets","defaultRenderingSettings","sTimeout","sPreLoadAds","AD_VOLUME_CHANGED","AD_MUTED","ImaPresentationMediator","fatalContentErrorReceived","breaksToSkip","breakMetaDataReleased","pendingBreak","killAdPlayer","listenToAdPlayer","adPlayer","contentStartTime","nonZeroStart","cp","skippod","createAdPlayer","IMA_AD_ONLY","seekT","startPreso","isAd","setAdPlayerBitrate","pendingCuepoints","contentBitrate","hAdPlayerEvent","respondToPauseRequestFromAdPlayer","resumeContentPlay","respondToContentEnd","respondToAdBreakStart","respondToAdBreakMetadata","respondToAdLoaded","respondToAdStart","respondToAdProgress","respondToAdComplete","respondToAdBreakComplete","resumeContentPlayComplete","adjustedStart","checkPreload","preload","lastAd","handler_1","ImaAd","assembleAdContextInfo","muteAtStart","getAdCallUrl","posArr","vPrime","acu","hasGamUrl","fwu","hasFwUrl","ca","RANDOM","HOST","REFERER","PLAYERINFO","SDK","ima_sdkv","processAdCallUrlForFw","getVersionInfo","sdkv","pnv","imafw_ima_sdkv","pUserQualityCategory","tagQualities","getTextTrackId","mock","pResource","AdPresentationMediator","pAdAdapter","adAdapterStarted","currentAd","currentBreak","adAdapter","playClicked","aci","breakSchedule","delegateApi","adInProgress","seekTime","pauseContent","resumeContent","streamIdAvailable","adSegmentStarted","adSegmentEnded","adBreaksAvailable","seekToStreamTime","adBreakStart","endContentSegment","adBreakMetadata","adLoaded","adStart","adProgress","adFirstQuartile","adMidpoint","adThirdQuartile","adComplete","adBreakComplete","adClicked","adPaused","adResumed","adStalled","adBreakDiscarded","adSkipped","allAdsComplete","adBuffering","displayAdClickElement","dimensions","handleTimedMetadata","setStreamTime","setStreamDuration","delegateMethod","ContentPresentationMediator","sendStart","PrepPlaybackCommand","presoState","useAutoplay","isAutoplayRequested","isTizenSmartTv","isXboxOne","processAutoplaySupport","createPresentation","checkAutoplay","getPresoMediator","presoMed","START_PRESENTATION","adCfg","DAI_SSB","ok","createImaAdService","createDaiAdService","DAI_SDK_MISSING","delegate_1","getResource","resourceOverride","AD_ADAPTER_ERROR","createResourceProxy","_f","DaiSdkSettings","setFeatureFlags","enableOmidBeta","svc","trkSets","getVideoInterface","adC","adsLoaderOptions","apOpt","wantsMuted","ATTEMPT_MUTED","ATTEMPT_UNMUTED_THEN_MUTED","wantsUnmuted","ATTEMPT_UNMUTED","conflict","shouldAutoplay","opt","muteOnly","soundOnly","fallback","ResourceValidator","validate","hasRootKeys","canAccessMedia","missing","defRsc","usesAdAdapter","hasCms","hasIdOrUri","hasMediaUrl","hasSsbMedia","hasValidAdSettings","hasValidDaiSettings","mediaNotConfigured","adSets","fwCfg","gamCfg","isFw","PrepResourceCommand","prepResourceCollection","REGISTER_RESOURCE","registerResource","validateResource","invalidResource","resourceValidation","cmsDataRetrievalRequired","RETRIEVE_RESOURCE","TRANSFORM_RESOURCE","PLAY_RESOURCE","INVALID_RESOURCE_FORMAT","PresentationStateChangeCommand","KILL_RESOURCE_PRESENTATION","pres","ReadyCommand","tabindex","ResumePlaybackCommand","CmsDataRetriever","errRecovery","errorMsg","retrieveResource","uriTemplate","replaceUriTokens","RetrieveResourceCommand","getConfig","SELECTOR_CALL_ERROR","txDefs","objectRef","StartPresentationCommand","SuspendPlaybackCommand","TransformResourceCommand","dtx","getCodeForError","getCodeForMpxError","RESOURCE_UNAVAILABLE","exception","DOMAIN_BLOCKED","GEO_LOCATION_BLOCKED","IP_BLOCKED","SATELLITE_PROVIDER_BLOCKED","EXPIRED","UserKeyboardCommand","copyNoticeStyle","toClip","getSerializedData","copyToClipboard","displayCopyNotice","select","execCommand","command_map","DEFAULT","BOOT_APP","SUSPEND_PLAYBACK","RESUME_PLAYBACK","VideoPlayer","pIsReady","modelCollectionProxy","addNativePlugins","registerPlugins","transmitExtRequest","contentPlaybackStateReady","liveStreamPausable","recordMetric","API","pausable","seekPos","getModelSnapshot","pc","goLive","GO_LIVE","focus","blur","suspendPlayback","resumePlayback","Metric","pluginsArray","logLevelOverride","lv","globalServices","errorEvent","Shell","createVideoPlayer","createVideoPlayerApp","pendingPlayerRequests","pro","serviceCollection","HTMLDivElement","vp","playerCollection","retrieveVideoPlayer","playerId","pendingPlayerDestroys","removeVideoPlayer","createResourceConfig","getSysInfoForUser","mc","getPlatformInfo","processPending","autoplayCapabilities","deferAutoplayDetection","getSystemInfo","ObjectAssign"],"mappings":"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","sourcesContent":["/**\n * Code refactored from Mozilla Developer Network:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\n\n'use strict';\n\nfunction assign(target, firstSource) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert first argument to object');\n }\n\n var to = Object(target);\n for (var i = 1; i < arguments.length; i++) {\n var nextSource = arguments[i];\n if (nextSource === undefined || nextSource === null) {\n continue;\n }\n\n var keysArray = Object.keys(Object(nextSource));\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n return to;\n}\n\nfunction polyfill() {\n if (!Object.assign) {\n Object.defineProperty(Object, 'assign', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: assign\n });\n }\n}\n\nmodule.exports = {\n assign: assign,\n polyfill: polyfill\n};\n","export function objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nexport function isFunction(x) {\n return typeof x === 'function';\n}\n\nexport function isMaybeThenable(x) {\n return x !== null && typeof x === 'object';\n}\n\nvar _isArray = void 0;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nexport var isArray = _isArray;","var len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nexport var asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nexport function setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nexport function setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var vertx = Function('return this')().require('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}","import { invokeCallback, subscribe, FULFILLED, REJECTED, noop, makePromise, PROMISE_ID } from './-internal';\n\nimport { asap } from './asap';\n\nexport default function then(onFulfillment, onRejection) {\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n\n if (_state) {\n var callback = arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}","import { noop, resolve as _resolve } from '../-internal';\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nexport default function resolve(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n _resolve(promise, object);\n return promise;\n}","import { objectOrFunction, isFunction } from './utils';\n\nimport { asap } from './asap';\n\nimport originalThen from './then';\nimport originalResolve from './promise/resolve';\n\nexport var PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then, value, fulfillmentHandler, rejectionHandler) {\n try {\n then.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then) {\n if (maybeThenable.constructor === promise.constructor && then === originalThen && maybeThenable.constructor.resolve === originalResolve) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then)) {\n handleForeignThenable(promise, maybeThenable, then);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n var then = void 0;\n try {\n then = value.then;\n } catch (error) {\n reject(promise, error);\n return;\n }\n handleMaybeThenable(promise, value, then);\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = void 0,\n callback = void 0,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = void 0,\n error = void 0,\n succeeded = true;\n\n if (hasCallback) {\n try {\n value = callback(detail);\n } catch (e) {\n succeeded = false;\n error = e;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (succeeded === false) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nexport { nextId, makePromise, noop, resolve, reject, fulfill, subscribe, publish, publishRejection, initializePromise, invokeCallback, FULFILLED, REJECTED, PENDING, handleMaybeThenable };","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { isArray, isMaybeThenable } from './utils';\nimport { noop, reject, fulfill, subscribe, FULFILLED, REJECTED, PENDING, handleMaybeThenable } from './-internal';\n\nimport then from './then';\nimport Promise from './promise';\nimport originalResolve from './promise/resolve';\nimport originalThen from './then';\nimport { makePromise, PROMISE_ID } from './-internal';\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n};\n\nvar Enumerator = function () {\n function Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n }\n\n Enumerator.prototype._enumerate = function _enumerate(input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n var c = this._instanceConstructor;\n var resolve = c.resolve;\n\n\n if (resolve === originalResolve) {\n var _then = void 0;\n var error = void 0;\n var didError = false;\n try {\n _then = entry.then;\n } catch (e) {\n didError = true;\n error = e;\n }\n\n if (_then === originalThen && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise) {\n var promise = new c(noop);\n if (didError) {\n reject(promise, error);\n } else {\n handleMaybeThenable(promise, entry, _then);\n }\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve) {\n return resolve(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve(entry), i);\n }\n };\n\n Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n var promise = this.promise;\n\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n };\n\n Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n };\n\n return Enumerator;\n}();\n\nexport default Enumerator;\n;","import Enumerator from '../enumerator';\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nexport default function all(entries) {\n return new Enumerator(this, entries).promise;\n}","import { isArray } from \"../utils\";\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nexport default function race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}","import { noop, reject as _reject } from '../-internal';\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nexport default function reject(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n _reject(promise, reason);\n return promise;\n}","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { isFunction } from './utils';\nimport { noop, nextId, PROMISE_ID, initializePromise } from './-internal';\nimport { asap, setAsap, setScheduler } from './asap';\n\nimport all from './promise/all';\nimport race from './promise/race';\nimport Resolve from './promise/resolve';\nimport Reject from './promise/reject';\nimport then from './then';\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {Function} resolver\n Useful for tooling.\n @constructor\n*/\n\nvar Promise = function () {\n function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n Chaining\n --------\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n Assimilation\n ------------\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n If the assimliated promise rejects, then the downstream promise will also reject.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n Simple Example\n --------------\n Synchronous Example\n ```javascript\n let result;\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n Advanced Example\n --------------\n Synchronous Example\n ```javascript\n let author, books;\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n function foundBooks(books) {\n }\n function failure(reason) {\n }\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n\n\n Promise.prototype.catch = function _catch(onRejection) {\n return this.then(null, onRejection);\n };\n\n /**\n `finally` will be invoked regardless of the promise's fate just as native\n try/catch/finally behaves\n \n Synchronous example:\n \n ```js\n findAuthor() {\n if (Math.random() > 0.5) {\n throw new Error();\n }\n return new Author();\n }\n \n try {\n return findAuthor(); // succeed or fail\n } catch(error) {\n return findOtherAuther();\n } finally {\n // always runs\n // doesn't affect the return value\n }\n ```\n \n Asynchronous example:\n \n ```js\n findAuthor().catch(function(reason){\n return findOtherAuther();\n }).finally(function(){\n // author was either found, or not\n });\n ```\n \n @method finally\n @param {Function} callback\n @return {Promise}\n */\n\n\n Promise.prototype.finally = function _finally(callback) {\n var promise = this;\n var constructor = promise.constructor;\n\n if (isFunction(callback)) {\n return promise.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n throw reason;\n });\n });\n }\n\n return promise.then(callback, callback);\n };\n\n return Promise;\n}();\n\nPromise.prototype.then = then;\nexport default Promise;\nPromise.all = all;\nPromise.race = race;\nPromise.resolve = Resolve;\nPromise.reject = Reject;\nPromise._setScheduler = setScheduler;\nPromise._setAsap = setAsap;\nPromise._asap = asap;","/*global self*/\nimport Promise from './promise';\n\nexport default function polyfill() {\n var local = void 0;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise;\n}","import Promise from './es6-promise/promise';\nimport polyfill from './es6-promise/polyfill';\n\n// Strange compat..\nPromise.polyfill = polyfill;\nPromise.Promise = Promise;\nexport default Promise;","// This file can be required in Browserify and Node.js for automatic polyfill\n// To use it: require('es6-promise/auto');\n'use strict';\nmodule.exports = require('./').polyfill();\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","export enum LogLevel {\n\n /**Turn off all logging*/\n OFF = 'off',\n\n /**Only Errors will be logged */\n ERROR = 'error',\n\n /** Warn and all levels below will be logged */\n WARN = 'warn',\n\n /** Info and all levels below will be logged */\n INFO = 'info',\n\n /** Debug and all levels below will be logged*/\n DEBUG = 'debug',\n}\n","\nexport enum MediaCapabilitiesMimeType {\n MP4_VIDEO = 'video/mp4',\n MP4_AUDIO = 'audio/mp4',\n HLS = 'application/vnd.apple.mpegurl',\n HLS_ALT = 'application/x-mpegURL',\n DASH = 'application/dash+xml',\n WEBM_VIDEO = 'video/webm',\n WEBM_AUDIO = 'audio/webm',\n TS_VIDEO = 'video/mp2t',\n}\n","export class BaseClass {\n\n protected constructor() {}\n\n get className(): string {\n return (this.constructor).name;\n }\n}\n","import { EmitterInterface } from \"../iface/EmitterInterface\";\nimport { EventInterface } from \"../iface/EventInterface\";\nimport { StrAnyDict } from \"../iface/StrAnyDict\";\n\nexport class CoreEvent implements EventInterface {\n\n timeStamp: number;\n data: StrAnyDict;\n target: EmitterInterface;\n type: string;\n\n /**\n * Custom event class\n */\n constructor(type: string, target: EmitterInterface, data: StrAnyDict) {\n this.timeStamp = Date.now();\n this.data = data;\n this.target = target;\n this.type = type;\n }\n}\n","class LinkedNode {\n\tconstructor(public value: T, public next?: LinkedNode) { }\n}\n\nexport class LinkedList {\n\thead: LinkedNode = null;\n\ttail: LinkedNode = null;\n\n\tget empty(): boolean {\n\t\treturn this.head == null;\n\t}\n\n\tforEach(func: (item: T) => void) {\n\t\tlet node: LinkedNode = this.head;\n\t\twhile (node) {\n\t\t\tfunc(node.value);\n\t\t\tnode = node.next;\n\t\t}\n\t}\n\n\tadd(value: T) {\n\t\tconst node = new LinkedNode(value);\n\n\t\tif (this.head == null) {\n\t\t\tthis.head = node;\n\t\t}\n\t\telse if (this.tail == null) {\n\t\t\tthis.head.next = this.tail = node;\n\t\t}\n\t\telse {\n\t\t\tthis.tail.next = this.tail = node;\n\t\t}\n\t}\n\n\thas(value: T): boolean {\n\t\tlet node = this.head;\n\t\twhile (node) {\n\t\t\tif (node.value == value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn false;\n\t}\n\n\tdelete(value: T): boolean {\n\t\tlet previous = null;\n\t\tlet node = this.head;\n\t\twhile (node) {\n\t\t\tif (node.value == value) {\n\t\t\t\tif (previous) {\n\t\t\t\t\tprevious.next = node.next;\n\t\t\t\t}\n\n\t\t\t\tif (node == this.head) {\n\t\t\t\t\tthis.head = node.next;\n\t\t\t\t}\n\t\t\t\telse if (node == this.tail) {\n\t\t\t\t\tthis.tail = previous;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tprevious = node;\n\t\t\tnode = node.next;\n\t\t}\n\t\treturn false;\n\t}\n\n\tclear(): void {\n\t\tlet node = this.head;\n\t\tlet next;\n\t\twhile (node) {\n\t\t\tnext = node.next;\n\t\t\tnode.value = node.next = null;\n\t\t\tnode = next;\n\t\t}\n\t\tthis.head = this.tail = null;\n\t}\n}\n","export enum TextTrackKind {\n\t/** \n\t * The track defines translation of dialogue and sound effects (suitable for deaf users)\n\t */\n\tCAPTIONS = 'captions',\n\n\t/**\n\t * The track defines subtitles, used to display subtitles in a video\n\t */\n\tSUBTITLES = 'subtitles',\n\n\t/**\n\t * The track defines a textual description of the video content (suitable for blind users)\n\t */\n\tDESCRIPTIONS = 'descriptions',\n\n\t/**\n\t * The track defines chapter titles (suitable for navigating the media resource)\n\t */\n\tCHAPTERS = 'chapters',\n\n\t/**\n\t * The track defines content used by scripts. Not visible for the user\n\t */\n\tMETADATA = 'metadata',\n}\n","import { MediaCapabilitiesMimeType } from \"../util/enum/MediaCapabilitiesMimeType\";\n\nexport const FileExtensionToMimeType: Record = {\n VTT: 'text/vtt',\n XML: 'application/ttml+xml',\n M3U8: MediaCapabilitiesMimeType.HLS,\n MPD: MediaCapabilitiesMimeType.DASH,\n TS: MediaCapabilitiesMimeType.TS_VIDEO,\n MP4: MediaCapabilitiesMimeType.MP4_VIDEO,\n MPV: MediaCapabilitiesMimeType.MP4_VIDEO,\n MPA: MediaCapabilitiesMimeType.MP4_AUDIO,\n WEBM: MediaCapabilitiesMimeType.WEBM_VIDEO,\n};\n","import { FileExtensionToMimeType } from \"../enum/FileExtensionToMimeType\";\nimport { TextTrackKind } from '../enum/TextTrackKind';\nimport { ArrayLike } from \"../iface/ArrayLike\";\nimport { Entry } from \"../iface/Entry\";\nimport { EventPromiseMap } from '../iface/EventPromiseMap';\nimport { LanguageTagInterface } from \"../iface/LanguageTagInterface\";\nimport { QualityInterface } from '../iface/QualityInterface';\nimport { ResourceConfigurationInterface } from '../iface/ResourceConfigurationInterface';\nimport { StrAnyDict } from \"../iface/StrAnyDict\";\nimport { TextCuepointInterface } from '../iface/TextCuepointInterface';\n\n\nexport class Util {\n\n protected constructor() { }\n\n private static dre: RegExp = /([a-z\\d])([A-Z])/g;\n private static cdr: RegExp = /\\W+/g;\n\n static camelToDash(term: string) {\n let d = \"-\";\n\n return (term.replace(Util.cdr, d).replace(Util.dre, '$1-$2')).toLowerCase();\n }\n\n /**\n * Returns an 8 character random string id\n */\n static uid8(): string {\n let s4 = function () {\n return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n };\n\n return s4() + s4();\n }\n\n static isEmpty(obj: any): boolean {\n return obj === null || obj === undefined ||\n (Array.isArray(obj) && obj.length === 0) ||\n Util.isObject(obj) && Object.keys(obj).length === 0 ||\n Util.isString(obj) && obj === '';\n }\n\n static isFunction(obj: any): boolean {\n return typeof obj === 'function';\n }\n\n static isString(obj: any): boolean {\n return typeof obj === 'string';\n }\n\n static isUndefined(obj: any): boolean {\n return typeof obj === 'undefined';\n }\n\n static isNumber(obj: any): boolean {\n return typeof obj === 'number';\n }\n\n static isBoolean(obj: any): boolean {\n return typeof obj === 'boolean';\n }\n\n static isObject(obj: any): boolean {\n return typeof obj === 'object';\n }\n\n /**\n * Sidefill for ES6 `Array.prototype.includes` and `String.prototype.includes` functions. \n * See https://tc39.es/ecma262/#sec-array.prototype.includes\n * https://tc39.es/ecma262/#sec-string.prototype.includes\n */\n static includes(search: Array | string, item: any): boolean {\n return search.indexOf(item) > -1;\n }\n\n /**\n * Sidefill for ES6 `Object.assign` function. See https://tc39.es/ecma262/#sec-object.assign\n */\n static assign(tgt: StrAnyDict, ...args: StrAnyDict[]): StrAnyDict {\n return Object.assign(tgt || {}, ...args);\n }\n\n /**\n * Sidefill for ES6 `Object.values` function. See https://tc39.es/ecma262/#sec-object.values\n */\n static values(obj: Record): T[] {\n return Object.keys(obj).reduce((a, k, i) => (a[i] = obj[k], a), []);\n }\n\n /**\n * Sidefill for ES6 `Object.entries` function. See https://tc39.es/ecma262/#sec-object.entries\n */\n static entries(obj: any): Entry[] {\n return Object.keys(obj).reduce((a, k, i) => (a[i] = [k, obj[k]], a), []);\n }\n\n /**\n * Sidefill for ES6 `Object.fromEntries` function. See https://tc39.es/ecma262/#sec-object.fromentries\n */\n static fromEntries(entries: Entry[]): StrAnyDict {\n return entries.reduce((o, [k, v]) => (o[k] = v, o), {} as StrAnyDict);\n }\n\n /**\n * Sidefill for ES6 `String.prototype.padStart` function. See https://tc39.es/ecma262/#sec-string.prototype.padstart\n */\n static padStart(str: string, targetLength: number, padString: string = ' '): string {\n targetLength = targetLength | 0;\n const len = str.length;\n\n if (len > targetLength) {\n return str;\n }\n\n targetLength = targetLength - len;\n if (targetLength > padString.length) {\n padString += Util.repeat(padString, targetLength / padString.length); //append to original to ensure we are longer than needed\n }\n return padString.slice(0, targetLength) + str;\n }\n\n /**\n * Sidefill for ES6 `String.prototype.repeat` function. See https://tc39.es/ecma262/#sec-string.prototype.repeat\n */\n static repeat(str: string, count: number = 0) {\n count = count | 0;\n let i = 0, result = \"\";\n while (i++ < count) {\n result += str;\n }\n\n return result;\n }\n\n /**\n * Merge the properties of a list of object. Similar to Object.assign, with the following exceptions:\n * - Performs a deep merge\n * - `undefined` values will not override defined values.\n */\n static merge(...args: any[]): any {\n const override = (base: any, overrides: any): any => {\n if (base == null) {\n return overrides;\n }\n else if (overrides == null) {\n return base;\n }\n\n Object.getOwnPropertyNames(overrides).forEach(key => {\n const value = overrides[key];\n const baseValue = base[key];\n const type = typeof value;\n\n if (type === \"undefined\") {\n return;\n }\n else if (baseValue == null || !Util.isObject(baseValue) || Array.isArray(value)) {\n base[key] = value;\n }\n else if (type === \"object\") {\n base[key] = override(baseValue, value);\n }\n });\n\n return base;\n };\n\n return args.reduce((acc, obj) => override(acc, obj), {});\n }\n\n /**\n * Returns formatted time; e.g, 00:04:20;\n * \n * @param seconds The number of seconds to display\n * @param max The maximum number of seconds. Dictates how many number groups to display.\n */\n static secToHms(seconds: number, max: number = 61): string {\n // default\n if (seconds == null || isNaN(seconds)) {\n return \"00:00\";\n }\n\n // seconds. Use bitwise OR operator for fast number truncation\n seconds = seconds | 0;\n let time: string = Util.zeroFill(seconds % 60);\n\n // minutes\n seconds = seconds / 60 | 0;\n time = Util.zeroFill(seconds % 60) + \":\" + time;\n\n // hours\n seconds = seconds / 60 | 0;\n if (seconds > 0) {\n time = Util.zeroFill(seconds) + \":\" + time;\n }\n\n if (max >= 3600 && time.length === 5) {\n time = \"00:\" + time;\n }\n\n return time;\n }\n\n static msToHms(ms: number): string {\n return Util.formatTime(new Date(ms), \"HH:mm:ss:sss\", { offset: 0 });\n }\n\n static zeroFill(time: number, len: number = 2): string {\n return Util.padStart(String(time), len, \"0\");\n }\n\n /**\n * Converts timecode to seconds.\n *\n * @param timeCode A SMTP formatted string.\n * @param framerate The frame rate. Used to calculate milliseconds.\n * @return The number of seconds represented by the time code\n */\n static hmsToSec(timeCode: string, framerate = 30) {\n if (!timeCode) {\n return NaN;\n }\n const pieces = timeCode.split(\":\");\n let ms = 0;\n if (pieces.length === 4) {\n ms = parseInt(pieces.pop()) / framerate;\n }\n else if (pieces.length === 3) {\n // sometimes ms separator is a comma\n pieces[2] = pieces[2].replace(\",\", \".\");\n if (pieces[2].indexOf(\".\") !== -1) {\n let parts = pieces[2].split(\".\");\n if ((parts != null ? parts.length : void 0) > 1) {\n pieces[2] = parts[0];\n ms = parseInt(parts[1]) / 1000;\n }\n }\n }\n let time = parseInt(pieces.pop());\n while (pieces.length > 0) {\n time += Math.pow(60, pieces.length) * parseInt(pieces.shift());\n }\n return time + ms;\n }\n\n /**\n * Converts a date into a time string based on a ISO 8601 formatted time string.\n */\n static formatTime(date: Date, format = \"h:mm:ss A\", tz: { timezone?: string, offset: number; } = { timezone: \"\", offset: -((new Date()).getTimezoneOffset() / 60) }): string {\n if ((tz.offset != null) && tz.offset !== 0) {\n date = new Date(date.getTime() + Math.round(tz.offset * 60 * 60 * 1000));\n }\n if (isNaN(date.getTime())) {\n return \"\";\n }\n const hours = date.getUTCHours();\n const minutes = date.getUTCMinutes();\n const seconds = date.getUTCSeconds();\n const milliseconds = date.getUTCMilliseconds();\n const twelve = hours % 12 || 12;\n const a = hours < 12 ? \"am\" : \"pm\";\n const replace = {\n hh: Util.zeroFill(twelve),\n h: twelve,\n HH: Util.zeroFill(hours),\n H: hours,\n mm: Util.zeroFill(minutes),\n m: minutes,\n sss: Util.zeroFill(milliseconds, 3),\n ss: Util.zeroFill(seconds),\n s: seconds,\n a: a,\n A: a.toUpperCase(),\n z: tz.timezone\n } as StrAnyDict;\n for (let key in replace) {\n format = format.replace(key, replace[key]);\n }\n return format;\n }\n\n /**\n * Sidefill for ES6 `Array.prototype.findIndex` function. See https://tc39.es/ecma262/#sec-array.prototype.findindex\n */\n static findIndex(arr: ArrayLike, predicate: (item: T, index?: number, arr?: ArrayLike) => boolean): number {\n if (!Util.isFunction(predicate)) {\n throw new TypeError('predicate must be a function');\n }\n\n const len = arr.length >>> 0;\n let i = 0;\n\n while (i < len) {\n if (predicate(arr[i], i, arr)) {\n return i;\n }\n i++;\n }\n\n return -1;\n }\n\n /**\n * Sidefill for ES6 `Array.prototype.find` function. See https://tc39.es/ecma262/#sec-array.prototype.find\n */\n static find(arr: ArrayLike, predicate: (item: T, index?: number, arr?: ArrayLike) => boolean): T | undefined {\n if (!Util.isFunction(predicate)) {\n throw new TypeError('predicate must be a function');\n }\n\n const index = Util.findIndex(arr, predicate);\n return (index > -1) ? arr[index] : undefined;\n }\n\n static template(input: string, context: any, open = \"{{\", close = \"}}\"): string {\n if (!input) {\n return input;\n }\n const regex: RegExp = new RegExp(`${open}((?:(?!(${open}|${close})).)+)${close}`, \"g\");\n return input.replace(regex, (match, token) => (!Util.isUndefined(context?.[token])) ? context[token] : match);\n }\n\n static toArray(arr: ArrayLike): Array {\n return Array.prototype.slice.call(arr);\n }\n\n static forEach(list: ArrayLike, func: (item: T, index: number, array: ArrayLike) => any): void {\n if (!list || !list.length || !Util.isFunction(func)) {\n return;\n }\n\n for (let i = 0, len = list.length; i < len; i++) {\n func(list[i], i, list);\n }\n }\n\n static forEachReverse(list: ArrayLike, func: (item: T, index: number, array: ArrayLike) => any): void {\n if (!list || !list.length || !Util.isFunction(func)) {\n return;\n }\n\n for (let i = list.length - 1; i > -1; i--) {\n func(list[i], i, list);\n }\n }\n\n static debounce(func: Function, delay: number): () => void {\n let timeout: number;\n const pending = () => timeout != null;\n const cancel = () => {\n clearTimeout(timeout);\n timeout = null;\n };\n const run = (...args: any[]) => {\n cancel();\n timeout = setTimeout(func, delay, ...args);\n };\n run.cancel = cancel;\n run.flush = func;\n run.pending = pending;\n return run;\n }\n\n static clampValue(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n }\n\n static inRange(value: number, lower: number, upper: number): boolean {\n return Util.isNumber(value) && value >= lower && value <= upper;\n }\n\n static mapToRange(value: number, fromMin: number, fromMax: number, toMin: number = 0, toMax: number = 1): number {\n return (value - fromMin) * (toMax - toMin) / (fromMax - fromMin) + toMin;\n }\n\n static base64DecodeUint8Array(input: string): Uint8Array {\n const raw = atob(input);\n const rawLength = raw.length;\n const array = new Uint8Array(new ArrayBuffer(rawLength));\n\n for (let i = 0; i < rawLength; i++) {\n array[i] = raw.charCodeAt(i);\n }\n\n return array;\n }\n\n static base64EncodeUint8Array(input: Uint8Array) {\n const str = String.fromCharCode.apply(null, input);\n return btoa(str);\n }\n\n static xmlToJson(xml: StrAnyDict): StrAnyDict {\n var obj: any = {};\n\n // Node types:\n // 1: ELEMENT_NODE\n // 3: TEXT_NODE\n\n // Elements and attributes.\n if (xml.nodeType === 1 && xml.attributes.length > 0) {\n for (var j = 0, k = xml.attributes.length; j < k; j++) {\n var attribute = xml.attributes.item(j);\n\n //@ts-ignore\n obj[attribute.nodeName] = attribute.nodeValue;\n }\n }\n // #text elements.\n else if (xml.nodeType === 3) {\n obj = xml.nodeValue;\n }\n\n // Special caption

elements.\n if (xml.nodeName === 'p') {\n obj.text = '';\n\n xml.childNodes.forEach((node: any) => {\n\n //Skip tags.\n if (node.nodeName === 'metadata') {\n return;\n }\n\n const text = (new XMLSerializer()).serializeToString(node);\n\n // Element nodes.\n if (node.nodeType === 1) {\n // Line breaks get ignored by the VTTCue object, so we\n // convert them here to newline characters.\n obj.text += node.tagName === 'br' ? '\\n' : text;\n }\n\n // Text nodes.\n if (node.nodeType === 3) {\n obj.text += text;\n }\n\n });\n }\n\n // Child nodes.\n if (xml.hasChildNodes()) {\n for (var i = 0, h = xml.childNodes.length; i < h; i++) {\n var item = xml.childNodes.item(i),\n nodeName = item.nodeName;\n\n if (Util.isUndefined(obj[nodeName])) {\n obj[nodeName] = Util.xmlToJson(item);\n continue;\n }\n\n // If more than one child, create an array\n if (Util.isUndefined(obj[nodeName].push)) {\n var old = obj[nodeName];\n obj[nodeName] = [];\n obj[nodeName].push(old);\n }\n\n obj[nodeName].push(Util.xmlToJson(item));\n }\n }\n\n return obj;\n }\n\n static getNumLines(text: string): number {\n return text && ((text.match(/\\n/g) || []).length + 1);\n }\n\n static roundTo(num: number, len: number) {\n return Math.round(num * Math.pow(10, len)) / Math.pow(10, len);\n }\n\n /**\n * Utility method that constructs the url by prepending the protocol based \n * on the ssl boolean and the location. Ex: \"https://www.cbssports.com/live\"\n * \n * @param ssl \n * @param location \n * @returns string the url\n */\n static makeUrl(ssl: boolean, location: string): string {\n return (ssl ? 'https:' : 'http:') + '//' + location;\n }\n\n /**\n * Parse a IETF BCP 47 language tag\n */\n static parseLanguageTag(tag: string = ''): LanguageTagInterface {\n const regex = /^([a-zA-Z]{2,3})(?:[_-]+([a-zA-Z]{3})(?=$|[_-]+))?(?:[_-]+([a-zA-Z]{4})(?=$|[_-]+))?(?:[_-]+([a-zA-Z]{2}|[0-9]{3})(?=$|[_-]+))?/;\n const match = tag.match(regex) || [];\n return {\n tag: tag,\n language: match[1] || '',\n extended: match[2] || '',\n script: match[3] || '',\n region: match[4] || '',\n toString(): string {\n return this.tag;\n }\n } as LanguageTagInterface;\n }\n\n /**\n * Extract file extension from URI.\n */\n static getFileExtension(uri: string): string {\n return uri.replace(/\\?.*/, '').replace(/#.*/, '').split('.').pop();\n }\n\n /**\n * Determine mime type from file extension.\n */\n static getMimeType(uri: string): string {\n if (!uri) {\n return '';\n }\n\n const ext = Util.getFileExtension(uri).toUpperCase();\n\n return FileExtensionToMimeType[ext];\n }\n\n static clearCue(textTrack: TextTrack, time: number): void {\n try {\n const Cue = VTTCue || TextTrackCue;\n textTrack.addCue(new Cue(time - 0.1, time + 0.1, \" \"));\n }\n catch (error) {\n // Do nothing\n }\n }\n\n static eventsToPromise(success: EventPromiseMap[], failure: EventPromiseMap[], timeout: number = NaN): Promise {\n return new Promise((resolve, reject) => {\n let timeoutId: number;\n const undo: Function[] = [];\n const cleanUp = () => undo.forEach(u => u());\n const apply = (action: Function) => ({ target, events }: EventPromiseMap) => {\n const t = target as any;\n const on = t.on ? 'on' : 'addEventListener';\n const off = t.off ? 'off' : 'removeEventListener';\n const complete = (e: T, d?: T) => {\n clearTimeout(timeoutId);\n cleanUp();\n action(d || e);\n };\n events.forEach(event => {\n t[on](event, complete);\n undo.push(() => t[off](event, complete));\n });\n };\n\n success.forEach(apply(resolve));\n failure.forEach(apply(reject));\n\n if (timeout > -1) {\n timeoutId = setTimeout(() => {\n cleanUp();\n reject(new Error(\"timeout\"));\n }, timeout);\n }\n });\n }\n\n static bufferToString(buffer: ArrayBuffer) {\n return String.fromCharCode.apply(null, new Uint8Array(buffer));\n }\n\n static arrayToString(array: Uint16Array) {\n const uint16array = new Uint16Array(array.buffer);\n return String.fromCharCode.apply(null, uint16array);\n }\n\n static stringToArray(string: string): Uint16Array {\n const buffer = new ArrayBuffer(string.length * 2); // 2 bytes for each char\n const array = new Uint16Array(buffer);\n\n for (let i = 0, strLen = string.length; i < strLen; i++) {\n array[i] = string.charCodeAt(i);\n }\n\n return array;\n }\n\n static getResourceMimeType(resource: ResourceConfigurationInterface) {\n const override = resource.overrides?.mimeType || '';\n return override.split(';').shift() || Util.getMimeType(resource.location.mediaUrl);\n }\n\n static normalizeQuality(item: any, index: number): QualityInterface {\n return {\n index,\n bitrate: item.bitrate,\n height: item.height,\n width: item.width,\n codec: item.codec || item.codecs\n };\n }\n\n static getIndexForBitrate(list: StrAnyDict[], bitrate: number, isMinLookup: boolean): number {\n /*\n * | --400--- | --800--- | --1000--- | --1500--- | --2500--- | minify true should result in 1000\n * <---- 900 is bitrate ------->\n * | --400--- | --800--- | --1000--- | --1500--- | --2500--- | minify undefined or false should result in 800\n */\n if (!list) {\n return 0;\n }\n\n let i = list.length - 1;\n if (bitrate >= list[i].bitrate) {\n return i; //bit rate is out of range - upper bounds\n }\n\n while (i--) {\n const rate = list[i].bitrate;\n if (isMinLookup) {\n if (bitrate > rate) {\n return i + 1;\n }\n }\n else {\n if (bitrate >= rate) {\n return i;\n }\n }\n }\n\n return 0; //bit rate is out of range - lower bounds\n }\n\n static findDefaultTrack(tracks: T[], language: string): T {\n let regex = new RegExp(language, \"i\");\n let track = Util.find(tracks, t => regex.test(t.language));\n if (!track) {\n const short = Util.parseLanguageTag(language).language;\n if (short != language) {\n regex = new RegExp(short, \"i\");\n track = Util.find(tracks, t => regex.test(t.language));\n }\n }\n\n return track || Util.find(tracks, t => t.default) || tracks[0];\n }\n\n static dedupeCues(track: TextTrack): TextCuepointInterface[] {\n const map: Record = {};\n const cues: TextCuepointInterface[] = [];\n\n Util.forEach(track.activeCues, (cue: any): void => {\n try {\n if (!cue) {\n return;\n }\n\n const { text, startTime, endTime } = cue;\n\n if (!text) {\n return;\n }\n\n const mapped = map[text];\n\n if (!mapped) {\n map[text] = cue;\n }\n else if (mapped.startTime === startTime && mapped.endTime === endTime) {\n track.removeCue(cue);\n return;\n }\n\n cues.push(cue);\n }\n catch (error) {\n // Ignore errors to avoid interupting playback\n }\n });\n\n return cues;\n }\n\n static isTextTrack(kind: any) {\n return kind === TextTrackKind.CAPTIONS || kind === TextTrackKind.SUBTITLES;\n }\n}\n","\nexport enum Browser {\n\n /** */\n ANDROID = 'Android',\n\n /** */\n CHROME = 'Chrome',\n\n /** */\n CHROME_IOS = \"Chrome-iOS\",\n\n /** */\n FIREFOX = 'Firefox',\n\n /** */\n FIREFOX_IOS = 'Firefox-iOS',\n\n /** */\n EDGE = 'Edge',\n\n /** */\n MSIE = 'MSIE',\n\n /** */\n SAFARI = 'Safari',\n\n /** */\n OPERA = 'Opera',\n\n /** */\n OPERA_MOBILE = 'Opera-Mobile',\n\n /** */\n SILK = 'Silk',\n\n /** PlayStation 4 WebMaf*/\n PLAYSTATION_4_WEBMAF = 'PlayStation 4 (WebMAF)',\n\n /** PlayStation 5 MSE*/ \n PLAYSTATION_5 = 'PlayStation 5 (Media Source API)',\n\n /** The browser is unknown */\n UNKNOWN = 'Unknown'\n}\n","export enum XhrResponseType {\n ARRAY_BUFFER = 'arraybuffer',\n TEXT = 'text',\n JSON = 'json',\n DOCUMENT = 'document',\n DEFAULT = '',\n}\n","import { EmitterInterface } from \"../iface/EmitterInterface\";\nimport { EventHandler } from \"../iface/EventHandler\";\nimport { EventInterface } from \"../iface/EventInterface\";\nimport { StrAnyDict } from \"../iface/StrAnyDict\";\nimport { BaseClass } from './BaseClass';\nimport { CoreEvent } from './CoreEvent';\nimport { LinkedList } from './LinkedList';\nimport { Util } from \"./Util\";\n\n\nexport class Emitter extends BaseClass implements EmitterInterface {\n\n protected opts: StrAnyDict;\n protected target: EmitterInterface;\n protected eventMap: Record>;\n\n /**\n * An event emitter, with methods to add and remove event listeners.\n * Base class for any class using event-based communication.\n */\n constructor(options?: StrAnyDict, target?: EmitterInterface) {\n super();\n this.target = target || this;\n this.opts = options || {};\n this.eventMap = {};\n\n let o = this.opts, e;\n\n for (let q in o) {\n if (Util.isFunction(o[q]) && /^on[A-Z]/.test(q)) {\n e = q.charAt(2).toLowerCase() + q.substring(3);\n this.on(e, o[q]);\n delete this.opts[q];\n }\n }\n }\n\n destroy(): void {\n let q;\n\n if (this.opts) {\n for (q in this.opts) {\n delete this.opts[q];\n }\n this.opts = null;\n }\n\n this.offAll(null);\n\n if (this.eventMap) {\n for (q in this.eventMap) {\n delete this.eventMap[q];\n }\n this.eventMap = null;\n }\n }\n\n /**\n * Adds an event listener\n */\n on(name: string, func: EventHandler): void {\n if (!this.eventMap || !name || !Util.isFunction(func)) {\n return;\n }\n\n const handlers = this.eventMap[name] || (this.eventMap[name] = new LinkedList());\n\n if (handlers.has(func)) {\n return;\n }\n\n handlers.add(func);\n }\n\n /**\n * Adds a one time event listener\n */\n once(name: string, func: EventHandler): void {\n if (!this.eventMap || !name || !Util.isFunction(func)) {\n return;\n }\n\n const handler = (event: EventInterface) => {\n this.off(name, handler);\n func(event);\n };\n\n this.on(name, handler);\n }\n\n /**\n * Removes the supplied EventHandler, or, if omitted, will remove all\n * handlers for the supplied (required) event name\n */\n off(name: string, func?: EventHandler): void {\n !func && this.offAll(name);\n func && this.remove(name, func);\n }\n\n /**\n * Removes all event handlers for the supplied (required) event name\n */\n offAll(name?: string): void {\n if (!this.eventMap) {\n return;\n }\n let map = this.eventMap, q;\n\n if (name) {\n this.remove(name, null);\n\n return;\n }\n\n for (q in map) {\n this.remove(q, null);\n }\n }\n\n hasListenerFor(name: string): boolean {\n return !!(this.eventMap && this.eventMap[name] && !this.eventMap[name].empty);\n }\n\n emit(name: string, data: StrAnyDict = null): void {\n let e = new CoreEvent(name, this, data);\n this.dispatchEvt(e);\n }\n\n dispatchEvt(e: EventInterface) {\n if (!this.eventMap || !this.eventMap[e.type]) {\n return;\n }\n this.eventMap[e.type].forEach(h => h(e));\n }\n\n private remove(name: string, func: EventHandler = null): void {\n if (!this.eventMap || !this.eventMap[name]) {\n return;\n }\n\n if (!func) {\n this.eventMap[name].clear();\n }\n else {\n this.eventMap[name].delete(func);\n }\n }\n}\n","import { LogLevel } from '../enum/LogLevel';\nimport { LogEventInterface } from '../iface/LogEventInterface';\nimport { LoggerInterface } from \"../iface/LoggerInterface\";\nimport { LoggerOptions } from \"../iface/LoggerOptions\";\nimport { StrAnyDict } from \"../iface/StrAnyDict\";\nimport { Emitter } from './Emitter';\nimport { Util } from './Util';\n\n\nconst Levels = {\n [LogLevel.OFF]: 0,\n [LogLevel.ERROR]: 100,\n [LogLevel.WARN]: 200,\n [LogLevel.INFO]: 300,\n [LogLevel.DEBUG]: 400,\n};\n\nexport class Logger extends Emitter implements LoggerInterface {\n\n static LOG_EVENT: string = 'logEvent';\n\n static maxDeprecatedWarnings: number = 1;\n static deprecatedCounts: Record = {};\n\n static error(e: any): void {\n console && console.error(e);\n }\n\n static warn(m: any): void {\n console && console.warn(m);\n }\n\n static log(m: any): void {\n console && console.log(m);\n }\n\n /**\n * @deprecated\n */\n static deprecated(msg: string) {\n if (Logger.deprecatedCounts[msg] >= Logger.maxDeprecatedWarnings) {\n return;\n }\n\n Logger.warn(msg);\n Logger.deprecatedCounts[msg] = (Logger.deprecatedCounts[msg] || 0) + 1;\n }\n\n protected override opts: LoggerOptions;\n protected tzero: number;\n\n private useConsole: boolean = false;\n private pLogLevel: LogLevel;\n private readonly id: string;\n\n constructor(opts: LoggerOptions) {\n super(opts);\n\n this.useConsole = Util.isObject(console);\n this.id = opts.id || Util.uid8();\n this.tzero = Date.now();\n this.logLevel = Util.isEmpty(this.opts.logLevel) ? LogLevel.OFF : this.opts.logLevel;\n }\n\n get logLevel(): LogLevel {\n return this.pLogLevel;\n }\n\n set logLevel(level: LogLevel) {\n this.pLogLevel = level;\n }\n\n assert(expression: boolean | any, label?: string): void {\n if (!expression) {\n this.error(`Assertion failed! - \"${label || ''}\"`);\n }\n }\n\n log(logLevel: LogLevel, ...items: any[]): void {\n for (let i = 0, n = items.length; i < n; i++) {\n this.emit(Logger.LOG_EVENT, this.assembleEvent(items[i], logLevel));\n }\n\n if (!this.shouldLog(logLevel)) { return; }\n\n items.unshift(this.getStamp());\n console.log.apply(console, items);\n }\n\n dir(logLevel: LogLevel, obj: StrAnyDict, label: string): void {\n const lbl = label || 'Unnamed Object';\n this.emit(Logger.LOG_EVENT, this.assembleEvent(obj, logLevel, lbl));\n\n if (!this.shouldLog(logLevel)) { return; }\n\n console.log(this.getStamp() + ` Object: ${lbl}`);\n console.dir(obj);\n }\n\n error(msg: string): void {\n this.emit(Logger.LOG_EVENT, this.assembleEvent(msg, LogLevel.ERROR));\n\n if (!this.shouldLog(LogLevel.ERROR)) { return; }\n\n console.error(this.getStamp() + msg);\n }\n\n warn(msg: string): void {\n this.emit(Logger.LOG_EVENT, this.assembleEvent(msg, LogLevel.WARN));\n\n if (!this.shouldLog(LogLevel.WARN)) { return; }\n\n console.warn(this.getStamp() + msg);\n }\n\n private assembleEvent(item: any, level: LogLevel, label: string = null): LogEventInterface {\n return {\n item: item,\n id: this.id,\n level: level,\n label: label\n };\n }\n\n private shouldLog(level: LogLevel) {\n return this.useConsole && Levels[this.pLogLevel] >= Levels[level];\n }\n\n private getStamp() {\n return `[${this.id + '] ' + Util.msToHms(Date.now() - this.tzero)} > `;\n }\n}\n","export class Network {\n static get TIMEOUT() { return 5000; }\n}\n","import { Emitter } from '../core/Emitter';\nimport { StrAnyDict } from '../iface/StrAnyDict';\n\nexport class RecoveryEnabledRequest extends Emitter {\n\n private retryCount: number = 0;\n private limit: number = 0;\n private retryIntervals: number[] | null = null;\n\n constructor(options: StrAnyDict) {\n super(options);\n\n const er = this.opts.errorRecovery;\n\n if (er && !isNaN(er.retryAttempts) && er.retryAttempts > 0) {\n this.limit = er.retryAttempts; \n }\n\n if (er && er.retryIntervals && Array.isArray(er.retryIntervals)) {\n this.retryIntervals = er.retryIntervals; \n }\n }\n\n protected shouldRetry(): boolean {\n return this.limit && !this.atLimit;\n }\n\n protected incrementAttempts(): void {\n this.retryCount++;\n }\n\n protected get retryLimit(): number {\n return this.limit;\n }\n\n protected get atLimit(): boolean {\n return this.retryCount == this.limit;\n }\n\n protected get retryInterval(): number {\n return (this.retryIntervals && this.retryIntervals[this.retryCount - 1]) || this.retryCount * 300;\n }\n}","import { Util } from \"../core/Util\";\nimport { Network } from '../enum/Network';\nimport { EventHandler } from \"../iface/EventHandler\";\nimport { ScriptLoaderComplete } from '../iface/ScriptLoaderComplete';\nimport { ScriptLoaderOptions } from \"../iface/ScriptLoaderOptions\";\nimport { StrAnyDict } from \"../iface/StrAnyDict\";\nimport { StrStrDict } from \"../iface/StrStrDict\";\nimport { RecoveryEnabledRequest } from './RecoveryEnabledRequest';\n\nexport type ScriptLoadOptions = Partial;\n\nexport class ScriptLoader extends RecoveryEnabledRequest {\n\n static event: StrStrDict = {\n COMPLETE: \"complete\"\n };\n\n private timeoutHandles: StrAnyDict | null;\n private map: StrAnyDict;\n\n static load(options: ScriptLoadOptions): Promise {\n return new Promise((resolve, reject) => {\n options.onComplete = ({ data }: StrAnyDict) => (data.error || data.timedOut) ? reject(data) : resolve(data);\n new ScriptLoader(options);\n });\n }\n\n constructor(options: ScriptLoaderOptions) {\n const opts = Util.assign({ timeout: Network.TIMEOUT, }, options || {});\n\n if (!opts.timeout) {\n opts.timeout = Network.TIMEOUT;\n }\n\n super(opts);\n\n this.timeoutHandles = {};\n this.map = {};\n\n let hasListener = this.hasListenerFor(ScriptLoader.event.COMPLETE);\n\n if (this.opts.url && hasListener) {\n this.loadScript(this.opts.url);\n }\n else if (this.opts.urls && hasListener) {\n this.loadScripts(this.opts.urls);\n }\n else {\n throw new Error(`Script load error: Missing url or listener. url: ${this.opts.url || this.opts.urls}, hasListener: ${hasListener}`);\n }\n }\n\n override destroy() {\n if (!this.timeoutHandles) {\n return;\n }\n\n for (let q in this.timeoutHandles) {\n clearTimeout(this.timeoutHandles[q]);\n }\n this.timeoutHandles = null;\n super.destroy();\n }\n\n loadScript(scriptUrl: string, completeListener?: EventHandler): void {\n const scr = document.createElement('script'),\n sec = window.location.protocol === 'https:',\n url = sec ? scriptUrl.replace('http:', 'https:') : scriptUrl;\n\n this.map[url] = {\n hLoad: () => this.hLoadOrError(url),\n hError: () => this.hLoadOrError(url, true, false),\n scriptEl: scr\n };\n\n const mapObj = this.map[url];\n\n completeListener && this.on(ScriptLoader.event.COMPLETE, completeListener);\n\n scr.async = true;\n scr.addEventListener('load', mapObj.hLoad);\n scr.addEventListener('error', mapObj.hError);\n\n this.timeoutHandles[url] = setTimeout(\n () => this.hLoadOrError(url, true, true),\n this.opts.timeout\n );\n\n document.head.appendChild(scr);\n scr.src = url;\n }\n\n loadScripts(urls: string[], completeListener?: EventHandler) {\n completeListener && this.on(ScriptLoader.event.COMPLETE, completeListener);\n\n for (let i = 0, n = urls.length; i < n; i++) {\n this.loadScript(urls[i]);\n }\n }\n\n private hLoadOrError(url: string, error?: boolean, timedOut?: boolean): void {\n\n clearTimeout(this.timeoutHandles[url]);\n delete this.timeoutHandles[url];\n\n let mapObj: StrAnyDict = this.map[url];\n mapObj.scriptEl.removeEventListener('load', mapObj.hLoad);\n mapObj.scriptEl.removeEventListener('error', mapObj.hError);\n\n for (let q in mapObj) { delete mapObj[q]; }\n delete this.map[url];\n\n // VTG-1763: Add retries on error. Note that if we're loading multiple scripts (via array to loadScripts()), \n // each script that fails will increment the retry count, which is \n // limited to options.retryAttempts in total among the files being requested.\n if (error && this.shouldRetry()) {\n this.incrementAttempts();\n setTimeout(() => { this.loadScript(url); }, this.retryInterval);\n }\n else {\n this.emit(ScriptLoader.event.COMPLETE, {\n url: url,\n error: error,\n timedOut: timedOut === true\n });\n }\n }\n}\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {Object} val The value to test\n * @return {boolean} True if value is a plain Object, otherwise false\n */\nfunction isPlainObject(val) {\n if (toString.call(val) !== '[object Object]') {\n return false;\n }\n\n var prototype = Object.getPrototypeOf(val);\n return prototype === null || prototype === Object.prototype;\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (isPlainObject(result[key]) && isPlainObject(val)) {\n result[key] = merge(result[key], val);\n } else if (isPlainObject(val)) {\n result[key] = merge({}, val);\n } else if (isArray(val)) {\n result[key] = val.slice();\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n * @return {string} content value without BOM\n */\nfunction stripBOM(content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim,\n stripBOM: stripBOM\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar cookies = require('./../helpers/cookies');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (!requestData) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];\n var defaultToConfig2Keys = [\n 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',\n 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'\n ];\n var directMergeKeys = ['validateStatus'];\n\n function getMergedValue(target, source) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge(target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n function mergeDeepProperties(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n }\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (!utils.isUndefined(config2[prop])) {\n config[prop] = getMergedValue(undefined, config2[prop]);\n } else if (!utils.isUndefined(config1[prop])) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n utils.forEach(directMergeKeys, function merge(prop) {\n if (prop in config2) {\n config[prop] = getMergedValue(config1[prop], config2[prop]);\n } else if (prop in config1) {\n config[prop] = getMergedValue(undefined, config1[prop]);\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys)\n .concat(directMergeKeys);\n\n var otherKeys = Object\n .keys(config1)\n .concat(Object.keys(config2))\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, mergeDeepProperties);\n\n return config;\n};\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\n// Expose isAxiosError\naxios.isAxiosError = require('./helpers/isAxiosError');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","'use strict';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nmodule.exports = function isAxiosError(payload) {\n return (typeof payload === 'object') && (payload.isAxiosError === true);\n};\n","module.exports = require('./lib/axios');","import { Network } from '../enum/Network';\nimport { XhrResponseType } from '../enum/XhrResponseType';\nimport { AsyncDataRequestOptionsInterface } from '../iface/AsyncDataRequestOptionsInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\n\nexport class AsyncDataRequestOptions {\n\n protected constructor() { }\n\n static create(options: AsyncDataRequestOptionsInterface): AsyncDataRequestOptionsInterface {\n\n return {\n url: options.url || '',\n method: options.method || 'get',\n timeout: options.timeout || Network.TIMEOUT,\n headers: options.headers || {},\n data: this.getBody(options.data, options.encodeList, options.sendJson),\n withCredentials: options.withCredentials === true,\n responseType: options.responseType || XhrResponseType.JSON,\n onComplete: options.onComplete || null,\n errorRecovery: options.errorRecovery || null\n };\n }\n\n /**\n * @param objOrStr - can be a plain object or string\n * @param enc - if supplying an object, an array of property names whose values should be encoded\n * @param asJson - set TRUE if the body should be sent as a JSON string\n */\n private static getBody(objOrStr: StrAnyDict | string, enc: string[], asJson: boolean = false): string {\n if (!objOrStr) return null;\n if (typeof objOrStr === 'string') return objOrStr;\n if (!Object.keys(objOrStr).length) return null;\n\n const useEnc = Array.isArray(enc) && enc.length;\n !useEnc && (enc = []);\n\n for (let q in objOrStr) {\n objOrStr[q] = this.getValue(q, objOrStr[q], enc);\n }\n\n // return JSON\n if (asJson) {\n return JSON.stringify(objOrStr);\n }\n\n // return string (form-urlencoded)\n let str = '', v;\n\n for (let q in objOrStr) {\n v = objOrStr[q];\n v !== null && v != undefined && v != '' && (str += `${q}=${v}&`);\n }\n str = str.substr(0, str.length - 1);\n\n return str;\n }\n\n private static getValue(name: string, val: string, enc: string[]): string {\n return enc.indexOf(name) >= 0 ? encodeURIComponent(val) : val;\n }\n\n}\n","import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';\nimport { Util } from '../core/Util';\nimport { AsyncDataRequestOptionsInterface } from \"../iface/AsyncDataRequestOptionsInterface\";\nimport { RequestOptionsInterface } from '../iface/RequestOptionsInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { StrStrDict } from \"../iface/StrStrDict\";\nimport { XhrResponseInterface } from \"../iface/XhrResponseInterface\";\nimport { AsyncDataRequestOptions } from './AsyncDataRequestOptions';\nimport { RecoveryEnabledRequest } from './RecoveryEnabledRequest';\n\n/*\nXHR package\n https://github.com/axios/axios\n*/\n\nexport class AsyncDataRequest extends RecoveryEnabledRequest {\n\n static event: StrStrDict = {\n COMPLETE: \"complete\"\n };\n\n static statusMessages: StrStrDict = {\n '0': 'Request failed; blocked or timed out',\n '500': 'Server error encountered.',\n '404': 'Resource not found.',\n '403': 'Access denied.'\n };\n\n static load(options: RequestOptionsInterface): Promise {\n return new Promise((resolve, reject) => {\n const requestOptions = options as AsyncDataRequestOptionsInterface;\n requestOptions.onComplete = ({ data }: StrAnyDict) => {\n if (data.error || data.timedOut) {\n reject(data);\n }\n else {\n resolve(data);\n }\n };\n new AsyncDataRequest(requestOptions);\n });\n }\n\n constructor(options: AsyncDataRequestOptionsInterface) {\n super(AsyncDataRequestOptions.create(options));\n\n if (this.opts.url) {\n this.createXhr();\n }\n }\n\n createXhr(): void {\n axios(this.opts)\n .then((response: AxiosResponse) => {\n if (response.headers['content-type']?.indexOf('application/smil') >= 0) {\n response.data = this.processSmilResponse(response.data);\n }\n if (response.status != 204 && response.data === null) {\n this.emitCompleteWithError('Unable to parse response.', response.config);\n }\n else {\n // This is on a timeout to avoid triggering the catch clause \n // if a downstream exception occurs in response handling code.\n setTimeout(() => { this.emitComplete(response); }, 1);\n }\n })\n .catch((error) => {\n if (this.shouldRetry()) {\n this.incrementAttempts();\n setTimeout(() => { this.createXhr(); }, this.retryInterval);\n }\n else {\n const msg = error.response || AsyncDataRequest.statusMessages['0'];\n this.emitCompleteWithError(msg, error.config);\n }\n });\n }\n\n private emitComplete(res: AxiosResponse) {\n this.emit(AsyncDataRequest.event.COMPLETE, {\n response: res.data,\n contentType: res.headers['content-type'],\n error: false\n });\n }\n\n private emitCompleteWithError(errResponse: XhrResponseInterface | string, cfg: AxiosRequestConfig): void {\n const msg = Util.isString(errResponse) ? errResponse : null,\n res = !msg ? errResponse : null;\n\n this.emit(AsyncDataRequest.event.COMPLETE, {\n status: res && res.status,\n error: true,\n url: cfg && cfg.url || 'not available',\n message: msg || this.getMsg(res && res.status || 0, res && res.data || null)\n });\n }\n\n private getMsg(stat: number, errorData: any): string {\n let m = AsyncDataRequest.statusMessages['' + stat];\n\n if (!m) {\n m = Util.isString(errorData) ? errorData : \"Unspecified error\";\n }\n\n return \"XhrDataRequest error: \" + m;\n }\n\n private processSmilResponse(data: string): any {\n const parser = new DOMParser(),\n parsedData = parser.parseFromString(data, 'application/xml');\n\n return parsedData instanceof Document ? parsedData : null;\n }\n}\n","import { StrAnyDict } from \"../iface/StrAnyDict\";\nimport { StrStrDict } from \"../iface/StrStrDict\";\nimport { Util } from \"./Util\";\n\nexport class QueryString {\n\n\tstatic encode(obj: any): string {\n\t\tif (Util.isEmpty(obj)) {\n\t\t\treturn '';\n\t\t}\n\t\tconst str: string[] = Util.entries(obj).map(([k, v]) => k + \"=\" + encodeURIComponent(v));\n\t\treturn str.join(\"&\");\n\t}\n\n\tstatic decode(uri: string): StrAnyDict {\n\t\tconst results = {} as StrAnyDict;\n\n\t\tif (uri == null) {\n\t\t\treturn results;\n\t\t}\n\n\t\turi\n\t\t\t.replace(/^[^?]*\\?/, '')\n\t\t\t//@ts-ignore\n\t\t\t.replace(new RegExp('([^?=&]+)(=([^&]*))?', 'g'), ($0: string, $1: string, $2: string, $3: string) => {\n\t\t\t\tlet value;\n\n\t\t\t\ttry {\n\t\t\t\t\tvalue = Util.isUndefined($3) ? $3 : decodeURIComponent($3);\n\t\t\t\t}\n\t\t\t\tcatch (error) {\n\t\t\t\t\tvalue = $3;\n\t\t\t\t}\n\n\t\t\t\tresults[decodeURIComponent($1)] = value;\n\t\t\t});\n\n\t\treturn results;\n\t}\n\n\tstatic parseValue(value: string): any {\n\t\tif (Util.isUndefined(value)) {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet temp: any = value.toLowerCase();\n\t\tif (temp === \"true\" || temp === \"false\") {\n\t\t\treturn temp === \"true\";\n\t\t}\n\n\t\tif (value === \"undefined\") {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (temp === \"null\") {\n\t\t\treturn null;\n\t\t}\n\n\t\ttemp = parseFloat(value);\n\t\tif (!isNaN(temp)) {\n\t\t\treturn temp;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tstatic parse(uri: string): StrAnyDict {\n\t\tconst params = QueryString.decode(uri);\n\t\tfor (const k in params) {\n\t\t\tparams[k] = QueryString.parseValue(params[k]);\n\t\t}\n\t\treturn params;\n\t}\n\n\tstatic append(url: string, params: StrStrDict) {\n\t\tconst prefix = Util.includes(url, '?') ? '&' : '?';\n\t\treturn url + prefix + QueryString.encode(params);\n\t}\n}\n","import { AsyncDataRequest } from '../dataservice/AsyncDataRequest';\nimport { RequestOptionsInterface } from \"../iface/RequestOptionsInterface\";\nimport { QueryString } from './QueryString';\n\n/**\n * Helper function for making simple HTTP requests.\n * \n * @param options \n */\nexport function request(options: RequestOptionsInterface): Promise {\n\tif (options.query) {\n\t\toptions.url = QueryString.append(options.url, options.query);\n\t}\n\treturn AsyncDataRequest.load(options).then(xhr => xhr.response);\n}\n","import { Util } from \"../../core/Util\";\n\nexport class WebVTTParser {\n\n /**\n * Parses a single WebVTT caption into a CaptionCue.\n *\n * @param {String} txt The text of the caption\n * @return {CaptionCue} The CaptionCue\n */\n static parseCaption(caption: string, id = 0, style: Record = {}) {\n // split up the caption parts\n const parts = caption.trim().split(\"\\n\");\n const timecode = /([0-9:.]+)\\s*-->\\s*([0-9:.]+)([^\\n]*)/;\n const setting = /\\s*([A-Za-z]+)\\s*:\\s*([\\w\\-%]+)/g;\n\n try {\n if (!timecode.test(parts[0])) {\n id = parseInt(parts.shift());\n }\n const times = parts[0].match(timecode).slice(1);\n const settings = times[2];\n const startTime = Util.hmsToSec(times[0]);\n const endTime = Util.hmsToSec(times[1]);\n const text = parts.slice(1).join(\"\\n\");\n\n // parse the settings if they exists, and apply them to the cue\n if (settings != null) {\n settings.replace(setting, (match, key, value) => style[key] = value);\n }\n\n // create generic cue\n return { id, startTime, endTime, text, ...style};\n } \n catch (error) {\n // Should we log these errors?\n return null;\n }\n }\n\n /**\n * Parses a WebVTT file into CaptionCue objects and attaches them to a given track.\n *\n * @param txt The text of the webvtt file\n * @return The populated caption track\n */\n static parse(txt: string) {\n // replace windows line breaks\n txt = txt.replace(/\\r/g, '');\n\n // split up the caption chunks\n const captions = txt.split(\"\\n\\n\");\n \n // parse each multi-line chunk\n const ignore = /^(WEBVTT|NOTE|STYLE)/;\n const cues = captions.reduce((acc, caption) => {\n if (!(ignore.test(caption) || !caption)) {\n const cue = this.parseCaption(caption, acc.length);\n if (cue) {\n acc.push(cue);\n }\n }\n return acc;\n }, []);\n \n return cues;\n }\n}\n","export enum ServiceName {\n ImaAd = 'ImaAd',\n DaiAd = \"DaiAd\",\n System = 'System',\n MediaCapabilities = 'MediaCapabilities',\n Logging = 'Logging',\n Tracking = 'Tracking',\n TrackingService = 'TrackingService',\n AutoplayCapabilities = 'AutoplayCapabilities'\n}\n","import { request } from '../../core/Request';\nimport { Util } from \"../../core/Util\";\nimport { XhrResponseType } from '../../enum/XhrResponseType';\nimport { ThumbnailCueInterface } from \"../../iface/ThumbnailCueInterface\";\nimport { WebVTTParser } from \"../util/WebVTTParser\";\n\nexport class ThumbnailTrackSurface {\n\n url: string;\n cues: ThumbnailCueInterface[];\n\n constructor(url: string, cues: ThumbnailCueInterface[]) {\n this.url = url;\n this.cues = cues;\n }\n\n getCueAt(time: number) {\n return Util.find(this.cues, cue => cue.startTime <= time && cue.endTime >= time);\n }\n\n renderCueAt(time: number, container: HTMLElement) {\n ThumbnailTrackSurface.renderThumbnail(this.getCueAt(time), container);\n }\n\n static create(url: string) {\n const a = document.createElement(\"a\");\n a.href = url;\n const absolute = a.protocol + \"//\" + a.hostname;\n const relative = absolute + a.pathname.split(\"/\").slice(0, -1).join(\"/\") + \"/\";\n\n return request({ url, responseType: XhrResponseType.TEXT })\n .then((response) => {\n const cues = WebVTTParser.parse(response);\n cues.forEach((cue) => {\n const [file, params] = cue.text.split(\"#\");\n let src = file;\n if (!/^(https?:)?\\/\\//.test(src)) {\n if (/^\\//.test(src)) {\n src = absolute + src;\n } else {\n src = relative + src;\n }\n }\n const kv = params.split(\"=\");\n const keys = kv[0];\n const values = kv[1].split(\",\");\n const style: Record = {\n backgroundImage: `url(${src})`\n\n };\n const data: Record = { url: src };\n\n Util.forEach(keys, (key, i) => {\n const value = values[i];\n\n switch (key) {\n case \"w\":\n data.width = parseInt(value);\n style.width = `${value}px`;\n break;\n\n case \"h\":\n data.height = parseInt(value);\n style.height = `${value}px`;\n break;\n\n case \"x\":\n data.x = parseInt(value);\n style.backgroundPositionX = `-${value}px`;\n break;\n\n case \"y\":\n data.y = parseInt(value);\n style.backgroundPositionY = `-${value}px`;\n }\n });\n\n cue.style = style;\n cue.data = data;\n });\n\n return new ThumbnailTrackSurface(url, cues);\n });\n }\n\n static renderThumbnail(cue: ThumbnailCueInterface, container: HTMLElement) {\n if (cue?.style && container?.style) {\n Util.assign(container.style, cue.style);\n }\n }\n}\n","import { ScriptLoader, ScriptLoadOptions } from '../dataservice/ScriptLoader';\nimport { Browser } from '../enum/Browser';\nimport { XhrResponseType } from '../enum/XhrResponseType';\nimport { SystemServiceInterface } from '../iface';\nimport { RequestOptionsInterface } from \"../iface/RequestOptionsInterface\";\nimport { ThumbnailCueInterface } from '../iface/ThumbnailCueInterface';\nimport { ThumbnailTrackSurface } from '../playback/surface/ThumbnailTrackSurface';\nimport { request } from './Request';\nimport { Util } from './Util';\n\n// NOTE: This class is simply a wrapper for util classes/functions that needed to be separated due to circular reference issues.\nexport class Utilities extends Util {\n /**\n * Render a thumbnail cue into a given container.\n */\n static renderThumbnail(cue: ThumbnailCueInterface, container: HTMLElement): void {\n ThumbnailTrackSurface.renderThumbnail(cue, container);\n }\n\n /**\n * Helper function for making simple HTTP requests.\n */\n static request(options: RequestOptionsInterface): Promise {\n return request(options);\n }\n\n /**\n * Helper function for loading external JS files.\n */\n static loadScript(options: ScriptLoadOptions): Promise {\n return ScriptLoader.load(options);\n }\n\n /**\n * Helper function for converting a SMPTE file to a VTT cue array\n */\n static async smpteToVtt(url: string, textTrack: TextTrack, system: SystemServiceInterface) {\n const xml: XMLDocument = await Utilities.request({ url, responseType: XhrResponseType.DOCUMENT });\n const smpteCues = xml.querySelectorAll('tt body div p');\n\n if (!smpteCues.length) {\n throw new Error(`No cues found in ${url}`);\n }\n\n const align = system.browser === Browser.SAFARI ? 'middle' : 'center';\n const lineOffset = system.browser === Browser.SAFARI ? -1 : 0;\n const isVTTCueSupported = system.global.VTTCue !== undefined;\n const Cue: typeof VTTCue = isVTTCueSupported ? system.global.VTTCue : system.global.TextTrackCue;\n\n smpteCues.forEach((item, i, cues) => {\n if (Utilities.isEmpty(item.textContent)) {\n return;\n }\n\n // Convert old tags. \n const text = item.textContent\n .replace(/(.*)(.*)<\\/span>(.*)/g, '$1$2$3')\n .replace(/(.*)(.*)<\\/span>(.*)/g, '$1$2$3')\n .replace(/(.*)(.*)<\\/span>(.*)/g, '$1$2$3');\n\n // Count lines for positioning.\n const lc = Utilities.getNumLines(text);\n // @ts-ignore\n item._lineCountPrev = item._lineCountPrev || 0;\n // @ts-ignore\n item._lineCountNext = item._lineCountNext || 0;\n\n let n = i + 1;\n let nextItem = cues[n];\n\n const begin = item.getAttribute('begin');\n\n // Determine number of lines for each start time.\n while (nextItem?.getAttribute('begin') === begin) {\n // @ts-ignore\n nextItem._lineCountPrev = lc + item._lineCountNext;\n // @ts-ignore\n item._lineCountNext += Utilities.getNumLines(nextItem.textContent);\n nextItem = cues[++n];\n }\n\n const cue = new Cue(Utilities.hmsToSec(begin), Utilities.hmsToSec(item.getAttribute('end')), text);\n cue.align = item.getAttribute('tts:textAlign') as AlignSetting;\n\n // Can only add position data to VTTCue, Edge only supports TextTrackCue\n if (isVTTCueSupported) {\n // @ts-ignore\n const metadata = item.querySelector('metadata');\n // TODO: This should be normalized with _setPosition?? FROM OLD PLAYER TODO\n if (metadata) {\n cue.snapToLines = true; // Ensures lines don't overlap.\n\n const col = parseInt(metadata.getAttribute('cccol'));\n const row = parseInt(metadata.getAttribute('ccrow'));\n\n // NOTE: `cccol` has a max of 35.\n const position = Math.round(col / 35 * 100);\n cue.position = position;\n\n // VTG-1399: Safari v12.1 does not accept 'middle' - must be 'center; but previous version need middle.\n try {\n // @ts-ignore - middle is not an AlignSetting, but old safari does not conform with center!! \n cue.align = position < 45 ? 'start' : position > 55 ? 'end' : align;\n }\n catch (error) {\n cue.align = 'center';\n }\n\n cue.positionAlign = position < 45 ? 'line-left' : position > 55 ? 'line-right' : 'center';\n\n // NOTE: `ccrow` has a max of 15. Subtract 2 lines to bring text\n // above control bar. Negative numbers indicate bottom\n // up, where -1 is absolute bottom.\n cue.line = row - 17 + lineOffset;\n }\n }\n\n try {\n textTrack.addCue(cue);\n }\n catch (error) {\n // ignore errors\n }\n });\n }\n}\n","export enum AccessibilityAction { \n ENTER_FULLSCREEN = 'enterFullScreen',\n INCREASE_VOLUME = 'increaseVolume',\n DECREASE_VOLUME = 'decreaseVolume',\n SEEK_BACK = 'seekBack',\n SEEK_FORWARD = 'seekForward',\n TOGGLE_PLAY = 'togglePlay',\n TOGGLE_TT = 'toggleTextTrack',\n TOGGLE_MUTE = 'toggleMute',\n PLAYLIST_NEXT = 'playListNext',\n PLAYLIST_PREV = 'playListPrev',\n STOP = 'stop',\n}\n","export enum DiagnosticAction {\n DIAGNOSTIC_PLUGIN = 'toggleDiagnosticPlugin',\n CONFIG_TO_CLIPBOARD = 'configToClipboard',\n CONFIG_TO_TEST_PAGE = 'configToTestPage',\n}","export enum NativePlugin {\n /**\n * Will prompt for a replay of last played resource at playlist end\n */\n REPLAY = 'replay',\n\n /**\n * Debugging and diagnostic panel\n */\n DIAGNOSTIC = 'diagnostic',\n\n /**\n * Player UI\n */\n UI = 'ui',\n\n /**\n * Google Ad Manager\n */\n GAM = 'gam',\n}\n","\n// Non-printing keys; used mainly for Accessibility\nexport enum NonPrintingKey {\n SPACE = ' ',\n ENTER = 'Enter',\n TAB = 'Tab',\n CONTROL = 'Control',\n SHIFT = 'Shift',\n ESCAPE = 'Escape',\n META = 'Meta',\n ARROW_LEFT = 'ArrowLeft',\n ARROW_RIGHT = 'ArrowRight',\n ARROW_UP = 'ArrowUp',\n ARROW_DOWN = 'ArrowDown',\n}\n","/**\n * see [Plugins](../../guides/Plugins.md) for details.\n */\nexport enum PluginPriority {\n /**\n * Low priority plugins load after content starts\n */\n LOW = 'low',\n\n /**\n * High priority plugins load before content starts\n */\n HIGH = 'high',\n}\n","const buildInfo = Object.freeze({\n env: '__ENV__',\n playerVersion: '__PLAYER_VER__',\n playerName: '__PLAYER_NAME__',\n buildTime: '__BUILD_TIME__',\n});\n\nexport { buildInfo };\n","\nexport const KeyCode = {\n ALT: 18,\n BACKSPACE: 8,\n CAPS_LOCK: 20,\n CONTROL: 17,\n END: 35,\n ENTER: 13,\n TAB: 9,\n SHIFT: 16,\n ESCAPE: 27,\n PAGE_UP: 33,\n PAGE_DOWN: 34,\n LEFT_ARROW: 37,\n UP_ARROW: 38,\n RIGHT_ARROW: 39,\n DOWN_ARROW: 40,\n INSERT: 45,\n DELETE: 46,\n SPACE: 32,\n \"0\": 48,\n \"1\": 49,\n \"2\": 50,\n \"3\": 51,\n \"4\": 52,\n \"5\": 53,\n \"6\": 54,\n \"7\": 55,\n \"8\": 56,\n \"9\": 57,\n A: 65,\n B: 66,\n C: 67,\n D: 68,\n E: 69,\n F: 70,\n G: 71,\n H: 72,\n I: 73,\n J: 74,\n K: 75,\n L: 76,\n M: 77,\n N: 78,\n O: 79,\n P: 80,\n Q: 81,\n R: 82,\n S: 83,\n T: 84,\n U: 85,\n V: 86,\n W: 87,\n X: 88,\n Y: 89,\n Z: 90,\n NUM_0: 96,\n NUM_1: 97,\n NUM_2: 98,\n NUM_3: 99,\n NUM_4: 100,\n NUM_5: 101,\n NUM_6: 102,\n NUM_7: 103,\n NUM_8: 104,\n NUM_9: 105,\n MULTIPLY: 106,\n ADD: 107,\n SUBTRACT: 109,\n DECIMAL: 110,\n DIVIDE: 111,\n SEMICOLON: 186,\n EQUAL: 187,\n COMMA: 188,\n DASH: 189,\n PERIOD: 190,\n FORWARD_SLASH: 191,\n BACKSLASH: 220,\n GRAVE_ACCENT: 192,\n OPEN_BRACKET: 219,\n CLOSE_BRACKET: 221,\n SINGLE_QUOTE: 222,\n MEDIA_TOGGLE_PLAY: 179,\n MEDIA_TOGGLE_MUTE: 173,\n MEDIA_STOP: 178,\n MEDIA_INCREASE_VOLUME: 175, \n MEDIA_INCREASE_VOLUME_ALT: 183,\n MEDIA_DECREASE_VOLUME: 174,\n MEDIA_DECREASE_VOLUME_ALT: 182,\n MEDIA_PLAYLIST_NEXT: 176,\n MEDIA_PLAYLIST_PREV: 177,\n};\n","export enum QualityMode {\n AUTO = 'auto',\n MANUAL = 'manual',\n UNAVAILABLE = 'unavailable',\n}\n","export enum TextTrackSurfaceEvents {\n METADATA_CUEPOINT = 'metadataCuepoint',\n TEXT_CUEPOINT = 'textCuepoint',\n TEXT_TRACK_DISPLAY_MODE_CHANGE = 'textTrackModeChange',\n TEXT_TRACK_ADDED = 'textTrackAdded',\n TEXT_TRACK_CHANGE = 'textTrackChange',\n TEXT_TRACK_AVAILABLE = 'textTrackAvailable'\n}","export enum TextTrackType {\n SUBTITLES = 'subtitles', \n CAPTIONS = 'captions', \n METADATA = 'metadata', \n DESCRIPTIONS = 'descriptions', \n CHAPTERS = 'chapters' \n}","export enum VideoSurfaceEvents {\n ABORT = 'abort',\n CAN_PLAY = 'canplay',\n CAN_PLAY_THROUGH = 'canplaythrough',\n DURATION_CHANGE = 'durationchange',\n ENDED = 'ended',\n ERROR = 'error',\n LOADED_METADATA = 'loadedmetadata',\n LOAD_START = 'loadstart',\n PAUSE = 'pause',\n PLAY = 'play',\n PLAYING = 'playing',\n PROGRESS = 'progress',\n RATE_CHANGE = 'ratechange',\n SEEKED = 'seeked',\n SEEKING = 'seeking',\n STALLED = 'stalled',\n TIME_UPDATE = 'timeupdate',\n WEBKIT_NEED_KEY = 'webkitneedkey',\n VOLUME_CHANGE = 'volumechange',\n AUTOPLAY_BLOCKED = 'autoplayblocked',\n}\n","export enum TextTrackEvent {\n CUE_CHANGE = 'cuechange',\n ADD_TRACK = 'addtrack',\n CHANGE = 'change'\n}\n","export enum TextTrackMode {\n SHOWING = 'showing',\n HIDDEN = 'hidden',\n DISABLED = 'disabled'\n}\n","import { buildInfo } from '../core/BuildInfo';\nimport { Util } from '../core/Util';\nimport { AccessibilityAction } from '../enum/AccessibilityAction';\nimport { DiagnosticAction } from '../enum/DiagnosticAction';\nimport { NativePlugin } from '../enum/NativePlugin';\nimport { NonPrintingKey } from '../enum/NonPrintingKey';\nimport { PluginPriority } from '../enum/PluginPriority';\nimport { AppMessageInterface, KeyCommandDef } from '../iface';\nimport { PluginConfigInterface } from '../iface/PluginConfigInterface';\nimport { KeyCode } from '../util/KeyCode';\n\nexport class AppResources {\n\n protected constructor() { }\n\n static blankVideoUrl: string = 'https://vidtech.cbsinteractive.com/h5/blanks/uvp_blank.mp4';\n\n static blankDataUrl: string = 'data:video/mp4;base64,AAAAHGZ0eXBpc29tAAACAGlzb21pc28ybXA0MQAAAAhmcmVlAAAC721kYXQhEAUgpBv/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3pwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcCEQBSCkG//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADengAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAsJtb292AAAAbG12aGQAAAAAAAAAAAAAAAAAAAPoAAAALwABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAB7HRyYWsAAABcdGtoZAAAAAMAAAAAAAAAAAAAAAIAAAAAAAAALwAAAAAAAAAAAAAAAQEAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAAC8AAAAAAAEAAAAAAWRtZGlhAAAAIG1kaGQAAAAAAAAAAAAAAAAAAKxEAAAIAFXEAAAAAAAtaGRscgAAAAAAAAAAc291bgAAAAAAAAAAAAAAAFNvdW5kSGFuZGxlcgAAAAEPbWluZgAAABBzbWhkAAAAAAAAAAAAAAAkZGluZgAAABxkcmVmAAAAAAAAAAEAAAAMdXJsIAAAAAEAAADTc3RibAAAAGdzdHNkAAAAAAAAAAEAAABXbXA0YQAAAAAAAAABAAAAAAAAAAAAAgAQAAAAAKxEAAAAAAAzZXNkcwAAAAADgICAIgACAASAgIAUQBUAAAAAAfQAAAHz+QWAgIACEhAGgICAAQIAAAAYc3R0cwAAAAAAAAABAAAAAgAABAAAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAIAAAABAAAAHHN0c3oAAAAAAAAAAAAAAAIAAAFzAAABdAAAABRzdGNvAAAAAAAAAAEAAAAsAAAAYnVkdGEAAABabWV0YQAAAAAAAAAhaGRscgAAAAAAAAAAbWRpcmFwcGwAAAAAAAAAAAAAAAAtaWxzdAAAACWpdG9vAAAAHWRhdGEAAAABAAAAAExhdmY1Ni40MC4xMDE=';\n\n static userKeyCmdDefs: KeyCommandDef[] = [\n {\n action: DiagnosticAction.DIAGNOSTIC_PLUGIN,\n primaryKey: 'd',\n keyCode: KeyCode.D,\n requireCtrl: true,\n requireShift: true\n },\n {\n action: DiagnosticAction.CONFIG_TO_CLIPBOARD,\n primaryKey: 'c',\n keyCode: KeyCode.C,\n requireCtrl: true,\n requireShift: true\n },\n {\n action: DiagnosticAction.CONFIG_TO_TEST_PAGE,\n primaryKey: 't',\n keyCode: KeyCode.T,\n requireCtrl: true,\n requireShift: true\n },\n ];\n\n static accessibilityKeyCmdDefs: KeyCommandDef[] = [\n {\n action: AccessibilityAction.ENTER_FULLSCREEN,\n primaryKey: 'f',\n keyCode: KeyCode.F,\n },\n {\n action: AccessibilityAction.INCREASE_VOLUME,\n primaryKey: NonPrintingKey.ARROW_UP,\n keyCode: KeyCode.UP_ARROW,\n },\n {\n action: AccessibilityAction.INCREASE_VOLUME,\n primaryKey: null,\n keyCode: KeyCode.MEDIA_INCREASE_VOLUME,\n },\n {\n action: AccessibilityAction.INCREASE_VOLUME,\n primaryKey: null,\n keyCode: KeyCode.MEDIA_INCREASE_VOLUME_ALT,\n },\n {\n action: AccessibilityAction.DECREASE_VOLUME,\n primaryKey: NonPrintingKey.ARROW_DOWN,\n keyCode: KeyCode.DOWN_ARROW,\n },\n {\n action: AccessibilityAction.DECREASE_VOLUME,\n primaryKey: null,\n keyCode: KeyCode.MEDIA_DECREASE_VOLUME,\n },\n {\n action: AccessibilityAction.DECREASE_VOLUME,\n primaryKey: null,\n keyCode: KeyCode.MEDIA_DECREASE_VOLUME_ALT,\n },\n {\n action: AccessibilityAction.SEEK_BACK,\n primaryKey: NonPrintingKey.ARROW_LEFT,\n keyCode: KeyCode.LEFT_ARROW,\n },\n {\n action: AccessibilityAction.SEEK_FORWARD,\n primaryKey: NonPrintingKey.ARROW_RIGHT,\n keyCode: KeyCode.RIGHT_ARROW,\n },\n {\n action: AccessibilityAction.TOGGLE_PLAY,\n primaryKey: NonPrintingKey.SPACE,\n keyCode: KeyCode.SPACE,\n },\n {\n action: AccessibilityAction.TOGGLE_PLAY,\n primaryKey: null,\n keyCode: KeyCode.MEDIA_TOGGLE_PLAY,\n },\n {\n action: AccessibilityAction.TOGGLE_MUTE,\n primaryKey: 'm',\n keyCode: KeyCode.M,\n },\n {\n action: AccessibilityAction.TOGGLE_MUTE,\n primaryKey: '-',\n keyCode: KeyCode.SUBTRACT,\n },\n {\n action: AccessibilityAction.TOGGLE_MUTE,\n primaryKey: null,\n keyCode: KeyCode.MEDIA_TOGGLE_MUTE,\n },\n {\n action: AccessibilityAction.TOGGLE_TT,\n primaryKey: 'c',\n keyCode: KeyCode.C,\n },\n {\n action: AccessibilityAction.STOP,\n primaryKey: null,\n keyCode: KeyCode.MEDIA_STOP\n },\n {\n action: AccessibilityAction.PLAYLIST_NEXT,\n primaryKey: null,\n keyCode: KeyCode.MEDIA_PLAYLIST_NEXT\n },\n {\n action: AccessibilityAction.PLAYLIST_PREV,\n primaryKey: null,\n keyCode: KeyCode.MEDIA_PLAYLIST_PREV\n },\n ];\n\n static nativePluginConfig = Util.values(NativePlugin).reduce((acc, name) => {\n acc[name] = {\n name,\n url: `https://vidtech.cbsinteractive.com/avia-js/${buildInfo.playerVersion}/plugins/${name}/avia.${name}.min.js`,\n // @ts-ignore \n // eslint-disable-next-line \n factory: (...args) => avia[name].create(...args),\n priority: PluginPriority.HIGH,\n };\n return acc;\n }, {} as Record);\n\n static messages: AppMessageInterface = {\n ABR_UNAVAILABLE: 'Single bitrate stream detected, adaptive bitrate system is unavailable',\n ABR_MANUAL_SWITCHING_REACHED_LOWER_BOUNDS: 'You have reached the lowest available quality for this presentation.',\n ABR_MANUAL_SWITCHING_REACHED_UPPER_BOUNDS: 'You have reached the highest available quality for this presentation at this screen size',\n ABR_MIN_BITRATE_RESTRICTION_UNAVAILABLE: 'Min bitrate restrictions are not offered with this streaming library',\n AD_STALLED: 'Stalled ad detected',\n ADAPTER_UNAVAILABLE: 'Unable to play the requested resource - mediaUrl not recognized',\n ADAPTER_LIB_UNAVAILABLE: 'Unable to play the requested resource - External library is not loading',\n ADAPTER_NOT_FOUND: 'Unable to find an adapater for the requested resource',\n CAP_LEVEL_MAXBITRATE: 'Max bitrate setting will be ignored since capQualityToPlayerSize is enabled',\n CMS_RESOURCE_UNAVAILABLE: 'Resource unavailable',\n CMS_UNKNOWN: 'CMS not supported',\n CONTENT_PLAYBACK_SETTING_IGNORED: 'This API is only available after the CONTENT_START event has been dispatched. This setting will be ignored.',\n DAI_MISSING_ASSET_URL: 'Unexpected condition: valid assetUrl not found in DAI stream data',\n DAI_SDK_UNAVAILABLE: 'A DAI SDK is required for playback, but is not found',\n ENVIRONMENT_NOT_SUPPORTED: 'Unable to locate a global \"window\" object or suitable alternative',\n FAIRPLAY_LICENSE_ERROR: 'Issue with fairplay DRM and the provided license acquisition url',\n FAIRPLAY_APP_CERT_ERROR: 'Issue creating a fairplay keysession with the provided application certificate',\n FAIRPLAY_NO_CONTENT_ID: 'A valid content or asset id was not detected when creating fairplay drm session',\n FAIRPLAY_WEBKIT_ERROR: 'Issue with webkit and keysession creations while using fairplay drm.',\n FATAL_PLAYBACK_MEDIA_ERROR: 'Fatal media error, no option for recovery',\n FATAL_PLAYBACK_NETWORK_ERROR: 'Fatal network error, no option for recovery',\n IMA_SDK_MISSING: 'IMA SDK not found.',\n INVALID_PLAYLIST_INDEX: 'Index provided to Playlist is out of range',\n INVALID_RESOURCE: 'Resource configuration appears to be invalid',\n MANUAL_ABR_SWITCHING_UNAVAILABLE: 'Native HTML5 Video does not allow manual bitrate switching',\n PAUSING_LINEAR_LIVE_STREAM_NOT_ALLOWED: 'StreamType.LIVE is detected. Redirecting to the stop method since a DVR window is not detected.',\n PLUGIN_LOAD_ERROR: 'Unable to load plugin from url',\n RESOURCE_MISSING: 'Resource missing',\n RESOURCE_NOT_SUPPORTED: 'Resource is not recognized or is currently unsupported',\n RETRY_PLAYBACK_MEDIA_ERROR: 'Media error detected',\n RETRY_PLAYBACK_NETWORK_ERROR: 'Network error detected',\n UNEXPECTED_CONDITION: 'An unexpected condition was encountered',\n UNSPECIFIED_ERROR: 'Unspecified error',\n VIDEO_PLAYBACK_UNAVAILABLE: 'Unable to locate a video element or suitable alternative',\n WEBKIT_KEY_ADDED_SUCCESS: 'Webkit key added successfully',\n WEBKIT_MEDIA_KEYS_NOT_SUPPORTED: 'WebKitMediaKeys are not supported for this type of media on this user agent'\n };\n}\n","import { EventTargetInterface } from '../iface/EventTargetInterface';\nimport { VideoPlayerInterface } from '../iface/VideoPlayerInterface';\n\nexport function waitUntil(func: () => boolean, interval = 100): Promise {\n return new Promise((resolve, reject) => {\n const i = setInterval(() => {\n if (func()) {\n clearInterval(i);\n resolve();\n }\n }, interval);\n });\n}\n\nexport function waitForEvent(target: EventTargetInterface, success: string, fail: string | number = 'error', timeout = NaN): Promise {\n if (typeof fail === 'number') {\n timeout = fail;\n }\n\n return new Promise((resolve, reject) => {\n let timeoutId: number;\n const undo: Function[] = [];\n const cleanUp = () => undo.forEach(u => u());\n const apply = (action: Function, event: string) => {\n const on = target.on ? 'on' : 'addEventListener';\n const off = target.off ? 'off' : 'removeEventListener';\n const complete = (e: T, d?: T) => {\n clearTimeout(timeoutId);\n cleanUp();\n action(d || e);\n };\n\n target[on](event, complete);\n undo.push(() => target[off](event, complete));\n };\n\n apply(resolve, success);\n\n if (typeof fail === 'string') {\n apply(reject, fail);\n }\n\n if (timeout > -1) {\n timeoutId = setTimeout(() => {\n cleanUp();\n reject(new Error(\"timeout\"));\n }, timeout);\n }\n });\n}\n\nexport function waitForTime(target: HTMLVideoElement | VideoPlayerInterface, time: number, prop?: string) {\n if (!prop) {\n prop = target instanceof HTMLVideoElement ? 'currentTime' : 'contentTime';\n }\n\n // @ts-ignore\n return waitUntil(() => target[prop] >= time);\n}\n","import { request } from '../../core/Request';\nimport { Util } from '../../core/Util';\nimport { Browser } from '../../enum/Browser';\nimport { XhrResponseType } from '../../enum/XhrResponseType';\nimport { SystemServiceInterface } from '../../iface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\n\n\nexport class SmpteToVttCueConverter {\n\n private url: string;\n private system: SystemServiceInterface;\n private isVTTCueSupported: boolean;\n\n constructor(url: string, system: SystemServiceInterface) {\n this.url = url;\n this.system = system;\n this.isVTTCueSupported = this.system.global.VTTCue !== undefined;\n }\n\n convert(): Promise> {\n return this.loadXml(this.url).then(result => {\n const json = Util.xmlToJson(result);\n const smpteCues: [] = json.tt.body.div.p;\n\n if (smpteCues?.length > 0) {\n const vttCues = this.convertToVTTCues(smpteCues);\n return vttCues;\n }\n\n throw new Error(`No cues found in ${this.url}`);\n });\n }\n\n private loadXml(url: string): Promise {\n return request({ url, responseType: XhrResponseType.DOCUMENT });\n }\n\n //UVPJS Ported code.\n private convertToVTTCues(cues: Array): Array {\n\n let list = [];\n\n for (let i = 0, len = cues.length; i < len; i++) {\n\n const item = cues[i];\n\n let text = item.text;\n if (Util.isEmpty(text)) {\n continue;\n }\n\n //Convert old tags. \n //OPTIMIZE?\n text = text.replace(/(.*)(.*)<\\/span>(.*)/g, '$1$2$3');\n text = text.replace(/(.*)(.*)<\\/span>(.*)/g, '$1$2$3');\n text = text.replace(/(.*)(.*)<\\/span>(.*)/g, '$1$2$3');\n\n // // Count lines for positioning.\n const lc = Util.getNumLines(text);\n item._lineCountPrev = item._lineCountPrev || 0;\n item._lineCountNext = item._lineCountNext || 0;\n\n let n = i + 1;\n let nextItem = cues[n];\n // // Determine number of lines for each start time.\n while ((nextItem && nextItem.begin) === item.begin) {\n nextItem._lineCountPrev = lc + item._lineCountNext;\n item._lineCountNext += Util.getNumLines(nextItem.text);\n nextItem = cues[++n];\n }\n\n const Cue = this.isVTTCueSupported ? this.system.global.VTTCue : this.system.global.TextTrackCue;\n let newCue = new Cue(Util.hmsToSec(item.begin), Util.hmsToSec(item.end), text);\n\n //Can only add position data to VTTCue, Edge only supports TextTrackCue\n if (this.isVTTCueSupported) {\n newCue = this.metadataToPosition(item, newCue);\n }\n list.push(newCue);\n }\n\n return list;\n }\n\n private metadataToPosition(item: StrAnyDict, cue: VTTCue): VTTCue {\n\n const metadata = item.metadata;\n // TODO: This should be normalized with _setPosition?? FROM OLD PLAYER TODO\n if (metadata) {\n cue.snapToLines = true; // Ensures lines don't overlap.\n\n // NOTE: `cccol` has a max of 35.\n const xpos = Math.round(metadata.cccol / 35 * 100);\n cue.position = xpos;\n\n //VTG-1399: Safari v12.1 does not accept 'middle' - must be 'center; but previous version need middle.\n try {\n //@ts-ignore - middle is not an AlignSetting, but old safari does not conform with center!! \n cue.align = xpos < 45 ? 'start' : xpos > 55 ? 'end' : this.getAlignString();\n } catch (e) {\n cue.align = 'center';\n }\n\n cue.positionAlign = xpos < 45 ? 'line-left' : xpos > 55 ? 'line-right' : 'center';\n\n // NOTE: `ccrow` has a max of 15. Subtract 2 lines to bring text\n // above control bar. Negative numbers indicate bottom\n // up, where -1 is absolute bottom.\n cue.line = metadata.ccrow - 17 + this.getLineOffset();\n }\n\n return cue;\n }\n\n private getAlignString(): string {\n return this.system.browser === Browser.SAFARI ? 'middle' : 'center';\n }\n\n private getLineOffset(): number {\n return this.system.browser === Browser.SAFARI ? -1 : 0;\n }\n}\n","export enum ActiveState {\n ACTIVE = 'active',\n INACTIVE = 'inactive',\n IDLE = 'idle',\n}\n","export enum AdapterRole {\n /** The ad adapter role identifier */\n AD = 'ad',\n PLAYBACK = 'playback',\n}\n","export enum AdBreakType {\n PRE = 'PRE',\n MID = 'MID',\n POST = 'POST'\n}\n","\n/**\n * For details on using ad settings, see [Ad Play: IMA & DAI](../../guides/ad_play)\n */\nexport enum AdContext {\n /**\n * Specifies CSAI using IMA\n */\n IMA = 'ima',\n\n /**\n * Specifies a resource that plays a client-side ad using IMA,\n * with no content. This is typically done as means to show a \n * pre-roll ad before a DAI live stream.\n */\n IMA_AD_ONLY = 'ima_ad_only',\n\n /**\n * Specifies SSAI using DAI SDK\n */\n DAI_SDK = 'dai_sdk',\n\n /**\n * Specifies SSAI using a custom SDK \n */\n DAI_API = 'dai_api',\n\n /**\n * Specifies SSAI, non-SDK mediated (ad play not monitored or tracked client-side)\n */\n DAI_SSB = 'dai_ssb',\n\n /**\n * Specifies playback without ads\n */\n NONE = ''\n}\n","export enum AdTechnology {\n SSAI = 'ssai',\n CSAI = 'csai',\n}\n","export enum ApiMetric {\n PLAY = 'play',\n PAUSE = 'pause',\n SEEK = 'seek',\n GO_LIVE = 'go_live',\n}\n","export enum Autoplay {\n NONE = 'none',\n ATTEMPT_MUTED = 'attemptMuted',\n ATTEMPT_UNMUTED = 'attemptUnmuted',\n ATTEMPT_UNMUTED_THEN_MUTED = 'attemptUnmutedThenMuted'\n}\n","\nexport enum Device {\n /** Unspecified Desktop */\n DESKTOP = 'Desktop',\n\n /** Android™ Phone */\n ANDROID_PHONE = 'Android Phone',\n\n /** Windows™ Phone */\n WINDOWS_PHONE = 'Windows Phone',\n\n /** Apple iPhone™ */\n IPHONE = 'iPhone',\n\n /** Apple iPod™ */\n IPOD = 'iPod',\n\n /** Apple iPad™ */\n IPAD = 'iPad',\n\n /** Amazon Kindle™ */\n KINDLE = 'Kindle',\n\n /** Unspecified Tablet */\n TABLET = 'Tablet',\n\n /** Unspecified Mobile */\n MOBILE = 'Mobile',\n\n /** Unspecified Embedded */\n EMBEDDED = 'Embedded',\n\n /** > Only Web0S 3.5 and above is supported */\n LG_SMART_TV = 'LG Smart Tv',\n\n /** Only Vizio Smartcast Devices */\n VIZIO_SMART_TV = 'Vizio Smart Tv',\n\n /** Samsung Tizen Devices */\n SAMSUNG_SMART_TV = 'Samsung Smart Tv',\n\n /** Comcast X1 Devices */\n COMCAST_X1 = 'Comcast X1',\n\n /** Xbox One X one S Devices */\n XBOX_ONE = 'Xbox One',\n\n /** Chromecast */\n CHROMECAST = 'Chromecast',\n\n /** PlayStation 4 */\n PLAYSTATION_4 = 'PlayStation 4',\n\n /** PlayStation 5 */\n PLAYSTATION_5 = 'PlayStation 5',\n\n /** Unspecified or unknown */\n UNKNOWN = 'UNKNOWN'\n}\n","\n/**\n * Errors Events that produce error codes.\n * \n * @see [[PlayerEvent.RESOURCE_ERROR]]\n * @see [[PlayerEvent.VIDEO_START_ERROR]]\n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n * @see [[PlayerEvent.AD_ERROR]]\n */\nexport enum ErrorCode {\n\n /*\n ConcurrencyLimitViolation\n DomainBlocked\n Expired\n GeoLocationBlocked\n IpBlocked\n NotAvailableRestriction\n SatelliteProviderBlocked\n UnknownServerError\n UserAgentBlocked\n */\n\n //********************\n // RESOURCE ERROR\n //********************\n\n /**\n * Resource validation error, retrieval error/CMS error.\n * \n * @see [[PlayerEvent.RESOURCE_ERROR]]\n */\n INVALID_RESOURCE_FORMAT = '1000',\n // CMS-specific errors parsed from MPX response XML.\n\n /**\n * MPX: Responds with a 400 error typically 404.\n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.RESOURCE_ERROR]]\n */\n RESOURCE_UNAVAILABLE = '1100',\n\n /**\n * MPX: Geo-restricted content.\n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.RESOURCE_ERROR]]\n */\n GEO_LOCATION_BLOCKED = '1101',\n\n /**\n * MPX: Domain is blocked from content access.\n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.RESOURCE_ERROR]]\n */\n DOMAIN_BLOCKED = '1102',\n\n /**\n * MPX: IP is blocked from content access.\n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.RESOURCE_ERROR]]\n */\n IP_BLOCKED = '1103',\n\n /**\n * MPX: Provider is blocked from content access.\n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.RESOURCE_ERROR]]\n */\n SATELLITE_PROVIDER_BLOCKED = '1104',\n\n /**\n * MPX: Provider is blocked from content access.\n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.RESOURCE_ERROR]]\n */\n EXPIRED = '1105',\n\n /**\n * MPX: No response received; typically a failed XHR call with no explicit error.\n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.RESOURCE_ERROR]]\n */\n SELECTOR_CALL_ERROR = '1106', \n \n /**\n * The SDK is either absent or its loading has been blocked.\n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.RESOURCE_ERROR]]\n */\n IMA_SDK_MISSING = '1200',\n\n /**\n * The SDK is either absent or its loading has been blocked.\n * - Retry is performed based on player options settings for networkErrorRecovery.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.RESOURCE_ERROR]] \n */\n DAI_SDK_MISSING = '1201',\n\n /**\n * Dash low level streaming engine code is not compiled into Avia. \n * It is loaded \"just in time\".\n * - Retry is performed based on player options settings for networkErrorRecovery.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.RESOURCE_ERROR]]\n */\n DASH_SDK_MISSING = '1202',\n\n /**\n * HLS low level streaming engine code is not compiled into Avia. It is loaded \"just in time\". \n * - Retry is performed based on player options settings for networkErrorRecovery.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.RESOURCE_ERROR]]\n */\n HLS_SDK_MISSING = '1203',\n\n /**\n * Shaka Player low level streaming engine code is not compiled into Avia. It is loaded \"just in time\". \n * - Retry is performed based on player options settings for networkErrorRecovery.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.RESOURCE_ERROR]]\n */\n SHAKA_SDK_MISSING = '1204',\n\n /**\n * Twitch Low Latency streaming engine code is not compiled into Avia. It is loaded \"just in time\". \n * - Retry is performed based on player options settings for networkErrorRecovery.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.RESOURCE_ERROR]]\n */\n TWITCH_SDK_MISSING = '1205',\n\n //********************\n // VIDEO_START_ERROR\n //********************\n\n\n /**\n * HLS parser can not parse the manifest for some reason.\n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.VIDEO_START_ERROR]]\n */\n HLSJS_PARSE_ERROR = '2101',\n\n /**\n * DASH parser can not parse the manifest for some reason.\n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.VIDEO_START_ERROR]]\n */\n DASHJS_PARSE_ERROR = '2102',\n\n /**\n * Shaka Player parser can not parse the manifest for some reason.\n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.VIDEO_START_ERROR]]\n */\n SHAKA_PARSE_ERROR = '2103',\n\n /**\n * Twitch parser can not parse the manifest for some reason.\n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.VIDEO_START_ERROR]]\n */\n TWITCH_PARSE_ERROR = '2104',\n\n /**\n * Sony WEBMAF Video Start Error \n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.VIDEO_START_ERROR]]\n */\n WEBMAF_START_ERROR = '2105',\n\n /**\n * Video.play() invoked illegally when a user click is \n * required to initiate play\n * \n * @see [[PlayerEvent.VIDEO_START_ERROR]]\n */\n USER_GESTURE_REQUIRED = '2300',\n\n //********************\n // VIDEO_PLAYBACK_ERROR\n //********************\n /**\n * Native HTML5 playback network error of any type. \n * Could not download something needed for playback. \n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n HTML5_NETWORK_ERROR = '3001',\n\n /**\n * HLS low level lib network error. Could not download \n * something needed for playback.\n * - Thrown only after all retry logic has been performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n HLSJS_NETWORK_ERROR = '3002',\n \n /**\n * DASH low level lib network error. Could not download\n * something needed for playback.\n * - Thrown only after all retry logic has been performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n DASHJS_NETWORK_ERROR = '3003',\n \n /**\n * PlayStation WEBMAF lib network error. Could not download\n * something needed for playback.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n WEBMAF_NETWORK_ERROR = '3004',\n\n /**\n * Shaka Player lib network error. Could not download\n * something needed for playback.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n SHAKA_NETWORK_ERROR = '3005',\n\n /**\n * Twitch low level lib network error. Could not download\n * something needed for playback.\n * - Thrown only after all retry logic has been performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n TWITCH_NETWORK_ERROR = '3006',\n \n /**\n * The fetching process for the media resource was aborted \n * by the user agent at the user's request.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */ \n MEDIA_ABORTED = '3100',\n\n /**\n * Native HTML5 media resource was not suitable. \n * - Thrown when media is not supported due to codec or other reason.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n HTML5_SRC_NOT_SUPPORTED = '3101',\n\n /**\n * HLS media resource was not suitable.\n * - Thrown when media is not supported due to codec or other reason.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n HLSJS_SRC_NOT_SUPPORTED = '3102',\n\n /**\n * DASH media resource was not suitable.\n * - Thrown when media is not supported due to codec or other reason.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n DASHJS_SRC_NOT_SUPPORTED = '3103',\n\n /**\n * NOT IN USE\n * - Thrown when media is not supported due to codec or other reason.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n //WEBMAF_SRC_NOT_SUPPORTED = '3104',\n\n /**WEBMAF_NETWORK_ERROR\n * Any media resource was not suitable.\n * - Thrown when media is not supported due to codec or other reason.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n SHAKA_SRC_NOT_SUPPORTED = '3105',\n\n /**\n * Twitch media resource was not suitable.\n * - Thrown when media is not supported due to codec or other reason.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n TWITCH_SRC_NOT_SUPPORTED = '3106',\n \n /**\n * Native HTML5 media error. An error occurred while decoding the media resource, \n * after the resource was established to be usable. \n * - Thrown when corrupted chunks of media are encountered.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n HTML5_MEDIA_ERROR = '3200',\n\n /**\n * HLS media error. An error occurred while decoding the media resource,\n * after the resource was established to be usable.\n * - Thrown when corrupted chunks of media are encountered.\n * - Thrown only after all retry logic has been performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n HLSJS_MEDIA_ERROR = '3201',\n\n /**\n * HLS.js trans-mux error. \n * - Thrown when when memory allocation fails during remuxing\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n HLSJS_MUX_ERROR = '3202',\n\n /**\n * DASH media error. An error occurred while decoding the media resource,\n * after the resource was established to be usable.\n * - Thrown when corrupted chunks of media are encountered.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n DASHJS_MEDIA_ERROR = '3203',\n\n /**\n * **NOT AVAILABLE YET**\n * \n * PlayStation WEBMAF media error. An error occurred while decoding the media resource,\n * after the resource was established to be usable.\n * - Thrown when corrupted chunks of media are encountered.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n //WEBMAF_MEDIA_ERROR = '3204',\n\n /**\n * Shaka Player media error. An error occurred while decoding the media resource,\n * after the resource was established to be usable.\n * - Thrown when corrupted chunks of media are encountered.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n SHAKA_MEDIA_ERROR = '3205',\n\n /**\n * Twitch media error. An error occurred while decoding the media resource,\n * after the resource was established to be usable.\n * - Thrown when corrupted chunks of media are encountered.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n TWITCH_MEDIA_ERROR = '3206',\n\n /**\n * Fairplay Application Certificate DRM error.\n * - Thrown when any issue is found with the application cert url, the request or certificate decoding.\n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n FAIRPLAY_APP_CERT_ERROR = '3300',\n\n /**\n * Fairplay License Acquisition DRM error.\n * - Thrown when any issue is found with the License Server url, request or setting the license on the key system.\n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n FAIRPLAY_LIC_ERROR = '3301', \n\n /**\n * Widevine or Playready DRM error.\n * - Thrown for any reason DRM failed during the initialization process. \n * - Thrown only after all retry logic has been performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n DASHJS_DRM_ERROR = '3302',\n\n /**\n * **NOT AVAILABLE YET**\n * \n * Playready DRM error.\n * - Thrown for any reason DRM failed during the initialization process.\n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n //WEBMAF_DRM_ERROR = '3303',\n\n /**\n * Widevine or Playready DRM error.\n * - Thrown for any reason DRM failed during the initialization process.\n * - Retry logic is not performed.\n * - This error is fatal and playback will not begin.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n SHAKA_DRM_ERROR = '3304',\n\n /**\n * All other HTML5 Video errors or any unknown error.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n UNSPECIFIED_VIDEO_PLAYBACK_ERROR = '3400',\n\n /**\n * All other HLS errors or any unknown error.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n UNSPECIFIED_HLSJS_ERROR = '3401',\n\n /**\n * All other DASH Video errors or any unknown error.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n UNSPECIFIED_DASHJS_ERROR = '3402',\n\n /**\n * **NOT AVAILABLE YET**\n * \n * All other PlayStation WEBMAF errors or any unknown error.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n //UNSPECIFIED_WEBMAF_ERROR = '3403',\n\n /**\n * All other Shaka errors or any unknown error.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n UNSPECIFIED_SHAKA_ERROR = '3404',\n\n /**\n * All other Twitch errors or any unknown error.\n * - Retry logic is not performed.\n * - This error is fatal and playback will stop.\n * \n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n */\n UNSPECIFIED_TWITCH_ERROR = '3405',\n\n //********************\n // AD_ERROR\n //********************\n\n /**\n * Applies to IMA only; if ad progress fails to advance for period of 5 seconds, \n * the ad is considered 'stalled', the ad break is discarded and content play resumes if applicable.\n * \n * @see [[PlayerEvent.AD_ERROR]]\n * @see [[PlayerEvent.AD_STALLED]]\n */\n AD_STALLED = '4000', \n\n /**\n * An attempt to initialize the IMA AdsManager object resulted in an error. \n * In this case, no ads will play for the session. \n * \n * **This is a rare error.**\n * \n * @see [[PlayerEvent.AD_ERROR]]\n */\n IMA_INIT_FAILURE = '4100',\n\n /**\n * An error from the IMA SDK. There are numerous causes for an ad error; \n * the AdErrorEvent emitted by the JS player can be interrogated for details.\n * \n * @see [[PlayerEvent.AD_ERROR]]\n */\n IMA_AD_ERROR = '4101',\n\n /**\n * An error from the IMA SDK. There are numerous causes for an ad error; \n * the AdErrorEvent emitted by the JS player can be interrogated for details.\n * \n * @see [[PlayerEvent.AD_ERROR]]\n */\n DAI_DATA_ERROR = '4200',\n\n /**\n * A response was not received from the DAI back end.\n * \n * @see [[PlayerEvent.AD_ERROR]]\n */\n DAI_NETWORK_ERROR = '4201',\n\n /**\n * DOC-TODO\n */\n AD_BLOCKING_DETECTED = '4300',\n\n /**\n * An error occurred while creating an ad adapter.\n */\n AD_ADAPTER_ERROR = '4400',\n\n //********************\n // UNEXPECTED\n //********************\n\n /**\n * Cases of developer error or other errors that do not fall into a well-described category.\n * @see [[PlayerEvent.RESOURCE_ERROR]]\n * @see [[PlayerEvent.VIDEO_START_ERROR]]\n * @see [[PlayerEvent.VIDEO_PLAYBACK_ERROR]]\n * @see [[PlayerEvent.AD_ERROR]]\n */\n UNEXPECTED_CONDITION = '9999',\n}","export enum HookType {\n EVENT = 'event',\n AD_BREAK = 'adbreak',\n AD = 'ad',\n}\n","export enum KeyboardScope {\n NONE = 'none',\n DOCUMENT = 'document',\n PLAYER = 'player'\n}\n","export enum LocalizedLanguage {\n\tEN = \"English\",\n\tES = \"Español\",\n\tFR = \"Français\",\n\tPT = \"Português\",\n\tDE = \"Deutsche\",\n\tPL = \"Polski\",\n\tJA = \"日本人\",\n\tKO = \"한국어\",\n\tZH = \"简体中文\",\n\tIT = \"Italiano\",\n\tRU = \"Русский\"\n}\n","export enum MetricType {\n API = 'api',\n UI = 'ui',\n}\n","\nexport enum Os {\n /** */\n OSX = 'OS X',\n\n /** */\n WINDOWS = 'Windows',\n\n /** */\n WINDOWS7 = 'Windows 7',\n\n /** */\n WINDOWS8 = 'Windows 8',\n\n /** */\n WINDOWS10 = 'Windows 10',\n\n /** */\n WINDOWS_VISTA = 'Windows Vista',\n\n /** */\n WINDOWS_PHONE = 'Windows Phone',\n\n /** */\n IOS = 'iOS',\n\n /** */\n ANDROID = 'Android',\n\n /** */\n CHROMIUM = 'Chromium',\n\n /** LG Smart Tv. Support for 3.5 and above only. */\n WEBOS = 'Web0S',\n\n /** Vizio SmartTV OS. */\n SMARTCAST = 'SmartCast',\n\n /** Samsung Tizen OS. */\n TIZEN = 'Tizen',\n\n /** PlaySation 4 OS. */\n ORBIS = 'Orbis OS',\n\n /** PlaySation 5 OS. */\n PROSPERO = 'Prospero OS',\n\n /** */\n UNKNOWN = 'Unknown'\n}\n","\nexport enum PerformanceMode {\n\n /** Auto select the best mode for the detected environment */\n AUTO = 'auto',\n\n /** Allows the most forward and backwards buffer*/\n DESKTOP = 'desktop',\n \n /** Slightly reduces the forward and backwards buffer compared to desktop*/\n MOBILE = 'mobile',\n\n /** Allows the least amount of forward and backwards buffer, most restrictive setting.*/\n TV = 'tv'\n}\n","\nexport enum Platform {\n /** */\n MAC = 'Macintosh',\n\n /** */\n WINDOWS = 'Windows',\n\n /** */\n LINUX = 'Linux',\n\n /** */\n UNKNOWN = 'Unknown'\n}\n","export enum PlaybackState {\n IDLE = 'idle',\n STOPPED = 'stopped',\n PLAYING = 'playing',\n PAUSED = 'paused',\n WAITING = 'waiting',\n}\n","/**\n * Player events\n * See [[VideoPlayerInterface.on]] and [[VideoPlayerInterface.off]] for addition and \n * removal, respectively, of event listeners.\n * \n * An event listener has this signature\n * ```typescript\n * (e: EventInterface) => void;\n * ```\n * i.e., the function accepts a single argument (**e**), an event object.\n * \n * An event object has the following general form:\n * ```typescript\n * EventInterface {\n * data?: object; // an optional event-specific data object, may be null\n * target: EmitterInterface; // The emitting object\n * timeStamp: number; // millisecond time stamp; when the event was emitted\n * type: string; // the event type, an avia.PlayerEvent enum member\n * }\n * ```\n * \n * Note that most events don't carry a **data** payload.\n * \n * ---\n * \n * For more info see [Event Handling](../../guides/events)\n * \n */\nexport enum PlayerEvent {\n\n /**\n * Emitted when an accessibility hotkey is pressed for \n * any of the following operations:\n * Seek (Fwd or Back)\n * Mute/Unmute\n * Change volume\n * \n * Event data will contain (depending on the action):\n * \n * `action` - an AccessibilityAction enum member\n * `position`- number in seconds, for seek operations, the time value jumped (signed)\n * `duration`- number in seconds, for seek operations, the content duration (may be null for DVR)\n * `volume` - number between 0-1, indicating current volume \n * `muted` - boolean indicating whether player is currently muted\n * \n * A primary use case for handling at least a subset of these events\n * is to display accessibility-related UI.\n */\n HOTKEY_ACTION = 'hotkeyaction',\n\n /**\n * Emitted when the player is ready for external interactions.\n */\n READY = 'ready',\n\n /**\n * Emitted when the ad break schedule is known; the **data** property\n * of the event will be an array of ad break start times, in seconds. Note that these \n * times correspond to **content time**; this is the case for DAI (in-stream) ads as well.\n * \n * Sample **data** payload: \n * ```javascript\n * [0, 300, 900] //(A pre-roll and 2 mid-rolls)\n * ```\n */\n AD_CUEPOINTS_AVAILABLE = 'adcuepointsavailable',\n\n /**\n * Emitted at the start of an advertisement break. Completion of \n * the break will be signaled with [[AD_BREAK_COMPLETE]]. Data for the break\n * is not available until [[AD_BREAK_METADATA]] is emitted.\n * \n * **Note** this event does not carry a payload.\n * \n * @see [[AD_BREAK_COMPLETE]]\n */\n AD_BREAK_START = 'adbreakstart',\n\n /**\n * Emitted when metadata for the ad break becomes available.\n * \n * The payload for this event carries an `adBreakInfo` property, \n * with data pertaining to the break.\n * @see [[AdBreakInfoInterface]]\n */\n AD_BREAK_METADATA = 'adbreakmetadata',\n\n\n /**\n * Emitted at the end of an advertisement break. \n * \n * **Note** this event does not carry a payload.\n * \n * @see [[AD_BREAK_START]]\n */\n AD_BREAK_COMPLETE = 'adbreakcomplete',\n\n /**\n * Emitted every time an advertisement clip has fully buffered and begins playback.\n * \n * The payload for this event carries an `adInfo` property,\n * with data pertaining to the ad. \n * @see [[AdItemInterface]]\n * @see [[AD_COMPLETE]]\n */\n AD_START = 'adstart',\n\n /**\n * Emitted after each advertisement completes playback.\n * \n * **Note** this event does not carry a payload.\n * \n * @see [[AD_START]]\n */\n AD_COMPLETE = 'adcomplete',\n\n /**\n * Emitted after 25 percent of the advertisement has been played.\n * \n * **Note** this event does not carry a payload.\n * \n * @see [[AD_MIDPOINT]]\n * @see [[AD_THIRD_QUARTILE]]\n */\n AD_FIRST_QUARTILE = 'adfirstquartile',\n\n /**\n * Emitted after 50 percent of the advertisement has been played.\n * \n * **Note** this event does not carry a payload.\n *\n * @see [[AD_FIRST_QUARTILE]]\n * @see [[AD_THIRD_QUARTILE]]\n */\n AD_MIDPOINT = 'admidpoint',\n\n /**\n * Emitted after 75 percent of the advertisement has been played. \n * - see [[AD_COMPLETE]] for 100 percent.\n * \n * **Note** this event does not carry a payload.\n *\n * @see [[AD_FIRST_QUARTILE]]\n * @see [[AD_MIDPOINT]]\n * @see [[AD_COMPLETE]]\n */\n AD_THIRD_QUARTILE = 'adthirdquartile',\n\n /**\n * Emitted when an error occurs attempting to play an ad, or during ad playback.\n * The event object received will be an AdErrorEvent, which has additional properties\n * to convey information about the error.\n * \n * See under [Event Handling]\n * \n * **Note** this event carries a data payload:\n * ```typescript\n * {\n * code: string,\n * message: string\n * }\n * ```\n */\n AD_ERROR = 'aderror',\n\n /**\n * Emitted when a playing or paused ad is clicked by the user.\n */\n AD_CLICK = 'adclick',\n\n /**\n * Emitted when an ad segment has been encountered. \n */\n AD_SEGMENT_START = 'adsegmentstart',\n\n\n /**\n * Emitted when an ad segment has ended. \n */\n AD_SEGMENT_END = 'adsegmentend',\n\n /**\n * Emitted when a \"skippable\" ad is skipped by the user.\n * Applies to skippable IMA ads; emitted when the IMA SDK\n * determines that the user has elected to skip an ad.\n *\n * **Note** this event does not carry a payload.\n */\n AD_SKIPPED = 'adskipped',\n\n /**\n * Emitted continuously during advertisement playback. \n * \n * **Note** this event carries a payload:\n * ```typescript\n * {\n * currentTime: number,\n * duration: number\n * }\n * ```\n * The times conveyed in the payload relate only to the playing ad, i.e, a\n * progress event for a 30 second ad will have a duration of 30 and currentTime\n * will be be in the range 0-30.\n */\n AD_PROGRESS = 'adprogress',\n\n /**\n * Emitted when a playing ad has been paused.\n * \n * **Note** this event does not carry a payload.\n */\n AD_PAUSED = 'adpaused',\n\n /**\n * Emitted when a paused ad has resumed playing.\n * \n * **Note** this event does not carry a payload.\n */\n AD_PLAYING = 'adplaying',\n\n /**\n * Emitted when a non-paused ad fails to progress for \n * more than 5 seconds, i.e., if the ad is \"stalled\". Applies to IMA ads only.\n * \n * In this case the ad break must be discarded and content play continues.\n * \n */\n AD_STALLED = 'adstalled',\n\n /**\n * Emitted if an ad break is aborted for any reason. Applies to IMA ads only.\n * \n * **Note** this event does not carry a payload.\n */\n AD_BREAK_DISCARDED = 'adbreakdiscarded',\n\n /**\n * Emitted when there is a changed in the information found in [[AudioTracksInterface]]\n *\n * **Note** this event does not carry a payload.\n * \n * @see [[VideoPlayerInterface.audioTrackInfo]]\n */\n AUDIO_TRACK_INFO_CHANGE = 'audiotrackinfochange',\n\n /**\n * Emitted after the audio track has changed. Either at startup when \n * initially setting the default audio track or after calling api [[VideoPlayerInterface.audioTrack]]\n * Once this event is emitted, it is safe to change audio tracks again.\n *\n * **Note** this event does not carry a payload.\n * \n * @see [[VideoPlayerInterface.audioTrack]]\n */\n AUDIO_TRACK_CHANGE = 'audiotrackchange',\n\n /**\n * Emitted when an adaptive quality stream has changed qualities, \n * either invoked from auto quality switching logic or by a manual \n * switch request when setting a new value on [[VideoPlayerInterface.bitrate]].\n * \n * **Note** this event does not carry a payload. \n * \n * * @see [[VideoPlayerInterface.bitrate]]\n */\n QUALITY_CHANGE = 'qualitychange',\n\n /**\n * Emitted after manifest parsing is complete. \n * \n * Emitted Again, when a change to bitrate restriction API such as [[VideoPlayerInterface.minBitrate]], \n * [[VideoPlayerInterface.maxBitrate]] or if [[ResourceConfigurationInterface.playback]] capQualityToScreenSize\n * is `true`, and the player size changes enough to restrict a certain resolution.\n * \n * Every time this is emitted, after the initial event, available qualities in \n * [[VideoPlayerInterface.qualityInfo]] have changed.\n * \n * **Note** this event carries a data payload:\n * ```typescript\n * interface QualityInfoInterface\n * mode: string;\n * quality: QualityInterface;\n * qualities: QualityInterface[];\n * }\n * ```\n * @see [[VideoPlayerInterface.qualityInfo]]\n */\n QUALITY_INFO_CHANGE = 'qualityinfochange',\n\n /**\n * Emitted if the content delivery network (CDN) changes. \n * This is applicable to multi-CDN scenarios.\n *\n * * **Note** this event carries a data payload:\n * ```typescript\n * {\n * cdn: string,\n * }\n * ```\n */\n CDN_CHANGE = 'cdnchange',\n\n /**\n * Emitted when content video has **first** started to play. \n * \n * **Note** this event does not carry a payload.\n */\n CONTENT_START = 'contentstart',\n\n /**\n * Emitted when the content duration is known. The timing of this \n * event may vary depending on whether client-side or in-stream ads accompany the \n * presentation. \n * \n * This event carries a single property, `contentDuration`.\n * \n * ```javascript\n * function handleEvent(e) {\n * if (e.type === avia.PlayerEvent.CONTENT_DURATION_AVAILABLE) {\n * console.log(`Content duration = ${e.data.contentDuration}`);\n * }\n * }\n * ```\n */\n CONTENT_DURATION_AVAILABLE = 'contentdurationavailable',\n\n /**\n * Emitted when any content segment has begun playback;\n * any presentation with ad breaks will have content segments, as \n * shown below, where 'ad' is an ad break with 1 or more ads.\n * ```\n * ad content segment ad\n * |-----|==================|-----|\n * ```\n * **Note** this event does not carry a payload.\n */\n CONTENT_SEGMENT_START = 'contentsegmentstart',\n\n /**\n * Emitted when content has fully buffered and playback has started. \n * \n * **Note** this event does not carry a payload.\n * \n * @see [[CONTENT_PROGRESS]]\n */\n CONTENT_PLAYING = 'contentplaying',\n\n /**\n * Emitted continuously when content is playing and time is moving forward. \n * \n * **Note** this event carries a data payload:\n * ```typescript\n * {\n * contentTime: number,\n * streamTime: number,\n * contentDuration: number,\n * streamDuration: number,\n * }\n * ```\n * - **contentTime** - current playback time of content portion of stream not including advertisement breaks. \n * - **streamTime** - current playback time of the stream including content and all advertisement breaks.\n * - **contentDuration** - duration of the content portion of the stream not including advertisement breaks.\n * - **streamDuration** - total duration of the stream including content and all advertisement breaks.\n */\n CONTENT_PROGRESS = 'contentprogress',\n\n /**\n * Emitted when content has been paused.\n * \n * **Note** this event does not carry a payload.\n */\n CONTENT_PAUSED = 'contentpaused',\n\n /**\n * Emitted when any content segment ends See also [[CONTENT_SEGMENT_START]]. \n * \n * **Note** this event does not carry a payload.\n */\n CONTENT_SEGMENT_END = 'contentsegmentend',\n\n /**\n * Emitted when the content has completed fully; the resource may have post-roll ads\n * to play at this point, so 'content complete' is not necessarily synonymous with 'resource end'.\n * \n * **Note** this event does not carry a payload.\n */\n CONTENT_COMPLETE = 'contentcomplete',\n\n /**\n * Emitted when the content is playing at the live edge.\n * \n * @see [[VideoPlayerInterface.isPlayingLive]]\n */\n CONTENT_IS_PLAYING_LIVE = 'contentisplayinglive',\n\n /**\n * Emitted when the stream type changes.\n * \n * @see [[StreamType]]\n * @see [[VideoPlayerInterface.streamType]]\n */\n STREAM_TYPE_CHANGE = 'streamtypechange',\n\n /**\n * Emitted when the stream's metadata is loaded, before playback begins.\n * \n * @see [[StreamMetadataInterface]]\n */\n STREAM_METADATA = 'streammetadata',\n\n /**\n * Applies to SSAI streams that have a 'stream ID\"; emitted if and when the ID becomes \n * available.\n */\n STREAM_ID_AVAILABLE = 'streamidavailable',\n\n /**\n * Used mainly for tracking and diagnostics. \n * This event's data payload will be a string with the DRM key system in use. \n * \n * **Note** this event carries a data payload:\n * ```typescript\n * {\n * keysystem: string, //DrmType.ts\n * }\n * ```\n */\n DRM_KEYSYSTEM_CREATED = 'drmkeysystemcreated',\n\n /**\n * Emitted for any **fatal** content playback error. Note that this event will be emitted \n * whenever a [[RESOURCE_ERROR]], [[VIDEO_START_ERROR]], or [[VIDEO_PLAYBACK_ERROR]] occurs. \n * You may decide to **either** listen to these latter three events separately, **or** handle \n * only the FATAL_ERROR event, which serves as a \"catch-all\" for all three. Listening for \n * FATAL_ERROR in conjunction with any of those three fatal errors can lead to handling code \n * being triggered twice for the same error, and should be avoided. \n * \n * See also [Event Handling](../../guides/events)\n * \n */\n FATAL_ERROR = 'fatalerror',\n\n /**\n * Emitted for all player errors. Listening for the `ERROR` event in conjunction with any of \n * the other error events can lead to handling code being triggered twice for the same error, \n * and should be avoided. \n * \n * See also [Event Handling](../../guides/events)\n * \n * @see [[ErrorInfoInterface]]\n */\n ERROR = 'error',\n\n /**\n * Emitted each time the playlist has advanced.\n * \n * **Note** this event carries a data payload:\n * ```typescript\n * {\n * resource: ResourceConfigurationInterface,\n * currentIndex: number \n * }\n * ```\n * - **resource** - current configuration for playback\n * - **currentIndex** - current index of playlist's new item. \n */\n PLAYLIST_ADVANCED = 'playlistadvanced',\n\n /**\n * Emitted when the playlist attempts to advance beyond the last item.\n * \n * **Note** this event does not carry a payload.\n */\n PLAYLIST_COMPLETE = 'playlistcomplete',\n\n /**\n * Emitted when the playlist has been modified via item addition or removal.\n * See [[PlaylistInterface.addResources]], [[PlaylistInterface.removeResourceAtIndex]], [[PlaylistInterface.clear]]\n * \n * **Note** this event does not carry a payload.\n */\n PLAYLIST_CHANGE = 'playlistchange',\n\n /**\n * Emitted after the playlist has been cleared via a call to [[PlaylistInterface.clear]]\n * \n * The payload (event.data) conveys the resource that was playing when the list was cleared, or null.\n * \n * ```javascript\n * event.data = {\n * interruptedResource: ...\n * }\n * ```\n */\n PLAYLIST_CLEARED = 'playlistcleared',\n\n /**\n * Emitted if the playlist has been moved to an index less than 0.\n * if the playlist is moved beyond the right-most bound, a PLAYLIST_COMPLETE event is emitted.\n * \n * **Note** this event does not carry a payload.\n */\n PLAYLIST_OUT_OF_RANGE = 'playlistoutofrange',\n\n /**\n * Emitted if the current item is removed from the playlist via [[PlaylistInterface.removeResourceAtIndex]]\n * \n * The payload (event.data) conveys an object with the resource that was playing:\n * \n * ```javascript\n * event.data = {\n * interruptedResource: ...\n * }\n * ```\n */\n PLAYLIST_CURRENT_RESOURCE_CLEARED = 'playlistcurrentresourcecleared',\n\n /** \n * Emitted when a poster click occurs prior to receiving a resource to play.\n * The POSTER_CLICK event handler may then provide a resource to the Player.\n * \n * **Note** this event does not carry a payload.\n */\n POSTER_CLICK = 'posterclick',\n\n /**\n * Event emitted following a call to `player.suspendPlayback()`.\n * Indicates that the tracking session will end (if playback is resumed, \n * a new tracking session is started).\n * \n * @see [[VideoPlayerInterface.suspendPlayback]]\n */\n PLAYBACK_SUSPENDED = 'playbacksuspended',\n\n /**\n * Event emitted if playback is resumed (via `player.resumePlayback()` or \n * `player.play()`) from a 'suspended' state.\n * @see [[PLAYBACK_SUSPENDED]]\n */\n PLAYBACK_RESUMED = 'playbackresumed',\n\n /**\n * Emitted when the resource presentation starts. This occurs when all required data\n * is at hand, and just prior to any attempt to either play content or a pre-roll ad.\n * As such, this event can not be used as an indication that any video is currently playing.\n * \n * This event is primarily of use for tracking, to signal the start of a new tracking session.\n * \n * **Note** this event does not carry a payload.\n */\n RESOURCE_START = 'resourcestart',\n\n /**\n * Emitted when the resource has ended. This occurs when the content \n * and any post-roll ads, have have naturally completed, or if playback is \n * interrupted at a time greater than or equal to 95% of the content duration.\n * \n * **Note** this event does not carry a payload.\n */\n RESOURCE_END = 'resourceend',\n\n /**\n * Emitted when the resource has been interrupted. This occurs playback if is cancelled \n * any time prior to completion of all content and any scheduled post-roll ads.\n * \n * **Note** this event carries a payload indicating the current content time, the content duration,\n * and whether an ad was playing when playback was interrupted.\n * ```javascript\n * contentTime: number\n * contentDuration: number\n * adInterrupted: boolean\n * ```\n */\n RESOURCE_INTERRUPTED = 'resourceinterrupted',\n\n /**\n * Emitted when the resource cannot be processed for play. This can\n * occur for an invalid configuration, or if an error occurs \n * attempting to retrieve content metadata. The latter case could be \n * the result of a network error, a server error, an uninterpretable response,\n * or an explicit error response from the server. Additionally, a resource \n * error can occur if a valid response is received has invalid or missing data.\n * \n * \n * **Note** this event carries a data payload:\n * ```typescript\n * {\n * code: string,\n * message: string\n * }\n * ```\n */\n RESOURCE_ERROR = 'resourceerror',\n\n /**\n * Emitted when the resource has started to buffer\n */\n RESOURCE_BUFFERING = 'resourcebuffering',\n\n /**\n * Emitted when a seek request has been fulfilled. The playhead time will \n * be updated after this event has been emitted.\n * \n * **Note** this event does not carry a payload.\n * \n * @see [[SEEK_START]]\n */\n SEEK_COMPLETE = 'seekcomplete',\n\n /**\n * Emitted at the start of a seek request. The playhead time will\n * not be updated until [[SEEK_COMPLETE]]\n * \n * **Note** this event does not carry a payload.\n *\n * @see [[SEEK_COMPLETE]]\n */\n SEEK_START = 'seekstart',\n\n /**\n * Emitted when a user-initiated seek would move the playhead \n * past an unplayed ad break (which must be played). For SSAI streams particularly,\n * this can result in the playhead jumping back to the ad break position.\n * The SEEK_REDIRECT_START start event can alert user code to ignore (if desired)\n * any subsequent content progress events until the ad break has completed. \n * \n * **Note** \n *\n * @see [[SEEK_REDIRECT_COMPLETE]]\n */\n SEEK_REDIRECT_START = 'seekredirectstart',\n\n /**\n * Emitted just prior to issuing a \"pending\" seek to the playhead, \n * and is only relevant in the context described for SEEK_REDIRECT_START\n * \n * **Note** \n *\n * @see [[SEEK_REDIRECT_START]]\n */\n SEEK_REDIRECT_COMPLETE = 'seekredirectcomplete',\n\n /**\n * Emitted when ID3 data is detected and the ID3 tag \"owner\" matches \n * any **id3OwnerIds** provided in the resource configuration.\n * \n * See also [[ResourceConfigurationInterface]].\n * \n * **Note** this event carries different payload structures so inspect the data\n * object of the event.\n */\n METADATA_CUEPOINT = 'metadatacuepoint',\n\n /**\n * Emitted only when:\n * - Player option ```renderTextTrackNatively``` is set to false.\n * - There is at least one valid text track in the presentation.\n * - the [[VideoPlayerInterface.contentTime]] has reached the start time of the cue. \n * \n * event.data = {\n * activeCues: cueList\n * }\n */\n TEXT_CUEPOINT = 'textcuepoint',\n\n /**\n * Emitted once a text track has changed to the new track. This will happen \n * at startup, if text is detected, while setting the default track. \n * It will also be emitted after each track switch via [[VideoPlayerInterface.textTrack]]\n * \n * **Note** This event passes the new track info as the payload.\n * @see [[VideoPlayerInterface.textTrack]]\n */\n TEXT_TRACK_CHANGE = 'texttrackchange',\n\n /**\n * Emitted when the list of available text tracks has changed. \n * It will also be emitted after each track switch via [[VideoPlayerInterface.textTrack]]\n * \n * @see [[VideoPlayerInterface.textTrack]]\n * @see [[VideoPlayerInterface.textTrackInfo]]\n */\n TEXT_TRACK_INFO_CHANGE = 'texttrackinfochange',\n\n /**\n * Emitted each time [[VideoPlayerInterface.textTrackEnabled]] is called and the mode \n * has changed. This is useful when rendering text externally. Typically only \n * used when player option ```renderTextTrackNatively``` is set to false.\n * \n * **Note** this event carries a data payload:\n * ```typescript\n * { enabled: boolean }\n * ```\n * @see [[VideoPlayerInterface.textTrackEnabled]]\n */\n TEXT_TRACK_DISPLAY_MODE_CHANGE = 'texttrackdisplaymodechange',\n\n /**\n * Emitted when there is valid text track. Can be used as an indication \n * to enable UI controls for caption button or subtitles menu. \n * \n * **Note** this event does not carry a payload.\n */\n TEXT_TRACK_AVAILABLE = 'texttrackavailable',\n\n /**\n * Emitted when there is valid thumbnail track. Can be used as an indication \n * to enable UI seek preview scrubber. \n * \n * **Note** this event does not carry a payload.\n */\n THUMBNAIL_TRACK_AVAILABLE = 'thumbnailtrackavailable',\n\n /**\n * Emitted when there is an issue starting the video. Typically triggered by \n * failures with manifest loading / parsing or user gesture issues for click to play. \n * \n * **Note** this event carries a data payload:\n * ```typescript\n * {\n * code: string,\n * message: string\n * }\n * ```\n */\n VIDEO_START_ERROR = 'videostarterror',\n\n /**\n * Emitted when there is an issue playing back the video. Typically triggered by an issue \n * with network download or media parsing, decoding or rendering.\n * \n * **Note** this event carries a data payload:\n * ```typescript\n * {\n * code: string,\n * message: string\n * }\n * ```\n */\n VIDEO_PLAYBACK_ERROR = 'videoplaybackerror',\n\n /**\n * Emitted after the video has loaded and the HTML5 CAN_PLAY_THROUGH \n * event has be emitted by the HTML5 video element. \n * \n * **Note** this event does not carry a payload.\n */\n VIDEO_LOAD_COMPLETE = 'videoloadcomplete',\n\n /**\n * Applies only when using Avia with CVUI; emitted before the fade-in transition starts.\n */\n BEFORE_CONTROLS_VISIBLE = 'beforecontrolsvisible',\n\n /**\n * Applies only when using Avia with CVUI; emitted before the fade-out transition starts.\n */\n BEFORE_CONTROLS_HIDDEN = 'beforecontrolshidden',\n\n /**\n * Applies only when using Avia with CVUI; emitted when UI controls are fully visible.\n */\n CONTROLS_VISIBLE = 'controlsvisible',\n\n /**\n * Applies only when using Avia with CVUI; emitted when UI controls are fully hidden.\n */\n CONTROLS_HIDDEN = 'controlshidden',\n\n /**\n * Applies to live (linear) streams only; if the presentation is 'stopped' by the user \n * video playback ceases, the current resource is discarded and the tracking session ends.\n */\n LIVE_PRESENTATION_STOPPED = 'livepresentationstopped',\n\n /**\n * Emitted when a change in presentation size (width and height) is detected.\n */\n PRESENTATION_SIZE_CHANGE = 'presentationsizechange',\n\n /**\n * Emitted when Fullscreen mode is entered\n */\n FULLSCREEN_ENTER = 'fullscreenenter',\n\n /**\n * Emitted when Fullscreen mode is exited\n */\n FULLSCREEN_EXIT = 'fullscreenexit',\n\n /**\n * Applies only when using Avia with CVUI; emitted (desktop only) when the cursor enters the video presentation area.\n */\n MOUSE_ENTER_PRESENTATION = 'mouseenterpresentation',\n\n /**\n * Applies only when using Avia with CVUI; emitted (desktop only) when the cursor leaves the video presentation area.\n */\n MOUSE_LEAVE_PRESENTATION = 'mouseleavepresentation',\n\n /**\n * Applies only when using Avia with CVUI; emitted when content video \n * is paused by the user (via a click on the UI). It is not emitted during\n * ad play.\n */\n USER_PAUSE = 'userpause',\n\n /**\n * Applies only when using Avia with CVUI; emitted when the user\n * clicks/taps the Settings button. This button is only available\n * when the UI is configured to include the settings button:\n * \n * ```js\n * uiConfig: {\n * include: [cvui.ControlName.SETTINGS_BUTTON]\n * }\n * ```\n * \n * A plugin or other code must handle this event in order for anything\n * to happen. Although the player has no built-in behavior for user settings,\n * a VTG plugin is available to display multi-language text and audio track menus, \n * offering users a means to switch to their preferred language.\n * \n * @deprecated\n */\n USER_SETTINGS = 'usersettings',\n\n /**\n * Emitted for all log statements originating from a Player instance, regardless of the \n * log level specified in PlayerOptions. This event is primarily useful for plugin \n * development. The payload is a LogEventInterface:\n * \n * ```typescript\n * interface LogEventInterface {\n * item: any;\n * id: string;\n * level: LogLevel;\n * label: string;\n * }\n * ```\n * `item` is the subject of the log statement; it may be of any type (object, string, etc). \n * `id` is the ID of the Player an object, the `label` \n * If `item` is an object, `label` may convey the name or role of the object\n * `level` is the developer-assigned level for the log statement. \n */\n LOG_EVENT = 'logevent',\n\n /**\n * Emitted from Plugins via the Player. Plugin events \n * behave like any other player event, but their `data` payload\n * is determined by the given plugin that initiates event emission.\n */\n PLUGIN_EVENT = 'pluginevent',\n\n /**\n * Emitted when the language is changed.\n */\n LANGUAGE_CHANGE = 'languagechange',\n\n /**\n * Emitted if a keyboard command has been registered and the user\n * invokes the keypress(es) associated with the command. \n * Note that this event is not emitted for Accessibility key presses,\n * but for user-registered commands only.\n */\n USER_KEYBOARD_COMMAND = 'userkeyboardcommand',\n\n /**\n * Emitted if autoplay is blocked by the browser.\n */\n AUTOPLAY_BLOCKED = 'autoplayblocked',\n\n /**\n * Emitted when the player volume changes\n */\n VOLUME_CHANGE = 'volumechange',\n\n /**\n * Emitted when the player is muted/unmuted\n */\n MUTE_CHANGE = 'mutechange',\n\n /**\n * Emitted when the user starts/stops interacting with the player\n */\n ACTIVE_CHANGE = 'activechange',\n\n /**\n * Emitted when the the playback state changes.\n * \n * @see [[PlaybackState]]\n */\n PLAYBACK_STATE_CHANGE = 'playbackstatechange',\n\n /**\n * A generic metric event\n */\n METRIC = 'metric',\n\n /**\n * Emitted when a new video element is added to the player DOM. \n */\n VIDEO_ELEMENT_ADDED = 'videoelementadded',\n\n /**\n * Emitted when an existing video element is removed to the player DOM.\n */\n VIDEO_ELEMENT_REMOVED = 'videoelementremoved',\n}\n","export enum QualityCategory {\n SD = 'SD',\n HD = 'HD',\n UHD = 'UHD', \n UHD_4K = 'UHD 4K',\n UHD_8K = 'UHD 8K'\n}\n\n\n","export enum QualityLabel {\n DEFINITION,\n HEIGHT,\n BITRATE,\n CUSTOM,\n}\n","export enum StreamType {\n VOD = 'VOD',\n LIVE = 'LIVE',\n DVR = 'DVR'\n}\n","\nexport enum VideoFormat {\n HLS = 'hls',\n DASH = 'dash',\n MP4 = 'mp4',\n UNKNOWN = 'unknown'\n}","import { Emitter } from '../../core/Emitter';\nimport { Util } from '../../core/Util';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { TextTrackEvent } from '../../enum/TextTrackEvent';\nimport { TextTrackKind } from '../../enum/TextTrackKind';\nimport { TextTrackMode } from '../../enum/TextTrackMode';\nimport { SystemServiceInterface } from '../../iface';\nimport { LoggerInterface } from '../../iface/LoggerInterface';\nimport { VideoSurfaceConfigInterface } from '../../iface/VideoSurfaceConfigInterface';\nimport { TextTrackSurfaceEvents } from '../enum/TextTrackSurfaceEvents';\nimport { TextTrackType } from '../enum/TextTrackType';\nimport { SmpteToVttCueConverter } from '../util/SmpteToVttCueConverter';\n\nexport class TextTrackSurface extends Emitter {\n private logger: LoggerInterface;\n private video: HTMLVideoElement;\n private system: SystemServiceInterface;\n private config: VideoSurfaceConfigInterface;\n\n private pTextTracks: TextTrackList = null;\n private currentTextTrack: TextTrack = null;\n private currentTextTrackMode: TextTrackMode = TextTrackMode.DISABLED;\n private allowTextTrackCueDispatch: boolean = true;\n private existingTrack: Array = [];\n\n constructor(config: VideoSurfaceConfigInterface) {\n super();\n this.system = config.system;\n this.config = config;\n this.video = config.video;\n this.pTextTracks = this.video.textTracks;\n\n this.currentTextTrackMode = config.textTrackSettings.mode;\n this.allowTextTrackCueDispatch = !config.textTrackSettings.native;\n\n // These functions have the potential to be called multiple times in rapid succession. \n // Debounce to allow multiple changes to be applied in a single pass.\n this.processTracks = Util.debounce(this.processTracks.bind(this), 100);\n this.addTracks = Util.debounce(this.addTracks.bind(this), 25);\n\n this.addEvents();\n\n this.logger = config.logger;\n this.logger.log(LogLevel.INFO, 'TextTrackSurface created');\n }\n\n override destroy() {\n this.removeEvents();\n Util.forEach(this.pTextTracks, (t) => this.cleanupTrack(t));\n Util.forEach(this.video.querySelectorAll('track'), (element) => this.video.removeChild(element));\n super.destroy();\n }\n\n clearCue() {\n Util.clearCue(this.currentTextTrack, this.video.currentTime);\n }\n\n private cleanupTrack(track: TextTrack) {\n if (!this.isTextTrack(track.kind)) {\n return;\n }\n\n function cleanupCue(cue: TextTrackCue) {\n try {\n if (cue) {\n track.removeCue(cue);\n }\n }\n catch (error) {\n // ignore errors and continue cleanup\n }\n }\n\n // Cues must be cleaned up in reverse order. Otherwise half of the cues will be left behind.\n Util.forEachReverse(track.cues, cleanupCue);\n Util.forEachReverse(track.activeCues, cleanupCue);\n\n //@ts-ignore\n track.expired = true;\n\n //hls.js disablement\n //@ts-ignore\n track.textTrack1 = true;\n //@ts-ignore\n track.textTrack2 = true;\n\n //dashjs disablement \n //@ts-ignore\n track.isTTML = true; //forces dash.js to use the new track it creates for vtt or ttml sideload on next load. \n //@ts-ignore\n track.isEmbedded = false;\n\n //general disablement\n try {\n //@ts-ignore\n track.mode = TextTrackMode.DISABLED;\n } catch(error) {\n // ignore errors and continue disabling\n }\n }\n\n /**\n * Sidecar use only\n */\n set timeTextSrc(url: string) {\n const isVtt = url.indexOf('.vtt') >= 0;\n if (isVtt) {\n this.createVttTextTrack(this.video, url);\n }\n else {\n this.processSmpteTimedText(url);\n }\n }\n\n set textTrackMode(mode: TextTrackMode) {\n if (this.currentTextTrack) {\n this.setTrackMode(mode);\n }\n else {\n this.logger.log(LogLevel.WARN, `No text track detected`);\n }\n }\n\n set textTrack(newTrack: TextTrack) {\n if (!this.isValidTrack(newTrack) || newTrack == this.currentTextTrack) {\n return;\n }\n\n // disable old track\n if (this.currentTextTrack && this.currentTextTrack.mode !== TextTrackMode.DISABLED) {\n this.currentTextTrack.mode = TextTrackMode.DISABLED;\n }\n\n this.currentTextTrack = newTrack;\n\n // re-apply the track mode to the new text track\n this.setTrackMode(this.currentTextTrackMode).then(() => {\n this.logger.log(LogLevel.INFO, `${newTrack.language} is being set as the current text track`);\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_CHANGE, newTrack);\n });\n }\n\n get textTrack(): TextTrack {\n return this.currentTextTrack;\n }\n\n get textTracks(): TextTrack[] {\n return Util.toArray(this.pTextTracks).filter(t => this.isValidTrack(t));\n }\n\n private setTrackMode(mode: TextTrackMode): Promise {\n return new Promise((resolve, reject) => {\n const modeChanged = (mode != this.currentTextTrackMode);\n const applyMode = (): void => {\n // mode is typed as number with string enum reserve mapped so even though you can set string, TS wants int.\n //@ts-ignore\n this.currentTextTrack.mode = mode;\n\n if (modeChanged) {\n // Dispatch the event after the promise resolves\n setTimeout(() => this.emit(TextTrackSurfaceEvents.TEXT_TRACK_DISPLAY_MODE_CHANGE, { mode }), 0);\n }\n\n // Logging\n let msg: string = TextTrackMode.DISABLED;\n mode === TextTrackMode.HIDDEN && (msg = 'enabled for event driven external custom rendering');\n mode === TextTrackMode.SHOWING && (msg = 'enabled for native rendering by the user agent');\n this.logger.log(LogLevel.INFO, `The ${this.currentTextTrack.kind} track for language code ${this.currentTextTrack.language} is being ${msg} `);\n\n resolve();\n };\n\n this.currentTextTrackMode = mode;\n\n // HACK: FF has issue with setting showing from disabled need to set to hidden then showing with timeout. \n if (mode === TextTrackMode.SHOWING &&\n this.currentTextTrack.mode === TextTrackMode.DISABLED) {\n\n // Temporarily set to hidden to get around FF issue\n this.currentTextTrack.mode = TextTrackMode.HIDDEN;\n setTimeout(applyMode, 10);\n }\n else {\n applyMode();\n }\n });\n }\n\n // Events\n private onVideoTextTrackAdded = (e: TrackEvent): void => {\n // hlsjs reuses tracks for 608/708, so remove the expired flag.\n const track = e.track;\n //@ts-ignore\n track.expired = false;\n\n this.onTextTrackAdded(e);\n };\n\n private onTextTrackAdded = (e: TrackEvent): void => {\n const track = e.track;\n\n // VTG-2215 - hlsjs creates an empty \"subtitles\" track. Ignore it.\n const isEmpty = track.kind == TextTrackKind.SUBTITLES && !track.language && !track.label;\n const isMetadata = track.kind == TextTrackKind.METADATA;\n\n if (isMetadata || isEmpty) {\n return;\n }\n\n this.addTracks();\n };\n\n private onTextTrackChange = (e: Event): void => {\n this.processTracks();\n };\n\n private onCueChange = (e: Event): void => {\n const track = e.target as TextTrack;\n\n switch (track.kind) {\n case TextTrackType.CAPTIONS:\n case TextTrackType.SUBTITLES:\n const activeCues = Util.dedupeCues(track);\n if (this.allowTextTrackCueDispatch && track.mode === TextTrackMode.HIDDEN) {\n this.emit(TextTrackSurfaceEvents.TEXT_CUEPOINT, { activeCues });\n }\n break;\n }\n };\n\n private addTrack(track: TextTrack): void {\n track.addEventListener(TextTrackEvent.CUE_CHANGE, this.onCueChange);\n\n this.logger.log(LogLevel.INFO, `A ${track.kind} text track was added`);\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_ADDED, track);\n }\n\n private addTracks(): void {\n Util.forEach(this.pTextTracks, (t) => {\n const invalid = this.isExpired(t) || this.isDuplicateTrack(t);\n t.mode = (!invalid) ? TextTrackMode.HIDDEN : TextTrackMode.DISABLED;\n\n if (invalid) {\n return;\n }\n\n this.addTrack(t);\n });\n\n // If this is the first time through, select the best track from the list\n if (!this.currentTextTrack) {\n this.textTrack = Util.findDefaultTrack(this.textTracks, this.config.textTrackSettings.language);\n if (!this.textTrack) {\n return;\n }\n this.textTrack.mode = this.config.textTrackSettings.mode;\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_AVAILABLE);\n }\n\n // Native hls playback in Safari won't trigger a text track change event, so do it manually\n this.processTracks();\n }\n\n private processTracks(): void {\n const { enabled, native, enabledMode } = this.config.textTrackSettings;\n\n // Only search valid tracks\n const tracks = this.textTracks;\n\n // hlsjs sometimes enables expired tracks. Ensure all expired tracks are disabled.\n Util.forEach(this.pTextTracks, t => {\n if (this.isExpired(t) && t.mode != TextTrackMode.DISABLED) {\n t.mode = TextTrackMode.DISABLED;\n }\n });\n\n // Handle non-native text rendering separately\n if (!native) {\n if (enabled) {\n // Streaming libraries sometimes set the mode to \"showing\"\n const track = Util.find(tracks, t => t.mode == TextTrackMode.SHOWING);\n if (track) {\n track.mode = enabledMode;\n }\n }\n else {\n // Streaming libraries sometimes set the mode to \"hidden\"\n const track = Util.find(tracks, t => t.mode != TextTrackMode.DISABLED);\n if (track) {\n track.mode = TextTrackMode.DISABLED;\n }\n }\n return;\n }\n\n // Check for change to the text track settings via native UIs or DOM APIs\n const track = Util.find(tracks, t => t.mode == TextTrackMode.SHOWING);\n\n if (enabled) {\n // no change\n if (track == this.currentTextTrack) {\n return;\n }\n\n // If no enabled track was found, then the mode has changed\n if (!track) {\n this.textTrackMode = TextTrackMode.DISABLED;\n }\n else {\n // Otherwise, the a different track was enabled\n this.textTrack = track;\n }\n }\n else {\n // no change\n if (!track) {\n return;\n }\n\n // Update the track if it has changed\n if (track != this.currentTextTrack) {\n this.textTrack = track;\n }\n // Update the mode \n this.textTrackMode = TextTrackMode.SHOWING;\n }\n }\n\n private addEvents(): void {\n this.pTextTracks.addEventListener(TextTrackEvent.ADD_TRACK, this.onTextTrackAdded);\n this.pTextTracks.addEventListener(TextTrackEvent.CHANGE, this.onTextTrackChange);\n\n // HACK: Workaround for a bug in hlsjs where the `addtrack` event is dispatched from\n // the video element instead of the text track list when switching to a resource\n // with 608/708 captions.\n (this.video).addEventListener(TextTrackEvent.ADD_TRACK, this.onVideoTextTrackAdded);\n }\n\n private removeEvents(): void {\n this.pTextTracks.removeEventListener(TextTrackEvent.ADD_TRACK, this.onTextTrackAdded);\n this.pTextTracks.removeEventListener(TextTrackEvent.CHANGE, this.onTextTrackChange);\n\n // HACK: hlsjs 608 workaround\n (this.video).removeEventListener(TextTrackEvent.ADD_TRACK, this.onVideoTextTrackAdded);\n\n Util.forEach(this.pTextTracks, (t) => t.removeEventListener(TextTrackEvent.CUE_CHANGE, this.onCueChange));\n }\n\n // Util\n private isDuplicateTrack(t: TextTrack): boolean {\n // Tracks that have been previously processed are not duplicates\n if (Util.includes(this.existingTrack, t)) {\n return false;\n }\n\n // Check for duplicate tracks generated by dashjs when switching periods on a stream with 608 captions\n const result = this.existingTrack.some(track => t.language == track.language && t.label == track.label && t.kind == track.kind);\n if (!result) {\n this.existingTrack.push(t);\n }\n return result;\n }\n\n private isTextTrack(type: string) {\n return type === TextTrackType.CAPTIONS || type === TextTrackType.SUBTITLES;\n }\n\n private isExpired(track: TextTrack): boolean {\n //@ts-ignore\n return track.expired;\n }\n\n private isValidTrack(track: TextTrack): boolean {\n if (!track) {\n return false;\n }\n\n if (!this.isTextTrack(track.kind)) {\n return false;\n }\n\n if (this.isExpired(track)) {\n return false;\n }\n\n return true;\n }\n\n // TODO: move strings into enum or props?\n private createVttTextTrack(el: HTMLVideoElement, src: string): void {\n // For Src to load and parse VTT must be this way. \n const t = document.createElement('track');\n t.kind = TextTrackType.CAPTIONS;\n t.label = 'English';\n t.srclang = 'en';\n t.id = 'sidecar-vtt';\n t.src = src;\n el.appendChild(t);\n\n // Safari native will set the mode to \"showing\" causing a flicker\n t.track.mode = TextTrackMode.DISABLED;\n }\n\n private processSmpteTimedText(url: string) {\n const converter = new SmpteToVttCueConverter(url, this.system);\n converter.convert().then(result => {\n this.createSmpteTextTrack(this.video, result);\n this.logger.log(LogLevel.INFO, 'Smpte XML conversion and text track creation successful');\n }).catch(e => {\n this.logger.log(LogLevel.INFO, 'Smpte XML conversion and text track creation error', e.message);\n });\n }\n\n private createSmpteTextTrack(el: HTMLVideoElement, cues: Array): void {\n try {\n const t = el.addTextTrack(TextTrackType.CAPTIONS, 'English', 'en');\n Util.forEach(cues, (item) => t.addCue(item));\n } catch (error) {\n this.logger.log(LogLevel.INFO, error);\n }\n }\n};\n","import { Emitter } from '../../core/Emitter';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { TextTrackMode } from '../../enum/TextTrackMode';\nimport { EventInterface } from '../../iface/EventInterface';\nimport { LoggerInterface } from '../../iface/LoggerInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { VideoSurfaceConfigInterface } from '../../iface/VideoSurfaceConfigInterface';\nimport { VideoSurfaceInterface } from '../../iface/VideoSurfaceInterface';\nimport { waitForEvent } from '../../util/Async';\nimport { TextTrackSurfaceEvents } from '../enum/TextTrackSurfaceEvents';\nimport { VideoSurfaceEvents } from '../enum/VideoSurfaceEvents';\nimport { TextTrackSurface } from './TextTrackSurface';\n\n\nexport class Html5VideoSurface extends Emitter implements VideoSurfaceInterface {\n\n private logger: LoggerInterface;\n private pVideo: HTMLVideoElement;\n private timeAtLastBufferCheck: number = NaN;\n private textTrackSurface: TextTrackSurface = null;\n\n private pBuffering: boolean = false;\n private pSeeking: number = NaN;\n private pVideoEventHandler = (e: Event) => this.onVideoElementEvent(e);\n private pTextTrackEventHandler = (e: EventInterface) => this.onTextTrackSurfaceEvent(e);\n\n constructor(config: VideoSurfaceConfigInterface, useTextTrackSurface: boolean = true) {\n super();\n\n this.pVideo = config.video;\n this.logger = config.logger;\n if (useTextTrackSurface) {\n this.textTrackSurface = new TextTrackSurface(config);\n }\n this.logger.log(LogLevel.INFO, 'Html5VideoSurface created');\n }\n\n override destroy() {\n this.removeEvents();\n if (this.textTrackSurface) {\n this.textTrackSurface.destroy();\n }\n this.textTrackSurface = null;\n this.pVideo = null;\n super.destroy();\n }\n\n async load(startTime?: number) {\n await waitForEvent(this, VideoSurfaceEvents.LOADED_METADATA);\n\n if (!startTime) {\n return;\n }\n\n await this.seek(startTime);\n }\n\n async play(): Promise {\n try {\n await this.pVideo.play();\n }\n catch (error) {\n this.logger.warn('Exception caught in play() Promise: ' + error.message, LogLevel.WARN);\n this.emit(VideoSurfaceEvents.AUTOPLAY_BLOCKED, error);\n }\n }\n\n pause(): void {\n this.pVideo && this.pVideo.pause();\n }\n\n async seek(value: number): Promise {\n this.pVideo.currentTime = value;\n await waitForEvent(this, VideoSurfaceEvents.SEEKED);\n }\n\n addEvents(): void {\n for (let item in VideoSurfaceEvents) {\n this.pVideo.addEventListener((VideoSurfaceEvents)[item], this.pVideoEventHandler);\n }\n\n if (!this.textTrackSurface) {\n return;\n }\n\n for (let item in TextTrackSurfaceEvents) {\n this.textTrackSurface.on((TextTrackSurfaceEvents)[item], this.pTextTrackEventHandler);\n }\n }\n\n clearCue(): void {\n this.textTrackSurface?.clearCue();\n }\n\n get video(): HTMLVideoElement {\n return this.pVideo;\n }\n\n set src(value: string) {\n this.pVideo && (this.pVideo.src = value);\n }\n\n set volume(value: number) {\n this.pVideo && (this.pVideo.volume = value);\n }\n get volume(): number {\n return this.pVideo ? this.pVideo.volume : null;\n }\n\n set muted(value: boolean) {\n this.pVideo && (this.pVideo.muted = value);\n }\n get muted(): boolean {\n return this.pVideo ? this.pVideo.muted : null;\n }\n\n get paused(): boolean {\n return this.pVideo ? this.pVideo.paused : null;\n }\n\n get time(): number {\n return this.pVideo ? this.pVideo.currentTime : null;\n }\n\n get duration(): number {\n return this.pVideo ? this.pVideo.duration : null;\n }\n\n get state(): string {\n return ''; //TODO add playback state trap on event and return string here.\n }\n\n set textTrackMode(mode: TextTrackMode) {\n if (!this.textTrackSurface) {\n return;\n }\n\n this.textTrackSurface.textTrackMode = mode;\n }\n\n set textTrack(track: TextTrack) {\n if (!this.textTrackSurface) {\n return;\n }\n\n this.textTrackSurface.textTrack = track;\n }\n\n get textTrack(): TextTrack {\n return this.textTrackSurface.textTrack;\n }\n\n set textTrackSrc(url: string) {\n if (!this.textTrackSurface) {\n return;\n }\n\n this.textTrackSurface.timeTextSrc = url;\n }\n\n get textTracks(): TextTrack[] {\n return this.textTrackSurface.textTracks;\n }\n\n get bufferLength(): number {\n let n = 0;\n\n if (this.pVideo && this.pVideo.buffered.length > 0) {\n n = this.pVideo.buffered.end(this.pVideo.buffered.length - 1) - this.pVideo.currentTime;\n }\n\n return n;\n }\n\n get seeking(): boolean {\n return !isNaN(this.pSeeking);\n }\n\n get buffering(): boolean {\n if (!this.paused && this.pVideo) {\n const threshold = (this.timeAtLastBufferCheck + 0.001);\n this.timeAtLastBufferCheck = this.pVideo.currentTime;\n const stalled = this.pVideo.currentTime < threshold;\n this.pBuffering = this.pVideo.readyState >= 1 && stalled && !this.seeking;\n }\n\n return this.pBuffering;\n }\n\n get framerate(): number {\n //@ts-ignore // does not cast\n const frames = this.pVideo.webkitDecodedFrameCount || this.pVideo.mozPresentedFrames || Number.NaN;\n return isNaN(frames) ? frames : frames / this.pVideo.currentTime;\n }\n\n get metrics(): StrAnyDict {\n let result = {\n droppedVideoFrames: Number.NaN,\n totalVideoFrames: Number.NaN\n };\n\n if (!this.pVideo) {\n return result;\n }\n\n const hasWebKit = ('webkitDroppedFrameCount' in this.pVideo) && ('webkitDecodedFrameCount' in this.pVideo);\n const hasQuality = ('getVideoPlaybackQuality' in this.pVideo);\n\n if (hasQuality) {\n result = this.pVideo.getVideoPlaybackQuality();\n }\n else if (hasWebKit) {\n result = {\n //@ts-ignore // does not cast\n droppedVideoFrames: this.pVideo.webkitDroppedFrameCount,\n //@ts-ignore // does not cast\n totalVideoFrames: this.pVideo.webkitDroppedFrameCount + this.pVideo.webkitDecodedFrameCount\n };\n }\n\n return result;\n }\n\n // From HTML5 video element \n private onVideoElementEvent(event: Event): void {\n // modified seeking/seeked behavior to avoid buffering oscillations after seeking\n const { type } = event;\n switch (type) {\n case VideoSurfaceEvents.SEEKING:\n // ignore double seeking events\n if (this.seeking) {\n return;\n }\n this.pSeeking = this.pVideo.currentTime + 0.001;\n break;\n\n case VideoSurfaceEvents.SEEKED:\n if (!this.pVideo.paused) {\n // ignore the normal seeked event if not paused\n return;\n }\n else {\n // allow the normal seeked event to proceed if paused\n this.pSeeking = NaN;\n }\n break;\n\n case VideoSurfaceEvents.TIME_UPDATE:\n // generate a synthetic seeked event when the playhead advances\n if (this.pSeeking <= this.pVideo.currentTime) {\n this.pSeeking = NaN;\n this.emit(VideoSurfaceEvents.SEEKED, event);\n }\n break;\n }\n\n this.emit(event.type, event);\n }\n\n //From emitter-based TextTrackSurface\n private onTextTrackSurfaceEvent(e: EventInterface): void {\n this.emit(e.type, e.data);\n }\n\n private removeEvents(): void {\n for (let item in VideoSurfaceEvents) {\n this.pVideo.removeEventListener((VideoSurfaceEvents)[item], this.pVideoEventHandler);\n }\n\n if (!this.textTrackSurface) {\n return;\n }\n\n for (let item in TextTrackSurfaceEvents) {\n this.textTrackSurface.on((TextTrackSurfaceEvents)[item], this.pTextTrackEventHandler);\n }\n }\n}\n","import { DestroyInterface } from '../..';\nimport { Util } from '../../core/Util';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { TextTrackEvent } from '../../enum/TextTrackEvent';\nimport { TextTrackMode } from '../../enum/TextTrackMode';\nimport { WILDCARD } from '../../enum/WildCard';\nimport { LoggerInterface } from '../../iface/LoggerInterface';\nimport { MetadataCuepointInterface } from '../../iface/MetadataCuepointInterface';\nimport { VideoSurfaceConfigInterface } from '../../iface/VideoSurfaceConfigInterface';\nimport { TextTrackType } from '../enum/TextTrackType';\nimport { VideoSurfaceEvents } from '../enum/VideoSurfaceEvents';\n\nexport class MetadataSurface implements DestroyInterface {\n\n private static MAX_ID3_DEDUPE_LENGTH = 32;\n\n private logger: LoggerInterface;\n private video: HTMLVideoElement;\n private onMetadataCuepoint: (cue: MetadataCuepointInterface) => void;\n private metadataTracks: TextTrack[] = [];\n private id3Map: MetadataCuepointInterface[] = [];\n private daiId3 = /^google_/;\n private id3OwnerIds: string[];\n private maxId3DedupeLength = MetadataSurface.MAX_ID3_DEDUPE_LENGTH;\n\n constructor(config: VideoSurfaceConfigInterface, onMetadataCuepoint: (cue: MetadataCuepointInterface) => void) {\n this.onMetadataCuepoint = onMetadataCuepoint;\n this.video = config.video;\n\n this.id3OwnerIds = ['com.cbsi.live.sg'].concat(config.resource.playback.id3OwnerIds || []);\n\n const maxId3DedupeLength = config.playerOptions.overrides?.maxId3DedupeLength;\n if (maxId3DedupeLength != null) {\n this.maxId3DedupeLength = maxId3DedupeLength;\n }\n\n this.addEvents();\n\n this.logger = config.logger;\n this.logger.log(LogLevel.INFO, 'MetadataSurface created');\n }\n\n destroy() {\n this.onMetadataCuepoint = null;\n this.id3Map = null;\n this.removeEvents();\n Util.forEach(this.metadataTracks, (t) => this.cleanupTrack(t));\n }\n\n private addEvents(): void {\n this.video.textTracks.addEventListener(TextTrackEvent.ADD_TRACK, this.onTextTrackAdded);\n this.video.addEventListener(VideoSurfaceEvents.SEEKING, this.onSeeking);\n }\n\n private removeEvents(): void {\n this.video.textTracks.removeEventListener(TextTrackEvent.ADD_TRACK, this.onTextTrackAdded);\n this.video.removeEventListener(VideoSurfaceEvents.SEEKING, this.onSeeking);\n Util.forEach(this.metadataTracks, (t) => t.removeEventListener(TextTrackEvent.CUE_CHANGE, this.onCueChange));\n }\n\n private clearId3() {\n this.id3Map = [];\n }\n\n private cleanupTrack(track: TextTrack) {\n function cleanupCue(cue: TextTrackCue) {\n try {\n if (cue) {\n track.removeCue(cue);\n }\n }\n catch (error) {\n // ignore errors and continue cleanup\n }\n }\n\n // Cues must be cleaned up in reverse order. Otherwise half of the cues will be left behind.\n Util.forEachReverse(track.cues, cleanupCue);\n Util.forEachReverse(track.activeCues, cleanupCue);\n\n //@ts-ignore\n track.expired = true;\n\n //@ts-ignore\n track.mode = TextTrackMode.DISABLED;\n }\n\n private onTextTrackAdded = (e: TrackEvent): void => {\n const track = e.track;\n\n if (!this.isValidTrack(track)) {\n return;\n }\n\n track.mode = TextTrackMode.HIDDEN;\n track.addEventListener(TextTrackEvent.CUE_CHANGE, this.onCueChange);\n };\n\n private onCueChange = (e: Event): void => {\n const t = e.target;\n const cues = t && t.activeCues;\n\n if (!cues || !cues.length) {\n return;\n }\n\n Util.forEach(cues, cue => this.processId3(cue));\n };\n\n private onSeeking = () => {\n this.clearId3();\n };\n\n private processId3(cue: any): void {\n if (Util.isEmpty(cue.value)) {\n return;\n }\n\n const { value, startTime, endTime } = cue;\n const { key, info = '', data } = value;\n const metadata = { key, info, data, startTime, endTime } as any;\n\n if (key === 'TXXX' && this.daiId3.test(data)) {\n if (Util.isEmpty(info)) {\n metadata.info = data;\n }\n metadata.id = 'google_dai';\n }\n else {\n metadata.id = Util.find(this.id3OwnerIds, id => id === WILDCARD || Util.includes(info, id));\n }\n\n if (!metadata.id) {\n return;\n }\n\n let text;\n\n try {\n text = (data instanceof ArrayBuffer) ? Util.bufferToString(data) : data;\n }\n catch (error) {\n text = '';\n }\n\n // TODO: Deprecate this conversion. Promote the use of the `text` property\n if (key === 'PRIV' && this.id3OwnerIds[0] === info) {\n metadata.data = text;\n }\n\n metadata.text = text;\n\n const duplicate = this.id3Map.some(d => d.info === metadata.info && d.startTime == metadata.startTime && d.text == metadata.text);\n\n if (duplicate) {\n return;\n }\n\n if (this.id3Map.length > this.maxId3DedupeLength) {\n this.id3Map.pop();\n }\n this.id3Map.unshift(metadata);\n\n this.onMetadataCuepoint(metadata);\n }\n\n private isMetadataTrack(type: string) {\n return type === TextTrackType.METADATA;\n }\n\n private isExpired(track: TextTrack): boolean {\n //@ts-ignore\n return track.expired;\n }\n\n private isValidTrack(track: TextTrack): boolean {\n if (!track) {\n return false;\n }\n\n if (!this.isMetadataTrack(track.kind)) {\n return false;\n }\n\n if (this.isExpired(track)) {\n return false;\n }\n\n return true;\n }\n};\n","export const WILDCARD = '*';\n","import { ErrorCode } from '../../..';\nimport { Utilities } from '../../../core/Utilities';\nimport { LogLevel } from '../../../enum/LogLevel';\nimport { QualityMode } from '../../../enum/QualityMode';\nimport { AudioTrackInterface } from '../../../iface/AudioTrackInterface';\nimport { AudioTracksInterface } from '../../../iface/AudioTracksInterface';\nimport { DestroyInterface } from '../../../iface/DestroyInterface';\nimport { EventInterface } from '../../../iface/EventInterface';\nimport { LiveStreamInfoInterface } from '../../../iface/LiveStreamInfoInterface';\nimport { LoggerInterface } from '../../../iface/LoggerInterface';\nimport { PlaybackAdapterContextInterface } from '../../../iface/PlaybackAdapterContextInterface';\nimport { PlaybackAdapterDelegateInterface } from '../../../iface/PlaybackAdapterDelegateInterface';\nimport { PlaybackAdapterInterface } from '../../../iface/PlaybackAdapterInterface';\nimport { PlaybackMetricsInterface } from '../../../iface/PlaybackMetricsInterface';\nimport { QualityInfoInterface } from '../../../iface/QualityInfoInterface';\nimport { QualityInterface } from '../../../iface/QualityInterface';\nimport { RangeInterface } from '../../../iface/RangeInterface';\nimport { StreamMetadataInterface } from '../../../iface/StreamMetadataInterface';\nimport { TextTrackInterface } from '../../../iface/TextTrackInterface';\nimport { TextTracksInterface } from '../../../iface/TextTracksInterface';\nimport { VideoSurfaceInterface } from '../../../iface/VideoSurfaceInterface';\nimport { TextTrackSurfaceEvents } from '../../../playback/enum/TextTrackSurfaceEvents';\nimport { TextTrackType } from '../../../playback/enum/TextTrackType';\nimport { VideoSurfaceEvents } from '../../../playback/enum/VideoSurfaceEvents';\nimport { Html5VideoSurface } from '../../../playback/surface/Html5VideoSurface';\nimport { MetadataSurface } from '../../../playback/surface/MetadataSurface';\n\nexport class PlaybackAdapterBase implements PlaybackAdapterInterface {\n protected context: PlaybackAdapterContextInterface;\n protected options: any;\n protected logger: LoggerInterface;\n protected delegate: PlaybackAdapterDelegateInterface;\n protected videoSurface: VideoSurfaceInterface;\n protected multiCdnHeaderPresent: boolean = true;\n protected liveStreamInfo: LiveStreamInfoInterface = {\n isPlayingLive: false,\n liveEdgeOffset: NaN,\n dvrWindowSize: NaN,\n safeSeekingDuration: NaN,\n safeSeekingTime: NaN,\n relativeTime: NaN,\n relativeDuration: NaN,\n absoluteStart: NaN,\n absoluteTime: NaN,\n absoluteDuration: NaN,\n };\n\n protected lastKnownTimes: any = {\n absolute: NaN,\n relative: NaN,\n end: NaN,\n };\n\n protected textTrackInfo: TextTracksInterface = {\n track: null,\n tracks: [],\n };\n\n protected qualityInfo: QualityInfoInterface = {\n quality: null,\n qualities: [],\n mode: QualityMode.AUTO,\n };\n\n protected audioTrackInfo: AudioTracksInterface = {\n track: null,\n tracks: [],\n };\n\n constructor(context: PlaybackAdapterContextInterface, options: any = {}, useTextSurface: boolean = true) {\n this.context = context;\n this.options = options;\n this.delegate = this.context.getDelegate();\n this.logger = context.logger;\n this.videoSurface = this.createVideoSurface(useTextSurface);\n this.onSurfaceEvent = this.onSurfaceEvent.bind(this);\n this.videoSurface.addEvents();\n }\n\n createVideoSurface(useTextSurface: boolean = true) {\n return new Html5VideoSurface(this.context, useTextSurface);\n }\n\n createMetadataSurface(): DestroyInterface {\n return new MetadataSurface(this.context, this.delegate.metadataCuepoint);\n }\n\n enableSurfaceEvents(enabled: boolean) {\n const action = (enabled) ? 'on' : 'off';\n Utilities.values(VideoSurfaceEvents).forEach(event => this.videoSurface[action](event, this.onSurfaceEvent));\n Utilities.values(TextTrackSurfaceEvents).forEach(event => this.videoSurface[action](event, this.onSurfaceEvent));\n }\n\n protected onSurfaceEvent(event: EventInterface): void {\n switch (event.type) {\n case VideoSurfaceEvents.TIME_UPDATE:\n this.delegate.timeUpdate();\n break;\n\n case VideoSurfaceEvents.PLAYING:\n this.delegate.playing();\n break;\n\n case VideoSurfaceEvents.PAUSE:\n this.delegate.paused();\n break;\n\n case VideoSurfaceEvents.SEEKING:\n this.delegate.seeking();\n break;\n\n case VideoSurfaceEvents.SEEKED:\n this.delegate.seeked();\n break;\n\n case VideoSurfaceEvents.ENDED:\n this.delegate.ended();\n break;\n\n case VideoSurfaceEvents.DURATION_CHANGE:\n this.delegate.durationChange();\n break;\n\n case VideoSurfaceEvents.VOLUME_CHANGE:\n this.delegate.volumeChange(event.data.target.volume, event.data.target.muted);\n break;\n\n case TextTrackSurfaceEvents.TEXT_CUEPOINT:\n this.delegate.textCuepoints(event.data.activeCues);\n break;\n\n case TextTrackSurfaceEvents.TEXT_TRACK_DISPLAY_MODE_CHANGE:\n this.delegate.textTrackDisplayModeChange(event.data.mode);\n break;\n\n case TextTrackSurfaceEvents.TEXT_TRACK_ADDED:\n this.textTrackInfo.tracks.push(event.data as TextTrackInterface);\n break;\n\n case TextTrackSurfaceEvents.TEXT_TRACK_AVAILABLE:\n this.delegate.textTrackInfoChange(this.textTrackInfo);\n break;\n\n case TextTrackSurfaceEvents.TEXT_TRACK_CHANGE:\n const track = event.data as TextTrackInterface;\n this.textTrackInfo.track = track;\n this.delegate.textTrackChange(track);\n break;\n }\n }\n\n protected getSegmentDuration(): number {\n return 6;\n }\n\n protected getSeekable(): RangeInterface {\n const result = { start: 0, end: 0 };\n const video = this.videoSurface.video;\n const range = video.seekable;\n const index = range.length - 1;\n if (index >= 0) {\n result.start = range.start(index);\n result.end = range.end(index);\n }\n\n return result;\n }\n\n protected getErrorMessage(msg: string, isFatal: boolean, retry: string = 'n/a'): string {\n return `${msg} fatal: ${isFatal} retry: ${retry}`;\n }\n\n protected throwError(code: ErrorCode, message: string, data: any, fatal: boolean = true) {\n this.logger.log(LogLevel.ERROR, message);\n this.delegate.error({ code, message, data, fatal });\n }\n\n getIsLiveStream() {\n return this.getDuration() == Infinity;\n }\n\n setAutoQualitySwitching(auto: boolean): void {\n throw new Error('setAutoQualitySwitching Method not implemented.');\n }\n\n setQuality(quality: QualityInterface): void {\n throw new Error('setQuality Method not implemented.');\n }\n\n setMinBitrate(value: number): void {\n // no-op\n }\n\n setMaxBitrate(value: number): void {\n // no-op\n }\n\n setTextTrack(track: TextTrackInterface): void {\n this.videoSurface.textTrack = track as TextTrack;\n }\n\n setTextTrackMode(mode: TextTrackMode): void {\n this.videoSurface.textTrackMode = mode;\n }\n\n setAudioTrack(track: AudioTrackInterface): void {\n throw new Error('setAudioTrack Method not implemented.');\n }\n\n getType(): string {\n throw new Error('getType Method not implemented.');\n }\n\n getCurrentTime(): number {\n return this.videoSurface.time;\n }\n\n getDuration(): number {\n return this.videoSurface.duration;\n }\n\n getBufferLength(): number {\n return this.videoSurface.bufferLength;\n }\n\n getLiveStreamInfo(): LiveStreamInfoInterface {\n const details: LiveStreamInfoInterface = this.liveStreamInfo;\n const video = this.videoSurface.video;\n const { start, end } = this.getSeekable();\n const time = video.currentTime;\n const duration = end - start;\n const segmentDuration = this.getSegmentDuration();\n const count = this.context.resource.playback.liveEdgeSyncFragmentCount;\n const safeSeekDuration = this.context.resource.overrides?.safeSeekDuration || segmentDuration;\n\n details.relativeTime = Math.max(time - start, 0);\n details.relativeDuration = duration;\n details.absoluteDuration = Date.now();\n details.dvrWindowSize = Math.floor(duration);\n details.liveEdgeOffset = (segmentDuration * count) + segmentDuration;\n details.safeSeekingTime = Math.ceil(start + safeSeekDuration);\n details.safeSeekingDuration = Math.floor(end - safeSeekDuration);\n details.isPlayingLive = Math.ceil(time + details.liveEdgeOffset) >= details.safeSeekingDuration;\n\n if (end != this.lastKnownTimes.end) {\n this.lastKnownTimes.end = end;\n details.absoluteStart = details.absoluteDuration - (duration * 1000);\n this.lastKnownTimes.absolute = Math.round(details.absoluteStart + (details.relativeTime * 1000));\n this.lastKnownTimes.relative = time;\n }\n\n const delta = Math.round((time - this.lastKnownTimes.relative) * 1000);\n details.absoluteTime = this.lastKnownTimes.absolute + delta;\n\n return details;\n }\n\n async destroy(): Promise {\n this.videoSurface.destroy();\n }\n\n async load(): Promise | void> {\n this.enableSurfaceEvents(true);\n }\n\n async play(): Promise {\n await this.videoSurface.video.play();\n }\n\n pause(): void {\n this.videoSurface.pause();\n }\n\n suspend(): void {\n // no-op\n }\n\n resume(): void {\n // no-op\n }\n\n async seek(position: number): Promise {\n await this.videoSurface.seek(position);\n }\n\n resize(): void {\n // no-op\n }\n\n clearText(): void {\n this.videoSurface.clearCue();\n }\n\n getMetrics(): PlaybackMetricsInterface {\n return {\n droppedVideoFrames: NaN,\n framerate: NaN,\n bandwidth: NaN,\n };\n }\n\n protected async createSidecarTextTrack(url: string) {\n const isVtt = url.indexOf('.vtt') >= 0;\n const video = this.context.video;\n const label = 'English';\n const language = 'en';\n\n if (isVtt) {\n const track = document.createElement('track');\n track.kind = TextTrackType.CAPTIONS;\n track.label = label;\n track.srclang = language;\n track.id = 'sidecar-vtt';\n track.src = url;\n video.appendChild(track);\n track.track.mode = this.context.textTrackSettings.mode;\n }\n else {\n try {\n const track = video.addTextTrack(TextTrackType.CAPTIONS, label, language);\n Utilities.smpteToVtt(url, track, this.context.system);\n\n this.logger.log(LogLevel.INFO, 'Smpte XML conversion and text track creation successful');\n }\n catch (error) {\n this.logger.log(LogLevel.INFO, 'Smpte XML conversion and text track creation error', error.message);\n }\n }\n }\n}\n","import { MetricInterface } from '../iface/MetricInterface';\n\nexport class Metric implements MetricInterface {\n key: string;\n value: any;\n timeStamp: number;\n type: string;\n\n constructor(key: string, value: T, type?: string) {\n this.key = key;\n this.value = value;\n this.type = type;\n this.timeStamp = Date.now();\n }\n}\n","export enum Header {\n MULTI_CDN = 'x-cdn',\n}\n","export enum LocalizationId {\n\tMEDIA_PLAYER = 'media-player',\n}\n","export enum UiMetric {\n SEEK_BY = 'seek_by',\n}\n","export class CoreError extends Error {\n constructor(message: string, public cause?: Error) {\n super(message);\n }\n}\n","export enum PlaybackAdapterType {\n HLSJS = 'hlsjs',\n DASHJS = 'dashjs',\n SHAKA = 'shaka',\n HTML5 = 'html5',\n PLAY_STATION = 'playStation',\n UNKNOWN = 'unknown',\n\n /**\n * @deprecated \n */\n TWITCH_LOW_LATENCY = 'twitchLowLatency',\n}\n","export enum DrmType {\n WIDEVINE = \"com.widevine.alpha\",\n PLAYREADY = \"com.microsoft.playready\",\n CLEAR_KEY = \"org.w3.clearkey\",\n FAIRPLAY_1_0 = \"com.apple.fps.1_0\"\n}\n\n","import { HookType } from '../enum/HookType';\nimport { CoreError } from './CoreError';\n\nexport class HookError extends CoreError {\n override readonly name = \"HookError\";\n\n constructor(public type: HookType, message: string, cause?: Error) {\n super(`(${type}): ${message}`, cause);\n }\n}\n","import { ErrorCode } from '../enum/ErrorCode';\nimport { ErrorInfoInterface } from '../iface/ErrorInfoInterface';\nimport { CoreError } from './CoreError';\n\nexport class PlayerError extends CoreError implements ErrorInfoInterface {\n override readonly name = \"PlayerError\";\n\n data: any;\n\n constructor(public code: ErrorCode, message: string, cause?: Error, public fatal = true) {\n super(message, cause);\n this.data = cause;\n }\n}\n","export enum ProxyName {\n AdDataProxy = 'AdDataProxy',\n ContentPlaybackStateProxy = 'ContentPlaybackStateProxy',\n PlayerDomProxy = 'PlayerDomProxy',\n Playlist = \"PlaylistProxy\",\n ModelCollectionProxy = 'ModelCollectionProxy',\n ResourceProxy = 'ResourceProxy',\n TrackingConfigProxy = 'TrackingConfigProxy',\n PerformanceProxy = 'PerformanceProxy',\n TextTrackProxy = 'TextTrackProxy',\n LocalizationProxy = 'LocalizationProxy',\n ActivityProxy = 'ActivityProxy',\n AdapterProxy = 'AdapterProxy',\n HookProxy = 'HookProxy',\n}\n","import { Emitter } from '../core/Emitter';\n\n\nexport class Timer extends Emitter {\n\n static TICK: string = 'tic';\n static TIC_EVENT: string = Timer.TICK;\n\n private pInterval: number;\n private timer: any = NaN;\n private pCount: number = 0;\n\n constructor(pInterval: number = 250) {\n super({});\n this.pInterval = pInterval;\n }\n\n override destroy() {\n this.stop();\n super.destroy();\n }\n\n start() {\n if (this.running) {\n return;\n }\n\n this.timer = setInterval(() => {\n this.pCount++;\n this.emit(Timer.TIC_EVENT, { count: this.pCount });\n }, this.pInterval);\n }\n\n stop() {\n clearInterval(this.timer);\n this.timer = NaN;\n this.pCount = 0;\n }\n\n get running(): boolean {\n return !isNaN(this.timer);\n }\n\n get interval(): number {\n return this.pInterval;\n }\n\n get count(): number {\n return this.pCount;\n }\n}\n","import { AppResources } from './app/AppResources';\n\nexport { PlaybackAdapterBase } from './app/adapter/playback/PlaybackAdapterBase';\nexport * from './core';\nexport * as core from './core';\nexport { buildInfo } from './core/BuildInfo';\nexport { AccessibilityAction } from './enum/AccessibilityAction';\nexport { ActiveState } from './enum/ActiveState';\nexport { AdapterRole } from './enum/AdapterRole';\nexport { AdBreakType } from './enum/AdBreakType';\nexport { AdContext } from './enum/AdContext';\nexport { AdTechnology } from './enum/AdTechnology';\nexport { ApiMetric } from './enum/ApiMetric';\nexport { Autoplay } from './enum/Autoplay';\nexport { Browser } from './enum/Browser';\nexport { Device } from './enum/Device';\nexport { ErrorCode } from './enum/ErrorCode';\nexport { FileExtensionToMimeType } from './enum/FileExtensionToMimeType';\nexport { Header } from './enum/Header';\nexport { HookType } from './enum/HookType';\nexport { KeyboardScope } from './enum/KeyboardScope';\nexport { LocalizationId } from './enum/LocalizationId';\nexport { LocalizedLanguage } from './enum/LocalizedLanguage';\nexport { LogLevel } from './enum/LogLevel';\nexport { MetricType } from './enum/MetricType';\nexport { NativePlugin } from './enum/NativePlugin';\nexport { Os } from './enum/Os';\nexport { PerformanceMode } from './enum/PerformanceMode';\nexport { Platform } from './enum/Platform';\nexport { PlaybackState } from './enum/PlaybackState';\nexport { PlayerEvent } from './enum/PlayerEvent';\nexport { PluginPriority } from './enum/PluginPriority';\nexport { QualityCategory } from './enum/QualityCategory';\nexport { QualityLabel } from './enum/QualityLabel';\nexport { QualityMode } from './enum/QualityMode';\nexport { StreamType } from './enum/StreamType';\nexport { TextTrackEvent } from './enum/TextTrackEvent';\nexport { TextTrackKind } from './enum/TextTrackKind';\nexport { TextTrackMode } from './enum/TextTrackMode';\nexport { UiMetric } from './enum/UiMetric';\nexport { VideoFormat } from './enum/VideoFormat';\nexport { WILDCARD } from './enum/WildCard';\nexport { HookError } from './error/HookError';\nexport { PlayerError } from './error/PlayerError';\nexport { PlaybackAdapterType } from './playback/enum/PlaybackAdapterType';\nexport * from './util';\nexport * as util from './util';\nexport { MediaCapabilitiesMimeType as MimeType } from './util/enum/MediaCapabilitiesMimeType';\nexport const ErrorMessage = AppResources.messages;\n","\nexport class MvcMessages {\n\n protected constructor() {}\n\n static ERROR_NO_KEY: 'A unique key must be supplied for each Facade constructed.';\n\n static ERROR_KEY_EXISTS: 'A $ACTOR_NAME$ instance for this key already exists.';\n\n}\n","/* Copyright(c) 2006-2018 Futurescale, Inc. */\n/* TypeScript port by Video Technology Group, CBSi Inc. */\n\nimport {\n ServiceContainerInterface,\n ServiceContainerMap,\n ServiceInterface,\n ServiceMap\n} from \"../iface\";\n\nimport {MvcMessages} from \"../mvc/MvcMessages\";\nimport { Logger } from \"../core/Logger\";\n\nexport class ServiceContainer implements ServiceContainerInterface {\n\n protected static serviceContainerMap: ServiceContainerMap = {};\n\n private serviceMap: ServiceMap;\n private readonly multiCoreKey: string;\n\n constructor(key: string) {\n if(ServiceContainer.serviceContainerMap[key]) {\n Logger.error(MvcMessages.ERROR_KEY_EXISTS.replace('$ACTOR_NAME$', 'ServiceContainer'));\n return;\n }\n\n this.multiCoreKey = key;\n this.serviceMap = {};\n }\n\n static getInstance (key: string): ServiceContainerInterface {\n if (!key) return null;\n\n if(this.serviceContainerMap[key] == null) {\n this.serviceContainerMap[key] = new ServiceContainer(key);\n }\n\n return this.serviceContainerMap[key];\n }\n\n static removeServiceContainer(key: string): void {\n this.serviceContainerMap[key] && this.serviceContainerMap[key].destroy();\n delete this.serviceContainerMap[key];\n }\n\n destroy(): void {\n for (let q in this.serviceMap) {\n this.removeService(q);\n }\n this.serviceMap = null;\n }\n\n registerService(service: ServiceInterface): void {\n this.serviceMap[service.name] = service;\n service.onRegister(this.multiCoreKey);\n }\n\n retrieveService(serviceName: string): ServiceInterface {\n return this.serviceMap[serviceName] || null;\n }\n\n hasService(serviceName: string): boolean {\n return this.serviceMap[serviceName] != null;\n }\n\n removeService(serviceName: string): void {\n if (this.serviceMap[serviceName]) {\n this.serviceMap[serviceName].destroy();\n }\n delete this.serviceMap[serviceName];\n }\n\n}\n","/* Copyright(c) 2006-2018 Futurescale, Inc. */\n/* TypeScript port by Video Technology Group, CBSi Inc. */\n\nimport {NotificationHandler, NotificationInterface, ObserverInterface} from \"../iface\";\n\nexport class Observer implements ObserverInterface {\n\n private notify: NotificationHandler;\n private context: any;\n\n constructor (notifyMethod: NotificationHandler, notifyContext: any) {\n this.setNotifyMethod(notifyMethod);\n this.setNotifyContext(notifyContext);\n }\n\n destroy(): void {\n this.context = null;\n this.notify = null;\n }\n\n setNotifyMethod(notifyMethod: NotificationHandler): void {\n this.notify = notifyMethod;\n }\n\n setNotifyContext(notifyContext: any): void {\n this.context = notifyContext;\n }\n\n getNotifyMethod(): NotificationHandler {\n return this.notify;\n }\n\n getNotifyContext(): any {\n return this.context;\n }\n\n notifyObserver(notification: NotificationInterface): void {\n this.getNotifyMethod().call(this.getNotifyContext(), notification);\n }\n\n /**\n * Compare an object to this instance's notification context.\n */\n compareNotifyContext(object: any): boolean {\n return object === this.context;\n }\n}\n","/* Copyright(c) 2006-2018 Futurescale, Inc. */\n/* TypeScript port by Video Technology Group, CBSi Inc. */\n\nimport {MvcMessages} from \"./MvcMessages\";\nimport {Observer} from \"./Observer\";\nimport {\n MediatorInterface,\n MediatorMap,\n NotificationInterface,\n ObserverInterface,\n ObserverMap,\n ViewInterface,\n ViewMap\n} from \"../iface\";\nimport { Logger } from \"../core/Logger\";\n\n\nexport class View implements ViewInterface {\n\n protected static viewMap: ViewMap = {};\n\n private mediatorMap: MediatorMap;\n private observerMap: ObserverMap;\n private readonly multiCoreKey: string;\n\n\n constructor(key: string) {\n if(View.viewMap[key] != null) {\n Logger.error(MvcMessages.ERROR_KEY_EXISTS.replace('$ACTOR_NAME$', 'View'));\n return;\n }\n\n this.multiCoreKey = key;\n this.mediatorMap = {};\n this.observerMap = {};\n\n View.viewMap[this.multiCoreKey] = this;\n\n this.initializeView();\n }\n\n static getInstance(key: string): ViewInterface {\n if (!key) return null;\n\n if (!this.viewMap[key]) {\n this.viewMap[key] = new View(key);\n }\n\n return this.viewMap[key];\n }\n\n static removeView(key: string): void {\n this.viewMap[key] && this.viewMap[key].destroy();\n delete this.viewMap[key];\n }\n\n destroy(): void {\n for (let q in this.mediatorMap) {\n this.removeMediator(this.mediatorMap[q].name);\n }\n\n this.mediatorMap = null;\n this.observerMap = null;\n }\n\n registerObserver(notificationName: string, observer: ObserverInterface): void {\n if(this.observerMap[notificationName] != null) {\n this.observerMap[notificationName].push(observer);\n }\n else {\n this.observerMap[notificationName] = [observer];\n }\n }\n\n notifyObservers(notification: NotificationInterface): void {\n let i, n;\n\n if (this.observerMap[notification.name] != null) {\n let observers_ref = this.observerMap[notification.name],\n observers = [], observer;\n\n for(i = 0, n = observers_ref.length; i < n; i++) {\n observer = observers_ref[i];\n observers.push(observer);\n }\n\n for(i = 0, n = observers.length; i < n; i++) {\n observer = observers[i];\n observer.notifyObserver(notification);\n }\n }\n }\n\n removeObserver(notificationName: string, notifyContext: any) {\n if (!this.observerMap) {\n return;\n }\n let observers = this.observerMap[notificationName],\n i = observers.length;\n\n while(i--) {\n if(observers[i].compareNotifyContext(notifyContext) === true) {\n observers.splice(i, 1);\n break;\n }\n }\n\n if(observers.length == 0) {\n delete this.observerMap[notificationName];\n }\n }\n \n registerMediator(mediator: MediatorInterface): void {\n let name = mediator.name,\n interests, i, n, obs;\n\n if(this.mediatorMap[name]) return;\n\n mediator.initializeNotifier(this.multiCoreKey);\n this.mediatorMap[name] = mediator;\n interests = mediator.listNotificationInterests();\n\n if(interests.length > 0) {\n obs = new Observer(mediator.handleNotification, mediator);\n\n for (i = 0, n = interests.length; i < n; i++) {\n this.registerObserver(interests[i], obs);\n }\n }\n\n mediator.onRegister();\n }\n\n retrieveMediator(mediatorName: string): MediatorInterface {\n return this.mediatorMap[mediatorName];\n }\n\n removeMediator(mediatorName: string): void {\n let mediator = this.mediatorMap[mediatorName],\n interests, i;\n\n if(mediator) {\n interests = mediator.listNotificationInterests();\n i = interests.length;\n\n // remove observers\n while(i--) {\n this.removeObserver(interests[i], mediator);\n }\n\n delete this.mediatorMap[mediatorName];\n mediator.onRemove();\n }\n }\n\n hasMediator(mediatorName: string): boolean {\n return this.mediatorMap[mediatorName] != null;\n }\n\n initializeView(): void {\n /* implementation optional*/\n }\n}\n\n","/* Copyright(c) 2006-2018 Futurescale, Inc. */\n/* TypeScript port by Video Technology Group, CBSi Inc. */\n\nimport {MvcMessages} from \"./MvcMessages\";\nimport {View} from \"./View\";\nimport {Observer} from \"./Observer\";\nimport {\n CommandInterface,\n CommandMap,\n ControllerInterface,\n ControllerMap,\n NotificationInterface,\n ViewInterface\n} from \"../iface\";\nimport { Logger } from \"../core/Logger\";\n\nexport class Controller implements ControllerInterface {\n\n private static controllerMap: ControllerMap = {};\n\n private readonly multiCoreKey: string;\n private commandMap: CommandMap;\n private view: ViewInterface;\n\n constructor(key: string) {\n if (Controller.controllerMap[key]) {\n Logger.error(MvcMessages.ERROR_KEY_EXISTS.replace('$ACTOR_NAME$', 'Controller'));\n return;\n }\n\n this.multiCoreKey = key;\n Controller.controllerMap[this.multiCoreKey] = this;\n\n this.commandMap = {};\n this.view = null;\n this.initializeController();\n }\n\n static getInstance(key: string): ControllerInterface {\n if (!key) return null;\n\n if (!this.controllerMap[key]) {\n this.controllerMap[key] = new Controller(key);\n }\n\n return this.controllerMap[key];\n }\n\n static removeController(key: string): void {\n this.controllerMap[key] && this.controllerMap[key].destroy();\n delete this.controllerMap[key];\n }\n\n destroy(): void {\n for (let q in this.commandMap) {\n this.removeCommand(q);\n }\n\n this.commandMap = null;\n this.view = null;\n }\n\n initializeController(): void {\n this.view = View.getInstance(this.multiCoreKey);\n }\n\n executeCommand(notification: NotificationInterface): void {\n let commandClassRef = this.commandMap[notification.name];\n\n if (!commandClassRef) return;\n\n let commandInstance: CommandInterface = new (commandClassRef)();\n\n commandInstance.initializeNotifier(this.multiCoreKey);\n commandInstance.execute(notification);\n }\n\n registerCommand(notificationName: string, commandClassRef: any) {\n if(!this.commandMap[notificationName]) {\n this.view.registerObserver(notificationName, new Observer(this.executeCommand, this));\n }\n\n this.commandMap[notificationName] = commandClassRef;\n }\n\n\n hasCommand(notificationName: string): boolean {\n return !!this.commandMap[notificationName];\n }\n\n removeCommand(notificationName: string): void {\n if(this.hasCommand(notificationName)) {\n this.view.removeObserver(notificationName, this);\n this.commandMap[notificationName]= null;\n }\n }\n}\n","/* Copyright(c) 2006-2018 Futurescale, Inc. */\n/* TypeScript port by Video Technology Group, CBSi Inc. */\n\nimport {MvcMessages} from \"./MvcMessages\";\nimport {MvcModelInterface, ModelMap, ProxyInterface, ProxyMap} from \"../iface\";\nimport { Logger } from \"../core/Logger\";\n\nexport class Model implements MvcModelInterface {\n\n protected static modelMap: ModelMap = {};\n\n private proxyMap: ProxyMap = null;\n private readonly multiCoreKey: string;\n\n constructor(key: string) {\n if(Model.modelMap[key]) {\n Logger.error(MvcMessages.ERROR_KEY_EXISTS.replace('$ACTOR_NAME$', 'Model'));\n return;\n }\n\n this.multiCoreKey = key;\n Model.modelMap[key]= this;\n\n this.proxyMap = {};\n this.initializeModel();\n }\n\n static getInstance (key: string): MvcModelInterface {\n if (!key) return null;\n\n if(this.modelMap[key] == null) {\n this.modelMap[key] = new Model(key);\n }\n\n return this.modelMap[key];\n }\n\n static removeModel(key: string): void {\n this.modelMap[key] && this.modelMap[key].destroy();\n delete this.modelMap[key];\n }\n\n destroy(): void {\n for (let q in this.proxyMap) {\n this.removeProxy(q);\n }\n this.proxyMap = null;\n }\n\n initializeModel(): void {\n /* implementation optional */\n }\n\n registerProxy(proxy: ProxyInterface): void {\n this.proxyMap[proxy.name] = proxy;\n proxy.initializeNotifier(this.multiCoreKey);\n proxy.onRegister();\n }\n\n retrieveProxy(proxyName: string): ProxyInterface {\n return this.proxyMap[proxyName] || null;\n }\n\n hasProxy(proxyName: string): boolean {\n return this.proxyMap[proxyName] != null;\n }\n\n removeProxy(proxyName: string): void {\n let proxy = this.proxyMap[proxyName];\n\n if(proxy) {\n proxy.onRemove();\n this.proxyMap[proxyName] = null;\n }\n }\n\n}\n","/* Copyright(c) 2006-2018 Futurescale, Inc. */\n/* TypeScript port by Video Technology Group, CBSi Inc. */\n\nimport { NotificationInterface } from '../iface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\n\n\nexport class Notification implements NotificationInterface {\n\n private readonly pName: string | null;\n private readonly pBody: StrAnyDict | null;\n private readonly pType: string | null;\n\n constructor(name: string, body?: StrAnyDict, type?: string) {\n this.pName = name;\n this.pBody = body;\n this.pType = type;\n }\n\n get name(): string | null {\n return this.pName || null;\n }\n\n get body(): StrAnyDict | null {\n return this.pBody || null;\n }\n\n get type(): string | null {\n return this.pType || null;\n }\n\n toString(): string {\n let bdy = `\\nBody: ${this.pBody == null ? 'null' : JSON.stringify(this.body)}`,\n typ = `\\nType: ${this.pType == null ? 'null' : this.type}`;\n\n return `Notification Name: ${this.name + bdy + typ}`;\n }\n}\n","/* Based on Copyright(c) 2006-2018 Futurescale, Inc. */\n/* TypeScript port and service tier mod by Video Technology Group, CBSi Inc. */\n\nimport { ServiceName } from '../enum/ServiceName';\nimport {\n ControllerInterface,\n FacadeInterface,\n FacadeMap, LogServiceInterface, MediatorInterface,\n MvcModelInterface,\n NotificationCommandMapInterface,\n NotificationInterface,\n ProxyInterface, ServiceCollection, ServiceContainerInterface, ServiceInterface,\n ViewInterface\n} from '../iface';\nimport { LoggerInterface } from '../iface/LoggerInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { ServiceContainer } from '../service/ServiceContainer';\nimport { Controller } from './Controller';\nimport { Model } from './Model';\nimport { MvcMessages } from './MvcMessages';\nimport { Notification } from './Notification';\nimport { View } from './View';\n\n\nexport class Facade implements FacadeInterface {\n\n protected static facadeMap: FacadeMap = {};\n\n protected model: MvcModelInterface = null;\n protected view: ViewInterface = null;\n protected controller: ControllerInterface = null;\n protected serviceContainer: ServiceContainerInterface = null;\n\n protected multiCoreKey: string;\n private initialized: boolean = false;\n\n protected constructor(key: string, commandMap: NotificationCommandMapInterface) {\n this.multiCoreKey = key;\n\n this.initializeFacade();\n\n this.registerCommands(commandMap);\n }\n\n static removeCore(key: string): void {\n if (!this.facadeMap[key]) {\n return;\n }\n\n Model.removeModel(key);\n View.removeView(key);\n Controller.removeController(key);\n ServiceContainer.removeServiceContainer(key);\n\n this.facadeMap[key].destroy();\n\n delete this.facadeMap[key];\n }\n\n static hasCore(key: string): boolean {\n return Facade.facadeMap[key] != null;\n }\n\n // used internally by mvc actors\n static getInstance(key: string): FacadeInterface {\n if (!key) {\n throw new Error(MvcMessages.ERROR_NO_KEY);\n }\n\n return this.facadeMap[key];\n }\n\n static createFacade(key: string, commandMap: NotificationCommandMapInterface): FacadeInterface {\n if (!key) {\n throw new Error(MvcMessages.ERROR_NO_KEY);\n }\n\n if (this.facadeMap[key]) {\n const error = new Error(`Not creating facade - key \"${key}\" already exists!`);\n // @ts-ignore\n error.key = key;\n throw error;\n }\n\n this.facadeMap[key] = new Facade(key, commandMap);\n\n return this.facadeMap[key];\n }\n\n ///////////////////////////////////////////////\n // Instance members\n\n destroy(): void {\n this.model = null;\n this.view = null;\n this.controller = null;\n this.serviceContainer = null;\n }\n\n get key(): string {\n return this.multiCoreKey;\n }\n\n // supplied as a semantic alternative to get key()\n get appId(): string {\n return this.multiCoreKey;\n }\n\n get logger(): LoggerInterface {\n return (this.retrieveService(ServiceName.Logging)).logger;\n }\n\n log(...args: any[]): void {\n this.logger.log.apply(this.logger, args);\n }\n\n\n // Controller: Commands\n registerCommand(notificationName: string, commandClassRef: any): void {\n this.controller.registerCommand(notificationName, commandClassRef);\n }\n\n removeCommand(notificationName: string): void {\n this.controller.removeCommand(notificationName);\n }\n\n hasCommand(notificationName: string): boolean {\n return this.controller.hasCommand(notificationName);\n }\n\n // Model: Proxies\n registerProxy(proxy: ProxyInterface): void {\n this.model.registerProxy(proxy);\n }\n\n retrieveProxy(proxyName: string): ProxyInterface {\n return this.model ? this.model.retrieveProxy(proxyName) : null;\n }\n\n removeProxy(proxyName: string): void {\n this.model && this.model.removeProxy(proxyName);\n }\n\n hasProxy(proxyName: string) {\n return this.model.hasProxy(proxyName);\n }\n\n // View: Mediators\n registerMediator(mediator: MediatorInterface): void {\n this.view.registerMediator(mediator);\n }\n\n retrieveMediator(mediatorName: string): MediatorInterface {\n return this.view ? this.view.retrieveMediator(mediatorName) : null;\n }\n\n removeMediator(mediatorName: string): void {\n this.view && this.view.removeMediator(mediatorName);\n }\n\n hasMediator(mediatorName: string): boolean {\n return this.view.hasMediator(mediatorName);\n }\n\n // ServiceContainer: Services\n registerService(service: ServiceInterface): void {\n this.serviceContainer.registerService(service);\n }\n\n retrieveService(serviceName: string): ServiceInterface {\n return this.serviceContainer ? this.serviceContainer.retrieveService(serviceName) : null;\n }\n\n removeService(serviceName: string): void {\n this.model && this.serviceContainer.removeService(serviceName);\n }\n\n hasService(serviceName: string) {\n return this.serviceContainer.hasService(serviceName);\n }\n\n registerGlobalServices(svcCollection: ServiceCollection) {\n for (let s in svcCollection) {\n this.registerService(svcCollection[s]);\n }\n }\n\n // send notification\n /* eslint-disable*/\n sendNotification(name: string, type: string): void;\n sendNotification(name: string, body: StrAnyDict, type: string): void;\n\n sendNotification(name: string, param1?: StrAnyDict | string, param2?: string): void {\n let notification: Notification;\n\n if (typeof param1 === 'string') {\n notification = new Notification(name, {}, param1);\n }\n\n else {\n notification = new Notification(name, param1, param2);\n }\n\n this.notifyObservers(notification);\n }\n /* eslint-enable*/\n\n protected notifyObservers(notification: NotificationInterface): void {\n this.view != null && this.view.notifyObservers(notification);\n }\n\n // command reg\n protected registerCommands(map: NotificationCommandMapInterface) {\n if (!map) {\n return;\n }\n\n for (let q in map) {\n !!map[q] && this.registerCommand(q, map[q]);\n }\n }\n\n // init\n protected initializeServiceContainer(): void {\n this.serviceContainer = ServiceContainer.getInstance(this.multiCoreKey);\n }\n\n protected initializeController(): void {\n this.controller = Controller.getInstance(this.multiCoreKey);\n }\n\n protected initializeModel(): void {\n this.model = Model.getInstance(this.multiCoreKey);\n }\n\n protected initializeView(): void {\n this.view = View.getInstance(this.multiCoreKey);\n }\n\n protected initializeFacade(): void {\n if (this.initialized) {\n throw new Error('Unexpected Condition: Facade already initialized');\n }\n\n this.initializeModel();\n this.initializeController();\n this.initializeView();\n this.initializeServiceContainer();\n\n this.initialized = true;\n }\n}\n","import { ServiceName } from '../enum/ServiceName';\nimport { LogServiceInterface, ServiceInterface } from '../iface';\nimport { LoggerInterface } from '../iface/LoggerInterface';\nimport { Facade } from '../mvc/Facade';\nimport { ProxyName } from '../enum/ProxyName';\nimport { ModelCollectionProxy } from '../model/ModelCollectionProxy';\nimport { ModelName } from '../enum/ModelName';\n\n\nexport class ServiceBase implements ServiceInterface {\n\n private readonly pName: string;\n private facadeKey: string;\n\n constructor(name: string) {\n this.pName = name;\n }\n\n get name(): string {\n return this.pName;\n }\n\n destroy(): void {\n // null op, provide in subclass if desired\n }\n\n onRegister(key: string): void {\n this.facadeKey = key;\n }\n\n protected getLogger(): LoggerInterface {\n const logSvc = this.getService(ServiceName.Logging);\n return logSvc.logger;\n }\n\n protected getService(name: string): ServiceInterface {\n return Facade.getInstance(this.facadeKey).retrieveService(name);\n }\n\n protected getModel(name: ModelName): T {\n return (this.getModelCollection().getModel(name));\n }\n\n protected getModelCollection(): ModelCollectionProxy {\n return Facade.getInstance(this.facadeKey)?.retrieveProxy(ProxyName.ModelCollectionProxy);\n }\n}\n","import { Util } from '../core/Util';\nimport { Browser } from '../enum/Browser';\nimport { Device } from '../enum/Device';\nimport { Os } from '../enum/Os';\nimport { Platform } from '../enum/Platform';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { SystemInfoInterface } from '../iface/SystemInfoInterface';\n\n\nexport class System {\n private static sysInfo: SystemInfoInterface = null;\n private static pGlobal: any;\n\n protected constructor() { }\n\n static get info(): SystemInfoInterface {\n return this.sysInfo;\n }\n\n static get global(): any {\n return this.pGlobal;\n }\n\n static initialize() {\n if (typeof (window) !== \"object\") { // not a browser\n System.pGlobal = null;\n return;\n }\n System.pGlobal = window;\n\n const ua = navigator.userAgent;\n const platformInfo = this.getPlatform(ua);\n const browserInfo = this.getBrowser(ua, platformInfo);\n\n this.sysInfo = (Util.assign({}, browserInfo, platformInfo));\n\n let osVer = this.sysInfo.osVersion,\n osMajVer = osVer && Util.isString(osVer) ? parseInt(osVer.split('.')[0]) : NaN;\n\n this.sysInfo.osMajorVersion = osMajVer;\n }\n\n private static getBrowser(ua: string, platformInfo: StrAnyDict): StrAnyDict {\n /* eslint-disable */\n let re: StrAnyDict = {\n [Browser.CHROME]: /Chrome\\/(\\S+)/,\n [Browser.CHROME_IOS]: /CriOS\\/(\\S+)/,\n [Browser.FIREFOX_IOS]: /FxiOS\\/(\\S+)/,\n [Browser.EDGE]: / Edge?\\/([^\\s]+)/,\n [Browser.FIREFOX]: /Firefox\\/(\\S+)/,\n [Browser.OPERA]: /Opera|OPR\\/(\\S+)/,\n [Browser.SAFARI]: /Version\\/(\\S+).*Safari/,\n [Browser.MSIE]: /MSIE ([^\\s]+)[\\)\\;]\\ Windows/,\n [Browser.ANDROID]: /Android/,\n [Browser.SILK]: /Silk\\/(\\S+)/,\n [Browser.PLAYSTATION_4_WEBMAF]: /Playstation 4 (WebMAF) (\\S+)/,\n [Browser.PLAYSTATION_5]: /PlayStation 5/,\n [Browser.UNKNOWN]: null,\n },\n /* eslint-enable */\n isChromeIos = re[Browser.CHROME_IOS].test(ua),\n isChrome = (\n (re[Browser.CHROME].test(ua) || isChromeIos) &&\n !(re[Browser.OPERA].test(ua)) &&\n !(re[Browser.EDGE].test(ua))\n ),\n assembleInfo = (bName: Browser | string, re: RegExp | null, ua: string): StrAnyDict => {\n let browser: any = re && re.exec(ua),\n out = {\n browser: bName,\n browserVersion: '0',\n browserMajorVersion: 0\n };\n\n if (browser && browser.length && browser.length > 1) {\n out.browserVersion = browser[1] || '';\n\n if (out.browserVersion.indexOf('.')) {\n let ar = out.browserVersion.split('.');\n\n if (Array.isArray(ar) && ar.length) {\n let mv = parseInt(ar[0]);\n !isNaN(mv) && (out.browserMajorVersion = mv);\n }\n }\n else {\n let mv = parseInt(out.browserVersion);\n !isNaN(mv) && (out.browserMajorVersion = mv);\n }\n }\n\n return out;\n };\n\n // checked for Chrome first above - it has a majority\n if (isChrome) {\n let name = isChromeIos ? Browser.CHROME_IOS : Browser.CHROME;\n\n return assembleInfo(name, re[name], ua);\n }\n\n\n let b = this.getMsBrowser(re[Browser.EDGE], re[Browser.MSIE], ua);\n if (b.browser !== Browser.UNKNOWN) {\n return assembleInfo(b.browser, b.re, ua);\n }\n\n // non-MS browsers\n for (let q in re) {\n switch (q) {\n case Browser.FIREFOX: // fall thru\n case Browser.FIREFOX_IOS: // fall thru\n case Browser.SILK: // fall thru\n case Browser.ANDROID: // fall thru \n if (re[q].test(ua)) {\n if (q === Browser.SILK) {\n platformInfo.device = Device.KINDLE;\n }\n return assembleInfo(q, re[q], ua);\n }\n\n break;\n\n case Browser.PLAYSTATION_4_WEBMAF:\n case Browser.PLAYSTATION_5:\n if (re[Browser.PLAYSTATION_5].test(ua) || re[Browser.PLAYSTATION_4_WEBMAF].test(ua)) {\n const isPS5 = re[Browser.PLAYSTATION_5].test(ua);\n const browser = isPS5 ? Browser.PLAYSTATION_5 : Browser.PLAYSTATION_4_WEBMAF;\n platformInfo.device = isPS5 ? Device.PLAYSTATION_5 : Device.PLAYSTATION_4;\n platformInfo.platform = isPS5 ? Device.PLAYSTATION_5 : Device.PLAYSTATION_4;\n platformInfo.os = isPS5 ? Os.PROSPERO : Os.ORBIS;\n\n return assembleInfo(browser, re[browser], ua);\n }\n\n case Browser.SAFARI:\n /*eslint-disable-next-line*/\n let b = this.getSafariBrowser(re[q], ua, platformInfo);\n if (b) {\n return assembleInfo(q, re[q], ua);\n }\n break;\n\n case Browser.OPERA:\n /*eslint-disable-next-line*/\n let test = re[q].exec(ua);\n\n if (test) {\n let browser = (\n test.indexOf('Opera Mini/') >= 0 ||\n test.indexOf('Opera Mobi') >= 0\n ) ? Browser.OPERA_MOBILE : Browser.OPERA;\n\n return assembleInfo(browser, re[q], ua);\n }\n break;\n\n case Browser.UNKNOWN:\n break;\n\n }\n }\n\n return assembleInfo(Browser.UNKNOWN, re[Browser.UNKNOWN], ua);\n }\n\n\n private static getMsBrowser(reEdge: RegExp, reIe: RegExp, ua: string): StrAnyDict {\n // Trident (IE rendering engine) checked last to distinguish IE and Edge\n /* eslint-disable-next-line*/\n let tri = /Trident.[^\\s]+;.*rv:([^\\s]+)[\\)\\;]/;\n\n if (reIe.test(ua)) {\n return { browser: Browser.MSIE, re: reIe };\n }\n else if (reEdge.test(ua)) {\n return { browser: Browser.EDGE, re: reEdge };\n }\n else if (tri.test(ua)) {\n return { browser: Browser.MSIE, re: tri };\n }\n\n return { browser: Browser.UNKNOWN, re: null };\n }\n\n private static getSafariBrowser(re: RegExp, ua: string, platformInfo: StrAnyDict): string | null {\n let test = re.test(ua),\n browserName = platformInfo.os === Os.ANDROID ? Browser.ANDROID : Browser.SAFARI;\n\n if (test && platformInfo.os !== \"Unknown\") {\n return browserName;\n }\n\n return null;\n }\n\n private static getPlatform(userAgent: string): StrAnyDict {\n const ual = userAgent.toLowerCase(),\n out = {\n os: Os.UNKNOWN,\n platform: Platform.UNKNOWN,\n osVersion: '',\n device: Device.UNKNOWN\n };\n\n // Firefox on iOS\n if (ual.indexOf('fxios') >= 0) {\n out.os = Os.IOS;\n out.platform = Platform.MAC;\n if (ual.indexOf('iphone') >= 0) {\n out.device = Device.IPHONE;\n }\n else { // iPad\n out.device = Device.IPAD;\n }\n\n return out;\n }\n\n // Chromecast\n if (ual.indexOf('crkey') >= 0) {\n out.platform = Platform.LINUX;\n out.device = Device.CHROMECAST;\n return out;\n }\n\n let re = /\\s(\\([^)]+\\))/,\n test = re.exec(userAgent);\n\n if (test && test.length && test.length > 1) {\n let pStr = test[1].replace(/_/gi, '.'), // 'platform string'\n tests = [\n (str: string, obj: StrAnyDict) => this.isLinux(str, obj),\n (str: string, obj: StrAnyDict) => this.isMac(str, obj),\n (str: string, obj: StrAnyDict) => this.isWin(str, obj),\n ],\n i = tests.length, ti;\n\n while (i--) {\n ti = tests[i];\n if (ti(i === 0 ? userAgent : pStr, out)) {\n break;\n }\n }\n }\n\n return out;\n }\n\n private static isLinux(str: string, obj: StrAnyDict): boolean {\n const regex = new RegExp(Platform.LINUX, 'i');\n const isArm = /Linux armv/.test(navigator.platform);\n\n if (regex.test(str) || str.indexOf(Os.ANDROID) >= 0) {\n\n obj.platform = Platform.LINUX;\n obj.device = Device.UNKNOWN;\n\n if (str.indexOf(Os.CHROMIUM) >= 0) {\n /* eslint-disable-next-line*/\n let re = /Chromium\\/([\\d+\\.]*)\\s/,\n test = re.exec(str);\n\n obj.os = Os.CHROMIUM;\n obj.osVersion = (test && test[1]) || '';\n }\n else if (str.indexOf(Os.ANDROID) >= 0) {\n let re = / Android ([^\\s]+);/,\n test = re.exec(str);\n\n obj.os = Os.ANDROID;\n obj.osVersion = (test && test[1]) || '';\n obj.device = Device.ANDROID_PHONE;\n }\n else if (str.indexOf(Os.WEBOS) >= 0) {\n obj.os = Os.WEBOS;\n obj.osVersion = 'n/a';\n obj.device = Device.LG_SMART_TV;\n }\n else if (str.indexOf(Os.SMARTCAST) >= 0) {\n obj.os = Os.SMARTCAST;\n obj.osVersion = 'n/a';\n obj.device = Device.VIZIO_SMART_TV;\n }\n else if (str.indexOf(Os.TIZEN) >= 0) {\n let re = /Tizen ([^\\s]+)(;|\\))/,\n test = re.exec(str);\n obj.os = Os.TIZEN;\n obj.osVersion = (test && test[1]) || '';\n obj.device = Device.SAMSUNG_SMART_TV;\n }\n //@ts-ignore\n else if (typeof $badger != 'undefined' || / Xfinity/.test(str) || / WPE/.test(str)) {\n obj.os = Platform.LINUX;\n obj.osVersion = 'n/a';\n obj.device = Device.COMCAST_X1;\n }\n else if (isArm) {\n obj.os = Platform.LINUX;\n obj.osVersion = 'n/a';\n obj.device = Device.EMBEDDED;\n }\n return true;\n }\n\n return false;\n }\n\n private static isMac(str: string, obj: StrAnyDict) {\n\n if (str.indexOf(Platform.MAC) >= 0) { // OSX desktop\n obj.platform = Platform.MAC;\n obj.device = Device.DESKTOP;\n\n if (str.indexOf(Os.OSX) >= 0) {\n /* eslint-disable-next-line*/\n let re = /Mac OS X ([\\d\\.]+)/,\n test = re.exec(str);\n\n obj.os = Os.OSX;\n obj.osVersion = (test && test[1]) ? test[1] : null;\n }\n\n return true;\n\n }\n else if (str.indexOf('like Mac OS X') !== -1) {\n // iOS; 'like Mac...' is used for non-OSX Mac devices\n obj.platform = Platform.MAC;\n obj.os = Os.IOS;\n obj.device = Device.UNKNOWN;\n\n let devices = [/\\(iPhone;/, /\\(iPad;/, /\\(iPod;/],\n names = [Device.IPHONE, Device.IPAD, Device.IPOD],\n i = devices.length,\n re = /\\sOS\\s([^\\s]*)\\s/,\n version = re.exec(str);\n\n if (version && version[1]) {\n obj.osVersion = version[1];\n }\n\n while (i--) {\n if (devices[i].test(str)) {\n obj.device = names[i];\n\n return true;\n }\n }\n\n return true;\n }\n\n return false;\n }\n\n private static isWin(ua: string, obj: StrAnyDict) {\n /* eslint-disable*/\n let re = /(Windows Phone |Windows Phone OS )([^\\s]+);/,\n reNt = /Windows NT ([^\\s]+)[;\\)]/,\n win = re.exec(ua);\n /* eslint-enable*/\n if (win && win[2]) {\n obj.platform = Platform.WINDOWS;\n obj.os = Os.WINDOWS_PHONE;\n obj.osVersion = win[2];\n obj.device = Device.WINDOWS_PHONE;\n\n return true;\n }\n else {\n let test = reNt.exec(ua);\n\n obj.device = Device.DESKTOP;\n\n if (test && test[1]) {\n obj.platform = Platform.WINDOWS;\n obj.os = Os.WINDOWS;\n\n let osVersionNbr = test[1];\n\n if (/Xbox; Xbox One/.test(ua)) {\n obj.device = Device.XBOX_ONE;\n }\n\n if (parseInt(osVersionNbr) == 10) {\n obj.os = Os.WINDOWS10;\n obj.osVersion = osVersionNbr;\n }\n else {\n switch (osVersionNbr) {\n // MS version number/os designations\n case '6.0':\n obj.os = Os.WINDOWS_VISTA;\n break;\n case '6.1':\n obj.os = Os.WINDOWS7;\n obj.osVersion = '7';\n break;\n case '6.2':\n obj.os = Os.WINDOWS8;\n obj.osVersion = '8';\n break;\n }\n }\n\n return true;\n }\n }\n\n return false;\n }\n}\n\nSystem.initialize();\n","import { SimpleVideoInterface } from '../iface';\n\nexport class VirtualVideoElement implements SimpleVideoInterface {\n muted: boolean = false;\n volume: number = NaN;\n currentTime: number = NaN;\n duration: number = NaN;\n}","\nexport enum MediaCapabilitiesCodec {\n AVC = 'avc1.4D401E,mp4a.40.2',\n HEVC = 'hev1.1.2.L93.B0',\n VP8 = 'vp8, opus, vorbis',\n VP9 = 'vp9, opus, vorbis',\n AV1 = 'av1.experimental.e87fb2378f01103d5d6e477a4ef6892dc714e614'\n}\n\n","import { Browser } from \"../enum/Browser\";\nimport { Device } from \"../enum/Device\";\nimport { Os } from \"../enum/Os\";\nimport { Platform } from \"../enum/Platform\";\nimport { ServiceName } from '../enum/ServiceName';\nimport { SimpleVideoInterface, SystemServiceInterface, VersionInfoInterface } from \"../iface\";\nimport { SystemInfoInterface } from \"../iface/SystemInfoInterface\";\nimport { System } from \"../util/System\";\nimport { VirtualVideoElement } from '../util/VirtualVideoElement';\nimport { ServiceBase } from \"./ServiceBase\";\n\nexport class SystemService extends ServiceBase implements SystemServiceInterface {\n\n private static instance: SystemService;\n private appNs: any;\n\n protected constructor() {\n super(ServiceName.System);\n }\n\n static getInstance(): SystemService {\n if (!this.instance) {\n this.instance = new SystemService();\n }\n\n return this.instance;\n }\n\n get appNamespace(): any {\n return this.appNs;\n }\n\n set appNamespace(ns: any) {\n this.appNs = ns;\n }\n\n get info(): SystemInfoInterface {\n return System.info;\n }\n\n get webMafPlayer(): any {\n return this.isWebMaf ? this.global['WM_videoPlayer'] : null;\n }\n\n get isWebMaf(): boolean {\n return !!(this.global && this.global['WM_videoPlayer']);\n }\n\n get isWebOs(): boolean {\n return this.os === Os.WEBOS;\n }\n\n get isChromecast(): boolean {\n return this.device === Device.CHROMECAST;\n }\n\n /**\n * Returns the global object, if it exists (currently, 'window' is the only applicable global)\n */\n get global(): any {\n return System.global;\n }\n\n get document(): HTMLDocument {\n return this.global && (this.global.document || null);\n }\n\n get isDesktop(): boolean {\n return this.info.device === Device.DESKTOP;\n }\n\n get isMobile(): boolean {\n return !this.isDesktop;\n }\n\n get isTv(): boolean {\n switch (this.device) {\n case Device.LG_SMART_TV:\n case Device.VIZIO_SMART_TV:\n case Device.SAMSUNG_SMART_TV:\n case Device.COMCAST_X1:\n return true;\n\n default:\n return false;\n }\n }\n\n get isTizenSmartTv(): boolean {\n return this.device === Device.SAMSUNG_SMART_TV;\n }\n\n get isXboxOne(): boolean {\n return this.device === Device.XBOX_ONE;\n }\n\n get isEmbedded(): boolean {\n return this.device == Device.EMBEDDED;\n }\n\n get browser(): Browser {\n return this.info.browser;\n }\n\n get os(): Os {\n return this.info.os;\n }\n\n get device(): Device {\n return this.info.device;\n }\n\n get platform(): Platform {\n return this.info.platform;\n }\n\n get isIos(): boolean {\n return this.info.os === Os.IOS;\n }\n\n get isAndroid(): boolean {\n const i = this.info;\n return i.device === Device.ANDROID_PHONE || i.device === Os.ANDROID;\n }\n\n get browserVersionInfo(): VersionInfoInterface {\n return this.parseVerStr(this.info.browserVersion);\n }\n\n get osVersionInfo(): VersionInfoInterface {\n return this.parseVerStr(this.info.osVersion);\n }\n\n createSimpleVideoInterface(): SimpleVideoInterface | null {\n return new VirtualVideoElement();\n }\n\n private parseVerStr(str: string): VersionInfoInterface {\n const out: VersionInfoInterface = {\n majorVersion: null,\n minorVersion: null,\n versionString: str || null,\n };\n\n if (str) {\n const spl = str.split('.'),\n mj = parseInt(spl[0], 10),\n mn = parseInt(spl[1], 10);\n\n !isNaN(mj) && (out.majorVersion = mj);\n !isNaN(mn) && (out.minorVersion = mn);\n }\n\n return out;\n }\n}\n","import { AppResources } from '../app/AppResources';\nimport { Browser } from '../enum/Browser';\nimport { Os } from '../enum/Os';\nimport { ServiceName } from '../enum/ServiceName';\nimport { SystemServiceInterface } from '../iface';\nimport { AutoplayInfoInterface } from '../iface/AutoplayInfoInterface';\nimport { ServiceBase } from './ServiceBase';\nimport { SystemService } from './SystemService';\n\n\nexport class AutoplayCapabilitiesService extends ServiceBase {\n\n private static instance: AutoplayCapabilitiesService;\n\n static getInstance(): AutoplayCapabilitiesService {\n if (!this.instance) {\n this.instance = new AutoplayCapabilitiesService();\n }\n\n return this.instance;\n }\n\n private info: AutoplayInfoInterface;\n private testDom: HTMLElement = null;\n private internalCallback: () => void;\n private checkCompleted: boolean = false;\n private testVideoSrc: string = AppResources.blankVideoUrl;\n private timeout: number;\n private detecting: Promise;\n private sysInfo: SystemServiceInterface;\n private readonly isMobile: boolean | null = null;\n\n constructor() {\n super(ServiceName.AutoplayCapabilities);\n\n this.sysInfo = SystemService.getInstance();\n this.info = {\n supportsUnmutedAutoplay: null,\n supportsMutedAutoplay: null\n };\n }\n\n get autoplayInfo(): AutoplayInfoInterface {\n return this.info;\n }\n\n destory() {\n clearTimeout(this.timeout);\n }\n\n // Promise-based determination: Check unmuted first, then muted autoplay\n detectCapabilities(url?: string): Promise {\n if (this.detecting) {\n return this.detecting;\n }\n\n if (url) {\n this.testVideoSrc = url;\n }\n\n return this.detecting = new Promise(resolve => {\n if (!this.checkCompleted) {\n this.createTestDom();\n this.internalCallback = () => resolve(this.info);\n this.checkUnmutedAutoplay();\n }\n else {\n resolve(this.info);\n }\n });\n }\n\n ///////////\n // PRIVATE\n private finishCheck(unmutedOk: boolean, mutedOk: boolean): void {\n this.setInfo(unmutedOk, mutedOk);\n this.checkCompleted = true;\n this.internalCallback();\n this.timeout = setTimeout(() => this.cleanUp(), 100);\n }\n\n private setInfo(unmutedOk: boolean, mutedOk: boolean): void {\n this.info.supportsUnmutedAutoplay = unmutedOk;\n this.info.supportsMutedAutoplay = mutedOk;\n }\n\n private cleanUp() {\n this.testDom && this.testDom.parentNode.removeChild(this.testDom);\n this.testDom = null;\n }\n\n private checkUnmutedAutoplay(): void {\n const v = this.createVideoElement(false);\n\n if (!v) {\n // if not in a DOM or don't have a video element, \n // assume autoplay is supported\n this.finishCheck(true, true);\n\n return;\n }\n\n v.load();\n\n const promise = v.play();\n\n if (promise === undefined) {\n if (this.isMobile) {\n this.detectMobileCapabilities();\n }\n else {\n this.finishCheck(true, true);\n }\n }\n else {\n promise\n .then(() => {\n this.finishCheck(true, true);\n })\n .catch((e: Error) => {\n this.checkMutedAutoplay();\n });\n }\n }\n\n private checkMutedAutoplay(): void {\n // Disable autoplay for Safari versions < 11.0.3\n // if only muted autoplay is permitted - i.e., treat\n // 'Stop Media with Sound' same as 'No Autoplay'.\n if (this.isEarlySafari11()) {\n this.finishCheck(false, false);\n\n return;\n }\n\n const v = this.createVideoElement(true);\n\n v.load();\n v.play() // if we're here, we know that Promise is supported\n .then(() => {\n this.finishCheck(false, true);\n })\n .catch((e) => {\n if (v.error && this.testVideoSrc != AppResources.blankDataUrl) {\n this.testVideoSrc = AppResources.blankDataUrl;\n this.checkUnmutedAutoplay();\n\n return;\n }\n\n this.finishCheck(false, false);\n });\n }\n\n private isEarlySafari11(): boolean {\n const si: SystemServiceInterface = this.sysInfo,\n isS = si.browser === Browser.SAFARI,\n isD = isS && si.device === 'desktop',\n maj = isD ? si.browserVersionInfo.majorVersion : null,\n min = isD ? si.browserVersionInfo.minorVersion : null,\n majMinMatch = maj === 11 && min === 0,\n verStr = si.browserVersionInfo.versionString,\n verArr = verStr ? verStr.split('.') : null;\n\n // return true for Safari < 11.0.3\n return majMinMatch && (!verArr[2] || parseInt(verArr[2]) < 3);\n }\n\n\n // mobile checks where no Promise available\n private detectMobileCapabilities(): void {\n const unmutedOk = false,\n mutedOk = this.isAutoplayEligibleAndroid() || this.isAutoplayEligibleIos();\n\n this.finishCheck(unmutedOk, mutedOk);\n }\n\n private isAutoplayEligibleAndroid(): boolean {\n let si: SystemServiceInterface = this.sysInfo,\n isA = si.os === Os.ANDROID,\n isOkChrome = isA && si.browser === Browser.CHROME && this.isChromeAutoplayEligible();\n\n return isOkChrome;\n }\n\n private isAutoplayEligibleIos(): boolean {\n let si: SystemServiceInterface = this.sysInfo,\n is10 = si.os === Os.IOS && si.browserVersionInfo.majorVersion >= 10,\n isOkSafari = is10 && si.browser === Browser.SAFARI,\n isOkChrome = is10 && !isOkSafari &&\n (si.browser === Browser.CHROME_IOS || si.browser === Browser.CHROME) &&\n this.isChromeAutoplayEligible();\n\n return isOkSafari || isOkChrome;\n }\n\n private isChromeAutoplayEligible(): boolean {\n // reported variously as v53 or v54; using >= 54 for safety\n return this.sysInfo.browserVersionInfo.majorVersion >= 54;\n }\n\n // util\n private createVideoElement(muted: boolean): HTMLVideoElement | null {\n const doc = this.document;\n if (!doc) return null;\n\n const v = doc.createElement('video');\n\n if (muted) {\n v.muted = true;\n v.setAttribute('muted', 'muted');\n v.setAttribute('playsinline', 'playsinline');\n }\n\n v.volume = 0.005;\n v.style.width = '100%';\n v.style.height = '100%';\n\n v.src = this.testVideoSrc;\n\n this.testDom.appendChild(v);\n\n return v;\n }\n\n private createTestDom(): HTMLElement {\n const doc = this.document;\n if (!this.document) return null;\n\n let d = doc.createElement('div'),\n ds = d.style, p = '-1000px';\n\n ds.position = 'absolute';\n ds.top = p;\n ds.left = p;\n ds.width = '400px';\n ds.height = '225px';\n\n doc.body.appendChild(d);\n\n this.testDom = d;\n\n return d;\n }\n\n private get document(): Document | null {\n return this.sysInfo.document || null;\n }\n}\n","import {CapabilityConfigInterface} from \"../../iface\";\n\nexport const media_decode_configs: Array = [\n {\n type: 'avc',\n config: {\n type: 'media-source', // or 'file'\n audio: {\n contentType: 'audio/mp4; codecs=mp4a.40.2',\n channels: '2', // audio channels used by the track\n bitrate: 132266, // number of bits used to encode a second of audio\n samplerate: 48000 // number of samples of audio carried per second\n },\n video: {\n contentType: 'video/mp4; codecs=\"avc1.4D401E\"',\n width: 1920,\n height: 1080,\n bitrate: 2646242, // number of bits used to encode a second of video\n framerate: '25' // number of frames used in one second\n }\n }\n },\n {\n type: 'hevc',\n config: {\n type: 'media-source', // or 'file'\n audio: {\n contentType: 'audio/mp4; codecs=mp4a.40.2',\n channels: '2', // audio channels used by the track\n bitrate: 132266, // number of bits used to encode a second of audio\n samplerate: 48000 // number of samples of audio carried per second\n },\n video: {\n contentType: 'video/mp4; codecs=\"hev1.1.2.L93.B0\"',\n width: 1920,\n height: 1080,\n bitrate: 2646242, // number of bits used to encode a second of video\n framerate: '25' // number of frames used in one second\n }\n }\n },\n {\n type: 'webm',\n config: {\n type: 'media-source', // or 'file'\n audio: {\n contentType: 'audio/webm; codecs=opus',\n channels: '2', // audio channels used by the track\n bitrate: 132266, // number of bits used to encode a second of audio\n samplerate: 48000 // number of samples of audio carried per second\n },\n video: {\n contentType: 'video/webm; codecs=\"vp09.00.10.08\"',\n width: 1920,\n height: 1080,\n bitrate: 2646242, // number of bits used to encode a second of video\n framerate: '25' // number of frames used in one second\n }\n }\n }\n];\n","import { Util } from '../core/Util';\nimport { ServiceName } from '../enum/ServiceName';\nimport { CapabilityConfigInterface, MediaCapabilitiesResultInterface, MediaCapabilitiesServiceInterface, MediaDecodeCapabilitiesResultInterface } from '../iface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { media_decode_configs } from '../util/config/MediaDecodeConfigs';\nimport { MediaCapabilitiesCodec } from '../util/enum/MediaCapabilitiesCodec';\nimport { MediaCapabilitiesMimeType } from '../util/enum/MediaCapabilitiesMimeType';\nimport { System } from '../util/System';\nimport { ServiceBase } from './ServiceBase';\n\n\nexport class MediaCapabilitiesService extends ServiceBase implements MediaCapabilitiesServiceInterface {\n\n private static instance: MediaCapabilitiesService;\n\n static getInstance(): MediaCapabilitiesService {\n if (!this.instance) {\n this.instance = new MediaCapabilitiesService();\n }\n\n return this.instance;\n }\n\n private pCapabilities: MediaCapabilitiesResultInterface;\n private types: StrAnyDict = {\n video: {\n HLS: MediaCapabilitiesMimeType.HLS,\n AVC: MediaCapabilitiesMimeType.MP4_VIDEO + '; codecs=' + MediaCapabilitiesCodec.AVC,\n HEVC: MediaCapabilitiesMimeType.MP4_VIDEO + '; codecs=' + MediaCapabilitiesCodec.HEVC,\n WEBM_VP8: MediaCapabilitiesMimeType.WEBM_VIDEO + '; codecs=' + MediaCapabilitiesCodec.VP8,\n WEBM_VP9: MediaCapabilitiesMimeType.WEBM_VIDEO + '; codecs=' + MediaCapabilitiesCodec.VP9\n },\n audio: {\n AVC: MediaCapabilitiesMimeType.MP4_AUDIO + '; codecs=' + MediaCapabilitiesCodec.AVC,\n HEVC: MediaCapabilitiesMimeType.MP4_AUDIO + '; codecs=' + MediaCapabilitiesCodec.HEVC,\n WEBM_VP8: MediaCapabilitiesMimeType.WEBM_AUDIO + '; codecs=' + MediaCapabilitiesCodec.VP8,\n WEBM_VP9: MediaCapabilitiesMimeType.WEBM_AUDIO + '; codecs=' + MediaCapabilitiesCodec.VP9\n }\n };\n\n constructor() {\n super(ServiceName.MediaCapabilities);\n }\n\n get capabilities(): MediaCapabilitiesResultInterface {\n return this.pCapabilities;\n }\n\n detectCapabilities(): Promise {\n return new Promise((resolve, reject) => {\n let mediaCapabilitiesResult: MediaCapabilitiesResultInterface = {\n mediaDecodeCapabilitiesResults: [],\n drmCapabilitiesResults: [],\n hasMediaSource: this.hasMediaSource,\n hasEncryptedMediaSource: this.hasEncryptedMediaSource,\n isWebKit: this.isWebKit,\n supportsVp8: this.supportsVp8,\n supportsMediaDecodeConfigurations: this.supportsMediaDecodeConfigurations, //advance\n supportsNativeHls: this.isTypeSupported(this.types.video.HLS), //native hls\n supportsRequestMediaKeySystemAccess: this.supportsRequestMediaKeySystemAccess, //drm\n supportsAvc: false,\n supportsHevc: false,\n supportsWebM: false,\n supportsVp9: false\n };\n\n this.pCapabilities = mediaCapabilitiesResult;\n\n //Fork logic path to test deeper MediaCapabilities if they exist\n if (this.supportsMediaDecodeConfigurations) {\n\n this.testMediaDecodeCapabilities(mediaCapabilitiesResult, (mcResult: MediaCapabilitiesResultInterface) => {\n\n const mDcr: MediaDecodeCapabilitiesResultInterface[] = mcResult.mediaDecodeCapabilitiesResults;\n\n mediaCapabilitiesResult.supportsAvc = mDcr[0].supported;\n mediaCapabilitiesResult.supportsHevc = mDcr[1].supported;\n mediaCapabilitiesResult.supportsWebM = mDcr[2].supported;\n mediaCapabilitiesResult.supportsVp9 = mDcr[2].supported;\n\n resolve(mediaCapabilitiesResult);\n });\n }\n else {\n mediaCapabilitiesResult.supportsAvc = this.isTypeSupported(this.types.video.AVC);\n mediaCapabilitiesResult.supportsHevc = this.isTypeSupported(this.types.video.HEVC);\n mediaCapabilitiesResult.supportsWebM = this.supportsWebM;\n mediaCapabilitiesResult.supportsVp9 = this.supportsVp9;\n\n resolve(mediaCapabilitiesResult);\n }\n });\n }\n\n private get hasMediaSource(): boolean {\n return !!(System.global && (System.global.MediaSource || this.isWebKit));\n }\n\n private get hasEncryptedMediaSource(): boolean {\n const g = System.global,\n eme = g && (g.MediaKeys || g.WebKitMediaKeys || g.MSMediaKeys);\n return !!eme;\n }\n\n private get isWebKit(): boolean {\n return !!(System.global && System.global.WebKitMediaSource);\n }\n\n private get supportsWebM(): boolean {\n return this.supportsVp8 || this.supportsVp9;\n }\n\n private get supportsVp8(): boolean {\n return this.isTypeSupported(this.types.video.WEBM_VP8);\n }\n\n private get supportsVp9(): boolean {\n return this.isTypeSupported(this.types.video.WEBM_VP9);\n }\n\n private get supportsRequestMediaKeySystemAccess(): boolean {\n return !!(System.global && System.global.MediaKeySystemAccess);\n }\n\n private get supportsMediaDecodeConfigurations(): boolean {\n return !!(navigator).mediaCapabilities;\n }\n\n private isTypeSupported(codec: string): boolean {\n\n let supported: boolean = false;\n\n if (!System.global) {\n return false;\n }\n\n if (this.isWebKit) {\n supported = System.global.WebKitMediaSource.isTypeSupported(codec);\n }\n else if (this.hasMediaSource) {\n supported = System.global.MediaSource.isTypeSupported(codec);\n }\n\n if (!supported) {\n //final check for codec support. \n const element = document.createElement('video');\n if (Util.isObject(element) && Util.isFunction(element.canPlayType)) {\n if (element.canPlayType(codec) === 'probably' || element.canPlayType(codec) === 'maybe') {\n supported = true;\n }\n }\n }\n\n return supported;\n }\n\n //Currently only works with Chrome 63+\n private testMediaDecodeCapabilities(mcResult: MediaCapabilitiesResultInterface, callback: Function): void {\n\n if (!(navigator)) {\n callback(mcResult);\n }\n\n let i: number = 0;\n\n const hResults = (result: MediaDecodeCapabilitiesResultInterface) => {\n\n mcResult.mediaDecodeCapabilitiesResults.push(result);\n\n if (mcResult.mediaDecodeCapabilitiesResults.length === media_decode_configs.length) {\n //end testing\n callback(mcResult);\n }\n else {\n /*eslint-disable-next-line*/\n runTest(media_decode_configs[i]);\n i++;\n }\n };\n\n const runTest = (config: CapabilityConfigInterface) => {\n\n let mdcResult: MediaDecodeCapabilitiesResultInterface = {\n type: config.type\n };\n\n const { decodingInfo } = (navigator).mediaCapabilities;\n\n if (decodingInfo) {\n decodingInfo(config.config).then((result: any) => {\n mdcResult.supported = result.supported;\n mdcResult.smooth = result.smooth;\n mdcResult.powerEfficient = result.powerEfficient;\n\n hResults(mdcResult);\n\n }).catch(() => {\n\n hResults(mdcResult);\n });\n }\n else {\n // decodingInfo is not available\n hResults(mdcResult);\n }\n };\n\n runTest(media_decode_configs[i]);\n i++;\n }\n}\n","export enum MediatorName {\n APPLICATION = 'AppMediator',\n UI = 'UiMediator',\n FULLSCREEN = 'FullscreenMediator',\n TRACKING_MEDIATOR = 'TrackingMediator',\n TIMER_MEDIATOR = 'TimerMediator',\n PRESENTATION_MEDIATOR = 'PresentationMediator',\n PLUGIN_MEDIATOR = 'pluginMediator',\n KEY_COMMAND = 'keyCommandMediator',\n ACC_KEY_CMD_MEDIATOR = 'accessibilityKeyCommandMediator',\n}\n","\nexport enum PlayerDom {\n MAIN_CONTAINER = 'main',\n VIDEO_EL = 'video',\n VIDEO_CONTAINER = 'videoContainer',\n CC_CONTAINER = 'ccContainer',\n AD_CONTAINER = 'adContainer',\n PANEL_CONTAINER = 'panelContainer',\n AD_CLICK_EL = 'adClickEl',\n}\n","export enum ModelName {\n AdBreakInfo = 'AdBreakInfo',\n AdItem = 'AdItem',\n ContentPlaybackState = 'ContentPlaybackState',\n PlayerDom = 'PlayerDom',\n PlayerOptions = 'PlayerOptions',\n PresentationState = 'PresentationState',\n}\n","//es-list-ignore\nexport enum NotificationName {\n //////////////////////////\n // Application\n //////////////////////////\n DEFAULT = 'default',\n BOOT_APP = 'bootApp',\n PREP_TRACKING = 'prepTracking',\n PREP_SERVICE = 'prepService',\n TIMER_TIC = 'timerTic',\n APP_EVENT = 'appEvent',\n APP_ERROR_EVENT = 'appErrorEvent',\n READY = 'ready',\n METRIC = 'metric',\n\n //////////////////////////\n // ERRORS\n /////////////////////////\n RESOURCE_ERROR = 'resourceError',\n VIDEO_START_ERROR = 'videoStartError',\n VIDEO_PLAYBACK_ERROR = 'videoPlaybackError',\n //////////////////////////\n // Resource Preparation & Playlist\n //////////////////////////\n PREP_RESOURCE_COLLECTION = 'prepResourceCollection',\n RETRIEVE_RESOURCE = 'retrieveResource',\n TRANSFORM_RESOURCE = 'transformResourceData',\n REGISTER_RESOURCE = 'registerResource',\n PLAY_RESOURCE = 'playResource',\n PREP_PLUGINS = 'prepPlugins',\n LOAD_PLUGINS = 'loadPlugins',\n REMOVE_PLUGIN = 'removePlugin',\n START_PRESENTATION = 'startPresentation',\n\n RESOURCE_START = 'resourceStart',\n RESOURCE_END = 'resourceEnd',\n RESOURCE_PLAYING = \"resourcePlaying\",\n RESOURCE_PAUSED = \"resourcePaused\",\n RESOURCE_COMPLETE = \"resourceComplete\",\n\n ADVANCE_PLAYLIST = 'advancePlaylist',\n PLAYLIST_CHANGE = 'playlistChanged',\n PLAYLIST_ADVANCED = 'playlistAdvanced',\n PLAYLIST_COMPLETE = 'playlistComplete',\n PLAYLIST_CLEARED = 'playlistCleared',\n PLAYLIST_CURRENT_RESOURCE_CLEARED = 'playlistCurrentResourceCleared',\n PLAYLIST_OUT_OF_RANGE = 'playlistOutOfRange',\n\n RESOURCE_INTERRUPTED = 'resourceInterrupted',\n CONTENT_COMPLETE = 'contentComplete',\n\n LIVE_PRESENTATION_STOPPED = 'livePresentationStopped',\n KILL_RESOURCE_PRESENTATION = 'killResourcePresentation',\n\n POSTER_CLICK = 'posterClick',\n\n SUSPEND_PLAYBACK = 'suspendPlayback',\n RESUME_PLAYBACK = 'resumePlayback',\n PLAYBACK_SUSPENDED = 'playbackSuspended',\n PLAYBACK_RESUMED = 'playbackResumed',\n //////////////////////////\n // Presentation\n //////////////////////////\n FULLSCREEN_ENTER = 'fullscreenEnter',\n FULLSCREEN_EXIT = 'fullscreenExit',\n PRESENTATION_SIZE_CHANGE = 'presentationSizeChange',\n MOUSE_ENTER_PRESENTATION = 'mouseEnterPresentation',\n MOUSE_LEAVE_PRESENTATION = 'mouseLeavePresentation',\n USER_PAUSE = 'userPause',\n METADATA_CUEPOINT = 'metadataCuepoint',\n TEXT_CUEPOINT = 'textCuepoint',\n TEXT_TRACK_CHANGE = 'textTrackChange',\n TEXT_TRACK_DISPLAY_MODE_CHANGE = 'textTrackDisplayModeChange',\n TEXT_TRACK_AVAILABLE = 'textTrackAvailable',\n TEXT_TRACK_INFO_CHANGE = 'textTrackInfoChange',\n AUDIO_TRACK_CHANGE = 'audioTrackSwitched',\n AUDIO_TRACK_INFO_CHANGE = 'audioTrackInfoChange',\n QUALITY_INFO_CHANGE = 'qualityInfoChange',\n THUMBNAIL_TRACK_AVAILABLE = 'thumbnailTrackAvailable',\n PLAYBACK_STATE_CHANGE = 'playbackStateChange',\n\n //////////////////////////\n // Control Playback API/UI\n ////////////////////////// \n AUTO_QUALITY_SWITCHING = 'autoQualitySwitching',\n MIN_BITRATE = 'minBitrate',\n MAX_BITRATE = 'maxBitrate',\n PLAY_ON_USER_GESTURE = 'playOnUSerGesture',\n PLAY = 'play',\n PAUSE = 'pause',\n STOP = 'stop',\n SEEK = 'seek',\n SEEK_FORWARD = 'seekForward',\n SEEK_BACK = 'seekBack',\n SEEK_TO_LIVE = 'seekToLive',\n SWITCH_BITRATE = 'switchBitrate',\n SWITCH_QUALITY_CATEGORY = 'switchQualityCategory',\n SWITCH_AUDIO_TRACK = 'switchAudioTrack',\n SWITCH_TEXT_TRACK = 'switchTextTrack',\n SWITCH_TEXT_MODE = 'switchTextMode',\n //////////////////////////\n // Content Playback\n //////////////////////////\n CONTENT_START = 'contentStart',\n CONTENT_DURATION_AVAILABLE = 'contentDurationAvailable',\n CONTENT_SEGMENT_START = 'contentSegmentStart',\n CONTENT_SEEKING = 'contentSeeking',\n CONTENT_SEEKED = 'contentSeeked',\n SEEK_REDIRECT_START = 'seekRedirectStart',\n SEEK_REDIRECT_COMPLETE = 'seekRedirectComplete',\n CONTENT_BUFFERING = 'contentBuffering',\n CONTENT_PLAYING = 'contentPlaying',\n CONTENT_PAUSED = 'contentPaused',\n QUALITY_CHANGE = 'contentQualityChange',\n CDN_CHANGE = 'contentCdnChange',\n DRM_KEYSYSTEM_CREATED = 'drmKeySystemCreated',\n CONTENT_SEGMENT_END = 'contentSegmentEnd',\n CONTENT_TIME_UPDATE = \"contentTimeupdate\",\n CONTENT_IS_LIVE_CHANGED = 'contentIsLiveChanged',\n STREAM_TYPE_CHANGE = 'streamTypeChange',\n STREAM_METADATA = 'streamMetadata',\n STREAM_ID_AVAILABLE = 'streamIdAvailable',\n VIDEO_PROGRESS = \"contentVideoProgress\",\n VIDEO_LOAD_START = 'videoLoadStart',\n VIDEO_LOAD_COMPLETE = 'videoLoadComplete',\n VIDEO_LOADED_METADATA = 'videoLoadedMetadata',\n AUTOPLAY_BLOCKED = 'autoplayBlocked',\n /////////////////////////\n // AD Events\n /////////////////////////\n AD_SEGMENT_START = 'adsegmentstart',\n AD_SEGMENT_END = 'adsegmentend',\n AD_BUFFERING = 'adBuffering',\n AD_CUEPOINTS_AVAILABLE = 'adCuepointsAvailable',\n AD_BREAK_START = 'adBreakStart',\n AD_BREAK_METADATA = 'adBreakMetadata',\n AD_START = 'adStart',\n AD_TIME_UPDATE = 'adProgress',\n AD_FIRST_QUARTILE = 'adFirstQuartile',\n AD_MIDPOINT = 'adMidpoint',\n AD_THIRD_QUARTILE = 'adThirdQuartile',\n AD_COMPLETE = 'adComplete',\n AD_BREAK_COMPLETE = 'adBreakEnd',\n AD_PAUSED = 'adPaused',\n AD_PLAYING = 'adPlaying',\n AD_ERROR = 'adError',\n AD_STALLED = 'adStalled',\n AD_BREAK_DISCARDED = 'adBreakDiscarded',\n AD_CLICK = 'adClick',\n AD_SKIPPED = 'adSkipped',\n /////////////////////////\n // View and UI\n /////////////////////////\n ENABLE_UI = 'enableUi',\n DISABLE_UI = 'disableUi',\n FULLSCREEN_AVAILABLE = 'fullscreenAvailable',\n FULLSCREEN_CHANGE = 'fullscreenChange',\n ENTER_FULLSCREEN_REQUEST = 'enterFullscreenRequest',\n EXIT_FULLSCREEN_REQUEST = 'exitFullscreenRequest',\n BEFORE_CONTROLS_VISIBLE = 'beforeControlsVisible',\n CONTROLS_VISIBLE = 'controlsVisible',\n BEFORE_CONTROLS_HIDDEN = 'beforeControlsHidden',\n CONTROLS_HIDDEN = 'controlsHidden',\n MUTE = 'mute',\n UNMUTE = 'unmute',\n VOLUME_CHANGE = 'volumeChange',\n USER_KEY_COMMAND = 'userKeyCommand', // this maps to a command only\n USER_KEYBOARD_COMMAND = 'userKeyboardCommand', // this maps to an external event\n HOTKEY_ACTION = 'hotkeyAction',\n\n TT_OFFSET_REQUEST = 'ttOffsetRequest',\n USER_SETTINGS_REQUEST = 'userSettingsRequest',\n\n CHANGE_LANGUAGE = 'changeLanguage',\n LANGUAGE_CHANGE = 'languageChange',\n}\n","export enum NotificationType {\n EXTERNAL = 'external',\n INTERNAL = 'internal',\n UI = 'ui'\n}\n","export enum VideoMode {\n AD,\n CONTENT,\n IDLE\n}\n","import { Util } from '../core/Util';\nimport { VideoFormat } from '../enum/VideoFormat';\nimport { DeepPartial } from '../iface/DeepPartial';\nimport { ResourceAdInterface } from '../iface/ResourceAdInterface';\nimport { ResourceConfigurationInterface } from '../iface/ResourceConfigurationInterface';\nimport { ResourceLocationInterface } from '../iface/ResourceLocationInterface';\nimport { ResourceOverridesInterface } from '../iface/ResourceOverridesInterface';\nimport { ResourcePlaybackInterface } from '../iface/ResourcePlaybackInterface';\n\n\nexport class ResourceConfiguration implements ResourceConfigurationInterface {\n\n constructor(config: DeepPartial = {}) {\n Util.merge(this, config);\n }\n\n ad: ResourceAdInterface = {\n enabled: false,\n adapter: null,\n context: null,\n showPrerollOnNonZeroStart: false,\n suppressAdUi: false,\n viewabilityTracking: {\n partner: null,\n viewGuid: null,\n pageType: null,\n },\n adTagParameters: {\n description_url: null,\n sz: '640x480',\n url: null,\n iu: null,\n ad_rule: null,\n ciu_szs: null,\n pp: null,\n cmsid: '2289',\n vid: null,\n hl: null,\n msid: null,\n an: null,\n nofb: null,\n ppid: null,\n tfcd: null,\n npa: null,\n cust_params: null\n },\n csai: {\n adCallUrl: null,\n loadVideoTimeoutMs: 4000,\n enableAdPreloading: false,\n enableStalledAdCheck: true,\n stalledAdThreshold: 5,\n preloadContentAtEndOfPreRoll: false,\n ignoreAnomalousConditionOnSeek: false,\n fw: null,\n },\n ssai: {\n apiKey: null,\n authToken: null,\n adParameters: null,\n contentSourceId: null,\n videoId: null,\n assetKey: null,\n useApi: false,\n format: VideoFormat.HLS,\n isLive: false,\n filterOutPremiumAudioCodecs: false,\n },\n ima: {\n adCallUrl: null,\n loadVideoTimeoutMs: 4000,\n enableAdPreloading: false,\n enableStalledAdCheck: true,\n stalledAdThreshold: 5,\n preloadContentAtEndOfPreRoll: false,\n ignoreAnomalousConditionOnSeek: false,\n },\n dai: {\n contentSourceId: null,\n daiVideoId: null,\n assetKey: null,\n apiKey: null,\n ssbStreamUrl: null,\n isLive: false,\n format: null,\n streamActivityMonitorId: null\n }\n };\n\n location: ResourceLocationInterface = {\n cms: null,\n tokenMap: null,\n cmsUri: null,\n mediaUrl: null,\n textTrackUrl: null,\n thumbnailTrackUrl: null,\n posterImageUrl: null,\n drm: {\n enabled: false,\n sessionId: null,\n ticket: null,\n playready: {\n url: null,\n header: null\n },\n widevine: {\n url: null,\n header: null\n },\n fairplay: {\n appCertUrl: null,\n licenseUrl: null,\n header: null\n },\n aes: {\n header: null,\n provider: null\n }\n }\n };\n\n playback: ResourcePlaybackInterface = {\n id3OwnerIds: null,\n startTime: NaN,\n preloadContent: false,\n enableAdvancedCodecs: false,\n liveEdgeSyncFragmentCount: 3,\n abr: {\n\n maxBitrate: NaN,\n minBitrate: NaN,\n startBitrate: NaN,\n capQualityToScreenSize: true\n }\n };\n\n metadata: Record = {};\n tracking: Record = {};\n overrides: ResourceOverridesInterface = {};\n}\n","/* Copyright(c) 2006-2018 Futurescale, Inc. */\n/* TypeScript port by Video Technology Group, CBSi Inc. */\n\nimport { FacadeInterface, NotifierInterface } from '../iface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { Facade } from './Facade';\n\n\n/**\n * @hideconstructor\n */\nexport class Notifier implements NotifierInterface {\n\n protected multiCoreKey: string;\n\n constructor() {\n this.multiCoreKey = null;\n }\n\n /**\n * @ignore\n */\n destroy() {\n // no impl\n }\n\n /**\n * @ignore\n */\n onRemove() {\n this.multiCoreKey = null;\n }\n\n /**\n * @ignore\n */\n get facade(): FacadeInterface {\n return Facade.getInstance(this.multiCoreKey);\n }\n\n /**\n * @ignore\n */\n sendNotification(notificationName: string, body?: StrAnyDict, type?: string): void {\n let f = this.facade;\n f && f.sendNotification(notificationName, body, type);\n }\n\n /**\n * @ignore\n */\n initializeNotifier(key: string): void {\n this.multiCoreKey = key;\n }\n}\n","\nexport enum PlaybackAdapterEvents {\n ABR_QUALITY_LOADED = 'abrQualityLoaded',\n ABR_QUALITY_SWITCHED = 'abrQualitySwitched',\n ABR_QUALITY_SWITCHING = 'abrQualitySwitching',\n ABR_CONSTRAINTS_CHANGE = 'maxLevelChanged',//todo rename string to match. \n FRAGMENT_LOADED = 'fragmentLoaded',\n FRAGMENT_PARSED = 'fragmentParsed',\n MANIFEST_LOADED = 'manifestLoaded',\n MANIFEST_PARSED = 'manifestParsed',\n LOADED_METADATA = 'loadedMetdata',\n DRM_KEYSYSTEM_CREATED = 'drmKeySystemCreated',\n AUDIO_TRACK_UPDATED = 'audioTrackUpdated',\n AUDIO_TRACK_CHANGE = 'audioTrackChange',\n MULTI_CDN = 'multiCdn',\n ERROR = 'adapterError',\n}\n","import { LoggerInterface } from '../iface/LoggerInterface';\nimport { AbstractMediator } from '../mvc/AbstractMediator';\n\n\nexport abstract class LogAwareMediator extends AbstractMediator {\n\n constructor(name: string, viewControl?: any) {\n super(name, viewControl);\n }\n\n // It may be useful to pass the logger to lower level components\n // (which don't have facade access), if logging is desired at that level.\n get logger(): LoggerInterface {\n return this.facade.logger;\n }\n\n log(...args: any[]): void {\n this.logger.log.apply(this.logger, args);\n }\n}\n","/* Copyright(c) 2006-2018 Futurescale, Inc. */\n/* TypeScript port by Video Technology Group, CBSi Inc. */\n\nimport { ModelName } from \"../enum/ModelName\";\nimport { ProxyName } from \"../enum/ProxyName\";\nimport { ServiceName } from \"../enum/ServiceName\";\nimport { MediatorInterface, NotificationInterface, SystemServiceInterface } from \"../iface\";\nimport { ModelCollectionProxy } from '../model/ModelCollectionProxy';\nimport { Notifier } from \"./Notifier\";\n\nexport abstract class AbstractMediator extends Notifier implements MediatorInterface {\n\n private pViewControl: any;\n private readonly mediatorName: string;\n\n protected constructor(name: string, viewControl?: any) {\n super();\n\n this.pViewControl = null;\n this.mediatorName = name;\n\n viewControl && (this.viewControl = viewControl);\n }\n\n get name(): string {\n return this.mediatorName;\n }\n\n set viewControl(viewControl: any) {\n this.pViewControl = viewControl;\n }\n\n get viewControl(): any {\n return this.pViewControl;\n }\n\n get systemService(): SystemServiceInterface {\n return this.facade.retrieveService(ServiceName.System);\n }\n\n getService(name: ServiceName): T | null {\n return this.facade ? (this.facade.retrieveService(name)) : null;\n }\n\n getModel(name: ModelName): T {\n return (this.getModelCollection().getModel(name));\n }\n\n getProxy(name: ProxyName): T {\n return this.facade ? (this.facade.retrieveProxy(name)) : null;\n }\n\n getModelCollection(): ModelCollectionProxy {\n return this.facade ? this.facade.retrieveProxy(ProxyName.ModelCollectionProxy) : null;\n }\n\n listNotificationInterests(): string[] {\n return [];\n }\n\n abstract handleNotification(notification: NotificationInterface): void;\n\n onRegister(): void {\n /* implementation optional */\n }\n\n override onRemove(): void {\n this.pViewControl = null;\n super.onRemove();\n }\n}\n","import { LogLevel } from '../../enum/LogLevel';\nimport { MediatorName } from '../../enum/MediatorName';\nimport { ModelName } from '../../enum/ModelName';\nimport { NotificationName } from '../../enum/NotificationName';\nimport { NotificationType } from '../../enum/NotificationType';\nimport { PlaybackState } from '../../enum/PlaybackState';\nimport { ProxyName } from '../../enum/ProxyName';\nimport { StreamType } from '../../enum/StreamType';\nimport { VideoMode } from '../../enum/VideoMode';\nimport { NotificationInterface, ProgressDataInterface } from '../../iface';\nimport { EventHandler } from '../../iface/EventHandler';\nimport { EventInterface } from '../../iface/EventInterface';\nimport { PresentationStateInterface } from '../../iface/PresentationStateInterface';\nimport { ContentPlaybackStateProxy } from '../../model/ContentPlaybackStateProxy';\nimport { LocalizationProxy } from '../../model/LocalizationProxy';\nimport { FullscreenMediator } from '../../view/FullscreenMediator';\nimport { LogAwareMediator } from '../../view/LogAwareMediator';\nimport { cvui } from './cvui';\nimport { UiEnumCollectionInterface } from './UiEnumCollectionInterface';\nimport { UiMediatorInterface } from './UiMediatorInterface';\n\n/**\n * @deprecated\n */\nexport class UiMediator extends LogAwareMediator implements UiMediatorInterface {\n\n private enums!: UiEnumCollectionInterface;\n private fsm!: FullscreenMediator;\n private seekRedirectPending: boolean = false;\n private ccEnabled: boolean = false;\n private ccAvail: boolean = false;\n private fullScreenAccessRestricted = false;\n private increment: number = 10;\n private isPlayingLive: boolean = false;\n private controlsVisible: boolean = false;\n private adErrorOccurred: boolean = false;\n private suppressAdView: boolean;\n private timeout: number;\n\n constructor(name: string, viewControl?: any) {\n super(name, viewControl);\n }\n\n override onRegister() {\n const service = this.facade.retrieveProxy(ProxyName.LocalizationProxy) as LocalizationProxy;\n this.ui.setLocalizationService(service);\n\n const getThumbnail = (time: number) => {\n const cps = this.facade.retrieveProxy(ProxyName.ContentPlaybackStateProxy) as ContentPlaybackStateProxy;\n return cps.getThumbnail(time);\n };\n this.ui.setThumbnailService({ getThumbnail });\n }\n\n override onRemove(): void {\n clearTimeout(this.timeout);\n this.viewControl && this.viewControl.destroy();\n this.viewControl = null;\n this.enums = null;\n this.fsm = null;\n super.onRemove();\n }\n\n get viewController(): cvui.ViewControllerInterface {\n return this.ui;\n }\n\n get controlNames(): cvui.ControlName {\n return this.enums.ControlName;\n }\n\n set adViewSuppressed(flag: boolean) {\n this.suppressAdView = flag;\n }\n\n get adViewSuppressed(): boolean {\n return this.suppressAdView;\n }\n\n\n uiIsStandardView(): boolean {\n return this.ui.isStandardView();\n }\n\n setSeekNotice(str: string, dir: number): void {\n this.ui.setSeekNotice(str, dir);\n }\n\n setFullScreenAccessRestricted(flag: boolean): void {\n this.fullScreenAccessRestricted = flag;\n }\n\n killUi(): void {\n this.viewControl && this.viewControl.destroy();\n this.viewControl = null;\n }\n\n initialize(enumCollection: UiEnumCollectionInterface): void {\n this.enums = enumCollection;\n this.init();\n }\n\n enableControl(name: string): void {\n this.ui.enableControl(name);\n }\n\n disableControl(name: string): void {\n this.ui.disableControl(name);\n }\n\n enableFullscreen(): void {\n if (!this.fullScreenAccessRestricted && this.isFullScreenAvailable()) {\n this.enableControl(this.controlNames.FULLSCREEN_TOGGLE);\n }\n }\n\n disableFullscreen(): void {\n this.disableControl(this.controlNames.FULLSCREEN_TOGGLE);\n }\n\n setMuteState(flag: boolean): void {\n this.ui.setMuteState(flag);\n }\n\n forceControlsVisible(flag: boolean): void {\n this.ui.forceControlsVisible(flag);\n }\n\n setSeekable(flag: boolean): void {\n this.ui.setSeekable(flag);\n }\n\n engageSeek(): void {\n this.ui.forceControlsVisible(true);\n this.ui.beginSeekMove();\n }\n\n disengageSeek(): void {\n this.ui.endSeekMove();\n this.timeout = setTimeout(() => this.ui.forceControlsVisible(false), 500);\n }\n\n moveSeekBy(inc: number): void {\n this.ui.moveSeekBy(inc);\n }\n\n setVolume(value: number): void {\n if (!isNaN(value) && value >= 0 && value <= 1) {\n this.ui.setVolume(value);\n }\n }\n\n setTransportType(type: StreamType) {\n // TODO: Remove this once UI is updated to accept StreamType enum\n const num = (type == StreamType.LIVE) ? 1 : (type == StreamType.DVR) ? 2 : 0;\n this.ui.setTransportType(num);\n }\n\n setIsPlayingLive(isLive: boolean) {\n this.isPlayingLive = isLive;\n this.ui.setIsPlayingLive(isLive);\n }\n\n setClosedCaptionState(state: boolean): void {\n this.ui.setClosedCaptionState(state);\n }\n\n updateProgress(pdi: ProgressDataInterface): void {\n const { playheadTime, duration } = pdi;\n\n this.ui.updateProgress({\n currentTime: playheadTime,\n duration: duration\n });\n\n const cn: cvui.ControlName = this.controlNames;\n if (this.isPlayingLive || playheadTime + this.increment >= duration) {\n this.ui.disableControl(cn.SEEK_FORWARD_BUTTON);\n }\n else {\n this.ui.enableControl(cn.SEEK_FORWARD_BUTTON);\n }\n\n if (playheadTime <= this.increment) {\n this.ui.disableControl(cn.SEEK_BACK_BUTTON);\n }\n else {\n this.ui.enableControl(cn.SEEK_BACK_BUTTON);\n }\n }\n\n setClickCatcherState(state: PlaybackState): void {\n const s = state === PlaybackState.PLAYING ? this.enums.PlayState.PLAYING : this.enums.PlayState.PAUSED;\n this.ui.setClickCatcherState(s);\n }\n\n hideClickCatcher(flag: boolean) {\n this.ui.hideClickCatcher(flag);\n }\n\n displayPoster(flag: boolean): void {\n this.ui.showDecorator(this.enums.DecoratorName.POSTER, flag);\n }\n\n activatePoster(): void {\n this.ui.activatePoster();\n }\n\n showUnmutePrompt(): void {\n this.ui.showDecorator(this.enums.DecoratorName.UNMUTE_PROMPT, true);\n }\n\n displaySpinner(flag: boolean): void {\n this.ui.showDecorator(this.enums.DecoratorName.SPINNER, flag);\n }\n\n setAccVolumeLevelIndicator(val: number): void {\n this.ui.setAccVolumeLevelIndicator(val);\n }\n\n setVideoMode(m: VideoMode): void {\n if (m == VideoMode.AD && this.adViewSuppressed) {\n this.ui.setVideoMode(VideoMode.CONTENT);\n return;\n }\n\n this.ui.setVideoMode(m);\n }\n\n resetUi(): void {\n this.hideClickCatcher(true);\n this.displayPoster(false);\n this.ui.setChapterMarkers([]);\n this.ui.setVideoMode(VideoMode.IDLE);\n }\n\n handleNotification(notification: NotificationInterface): void {\n const n = notification.name,\n data = notification.body;\n\n if (!this.ui) {\n return;\n }\n\n switch (n) {\n case NotificationName.ENABLE_UI:\n this.enableFullscreen();\n this.ui.activateControls();\n break;\n\n case NotificationName.DISABLE_UI:\n this.ui.setVideoMode(VideoMode.IDLE);\n this.ui.inactivateControls();\n break;\n\n case NotificationName.VIDEO_LOAD_START:\n this.displaySpinner(true);\n break;\n\n case NotificationName.VIDEO_LOAD_COMPLETE:\n this.displaySpinner(false);\n break;\n\n case NotificationName.CONTENT_TIME_UPDATE:\n if (this.seekRedirectPending) {\n return;\n }\n this.ui.updateProgress({\n currentTime: data.contentTime,\n duration: data.contentDuration\n });\n break;\n\n case NotificationName.AD_CUEPOINTS_AVAILABLE:\n this.ui.setChapterMarkers(data.cuepoints);\n break;\n\n case NotificationName.AD_TIME_UPDATE:\n if (!this.adViewSuppressed) {\n this.ui.updateProgress({\n currentTime: data.currentTime,\n duration: data.duration\n });\n }\n\n break;\n\n case NotificationName.TEXT_TRACK_AVAILABLE:\n this.ccAvail = true;\n this.ui.enableControl(this.controlNames.CC_TOGGLE);\n if (this.ccEnabled) {\n this.ui.setClosedCaptionState(true);\n this.activateCaptions(true);\n }\n break;\n\n case NotificationName.TEXT_TRACK_DISPLAY_MODE_CHANGE:\n this.doCaptionCheckOnControlVisChange();\n break;\n\n case NotificationName.SEEK:\n case NotificationName.SEEK_FORWARD:\n case NotificationName.SEEK_BACK:\n case NotificationName.CONTENT_SEEKING:\n this.displaySpinner(true);\n if (this.seekRedirectPending) {\n return;\n }\n this.ui.setSeekComplete();\n break;\n\n case NotificationName.SEEK_REDIRECT_START:\n this.seekRedirectPending = true;\n break;\n\n case NotificationName.SEEK_REDIRECT_COMPLETE:\n this.seekRedirectPending = false;\n break;\n\n case NotificationName.CONTENT_SEEKED:\n this.displaySpinner(false);\n\n if (this.seekRedirectPending) {\n return;\n }\n this.ui.setSeekComplete();\n\n if (this.adErrorOccurred) {\n this.adErrorOccurred = false;\n this.ui.setVideoMode(VideoMode.CONTENT);\n this.ccAvail && this.ui.enableControl(this.controlNames.CC_TOGGLE);\n }\n break;\n\n case NotificationName.CONTENT_BUFFERING:\n this.displaySpinner(data.value);\n break;\n\n case NotificationName.FULLSCREEN_AVAILABLE:\n this.enableFullscreen();\n break;\n\n case NotificationName.FULLSCREEN_CHANGE:\n this.ui.setFullscreenState(notification.body.isFullscreen);\n break;\n\n case NotificationName.PRESENTATION_SIZE_CHANGE:\n this.ui.updateSize();\n break;\n\n case NotificationName.CONTENT_PLAYING:\n this.ui.hideClickCatcher(false);\n this.displaySpinner(false);\n this.setPlayState(PlaybackState.PLAYING);\n break;\n\n case NotificationName.CONTENT_PAUSED:\n this.displaySpinner(false);\n this.setPlayState(PlaybackState.PAUSED);\n break;\n\n case NotificationName.AD_BREAK_START:\n this.displaySpinner(false);\n this.ui.hideClickCatcher(true);\n this.ui.hidePanelsForAdPlay(true);\n this.setPlayState(PlaybackState.PLAYING);\n this.ui.setVideoMode(VideoMode.AD);\n break;\n\n case NotificationName.AD_PAUSED:\n this.setPlayState(PlaybackState.PAUSED);\n this.ui.forceControlsVisible(true);\n break;\n\n case NotificationName.AD_PLAYING:\n this.displaySpinner(false);\n this.setPlayState(PlaybackState.PLAYING);\n this.ui.forceControlsVisible(false);\n break;\n\n case NotificationName.CONTENT_START:\n case NotificationName.CONTENT_SEGMENT_START:\n this.ui.setVideoMode(VideoMode.CONTENT);\n this.ccAvail && this.ui.enableControl(this.controlNames.CC_TOGGLE);\n break;\n\n case NotificationName.AD_ERROR:\n case NotificationName.AD_STALLED:\n this.adErrorOccurred = true;\n break;\n\n case NotificationName.AD_BREAK_COMPLETE:\n case NotificationName.CONTENT_SEGMENT_END:\n case NotificationName.RESOURCE_INTERRUPTED:\n case NotificationName.CONTENT_COMPLETE:\n this.ui.resetProgress();\n this.ui.setVideoMode(VideoMode.IDLE);\n\n if (n === NotificationName.AD_BREAK_COMPLETE) {\n this.ui.hidePanelsForAdPlay(false);\n }\n else {\n this.ui.disableControl(this.controlNames.CC_TOGGLE);\n }\n\n if (n == NotificationName.RESOURCE_INTERRUPTED || n === NotificationName.CONTENT_COMPLETE) {\n this.ccAvail = false;\n }\n break;\n\n case NotificationName.READY:\n case NotificationName.LANGUAGE_CHANGE:\n this.ui.updateText();\n break;\n\n case NotificationName.STREAM_TYPE_CHANGE:\n this.setTransportType(data.value);\n break;\n\n case NotificationName.CONTENT_IS_LIVE_CHANGED:\n this.setIsPlayingLive(data.value);\n break;\n\n default: break;\n }\n }\n\n override listNotificationInterests(): string[] {\n return [\n NotificationName.AD_CUEPOINTS_AVAILABLE,\n NotificationName.ENABLE_UI,\n NotificationName.DISABLE_UI,\n NotificationName.SEEK_REDIRECT_START,\n NotificationName.SEEK_REDIRECT_COMPLETE,\n NotificationName.SEEK,\n NotificationName.SEEK_FORWARD,\n NotificationName.SEEK_BACK,\n NotificationName.CONTENT_SEEKED,\n NotificationName.CONTENT_BUFFERING,\n NotificationName.CONTENT_PLAYING,\n NotificationName.CONTENT_PAUSED,\n NotificationName.AD_PLAYING,\n NotificationName.AD_PAUSED,\n NotificationName.AD_ERROR,\n NotificationName.AD_STALLED,\n NotificationName.FULLSCREEN_AVAILABLE,\n NotificationName.FULLSCREEN_CHANGE,\n NotificationName.PRESENTATION_SIZE_CHANGE,\n NotificationName.RESOURCE_INTERRUPTED,\n NotificationName.AD_BREAK_START,\n NotificationName.CONTENT_START,\n NotificationName.CONTENT_COMPLETE,\n NotificationName.CONTENT_SEGMENT_START,\n NotificationName.AD_BREAK_COMPLETE,\n NotificationName.CONTENT_SEGMENT_END,\n NotificationName.AD_TIME_UPDATE,\n NotificationName.CONTENT_TIME_UPDATE,\n NotificationName.TEXT_TRACK_AVAILABLE,\n NotificationName.TEXT_TRACK_DISPLAY_MODE_CHANGE,\n NotificationName.VIDEO_LOAD_START,\n NotificationName.VIDEO_LOAD_COMPLETE,\n NotificationName.LANGUAGE_CHANGE,\n NotificationName.READY,\n NotificationName.STREAM_TYPE_CHANGE,\n NotificationName.CONTENT_IS_LIVE_CHANGED,\n ];\n }\n\n private setPlayState(state: string): void {\n switch (state) {\n case 'waiting':\n state = 'buffering';\n break;\n\n case 'stopped':\n state = 'idle';\n break;\n }\n\n this.ui.setPlayState(state);\n }\n\n private get ui(): cvui.ViewControllerInterface {\n return this.viewControl;\n }\n\n private hVisibilityEvent(e: EventInterface): void {\n const ps: PresentationStateInterface = this.getModel(ModelName.PresentationState);\n\n if (ps.isCurrentVideoAd) {\n return;\n }\n\n const ce: cvui.ControlEvent = this.enums.ControlEvent;\n let name: string | null = null;\n\n switch (e.type) {\n case ce.BEFORE_CONTROLS_VISIBLE:\n this.updateControlsVisible(true);\n name = NotificationName.BEFORE_CONTROLS_VISIBLE;\n break;\n\n case ce.CONTROLS_VISIBLE:\n name = NotificationName.CONTROLS_VISIBLE;\n break;\n\n case ce.BEFORE_CONTROLS_HIDDEN:\n name = NotificationName.BEFORE_CONTROLS_HIDDEN;\n break;\n\n case ce.CONTROLS_HIDDEN:\n this.updateControlsVisible(false);\n name = NotificationName.CONTROLS_HIDDEN;\n break;\n }\n\n name && this.sendNotification(name);\n }\n\n /** All action event handling is consolidated here */\n // TODO: create interface/enum for action constants\n private hActionEvent(e: EventInterface): void {\n const action = e.data.action;\n\n let note = null,\n body = null;\n\n switch (action) {\n case 'mute':\n note = NotificationName.MUTE;\n break;\n\n case 'unmute':\n note = NotificationName.UNMUTE;\n break;\n\n case 'volume':\n note = NotificationName.VOLUME_CHANGE;\n body = { value: e.data.value };\n break;\n\n case 'pause':\n note = NotificationName.PAUSE;\n break;\n\n case 'stop':\n note = NotificationName.STOP;\n break;\n\n case 'play':\n note = NotificationName.PLAY;\n break;\n\n case 'posterClick':\n note = NotificationName.PLAY_ON_USER_GESTURE;\n break;\n\n case 'ccEnabled':\n case 'ccDisabled':\n const enabled = action === 'ccEnabled';\n this.activateCaptions(enabled);\n break;\n\n case 'seek':\n note = NotificationName.SEEK;\n body = { value: e.data.value };\n break;\n\n case 'seekForward':\n note = NotificationName.SEEK_FORWARD;\n body = { value: e.data.value || this.increment };\n break;\n\n case 'seekBack':\n note = NotificationName.SEEK_BACK;\n body = { value: e.data.value || this.increment };\n break;\n\n case 'enterFullscreen':\n note = NotificationName.ENTER_FULLSCREEN_REQUEST;\n break;\n\n case 'exitFullscreen':\n note = NotificationName.EXIT_FULLSCREEN_REQUEST;\n break;\n\n case 'goLive':\n note = NotificationName.SEEK_TO_LIVE;\n break;\n\n case 'settings':\n note = NotificationName.USER_SETTINGS_REQUEST;\n break;\n\n default:\n break;\n }\n\n note && this.sendNotification(note, body, NotificationType.UI);\n }\n\n private doCaptionCheckOnControlVisChange(): void {\n // only request offset if captions avail the view is currently \n // full content view (not compact or ad view)\n if (this.ui.isStandardView() && this.ccAvail) {\n this.sendNotification(\n NotificationName.TT_OFFSET_REQUEST,\n { controlsVisible: this.controlsVisible },\n NotificationType.UI\n );\n }\n }\n\n private updateControlsVisible(controlsVisible: boolean) {\n this.controlsVisible = controlsVisible;\n this.doCaptionCheckOnControlVisChange();\n }\n\n private hGestureEvent(e: EventInterface): void {\n const presentation = this.getModel(ModelName.PresentationState);\n if (presentation.isCurrentVideoAd) {\n return;\n }\n const n = e.type === this.enums.ControlEvent.MOUSE_ENTER_PRESENTATION ?\n NotificationName.MOUSE_ENTER_PRESENTATION :\n NotificationName.MOUSE_LEAVE_PRESENTATION;\n\n this.sendNotification(n, null, NotificationType.UI);\n }\n\n private activateCaptions(flag: boolean): void {\n this.ccEnabled = flag;\n this.sendNotification(NotificationName.SWITCH_TEXT_MODE, { value: flag }, NotificationType.UI);\n }\n\n private isFullScreenAvailable(): boolean {\n return this.fsMediator && this.fsMediator.isFullScreenPermitted();\n }\n\n private get fsMediator(): FullscreenMediator {\n if (!this.fsm) {\n this.fsm = this.facade.retrieveMediator(MediatorName.FULLSCREEN);\n }\n\n return this.fsm;\n }\n\n private init(): void {\n const ce: cvui.ControlEvent = this.enums.ControlEvent,\n cn: cvui.ControlName = this.controlNames,\n actionHandler: EventHandler = (e: EventInterface) => this.hActionEvent(e),\n visibilityHandler: EventHandler = (e: EventInterface) => this.hVisibilityEvent(e),\n gestureHandler: EventHandler = (e: EventInterface) => this.hGestureEvent(e);\n\n // visibility event handling\n const list: string[] = [\n ce.BEFORE_CONTROLS_VISIBLE, ce.CONTROLS_VISIBLE,\n ce.BEFORE_CONTROLS_HIDDEN, ce.CONTROLS_HIDDEN\n ];\n let i = list.length;\n\n while (i--) {\n this.ui.on(list[i], visibilityHandler);\n }\n\n // action event handling\n this.ui.on(ce.ACTION, actionHandler);\n this.ui.on(ce.MOUSE_ENTER_PRESENTATION, gestureHandler);\n this.ui.on(ce.MOUSE_LEAVE_PRESENTATION, gestureHandler);\n\n this.ui.disableControl(cn.CC_TOGGLE);\n this.disableFullscreen();\n\n this.ui.setVolume(0.35);\n\n this.ui.setVideoMode(VideoMode.IDLE);\n\n this.log(LogLevel.INFO, 'UI created.');\n }\n}\n","import { DestroyInterface } from '../..';\nimport { Emitter } from '../../core/Emitter';\nimport { Util } from '../../core/Util';\nimport { ErrorCode } from '../../enum/ErrorCode';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { TextTrackMode } from '../../enum/TextTrackMode';\nimport { AudioTrackInterface } from '../../iface/AudioTrackInterface';\nimport { EventHandler } from '../../iface/EventHandler';\nimport { EventInterface } from '../../iface/EventInterface';\nimport { LiveStreamInfoInterface } from '../../iface/LiveStreamInfoInterface';\nimport { LoggerInterface } from '../../iface/LoggerInterface';\nimport { MetadataCuepointInterface } from '../../iface/MetadataCuepointInterface';\nimport { OverridesInterface } from '../../iface/OverridesInterface';\nimport { PlaybackAdapterConfigInterface } from '../../iface/PlaybackAdapterConfigInterface';\nimport { PlaybackAdapterCoreInterface } from '../../iface/PlaybackAdapterCoreInterface';\nimport { QualityInterface } from '../../iface/QualityInterface';\nimport { ResourcePlaybackInterface } from '../../iface/ResourcePlaybackInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { StreamMetadataInterface } from '../../iface/StreamMetadataInterface';\nimport { TextTrackInterface } from '../../iface/TextTrackInterface';\nimport { VideoSurfaceInterface } from '../../iface/VideoSurfaceInterface';\nimport { PlaybackAdapterEvents } from '../enum/PlaybackAdapterEvents';\nimport { PlaybackAdapterType } from '../enum/PlaybackAdapterType';\nimport { TextTrackSurfaceEvents } from '../enum/TextTrackSurfaceEvents';\nimport { VideoSurfaceEvents } from '../enum/VideoSurfaceEvents';\nimport { Html5VideoSurface } from '../surface/Html5VideoSurface';\nimport { MetadataSurface } from '../surface/MetadataSurface';\n\nexport interface EventMap {\n type: string;\n callback: Function;\n}\n\nexport abstract class BasePlaybackAdapter extends Emitter implements PlaybackAdapterCoreInterface {\n\n protected pType: PlaybackAdapterType;\n\n //**************************************\n // Developer Override Options\n protected enableLogger: boolean = false;\n //**************************************\n\n protected videoSurface: VideoSurfaceInterface;\n protected metadataSurface: DestroyInterface;\n protected logger: LoggerInterface;\n protected playback: ResourcePlaybackInterface;\n protected config: PlaybackAdapterConfigInterface;\n protected mediaUrl: string;\n protected networkErrorRetryCount: number = 0;\n protected mediaErrorRetryCount: number = 0;\n protected minAutoLevel: number = NaN;\n protected maxAutoLevel: number = NaN;\n protected multiCdnHeaderPresent: boolean = true;\n protected pIsLiveStream: boolean = false;\n protected lowLevelDvrDetails: any = null;\n protected normalizedAudioTracks: AudioTrackInterface[];\n protected liveStreamInfoVO: LiveStreamInfoInterface = {\n isPlayingLive: false,\n liveEdgeOffset: NaN,\n dvrWindowSize: NaN,\n safeSeekingDuration: NaN,\n safeSeekingTime: NaN,\n relativeTime: NaN,\n relativeDuration: NaN,\n absoluteStart: NaN,\n absoluteTime: NaN,\n absoluteDuration: NaN\n };\n\n protected blockTimeUpdateEvent = false;\n protected loaded: boolean = false;\n protected pendingLoad: Promise;\n protected pauseTime: number = NaN;\n\n private videoSurfaceEventHandler: EventHandler = (e: EventInterface) => this.onVideoSurfaceEvent(e);\n private videoEventMap = this.enumToEventMap(VideoSurfaceEvents, this.videoSurfaceEventHandler);\n private textEventMap = this.enumToEventMap(TextTrackSurfaceEvents, this.videoSurfaceEventHandler);\n\n constructor(config: PlaybackAdapterConfigInterface) {\n\n super();\n this.config = config;\n this.playback = this.config.resource.playback;\n this.logger = config.logger;\n this.mediaUrl = config.resource.location.mediaUrl;\n\n //**************************************\n // Developer Override Options\n const o: OverridesInterface = this.config.playerOptions.overrides;\n if (!Util.isEmpty(o.enableLowLevelStreamingLogs)) {\n this.enableLogger = o.enableLowLevelStreamingLogs;\n }\n //**************************************\n\n this.videoSurface = this.createVideoSurface();\n this.metadataSurface = this.createMetadataSurface();\n }\n\n createVideoSurface(): VideoSurfaceInterface {\n return new Html5VideoSurface(this.config);\n }\n\n createMetadataSurface(): DestroyInterface {\n return new MetadataSurface(this.config, (cue: MetadataCuepointInterface) => {\n this.emit(TextTrackSurfaceEvents.METADATA_CUEPOINT, cue);\n });\n }\n\n ////////////////////\n //Abstract\n //////////////////// \n abstract currentIndex: number;\n abstract autoQualitySwitching: boolean;\n abstract maxBitrate: number;\n abstract minBitrate: number;\n abstract liveStreamInfo: LiveStreamInfoInterface;\n abstract manifestQualities: QualityInterface[];\n\n ////////////////////\n //Public Methods\n ////////////////////\n\n initialize(): void {\n this.addEvents(this.videoSurface, this.videoEventMap);\n this.addEvents(this.videoSurface, this.textEventMap);\n }\n\n override destroy(): Promise {\n this.removeEvents(this.videoSurface, this.videoEventMap);\n this.removeEvents(this.videoSurface, this.textEventMap);\n this.videoSurface.destroy();\n this.videoSurface = null;\n this.metadataSurface?.destroy();\n this.metadataSurface = null;\n this.logger = null;\n this.config = null;\n this.playback = null;\n this.liveStreamInfoVO = null;\n this.lowLevelDvrDetails = null;\n this.normalizedAudioTracks = null;\n super.destroy();\n return Promise.resolve();\n }\n\n play(): void {\n this.load().then(() => {\n this.videoSurface.play();\n });\n }\n\n pause(): void {\n this.videoSurface.pause();\n }\n\n suspend(): void {\n // no-op\n }\n\n resume(): void {\n // no-op\n }\n\n seek(position: number): void {\n this.videoSurface.seek(position);\n }\n\n load(): Promise {\n if (this.loaded === true) {\n return Promise.resolve();\n }\n else if (this.pendingLoad) {\n return this.pendingLoad;\n }\n\n this.videoSurface.addEvents();\n\n const textTrackUrl = this.config.resource.location.textTrackUrl;\n if (!Util.isEmpty(textTrackUrl)) {\n this.videoSurface.textTrackSrc = textTrackUrl;\n }\n\n this.pendingLoad = this.loadMediaUrl().then(() => {\n this.loadComplete();\n });\n\n return this.pendingLoad;\n }\n\n resize(): void {\n // no-op\n }\n\n clearCue(): void {\n this.videoSurface.clearCue();\n }\n\n ////////////////////\n //Accessors\n //////////////////// \n\n set audioTrack(track: AudioTrackInterface) {\n this.videoSurface.video.audioTracks[track.index].enabled = true;\n }\n\n set textTrackMode(mode: TextTrackMode) {\n this.videoSurface.textTrackMode = mode;\n }\n\n set textTrack(value: TextTrackInterface) {\n const tracks: TextTrack[] = this.videoSurface.video.textTracks;\n const track = Util.find(tracks, track => value.language == track.language && value.kind === track.kind && value.label === track.label);\n this.videoSurface.textTrack = track;\n }\n\n get bufferLength(): number {\n return this.videoSurface.bufferLength;\n }\n\n get time(): number {\n return this.videoSurface.time;\n }\n\n get duration(): number {\n return this.videoSurface.duration;\n }\n\n get isLiveStream(): boolean {\n return this.pIsLiveStream;\n }\n\n get droppedVideoFrames(): number {\n return this.videoSurface.metrics.droppedVideoFrames;\n }\n\n get framerate(): number {\n return this.videoSurface.framerate;\n }\n\n get buffering(): boolean {\n return this.videoSurface.buffering;\n }\n\n get type(): PlaybackAdapterType {\n return this.pType;\n }\n\n get fragmentType(): string {\n return '';\n }\n\n ////////////////////\n //Protected Methods\n ////////////////////\n protected eventsToPromise(success: string) {\n return Util\n .eventsToPromise(\n [\n { target: this.videoSurface, events: [success] }\n ],\n [\n { target: this.videoSurface, events: [VideoSurfaceEvents.ERROR] },\n { target: this, events: [PlaybackAdapterEvents.ERROR] },\n ],\n );\n }\n\n protected loadMediaUrl(): Promise {\n return this.eventsToPromise(VideoSurfaceEvents.LOADED_METADATA)\n .then(() => this.loadedMetadata());\n }\n\n protected getStreamMetadata(): StreamMetadataInterface {\n return {\n manifest: {\n mimeType: Util.getMimeType(this.mediaUrl)\n },\n fragment: {\n mimeType: this.fragmentType\n }\n };\n }\n\n protected loadedMetadata(): void {\n const metadata = this.getStreamMetadata();\n this.emit(PlaybackAdapterEvents.LOADED_METADATA, metadata);\n }\n\n protected loadComplete(): void {\n this.pendingLoad = null;\n this.loaded = true;\n }\n\n protected checkAbrConstraints(max: number): void {\n if (this.manifestQualities.length > 0) {\n const constraints: StrAnyDict = this.getCurrentAbrConstraints(max);\n this.updateAbrConstraints(constraints.min, constraints.max, this.manifestQualities);\n }\n }\n\n protected updateAbrConstraints(minIdx: number, maxIdx: number, profile: StrAnyDict[]): void {\n if (minIdx !== this.minAutoLevel || maxIdx !== this.maxAutoLevel) {\n this.minAutoLevel = minIdx;\n this.maxAutoLevel = maxIdx;\n\n this.emit(PlaybackAdapterEvents.ABR_CONSTRAINTS_CHANGE, {\n minIndex: this.minAutoLevel,\n maxIndex: this.maxAutoLevel,\n manifestQualities: profile\n });\n }\n }\n\n protected getCurrentAbrConstraints(max: number): StrAnyDict {\n return {\n min: (max) ? Util.getIndexForBitrate(this.manifestQualities, this.minBitrate, true) : 0,\n max: max\n };\n }\n\n protected onVideoSurfaceEvent(e: EventInterface): void {\n if (e.type === VideoSurfaceEvents.ERROR ||\n e.type === VideoSurfaceEvents.STALLED ||\n e.type === VideoSurfaceEvents.ABORT) {\n this.handleVideoSurfaceError(e);\n }\n else if (e.type === VideoSurfaceEvents.TIME_UPDATE && this.blockTimeUpdateEvent) {\n return;\n }\n\n this.emit(e.type, e.data);\n }\n\n protected handleVideoSurfaceError(e: EventInterface) {\n const error = this.videoSurface.video.error;\n if (error) {\n switch (error.code) {\n case MediaError.MEDIA_ERR_ABORTED:\n this.throwError(ErrorCode.MEDIA_ABORTED, error, error);\n break;\n }\n }\n }\n\n protected enumToEventMap(dict: Record, callback: Function) {\n return Util.values(dict).map(value => this.mapEvent(value, callback));\n }\n\n protected mapEvent(type: string, callback: Function): EventMap {\n return { type, callback: callback.bind(this) };\n }\n\n protected addEvents(adapter: any, map: EventMap[]): void {\n const action = Util.isFunction(adapter.on) ? 'on' : 'addEventListener';\n map.forEach(node => adapter[action](node.type, node.callback));\n }\n\n protected removeEvents(adapter: any, map: EventMap[]): void {\n const action = Util.isFunction(adapter.off) ? 'off' : 'removeEventListener';\n map.forEach(node => adapter[action](node.type, node.callback));\n }\n\n protected throwError(code: string, message: string, data: any, fatal: boolean = true) {\n this.log(LogLevel.ERROR, message);\n this.emit(PlaybackAdapterEvents.ERROR, { code, message, data, fatal });\n }\n\n protected log(...args: any[]) {\n this.logger.log.apply(this.logger, args);\n }\n\n protected getErrorMessage(msg: string, isFatal: boolean, retry: string = 'n/a'): string {\n return `${msg} fatal: ${isFatal} retry: ${retry}`;\n }\n\n protected normalizeAudioTracks(tracks: StrAnyDict, map?: Partial): AudioTrackInterface[] {\n //tracks.push({ lang: 'en', codec: 'dolby:ec-3' }, { lang: 'klingon', codec: 'ac-3' }) testing non web audio codecs filtering. \n return tracks.map((item: StrAnyDict, index: number): AudioTrackInterface => ({\n index: index,\n id: !isNaN(item[map.id]) ? item[map.id].toString() : !isNaN(item.id) ? item.id.toString() : '',\n type: item[map.type] || item.type || '',\n lang: item[map.lang] || item.lang || '',\n codec: item[map.codec] || item.codec || '',\n label: item[map.label] || item.label || ''\n })).filter((item: AudioTrackInterface) => {\n const c = item.codec;\n return c === '' || c.indexOf('mp4a') !== -1;\n });\n }\n\n protected normalizeQuality(item: any, index: number): QualityInterface {\n return {\n index,\n bitrate: item.bitrate,\n height: item.height,\n width: item.width,\n codec: item.codec || item.codecs\n };\n }\n\n protected mergeStreamingConfigs(base: any, override: any,) {\n\n if (!Util.isEmpty(override?.[this.pType]?.config)) {\n\n return Util.merge(base, override[this.pType].config);\n }\n\n return base;\n }\n}\n","import { AppResources } from '../app/AppResources';\nimport { Util } from '../core/Util';\nimport { ErrorCode } from '../enum/ErrorCode';\nimport { LogLevel } from '../enum/LogLevel';\nimport { EventInterface } from '../iface/EventInterface';\nimport { LiveStreamInfoInterface } from '../iface/LiveStreamInfoInterface';\nimport { PlaybackAdapterConfigInterface } from '../iface/PlaybackAdapterConfigInterface';\nimport { QualityInterface } from '../iface/QualityInterface';\nimport { BasePlaybackAdapter } from '../playback/adapter/BasePlaybackAdapter';\nimport { PlaybackAdapterEvents } from '../playback/enum/PlaybackAdapterEvents';\nimport { PlaybackAdapterType } from '../playback/enum/PlaybackAdapterType';\nimport { VideoSurfaceEvents } from '../playback/enum/VideoSurfaceEvents';\nimport { MediaPlayer, Quality } from './TwitchInterface';\nimport { TwitchOverrides } from './TwitchOverrides';\n\n\nexport class TwitchLowLatencyAdapter extends BasePlaybackAdapter {\n\n private MAX_BITRATE_CLEAR_VALUE: number = 100000000;\n protected override pType = PlaybackAdapterType.TWITCH_LOW_LATENCY;\n\n private twitch: MediaPlayer = (window).IVSPlayer;\n private player!: MediaPlayer;\n\n private autoMaxBitrate: number = Number.POSITIVE_INFINITY;\n\n private twitchEventMap = [\n {\n type: this.twitch.PlayerState.READY,\n callback: (e: any) => this.onReady(e)\n },\n {\n type: this.twitch.PlayerEventType.QUALITY_CHANGED,\n callback: (e: any) => this.onQualityChange(e)\n },\n {\n type: this.twitch.PlayerEventType.ERROR,\n callback: (e: any) => this.onError(e)\n },\n {\n type: this.twitch.PlayerEventType.AUDIO_BLOCKED,\n callback: (e: any) => this.onError(e)\n },\n {\n type: this.twitch.PlayerEventType.PLAYBACK_BLOCKED,\n callback: (e: any) => this.onError(e)\n },\n // {\n // type: this.twitch.PlayerEventType.REBUFFERING,\n // callback: (e: any) => this.onRebuffering(e)\n // },\n // {\n // type: this.twitch.PlayerEventType.METADATA,\n // callback: (e: any) => this.onMetadata(e)\n // }\n ];\n\n constructor(config: PlaybackAdapterConfigInterface) {\n super(config);\n this.logger.log(LogLevel.INFO, 'TwitchLowLatencyAdapter created');\n }\n\n ////////////////////\n //Public Methods\n ////////////////////\n override initialize(): void {\n super.initialize();\n\n this.player = this.twitch.create();\n this.player.attachHTMLVideoElement(this.videoSurface.video);\n this.player.setAutoplay(false);\n\n const logLevel = this.enableLogger ? 'debug' : 'error';\n this.player.setLogLevel(logLevel);\n\n const o: TwitchOverrides = this.config.resource.overrides?.twitch || {};\n const rebufferToLive = Util.isBoolean(o.rebufferToLive) ? o.rebufferToLive : true;\n this.player.setRebufferToLive(rebufferToLive);\n\n this.addEvents(this.player, this.twitchEventMap);\n\n !isNaN(this.playback.abr.maxBitrate) && (this.maxBitrate = this.playback.abr.maxBitrate);\n !isNaN(this.playback.abr.minBitrate) && (this.minBitrate = this.playback.abr.minBitrate);//just to get logging that it is not avail.\n\n this.logger.log(LogLevel.INFO, 'Twitch Version', this.player.getVersion());\n }\n\n override seek(position: number): void {\n return; //no reason to allow seeking with twitch ull.\n //this.player.seekTo(position);\n }\n\n override destroy(): Promise {\n this.removeEvents(this.player, this.twitchEventMap);\n //const x = (this.player.worker).terminate() // they are looking into making sure the worker is terminated properly. I raised issue. \n this.player.delete();\n this.player = null;\n this.twitch = null;\n return super.destroy();\n }\n\n override play(): void {\n this.player.play();\n }\n\n ////////////////////\n //Accessors\n ////////////////////\n override get duration(): number {\n return this.player.getDuration();\n }\n\n override get time(): number {\n return this.player.getPosition();\n }\n\n set autoQualitySwitching(value: boolean) {\n this.player.setAutoSwitchQuality(value);\n }\n get autoQualitySwitching(): boolean {\n return this.player.getAutoSwitchQuality();\n }\n\n set currentIndex(index: number) {\n const q = this.player.getQualities();\n this.player.setQuality(q[index]);\n }\n get currentIndex(): number {\n const q: Quality = this.player.getQuality();\n return Util.getIndexForBitrate(this.manifestQualities, q.bitrate, false);\n }\n\n set minBitrate(value: number) {\n this.logger.log(LogLevel.INFO, AppResources.messages.ABR_MIN_BITRATE_RESTRICTION_UNAVAILABLE);\n }\n\n get minBitrate(): number {\n return this.manifestQualities[0].bitrate;\n }\n\n set maxBitrate(value: number) {\n this.autoMaxBitrate = !isNaN(value) ? value : this.MAX_BITRATE_CLEAR_VALUE;\n this.player.setAutoMaxBitrate(this.autoMaxBitrate);\n }\n\n get maxBitrate(): number {\n const index = !isNaN(this.autoMaxBitrate) ?\n Util.getIndexForBitrate(this.manifestQualities, this.autoMaxBitrate, false) :\n this.manifestQualities.length - 1;\n\n return this.manifestQualities[index].bitrate;\n }\n\n get manifestQualities(): QualityInterface[] {\n const qualities = this.player.getQualities();\n return qualities.sort((a: Quality, b: Quality) => a.bitrate - b.bitrate).map(this.normalizeQuality);\n }\n\n get liveStreamInfo(): LiveStreamInfoInterface {\n const details: LiveStreamInfoInterface = this.liveStreamInfoVO;\n if (this.pIsLiveStream) {\n details.isPlayingLive = true;\n details.relativeDuration = this.duration;\n details.relativeTime = this.time;\n details.liveEdgeOffset = this.player.getLiveLatency();\n }\n return details;\n }\n\n ////////////////////\n // Protected \n ////////////////////\n protected override onVideoSurfaceEvent(e: EventInterface): void {\n switch (e.type) {\n case VideoSurfaceEvents.DURATION_CHANGE:\n this.pIsLiveStream = this.duration === Infinity;\n break;\n }\n super.onVideoSurfaceEvent(e);\n }\n\n protected override loadMediaUrl(): Promise {\n return Promise.resolve().then(() => {\n this.player.load(this.mediaUrl);\n });\n }\n\n ////////////////////\n // Events\n ////////////////////\n private onReady(e: any): void {\n this.emit(PlaybackAdapterEvents.MANIFEST_PARSED, { profile: this.manifestQualities });\n }\n\n private onQualityChange(e: any): void {\n const index = Util.getIndexForBitrate(this.manifestQualities, e.bitrate, false);\n this.checkAbrConstraints(Util.getIndexForBitrate(this.manifestQualities, this.maxBitrate, false));\n this.emit(PlaybackAdapterEvents.ABR_QUALITY_LOADED, { index: index });\n\n }\n // private onMetadata(e: any): void {\n // //text tracks have cues as well \n // console.log('onMetadata', e);\n // }\n\n // private onRebuffering(e: any): void {\n // console.log('onRebuffering', e);\n // }\n\n private onError(e: any = {}): void {\n switch (e.type) {\n case this.twitch.ErrorType.NETWORK_IO:\n case this.twitch.ErrorType.NETWORK:\n case this.twitch.ErrorType.NOT_AVAILABLE:\n this.throwError(ErrorCode.TWITCH_NETWORK_ERROR,\n `${AppResources.messages.FATAL_PLAYBACK_NETWORK_ERROR} : ${e.message}`, e);\n break;\n\n case this.twitch.ErrorType.INVALID_DATA:\n this.throwError(ErrorCode.TWITCH_PARSE_ERROR,\n `${AppResources.messages.FATAL_PLAYBACK_MEDIA_ERROR} : ${e.message}`, e);\n break;\n\n case this.twitch.ErrorType.NOT_SUPPORTED:\n this.throwError(ErrorCode.TWITCH_SRC_NOT_SUPPORTED,\n `${AppResources.messages.FATAL_PLAYBACK_MEDIA_ERROR} : ${e.message}`, e);\n break;\n\n default:\n switch (e.source) {\n case this.twitch.ErrorSource.DECODER:\n case this.twitch.ErrorSource.RENDERER:\n case this.twitch.ErrorSource.SEGMENT:\n this.throwError(ErrorCode.TWITCH_MEDIA_ERROR,\n `${AppResources.messages.FATAL_PLAYBACK_MEDIA_ERROR} : ${e.message}`, e);\n break;\n\n default:\n this.throwError(ErrorCode.UNSPECIFIED_TWITCH_ERROR, e.message, e, false);\n }\n }\n }\n ////////////////////\n // Private\n //////////////////// \n}\n","import { buildInfo } from '../core/BuildInfo';\nimport { Logger } from '../core/Logger';\nimport { AsyncDataRequest } from '../dataservice/AsyncDataRequest';\nimport { MediatorName } from '../enum/MediatorName';\nimport { PlayerDom } from '../enum/PlayerDom';\nimport { ProxyName } from '../enum/ProxyName';\nimport { ServiceName } from '../enum/ServiceName';\nimport { FacadeInterface, SystemServiceInterface } from '../iface';\nimport { AsyncDataRequestOptionsInterface } from '../iface/AsyncDataRequestOptionsInterface';\nimport { AutoplayInfoInterface } from '../iface/AutoplayInfoInterface';\nimport { PlaybackAdapterConfigInterface } from '../iface/PlaybackAdapterConfigInterface';\nimport { PlayerOptionsInterface } from '../iface/PlayerOptionsInterface';\nimport { ResourceConfigurationInterface } from '../iface/ResourceConfigurationInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { PlayerDomProxy } from '../model/PlayerDomProxy';\nimport { AutoplayCapabilitiesService } from '../service/AutoplayCapabilitiesService';\nimport { AppMediator } from '../view/AppMediator';\nimport { cvui } from './cvui/cvui';\nimport { UiEnumCollectionInterface } from './cvui/UiEnumCollectionInterface';\nimport { UiMediator } from './cvui/UiMediator';\nimport { TwitchLowLatencyAdapter } from './TwitchLowLatencyAdapter';\n\n\n/**\n * This is a collection of deprecated functionality\n * \n * @deprecated\n */\nexport class Deprecated {\n\n static warn(msg: string) {\n Logger.deprecated(msg);\n }\n\n /**\n * @deprecated\n */\n static checkEventName(name: string) {\n if (/[A-Z]+/.test(name)) {\n Deprecated.warn('Event name is being forced to lowercase. Please use the avia.PlayerEvent enum instead of a string literal. This check will be removed April 1st, 2022');\n name = name.toLowerCase();\n }\n return name;\n }\n\n /**\n * @deprecated\n */\n static createUi(facade: FacadeInterface, ui: cvui.UiObjectInterface, sysSvc: SystemServiceInterface, playerOpts: PlayerOptionsInterface) {\n Deprecated.warn('CVUI is deprecated. Please use the avia-js-ui instead. Access to this feature will be completely removed April 1st, 2022');\n\n const domProxy = facade.retrieveProxy(ProxyName.PlayerDomProxy);\n let uic: StrAnyDict = playerOpts.uiConfig;\n\n // vtg-1732 - exclude CC\n if (sysSvc.isIos || sysSvc.isAndroid) {\n if (!uic) {\n uic = {};\n }\n if (!uic.exclude || !Array.isArray(uic.exclude)) {\n uic.exclude = [];\n }\n uic.exclude.indexOf(ui.ControlName.CC_TOGGLE) == -1 && uic.exclude.push(ui.ControlName.CC_TOGGLE);\n }\n\n const viewController: cvui.ViewControllerInterface = ui.createUi({\n controlContainer: domProxy.getMain(),\n panelContainer: domProxy.getElement(PlayerDom.PANEL_CONTAINER),\n zOrigin: domProxy.getSafeZIndex(),\n systemInfo: sysSvc.info,\n configuration: uic || {},\n omitVolume: !sysSvc.isDesktop\n });\n\n const enums: UiEnumCollectionInterface = {\n ControlName: ui.ControlName,\n ControlEvent: ui.ControlEvent,\n PlayState: ui.PlayState,\n DecoratorName: ui.DecoratorName,\n VideoType: ui.VideoType,\n };\n\n const m = new UiMediator(MediatorName.UI, viewController);\n\n facade.registerMediator(m);\n m.initialize(enums);\n }\n\n /**\n * @deprecated\n */\n static getModelSnapShot(appMediator: AppMediator) {\n Deprecated.warn('getModelSnapShot method is deprecated. Access to this property will be completely removed April 1st, 2022');\n\n const snapshot = appMediator.getSnapshot();\n snapshot.BuildInfo = buildInfo;\n return snapshot;\n }\n\n /**\n * @deprecated\n */\n static get xhr() {\n return {\n performXhr(options: AsyncDataRequestOptionsInterface) {\n Deprecated.warn('performXhr method is deprecated. Please use Util.request, or fetch directly. Access to this property will be completely removed April 28th, 2022');\n const temp = options.onComplete;\n options.onComplete = (e) => {\n temp(e);\n e.target.destroy();\n };\n new AsyncDataRequest(options);\n }\n };\n }\n\n /**\n * @deprecated\n */\n static setResource(appMediator: AppMediator, resource: Partial) {\n Deprecated.warn('The setter for the resource property is deprecated. Please use player.attachResource. Access to this property will be completely removed July 1st, 2022');\n appMediator.attachResource(resource);\n }\n\n\n /**\n * @deprecated\n */\n static createTwitch(config: PlaybackAdapterConfigInterface) {\n Deprecated.warn('The twitch low latency adapter is deprecated. Please use the Twitch Adapter Plugin. This feature will be completely removed January 1st, 2022');\n return new TwitchLowLatencyAdapter(config);\n }\n\n /**\n * @deprecated\n */\n static getAutoplayCapabilities(appMediator: AppMediator): Promise {\n Deprecated.warn('The getAutoplayCapabilities function is deprecated. Please use avia.getAutoplayCapabilities. This feature will be completely removed January 1st, 2022');\n\n const apc = appMediator.getService(ServiceName.AutoplayCapabilities);\n\n return apc.detectCapabilities();\n }\n}\n","/* Copyright(c) 2006-2018 Futurescale, Inc. */\n/* TypeScript port by Video Technology Group, CBSi Inc. */\n\nimport { ProxyInterface } from \"../iface\";\nimport { Notifier } from \"./Notifier\";\n\n/**\n * @hideconstructor\n */\nexport class Proxy extends Notifier implements ProxyInterface {\n\n private readonly proxyName: string = null;\n private pData: any = null;\n\n constructor(name: string, data?: any) {\n super();\n\n this.proxyName = name;\n this.pData = data || {};\n }\n\n /**\n * @ignore\n */\n get name(): string {\n return this.proxyName;\n }\n\n /**\n * @ignore\n */\n get data(): any {\n return this.pData;\n }\n\n /**\n * @ignore\n */\n onRegister(): void {\n /* implementation optional */\n }\n\n /**\n * @ignore\n */\n override onRemove(): void {\n this.pData = null;\n\n super.onRemove();\n }\n}\n","import { HookType } from '../enum/HookType';\nimport { ProxyName } from '../enum/ProxyName';\nimport { HookError } from '../error/HookError';\nimport { HookInterface } from '../iface/HookInterface';\nimport { Proxy } from '../mvc/Proxy';\n\nexport const hook_config = {\n [HookType.EVENT]: {\n multiple: true\n },\n [HookType.AD_BREAK]: {\n multiple: false\n },\n [HookType.AD]: {\n multiple: false\n }\n}\n\nexport class HookProxy extends Proxy {\n\n private hookMap: Record = {};\n\n constructor(data?: any) {\n super(ProxyName.HookProxy, data);\n }\n\n override onRemove() {\n this.hookMap = null;\n super.onRemove();\n }\n\n registerHook(type: HookType, hook: HookInterface): void {\n if (!this.hookMap[type]) {\n this.hookMap[type] = [];\n }\n\n if (hook_config[type].multiple === false && this.hookMap[type].length) {\n // hook type disallows multiple hooks\n return;\n }\n\n this.hookMap[type].push(hook);\n }\n\n removeHook(type: HookType, hook: HookInterface): void {\n if (!this.hookMap[type]) {\n return;\n }\n\n this.hookMap[type] = this.hookMap[type].filter(h => h !== hook);\n }\n\n async applyHook(type: HookType, data: T): Promise {\n const hooks = this.hookMap[type];\n\n if (!hooks || hooks.length === 0) {\n return data;\n }\n\n let cancelled = false;\n const cancel = () => cancelled = true;\n const exec = async (value: T, index = 0): Promise => {\n if (index >= hooks.length) {\n return value;\n }\n\n const transform = hooks[index];\n if (typeof transform !== 'function') {\n throw new HookError(type, 'Hook must be a valid function');\n }\n\n const context = { type, value, cancel };\n\n try {\n await transform(context);\n }\n catch (error) {\n throw new HookError(type, error.toString(), error);\n }\n\n return (cancelled) ? null : exec(context.value, ++index);\n };\n\n return exec(data);\n }\n}\n","import { QualityCategory } from '../enum/QualityCategory';\n\nexport const QualityMap = {\n [QualityCategory.UHD_8K]: 4320,\n [QualityCategory.UHD_4K]: 2160,\n [QualityCategory.UHD]: 1440,\n [QualityCategory.HD]: 720,\n [QualityCategory.SD]: 0,\n}\n\n","import { AppResources } from '../app/AppResources';\nimport { buildInfo } from '../core/BuildInfo';\nimport { Logger } from '../core/Logger';\nimport { Util } from '../core/Util';\nimport { NativePlugin } from '../enum/NativePlugin';\nimport { QualityCategory } from '../enum/QualityCategory';\nimport { SystemServiceInterface } from '../iface';\nimport { ConfigInterface } from '../iface/ConfigInterface';\nimport { PlayerOptionsInterface } from '../iface/PlayerOptionsInterface';\nimport { QualityInterface } from '../iface/QualityInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { PlaylistProxy } from '../model/PlaylistProxy';\nimport { SystemService } from '../service/SystemService';\nimport { QualityMap } from './QualityMap';\n\n\nexport class Utils {\n\n static getMinAndMaxValuesForCategory(list: QualityInterface[], category: string): Record {\n let minIndex = Infinity;\n let maxIndex = 0;\n let minBitrate = Infinity;\n let maxBitrate = 0;\n\n list.forEach(q => {\n if (q.category.indexOf(category) >= 0) {\n maxIndex = Math.max(maxIndex, q.index);\n minIndex = Math.min(minIndex, q.index);\n maxBitrate = Math.max(maxBitrate, q.bitrate);\n minBitrate = Math.min(minBitrate, q.bitrate);\n }\n });\n\n return { maxIndex, minIndex, minBitrate, maxBitrate };\n }\n\n static getQualityCategoryForVideoHeight(ht: number): QualityCategory {\n const m = QualityMap;\n\n if (ht >= m[QualityCategory.UHD_8K]) return QualityCategory.UHD_8K;\n\n if (ht >= m[QualityCategory.UHD_4K]) return QualityCategory.UHD_4K;\n\n if (ht >= m[QualityCategory.UHD]) return QualityCategory.UHD;\n\n if (ht >= m[QualityCategory.HD]) return QualityCategory.HD;\n\n return QualityCategory.SD;\n }\n\n static classFromQualifiedName(qName: string): any | null {\n if (!Util.isString(qName)) {\n return qName;\n }\n\n const g = SystemService.getInstance().global;\n\n let a = qName.split('.'),\n o = g,\n len = a.length,\n i, n;\n\n if (a[0] === 'window') {\n a = a.slice(1);\n len = a.length;\n }\n\n for (i = 0; i < len; i++) {\n n = a[i];\n if (o[n] === undefined) {\n Logger.error(`Util.classFromQualifiedName: '${qName}' is undefined.`);\n return null;\n }\n o = o[n];\n }\n\n return o;\n }\n\n static serializeConfigSnapshot(playerOptions: PlayerOptionsInterface, playlist: PlaylistProxy, system: SystemServiceInterface, spacing: number = 0) {\n const r = playlist.currentResource ? JSON.parse(JSON.stringify(playlist.currentResource)) : {};\n\n // remove props with null and NaN values\n const rmNullAndNan = (p: any): any => {\n const t = typeof p;\n const del = '\\0';\n\n if (p && t == 'object') {\n for (const q in p) {\n const v = rmNullAndNan(p[q]);\n if (v === del) delete p[q];\n else p[q] = v;\n }\n return p;\n }\n else {\n return p === null || (t === 'number' && isNaN(p)) ? del : p;\n }\n };\n rmNullAndNan(r);\n\n // mod player options\n const poStr = JSON.stringify(playerOptions, (key, value) => (value instanceof HTMLElement) ? undefined : value);\n const po = JSON.parse(poStr);\n\n delete po.dataTransformers;\n po.container = null;\n\n const out: ConfigInterface = {\n buildInfo,\n playerOptions: po,\n resource: r,\n system: system.info,\n };\n\n return JSON.stringify(out, null, spacing);\n }\n\n static getNativePluginConfig(plugin: NativePlugin, playerOptions: PlayerOptionsInterface) {\n const base = AppResources.nativePluginConfig[plugin];\n\n if (!base) {\n return null;\n }\n\n const config = Object.assign({}, base);\n const url = playerOptions.overrides?.dependencies?.[plugin] || config.url;\n config.url = url;\n return config;\n }\n}\n","import { LogServiceInterface } from '../iface';\nimport { LoggerInterface } from '../iface/LoggerInterface';\nimport { ServiceBase } from './ServiceBase';\n\n\nexport class LogService extends ServiceBase implements LogServiceInterface {\n\n private pLogger: LoggerInterface;\n\n constructor(name: string, logger: LoggerInterface) {\n super(name);\n this.pLogger = logger;\n }\n\n override destroy(): void {\n this.pLogger.destroy();\n this.pLogger = null;\n }\n\n get logger(): LoggerInterface {\n return this.pLogger;\n }\n}\n","import { NotificationName } from '../enum/NotificationName';\nimport { PlayerEvent } from '../enum/PlayerEvent';\n\nexport const event_map: Record = {\n\n [NotificationName.READY]: PlayerEvent.READY,\n\n [NotificationName.POSTER_CLICK]: PlayerEvent.POSTER_CLICK,\n\n [NotificationName.VIDEO_START_ERROR]: PlayerEvent.VIDEO_START_ERROR,\n [NotificationName.VIDEO_PLAYBACK_ERROR]: PlayerEvent.VIDEO_PLAYBACK_ERROR,\n [NotificationName.RESOURCE_ERROR]: PlayerEvent.RESOURCE_ERROR,\n\n [NotificationName.PLAYLIST_ADVANCED]: PlayerEvent.PLAYLIST_ADVANCED,\n [NotificationName.PLAYLIST_COMPLETE]: PlayerEvent.PLAYLIST_COMPLETE,\n [NotificationName.PLAYLIST_CHANGE]: PlayerEvent.PLAYLIST_CHANGE,\n [NotificationName.PLAYLIST_CLEARED]: PlayerEvent.PLAYLIST_CLEARED,\n [NotificationName.PLAYLIST_CURRENT_RESOURCE_CLEARED]: PlayerEvent.PLAYLIST_CURRENT_RESOURCE_CLEARED,\n\n [NotificationName.RESOURCE_START]: PlayerEvent.RESOURCE_START,\n [NotificationName.RESOURCE_END]: PlayerEvent.RESOURCE_END,\n [NotificationName.RESOURCE_INTERRUPTED]: PlayerEvent.RESOURCE_INTERRUPTED,\n [NotificationName.PLAYLIST_OUT_OF_RANGE]: PlayerEvent.PLAYLIST_OUT_OF_RANGE,\n\n [NotificationName.PLAYBACK_SUSPENDED]: PlayerEvent.PLAYBACK_SUSPENDED,\n [NotificationName.PLAYBACK_RESUMED]: PlayerEvent.PLAYBACK_RESUMED,\n [NotificationName.PLAYBACK_STATE_CHANGE]: PlayerEvent.PLAYBACK_STATE_CHANGE,\n\n //content\n [NotificationName.AUDIO_TRACK_INFO_CHANGE]: PlayerEvent.AUDIO_TRACK_INFO_CHANGE,\n [NotificationName.AUDIO_TRACK_CHANGE]: PlayerEvent.AUDIO_TRACK_CHANGE,\n [NotificationName.QUALITY_CHANGE]: PlayerEvent.QUALITY_CHANGE,\n [NotificationName.QUALITY_INFO_CHANGE]: PlayerEvent.QUALITY_INFO_CHANGE,\n [NotificationName.CDN_CHANGE]: PlayerEvent.CDN_CHANGE,\n [NotificationName.CONTENT_START]: PlayerEvent.CONTENT_START,\n [NotificationName.CONTENT_DURATION_AVAILABLE]: PlayerEvent.CONTENT_DURATION_AVAILABLE,\n [NotificationName.CONTENT_SEGMENT_START]: PlayerEvent.CONTENT_SEGMENT_START,\n [NotificationName.CONTENT_TIME_UPDATE]: PlayerEvent.CONTENT_PROGRESS,\n [NotificationName.CONTENT_BUFFERING]: PlayerEvent.RESOURCE_BUFFERING,\n [NotificationName.CONTENT_PLAYING]: PlayerEvent.CONTENT_PLAYING,\n [NotificationName.CONTENT_PAUSED]: PlayerEvent.CONTENT_PAUSED,\n [NotificationName.CONTENT_SEEKING]: PlayerEvent.SEEK_START,\n [NotificationName.CONTENT_SEEKED]: PlayerEvent.SEEK_COMPLETE,\n [NotificationName.CONTENT_IS_LIVE_CHANGED]: PlayerEvent.CONTENT_IS_PLAYING_LIVE,\n [NotificationName.STREAM_TYPE_CHANGE]: PlayerEvent.STREAM_TYPE_CHANGE,\n [NotificationName.STREAM_METADATA]: PlayerEvent.STREAM_METADATA,\n [NotificationName.STREAM_ID_AVAILABLE]: PlayerEvent.STREAM_ID_AVAILABLE,\n [NotificationName.SEEK_REDIRECT_START]: PlayerEvent.SEEK_REDIRECT_START,\n [NotificationName.SEEK_REDIRECT_COMPLETE]: PlayerEvent.SEEK_REDIRECT_COMPLETE,\n [NotificationName.CONTENT_SEGMENT_END]: PlayerEvent.CONTENT_SEGMENT_END,\n [NotificationName.CONTENT_COMPLETE]: PlayerEvent.CONTENT_COMPLETE,\n [NotificationName.DRM_KEYSYSTEM_CREATED]: PlayerEvent.DRM_KEYSYSTEM_CREATED,\n [NotificationName.METADATA_CUEPOINT]: PlayerEvent.METADATA_CUEPOINT,\n [NotificationName.TEXT_CUEPOINT]: PlayerEvent.TEXT_CUEPOINT,\n [NotificationName.TEXT_TRACK_DISPLAY_MODE_CHANGE]: PlayerEvent.TEXT_TRACK_DISPLAY_MODE_CHANGE,\n [NotificationName.TEXT_TRACK_CHANGE]: PlayerEvent.TEXT_TRACK_CHANGE,\n [NotificationName.TEXT_TRACK_INFO_CHANGE]: PlayerEvent.TEXT_TRACK_INFO_CHANGE,\n [NotificationName.TEXT_TRACK_AVAILABLE]: PlayerEvent.TEXT_TRACK_AVAILABLE,\n [NotificationName.VIDEO_LOAD_COMPLETE]: PlayerEvent.VIDEO_LOAD_COMPLETE,\n [NotificationName.THUMBNAIL_TRACK_AVAILABLE]: PlayerEvent.THUMBNAIL_TRACK_AVAILABLE,\n\n [NotificationName.AD_SEGMENT_START]: PlayerEvent.AD_SEGMENT_START,\n [NotificationName.AD_SEGMENT_END]: PlayerEvent.AD_SEGMENT_END,\n [NotificationName.AD_CUEPOINTS_AVAILABLE]: PlayerEvent.AD_CUEPOINTS_AVAILABLE,\n [NotificationName.AD_BREAK_START]: PlayerEvent.AD_BREAK_START,\n [NotificationName.AD_BREAK_METADATA]: PlayerEvent.AD_BREAK_METADATA,\n [NotificationName.AD_START]: PlayerEvent.AD_START,\n [NotificationName.AD_PAUSED]: PlayerEvent.AD_PAUSED,\n [NotificationName.AD_PLAYING]: PlayerEvent.AD_PLAYING,\n [NotificationName.AD_TIME_UPDATE]: PlayerEvent.AD_PROGRESS,\n [NotificationName.AD_FIRST_QUARTILE]: PlayerEvent.AD_FIRST_QUARTILE,\n [NotificationName.AD_MIDPOINT]: PlayerEvent.AD_MIDPOINT,\n [NotificationName.AD_THIRD_QUARTILE]: PlayerEvent.AD_THIRD_QUARTILE,\n [NotificationName.AD_COMPLETE]: PlayerEvent.AD_COMPLETE,\n [NotificationName.AD_BREAK_COMPLETE]: PlayerEvent.AD_BREAK_COMPLETE,\n [NotificationName.AD_ERROR]: PlayerEvent.AD_ERROR,\n [NotificationName.AD_STALLED]: PlayerEvent.AD_STALLED,\n [NotificationName.AD_BREAK_DISCARDED]: PlayerEvent.AD_BREAK_DISCARDED,\n [NotificationName.AD_BUFFERING]: PlayerEvent.RESOURCE_BUFFERING,\n [NotificationName.AD_CLICK]: PlayerEvent.AD_CLICK,\n [NotificationName.AD_SKIPPED]: PlayerEvent.AD_SKIPPED,\n\n [NotificationName.USER_PAUSE]: PlayerEvent.USER_PAUSE,\n [NotificationName.BEFORE_CONTROLS_VISIBLE]: PlayerEvent.BEFORE_CONTROLS_VISIBLE,\n [NotificationName.BEFORE_CONTROLS_HIDDEN]: PlayerEvent.BEFORE_CONTROLS_HIDDEN,\n [NotificationName.CONTROLS_VISIBLE]: PlayerEvent.CONTROLS_VISIBLE,\n [NotificationName.CONTROLS_HIDDEN]: PlayerEvent.CONTROLS_HIDDEN,\n [NotificationName.USER_SETTINGS_REQUEST]: PlayerEvent.USER_SETTINGS,\n\n [NotificationName.LIVE_PRESENTATION_STOPPED]: PlayerEvent.LIVE_PRESENTATION_STOPPED,\n [NotificationName.PRESENTATION_SIZE_CHANGE]: PlayerEvent.PRESENTATION_SIZE_CHANGE,\n [NotificationName.FULLSCREEN_ENTER]: PlayerEvent.FULLSCREEN_ENTER,\n [NotificationName.FULLSCREEN_EXIT]: PlayerEvent.FULLSCREEN_EXIT,\n [NotificationName.MOUSE_ENTER_PRESENTATION]: PlayerEvent.MOUSE_ENTER_PRESENTATION,\n [NotificationName.MOUSE_LEAVE_PRESENTATION]: PlayerEvent.MOUSE_LEAVE_PRESENTATION,\n\n [NotificationName.LANGUAGE_CHANGE]: PlayerEvent.LANGUAGE_CHANGE,\n\n [NotificationName.USER_KEYBOARD_COMMAND]: PlayerEvent.USER_KEYBOARD_COMMAND,\n [NotificationName.HOTKEY_ACTION]: PlayerEvent.HOTKEY_ACTION,\n\n [NotificationName.AUTOPLAY_BLOCKED]: PlayerEvent.AUTOPLAY_BLOCKED,\n\n [NotificationName.VOLUME_CHANGE]: PlayerEvent.VOLUME_CHANGE,\n [NotificationName.MUTE]: PlayerEvent.MUTE_CHANGE,\n [NotificationName.UNMUTE]: PlayerEvent.MUTE_CHANGE,\n};\n","import { AppResources } from '../app/AppResources';\nimport { event_map } from '../app/event_map';\nimport { Logger } from '../core/Logger';\nimport { Util } from '../core/Util';\nimport { UiMediatorInterface } from '../deprecated/cvui/UiMediatorInterface';\nimport { Deprecated } from '../deprecated/Deprecated';\nimport { ModelSnapshotInterface } from '../deprecated/ModelSnapshotInterface';\nimport { LogLevel } from '../enum/LogLevel';\nimport { MediatorName } from '../enum/MediatorName';\nimport { ModelName } from '../enum/ModelName';\nimport { NativePlugin } from '../enum/NativePlugin';\nimport { NotificationName } from '../enum/NotificationName';\nimport { NotificationType } from '../enum/NotificationType';\nimport { PlayerEvent } from '../enum/PlayerEvent';\nimport { ProxyName } from '../enum/ProxyName';\nimport { ServiceName } from '../enum/ServiceName';\nimport { StreamType } from '../enum/StreamType';\nimport {\n ApplicationInterface,\n MediatorInterface,\n NotificationInterface,\n PlayerDomProxyInterface,\n PresentationMediatorInterface,\n SystemServiceInterface\n} from '../iface';\nimport { AdCuePointInterface } from '../iface/AdCuePointInterface';\nimport { AutoplayInfoInterface } from '../iface/AutoplayInfoInterface';\nimport { DimensionsInterface } from '../iface/DimensionsInterface';\nimport { EventInterface } from '../iface/EventInterface';\nimport { PluginInterface } from '../iface/PluginInterface';\nimport { PresentationStateInterface } from '../iface/PresentationStateInterface';\nimport { ResourceConfigurationInterface } from '../iface/ResourceConfigurationInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { VideoPlayerInterface } from '../iface/VideoPlayerInterface';\nimport { ContentPlaybackStateProxy } from '../model/ContentPlaybackStateProxy';\nimport { ModelCollectionProxy } from '../model/ModelCollectionProxy';\nimport { PlaylistProxy } from '../model/PlaylistProxy';\nimport type { ResourceProxy } from '../model/ResourceProxy';\nimport { PlayerOptions } from '../model/vo/PlayerOptions';\nimport { Utils } from '../util/Utils';\nimport { AdPresentationMediator } from './AdPresentationMediator';\nimport { FullscreenMediator } from './FullscreenMediator';\nimport { LogAwareMediator } from \"./LogAwareMediator\";\nimport { PluginMediator } from './PluginMediator';\n\n\nexport class AppMediator extends LogAwareMediator implements MediatorInterface {\n\n private app: ApplicationInterface;\n\n constructor(name: string, app: ApplicationInterface) {\n super(name);\n\n this.app = app;\n }\n\n setFullscreenElement(el: HTMLElement): void {\n const fsm = this.facade.retrieveMediator(MediatorName.FULLSCREEN);\n fsm.fullscreenElement = el;\n }\n\n getFullscreenElement(): HTMLElement {\n const fsm = this.facade.retrieveMediator(MediatorName.FULLSCREEN);\n\n return fsm.fullscreenElement;\n }\n\n override onRemove() {\n this.app = null;\n super.onRemove();\n }\n\n getAppApi(): VideoPlayerInterface {\n return this.app.getApi();\n }\n\n loadNativePlugin(name: NativePlugin, url?: string): Promise {\n const cfg = AppResources.nativePluginConfig[name];\n if (!cfg) {\n return null;\n }\n\n if (url) {\n cfg.url = url;\n }\n const pim = this.facade.retrieveMediator(MediatorName.PLUGIN_MEDIATOR);\n\n return pim?.loadPlugin(cfg);\n }\n\n /**\n * @deprecated\n */\n getSnapshot(): ModelSnapshotInterface {\n return (this.getProxy(ProxyName.ModelCollectionProxy)).collection.getSnapshot();\n }\n\n getConfigAsJson(spacing?: number): string {\n const m = this.getProxy(ProxyName.ModelCollectionProxy);\n const o = m.getModel(ModelName.PlayerOptions).data;\n const p = this.getProxy(ProxyName.Playlist);\n const s = this.facade.retrieveService(ServiceName.System);\n\n return Utils.serializeConfigSnapshot(o, p, s, spacing);\n }\n\n validateSeek(position: number, duration: number): number | null {\n if (isNaN(position)) {\n this.log(LogLevel.WARN, `Invalid seek() time [${position}] supplied`);\n\n return null;\n }\n\n const pm = this.getModel(ModelName.PresentationState);\n const pbp = this.getProxy(ProxyName.ContentPlaybackStateProxy);\n const linear = pbp && pbp.model.streamType === StreamType.LIVE;\n\n if (!pm || !pbp || pm.isCurrentVideoAd || linear) {\n this.log(LogLevel.WARN, 'seek() may not be called in the current context');\n\n return null;\n }\n\n return Util.clampValue(position, 0, duration);\n }\n\n isPlaybackSuspended(): boolean {\n const pm = this.getModel(ModelName.PresentationState);\n return pm.suspended;\n }\n\n /**\n * @deprecated\n */\n getAutoplayCapabilities(): Promise {\n return Deprecated.getAutoplayCapabilities(this);\n }\n\n getContainerRect(): ClientRect | null {\n const domProxy = this.getProxy(ProxyName.PlayerDomProxy);\n\n return domProxy ? domProxy.getPresentationRect() : null;\n }\n\n attachResource(resource: Partial, onStopComplete?: Function): Promise {\n if (!onStopComplete) {\n const pl = this.getProxy(ProxyName.Playlist);\n (pl as PlaylistProxy)?.softClear();\n }\n\n return this.stopPresentation()\n .then(() => {\n onStopComplete?.();\n return this.app.sendAsyncNotification({\n name: NotificationName.PREP_RESOURCE_COLLECTION,\n body: { resource: resource, start: true },\n }, [PlayerEvent.RESOURCE_START], [PlayerEvent.RESOURCE_ERROR]);\n })\n .then(() => this.getCurrentResource());\n }\n\n getCurrentResource(): ResourceConfigurationInterface | null {\n const p = this.getProxy(ProxyName.ResourceProxy);\n\n return (p as ResourceProxy)?.resource || null;\n }\n\n killCurrentResource(): Promise {\n const pm = this.facade.retrieveMediator(MediatorName.PRESENTATION_MEDIATOR);\n this.log(LogLevel.INFO, 'Killing current resource');\n\n return Promise.resolve()\n .then(() => pm?.close())\n .catch((e: Error) => {\n Logger.error(e);\n });\n }\n\n stopPresentation(): Promise {\n const pbp = this.getProxy(ProxyName.ContentPlaybackStateProxy);\n\n if (!pbp?.model) {\n return Promise.resolve();\n }\n\n const note = { name: NotificationName.STOP, type: NotificationType.EXTERNAL };\n return this.app.sendAsyncNotification(note, [PlayerEvent.RESOURCE_INTERRUPTED, PlayerEvent.RESOURCE_END]);\n }\n\n skipAd() {\n const pm = this.facade.retrieveMediator(MediatorName.PRESENTATION_MEDIATOR);\n (pm as AdPresentationMediator).skipAd();\n }\n\n getPlugin(name: string): any {\n const pim = this.facade.retrieveMediator(MediatorName.PLUGIN_MEDIATOR);\n\n return pim ? pim.getPlugin(name) : null;\n }\n\n dispatchPluginEvent(data: StrAnyDict) {\n this.app.sendEvent(PlayerEvent.PLUGIN_EVENT, data);\n }\n\n prepForPlayerRemoval(): void {\n const uim = this.facade.retrieveMediator(MediatorName.UI);\n if (!uim) { return; }\n uim.killUi();\n this.log(LogLevel.INFO, 'UI layer destroyed');\n }\n\n getMuteState(): boolean {\n const presoModel = this.getModel(ModelName.PresentationState);\n return presoModel ? presoModel.isMuted : null;\n }\n\n getVolume(): number {\n const presoModel = this.getModel(ModelName.PresentationState);\n return presoModel ? presoModel.volume : NaN;\n }\n\n getDimensions(): DimensionsInterface {\n const domProxy = this.getProxy(ProxyName.PlayerDomProxy);\n return domProxy ? domProxy.getDimensions() : null;\n }\n\n getAdBreakTimes(): AdCuePointInterface[] {\n const pm = this.facade.retrieveMediator(MediatorName.PRESENTATION_MEDIATOR);\n return pm ? pm.getAdBreakTimes() : null;\n }\n\n grabFrame(): HTMLImageElement | null {\n const domProxy = this.getProxy(ProxyName.PlayerDomProxy),\n vidEl = domProxy && domProxy.getVideo();\n\n if (!domProxy || !vidEl) { return null; }\n\n const cvs = document.createElement('canvas');\n let ctx, dUrl, img;\n\n ctx = cvs.getContext('2d');\n const w = cvs.width = vidEl.videoWidth;\n const h = cvs.height = vidEl.videoHeight;\n ctx.drawImage(vidEl, 0, 0, w, h);\n dUrl = cvs.toDataURL();\n\n img = document.createElement('img');\n img.setAttribute('src', dUrl);\n\n return img;\n }\n\n override listNotificationInterests(): string[] {\n return [\n NotificationName.APP_EVENT\n ];\n }\n\n sendErrorEvent(event: EventInterface): void {\n this.app.sendErrorEvent(event);\n }\n\n handleNotification(notification: NotificationInterface): void {\n const b = notification.body;\n const pe = event_map[b.notificationName] || b.type;\n\n switch (notification.name) {\n case NotificationName.APP_EVENT:\n pe && this.app.sendEvent(pe, b.data);\n break;\n }\n }\n\n override onRegister(): void {\n super.onRegister();\n }\n}\n","import { Emitter } from '../core/Emitter';\nimport { Logger } from '../core/Logger';\nimport { Util } from '../core/Util';\nimport { LogLevel } from '../enum/LogLevel';\nimport { MediatorName } from '../enum/MediatorName';\nimport { ProxyName } from '../enum/ProxyName';\nimport { ServiceName } from '../enum/ServiceName';\nimport { ApplicationInterface, ApplicationOptionsInterface, FacadeInterface, NotificationInterface, ServiceCollection } from '../iface';\nimport { EventInterface } from '../iface/EventInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { VideoPlayerInterface } from '../iface/VideoPlayerInterface';\nimport { ModelCollectionProxy } from '../model/ModelCollectionProxy';\nimport { Facade } from '../mvc/Facade';\nimport { LogService } from '../service/LogService';\nimport { AppMediator } from '../view/AppMediator';\n\n/**\n * @hideconstructor\n */\nexport abstract class AbstractApplication extends Emitter implements ApplicationInterface {\n\n private pFacade: FacadeInterface;\n private readonly pAppId: string;\n private mdlCollProxy: ModelCollectionProxy;\n\n\n protected constructor(options: ApplicationOptionsInterface) {\n super(options || {});\n\n this.pAppId = options.id || Util.uid8();\n this.pFacade = Facade.createFacade(\n this.pAppId,\n options.commandMap || null,\n );\n }\n\n /**\n * @ignore\n */\n override destroy() {\n this.mdlCollProxy = null;\n this.pFacade = null;\n\n super.destroy();\n\n Facade.removeCore(this.pAppId);\n }\n\n /**\n * @ignore\n */\n get appId(): string {\n return this.pAppId;\n }\n\n abstract sendEvent(name: string, data: StrAnyDict): void;\n abstract sendErrorEvent(event: EventInterface): void;\n abstract getApi(): VideoPlayerInterface;\n abstract sendAsyncNotification(notification: NotificationInterface, event: string[], errorEvent?: string[]): Promise;\n\n\n protected sendNotification(name: string, body?: StrAnyDict, type?: string) {\n this.pFacade.sendNotification(name, body, type);\n }\n\n protected createLoggingService(logLvl: LogLevel): void {\n const logger = new Logger({\n logLevel: logLvl,\n id: this.appId,\n onLogEvent: (e: EventInterface) => this.sendEvent(e.type, e.data)\n });\n this.pFacade.registerService(new LogService(ServiceName.Logging, logger));\n }\n\n protected registerGlobalServices(gServices: ServiceCollection): void {\n const f = this.pFacade;\n\n for (let s in gServices) {\n f.registerService(gServices[s]);\n }\n }\n\n protected get facade(): FacadeInterface {\n return this.pFacade;\n }\n\n protected get modelCollectionProxy(): ModelCollectionProxy {\n if (!this.mdlCollProxy) {\n this.mdlCollProxy = this.facade.retrieveProxy(ProxyName.ModelCollectionProxy);\n }\n return this.mdlCollProxy;\n }\n\n protected get appMediator(): AppMediator {\n return this.pFacade.retrieveMediator(MediatorName.APPLICATION);\n }\n\n // The concrete Application instance is passed to an AppMediator, which will\n // interrogate the app instance (i.e, 'this') for its Notification interests, and will make\n // those interests its own. Upon receiving a relevant Notification, it will\n // invoke handleNotification() on the app instance, for subsequent event dispatch.\n protected createApplicationMediator(name: string): void {\n const am = new AppMediator(name, this);\n this.pFacade.registerMediator(am);\n }\n}\n","import { Util } from '../core/Util';\nimport { StrAnyDict } from '../iface/StrAnyDict';\n// API decorator factories\n\nexport function apiMethod() {\n return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n if (!Util.isObject(target.apiMethods)) {\n target.apiMethods = {};\n }\n\n target.apiMethods[propertyKey] = descriptor.value;\n }\n}\n\nexport function apiAccessor(readonly: boolean = false) {\n return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\n if (!Util.isObject(target.apiAccessors)) {\n target.apiAccessors = {};\n }\n\n let obj: PropertyDescriptor = {\n get: descriptor.get,\n set: readonly ? undefined : descriptor.set || undefined\n };\n\n target.apiAccessors[propertyKey] = obj;\n }\n}\n\nexport function apiCollection(obj: StrAnyDict, target: any): StrAnyDict {\n for (let i in target.apiMethods) {\n obj[i] = function () {\n const args = Array.prototype.slice.call(arguments);\n\n return (\n !!target &&\n !!target.apiMethods &&\n !!target.apiMethods[i] &&\n target.apiMethods[i].apply(target, args)\n ) || null;\n }\n }\n\n for (let p in target.apiAccessors) {\n let desc = target.apiAccessors[p];\n\n let pd: PropertyDescriptor = {};\n\n if (desc.get) {\n pd.get = () => {\n return target[p];\n }\n }\n if (desc.set) {\n pd.set = (val: any) => {\n target[p] = val;\n }\n }\n\n Object.defineProperty(obj, p, pd);\n }\n\n return obj;\n}\n\nexport { apiMethod as delegateMethod };\nexport { apiAccessor as delegateAccessor };\nexport { apiCollection as delegateApi };\n\n","/* Copyright(c) 2006-2018 Futurescale, Inc. */\n/* TypeScript port by Video Technology Group, CBSi Inc. */\n\nimport { ModelName } from '../enum/ModelName';\nimport { ProxyName } from '../enum/ProxyName';\nimport { CommandInterface } from \"../iface\";\nimport { ModelCollectionProxy } from '../model/ModelCollectionProxy';\nimport { Notification } from './Notification';\nimport { Notifier } from './Notifier';\nimport { ServiceName } from '../enum/ServiceName';\n\n\nexport abstract class AbstractSimpleCommand extends Notifier implements CommandInterface {\n\n protected constructor() {\n super();\n }\n\n abstract execute(notification: Notification): void;\n\n protected getModel(name: ModelName): T {\n return (this.getModelCollection().getModel(name));\n }\n\n protected getProxy(name: ProxyName): T {\n return this.facade ? (this.facade.retrieveProxy(name)) : null;\n }\n\n protected getService(name: ServiceName): T | null {\n return this.facade ? (this.facade.retrieveService(name)) : null;\n }\n\n protected getModelCollection(): ModelCollectionProxy {\n return this.facade ? this.facade.retrieveProxy(ProxyName.ModelCollectionProxy) : null;\n }\n}\n\n\n","import { NotificationInterface } from '../iface';\nimport { LoggerInterface } from '../iface/LoggerInterface';\nimport { AbstractSimpleCommand } from '../mvc/AbstractSimpleCommand';\n\n\nexport abstract class LogAwareSimpleCommand extends AbstractSimpleCommand {\n\n protected constructor() {\n super();\n }\n\n abstract override execute(notification: NotificationInterface): void;\n\n get logger(): LoggerInterface {\n return this.facade.logger;\n }\n\n log(...args: any[]): void {\n this.logger.log.apply(this.logger, args);\n }\n}\n","import { AppResources } from '../app/AppResources';\nimport { Util } from '../core/Util';\nimport { LogLevel } from '../enum/LogLevel';\nimport { MediatorName } from '../enum/MediatorName';\nimport { NotificationName } from '../enum/NotificationName';\nimport { ProxyName } from '../enum/ProxyName';\nimport { QualityMode } from '../enum/QualityMode';\nimport { NotificationInterface, PresentationMediatorInterface } from '../iface';\nimport { PlaybackAdapterCoreInterface } from '../iface/PlaybackAdapterCoreInterface';\nimport { ContentPlaybackStateProxy } from '../model/ContentPlaybackStateProxy';\nimport { Utils } from '../util/Utils';\nimport { LogAwareSimpleCommand } from './LogAwareSimpleCommand';\n\nexport class AbrSwitchCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface) {\n\n const presoMediator = this.facade.retrieveMediator(MediatorName.PRESENTATION_MEDIATOR);\n const stateProxy = this.facade.retrieveProxy(ProxyName.ContentPlaybackStateProxy);\n const adapter: PlaybackAdapterCoreInterface = presoMediator.adapter;\n const value: any = notification.body.value;\n\n //Support SBR streams VTG-2024\n if (!stateProxy.isAbrSwitchingAvailable) {\n stateProxy.qualitySwitchingMode = QualityMode.UNAVAILABLE;\n return;\n }\n\n // All ABR addressed directly via preso mediator's adapter\n switch (notification.name) {\n\n case NotificationName.SWITCH_BITRATE:\n const idx = Util.getIndexForBitrate(stateProxy.qualityInfo.qualities, value, false);\n this.switchToIndex(idx, stateProxy, adapter);\n break;\n\n case NotificationName.SWITCH_QUALITY_CATEGORY:\n stateProxy.userQualityCategory = value;\n this.switchQualityCategory(stateProxy, value, adapter);\n break;\n\n case NotificationName.AUTO_QUALITY_SWITCHING:\n adapter.autoQualitySwitching = value;\n stateProxy.qualitySwitchingMode = this.getAbrMode(value);\n break;\n\n case NotificationName.MIN_BITRATE:\n adapter.minBitrate = value;\n break;\n\n case NotificationName.MAX_BITRATE:\n adapter.maxBitrate = value;\n break;\n }\n }\n\n private switchToIndex(index: number, stateProxy: ContentPlaybackStateProxy, adapter: PlaybackAdapterCoreInterface) {\n // Do we lift capping, NO! Need to setup time to discuss with manual switching users like cbs Ent.\n\n const minIndex = stateProxy.minIndex;\n const maxIndex = stateProxy.maxIndex;\n if (Util.inRange(index, minIndex, maxIndex)) {\n adapter.autoQualitySwitching = false;\n stateProxy.qualitySwitchingMode = this.getAbrMode(false);\n adapter.currentIndex = index;\n }\n else {\n this.logger.log(LogLevel.WARN, index >= maxIndex ?\n AppResources.messages.ABR_MANUAL_SWITCHING_REACHED_UPPER_BOUNDS :\n AppResources.messages.ABR_MANUAL_SWITCHING_REACHED_LOWER_BOUNDS);\n }\n }\n\n private switchQualityCategory(stateProxy: ContentPlaybackStateProxy, category: string, adapter: PlaybackAdapterCoreInterface) {\n const qia = stateProxy.qualityInfo.qualities;\n const { minBitrate, maxBitrate, minIndex, maxIndex } = Utils.getMinAndMaxValuesForCategory(qia, category);\n\n if (minIndex === maxIndex) {\n this.switchToIndex(minIndex, stateProxy, adapter);\n }\n else {\n adapter.minBitrate = minBitrate;\n adapter.maxBitrate = maxBitrate;\n }\n }\n\n private getAbrMode(enabled: boolean): QualityMode {\n return enabled ? QualityMode.AUTO : QualityMode.MANUAL;\n }\n}\n","/* Copyright(c) 2006-2018 Futurescale, Inc. */\n/* TypeScript port by Video Technology Group, CBSi Inc. */\n\nimport { CommandInterface, NotificationInterface } from \"../iface\";\nimport { Notifier } from \"./Notifier\";\n\nexport abstract class AbstractMacroCommand extends Notifier implements CommandInterface {\n\n private subCommands: any[] = null;\n\n protected constructor() {\n super();\n this.subCommands = [];\n this.initializeMacroCommand();\n }\n\n /**\n * Subclasses override this method to initialize the sub-commands list;\n * sub-commands may be AbstractMacroCommands or AbstractSimpleCommands\n * @example\n * initializeMacroCommand: function () {\n * this.addSubCommand(SomeCommand);\n * this.addSubCommand(OtherCommand);\n * this.addSubCommand(YetAnotherCommand);\n * };\n */\n abstract initializeMacroCommand(): void\n\n addSubCommand(commandClassRef: any): void {\n this.subCommands.push(commandClassRef);\n }\n\n execute(notification: NotificationInterface): void {\n let cmdClass, cmd;\n\n while (this.subCommands.length > 0) {\n cmdClass = this.subCommands.shift();\n cmd = new (cmdClass)();\n cmd.initializeNotifier(this.multiCoreKey);\n cmd.execute(notification);\n }\n }\n}\n\n\n\n\n\n\n","import { ActiveState } from \"../enum/ActiveState\";\nimport { NotificationName } from \"../enum/NotificationName\";\nimport { PlayerEvent } from \"../enum/PlayerEvent\";\nimport { Proxy } from '../mvc/Proxy';\n\ntype ActivityData = { container: HTMLElement, document: Document, idleDelay: number; };\n\nexport class ActivityProxy extends Proxy {\n private document: Document;\n private container: HTMLElement;\n private timeout: number;\n private mouseDown: boolean = false;\n private mouseOver: boolean = false;\n private idleDelay: number = 3000;\n private idleEvents = [\n \"mousemove\",\n \"mousedown\",\n \"keypress\",\n \"DOMMouseScroll\",\n \"mousewheel\",\n \"touchmove\",\n \"touchstart\",\n \"MSPointerMove\",\n \"MSPointerDown\",\n \"pointermove\",\n \"pointerdown\"\n ];\n\n constructor(name: string, data?: ActivityData) {\n super(name, { activeState: ActiveState.INACTIVE });\n\n this.container = data.container;\n this.document = data.document;\n this.idleDelay = data.idleDelay;\n }\n\n override onRegister() {\n this.onMouseDown = this.onMouseDown.bind(this);\n this.onMouseUp = this.onMouseUp.bind(this);\n this.onMouseEnter = this.onMouseEnter.bind(this);\n this.onMouseLeave = this.onMouseLeave.bind(this);\n this.onKeyDown = this.onKeyDown.bind(this);\n this.reset = this.reset.bind(this);\n this.idle = this.idle.bind(this);\n\n this.container.addEventListener('mouseenter', this.onMouseEnter);\n this.container.addEventListener('mouseleave', this.onMouseLeave);\n this.container.addEventListener('mousedown', this.onMouseDown);\n this.document.addEventListener('mouseup', this.onMouseUp);\n this.document.addEventListener('keydown', this.onKeyDown);\n }\n\n override onRemove() {\n this.container.removeEventListener('mouseenter', this.onMouseEnter);\n this.container.removeEventListener('mouseleave', this.onMouseLeave);\n this.container.removeEventListener('mousedown', this.onMouseDown);\n this.document.removeEventListener('mouseup', this.onMouseUp);\n this.document.removeEventListener('keydown', this.onKeyDown);\n\n this.stop();\n\n this.container = null;\n this.document = null;\n\n super.onRemove();\n }\n\n private applyListeners(add = true) {\n const action = (add) ? 'add' : 'remove';\n // @ts-ignore\n this.idleEvents.forEach(event => this.container[`${action}EventListener`](event, this.reset, { passive: true }));\n }\n\n private start() {\n this.stop();\n this.applyListeners();\n this.timeout = setTimeout(this.idle, this.idleDelay);\n }\n\n private stop() {\n clearTimeout(this.timeout);\n this.applyListeners(false);\n }\n\n private idle() {\n this.activeState = (this.mouseOver) ? ActiveState.IDLE : ActiveState.INACTIVE;\n }\n\n private reset() {\n this.activeState = ActiveState.ACTIVE;\n this.start();\n }\n\n private onMouseEnter() {\n this.reset();\n this.mouseOver = true;\n this.activeState = ActiveState.ACTIVE;\n this.start();\n }\n\n private onMouseLeave() {\n this.reset();\n this.mouseOver = false;\n this.activeState = ActiveState.INACTIVE;\n }\n\n private onMouseDown() {\n this.mouseDown = true;\n }\n\n private onMouseUp() {\n if (!this.mouseDown) {\n return;\n }\n\n this.mouseDown = false;\n this.start();\n }\n\n private onKeyDown(event: KeyboardEvent) {\n const { key, keyCode } = event;\n\n if (key != 'Tab' && keyCode != 9) {\n return;\n }\n\n setTimeout(() => {\n const element = this.document.activeElement;\n const active = (this.container == element || this.container.contains(element as HTMLElement));\n if (active) {\n this.stop();\n }\n this.activeState = (active) ? ActiveState.ACTIVE : ActiveState.INACTIVE;\n }, 0);\n }\n\n set activeState(value: ActiveState) {\n if (this.mouseDown) {\n value = ActiveState.ACTIVE;\n }\n\n if (value == this.data.activeState) {\n return;\n }\n\n this.data.activeState = value;\n this.sendNotification(NotificationName.APP_EVENT, { type: PlayerEvent.ACTIVE_CHANGE, data: { value } });\n }\n\n get activeState(): ActiveState {\n return this.data.activeState;\n }\n}\n","import { PlayerOptionsInterface } from '../..';\nimport { Util } from '../../core/Util';\nimport { PlayerDom } from '../../enum/PlayerDom';\nimport { PlayerDomInterface } from '../../iface/PlayerDomInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\n\n\nexport class PlayerDomCreator {\n\n static createVideoElement() {\n const video = document.createElement(\"video\");\n video.style.height = '100%';\n video.style.width = '100%';\n video.style.backgroundColor = '#000';\n video.dataset.elementId = Util.uid8();\n return video;\n }\n\n private document: HTMLDocument;\n private main: HTMLElement;\n\n constructor(container: HTMLElement, document: HTMLDocument) {\n this.document = document;\n this.main = container;\n }\n\n destroy(): void {\n this.main = null;\n this.document = null;\n }\n\n create(skipEls: PlayerDom[], playerOptions: PlayerOptionsInterface): PlayerDomInterface {\n const coll: StrAnyDict = {\n [PlayerDom.MAIN_CONTAINER]: this.main\n };\n const main = this.main;\n const s: StrAnyDict = {\n position: 'absolute',\n width: '100%',\n height: '100%',\n padding: 0,\n margin: 0,\n overflow: 'hidden'\n };\n const roles: PlayerDom[] = [\n PlayerDom.AD_CONTAINER,\n PlayerDom.PANEL_CONTAINER,\n PlayerDom.CC_CONTAINER,\n PlayerDom.VIDEO_CONTAINER,\n ];\n\n const style = main.style;\n style.position = style.position || 'relative';\n style.padding = style.padding || '0';\n style.margin = style.margin || '0';\n style.width = style.width || '100%';\n style.height = style.height || '100%';\n style.backgroundColor = style.backgroundColor || '#000';\n style.overflow = style.overflow || 'hidden';\n main.classList.add('cvp-container');\n main.classList.add('avia-container');\n\n // containers\n let refNode = main.hasChildNodes() ? main.firstChild : null;\n\n roles.forEach((role) => {\n if (Util.includes(skipEls, role)) {\n return;\n }\n\n const el = this.div(role, s);\n coll[role] = el;\n\n if (refNode) {\n main.insertBefore(el, refNode);\n }\n else {\n main.appendChild(el);\n }\n refNode = el;\n });\n\n // video element\n if (playerOptions.overrides?.reuseVideoElement !== false) {\n const v = PlayerDomCreator.createVideoElement();\n\n coll[PlayerDom.VIDEO_CONTAINER].appendChild(v);\n coll[PlayerDom.VIDEO_EL] = v;\n }\n\n // ad click element\n coll[PlayerDom.AD_CLICK_EL] = this.createAdClickEl();\n main.appendChild(coll[PlayerDom.AD_CLICK_EL]);\n\n return {\n [PlayerDom.MAIN_CONTAINER]: coll[PlayerDom.MAIN_CONTAINER],\n [PlayerDom.VIDEO_EL]: coll[PlayerDom.VIDEO_EL],\n [PlayerDom.VIDEO_CONTAINER]: coll[PlayerDom.VIDEO_CONTAINER],\n [PlayerDom.CC_CONTAINER]: coll[PlayerDom.CC_CONTAINER],\n [PlayerDom.AD_CONTAINER]: coll[PlayerDom.AD_CONTAINER],\n [PlayerDom.AD_CLICK_EL]: coll[PlayerDom.AD_CLICK_EL],\n [PlayerDom.PANEL_CONTAINER]: coll[PlayerDom.PANEL_CONTAINER]\n };\n }\n\n private createAdClickEl(): HTMLElement {\n const style = {\n display: 'none',\n padding: '4px 8px',\n fontSize: '12px',\n background: '#dedede',\n lineHeight: '14px',\n color: '#000',\n position: 'absolute',\n right: '2px',\n top: '2px',\n textAlign: 'center'\n };\n const el = this.div('adClickEl', style);\n\n el.innerHTML = 'Learn More';\n\n return el;\n }\n\n private div(role: string, style: StrAnyDict): HTMLElement {\n const el = this.document.createElement('div');\n\n el.setAttribute('data-role', role);\n Util.assign(el.style, style);\n\n return el;\n }\n}\n","import { LogLevel } from '../../enum/LogLevel';\nimport { ModelName } from '../../enum/ModelName';\nimport { PlayerDom } from '../../enum/PlayerDom';\nimport { ProxyName } from '../../enum/ProxyName';\nimport { ServiceName } from '../../enum/ServiceName';\nimport { NotificationInterface, PlayerDomProxyInterface, SystemServiceInterface } from '../../iface';\nimport { DomReference } from '../../iface/DomReference';\nimport { PlayerDomInterface } from '../../iface/PlayerDomInterface';\nimport { PlayerOptionsInterface } from '../../iface/PlayerOptionsInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { ActivityProxy } from '../../model/ActivityProxy';\nimport { PlayerDomCreator } from '../command-helpers/PlayerDomCreator';\nimport { LogAwareSimpleCommand } from '../LogAwareSimpleCommand';\n\n\nexport class CreateDomCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface): void {\n const cfg: StrAnyDict = notification.body.playerOptions;\n const container: DomReference = cfg.container;\n const sysSvc = this.facade.retrieveService(ServiceName.System);\n const playerOpts = this.getModel(ModelName.PlayerOptions);\n\n if (sysSvc.isWebMaf || !sysSvc.global || !sysSvc.document || !container) {\n return;\n }\n\n let c = (\n typeof container === 'string' ? sysSvc.document.querySelector(container) : container\n );\n\n let skipEls: PlayerDom[] = [];\n if (playerOpts.useNativeControls) {\n // Skip creation of these containers (not needed in a native control display)\n skipEls = [PlayerDom.CC_CONTAINER, PlayerDom.PANEL_CONTAINER];\n }\n\n const dc = new PlayerDomCreator(c, sysSvc.document);\n const domColl: PlayerDomInterface = dc.create(skipEls, playerOpts);\n const domProxy = this.facade.retrieveProxy(ProxyName.PlayerDomProxy);\n\n domProxy.setModel(domColl);\n dc.destroy();\n\n domProxy.showAdContainer(false);\n\n if (playerOpts.useNativeControls) {\n domProxy.setVideoAttribute('controls', '');\n }\n\n playerOpts.playsInline !== false && domProxy.setVideoAttribute('playsinline', '');\n\n domProxy.setVideoAttribute('data-player-id', this.facade.appId);\n\n this.facade.registerProxy(new ActivityProxy(ProxyName.ActivityProxy, { container: c, document: sysSvc.document, idleDelay: playerOpts.idleDelay }));\n\n this.log(LogLevel.INFO, 'Player DOM created.');\n }\n}\n","import { Util } from '../core/Util';\nimport { AdapterRole } from '../enum/AdapterRole';\nimport { MediatorName } from '../enum/MediatorName';\nimport { ModelName } from '../enum/ModelName';\nimport { ProxyName } from '../enum/ProxyName';\nimport { AdapterConfigInterface } from '../iface/AdapterConfigInterface';\nimport { AdapterContextInterface } from '../iface/AdapterContextInterface';\nimport { AdapterDelegateFactory } from '../iface/AdapterDelegateFactory';\nimport { PresentationStateInterface } from '../iface/PresentationStateInterface';\nimport { ResourceConfigurationInterface } from '../iface/ResourceConfigurationInterface';\nimport { Proxy } from '../mvc/Proxy';\nimport { PluginMediator } from '../view/PluginMediator';\nimport { ModelCollectionProxy } from './ModelCollectionProxy';\nimport { PerformanceProxy } from './PerformanceProxy';\nimport { TextTrackProxy } from './TextTrackProxy';\n\n\nexport class AdapterProxy extends Proxy {\n\n private adapterMap: Record> = {};\n\n constructor(data?: any) {\n super(ProxyName.AdapterProxy, data);\n }\n\n override onRemove() {\n this.adapterMap = null;\n super.onRemove();\n }\n\n registerAdapter(adapterConfig: AdapterConfigInterface): void {\n const { id } = adapterConfig;\n this.adapterMap[id] = adapterConfig;\n }\n\n retrieveAdapter(id: string): AdapterConfigInterface {\n return this.adapterMap[id];\n }\n\n removeAdapter(id: string): void {\n delete this.adapterMap[id];\n }\n\n getAdaptersByRole(role: string): AdapterConfigInterface[] {\n return Util.values>(this.adapterMap).filter(config => Util.includes(config.role, role));\n }\n\n private createContext(resource: ResourceConfigurationInterface, getDelegate: AdapterDelegateFactory): AdapterContextInterface {\n const services = (this.facade.retrieveMediator(MediatorName.PLUGIN_MEDIATOR) as PluginMediator).createPluginServices();\n const { dom, system } = services;\n const modelCollection = this.facade.retrieveProxy(ProxyName.ModelCollectionProxy) as ModelCollectionProxy;\n const presentationState = modelCollection.getModel(ModelName.PresentationState) as PresentationStateInterface;\n const textTrackProxy = this.facade.retrieveProxy(ProxyName.TextTrackProxy) as TextTrackProxy;\n const performanceProxy = this.facade.retrieveProxy(ProxyName.PerformanceProxy) as PerformanceProxy;\n\n return Object.assign(services, {\n resource,\n video: (system.isWebMaf) ? system.webMafPlayer : dom.video,\n container: dom.main,\n autoplay: presentationState.isAutoplay,\n muted: presentationState.isMuteAtPlayStart,\n performanceSettings: performanceProxy,\n textTrackSettings: textTrackProxy,\n getDelegate,\n });\n }\n\n async createAdapter(role: AdapterRole, resource: ResourceConfigurationInterface, delegateFactory: AdapterDelegateFactory): Promise {\n const context = this.createContext(resource, delegateFactory);\n const adapters = this.getAdaptersByRole(role);\n const { id, options = {} } = context.resource[role]?.adapter || {};\n const list = (id) ? adapters.filter(adapter => adapter.id === id) : adapters;\n\n for (const config of list) {\n const adapter = await config.factory(context, Util.merge({}, config.options, options));\n if (adapter) {\n return adapter;\n }\n }\n\n throw new Error(`Could not find adapter for role: ${role}`);\n }\n}\n","import { apiAccessor, apiCollection, apiMethod } from '../app/ApiDecorators';\nimport { request } from '../core/Request';\nimport { Util } from '../core/Util';\nimport { LocalizationId } from '../enum/LocalizationId';\nimport { LogLevel } from '../enum/LogLevel';\nimport { ProxyName } from '../enum/ProxyName';\nimport { Entry } from '../iface/Entry';\nimport { LanguageTagInterface } from '../iface/LanguageTagInterface';\nimport { LocaleData } from '../iface/LocaleData';\nimport { LocalizationData } from '../iface/LocalizationData';\nimport { LocalizationInterface } from '../iface/LocalizationInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { StrStrDict } from '../iface/StrStrDict';\nimport { Proxy } from '../mvc/Proxy';\n\n\nexport class LocalizationProxy extends Proxy implements LocalizationInterface {\n\n\tprivate static pExternalData: Record> = {};\n\n\tstatic load(url: string): Promise {\n\t\tif (this.pExternalData[url] == null) {\n\t\t\tthis.pExternalData[url] = request({ url });\n\t\t}\n\t\treturn this.pExternalData[url];\n\t}\n\n\tstatic LocalizationData: LocalizationData = {\n\t\ten: {\n\t\t\t[LocalizationId.MEDIA_PLAYER]: 'Media Player'\n\t\t},\n\t\tes: {\n\t\t\t[LocalizationId.MEDIA_PLAYER]: 'Reproductor multimedia'\n\t\t}\n\t};\n\n\tprivate pLanguage: string;\n\tprivate pLanguageTag: LanguageTagInterface;\n\tprivate pLocalizationData: LocalizationData[] = [];\n\tprivate pLocale: Record = {};\n\n\tconstructor(name: ProxyName, language: string) {\n\t\tsuper(name, {});\n\t\tthis.pLanguage = language;\n\t\tthis.registerLocalizationData(LocalizationProxy.LocalizationData);\n\t}\n\n\toverride onRemove() {\n\t\tthis.pLocale = null;\n\t\tthis.pLocalizationData = null;\n\t\tthis.pLanguageTag = null;\n\t\tthis.pLanguage = null;\n\t}\n\n\tgetApi(): LocalizationInterface {\n\t\treturn apiCollection({}, this) as LocalizationInterface;\n\t}\n\n\t@apiAccessor(true)\n\tget defaultLanguage(): string {\n\t\treturn (navigator && navigator.language) ? navigator.language : 'en';\n\t}\n\n\t@apiAccessor(true)\n\tget language(): string {\n\t\treturn this.pLanguage || this.defaultLanguage;\n\t}\n\n\t@apiMethod()\n\tget languageTag(): LanguageTagInterface {\n\t\treturn this.pLanguageTag;\n\t}\n\n\t@apiMethod()\n\tchangeLanguage(language: string = this.defaultLanguage): Promise {\n\t\tthis.pLanguage = language;\n\t\tthis.pLanguageTag = Util.parseLanguageTag(this.language);\n\t\tconst tag = new RegExp(`^${this.pLanguageTag.language}`, 'i');\n\t\tconst load = ([k, v]: Entry): Promise => {\n\t\t\t//@ts-ignore\n\t\t\treturn LocalizationProxy\n\t\t\t\t.load(v)\n\t\t\t\t.then(data => [k, data])\n\t\t\t\t.catch(error => {\n\t\t\t\t\t// Errors loading localization files should not halt playback\n\t\t\t\t\tthis.facade.log(LogLevel.ERROR, `Could not load locale file ${v}`, error);\n\t\t\t\t\treturn [k, {}];\n\t\t\t\t});\n\t\t};\n\n\t\t// create an array of entry arrays\n\t\tconst data = this.pLocalizationData.map(data => {\n\t\t\tconst locale = Util.entries(data)\n\t\t\t\t// only operate on data for the current language\n\t\t\t\t.filter((e: Entry) => tag.test(e[0]))\n\n\t\t\t\t// start loading external data, or return the entry array\n\t\t\t\t.map((e: Entry) => (typeof e[1] == 'string') ? load(e) : e);\n\n\t\t\treturn Promise.all(locale);\n\t\t});\n\n\t\t// wait for all external data to finish loading\n\t\treturn Promise.all(data)\n\t\t\t.then(entries => {\n\t\t\t\t// convert entry arrays back into objects\n\t\t\t\tconst objs = entries.map(entry => Util.fromEntries(entry));\n\n\t\t\t\t// Merge into a single object\n\t\t\t\tconst data = Util.merge(...objs);\n\n\t\t\t\t// Cache the data and return the final object\n\t\t\t\treturn this.pLocale = data;\n\t\t\t});\n\t}\n\n\t@apiMethod()\n\tregisterLocalizationData(data: LocalizationData): void {\n\t\tif (Util.isEmpty(data)) {\n\t\t\treturn;\n\t\t}\n\t\tthis.pLocalizationData.push(data);\n\t}\n\n\t@apiMethod()\n\tlocalize(messageId: string, context?: any): string {\n\t\tconst message = this.lookup(messageId);\n\t\treturn Util.template(message, context);\n\t}\n\n\tprivate lookup(messageId: string, language: string = this.language): string {\n\t\tconst find = (lang: string): string => {\n\t\t\tconst locale = (this.pLocale[lang] || {}) as StrStrDict;\n\t\t\treturn locale[messageId];\n\t\t};\n\t\treturn find(language) || find(this.pLanguageTag.language) || messageId;\n\t}\n}\n","import { ModelSnapshotInterface } from '../deprecated/ModelSnapshotInterface';\nimport { ModelName } from '../enum/ModelName';\nimport { ProxyName } from '../enum/ProxyName';\nimport { PlayerDomProxyInterface } from '../iface';\nimport { ModelInterface } from '../iface/ModelInterface';\nimport { PresentationStateInterface } from '../iface/PresentationStateInterface';\nimport { Proxy } from '../mvc/Proxy';\nimport { ModelCollection } from './vo/ModelCollection';\n\n\nexport class ModelCollectionProxy extends Proxy {\n\n /*\n All models:\n\n AdBreakInfo | Reset between resources\n AdItem | \n ContentPlaybackState |\n - - - - - - - - - - - - - - - - - - - - - - - - \n PresentationState | Partial reset\n ------------------------------------------------\n BuildInfo | NO reset\n PlayerDom |\n PlayerOptions | \n */\n\n private resettables: string[] = [\n ModelName.AdBreakInfo,\n ModelName.AdItem,\n ModelName.ContentPlaybackState\n ];\n\n constructor(name: string, data?: ModelCollection) {\n super(name, data);\n }\n\n override onRemove(): void {\n this.resettables = null;\n const pdp = this.facade.retrieveProxy(ProxyName.PlayerDomProxy);\n if (pdp) {\n pdp.removeDom();\n }\n super.onRemove();\n }\n\n get collection(): ModelCollection {\n return (this.data);\n }\n\n /**\n * @deprecated\n */\n getSnapshot(): ModelSnapshotInterface {\n return this.collection.getSnapshot();\n }\n\n getModel(name: string): T {\n return (((this.data)).getModel(name));\n }\n\n reset(): void {\n const list = this.resettables;\n let i = list.length;\n\n while (i--) {\n (this.getModel(list[i])).reset();\n }\n\n // partial reset for presentation state\n const psi = this.getModel(ModelName.PresentationState);\n psi.skipAutoplayCheck = !psi.isAutoplay || psi.autoplaySupport !== null;\n psi.isAutoplay = true; // coerce true for a reset (only should occur after a resource has played!)\n psi.isCurrentVideoAd = false;\n psi.started = false;\n psi.streamDuration = NaN;\n psi.streamTime = NaN;\n }\n}\n","import { NotificationName } from '../enum/NotificationName';\nimport { NotificationType } from '../enum/NotificationType';\nimport { NotificationInterface } from '../iface';\nimport { EventInterface } from '../iface/EventInterface';\nimport { Timer } from '../util/Timer';\nimport { LogAwareMediator } from './LogAwareMediator';\n\n\nexport class TimerMediator extends LogAwareMediator {\n\n static INTERVAL = 100;\n\n private timer: Timer;\n\n constructor(name: string) {\n super(name);\n this.timer = new Timer(TimerMediator.INTERVAL);\n this.timer.on(Timer.TIC_EVENT, (e: EventInterface) => this.onTic(e));\n }\n\n killTimer(): void {\n this.timer?.stop();\n }\n\n override listNotificationInterests(): string[] {\n return [\n NotificationName.RESOURCE_START\n ];\n }\n\n handleNotification(notification: NotificationInterface) {\n\n switch (notification.name) {\n case NotificationName.RESOURCE_START:\n this.timer?.start();\n break;\n }\n }\n\n override onRegister(): void {\n super.onRegister();\n }\n\n override onRemove() {\n this.timer.destroy();\n this.timer = null;\n super.onRemove();\n }\n\n onTic(e: EventInterface) {\n this.facade.sendNotification(NotificationName.TIMER_TIC, { count: e.data.count }, NotificationType.INTERNAL);\n }\n}\n","import { ModelName } from '../enum/ModelName';\nimport { PerformanceMode } from '../enum/PerformanceMode';\nimport { ProxyName } from '../enum/ProxyName';\nimport { ServiceName } from '../enum/ServiceName';\nimport { PerformanceSettingsInterface, SystemServiceInterface } from '../iface';\nimport { OverridesInterface } from '../iface/OverridesInterface';\nimport { PlayerOptionsInterface } from '../iface/PlayerOptionsInterface';\nimport { Proxy } from '../mvc/Proxy';\nimport { TimerMediator } from '../view/TimerMediator';\nimport { ModelCollectionProxy } from './ModelCollectionProxy';\n\n\nexport class PerformanceProxy extends Proxy implements PerformanceSettingsInterface {\n\n private pMode: PerformanceMode;\n private pOverrides: OverridesInterface;\n\n constructor(name: string, data?: any) {\n super(name, data);\n }\n\n override onRegister() {\n const mcp = this.facade.retrieveProxy(ProxyName.ModelCollectionProxy);\n const options = mcp.getModel(ModelName.PlayerOptions);\n\n this.pOverrides = options.overrides;\n this.pMode = (options.performanceMode == PerformanceMode.AUTO) ? this.calculatePerformanceMode() : options.performanceMode;\n }\n\n private calculatePerformanceMode(): PerformanceMode {\n const sys = this.facade.retrieveService(ServiceName.System);\n switch (true) {\n case sys.isTv:\n case sys.isEmbedded:\n return PerformanceMode.TV;\n\n case sys.isMobile:\n return PerformanceMode.MOBILE;\n\n default:\n return PerformanceMode.DESKTOP;\n }\n }\n\n get mode(): PerformanceMode {\n return this.pMode;\n }\n\n get forwardBufferLength(): number {\n switch (this.pMode) {\n case PerformanceMode.MOBILE:\n case PerformanceMode.TV:\n return 20;\n\n default:\n return undefined;\n }\n }\n\n get backBufferLength(): number {\n switch (this.pMode) {\n case PerformanceMode.MOBILE:\n case PerformanceMode.TV:\n return 30;\n\n default:\n return 60;\n }\n }\n\n get topQualityForwardBufferLength(): number {\n switch (this.pMode) {\n case PerformanceMode.MOBILE:\n case PerformanceMode.TV:\n return 60;\n\n default:\n return undefined;\n }\n }\n\n get bufferingSampleRate(): number {\n const override = this.pOverrides?.bufferingSampleRate;\n\n if (override) {\n return override;\n }\n\n switch (this.pMode) {\n case PerformanceMode.TV:\n return 300;\n\n default:\n return TimerMediator.INTERVAL;\n }\n }\n}\n","import { AppResources } from '../app/AppResources';\nimport { PlayerDomCreator } from '../controller/command-helpers/PlayerDomCreator';\nimport { Util } from '../core/Util';\nimport { NotificationName } from '../enum/NotificationName';\nimport { PlayerDom } from '../enum/PlayerDom';\nimport { PlayerEvent } from '../enum/PlayerEvent';\nimport { PlayerDomProxyInterface } from '../iface';\nimport { DimensionsInterface } from '../iface/DimensionsInterface';\nimport { PlayerDomInterface } from '../iface/PlayerDomInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { Proxy } from '../mvc/Proxy';\n\n\nexport class PlayerDomProxy extends Proxy implements PlayerDomProxyInterface {\n\n private controlVisCssClass: string = 'cvui-ctrlbar-vis';\n\n constructor(name: string, data?: any) {\n super(name, data);\n }\n\n setModel(coll: StrAnyDict): void {\n for (const q in coll) {\n this.model[q] = coll[q];\n }\n }\n\n removeDom(): void {\n const main = this.getMain(),\n children = main.childNodes;\n let i = children.length;\n\n while (i--) {\n main.removeChild(children[i]);\n }\n }\n\n removePanelContainer() {\n const p = this.getElement(PlayerDom.PANEL_CONTAINER);\n const m = this.getMain();\n\n if (m && p) {\n m.removeChild(p);\n }\n }\n\n setControlVisibility(controlsVisible: boolean): void {\n const el = this.getMain();\n if (!el) { return; }\n\n const m = controlsVisible ? 'add' : 'remove';\n\n el.classList[m](this.controlVisCssClass);\n }\n\n getElement(n: PlayerDom): HTMLElement {\n const el = this.model[n];\n return el || null;\n }\n\n getSafeZIndex(): number {\n const el = this.getElement(PlayerDom.AD_CONTAINER);\n if (!el) return 10;\n\n return Number(el.style.zIndex) + 10;\n }\n\n getVideo(): HTMLVideoElement {\n return this.getElement(PlayerDom.VIDEO_EL) as HTMLVideoElement;\n }\n\n getTextTrackContainer(): HTMLElement {\n return (this.getElement(PlayerDom.CC_CONTAINER)) || null;\n }\n\n setVideoVolume(v: number) {\n const el = this.getVideo();\n if (!el || this.getVideoVolume() == v) {\n return;\n }\n\n el.volume = v;\n }\n\n getVideoVolume(): number {\n const el = this.getVideo();\n return el ? el.volume : null;\n }\n\n getMain(): HTMLElement {\n return this.getElement(PlayerDom.MAIN_CONTAINER);\n }\n\n showAdClickElement(flag?: boolean): void {\n const el = this.getElement(PlayerDom.AD_CLICK_EL);\n\n if (el) {\n (el.style.display = flag !== false ? 'block' : 'none');\n }\n }\n\n getDimensions(): DimensionsInterface {\n const r = this.getPresentationRect();\n\n return r ? { width: r.width, height: r.height } : null;\n }\n\n showContainer(name: PlayerDom, flag: boolean): void {\n const el = this.getElement(name);\n\n if (el) {\n el.style.display = flag ? 'inline-block' : 'none';\n }\n }\n\n showAdContainer(flag: boolean) {\n this.showContainer(PlayerDom.AD_CONTAINER, flag);\n }\n\n getPresentationRect(): ClientRect | null {\n const m = this.getMain(),\n r = m && m.getBoundingClientRect();\n\n return r || null;\n }\n\n muteVideo(flag: boolean): void {\n const v = this.getVideo(),\n att = 'muted';\n\n if (v) {\n v.muted = flag;\n flag && v.setAttribute(att, att);\n !flag && v.removeAttribute(att);\n }\n }\n\n primeVideo(src = AppResources.blankVideoUrl): Promise {\n return Promise.resolve()\n // @ts-ignore\n .then(() => {\n const v = this.getVideo();\n if (v) {\n v.src = src;\n v.load();\n\n return v.play()\n // @ts-ignore\n .catch(e => {\n if (v.error && v.src != AppResources.blankDataUrl) {\n return this.primeVideo(AppResources.blankDataUrl);\n }\n });\n }\n });\n }\n\n setVideoAttribute(name: string, value: string): void {\n const v = this.getVideo();\n v?.setAttribute(name, value);\n }\n\n removeVideoAttribute(name: string): void {\n const v = this.getVideo();\n v?.removeAttribute(name);\n }\n\n recreateVideo() {\n const video = PlayerDomCreator.createVideoElement();\n const parent = this.getElement(PlayerDom.VIDEO_CONTAINER);\n const previous = this.getElement(PlayerDom.VIDEO_EL) as HTMLVideoElement;\n\n if (previous) {\n const exclude = ['src', 'data-element-id'];\n previous.getAttributeNames()\n .filter(name => !Util.includes(exclude, name))\n .forEach(name => video.setAttribute(name, previous.getAttribute(name)));\n\n parent.replaceChild(video, previous);\n this.sendNotification(NotificationName.APP_EVENT, {\n type: PlayerEvent.VIDEO_ELEMENT_REMOVED,\n data: previous,\n });\n }\n else {\n parent.appendChild(video);\n }\n\n this.setModel({ [PlayerDom.VIDEO_EL]: video });\n this.sendNotification(NotificationName.APP_EVENT, {\n type: PlayerEvent.VIDEO_ELEMENT_ADDED,\n data: video,\n });\n }\n\n private get model(): PlayerDomInterface {\n return this.data;\n }\n}\n","import { apiAccessor, apiCollection, apiMethod } from '../app/ApiDecorators';\nimport { ResourceConfiguration } from '../app/ResourceConfiguration';\nimport { Util } from '../core/Util';\nimport { MediatorName } from '../enum/MediatorName';\nimport { NotificationName } from '../enum/NotificationName';\nimport { NotificationType } from '../enum/NotificationType';\nimport { PlayerEvent } from '../enum/PlayerEvent';\nimport { PlaylistInterface } from '../iface/PlaylistInterface';\nimport { ResourceConfigurationInterface } from '../iface/ResourceConfigurationInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { Proxy } from '../mvc/Proxy';\nimport type { AppMediator } from '../view/AppMediator';\n\n\nexport class PlaylistProxy extends Proxy implements PlaylistInterface {\n\n private pList: ResourceConfigurationInterface[];\n private pCurrentIndex: number = -1;\n private cachedApi: PlaylistInterface = null;\n private appMediator: AppMediator;\n /**\n * @hidden\n */\n constructor(name: string, data?: any) {\n super(name, data);\n\n this.pList = [];\n }\n\n override onRegister() {\n const am = this.facade.retrieveMediator(MediatorName.APPLICATION);\n this.appMediator = am;\n }\n\n /**\n * @ignore\n */\n override onRemove(): void {\n this.clear();\n this.pList = null;\n this.cachedApi = null;\n super.onRemove();\n }\n\n /**\n * @ignore\n */\n getApi(): PlaylistInterface {\n if (!this.cachedApi) {\n this.cachedApi = apiCollection({}, this);\n }\n\n return this.cachedApi;\n }\n\n @apiAccessor(true) //readonly\n get list(): ResourceConfigurationInterface[] {\n const out: ResourceConfigurationInterface[] = [];\n\n let i = this.pList.length;\n while (i--) {\n out.unshift(Util.merge({}, this.pList[i]));\n }\n\n return out;\n }\n\n @apiAccessor()\n get length(): number {\n return this.pList.length;\n }\n\n @apiAccessor()\n get currentIndex(): number {\n return this.pCurrentIndex;\n }\n set currentIndex(index: number) {\n if (index < 0 || index >= this.pList.length) {\n this.notify(NotificationName.PLAYLIST_OUT_OF_RANGE);\n\n return;\n }\n const cur = Math.max(this.pCurrentIndex, 0);\n this.advance(index - cur);\n }\n\n @apiAccessor()\n get currentResource(): ResourceConfigurationInterface {\n return this.appMediator.getCurrentResource();\n }\n\n @apiAccessor()\n get nextResource(): ResourceConfigurationInterface | null {\n const r = this.find(this.pCurrentIndex + 1);\n\n return r ? Util.merge({}, r) : null;\n }\n\n @apiAccessor()\n get prevResource(): ResourceConfigurationInterface | null {\n const r = this.find(this.pCurrentIndex - 1);\n\n return r ? Util.merge({}, r) : null;\n }\n\n @apiMethod()\n next(): Promise {\n return this.advance(1);\n }\n\n @apiMethod()\n prev(): Promise {\n return this.advance(-1);\n }\n\n @apiMethod()\n start(idx: number = 0): Promise {\n this.pCurrentIndex = !isNaN(idx) ? idx - 1 : -1;\n return this.advance();\n }\n\n @apiMethod()\n addResources(resources: Partial | Partial[], index: number = null): void {\n const a: Partial[] = !Array.isArray(resources) ? [resources] : resources;\n\n a.forEach((v, i) => {\n const r = new ResourceConfiguration(v);\n index !== null ? this.pList.splice(index + i, 0, r) : this.pList.push(r);\n });\n\n this.notifyChanged();\n }\n\n @apiMethod()\n removeResourceAtIndex(idx: number): ResourceConfigurationInterface {\n const l = this.length;\n\n if (idx === this.currentIndex && l === 1) {\n this.clear();\n\n return null;\n }\n\n if (idx >= 0 && idx < l) {\n const itm = this.pList.splice(idx, 1);\n\n if (idx === this.currentIndex) {\n this.notify(NotificationName.PLAYLIST_CURRENT_RESOURCE_CLEARED, { interruptedResource: itm });\n }\n this.notifyChanged();\n\n return (itm && itm[0]) || null;\n }\n\n return null;\n }\n\n /**\n * Will clear the entire playlist. \n */\n @apiMethod()\n clear(): void {\n let itm = this.find(this.pCurrentIndex);\n this.pList = [];\n this.pCurrentIndex = -1;\n this.notify(NotificationName.PLAYLIST_CLEARED, { interruptedResource: itm });\n }\n\n softClear(): void {\n this.pList = [];\n this.pCurrentIndex = -1;\n this.sendNotification(NotificationName.APP_EVENT, { type: PlayerEvent.PLAYLIST_CLEARED });\n }\n\n private advance(inc: number = 1): Promise {\n const currentIndex = this.pCurrentIndex + inc;\n const resource = this.find(currentIndex);\n\n let note: NotificationName = null;\n\n if (resource) {\n const setCurrentIndex = () => this.pCurrentIndex = currentIndex;\n return this.appMediator.attachResource(resource, setCurrentIndex).then(result => {\n this.notify(NotificationName.PLAYLIST_ADVANCED, { resource, currentIndex });\n return result;\n });\n }\n else {\n if (currentIndex < 0) {\n note = NotificationName.PLAYLIST_OUT_OF_RANGE;\n }\n else {\n note = NotificationName.PLAYLIST_COMPLETE;\n }\n }\n\n if (note) {\n this.notify(note);\n }\n\n return Promise.resolve(null);\n }\n\n private find(idx: number): ResourceConfigurationInterface | null {\n return (idx >= 0 && idx < this.pList.length && this.pList[idx]) || null;\n }\n\n private notify(name: string, data: StrAnyDict | null = null): void {\n this.facade && this.facade.sendNotification(name, data || null, NotificationType.INTERNAL);\n }\n\n private notifyChanged(): void {\n this.notify(NotificationName.PLAYLIST_CHANGE, null);\n }\n}\n","import { TextTrackMode } from '../enum/TextTrackMode';\nimport { TextTrackSettingsInterface } from '../iface/TextTrackSettingsInterface';\nimport { Proxy } from '../mvc/Proxy';\n\n\nexport class TextTrackProxy extends Proxy implements TextTrackSettingsInterface {\n\n\tconstructor(name: string, data: any = {}) {\n\t\tsuper(name, {\n\t\t\tnative: data.native !== false,\n\t\t\tmode: TextTrackMode.DISABLED,\n\t\t\tlanguage: (data.language != null) ? data.language : navigator.language\n\t\t});\n\t}\n\n\tset mode(value: TextTrackMode) {\n\t\tthis.data.mode = value;\n\t}\n\n\tget mode(): TextTrackMode {\n\t\treturn this.data.mode;\n\t}\n\n\tset enabled(value: boolean) {\n\t\tif (value) {\n\t\t\tthis.mode = this.enabledMode;\n\t\t}\n\t\telse {\n\t\t\tthis.mode = TextTrackMode.DISABLED;\n\t\t}\n\t}\n\n\tget enabled(): boolean {\n\t\treturn this.data.mode != TextTrackMode.DISABLED;\n\t}\n\n\tget enabledMode(): TextTrackMode {\n\t\treturn (this.data.native) ? TextTrackMode.SHOWING : TextTrackMode.HIDDEN;\n\t}\n\n\tget native(): boolean {\n\t\treturn this.data.native;\n\t}\n\n\tset language(value: string) {\n\t\tthis.data.language = value;\n\t}\n\n\tget language(): string {\n\t\treturn this.data.language;\n\t}\n}\n","export class Validator {\n\n protected constructor() { }\n\n static checkType(val: any, type: string | string[], allowNull?: boolean): boolean {\n if (typeof type == \"string\") {\n type = [type];\n }\n return allowNull && val === null ? true : type.some(t => typeof val === t);\n }\n\n static notEmpty(obj: any): boolean {\n return !(\n obj === null || obj === undefined ||\n (Array.isArray(obj) && obj.length === 0) ||\n (\"object\" === typeof obj && obj.constructor === Object && Object.keys(obj).length === 0) ||\n \"string\" === typeof obj && obj === ''\n );\n }\n\n static isArray(obj: any): boolean {\n return Array.isArray(obj);\n }\n\n static validNumber(val: any, defVal: number) {\n return typeof val !== 'number' ? defVal : val;\n }\n\n static isTypedArray(obj: any, type: string): boolean {\n if (this.isArray(obj) && this.notEmpty(obj)) {\n let i = obj.length;\n\n while (i--) {\n if (typeof obj[i] !== type) {\n return false\n }\n }\n\n return true;\n }\n\n return false;\n }\n\n static isType(value: any, type: any): boolean {\n return value instanceof type;\n }\n\n static isPositiveNumber(value: any): boolean {\n return typeof value === 'number' && value >= 0;\n }\n}\n","import { AdBreakType } from '../../enum/AdBreakType';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { Validator } from '../vo/Validator';\n\n\nexport const ad_break_info_config: StrAnyDict = {\n\n adBreakDuration: {\n type: 'number',\n defaultValue: -1,\n setterTransformer: (val: number): number => {\n return typeof val !== 'number' ? -1 : val;\n }\n },\n\n adTotal: {\n type: 'number',\n defaultValue: -1,\n setterTransformer: (val: number): number => {\n return typeof val !== 'number' ? -1 : val;\n }\n },\n\n adBreakPosition: {\n type: 'number',\n defaultValue: -1,\n setterTransformer: (val: number): number => {\n return typeof val !== 'number' ? -1 : val;\n }\n },\n\n adBreakType: {\n type: 'string',\n defaultValue: null,\n setterTransformer: (val: string): string => {\n return (val === AdBreakType.MID || val === AdBreakType.POST || val === AdBreakType.PRE)\n ? val : null;\n }\n },\n\n adServerName: {\n type: 'string',\n defaultValue: null,\n validator: Validator.notEmpty\n }\n};\n","import { StrAnyDict } from '../../iface/StrAnyDict';\nimport { Validator } from \"../vo/Validator\";\n\n\nexport const ad_item_config: StrAnyDict = {\n\n adDuration: {\n type: 'number',\n defaultValue: -1,\n setterTransformer: (val: number): number => {\n return Validator.validNumber(val, -1);\n }\n },\n\n adTitle: {\n type: 'string',\n defaultValue: null\n },\n\n adId: {\n type: 'string',\n defaultValue: null\n },\n\n adPosition: {\n type: 'number',\n defaultValue: -1,\n setterTransformer: (val: number): number => {\n return Validator.validNumber(val, -1);\n }\n },\n\n adAssetUrl: {\n type: 'string',\n defaultValue: null\n },\n\n isVpaid: {\n type: 'boolean',\n defaultValue: false,\n setterTransformer: (val: boolean): boolean => {\n return typeof val !== 'boolean' ? false : val;\n }\n },\n\n wrapperAdId: {\n type: 'string',\n defaultValue: null\n },\n\n creativeId: {\n type: 'string',\n defaultValue: null\n },\n\n wrapperCreativeId: {\n type: 'string',\n defaultValue: null\n },\n\n vastMediaWidth: {\n type: 'number',\n defaultValue: null\n },\n\n vastMediaHeight: {\n type: 'number',\n defaultValue: null\n },\n\n vastMediaBitrate: {\n type: 'number',\n defaultValue: null\n },\n};\n","import { PlaybackState } from '../../enum/PlaybackState';\nimport { StreamType } from '../../enum/StreamType';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { Validator } from '../vo/Validator';\n\n\nexport const content_playback_state_config: StrAnyDict = {\n\n manifestQualities: {\n type: 'object',\n defaultValue: null,\n },\n\n qualityInfo: {\n type: 'object',\n defaultValue: null,\n },\n\n audioTracks: {\n type: 'object',\n defaultValue: null,\n },\n\n textTracks: {\n type: 'object',\n defaultValue: null,\n },\n\n streamType: {\n type: 'string',\n defaultValue: StreamType.VOD,\n },\n\n liveStreamInfo: {\n type: 'object',\n defaultValue: null\n },\n\n bufferLength: {\n type: 'number',\n defaultValue: 0,\n },\n\n cdn: {\n type: 'string',\n defaultValue: null,\n validator: Validator.notEmpty\n },\n\n drmType: {\n type: 'string',\n defaultValue: null,\n validator: Validator.notEmpty\n },\n\n contentSegment: {\n type: 'number',\n defaultValue: NaN,\n },\n\n maxBandwidth: {\n type: 'number',\n defaultValue: NaN,\n },\n\n time: {\n type: 'number',\n defaultValue: 0,\n },\n\n state: {\n type: 'string',\n defaultValue: PlaybackState.IDLE,\n },\n\n duration: {\n type: 'number',\n defaultValue: NaN,\n },\n\n bitrate: {\n type: 'number',\n defaultValue: NaN,\n },\n\n started: {\n type: 'boolean',\n defaultValue: false,\n },\n\n averageDroppedFps: {\n type: 'number',\n defaultValue: NaN,\n },\n\n framerate: {\n type: 'number',\n defaultValue: NaN,\n }\n};\n","import { Autoplay } from '../../enum/Autoplay';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { Network } from '../../enum/Network';\nimport { PerformanceMode } from '../../enum/PerformanceMode';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\n\n\nexport const player_options_config: StrAnyDict = {\n\n container: {\n type: ['object', 'string'],\n defaultValue: null,\n },\n\n dataTransformers: {\n type: 'object',\n defaultValue: null,\n },\n\n plugins: {\n type: 'object',\n defaultValue: null,\n },\n\n nativePlugins: {\n type: 'object',\n defaultValue: null\n },\n\n autoplay: {\n type: 'string',\n defaultValue: Autoplay.NONE\n },\n\n offsetTextOnControlsVisible: {\n type: 'boolean',\n defaultValue: false\n },\n\n id: {\n type: 'string',\n defaultValue: null\n },\n\n networkErrorRecovery: {\n type: 'object',\n defaultValue: null\n },\n\n networkTimeout: {\n type: 'number',\n defaultValue: Network.TIMEOUT\n },\n\n performanceMode: {\n type: 'string',\n defaultValue: PerformanceMode.AUTO\n },\n\n renderTextTrackNatively: {\n type: 'boolean',\n defaultValue: true\n },\n\n useNativeFullscreen: {\n type: 'boolean',\n defaultValue: true\n },\n\n playsInline: {\n type: 'boolean',\n defaultValue: true\n },\n\n uiConfig: {\n type: 'object',\n defaultValue: null\n },\n\n useNativeControls: {\n type: 'boolean',\n defaultValue: false\n },\n\n overrides: {\n type: 'object',\n defaultValue: {}\n },\n\n logLevel: {\n type: 'string',\n defaultValue: LogLevel.OFF\n },\n\n language: {\n type: 'string',\n defaultValue: null\n },\n\n localization: {\n type: 'object',\n defaultValue: null\n },\n\n idleDelay: {\n type: 'number',\n defaultValue: 3000\n },\n\n enableOm: {\n type: 'boolean',\n defaultValue: false\n }\n\n};\n","export class Transformer {\n\n protected constructor() { }\n\n static clampValue(val: any, min: number, max: number): number | null {\n if (typeof val !== \"number\") {\n return null;\n }\n return Math.max(min, Math.min(val, max));\n }\n\n static lowerCase(val: any): any {\n return typeof val === \"string\" ? val.toLowerCase() : val;\n }\n\n static strToNum(val: any): number | any {\n if (typeof val === 'number') {\n return val;\n }\n if (typeof val === 'string') {\n let pf = parseFloat(val);\n return isNaN(pf) ? val : pf;\n }\n\n return val;\n }\n}\n","import { StrAnyDict } from '../../iface/StrAnyDict';\nimport { ad_break_info_config } from './ad_break_info_config';\nimport { ad_item_config } from './ad_item_config';\nimport { content_playback_state_config } from './content_playback_state_config';\nimport { player_dom_config } from './player_dom_config';\nimport { player_options_config } from './player_options_config';\nimport { presentation_state_config } from './presentation_state_config';\n\n\nconst config: StrAnyDict = {\n ad_break_info_config: ad_break_info_config,\n ad_item_config: ad_item_config,\n content_playback_state_config: content_playback_state_config,\n player_dom_config: player_dom_config,\n player_options_config: player_options_config,\n presentation_state_config: presentation_state_config,\n};\n\nexport { config };\n","import { StrAnyDict } from '../../iface/StrAnyDict';\n\n\nexport const player_dom_config: StrAnyDict = {\n\n main: {\n type: 'object',\n defaultValue: null,\n },\n\n video: {\n type: 'object',\n defaultValue: null,\n },\n\n videoContainer: {\n type: 'object',\n defaultValue: null,\n },\n\n ccContainer: {\n type: 'object',\n defaultValue: null,\n },\n\n adContainer: {\n type: 'object',\n defaultValue: null,\n },\n\n panelContainer: {\n type: 'object',\n defaultValue: null,\n },\n\n adClickEl: {\n type: 'object',\n defaultValue: null,\n }\n\n};\n","import { StrAnyDict } from '../../iface/StrAnyDict';\nimport { Transformer } from '../vo/Transformer';\nimport { Validator } from '../vo/Validator';\n\n\nexport const presentation_state_config: StrAnyDict = {\n\n skipAutoplayCheck: {\n type: 'boolean',\n defaultValue: false,\n },\n\n streamTime: {\n type: 'number',\n defaultValue: 0,\n setterTransformer: (value: any) => {\n return Validator.isPositiveNumber(value) ? value : 0;\n }\n },\n\n streamDuration: {\n type: 'number',\n defaultValue: NaN,\n setterTransformer: (value: any) => {\n return Validator.isPositiveNumber(value) ? value : NaN;\n }\n },\n\n autoplaySupport: {\n type: 'object',\n defaultValue: null\n },\n\n isAutoplay: {\n type: 'boolean',\n defaultValue: false,\n },\n\n isCurrentVideoAd: {\n type: 'boolean',\n defaultValue: false,\n },\n\n isFullscreen: {\n type: 'boolean',\n defaultValue: false,\n },\n\n isMuted: {\n type: 'boolean',\n defaultValue: false,\n },\n\n isMuteAtPlayStart: {\n type: 'boolean',\n defaultValue: false,\n },\n\n started: {\n type: 'boolean',\n defaultValue: false,\n },\n\n userHasUnmuted: {\n type: 'boolean',\n defaultValue: false,\n },\n\n volume: {\n type: 'number',\n defaultValue: 1,\n setterTransformer: (value: any) => {\n return Transformer.clampValue(value, 0, 1);\n }\n },\n\n usesSsai: {\n type: 'boolean',\n defaultValue: false,\n },\n\n streamId: {\n type: 'string',\n defaultValue: null,\n },\n\n suspended: {\n type: 'boolean',\n defaultValue: false,\n }\n};\n","import { Logger } from '../../core/Logger';\nimport { DataConfigInterface } from '../../iface/DataConfigInterface';\nimport { PropertyConfigInterface } from '../../iface/PropertyConfigInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { Validator } from './Validator';\n\n\nexport class Generator {\n\n protected constructor() { }\n\n static generateModel(\n scope: any,\n config: DataConfigInterface,\n dataContainer: StrAnyDict,\n defaultValueContainer: StrAnyDict\n ): void {\n\n for (let q in config) {\n this.createProperty(q, config[q], scope, dataContainer, defaultValueContainer);\n }\n }\n\n private static createProperty(\n name: string,\n config: PropertyConfigInterface,\n scope: any,\n dataCtr: StrAnyDict,\n defaultValueCtr: StrAnyDict\n ): void {\n\n let validator = config.validator,\n type = config.type,\n defValue = config.defaultValue,\n enumerable = config.enumerable !== false,\n setterTransformer = this.getTransformer(config, 'setter', scope),\n getterTransformer = this.getTransformer(config, 'getter', scope);\n\n if (config.writable === false) {\n Object.defineProperty(scope, name, {\n enumerable: enumerable,\n value: defValue,\n writable: false\n });\n dataCtr[name] = defValue;\n }\n else {\n Object.defineProperty(scope, name, {\n enumerable: enumerable,\n set: function (val: any) {\n const txVal = setterTransformer(val);\n\n // note: value is first transformed, then validated\n if (validator && !validator(txVal)) {\n Logger.warn(`Invalid value '${txVal}' for property ${name}`);\n\n return;\n }\n if (!Validator.checkType(txVal, type, defValue === null)) {\n Logger.warn(`Invalid type supplied for property ${name}`);\n\n return;\n }\n dataCtr[name] = txVal;\n },\n get: function () {\n return getterTransformer(dataCtr[name]);\n }\n });\n\n dataCtr[name] = defValue;\n }\n\n defaultValueCtr[name] = defValue;\n }\n\n private static getTransformer(pCfg: PropertyConfigInterface, which: string, scope: any) {\n const tx = pCfg[which + 'Transformer'];\n\n if (tx && typeof tx === 'function') {\n return tx.bind(scope);\n }\n\n return this.blankTransformer;\n }\n\n private static blankTransformer(val: any) {\n return val;\n }\n\n}\n","import { Util } from '../../core/Util';\nimport { DataConfigInterface } from '../../iface/DataConfigInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { Generator } from './Generator';\n\n\nexport class ConfigurablePropertyContainer {\n\n private readonly pData: StrAnyDict; // private data\n private readonly defaultValues: StrAnyDict;\n\n constructor(config: DataConfigInterface) {\n this.pData = {};\n this.defaultValues = {};\n\n Generator.generateModel(this, config, this.pData, this.defaultValues);\n }\n\n /**\n * Returns a cloned, \"read-only\" object\n * (i.e, modifying values on this object has no effect on model)\n */\n get data(): StrAnyDict {\n return Util.assign({}, this.pData);\n }\n\n reset() {\n for (let q in this.defaultValues) {\n this.pData[q] = this.defaultValues[q];\n }\n }\n}\n","import { AdBreakType } from '../../enum/AdBreakType';\nimport { AdBreakInfoInterface } from '../../iface/AdBreakInfoInterface';\nimport { DataConfigInterface } from '../../iface/DataConfigInterface';\nimport { ModelInterface } from '../../iface/ModelInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { ConfigurablePropertyContainer } from './ConfigurablePropertyContainer';\n\n\nexport class AdBreakInfo implements AdBreakInfoInterface, ModelInterface {\n\n private model: StrAnyDict;\n\n constructor(config: DataConfigInterface) {\n this.model = new ConfigurablePropertyContainer(config);\n }\n\n static get modelName(): string { return 'AdBreakInfo'; }\n\n get data(): AdBreakInfoInterface { return (this.model.data); }\n\n reset(): void { this.model.reset(); }\n\n\n set adBreakDuration(value: number) { this.model.adBreakDuration = value; }\n get adBreakDuration(): number { return this.model.adBreakDuration; }\n\n set adBreakPosition(value: number) { this.model.adBreakPosition = value; }\n get adBreakPosition(): number { return this.model.adBreakPosition; }\n\n set adBreakType(value: AdBreakType) { this.model.adBreakType = value; }\n get adBreakType(): AdBreakType { return this.model.adBreakType; }\n\n set adServerName(value: string) { this.model.adServerName = value; }\n get adServerName(): string { return this.model.adServerName; }\n\n set adTotal(value: number) { this.model.adTotal = value; }\n get adTotal(): number { return this.model.adTotal; }\n}\n","import { AdItemInterface } from '../../iface/AdItemInterface';\nimport { DataConfigInterface } from '../../iface/DataConfigInterface';\nimport { ModelInterface } from '../../iface/ModelInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { ConfigurablePropertyContainer } from './ConfigurablePropertyContainer';\n\n\nexport class AdItem implements AdItemInterface, ModelInterface {\n\n private model: StrAnyDict;\n\n constructor(config: DataConfigInterface) {\n this.model = new ConfigurablePropertyContainer(config);\n }\n\n static get modelName(): string { return 'AdItem'; }\n\n get data(): AdItemInterface { return (this.model.data); }\n\n reset(): void { this.model.reset(); }\n\n\n set adDuration(value: number) { this.model.adDuration = value; }\n get adDuration(): number { return this.model.adDuration; }\n\n set adTitle(value: string) { this.model.adTitle = value; }\n get adTitle(): string { return this.model.adTitle; }\n\n set adId(value: string) { this.model.adId = value; }\n get adId(): string { return this.model.adId; }\n\n set adPosition(value: number) { this.model.adPosition = value; }\n get adPosition(): number { return this.model.adPosition; }\n\n set adAssetUrl(value: string) { this.model.adAssetUrl = value; }\n get adAssetUrl(): string { return this.model.adAssetUrl; }\n\n set isVpaid(value: boolean) { this.model.isVpaid = value; }\n get isVpaid(): boolean { return this.model.isVpaid; }\n\n set wrapperAdId(value: string) { this.model.wrapperAdId = value; }\n get wrapperAdId(): string { return this.model.wrapperAdId; }\n\n set creativeId(value: string) { this.model.creativeId = value; }\n get creativeId(): string { return this.model.creativeId; }\n\n set wrapperCreativeId(value: string) { this.model.wrapperCreativeId = value; }\n get wrapperCreativeId(): string { return this.model.wrapperCreativeId; }\n\n set vastMediaWidth(value: number) { this.model.vastMediaWidth = value; }\n get vastMediaWidth(): number { return this.model.vastMediaWidth; }\n\n set vastMediaHeight(value: number) { this.model.vastMediaHeight = value; }\n get vastMediaHeight(): number { return this.model.vastMediaHeight; }\n\n set vastMediaBitrate(value: number) { this.model.vastMediaBitrate = value; }\n get vastMediaBitrate(): number { return this.model.vastMediaBitrate; }\n}\n","import { PlaybackState } from '../../enum/PlaybackState';\nimport { StreamType } from '../../enum/StreamType';\nimport { AudioTracksInterface } from '../../iface/AudioTracksInterface';\nimport { ContentPlaybackStateInterface } from '../../iface/ContentPlaybackStateInterface';\nimport { DataConfigInterface } from '../../iface/DataConfigInterface';\nimport { LiveStreamInfoInterface } from '../../iface/LiveStreamInfoInterface';\nimport { ModelInterface } from '../../iface/ModelInterface';\nimport { QualityInfoInterface } from '../../iface/QualityInfoInterface';\nimport { QualityInterface } from '../../iface/QualityInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { TextTracksInterface } from '../../iface/TextTracksInterface';\nimport { ConfigurablePropertyContainer } from './ConfigurablePropertyContainer';\n\n\nexport class ContentPlaybackState implements ContentPlaybackStateInterface, ModelInterface {\n\n private model: StrAnyDict;\n\n constructor(config: DataConfigInterface) {\n this.model = new ConfigurablePropertyContainer(config);\n }\n\n static get modelName(): string { return 'ContentPlaybackState'; }\n\n get data(): ContentPlaybackStateInterface { return (this.model.data); }\n\n reset(): void { this.model.reset(); }\n\n\n set manifestQualities(value: QualityInterface[]) { this.model.manifestQualities = value; }\n get manifestQualities(): QualityInterface[] { return this.model.manifestQualities; }\n\n set qualityInfo(value: QualityInfoInterface) { this.model.qualityInfo = value; }\n get qualityInfo(): QualityInfoInterface { return this.model.qualityInfo; }\n\n set audioTracks(value: AudioTracksInterface) { this.model.audioTracks = value; }\n get audioTracks(): AudioTracksInterface { return this.model.audioTracks; }\n\n set textTracks(value: TextTracksInterface) { this.model.textTracks = value; }\n get textTracks(): TextTracksInterface { return this.model.textTracks; }\n\n set streamType(value: StreamType) { this.model.streamType = value; }\n get streamType(): StreamType { return this.model.streamType; }\n\n set liveStreamInfo(value: LiveStreamInfoInterface) { this.model.liveStreamInfo = value; }\n get liveStreamInfo(): LiveStreamInfoInterface { return this.model.liveStreamInfo; }\n\n set bufferLength(value: number) { this.model.bufferLength = value; }\n get bufferLength(): number { return this.model.bufferLength; }\n\n set cdn(value: string) { this.model.cdn = value; }\n get cdn(): string { return this.model.cdn; }\n\n set drmType(value: string) { this.model.drmType = value; }\n get drmType(): string { return this.model.drmType; }\n\n set contentSegment(value: number) { this.model.contentSegment = value; }\n get contentSegment(): number { return this.model.contentSegment; }\n\n set maxBandwidth(value: number) { this.model.maxBandwidth = value; }\n get maxBandwidth(): number { return this.model.maxBandwidth; }\n\n set time(value: number) { this.model.time = value; }\n get time(): number { return this.model.time; }\n\n set state(value: PlaybackState) { this.model.state = value; }\n get state(): PlaybackState { return this.model.state; }\n\n set duration(value: number) { this.model.duration = value; }\n get duration(): number { return this.model.duration; }\n\n set bitrate(value: number) { this.model.bitrate = value; }\n get bitrate(): number { return this.model.bitrate; }\n\n set started(value: boolean) { this.model.started = value; }\n get started(): boolean { return this.model.started; }\n\n set averageDroppedFps(value: number) { this.model.averageDroppedFps = value; }\n get averageDroppedFps(): number { return this.model.averageDroppedFps; }\n\n set framerate(value: number) { this.model.framerate = value; }\n get framerate(): number { return this.model.framerate; }\n}\n","import { DataConfigInterface } from '../../iface/DataConfigInterface';\nimport { ModelInterface } from '../../iface/ModelInterface';\nimport { PlayerDomInterface } from '../../iface/PlayerDomInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { ConfigurablePropertyContainer } from './ConfigurablePropertyContainer';\n\n\nexport class PlayerDom implements PlayerDomInterface, ModelInterface {\n\n private model: StrAnyDict;\n\n constructor(config: DataConfigInterface) {\n this.model = new ConfigurablePropertyContainer(config);\n }\n\n static get modelName(): string { return 'PlayerDom'; }\n\n get data(): PlayerDomInterface { return (this.model.data); }\n\n reset(): void { this.model.reset(); }\n\n set main(value: HTMLElement) { this.model.main = value; }\n get main(): HTMLElement { return this.model.main; }\n\n set video(value: HTMLVideoElement) { this.model.video = value; }\n get video(): HTMLVideoElement { return this.model.video; }\n\n set videoContainer(value: HTMLElement) { this.model.videoContainer = value; }\n get videoContainer(): HTMLElement { return this.model.videoContainer; }\n\n set ccContainer(value: HTMLElement) { this.model.ccContainer = value; }\n get ccContainer(): HTMLElement { return this.model.ccContainer; }\n\n set adContainer(value: HTMLElement) { this.model.adContainer = value; }\n get adContainer(): HTMLElement { return this.model.adContainer; }\n\n set panelContainer(value: HTMLElement) { this.model.panelContainer = value; }\n get panelContainer(): HTMLElement { return this.model.panelContainer; }\n\n set adClickEl(value: HTMLElement) { this.model.adClickEl = value; }\n get adClickEl(): HTMLElement { return this.model.adClickEl; }\n}\n","import { Autoplay } from '../../enum/Autoplay';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { NativePlugin } from '../../enum/NativePlugin';\nimport { PerformanceMode } from '../../enum/PerformanceMode';\nimport { DataConfigInterface } from '../../iface/DataConfigInterface';\nimport { DataTransformersConfigInterface } from '../../iface/DataTransformersConfigInterface';\nimport { DomReference } from '../../iface/DomReference';\nimport { ErrorRecoveryInterface } from '../../iface/ErrorRecoveryInterface';\nimport { LocalizationData } from '../../iface/LocalizationData';\nimport { ModelInterface } from '../../iface/ModelInterface';\nimport { OverridesInterface } from '../../iface/OverridesInterface';\nimport { PlayerOptionsInterface } from '../../iface/PlayerOptionsInterface';\nimport { PluginConfigInterface } from '../../iface/PluginConfigInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { ConfigurablePropertyContainer } from './ConfigurablePropertyContainer';\n\n\nexport class PlayerOptions implements PlayerOptionsInterface, ModelInterface {\n\n private model: StrAnyDict;\n\n constructor(config: DataConfigInterface) {\n this.model = new ConfigurablePropertyContainer(config);\n }\n\n static get modelName(): string { return 'PlayerOptions'; }\n\n get data(): PlayerOptionsInterface { return (this.model.data); }\n\n reset(): void { this.model.reset(); }\n\n set container(value: DomReference) { this.model.container = value; }\n get container(): DomReference { return this.model.container; }\n\n set dataTransformers(value: DataTransformersConfigInterface) { this.model.dataTransformers = value; }\n get dataTransformers(): DataTransformersConfigInterface { return this.model.dataTransformers; }\n\n set plugins(value: PluginConfigInterface[]) { this.model.plugins = value; }\n get plugins(): PluginConfigInterface[] { return this.model.plugins; }\n\n set nativePlugins(value: NativePlugin[]) { this.model.nativePlugins = value; }\n get nativePlugins(): NativePlugin[] { return this.model.nativePlugins; }\n\n set autoplay(value: Autoplay) { this.model.autoplay = value; }\n get autoplay(): Autoplay { return this.model.autoplay; }\n\n set offsetTextOnControlsVisible(value: boolean) { this.model.offsetTextOnControlsVisible = value; }\n get offsetTextOnControlsVisible(): boolean { return this.model.offsetTextOnControlsVisible; }\n\n set id(value: string) { this.model.id = value; }\n get id(): string { return this.model.id; }\n\n set isEmbedded(value: boolean) { this.model.isEmbedded = value; }\n get isEmbedded(): boolean { return this.model.isEmbedded; }\n\n set networkErrorRecovery(value: ErrorRecoveryInterface) { this.model.networkErrorRecovery = value; }\n get networkErrorRecovery(): ErrorRecoveryInterface { return this.model.networkErrorRecovery; }\n\n set networkTimeout(value: number) { this.model.networkTimeout = value; }\n get networkTimeout(): number { return this.model.networkTimeout; }\n\n set performanceMode(value: PerformanceMode) { this.model.performanceMode = value; }\n get performanceMode(): PerformanceMode { return this.model.performanceMode; }\n\n set renderTextTrackNatively(value: boolean) { this.model.renderTextTrackNatively = value; }\n get renderTextTrackNatively(): boolean { return this.model.renderTextTrackNatively; }\n\n set useNativeFullscreen(value: boolean) { this.model.useNativeFullscreen = value; }\n get useNativeFullscreen(): boolean { return this.model.useNativeFullscreen; }\n\n set playsInline(value: boolean) { this.model.playsInline = value; }\n get playsInline(): boolean { return this.model.playsInline; }\n\n set uiConfig(value: StrAnyDict) { this.model.uiConfig = value; }\n get uiConfig(): StrAnyDict { return this.model.uiConfig; }\n\n set useNativeControls(value: boolean) { this.model.useNativeControls = value; }\n get useNativeControls(): boolean { return this.model.useNativeControls; }\n\n set overrides(value: OverridesInterface) { this.model.overrides = value; }\n get overrides(): OverridesInterface { return this.model.overrides; }\n\n set logLevel(value: LogLevel) { this.model.logLevel = value; }\n get logLevel(): LogLevel { return this.model.logLevel; }\n\n set language(value: string) { this.model.language = value; }\n get language(): string { return this.model.language; }\n\n set localization(value: LocalizationData) { this.model.localization = value; }\n get localization(): LocalizationData { return this.model.localization; }\n\n set idleDelay(value: number) { this.model.idleDelay = value; }\n get idleDelay(): number { return this.model.idleDelay; }\n\n set enableOm(value: boolean) { this.model.enableOm = value; }\n get enableOm(): boolean { return this.model.enableOm; }\n}\n","import { AutoplayInfoInterface } from '../../iface/AutoplayInfoInterface';\nimport { DataConfigInterface } from '../../iface/DataConfigInterface';\nimport { ModelInterface } from '../../iface/ModelInterface';\nimport { PresentationStateInterface } from '../../iface/PresentationStateInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { ConfigurablePropertyContainer } from './ConfigurablePropertyContainer';\n\n\nexport class PresentationState implements PresentationStateInterface, ModelInterface {\n\n private model: StrAnyDict;\n\n constructor(config: DataConfigInterface) {\n this.model = new ConfigurablePropertyContainer(config);\n }\n\n static get modelName(): string { return 'PresentationState'; }\n\n get data(): PresentationStateInterface { return (this.model.data); }\n\n reset(): void { this.model.reset(); }\n\n\n set skipAutoplayCheck(value: boolean) { this.model.skipAutoplayCheck = value; }\n get skipAutoplayCheck(): boolean { return this.model.skipAutoplayCheck; }\n\n set streamTime(value: number) { this.model.streamTime = value; }\n get streamTime(): number { return this.model.streamTime; }\n\n set streamDuration(value: number) { this.model.streamDuration = value; }\n get streamDuration(): number { return this.model.streamDuration; }\n\n set autoplaySupport(value: AutoplayInfoInterface) { this.model.autoplaySupport = value; }\n get autoplaySupport(): AutoplayInfoInterface { return this.model.autoplaySupport; }\n\n set isAutoplay(value: boolean) { this.model.isAutoplay = value; }\n get isAutoplay(): boolean { return this.model.isAutoplay; }\n\n set isCurrentVideoAd(value: boolean) { this.model.isCurrentVideoAd = value; }\n get isCurrentVideoAd(): boolean { return this.model.isCurrentVideoAd; }\n\n set isFullscreen(value: boolean) { this.model.isFullscreen = value; }\n get isFullscreen(): boolean { return this.model.isFullscreen; }\n\n set isMuted(value: boolean) { this.model.isMuted = value; }\n get isMuted(): boolean { return this.model.isMuted; }\n\n set isMuteAtPlayStart(value: boolean) { this.model.isMuteAtPlayStart = value; }\n get isMuteAtPlayStart(): boolean { return this.model.isMuteAtPlayStart; }\n\n set started(value: boolean) { this.model.started = value; }\n get started(): boolean { return this.model.started; }\n\n set userHasUnmuted(value: boolean) { this.model.userHasUnmuted = value; }\n get userHasUnmuted(): boolean { return this.model.userHasUnmuted; }\n\n set volume(value: number) { this.model.volume = value; }\n get volume(): number { return this.model.volume; }\n\n set usesSsai(value: boolean) { this.model.usesSsai = value; }\n get usesSsai(): boolean { return this.model.usesSsai; }\n\n set streamId(value: string) { this.model.streamId = value; }\n get streamId(): string { return this.model.streamId; }\n\n set suspended(value: boolean) { this.model.suspended = value; }\n get suspended(): boolean { return this.model.suspended; }\n}\n","import { AdBreakInfoInterface } from '../../iface/AdBreakInfoInterface';\nimport { AdItemInterface } from '../../iface/AdItemInterface';\nimport { ContentPlaybackStateInterface } from '../../iface/ContentPlaybackStateInterface';\nimport { ModelSnapshotInterface } from '../../iface/ModelSnapshotInterface';\nimport { PlayerDomInterface } from '../../iface/PlayerDomInterface';\nimport { PlayerOptionsInterface } from '../../iface/PlayerOptionsInterface';\nimport { PresentationStateInterface } from '../../iface/PresentationStateInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { config } from '../cfg';\nimport { AdBreakInfo } from './AdBreakInfo';\nimport { AdItem } from './AdItem';\nimport { ContentPlaybackState } from './ContentPlaybackState';\nimport { PlayerDom } from './PlayerDom';\nimport { PlayerOptions } from './PlayerOptions';\nimport { PresentationState } from './PresentationState';\n\n\nexport class ModelCollection {\n\n private mdlCollection: StrAnyDict;\n\n constructor() {\n this.mdlCollection = {};\n this.createModels();\n }\n\n destroy() {\n for (let q in this.mdlCollection) {\n delete this.mdlCollection[q];\n }\n this.mdlCollection = null;\n }\n\n getModel(name: string): T {\n return (this.mdlCollection[name]);\n }\n\n getSnapshot(): ModelSnapshotInterface {\n const out = {};\n for (let q in this.mdlCollection) {\n if (q == 'PlayerDom' || q == 'PlayerOptions' || q == 'BuildInfo') continue;\n out[q] = this.mdlCollection[q].data;\n }\n\n return out;\n }\n\n get AdBreakInfo(): AdBreakInfoInterface { return this.mdlCollection.AdBreakInfo; }\n\n get AdItem(): AdItemInterface { return this.mdlCollection.AdItem; }\n\n get ContentPlaybackState(): ContentPlaybackStateInterface { return this.mdlCollection.ContentPlaybackState; }\n\n get PlayerDom(): PlayerDomInterface { return this.mdlCollection.PlayerDom; }\n\n get PlayerOptions(): PlayerOptionsInterface { return this.mdlCollection.PlayerOptions; }\n\n get PresentationState(): PresentationStateInterface { return this.mdlCollection.PresentationState; }\n\n\n private createModels(): void {\n let models = [\n AdBreakInfo,\n AdItem,\n ContentPlaybackState,\n PlayerDom,\n PlayerOptions,\n PresentationState,\n ] as any,\n i = models.length;\n\n while (i--) {\n let c = models[i],\n n = c.modelName,\n cfg = config[this.classToCfgName(n)];\n\n this.mdlCollection[n] = new c(cfg);\n }\n }\n\n private classToCfgName(str: string): string {\n return (str.replace(/(?:^|\\.?)([A-Z])/g, function (x, y) {\n return '_' + y.toLowerCase();\n }).replace(/^_/, '')) + '_config';\n }\n}\n","import { Util } from '../../core/Util';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { ModelName } from '../../enum/ModelName';\nimport { ProxyName } from '../../enum/ProxyName';\nimport { ServiceName } from '../../enum/ServiceName';\nimport { NotificationInterface, SystemServiceInterface } from '../../iface';\nimport { PlayerDomInterface } from '../../iface/PlayerDomInterface';\nimport { PlayerOptionsInterface } from '../../iface/PlayerOptionsInterface';\nimport { AdapterProxy } from '../../model/AdapterProxy';\nimport { LocalizationProxy } from '../../model/LocalizationProxy';\nimport { ModelCollectionProxy } from '../../model/ModelCollectionProxy';\nimport { PerformanceProxy } from '../../model/PerformanceProxy';\nimport { PlayerDomProxy } from '../../model/PlayerDomProxy';\nimport { PlaylistProxy } from '../../model/PlaylistProxy';\nimport { TextTrackProxy } from '../../model/TextTrackProxy';\nimport { ModelCollection } from '../../model/vo/ModelCollection';\nimport { LogAwareSimpleCommand } from '../LogAwareSimpleCommand';\n\n\nexport class PrepModelCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface): void {\n const sys = this.facade.retrieveService(ServiceName.System),\n mdlColl = new ModelCollection(),\n mdlCollProxy = new ModelCollectionProxy(ProxyName.ModelCollectionProxy, mdlColl),\n playerOptions = notification.body.playerOptions;\n\n // Model collection Proxy\n this.facade.registerProxy(mdlCollProxy);\n this.setPlayerOptions(mdlCollProxy, playerOptions);\n\n // Performance Proxy\n this.facade.registerProxy(new PerformanceProxy(ProxyName.PerformanceProxy));\n\n // Localization Proxy\n const loc = new LocalizationProxy(ProxyName.LocalizationProxy, playerOptions.language);\n this.facade.registerProxy(loc);\n\n // Text Track Proxy\n this.facade.registerProxy(new TextTrackProxy(ProxyName.TextTrackProxy, { native: playerOptions.renderTextTrackNatively, language: loc.language }));\n\n // DOM Proxy\n !sys.isWebMaf && this.createDomProxy(mdlCollProxy);\n\n // Adapter Proxy\n this.facade.registerProxy(new AdapterProxy());\n\n // Playlist Proxy\n this.facade.registerProxy(new PlaylistProxy(ProxyName.Playlist));\n\n this.log(LogLevel.DEBUG, 'Model prepared');\n }\n\n private setPlayerOptions(proxy: ModelCollectionProxy, opts: PlayerOptionsInterface): void {\n const pOptsMdl = proxy.getModel(ModelName.PlayerOptions);\n\n for (let q in opts) {\n // @ts-ignore\n !Util.isUndefined(pOptsMdl[q]) && (pOptsMdl[q] = opts[q]);\n }\n }\n\n private createDomProxy(proxy: ModelCollectionProxy): void {\n const mdl = proxy.getModel(ModelName.PlayerDom),\n domCollProxy = new PlayerDomProxy(ProxyName.PlayerDomProxy, mdl);\n\n this.facade.registerProxy(domCollProxy);\n }\n}\n","import { QueryString } from '../core/QueryString';\nimport { cvui } from '../deprecated/cvui/cvui';\nimport { Deprecated } from '../deprecated/Deprecated';\nimport { PlayerDom } from '../enum/PlayerDom';\nimport { PlayerDomProxyInterface, PluginServicesOptions, SystemServiceInterface } from '../iface';\nimport { BuildInfoInterface } from '../iface/BuildInfoInterface';\nimport { LocalizationInterface } from '../iface/LocalizationInterface';\nimport { LoggerInterface } from '../iface/LoggerInterface';\nimport { PlayerDomInterface } from '../iface/PlayerDomInterface';\nimport { PlayerOptionsInterface } from '../iface/PlayerOptionsInterface';\nimport { PluginServicesInterface } from '../iface/PluginServicesInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { VideoPlayerInterface } from '../iface/VideoPlayerInterface';\nimport * as avia from '../index';\n\nexport class PluginServices implements PluginServicesInterface {\n\n xhr = Deprecated.xhr;\n\n event = {\n dispatchPluginEvent: (data: StrAnyDict) => {\n this.dispatch(data);\n }\n };\n\n util = {\n queryStrFromObj(obj: StrAnyDict, encode?: string[]): string {\n return QueryString.encode(obj);\n }\n };\n\n /**\n * @deprecated\n */\n private vc: cvui.ViewControllerInterface = null;\n private playerApi: VideoPlayerInterface = null;\n private sys: SystemServiceInterface = null;\n private bi: BuildInfoInterface = null;\n private domProxy: PlayerDomProxyInterface = null;\n private playerOpts: PlayerOptionsInterface = null;\n private loc: LocalizationInterface = null;\n private dispatch: (data: StrAnyDict) => void;\n private log: LoggerInterface = null;\n\n constructor(options: PluginServicesOptions) {\n this.playerApi = options.player;\n this.vc = options.viewController;\n this.sys = options.system;\n this.bi = options.buildInfo;\n this.domProxy = options.domProxy;\n this.playerOpts = options.playerOptions;\n this.loc = options.localization;\n this.dispatch = options.dispatch;\n this.log = options.logger;\n }\n\n get player(): VideoPlayerInterface {\n return this.playerApi;\n }\n\n get logger(): LoggerInterface {\n return this.log;\n }\n\n /**\n * @deprecated\n */\n get viewController(): cvui.ViewControllerInterface {\n return this.vc;\n }\n\n get system(): SystemServiceInterface {\n return this.sys;\n }\n\n get appNamespace(): any {\n return this.sys.appNamespace;\n }\n\n get avia() {\n return this.sys.appNamespace as typeof avia;\n }\n\n get playerOptions() {\n return this.playerOpts;\n }\n\n get buildInfo(): BuildInfoInterface {\n return this.bi;\n }\n\n get playerDomProxy(): PlayerDomProxyInterface {\n Deprecated.warn('The PluginService.playerDomProxy method is deprecated. Use PluginService.dom instead. Access to this property will be completely removed April 28th, 2022');\n return this.domProxy;\n }\n\n get localization(): LocalizationInterface {\n return this.loc;\n }\n\n get dom(): PlayerDomInterface {\n const vid = () => {\n return this.domProxy?.getVideo();\n };\n return {\n main: this.domProxy?.getMain(),\n get video() { return vid(); },\n videoContainer: this.domProxy?.getElement(PlayerDom.VIDEO_CONTAINER),\n ccContainer: this.domProxy?.getElement(PlayerDom.CC_CONTAINER),\n adContainer: this.domProxy?.getElement(PlayerDom.AD_CONTAINER),\n adClickEl: this.domProxy?.getElement(PlayerDom.AD_CLICK_EL),\n };\n }\n}\n","import { AppResources } from '../app/AppResources';\nimport { PluginServices } from '../app/PluginServices';\nimport { buildInfo } from '../core/BuildInfo';\nimport { Util } from '../core/Util';\nimport { ScriptLoader } from '../dataservice/ScriptLoader';\nimport { UiMediatorInterface } from '../deprecated/cvui/UiMediatorInterface';\nimport { LogLevel } from '../enum/LogLevel';\nimport { MediatorName } from '../enum/MediatorName';\nimport { ModelName } from '../enum/ModelName';\nimport { NativePlugin } from '../enum/NativePlugin';\nimport { NotificationName } from '../enum/NotificationName';\nimport { PluginPriority } from '../enum/PluginPriority';\nimport { ProxyName } from '../enum/ProxyName';\nimport { ServiceName } from '../enum/ServiceName';\nimport { LoadPluginsNotificationInterface, NotificationInterface, PlayerDomProxyInterface, SystemServiceInterface } from '../iface';\nimport { PluginConfigInterface } from '../iface/PluginConfigInterface';\nimport { PluginInterface } from '../iface/PluginInterface';\nimport { PluginOptionsInterface } from '../iface/PluginOptionsInterface';\nimport { PluginServicesInterface } from '../iface/PluginServicesInterface';\nimport { PresentationStateInterface } from '../iface/PresentationStateInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { LocalizationProxy } from '../model/LocalizationProxy';\nimport { PlayerOptions } from '../model/vo/PlayerOptions';\nimport { Utils } from '../util/Utils';\nimport { AppMediator } from './AppMediator';\nimport { LogAwareMediator } from './LogAwareMediator';\n\n\nexport class PluginMediator extends LogAwareMediator {\n private plugins: StrAnyDict = {};\n private pendingLoads: PluginConfigInterface[] = null;\n private services: PluginServicesInterface = null;\n private diagnosticPlugin: any = null;\n private diagnosticPluginVisible: boolean = false;\n\n constructor(name: string) {\n super(name);\n }\n\n override onRemove(): void {\n Object.keys(this.plugins).forEach(name => {\n try {\n this.killPlugin(name);\n }\n catch (error) {\n this.logger.warn(`Error destroying plugin: ${name}`, error);\n }\n });\n\n this.plugins = null;\n this.pendingLoads = null;\n this.services = null;\n this.diagnosticPlugin = null;\n\n super.onRemove();\n }\n\n removePlugin(name: string): void {\n this.killPlugin(name);\n }\n\n getPlugin(name: string): any {\n return this.plugins[name] || null;\n }\n\n async loadPlugin(cfg: PluginConfigInterface): Promise {\n const n = await this.createPlugin(cfg);\n if (cfg.name == NativePlugin.DIAGNOSTIC) {\n this.registerDiagnosticPlugin(cfg.name);\n }\n return n;\n }\n\n toggleDiagnosticPlugin() {\n if (!this.diagnosticPlugin) {\n const doNothing = this.createDiagnosticPlugin();\n if (doNothing) {\n return;\n }\n }\n\n this.diagnosticPluginVisible = !this.diagnosticPluginVisible;\n this.diagnosticPluginVisible ? this.diagnosticPlugin.show() : this.diagnosticPlugin.hide();\n }\n\n override listNotificationInterests(): string[] {\n return [\n NotificationName.LOAD_PLUGINS,\n NotificationName.AD_BREAK_START,\n NotificationName.CONTENT_START,\n NotificationName.REMOVE_PLUGIN,\n ];\n }\n\n handleNotification(notification: NotificationInterface): void {\n switch (notification.name) {\n\n case NotificationName.LOAD_PLUGINS:\n this.loadPlugins(notification.body);\n break;\n\n case NotificationName.REMOVE_PLUGIN:\n this.removePlugin(notification.body.name);\n break;\n\n // intentional fall-thru\n case NotificationName.AD_BREAK_START:\n case NotificationName.CONTENT_START:\n this.loadPendingPlugins();\n break;\n }\n }\n\n createPluginServices(): PluginServicesInterface {\n const am = this.facade.retrieveMediator(MediatorName.APPLICATION);\n const uim = this.facade.retrieveMediator(MediatorName.UI);\n\n return new PluginServices({\n player: am.getAppApi(),\n viewController: uim ? uim.viewController : null,\n buildInfo,\n system: this.facade.retrieveService(ServiceName.System),\n domProxy: this.facade.retrieveProxy(ProxyName.PlayerDomProxy),\n localization: (this.facade.retrieveProxy(ProxyName.LocalizationProxy)).getApi(),\n playerOptions: this.playerOptions,\n dispatch: (data: StrAnyDict) => {\n am.dispatchPluginEvent(data);\n },\n logger: this.logger,\n });\n }\n\n private registerDiagnosticPlugin(name: string) {\n this.diagnosticPlugin = this.plugins[name];\n this.diagnosticPluginVisible = true;\n }\n\n private get playerOptions() {\n return this.getModel(ModelName.PlayerOptions).data;\n }\n\n private initPluginServices(): void {\n if (this.services) {\n return;\n }\n\n this.services = this.createPluginServices();\n }\n\n private createDiagnosticPlugin(): boolean {\n const dCfg = Utils.getNativePluginConfig(NativePlugin.DIAGNOSTIC, this.playerOptions);\n if (!dCfg) {\n return true;\n }\n\n if (this.plugins[dCfg.name]) {\n this.registerDiagnosticPlugin(dCfg.name);\n return false;\n }\n\n this.initPluginServices();\n this.createPlugin(dCfg).then(() => this.registerDiagnosticPlugin(dCfg.name));\n\n return true;\n }\n\n private createPlugins(plugins: PluginConfigInterface[], callback?: () => void): Promise {\n return Promise\n .all(plugins.map(plugin => this.createPlugin(plugin)))\n .then(() => callback?.());\n }\n\n private async createPlugin(cfg: PluginConfigInterface): Promise {\n if (cfg.url) {\n try {\n await ScriptLoader.load({\n url: cfg.url,\n errorRecovery: this.playerOptions.networkErrorRecovery,\n timeout: (cfg.loadTimeout != null) ? cfg.loadTimeout : this.playerOptions.networkTimeout,\n });\n }\n catch (error) {\n this.log(LogLevel.ERROR, AppResources.messages.PLUGIN_LOAD_ERROR, error);\n return;\n }\n }\n\n const name = cfg.name;\n const opts = Util.assign({ name }, cfg.options) as PluginOptionsInterface;\n let plugin;\n\n if (cfg.factory) {\n plugin = await cfg.factory(this.services, opts);\n if (Util.isFunction(plugin)) {\n plugin = { destroy: plugin };\n }\n }\n else {\n const ref: any = cfg.classRef ? cfg.classRef : Utils.classFromQualifiedName(cfg.qualifiedClassName);\n if (ref) {\n plugin = (Util.isFunction(ref.onRegister)) ? ref : new ref();\n await plugin.onRegister?.(this.services.player, opts, this.services);\n }\n }\n\n if (!plugin) {\n return;\n }\n\n this.plugins[name] = plugin;\n\n this.log(LogLevel.INFO, `Created plugin '${name}'`);\n return plugin;\n }\n\n private killPlugin(name: string): void {\n const plugin = this.plugins[name];\n\n if (!plugin) {\n return;\n }\n\n if (Util.isFunction(plugin.destroy)) {\n plugin.destroy();\n }\n\n delete this.plugins[name];\n }\n\n private loadPendingPlugins(): void {\n if (!this.pendingLoads) {\n return;\n }\n\n this.createPlugins(this.pendingLoads);\n this.pendingLoads = null;\n }\n\n private loadPlugins(obj: LoadPluginsNotificationInterface): void {\n const plugins = obj.plugins || this.playerOptions.plugins;\n const ps = this.getModel(ModelName.PresentationState) as PresentationStateInterface;\n const notStarted = !ps.started;\n const callback = obj.callback;\n\n if (!plugins?.length) {\n callback?.();\n return;\n }\n\n this.initPluginServices();\n\n const low = plugins.filter(plugin => plugin.priority === PluginPriority.LOW);\n const high = plugins.filter(plugin => plugin.priority !== PluginPriority.LOW);\n\n if (notStarted) {\n this.pendingLoads = low;\n }\n\n const queue = (notStarted) ? high : low.concat(high);\n\n this.createPlugins(queue, callback);\n }\n}\n","import { LogLevel } from '../../enum/LogLevel';\nimport { MediatorName } from '../../enum/MediatorName';\nimport { FacadeInterface, NotificationInterface } from '../../iface';\nimport { PluginMediator } from '../../view/PluginMediator';\nimport { LogAwareSimpleCommand } from '../LogAwareSimpleCommand';\n\n\nexport class PrepPluginsCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface) {\n const f: FacadeInterface = this.facade;\n f.registerMediator(new PluginMediator(MediatorName.PLUGIN_MEDIATOR));\n\n this.log(LogLevel.DEBUG, 'Plugins Prepared');\n }\n}\n","import { LogLevel } from '../../enum/LogLevel';\nimport { MediatorName } from '../../enum/MediatorName';\nimport { FacadeInterface, NotificationInterface } from '../../iface';\nimport { TimerMediator } from '../../view/TimerMediator';\nimport { LogAwareSimpleCommand } from '../LogAwareSimpleCommand';\n\n\nexport class PrepTimerCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface) {\n const f: FacadeInterface = this.facade;\n\n f.registerMediator(new TimerMediator(MediatorName.TIMER_MEDIATOR));\n\n this.log(LogLevel.DEBUG, 'Timer mediator registered');\n }\n}\n","import { Util } from '../core/Util';\nimport { ServiceName } from '../enum/ServiceName';\nimport { KeyCommandDef, NotificationInterface, SystemServiceInterface } from '../iface';\nimport { LogAwareMediator } from './LogAwareMediator';\n\n\nexport abstract class AbstractKeyCommandMediator extends LogAwareMediator {\n\n protected defs: KeyCommandDef[] = [];\n\n private pScope: HTMLElement | Document = null;\n private keyUpHandler: EventListenerOrEventListenerObject = null;\n private keyDownHandler: EventListenerOrEventListenerObject = null;\n private pDisabled: boolean = false;\n private suppressed: boolean = false;\n private scopeActive: boolean | null = null;\n\n constructor(name: string) {\n super(name);\n }\n\n override onRemove() {\n this.activateScope(false);\n this.pScope = null;\n const mt = function (e: KeyboardEvent) { };\n this.keyUpHandler = mt;\n this.keyDownHandler = mt;\n }\n\n get disabled(): boolean {\n return this.suppressed || this.pDisabled;\n }\n\n set scope(scp: HTMLElement | Document) {\n if (this.suppressed) {\n return;\n }\n\n if (this.pScope && this.scopeActive) {\n this.activateScope(false);\n }\n\n this.pScope = scp;\n\n const active = !!this.scopeActive || this.scopeActive === null;\n\n active && this.activateScope(true);\n }\n\n registerCommandDef(cmdDef: KeyCommandDef) {\n if (this.suppressed) { return; }\n\n this.defs.push(cmdDef);\n }\n\n disable() {\n if (this.suppressed) { return; }\n this.scopeActive && this.activateScope(false);\n this.pDisabled = true;\n }\n\n enable() {\n if (this.suppressed) { return; }\n !this.scopeActive && this.activateScope(true);\n this.pDisabled = false;\n }\n\n protected abstract hKeyUp(e: KeyboardEvent): void;\n\n protected abstract hKeyDown(e: KeyboardEvent): void;\n\n validatePrimaryKey(def: KeyCommandDef, e: KeyboardEvent): boolean {\n const k = e.key,\n kl = Util.isString(k) && k.toLowerCase(),\n kc = e.keyCode;\n\n if (!k && !kc) { return false; }\n\n const hasKey = def.primaryKey === k || def.primaryKey === kl || def.keyCode === kc;\n\n return hasKey;\n }\n\n getCommand(e: KeyboardEvent, checkModifiers: boolean = true): KeyCommandDef | null {\n let i = this.defs.length,\n def = null,\n mods, d;\n\n while (i--) {\n d = this.defs[i];\n if (this.validatePrimaryKey(d, e)) {\n mods = !checkModifiers || this.hasRequiredModifiers(d, e);\n if (mods) {\n def = d;\n break;\n }\n }\n }\n\n return def;\n }\n\n /**\n * Checks if required modifier keys are pressed.\n *\n * Using bitwise XOR; any mismatch will yield a '1'.\n * e.g. 1 ^ 1 = 0; 1 ^ 0 = 1; 0 ^ 0 = 0\n * \n * Note that JS allows booleans in XOR expressions, but TS doesn't,\n * so bool values are converted to 1 / 0\n */\n hasRequiredModifiers(def: KeyCommandDef, event: KeyboardEvent): boolean {\n const c1 = !!((def.requireCtrl ? 1 : 0) ^ (event.ctrlKey ? 1 : 0)),\n c2 = !!((def.requireShift ? 1 : 0) ^ (event.shiftKey ? 1 : 0)),\n c3 = !!((def.requireMeta ? 1 : 0) ^ (event.metaKey ? 1 : 0));\n\n // each of the above must be FALSE to pass test\n return !c1 && !c2 && !c3;\n }\n\n activateScope(flag: boolean): void {\n if (!this.pScope || this.suppressed) {\n return;\n }\n\n const m = flag ? 'addEventListener' : 'removeEventListener';\n this.pScope[m](\"keyup\", this.keyUpHandler);\n this.pScope[m](\"keydown\", this.keyDownHandler);\n\n this.scopeActive = flag;\n }\n\n handleNotification(notification: NotificationInterface): void {\n // no impl\n }\n\n override onRegister(): void {\n super.onRegister();\n\n const sys = this.facade.retrieveService(ServiceName.System);\n if (!sys.document || sys.isTv || sys.isWebMaf) {\n this.suppressed = true;\n return;\n }\n\n this.keyDownHandler = (e: KeyboardEvent) => this.hKeyDown(e);\n this.keyUpHandler = (e: KeyboardEvent) => this.hKeyUp(e);\n }\n}\n","import { AppResources } from '../app/AppResources';\nimport { Util } from '../core/Util';\nimport { UiMediatorInterface } from '../deprecated/cvui/UiMediatorInterface';\nimport { AccessibilityAction } from '../enum/AccessibilityAction';\nimport { MediatorName } from '../enum/MediatorName';\nimport { NonPrintingKey } from '../enum/NonPrintingKey';\nimport { NotificationName } from '../enum/NotificationName';\nimport { NotificationType } from '../enum/NotificationType';\nimport { StreamType } from '../enum/StreamType';\nimport { KeyCommandDef } from '../iface';\nimport { VideoPlayerInterface } from '../iface/VideoPlayerInterface';\nimport { Notification } from '../mvc/Notification';\nimport { KeyCode } from '../util/KeyCode';\nimport { AbstractKeyCommandMediator } from './AbstractKeyCommandMediator';\nimport { AppMediator } from './AppMediator';\n\n\n\nexport class AccessibilityKeyCommandMediator extends AbstractKeyCommandMediator {\n\n /**\n * @deprecated\n */\n private uim: UiMediatorInterface = null;\n private vpi: VideoPlayerInterface = null;\n private seekMoving: boolean = false;\n private seekEnabled: boolean = false;\n\n private VOLUME_INCREMENT: number = 0.05;\n private SEEK_FACTOR_DISCRETE: number = 0.05;\n private SEEK_INCREMENT_CONTINUOUS: number = 0.001;\n\n private tZero: number = 0; // used for seek acceleration\n private timeout: number;\n\n constructor(name: string) {\n super(name);\n }\n\n override onRemove(): void {\n clearTimeout(this.timeout);\n this.vpi = null;\n this.uim = null;\n super.onRemove();\n }\n\n protected isControl(element: Element): boolean {\n // TODO: We need a more comprehensive way to do this, or a public\n // API that the UI can call to disable/enable hotkeys\n return element.nodeName == 'BUTTON' || element.nodeName == 'INPUT';\n }\n\n protected hKeyUp(e: KeyboardEvent): void {\n if (this.disabled || this.isControl(document.activeElement)) {\n return;\n }\n\n if (!this.seekMoving) {\n this.processKeyEvent(e);\n }\n else {\n this.disengageSeek();\n }\n }\n\n protected hKeyDown(e: KeyboardEvent): void {\n const k = e.key,\n kc = e.keyCode,\n up = k === NonPrintingKey.ARROW_UP || kc === KeyCode.UP_ARROW,\n down = k === NonPrintingKey.ARROW_DOWN || kc === KeyCode.DOWN_ARROW,\n space = k === NonPrintingKey.SPACE || kc === KeyCode.SPACE,\n back = k === NonPrintingKey.ARROW_LEFT || kc === KeyCode.LEFT_ARROW,\n fwd = k === NonPrintingKey.ARROW_RIGHT || kc === KeyCode.RIGHT_ARROW,\n rep = e.repeat;\n\n // block default scrolling behavior when player has focus\n if ((fwd || back || up || down || space) && !this.isControl(document.activeElement)) {\n e.preventDefault();\n return;\n }\n\n if (!this.shouldSeekContinuous()) {\n return;\n }\n\n if (!back && !fwd) { return; }\n\n if (!this.seekMoving && rep) {\n this.tZero = Date.now();\n this.engageSeek();\n }\n\n else if (this.seekMoving && rep) {\n const d = (Date.now() - this.tZero) * .001,\n n = d >= 5 ? 3 : (d >= 3 ? 2 : 1), // after 3 seconds, move by 2x, after 5 sec, use 3x\n mul = back ? - 1 : 1;\n\n this.moveSeekBy(mul * this.SEEK_INCREMENT_CONTINUOUS * n);\n }\n\n this.stopEvent(e);\n }\n\n private engageSeek() {\n this.uim && this.uim.engageSeek();\n this.seekMoving = true;\n }\n\n private disengageSeek() {\n this.uim && this.uim.disengageSeek();\n this.seekMoving = false;\n this.tZero = null;\n\n this.timeout = setTimeout(() => {\n this.uim && this.uim.forceControlsVisible(false);\n }, 500);\n }\n\n private moveSeekBy(inc: number): void {\n if (this.uim) {\n this.uim.moveSeekBy(inc);\n }\n }\n\n private shouldSeekContinuous(): boolean {\n const viewOk = this.uim && this.uim.uiIsStandardView();\n\n return viewOk && !this.disabled && this.seekEnabled;\n }\n\n private get player(): VideoPlayerInterface {\n if (!this.vpi) {\n const appMed = this.facade.retrieveMediator(MediatorName.APPLICATION);\n this.vpi = appMed.getAppApi();\n }\n\n return this.vpi;\n }\n\n private stopEvent(e: Event): void {\n e.stopImmediatePropagation();\n e.preventDefault();\n }\n\n private processKeyEvent(e: KeyboardEvent): void {\n if (\n e.ctrlKey\n || e.shiftKey\n || e.metaKey\n || e.key === NonPrintingKey.META\n || e.key === NonPrintingKey.SHIFT\n || e.key === NonPrintingKey.CONTROL\n\n ) {\n return null;\n }\n\n const cmdDef = this.getCommand(e, false);\n if (!cmdDef) {\n return;\n }\n\n this.doAction(cmdDef);\n this.stopEvent(e);\n }\n\n private doAction(cmdDef: KeyCommandDef): void {\n const a = cmdDef.action;\n let cv, v, mul;\n\n switch (a) {\n\n case AccessibilityAction.INCREASE_VOLUME:\n case AccessibilityAction.DECREASE_VOLUME:\n mul = a === AccessibilityAction.DECREASE_VOLUME ? - 1 : 1;\n cv = this.player.volume;\n v = Util.clampValue(cv + (this.VOLUME_INCREMENT * mul), 0, 1);\n\n if (this.player.muted && v > 0) {\n this.player.muted = false;\n }\n\n this.player.volume = v;\n this.uim && this.uim.setAccVolumeLevelIndicator(v);\n this.notify({\n action: a,\n value: this.player.volume\n });\n break;\n\n case AccessibilityAction.SEEK_BACK:\n case AccessibilityAction.SEEK_FORWARD:\n if (!this.seekEnabled) { return; }\n\n const d = this.player.contentDuration;\n mul = a === AccessibilityAction.SEEK_BACK ? - 1 : 1;\n cv = this.player.contentTime;\n\n if (!d || isNaN(d) || (mul === 1 && this.player.streamType === StreamType.DVR && this.player.isPlayingLive)) {\n return;\n }\n\n v = Util.clampValue(cv + (this.SEEK_FACTOR_DISCRETE * mul * d), 0, d);\n\n this.setSeekNotice(v, mul);\n this.notify({\n action: a,\n position: v,\n duration: d\n });\n this.player.seek(v);\n\n break;\n\n case AccessibilityAction.ENTER_FULLSCREEN:\n this.player.enterFullscreen();\n break;\n\n case AccessibilityAction.TOGGLE_PLAY:\n if (this.player.streamType !== StreamType.LIVE) {\n this.player.togglePlayPause();\n }\n break;\n\n case AccessibilityAction.TOGGLE_MUTE:\n this.player.muted = !this.player.muted;\n this.notify({\n action: a,\n muted: this.player.muted\n });\n break;\n\n case AccessibilityAction.TOGGLE_TT:\n this.player.textTrackEnabled = !this.player.textTrackEnabled;\n break;\n\n case AccessibilityAction.PLAYLIST_NEXT:\n case AccessibilityAction.PLAYLIST_PREV:\n mul = a == AccessibilityAction.PLAYLIST_PREV ? -1 : 1;\n if (this.player.playlist.length > 1) {\n mul < 0 ? this.player.playlist.prev() : this.player.playlist.next();\n }\n break;\n\n case AccessibilityAction.STOP:\n if (this.player.streamType === StreamType.LIVE) {\n this.player.stop();\n }\n else {\n this.player.pause();\n }\n break;\n }\n }\n\n private setSeekNotice(v: number, dir: number) {\n if (!this.uim) { return; }\n\n const t = Util.secToHms(v);\n const d = Util.secToHms(this.player.contentDuration);\n const msg = dir > 0 ? `>  ${t} / ${d}` : `${t} / ${d}  <`;\n\n this.uim.setSeekNotice(msg, dir);\n }\n\n private notify(data: any) {\n this.sendNotification(NotificationName.HOTKEY_ACTION, data, NotificationType.INTERNAL);\n }\n\n override handleNotification(notification: Notification) {\n const n = notification.name,\n nn = NotificationName;\n\n switch (n) {\n case nn.AD_BREAK_START:\n this.seekEnabled = false;\n this.enable();\n\n\n break;\n case nn.CONTENT_COMPLETE:\n this.seekEnabled = false;\n this.disable();\n break;\n\n case nn.CONTENT_START:\n case nn.CONTENT_SEGMENT_START:\n this.enable();\n this.seekEnabled = this.player.streamType !== StreamType.LIVE;\n break;\n }\n }\n\n override listNotificationInterests(): NotificationName[] {\n const n = NotificationName;\n return [\n n.AD_BREAK_START,\n n.CONTENT_START,\n n.CONTENT_SEGMENT_START,\n n.CONTENT_COMPLETE,\n ];\n }\n\n override onRegister(): void {\n super.onRegister();\n\n const acd = AppResources.accessibilityKeyCmdDefs;\n acd.forEach(c => this.registerCommandDef(c));\n\n this.uim = this.facade.retrieveMediator(MediatorName.UI) || null;\n }\n}\n","/*!\n* screenfull\n* v5.1.0 - 2020-12-24\n* (c) Sindre Sorhus; MIT License\n*/\n(function () {\n\t'use strict';\n\n\tvar document = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {};\n\tvar isCommonjs = typeof module !== 'undefined' && module.exports;\n\n\tvar fn = (function () {\n\t\tvar val;\n\n\t\tvar fnMap = [\n\t\t\t[\n\t\t\t\t'requestFullscreen',\n\t\t\t\t'exitFullscreen',\n\t\t\t\t'fullscreenElement',\n\t\t\t\t'fullscreenEnabled',\n\t\t\t\t'fullscreenchange',\n\t\t\t\t'fullscreenerror'\n\t\t\t],\n\t\t\t// New WebKit\n\t\t\t[\n\t\t\t\t'webkitRequestFullscreen',\n\t\t\t\t'webkitExitFullscreen',\n\t\t\t\t'webkitFullscreenElement',\n\t\t\t\t'webkitFullscreenEnabled',\n\t\t\t\t'webkitfullscreenchange',\n\t\t\t\t'webkitfullscreenerror'\n\n\t\t\t],\n\t\t\t// Old WebKit\n\t\t\t[\n\t\t\t\t'webkitRequestFullScreen',\n\t\t\t\t'webkitCancelFullScreen',\n\t\t\t\t'webkitCurrentFullScreenElement',\n\t\t\t\t'webkitCancelFullScreen',\n\t\t\t\t'webkitfullscreenchange',\n\t\t\t\t'webkitfullscreenerror'\n\n\t\t\t],\n\t\t\t[\n\t\t\t\t'mozRequestFullScreen',\n\t\t\t\t'mozCancelFullScreen',\n\t\t\t\t'mozFullScreenElement',\n\t\t\t\t'mozFullScreenEnabled',\n\t\t\t\t'mozfullscreenchange',\n\t\t\t\t'mozfullscreenerror'\n\t\t\t],\n\t\t\t[\n\t\t\t\t'msRequestFullscreen',\n\t\t\t\t'msExitFullscreen',\n\t\t\t\t'msFullscreenElement',\n\t\t\t\t'msFullscreenEnabled',\n\t\t\t\t'MSFullscreenChange',\n\t\t\t\t'MSFullscreenError'\n\t\t\t]\n\t\t];\n\n\t\tvar i = 0;\n\t\tvar l = fnMap.length;\n\t\tvar ret = {};\n\n\t\tfor (; i < l; i++) {\n\t\t\tval = fnMap[i];\n\t\t\tif (val && val[1] in document) {\n\t\t\t\tfor (i = 0; i < val.length; i++) {\n\t\t\t\t\tret[fnMap[0][i]] = val[i];\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t})();\n\n\tvar eventNameMap = {\n\t\tchange: fn.fullscreenchange,\n\t\terror: fn.fullscreenerror\n\t};\n\n\tvar screenfull = {\n\t\trequest: function (element, options) {\n\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\tvar onFullScreenEntered = function () {\n\t\t\t\t\tthis.off('change', onFullScreenEntered);\n\t\t\t\t\tresolve();\n\t\t\t\t}.bind(this);\n\n\t\t\t\tthis.on('change', onFullScreenEntered);\n\n\t\t\t\telement = element || document.documentElement;\n\n\t\t\t\tvar returnPromise = element[fn.requestFullscreen](options);\n\n\t\t\t\tif (returnPromise instanceof Promise) {\n\t\t\t\t\treturnPromise.then(onFullScreenEntered).catch(reject);\n\t\t\t\t}\n\t\t\t}.bind(this));\n\t\t},\n\t\texit: function () {\n\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\tif (!this.isFullscreen) {\n\t\t\t\t\tresolve();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar onFullScreenExit = function () {\n\t\t\t\t\tthis.off('change', onFullScreenExit);\n\t\t\t\t\tresolve();\n\t\t\t\t}.bind(this);\n\n\t\t\t\tthis.on('change', onFullScreenExit);\n\n\t\t\t\tvar returnPromise = document[fn.exitFullscreen]();\n\n\t\t\t\tif (returnPromise instanceof Promise) {\n\t\t\t\t\treturnPromise.then(onFullScreenExit).catch(reject);\n\t\t\t\t}\n\t\t\t}.bind(this));\n\t\t},\n\t\ttoggle: function (element, options) {\n\t\t\treturn this.isFullscreen ? this.exit() : this.request(element, options);\n\t\t},\n\t\tonchange: function (callback) {\n\t\t\tthis.on('change', callback);\n\t\t},\n\t\tonerror: function (callback) {\n\t\t\tthis.on('error', callback);\n\t\t},\n\t\ton: function (event, callback) {\n\t\t\tvar eventName = eventNameMap[event];\n\t\t\tif (eventName) {\n\t\t\t\tdocument.addEventListener(eventName, callback, false);\n\t\t\t}\n\t\t},\n\t\toff: function (event, callback) {\n\t\t\tvar eventName = eventNameMap[event];\n\t\t\tif (eventName) {\n\t\t\t\tdocument.removeEventListener(eventName, callback, false);\n\t\t\t}\n\t\t},\n\t\traw: fn\n\t};\n\n\tif (!fn) {\n\t\tif (isCommonjs) {\n\t\t\tmodule.exports = {isEnabled: false};\n\t\t} else {\n\t\t\twindow.screenfull = {isEnabled: false};\n\t\t}\n\n\t\treturn;\n\t}\n\n\tObject.defineProperties(screenfull, {\n\t\tisFullscreen: {\n\t\t\tget: function () {\n\t\t\t\treturn Boolean(document[fn.fullscreenElement]);\n\t\t\t}\n\t\t},\n\t\telement: {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn document[fn.fullscreenElement];\n\t\t\t}\n\t\t},\n\t\tisEnabled: {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\t// Coerce to boolean in case of old WebKit\n\t\t\t\treturn Boolean(document[fn.fullscreenEnabled]);\n\t\t\t}\n\t\t}\n\t});\n\n\tif (isCommonjs) {\n\t\tmodule.exports = screenfull;\n\t} else {\n\t\twindow.screenfull = screenfull;\n\t}\n})();\n","\nexport enum DashEmsg {\n GOOGLE_DAI = 'urn:google:dai:2018' \n} ","import screenfull from 'screenfull';\nimport { Util } from '../core/Util';\nimport { Browser } from '../enum/Browser';\nimport { ModelName } from '../enum/ModelName';\nimport { NotificationName } from '../enum/NotificationName';\nimport { NotificationType } from '../enum/NotificationType';\nimport { Os } from '../enum/Os';\nimport { ProxyName } from '../enum/ProxyName';\nimport { NotificationInterface, PlayerDomProxyInterface } from '../iface';\nimport { PlayerOptionsInterface } from '../iface/PlayerOptionsInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { LogAwareMediator } from './LogAwareMediator';\n\n\n// screenfull publishes a type declaration, but for some \n// reason the only property on it is 'isEnabled'.\ninterface ScreenfullInterface {\n isEnabled: boolean;\n isFullscreen: boolean;\n raw: StrAnyDict;\n exit(): void;\n on(e: string, h: VoidFunction): void;\n off(e: string, h: VoidFunction): void;\n request(l: HTMLElement): void;\n toggle(): void;\n onchange(e: string, h: VoidFunction): void;\n onerror(e: string, h: VoidFunction): void;\n}\n\ninterface IosFsPropsInterface extends StrAnyDict {\n ENTER_EVENT: string;\n EXIT_EVENT: string;\n ENTER_METHOD: string;\n EXIT_METHOD: string;\n SUPPORTED: string;\n}\n\nexport class FullscreenMediator extends LogAwareMediator {\n\n private isFullscreen: boolean = false;\n private fsElement: HTMLElement = null;\n private enabled: boolean = false;\n private pIsAndroidFirefox: boolean | null = null;\n private isIos: boolean = false;\n private fsMgr: ScreenfullInterface = null;\n private changeHandler: (e?: Event) => void;\n private useCustomFullscreen = true;\n\n private iosPropNames: IosFsPropsInterface = {\n ENTER_EVENT: 'webkitbeginfullscreen',\n EXIT_EVENT: 'webkitendfullscreen',\n ENTER_METHOD: 'webkitEnterFullscreen',\n EXIT_METHOD: 'webkitExitFullscreen',\n SUPPORTED: 'webkitSupportsFullscreen',\n };\n\n constructor(name: string, viewControl?: any) {\n super(name, viewControl);\n this.fsMgr = screenfull;\n this.changeHandler = (e?: Event) => this.hChange(e);\n }\n\n set fullscreenElement(el: HTMLElement) {\n if (!(el instanceof HTMLElement)) {\n return;\n }\n // VTG-2222: support alt fs element for non-mobile\n if (!this.systemService.isIos && !this.systemService.isAndroid) {\n this.fsElement = el;\n }\n }\n\n get fullscreenElement(): HTMLElement {\n return this.fsElement;\n }\n\n override onRemove(): void {\n if (this.isIos && this.fsElement) {\n this.fsElement.removeEventListener(this.iosPropNames.ENTER_EVENT, this.changeHandler);\n this.fsElement.removeEventListener(this.iosPropNames.EXIT_EVENT, this.changeHandler);\n }\n\n // Service #185: 'off' method undefined on iPhone (cause ?)\n if (this.fsMgr && Util.isFunction(this.fsMgr.off)) {\n this.fsMgr.off('change', this.changeHandler);\n }\n\n this.fsElement = null;\n this.fsMgr = null;\n\n super.onRemove();\n }\n\n enter(): void {\n if (!this.enabled) { return; }\n\n if (this.useCustomFullscreen) {\n this.isFullscreen = true;\n this.sendFullscreenNotification();\n\n return;\n }\n\n this.isIos ? this.enterFsIos() : this.fsMgr.request(this.fsElement);\n }\n\n exit(): void {\n if (!this.enabled) { return; }\n\n if (this.useCustomFullscreen) {\n this.isFullscreen = false;\n this.sendFullscreenNotification();\n\n return;\n }\n\n this.isIos ? this.exitFsIos() : this.fsMgr.exit();\n }\n\n isFullScreenPermitted(): boolean {\n return this.enabled;\n }\n\n isFullScreen(): boolean {\n return this.isFullscreen;\n }\n\n ///////////////////////////////////\n // PRIVATE / MVC\n\n private get isAndroidFirefox(): boolean {\n if (this.pIsAndroidFirefox === null) {\n const sysSvc = this.systemService;\n this.pIsAndroidFirefox = sysSvc.os === Os.ANDROID && sysSvc.browser === Browser.FIREFOX;\n }\n return this.pIsAndroidFirefox;\n }\n\n handleNotification(notification: NotificationInterface): void {\n const n = notification.name;\n\n if (n === NotificationName.VIDEO_LOADED_METADATA) {\n this.handleMetadataLoaded();\n return;\n }\n\n if (!this.enabled) { return; }\n\n const enter = n === NotificationName.ENTER_FULLSCREEN_REQUEST;\n enter ? this.enter() : this.exit();\n }\n\n override listNotificationInterests(): string[] {\n return [\n NotificationName.VIDEO_LOADED_METADATA,\n NotificationName.ENTER_FULLSCREEN_REQUEST,\n NotificationName.EXIT_FULLSCREEN_REQUEST\n ];\n }\n\n private handleMetadataLoaded(): void {\n this.enabled = this.enabled || this.webkitIosEnabled();\n this.enabled && this.sendNotification(NotificationName.FULLSCREEN_AVAILABLE, null);\n }\n\n private hChange(e?: Event): void {\n this.isFullscreen = this.isIos ? this.checkWebkitIsoState(e) : (screenfull).isFullscreen;\n\n if (this.isAndroidFirefox) {\n // controls must be explicitly set for this case\n this.isFullscreen && this.fsElement.setAttribute('controls', '');\n !this.isFullscreen && this.fsElement.removeAttribute('controls');\n }\n\n this.sendFullscreenNotification();\n }\n\n private sendFullscreenNotification() {\n this.sendNotification(\n NotificationName.FULLSCREEN_CHANGE,\n { isFullscreen: this.isFullscreen },\n NotificationType.INTERNAL\n );\n }\n\n private enterFsIos(): void {\n (this.fsElement)[this.iosPropNames.ENTER_METHOD]();\n }\n\n private exitFsIos(): void {\n (this.fsElement)[this.iosPropNames.EXIT_METHOD]();\n }\n\n private webkitIosEnabled(): boolean {\n return this.systemService.isIos && (this.fsElement)[this.iosPropNames.SUPPORTED];\n }\n\n private checkWebkitIsoState(e: Event): boolean {\n return e.type === this.iosPropNames.ENTER_EVENT;\n }\n\n override onRegister(): void {\n this.useCustomFullscreen = !(this.getModel(ModelName.PlayerOptions) as PlayerOptionsInterface).useNativeFullscreen;\n\n if (this.useCustomFullscreen) {\n this.enabled = true;\n return;\n }\n\n const sys = this.systemService,\n dp = this.facade.retrieveProxy(ProxyName.PlayerDomProxy);\n\n // On iOS and Android devices, use native fullscreen; i.e,\n // the video element itself will be the fullscreen element.\n\n // Android has Fullscreen API support, so we can use \n // 'screenfull' to manage fullscreen state.\n\n // iOS has mixed support for Fullscreen API, but it's easiest\n // to just manage it separately, as if it doesn't, and leave\n // 'screenfull' out of any iOS FS management.\n\n // Note that this approach forces all mobile devices - even those that do\n // have FS API support (Android phones and tablets, iPad) - to use native \n // controls in fullscreen mode, and this is intended (as of may 2020, r 0.10.0).\n if (sys.isIos || sys.isAndroid) {\n this.isIos = sys.isIos;\n this.fsElement = (dp.getVideo());\n }\n else {\n // otherwise, the main container is used as the fullscreen element\n this.fsElement = dp.getMain();\n }\n\n if (!this.isIos && this.fsElement && this.fsMgr.isEnabled) {\n this.enabled = true;\n this.fsMgr.on('change', this.changeHandler);\n }\n else if (this.fsElement && this.isIos) {\n this.fsElement.addEventListener(this.iosPropNames.ENTER_EVENT, this.changeHandler);\n this.fsElement.addEventListener(this.iosPropNames.EXIT_EVENT, this.changeHandler);\n }\n }\n}\n","import { AppResources } from '../app/AppResources';\nimport { NotificationName } from '../enum/NotificationName';\nimport { AbstractKeyCommandMediator } from './AbstractKeyCommandMediator';\n\nexport class UserKeyCommandMediator extends AbstractKeyCommandMediator {\n\n constructor(name: string) {\n super(name);\n }\n\n hKeyUp(e: KeyboardEvent): void {\n const def = this.getCommand(e);\n\n if (def) {\n this.sendNotification(NotificationName.USER_KEY_COMMAND, {\n action: def.action\n });\n }\n }\n\n hKeyDown(e: KeyboardEvent) {\n // no impl\n }\n\n override onRegister(): void {\n super.onRegister();\n\n const ucd = AppResources.userKeyCmdDefs;\n\n let i = ucd.length;\n while (i--) {\n this.registerCommandDef(ucd[i]);\n }\n }\n}\n","import { Deprecated } from '../../deprecated/Deprecated';\nimport { KeyboardScope } from '../../enum/KeyboardScope';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { MediatorName } from '../../enum/MediatorName';\nimport { ProxyName } from '../../enum/ProxyName';\nimport { ServiceName } from '../../enum/ServiceName';\nimport { FacadeInterface, NotificationInterface, SystemServiceInterface } from '../../iface';\nimport { PlayerOptionsInterface } from '../../iface/PlayerOptionsInterface';\nimport { PlayerDomProxy } from '../../model/PlayerDomProxy';\nimport { AccessibilityKeyCommandMediator } from '../../view/AccessibilityKeyCommandMediator';\nimport { FullscreenMediator } from '../../view/FullscreenMediator';\nimport { UserKeyCommandMediator } from '../../view/UserKeyCommandMediator';\nimport { LogAwareSimpleCommand } from '../LogAwareSimpleCommand';\n\n\nexport class PrepViewCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface) {\n const f: FacadeInterface = this.facade,\n sysSvc = f.retrieveService(ServiceName.System),\n playerOpts: PlayerOptionsInterface = notification.body.playerOptions;\n\n if (!sysSvc.global || sysSvc.isWebMaf) {\n this.log(LogLevel.INFO, 'Skipping view creation');\n return;\n }\n\n // ui\n const cvui = playerOpts?.uiConfig?.cvui || sysSvc.global.cvui;\n if (!playerOpts.useNativeControls && cvui) {\n Deprecated.createUi(this.facade, cvui, sysSvc, playerOpts);\n }\n else if (!playerOpts.useNativeControls) {\n this.log(LogLevel.INFO, 'PrepView: No UI specified.');\n const pdp = f.retrieveProxy(ProxyName.PlayerDomProxy) as PlayerDomProxy;\n pdp.removePanelContainer();\n }\n\n // fullscreen\n if (!sysSvc.isTv) {\n f.registerMediator(new FullscreenMediator(MediatorName.FULLSCREEN));\n }\n\n const kScope = this.getScopeForKeys(playerOpts.overrides && playerOpts.overrides.keyboardScope);\n\n if (kScope !== KeyboardScope.NONE) {\n // accessibility key command mediator\n const akm = new AccessibilityKeyCommandMediator(MediatorName.ACC_KEY_CMD_MEDIATOR);\n f.registerMediator(akm);\n\n // user key commands\n const ukm = new UserKeyCommandMediator(MediatorName.KEY_COMMAND);\n f.registerMediator(ukm);\n\n // set key handling scope\n const c = this.getPlayerContainer();\n akm.scope = c;\n ukm.scope = c;\n }\n\n this.log(LogLevel.DEBUG, 'View prepared');\n }\n\n getScopeForKeys(scope: string): KeyboardScope {\n switch (scope) {\n case KeyboardScope.PLAYER:\n case KeyboardScope.DOCUMENT:\n case KeyboardScope.NONE:\n return scope;\n }\n\n return KeyboardScope.PLAYER;\n }\n\n getPlayerContainer(): HTMLElement {\n const domProxy = this.facade.retrieveProxy(ProxyName.PlayerDomProxy);\n\n return domProxy.getMain();\n }\n}\n","import { AbstractMacroCommand } from '../../mvc/AbstractMacroCommand';\nimport { CreateDomCommand } from \"./CreateDomCommand\";\nimport { PrepModelCommand } from \"./PrepModelCommand\";\nimport { PrepPluginsCommand } from './PrepPluginsCommand';\nimport { PrepTimerCommand } from './PrepTimerCommand';\nimport { PrepViewCommand } from \"./PrepViewCommand\";\n\nexport class BootCommand extends AbstractMacroCommand {\n\n constructor() {\n super();\n }\n\n initializeMacroCommand(): void {\n this.addSubCommand(PrepModelCommand);\n this.addSubCommand(CreateDomCommand);\n this.addSubCommand(PrepTimerCommand);\n this.addSubCommand(PrepViewCommand);\n this.addSubCommand(PrepPluginsCommand);\n }\n}\n","import { CoreEvent } from '../core/CoreEvent';\nimport { Util } from '../core/Util';\nimport { ErrorCode } from '../enum/ErrorCode';\nimport { ErrorEventInterface } from '../iface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\n\n\nexport class PlayerErrorEvent extends CoreEvent implements ErrorEventInterface {\n\n private pCode: ErrorCode;\n private pMessage: string;\n private pFatal: boolean;\n\n constructor(type: string, code: ErrorCode, msg: string, data: StrAnyDict, fatal: boolean = false) {\n super(type, null, Util.assign({}, data));\n\n this.pCode = code;\n this.pMessage = msg;\n this.pFatal = fatal;\n }\n\n get code(): ErrorCode {\n return this.pCode;\n }\n\n get message(): string {\n return this.pMessage;\n }\n\n get fatal(): boolean {\n return this.pFatal;\n }\n}\n","import { AdErrorEventInterface, ImaAdErrorInfoInterface } from '../deprecated/ad/iface';\nimport { PlayerEvent } from '../enum/PlayerEvent';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { PlayerErrorEvent } from './PlayerErrorEvent';\n\nexport class AdErrorEvent extends PlayerErrorEvent implements AdErrorEventInterface {\n\n private eInfo: ImaAdErrorInfoInterface;\n\n constructor(code: any, msg: string, data: ImaAdErrorInfoInterface, fatal: boolean) {\n super(PlayerEvent.AD_ERROR, code, msg, data, fatal);\n this.eInfo = (this.data || {});\n }\n\n get errorCode(): number | null {\n return this.eInfo.errorCode || null;\n }\n\n get innerErrorMessage(): string {\n return this.eInfo.innerErrorMessage || null;\n }\n\n get sdkVersion(): string {\n return this.eInfo.sdkVersion || null;\n }\n\n get vastErrorCode(): number {\n return this.eInfo.vastErrorCode || null;\n }\n\n get requestContext(): StrAnyDict {\n return this.eInfo.requestContext || null;\n }\n\n get adInfo() {\n return this.eInfo.adInfo || null;\n }\n}\n","import { event_map } from '../app/event_map';\nimport { LogLevel } from '../enum/LogLevel';\nimport { MediatorName } from '../enum/MediatorName';\nimport { NotificationName } from '../enum/NotificationName';\nimport { PlayerEvent } from '../enum/PlayerEvent';\nimport { AdErrorEvent } from '../event/AdErrorEvent';\nimport { PlayerErrorEvent } from '../event/PlayerErrorEvent';\nimport { NotificationInterface } from '../iface';\nimport { ErrorInfoInterface } from '../iface/ErrorInfoInterface';\nimport { AppMediator } from '../view/AppMediator';\nimport { LogAwareSimpleCommand } from \"./LogAwareSimpleCommand\";\n\n\nexport class HandleErrorCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface) {\n const appMed = this.facade.retrieveMediator(MediatorName.APPLICATION);\n\n if (!appMed) {\n return;\n }\n\n const name = notification.name;\n const playerEvt = event_map[name];\n const body = notification.body as ErrorInfoInterface;\n const isAdError = this.isAdRelatedError(name);\n const evt = isAdError ?\n new AdErrorEvent(body.code, body.message, body.data, body.fatal) :\n new PlayerErrorEvent(playerEvt, body.code, body.message, body.data, body.fatal);\n\n this.logger.error(body.message, LogLevel.ERROR);\n\n if (body.fatal) {\n const fe = new PlayerErrorEvent(PlayerEvent.FATAL_ERROR, body.code, body.message, body.data, body.fatal);\n appMed.sendErrorEvent(fe);\n }\n\n appMed.sendErrorEvent(evt);\n\n const e = new PlayerErrorEvent(PlayerEvent.ERROR, body.code, body.message, body.data, body.fatal);\n appMed.sendErrorEvent(e);\n }\n\n isAdRelatedError(name: NotificationName): boolean {\n return name === NotificationName.AD_ERROR ||\n name === NotificationName.AD_STALLED;\n }\n}\n","import { MediatorName } from '../enum/MediatorName';\nimport { ProxyName } from '../enum/ProxyName';\nimport { NotificationInterface } from '../iface';\nimport { ModelCollectionProxy } from '../model/ModelCollectionProxy';\nimport { LogAwareSimpleCommand } from './LogAwareSimpleCommand';\n\nexport class KillResourcePresentationCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface): void {\n // remove preso mediator\n this.facade.removeMediator(MediatorName.PRESENTATION_MEDIATOR);\n\n // remove the resource Proxy\n this.facade.removeProxy(ProxyName.ResourceProxy);\n\n // remove the content state Proxy\n this.facade.removeProxy(ProxyName.ContentPlaybackStateProxy);\n\n // reset models (see ModelCollectionProxy)\n const p = this.facade.retrieveProxy(ProxyName.ModelCollectionProxy);\n p.reset();\n }\n}\n","import { LocalizationId } from \"../enum/LocalizationId\";\nimport { NotificationName } from \"../enum/NotificationName\";\nimport { ProxyName } from \"../enum/ProxyName\";\nimport { NotificationInterface, PlayerDomProxyInterface } from \"../iface\";\nimport { LocalizationProxy } from \"../model/LocalizationProxy\";\nimport { LogAwareSimpleCommand } from \"./LogAwareSimpleCommand\";\n\n\nexport class LocalizationCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface) {\n const { name, body } = notification;\n\n switch (name) {\n\n case NotificationName.CHANGE_LANGUAGE:\n const localization = this.facade.retrieveProxy(ProxyName.LocalizationProxy) as LocalizationProxy;\n const lang = body.value;\n\n localization.changeLanguage(lang).then(() => {\n const dom = this.facade.retrieveProxy(ProxyName.PlayerDomProxy) as PlayerDomProxyInterface;\n if (dom) {\n const main = dom.getMain();\n main.setAttribute('aria-label', localization.localize(LocalizationId.MEDIA_PLAYER));\n main.setAttribute('lang', localization.language);\n }\n this.sendNotification(NotificationName.LANGUAGE_CHANGE, body);\n });\n break;\n\n case NotificationName.LANGUAGE_CHANGE:\n this.sendNotification(NotificationName.APP_EVENT, {\n notificationName: name,\n data: body\n });\n break;\n }\n }\n}\n","import { NotificationName } from '../enum/NotificationName';\nimport { PlayerEvent } from '../enum/PlayerEvent';\nimport { NotificationInterface } from '../iface';\nimport { LogAwareSimpleCommand } from './LogAwareSimpleCommand';\n\n\nexport class MetricCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface): void {\n const { body } = notification;\n\n // TODO: Record Metric to MetricProxy\n\n this.sendNotification(NotificationName.APP_EVENT, {\n type: PlayerEvent.METRIC,\n data: body,\n });\n }\n}\n","import { Util } from '../core/Util';\nimport { UiMediatorInterface } from '../deprecated/cvui/UiMediatorInterface';\nimport { Device } from '../enum/Device';\nimport { LogLevel } from '../enum/LogLevel';\nimport { MediatorName } from '../enum/MediatorName';\nimport { ModelName } from '../enum/ModelName';\nimport { NotificationName } from '../enum/NotificationName';\nimport { NotificationType } from '../enum/NotificationType';\nimport { ProxyName } from '../enum/ProxyName';\nimport { ServiceName } from '../enum/ServiceName';\nimport { StreamType } from '../enum/StreamType';\nimport { NotificationInterface, PlayerDomProxyInterface, PresentationMediatorInterface, SystemServiceInterface } from '../iface';\nimport { ContentPlaybackStateInterface } from '../iface/ContentPlaybackStateInterface';\nimport { PlayerOptionsInterface } from '../iface/PlayerOptionsInterface';\nimport { PlaylistInterface } from '../iface/PlaylistInterface';\nimport { PresentationStateInterface } from '../iface/PresentationStateInterface';\nimport { TextTrackInterface } from '../iface/TextTrackInterface';\nimport { ContentPlaybackStateProxy } from '../model/ContentPlaybackStateProxy';\nimport { PlaylistProxy } from '../model/PlaylistProxy';\nimport { TextTrackProxy } from '../model/TextTrackProxy';\nimport { AppMediator } from '../view/AppMediator';\nimport { LogAwareSimpleCommand } from './LogAwareSimpleCommand';\n\n\nexport class PlaybackCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface) {\n const presoMediator = this.facade.retrieveMediator(MediatorName.PRESENTATION_MEDIATOR),\n cps: ContentPlaybackStateInterface = this.contentPlaybackStateProxy?.model;\n\n if (!cps) {\n this.log(\"play() can not be invoked in this context.\");\n return;\n }\n\n let pos, presoMdl;\n\n switch (notification.name) {\n\n case NotificationName.PLAY_ON_USER_GESTURE:\n if (!presoMediator) {\n this.facade.sendNotification(NotificationName.POSTER_CLICK, null, NotificationType.INTERNAL);\n }\n else {\n this.invokePlayOnUserGesture(presoMediator);\n\n const pl = this.facade.retrieveProxy(ProxyName.Playlist);\n\n this.facade.sendNotification(\n NotificationName.POSTER_CLICK,\n { resource: pl.currentResource },\n NotificationType.INTERNAL\n );\n }\n\n break;\n\n case NotificationName.PLAY:\n const hasPreso = !!presoMediator,\n started = hasPreso && (this.getModel(ModelName.PresentationState)).started;\n\n if (hasPreso && notification.type === NotificationType.EXTERNAL && !started) {\n this.invokePlayOnUserGesture(presoMediator);\n }\n else if (started) {\n presoMediator && presoMediator.play();\n }\n break;\n\n case NotificationName.PAUSE:\n presoMediator && presoMediator.pause();\n presoMdl = this.getModel(ModelName.PresentationState);\n\n if (!presoMdl.isCurrentVideoAd && notification.type === NotificationType.UI) {\n this.facade.sendNotification(NotificationName.USER_PAUSE, null, NotificationType.INTERNAL);\n }\n break;\n\n case NotificationName.STOP:\n const appMed = this.facade.retrieveMediator(MediatorName.APPLICATION),\n r = ((this.facade.retrieveProxy(ProxyName.Playlist))).currentResource,\n isVod = this.isVod();\n\n appMed.killCurrentResource()\n .then(() => {\n if (isVod) {\n return;\n }\n\n this.sendNotification(NotificationName.APP_EVENT, {\n notificationName: NotificationName.LIVE_PRESENTATION_STOPPED,\n data: r\n });\n });\n break;\n\n case NotificationName.SEEK:\n presoMediator.seek(notification.body.value);\n break;\n\n case NotificationName.SEEK_FORWARD:\n pos = cps.time + notification.body.value;\n presoMediator.seek(Math.min(pos, cps.duration));\n break;\n\n case NotificationName.SEEK_BACK:\n pos = cps.time - notification.body.value;\n presoMediator.seek(Math.max(pos, 0));\n break;\n\n case NotificationName.SEEK_TO_LIVE:\n if (!this.isVod() && cps.liveStreamInfo) {\n pos = cps.liveStreamInfo.relativeDuration;\n presoMediator.seek(Math.min(pos, cps.duration));\n }\n break;\n\n case NotificationName.SWITCH_AUDIO_TRACK:\n presoMediator.adapter.audioTrack = notification.body.value;\n break;\n\n case NotificationName.SWITCH_TEXT_TRACK:\n const track = notification.body.value;\n if (track) {\n (this.facade.retrieveProxy(ProxyName.TextTrackProxy)).language = track.language;\n const textTrack = this.contentPlaybackStateProxy.getTextTrackById(track.id);\n presoMediator.adapter.textTrack = textTrack;\n }\n break;\n\n case NotificationName.SWITCH_TEXT_MODE:\n const enabled = notification.body.value;\n const textTrackProxy = (this.facade.retrieveProxy(ProxyName.TextTrackProxy));\n textTrackProxy.enabled = enabled;\n if (presoMediator?.adapter) {\n presoMediator.adapter.textTrackMode = textTrackProxy.mode;\n }\n break;\n\n case NotificationName.MUTE:\n presoMediator.mute(true);\n\n this.sendNotification(NotificationName.APP_EVENT, {\n notificationName: NotificationName.MUTE,\n data: true\n });\n break;\n\n case NotificationName.UNMUTE:\n presoMediator.mute(false);\n\n this.sendNotification(NotificationName.APP_EVENT, {\n notificationName: NotificationName.UNMUTE,\n data: false\n });\n break;\n\n case NotificationName.VOLUME_CHANGE:\n const { value, muted } = notification.body;\n !isNaN(value) && presoMediator.setVolume(value);\n\n // keep the muted state in sync with the video element\n presoMdl = this.getModel(ModelName.PresentationState);\n if (!Util.isUndefined(muted) && presoMdl.isMuted != muted) {\n this.sendNotification(muted ? NotificationName.MUTE : NotificationName.UNMUTE);\n }\n\n if (notification.type === NotificationType.EXTERNAL) {\n const uiMed = this.facade.retrieveMediator(MediatorName.UI);\n uiMed && uiMed.setVolume(value);\n }\n\n this.sendNotification(NotificationName.APP_EVENT, {\n notificationName: NotificationName.VOLUME_CHANGE,\n data: value\n });\n break;\n }\n }\n\n get contentPlaybackStateProxy(): ContentPlaybackStateProxy {\n return this.facade.retrieveProxy(ProxyName.ContentPlaybackStateProxy) as ContentPlaybackStateProxy;\n }\n\n isVod(): boolean {\n const streamType = this.contentPlaybackStateProxy.model.streamType;\n return (streamType != StreamType.LIVE && streamType != StreamType.DVR);\n }\n\n shouldSkipPriming(): boolean {\n const domProxy = this.facade.retrieveProxy(ProxyName.PlayerDomProxy);\n const sys = this.facade.retrieveService(ServiceName.System);\n const playerOpts = this.getModel(ModelName.PlayerOptions);\n const overrides = playerOpts.overrides;\n\n return !domProxy || sys.device == Device.LG_SMART_TV || sys.device == Device.PLAYSTATION_5 || overrides?.skipPriming === true;\n }\n\n invokePlayOnUserGesture(presoMediator: PresentationMediatorInterface): void {\n const domProxy = this.facade.retrieveProxy(ProxyName.PlayerDomProxy);\n const sys = this.facade.retrieveService(ServiceName.System);\n const playerOpts = this.getModel(ModelName.PlayerOptions);\n const overrides = playerOpts.overrides;\n\n presoMediator.beforePlayOnUserGesture();\n\n if (!this.shouldSkipPriming()) {\n const p: Promise = domProxy.primeVideo(overrides?.blankVideoUrl);\n p.then(() => {\n if (sys.device == Device.IPHONE) {\n const ev = 'timeupdate';\n const v = domProxy.getVideo(),\n h = (e: Event) => {\n v.removeEventListener(ev, h);\n setTimeout(() => presoMediator.playOnUserGesture(), 200);\n };\n v.addEventListener(ev, h);\n }\n else {\n presoMediator.playOnUserGesture();\n }\n }).catch((e) => {\n this.log(LogLevel.ERROR, `ERROR - PlaybackCommand: Priming FAILED. ${e.message}`);\n this.facade.sendNotification(NotificationName.AUTOPLAY_BLOCKED, e, NotificationType.INTERNAL);\n });\n }\n else {\n presoMediator && presoMediator.playOnUserGesture();\n }\n }\n}\n","import { MediatorName } from '../enum/MediatorName';\nimport { NotificationName } from '../enum/NotificationName';\nimport { NotificationInterface, PresentationMediatorInterface } from '../iface';\nimport { LogAwareSimpleCommand } from './LogAwareSimpleCommand';\n\n\n// playlist notifications are announced to the external world as events.\nexport class PlaylistCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface): void {\n switch (notification.name) {\n\n case NotificationName.PLAYLIST_ADVANCED:\n this.sendAppEventNotification(notification.name, notification.body);\n break;\n\n case NotificationName.PLAYLIST_COMPLETE:\n case NotificationName.PLAYLIST_CLEARED:\n case NotificationName.PLAYLIST_CURRENT_RESOURCE_CLEARED:\n // 'cleared' notifications carry the interrupted resource (if any) in body\n this.close()\n .then(() => {\n this.sendAppEventNotification(notification.name, notification.body);\n });\n break;\n }\n }\n\n private sendAppEventNotification(n: string, data: any = null) {\n this.sendNotification(NotificationName.APP_EVENT, {\n notificationName: n,\n data: data\n });\n }\n\n private close(): Promise {\n const presoM = this.facade.retrieveMediator(MediatorName.PRESENTATION_MEDIATOR);\n return (presoM) ? presoM.close() : Promise.resolve();\n }\n}\n","import { CoreEvent } from '../../../core/CoreEvent';\nimport { dai } from '../dai';\n\n\nexport class StreamEvent extends CoreEvent implements dai.StreamEvent {\n\n static Type: dai.StreamEventType = {\n LOADED: 'loaded',\n AD_BREAK_STARTED: 'adBreakStarted',\n AD_BREAK_ENDED: 'adBreakEnded',\n STARTED: 'started',\n COMPLETE: 'complete',\n FIRST_QUARTILE: 'firstQuartile',\n MIDPOINT: 'midpoint',\n THIRD_QUARTILE: 'thirdQuartile',\n AD_PERIOD_STARTED: 'adPeriodStarted',\n AD_PERIOD_ENDED: 'adPeriodEnded',\n CUEPOINTS_CHANGED: 'cuePointsChanged',\n STREAM_INITIALIZED: 'streamInitialized',\n ERROR: 'error',\n AD_PROGRESS: 'adProgress',\n CLICK: 'click',\n };\n\n override data: dai.StreamData;\n private ad: dai.Ad = null;\n\n constructor(type: string, target: any, streamData: dai.StreamData, ad?: dai.Ad) {\n super(type, null, streamData);\n this.data = streamData;\n this.target = target;\n ad && (this.ad = ad);\n }\n\n get Type(): dai.StreamEventType {\n return StreamEvent.Type;\n }\n\n getAd(): dai.Ad {\n return this.ad;\n }\n\n getStreamData(): dai.StreamData {\n return this.data;\n }\n}\n","import { StrAnyDict } from '../../../iface/StrAnyDict';\nimport { dai } from '../dai';\n\n\nexport class Ad implements dai.Ad {\n\n private data: dai.AdResponse;\n private podInfo: dai.AdPodInfo;\n\n constructor(adResponse: dai.AdResponse, podInfo: dai.AdPodInfo) {\n this.data = adResponse;\n this.podInfo = podInfo;\n }\n\n getAdId(): string {\n return this.data.ad_id;\n }\n\n getAdPodInfo(): dai.AdPodInfo {\n return this.podInfo;\n }\n\n getAdSystem(): string | null {\n return this.data.advertiser || null;\n }\n\n getAdvertiserName(): string | null {\n return this.data.advertiser || null;\n }\n\n getApiFramework(): string {\n return null;\n }\n\n getCreativeAdId(): string {\n return this.data.creative_ad_id;\n }\n\n getCreativeId(): string {\n return this.data.creative_id;\n }\n\n getDealId(): string | null {\n return this.data.deal_id || null;\n }\n\n getDescription(): string {\n return this.data.description;\n }\n\n getDuration(): number {\n return this.data.duration;\n }\n\n getTitle(): string {\n return this.data.title;\n }\n\n getDaiWrapperData(): Record {\n let adId = null;\n let creativeId = null;\n let creativeAdId = null;\n\n if (this.data.wrappers && this.data.wrappers[0]) {\n const w0 = this.data.wrappers[0];\n adId = w0.ad_id;\n creativeId = w0.creative_id;\n creativeAdId = w0.creative_ad_id;\n }\n\n return { adId, creativeId, creativeAdId };\n }\n\n getWrapperAdIds(): string[] {\n return this.getWrapperPropArray('ad_id');\n }\n\n getWrapperCreativeIds(): string[] {\n return this.getWrapperPropArray('creative_id');\n }\n\n getWrapperCreativeAdIds(): string[] {\n return this.getWrapperPropArray('creative_ad_id');\n }\n\n getWrapperAdSystems(): string[] {\n return this.getWrapperPropArray('system');\n }\n\n getCompanionAds(): dai.CompanionAd[] | null {\n return null;\n }\n\n private getWrapperPropArray(propName: string): string[] {\n const out = [],\n wrappers = this.data.wrappers || null;\n\n if (!wrappers) {\n return null;\n }\n\n let item: string, w;\n for (let i = 0, n = wrappers.length; i < n; i++) {\n w = wrappers[i];\n item = w[propName];\n item && item != '' && out.push(item);\n }\n\n return out;\n }\n}\n","import { dai } from '../dai';\n\n/*\n export interface AdResponse extends StrAnyDict {\n seq: number;\n start: number;\n duration: number;\n title: string;\n description: string;\n advertiser: string;\n ad_system: string;\n ad_id: string;\n creative_id: string;\n creative_ad_id: string;\n deal_id: string;\n clickthrough_url: string;\n wrappers: AdWrapper[];\n events: AdEventObject[];\n verifications?: AdVerification[]; \n }\n\n export interface AdPodResponse extends StrAnyDict {\n type: string;\n start: number;\n duration: number;\n ads: AdResponse[];\n }\n*/\n\nexport class AdPodInfo {\n\n private data: dai.AdBreakResponse;\n private pos!: number;\n private podIdx: number;\n\n constructor(data: dai.AdBreakResponse, adPos: number, idx: number) {\n this.data = data;\n this.podIdx = idx;\n this.pos = adPos;\n }\n\n getAdPosition(): number {\n return this.pos;\n }\n\n setAdPosition(n: number): void {\n this.pos = n;\n }\n\n getMaxDuration(): number {\n return this.data.duration;\n }\n\n getPodIndex(): number { // 0 [1, 2,..n] -1\n return this.podIdx;\n }\n\n setPodIndex(n: number): void {\n this.podIdx = n;\n }\n\n getTimeOffset(): number {\n return this.data.start;\n }\n\n getTotalAds(): number {\n return this.data.ads && this.data.ads.length;\n }\n}\n","import { AdTechnology } from '../../../enum/AdTechnology';\nimport { Emitter } from '../../../core/Emitter';\nimport { request } from '../../../core/Request';\nimport { Util } from '../../../core/Util';\nimport { ErrorCode } from '../../../enum/ErrorCode';\nimport { LogLevel } from '../../../enum/LogLevel';\nimport { VideoFormat } from '../../../enum/VideoFormat';\nimport { SimpleVideoInterface } from '../../../iface';\nimport { ErrorRecoveryInterface } from '../../../iface/ErrorRecoveryInterface';\nimport { EventHandler } from '../../../iface/EventHandler';\nimport { EventInterface } from '../../../iface/EventInterface';\nimport { LoggerInterface } from '../../../iface/LoggerInterface';\nimport { StrAnyDict } from '../../../iface/StrAnyDict';\nimport { dai } from '../dai';\nimport { AdEventStatusInterface } from '../iface';\nimport { Ad } from './Ad';\nimport { AdPodInfo } from './AdPodInfo';\nimport { StreamEvent } from './StreamEvent';\n\n\n//////////////////\n// local iface defs\ninterface AdBreakObject {\n index: number;\n seq: number;\n duration: number;\n start: number;\n end: number;\n type: string;\n ads: dai.AdResponse[];\n played: boolean;\n}\n\ninterface AdStatus {\n [index: string]: boolean;\n}\n\ninterface AdStatusByBreak {\n [index: string]: AdStatus;\n}\n\ninterface BreakInfo {\n break: AdBreakObject,\n index: number;\n}\n\n// end iface defs\n/////////////////\n\nexport class StreamManager extends Emitter implements dai.StreamManager {\n\n static event: dai.StreamEventType = {\n LOADED: 'loaded',\n STREAM_INITIALIZED: 'streamInitialized',\n CUEPOINTS_CHANGED: 'cuePointsChanged',\n AD_BREAK_STARTED: 'adBreakStarted',\n AD_BREAK_ENDED: 'adBreakEnded',\n STARTED: 'started',\n COMPLETE: 'complete',\n AD_PROGRESS: 'adProgress',\n FIRST_QUARTILE: 'firstQuartile',\n MIDPOINT: 'midpoint',\n THIRD_QUARTILE: 'thirdQuartile',\n CLICK: 'click',\n ERROR: 'error',\n AD_PERIOD_STARTED: 'adPeriodStarted',\n AD_PERIOD_ENDED: 'adPeriodEnded',\n };\n\n static eventStatusMap: StrAnyDict = {\n start: 'started',\n firstquartile: 'firstQuartile',\n midpoint: 'midpoint',\n thirdquartile: 'thirdQuartile',\n complete: 'complete',\n };\n\n static DAI_BASE_URL: string = 'https://dai.google.com';\n static STREAM_PATH: string = '/ondemand/v1/{format}/content/{contentSourceId}/vid/{daiVideoId}/stream';\n\n private adBreaks: AdBreakObject[] = [];\n private currBreak: AdBreakObject = null;\n private currBreakIndex: number = null;\n private currAd: dai.AdResponse = null;\n private currEventStatus: AdEventStatusInterface;\n private breakStatus: AdStatusByBreak = {};\n private breakPoints: number[] = [];\n private pollId: any = null;\n private vidIface: SimpleVideoInterface;\n private logger: LoggerInterface;\n private lastRecordedTime: number = -1;\n\n private streamId!: string;\n private streamDur!: number;\n private mvu!: string;\n private clickEl!: HTMLElement;\n private clickThruHandler!: EventListenerOrEventListenerObject;\n\n constructor(SimpleVideoInterface: SimpleVideoInterface, adContainer: HTMLElement, logger?: LoggerInterface) {\n super(null);\n\n this.currEventStatus = this.createEventStatus();\n this.currBreakIndex = null;\n this.vidIface = SimpleVideoInterface;\n this.logger = logger;\n this.setClickElement(adContainer);\n }\n\n /////////////////////////////////////////\n // Public API - replicates API of DAI SDK\n addEventListener(name: string, fn: EventHandler): void {\n this.on(name, fn);\n }\n\n removeEventListener(name: string, fn: EventHandler): void {\n this.off(name, fn);\n }\n\n requestStream(streamReq: dai.VODStreamRequest | dai.LiveStreamRequest, errorRecovery: ErrorRecoveryInterface = null): void {\n streamReq.adTagParameters.correlator = this.getCorrelator();\n\n if (streamReq.apiKey) {\n streamReq.adTagParameters['api-key'] = streamReq.apiKey;\n }\n if (streamReq.authToken) {\n streamReq.adTagParameters['auth-token'] = streamReq.authToken;\n }\n\n request({\n method: 'POST',\n errorRecovery,\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n url: this.getUrl(streamReq.contentSourceId, streamReq.videoId, streamReq.format || 'hls'),\n data: streamReq.adTagParameters,\n encodeList: ['cust_params'],\n })\n .then(response => {\n this.gatherStreamInfo(response);\n this.emitCues();\n this.beginPoll();\n this.emitLoaded(response);\n })\n .catch(error => {\n const msg = `Error. Status: ${error.status || 'Unknown'}; Message: ${error.message}`;\n this.logger.log(LogLevel.ERROR, msg);\n this.emitError(msg, ErrorCode.DAI_NETWORK_ERROR);\n });\n }\n\n setClickElement(clickElement: HTMLElement): void {\n if (!clickElement) return;\n\n this.clickEl = clickElement || null;\n this.clickThruHandler = (e: Event) => { this.hClickThru(e); };\n this.clickEl.addEventListener('click', this.clickThruHandler);\n }\n\n // supply streamTime in seconds; returns content time\n contentTimeForStreamTime(streamTime?: number): number {\n const bks = this.adBreaks;\n let breakSum = 0, b;\n\n if (streamTime == undefined) {\n streamTime = this.streamDur;\n }\n\n for (let i = 0, n = bks.length; i < n; i++) {\n b = bks[i];\n if (streamTime > b.start) {\n if (streamTime >= b.end) {\n breakSum += b.duration;\n if (i == n - 1) {\n return streamTime - breakSum;\n }\n }\n else {\n return b.start - breakSum;\n }\n }\n else {\n return streamTime - breakSum;\n }\n }\n\n return streamTime;\n }\n\n streamTimeForContentTime(t: number): number {\n const bks = this.adBreaks;\n\n let sum = 0, bct, b;\n\n for (let i = 0, n = bks.length; i < n; i++) {\n b = bks[i];\n bct = this.contentTimeForStreamTime(bks[i].start);\n if (t >= bct) sum += b.duration;\n else break;\n }\n\n return t + sum;\n }\n\n previousCuePointForStreamTime(streamTime: number): dai.CuePoint {\n const bks = this.adBreaks;\n let i = bks.length, b;\n\n while (i--) {\n b = bks[i];\n if (streamTime >= b.start) {\n return (!b.played) ? this.cuePointFromBreak(b) : null;\n }\n }\n\n return null;\n }\n\n // Pass processed metadata - used for media_verification call\n onTimedMetadata(metadata: dai.StreamMetadataInterface): void {\n request({ url: this.mvu + metadata.TXXX });\n }\n\n processMetadata(type: string, data: Uint8Array | string, timestamp: number): void {\n // no impl necessary\n }\n\n // Resets the stream manager and removes any continuous polling.\n reset(): void {\n clearInterval(this.pollId);\n this.clickEl && this.clickEl.removeEventListener('click', this.clickThruHandler);\n this.clickEl = null;\n this.streamId = null;\n this.adBreaks = [];\n this.breakPoints = [];\n this.streamDur = NaN;\n this.currBreak = null;\n this.currBreakIndex = null;\n this.currAd = null;\n this.mvu = null;\n this.resetUponAdComplete();\n this.lastRecordedTime = -1;\n this.pollId = null;\n }\n // END Public API\n ////////////////////////////\n\n ///////////\n // PRIVATE\n\n // State\n private beginPoll(): void {\n clearInterval(this.pollId);\n this.pollId = setInterval(() => { this.checkState(); }, 100);\n }\n\n private checkState(): void {\n const t = this.vidIface.currentTime;\n\n if (!isNaN(t) && t > 0 && t > this.lastRecordedTime) {\n\n if (!this.currBreak) {\n const info = this.getBreakForStreamTime(t);\n const k: AdBreakObject = info.break;\n if (k && k.played) {\n this.emitAdPeriodStarted(k);\n }\n else {\n k && this.beginBreak(k, info.index);\n }\n }\n // Note: this.currBreak may become defined\n // in block above, via beginBreak();\n if (this.currBreak) {\n const ck = this.currBreak;\n if (t >= (ck.end)) {\n this.monitorAdStatus(t, ck);\n this.endBreak();\n }\n else {\n this.monitorAdStatus(t, ck);\n }\n }\n }\n\n !isNaN(t) && t >= 0 && (this.lastRecordedTime = t);\n }\n\n private monitorAdStatus(t: number, brk: AdBreakObject): void {\n const ads = brk.ads,\n brkSt = brk.start;\n\n if (this.currAd) {\n this.monitorCurrentAd(t);\n return;\n }\n\n let adSt: number,\n i = ads.length;\n while (i--) {\n adSt = ads[i].start || 0;\n if (t >= adSt || adSt == undefined) {\n if (!this.breakStatus[`t_${brkSt}`][`t_${adSt}`]) {\n const btl = brk.type.toLowerCase();\n\n this.currBreakIndex = btl === 'pre' ? 0 : (btl === 'mid' ? brk.index : -1);\n this.beginAd(ads[i], adSt);\n break;\n }\n }\n }\n }\n\n // inspect curr Ad 'events' array for ad life-cycle events\n private monitorCurrentAd(t: number): void {\n const evts = this.currAd.events,\n status = this.currEventStatus;\n\n let emitProg = true,\n i = evts.length,\n evt: dai.AdEventObject;\n\n while (i--) {\n evt = evts[i];\n if (t >= evt.time && !status[evt.type]) {\n status[evt.type] = true;\n if (evt.type === 'complete' || t >= (this.currAd.start + this.currAd.duration)) {\n emitProg = false;\n this.emitAdComplete();\n this.resetUponAdComplete();\n break;\n }\n else if (evt.type !== 'start') {\n emitProg = false;\n this.emit(StreamManager.eventStatusMap[evt.type], this.createStreamData());\n break;\n }\n }\n }\n\n emitProg && this.emitProgress(t);\n }\n\n private resetUponAdComplete(): void {\n this.currEventStatus = this.createEventStatus();\n this.currAd = null;\n }\n\n ///////////////////////////////\n // adBreak/ad life-cycle points\n private beginBreak(brk: AdBreakObject, index: number): void {\n this.currBreak = brk;\n this.currBreak.played = true;\n\n this.emitCues();\n\n const d = this.createStreamData();\n d.streamId = this.streamId;\n this.emit(StreamManager.event.AD_BREAK_STARTED, d);\n }\n\n private endBreak(): void {\n this.emit(StreamManager.event.AD_BREAK_ENDED, this.createStreamData());\n this.currBreak = null;\n }\n\n private beginAd(ad: dai.AdResponse, adSt: number): void {\n this.currAd = ad;\n this.breakStatus[`t_${this.currBreak.start}`][`t_${adSt}`] = true;\n this.currEventStatus.start = true;\n\n const sd = this.createStreamData();\n sd.streamId = this.streamId;\n\n const podInfo = new AdPodInfo(this.currBreak, this.currAd.seq, this.currBreakIndex),\n adInfo = new Ad(this.currAd, podInfo);\n\n const e = new StreamEvent(StreamManager.event.STARTED, this, sd, adInfo);\n\n this.dispatchEvt(e);\n }\n\n /////////////////\n // Event handling\n\n private hClickThru(e: Event): void {\n if (!this.currAd) {\n return;\n }\n const u = this.currAd.clickthrough_url;\n u && u !== '' && window.open(u);\n this.emit(StreamManager.event.CLICK);\n }\n\n /////////////////\n // Event dispatch\n\n // (override)\n override emit(name: string, data: dai.StreamData = null): void {\n let e: EventInterface = new StreamEvent(name, this, data);\n this.dispatchEvt(e);\n }\n\n private emitCues() {\n const d = this.createStreamData();\n d.cuepoints = this.assembleCuePoints();\n\n this.emit(StreamManager.event.CUEPOINTS_CHANGED, d);\n }\n\n // note: passing null will force progress to 100%\n private emitProgress(t: number | null) {\n const ap = this.createAdProgressData(t === null ? (this.currAd.start || 0) + this.currAd.duration : t),\n sd = this.createStreamData();\n\n sd.adProgressData = ap;\n\n this.emit(StreamManager.event.AD_PROGRESS, sd);\n }\n\n private emitLoaded(s: dai.Stream): void {\n const d: dai.StreamData = this.createStreamData();\n\n d.stream_id = this.streamId;\n d.subtitles = s.subtitles;\n d.manifestFormat = this.getFormat(s.stream_manifest);\n d.url = s.stream_manifest;\n\n\n this.emit(StreamManager.event.LOADED, d);\n }\n\n private emitAdComplete(): void {\n const sd = this.createStreamData();\n sd.streamId = this.streamId;\n\n this.emitProgress(null);\n this.emit(StreamManager.event.COMPLETE, sd);\n }\n\n private emitError(msg: string, code: ErrorCode): void {\n const d = this.createStreamData();\n\n d.streamId = this.streamId;\n d.errorMessage = msg;\n d.code = code;\n\n this.emit(StreamManager.event.ERROR, d);\n }\n\n private emitAdPeriodStarted(k: AdBreakObject): void {\n const d = this.createStreamData();\n d.streamResumeTime = k.start + k.duration + 0.1;\n this.emit(StreamManager.event.AD_PERIOD_STARTED, d);\n }\n ///////\n // util\n private createAdProgressData(t: number): dai.AdProgressData {\n return {\n adBreakDuration: this.currBreak.duration,\n adPeriodDuration: null,\n adPosition: this.currAd.seq,\n currentTime: Util.clampValue(t - (this.currAd.start || 0), 0, this.currAd.duration),\n duration: this.currAd.duration,\n totalAds: this.currBreak.ads.length\n };\n }\n\n private createEventStatus(): AdEventStatusInterface {\n return {\n start: false,\n first: false,\n mid: false,\n third: false,\n complete: false\n };\n }\n\n private assembleCuePoints(): dai.CuePoint[] {\n const cpa = [];\n\n for (let i = 0, n = this.adBreaks.length; i < n; i++) {\n cpa.push(this.cuePointFromBreak(this.adBreaks[i]));\n }\n\n return cpa;\n }\n\n private getBreakForStreamTime(t: number): BreakInfo {\n let b;\n for (let i = 0, n = this.adBreaks.length; i < n; i++) {\n b = this.adBreaks[i];\n if (t >= b.start && ((t - b.start) <= 1.5)) {\n if (!this.currBreak) {\n return { break: b, index: i };\n }\n }\n }\n\n return { break: null, index: null };\n }\n\n private getUrl(cid: string, vid: string, format: string): string {\n let u =\n StreamManager.DAI_BASE_URL +\n\n StreamManager.STREAM_PATH\n .replace('{format}', format)\n .replace('{contentSourceId}', cid)\n .replace('{daiVideoId}', vid)\n ;\n\n return u;\n }\n\n private getCorrelator(): string {\n let n = String(Math.round(1000000000000000 + Math.random() * 9000000000000000));\n\n if (n.length < 16) { while (n.length < 16) n += '0'; }\n if (n.length > 16) { n = n.substr(0, 17); }\n\n return n;\n }\n\n private cuePointFromBreak(b: AdBreakObject): dai.CuePoint {\n return {\n adTechnology: AdTechnology.SSAI,\n start: b.start,\n end: b.end,\n played: b.played\n };\n }\n\n private createStreamData(): dai.StreamData {\n return {\n adProgressData: null,\n cuepoints: null,\n errorMessage: null,\n streamId: this.streamId || null,\n manifestFormat: null,\n subtitles: null,\n url: null\n };\n }\n\n private getFormat(u: string): VideoFormat {\n const isHls = u.indexOf('.m3u8') >= 0,\n isDsh = !isHls && u.indexOf('.mpd') >= 0;\n\n return isHls ? VideoFormat.HLS : (isDsh ? VideoFormat.DASH : VideoFormat.UNKNOWN);\n }\n\n private gatherBreakInfo(b: dai.AdBreakResponse[]): void {\n const nBreaks = (b && b.length) || 0;\n\n // TODO - djl - For now, adhere to SDK CuePoint interface.\n // This can be made more convenient for cuePoint consumer.\n // (e.g.. by including break type and index)\n let k: dai.AdBreakResponse, s, e, d;\n let midSeq = 1;\n\n for (let i = 0; i < nBreaks; i++) {\n k = b[i];\n s = k.start;\n d = k.duration;\n e = s + d;\n\n this.breakPoints.push(s);\n this.adBreaks.push({\n duration: d,\n start: s,\n end: e,\n played: false,\n type: k.type,\n ads: k.ads,\n index: i,\n seq: k.type == 'mid' ? midSeq++ : 0\n });\n\n const adStat: AdStatus = this.breakStatus['t_' + s] = {};\n\n let ast;\n for (let q = 0, w = k.ads.length; q < w; q++) {\n ast = k.ads[q].start || 0;\n adStat['t_' + ast] = false;\n }\n }\n }\n\n private gatherStreamInfo(s: dai.Stream) {\n this.streamDur = s.total_duration;\n this.mvu = s.media_verification_url;\n this.streamId = s.stream_id;\n\n this.gatherBreakInfo(s.ad_breaks);\n }\n}\n","import { Util } from '../../../core/Util';\nimport { AdTagParametersInterface } from '../../../iface/AdTagParametersInterface';\nimport { dai } from '../dai';\n\n\nexport class VODStreamRequest {\n\n private req: dai.VODStreamRequest = {\n apiKey: null,\n streamActivityMonitorId: null,\n adTagParameters: null,\n assetKey: null,\n format: 'hls',\n contentSourceId: null,\n videoId: null\n };\n\n constructor(vodStrReq?: dai.VODStreamRequest) {\n vodStrReq && Util.assign(this.req, vodStrReq);\n }\n\n set adTagParameters(val: AdTagParametersInterface) {\n this.req.adTagParameters = val;\n }\n\n get adTagParameters(): AdTagParametersInterface {\n return this.req.adTagParameters;\n }\n\n set videoId(val: string) {\n this.req.videoId = val;\n }\n\n get videoId(): string {\n return this.req.videoId;\n }\n\n set contentSourceId(val: string) {\n this.req.contentSourceId = val;\n }\n\n get contentSourceId(): string {\n return this.req.contentSourceId;\n }\n\n set apiKey(val: string) {\n this.req.apiKey = val;\n }\n\n get apiKey(): string {\n return this.req.apiKey;\n }\n\n set authToken(val: string) {\n this.req.authToken = val;\n }\n\n get authToken(): string {\n return this.req.authToken;\n }\n\n set format(val: string) {\n this.req.format = val;\n }\n\n get format(): string {\n return this.req.format;\n }\n\n set assetKey(val: string) {\n this.req.assetKey = val;\n }\n\n get assetKey(): string {\n return this.req.assetKey;\n }\n\n set streamActivityMonitorId(val: string) {\n this.req.streamActivityMonitorId = val;\n }\n\n get streamActivityMonitorId(): string {\n return this.req.streamActivityMonitorId;\n }\n}\n","import { dai } from '../dai';\nimport { StreamEvent } from './StreamEvent';\nimport { StreamManager } from './StreamManager';\nimport { VODStreamRequest } from './VODStreamRequest';\n\nconst se = StreamEvent;\nconst vr = VODStreamRequest;\nconst sm = StreamManager;\n\n/**\n * @deprecated\n */\nexport const DaiProxyApi: dai.Sdk = {\n StreamManager: sm,\n StreamEvent: se,\n VODStreamRequest: vr\n};\n","import { StrAnyDict } from '../../iface/StrAnyDict';\nimport { AdViewabilityTrackingEventInterface, MoatInfoInterface, MoatTrackerInterface } from './iface';\n\n\ninterface ImaMoatEvent {\n start: string;\n firstquartile: string;\n midpoint: string;\n thirdquartile: string;\n complete: string;\n pause: string;\n resume: string;\n skip: string;\n volumechange: string;\n mute: string;\n}\n\ninterface DaiMoatEvent {\n started: string;\n firstquartile: string;\n midpoint: string;\n thirdquartile: string;\n complete: string;\n controlpause: string;\n controlplay: string;\n controlvolumeset: string;\n controlmute: string;\n controlunmute: string;\n}\n\ninterface MoatEventMap extends StrAnyDict {\n ima: ImaMoatEvent;\n dai_sdk: DaiMoatEvent;\n}\n\ninterface MoatParamsInterface {\n level1: string;\n level2: string;\n level3: string; // derived from getWrapperAdIds() || getAdId()\n level4: string; // derived from getWrapperCreativeIds() || getCreativeId()\n slicer1: string;\n slicer2: string;\n slicer3: string;\n moatVASTSystem: string;\n moatVASTAdID: string;\n zMoatVGUID?: string;\n zMoatPT?: string;\n}\n\ninterface MoatEventData {\n type: string;\n adVolume: number;\n}\n\ninterface MoatTrackingObj {\n dispatchEvent(d: MoatEventData): void;\n adData: StrAnyDict;\n}\n\nexport class MoatTracker implements MoatTrackerInterface {\n\n private MOAT_PARTNER_CODE: string = 'cbsiimajsint708425247896';\n\n private trackingObj!: MoatTrackingObj;\n\n // values are vpaid events\n private adContextToVpaidEventMap: MoatEventMap = {\n ima: {\n start: 'AdVideoStart',\n firstquartile: 'AdVideoFirstQuartile',\n midpoint: 'AdVideoMidpoint',\n thirdquartile: 'AdVideoThirdQuartile',\n complete: 'AdVideoComplete',\n pause: 'AdPaused',\n resume: 'AdPlaying',\n skip: 'AdSkipped',\n volumechange: 'AdVolumeChange',\n mute: 'AdVolumeChange'\n },\n dai_sdk: {\n started: 'AdVideoStart',\n firstquartile: 'AdVideoFirstQuartile',\n midpoint: 'AdVideoMidpoint',\n thirdquartile: 'AdVideoThirdQuartile',\n complete: 'AdVideoComplete',\n controlpause: 'AdPaused',\n controlplay: 'AdPlaying',\n controlvolumeset: 'AdVolumeChange',\n controlmute: 'AdVolumeChange',\n controlunmute: 'AdVolumeChange'\n }\n };\n\n constructor() { }\n\n destroy(): void {\n this.adContextToVpaidEventMap = null;\n this.trackingObj = null;\n }\n\n track(info: MoatInfoInterface): void {\n const context = info.context,\n adData = info.adInfo;\n\n const ids: MoatParamsInterface = {\n level1: '',\n level2: '',\n level3: adData.wrapperAdId,\n level4: adData.wrapperCreativeId,\n slicer1: 'vaw-can',\n slicer2: info.partner,\n slicer3: info.pageType,\n moatVASTSystem: context,\n moatVASTAdID: adData.wrapperAdId,\n };\n\n const v = info.viewGuid || info.vguid;\n const p = info.pageType || info.ptype;\n // don't set for empty or null\n if (v) {\n ids.zMoatVGUID = v;\n }\n if (p) {\n ids.zMoatPT = p;\n }\n\n this.initMoat(\n info.adVideoContainer,\n ids,\n adData.adDuration,\n this.MOAT_PARTNER_CODE,\n null\n );\n }\n\n untrack(): void {\n this.trackingObj = null;\n }\n\n trackEvent(data: AdViewabilityTrackingEventInterface): void {\n const vpEvt: string = this.adContextToVpaidEventMap[data.context][data.eventName.toLowerCase()];\n\n if (!vpEvt || !this.trackingObj) {\n return;\n }\n\n this.trackingObj.dispatchEvent({\n type: vpEvt,\n adVolume: data.volume\n });\n }\n\n /**\n * Code supplied by Moat, slightly massaged for typescript\n * c ad container\n * d ids (includes partner code, etc)\n * e duration of ad\n * k partner code\n * l url to the video asset used to display the ad\n */\n private initMoat(c: HTMLElement, d: StrAnyDict, e: number, k: string, l: string = null): void {\n const g = document.createElement('script');\n let a: any = [];\n let f, h, sfx;\n\n const q: MoatTrackingObj = {\n adData: { ids: d, duration: e, url: l },\n dispatchEvent: function (b: MoatEventData) {\n this.sendEvent ? (a && (a.push(b), b = a, a = !1), this.sendEvent(b)) : a.push(b);\n }\n };\n sfx = '_moatApi' + Math.floor(1E8 * Math.random());\n\n try {\n f = c.ownerDocument;\n h = f.defaultView || (f).parentWindow;\n }\n catch (b) {\n h = window;\n }\n\n h[sfx] = q;\n g.type = 'text/javascript';\n c && c.insertBefore(g, c.childNodes[0] || null);\n g.src = 'https://z.moatads.com/' + k + '/moatvideo.js#' + sfx;\n\n this.trackingObj = q;\n }\n\n}\n","import { AdTechnology } from '../../enum/AdTechnology';\nimport { AdBreakType } from '../../enum/AdBreakType';\nimport { AdContext } from '../../enum/AdContext';\nimport { ServiceName } from '../../enum/ServiceName';\nimport { SystemServiceInterface } from '../../iface';\nimport { AdBreakInfoInterface } from '../../iface/AdBreakInfoInterface';\nimport { ResourceAdViewabilityTrackingInterface } from '../../iface/ResourceAdViewabilityTrackingInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { StrStrDict } from '../../iface/StrStrDict';\nimport { ServiceBase } from '../../service/ServiceBase';\nimport { dai } from './dai';\nimport { AdViewabilityTrackingEventInterface, ImaAdIdInfoInterface, ImaAdInfoInterface } from './iface';\nimport { ima } from './ima';\nimport { MoatTracker } from './MoatTracker';\n\n\nexport class GamAdService extends ServiceBase {\n\n protected adContainer: HTMLElement;\n protected adContext: AdContext;\n private moatTracker: MoatTracker;\n private trackingData: ResourceAdViewabilityTrackingInterface;\n\n\n constructor(name: string, adContext: AdContext) {\n super(name);\n this.adContext = adContext;\n }\n\n override destroy(): void {\n this.moatTracker && this.moatTracker.destroy();\n this.moatTracker = null;\n this.adContainer = null;\n this.trackingData = null;\n super.destroy();\n }\n\n getGamPlatformString(): string {\n const sys = this.getService(ServiceName.System);\n // TODO - are there/will there be other valid platform values?\n return sys.isDesktop ? 'desktop' : 'mobile_web';\n }\n\n setTrackingData(obj: ResourceAdViewabilityTrackingInterface /* = partner, pagetype, viewguid */): void {\n this.trackingData = obj;\n }\n\n getAdContext(): AdContext {\n return this.adContext;\n }\n\n setContainer(el: HTMLElement): void {\n this.adContainer = el;\n }\n\n getAdBreakTypeFromPodIndex(idx: number): AdBreakType {\n return idx === 0 ? AdBreakType.PRE : idx === -1 ? AdBreakType.POST : AdBreakType.MID;\n }\n\n // Ad Break (pod)\n assembleAdBreakInfo(ad: ima.Ad | dai.Ad, adTech: AdTechnology): AdBreakInfoInterface {\n const pi: ima.AdPodInfo = ad.getAdPodInfo(),\n idx = pi.getPodIndex();\n\n return {\n adBreakDuration: pi.getMaxDuration(),\n adBreakPosition: idx,\n adTotal: pi.getTotalAds(),\n adBreakType: this.getAdBreakTypeFromPodIndex(idx),\n adServerName: this.adContext,\n adTechnology: adTech\n };\n }\n\n assembleAdInfo(ad: ima.Ad | dai.Ad, adData?: StrAnyDict, isAdStart: boolean = false): ImaAdInfoInterface {\n const podInfo = ad.getAdPodInfo();\n const adPos = (podInfo && podInfo.getAdPosition()) || -1;\n const idInfo: ImaAdIdInfoInterface = this.getIdInfo(ad);\n const isIma = this.adContext === AdContext.IMA;\n\n return {\n adObject: isAdStart ? ad : null,\n adServerName: this.adContext,\n adDuration: ad.getDuration(),\n adTitle: ad.getTitle(),\n adId: idInfo.adId,\n adPosition: adPos,\n adAssetUrl: isIma ? (ad).getMediaUrl() : (adData.mediaUrl || null),\n isVpaid: isIma ? this.getIsVpaid(ad) : null,\n wrapperAdId: idInfo.wrapperAdId,\n creativeId: idInfo.creativeId,\n wrapperCreativeId: idInfo.wrapperCreativeId,\n vastMediaHeight: isIma ? (ad).getVastMediaHeight() : null,\n vastMediaWidth: isIma ? (ad).getVastMediaWidth() : null,\n vastMediaBitrate: isIma ? (ad).getVastMediaBitrate() : null\n };\n }\n\n // Moat tracking\n trackAd(adInfo: ImaAdInfoInterface): void {\n const td = this.trackingData;\n\n this.moatTracker.track({\n viewGuid: td.viewGuid,\n pageType: td.pageType,\n adInfo: adInfo,\n adVideoContainer: this.adContainer,\n context: this.adContext,\n partner: td.partner\n });\n }\n\n trackAdEvent(obj: AdViewabilityTrackingEventInterface): void {\n this.moatTracker.trackEvent(obj);\n }\n\n untrackAd(): void {\n this.moatTracker.untrack();\n }\n\n protected createViewabilityTracker(): void {\n this.moatTracker = new MoatTracker();\n }\n\n ////////////\n // PRIVATE\n ////////////\n private getIdInfo(ad: ima.Ad | dai.Ad): ImaAdIdInfoInterface {\n const w = this.getWrapperId(ad),\n c = this.getCreativeId(ad);\n\n return {\n adId: w.adId,\n wrapperAdId: w.wrapperAdId,\n creativeId: c.creativeId,\n wrapperCreativeId: c.wrapperCreativeId,\n adServerName: AdContext.IMA,\n adDuration: ad.getDuration()\n };\n }\n\n private getWrapperId(ad: ima.Ad | dai.Ad): StrStrDict {\n const ids = ad.getWrapperAdIds();\n const len = Array.isArray(ids) && ids.length;\n const defId = ad.getAdId() || '';\n const adId = !len ? defId : ids[0];\n\n let wrapperAdId = !len ? defId : ids[ids.length - 1];\n if (!wrapperAdId) wrapperAdId = null;\n\n return {\n adId,\n wrapperAdId\n };\n }\n\n private getCreativeId(ad: ima.Ad | dai.Ad): StrStrDict {\n const ids = ad.getWrapperCreativeIds();\n const len = Array.isArray(ids) && ids.length;\n const defId = ad.getCreativeId() || null;\n const creativeId = !len ? defId : ids[0];\n\n let wrapperCreativeId = !len ? defId : ids[ids.length - 1];\n if (!wrapperCreativeId) wrapperCreativeId = null;\n\n return {\n creativeId,\n wrapperCreativeId\n };\n }\n\n private getIsVpaid(ad: ima.Ad): boolean {\n return ad.getContentType() === 'application/javascript';\n }\n}\n","import { AdContext } from '../../enum/AdContext';\nimport { ServiceName } from '../../enum/ServiceName';\nimport { SimpleVideoInterface, SystemServiceInterface } from '../../iface';\nimport { dai } from './dai';\nimport { GamAdService } from './GamAdService';\nimport { DaiAdServiceInterface, ImaAdInfoInterface } from './iface';\n\n/**\n * @deprecated\n */\nexport class DaiAdService extends GamAdService implements DaiAdServiceInterface {\n\n private streamMgr: dai.StreamManager;\n private pSdk: dai.Sdk | null = null;\n private usesApi: boolean = false;\n private videoIface: SimpleVideoInterface = null;\n\n constructor(name: string, sdk?: dai.Sdk) {\n super(name, sdk ? AdContext.DAI_API : AdContext.DAI_SDK);\n if (sdk) {\n this.pSdk = sdk;\n this.usesApi = true;\n }\n }\n\n override destroy(): void {\n this.streamMgr && this.streamMgr.reset();\n this.streamMgr = null;\n this.pSdk = null;\n this.videoIface = null;\n\n super.destroy();\n }\n\n initViewabilityTracking(): void {\n this.createViewabilityTracker();\n }\n\n get videoInterface(): SimpleVideoInterface {\n return this.videoIface;\n }\n\n get usesDaiApi(): boolean {\n return this.usesApi;\n }\n\n get sdk(): dai.Sdk | null {\n\n if (!this.pSdk) {\n const sysSvc = this.getService(ServiceName.System);\n const global = sysSvc.global;\n\n if (global?.google?.ima?.dai) {\n this.pSdk = global.google.ima.dai.api;\n }\n }\n\n return this.pSdk;\n }\n\n getSdkVersion() {\n return '';\n }\n\n setVideoInterface(obj: SimpleVideoInterface): void {\n this.videoIface = obj;\n }\n\n setVolume(v: number): void {\n this.usesApi && (this.videoIface.volume = v);\n }\n\n setMuted(flag: boolean): void {\n this.usesApi && (this.videoIface.muted = flag);\n }\n\n setDuration(d: number): void {\n this.usesApi && (this.videoIface.duration = d);\n }\n\n setCurrentTime(t: number): void {\n this.usesApi && (this.videoIface.currentTime = t);\n }\n\n reset() {\n this.streamMgr.reset();\n if (this.usesApi) {\n this.videoIface.duration = NaN;\n this.videoIface.currentTime = NaN;\n }\n }\n\n override assembleAdInfo(ad: dai.Ad, adData?: Record): ImaAdInfoInterface {\n if (this.adContext === AdContext.DAI_SDK) {\n return super.assembleAdInfo(ad, adData);\n }\n\n const podInfo = ad.getAdPodInfo();\n const adPos = (podInfo && podInfo.getAdPosition()) || -1;\n const { adId, creativeId } = ad.getDaiWrapperData();\n\n return {\n adObject: ad,\n adServerName: this.adContext,\n adDuration: ad.getDuration(),\n adTitle: ad.getTitle(),\n adId: adId,\n adPosition: adPos,\n adAssetUrl: adData.mediaUrl || null,\n isVpaid: false,\n wrapperAdId: adId,\n creativeId: creativeId,\n wrapperCreativeId: creativeId,\n vastMediaHeight: null,\n vastMediaWidth: null,\n vastMediaBitrate: null\n };\n }\n\n getStreamManager(): dai.StreamManager {\n if (!this.streamMgr && this.sdk) {\n if (this.usesApi) {\n this.streamMgr = new this.sdk.StreamManager(this.videoIface, this.adContainer, this.getLogger());\n }\n else {\n this.streamMgr = new this.sdk.StreamManager(this.videoIface, this.adContainer);\n }\n }\n\n return this.streamMgr;\n }\n}\n","import { Emitter } from \"../../../core/Emitter\";\nimport { AudioTrackInterface } from \"../../../iface/AudioTrackInterface\";\nimport { AudioTracksInterface } from \"../../../iface/AudioTracksInterface\";\nimport { ErrorInfoInterface } from \"../../../iface/ErrorInfoInterface\";\nimport { MetadataCuepointInterface } from '../../../iface/MetadataCuepointInterface';\nimport { PlaybackAdapterDelegateInterface } from '../../../iface/PlaybackAdapterDelegateInterface';\nimport { QualityInfoInterface } from '../../../iface/QualityInfoInterface';\nimport { QualityInterface } from \"../../../iface/QualityInterface\";\nimport { TextCuepointInterface } from '../../../iface/TextCuepointInterface';\nimport { TextTrackInterface } from '../../../iface/TextTrackInterface';\nimport { TextTracksInterface } from '../../../iface/TextTracksInterface';\nimport { PlaybackAdapterEvents } from \"../../../playback/enum/PlaybackAdapterEvents\";\nimport { TextTrackSurfaceEvents } from \"../../../playback/enum/TextTrackSurfaceEvents\";\nimport { VideoSurfaceEvents } from \"../../../playback/enum/VideoSurfaceEvents\";\n\nexport class PlaybackAdapterDelegate extends Emitter implements PlaybackAdapterDelegateInterface {\n\n qualities: QualityInterface[];\n\n protected pManifestParsed = false;\n\n constructor() {\n super();\n }\n\n readonly qualityChange = (quality: QualityInterface) => {\n this.emit(PlaybackAdapterEvents.ABR_QUALITY_LOADED, quality);\n };\n\n readonly qualityInfoChange = (qualityInfo: QualityInfoInterface) => {\n this.qualities = qualityInfo.qualities;\n\n this.emit(PlaybackAdapterEvents.MANIFEST_PARSED, { profile: qualityInfo.qualities });\n\n this.emit(PlaybackAdapterEvents.ABR_CONSTRAINTS_CHANGE, {\n minIndex: 0,\n maxIndex: qualityInfo.qualities.length - 1,\n manifestQualities: qualityInfo.qualities\n });\n };\n\n readonly error = (err: ErrorInfoInterface) => {\n this.emit(PlaybackAdapterEvents.ERROR, err);\n };\n\n readonly audioTrackChange = (newTrack: AudioTrackInterface) => {\n this.emit(PlaybackAdapterEvents.AUDIO_TRACK_CHANGE, { track: newTrack });\n };\n\n readonly audioTrackInfoChange = (audioTrackInfo: AudioTracksInterface) => {\n this.emit(PlaybackAdapterEvents.AUDIO_TRACK_UPDATED, audioTrackInfo);\n };\n\n readonly cdnChange = (cdn: string) => {\n this.emit(PlaybackAdapterEvents.MULTI_CDN, { cdn });\n };\n\n readonly drmKeySystemCreated = (keySystem: string) => {\n this.emit(PlaybackAdapterEvents.DRM_KEYSYSTEM_CREATED, { keysystem: keySystem });\n };\n\n readonly timeUpdate = () => {\n this.emit(VideoSurfaceEvents.TIME_UPDATE);\n };\n\n readonly playing = () => {\n this.emit(VideoSurfaceEvents.PLAYING);\n };\n\n readonly paused = () => {\n this.emit(VideoSurfaceEvents.PAUSE);\n };\n\n readonly seeking = () => {\n this.emit(VideoSurfaceEvents.SEEKING);\n };\n\n readonly seeked = () => {\n this.emit(VideoSurfaceEvents.SEEKED);\n };\n\n readonly ended = () => {\n this.emit(VideoSurfaceEvents.ENDED);\n };\n\n readonly durationChange = () => {\n this.emit(VideoSurfaceEvents.DURATION_CHANGE);\n };\n\n readonly volumeChange = (volume: number, muted: boolean) => {\n // requires a change if kept - i.e., \n // adapter should send volume and mute state.\n this.emit(VideoSurfaceEvents.VOLUME_CHANGE, { volume, muted });\n };\n\n ///////////////\n // text track \n readonly metadataCuepoint = (data: MetadataCuepointInterface) => {\n this.emit(TextTrackSurfaceEvents.METADATA_CUEPOINT, data);\n };\n\n readonly textCuepoints = (activeCues: TextCuepointInterface[]) => {\n this.emit(TextTrackSurfaceEvents.TEXT_CUEPOINT, activeCues);\n };\n\n readonly textTrackDisplayModeChange = (mode: TextTrackMode) => {\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_DISPLAY_MODE_CHANGE, { mode });\n };\n\n readonly textTrackInfoChange = (textTrackInfo: TextTracksInterface) => {\n textTrackInfo.tracks?.forEach(track => this.emit(TextTrackSurfaceEvents.TEXT_TRACK_ADDED, track));\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_AVAILABLE);\n };\n\n readonly textTrackChange = (textTrack: TextTrackInterface) => {\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_CHANGE, textTrack);\n };\n}\n","export enum ExtLibEndpoint {\n HLSJS_GZIP_CDN = '//cdnjs.cloudflare.com/ajax/libs/hls.js/{{VERSION}}/hls.min.js',\n SHAKA_GZIP_CDN = '//cdnjs.cloudflare.com/ajax/libs/shaka-player/{{VERSION}}/shaka-player.compiled{{DEBUG}}.js',\n /** \n * @deprecated\n */\n TWITCH_GZIP_CDN = '//player.live-video.net/{{VERSION}}/amazon-ivs-player.min.js',\n}\n","export enum StreamingLibraryVersion {\n HLSJS = '1.0.7',\n SHAKA = '3.2.0',\n /** \n * @deprecated\n */\n TWITCH = '1.1.2',\n}\n","export enum HlsjsRobustness {\n BUFFER_LEVEL_PRELOAD = 12,\n BUFFER_LEVEL_PLAYBACK = 60,\n MANIFEST_RETRY_ATTEMPTS = 2,\n MANIFEST_RETRY_DELAY = 1000,\n LEVEL_RETRY_TIMEOUT = 2000,\n LEVEL_RETRY_DELAY = 500,\n FRAGMENT_RETRY_TIMEOUT = 2000,\n FRAGMENT_RETRY_DELAY = 500, \n FATAL_ERROR_RECOVERY_ATTEMPTS = 3\n} ","export enum Playback {\n MULTI_CDN = 'x-cdn',\n VIDEO = 'video',\n AUDIO = 'audio',\n TEXT = 'text',\n}\n","import { Emitter } from '../../../core/Emitter';\nimport { LogLevel } from '../../../enum/LogLevel';\nimport { AudioTrackInterface } from '../../../iface/AudioTrackInterface';\nimport { LiveStreamInfoInterface } from '../../../iface/LiveStreamInfoInterface';\nimport { LoggerInterface } from '../../../iface/LoggerInterface';\nimport { PlaybackAdapterConfigInterface } from '../../../iface/PlaybackAdapterConfigInterface';\nimport { PlaybackAdapterCoreInterface } from '../../../iface/PlaybackAdapterCoreInterface';\nimport { PlaybackAdapterInterface } from '../../../iface/PlaybackAdapterInterface';\nimport { TextTrackInterface } from '../../../iface/TextTrackInterface';\nimport { PlaybackAdapterEvents } from '../../../playback/enum/PlaybackAdapterEvents';\nimport { TextTrackSurfaceEvents } from '../../../playback/enum/TextTrackSurfaceEvents';\nimport { VideoSurfaceEvents } from '../../../playback/enum/VideoSurfaceEvents';\nimport { Util } from '../../../util';\nimport { PlaybackAdapterDelegate } from './PlaybackAdapterDelegate';\n\n/**\n * Wraps an external playback adapter so that is appears as a legacy playback adapter \n */\nexport class PlaybackAdapterWrapper extends Emitter implements PlaybackAdapterCoreInterface {\n private lastKnownTimes: any = {\n buffer: NaN,\n };\n\n private pBuffering: boolean = false;\n private pPaused: boolean = false;\n private pSeeking: boolean = false;\n private pConstraints: any = {};\n private logger: LoggerInterface;\n\n constructor(public config: PlaybackAdapterConfigInterface, public adapter: PlaybackAdapterInterface, public delegate: PlaybackAdapterDelegate) {\n super();\n this.logger = config.logger;\n\n this.dispatchEvt = this.dispatchEvt.bind(this);\n Util.values(VideoSurfaceEvents).forEach(event => this.delegate.on(event, this.dispatchEvt));\n Util.values(PlaybackAdapterEvents).forEach(event => this.delegate.on(event, this.dispatchEvt));\n Util.values(TextTrackSurfaceEvents).forEach(event => this.delegate.on(event, this.dispatchEvt));\n }\n\n override destroy(): Promise {\n super.destroy();\n return Promise.resolve(this.adapter.destroy());\n }\n\n get type(): string {\n return this.adapter.getType();\n }\n\n get time(): number {\n return this.adapter.getCurrentTime();\n }\n\n get duration(): number {\n return this.adapter.getDuration();\n }\n\n get liveStreamInfo(): LiveStreamInfoInterface {\n return this.adapter.getLiveStreamInfo();\n }\n\n get isLiveStream(): boolean {\n return this.adapter.getIsLiveStream();\n };\n\n get droppedVideoFrames(): number {\n return this.adapter.getMetrics?.().droppedVideoFrames;\n }\n\n get framerate(): number {\n return this.adapter.getMetrics?.().framerate;\n }\n\n get buffering(): boolean {\n if (!this.pPaused) {\n const threshold = (this.lastKnownTimes.buffer + 0.001);\n const currentTime = this.adapter.getCurrentTime();\n this.lastKnownTimes.buffer = currentTime;\n const stalled = currentTime < threshold;\n this.pBuffering = stalled && !this.pSeeking;\n }\n\n return this.pBuffering;\n };\n\n get bufferLength(): number {\n return this.adapter.getBufferLength();\n }\n\n set currentIndex(index: number) {\n this.adapter.setQuality(this.delegate.qualities[index]);\n }\n\n set autoQualitySwitching(value: boolean) {\n this.adapter.setAutoQualitySwitching(value);\n }\n\n set maxBitrate(value: number) {\n this.pConstraints.maxBitrate = value;\n this.adapter.setMaxBitrate(value);\n }\n\n set minBitrate(value: number) {\n this.pConstraints.minBitrate = value;\n this.adapter.setMinBitrate(value);\n }\n\n set textTrackMode(value: TextTrackMode) {\n this.adapter.setTextTrackMode(value);\n }\n\n set textTrack(value: TextTrackInterface) {\n this.adapter.setTextTrack(value);\n }\n\n set audioTrack(value: AudioTrackInterface) {\n this.adapter.setAudioTrack(value);\n }\n\n initialize(): void { }\n\n load(): Promise {\n return this.adapter.load().then((result = {}) => {\n const metadata = Util.merge({\n manifest: {\n mimeType: Util.getResourceMimeType(this.config.resource),\n },\n fragment: {\n mimeType: '',\n },\n }, result);\n\n this.delegate.emit(PlaybackAdapterEvents.LOADED_METADATA, metadata);\n });\n }\n\n play(): void {\n this.adapter.play()\n .then(() => {\n this.pPaused = false;\n })\n .catch(error => {\n this.logger.warn('Exception caught in play() Promise: ' + error.message, LogLevel.WARN);\n this.emit(VideoSurfaceEvents.AUTOPLAY_BLOCKED, error);\n });\n };\n\n pause(): void {\n this.pPaused = true;\n this.adapter.pause();\n };\n\n suspend(): void {\n throw new Error('Method not implemented.');\n };\n\n resume(): void {\n throw new Error('Method not implemented.');\n };\n\n seek(position: number): void {\n this.pSeeking = true;\n this.adapter.seek(position).then(() => this.pSeeking = false);\n };\n\n resize(): void {\n this.adapter.resize();\n };\n\n clearCue(): void {\n this.adapter.clearText?.();\n }\n}\n","import { Util } from '../../core/Util';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { LiveStreamInfoInterface } from '../../iface/LiveStreamInfoInterface';\nimport { RangeInterface } from '../../iface/RangeInterface';\nimport { BasePlaybackAdapter } from './BasePlaybackAdapter';\n\n\nexport abstract class BaseHtml5Adapter extends BasePlaybackAdapter {\n\n private lastKnownTimes: any = {\n absolute: NaN,\n relative: NaN,\n end: NaN\n };\n\n override play(): void {\n if (!isNaN(this.pauseTime)) {\n // check if playhead has fallen behind the trailing edge\n if (this.pauseTime < this.liveStreamInfo.absoluteStart) {\n const edge = this.seekable.start + 1;\n this.logger.log(LogLevel.INFO, `Playhead outside of DVR window bounds. Moving to ${edge}`);\n this.videoSurface.seek(edge);\n }\n this.pauseTime = NaN;\n }\n\n super.play();\n }\n\n override pause(): void {\n if (this.pIsLiveStream && this.config.resource.overrides?.clearOutOfBoundsDvrBuffer === true) {\n this.pauseTime = this.liveStreamInfo.absoluteTime;\n }\n\n super.pause();\n }\n\n override seek(position: number): void {\n if (this.pIsLiveStream) {\n const lsi = this.liveStreamInfoVO;\n position = Util.mapToRange(position, 0, lsi.relativeDuration, lsi.safeSeekingTime, lsi.safeSeekingDuration);\n }\n super.seek(position);\n }\n\n ////////////////////\n //Accessors\n ////////////////////\n get seekable(): RangeInterface {\n const result = { start: 0, end: 0 };\n const video = this.videoSurface.video;\n const range = video.seekable;\n const index = range.length - 1;\n if (index >= 0) {\n result.start = range.start(index);\n result.end = range.end(index);\n }\n\n return result;\n }\n\n get segmentDuration() {\n return 6;\n }\n\n get liveStreamInfo(): LiveStreamInfoInterface {\n const details: LiveStreamInfoInterface = this.liveStreamInfoVO;\n const video = this.videoSurface.video;\n const { start, end } = this.seekable;\n const time = video.currentTime;\n const duration = end - start;\n const segmentDuration = this.segmentDuration;\n const count = this.playback.liveEdgeSyncFragmentCount;\n const safeSeekDuration = this.config.resource.overrides?.safeSeekDuration || segmentDuration;\n\n details.relativeTime = Math.max(time - start, 0);\n details.relativeDuration = duration;\n details.absoluteDuration = Date.now();\n details.dvrWindowSize = Math.floor(duration);\n details.liveEdgeOffset = (segmentDuration * count) + segmentDuration;\n details.safeSeekingTime = Math.ceil(start + safeSeekDuration);\n details.safeSeekingDuration = Math.floor(end - safeSeekDuration);\n details.isPlayingLive = Math.ceil(time + details.liveEdgeOffset) >= details.safeSeekingDuration;\n\n if (end != this.lastKnownTimes.end) {\n this.lastKnownTimes.end = end;\n details.absoluteStart = details.absoluteDuration - (duration * 1000);\n this.lastKnownTimes.absolute = Math.round(details.absoluteStart + (details.relativeTime * 1000));\n this.lastKnownTimes.relative = time;\n }\n\n const delta = Math.round((time - this.lastKnownTimes.relative) * 1000);\n details.absoluteTime = this.lastKnownTimes.absolute + delta;\n\n //Temp log line until we insure Tracking is happy with this solution. Follow VTG-1977 for more info. \n //console.log('Live streams UTC time', details.absoluteTime, new Date(Math.floor(details.absoluteTime * 1000)));\n\n return details;\n }\n}\n","\nexport enum MediaError {\n MEDIA_ERR_ABORTED = 1,\t\n MEDIA_ERR_NETWORK = 2,\n MEDIA_ERR_DECODE = 3,\n MEDIA_ERR_SRC_NOT_SUPPORTED\t= 4,\n}","export enum DrmVendor {\n IRDETO = 'irdeto',\n DRM_TODAY = 'drmtoday',\n UNKNOWN = 'unknown'\n}","import { AppResources } from '../../app/AppResources';\nimport { Util } from '../../core/Util';\nimport { ErrorCode } from '../../enum/ErrorCode';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { TextTrackEvent } from '../../enum/TextTrackEvent';\nimport { TextTrackMode } from '../../enum/TextTrackMode';\nimport { AudioTrackInterface } from '../../iface/AudioTrackInterface';\nimport { PlaybackAdapterConfigInterface } from '../../iface/PlaybackAdapterConfigInterface';\nimport { QualityInterface } from '../../iface/QualityInterface';\nimport { RangeInterface } from '../../iface/RangeInterface';\nimport { ResourcePlaybackAbrInterface } from '../../iface/ResourcePlaybackAbrInterface';\nimport { TextTrackInterface } from '../../iface/TextTrackInterface';\nimport { TextTracksInterface } from '../../iface/TextTracksInterface';\nimport { VideoSurfaceInterface } from '../../iface/VideoSurfaceInterface';\nimport { HlsjsRobustness } from '../enum/HlsjsRobustness';\nimport { Playback } from '../enum/Playback';\nimport { PlaybackAdapterEvents } from '../enum/PlaybackAdapterEvents';\nimport { PlaybackAdapterType } from '../enum/PlaybackAdapterType';\nimport { TextTrackSurfaceEvents } from '../enum/TextTrackSurfaceEvents';\nimport { TextTrackType } from '../enum/TextTrackType';\nimport { audioTracksUpdatedData, audioTrackSwitchedData, Config, errorData, fragLoadedData, Hls, Level, levelLoadedData, levelSwitchedData, levelSwitchingData, levelUpdatedData, manifestParsedData } from '../interface/HlsjsInterface';\nimport { Html5VideoSurface } from '../surface/Html5VideoSurface';\nimport { SmpteToVttCueConverter } from '../util/SmpteToVttCueConverter';\nimport { BaseHtml5Adapter } from './BaseHtml5Adapter';\n\n\nexport class HlsjsAdapter extends BaseHtml5Adapter {\n\n protected override pType = PlaybackAdapterType.HLSJS;\n\n private Hls: Hls = (window).Hls; // static version of Hls and all static properties. \n private player!: Hls; // hls instantiated instance. \n private pFramerate: number = Number.NaN;\n private pFragmentType: string = '';\n private textTrackInfo: TextTracksInterface = {\n track: null,\n tracks: [],\n };\n private hlsjsEventMap = [\n {\n type: this.Hls.Events.MANIFEST_PARSED,\n callback: (type: string, data: manifestParsedData) => this.onManifestParsed(type, data)\n },\n {\n type: this.Hls.Events.LEVEL_LOADED,\n callback: (type: string, data: any) => this.onLevelLoaded(type, data)\n },\n {\n type: this.Hls.Events.LEVEL_UPDATED,\n callback: (type: string, data: levelUpdatedData) => this.onLevelUpdated(type, data)\n },\n {\n type: this.Hls.Events.LEVEL_SWITCHING,\n callback: (type: string, data: levelSwitchingData) => this.onLevelSwitching(type, data)\n },\n {\n type: this.Hls.Events.LEVEL_SWITCHED,\n callback: (type: string, data: levelSwitchedData) => this.onLevelSwitched(type, data)\n },\n {\n type: this.Hls.Events.FRAG_LOADED,\n callback: (type: string, data: any) => this.onFragmentLoaded(type, data)\n },\n {\n type: this.Hls.Events.FRAG_PARSING_DATA,\n callback: (type: string, data: any) => this.onFragmentParsingData(type, data)\n },\n {\n type: this.Hls.Events.AUDIO_TRACKS_UPDATED,\n callback: (type: string, data: audioTracksUpdatedData) => this.onAudioTrackUpdated(type, data)\n },\n {\n type: this.Hls.Events.AUDIO_TRACK_SWITCHED,\n callback: (type: string, data: audioTrackSwitchedData) => this.onAudioTrackSwitched(type, data)\n },\n {\n type: this.Hls.Events.ERROR,\n callback: (type: string, data: errorData) => this.onError(type, data)\n },\n {\n type: this.Hls.Events.SUBTITLE_TRACKS_UPDATED,\n callback: (type: string, data: any) => this.onSubtitleTracksUpdated(type, data),\n },\n {\n type: this.Hls.Events.SUBTITLE_TRACK_SWITCH,\n callback: (type: string, data: any) => this.onSubtitleTrackSwitch(type, data),\n },\n ];\n\n constructor(config: PlaybackAdapterConfigInterface) {\n super(config);\n this.logger.log(LogLevel.INFO, 'HlsjsAdapter created');\n }\n\n override createVideoSurface(): VideoSurfaceInterface {\n return new Html5VideoSurface(this.config, false);\n }\n\n override set textTrackMode(mode: TextTrackMode) {\n this.enabledSubtitles(mode);\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_DISPLAY_MODE_CHANGE, { mode });\n }\n\n override set textTrack(value: TextTrackInterface) {\n if (!value) {\n return;\n }\n this.player.subtitleTrack = parseInt(value.id);\n }\n\n ////////////////////\n //Public Methods\n ////////////////////\n\n override initialize(): void {\n\n super.initialize();\n\n let hlsConfig = {} as Config;\n\n hlsConfig.debug = this.enableLogger;\n hlsConfig.capLevelToPlayerSize = this.playback.abr.capQualityToScreenSize;\n //hlsConfig.capLevelOnFPSDrop = todo?\n hlsConfig.autoStartLoad = false;\n hlsConfig.liveSyncDurationCount = this.playback.liveEdgeSyncFragmentCount;\n\n hlsConfig.manifestLoadingMaxRetry = HlsjsRobustness.MANIFEST_RETRY_ATTEMPTS;\n hlsConfig.manifestLoadingRetryDelay = HlsjsRobustness.MANIFEST_RETRY_DELAY;\n\n hlsConfig.levelLoadingRetryDelay = HlsjsRobustness.LEVEL_RETRY_DELAY;\n // hlsConfig.levelLoadingTimeOut = HlsjsRobustness.LEVEL_RETRY_TIMEOUT;\n hlsConfig.fragLoadingRetryDelay = HlsjsRobustness.FRAGMENT_RETRY_DELAY;\n // hlsConfig.fragLoadingTimeOut = HlsjsRobustness.FRAGMENT_RETRY_TIMEOUT;\n\n hlsConfig.enableCEA708Captions = true;\n\n // performance settings\n const settings = this.config.performanceSettings;\n if (settings.forwardBufferLength != null) {\n hlsConfig.maxBufferLength = settings.forwardBufferLength;\n }\n if (settings.backBufferLength != null) {\n hlsConfig.liveBackBufferLength = settings.backBufferLength;\n }\n if (settings.topQualityForwardBufferLength != null) {\n hlsConfig.maxMaxBufferLength = settings.topQualityForwardBufferLength;\n }\n\n hlsConfig = this.mergeStreamingConfigs(hlsConfig, this.config.resource.overrides);\n\n const xhrSetup = hlsConfig.xhrSetup;\n hlsConfig.xhrSetup = !xhrSetup ? this.onRequest.bind(this) : (xhr: XMLHttpRequest, url: string) => {\n xhrSetup(xhr, url);\n this.onRequest(xhr, url);\n };\n\n this.logger.log(LogLevel.INFO, `Hlsjs version: ${this.Hls.version}`);\n this.player = new this.Hls(hlsConfig);\n\n // This tells hlsjs to use \"showing\" or \"hidden\" when selecting a text track.\n this.player.subtitleDisplay = this.config.textTrackSettings.native;\n this.addEvents(this.player, this.hlsjsEventMap);\n }\n\n protected override loadMediaUrl(): Promise {\n const loading = Util\n .eventsToPromise(\n [{ target: this.player, events: [this.Hls.Events.MANIFEST_LOADED] }],\n [{ target: this, events: [PlaybackAdapterEvents.ERROR] }],\n );\n\n this.player.loadSource(this.mediaUrl);\n\n return loading\n // Wait for manifest to finish loading before attaching the media\n .then((manifest) => {\n this.initNativeTextTracks(manifest);\n\n const attaching = Util\n .eventsToPromise(\n [{ target: this.player, events: [this.Hls.Events.MEDIA_ATTACHED] }],\n [{ target: this, events: [PlaybackAdapterEvents.ERROR] }],\n );\n this.player.attachMedia(this.videoSurface.video);\n return attaching;\n })\n // Wait for media to finish attaching before starting playback\n .then(() => {\n const startTime = this.playback.startTime;\n this.player.startLoad(!isNaN(startTime) ? startTime : -1);\n\n this.setBitrateRestrictionAtStartup();\n this.emit(PlaybackAdapterEvents.MANIFEST_LOADED);\n })\n .then(() => super.loadMediaUrl());\n }\n\n override destroy(): Promise {\n this.removeEvents(this.player, this.hlsjsEventMap);\n\n this.destroyNativeTextTracks();\n\n const destroy = Util\n .eventsToPromise(\n [{ target: this.player, events: [this.Hls.Events.MEDIA_DETACHING] }],\n [{ target: this, events: [PlaybackAdapterEvents.ERROR] }],\n );\n this.player.destroy();\n this.player = null;\n this.Hls = null;\n\n Util.forEach(this.config.video.textTracks, (textTrack) => {\n textTrack.removeEventListener(TextTrackEvent.CUE_CHANGE, this.onCueChange);\n });\n\n return destroy.then(() => super.destroy());\n }\n\n override suspend(): void {\n this.player.stopLoad();\n }\n\n override resume(): void {\n this.player.startLoad();\n }\n ////////////////////\n //Accessors\n ////////////////////\n override set audioTrack(track: AudioTrackInterface) {\n this.player.audioTrack = track.index;\n }\n\n set currentIndex(index: number) {\n this.player.loadLevel = index;\n }\n get currentIndex(): number {\n return this.player.loadLevel;\n }\n\n set autoQualitySwitching(value: boolean) {\n this.player.loadLevel = value ? -1 : this.player.nextLoadLevel;\n }\n get autoQualitySwitching(): boolean {\n return this.player.loadLevel === -1;\n }\n\n set minBitrate(value: number) {\n this.player.config.minAutoBitrate = value;\n }\n get minBitrate(): number {\n return this.player.config.minAutoBitrate;\n }\n\n set maxBitrate(value: number) {\n const reset = isNaN(value);\n this.player.capLevelToPlayerSize = reset ? this.playback.abr.capQualityToScreenSize : false;\n this.player.autoLevelCapping = reset ? -1 : Util.getIndexForBitrate(this.player.levels, value, false);\n }\n get maxBitrate(): number {\n return this.player.levels[this.player.autoLevelCapping].bitrate;\n }\n\n get manifestQualities(): QualityInterface[] {\n return this.player.levels.map((item: Level, index: number): QualityInterface => ({\n index,\n bitrate: item.bitrate,\n width: item.width,\n height: item.height,\n codec: (item.attrs) ? item.attrs.CODECS : undefined\n }));\n }\n\n override get seekable(): RangeInterface {\n const duration = this.videoSurface.video.duration;\n const dvr = (this.lowLevelDvrDetails) ? this.lowLevelDvrDetails.totalduration : 0;\n return { start: duration - dvr, end: duration };\n }\n\n override get segmentDuration(): number {\n return (this.lowLevelDvrDetails) ? this.lowLevelDvrDetails.averagetargetduration : super['segmentDuration'];\n }\n\n override get framerate(): number {\n return this.pFramerate;\n }\n\n override get fragmentType(): string {\n return this.pFragmentType;\n }\n\n ////////////////////\n //Event Handlers\n ////////////////////\n\n private onManifestParsed(type: string, data: manifestParsedData): void {\n this.emit(PlaybackAdapterEvents.MANIFEST_PARSED, { profile: this.manifestQualities });\n }\n\n private onLevelLoaded(type: string, data: levelLoadedData): void { //set type to any, hls definition of level is missing but is present at RT.\n this.lowLevelDvrDetails = data.details;\n this.pIsLiveStream = this.lowLevelDvrDetails.live;\n this.emit(PlaybackAdapterEvents.ABR_QUALITY_LOADED, { index: data.level });\n }\n\n private onLevelUpdated(type: string, data: levelUpdatedData): void {\n //@ts-ignore\n this.checkAbrConstraints(this.player.maxAutoLevel);\n }\n\n private onLevelSwitching(type: string, data: levelSwitchingData): void {\n //TODO check to see if we still need to switch started type event. none using in old player.\n this.emit(PlaybackAdapterEvents.ABR_QUALITY_SWITCHING, { index: data.level });\n }\n\n private onLevelSwitched(type: string, data: levelSwitchedData): void {\n this.emit(PlaybackAdapterEvents.ABR_QUALITY_LOADED, { index: data.level });\n }\n\n private onFragmentLoaded(type: string, data: fragLoadedData): void { //stats missing from ts def for Hls.fragloadData\n this.networkErrorRetryCount = 0;\n this.mediaErrorRetryCount = 0;\n if (!this.pFragmentType) {\n this.pFragmentType = Util.getMimeType(data.frag.url);\n }\n\n //@ts-ignore\n this.checkAbrConstraints(this.player.maxAutoLevel);\n\n const stats = (data.stats ? data.stats : data.frag.stats);\n const bw = (stats.loaded * 8000) / Number(window.performance.now() - stats.trequest);\n this.emit(PlaybackAdapterEvents.FRAGMENT_LOADED, { bandwidth: bw });\n }\n\n private onFragmentParsingData(type: any, data: any): void { //missing params from ts def for Hls.fragParsingData\n this.pFramerate = data.nb / (data.endPTS - data.startPTS);\n this.emit(PlaybackAdapterEvents.FRAGMENT_PARSED, { rate: this.pFramerate });\n }\n\n private onAudioTrackUpdated(type: string, data: audioTracksUpdatedData) {\n this.normalizedAudioTracks = this.normalizeAudioTracks(this.player.audioTracks, {\n codec: 'audioCodec',\n label: 'name'\n });\n\n this.emit(PlaybackAdapterEvents.AUDIO_TRACK_UPDATED, {\n tracks: this.normalizedAudioTracks,\n track: this.normalizedAudioTracks[this.player.audioTrack],\n });\n }\n\n private onAudioTrackSwitched(type: string, data: audioTrackSwitchedData) {\n this.emit(PlaybackAdapterEvents.AUDIO_TRACK_CHANGE, { track: this.normalizedAudioTracks[parseInt(data.id)] });\n }\n\n private onSubtitleTrackSwitch(type: string, data: any) {\n const textTrack = this.textTrackInfo.tracks.find((track: any) => track.id == data.id);\n if (data.id === -1) {\n return;\n }\n\n if (!textTrack || this.textTrackInfo.track === textTrack) {\n return;\n }\n\n this.selectSubtitles(textTrack);\n }\n\n private onSubtitleTracksUpdated(type: string, data: any) {\n this.setTextTracks(data.subtitleTracks.map((track: any, index: number) => ({\n id: track.id,\n language: track.lang,\n kind: track.type.toLowerCase(),\n label: track.name,\n default: track.default,\n })));\n };\n\n private onCueChange = (event: Event): void => {\n const track = event.target as TextTrack;\n const activeCues = Util.dedupeCues(track);\n\n if (!this.config.textTrackSettings.native) {\n this.emit(TextTrackSurfaceEvents.TEXT_CUEPOINT, { activeCues });\n }\n };\n\n private onRequest(xhr: XMLHttpRequest, url: string): void {\n if (!xhr.withCredentials) {\n xhr.withCredentials = (url.indexOf('akamaihd') > -1 && url.indexOf('csmil') > -1);\n }\n\n const aes = this.config.resource.location.drm.aes;\n if (!Util.isEmpty(aes) && url.includes(aes.provider)) {\n const h = aes.header;\n for (let key in h) {\n const v = h[key];\n xhr.setRequestHeader(key, v);\n }\n }\n\n if (this.multiCdnHeaderPresent) {\n xhr.addEventListener('readystatechange', (e: any) => {\n if (url.indexOf('.ts') !== -1 && xhr.readyState === XMLHttpRequest.HEADERS_RECEIVED) {\n\n if (this.multiCdnHeaderPresent) {\n var headers = xhr.getAllResponseHeaders();\n this.multiCdnHeaderPresent = headers.indexOf(Playback.MULTI_CDN) !== -1;\n\n if (this.multiCdnHeaderPresent) {\n this.emit(PlaybackAdapterEvents.MULTI_CDN, { cdn: xhr.getResponseHeader(Playback.MULTI_CDN.toUpperCase()) });\n }\n }\n }\n });\n }\n }\n\n private onError(type: string, data: errorData): void {\n\n let code = ErrorCode.UNSPECIFIED_HLSJS_ERROR;\n\n switch (data.type) {\n case this.Hls.ErrorTypes.NETWORK_ERROR:\n data.fatal && this.handleNetworkErrors(data);\n break;\n\n case this.Hls.ErrorTypes.MEDIA_ERROR:\n data.fatal && this.handleMediaErrors(data);\n break;\n\n case this.Hls.ErrorTypes.MUX_ERROR:\n code = ErrorCode.HLSJS_MUX_ERROR;\n //no break is intended. \n default:\n //TODO add message in AppResource for general error prefix to details\n const msg = this.getErrorMessage(`${data.details}`, data.fatal);\n this.log(LogLevel.ERROR, msg, data);\n this.throwError(code, msg, data, data.fatal);\n }\n }\n\n ////////////////////\n // Private Methods\n ////////////////////\n\n private handleNetworkErrors(data: errorData): void {\n const max = HlsjsRobustness.FATAL_ERROR_RECOVERY_ATTEMPTS,\n ErrorDetails = this.Hls.ErrorDetails;\n\n switch (data.details) {\n\n case ErrorDetails.LEVEL_LOAD_ERROR:\n case ErrorDetails.FRAG_LOAD_ERROR:\n if (this.networkErrorRetryCount < max) {\n\n this.player.startLoad();\n this.networkErrorRetryCount++;\n\n //retry logging \n this.log(LogLevel.ERROR, this.getErrorMessage(\n AppResources.messages.RETRY_PLAYBACK_NETWORK_ERROR, false,\n `${this.networkErrorRetryCount} / ${max}`\n ));\n break;\n }\n this.throwError(ErrorCode.HLSJS_NETWORK_ERROR,\n AppResources.messages.FATAL_PLAYBACK_NETWORK_ERROR, data);\n break;\n\n case ErrorDetails.MANIFEST_PARSING_ERROR:\n this.throwError(ErrorCode.HLSJS_PARSE_ERROR,\n `${AppResources.messages.FATAL_PLAYBACK_NETWORK_ERROR} : ${data.details}`, data);\n break;\n\n default:\n this.throwError(ErrorCode.HLSJS_NETWORK_ERROR, `${AppResources.messages.FATAL_PLAYBACK_NETWORK_ERROR} : ${data.details}`, data, data.fatal);\n }\n }\n\n private handleMediaErrors(data: errorData): void {\n\n const //max = HlsjsRobustness.FATAL_ERROR_RECOVERY_ATTEMPTS,\n ErrorDetails = this.Hls.ErrorDetails;\n\n switch (data.details) {\n case ErrorDetails.MANIFEST_INCOMPATIBLE_CODECS_ERROR:\n this.throwError(ErrorCode.HLSJS_SRC_NOT_SUPPORTED,\n `${AppResources.messages.FATAL_PLAYBACK_MEDIA_ERROR} : ${data.details}`, data);\n break;\n\n default:\n\n // if (this.mediaErrorRetryCount < max) {\n // if (this.mediaErrorRetryCount === 1) {\n // this.player.swapAudioCodec();\n // }\n // this.player.recoverMediaError();\n // this.mediaErrorRetryCount++;\n\n // //retry logging \n // this.log(LogLevel.ERROR, this.getErrorMessage(\n // AppResources.messages.RETRY_PLAYBACK_MEDIA_ERROR, false,\n // `${this.mediaErrorRetryCount} / ${max}`\n // ));\n\n // break;\n // }\n\n this.throwError(ErrorCode.HLSJS_MEDIA_ERROR,\n `${AppResources.messages.FATAL_PLAYBACK_MEDIA_ERROR} : ${data.details}`, data);\n }\n }\n\n private setBitrateRestrictionAtStartup(): void {\n const abr: ResourcePlaybackAbrInterface = this.playback.abr;\n\n if (!isNaN(abr.minBitrate)) {\n this.minBitrate = abr.minBitrate - 1; // HLS.js does not look at >= so we need to set the min just one below the actual bitrate. To ease developer confusion, handle inline.\n }\n\n if (!isNaN(abr.maxBitrate)) {\n this.maxBitrate = abr.maxBitrate;\n }\n\n if (!isNaN(abr.startBitrate)) {\n const levels: Level[] = this.player.levels;\n const index = Util.getIndexForBitrate(levels, abr.startBitrate, false);\n if (Util.inRange(index, 0, levels.length - 1)) {\n this.player.config.startLevel = index;\n }\n else {\n //log warning here no error event needed. \n }\n }\n }\n\n private setTextTracks(tracks: TextTrackInterface[]) {\n this.textTrackInfo.tracks = tracks;\n\n Util.forEach(tracks, track => this.emit(TextTrackSurfaceEvents.TEXT_TRACK_ADDED, track));\n\n Util.forEach(this.config.video.textTracks, (textTrack) => {\n if (!Util.isTextTrack(textTrack.kind)) {\n return;\n }\n\n textTrack.addEventListener(TextTrackEvent.CUE_CHANGE, this.onCueChange);\n });\n\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_AVAILABLE);\n\n const defaultTrack = Util.find(tracks, track => track.default);\n if (!defaultTrack) {\n this.selectSubtitles(Util.findDefaultTrack(tracks, this.config.textTrackSettings.language));\n }\n }\n\n private selectSubtitles(track: TextTrackInterface) {\n this.textTrackInfo.track = track;\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_CHANGE, track);\n this.enabledSubtitles(this.config.textTrackSettings.mode);\n }\n\n private enabledSubtitles(mode: TextTrackMode) {\n if (mode !== TextTrackMode.DISABLED) {\n this.textTrack = this.textTrackInfo.track;\n }\n else {\n this.player.subtitleTrack = -1;\n }\n }\n\n private initNativeTextTracks(manifest: any) {\n const hasManifestTracks = manifest.subtitles?.length;\n const { textTrackUrl } = this.config.resource.location;\n\n if (hasManifestTracks) {\n if (textTrackUrl) {\n this.logger.warn(`Detected subtitles in the manifest. Ignoring resource's textTrackUrl`);\n }\n return;\n }\n\n const textTracks = this.config.video.textTracks;\n const tracks: TextTrackInterface[] = [];\n const map = new Map();\n const getEnabled = () => Util.find(textTracks, track => Util.isTextTrack(track.kind) && track.mode !== TextTrackMode.DISABLED);\n let enabled = getEnabled();\n\n const onChange = (event: any) => {\n const change = getEnabled();\n if (change === enabled || !change) {\n return;\n }\n\n enabled = change;\n this.textTrackInfo.track = map.get(enabled);\n };\n\n const textTracksAvailable = Util.debounce(() => {\n this.setTextTracks(tracks);\n textTracks.addEventListener(TextTrackEvent.CHANGE, onChange);\n }, 100);\n\n const onAddTrack = (event: any) => {\n const { track } = event;\n\n if (!Util.isTextTrack(track.kind)) {\n return;\n }\n\n const normalized = {\n id: tracks.length.toString(),\n language: track.language,\n kind: track.kind,\n label: track.label,\n default: false,\n };\n\n map.set(normalized, track);\n map.set(track, normalized);\n\n tracks.push(normalized);\n\n textTracksAvailable();\n };\n\n textTracks.addEventListener(TextTrackEvent.ADD_TRACK, onAddTrack);\n\n // Override the enable function to operate on the text tracks directly\n this.enabledSubtitles = (mode: TextTrackMode) => {\n const track = map.get(this.textTrackInfo.track);\n if (!track) {\n return;\n }\n track.mode = mode;\n };\n\n // Override the destroy function to clean up the CEA708 specific listeners\n this.destroyNativeTextTracks = () => {\n this.config.video.textTracks.removeEventListener(TextTrackEvent.ADD_TRACK, onAddTrack);\n this.config.video.textTracks.removeEventListener(TextTrackEvent.CHANGE, onChange);\n };\n\n // Load side car text track\n if (textTrackUrl) {\n this.createSidecarTextTrack(textTrackUrl);\n }\n }\n\n private destroyNativeTextTracks() {\n // no-op\n }\n\n private async createSidecarTextTrack(url: string) {\n const isVtt = url.indexOf('.vtt') >= 0;\n const video = this.config.video;\n const label = 'English';\n const language = 'en';\n\n if (isVtt) {\n const track = document.createElement('track');\n track.kind = TextTrackType.CAPTIONS;\n track.label = label;\n track.srclang = language;\n track.id = 'sidecar-vtt';\n track.src = url;\n video.appendChild(track);\n track.track.mode = this.config.textTrackSettings.mode;\n }\n else {\n try {\n const converter = new SmpteToVttCueConverter(url, this.config.system);\n const cues = await converter.convert();\n const track = video.addTextTrack(TextTrackType.CAPTIONS, label, language);\n this.logger.log(LogLevel.INFO, 'Smpte XML conversion and text track creation successful');\n\n Util.forEach(cues, (item) => {\n try {\n track.addCue(item);\n }\n catch (error) {\n this.logger.log(LogLevel.INFO, error);\n }\n });\n }\n catch (error) {\n this.logger.log(LogLevel.INFO, 'Smpte XML conversion and text track creation error', error.message);\n }\n }\n }\n}\n","import { AppResources } from '../../app/AppResources';\nimport { Emitter } from '../../core/Emitter';\nimport { QueryString } from '../../core/QueryString';\nimport { request } from '../../core/Request';\nimport { Util } from '../../core/Util';\nimport { ErrorCode } from '../../enum/ErrorCode';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { XhrResponseType } from '../../enum/XhrResponseType';\nimport { EventHandler } from '../../iface/EventHandler';\nimport { EventInterface } from '../../iface/EventInterface';\nimport { LoggerInterface } from '../../iface/LoggerInterface';\nimport { PlaybackAdapterConfigInterface } from '../../iface/PlaybackAdapterConfigInterface';\nimport { ResourceLocationDrmInterface } from '../../iface/ResourceLocationDrmInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { VideoSurfaceInterface } from '../../iface/VideoSurfaceInterface';\nimport { SystemService } from '../../service/SystemService';\nimport { DrmType } from '../../util/enum/DrmType';\nimport { DrmVendor } from '../enum/DrmVendor';\nimport { PlaybackAdapterEvents } from '../enum/PlaybackAdapterEvents';\nimport { VideoSurfaceEvents } from '../enum/VideoSurfaceEvents';\n\n\nexport class FairPlay extends Emitter {\n\n private WEBKIT_KEY_MESSAGE = 'webkitkeymessage';\n private WEBKIT_KEY_ADDED = 'webkitkeyadded';\n private WEBKIT_KEY_ERROR = 'webkitkeyerror';\n\n private videoSurface: VideoSurfaceInterface;\n private drmInfo: ResourceLocationDrmInterface;\n private logger: LoggerInterface;\n private drmVendor: string;\n private appCertData: Uint8Array;\n private initData: Uint16Array;\n private appCertLoaded: boolean = false;\n private webKitNeedKeyCalled: boolean = false;\n private webkitNeedKeyHandler: EventHandler = (e: EventInterface) => this.onWebkitNeedKey(e);\n\n constructor(videoSurface: VideoSurfaceInterface,\n config: PlaybackAdapterConfigInterface,\n logger: LoggerInterface) {\n\n super();\n this.drmInfo = config.resource.location.drm;\n this.videoSurface = videoSurface;\n this.videoSurface.on(VideoSurfaceEvents.WEBKIT_NEED_KEY, this.webkitNeedKeyHandler);\n this.logger = logger;\n }\n\n ////////////////////\n //Public Methods\n ////////////////////\n initialize(): void {\n request({\n url: this.drmInfo.fairplay.appCertUrl,\n responseType: XhrResponseType.ARRAY_BUFFER\n })\n .then((response: any) => this.onAppCertLoaded(response));\n }\n\n override destroy(): void {\n this.videoSurface.off(VideoSurfaceEvents.WEBKIT_NEED_KEY, this.webkitNeedKeyHandler);\n }\n\n ////////////////////\n //Events Methods\n ////////////////////\n /*\n * Async, dependent on webkitneedkey's init data to continue.\n */\n private onAppCertLoaded(response: any): void {\n this.appCertData = new Uint8Array(response);\n this.appCertLoaded = true;\n if (this.webKitNeedKeyCalled) {\n this.initializeFairplayCDM();\n }\n }\n\n /*\n * Async dependent on app certdata to continue.\n */\n private onWebkitNeedKey(event: EventInterface) {\n this.initData = event.data.initData;\n this.webKitNeedKeyCalled = true;\n if (this.appCertLoaded) {\n this.initializeFairplayCDM();\n }\n }\n\n private onLicenseRequestReady(url: string, event: Event) {\n\n this.drmVendor = this.getDrmVendor(url);\n\n let xhr = new XMLHttpRequest();\n (xhr).session = event.target;\n\n xhr.addEventListener('load', this.onLicenseLoaded.bind(this), false);\n xhr.open('POST', url, true);\n xhr.responseType = this.drmVendor === DrmVendor.IRDETO || this.drmVendor === DrmVendor.UNKNOWN ?\n XhrResponseType.ARRAY_BUFFER :\n XhrResponseType.TEXT;\n\n const spcMessage = encodeURIComponent(Util.base64EncodeUint8Array((event).message));\n const params = 'spc=' + spcMessage + '&' + (xhr).session.contentId;\n\n xhr = this.setRequestHeaders(xhr);\n xhr.send(params);\n }\n\n private setRequestHeaders(xhr: XMLHttpRequest): XMLHttpRequest {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n if (!Util.isEmpty(this.drmInfo.fairplay.header)) {\n const h: StrAnyDict = this.drmInfo.fairplay.header;\n for (let key in h) {\n const v = h[key];\n xhr.setRequestHeader(key, v);\n }\n }\n return xhr;\n }\n\n private onLicenseLoaded(event: Event) {\n\n const xhr: XMLHttpRequest = event.target;\n const session = (xhr).session;\n\n if (!Util.inRange(xhr.status, 200, 400)) {\n this.throwFatalError(ErrorCode.FAIRPLAY_LIC_ERROR, AppResources.messages.FAIRPLAY_LICENSE_ERROR);\n }\n const key = xhr.responseType !== 'arraybuffer' ?\n Util.base64DecodeUint8Array(xhr.responseText) :\n new Uint8Array(xhr.response);\n\n session.update(key);\n }\n\n private onWebkitKeyAdded(event: Event) {\n this.logger.log(LogLevel.INFO, AppResources.messages.WEBKIT_KEY_ADDED_SUCCESS);\n }\n\n private onWebkitError(event: Error) {\n this.throwFatalError(ErrorCode.FAIRPLAY_LIC_ERROR, `${AppResources.messages.FAIRPLAY_LICENSE_ERROR}`);\n }\n\n ////////////////////\n //Private Methods\n ////////////////////\n\n private initializeFairplayCDM(): void {\n\n const licenseServerUrl: string = this.getLicenseServerUrl(this.initData);\n const contentId: string = this.getId(licenseServerUrl, this.initData);\n const video = (this.videoSurface.video);\n const global = SystemService.getInstance().global;\n const errMsg = AppResources.messages;\n\n if (!contentId) {\n this.throwFatalError(ErrorCode.FAIRPLAY_APP_CERT_ERROR, errMsg.FAIRPLAY_NO_CONTENT_ID);\n return;\n }\n\n if (!video.webkitKeys) {\n const keySystem = DrmType.FAIRPLAY_1_0;\n if (!global.WebKitMediaKeys.isTypeSupported(keySystem, 'video/mp4')) {\n this.throwFatalError(ErrorCode.FAIRPLAY_APP_CERT_ERROR, errMsg.FAIRPLAY_WEBKIT_ERROR);\n return;\n }\n try {\n video.webkitSetMediaKeys(new global.WebKitMediaKeys(keySystem));\n } catch (e) {\n this.throwFatalError(ErrorCode.FAIRPLAY_APP_CERT_ERROR, e.message);\n return;\n }\n }\n\n const appCertInitData = this.concatInitDataIdAndCertificate(this.initData, contentId, this.appCertData);\n const keySession = video.webkitKeys.createSession('video/mp4', appCertInitData);\n\n if (!keySession) {\n this.throwFatalError(ErrorCode.FAIRPLAY_APP_CERT_ERROR, errMsg.FAIRPLAY_WEBKIT_ERROR);\n return;\n }\n\n //TODO update this remove bind and use fat arrow to scope? Port from old code need to understand the flow a bit before change. \n keySession.contentId = contentId;\n keySession.addEventListener(this.WEBKIT_KEY_MESSAGE, this.onLicenseRequestReady.bind(this, licenseServerUrl), false);\n keySession.addEventListener(this.WEBKIT_KEY_ADDED, this.onWebkitKeyAdded.bind(this), false);\n keySession.addEventListener(this.WEBKIT_KEY_ERROR, this.onWebkitError.bind(this), false);\n }\n\n private concatInitDataIdAndCertificate(initData: Uint16Array, id: Uint16Array | string, cert: Uint8Array): Uint8Array {\n\n if (typeof id === 'string') {\n id = Util.stringToArray(id);\n }\n\n // layout is [initData][4 byte: idLength][idLength byte: id][4 byte:certLength][certLength byte: cert]\n let offset = 0;\n const buffer = new ArrayBuffer(initData.byteLength + 4 + id.byteLength + 4 + cert.byteLength);\n const dataView = new DataView(buffer);\n\n const initDataArray = new Uint8Array(buffer, offset, initData.byteLength);\n initDataArray.set(initData);\n offset += initData.byteLength;\n\n dataView.setUint32(offset, id.byteLength, true);\n offset += 4;\n\n const idArray = new Uint16Array(buffer, offset, id.length);\n idArray.set(id);\n offset += idArray.byteLength;\n\n dataView.setUint32(offset, cert.byteLength, true);\n offset += 4;\n\n const certArray = new Uint8Array(buffer, offset, cert.byteLength);\n certArray.set(cert);\n\n return new Uint8Array(buffer, 0, buffer.byteLength);\n }\n\n private getLicenseServerUrl(initData: Uint16Array): string {\n let url = null;\n\n if (!Util.isEmpty(this.drmInfo.fairplay.licenseUrl)) {\n url = this.drmInfo.fairplay.licenseUrl;\n }\n else {\n let initDataString = String.fromCharCode.apply(null, new Uint16Array(initData.buffer));\n var splitString = initDataString.split('://');\n url = 'https://' + splitString[1];\n }\n\n if (this.drmInfo.sessionId) {\n url = QueryString.append(url, { 'SessionId': this.drmInfo.sessionId });\n }\n if (this.drmInfo.ticket) {\n url = QueryString.append(url, { 'Ticket': this.drmInfo.ticket });\n }\n\n return url;\n }\n\n private extractContentId(initData: Uint16Array) {\n return Util.arrayToString(initData).split('skd://')[1];\n }\n\n private getId(licenseServerUrl: string, initData: Uint16Array): string | null {\n const obj: StrAnyDict = QueryString.decode(licenseServerUrl);\n console.log(obj);\n return obj.ContentId || obj.contentId || obj.assetId || this.extractContentId(initData);\n }\n\n /**\n * license server url needed to parse vendor\n */\n private getDrmVendor(url: string): string {\n let v = DrmVendor.UNKNOWN;\n if (url.indexOf(DrmVendor.IRDETO) !== -1) {\n v = DrmVendor.IRDETO;\n } else if (url.indexOf(DrmVendor.DRM_TODAY) !== -1) {\n v = DrmVendor.DRM_TODAY;\n }\n return v;\n }\n\n private throwFatalError(code: string, message: string) {\n\n this.logger.log(LogLevel.ERROR, code, message);\n\n this.emit(PlaybackAdapterEvents.ERROR, {\n code,\n message,\n fatal: true\n });\n }\n}\n","export enum PlayStation { \n //player states\n BUFFERING = 'buffering',\n END_OF_STREAM = 'endOfStream',\n NOT_READY = 'notReady',\n OPENING = 'opening', \n PAUSED = 'paused',\n PLAYING = 'playing',\n STOPPED = 'stopped',\n DISPLAYING_VIDEO = 'DisplayingVideo',\n UNKNOWN = 'unknown', \n READY = 'ready', \n\n //Access Messages\n //PLAYER_MESSAGE = 'playerMessage', //Deprecated Please use playerTimedEvent instead.\n PLAYER_TIMED_EVENT = 'playerTimedEvent',\n NETWORK_STATUS_CHANGE = 'networkStatusChange',\n CONTENT_AVAILABLE = 'contentAvailable',\n PLAYER_STATUS_CHANGE = 'playerStatusChange', \n PLAYER_STREAMING_ERROR = 'playerStreamingError', \n PLAYER_ERROR = 'playerError',\n PLAYER_SUBTITLE = 'playerSubtitle', //This event is deprecated and will be removed at a later date. Please use playerTimedEvent instead.\n GET_AUDIO_TRACKS = 'getAudioTracks',\n GET_VIDEO_REP_COUNT = 'getRepresentationsCount',\n GET_VIDEO_REP_INFO = 'getRepresentationInfo',\n GET_SUBTITLE_TRACKS = 'getSubtitleTracks',\n GET_PLAYBACK_TIME = 'getPlaybackTime', \n GET_SEEK_WINDOW = 'getSeekWindow', \n}\n\n","import { AppResources } from '../../app/AppResources';\nimport { Util } from '../../core/Util';\nimport { ErrorCode } from '../../enum/ErrorCode';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { MediaError } from '../../enum/MediaError';\nimport { EventHandler } from '../../iface/EventHandler';\nimport { EventInterface } from '../../iface/EventInterface';\nimport { PlaybackAdapterConfigInterface } from '../../iface/PlaybackAdapterConfigInterface';\nimport { QualityInterface } from '../../iface/QualityInterface';\nimport { ResourceLocationDrmInterface } from '../../iface/ResourceLocationDrmInterface';\nimport { DrmType } from '../../util/enum/DrmType';\nimport { PlaybackAdapterEvents } from '../enum/PlaybackAdapterEvents';\nimport { PlaybackAdapterType } from '../enum/PlaybackAdapterType';\nimport { VideoSurfaceEvents } from '../enum/VideoSurfaceEvents';\nimport { FairPlay } from '../util/FairPlay';\nimport { BaseHtml5Adapter } from './BaseHtml5Adapter';\n\n\nexport class Html5Adapter extends BaseHtml5Adapter {\n\n protected override pType = PlaybackAdapterType.HTML5;\n\n private fairplay: FairPlay;\n private audioTrackIdx: number = -1;\n private fairPlayEventHandler: EventHandler = (e: EventInterface) => this.onFairplayEvent(e);\n\n constructor(config: PlaybackAdapterConfigInterface) {\n super(config);\n this.logger.log(LogLevel.INFO, 'Html5Adapter created');\n }\n\n ////////////////////\n //Public Methods\n ////////////////////\n override initialize(): void {\n super.initialize();\n if (this.hasFairplayDrm(this.config.resource.location.drm)) {\n this.fairplay = new FairPlay(this.videoSurface, this.config, this.logger);\n this.fairplay.on(PlaybackAdapterEvents.ERROR, this.fairPlayEventHandler);\n this.fairplay.initialize();\n this.emit(PlaybackAdapterEvents.DRM_KEYSYSTEM_CREATED, { keysystem: DrmType.FAIRPLAY_1_0 });\n }\n }\n\n override destroy(): Promise {\n // Setting src to an empty string can cause a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Use removeAttribute instead, https://github.com/w3c/media-source/issues/53\n this.videoSurface.video.removeAttribute('src');\n // For all browsers to cleaning unload the src we need to call load() here\n // https://www.w3.org/TR/html5/embedded-content-0.html#best-practices-for-authors-using-media-elements\n this.videoSurface.video.load();\n\n if (this.fairplay) {\n this.fairplay.off(PlaybackAdapterEvents.ERROR, this.fairPlayEventHandler);\n this.fairplay.destroy();\n }\n\n return super.destroy();\n }\n\n ////////////////////\n //Accessors\n ////////////////////\n\n set currentIndex(index: number) {\n this.logger.log(LogLevel.INFO, AppResources.messages.MANUAL_ABR_SWITCHING_UNAVAILABLE);\n }\n // get currentIndex(): number { \n // }\n\n set autoQualitySwitching(value: boolean) {\n this.logger.log(LogLevel.INFO, AppResources.messages.MANUAL_ABR_SWITCHING_UNAVAILABLE);\n }\n // get autoBitrateSwitching(): boolean {\n\n // }\n\n set minBitrate(value: number) {\n this.logger.log(LogLevel.INFO, AppResources.messages.MANUAL_ABR_SWITCHING_UNAVAILABLE);\n }\n // get minBitrate(): number {\n\n // }\n\n set maxBitrate(value: number) {\n this.logger.log(LogLevel.INFO, AppResources.messages.MANUAL_ABR_SWITCHING_UNAVAILABLE);\n }\n // get maxBitrate(): number { \n // }\n\n get manifestQualities(): QualityInterface[] {\n return [];\n }\n\n ////////////////////\n // Protected \n ////////////////////\n protected override onVideoSurfaceEvent(e: EventInterface): void {\n switch (e.type) {\n case VideoSurfaceEvents.DURATION_CHANGE:\n this.pIsLiveStream = this.videoSurface.duration == Infinity;\n break;\n }\n\n super.onVideoSurfaceEvent(e);\n this.updateAudioTracks(e);\n }\n\n protected override loadMediaUrl(): Promise {\n this.videoSurface.src = this.mediaUrl;\n return super.loadMediaUrl()\n .then((): Promise | void => {\n const startTime = this.playback.startTime;\n if (startTime > 0) {\n return this.eventsToPromise(VideoSurfaceEvents.CAN_PLAY_THROUGH)\n .then(() => this.seek(startTime));\n }\n });\n }\n\n ////////////////////\n // Private\n ////////////////////\n private updateAudioTracks(e: EventInterface): void {\n const audioTracksInitialized = this.audioTrackIdx !== -1,\n tracks = this.videoSurface && this.videoSurface.video && this.videoSurface.video.audioTracks;\n\n if (!tracks) {\n return;\n }\n\n const enabledAudioTrackIdx = this.getEnabledAudioTrackId(tracks);\n switch (e.type) {\n case VideoSurfaceEvents.CAN_PLAY:\n if (!audioTracksInitialized) {\n this.audioTrackIdx = enabledAudioTrackIdx;\n this.normalizedAudioTracks = this.normalizeAudioTracks(Util.toArray(tracks), {\n type: 'kind',\n lang: 'language'\n });\n this.emit(PlaybackAdapterEvents.AUDIO_TRACK_UPDATED, {\n tracks: this.normalizedAudioTracks,\n track: this.normalizedAudioTracks[this.audioTrackIdx]\n });\n }\n break;\n case VideoSurfaceEvents.PROGRESS:\n if (audioTracksInitialized) {\n if (this.audioTrackIdx !== enabledAudioTrackIdx) {\n this.audioTrackIdx = enabledAudioTrackIdx;\n this.emit(PlaybackAdapterEvents.AUDIO_TRACK_CHANGE, { track: this.normalizedAudioTracks[this.audioTrackIdx] });\n }\n }\n break;\n }\n }\n\n private onFairplayEvent(e: EventInterface) {\n this.emit(e.type, e.data);\n }\n\n private getEnabledAudioTrackId(tracks: any): number {\n let i = tracks.length;\n while (i--) {\n if (tracks[i].enabled) {\n return i;\n }\n }\n return i;\n }\n\n private hasFairplayDrm(drmParams: ResourceLocationDrmInterface): boolean {\n return drmParams !== null ? !Util.isEmpty(drmParams.fairplay) : false;\n }\n\n protected override handleVideoSurfaceError(e: EventInterface) {\n //TODO stall event if video.networkState is 2 we can attempt a hard retry of the source content with a follow up seek to the last known time? \n super.handleVideoSurfaceError(e);\n const error = this.videoSurface.video.error;\n const message = Object.keys(MediaError)[error?.code - 1] || AppResources.messages.UNSPECIFIED_ERROR;\n\n if (error) {\n switch (error.code) {\n case MediaError.MEDIA_ERR_NETWORK:\n this.throwError(ErrorCode.HTML5_NETWORK_ERROR, message, error);\n break;\n case MediaError.MEDIA_ERR_DECODE:\n this.throwError(ErrorCode.HTML5_MEDIA_ERROR, message, error);\n break;\n case MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED:\n this.throwError(ErrorCode.HTML5_SRC_NOT_SUPPORTED, message, error);\n break;\n default:\n this.throwError(ErrorCode.UNSPECIFIED_VIDEO_PLAYBACK_ERROR, message, error);\n }\n }\n }\n}\n","import { Emitter } from '../../core/Emitter';\nimport { Util } from '../../core/Util';\nimport { ErrorCode } from '../../enum/ErrorCode';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { TextTrackMode } from '../../enum/TextTrackMode';\nimport { AudioTrackInterface } from '../../iface/AudioTrackInterface';\nimport { AudioTracksInterface } from '../../iface/AudioTracksInterface';\nimport { EventHandler } from '../../iface/EventHandler';\nimport { EventInterface } from '../../iface/EventInterface';\nimport { LoggerInterface } from '../../iface/LoggerInterface';\nimport { PlaybackAdapterConfigInterface } from '../../iface/PlaybackAdapterConfigInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { VideoSurfaceInterface } from '../../iface/VideoSurfaceInterface';\nimport { Timer } from '../../util/Timer';\nimport { PlaybackAdapterEvents } from '../enum/PlaybackAdapterEvents';\nimport { PlayStation } from '../enum/PlayStation';\nimport { TextTrackSurfaceEvents } from '../enum/TextTrackSurfaceEvents';\nimport { VideoSurfaceEvents } from '../enum/VideoSurfaceEvents';\n\n\nexport class WebMafVideoSurface extends Emitter implements VideoSurfaceInterface {\n\n private timer: Timer;\n private onTicHandler: EventHandler = (e: EventInterface) => this.onTic(e);\n\n private pTime: number = NaN;\n private pDuration: number = NaN;\n private pVideo: any;\n private pMetrics: any;\n private pState: string;\n private pStatePreSeek: string; //artificial state for buffering when seeking.Trap the current state at seeking , and set it back to that state at seeked. \n private abrProfileCount: number = 0;\n private pMasterBitrateProfile: StrAnyDict[] = [];\n private logger: LoggerInterface;\n private audioTrackInfo: AudioTracksInterface;\n private audioTrackUpdated: boolean = false;\n private pStartTime = NaN;\n private global: any;\n private config: PlaybackAdapterConfigInterface;\n private debugMode: boolean = false;\n private fatalErrorInProgress: boolean = false;\n private cea608708Detected: boolean = false;\n private cea608708Enabled: boolean = false;\n\n\n\n ///state\n private seeking: boolean = false;\n\n constructor(config: PlaybackAdapterConfigInterface) {\n super();\n\n this.logger = config.logger;\n\n this.timer = new Timer(500);\n this.timer.on(Timer.TIC_EVENT, this.onTicHandler);\n this.config = config;\n this.logger.log(LogLevel.WARN, `${this.config}`); //TODO remove once id3 owner tag filtering is implemented. \n this.global = config.system.global;\n //WebMaf Bindings\n this.pVideo = this.global.WM_videoPlayer;\n\n this.global.accessfunction = (json: any) => this.accessfunction(json);\n\n this.pMetrics = this.global.videometrics;\n this.pMetrics.onBitrateChange = (value: number) => this.onBitrateChange(value);\n\n // this.callExternalWebMafApi(\n // '{\"command\":\"setAdaptiveStreamingParameters\",' +\n // ' \"bandwidthHistoryMaxEntries\":10, ' +\n // ' \"bandwidthHistoryMinEntries\": 1, ' +\n // ' \"bandwidthUtilisationPercentage\": 90, ' +\n // ' \"segmentsBetweenSwitchUp\": 2}'\n // );\n\n this.debugMode = config.playerOptions.overrides?.enableLowLevelStreamingLogs ? true : false;\n //@ts-ignore\n if (this.logger) {\n this.pVideo.TTY = (tty: any) => {\n this.logger.log(LogLevel.DEBUG, tty);\n };\n this.pVideo.TTYLevel = this.debugMode ? 3 : 1;\n }\n }\n\n override destroy() {\n this.callExternalWebMafApi('{\"command\":\"stop\"}');\n this.timer.off(Timer.TIC_EVENT, this.onTicHandler);\n super.destroy();\n }\n\n // NOTE: This function only exists to fullfil the interface requirements. This entire class will soon be removed.\n load(starTime?: number) {\n return Promise.resolve();\n }\n\n play(): Promise {\n this.callExternalWebMafApi('{\"command\":\"play\"}');\n return Promise.resolve();\n }\n\n pause(): void {\n this.callExternalWebMafApi('{\"command\":\"pause\"}');\n }\n\n seek(position: number): Promise {\n if (!this.seeking) {\n this.seeking = true;\n this.pStatePreSeek = this.pState;\n const pos = Math.floor(position); //webmaf will fail to seek with float.\n this.callExternalWebMafApi('{\"command\":\"setPlayTime\",\"playTime\":' + pos + '}');\n this.logger.log(LogLevel.INFO, `seeking to ${pos}`);\n this.emit(VideoSurfaceEvents.SEEKING, { position: pos });\n this.pState = PlayStation.BUFFERING; // since we seeked, webmaf is delayed on buffering and does not change state if seek is too quick. \n }\n return Util.eventsToPromise([{ events: [VideoSurfaceEvents.SEEKED], target: this }], [{ events: [VideoSurfaceEvents.ERROR], target: this }]);\n }\n\n addEvents(): void {\n //TODO fill out with constructor code so we can add events at controlled time. \n }\n\n clearCue(): void {\n // noop\n }\n\n set startTime(value: number) {\n this.logger.log(LogLevel.INFO, `startTime set on webmaf ${value}`);\n this.pStartTime = value;\n }\n\n set volume(value: number) {//Ensemble does not control volume on webmaf, just lets TV. But you could. \n this.callExternalWebMafApi('{\"command\":\"setVolume\", \"volume\":' + value + '}');\n }\n get volume(): number {\n return 1;\n }\n\n set muted(value: boolean) {//Ensemble does not control volume on webmaf, just lets TV. But you could. \n this.callExternalWebMafApi('{\"command\": \"setVolume\", \"volume\": 0.0}');\n }\n get muted(): boolean {\n return false;\n }\n\n set src(value: string) {\n this.callExternalWebMafApi(value);\n }\n\n get video(): any {\n return this.pVideo;\n }\n\n get framerate(): number {\n return this.metrics.renderedFramerate;\n }\n\n get metrics(): StrAnyDict {\n return this.pMetrics;\n }\n\n get time(): number {\n return this.pTime;\n }\n\n get duration(): number {\n return this.pDuration;\n }\n\n get bufferLength(): number {\n return this.pVideo.bufferedRange;\n }\n\n get buffering(): boolean {\n return this.pState === PlayStation.BUFFERING;\n }\n\n get paused(): boolean {\n return this.pState === PlayStation.PAUSED;\n }\n\n get state(): string {\n return this.pState;\n }\n\n get masterBitrateProfile(): StrAnyDict[] {\n return this.pMasterBitrateProfile;\n }\n\n get bitrate(): number {\n return this.pMetrics.currentBitrate;\n }\n\n set startingBitrate(value: number) {\n this.logger.log(LogLevel.INFO, `startingBitrate set on webmaf ${value}`);\n this.callExternalWebMafApi('{\"command\":\"setVideoStartingBandwidth\",\"bandwidth\":' + value + '}');\n }\n\n set minBitrate(value: number) {\n this.logger.log(LogLevel.INFO, `minBitrate set on webmaf ${value}`);\n this.callExternalWebMafApi('{\"command\":\"setFixVideoRepresentations\", \"minBitrate\":' + value + '}');\n }\n\n set maxBitrate(value: number) {\n this.logger.log(LogLevel.INFO, `maxBitrate set on webmaf ${value}`);\n this.callExternalWebMafApi('{\"command\":\"setFixVideoRepresentations\", \"maxBitrate\":' + value + '}');\n }\n\n set audioTrack(track: AudioTrackInterface) {\n const id = this.audioTrackInfo.tracks[track.index].id;\n this.audioTrackUpdated = true;\n this.callExternalWebMafApi('{\"command\":\"setAudioTrack\", \"audioTrack\":' + JSON.stringify(id) + '}');\n }\n\n set textTrackMode(mode: TextTrackMode) {\n const enable = mode !== TextTrackMode.DISABLED;\n if (this.cea608708Detected) {\n this.cea608708Enabled = enable;\n this.callExternalWebMafApi('{\"command\":\"setClosedCaptions\",\"enable\": ' + enable + '}');\n }\n else {\n const id = enable ? 'en' : '';\n this.callExternalWebMafApi('{\"command\":\"setSubtitleTrack\",\"subtitleTrack\":' + JSON.stringify(id) + ', \"disablePreviousTrack\":false }');\n }\n this.logger.log(LogLevel.INFO, `Text Track is enabled: ${enable}`);\n }\n\n set textTrack(track: TextTrack) {\n this.logger.log(LogLevel.WARN, 'Changing the text track language is not supported on PlayStation 4 at this time');\n //To support multi lang tracks use this and rework textTrackMode\n // this.callExternalWebMafApi('{\"command\":\"setSubtitleTrack\",\"subtitleTrack\": ' + JSON.stringify(track.language) + '}');\n // this.emit(TextTrackSurfaceEvents.TEXT_TRACK_CHANGE, track);\n }\n\n set textTrackSrc(url: string) {\n this.logger.log(LogLevel.INFO, `Sidecar text is not supported on playstation ${url}`);\n }\n\n get textTracks(): TextTrack[] {\n return [];\n }\n\n private callExternalWebMafApi(command: string) {\n this.global.external.user(command);\n }\n\n private onTic(e: EventInterface) {\n\n this.callExternalWebMafApi('{\"command\":\"getPlaybackTime\"}');\n if (this.audioTrackUpdated) { // may be able to call this right after setting but since codec fails will not set. \n this.audioTrackUpdated = false;\n }\n\n this.pMetrics.poll();\n }\n\n private respondToPlaybackTime(data: any) {\n /**\n * webmaf spits out bogus time value when user \n * seeking quickly and we do not want to update time on that\n * or any value > duration. Live we set to Number.POS_INFINITY... \n */\n if (this.pTime !== data.elapsedTime && data.elapsedTime <= this.pDuration) { //SOMETIMES start at first segment length on live streams as time marches on\n\n this.pTime = data.elapsedTime;\n\n if (!this.seeking) {\n this.emit(VideoSurfaceEvents.TIME_UPDATE, { value: this.pTime });\n }\n\n if (this.seeking) {\n this.seeking = false;\n this.pState = this.pStatePreSeek;\n this.emit(VideoSurfaceEvents.SEEKED);\n //TODO -If paused we need to do one timeupdate event here to up post seek complete. calling '{\"command\":\"getPlaybackTime\"} does not seem to fire if paused. \n }\n }\n }\n\n private onBitrateChange(value: number) {\n const videoBitrate = value;\n const index = Util.getIndexForBitrate(this.pMasterBitrateProfile, videoBitrate, false);\n this.logger.log(LogLevel.INFO, `bitrate change ${videoBitrate}`);\n this.emit(PlaybackAdapterEvents.ABR_QUALITY_LOADED, { index: index });\n //TODO can we event quality info changed with webmaf??\n }\n\n /**\n * Not supported by webmaf for any format besides smooth streaming. \n */\n private parseAudioInfo(info: any): AudioTracksInterface {\n\n const rawTracks: [] = info.audioTracks.split(',');\n const channels: [] = info.audioNumChannels.split(',');\n const returnObj: AudioTracksInterface = { track: null, tracks: [] };\n\n for (let i = 0, len = rawTracks.length; i < len; i++) {\n const track: AudioTrackInterface = {\n index: i,\n id: rawTracks[i],\n type: channels[i],\n lang: rawTracks[i],\n label: rawTracks[i],\n codec: ''\n };\n\n returnObj.tracks.push(track);\n\n if (rawTracks[i] === info.currentAudioTrack) {\n returnObj.track = track;\n }\n }\n return returnObj;\n }\n\n /**\n * WebMaf Access Point.\n */\n private accessfunction(json: any) {\n\n if (this.debugMode &&\n json.indexOf('getPlaybackTime') === -1 &&\n json.indexOf('playerSubtitle') === -1 &&\n json.indexOf('playerMessage') === -1) {\n this.logger.log(LogLevel.INFO, 'Access Function Avia:', json);\n }\n\n const data = JSON.parse(json);\n\n switch (data.command) {\n case PlayStation.GET_AUDIO_TRACKS:\n this.respondToAudioTrackInfo(data);\n break;\n\n case PlayStation.GET_VIDEO_REP_COUNT:\n this.respondToVideoRepCount(data);\n break;\n\n case PlayStation.GET_VIDEO_REP_INFO:\n this.respondToVideoRepInfo(data);\n break;\n\n case PlayStation.GET_SUBTITLE_TRACKS:\n this.respondToGetSubtitleTracks(data);\n break;\n\n case PlayStation.GET_PLAYBACK_TIME:\n this.respondToPlaybackTime(data);\n break;\n\n case PlayStation.NETWORK_STATUS_CHANGE:\n break;\n\n case PlayStation.CONTENT_AVAILABLE:\n this.respondToContentAvailable(data);\n break;\n\n case PlayStation.PLAYER_SUBTITLE:\n this.respondToPlayerSubtitle(data);\n break;\n\n case PlayStation.GET_SEEK_WINDOW:\n break;\n\n case PlayStation.PLAYER_TIMED_EVENT:\n this.respondToTimedMetadataEvent(data);\n break;\n\n case PlayStation.PLAYER_ERROR:\n case PlayStation.PLAYER_STREAMING_ERROR:\n if (!this.fatalErrorInProgress) {\n this.fatalErrorInProgress = true;\n this.respondToError(data);\n }\n break;\n\n case PlayStation.PLAYER_STATUS_CHANGE:\n this.respondToPlayerStatusChange(data);\n break;\n }\n }\n\n /**\n * Player Status\n */\n private respondToPlayerStatusChange(data: any) {\n switch (data.playerState) {\n case PlayStation.BUFFERING:\n //we only set state on buffering and take no other action. Case not needed. \n break;\n case PlayStation.READY:\n this.respondToPlayerStatusReady(data);\n break;\n\n case PlayStation.PAUSED:\n this.emit(VideoSurfaceEvents.PAUSE);\n break;\n\n case PlayStation.PLAYING:\n this.emit(VideoSurfaceEvents.PLAYING);\n break;\n\n case PlayStation.DISPLAYING_VIDEO:\n this.timer.start();\n break;\n\n case PlayStation.END_OF_STREAM:\n this.respondToPlayerStatusEOS();\n break;\n default:\n break;\n }\n this.pState = data.playerState;\n }\n\n private respondToError(data: any) {\n const startError: boolean = this.pDuration === 0;\n const code = startError ? ErrorCode.WEBMAF_START_ERROR : ErrorCode.WEBMAF_NETWORK_ERROR;\n const fatal = data.status === 'fail';\n\n let message = null;\n if (data.error_info) { //generic video error. \n message = data.error_info;\n } else if (data.error && data.status_code) {\n message = data.error + ' : ' + data.status_code;\n }\n\n this.emit(VideoSurfaceEvents.ERROR, { code, message, data, fatal });\n }\n\n private respondToGetSubtitleTracks(data: any) {\n const arr = data.subtitleTracks.split(',');\n arr.forEach((item: any) => {\n if (item === 'und') { //metadata track, not working in latest webmaf\n this.logger.log(LogLevel.INFO, \"timed metadata detected.\", data);\n this.callExternalWebMafApi('{\"command\":\"setTimedMetadata\",\"enable\":true}');\n this.callExternalWebMafApi('{\"command\":\"setSubtitleTrack\",\"subtitleTrack\":\"und\", \"disablePreviousTrack\":false}');\n this.callExternalWebMafApi('{\"command\":\"setClosedCaptions\",\"enable\":true}'); //turned on here to start detection of embedded captions track. \n\n }\n else if (item === 'en') {\n //Temp solution when we take on multi lang tracks for text and audio on ps4, will need some refactor.\n const track: any = {\n language: item,\n kind: 'subtitle',\n label: item\n };\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_AVAILABLE);\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_ADDED, track);\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_CHANGE, track);//use this to set the current track in info.\n }\n });\n }\n\n private respondToTimedMetadataEvent(data: any) {\n //NOTE - duplicate events come in here as well as to respondToPlayerSubtitle so ignore text and webvtt types unless text type is google_\n // Since ps4 does not tell you if you have a valid lang in und metadata track for embedded captions we are forced to do our own detection scheme.\n if (data.datatype === 'cea-708') {\n if (!this.cea608708Detected) {\n this.cea608708Detected = true;\n //We need to look at deferred enablement turn off explicitly and dispatch we have found captions to app user.\n this.callExternalWebMafApi('{\"command\":\"setClosedCaptions\",\"enable\":false}'); // this takes time so if captions come in between detection and turning off they will go out. \n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_AVAILABLE);\n }\n else if (this.cea608708Enabled) {\n this.respondToPlayerSubtitle(data); //forward cea-708 data to the subs handler. in this case not sent to both like others are. DOH?\n }\n }\n else if (data.datatype === 'data') {\n //Note this is how they come in and why 6. Tired trim(). need more solid way to get the ? chars out and trim whitespace etc. \n //\"ID3\u0004\u0000 \u0000\u0000\u0002\u0005PRIV\u0000\u0000\u0001{\u0000\u0000www.nielsen.com/GIacGeL6qt1pDJEY8aGMbw==/f1bYkmvY8AaRr_I-uNLUxQ==/F08C4UUc65OhEq8MxxxZ06Tg2PhDjvquPumVp2bpAm46-5iZjSQBZHDeRiD5IjyBFexrZskzvqgLjgcglZHCRnACer0jfflfiV4X7sfv4T3BIAAqYA017yEk_AeP0JT03WPSX100zdCIGeIlgZnkYj6UvWAkVbpgJFXEO1A=/49977/39178/00\u0000A\" \n const arr = this.config.resource.playback.id3OwnerIds;\n const decodeBase64 = atob(data.data);\n const info = decodeBase64.split('PRIV')[1].slice(6, -1);//Nielsen tested only. \n Util.forEach(arr, (id) => {\n if (info.indexOf(id) !== -1) {\n this.emit(TextTrackSurfaceEvents.METADATA_CUEPOINT, { id: 'PRIV', info, data: data.data });\n }\n });\n }\n else if (data.datatype === 'text' && this.detectDaiImpression(data.data)) { //DAI impression case. \n this.emit(TextTrackSurfaceEvents.METADATA_CUEPOINT, { id: 'google_dai', info: '', data: data.data, startTime: (data.timestamp / 1000) });\n }\n }\n\n private detectDaiImpression(str: string): boolean {\n return /google_\\d+/.test(str);\n }\n\n private respondToPlayerSubtitle(data: any) {\n\n if (this.detectDaiImpression(data.text)) {\n return; //block google impression duplicated event here.\n }\n\n let cueList: StrAnyDict = [];\n\n //CEA Embedded 608 \n if (data.datatype === 'cea-708') {\n cueList = data.details.captions;\n }\n else {\n cueList.push({ text: data.text });\n }\n\n if (cueList.length > 0) {\n this.emit(TextTrackSurfaceEvents.TEXT_CUEPOINT, { activeCues: cueList });\n }\n }\n\n private respondToContentAvailable(data: any) {\n if (this.pDuration !== data.totalLength) {\n this.pDuration = data.totalLength === 0 ? Number.POSITIVE_INFINITY : data.totalLength; //live linear or vod. DVR will need to grab seek window info and use duration from that. \n this.emit(VideoSurfaceEvents.DURATION_CHANGE, { value: this.pDuration });\n }\n }\n\n private respondToVideoRepInfo(data: any) {\n this.pMasterBitrateProfile.push(data);\n if (this.pMasterBitrateProfile.length === this.abrProfileCount) {\n this.emit(PlaybackAdapterEvents.MANIFEST_PARSED, this.pMasterBitrateProfile);\n }\n }\n\n private respondToVideoRepCount(data: any) {\n this.abrProfileCount = data.count;\n for (let i = 0; i < this.abrProfileCount; i++) {\n this.callExternalWebMafApi('{\"command\":\"getRepresentationInfo\", \"representation\":' + i + '}');\n }\n }\n\n private respondToAudioTrackInfo(data: any) {\n this.audioTrackInfo = this.parseAudioInfo(data);\n this.emit(PlaybackAdapterEvents.AUDIO_TRACK_UPDATED, this.audioTrackInfo);\n }\n\n private respondToPlayerStatusEOS() {\n this.timer.stop();\n this.emit(VideoSurfaceEvents.ENDED);\n }\n\n private respondToPlayerStatusReady(data: any) {\n this.emit(VideoSurfaceEvents.LOADED_METADATA);\n this.callExternalWebMafApi('{\"command\":\"getRepresentationsCount\"}');\n this.callExternalWebMafApi('{\"command\":\"getSubtitleTracks\"}');\n this.callExternalWebMafApi('{\"command\":\"getSeekWindow\"}');\n\n //this.callExternalWebMafApi('{\"command\":\"getAudioTracks\"}');// disabled for now, not supported for HLS or Dash. \n\n //set deferred playback options here.\n !isNaN(this.pStartTime) && this.seek(this.pStartTime);\n }\n}\n","export enum ShakaRobustness { \n MANIFEST_RETRY_ATTEMPTS = 2,\n MANIFEST_RETRY_INTERVAL = 1000,\n // NOTE: Shaka's maxAttempts parameter includes the initial failed attempt, so if the desired goal is to perform 3 retrires, this should be set to 4\n FATAL_ERROR_RECOVERY_ATTEMPTS = 4, \n FATAL_ERROR_RECOVERY_DELAY = 1000,\n FATAL_ERROR_RECOVERY_BACKOFF = 2,\n FATAL_ERROR_RECOVERY_FUZZ = 0\n}","import { Util } from '../../core/Util';\nimport { AudioTrackInterface } from '../../iface/AudioTrackInterface';\nimport { DestroyInterface } from '../../iface/DestroyInterface';\nimport { EventInterface } from '../../iface/EventInterface';\nimport { LiveStreamInfoInterface } from '../../iface/LiveStreamInfoInterface';\nimport { PlaybackAdapterConfigInterface } from '../../iface/PlaybackAdapterConfigInterface';\nimport { QualityInterface } from '../../iface/QualityInterface';\nimport { PlaybackAdapterEvents } from '../enum/PlaybackAdapterEvents';\nimport { PlaybackAdapterType } from '../enum/PlaybackAdapterType';\nimport { WebMafVideoSurface } from '../surface/WebMafVideoSurface';\nimport { BasePlaybackAdapter } from './BasePlaybackAdapter';\nexport class PlayStationAdapter extends BasePlaybackAdapter {\n\n protected override pType = PlaybackAdapterType.PLAY_STATION;\n\n private psEventMap = [\n {\n type: PlaybackAdapterEvents.MANIFEST_PARSED,\n callback: (e: EventInterface) => this.onManifestParsed(e)\n },\n {\n type: PlaybackAdapterEvents.ABR_QUALITY_LOADED,\n callback: (e: EventInterface) => this.onBubble(e)\n },\n {\n type: PlaybackAdapterEvents.AUDIO_TRACK_UPDATED,\n callback: (e: EventInterface) => this.onBubble(e)\n }\n ];\n\n constructor(config: PlaybackAdapterConfigInterface) {\n super(config);\n this.log(this.pType, this.videoSurface.video.version, this.videoSurface.video.TTYLevel, this.videoSurface.metrics);\n }\n\n override createVideoSurface() {\n return new WebMafVideoSurface(this.config);\n }\n\n override createMetadataSurface(): DestroyInterface {\n return null; // doesn't apply to WebMAF\n }\n\n ////////////////////\n //Public Methods\n ////////////////////\n override initialize(): void {\n super.initialize();\n\n //set options\n const opts = this.playback;\n const surface: WebMafVideoSurface = this.videoSurface;\n\n !isNaN(opts.abr.startBitrate) && (surface.startingBitrate = opts.abr.startBitrate);\n !isNaN(opts.abr.minBitrate) && (surface.minBitrate = opts.abr.minBitrate);\n !isNaN(opts.abr.maxBitrate) && (surface.maxBitrate = opts.abr.maxBitrate);\n !isNaN(opts.startTime) && (surface.startTime = opts.startTime);\n\n this.addEvents(this.videoSurface, this.psEventMap);\n }\n\n protected override loadMediaUrl(): Promise {\n const drm = this.config.resource.location.drm;\n const token = drm.aes.header?.authorization?.trim().replace(/^Bearer /i,'');\n\n const loadAes = '{\"command\":\"load\", \"contentUri\":\"' + this.mediaUrl + '\",\"licenseUri\":\"\", \"customData\":\"&ls_session=' + token + '\",\"sourceType\":' + 0 + '}';\n const loadDrm = '{\"command\":\"load\", \"contentUri\":\"' + this.mediaUrl + '\", \"licenseUri\":\"' + drm.playready.url + '\",\"customData\": \"\",\"sourceType\":' + 0 + '}';\n\n this.videoSurface.src = (!Util.isEmpty(drm.aes.header)) ? loadAes : loadDrm;\n return super.loadMediaUrl();\n }\n\n override destroy(): Promise {\n this.removeEvents(this.videoSurface, this.psEventMap);\n this.videoSurface.destroy();\n return super.destroy();\n }\n\n override play(): void {\n this.videoSurface.play();\n }\n\n override pause(): void {\n this.videoSurface.pause();\n }\n\n override seek(position: number): void {\n this.videoSurface.seek(position);\n }\n ////////////////////\n //Accessors\n ////////////////////\n\n override set audioTrack(track: AudioTrackInterface) {\n (this.videoSurface).audioTrack = track;\n }\n\n override get type(): PlaybackAdapterType {\n return this.pType;\n }\n\n override get time(): number {\n return this.videoSurface.time;\n }\n\n override get duration(): number {\n return this.videoSurface.duration;\n }\n\n override get droppedVideoFrames(): number {\n return this.videoSurface.metrics.droppedFrame; //TODO check name\n }\n override get buffering(): boolean {\n return this.videoSurface.buffering;\n }\n\n set currentIndex(index: number) {\n //setRepresentationEnable\n //setRepresentationDisable\n }\n // get currentIndex(): number { \n // }\n\n get currentBitrate(): number {\n return this.videoSurface.metrics.bitrate; //TODO check this works\n }\n\n set autoQualitySwitching(value: boolean) {\n //setAdaptiveStreamingParameters\n //setFixVideoRepresentations\n }\n // get autoBitrateSwitchEnabled(): boolean {\n\n // }\n\n set minBitrate(value: number) {\n //setAdaptiveStreamingParameters\n //setFixVideoRepresentations\n }\n // get minBitrateAllowed(): number {\n\n // }\n\n set maxBitrate(value: number) {\n //setAdaptiveStreamingParameters\n //setFixVideoRepresentations\n }\n // get maxBitrateAllowed(): number { \n // }\n\n get manifestQualities(): QualityInterface[] {\n return (this.videoSurface).masterBitrateProfile.map(this.normalizeQuality);\n }\n\n get liveStreamInfo(): LiveStreamInfoInterface {\n //getSeekWindow!\n return this.liveStreamInfoVO;\n }\n\n protected override handleVideoSurfaceError(e: EventInterface) {\n const { data, message, code, fatal } = e.data;\n this.throwError(code, message, data, fatal);\n }\n\n private onManifestParsed(e: EventInterface) {\n this.emit(PlaybackAdapterEvents.MANIFEST_PARSED, { profile: this.manifestQualities });\n }\n\n private onBubble(e: EventInterface) {\n this.emit(e.type, e.data);\n }\n}\n","import { AppResources } from '../../app/AppResources';\nimport { Util } from '../../core/Util';\nimport { ErrorCode } from '../../enum/ErrorCode';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { TextTrackEvent } from '../../enum/TextTrackEvent';\nimport { TextTrackKind } from '../../enum/TextTrackKind';\nimport { TextTrackMode } from '../../enum/TextTrackMode';\nimport { AudioTrackInterface } from '../../iface/AudioTrackInterface';\nimport { MetadataCuepointInterface } from '../../iface/MetadataCuepointInterface';\nimport { PlaybackAdapterConfigInterface } from '../../iface/PlaybackAdapterConfigInterface';\nimport { QualityInterface } from '../../iface/QualityInterface';\nimport { RangeInterface } from '../../iface/RangeInterface';\nimport { ResourcePlaybackAbrInterface } from '../../iface/ResourcePlaybackAbrInterface';\nimport { TextTrackInterface } from '../../iface/TextTrackInterface';\nimport { Playback } from '../enum/Playback';\nimport { PlaybackAdapterEvents } from '../enum/PlaybackAdapterEvents';\nimport { PlaybackAdapterType } from '../enum/PlaybackAdapterType';\nimport { ShakaRobustness } from '../enum/ShakaRobustness';\nimport { TextTrackSurfaceEvents } from '../enum/TextTrackSurfaceEvents';\nimport { Category, Code, EmsgInfo, ErrorNS, LanguageRole, NetworkingEngine, Player, PlayerConfiguration, Request, Response, shaka, TimelineRegionInfo, Track } from '../interface/ShakaInterface';\nimport { Html5VideoSurface } from '../surface/Html5VideoSurface';\nimport { BaseHtml5Adapter } from './BaseHtml5Adapter';\n\n\nexport class ShakaAdapter extends BaseHtml5Adapter {\n\n protected override pType: PlaybackAdapterType = PlaybackAdapterType.SHAKA;\n\n private shaka: shaka = (window).shaka;\n private player!: Player;\n private playerConfig!: PlayerConfiguration;\n private networkEngine: NetworkingEngine;\n private audioTracks!: LanguageRole[];\n private textTracks: Track[] = [];\n private pTextTrack: TextTrack;\n private currentTextTrack: Track;\n private currentTextTrackMode: TextTrackMode;\n private variant: Track;\n private pSegmentDuration: number = NaN;\n private playerEventMap = [\n this.mapEvent('error', this.onError),\n this.mapEvent('streaming', this.onManifestParsed),\n this.mapEvent('variantchanged', this.onBitrateChanged),\n this.mapEvent('adaptation', this.onBitrateChanged),\n this.mapEvent('emsg', this.onEmsg),\n this.mapEvent('trackschanged', this.onTracksChanged),\n this.mapEvent('variantchanged', this.onVariantChanged),\n this.mapEvent('adaptation', this.onAdaptation),\n //TODO this.mapEvent('manifestparsed', this.onManifestParsed), Understand why are we not using this event?\n this.mapEvent('drmsessionupdate', this.onDrmSessionUpdate),\n this.mapEvent('texttrackvisibility', this.onTextTrackVisibility),\n this.mapEvent('timelineregionenter', this.onTimelineRegionEnter),\n ];\n private onCueChangeHandler: EventListenerOrEventListenerObject = (e: TrackEvent) => this.onCueChange(e);\n private audioSwitching: boolean = false;\n private renderTextTrackNatively: boolean = true;\n private cleanUpVtt: boolean = false;\n\n constructor(config: PlaybackAdapterConfigInterface) {\n super(config);\n\n this.logger.log(LogLevel.INFO, 'ShakaAdapter created');\n this.updateAudioTracks = Util.debounce(this.updateAudioTracks.bind(this), 25);\n this.updateTextTracks = Util.debounce(this.updateTextTracks.bind(this), 25);\n this.resize = Util.debounce(this.resize.bind(this), 250);\n }\n\n ////////////////////\n // Public Methods\n ////////////////////\n\n override createVideoSurface() {\n return new Html5VideoSurface(this.config, false);\n }\n\n override initialize(): void {\n super.initialize();\n\n // Shaka polyfill for VTTCue can cause issues when hlsjs is loaded after Shaka. See VTG-2189\n if (typeof VTTCue == 'undefined') {\n this.cleanUpVtt = true;\n }\n\n // player initialization\n this.shaka.polyfill.installAll();\n\n this.player = new this.shaka.Player(this.videoSurface.video);\n // @ts-ignore (static members are not allowed in interfaces)\n this.logger.log(LogLevel.INFO, `Shaka version: ${this.shaka.Player.version}`);\n this.playerConfig = this.player.getConfiguration();\n this.addEvents(this.player, this.playerEventMap);\n\n // retry config\n let retry = this.playerConfig.streaming.retryParameters;\n retry.maxAttempts = ShakaRobustness.FATAL_ERROR_RECOVERY_ATTEMPTS;\n retry.baseDelay = ShakaRobustness.FATAL_ERROR_RECOVERY_DELAY;\n retry.backoffFactor = ShakaRobustness.FATAL_ERROR_RECOVERY_BACKOFF;\n retry.fuzzFactor = ShakaRobustness.FATAL_ERROR_RECOVERY_FUZZ;\n\n retry = this.playerConfig.manifest.retryParameters;\n retry.maxAttempts = ShakaRobustness.MANIFEST_RETRY_ATTEMPTS;\n retry.baseDelay = ShakaRobustness.MANIFEST_RETRY_INTERVAL;\n\n // network config\n this.networkEngine = this.player.getNetworkingEngine();\n this.networkEngine.registerRequestFilter(this.onRequest.bind(this));\n this.networkEngine.registerResponseFilter(this.onResponse.bind(this));\n\n // drm config\n const drm = this.config.resource.location.drm;\n if (drm.widevine && drm.widevine.url) {\n this.playerConfig.drm.servers['com.widevine.alpha'] = drm.widevine.url;\n }\n\n if (drm.playready && drm.playready.url) {\n this.playerConfig.drm.servers['com.microsoft.playready'] = drm.playready.url;\n }\n\n // abr config\n const abrConfig: ResourcePlaybackAbrInterface = this.playback.abr;\n const abr = this.playerConfig.abr;\n\n if (!isNaN(abrConfig.minBitrate)) {\n abr.restrictions.minBandwidth = abrConfig.minBitrate;\n }\n\n if (!isNaN(abrConfig.maxBitrate)) {\n abr.restrictions.maxBandwidth = abrConfig.maxBitrate;\n }\n\n if (!isNaN(abrConfig.startBitrate)) {\n abr.defaultBandwidthEstimate = abrConfig.startBitrate * 1.15;\n }\n\n // performance settings\n const settings = this.config.performanceSettings;\n if (settings.forwardBufferLength != null) {\n this.playerConfig.streaming.bufferingGoal = settings.forwardBufferLength;\n }\n if (settings.backBufferLength != null) {\n this.playerConfig.streaming.bufferBehind = settings.backBufferLength;\n }\n\n this.renderTextTrackNatively = this.config.playerOptions.renderTextTrackNatively;\n if (this.renderTextTrackNatively == false) {\n this.playerConfig.streaming.alwaysStreamText = true;\n }\n\n // advanced video and audio codec settings\n const pbk = this.playback;\n const enableAdvancedCodecs = pbk.enableAdvancedCodecs;\n\n // TODO - accept an empty array?\n const userVideoCodecs = !Util.isEmpty(pbk.preferredVideoCodecs) ? pbk.preferredVideoCodecs : null;\n const userAudioCodecs = !Util.isEmpty(pbk.preferredAudioCodecs) ? pbk.preferredAudioCodecs : null;\n\n if (enableAdvancedCodecs) {\n this.playerConfig.preferredVideoCodecs = userVideoCodecs || ['hev', 'hvc', 'dvhe'];\n this.playerConfig.preferredAudioCodecs = userAudioCodecs || ['ec-3', 'ac-3'];\n }\n\n this.playerConfig = this.mergeStreamingConfigs(this.playerConfig, this.config.resource.overrides);\n\n this.configure();\n }\n\n override resize(): void {\n if (!this.playback.abr.capQualityToScreenSize) {\n return;\n }\n\n const low = this.getVariantTracks()[0];\n if (!low) {\n return;\n }\n\n let { clientWidth, clientHeight } = this.videoSurface.video;\n\n if (clientWidth < low.width || clientHeight < low.height) {\n clientWidth = low.width;\n clientHeight = low.height;\n }\n\n const { restrictions } = this.playerConfig;\n if (restrictions.maxWidth === clientWidth && restrictions.maxHeight === clientHeight) {\n return;\n }\n\n restrictions.maxWidth = clientWidth;\n restrictions.maxHeight = clientHeight;\n this.configure();\n }\n\n override destroy(): Promise {\n this.removeEvents(this.player, this.playerEventMap);\n\n if (this.pTextTrack) {\n this.pTextTrack.removeEventListener(TextTrackEvent.CUE_CHANGE, this.onCueChangeHandler);\n }\n\n return this.player.destroy()\n .then(() => {\n this.player = null;\n this.networkEngine = null;\n this.playerConfig = null;\n this.shaka = null;\n this.textTracks = null;\n this.audioTracks = null;\n this.variant = null;\n this.pTextTrack = null;\n this.currentTextTrack = null;\n\n if (this.cleanUpVtt) {\n delete window.VTTCue;\n }\n\n return super.destroy();\n });\n }\n\n override suspend(): void {\n this.playerConfig.streaming.bufferingGoal = 1;\n this.playerConfig.streaming.rebufferingGoal = 1;\n }\n\n override resume(): void {\n this.playerConfig.streaming.bufferingGoal = 10;\n this.playerConfig.streaming.rebufferingGoal = 10;\n }\n\n override clearCue(): void {\n Util.clearCue(this.pTextTrack, this.videoSurface.video.currentTime);\n }\n\n ////////////////////\n // Accessors\n ////////////////////\n override get seekable(): RangeInterface {\n return this.player.seekRange();\n }\n\n set autoQualitySwitching(value: boolean) {\n this.playerConfig.abr.enabled = value;\n this.configure();\n }\n get autoQualitySwitching(): boolean {\n return this.playerConfig.abr.enabled;\n }\n\n set currentIndex(index: number) {\n const track = this.getVariantTracks()[index];\n this.player.selectVariantTrack(track, true);\n }\n get currentIndex(): number {\n const index = Util.findIndex(this.getVariantTracks(), this.isActive);\n return index;\n }\n\n override get segmentDuration(): number {\n return this.pSegmentDuration;\n }\n\n get manifestQualities(): QualityInterface[] {\n return this.getVariantTracks().map((item: Track, index: number): QualityInterface => ({\n index,\n bitrate: item.bandwidth,\n width: item.width,\n height: item.height,\n codec: item.codecs\n }));\n }\n\n set maxBitrate(value: number) {\n if (isNaN(value)) {\n value = Infinity;\n }\n this.playerConfig.abr.restrictions.maxBandwidth = value;\n this.configure();\n this.constrainAbr();\n }\n get maxBitrate(): number {\n return this.playerConfig.abr.restrictions.maxBandwidth;\n }\n\n set minBitrate(value: number) {\n if (isNaN(value)) {\n value = -Infinity;\n }\n this.playerConfig.abr.restrictions.minBandwidth = value;\n this.configure();\n this.constrainAbr();\n }\n get minBitrate(): number {\n return this.playerConfig.abr.restrictions.minBandwidth;\n }\n\n override set audioTrack(track: AudioTrackInterface) {\n if (!track) {\n this.logger.log(LogLevel.INFO, 'ShakaAdapter: Audio track is null, will not set.');\n\n return;\n }\n this.audioSwitching = true;\n this.player.selectAudioLanguage(track.lang, track.type);\n }\n\n override get droppedVideoFrames(): number {\n const stats = this.player.getStats();\n return stats.droppedFrames;\n }\n\n override get framerate(): number {\n const track = this.variant;\n return track ? track.frameRate : Number.NaN;\n }\n\n override set textTrackMode(mode: TextTrackMode) {\n this.currentTextTrackMode = mode;\n\n if (this.renderTextTrackNatively) {\n this.player.setTextTrackVisibility(mode != TextTrackMode.DISABLED);\n\n // NOTE: The textTrack mode needs to be overridden because Shaka uses showing/hidden, but the player uses showing/disabled. \n this.pTextTrack.mode = mode;\n }\n else {\n this.onTextTrackVisibility();\n }\n }\n\n override set textTrack(track: TextTrackInterface) {\n // NOTE: We need ts-ignore here because the object being passed in is a Shaka text track, not a DOM text track\n //@ts-ignore\n if (this.currentTextTrack && track.id == this.currentTextTrack.id) {\n return;\n }\n\n //@ts-ignore\n this.currentTextTrack = track;\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_CHANGE, this.currentTextTrack);\n this.player.selectTextTrack(track);\n }\n\n override get fragmentType(): string {\n const track = this.getVariantTrack();\n return track ? track.mimeType : '';\n }\n\n ////////////////////\n // Protected Methods\n ////////////////////\n\n protected override loadMediaUrl(): Promise {\n const startTime = this.playback.startTime;\n return this.player.load(this.mediaUrl, (isNaN(startTime) || startTime < 0) ? 0 : startTime)\n .then(() => {\n this.pIsLiveStream = this.player.isLive();\n\n this.loadedMetadata();\n\n // TODO: The player config only allows for a single side car file, with only a URL.\n // This should be updated to accept an array of track objects.\n const textTrackUrl = this.config.resource.location.textTrackUrl;\n if (!Util.isEmpty(textTrackUrl)) {\n const mime = Util.getMimeType(textTrackUrl);\n this.player.addTextTrack(textTrackUrl, 'en', TextTrackKind.CAPTIONS, mime);\n }\n })\n // Shaka does not dispatch an error event when a manifest parse error occurs. Force one here:\n .catch((detail: any) => {\n throw this.createPlayerError(detail);\n });\n }\n\n ////////////////////\n // Event Handlers\n ////////////////////\n private onError(e: any): void {\n const { code, message, data, fatal } = this.createPlayerError(e.detail);\n this.throwError(code, message, data, fatal);\n }\n\n private onManifestParsed(e: any): void {\n this.pSegmentDuration = this.player.getManifest().presentationTimeline.getMaxSegmentDuration();\n this.emit(PlaybackAdapterEvents.MANIFEST_PARSED, { profile: this.manifestQualities });\n }\n\n private onBitrateChanged(e: any) {\n this.constrainAbr();\n this.emit(PlaybackAdapterEvents.ABR_QUALITY_LOADED, { index: this.currentIndex });\n }\n\n private onRequest(type: number, request: Request): void {\n const drm = this.config.resource.location.drm;\n\n if (type === this.shaka.net.NetworkingEngine.RequestType.LICENSE && drm.enabled) {\n if (drm.widevine && drm.widevine.header) {\n Util.assign(request.headers, drm.widevine.header);\n }\n\n if (drm.playready && drm.playready.header) {\n Util.assign(request.headers, drm.playready.header);\n }\n }\n }\n\n private onResponse(type: number, response: Response): void {\n if (this.multiCdnHeaderPresent) {\n const cdn = response.headers[Playback.MULTI_CDN];\n this.multiCdnHeaderPresent = (cdn != null);\n if (this.multiCdnHeaderPresent) {\n this.emit(PlaybackAdapterEvents.MULTI_CDN, { cdn });\n }\n }\n\n if (type === this.shaka.net.NetworkingEngine.RequestType.SEGMENT) {\n const bandwidth = this.player.getStats().estimatedBandwidth;\n this.emit(PlaybackAdapterEvents.FRAGMENT_LOADED, { bandwidth });\n }\n }\n\n private onEmsg(e: any): void {\n const emsg: EmsgInfo = e.detail;\n const cue: MetadataCuepointInterface = {\n id: emsg.schemeIdUri,\n info: emsg.value,\n data: emsg.messageData\n };\n this.emit(TextTrackSurfaceEvents.METADATA_CUEPOINT, cue);\n }\n\n private onTracksChanged(e: any): void {\n this.resize();\n\n this.updateAudioTracks();\n this.updateTextTracks();\n }\n\n private onAdaptation(e: any): void {\n this.variant = this.getVariantTrack();\n }\n\n private onVariantChanged(e: any): void {\n if (this.audioSwitching) {\n this.audioSwitching = false;\n this.emit(PlaybackAdapterEvents.AUDIO_TRACK_CHANGE, { track: this.normalizedAudioTracks[this.getAudioTrackIndex()] });\n }\n\n this.variant = this.getVariantTrack();\n }\n\n private onDrmSessionUpdate(e: any): void {\n this.emit(PlaybackAdapterEvents.DRM_KEYSYSTEM_CREATED, { keysystem: this.player.keySystem() });\n }\n\n private onTextTrackVisibility(): void {\n if (!this.currentTextTrackMode) {\n return;\n }\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_DISPLAY_MODE_CHANGE, { mode: this.currentTextTrackMode });\n }\n\n private onCueChange(e: Event): void {\n if (this.renderTextTrackNatively || !this.config.textTrackSettings.enabled) {\n return;\n }\n const t = e.target as TextTrack;\n this.emit(TextTrackSurfaceEvents.TEXT_CUEPOINT, { activeCues: t.activeCues });\n }\n\n private onTimelineRegionEnter(e: any) {\n if (this.videoSurface.video.seeking) {\n return;\n }\n\n const info: TimelineRegionInfo = e.detail;\n const cue: MetadataCuepointInterface = {\n id: info.schemeIdUri,\n info: info.value || info.eventElement.getAttribute('messageData'),\n data: info\n };\n\n this.emit(TextTrackSurfaceEvents.METADATA_CUEPOINT, cue);\n }\n\n ////////////////////\n // Private Methods\n ////////////////////\n private isActive(track: Track): boolean {\n return track.active;\n }\n\n private getAudioTrackIndex(): number {\n const { language, audioRoles } = this.getVariantTracks()[this.currentIndex];\n const role = audioRoles.join(',');\n return Util.findIndex(this.audioTracks, (item: any) => item.language == language && item.role == role);\n }\n\n private configure(): void {\n this.player.configure(this.playerConfig);\n }\n\n private constrainAbr(): void {\n const maxIndex = Util.getIndexForBitrate(this.manifestQualities, this.maxBitrate, false);\n this.checkAbrConstraints(maxIndex);\n }\n\n private getVariantTracks(): Track[] {\n return this.player.getVariantTracks().sort((a: Track, b: Track): number => a.bandwidth - b.bandwidth);\n }\n\n private getVariantTrack(): Track {\n return Util.find(this.player.getVariantTracks(), this.isActive);\n }\n\n private updateAudioTracks(): void {\n //since this fires on bitrate changes... do we want to check if the lang and roles has changed and only then process and emit?\n this.audioTracks = this.player.getAudioLanguagesAndRoles();\n this.normalizedAudioTracks = this.normalizeAudioTracks(this.audioTracks, {\n type: 'role',\n lang: 'language',\n label: 'language'\n });\n\n // Filter tracks labeled 'und' that are sometimes inserted during ad content\n const isUnd = (track: AudioTrackInterface) => track.lang === 'und';\n const tracks = this.normalizedAudioTracks.filter(track => !isUnd(track));\n let track = this.normalizedAudioTracks[this.getAudioTrackIndex()];\n\n if (isUnd(track)) {\n const idx = this.normalizedAudioTracks.length > track.index + 1 ? track.index + 1 : track.index;\n track = this.normalizedAudioTracks[idx];\n this.audioTrack = track;\n }\n\n this.emit(PlaybackAdapterEvents.AUDIO_TRACK_UPDATED, { tracks, track });\n }\n\n private updateTextTracks(): void {\n this.player.getTextTracks().forEach(track => {\n const hasTrack = this.textTracks.some(t => t.id == track.id);\n if (!hasTrack) {\n this.textTracks.push(track);\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_ADDED, track);\n }\n });\n\n const available = !this.currentTextTrack;\n const active = Util.find(this.textTracks, this.isActive);\n\n if (available) {\n this.pTextTrack = Util.find(this.videoSurface.video.textTracks, (textTrack: TextTrack) => textTrack.label == 'Shaka Player TextTrack');\n this.pTextTrack.addEventListener(TextTrackEvent.CUE_CHANGE, this.onCueChangeHandler);\n\n const track = active || Util.findDefaultTrack(this.textTracks as any, this.config.textTrackSettings.language) as any;\n if (track) {\n //@ts-ignore\n this.currentTextTrack = track;\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_AVAILABLE);\n this.emit(TextTrackSurfaceEvents.TEXT_TRACK_CHANGE, this.currentTextTrack);\n }\n }\n\n if (active && active != this.currentTextTrack) {\n //@ts-ignore\n this.textTrack = active;\n }\n\n // re-apply the text track visibility to workaround issues where\n // visibility was enabled during a period with no text tracks.\n if (this.renderTextTrackNatively) {\n this.player.setTextTrackVisibility(this.config.textTrackSettings.enabled);\n }\n }\n\n private createPlayerError(error: any) {\n const Error: ErrorNS = this.shaka.util.Error;\n const Category: Category = Error.Category;\n const Code: Code = Error.Code;\n\n const toError = (code: string, message: string, data: any, fatal: boolean = true) => {\n // Shaka Player errors do not have a string based message, so find the key associated with numeric error code.\n for (const key in Code) {\n const value = Code[key];\n if (value == error.code) {\n message += ` : ${key} / ${value}`;\n break;\n }\n }\n\n return { code, message, data, fatal };\n };\n\n switch (error.category) {\n case Category.NETWORK:\n return toError(ErrorCode.SHAKA_NETWORK_ERROR, AppResources.messages.FATAL_PLAYBACK_NETWORK_ERROR, error);\n\n case Category.MANIFEST:\n return toError(ErrorCode.SHAKA_PARSE_ERROR, AppResources.messages.FATAL_PLAYBACK_MEDIA_ERROR, error);\n\n case Category.MEDIA:\n const code = (error.code == Code.VIDEO_ERROR && error.data[0] == MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED) ? ErrorCode.SHAKA_SRC_NOT_SUPPORTED : ErrorCode.SHAKA_MEDIA_ERROR;\n return toError(code, AppResources.messages.FATAL_PLAYBACK_MEDIA_ERROR, error);\n\n case Category.DRM:\n return toError(ErrorCode.SHAKA_DRM_ERROR, AppResources.messages.FATAL_PLAYBACK_MEDIA_ERROR, error);\n\n default:\n return toError(ErrorCode.UNSPECIFIED_SHAKA_ERROR, AppResources.messages.UNSPECIFIED_ERROR, error, false);\n };\n }\n}\n","import { AppResources } from '../../app/AppResources';\nimport { Util } from '../../core/Util';\nimport { Utilities } from '../../core/Utilities';\nimport { Deprecated } from '../../deprecated/Deprecated';\nimport { Browser } from '../../enum/Browser';\nimport { ErrorCode } from '../../enum/ErrorCode';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { Network } from '../../enum/Network';\nimport { Os } from '../../enum/Os';\nimport { SystemServiceInterface } from '../../iface';\nimport { ErrorRecoveryInterface } from '../../iface/ErrorRecoveryInterface';\nimport { OverridesInterface } from '../../iface/OverridesInterface';\nimport { PlaybackAdapterConfigInterface } from '../../iface/PlaybackAdapterConfigInterface';\nimport { PlaybackAdapterCoreInterface } from '../../iface/PlaybackAdapterCoreInterface';\nimport { ResourceConfigurationInterface } from '../../iface/ResourceConfigurationInterface';\nimport { MediaCapabilitiesMimeType } from '../../util/enum/MediaCapabilitiesMimeType';\nimport { ExtLibEndpoint } from '../enum/ExtLibEndpoint';\nimport { PlaybackAdapterType } from '../enum/PlaybackAdapterType';\nimport { StreamingLibraryVersion } from '../enum/StreamingLibraryVersion';\nimport { HlsjsAdapter } from './HlsjsAdapter';\nimport { Html5Adapter } from './Html5Adapter';\nimport { PlayStationAdapter } from './PlayStationAdapter';\nimport { ShakaAdapter } from './ShakaAdapter';\n\nexport class PlaybackAdapterFactory {\n\n protected constructor() { }\n\n private static getAdapterOverride(config: PlaybackAdapterConfigInterface) {\n return config.resource.overrides?.adapter;\n }\n\n static getAdapterType(config: PlaybackAdapterConfigInterface): PlaybackAdapterType {\n // External Adapter Lookup\n const id = config.resource.playback.adapter?.id;\n if (id) {\n return null;\n }\n\n const rules = [\n { adapter: PlaybackAdapterType.TWITCH_LOW_LATENCY, condition: PlaybackAdapterFactory.isTwitchLowLatencyAdapter },\n { adapter: PlaybackAdapterType.PLAY_STATION, condition: PlaybackAdapterFactory.isPlayStationAdapter },\n { adapter: PlaybackAdapterType.HTML5, condition: PlaybackAdapterFactory.isHTML5Adapter },\n { adapter: PlaybackAdapterType.SHAKA, condition: PlaybackAdapterFactory.isDashAdapter },\n { adapter: PlaybackAdapterType.HLSJS, condition: PlaybackAdapterFactory.isHlsAdapter },\n ];\n\n // Override with valid string from PlaybackAdapterType Enum\n const override: PlaybackAdapterType = PlaybackAdapterFactory.getAdapterOverride(config);\n if (!Util.isEmpty(override)) {\n const rule = Util.find(rules, r => r.adapter === override);\n if (!rule || rule.condition(config)) {\n return override;\n }\n }\n\n const rule = Util.find(rules, r => r.condition(config));\n return rule?.adapter || PlaybackAdapterType.UNKNOWN;\n }\n\n private static getUrl(type: PlaybackAdapterType, config: PlaybackAdapterConfigInterface): string {\n const overrides: OverridesInterface = config.playerOptions.overrides;\n const resolveVersionTemplate = (url: string, version: string, context: any = {}): string => {\n return Util.template(url, { VERSION: version, ...context });\n };\n\n if (overrides?.dependencies?.[type]) {\n return overrides.dependencies[type];\n }\n\n switch (type) {\n case PlaybackAdapterType.HLSJS:\n return resolveVersionTemplate(ExtLibEndpoint.HLSJS_GZIP_CDN, StreamingLibraryVersion.HLSJS);\n\n case PlaybackAdapterType.SHAKA:\n const DEBUG = (overrides?.enableLowLevelStreamingLogs === true) ? '.debug' : '';\n return resolveVersionTemplate(ExtLibEndpoint.SHAKA_GZIP_CDN, StreamingLibraryVersion.SHAKA, { DEBUG });\n\n case PlaybackAdapterType.TWITCH_LOW_LATENCY:\n return resolveVersionTemplate(ExtLibEndpoint.TWITCH_GZIP_CDN, StreamingLibraryVersion.TWITCH);\n\n default:\n return null;\n }\n }\n\n private static loadLib(url: string, config: PlaybackAdapterConfigInterface, lib: () => any): Promise {\n try {\n if (lib() != null) {\n return Promise.resolve();\n }\n }\n catch (error) { /* */ }\n\n return Utilities.loadScript({\n url: PlaybackAdapterFactory.checkSslForUrl(config.system, url),\n timeout: PlaybackAdapterFactory.getScriptLoaderTimeout(config),\n errorRecovery: PlaybackAdapterFactory.getErrorRecoveryFromConfig(config),\n });\n }\n\n static getAdapter(config: PlaybackAdapterConfigInterface): Promise {\n const { logger } = config;\n const type = PlaybackAdapterFactory.getAdapterType(config);\n const loadError = (code: string, message: string = AppResources.messages.ADAPTER_LIB_UNAVAILABLE): any => ({ target: type, code, message, fatal: true });\n const url = PlaybackAdapterFactory.getUrl(type, config);\n\n switch (type) {\n case PlaybackAdapterType.HLSJS:\n return PlaybackAdapterFactory.loadLib(url, config, () => (window).Hls)\n .then(() => {\n logger.log(LogLevel.INFO, `Loading ${PlaybackAdapterType.HLSJS} external library version: ${StreamingLibraryVersion.HLSJS}`);\n return new HlsjsAdapter(config);\n })\n .catch((error) => {\n throw loadError(ErrorCode.HLS_SDK_MISSING);\n });\n\n case PlaybackAdapterType.SHAKA:\n return PlaybackAdapterFactory.loadLib(url, config, () => (window).shaka.Player)\n .then(() => {\n logger.log(LogLevel.INFO, `Loading ${PlaybackAdapterType.SHAKA} external library version: ${StreamingLibraryVersion.SHAKA}`);\n return new ShakaAdapter(config);\n })\n .catch((error) => {\n throw loadError(ErrorCode.SHAKA_SDK_MISSING);\n });\n\n case PlaybackAdapterType.TWITCH_LOW_LATENCY:\n return PlaybackAdapterFactory.loadLib(url, config, () => (window).IVSPlayer)\n .then(() => {\n logger.log(LogLevel.INFO, `Loading ${PlaybackAdapterType.TWITCH_LOW_LATENCY} external library version: ${StreamingLibraryVersion.TWITCH}`);\n return Deprecated.createTwitch(config);\n })\n .catch((error) => {\n throw loadError(ErrorCode.TWITCH_SDK_MISSING);\n });\n\n case PlaybackAdapterType.HTML5:\n return Promise.resolve(new Html5Adapter(config));\n\n case PlaybackAdapterType.PLAY_STATION:\n return Promise.resolve(new PlayStationAdapter(config));\n }\n\n return null;\n }\n\n private static getMimeType(resource: ResourceConfigurationInterface) {\n const override = resource.overrides?.mimeType || '';\n return override.split(';').shift() || Util.getMimeType(resource.location.mediaUrl);\n }\n\n private static isPlayStationAdapter(config: PlaybackAdapterConfigInterface): boolean {\n return config.system.isWebMaf;\n }\n\n private static isHTML5Adapter(config: PlaybackAdapterConfigInterface): boolean {\n\n const fairplayDetected = !Util.isEmpty(config.resource.location.drm?.fairplay?.appCertUrl);\n const isSafari = config.system.info.browser === Browser.SAFARI;\n const isIOS = config.system.os === Os.IOS;\n const isAndroid = config.system.os == Os.ANDROID;\n const osVersion = config.system.osVersionInfo;\n const type = PlaybackAdapterFactory.getMimeType(config.resource);\n const isM3u8 = type == MediaCapabilitiesMimeType.HLS || type == MediaCapabilitiesMimeType.HLS_ALT;\n\n const override: PlaybackAdapterType = PlaybackAdapterFactory.getAdapterOverride(config);\n if (!config.capabilities.hasMediaSource || override == PlaybackAdapterType.HTML5) {\n // NOTE: Do not convert this to optional chaining syntax. This check needs to explicitly know if the video tag exists.\n // If the video property is `null`, `config.video?.canPlayType(type) != ''` will evaluate to `true` which is not\n // the correct return value for that scenario.\n return config.video && config.video.canPlayType(type) != '';\n }\n\n if (!isM3u8 && type == MediaCapabilitiesMimeType.MP4_VIDEO) {\n return true;\n }\n\n //HLS with FairPlay on Safari\n if (isM3u8 && fairplayDetected && isSafari) {\n return true;\n }\n\n //IOS\n if (isM3u8 && isIOS) {\n if (fairplayDetected && isSafari) {\n return true;\n }\n else if (!fairplayDetected) {\n return true;\n }\n }\n\n //Android < 5\n if (isM3u8 && !fairplayDetected && isAndroid && osVersion.majorVersion < 5) {\n return true;\n }\n\n return false;\n }\n\n private static isDashAdapter(config: PlaybackAdapterConfigInterface): boolean {\n return config.capabilities.hasMediaSource && PlaybackAdapterFactory.getMimeType(config.resource) == MediaCapabilitiesMimeType.DASH;\n }\n\n private static isTwitchLowLatencyAdapter(config: PlaybackAdapterConfigInterface): boolean {\n //TODO Twitch Temp code until we decide what to do\n const type = PlaybackAdapterFactory.getAdapterOverride(config);\n return type === PlaybackAdapterType.TWITCH_LOW_LATENCY;\n }\n\n private static isHlsAdapter(config: PlaybackAdapterConfigInterface): boolean {\n const isSafari = config.system.info.browser === Browser.SAFARI;\n const isIOS = config.system.os === Os.IOS;\n const type = PlaybackAdapterFactory.getMimeType(config.resource);\n const isM3u8 = type == MediaCapabilitiesMimeType.HLS || type == MediaCapabilitiesMimeType.HLS_ALT;\n\n if (!config.capabilities.hasMediaSource) {\n return false;\n }\n\n // Unsupported playback scenario... \n if (isM3u8 && isIOS && !isSafari) {\n return false;\n }\n\n return isM3u8;\n }\n\n private static checkSslForUrl(system: SystemServiceInterface, baseUrl: string): string {\n return system.isWebOs ? Util.makeUrl(true, baseUrl) : baseUrl;\n }\n\n private static getScriptLoaderTimeout(config: PlaybackAdapterConfigInterface): number {\n const { overrides, networkTimeout } = config.playerOptions;\n return overrides.streamingLibLoaderTimeout || networkTimeout || Network.TIMEOUT;\n }\n\n private static getErrorRecoveryFromConfig(config: PlaybackAdapterConfigInterface): ErrorRecoveryInterface {\n\n let errorRecovery: ErrorRecoveryInterface = null;\n\n const er = config.playerOptions.networkErrorRecovery;\n if (!Util.isEmpty(er)) {\n errorRecovery = {\n retryAttempts: er.retryAttempts,\n retryIntervals: er.retryIntervals\n };\n }\n\n return errorRecovery;\n }\n}\n","import { AppResources } from '../app/AppResources';\nimport { buildInfo } from '../core/BuildInfo';\nimport { Logger } from '../core/Logger';\nimport { Util } from '../core/Util';\nimport { UiMediatorInterface } from '../deprecated/cvui/UiMediatorInterface';\nimport { ErrorCode } from '../enum/ErrorCode';\nimport { LogLevel } from '../enum/LogLevel';\nimport { MediatorName } from '../enum/MediatorName';\nimport { ModelName } from '../enum/ModelName';\nimport { NotificationName } from '../enum/NotificationName';\nimport { PlaybackState } from '../enum/PlaybackState';\nimport { ProxyName } from '../enum/ProxyName';\nimport { ServiceName } from '../enum/ServiceName';\nimport { StreamType } from '../enum/StreamType';\nimport { MediatorInterface, NotificationInterface, PlayerDomProxyInterface, SystemServiceInterface } from '../iface';\nimport { AdCuePointInterface } from '../iface/AdCuePointInterface';\nimport { ContentPlaybackStateInterface } from '../iface/ContentPlaybackStateInterface';\nimport { ErrorInfoInterface } from '../iface/ErrorInfoInterface';\nimport { OverridesInterface } from '../iface/OverridesInterface';\nimport { PlayerOptionsInterface } from '../iface/PlayerOptionsInterface';\nimport { QualityInterface } from '../iface/QualityInterface';\nimport { AbstractPresentationMediator } from './AbstractPresentationMediator';\n\ntype TimeSpent = {\n startTime: number;\n lastTime: number;\n sessionTime: number;\n playbackTime: number;\n elapsedTime: number;\n};\n\n// provides base impl for abstract methods of AbstractPresentationMediator\nexport class CommonPresentationMediator extends AbstractPresentationMediator {\n\n private uim: UiMediatorInterface = null;\n private currentRect: ClientRect;\n protected contentDurationReleased: boolean = false;\n protected resumeTimeMaxProximityToAdBreak: number = 5.0;\n protected isClickToPlay: boolean = false;\n protected fullscreenRestrictedDuringAdPlay: boolean = false;\n protected hasContent: boolean = true;\n protected contentComplete: boolean = false;\n protected timeSpent = {\n startTime: null as any,\n lastTime: 0,\n sessionTime: 0,\n playbackTime: 0,\n elapsedTime: 0,\n };\n\n override onRemove() {\n this.uim = null;\n super.onRemove();\n }\n\n start() {\n const mUrl = this.resourceProxy.location.mediaUrl;\n this.hasContent = Util.isString(mUrl) && !Util.isEmpty(mUrl);\n }\n\n close(): Promise {\n if (this.closing) {\n return this.closing;\n }\n const cps: ContentPlaybackStateInterface = this.contentPlaybackStateProxy?.model;\n const contentTime = cps?.time || 0;\n const contentDuration = cps?.duration || 0;\n const adPlaying = this.isAdPlaying();\n\n this.respondToPlaybackStateChange(PlaybackState.STOPPED);\n this.contentPlaybackStateProxy.isReady = false;\n\n return this.closing = this.adapterTask\n .then(() => {\n this.pause();\n this.log(LogLevel.INFO, 'Closing Presentation');\n\n this.closeAds();\n })\n .then(() => (this.adapter) ? this.adapter.destroy() : null)\n .then(() => {\n if (adPlaying || (this.hasContent && !this.isContentComplete())) {\n this.sendNotification(NotificationName.RESOURCE_INTERRUPTED, {\n contentTime,\n contentDuration,\n adInterrupted: adPlaying\n });\n }\n else {\n this.notify(NotificationName.RESOURCE_END);\n }\n /////////////////////////////////////////////////////////////////////\n // Note - No code may come after the INTERRUPTED or END notification\n /////////////////////////////////////////////////////////////////////\n })\n .catch((e) => {\n Logger.error(e);\n throw e;\n })\n .then(() => {\n this.closing = null;\n });\n }\n\n setAdPlaying() {\n if (this.uiMediator) {\n this.uiMediator.hideClickCatcher(true);\n this.fullscreenRestrictedDuringAdPlay && this.uiMediator.disableFullscreen();\n }\n }\n\n protected getPlayerVersionInfo() {\n return `${buildInfo.playerName}_${buildInfo.playerVersion}`;\n }\n\n protected startContentSegment() {\n if (this.uiMediator && !this.contentPlaybackStateProxy.model.liveStreamInfo) {\n this.uiMediator.setSeekable(true);\n }\n\n if (this.fullscreenRestrictedDuringAdPlay && this.uiMediator) {\n this.uiMediator.setFullScreenAccessRestricted(false);\n this.uiMediator.enableFullscreen();\n }\n }\n\n // TODO: Move this to an AdPresentationMediator base class\n closeAds(): void {\n // no-op\n }\n\n beforePlayOnUserGesture() {\n // no-op\n }\n\n playOnUserGesture(): void {\n this.uiMediator && this.uiMediator.displayPoster(false);\n this.notify(NotificationName.VIDEO_LOAD_START);\n\n this.prepareForPlayback(true);\n }\n\n mute(flag: boolean): void {\n this.muteVideo(flag);\n this.uiMediator && this.uiMediator.setMuteState(flag);\n }\n\n seek(position: number): void {\n this.seekVideo(position);\n }\n\n override setVolume(value: number): void {\n this.domProxy && this.domProxy.setVideoVolume(value);\n super.setVolume(value);\n }\n\n getAdBreakTimes(): AdCuePointInterface[] {\n return [];\n }\n\n protected releaseContentDuration(duration: number) {\n this.contentDurationReleased = true;\n this.notify(NotificationName.CONTENT_DURATION_AVAILABLE, {\n contentDuration: duration\n });\n }\n\n protected updateTimeSpent(): TimeSpent {\n const now = Date.now();\n\n // Set the start the fist time this function is called\n if (this.timeSpent.startTime === null) {\n this.timeSpent.startTime = now;\n }\n\n // Reset the last time after pausing\n if (this.timeSpent.lastTime === null) {\n this.timeSpent.lastTime = now;\n }\n\n const elapsed = now - this.timeSpent.startTime;\n this.timeSpent.elapsedTime = elapsed;\n this.timeSpent.sessionTime = elapsed / 1000;\n\n const cps: ContentPlaybackStateInterface = this.contentPlaybackStateProxy.model;\n if (cps.state !== PlaybackState.PAUSED) {\n this.timeSpent.playbackTime += (now - this.timeSpent.lastTime) / 1000;\n this.timeSpent.lastTime = now;\n }\n\n return this.timeSpent;\n }\n\n protected adjustStartTimeForAdBreakProximity(requestedStartTime: number, breaks: AdCuePointInterface[]): number {\n for (let i = 0, n = breaks.length; i < n; i++) {\n const bs = breaks[i].startTime,\n diff = bs - requestedStartTime;\n\n if (diff >= 0 && diff < this.resumeTimeMaxProximityToAdBreak) {\n return requestedStartTime - this.resumeTimeMaxProximityToAdBreak;\n }\n }\n\n return requestedStartTime;\n }\n\n protected get uiMediator(): UiMediatorInterface {\n return this.uim;\n }\n\n protected get domProxy(): PlayerDomProxyInterface {\n return this.facade.retrieveProxy(ProxyName.PlayerDomProxy);\n }\n\n protected override muteVideo(flag: boolean) {\n super.muteVideo(flag);\n this.domProxy && this.domProxy.muteVideo(flag);\n }\n\n protected override respondToPlaybackStateChange(playbackState: PlaybackState): void {\n super.respondToPlaybackStateChange(playbackState);\n this.timeSpent.lastTime = null;\n }\n\n protected respondToFullscreenChange(state: boolean) {\n this.checkSize();\n this.notify(state ? NotificationName.FULLSCREEN_ENTER : NotificationName.FULLSCREEN_EXIT);\n }\n\n protected respondToVideoPaused(): void {\n this.respondToPlaybackStateChange(PlaybackState.PAUSED);\n this.notify(NotificationName.RESOURCE_PAUSED);\n }\n\n protected respondToVideoPlaying(): void {\n if (!this.presoModel.started) {\n this.presoModel.started = true;\n\n if (this.uiMediator) {\n this.uiMediator.displayPoster(false);\n this.uiMediator.hideClickCatcher(true);\n if (this.presoModel.isMuteAtPlayStart && !this.presoModel.userHasUnmuted) {\n this.uiMediator.showUnmutePrompt();\n }\n this.setTransportType();\n }\n this.notify(NotificationName.ENABLE_UI);\n }\n\n this.respondToPlaybackStateChange(PlaybackState.PLAYING);\n this.notify(NotificationName.RESOURCE_PLAYING);\n }\n\n protected respondToVideoSeeking(): void {\n this.notify(NotificationName.CONTENT_SEEKING);\n }\n\n protected respondToVideoSeeked(): void {\n this.notify(NotificationName.CONTENT_SEEKED);\n }\n\n protected respondToVideoProgress(): void {\n this.notify(NotificationName.VIDEO_PROGRESS);\n }\n\n protected respondToQualityChange(quality: QualityInterface = null): void {\n this.notify(NotificationName.QUALITY_CHANGE, quality);\n }\n\n protected respondToError(data: ErrorInfoInterface) {\n this.uiMediator && this.uiMediator.displaySpinner(false);\n\n // TODO: Replace with Short-Circuiting Assignment Operator ||= once upgrade to TS 4.0 is complete\n if (!data.message) {\n data.message = AppResources.messages.UNSPECIFIED_ERROR;\n }\n\n if (!data.code) {\n data.code = ErrorCode.UNSPECIFIED_VIDEO_PLAYBACK_ERROR;\n }\n\n this.sendErrorNotification(NotificationName.VIDEO_PLAYBACK_ERROR, data);\n }\n\n /*\n Resource end only applies when the resource has completed\n */\n protected respondToVideoEnd(): void {\n this.notify(NotificationName.DISABLE_UI);\n this.notify(NotificationName.RESOURCE_COMPLETE);\n ///////////////////////////////////////////////////////////\n // Note - No code may come after the RES_END notification\n ///////////////////////////////////////////////////////////\n }\n\n protected respondToBufferingStatusCheck(count: number): void {\n const t = this.presoModel.streamTime;\n !isNaN(t) && t > 0 && this.checkVideoBuffering(count);\n }\n\n protected respondToId3Data(d: any): void {\n this.notify(NotificationName.METADATA_CUEPOINT, d);\n }\n\n protected respondToVideoTimeUpdate(streamTime: number): void {\n const contentPlaybackState: ContentPlaybackStateInterface = this.contentPlaybackStateProxy.model;\n const { duration, liveStreamInfo, streamType, time } = contentPlaybackState;\n\n this.updateTimeSpent();\n\n const data: Record = {\n contentTime: time,\n contentDuration: duration,\n streamTime,\n streamDuration: this.presoModel.streamDuration,\n sessionTime: this.timeSpent.sessionTime,\n playbackTime: this.timeSpent.playbackTime,\n };\n\n if (streamType !== StreamType.VOD) {\n const { relativeTime, relativeDuration } = liveStreamInfo;\n data.contentTime = relativeTime;\n data.contentDuration = relativeDuration;\n data.elapsedTimeMs = this.timeSpent.elapsedTime;\n contentPlaybackState.time = relativeTime;\n contentPlaybackState.duration = relativeDuration;\n }\n\n this.notify(NotificationName.CONTENT_TIME_UPDATE, data);\n }\n\n protected respondToDurationChange(dur: number): void {\n // no op\n }\n\n protected respondToSizeChange(): void {\n if (!this.adapter) {\n return;\n }\n\n this.adapter.resize();\n }\n\n protected respondToTextTrackModeChange(enabled: boolean): void {\n if (this.uiMediator) {\n this.uiMediator.setClosedCaptionState(enabled);\n }\n }\n\n // helpers\n protected checkSize(): void {\n if (!this.domProxy) return;\n\n const rect = this.domProxy.getPresentationRect();\n\n if (rect.width !== this.currentRect.width || rect.height !== this.currentRect.height) {\n this.currentRect = rect;\n this.respondToSizeChange();\n\n this.notify(NotificationName.PRESENTATION_SIZE_CHANGE, {\n width: this.currentRect.width,\n height: this.currentRect.height,\n });\n }\n }\n\n // for now, hard-coded for DVR threshold of 30 minutes (1800 sec)\n protected setTransportType(streamType = this.contentPlaybackStateProxy.model.streamType): void {\n const seekable = streamType != StreamType.LIVE;\n\n if (this.uiMediator) {\n this.uiMediator.setSeekable(seekable);\n this.uiMediator.setTransportType(streamType);\n this.uiMediator.setIsPlayingLive(this.isPlayingLive);\n }\n }\n\n protected setForClickToPlay(): void {\n if (this.uiMediator) {\n this.uiMediator.displayPoster(true);\n this.uiMediator.activatePoster();\n }\n else {\n const po = this.getModel(ModelName.PlayerOptions);\n if (po.useNativeControls) {\n const m = this.domProxy.getMain();\n const lr = () => {\n m.removeEventListener('click', lr);\n this.notify(NotificationName.PLAY_ON_USER_GESTURE);\n };\n m.addEventListener('click', lr);\n }\n }\n }\n\n protected setPausedState() {\n if (this.uiMediator) {\n this.uiMediator.setClickCatcherState(PlaybackState.PAUSED);\n this.uiMediator.hideClickCatcher(false);\n }\n }\n\n protected setPlayingState() {\n if (this.uiMediator) {\n this.uiMediator.setClickCatcherState(PlaybackState.PLAYING);\n this.uiMediator.hideClickCatcher(false);\n }\n }\n\n protected isContentComplete(): boolean {\n if (this.contentComplete) {\n return true;\n }\n const cps: ContentPlaybackStateInterface = this.contentPlaybackStateProxy.model;\n return cps.streamType != StreamType.LIVE && cps.streamType != StreamType.DVR && !(isNaN(cps.time) || cps.time < cps.duration);\n }\n\n // TODO: Move this to an AdPresentationMediator base class\n protected isAdPlaying(): boolean {\n return this.presoModel.isCurrentVideoAd;\n }\n\n override handleNotification(notification: NotificationInterface): void {\n super.handleNotification(notification);\n }\n\n override listNotificationInterests(): string[] {\n return super.listNotificationInterests().concat([]);\n }\n\n override onRegister(): void {\n super.onRegister();\n\n const o: OverridesInterface = this.playerOptions.overrides;\n\n if (o.resumeTimeMaxProximityToAdBreak) {\n this.resumeTimeMaxProximityToAdBreak = o.resumeTimeMaxProximityToAdBreak;\n }\n\n this.isClickToPlay = !this.presoModel.isAutoplay;\n\n const uim: MediatorInterface = this.facade.retrieveMediator(MediatorName.UI);\n uim && (this.uim = uim);\n\n const sys = this.facade.retrieveService(ServiceName.System);\n\n this.fullscreenRestrictedDuringAdPlay = sys.isIos || sys.isAndroid;\n if (this.uim) {\n this.uim.disableFullscreen();\n this.uim.setFullScreenAccessRestricted(this.fullscreenRestrictedDuringAdPlay);\n }\n\n this.setTransportType(StreamType.VOD);\n\n if (this.domProxy) {\n this.currentRect = this.domProxy.getPresentationRect();\n }\n }\n}\n","import { PlaybackAdapterDelegate } from '../app/adapter/playback/PlaybackAdapterDelegate';\nimport { PlaybackAdapterWrapper } from '../app/adapter/playback/PlaybackAdapterWrapper';\nimport { AppResources } from '../app/AppResources';\nimport { Util } from '../core/Util';\nimport { AdapterRole } from '../enum/AdapterRole';\nimport { Browser } from '../enum/Browser';\nimport { LogLevel } from '../enum/LogLevel';\nimport { MediatorName } from '../enum/MediatorName';\nimport { ModelName } from '../enum/ModelName';\nimport { NotificationName } from '../enum/NotificationName';\nimport { NotificationType } from '../enum/NotificationType';\nimport { PlaybackState } from '../enum/PlaybackState';\nimport { ProxyName } from '../enum/ProxyName';\nimport { QualityMode } from '../enum/QualityMode';\nimport { ServiceName } from '../enum/ServiceName';\nimport { StreamType } from '../enum/StreamType';\nimport { TextTrackMode } from '../enum/TextTrackMode';\nimport { MediaCapabilitiesServiceInterface, NotificationInterface, PlayerDomProxyInterface, SystemServiceInterface } from '../iface';\nimport { AdCuePointInterface } from '../iface/AdCuePointInterface';\nimport { ContentPlaybackStateInterface } from '../iface/ContentPlaybackStateInterface';\nimport { ErrorInfoInterface } from '../iface/ErrorInfoInterface';\nimport { EventHandler } from '../iface/EventHandler';\nimport { EventInterface } from '../iface/EventInterface';\nimport { PlaybackAdapterConfigInterface } from '../iface/PlaybackAdapterConfigInterface';\nimport { PlaybackAdapterCoreInterface } from '../iface/PlaybackAdapterCoreInterface';\nimport { PlaybackAdapterDelegateInterface } from '../iface/PlaybackAdapterDelegateInterface';\nimport { PlaybackAdapterInterface } from '../iface/PlaybackAdapterInterface';\nimport { PlayerOptionsInterface } from '../iface/PlayerOptionsInterface';\nimport { PlaylistInterface } from '../iface/PlaylistInterface';\nimport { PresentationStateInterface } from '../iface/PresentationStateInterface';\nimport { QualityInfoInterface } from '../iface/QualityInfoInterface';\nimport { QualityInterface } from '../iface/QualityInterface';\nimport { StrStrDict } from '../iface/StrStrDict';\nimport { TextTrackInterface } from '../iface/TextTrackInterface';\nimport { AdapterProxy } from '../model/AdapterProxy';\nimport { ContentPlaybackStateProxy } from '../model/ContentPlaybackStateProxy';\nimport { PerformanceProxy } from '../model/PerformanceProxy';\nimport { ResourceProxy } from '../model/ResourceProxy';\nimport { TextTrackProxy } from '../model/TextTrackProxy';\nimport { PlaybackAdapterFactory } from '../playback/adapter/PlaybackAdapterFactory';\nimport { PlaybackAdapterEvents } from '../playback/enum/PlaybackAdapterEvents';\nimport { TextTrackSurfaceEvents } from '../playback/enum/TextTrackSurfaceEvents';\nimport { VideoSurfaceEvents } from '../playback/enum/VideoSurfaceEvents';\nimport { ThumbnailTrackSurface } from '../playback/surface/ThumbnailTrackSurface';\nimport { AppMediator } from './AppMediator';\nimport { LogAwareMediator } from './LogAwareMediator';\nimport { TimerMediator } from './TimerMediator';\n\n\ntype ErrorNotification = { name: NotificationName, error: any; };\n\n/**\n * AbstractPresentationMediator interfaces with an appropriate (stream type-dependent)\n * playback adapter, and also captures events from the video element\n * (supplied as 'viewControl' to constructor). Key events invoke a 'respondTo'\n * method, each of which is abstract and must be implemented in concrete presentation sub-classes.\n *\n * In addition, this base object will listen for timer tic notifications to\n * trigger checks on buffering and size change of the presentation.\n */\nexport abstract class AbstractPresentationMediator extends LogAwareMediator {\n\n protected started: boolean = false;\n protected preloadContent: boolean = true;\n protected isPlayingLive: boolean;\n protected streamType: StreamType;\n protected minDvrDuration = 1800;\n protected contentPlaybackStateProxy: ContentPlaybackStateProxy;\n protected performanceProxy: PerformanceProxy;\n protected playerOptions: PlayerOptionsInterface;\n protected resourceProxy: ResourceProxy;\n protected presoModel: PresentationStateInterface;\n protected closing: Promise;\n protected initializing: boolean;\n protected adapterTask = Promise.resolve();\n protected seeking: boolean = false;\n protected onLoadError = ({ name, error }: ErrorNotification) => this.sendErrorNotification(name, error);\n protected previousPlaybackState: { state: PlaybackState | null, overrides: Record; } = {\n state: null,\n overrides: {},\n };\n\n protected contentIsBuffering: boolean = false;\n protected adapterEventHandler: EventHandler = (e: EventInterface) => this.hPlaybackAdaptorEvents(e);\n protected videoEventHandler: EventHandler = (e: EventInterface) => this.hVideoAdapterEvents(e);\n protected textTrackEventHandler: EventHandler = (e: EventInterface) => this.hTextTrackEvents(e);\n\n private pAdapter: PlaybackAdapterCoreInterface;\n private endFreezeTimeoutHandle: any = null;\n private loadComplete: boolean = false;\n private offsetTtOnControlVis: boolean = false;\n private isMonitoringCueEvents: boolean = false;\n private bufferingSampleRate: number;\n\n constructor(name: string, viewControl?: any) {\n super(name, viewControl);\n // debounce to limit the number of info changes events fired.\n this.respondToTextTrackInfoChange = Util.debounce(this.respondToTextTrackInfoChange.bind(this), 10);\n }\n\n get adapter(): PlaybackAdapterCoreInterface {\n return this.pAdapter;\n }\n\n override onRemove(): void {\n clearTimeout(this.endFreezeTimeoutHandle);\n this.removeEvents(PlaybackAdapterEvents, this.adapterEventHandler);\n this.removeEvents(VideoSurfaceEvents, this.videoEventHandler);\n this.removeEvents(TextTrackSurfaceEvents, this.textTrackEventHandler);\n\n this.pAdapter = null;\n this.contentPlaybackStateProxy = null;\n this.resourceProxy = null;\n this.presoModel = null;\n this.playerOptions = null;\n\n super.onRemove();\n }\n\n setVolume(value: number): void {\n // TODO - WEBMAF - volume via adapter\n this.presoModel.volume = value;\n }\n\n load(): Promise {\n return this.loadVideo()\n .then(() => {\n // NOTE: Attach listeners for the for the error events now that the adapter has \n // successfully loaded the resource. (VTG-2393)\n const filter = (value: string) => value == PlaybackAdapterEvents.ERROR || value == VideoSurfaceEvents.ERROR;\n this.addEvents(PlaybackAdapterEvents, this.adapterEventHandler, filter);\n this.addEvents(VideoSurfaceEvents, this.videoEventHandler, filter);\n })\n .catch((e) => {\n const error = (e.type) ? e.data : e;\n throw { name: NotificationName.VIDEO_START_ERROR, error };\n });\n }\n\n play(): void {\n this.playVideo();\n }\n\n pause(): void {\n this.pauseVideo();\n }\n\n suspend(): void {\n this.pAdapter.suspend();\n }\n\n resume(): void {\n this.pAdapter.resume();\n }\n\n abstract playOnUserGesture(): void;\n abstract getAdBreakTimes(): AdCuePointInterface[];\n abstract close(): Promise;\n\n protected abstract checkSize(): void;\n protected abstract respondToVideoPlaying(): void;\n protected abstract respondToVideoPaused(): void;\n protected abstract respondToVideoSeeking(): void;\n protected abstract respondToVideoSeeked(): void;\n protected abstract respondToVideoProgress(): void;\n protected abstract respondToVideoTimeUpdate(streamTime: number): void;\n protected abstract respondToQualityChange(quality?: QualityInterface): void;\n protected abstract respondToVideoEnd(): void;\n protected abstract respondToBufferingStatusCheck(count: number): void;\n protected abstract respondToDurationChange(dur: number): void;\n protected abstract respondToFullscreenChange(state: boolean): void;\n protected abstract respondToError(errorInfo: ErrorInfoInterface): void;\n protected abstract respondToId3Data(d: any): void;\n protected abstract respondToTextTrackModeChange(enabled: boolean): void;\n\n protected loadVideo(): Promise {\n this.respondToWaiting('loading', true);\n return this.pAdapter.load().then(() => {\n this.respondToWaiting('loading', false);\n });\n }\n\n protected playVideo(): void {\n this.pAdapter && this.pAdapter.play();\n }\n\n protected pauseVideo(): void {\n this.pAdapter && this.pAdapter.pause();\n }\n\n protected muteVideo(flag: boolean): void {\n if (!flag && !this.presoModel.userHasUnmuted) {\n this.presoModel.userHasUnmuted = true;\n }\n this.presoModel.isMuted = flag;\n }\n\n protected seekVideo(position: number): void {\n this.pAdapter && this.pAdapter.seek(position);\n }\n\n protected checkVideoBuffering(count: number): void {\n const mod = Math.max(Math.floor(this.bufferingSampleRate / TimerMediator.INTERVAL), 1);\n if (isFinite(mod) && count % mod) {\n return;\n }\n\n const buffering = this.pAdapter?.buffering || false;\n\n if (this.contentIsBuffering !== buffering) {\n this.contentIsBuffering = buffering;\n this.notify(NotificationName.CONTENT_BUFFERING, { value: buffering });\n this.respondToWaiting('buffering', buffering);\n }\n }\n\n protected get video(): HTMLVideoElement {\n return this.viewControl as HTMLVideoElement;\n }\n\n protected notify(name: NotificationName, data?: any): void {\n this.sendNotification(name, data || null, NotificationType.INTERNAL);\n }\n\n protected respondToIsPlayingLiveChange(isLive: boolean): void {\n this.notify(NotificationName.CONTENT_IS_LIVE_CHANGED, { value: isLive });\n }\n\n protected respondToStreamTypeChange(streamType: StreamType): void {\n const cps: ContentPlaybackStateInterface = this.contentPlaybackStateProxy.model;\n\n if (this.streamType != streamType) {\n this.streamType = streamType;\n cps.streamType = streamType;\n this.notify(NotificationName.STREAM_TYPE_CHANGE, { value: streamType });\n }\n }\n\n protected respondToWaiting(key: string, value: boolean) {\n this.previousPlaybackState.overrides[key] = value;\n\n const waiting = !this.previousPlaybackState.state || Util.includes(Util.values(this.previousPlaybackState.overrides), true);\n\n this.respondToPlaybackStateChange(waiting ? PlaybackState.WAITING : this.previousPlaybackState.state);\n }\n\n protected respondToPlaybackStateChange(playbackState: PlaybackState): void {\n const cps: ContentPlaybackStateInterface = this.contentPlaybackStateProxy.model;\n const notWaiting = playbackState !== PlaybackState.WAITING;\n\n if (cps.state != playbackState) {\n if (playbackState !== PlaybackState.IDLE && notWaiting) {\n this.previousPlaybackState.state = playbackState;\n }\n\n if (this.seeking && notWaiting) {\n return;\n }\n\n cps.state = playbackState;\n this.notify(NotificationName.PLAYBACK_STATE_CHANGE, { value: playbackState });\n }\n }\n\n protected respondToTtOffsetRequest(controlsVisible: boolean): void {\n const sys = this.facade.retrieveService(ServiceName.System);\n\n if (sys.browser === Browser.FIREFOX) {\n this.monitorTtCues(controlsVisible);\n }\n else {\n const dp = this.facade.retrieveProxy(ProxyName.PlayerDomProxy);\n dp && dp.setControlVisibility(controlsVisible);\n }\n }\n\n // For Firefox only\n protected monitorTtCues(flag: boolean): void {\n const ctt = Util.find(this.video.textTracks, track => Util.isTextTrack(track.kind) && track.mode === TextTrackMode.SHOWING);\n const cues = ctt?.activeCues;\n\n this.isMonitoringCueEvents = flag;\n\n if (!cues) {\n return;\n }\n\n for (let i = 0, n = cues.length || 0; i < n; i++) {\n this.respondToTtCue(cues[i]);\n }\n }\n\n // invoked for Firefox only\n protected respondToTtCue(cue: TextTrackCue): void {\n (cue).line = this.isMonitoringCueEvents ? 14 : 'auto';\n }\n\n //////////////////////////\n // private and mvc internal\n handleNotification(notification: NotificationInterface): void {\n switch (notification.name) {\n case NotificationName.TIMER_TIC:\n this.respondToBufferingStatusCheck(notification.body.count);\n this.checkSize();\n break;\n\n case NotificationName.FULLSCREEN_CHANGE:\n const data = notification.body;\n this.presoModel.isFullscreen = data.isFullscreen;\n this.respondToFullscreenChange(data.isFullscreen);\n\n break;\n\n case NotificationName.AUTO_QUALITY_SWITCHING:\n this.notify(NotificationName.QUALITY_INFO_CHANGE, this.contentPlaybackStateProxy.model.qualityInfo);\n break;\n\n case NotificationName.TT_OFFSET_REQUEST:\n if (this.offsetTtOnControlVis) {\n this.respondToTtOffsetRequest(notification.body.controlsVisible);\n }\n break;\n }\n }\n\n override listNotificationInterests(): string[] {\n return [\n NotificationName.TIMER_TIC,\n NotificationName.FULLSCREEN_CHANGE,\n NotificationName.TT_OFFSET_REQUEST\n ];\n }\n\n override onRegister(): void {\n super.onRegister();\n\n this.contentPlaybackStateProxy = this.facade.retrieveProxy(ProxyName.ContentPlaybackStateProxy);\n this.resourceProxy = this.facade.retrieveProxy(ProxyName.ResourceProxy);\n this.performanceProxy = this.facade.retrieveProxy(ProxyName.PerformanceProxy);\n this.presoModel = this.getModel(ModelName.PresentationState);\n this.playerOptions = this.getModel(ModelName.PlayerOptions);\n\n const overrides = this.resourceProxy.resource.overrides;\n if (Util.isNumber(overrides?.minDvrDuration)) {\n this.minDvrDuration = overrides.minDvrDuration;\n }\n\n if (this.presoModel.isMuteAtPlayStart && !this.presoModel.userHasUnmuted) {\n this.muteVideo(true);\n this.presoModel.isMuted = true;\n }\n\n this.offsetTtOnControlVis = this.playerOptions.offsetTextOnControlsVisible;\n\n this.bufferingSampleRate = this.performanceProxy.bufferingSampleRate;\n }\n\n protected prepareForPlayback(forcePlay: boolean = false): void {\n if (this.initializing) {\n return;\n }\n\n const config: PlaybackAdapterConfigInterface = {\n system: this.systemService,\n capabilities: (this.facade.retrieveService(ServiceName.MediaCapabilities) as MediaCapabilitiesServiceInterface).capabilities,\n playerOptions: this.playerOptions, //TODO should we have a playerOpts proxy?\n resource: this.resourceProxy.resource,\n performanceSettings: this.performanceProxy,\n textTrackSettings: this.facade.retrieveProxy(ProxyName.TextTrackProxy),\n video: this.viewControl,\n logger: this.logger,\n };\n\n this.adapterTask = this.initializeAdapter(config, forcePlay)\n .catch(this.onLoadError);\n }\n\n protected sendErrorNotification(name: NotificationName, error: any) {\n this.logger.log(LogLevel.ERROR, error);\n this.notify(name, error);\n }\n\n protected async getAdapter(config: PlaybackAdapterConfigInterface): Promise {\n const legacyAdapter = await PlaybackAdapterFactory.getAdapter(config);\n if (legacyAdapter) {\n return legacyAdapter;\n }\n\n const proxy = this.facade.retrieveProxy(ProxyName.AdapterProxy) as AdapterProxy;\n const delegate = new PlaybackAdapterDelegate();\n const adapter = await proxy.createAdapter(AdapterRole.PLAYBACK, config.resource, () => delegate);\n return new PlaybackAdapterWrapper(config, adapter, delegate);\n }\n\n protected async initializeAdapter(config: PlaybackAdapterConfigInterface, forcePlay: boolean) {\n try {\n this.initializing = true;\n\n // bail gracefully if the mediator is in the process of shutting down\n if (this.closing) {\n return;\n }\n\n // create and configure adapter\n try {\n const adapter = await this.getAdapter(config);\n\n // check for shutdown after every async process\n if (this.closing) {\n return;\n }\n\n this.pAdapter = adapter;\n\n // NOTE: To avoid duplicate error events being dispatched in the public API, do not\n // attach listeners for the for the error events until after the adapter has \n // successfully loaded the resource. (VTG-2393)\n const filter = (value: string) => value != PlaybackAdapterEvents.ERROR && value != VideoSurfaceEvents.ERROR;\n this.addEvents(PlaybackAdapterEvents, this.adapterEventHandler, filter);\n this.addEvents(VideoSurfaceEvents, this.videoEventHandler, filter);\n this.addEvents(TextTrackSurfaceEvents, this.textTrackEventHandler);\n\n this.pAdapter.initialize();\n\n if (config.playerOptions.overrides?.exposePlaybackAdapter === true) {\n const app = this.facade.retrieveMediator(MediatorName.APPLICATION) as AppMediator;\n const api = app.getAppApi();\n\n // @ts-ignore\n api.adapter = (this.pAdapter as any).adapter || this.pAdapter;\n }\n }\n catch (error) {\n throw { name: NotificationName.RESOURCE_ERROR, error };\n }\n\n // play resource\n try {\n // load resource\n if (this.preloadContent) {\n await this.load();\n }\n\n // check for shutdown after every async process\n if (this.closing) {\n return;\n }\n\n if (!(this.presoModel.isAutoplay || forcePlay)) {\n return;\n }\n\n this.play();\n }\n catch (error) {\n throw { name: NotificationName.VIDEO_PLAYBACK_ERROR, error };\n }\n }\n finally {\n this.initializing = false;\n }\n }\n\n private hPlaybackAdaptorEvents(e: EventInterface): void {\n const cps: ContentPlaybackStateInterface = this.contentPlaybackStateProxy.model;\n\n switch (e.type) {\n case PlaybackAdapterEvents.ABR_QUALITY_LOADED:\n if (this.contentPlaybackStateProxy.isAbrSwitchingAvailable) {\n const qualityInfo: QualityInfoInterface = this.contentPlaybackStateProxy.qualityInfo,\n bitrate = this.contentPlaybackStateProxy.manifestQualities[e.data.index].bitrate,\n index = Util.getIndexForBitrate(qualityInfo.qualities, bitrate, false),\n quality = qualityInfo.qualities[index];\n\n if (!qualityInfo.quality || qualityInfo.quality.bitrate !== quality.bitrate) {\n this.contentPlaybackStateProxy.quality = quality;\n cps.bitrate = quality.bitrate;\n this.respondToQualityChange(quality);\n }\n }\n break;\n\n case PlaybackAdapterEvents.ABR_CONSTRAINTS_CHANGE:\n if (!this.contentPlaybackStateProxy.isAbrSwitchingAvailable) {\n this.logger.log(LogLevel.INFO, AppResources.messages.ABR_UNAVAILABLE);\n this.contentPlaybackStateProxy.qualitySwitchingMode = QualityMode.UNAVAILABLE;\n }\n else if (cps.qualityInfo) {\n this.contentPlaybackStateProxy.updateQualityProfile(e.data.minIndex, e.data.maxIndex, e.data.manifestQualities);\n this.log(LogLevel.INFO, 'Quality Info: ', cps.qualityInfo);\n this.notify(NotificationName.QUALITY_INFO_CHANGE, cps.qualityInfo);\n }\n break;\n\n case PlaybackAdapterEvents.AUDIO_TRACK_UPDATED:\n this.contentPlaybackStateProxy.updateAudioTracks(e.data.track, e.data.tracks);\n this.notify(NotificationName.AUDIO_TRACK_INFO_CHANGE, e.data);\n break;\n\n case PlaybackAdapterEvents.AUDIO_TRACK_CHANGE:\n this.contentPlaybackStateProxy.updateAudioTracks(e.data.track);\n this.notify(NotificationName.AUDIO_TRACK_CHANGE, e.data.track);\n break;\n\n case PlaybackAdapterEvents.FRAGMENT_LOADED:\n this.contentPlaybackStateProxy.maxBandwidth = e.data.bandwidth;\n break;\n\n case PlaybackAdapterEvents.FRAGMENT_PARSED:\n cps.framerate = e.data.rate;\n break;\n\n case PlaybackAdapterEvents.MANIFEST_PARSED:\n this.contentPlaybackStateProxy.processQualityProfile(e.data.profile);\n this.contentPlaybackStateProxy.manifestQualities = e.data.profile;\n break;\n\n case PlaybackAdapterEvents.LOADED_METADATA:\n this.notify(NotificationName.STREAM_METADATA, e.data);\n\n try {\n const resource = ((this.facade.retrieveProxy(ProxyName.Playlist))).currentResource;\n const url = resource.location.thumbnailTrackUrl;\n if (!this.contentPlaybackStateProxy.thumbnailTrack && url) {\n ThumbnailTrackSurface.create(url)\n .then(t => {\n this.contentPlaybackStateProxy.thumbnailTrack = t;\n this.notify(NotificationName.THUMBNAIL_TRACK_AVAILABLE, t);\n })\n .catch(e => this.log(LogLevel.WARN, \"Could not load thumbnail track\"));\n }\n }\n catch (error) {\n this.log(LogLevel.WARN, \"Could not load thumbnail track\");\n }\n break;\n\n case PlaybackAdapterEvents.ERROR:\n this.respondToError(e.data as ErrorInfoInterface);\n break;\n\n case PlaybackAdapterEvents.MULTI_CDN:\n const cdn = e.data.cdn;\n if (cdn !== cps.cdn) {\n cps.cdn = cdn;\n this.notify(NotificationName.CDN_CHANGE, e.data);\n }\n break;\n\n case PlaybackAdapterEvents.DRM_KEYSYSTEM_CREATED:\n cps.drmType = e.data.keysystem;\n this.notify(NotificationName.DRM_KEYSYSTEM_CREATED, e.data);\n break;\n }\n }\n\n private hVideoAdapterEvents(e: EventInterface): void {\n const cps: ContentPlaybackStateInterface = this.contentPlaybackStateProxy.model;\n\n switch (e.type) {\n case VideoSurfaceEvents.PROGRESS:\n cps.bufferLength = this.pAdapter.bufferLength;\n cps.averageDroppedFps = this.pAdapter.droppedVideoFrames;\n cps.framerate = this.pAdapter.framerate;\n this.respondToVideoProgress();\n break;\n\n case VideoSurfaceEvents.CAN_PLAY_THROUGH:\n if (!this.loadComplete) {\n this.loadComplete = true;\n this.notify(NotificationName.VIDEO_LOAD_COMPLETE);\n }\n break;\n\n case VideoSurfaceEvents.LOADED_METADATA:\n this.updateLiveStreamInfo();\n this.notify(NotificationName.VIDEO_LOADED_METADATA);\n break;\n\n case VideoSurfaceEvents.TIME_UPDATE:\n clearTimeout(this.endFreezeTimeoutHandle);\n const t = this.pAdapter.time;\n const d = this.presoModel.streamDuration;\n\n if (this.pAdapter.isLiveStream) {\n this.updateLiveStreamInfo();\n }\n else if (!isNaN(d) && (d - t <= 0.15)) {\n this.protectAgainstEndFreeze(250);\n }\n this.respondToVideoTimeUpdate(t);\n break;\n\n case VideoSurfaceEvents.PLAYING:\n this.updateLiveStreamInfo();\n this.respondToVideoPlaying();\n break;\n\n case VideoSurfaceEvents.PAUSE:\n this.respondToVideoPaused();\n break;\n\n case VideoSurfaceEvents.SEEKING:\n this.seeking = true;\n this.respondToVideoSeeking();\n this.respondToWaiting('seeking', true);\n break;\n\n case VideoSurfaceEvents.SEEKED:\n this.seeking = false;\n this.respondToVideoSeeked();\n this.respondToWaiting('seeking', false);\n break;\n\n case VideoSurfaceEvents.ENDED:\n clearTimeout(this.endFreezeTimeoutHandle);\n this.respondToVideoEnd();\n break;\n\n case VideoSurfaceEvents.DURATION_CHANGE:\n // Protect against invalid durations such as NaN\n const duration = this.pAdapter.duration;\n if (duration > 0) {\n this.respondToDurationChange(duration);\n }\n break;\n\n case VideoSurfaceEvents.VOLUME_CHANGE:\n const video = e.data.target || e.data;\n this.notify(NotificationName.VOLUME_CHANGE, { value: video.volume, muted: video.muted });\n break;\n\n case VideoSurfaceEvents.AUTOPLAY_BLOCKED:\n this.sendNotification(NotificationName.AUTOPLAY_BLOCKED, e.data, NotificationType.INTERNAL);\n break;\n }\n }\n\n private hTextTrackEvents(e: EventInterface): void {\n const textTrackProxy = this.facade.retrieveProxy(ProxyName.TextTrackProxy);\n\n switch (e.type) {\n case TextTrackSurfaceEvents.METADATA_CUEPOINT:\n this.respondToId3Data(e.data);\n break;\n\n case TextTrackSurfaceEvents.TEXT_CUEPOINT:\n if (this.isMonitoringCueEvents) {\n this.respondToTtCue(e.data);\n }\n this.notify(NotificationName.TEXT_CUEPOINT, e.data);\n break;\n\n case TextTrackSurfaceEvents.TEXT_TRACK_DISPLAY_MODE_CHANGE:\n const enabled = e.data.mode !== TextTrackMode.DISABLED;\n textTrackProxy.mode = e.data.mode;\n this.notify(NotificationName.TEXT_TRACK_DISPLAY_MODE_CHANGE, { enabled });\n this.respondToTextTrackModeChange(enabled);\n break;\n\n case TextTrackSurfaceEvents.TEXT_TRACK_ADDED:\n this.contentPlaybackStateProxy.addTextTrack(e.data);\n this.respondToTextTrackInfoChange();\n break;\n\n case TextTrackSurfaceEvents.TEXT_TRACK_CHANGE:\n const track = e.data;\n this.contentPlaybackStateProxy.textTrack = track;\n this.notify(NotificationName.TEXT_TRACK_CHANGE, this.contentPlaybackStateProxy.textTrack);\n this.respondToTextTrackInfoChange();\n break;\n\n case TextTrackSurfaceEvents.TEXT_TRACK_AVAILABLE:\n this.notify(NotificationName.TEXT_TRACK_AVAILABLE);\n break;\n }\n }\n\n private respondToTextTrackInfoChange(): void {\n this.notify(NotificationName.TEXT_TRACK_INFO_CHANGE, this.contentPlaybackStateProxy.textTrackInfo);\n }\n\n // TODO: This should be replaced with a debounced function\n private protectAgainstEndFreeze(delay: number) {\n clearTimeout(this.endFreezeTimeoutHandle);\n this.endFreezeTimeoutHandle = setTimeout(() => {\n this.respondToVideoEnd();\n }, delay);\n }\n\n private addEvents(map: StrStrDict, fn: EventHandler, filter = (i: string) => true): void {\n if (!this.pAdapter) {\n return;\n }\n\n Util.values(map)\n .filter(filter)\n .forEach(value => this.pAdapter.on(value, fn));\n }\n\n private removeEvents(map: StrStrDict, fn: EventHandler): void {\n if (!this.pAdapter) {\n return;\n }\n\n Util.values(map)\n .forEach(value => this.pAdapter.off(value, fn));\n }\n\n private calculateStreamType(): StreamType {\n if (this.pAdapter.isLiveStream) {\n const liveStreamInfo = this.pAdapter.liveStreamInfo;\n const dvr = liveStreamInfo.dvrWindowSize;\n const isLiveLinearStream = dvr < this.minDvrDuration || isNaN(dvr);\n return (isLiveLinearStream) ? StreamType.LIVE : StreamType.DVR;\n }\n else {\n return StreamType.VOD;\n }\n }\n\n private updateLiveStreamInfo(): void {\n if (!this.pAdapter.isLiveStream) {\n this.respondToStreamTypeChange(StreamType.VOD);\n return;\n }\n\n const cps: ContentPlaybackStateInterface = this.contentPlaybackStateProxy.model;\n const liveStreamInfo = this.pAdapter.liveStreamInfo;\n cps.liveStreamInfo = liveStreamInfo;\n\n const streamType = this.calculateStreamType();\n this.respondToStreamTypeChange(streamType);\n\n const isPlayingLive = (streamType == StreamType.LIVE) ? true : liveStreamInfo.isPlayingLive;\n if (this.isPlayingLive != isPlayingLive) {\n this.isPlayingLive = isPlayingLive;\n this.respondToIsPlayingLiveChange(isPlayingLive);\n }\n\n if (cps.streamType == StreamType.DVR) {\n this.respondToDurationChange(liveStreamInfo.relativeDuration);\n }\n }\n}\n","import { ModelName } from '../../enum/ModelName';\nimport { ProxyName } from '../../enum/ProxyName';\nimport { AdBreakInfoInterface } from '../../iface/AdBreakInfoInterface';\nimport { AdItemInterface } from '../../iface/AdItemInterface';\nimport { ModelInterface } from '../../iface/ModelInterface';\nimport { ModelCollectionProxy } from '../../model/ModelCollectionProxy';\nimport { Proxy } from '../../mvc/Proxy';\nimport { AdDataProxyInterface } from './iface';\n\n\n// Note: get accessors return a copy of the raw data - it can be read, \n// but modifications to the object/values are not recorded to the model.\nexport class AdDataProxy extends Proxy implements AdDataProxyInterface {\n\n private breakModel!: AdBreakInfoInterface;\n private adItemModel!: AdItemInterface;\n\n constructor(name: string, data?: any) {\n super(name, data);\n }\n\n override onRegister() {\n const mcp = this.facade.retrieveProxy(ProxyName.ModelCollectionProxy);\n\n this.breakModel = mcp.getModel(ModelName.AdBreakInfo);\n this.adItemModel = mcp.getModel(ModelName.AdItem);\n }\n\n override onRemove(): void {\n this.breakModel = null;\n this.adItemModel = null;\n\n super.onRemove();\n }\n\n resetAll() {\n ((this.breakModel)).reset();\n this.resetAd();\n }\n\n resetAd() {\n ((this.adItemModel)).reset();\n }\n\n set breakInfo(bi: AdBreakInfoInterface) {\n //@ts-ignore\n const m = this.breakModel.model;\n for (let q in m) {\n if (Object.prototype.hasOwnProperty.call(bi, q)) {\n //@ts-ignore\n m[q] = bi[q];\n }\n }\n }\n get breakInfo(): AdBreakInfoInterface {\n const m = (this.breakModel);\n return (m.data);\n }\n\n set adInfo(ai: AdItemInterface) {\n //@ts-ignore\n const m = this.adItemModel.model;\n for (let q in m) {\n if (Object.prototype.hasOwnProperty.call(ai, q)) {\n //@ts-ignore\n m[q] = ai[q];\n }\n }\n }\n get adInfo(): AdItemInterface {\n const m = (this.adItemModel);\n return (m.data);\n }\n}\n","import { Utilities } from '../../core/Utilities';\nimport { ResourceAdSsaiInterface } from '../../iface/ResourceAdSsaiInterface';\nimport { dai } from './dai';\nimport { AdRequestVersionInfoInterface } from './iface';\nimport { Util } from '../../core/Util';\n\n\nconst FILTER_OUT_PREMIUM_AUDIO = 'codec:ac-3,codec:ec-3';\nconst RAND_TOKEN = '[RANDOM]';\nconst SZ = 'sz';\nconst SZ_DEFAULT = '640x480';\nconst SZ_MUTED = '640x483';\nconst SZ_PARAM = `${SZ}=${SZ_DEFAULT}`;\nconst SZ_PARAM_MUTED = `${SZ}=${SZ_MUTED}`;\nconst REFERER_KEY_SSAI = 'imafw__fw_h_referer';\nconst HOST_KEY_SSAI = 'imafw_host';\n\n\n// FW / GAM SDK\n\nexport function processAdCallUrlForFw(url: string, { muted }: any, skipHostAndReferer: boolean, versionInfo: AdRequestVersionInfoInterface) {\n\n if (muted) {\n url = url.replace(SZ_PARAM, SZ_PARAM_MUTED);\n }\n\n return Util.template(url, {\n get RANDOM() { return rand16(); },\n get HOST() { return getHost(); },\n get REFERER() { return skipHostAndReferer ? '' : getReferer(); },\n get PLAYERINFO() { return `${versionInfo.playername_version}`},\n get SDK() {return `${versionInfo.ima_sdkv}`} \n }, '\\\\[', '\\\\]');\n}\n\nexport function assembleStreamRequest(ssai: ResourceAdSsaiInterface, { muted }: any, skipHostAndReferer: boolean = false, versionInfo: AdRequestVersionInfoInterface): dai.StreamRequest {\n const params = ssai.adParameters;\n let hasHost = false;\n let hasRef = false;\n\n if (ssai.filterOutPremiumAudioCodecs) {\n params['dai-excl'] = FILTER_OUT_PREMIUM_AUDIO;\n }\n for (const q in params) {\n if (q == SZ && muted && params[q] == SZ_DEFAULT) {\n params[q] = SZ_MUTED;\n }\n\n if (params[q] == RAND_TOKEN) {\n params[q] = rand16();\n }\n\n if (q == HOST_KEY_SSAI) hasHost = true;\n if (q == REFERER_KEY_SSAI) hasRef = true;\n }\n\n if (!skipHostAndReferer) {\n if (!hasHost) {\n params[HOST_KEY_SSAI] = getHost();\n }\n if (!hasRef) {\n params[REFERER_KEY_SSAI] = getReferer();\n }\n }\n\n for (const key in versionInfo) {\n if (key.indexOf('imafw_') >= 0) {\n params[key] = versionInfo[key];\n }\n }\n\n const obj: Partial = {\n apiKey: ssai.apiKey,\n authToken: ssai.authToken || null,\n assetKey: ssai.assetKey || null,\n adTagParameters: params,\n videoId: ssai.videoId || null,\n contentSourceId: ssai.contentSourceId || null\n };\n\n if (Utilities.isString(ssai.format)) {\n obj.format = ssai.format;\n }\n\n return obj as dai.StreamRequest;\n}\n\nexport function rand16(): string {\n let n = String(Math.round(1000000000000000 + Math.random() * 9000000000000000));\n\n if (n.length < 16) { while (n.length < 16) n += '0'; }\n if (n.length > 16) { n = n.substr(0, 17); }\n\n return n;\n}\n\nexport function getHost(): string {\n const hUrl = new URL(window.location.href);\n return hUrl.host;\n}\n\nexport function getReferer(): string {\n return document?.referrer;\n}\n","\nimport { AdTechnology } from '../../enum/AdTechnology';\nimport { AdBreakType } from '../../enum/AdBreakType';\nimport { AdBreakScheduleItemInterface } from '../../iface/AdBreakScheduleItemInterface';\nimport { AdBreakCollectionInterface } from './AdBreakCollectionInterface';\nimport { dai } from './dai';\nimport { AdBreakCollection2Interface } from \"./iface\";\n\ndeclare type MidRollProcessor = (mid: AdBreakScheduleItemInterface) => any;\n\nexport class AdBreakSchedule {\n\n private breaks: AdBreakCollectionInterface;\n private breaksById: AdBreakCollection2Interface;\n\n constructor(cueTimes: number[] | null, cuePoints?: dai.CuePoint[], contentDur?: number) {\n this.breaks = {\n pre: null,\n mid: [],\n post: null\n };\n this.breaksById = {};\n\n if (cueTimes) this.createBreaksFromTimes(cueTimes);\n else if (cuePoints) this.createBreaksFromCuepoints(cuePoints, contentDur);\n }\n\n destroy(): void {\n this.breaks = null;\n this.breaksById = null;\n this.breaks = null;\n }\n\n get adBreaks(): AdBreakCollectionInterface {\n return this.breaks;\n }\n\n hasMidRolls(): boolean {\n return !!this.breaks.mid.length;\n }\n\n hasPostRoll(): boolean {\n return !!this.breaks.post;\n }\n\n getBreakById(podId: string): AdBreakScheduleItemInterface | null {\n return this.breaksById[podId] || null;\n }\n\n // dai-specific\n updateBreaks(cues: dai.CuePoint[]) {\n const played = [];\n let brk: AdBreakScheduleItemInterface;\n\n let i = cues.length;\n while (i--) {\n cues[i].played && played.push(cues[i].start);\n }\n\n for (let q in this.breaksById) {\n brk = this.breaksById[q];\n\n if (!brk.hasPlayed && played.indexOf(brk.streamStartTime) >= 0) {\n brk.hasPlayed = true;\n }\n }\n }\n\n /**\n * Returns true for supplied time (in seconds) if there\n * is an upcoming ad break within 'proximity' seconds.\n */\n isBreakPending(time: number, proximity: number): boolean {\n return !!this.processMid((mid: AdBreakScheduleItemInterface) => {\n if (mid.startTime > time && ((mid.startTime - time) <= proximity)) {\n return !mid.hasPlayed ? true : -1;\n }\n\n return null;\n });\n }\n\n /**\n * Returns ad break for supplied time (in seconds) if there\n * is immediately preceding, un-played ad break.\n */\n getBreakForContentSeekTime(time: number): AdBreakScheduleItemInterface {\n return this.processMid((mid: AdBreakScheduleItemInterface) => {\n if (mid.startTime <= time) {\n return !mid.hasPlayed ? mid : -1;\n }\n\n return null;\n });\n }\n\n hasPlayed(podId: string): boolean {\n return this.breaksById[podId] && this.breaksById[podId].hasPlayed === true;\n }\n\n markPlayed(podId: string): void {\n this.breaksById[podId] && (this.breaksById[podId].hasPlayed = true);\n }\n\n /**\n * fn must return a truthy value or -1 to break; null to continue loop\n */\n private processMid(fn: MidRollProcessor): AdBreakScheduleItemInterface | null {\n if (!this.hasMidRolls()) {\n return null;\n }\n\n const mid = this.breaks.mid;\n let i: number = mid.length,\n r: any;\n\n while (i--) {\n r = fn(mid[i]);\n\n if (r == -1) {\n return null;\n }\n else if (r) {\n return r;\n }\n }\n\n return null;\n }\n\n // DAI Cue points; value of 0 indicates a pre-roll.\n // These bracket the mid-roll times (which are in \"content time\").\n\n // dai case\n private createBreaksFromCuepoints(cues: dai.CuePoint[], contentDur: number): void {\n let midIdx = 1, t: number,\n e: number, id: string, d: number, sst: number,\n brk: AdBreakScheduleItemInterface;\n\n cues.sort(function (a, b) {\n return a.start - b.start;\n });\n\n let brkTimeTotal = 0;\n\n for (let i = 0, n = cues.length; i < n; i++) {\n t = cues[i].start;\n e = cues[i].end;\n d = e - t;\n sst = t;\n\n if ((t - brkTimeTotal) >= contentDur) {\n t = -1;\n }\n brkTimeTotal += d;\n\n id = this.makeBrkId(t, t > 0 ? midIdx++ : null);\n brk = this.makeBreak(t, id, sst, AdTechnology.SSAI);\n brk.endTime = e,\n brk.duration = d,\n this.addBreak(t, brk, id);\n }\n }\n\n private createBreaksFromTimes(cues: number[]): void {\n let midIdx = 1, t: number,\n id: string;\n\n cues.sort(function (a, b) {\n return a - b;\n });\n\n for (let i = 0, n = cues.length; i < n; i++) {\n t = cues[i];\n id = this.makeBrkId(t, t > 0 ? midIdx++ : null);\n this.addBreak(t, this.makeBreak(t, id, null, AdTechnology.CSAI), id);\n }\n }\n\n private addBreak(t: number, brk: AdBreakScheduleItemInterface, id: string): void {\n const prefix = id.split('_')[0];\n\n t <= 0 ? (this.breaks[prefix] = brk) : this.breaks.mid.push(brk);\n this.breaksById[id] = brk;\n }\n\n private makeBreak(t: number, id: string, sst: number = null, adTech: AdTechnology): AdBreakScheduleItemInterface {\n return {\n adTechnology: adTech,\n startTime: t,\n hasPlayed: false,\n streamStartTime: sst !== null ? sst : null,\n breakId: id,\n type: t === 0 ? AdBreakType.PRE : t === -1 ? AdBreakType.POST : AdBreakType.MID\n };\n }\n\n private makeBrkId(t: number, idx?: number): string {\n const idPrefix = t === 0 ? \"pre\" : (t === -1 ? \"post\" : \"mid\");\n\n return idPrefix + (t > 0 ? `_${idx}` : '_0');\n }\n}\n","export enum ImaVpaidMode {\n DISABLED = 'DISABLED', // VPAID ads will not play; an error will be returned.\n ENABLED = 'ENABLED', // Default; Enabled using x-domain iframe. VPAID ads cannot access the site.\n INSECURE = 'INSECURE' // Enabled using friendly iframe. Enables VPAID site access via JavaScript.\n}\n\n","import { AdTechnology } from '../../enum/AdTechnology';\nimport { AppResources } from '../../app/AppResources';\nimport { Emitter } from '../../core/Emitter';\nimport { Util } from '../../core/Util';\nimport { AdBreakType } from '../../enum/AdBreakType';\nimport { ErrorCode } from '../../enum/ErrorCode';\nimport { VideoMetadataInterface } from '../../iface';\nimport { AdBreakInfoInterface } from '../../iface/AdBreakInfoInterface';\nimport { AdBreakScheduleItemInterface } from '../../iface/AdBreakScheduleItemInterface';\nimport { AdCuePointInterface } from '../../iface/AdCuePointInterface';\nimport { ErrorRecoveryInterface } from '../../iface/ErrorRecoveryInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { AdBreakSchedule } from './AdBreakSchedule';\nimport { dai } from './dai';\nimport { DaiAdServiceInterface, DaiStreamManagerEventInterface, ImaAdInfoInterface } from './iface';\n\n\nexport class DaiStreamManager extends Emitter {\n\n static event: DaiStreamManagerEventInterface = {\n MEDIA_URL_AVAILABLE: 'mediaUrlAvailable',\n STREAM_ID_AVAILABLE: 'streamIdAvailable',\n AD_PERIOD_STARTED: 'adPeriodStarted',\n AD_CUEPOINTS_AVAILABLE: 'adCuepointsAvailable',\n AD_BREAK_START: 'adBreakStarted',\n AD_BREAK_METADATA: 'adBreakMetadata',\n AD_BREAK_COMPLETE: 'adBreakEnded',\n AD_ERROR: 'adError',\n AD_START: 'adStarted',\n AD_COMPLETE: 'adComplete',\n AD_PROGRESS: 'adProgress',\n AD_CLICK: 'adClick',\n AD_FIRST_QUARTILE: 'firstQuartile',\n AD_MIDPOINT: 'midpoint',\n AD_THIRD_QUARTILE: 'thirdQuartile',\n RAW_AD_SCHEDULE_AVAILABLE: 'rawAdScheduleAvailable',\n };\n\n private mediaUrl!: string;\n private adService: DaiAdServiceInterface;\n private mgr: dai.StreamManager;\n\n private sdk: dai.Sdk;\n private streamInfo: StrAnyDict = {};\n private adBreakSchedule: AdBreakSchedule = null;\n private pStreamDuration: number = NaN;\n private pContentDuration: number = NaN;\n private breakMetadataPending: boolean = false;\n\n private cuePoints: dai.CuePoint[];\n private cuesReleased: boolean = false;\n private adBreakInProgress: boolean = false;\n private isLiveStream: boolean;\n private breakCount: number = 0;\n private unlockedBreaks: number[] = [];\n private rawScheduleReleased: boolean = false;\n private isIgnoringEvents: boolean = false;\n\n private pendingCues: dai.CuePoint[];\n private streamEventHandler: (e: dai.StreamEvent) => void;\n private omEnabled: boolean = true;\n\n constructor(adService: DaiAdServiceInterface, enableOm: boolean) {\n super(null);\n\n this.cuePoints = [];\n this.adService = adService;\n this.sdk = this.adService.sdk;\n this.mgr = this.adService.getStreamManager();\n this.omEnabled = enableOm;\n\n this.streamEventHandler = (e: dai.StreamEvent) => { this.hStreamEvent(e); };\n\n this.initialize();\n }\n\n override destroy() {\n this.listenToStreamManager(false);\n this.cuePoints = null;\n this.adService = null;\n this.sdk = null;\n this.adBreakSchedule = null;\n this.mgr = null;\n }\n\n getCuePoints(): dai.CuePoint[] {\n return this.cuePoints || [];\n }\n\n getCuePointsInContentTime(): AdCuePointInterface[] {\n const pts = this.cuePoints,\n out = [];\n\n if (!pts) {\n return out;\n }\n for (let i = 0, n = pts.length; i < n; i++) {\n const p = pts[i],\n d = p.end - p.start,\n s = this.contentTimeForStreamTime(p.start);\n\n out.push({\n streamTimeStart: p.start,\n streamTimeEnd: p.start + d,\n start: s,\n duration: d,\n played: p.played\n });\n }\n\n return out;\n }\n\n ignoreAdEvents(flag: boolean): void {\n this.isIgnoringEvents = flag;\n }\n\n setUnlockedBreaks(breakTimes: number[]): void {\n this.unlockedBreaks = breakTimes;\n }\n\n getUnlockedBreaks(): number[] {\n return this.unlockedBreaks;\n }\n\n addUnlockedBreak(time: number): void {\n this.unlockedBreaks.push(time);\n }\n\n hasPostRoll(): boolean {\n return !!(this.adBreakSchedule?.hasPostRoll());\n }\n\n checkForAdPeriod(streamTime: number, suppressEvent?: boolean): boolean {\n let n = this.cuePoints.length, q, diffStart, diff1Ok, diff2Ok;\n\n for (let i = 0; i < n; i++) {\n q = this.cuePoints[i];\n diffStart = streamTime - q.start;\n diff1Ok = diffStart > -0.3 && diffStart < 2;\n diff2Ok = (q.end - streamTime) >= 3;\n\n if (this.isUnlockedBreak(q) && diff1Ok && diff2Ok) {\n this.emit(DaiStreamManager.event.AD_PERIOD_STARTED, {\n streamResumeTime: q.end\n });\n return true;\n }\n }\n\n return false;\n }\n\n isUnlockedBreak(q: dai.CuePoint) {\n let i = this.unlockedBreaks.length;\n while (i--) {\n if (Math.floor(this.unlockedBreaks[i]) === Math.floor(q.start)) {\n return true;\n }\n }\n return false;\n }\n\n getPermittedSeekTime(requestedSeekTime: number): number {\n if (this.adBreakSchedule && this.adBreakSchedule.hasMidRolls()) {\n const streamTime = this.mgr.streamTimeForContentTime(requestedSeekTime),\n b: AdBreakScheduleItemInterface = this.adBreakSchedule.getBreakForContentSeekTime(streamTime);\n\n if (b) {\n let i = this.unlockedBreaks.length;\n\n while (i--) {\n if (Math.floor(this.unlockedBreaks[i]) === Math.floor(b.streamStartTime)) {\n b.hasPlayed = true;\n return requestedSeekTime;\n }\n }\n\n return b.startTime;\n }\n }\n\n return requestedSeekTime;\n }\n\n set streamDuration(d: number) {\n this.pStreamDuration = d;\n this.pContentDuration = this.mgr.contentTimeForStreamTime(d);\n\n if (this.pendingCues && !this.cuesReleased) {\n this.updateBreakSchedule(this.pendingCues);\n this.releaseCues(this.pendingCues);\n this.pendingCues = null;\n }\n }\n\n get streamDuration(): number {\n return this.pStreamDuration || NaN;\n }\n\n get contentDuration(): number {\n return this.pContentDuration || NaN;\n }\n\n get streamId(): string {\n return this.streamInfo.streamId;\n }\n\n onTimedMetadata(md: VideoMetadataInterface): void {\n const obj: dai.StreamMetadataInterface = {\n TXXX: md.TXXX || md.msg\n };\n\n this.mgr.onTimedMetadata(obj);\n }\n\n contentTimeForStreamTime(t: number): number {\n return this.mgr.contentTimeForStreamTime(t);\n }\n\n streamTimeForContentTime(t: number): number {\n return this.mgr.streamTimeForContentTime(t);\n }\n\n requestVODStream(requestObject: dai.VODStreamRequest, er: ErrorRecoveryInterface = null) {\n const req = new this.sdk.VODStreamRequest(requestObject);\n\n // issue/83; enabling OM\n this.enableOmFullAccess(req);\n\n this.isLiveStream = false;\n this.mgr.requestStream(req, er);\n }\n\n requestLiveStream(requestObject: dai.LiveStreamRequest, er: ErrorRecoveryInterface = null): void {\n const req = new this.sdk.LiveStreamRequest(requestObject);\n\n // issue/83; enabling OM\n this.enableOmFullAccess(req);\n\n this.isLiveStream = true;\n this.mgr.requestStream(req, er);\n }\n\n private enableOmFullAccess(req: dai.VODStreamRequest | dai.LiveStreamRequest) {\n if (!this.adService.usesDaiApi && this.omEnabled) {\n /** @ts-ignore */\n req.omidAccessModeRules = {};\n /** @ts-ignore */\n req.omidAccessModeRules[this.sdk.OmidAccessMode?.FULL] = [new RegExp('.*')];\n }\n }\n\n private hStreamEvent(e: dai.StreamEvent): void {\n if (!this.sdk || !this.adService || this.isIgnoringEvents) {\n return;\n }\n\n //e.type != this.sdk.StreamEvent.Type.AD_PROGRESS && console.log(`%cSTREAM MGR evt: ${e.type}`, 'color: #880; font-size: 14px; font-weight: bold');\n\n const evtType = e.type,\n gamType = this.sdk.StreamEvent.Type,\n myEvent = DaiStreamManager.event;\n\n switch (evtType) {\n case gamType.LOADED:\n this.handleStreamLoaded(e);\n break;\n\n case gamType.STREAM_INITIALIZED:\n const d = e.getStreamData();\n this.streamInfo.streamId = d.streamId;\n this.emit(myEvent.STREAM_ID_AVAILABLE, { streamId: d.streamId });\n break;\n\n case gamType.AD_PERIOD_STARTED:\n // not used for now - manual checking done instead to normalize \n // GAM SDK/custom SDK+DAI_API behavior.\n // if (e.data && e.data.streamResumeTime) {\n // this.emit(myEvent.AD_PERIOD_STARTED, e.data);\n // }\n break;\n\n case gamType.CUEPOINTS_CHANGED:\n const cues = e.getStreamData().cuepoints;\n if (!this.rawScheduleReleased) {\n this.emit(myEvent.RAW_AD_SCHEDULE_AVAILABLE, { schedule: this.getRawSchedule(cues) });\n this.rawScheduleReleased = true;\n }\n this.updateBreakSchedule(cues);\n if (!isNaN(this.contentDuration) && !this.cuesReleased) {\n this.releaseCues(cues);\n }\n else {\n this.pendingCues = cues;\n }\n break;\n\n case gamType.AD_BREAK_STARTED:\n this.adBreakInProgress = true;\n this.breakMetadataPending = true;\n this.emit(myEvent.AD_BREAK_START);\n\n break;\n\n case gamType.STARTED:\n const ad = e.getAd();\n this.handleAdStart(ad, gamType.STARTED);\n break;\n\n case gamType.AD_PROGRESS:\n if (this.adBreakInProgress) {\n const pData = e.getStreamData().adProgressData;\n this.emit(myEvent.AD_PROGRESS, pData);\n }\n break;\n\n case gamType.FIRST_QUARTILE:\n if (this.adBreakInProgress) {\n this.trackQuartile(gamType.FIRST_QUARTILE);\n this.emit(myEvent.AD_FIRST_QUARTILE);\n }\n break;\n\n case gamType.MIDPOINT:\n if (this.adBreakInProgress) {\n this.trackQuartile(gamType.MIDPOINT);\n this.emit(myEvent.AD_MIDPOINT);\n }\n break;\n\n case gamType.THIRD_QUARTILE:\n if (this.adBreakInProgress) {\n this.trackQuartile(gamType.THIRD_QUARTILE);\n this.emit(myEvent.AD_THIRD_QUARTILE);\n }\n break;\n\n case gamType.COMPLETE:\n if (this.adBreakInProgress) {\n this.handleAdComplete(gamType.COMPLETE);\n }\n break;\n\n case gamType.AD_BREAK_ENDED:\n case gamType.AD_PERIOD_ENDED:\n this.adBreakInProgress && this.emit(myEvent.AD_BREAK_COMPLETE);\n this.updateUnlockedBreaks();\n this.adBreakInProgress = false;\n break;\n\n case gamType.CLICK:\n this.adBreakInProgress && this.emit(myEvent.AD_CLICK);\n break;\n\n case gamType.ERROR:\n this.adBreakInProgress = false;\n this.emitError(e.getStreamData().errorMessage, e.data ? e.data.code : null);\n break;\n }\n }\n\n private handleAdComplete(evt: string): void {\n if (!this.adService.usesDaiApi) {\n this.adService.trackAdEvent({\n context: this.adService.getAdContext(),\n eventName: evt,\n volume: this.adService.videoInterface.volume\n });\n this.adService.untrackAd();\n }\n\n this.emit(DaiStreamManager.event.AD_COMPLETE);\n }\n\n private trackQuartile(evt: string): void {\n !this.adService.usesDaiApi && this.adService.trackAdEvent({\n context: this.adService.getAdContext(),\n eventName: evt,\n volume: this.adService.videoInterface.volume\n });\n }\n\n private handleAdStart(ad: dai.Ad, evt: string): void {\n const abi: AdBreakInfoInterface = this.adService.assembleAdBreakInfo(ad, AdTechnology.SSAI),\n ai: ImaAdInfoInterface = this.adService.assembleAdInfo(ad, { mediaUrl: this.mediaUrl }),\n myEvent = DaiStreamManager.event;\n\n if (this.breakMetadataPending || !this.adBreakInProgress) {\n this.breakMetadataPending = false;\n this.adBreakInProgress = true;\n\n if (this.isLiveStream) {\n abi.adBreakPosition = ++this.breakCount;\n abi.adBreakType = AdBreakType.MID;\n }\n this.emit(myEvent.AD_BREAK_METADATA, abi);\n }\n\n if (!this.adService) {\n return;\n }\n\n if (!this.adService.usesDaiApi) {\n this.adService.trackAd(ai);\n this.adService.trackAdEvent({\n context: this.adService.getAdContext(),\n eventName: evt,\n volume: this.adService.videoInterface.volume\n });\n }\n\n this.emit(myEvent.AD_START, ai);\n }\n\n private handleStreamLoaded(e: dai.StreamEvent): void {\n const data = e.getStreamData(),\n assetUrl = data.url;\n\n if (!Util.isString(assetUrl) || assetUrl == '') {\n this.emitError(AppResources.messages.DAI_MISSING_ASSET_URL);\n\n return;\n }\n\n this.mediaUrl = assetUrl;\n\n this.streamInfo.streamId = data.streamId;\n\n this.emit(DaiStreamManager.event.STREAM_ID_AVAILABLE, { streamId: data.streamId });\n\n this.emit(DaiStreamManager.event.MEDIA_URL_AVAILABLE, {\n mediaUrl: assetUrl\n });\n }\n\n private updateUnlockedBreaks(): void {\n const b = this.adBreakSchedule?.adBreaks;\n\n if (b) {\n for (const q in b) {\n if (q === 'pre') this.updateUnlockedScheduleItems([b[q]]);\n else this.updateUnlockedScheduleItems(b[q]);\n }\n }\n }\n\n private updateUnlockedScheduleItems(ba: AdBreakScheduleItemInterface[]): void {\n let i = ba ? ba.length : 0;\n while (i--) {\n const b = ba[i];\n if (b && b.hasPlayed && this.unlockedBreaks.indexOf(b.startTime) === -1) {\n this.addUnlockedBreak(b.startTime);\n }\n }\n }\n\n private getRawSchedule(cues: AdCuePointInterface[]): AdCuePointInterface[] {\n const out: AdCuePointInterface[] = [];\n\n for (let i = 0, n = cues.length; i < n; i++) {\n const q = cues[i];\n out[i] = {\n adTechnology: AdTechnology.SSAI,\n start: this.mgr.contentTimeForStreamTime(q.start),\n streamTimeStart: q.start,\n end: this.mgr.contentTimeForStreamTime(q.end),\n streamTimeEnd: q.end,\n played: false\n };\n }\n\n return out;\n }\n\n private releaseCues(cues?: dai.CuePoint[]): void {\n const out = [],\n qlist = cues || this.cuePoints;\n\n let i = qlist.length;\n\n while (i--) {\n // TODO - note that \"Universal\" Ad Presentation Mediator handles time conversion\n // make sure to eliminate call to contentTimeForStreamTime() in adapter implementation\n out.unshift(this.contentTimeForStreamTime(qlist[i].start));\n }\n\n this.cuesReleased = true;\n\n\n this.emit(DaiStreamManager.event.AD_CUEPOINTS_AVAILABLE, {\n cuepoints: out\n });\n }\n\n private emitError(msg: string, code?: ErrorCode): void {\n this.emit(DaiStreamManager.event.AD_ERROR, {\n message: msg,\n code: code || ErrorCode.DAI_DATA_ERROR,\n streamId: this.streamInfo.streamId || null\n });\n }\n\n private listenToStreamManager(flag: boolean): void {\n const m = flag ? 'addEventListener' : 'removeEventListener',\n evts: string[] = this.getEventInterests();\n\n let evt;\n if (!this.sdk) {\n return;\n }\n for (let i = 0, n = evts.length; i < n; i++) {\n evt = this.sdk.StreamEvent.Type[evts[i]];\n (this.mgr)[m](evt, this.streamEventHandler);\n }\n }\n\n private getEventInterests(): string[] {\n return [\n 'LOADED', 'STREAM_INITIALIZED', 'CUEPOINTS_CHANGED',\n 'AD_BREAK_STARTED', 'AD_BREAK_ENDED',\n 'STARTED', 'COMPLETE',\n 'AD_PERIOD_STARTED',\n 'AD_PERIOD_ENDED',\n 'AD_PROGRESS',\n 'FIRST_QUARTILE', 'MIDPOINT', 'THIRD_QUARTILE',\n 'CLICK',\n 'ERROR',\n ];\n }\n\n private updateBreakSchedule(cues: dai.CuePoint[]): void {\n const valid = cues && cues.length;\n\n this.cuePoints = [];\n\n if (valid && this.contentDuration) {\n let c: dai.CuePoint;\n for (let i = 0, n = cues.length; i < n; i++) {\n c = cues[i];\n this.cuePoints.push({\n adTechnology: AdTechnology.SSAI,\n start: c.start,\n played: c.played,\n end: c.end\n });\n }\n\n !this.adBreakSchedule && (this.adBreakSchedule = new AdBreakSchedule(null, cues, this.contentDuration));\n\n }\n\n valid && this.adBreakSchedule && this.adBreakSchedule.updateBreaks(cues);\n }\n\n initialize(): void {\n this.listenToStreamManager(true);\n }\n}\n","import { GamStaticParametersInterface } from './iface';\n\nexport const gam_static_params: GamStaticParametersInterface = {\n cmsid: 2289,\n output: 'xml_vmap1',\n unviewed_position_start: 1,\n correlator: '1',\n gdfp_req: 1,\n env: 'vp'\n};\n","import { QueryString } from '../../core/QueryString';\nimport { Util } from '../../core/Util';\nimport { AdTagParametersInterface } from '../../iface/AdTagParametersInterface';\nimport { ResourceAdViewabilityTrackingInterface } from '../../iface/ResourceAdViewabilityTrackingInterface';\nimport { ResourceConfigurationInterface } from '../../iface/ResourceConfigurationInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { gam_static_params } from './gam_static_params';\nimport { AdPlaybackContextInterface, GamStaticParametersInterface } from './iface';\n\n/* \nadTagParameters: {\n description_url: string;\n sz: string;\n url: string;\n iu: string;\n ad_rule: string;\n ciu_szs: string;\n pp: string;\n cmsid: string;\n vid: string;\n cust_params: object,\n hl: string;\n msid: string;\n an: string;\n nofb: string;\n ppid: string;\n tfcd: string;\n npa: string;\n \n output: string;\n}\n*/\n\nexport class AdParamAssembler {\n\n private static SZ_DEFAULT: string = '640x480';\n private static SZ_MUTED: string = '640x483';\n\n assembleStdParams(rc: ResourceConfigurationInterface, info: AdPlaybackContextInterface): AdTagParametersInterface {\n const constParams: GamStaticParametersInterface = gam_static_params,\n stdp: AdTagParametersInterface = rc.ad.adTagParameters,\n trkp: ResourceAdViewabilityTrackingInterface = rc.ad.viewabilityTracking,\n out = {};\n\n let q: string;\n\n // const params; use supplied if defined or defaults in gam_static_params\n for (q in constParams) {\n out[q] = stdp[q] || constParams[q];\n }\n\n // user-supplied standard adTagParams\n for (q in stdp) {\n if (q !== 'cust_params' && !Util.isEmpty(stdp[q])) {\n out[q] = stdp[q];\n }\n }\n\n // viewability tracking (Moat)\n for (q in trkp) {\n out[q] = trkp[q];\n }\n\n if (out.sz === AdParamAssembler.SZ_DEFAULT) {\n const szStr = this.getSzStringForPlayback(info.mutedPlayback);\n szStr && (out.sz = szStr);\n }\n\n return out;\n }\n\n getSzStringForPlayback(muted: boolean): string | null {\n return muted ? AdParamAssembler.SZ_MUTED : null;\n }\n\n substituteStringForMutedPlayback(str: string) {\n const szStr = this.getSzStringForPlayback(true);\n\n if (szStr) {\n const re = new RegExp(`sz=${AdParamAssembler.SZ_DEFAULT}`, 'g');\n\n return str.replace(re, `sz=${szStr}`);\n }\n\n return str;\n }\n\n queryStrFromObj(obj: StrAnyDict, encode?: string[]): string {\n return QueryString.encode(obj);\n }\n\n objFromQueryStr(str: string): StrAnyDict {\n return QueryString.decode(str);\n }\n}\n","import { Util } from '../../core/Util';\nimport { AdTagParametersInterface } from '../../iface/AdTagParametersInterface';\nimport { ResourceAdDaiInterface } from '../../iface/ResourceAdDaiInterface';\nimport { ResourceConfigurationInterface } from '../../iface/ResourceConfigurationInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { AdParamAssembler } from './AdParamAssembler';\nimport { dai } from './dai';\nimport { AdPlaybackContextInterface, AdRequestVersionInfoInterface } from './iface';\n\n\nexport class DaiStreamRequestAssembler extends AdParamAssembler {\n\n private static FILTER_OUT_PREMIUM_AUDIO = 'codec:ac-3,codec:ec-3';\n\n constructor() {\n super();\n }\n\n assembleStreamRequest(r: ResourceConfigurationInterface, info: AdPlaybackContextInterface, skipEncode: boolean = false, versionInfo: AdRequestVersionInfoInterface): dai.StreamRequest {\n const stdParamsObj: AdTagParametersInterface = this.assembleStdParams(r, info),\n daiParams: ResourceAdDaiInterface = r.ad.dai;\n\n if (daiParams.filterOutPremiumAudioCodecs) {\n stdParamsObj['dai-excl'] = DaiStreamRequestAssembler.FILTER_OUT_PREMIUM_AUDIO;\n }\n\n const atp: StrAnyDict = Util.assign({}, stdParamsObj);\n atp.cust_params = this.queryStrFromObj(r.ad.adTagParameters.cust_params, skipEncode ? [] : []);\n\n delete atp.output;\n\n for (const key in versionInfo) {\n if (key.indexOf('imafw_') < 0) {\n atp[key] = versionInfo[key];\n }\n }\n\n const obj = {\n apiKey: daiParams.apiKey,\n authToken: daiParams.authToken || null,\n assetKey: daiParams.assetKey || null,\n streamActivityMonitorId: daiParams.streamActivityMonitorId || null,\n adTagParameters: atp,\n videoId: daiParams.daiVideoId || null,\n contentSourceId: daiParams.contentSourceId || null\n };\n\n if (Util.isString(daiParams.format)) {\n obj.format = daiParams.format;\n }\n\n return obj;\n }\n}\n","import { buildInfo } from '../../core/BuildInfo';\nimport { Util } from '../../core/Util';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { ModelName } from '../../enum/ModelName';\nimport { NotificationName } from '../../enum/NotificationName';\nimport { PlaybackState } from '../../enum/PlaybackState';\nimport { ProxyName } from '../../enum/ProxyName';\nimport { ServiceName } from '../../enum/ServiceName';\nimport { StreamType } from '../../enum/StreamType';\nimport { PresentationMediatorInterface, SystemServiceInterface } from '../../iface';\nimport { AdBreakInfoInterface } from '../../iface/AdBreakInfoInterface';\nimport { AdCuePointInterface } from '../../iface/AdCuePointInterface';\nimport { AdItemInterface } from '../../iface/AdItemInterface';\nimport { ContentPlaybackStateInterface } from '../../iface/ContentPlaybackStateInterface';\nimport { EventHandler } from '../../iface/EventHandler';\nimport { EventInterface } from '../../iface/EventInterface';\nimport { PlayerOptionsInterface } from '../../iface/PlayerOptionsInterface';\nimport { ResourceConfigurationInterface } from '../../iface/ResourceConfigurationInterface';\nimport { ResourceProxy } from '../../model/ResourceProxy';\nimport { DashEmsg } from '../../playback/enum/DashEmsg';\nimport { CommonPresentationMediator } from '../../view/CommonPresentationMediator';\nimport { Deprecated } from '../Deprecated';\nimport { AdDataProxy } from './AdDataProxy';\nimport { assembleStreamRequest } from './ad_util';\nimport { dai } from './dai';\nimport { DaiStreamManager } from './DaiStreamManager';\nimport { DaiStreamRequestAssembler } from './DaiStreamRequestAssembler';\nimport { AdDataProxyInterface, AdPlaybackContextInterface, DaiAdServiceInterface } from './iface';\n\n\n/**\n * DaiPresentationMediator is used for Google DAI streams (combined content/ad stream)\n * \n * @deprecated\n */\nexport class DaiPresentationMediator extends CommonPresentationMediator implements PresentationMediatorInterface {\n\n private adDataProxy: AdDataProxyInterface;\n private streamManager!: DaiStreamManager;\n private streamEventHandler!: EventHandler;\n private contentSegmentStarted: boolean = false;\n private contentStartReleased: boolean = false;\n private pendingSeekTime: number = null;\n private contentCompleteReleased: boolean = false;\n private presoComplete: boolean = false;\n private rawAdSchedule: AdCuePointInterface[] = null;\n\n constructor(name: string, viewControl?: any) {\n super(name, viewControl);\n Deprecated.warn('The internal ad service is deprecated. Please use the @cbsinteractive/avia-js-gam plugin. Access to this property will be completely removed July 1st, 2022');\n }\n\n override onRemove(): void {\n this.listenToStreamManager(false);\n this.adService && this.adService.reset();\n this.streamManager?.destroy();\n this.streamManager = null;\n this.adDataProxy = null;\n\n super.onRemove();\n }\n\n override closeAds(): void {\n this.listenToStreamManager(false);\n this.domProxy?.showAdContainer(false);\n this.adService?.reset();\n }\n\n override start(): void {\n const pm = this.presoModel;\n\n if (this.uiMediator) {\n this.uiMediator.setMuteState(pm.isMuted);\n if (this.resourceProxy?.ad?.suppressAdUi === true) {\n this.uiMediator.adViewSuppressed = true;\n }\n }\n\n this.adService.setMuted(pm.isMuteAtPlayStart && !pm.userHasUnmuted);\n this.presoModel.usesSsai = true;\n this.initStreamManager();\n }\n\n override getAdBreakTimes(): AdCuePointInterface[] {\n return this.streamManager ? this.streamManager.getCuePointsInContentTime() : null;\n }\n\n // Note: DaiStreamManager wraps a Google SDK StreamManager,\n // or its equivalent if using the DAI API\n initStreamManager(): void {\n const streamRequest = this.assembleStreamRequest(),\n pOpts = this.getModel(ModelName.PlayerOptions),\n isLive = !Util.isEmpty(streamRequest.assetKey);\n\n this.streamManager = new DaiStreamManager(this.adService, this.playerOptions.enableOm);\n this.streamEventHandler = (e: EventInterface) => { this.hStreamEvent(e); };\n this.listenToStreamManager(true);\n\n if (isLive) {\n this.streamManager.requestLiveStream(streamRequest, pOpts.networkErrorRecovery);\n }\n else {\n this.streamManager.requestVODStream(streamRequest, pOpts.networkErrorRecovery);\n }\n }\n\n assembleStreamRequest(): dai.StreamRequest {\n const resource: ResourceConfigurationInterface = (this.facade.retrieveProxy(ProxyName.ResourceProxy)).resource;\n const context: AdPlaybackContextInterface = {\n buildEnv: buildInfo.env,\n platform: this.adService.getGamPlatformString(),\n mutedPlayback: this.presoModel.isMuteAtPlayStart && !this.presoModel.userHasUnmuted\n };\n const useLegacyGam = !Util.isEmpty(resource.ad.dai?.daiVideoId || resource.ad.dai?.assetKey);\n const useFw = (resource.ad.ssai?.videoId || resource.ad.ssai?.assetKey) && !Util.isEmpty(resource.ad.ssai?.adParameters);\n\n if (useLegacyGam) {\n const assembler = new DaiStreamRequestAssembler();\n\n return assembler.assembleStreamRequest(\n resource,\n context,\n false,\n {\n playername_version: this.getPlayerVersionInfo()\n }\n );\n }\n else if (useFw) {\n const sys = this.facade.retrieveService(ServiceName.System);\n\n return assembleStreamRequest(\n resource.ad.ssai,\n {\n muted: this.presoModel.isMuteAtPlayStart && !this.presoModel.userHasUnmuted,\n autoplay: this.presoModel.isAutoplay\n },\n !(sys.isDesktop || sys.isMobile),\n {\n imafw_playername_version: this.getPlayerVersionInfo()\n }\n );\n }\n\n return null;\n }\n\n override mute(flag: boolean): void {\n this.muteVideo(flag);\n this.uiMediator && this.uiMediator.setMuteState(flag);\n this.adService.setMuted(flag);\n }\n\n override seek(position: number): void {\n if (this.isAdPlaying()) { return; }\n\n const t: number = this.streamManager.getPermittedSeekTime(position),\n t2 = t === position ? this.streamManager.streamTimeForContentTime(t) : t;\n\n if (t !== position) {\n this.notify(NotificationName.SEEK_REDIRECT_START, {\n requestedSeekTime: position,\n actualSeekTime: t\n });\n this.pendingSeekTime = this.streamManager.streamTimeForContentTime(position);\n }\n\n this.seekVideo(t2);\n }\n\n protected override respondToId3Data(d: any): void {\n const msg = !Util.isEmpty(d.info) ? d.info : (!Util.isEmpty(d.data) ? d.data : null);\n\n if (msg && (d.id === 'google_dai' || d.id == DashEmsg.GOOGLE_DAI)) {\n this.log(LogLevel.INFO, `metadata received - id: ${d.id} msg ${msg}`);\n this.streamManager.onTimedMetadata({ TXXX: msg });\n }\n else {\n super.respondToId3Data(d);\n }\n }\n\n protected override respondToVideoPlaying(): void {\n if (!this.presoModel.started) {\n this.presoModel.started = true;\n\n if (this.uiMediator) {\n this.uiMediator && this.uiMediator.displayPoster(false);\n this.uiMediator && this.uiMediator.hideClickCatcher(true);\n this.presoModel.isMuteAtPlayStart && !this.presoModel.userHasUnmuted && this.uiMediator.showUnmutePrompt();\n this.setTransportType();\n }\n\n this.notify(NotificationName.ENABLE_UI);\n }\n\n super.respondToVideoPlaying();\n\n if (this.isAdPlaying()) {\n this.notify(NotificationName.AD_PLAYING);\n }\n else if (this.contentSegmentStarted) {\n this.respondToPlaybackStateChange(PlaybackState.PLAYING);\n this.setPlayingState();\n this.notify(NotificationName.CONTENT_PLAYING);\n }\n }\n\n protected override respondToVideoPaused(): void {\n super.respondToVideoPaused();\n\n if (this.isAdPlaying()) {\n this.notify(NotificationName.AD_PAUSED);\n }\n else {\n this.respondToPlaybackStateChange(PlaybackState.PAUSED);\n this.setPausedState();\n this.notify(NotificationName.CONTENT_PAUSED);\n }\n }\n\n protected override respondToVideoTimeUpdate(streamTime: number): void {\n if (this.contentComplete) {\n return;\n }\n const cps: ContentPlaybackStateInterface = this.contentPlaybackStateProxy.model;\n this.adService.setCurrentTime(streamTime);\n this.streamManager.ignoreAdEvents(false);\n\n this.presoModel.streamTime = streamTime;\n cps.time = this.streamManager.contentTimeForStreamTime(streamTime);\n\n // NOTE: 'ad period' denotes an ad break that has already played or is otherwise unlocked\n // the check will result in an AD_PERIOD_STARTED event (and in turn a seek to the next content segment)\n // Manual checking is necessary because The GAM SDK does not emit the AD_PERIOD_STARTED event\n const willSkipBreak = this.streamManager.checkForAdPeriod(streamTime);\n\n if (this.isAdPlaying() || willSkipBreak) {\n return;\n }\n\n // we may get a video time update before the stream pre-roll break event,\n // so wait a little bit (0.75 sec) to detect content start. If we're past 0.75\n // and there's no ad playing (see above), then we're in content.\n if (streamTime > 0.75 && !this.contentSegmentStarted) {\n this.contentSegmentStarted = true;\n this.contentPlaybackStateProxy.model.started = true;\n this.domProxy && this.domProxy.showAdContainer(false);\n this.setPlayingState();\n this.setTransportType();\n !this.contentStartReleased && this.signalContentStart();\n\n if (this.fullscreenRestrictedDuringAdPlay && this.uiMediator) {\n this.uiMediator.setFullScreenAccessRestricted(false);\n this.uiMediator.enableFullscreen();\n }\n\n this.notify(NotificationName.CONTENT_SEGMENT_START);\n }\n\n if (this.contentSegmentStarted) {\n super.respondToVideoTimeUpdate(streamTime);\n }\n\n if (cps.streamType !== StreamType.LIVE && (cps.time >= cps.duration) && !this.contentCompleteReleased) {\n this.signalContentComplete();\n }\n }\n\n protected override respondToVideoEnd(): void {\n this.contentComplete = true;\n if (!this.contentCompleteReleased) {\n this.signalContentComplete();\n }\n this.presoComplete = true;\n super.respondToVideoEnd();\n }\n\n protected override respondToDurationChange(duration: number): void {\n const cd = this.streamManager.contentTimeForStreamTime(duration);\n\n this.contentPlaybackStateProxy.model.duration = cd;\n this.presoModel.streamDuration = duration;\n this.adService.setDuration(duration);\n\n if (!this.contentDurationReleased && cd && !isNaN(cd) && cd > 0) {\n this.releaseContentDuration(cd);\n }\n this.streamManager.streamDuration = duration;\n }\n\n protected override isContentComplete() {\n return this.presoComplete;\n }\n\n ///////////\n // PRIVATE\n\n private signalContentStart(): void {\n this.contentStartReleased = true;\n this.notify(NotificationName.CONTENT_START);\n }\n\n private signalContentComplete(): void {\n this.contentCompleteReleased = true;\n this.notify(NotificationName.CONTENT_SEGMENT_END);\n this.notify(NotificationName.CONTENT_COMPLETE);\n }\n\n private get adService(): DaiAdServiceInterface {\n return this.facade.retrieveService(ServiceName.DaiAd);\n }\n\n private handleMediaUrlAvailable(url: string): void {\n const suppliedContentStartTime = this.resourceProxy.playback.startTime,\n showPreRoll = this.resourceProxy.ad.showPrerollOnNonZeroStart,\n nonZeroStart = !isNaN(suppliedContentStartTime) && suppliedContentStartTime > 0;\n\n if (nonZeroStart) {\n const times: number[] = this.rawAdSchedule.map((o: AdCuePointInterface) => o.streamTimeStart),\n actualContentStartTime = this.adjustStartTimeForAdBreakProximity(suppliedContentStartTime, this.rawAdSchedule),\n streamStartTime = this.streamManager.streamTimeForContentTime(actualContentStartTime);\n\n this.checkForBreaksToUnlock(times);\n\n if (showPreRoll) {\n this.resourceProxy.playback.startTime = NaN;\n this.pendingSeekTime = streamStartTime;\n }\n else {\n const isDash = this.resourceProxy.ad.dai.format == 'dash';\n if (isDash) {\n this.streamManager.ignoreAdEvents(true);\n }\n this.resourceProxy.playback.startTime = streamStartTime;\n }\n }\n\n this.resourceProxy.location.mediaUrl = url;\n\n this.adService.initViewabilityTracking();\n\n if (this.isClickToPlay) {\n this.setForClickToPlay();\n }\n else {\n this.notify(NotificationName.VIDEO_LOAD_START);\n this.prepareForPlayback();\n }\n }\n\n private checkForBreaksToUnlock(brkTimes: number[]) {\n if (!brkTimes || !brkTimes.length) { return; }\n\n const t = this.resourceProxy.playback.startTime,\n pre = this.resourceProxy.ad.showPrerollOnNonZeroStart,\n st = this.streamManager.streamTimeForContentTime(t),\n out = [];\n\n if (st > 0) {\n if (pre !== true) out.push(0);\n\n let i = brkTimes.length;\n while (i--) {\n if (i > 0 && st > brkTimes[i]) {\n out.push(brkTimes[i]);\n break;\n }\n }\n\n this.streamManager && this.streamManager.setUnlockedBreaks(out);\n }\n }\n\n private hStreamEvent(e: EventInterface): void {\n const dse = DaiStreamManager.event,\n t = e.type;\n\n //t != dse.AD_PROGRESS && console.log(`%cEvt: ${t}`, 'color: #808; font-size: 14px; font-weight: bold');\n\n switch (t) {\n case dse.RAW_AD_SCHEDULE_AVAILABLE:\n this.rawAdSchedule = e.data.schedule;\n break;\n\n case dse.STREAM_ID_AVAILABLE:\n this.presoModel.streamId = this.streamManager.streamId;\n this.notify(NotificationName.STREAM_ID_AVAILABLE, { streamId: this.streamManager.streamId });\n break;\n\n case dse.MEDIA_URL_AVAILABLE:\n this.handleMediaUrlAvailable(e.data.mediaUrl);\n break;\n\n case dse.AD_CUEPOINTS_AVAILABLE:\n this.notify(NotificationName.AD_CUEPOINTS_AVAILABLE, e.data);\n break;\n\n case dse.AD_PERIOD_STARTED:\n this.seekVideo(e.data.streamResumeTime);\n break;\n\n case dse.AD_BREAK_START:\n if (this.contentSegmentStarted) {\n this.contentSegmentStarted = false;\n this.notify(NotificationName.CONTENT_SEGMENT_END);\n }\n this.domProxy && this.domProxy.showAdContainer(true);\n this.presoModel.isCurrentVideoAd = true;\n\n this.uiMediator && this.uiMediator.hideClickCatcher(true);\n\n this.notify(NotificationName.AD_BREAK_START);\n break;\n\n case dse.AD_BREAK_METADATA:\n const bi = e.data;\n this.adDataProxy.breakInfo = bi;\n this.notify(NotificationName.AD_BREAK_METADATA, { adBreakInfo: bi });\n break;\n\n case dse.AD_START:\n const adData = e.data;\n this.adDataProxy.adInfo = adData;\n this.notify(NotificationName.AD_START, { adInfo: adData });\n if (this.contentPlaybackStateProxy.model.state === PlaybackState.PAUSED) {\n this.notify(NotificationName.AD_PAUSED);\n }\n break;\n\n case dse.AD_PROGRESS:\n const cpsMdl = this.contentPlaybackStateProxy.model;\n if (cpsMdl.state === PlaybackState.PLAYING) {\n const data: Record = {\n currentTime: e.data.currentTime,\n duration: e.data.duration,\n streamTime: this.presoModel.streamTime,\n streamDuration: this.presoModel.streamDuration\n };\n if (cpsMdl.streamType === StreamType.LIVE) {\n data.elapsedTimeMs = this.updateTimeSpent().elapsedTime;\n }\n this.notify(NotificationName.AD_TIME_UPDATE, data);\n }\n break;\n\n case dse.AD_FIRST_QUARTILE:\n this.notify(NotificationName.AD_FIRST_QUARTILE);\n break;\n\n case dse.AD_MIDPOINT:\n this.notify(NotificationName.AD_MIDPOINT);\n break;\n\n case dse.AD_THIRD_QUARTILE:\n this.notify(NotificationName.AD_THIRD_QUARTILE);\n break;\n\n case dse.AD_COMPLETE:\n this.notify(NotificationName.AD_COMPLETE);\n break;\n\n case dse.AD_BREAK_COMPLETE:\n this.domProxy && this.domProxy.showAdContainer(false);\n this.presoModel.isCurrentVideoAd = false;\n this.notify(NotificationName.AD_BREAK_COMPLETE);\n if (this.pendingSeekTime) {\n this.contentPlaybackStateProxy.model.started && this.notify(NotificationName.SEEK_REDIRECT_COMPLETE);\n this.seekVideo(this.pendingSeekTime);\n this.pendingSeekTime = null;\n }\n break;\n\n case dse.AD_CLICK:\n this.pause();\n break;\n\n case dse.AD_ERROR:\n // An error from the StreamManager amounts to a fatal resource error\n e.data.fatal = true;\n this.notify(NotificationName.RESOURCE_ERROR, e.data);\n break;\n }\n }\n\n private listenToStreamManager(flag: boolean): void {\n if (!this.streamManager) { return; }\n const dse = DaiStreamManager.event,\n m = flag ? 'on' : 'off';\n\n for (let q in dse) {\n (this.streamManager)[m](dse[q], this.streamEventHandler);\n }\n }\n\n override onRegister() {\n super.onRegister();\n this.domProxy && this.domProxy.showAdContainer(false);\n\n this.adDataProxy = new AdDataProxy(ProxyName.AdDataProxy, null);\n this.facade.registerProxy(this.adDataProxy);\n }\n}\n","import { Emitter } from '../../core/Emitter';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { ImaAdErrorInfoInterface, ImaAdServiceInterface, ImaAdsLoaderEventInterface, ImaAdsLoaderInterface, ImaAdsLoaderOptions, ImaSdkSettingsInterface } from './iface';\nimport { ima } from './ima';\n\n\nexport class ImaAdsLoader extends Emitter implements ImaAdsLoaderInterface {\n\n static event: ImaAdsLoaderEventInterface = {\n ADS_MANAGER_LOADED: 'adsManagerLoaded',\n ADS_LOADER_ERROR: 'adsLoaderError'\n };\n\n private eMap: Record void> = {\n errorHandler: null,\n adsMgrLoadedHandler: null\n };\n\n private adsLoader!: ima.AdsLoader;\n private adService: ImaAdServiceInterface;\n private sdk: ima.Sdk;\n private initialized: boolean = false;\n private omEnabled: boolean = true;\n\n constructor(options: ImaAdsLoaderOptions) {\n super(options);\n\n this.adService = this.opts.adService;\n this.sdk = this.adService.sdk;\n this.omEnabled = this.opts.enableOm;\n\n this.eMap.errorHandler = (e: ima.AdErrorEvent) => this.hError(e);\n this.eMap.adsMgrLoadedHandler = (e: ima.AdsManagerLoadedEvent) => this.hAdsMgrLoaded(e);\n }\n\n override destroy(): void {\n\n if (this.adsLoader) {\n this.adsLoader.removeEventListener(\n this.sdk.AdErrorEvent.Type.AD_ERROR,\n this.eMap.errorHandler\n );\n\n this.adsLoader.removeEventListener(\n this.sdk.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n this.eMap.adsMgrLoadedHandler\n );\n\n this.adsLoader.destroy();\n }\n\n this.adsLoader = null;\n this.adService = null;\n this.sdk = null;\n\n super.destroy();\n }\n\n /**\n * Initialize may only be called if playback is permitted, i.e,\n * if autoplay is enabled or a valid user gesture has occurred.\n * Returns false if the SDK has become undefined.\n */\n initialize(): boolean {\n const o = this.opts,\n sdk = this.sdk;\n\n if (!sdk || !sdk.AdsLoader) {\n return false;\n }\n\n if (this.initialized) {\n return true;\n }\n\n const adc: ima.AdDisplayContainer = new sdk.AdDisplayContainer(\n o.adContainer,\n o.video,\n o.adClickEl\n );\n adc.initialize();\n\n this.adsLoader = new sdk.AdsLoader(adc);\n\n const imaSettings: ima.ImaSdkSettings = this.adsLoader.getSettings();\n this.populateSdkSettings(imaSettings);\n\n this.adsLoader.addEventListener(\n sdk.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,\n this.eMap.adsMgrLoadedHandler\n );\n\n this.adsLoader.addEventListener(sdk.AdErrorEvent.Type.AD_ERROR, this.eMap.errorHandler);\n\n this.initialized = true;\n\n return true;\n }\n\n requestAds(adsRequest: ima.AdsRequest, userRequestContext?: StrAnyDict) {\n const sdkObj = this.sdk as any;\n\n if (this.omEnabled) {\n /** @ts-ignore */\n adsRequest.omidAccessModeRules = {};\n /** @ts-ignore */\n adsRequest.omidAccessModeRules[sdkObj.OmidAccessMode?.FULL] = [new RegExp('.*')];\n }\n\n this.adsLoader && this.adsLoader.requestAds(adsRequest);\n }\n\n getSdkVersion() {\n return this.adsLoader.getVersion();\n }\n\n contentComplete(): void {\n this.adsLoader && this.adsLoader.contentComplete();\n }\n\n getSettings() {\n return this.adsLoader ? this.adsLoader.getSettings() : null;\n }\n\n private hAdsMgrLoaded(e: ima.AdsManagerLoadedEvent): void {\n this.emit(ImaAdsLoader.event.ADS_MANAGER_LOADED, e);\n }\n\n private hError(e: ima.AdErrorEvent): void {\n const adErrorInfo: ImaAdErrorInfoInterface = this.parseAdErrorEvent(e);\n\n this.emit(ImaAdsLoader.event.ADS_LOADER_ERROR, adErrorInfo);\n }\n\n private parseAdErrorEvent(e: ima.AdErrorEvent): ImaAdErrorInfoInterface {\n return this.adService.parseAdError(e);\n }\n\n private populateSdkSettings(settings: ima.ImaSdkSettings): void {\n const cbsImaSettings: ImaSdkSettingsInterface = this.opts.sdkSettings,\n vpaidMode = this.sdk.ImaSdkSettings.VpaidMode[cbsImaSettings.vpaidMode];\n\n settings.setVpaidMode(vpaidMode);\n settings.setDisableCustomPlaybackForIOS10Plus(cbsImaSettings.disableCustomPlaybackForIOS10Plus);\n settings.setPlayerType(cbsImaSettings.playerType);\n settings.setPlayerVersion(cbsImaSettings.playerVersion);\n }\n}\n","export enum Env {\n DEV = 'dev',\n STAGE = 'stage',\n PROD = 'prod'\n}\n\n","import { buildInfo } from '../../core/BuildInfo';\nimport { Util } from '../../core/Util';\nimport { AdContext } from '../../enum/AdContext';\nimport { ImaVpaidMode } from '../../enum/ImaVpaidMode';\nimport { ModelName } from '../../enum/ModelName';\nimport { ServiceName } from '../../enum/ServiceName';\nimport { SystemServiceInterface } from '../../iface';\nimport { PlayerOptionsInterface } from '../../iface/PlayerOptionsInterface';\nimport { GamAdService } from './GamAdService';\nimport { ImaAdErrorInfoInterface, ImaAdServiceInterface, ImaAdsLoaderInterface, ImaAdsLoaderOptions, ImaAdsRenderingSettingsInterface, ImaSdkSettingsInterface } from './iface';\nimport { ima } from './ima';\nimport { ImaAdsLoader } from './ImaAdsLoader';\n\n/**\n * @deprecated\n */\nexport class ImaAdService extends GamAdService implements ImaAdServiceInterface {\n\n private pAdsLoader: ImaAdsLoaderInterface;\n private pAdsLoaderOptions: ImaAdsLoaderOptions;\n\n constructor(name: string) {\n super(name, AdContext.IMA);\n }\n\n override destroy() {\n this.pAdsLoader && this.pAdsLoader.destroy();\n this.pAdsLoader = null;\n this.pAdsLoaderOptions = null;\n\n super.destroy();\n }\n\n get sdk(): ima.Sdk | null {\n const sysSvc = this.getService(ServiceName.System),\n global = sysSvc.global;\n\n return (global && global.google && global.google.ima) || null;\n }\n\n get sdkSettings(): ImaSdkSettingsInterface {\n return {\n vpaidMode: ImaVpaidMode.INSECURE,\n disableCustomPlaybackForIOS10Plus: false,\n playerType: buildInfo.playerName,\n playerVersion: buildInfo.playerVersion\n };\n }\n\n get defaultRenderingSettings(): ImaAdsRenderingSettingsInterface {\n return {\n bitrate: 900,\n enablePreloading: false,\n loadVideoTimeout: -1, // ms, default 8000 ms\n playAdsAfterTime: undefined,\n restoreCustomPlaybackStateOnAdBreakComplete: false\n };\n }\n\n set adsLoaderOptions(options: ImaAdsLoaderOptions) {\n this.pAdsLoaderOptions = options;\n }\n\n get adsLoader(): ImaAdsLoaderInterface {\n return this.pAdsLoader;\n }\n\n getSdkVersion() {\n return this.adsLoader?.getSdkVersion();\n }\n\n createAdsLoader(): void {\n if (!this.pAdsLoader) {\n this.pAdsLoaderOptions.enableOm = (this.getModel(ModelName.PlayerOptions))?.enableOm === true;\n this.pAdsLoader = new ImaAdsLoader(this.pAdsLoaderOptions);\n }\n }\n\n initializeAdsLoader(): boolean {\n this.createViewabilityTracker();\n return this.pAdsLoader.initialize();\n }\n\n // Error\n parseAdError(e: ima.AdErrorEvent): ImaAdErrorInfoInterface {\n const err = e.getError(),\n reqCtx = e.getUserRequestContext(),\n inner = err.getInnerError();\n\n return {\n type: this.getAdErrorType(err),\n errorCode: err.getErrorCode(),\n vastErrorCode: err.getVastErrorCode(),\n message: err.getMessage(),\n innerErrorMessage: Util.isString(inner) ? inner : null,\n sdkVersion: this.sdk.VERSION,\n requestContext: reqCtx || null\n };\n }\n\n //////////\n // PRIVATE\n private getAdErrorType(err: ima.AdError): string {\n const t = err.getType();\n return t == this.sdk.AdError.Type.AD_LOAD ? 'adLoad' : 'adPlay';\n }\n}\n","import { Util } from '../../core/Util';\nimport { Env } from '../../enum/Env';\nimport { ResourceConfigurationInterface } from '../../iface/ResourceConfigurationInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { AdParamAssembler } from './AdParamAssembler';\nimport { AdPlaybackContextInterface, AdRequestVersionInfoInterface } from './iface';\n\n/*\nadTagParameters: {\n description_url: string;\n sz: string;\n url: string;\n iu: string;\n ad_rule: string;\n ciu_szs: string;\n pp: string;\n cmsid: string;\n vid: string;\n cust_params: object,\n hl: string;\n msid: string;\n an: string;\n nofb: string;\n ppid: string;\n tfcd: string;\n npa: string;\n}\n*/\n\nexport class ImaAdCallAssembler extends AdParamAssembler {\n\n static adCallTemplate: string = 'http://pubads.g.doubleclick.net/gampad/ads?';\n\n constructor() {\n super();\n }\n\n assembleAdCall(rc: ResourceConfigurationInterface, contextInfo: AdPlaybackContextInterface, versionInfo: AdRequestVersionInfoInterface): string {\n const baseUrl = ImaAdCallAssembler.adCallTemplate,\n stdParamsObj = this.assembleStdParams(rc, contextInfo),\n obj: StrAnyDict = Util.assign({}, stdParamsObj);\n\n let custParamsStr = this.queryStrFromObj(rc.ad.adTagParameters.cust_params);\n obj.cust_params = custParamsStr;\n\n // vpaid is turned on for development\n (contextInfo.buildEnv === Env.DEV) && (obj.pp = 'vpaid_js');\n\n for (const key in versionInfo) {\n if (key.indexOf('imafw') < 0) {\n obj[key] = versionInfo[key];\n }\n }\n\n const qs = this.queryStrFromObj(obj, [\n \"description_url\", \"url\", 'iu', \"partner\", \"cust_params\", \"playername_version\", \"sdkv\"\n ]);\n\n return baseUrl + qs;\n }\n\n}\n","import { AdTechnology } from '../../enum/AdTechnology';\nimport { AppResources } from '../../app/AppResources';\nimport { Emitter } from '../../core/Emitter';\nimport { Util } from '../../core/Util';\nimport { AdContext } from '../../enum/AdContext';\nimport { ErrorCode } from '../../enum/ErrorCode';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { AdBreakInfoInterface } from '../../iface/AdBreakInfoInterface';\nimport { AdBreakScheduleItemInterface } from '../../iface/AdBreakScheduleItemInterface';\nimport { EventHandler } from '../../iface/EventHandler';\nimport { EventInterface } from '../../iface/EventInterface';\nimport { LoggerInterface } from '../../iface/LoggerInterface';\nimport { ResourceAdInterface } from '../../iface/ResourceAdInterface';\nimport { StrAnyDict } from '../../iface/StrAnyDict';\nimport { AdBreakCollectionInterface } from './AdBreakCollectionInterface';\nimport { AdBreakSchedule } from './AdBreakSchedule';\nimport {\n ImaAdErrorInfoInterface,\n ImaAdInfoInterface,\n ImaAdPlayerEventInterface,\n ImaAdPlayerOptions,\n ImaAdServiceInterface,\n ImaAdsLoaderInterface,\n ImaAdsRenderingSettingsInterface\n} from './iface';\nimport { ima } from './ima';\nimport { ImaAdPlayerInterface } from './ImaAdPlayerInterface';\nimport { ImaAdsLoader } from './ImaAdsLoader';\nimport AdErrorEvent = ima.AdErrorEvent;\n\n\ninterface AdProgressDataInterface {\n lastRecordedTime: number;\n pollTzero: number;\n addTzero: number;\n timeoutHandle: any;\n stallThreshold: number;\n adId: string | null;\n duration: number;\n pollInterval: number;\n}\n\nexport class ImaAdPlayer extends Emitter implements ImaAdPlayerInterface {\n\n static event: ImaAdPlayerEventInterface = {\n CONTENT_PAUSE_REQUESTED: 'contentPauseRequested',\n CONTENT_RESUME_REQUESTED: 'contentResumeRequested',\n AD_CLICK_ELEMENT_VISIBILITY_REQUESTED: 'adClickElementVisibilityRequested',\n AD_CUEPOINTS_AVAILABLE: 'adCuepointsAvailable',\n AD_INIT_ERROR: 'adInitError',\n AD_BREAK_START: 'adBreakStart',\n AD_BREAK_METADATA: 'adBreakMetadata',\n AD_LOADED: 'adLoaded',\n AD_START: 'adStarted',\n AD_PROGRESS: 'adProgress',\n AD_FIRST_QUARTILE: 'adFirstQuartile',\n AD_MIDPOINT: 'adMidpoint',\n AD_THIRD_QUARTILE: 'adThirdQuartile',\n AD_COMPLETE: 'adComplete',\n ALL_ADS_COMPLETED: 'allAdsCompleted',\n AD_BREAK_COMPLETE: 'adBreakComplete',\n AD_BREAK_DISCARDED: 'adBreakDiscarded',\n AD_BUFFERING: 'adBuffering',\n AD_PAUSED: 'paused',\n AD_RESUMED: 'resumed',\n AD_SKIPPED: 'adSkipped',\n AD_CLICK: 'adClick',\n AD_ERROR: 'adError',\n AD_VOLUME_CHANGED: 'adVolumeChanged',\n AD_MUTED: 'adMuted',\n AD_STALLED: 'adStalled',\n RAW_AD_SCHEDULE_AVAILABLE: 'rawAdScheduleAvailable'\n };\n\n private readonly adCallUrl: string;\n private readonly adsLoaderEventMap: Record;\n private adsLoader: ImaAdsLoaderInterface;\n private adService: ImaAdServiceInterface;\n private sdk: ima.Sdk;\n private presentationContainer: HTMLElement;\n private adEventHandler: (e: ima.AdEvent) => void;\n private errorEventHandler: (e: ima.AdErrorEvent) => void;\n private pIsFullscreen: boolean = false;\n private inProgressAd: ImaAdInfoInterface | null = null;\n private inProgressBreakId: string = null;\n private isPaused: boolean = false;\n\n private renderingSettings!: ima.AdsRenderingSettings;\n private adsManager!: ima.AdsManager;\n private adBreakSchedule: AdBreakSchedule;\n private breakStartReleased: boolean = false;\n private pendingSeekedBreakId: string = null;\n private markedAsPlayed: string[] = null;\n private logger: LoggerInterface = null;\n private adProgressData: AdProgressDataInterface = {\n lastRecordedTime: 0,\n addTzero: null,\n pollTzero: null,\n timeoutHandle: null,\n stallThreshold: 5,\n adId: null,\n duration: null,\n pollInterval: 2000,\n };\n\n constructor(options: ImaAdPlayerOptions) {\n super(options);\n\n this.adCallUrl = options.adCallUrl;\n this.presentationContainer = options.presentationContainer;\n this.adService = options.adService;\n this.sdk = this.adService.sdk;\n this.adsLoader = this.adService.adsLoader;\n this.adProgressData.stallThreshold = options.stallThreshold || this.adProgressData.stallThreshold;\n\n this.logger = options.logger;\n\n delete this.opts.presentationContainer;\n\n this.adsLoaderEventMap = {};\n const iae = ImaAdsLoader.event;\n this.adsLoaderEventMap[iae.ADS_LOADER_ERROR] = (e: EventInterface) => this.hAdsLoaderError(e);\n this.adsLoaderEventMap[iae.ADS_MANAGER_LOADED] = (e: EventInterface) => this.hAdsMgrLoaded(e);\n\n this.adEventHandler = (e: ima.AdEvent) => this.hAdEvent(e);\n this.errorEventHandler = (e: ima.AdErrorEvent) => this.hAdsManagerAdError(e);\n this.initialize();\n }\n\n override destroy(): void {\n clearTimeout(this.adProgressData.timeoutHandle);\n\n this.listenToAdsLoader(false);\n this.listenToAdsManager(false);\n\n this.adsManager?.destroy();\n this.adsLoader?.contentComplete();\n\n this.adBreakSchedule && this.adBreakSchedule.destroy();\n\n this.presentationContainer = null;\n this.adsManager = null;\n this.sdk = null;\n this.adsLoader = null;\n this.adEventHandler = null;\n this.adBreakSchedule = null;\n this.renderingSettings = null;\n this.logger = null;\n\n super.destroy();\n }\n\n get adBreaks(): AdBreakCollectionInterface {\n return this.adBreakSchedule ? this.adBreakSchedule.adBreaks : null;\n }\n\n set contentBitrate(br: number) {\n if (this.renderingSettings && this.adsManager) {\n this.renderingSettings.bitrate = br;\n this.adsManager.updateAdsRenderingSettings(this.renderingSettings);\n }\n }\n\n set volume(value: number) {\n this.adsManager && this.adsManager.setVolume(Util.clampValue(value, 0, 1));\n }\n\n set isFullscreen(value: boolean) {\n this.pIsFullscreen = value;\n }\n\n pauseAd(): void {\n clearTimeout(this.adProgressData.timeoutHandle);\n this.isPaused = true;\n this.adsManager?.pause();\n }\n\n resumeAd(): void {\n clearTimeout(this.adProgressData.timeoutHandle);\n this.isPaused = false;\n this.adsManager?.resume();\n }\n\n mute(): void {\n this.volume = 0;\n }\n\n unmute(volume: number) {\n this.volume = volume;\n }\n\n hasPostRoll(): boolean {\n return !!(this.adBreakSchedule?.hasPostRoll());\n }\n\n hasMidRolls(): boolean {\n return !!(this.adBreakSchedule?.hasMidRolls());\n }\n\n startAds(): void {\n const rect: DOMRect = this.getRect(),\n view = this.pIsFullscreen ? this.sdk.ViewMode.FULLSCREEN : this.sdk.ViewMode.NORMAL;\n\n try {\n this.adsManager.init(rect.width, rect.height, view);\n this.adsManager.start();\n }\n catch (adError) {\n // IMA Doc says: if error thrown here, play content - no ads will play\n this.log('AdsManager init failure.');\n this.emit(ImaAdPlayer.event.AD_INIT_ERROR, {\n code: ErrorCode.IMA_INIT_FAILURE,\n message: adError.getMessage ? adError.getMessage() : AppResources.messages.UNSPECIFIED_ERROR\n });\n }\n }\n\n markAsPlayed(ids: string[]): void {\n if (!this.markedAsPlayed) {\n this.markedAsPlayed = ids;\n }\n else {\n this.markedAsPlayed = this.markedAsPlayed.concat(ids);\n }\n }\n\n getBreakForSeekTime(requestedSeekTime: number): AdBreakScheduleItemInterface | null {\n if (this.adBreakSchedule && this.adBreakSchedule.hasMidRolls()) {\n const b: AdBreakScheduleItemInterface = this.adBreakSchedule.getBreakForContentSeekTime(requestedSeekTime);\n if (b && (!this.markedAsPlayed || this.markedAsPlayed.indexOf(b.breakId) === -1)) {\n this.pendingSeekedBreakId = b.breakId;\n\n return b;\n }\n }\n\n return null;\n }\n\n cancelPendingBreak(id: string): void {\n this.pendingSeekedBreakId === id && (this.pendingSeekedBreakId = null);\n }\n\n isUsingContentVideoElement(): boolean {\n return this.adsManager && this.adsManager.isCustomPlaybackUsed();\n }\n\n isUsingCustomClickTracker(): boolean {\n return !!(this.adsManager && this.adsManager.isCustomClickTrackingUsed());\n }\n\n setContentComplete(): void {\n this.adsLoader?.contentComplete();\n }\n\n updateSize(isFullscreen: boolean): void {\n const r: DOMRect = this.getRect();\n\n if (this.adsManager) {\n const vm = isFullscreen ? this.sdk.ViewMode.FULLSCREEN : this.sdk.ViewMode.NORMAL;\n this.adsManager.resize(r.width, r.height, vm);\n }\n }\n\n //////////\n // PRIVATE\n private hAdsManagerAdError(e: AdErrorEvent) {\n const err: ImaAdErrorInfoInterface = this.adService.parseAdError(e);\n\n this.log(\"AdsManager ERROR\", err);\n this.emit(ImaAdPlayer.event.AD_ERROR, {\n code: ErrorCode.IMA_AD_ERROR,\n message: (err && err.message) || AppResources.messages.UNSPECIFIED_ERROR,\n data: err\n });\n }\n\n private hAdEvent(e: ima.AdEvent): void {\n const t = this.sdk.AdEvent.Type,\n ad: ima.Ad = e.getAd(),\n adData: any = e.getAdData(),\n myEvt: ImaAdPlayerEventInterface = ImaAdPlayer.event;\n\n clearTimeout(this.adProgressData.timeoutHandle);\n let restartPoll: boolean = this.opts.enableStalledAdCheck !== false;\n\n // e.type != 'adProgress' && console.log('%cIMA AD EVENT: ' + e.type, 'color: red');\n\n // Only set 'restartPoll' to FALSE in case blocks below as needed.\n\n switch (e.type) {\n case t.CONTENT_PAUSE_REQUESTED:\n restartPoll = false;\n this.pendingSeekedBreakId = null;\n this.emit(myEvt.CONTENT_PAUSE_REQUESTED);\n break;\n\n case t.CONTENT_RESUME_REQUESTED:\n this.log(\"IMA SDK requested content resume.\");\n restartPoll = false;\n this.pendingSeekedBreakId = null;\n this.processBreakComplete();\n break;\n\n case t.LOADED:\n restartPoll = false;\n this.processAdLoadOrStart(ad, adData, t.LOADED);\n break;\n\n case t.STARTED:\n restartPoll = false;\n if (this.inProgressBreakId && !this.breakStartReleased) {\n this.breakStartReleased = true;\n this.emit(ImaAdPlayer.event.AD_BREAK_START, { adBreakId: this.inProgressBreakId });\n }\n this.processAdLoadOrStart(ad, adData, t.STARTED);\n this.checkForCustomClickTracking();\n this.beginPollForProgress(this.inProgressAd);\n break;\n\n case t.AD_PROGRESS:\n this.processProgress();\n break;\n\n case t.FIRST_QUARTILE:\n this.processQuartile(t.FIRST_QUARTILE, myEvt.AD_FIRST_QUARTILE);\n break;\n\n case t.MIDPOINT:\n this.processQuartile(t.MIDPOINT, myEvt.AD_MIDPOINT);\n break;\n\n case t.THIRD_QUARTILE:\n this.processQuartile(t.THIRD_QUARTILE, myEvt.AD_THIRD_QUARTILE);\n break;\n\n case t.COMPLETE:\n restartPoll = false;\n this.processAdComplete(t.COMPLETE);\n break;\n\n case t.ALL_ADS_COMPLETED:\n restartPoll = false;\n this.processAllComplete();\n break;\n\n case t.AD_BUFFERING:\n this.emit(myEvt.AD_BUFFERING);\n break;\n\n case t.CLICK:\n restartPoll = false;\n this.adsManager.pause();\n this.emit(myEvt.AD_CLICK, { ad: this.inProgressAd });\n break;\n\n case t.PAUSED:\n restartPoll = false;\n this.isPaused = true;\n this.emit(myEvt.AD_PAUSED);\n break;\n\n case t.RESUMED:\n this.isPaused = false;\n this.emit(myEvt.AD_RESUMED);\n break;\n\n case t.SKIPPED:\n restartPoll = false;\n this.processSkip(t.SKIPPED);\n break;\n\n case t.LOG:\n restartPoll = false;\n this.processLogEvent(adData);\n break;\n\n case t.USER_CLOSE:\n restartPoll = false;\n this.killAd();\n break;\n\n case t.VOLUME_CHANGED:\n case t.VOLUME_MUTED:\n this.processVolumeChange(e.type);\n break;\n }\n\n if (!this.isPaused && restartPoll) {\n this.adProgressData.timeoutHandle = setTimeout(\n () => this.checkAdProgress(),\n this.adProgressData.pollInterval\n );\n }\n }\n\n private checkForCustomClickTracking(): void {\n if (this.isUsingCustomClickTracker()) {\n this.emit(ImaAdPlayer.event.AD_CLICK_ELEMENT_VISIBILITY_REQUESTED);\n }\n }\n\n private beginPollForProgress(ad: ImaAdInfoInterface): void {\n const o = this.opts as ImaAdPlayerOptions;\n if (o.enableStalledAdCheck !== true) {\n return;\n }\n\n const apd = this.adProgressData;\n clearTimeout(apd.timeoutHandle);\n\n apd.duration = ad.adDuration;\n apd.adId = ad.adId;\n apd.pollTzero = Date.now();\n apd.timeoutHandle = setTimeout(() => this.checkAdProgress(), apd.pollInterval);\n }\n\n private checkAdProgress(): void {\n const apd = this.adProgressData,\n currT = apd.duration - this.adsManager.getRemainingTime(),\n now = Date.now();\n\n clearTimeout(apd.timeoutHandle);\n\n if (this.isPaused) {\n return;\n }\n\n if (apd.pollTzero === null) {\n apd.pollTzero = Date.now();\n }\n\n if (currT > apd.lastRecordedTime) {\n apd.lastRecordedTime = currT;\n apd.pollTzero = now;\n apd.timeoutHandle = setTimeout(() => this.checkAdProgress(), apd.pollInterval);\n }\n else if (((now - apd.pollTzero) * 0.001) > apd.stallThreshold) {\n const adInfo = this.inProgressAd ? Util.assign({}, this.inProgressAd) : null;\n this.log('Ad stalled; discarding break');\n this.emit(ImaAdPlayer.event.AD_STALLED, {\n code: ErrorCode.AD_STALLED,\n message: AppResources.messages.AD_STALLED,\n data: { adInfo: adInfo }\n });\n this.killAd();\n this.emit(ImaAdPlayer.event.AD_BREAK_DISCARDED);\n this.adsManager && this.adsManager.discardAdBreak(); // yields a content_resume request from the SDK)\n\n this.processBreakComplete();\n }\n }\n\n ////////////////////\n // Event processors - process IMA events, dispatch an ImaAdPlayer.event\n\n // Process ad break for both start and loaded (some info may only be avail at start, vs load)\n private processAdLoadOrStart(ad: ima.Ad, adData: StrAnyDict, evt: string): void {\n const isStart = evt === this.sdk.AdEvent.Type.STARTED;\n const abi: AdBreakInfoInterface = this.adService.assembleAdBreakInfo(ad, AdTechnology.CSAI);\n const ai: ImaAdInfoInterface = this.adService.assembleAdInfo(ad, adData, isStart);\n const idx = abi.adBreakPosition;\n const id = idx === 0 ? 'pre_0' : idx === -1 ? 'post_0' : 'mid_' + idx;\n\n if (this.markedAsPlayed && this.markedAsPlayed.indexOf(id) >= 0) {\n this.adBreakSchedule.markPlayed(id);\n this.adsManager.discardAdBreak();\n\n return;\n }\n\n if (isStart) {\n this.inProgressAd = ai;\n this.adService.trackAd(ai);\n this.adService.trackAdEvent({\n context: AdContext.IMA,\n eventName: evt,\n volume: this.adsManager.getVolume()\n });\n\n this.emit(ImaAdPlayer.event.AD_BREAK_METADATA, abi);\n this.emit(ImaAdPlayer.event.AD_START, ai);\n\n }\n else {\n if (!this.adBreakSchedule.hasPlayed(id)) {\n this.adBreakSchedule.markPlayed(id);\n this.inProgressBreakId = id;\n }\n this.emitAdLoaded(ai);\n }\n }\n\n private emitAdLoaded(adInfo: ImaAdInfoInterface): void {\n this.emit(ImaAdPlayer.event.AD_LOADED, adInfo);\n }\n\n private processProgress(): void {\n if (!this.inProgressAd) {\n return;\n }\n const dur = this.inProgressAd.adDuration,\n tRem = this.adsManager && this.adsManager.getRemainingTime();\n\n if (isNaN(dur) || isNaN(tRem) || tRem < 0) {\n return;\n }\n\n this.emit(ImaAdPlayer.event.AD_PROGRESS, {\n currentTime: Math.min(dur, Math.max(0, dur - tRem)),\n duration: dur\n });\n }\n\n private processQuartile(imaEvent: string, localEvent: string): void {\n this.emit(localEvent, { ad: this.inProgressAd });\n\n this.adService.trackAdEvent({\n context: AdContext.IMA,\n eventName: imaEvent,\n volume: this.adsManager.getVolume()\n });\n }\n\n private processAdComplete(imaEvt: string): void {\n this.adService.trackAdEvent({\n context: AdContext.IMA,\n eventName: imaEvt,\n volume: this.adsManager.getVolume()\n });\n\n this.killAd();\n }\n\n private processSkip(imaEvt: string) {\n this.emit(ImaAdPlayer.event.AD_SKIPPED, {\n ad: this.inProgressAd\n });\n\n this.adService.trackAdEvent({\n context: AdContext.IMA,\n eventName: imaEvt,\n volume: this.adsManager.getVolume()\n });\n\n this.killAd();\n }\n\n private processBreakComplete() {\n if (this.inProgressAd) {\n this.killAd();\n }\n if (this.inProgressBreakId) {\n this.emit(ImaAdPlayer.event.AD_BREAK_COMPLETE, { adBreakId: this.inProgressBreakId });\n this.inProgressBreakId = null;\n }\n this.breakStartReleased = false;\n this.emit(ImaAdPlayer.event.CONTENT_RESUME_REQUESTED);\n }\n\n private processVolumeChange(imaEvtType: string) {\n this.adService.trackAdEvent({\n context: AdContext.IMA,\n eventName: imaEvtType,\n volume: this.adsManager.getVolume()\n });\n }\n\n private processAllComplete() {\n if (this.inProgressBreakId) {\n this.processBreakComplete();\n }\n this.emit(ImaAdPlayer.event.ALL_ADS_COMPLETED);\n }\n\n private processLogEvent(adData: any): void {\n if (this.pendingSeekedBreakId) {\n this.log(\"IMA SDK LOG event; break is pending.\");\n // r. 1.6.x = omit marking played without an error present\n // this.adBreakSchedule.markPlayed(this.pendingSeekedBreakId);\n // this.pendingSeekedBreakId = null;\n }\n if (adData && adData.adError) {\n // if an error is found here, there may be a subsequent\n // contentPauseRequest but not a resume, and presentation\n // will stall unless ad break is discarded\n this.log(\"LOG event; Ad data has error: msg = \" + adData.adError.getMessage() || 'no message available');\n\n this.emit(ImaAdPlayer.event.AD_ERROR, {\n code: ErrorCode.IMA_AD_ERROR,\n message: adData.adError.getMessage() || AppResources.messages.UNSPECIFIED_ERROR,\n data: {\n errorCode: adData.adError.getErrorCode()\n }\n });\n this.log('LOG event; Discarding Ad break');\n this.emit(ImaAdPlayer.event.AD_BREAK_DISCARDED);\n this.adsManager && this.adsManager.discardAdBreak();\n }\n }\n\n // end Event Processors\n ///////////////////////\n private killAd(): void {\n this.adService.untrackAd();\n this.emit(ImaAdPlayer.event.AD_COMPLETE, { ad: this.inProgressAd });\n this.inProgressAd = null;\n\n const apd = this.adProgressData;\n clearTimeout(apd.timeoutHandle);\n apd.pollTzero = null;\n apd.lastRecordedTime = null;\n }\n\n private requestAds(): void {\n const ar = new this.sdk.AdsRequest(),\n r = this.getRect();\n ar.adTagUrl = this.adCallUrl;\n ar.linearAdSlotWidth = r.width;\n ar.linearAdSlotHeight = r.height;\n ar.nonLinearAdSlotWidth = r.width;\n ar.nonLinearAdSlotHeight = r.height;\n\n ar.setAdWillAutoPlay(this.opts.initialPlayState.autoplay);\n ar.setAdWillPlayMuted(this.opts.initialPlayState.muted);\n\n // async; yields AdsManagerLoaded event (see hAdsMgrLoaded)\n this.adsLoader.requestAds(ar);\n }\n\n // Ads Mgr Loaded\n private hAdsMgrLoaded(e: EventInterface): void {\n const amle = e.data;\n\n this.renderingSettings = this.getRenderingSettings();\n\n this.adsManager = amle.getAdsManager(this.opts.playheadInterface, this.renderingSettings);\n this.createAdBreakSchedule(this.adsManager.getCuePoints());\n this.listenToAdsManager(true);\n\n this.startAds();\n }\n\n private getRenderingSettings(): ima.AdsRenderingSettings {\n const rs: ima.AdsRenderingSettings = new this.sdk.AdsRenderingSettings(),\n sets: ResourceAdInterface = this.opts.ad,\n defs: ImaAdsRenderingSettingsInterface = this.adService.defaultRenderingSettings,\n sTimeout = sets.ima.loadVideoTimeoutMs,\n sPreLoadAds = sets.ima.enableAdPreloading;\n\n rs.bitrate = defs.bitrate;\n rs.enablePreloading = Util.isBoolean(sPreLoadAds) ? sPreLoadAds : defs.enablePreloading;\n rs.loadVideoTimeout = !isNaN(sTimeout) ? sTimeout : defs.loadVideoTimeout;\n rs.restoreCustomPlaybackStateOnAdBreakComplete = defs.restoreCustomPlaybackStateOnAdBreakComplete;\n\n return rs;\n }\n\n private createAdBreakSchedule(cuePoints: number[]): void {\n if (Util.isEmpty(cuePoints)) {\n cuePoints = [0];\n }\n\n this.adBreakSchedule = new AdBreakSchedule(cuePoints);\n\n this.emit(ImaAdPlayer.event.RAW_AD_SCHEDULE_AVAILABLE, {\n cuepoints: cuePoints\n });\n\n this.emit(ImaAdPlayer.event.AD_CUEPOINTS_AVAILABLE, {\n cuepoints: cuePoints\n });\n }\n\n private hAdsLoaderError(e: EventInterface): void {\n this.emit(ImaAdPlayer.event.AD_ERROR, {\n code: ErrorCode.IMA_AD_ERROR,\n message: e.data.message,\n data: e.data\n });\n\n this.log(\"AdsLoader ERROR\", e.data);\n\n this.emit(ImaAdPlayer.event.CONTENT_RESUME_REQUESTED);\n }\n\n private listenToAdsManager(flag: boolean): void {\n if (!this.adsManager) {\n return;\n }\n\n const m = flag ? 'addEventListener' : 'removeEventListener',\n events: string[] = this.getEventInterests();\n let event;\n\n for (let i = 0, n = events.length; i < n; i++) {\n event = this.sdk.AdEvent.Type[events[i]];\n (this.adsManager)[m](event, this.adEventHandler);\n }\n\n (this.adsManager)[m](this.sdk.AdErrorEvent.Type.AD_ERROR, this.errorEventHandler);\n }\n\n private listenToAdsLoader(flag: boolean): void {\n const map = this.adsLoaderEventMap,\n e = [ImaAdsLoader.event.ADS_MANAGER_LOADED, ImaAdsLoader.event.ADS_LOADER_ERROR];\n\n if (!this.adsLoader) { return; }\n\n let i = e.length;\n while (i--) {\n (this.adsLoader)[flag ? 'on' : 'off'](e[i], map[e[i]]);\n }\n }\n\n private getEventInterests(): string[] {\n return [\n 'CONTENT_PAUSE_REQUESTED',\n 'CONTENT_RESUME_REQUESTED',\n 'LOADED',\n 'STARTED',\n 'AD_PROGRESS',\n 'FIRST_QUARTILE',\n 'MIDPOINT',\n 'THIRD_QUARTILE',\n 'COMPLETE',\n 'ALL_ADS_COMPLETED',\n 'AD_BUFFERING',\n 'CLICK',\n 'PAUSED',\n 'RESUMED',\n 'SKIPPED',\n 'LOG',\n 'USER_CLOSE'\n ];\n }\n\n private getRect(): DOMRect {\n return this.presentationContainer.getBoundingClientRect();\n }\n\n private initialize(): void {\n this.listenToAdsLoader(true);\n this.requestAds();\n }\n\n private log(msg: string, obj?: any) {\n this.logger?.log(LogLevel.DEBUG, `ImaAdPlayer: ${msg}`);\n if (obj) {\n for (const q in obj) {\n this.logger?.log(LogLevel.DEBUG, `${q}: ${obj[q]}`);\n }\n }\n }\n}\n","import { AdTechnology } from '../../enum/AdTechnology';\nimport { buildInfo } from '../../core/BuildInfo';\nimport { Util } from '../../core/Util';\nimport { AdContext } from '../../enum/AdContext';\nimport { LogLevel } from '../../enum/LogLevel';\nimport { NotificationName } from '../../enum/NotificationName';\nimport { PlaybackState } from '../../enum/PlaybackState';\nimport { ProxyName } from '../../enum/ProxyName';\nimport { ServiceName } from '../../enum/ServiceName';\nimport { PresentationMediatorInterface, SystemServiceInterface } from '../../iface';\nimport { AdBreakInfoInterface } from '../../iface/AdBreakInfoInterface';\nimport { AdBreakScheduleItemInterface } from '../../iface/AdBreakScheduleItemInterface';\nimport { AdCuePointInterface } from '../../iface/AdCuePointInterface';\nimport { AdItemInterface } from '../../iface/AdItemInterface';\nimport { ContentPlaybackStateInterface } from '../../iface/ContentPlaybackStateInterface';\nimport { ErrorInfoInterface } from '../../iface/ErrorInfoInterface';\nimport { EventInterface } from '../../iface/EventInterface';\nimport { QualityInterface } from '../../iface/QualityInterface';\nimport { ResourceConfigurationInterface } from '../../iface/ResourceConfigurationInterface';\nimport { ResourceProxy } from '../../model/ResourceProxy';\nimport { CommonPresentationMediator } from '../../view/CommonPresentationMediator';\nimport { Deprecated } from '../Deprecated';\nimport { AdBreakCollectionInterface } from './AdBreakCollectionInterface';\nimport { AdDataProxy } from './AdDataProxy';\nimport { processAdCallUrlForFw } from './ad_util';\nimport { dai } from './dai';\nimport { AdDataProxyInterface, AdPlaybackContextInterface, AdProgressInterface, AdRequestVersionInfoInterface, ImaAdPlayerEventInterface, ImaAdPlayerOptions, ImaAdServiceInterface } from './iface';\nimport { ImaAdCallAssembler } from './ImaAdCallAssembler';\nimport { ImaAdPlayer } from './ImaAdPlayer';\nimport { ImaAdPlayerInterface } from './ImaAdPlayerInterface';\n\n/**\n * ImaPresentationMediator is used for Google IMA ads (separate video; typically progressive)\n * \n * @deprecated\n */\nexport class ImaPresentationMediator extends CommonPresentationMediator implements PresentationMediatorInterface {\n\n private adDataProxy: AdDataProxyInterface;\n private adPlayer: ImaAdPlayerInterface;\n\n private contentSegmentStarted: boolean = false;\n private pendingSeekTime: number = null;\n private contentStartReleased: boolean = false;\n private fatalContentErrorReceived: boolean = false;\n private breaksToSkip: string = null;\n private breakMetaDataReleased: boolean = false;\n private pendingBreak: AdBreakScheduleItemInterface = null;\n private pendingCuepoints: dai.CuePoint[];\n\n constructor(name: string, viewControl?: any) {\n super(name, viewControl);\n this.preloadContent = false;\n Deprecated.warn('The internal ad service is deprecated. Please use the @cbsinteractive/avia-js-gam plugin. Access to this property will be completely removed July 1st, 2022');\n }\n\n override onRemove(): void {\n this.killAdPlayer();\n this.adDataProxy = null;\n\n super.onRemove();\n }\n\n override closeAds(): void {\n this.listenToAdPlayer(false);\n this.domProxy?.showAdContainer(false);\n this.adPlayer?.destroy();\n }\n\n override start(): void {\n const contentStartTime = this.resourceProxy.playback.startTime,\n showPreRoll = this.resourceProxy.ad.showPrerollOnNonZeroStart,\n nonZeroStart = !isNaN(contentStartTime) && contentStartTime > 0,\n mUrl = this.resourceProxy.location.mediaUrl;\n\n this.hasContent = Util.isString(mUrl) && !Util.isEmpty(mUrl);\n\n if (this.uiMediator) {\n if (this.resourceProxy?.ad?.suppressAdUi === true) {\n this.uiMediator.adViewSuppressed = true;\n }\n }\n\n if (nonZeroStart) {\n const cp = this.resourceProxy.ad.adTagParameters.cust_params;\n\n this.breaksToSkip = cp && cp.skippod || null;\n if (!showPreRoll && this.breaksToSkip === null) {\n this.breaksToSkip = '1';\n }\n }\n\n if (nonZeroStart && showPreRoll) {\n this.resourceProxy.playback.startTime = NaN;\n this.pendingSeekTime = contentStartTime;\n }\n\n this.mute(this.presoModel.isMuted);\n\n if (this.isClickToPlay) {\n this.setForClickToPlay();\n }\n else {\n if (this.hasContent) {\n this.notify(NotificationName.VIDEO_LOAD_START);\n this.prepareForPlayback();\n }\n else {\n this.play();\n }\n }\n }\n\n // override\n override play(): void {\n if (!this.presoModel.started) {\n this.adService.initializeAdsLoader();\n this.domProxy && this.domProxy.showAdContainer(true);\n this.createAdPlayer();\n }\n else {\n this.isAdPlaying() ? this.adPlayer.resumeAd() : this.playVideo();\n }\n }\n\n override playOnUserGesture(): void {\n const resource: ResourceConfigurationInterface = (this.facade.retrieveProxy(ProxyName.ResourceProxy)).resource;\n\n if (resource.ad.context === AdContext.IMA_AD_ONLY) {\n this.play();\n }\n else {\n super.playOnUserGesture();\n }\n }\n\n // override\n override pause(): void {\n this.isAdPlaying() && this.adPlayer ? this.adPlayer.pauseAd() : this.pauseVideo();\n }\n\n // override\n override mute(flag: boolean): void {\n this.muteVideo(flag);\n if (this.adPlayer) {\n flag && this.adPlayer.mute();\n !flag && (this.adPlayer.unmute(this.domProxy.getVideoVolume()));\n }\n this.uiMediator && this.uiMediator.setMuteState(flag);\n }\n\n // override\n override seek(position: number): void {\n let seekT = position;\n\n if (this.adPlayer) {\n const b = this.adPlayer.getBreakForSeekTime(position);\n if (b) {\n seekT = b.startTime;\n this.pendingSeekTime = position;\n this.pendingBreak = b;\n this.notify(NotificationName.SEEK_REDIRECT_START, {\n requestedSeekTime: position,\n actualSeekTime: seekT\n });\n }\n }\n this.seekVideo(seekT);\n }\n\n // override\n override getAdBreakTimes(): AdCuePointInterface[] {\n const out: AdCuePointInterface[] = [],\n breaks: AdBreakCollectionInterface = this.adPlayer && this.adPlayer.adBreaks;\n\n if (!breaks) {\n return out;\n }\n\n if (breaks.pre) {\n out.push({\n start: breaks.pre.startTime,\n duration: breaks.pre.endTime - breaks.pre.startTime,\n played: breaks.pre.hasPlayed,\n adTechnology: AdTechnology.CSAI\n });\n }\n if (breaks.mid) {\n let i = breaks.mid.length, b;\n while (i--) {\n b = breaks.mid[i];\n out.unshift({\n start: b.startTime,\n duration: b.endTime - b.startTime,\n played: b.hasPlayed,\n adTechnology: AdTechnology.CSAI\n });\n }\n }\n if (breaks.post) {\n out.push({\n start: breaks.post.startTime,\n duration: breaks.post.endTime - breaks.post.startTime,\n played: breaks.post.hasPlayed,\n adTechnology: AdTechnology.CSAI\n });\n }\n\n return out;\n }\n\n ////////////////////////////////////////////\n // Respond to content video state changes\n ////////////////////////////////////////////\n protected override respondToVideoPlaying(): void {\n this.startPreso();\n\n super.respondToVideoPlaying();\n\n if (this.isAdPlaying()) {\n this.notify(NotificationName.AD_PLAYING);\n }\n else if (this.contentSegmentStarted) {\n this.respondToPlaybackStateChange(PlaybackState.PLAYING);\n this.setPlayingState();\n this.notify(NotificationName.CONTENT_PLAYING);\n }\n }\n\n protected override respondToVideoPaused(): void {\n super.respondToVideoPaused();\n\n if (this.isAdPlaying()) {\n this.notify(NotificationName.AD_PAUSED);\n }\n else {\n this.respondToPlaybackStateChange(PlaybackState.PAUSED);\n this.setPausedState();\n this.notify(NotificationName.CONTENT_PAUSED);\n }\n }\n\n protected override respondToVideoTimeUpdate(streamTime: number): void {\n if (this.contentComplete || !this.contentPlaybackStateProxy.isReady) {\n return;\n }\n\n const cps: ContentPlaybackStateInterface = this.contentPlaybackStateProxy.model;\n const isAd = this.isAdPlaying();\n\n this.setAdPlayerBitrate();\n\n if (isAd) {\n return;\n }\n\n this.presoModel.streamTime = streamTime;\n cps.time = streamTime;\n\n // if a seek redirect results in no activity from the SDK, then need to take action...\n if (this.pendingBreak && (streamTime - this.pendingBreak.startTime) > 1) {\n const ignore = this.resourceProxy.ad.ima.ignoreAnomalousConditionOnSeek;\n\n this.log(LogLevel.DEBUG, \"IMA PM: stream time: \" + streamTime + \"; threshold exceeded for brk @ \" + this.pendingBreak.startTime);\n\n if (!ignore && this.adPlayer) {\n this.adPlayer.markAsPlayed([this.pendingBreak.breakId]);\n }\n this.pendingSeekTime && this.seek(this.pendingSeekTime);\n this.pendingBreak = null;\n this.notify(NotificationName.SEEK_REDIRECT_COMPLETE);\n \n return;\n }\n\n if (streamTime > 0.75 && !this.contentSegmentStarted) {\n this.startContentSegment();\n }\n\n if (this.contentSegmentStarted) {\n super.respondToVideoTimeUpdate(streamTime);\n }\n }\n\n protected override respondToVideoEnd(): void {\n this.contentComplete = true;\n if (this.contentSegmentStarted) {\n this.contentSegmentStarted = false;\n this.notify(NotificationName.CONTENT_SEGMENT_END);\n }\n this.notify(NotificationName.CONTENT_COMPLETE);\n this.adPlayer?.setContentComplete();\n\n if (!this.adPlayer?.hasPostRoll()) {\n super.respondToVideoEnd();\n }\n }\n\n protected override respondToDurationChange(duration: number): void {\n this.contentPlaybackStateProxy.model.duration = duration;\n this.presoModel.streamDuration = duration;\n\n if (!isNaN(duration) && duration > 0) {\n\n !this.contentDurationReleased && this.releaseContentDuration(duration);\n\n if (this.pendingCuepoints) {\n const temp = this.pendingCuepoints;\n this.pendingCuepoints = null;\n\n this.notify(NotificationName.AD_CUEPOINTS_AVAILABLE, {\n cuepoints: temp\n });\n }\n }\n }\n\n protected override respondToBufferingStatusCheck(count: number): void {\n if (!this.isAdPlaying()) {\n super.respondToBufferingStatusCheck(count);\n }\n }\n\n protected override respondToQualityChange(quality: QualityInterface = null): void {\n this.setAdPlayerBitrate();\n super.respondToQualityChange(quality);\n }\n\n protected override respondToSizeChange(): void {\n this.adPlayer && this.adPlayer.updateSize(this.presoModel.isFullscreen);\n }\n\n protected override respondToError(data: ErrorInfoInterface) {\n this.fatalContentErrorReceived = data.fatal;\n super.respondToError(data);\n }\n\n ///////////\n // PRIVATE\n private startPreso(): void {\n if (this.presoModel.started) { return; }\n\n this.presoModel.started = true;\n\n if (this.uiMediator) {\n this.uiMediator.displayPoster(false);\n this.uiMediator.hideClickCatcher(true);\n this.presoModel.isMuteAtPlayStart && !this.presoModel.userHasUnmuted && this.uiMediator.showUnmutePrompt();\n }\n\n this.notify(NotificationName.ENABLE_UI);\n }\n\n protected override startContentSegment(): void {\n this.contentSegmentStarted = true;\n this.contentPlaybackStateProxy.model.started = true;\n this.domProxy && this.domProxy.showAdContainer(false);\n this.setPlayingState();\n\n if (this.uiMediator && !this.contentPlaybackStateProxy.model.liveStreamInfo) {\n this.uiMediator.setSeekable(true);\n }\n\n if (!this.contentStartReleased) {\n this.contentStartReleased = true;\n this.notify(NotificationName.CONTENT_START);\n }\n\n if (this.fullscreenRestrictedDuringAdPlay && this.uiMediator) {\n this.uiMediator.setFullScreenAccessRestricted(false);\n this.uiMediator.enableFullscreen();\n }\n\n this.notify(NotificationName.CONTENT_SEGMENT_START);\n }\n\n setAdPlayerBitrate(): void {\n if (this.adPlayer) {\n const pbsMdl = this.contentPlaybackStateProxy.model;\n const br = pbsMdl.bitrate;\n\n if (br && !isNaN(br)) {\n this.adPlayer.contentBitrate = br * 0.001;\n }\n }\n }\n\n ////////////////////////////\n // Handle ImaAdPlayer Events\n private hAdPlayerEvent(e: EventInterface): void {\n const iae: ImaAdPlayerEventInterface = ImaAdPlayer.event,\n t = e.type;\n\n // if (e.type.toLowerCase().indexOf('progress') < 0) {\n // console.log(`%cImaPm: ${e.type}`, 'color: #900; font-size: 13px; font-weight: bold');\n // }\n\n switch (t) {\n case iae.AD_CLICK_ELEMENT_VISIBILITY_REQUESTED:\n this.domProxy.showAdClickElement(true);\n break;\n\n case iae.AD_CLICK:\n this.notify(NotificationName.AD_CLICK, e.data);\n break;\n\n case iae.AD_SKIPPED:\n this.notify(NotificationName.AD_SKIPPED, e.data);\n break;\n\n case iae.RAW_AD_SCHEDULE_AVAILABLE:\n // no impl needed - keep 'in case'\n break;\n\n case iae.AD_CUEPOINTS_AVAILABLE:\n this.pendingCuepoints = e.data.cuepoints;\n break;\n\n case iae.CONTENT_PAUSE_REQUESTED:\n this.breakMetaDataReleased = false;\n this.respondToPauseRequestFromAdPlayer();\n break;\n\n case iae.CONTENT_RESUME_REQUESTED:\n this.resumeContentPlay();\n break;\n\n case iae.AD_BREAK_START:\n this.pendingBreak = null;\n this.respondToContentEnd();\n this.respondToAdBreakStart();\n break;\n\n case iae.AD_BREAK_METADATA:\n this.pendingBreak = null;\n this.respondToAdBreakMetadata(e.data);\n break;\n\n case iae.AD_LOADED:\n this.pendingBreak = null;\n this.respondToAdLoaded(e.data);\n break;\n\n case iae.AD_START:\n this.respondToPlaybackStateChange(PlaybackState.PLAYING);\n this.pendingBreak = null;\n this.respondToAdStart(e.data);\n break;\n\n case iae.AD_PROGRESS:\n this.respondToAdProgress(e.data);\n break;\n\n case iae.AD_PAUSED:\n this.respondToPlaybackStateChange(PlaybackState.PAUSED);\n this.notify(NotificationName.AD_PAUSED);\n this.notify(NotificationName.RESOURCE_PAUSED);\n break;\n\n case iae.AD_RESUMED:\n this.respondToPlaybackStateChange(PlaybackState.PLAYING);\n this.notify(NotificationName.AD_PLAYING);\n this.notify(NotificationName.RESOURCE_PLAYING);\n break;\n\n case iae.AD_FIRST_QUARTILE:\n this.notify(NotificationName.AD_FIRST_QUARTILE);\n break;\n\n case iae.AD_MIDPOINT:\n this.notify(NotificationName.AD_MIDPOINT);\n break;\n\n case iae.AD_THIRD_QUARTILE:\n this.notify(NotificationName.AD_THIRD_QUARTILE);\n break;\n\n case iae.AD_COMPLETE:\n this.respondToAdComplete();\n this.domProxy.showAdClickElement(false);\n this.notify(NotificationName.AD_COMPLETE);\n break;\n\n case iae.AD_BREAK_COMPLETE:\n this.breakMetaDataReleased = false;\n this.respondToAdBreakComplete();\n break;\n\n case iae.ALL_ADS_COMPLETED:\n this.breakMetaDataReleased = false;\n this.killAdPlayer();\n break;\n\n case iae.AD_BREAK_DISCARDED:\n this.breakMetaDataReleased = false;\n this.domProxy.showAdClickElement(false);\n this.notify(NotificationName.AD_BREAK_DISCARDED);\n break;\n\n case iae.AD_BUFFERING:\n // don't have a good way to know that\n // ad is *NOT* buffering, so no impl\n break;\n\n case iae.AD_STALLED:\n this.adDataProxy.resetAll();\n this.notify(NotificationName.AD_STALLED, e.data);\n break;\n\n case iae.AD_ERROR:\n this.domProxy.showAdClickElement(false);\n this.contentSegmentStarted = false;\n this.notify(NotificationName.AD_ERROR, e.data);\n break;\n\n case iae.AD_INIT_ERROR:\n this.killAdPlayer();\n this.notify(NotificationName.AD_ERROR, e.data);\n this.resumeContentPlay();\n break;\n }\n }\n\n ////////////////////////////////\n // Respond to ImaAdPlayer events\n ////////////////////////////////\n private respondToPauseRequestFromAdPlayer(): void {\n if (this.presoModel.started) {\n this.pauseVideo();\n }\n else {\n this.startPreso();\n }\n }\n\n private resumeContentPlay(): void {\n this.domProxy.showAdClickElement(false);\n\n if (this.fatalContentErrorReceived) {\n this.notify(NotificationName.DISABLE_UI);\n return;\n }\n\n if (!this.hasContent || this.contentComplete) {\n super.respondToVideoEnd();\n return;\n }\n\n if (!this.contentSegmentStarted) {\n if (!this.contentStartReleased) {\n const contentStartTime = this.resourceProxy.playback.startTime,\n nonZeroStart = !isNaN(contentStartTime) && contentStartTime > 0;\n\n if (nonZeroStart) {\n const breaks = this.getAdBreakTimes(),\n adjustedStart = this.adjustStartTimeForAdBreakProximity(contentStartTime, breaks);\n\n this.resourceProxy.playback.startTime = adjustedStart;\n }\n }\n\n this.load()\n .then(() => {\n this.resumeContentPlayComplete();\n this.startContentSegment();\n })\n .catch(this.onLoadError);\n\n return;\n }\n\n this.resumeContentPlayComplete();\n }\n\n private resumeContentPlayComplete() {\n if (this.pendingSeekTime) {\n this.notify(NotificationName.SEEK_REDIRECT_COMPLETE);\n this.seekVideo(this.pendingSeekTime);\n this.pendingSeekTime = null;\n }\n\n this.startPreso();\n this.play();\n }\n\n private respondToContentEnd(): void {\n if (this.contentSegmentStarted) {\n this.contentSegmentStarted = false;\n this.notify(NotificationName.CONTENT_SEGMENT_END);\n }\n }\n\n private respondToAdBreakStart(): void {\n this.domProxy && this.domProxy.showAdContainer(true);\n this.presoModel.isCurrentVideoAd = true;\n\n if (this.uiMediator) {\n this.uiMediator.hideClickCatcher(true);\n this.fullscreenRestrictedDuringAdPlay && this.uiMediator.disableFullscreen();\n }\n\n this.notify(NotificationName.AD_BREAK_START);\n }\n\n private respondToAdBreakMetadata(data: AdBreakInfoInterface): void {\n if (!this.breakMetaDataReleased) {\n this.adDataProxy.breakInfo = data;\n this.breakMetaDataReleased = true;\n this.notify(NotificationName.AD_BREAK_METADATA, { adBreakInfo: data });\n }\n }\n\n private respondToAdStart(data: AdItemInterface): void {\n this.adDataProxy.adInfo = data;\n\n this.notify(NotificationName.AD_START, { adInfo: data });\n this.notify(NotificationName.RESOURCE_PLAYING);\n\n this.checkPreload();\n }\n\n private checkPreload(): void {\n const preload = this.resourceProxy.ad.ima.preloadContentAtEndOfPreRoll === true;\n const lastAd = this.adDataProxy.adInfo.adPosition === this.adDataProxy.breakInfo.adTotal;\n const sys = this.facade.retrieveService(ServiceName.System);\n\n if (preload && lastAd && !sys.isIos) {\n const handler = (event: EventInterface) => {\n const ad = event.data;\n const threshold = Util.clampValue(Math.ceil(ad.duration / 4), 2, 10);\n const time = Math.round(ad.currentTime);\n if (time >= threshold) {\n this.adPlayer.off(ImaAdPlayer.event.AD_PROGRESS, handler);\n this.load().catch(this.onLoadError);\n }\n };\n this.adPlayer.on(ImaAdPlayer.event.AD_PROGRESS, handler);\n }\n }\n\n private respondToAdComplete(): void {\n this.adDataProxy.resetAd();\n }\n\n private respondToAdLoaded(data: AdItemInterface): void {\n this.adDataProxy.adInfo = data;\n }\n\n private respondToAdProgress(data: AdProgressInterface) {\n this.notify(NotificationName.AD_TIME_UPDATE, {\n currentTime: data.currentTime,\n duration: data.duration\n });\n }\n\n private respondToAdBreakComplete(): void {\n this.domProxy && this.domProxy.showAdContainer(false);\n this.presoModel.isCurrentVideoAd = false;\n this.notify(NotificationName.AD_BREAK_COMPLETE);\n }\n\n ////////////////\n // init and util \n\n private get adService(): ImaAdServiceInterface {\n return this.facade.retrieveService(ServiceName.ImaAd);\n }\n\n private assembleAdContextInfo(muted: boolean): AdPlaybackContextInterface {\n const sys = this.facade.retrieveService(ServiceName.System);\n\n return {\n buildEnv: buildInfo.env,\n platform: sys.platform,\n mutedPlayback: muted\n };\n }\n\n private listenToAdPlayer(flag: boolean): void {\n if (!this.adPlayer) { return; }\n const iae: ImaAdPlayerEventInterface = ImaAdPlayer.event,\n m = flag ? 'on' : 'off';\n\n for (const q in iae) {\n this.adPlayer[m](iae[q], flag ? (e: EventInterface) => this.hAdPlayerEvent(e) : null);\n }\n }\n\n private createAdPlayer(): void {\n const resource: ResourceConfigurationInterface = (this.facade.retrieveProxy(ProxyName.ResourceProxy)).resource,\n muteAtStart: boolean = this.presoModel.isMuteAtPlayStart && !this.presoModel.userHasUnmuted,\n options: ImaAdPlayerOptions = {\n presentationContainer: this.domProxy.getMain(),\n playheadInterface: this.domProxy.getVideo(),\n initialPlayState: {\n autoplay: this.presoModel.isAutoplay,\n muted: muteAtStart\n },\n playAdsAfterTime: this.breaksToSkip && this.breaksToSkip.match(/^1/) !== null ? 0 : null,\n adService: this.adService,\n logger: this.logger,\n ad: resource.ad,\n adCallUrl: this.getAdCallUrl(resource, muteAtStart),\n enableStalledAdCheck: resource.ad.ima?.enableStalledAdCheck !== false,\n stallThreshold: resource.ad.ima?.stalledAdThreshold || 5\n };\n\n this.adPlayer = new ImaAdPlayer(options);\n\n if (this.breaksToSkip) {\n const posArr = this.breaksToSkip.split(',').map((x: string): number => parseInt(x)),\n ids: string[] = [];\n\n let i = posArr.length;\n while (i--) {\n const v = posArr[i],\n vPrime = v === 1 ? 'pre_0' : 'mid_' + String(v - 1);\n ids.push(vPrime);\n }\n\n this.adPlayer.markAsPlayed(ids);\n }\n\n this.listenToAdPlayer(true);\n }\n\n private getAdCallUrl(resource: ResourceConfigurationInterface, muteAtStart: boolean): string {\n const acu = resource.ad.ima?.adCallUrl;\n const hasGamUrl = !Util.isEmpty(acu);\n const fwu = resource.ad.csai?.adCallUrl;\n const hasFwUrl = !Util.isEmpty(fwu);\n const ca = new ImaAdCallAssembler();\n\n if (hasGamUrl) {\n let u = muteAtStart ? ca.substituteStringForMutedPlayback(acu) : acu;\n return u;\n }\n else {\n if (hasFwUrl) {\n const sys = this.facade.retrieveService(ServiceName.System);\n return processAdCallUrlForFw(\n fwu,\n { autoplay: this.presoModel.isAutoplay, muted: muteAtStart },\n !(sys.isDesktop || sys.isMobile),\n this.getVersionInfo()\n );\n }\n else {\n return ca.assembleAdCall(resource, this.assembleAdContextInfo(muteAtStart), this.getVersionInfo());\n }\n }\n }\n\n protected getVersionInfo(): AdRequestVersionInfoInterface {\n const sdkv = this.adService.getSdkVersion();\n const pnv = this.getPlayerVersionInfo();\n\n return {\n imafw_ima_sdkv: sdkv,\n ima_sdkv: sdkv,\n playername_version: pnv,\n imafw_playername_version: pnv,\n };\n }\n\n private killAdPlayer(): void {\n if (this.adPlayer) {\n this.listenToAdPlayer(false);\n this.adPlayer.destroy();\n this.adPlayer = null;\n }\n }\n\n override onRegister() {\n super.onRegister();\n this.domProxy && this.domProxy.showAdContainer(false);\n this.adDataProxy = new AdDataProxy(ProxyName.AdDataProxy, null);\n this.facade.registerProxy(this.adDataProxy);\n }\n}\n","import { Util } from '../core/Util';\nimport { ProxyName } from '../enum/ProxyName';\nimport { QualityMode } from '../enum/QualityMode';\nimport { AudioTrackInterface } from '../iface/AudioTrackInterface';\nimport { AudioTracksInterface } from '../iface/AudioTracksInterface';\nimport { QualityInfoInterface } from '../iface/QualityInfoInterface';\nimport { QualityInterface } from '../iface/QualityInterface';\nimport { TextTrackInterface } from '../iface/TextTrackInterface';\nimport { TextTracksInterface } from '../iface/TextTracksInterface';\nimport { ThumbnailCueInterface } from '../iface/ThumbnailCueInterface';\nimport { Proxy } from '../mvc/Proxy';\nimport { ThumbnailTrackSurface } from '../playback/surface/ThumbnailTrackSurface';\nimport { Utils } from '../util/Utils';\nimport { ModelCollectionProxy } from './ModelCollectionProxy';\nimport { ContentPlaybackState } from './vo/ContentPlaybackState';\n\n\nexport class ContentPlaybackStateProxy extends Proxy {\n\n isReady: boolean = false;\n contentPlaybackState!: ContentPlaybackState;\n thumbnailTrack: ThumbnailTrackSurface;\n\n private pTextTracks: Record;\n private pUserQualityCategory: string | null = null;\n\n constructor(name: string, data?: any) {\n super(name, data);\n }\n\n override onRegister(): void {\n\n super.onRegister();\n\n const mcp = this.facade.retrieveProxy(ProxyName.ModelCollectionProxy);\n this.contentPlaybackState = mcp.getModel(ContentPlaybackState.modelName);\n\n this.contentPlaybackState.qualityInfo = {\n mode: QualityMode.AUTO,\n quality: null,\n qualities: []\n };\n\n this.contentPlaybackState.textTracks = {\n track: null,\n tracks: []\n };\n\n this.contentPlaybackState.audioTracks = {\n track: null,\n tracks: []\n };\n\n this.pTextTracks = {};\n\n this.isReady = true;\n }\n\n override onRemove(): void {\n this.contentPlaybackState = null;\n this.pTextTracks = null;\n this.thumbnailTrack = null;\n super.onRemove();\n }\n\n processQualityProfile(qualities: QualityInterface[]): void {\n this.tagQualities(qualities);\n this.contentPlaybackState.qualityInfo.qualities = qualities;\n }\n\n updateQualityProfile(minIndex: number, maxIndex: number, arr: QualityInterface[]): void {\n // based on capping we will recompile the capped bitrate profile each time min or max changes, user or capped player size based. \n const profile = arr.slice(minIndex, maxIndex + 1);\n this.processQualityProfile(profile);\n }\n\n updateAudioTracks(track: AudioTrackInterface, tracks?: AudioTrackInterface[]) {\n const info = this.contentPlaybackState.audioTracks;\n info.track = track;\n\n if (tracks) {\n info.tracks = tracks;\n }\n }\n\n addTextTrack(track: TextTrackInterface) {\n this.contentPlaybackState.textTracks.tracks.push(track);\n this.pTextTracks[track.id] = track;\n }\n\n getTextTrackId(track: TextTrack): string {\n const id = Util.entries(this.pTextTracks)\n .filter(entry => entry[1] == track)\n .map(entry => entry[0]);\n\n return id[0];\n }\n\n getTextTrackById(id: string): TextTrackInterface {\n return this.pTextTracks[id];\n }\n\n tagQualities(qia: QualityInterface[]): void {\n qia.forEach(q => {\n if (!q.category) {\n q.category = [\n `${String(Utils.getQualityCategoryForVideoHeight(q.height))}`,\n `${q.height}p`,\n `${Math.round(q.bitrate / 1000)} kbps`,\n ];\n }\n });\n }\n\n getThumbnail(time: number): ThumbnailCueInterface {\n return this.thumbnailTrack?.getCueAt(time);\n }\n\n get textTrackInfo(): TextTracksInterface {\n return this.contentPlaybackState.textTracks;\n }\n\n set textTrack(value: TextTrackInterface) {\n this.contentPlaybackState.textTracks.track = value;\n }\n\n get textTrack(): TextTrackInterface {\n return this.contentPlaybackState.textTracks.track;\n }\n\n get isAbrSwitchingAvailable(): boolean {\n return this.manifestQualities ? this.manifestQualities.length > 1 : false;\n }\n\n set userQualityCategory(q: string) {\n this.pUserQualityCategory = q;\n }\n get userQualityCategory() {\n return this.pUserQualityCategory;\n }\n\n set qualitySwitchingMode(mode: QualityMode) {\n this.contentPlaybackState.qualityInfo.mode = mode;\n }\n get qualitySwitchingMode(): QualityMode {\n return this.contentPlaybackState.qualityInfo.mode;\n }\n\n set manifestQualities(value: QualityInterface[]) {\n this.contentPlaybackState.manifestQualities = value;\n }\n get manifestQualities(): QualityInterface[] {\n return this.contentPlaybackState.manifestQualities;\n }\n\n set maxBandwidth(value: number) {\n this.contentPlaybackState.maxBandwidth = isNaN(this.contentPlaybackState.maxBandwidth)\n ? value : Math.max(value, this.contentPlaybackState.maxBandwidth);\n }\n\n get model(): ContentPlaybackState {\n return this.contentPlaybackState;\n }\n\n get minIndex(): number {\n return 0;\n }\n\n get maxIndex(): number {\n const qualities = this.contentPlaybackState.qualityInfo.qualities;\n return (qualities) ? this.contentPlaybackState.qualityInfo.qualities.length - 1 : 0;\n }\n\n get minBitrate(): number {\n return this.contentPlaybackState.qualityInfo.qualities[this.minIndex].bitrate;\n }\n\n get maxBitrate(): number {\n return this.contentPlaybackState.qualityInfo.qualities[this.maxIndex].bitrate;\n }\n\n get qualityInfo(): QualityInfoInterface {\n return this.contentPlaybackState.qualityInfo;\n }\n\n set quality(value: QualityInterface) {\n this.contentPlaybackState.qualityInfo.quality = value;\n }\n}\n","import { Util } from '../core/Util';\nimport { ResourceAdInterface } from '../iface/ResourceAdInterface';\nimport { ResourceAdViewabilityTrackingInterface } from '../iface/ResourceAdViewabilityTrackingInterface';\nimport { ResourceConfigurationInterface } from '../iface/ResourceConfigurationInterface';\nimport { ResourceLocationInterface } from '../iface/ResourceLocationInterface';\nimport { ResourcePlaybackInterface } from '../iface/ResourcePlaybackInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { Proxy } from '../mvc/Proxy';\n\n\nexport class ResourceProxy extends Proxy {\n\n private pResource!: ResourceConfigurationInterface;\n\n constructor(name: string, data?: any) {\n super(name, data);\n }\n\n //TODO: can we annotate to be removed during compilation? Or use Object.assign?\n mock(r: ResourceConfigurationInterface): void {\n this.pResource = r;\n }\n\n override onRemove() {\n this.pResource = null;\n super.onRemove();\n }\n\n override onRegister(): void {\n super.onRegister();\n this.pResource = this.data;\n }\n\n get resource(): ResourceConfigurationInterface {\n return this.pResource;\n }\n\n get location(): ResourceLocationInterface {\n return this.pResource.location;\n }\n\n get playback(): ResourcePlaybackInterface {\n return this.pResource.playback;\n }\n\n get metadata(): StrAnyDict {\n return this.pResource.metadata;\n }\n\n get ad(): ResourceAdInterface {\n return this.pResource.ad;\n }\n\n get adTrackingSettings(): ResourceAdViewabilityTrackingInterface {\n return this.pResource.ad.viewabilityTracking;\n }\n\n get hasValidMediaUrl(): boolean {\n return !Util.isEmpty(this.location.mediaUrl);\n }\n}\n","import { HookType } from '..';\nimport { delegateApi, delegateMethod } from '../app/ApiDecorators';\nimport { AppResources } from '../app/AppResources';\nimport { Util } from '../core/Util';\nimport { AdBreakType } from '../enum/AdBreakType';\nimport { NotificationName } from '../enum/NotificationName';\nimport { PlaybackState } from '../enum/PlaybackState';\nimport { ProxyName } from '../enum/ProxyName';\nimport { ServiceName } from '../enum/ServiceName';\nimport { StreamType } from '../enum/StreamType';\nimport { NotificationInterface, PresentationMediatorInterface, SystemServiceInterface } from '../iface';\nimport { AdAdapterDelegateInterface } from '../iface/AdAdapterDelegateInterface';\nimport { AdAdapterInterface } from '../iface/AdAdapterInterface';\nimport { AdBreakScheduleItemInterface } from '../iface/AdBreakScheduleItemInterface';\nimport { AdCuePointInterface } from '../iface/AdCuePointInterface';\nimport { AdItemInterface } from '../iface/AdItemInterface';\nimport { ContentPlaybackStateInterface } from '../iface/ContentPlaybackStateInterface';\nimport { ErrorInfoInterface } from '../iface/ErrorInfoInterface';\nimport { HookProxy } from '../model/HookProxy';\nimport { CommonPresentationMediator } from './CommonPresentationMediator';\n\n\nexport class AdPresentationMediator extends CommonPresentationMediator implements PresentationMediatorInterface, AdAdapterDelegateInterface {\n\n private pAdAdapter: AdAdapterInterface = null;\n private adAdapterStarted: boolean = false;\n private contentSegmentStarted: boolean = false;\n private contentStartReleased: boolean = false;\n private contentCompleteReleased: boolean = false;\n private fatalContentErrorReceived: boolean = false;\n private presoComplete: boolean = false;\n private hasMidRolls: boolean = false;\n private pendingSeekTime: number = null;\n private currentAd: AdItemInterface = null;\n private currentBreak: AdBreakScheduleItemInterface = null;\n private breakSchedule: AdBreakScheduleItemInterface[];\n\n constructor(name: string, viewControl?: any) {\n super(name, viewControl);\n this.preloadContent = false;\n }\n\n set adAdapter(adapter: AdAdapterInterface) {\n this.pAdAdapter = adapter;\n }\n\n get adAdapter(): AdAdapterInterface {\n return this.pAdAdapter;\n }\n\n get adInProgress(): boolean {\n return this.presoModel.isCurrentVideoAd;\n }\n\n override onRemove(): void {\n this.pAdAdapter?.destroy?.();\n this.pAdAdapter = null;\n\n super.onRemove();\n }\n\n override closeAds(): void {\n this.domProxy?.showAdContainer(false);\n this.adAdapter?.destroy();\n this.pAdAdapter = null;\n }\n\n override beforePlayOnUserGesture() {\n this.adAdapter?.playClicked();\n }\n\n override start(): void {\n const contentStartTime = this.resourceProxy.playback.startTime;\n const showPreRoll = this.resourceProxy.ad.showPrerollOnNonZeroStart;\n const nonZeroStart = !isNaN(contentStartTime) && contentStartTime > 0;\n\n super.start();\n\n this.mute(this.presoModel.isMuted);\n\n if (nonZeroStart && showPreRoll) {\n this.pendingSeekTime = contentStartTime;\n }\n\n if (this.isClickToPlay) {\n this.setForClickToPlay();\n }\n else {\n const r = this.resourceProxy.resource;\n if (r.ad?.csai?.adCallUrl && !r.location?.mediaUrl) {\n this.play();\n }\n else {\n this.notify(NotificationName.VIDEO_LOAD_START);\n this.prepareForPlayback();\n }\n }\n }\n\n /** override */\n override getAdBreakTimes(): AdCuePointInterface[] {\n const aci: AdCuePointInterface[] = [];\n this.breakSchedule.forEach(b => {\n aci.push({\n start: b.startTime,\n streamTimeStart: b.streamStartTime,\n end: b.endTime,\n streamTimeEnd: b.streamStartTime + b.duration,\n played: b.hasPlayed,\n ...b\n });\n });\n\n return aci;\n }\n\n getDelegate(): AdAdapterDelegateInterface {\n const obj = delegateApi({}, this);\n\n return obj;\n }\n\n override play(): void {\n if (!this.presoModel.started) {\n this.presoModel.started = true;\n this.adAdapterStarted = true;\n\n this.adAdapter.start();\n }\n else {\n if (this.adInProgress) {\n if (this.adAdapter?.resume) {\n this.adAdapter.resume();\n }\n else {\n this.playVideo();\n }\n\n return;\n }\n this.playVideo();\n }\n }\n\n override pause() {\n if (this.adInProgress) {\n if (this.adAdapter?.pause) {\n this.adAdapter.pause();\n }\n else {\n this.pauseVideo();\n }\n\n return;\n }\n this.pauseVideo();\n }\n\n // override\n override async mute(flag: boolean) {\n this.adAdapter?.setMuteState(flag);\n super.mute(flag);\n }\n\n override setVolume(value: number) {\n this.adAdapter?.setVolume(value);\n super.setVolume(value);\n }\n\n // override\n override seek(position: number): void {\n let seekTime = position;\n\n if (this.hasMidRolls && this.adAdapter) {\n const t = this.adAdapter.getPermittedSeekTime(position);\n if (t != position) {\n this.pendingSeekTime = this.adAdapter.streamTimeForContentTime?.(position) || t;\n seekTime = t;\n this.notify(NotificationName.SEEK_REDIRECT_START, {\n requestedSeekTime: position,\n actualSeekTime: t\n });\n }\n }\n\n this.seekVideo(seekTime);\n }\n\n skipAd() {\n this.adAdapter?.skipAd();\n }\n ///////////////////////////////////////////////////////////\n // Delegate interface\n ///////////////////////////////////////////////////////////\n\n @delegateMethod()\n pauseContent() {\n this.pauseVideo();\n this.domProxy?.showAdContainer(true);\n }\n\n @delegateMethod()\n resumeContent() {\n this.currentAd = null;\n this.currentBreak = null;\n this.domProxy?.showAdClickElement(false);\n this.domProxy?.showAdContainer(false);\n\n if (this.fatalContentErrorReceived) {\n this.notify(NotificationName.DISABLE_UI);\n return;\n }\n\n if (!this.hasContent || this.contentComplete) {\n super.respondToVideoEnd();\n return;\n }\n\n if (!this.contentSegmentStarted) {\n if (!this.contentStartReleased) {\n const contentStartTime = this.resourceProxy.playback.startTime,\n nonZeroStart = !isNaN(contentStartTime) && contentStartTime > 0;\n\n if (nonZeroStart) {\n const breaks = this.getAdBreakTimes();\n const adjustedStart = this.adjustStartTimeForAdBreakProximity(contentStartTime, breaks);\n\n this.resourceProxy.playback.startTime = adjustedStart;\n }\n }\n\n this.load()\n .then(() => {\n this.resumeContentPlayComplete();\n })\n .catch(this.onLoadError);\n\n return;\n }\n\n this.resumeContentPlayComplete();\n }\n\n @delegateMethod()\n streamIdAvailable(id: string): void {\n this.notify(NotificationName.STREAM_ID_AVAILABLE, { streamId: id });\n }\n\n\n @delegateMethod()\n applyHook(type: HookType, data: T): Promise {\n return new Promise((resolve) => {\n const hp = this.getProxy(ProxyName.HookProxy);\n hp.applyHook(type, data).then(d => resolve(d));\n });\n }\n\n @delegateMethod()\n adSegmentStarted() {\n this.contentSegmentStarted = false;\n this.presoModel.isCurrentVideoAd = true;\n this.notify(NotificationName.AD_SEGMENT_START);\n }\n\n @delegateMethod()\n adSegmentEnded() {\n this.contentSegmentStarted = false;\n if (this.presoModel) {\n this.presoModel.isCurrentVideoAd = false;\n }\n this.notify(NotificationName.AD_SEGMENT_END);\n }\n\n @delegateMethod()\n adBreaksAvailable(adBreaks: AdBreakScheduleItemInterface[]): void {\n this.hasMidRolls = adBreaks.some(b => b.type === AdBreakType.MID);\n this.breakSchedule = adBreaks;\n // TODO account for API method getAdBreakTimes();\n const times = adBreaks.map(b => b.startTime);\n this.notify(NotificationName.AD_CUEPOINTS_AVAILABLE, { cuepoints: times });\n }\n\n @delegateMethod()\n seekToStreamTime(t: number) {\n this.seekVideo(t);\n }\n\n @delegateMethod()\n adBreakStart(): void {\n this.endContentSegment();\n this.updateSize();\n this.domProxy?.showAdContainer(true);\n this.presoModel.isCurrentVideoAd = true;\n\n this.setAdPlaying();\n this.notify(NotificationName.AD_BREAK_START);\n }\n\n @delegateMethod()\n adBreakMetadata(breakInfo: AdBreakScheduleItemInterface): void {\n this.currentBreak = breakInfo;\n this.notify(NotificationName.AD_BREAK_METADATA, { adBreakInfo: breakInfo });\n }\n\n @delegateMethod()\n adLoaded(): void {\n // no impl\n }\n\n @delegateMethod()\n adStart(adData: AdItemInterface): void {\n this.currentAd = adData;\n this.notify(NotificationName.AD_START, { adInfo: adData });\n }\n\n @delegateMethod()\n adProgress(currentTime: number, duration: number): void {\n this.notify(NotificationName.AD_TIME_UPDATE, {\n currentTime: currentTime,\n duration: duration,\n streamTime: this.presoModel.streamTime,\n streamDuration: this.presoModel.streamDuration\n });\n this.checkPreload(currentTime, duration);\n }\n\n @delegateMethod()\n adFirstQuartile(): void {\n this.notify(NotificationName.AD_FIRST_QUARTILE);\n }\n\n @delegateMethod()\n adMidpoint(): void {\n this.notify(NotificationName.AD_MIDPOINT);\n }\n\n @delegateMethod()\n adThirdQuartile(): void {\n this.notify(NotificationName.AD_THIRD_QUARTILE);\n }\n\n @delegateMethod()\n adComplete(): void {\n this.currentAd = null;\n this.notify(NotificationName.AD_COMPLETE);\n }\n\n @delegateMethod()\n adBreakComplete(): void {\n this.currentBreak = null;\n this.currentAd = null;\n this.domProxy?.showAdContainer(false);\n this.domProxy?.showAdClickElement(false);\n this.presoModel.isCurrentVideoAd = false;\n this.notify(NotificationName.AD_BREAK_COMPLETE);\n\n if (this.pendingSeekTime) {\n const t = this.pendingSeekTime;\n this.pendingSeekTime = null;\n this.contentPlaybackStateProxy.model.started && this.notify(NotificationName.SEEK_REDIRECT_COMPLETE);\n this.seekVideo(t);\n }\n }\n\n @delegateMethod()\n adClicked(): void {\n const cp = this.contentPlaybackStateProxy?.model?.state;\n if (cp === PlaybackState.PLAYING) {\n this.pause();\n }\n }\n\n @delegateMethod()\n adError(info: ErrorInfoInterface): void {\n this.currentAd = null;\n if (!info.message) {\n info.message = AppResources.messages.UNSPECIFIED_ERROR;\n }\n this.notify(NotificationName.AD_ERROR, info);\n }\n\n @delegateMethod()\n adPaused(): void {\n this.respondToPlaybackStateChange(PlaybackState.PAUSED);\n this.notify(NotificationName.AD_PAUSED);\n }\n\n @delegateMethod()\n adResumed(): void {\n this.notify(NotificationName.AD_BUFFERING, { value: false });\n this.notify(NotificationName.AD_PLAYING);\n }\n\n @delegateMethod()\n adStalled(): void {\n this.notify(NotificationName.AD_STALLED);\n }\n\n @delegateMethod()\n adBreakDiscarded(): void {\n this.notify(NotificationName.AD_BREAK_DISCARDED);\n }\n\n @delegateMethod()\n adSkipped(): void {\n this.notify(NotificationName.AD_SKIPPED);\n }\n\n @delegateMethod()\n allAdsComplete(): void {\n this.hasMidRolls = false;\n }\n\n @delegateMethod()\n adBuffering(state: boolean): void {\n // TODO\n }\n\n @delegateMethod()\n displayAdClickElement(): void {\n this.domProxy?.showAdClickElement(true);\n }\n\n ///////////////////////////////////////////////////////////\n // END Delegate interface\n ///////////////////////////////////////////////////////////\n\n\n private resumeContentPlayComplete() {\n if (this.pendingSeekTime) {\n this.notify(NotificationName.SEEK_REDIRECT_COMPLETE);\n this.seekVideo(this.pendingSeekTime);\n this.pendingSeekTime = null;\n }\n\n this.play();\n }\n\n ///////////////////////////////////////////////////////////\n // Respond to playback commands and adapter events\n // + calls to adapter\n override handleNotification(notification: NotificationInterface): void {\n const n = notification.name;\n\n switch (n) {\n case NotificationName.FULLSCREEN_EXIT:\n case NotificationName.FULLSCREEN_ENTER:\n this.adAdapter.setFullscreenState(n == NotificationName.FULLSCREEN_ENTER);\n break;\n }\n\n super.handleNotification(notification);\n }\n\n protected updateSize() {\n const dimensions = this.domProxy?.getPresentationRect();\n if (dimensions) {\n this.adAdapter.updateSize(dimensions);\n }\n }\n\n protected override respondToSizeChange(): void {\n this.updateSize();\n }\n\n protected override respondToId3Data(d: any): void {\n if (d.info) {\n d.msg = d.info;\n }\n this.adAdapter.handleTimedMetadata(d);\n super.respondToId3Data(d);\n }\n\n protected override respondToVideoPaused(): void {\n super.respondToVideoPaused();\n\n if (this.adInProgress) {\n this.notify(NotificationName.AD_PAUSED);\n }\n else {\n this.respondToPlaybackStateChange(PlaybackState.PAUSED);\n this.setPausedState();\n this.notify(NotificationName.CONTENT_PAUSED);\n }\n }\n\n protected override respondToVideoPlaying(): void {\n super.respondToVideoPlaying();\n if (!this.adAdapterStarted) {\n this.adAdapterStarted = true;\n this.adAdapter.start();\n }\n\n const t = this.contentPlaybackStateProxy.model.time;\n\n if (t > 0.5) {\n if (this.adInProgress) {\n this.notify(NotificationName.AD_PLAYING);\n }\n else if (this.contentSegmentStarted) {\n this.respondToPlaybackStateChange(PlaybackState.PLAYING);\n this.setPlayingState();\n this.notify(NotificationName.CONTENT_PLAYING);\n }\n }\n }\n\n // Call plugin.setStreamTime()\n protected override respondToVideoTimeUpdate(streamTime: number): void {\n const cps: ContentPlaybackStateInterface = this.contentPlaybackStateProxy.model;\n\n this.presoModel.streamTime = streamTime;\n this.adAdapter?.setStreamTime(streamTime);\n\n cps.time = this.adAdapter?.contentTimeForStreamTime ? this.adAdapter?.contentTimeForStreamTime(streamTime) : streamTime;\n\n if (this.adInProgress) {\n return;\n }\n\n if (streamTime > 0.75 && !this.contentSegmentStarted) {\n cps.started = true;\n this.domProxy?.showAdClickElement(false);\n this.domProxy?.showAdContainer(false);\n this.setPlayingState();\n this.setTransportType();\n !this.contentStartReleased && this.signalContentStart();\n this.contentSegmentStarted = true;\n\n if (this.hasMidRolls || cps.streamType == StreamType.LIVE || cps.streamType == StreamType.DVR) {\n this.notify(NotificationName.CONTENT_SEGMENT_START);\n }\n else {\n this.notify(NotificationName.CONTENT_PLAYING);\n }\n }\n\n if (this.contentSegmentStarted) {\n super.respondToVideoTimeUpdate(streamTime);\n }\n\n if (cps.streamType !== StreamType.LIVE && (cps.time >= cps.duration) && !this.contentCompleteReleased) {\n this.signalContentComplete();\n }\n }\n\n protected endContentSegment() {\n if (this.contentSegmentStarted) {\n this.contentSegmentStarted = false;\n this.notify(NotificationName.CONTENT_SEGMENT_END);\n }\n }\n\n protected override respondToVideoEnd(): void {\n this.contentComplete = true;\n if (!this.contentCompleteReleased) {\n this.signalContentComplete();\n }\n this.presoComplete = true;\n super.respondToVideoEnd();\n }\n\n protected override respondToDurationChange(duration: number): void {\n if (duration && !isNaN(duration) && duration > 0) {\n\n this.adAdapter.setStreamDuration(duration);\n this.presoModel.streamDuration = duration;\n\n const contentDur = this.adAdapter.contentTimeForStreamTime?.(duration) || duration;\n\n this.contentPlaybackStateProxy.model.duration = contentDur;\n\n if (!this.contentDurationReleased) {\n this.releaseContentDuration(duration);\n }\n }\n }\n\n protected override respondToError(data: ErrorInfoInterface) {\n this.fatalContentErrorReceived = data.fatal;\n super.respondToError(data);\n }\n\n protected override isContentComplete() {\n return this.presoComplete;\n }\n\n ///////////\n // PRIVATE\n protected override startContentSegment(): void {\n this.contentSegmentStarted = true;\n this.contentPlaybackStateProxy.model.started = true;\n this.domProxy?.showAdContainer(false);\n this.setPlayingState();\n\n if (!this.contentStartReleased) {\n this.contentStartReleased = true;\n this.notify(NotificationName.CONTENT_START);\n }\n\n super.startContentSegment();\n\n this.notify(NotificationName.CONTENT_SEGMENT_START);\n }\n\n private checkPreload(currentTime: number, duration: number): void {\n const preload = this.resourceProxy.ad.csai.preloadContentAtEndOfPreRoll === true;\n const sys = this.facade.retrieveService(ServiceName.System);\n\n if (!preload) {\n return;\n }\n\n const lastAd = this.currentAd?.adPosition === this.currentBreak?.adTotal;\n\n if (preload && lastAd && !sys.isIos) {\n const threshold = Util.clampValue(Math.ceil(duration / 4), 2, 10);\n const time = Math.round(currentTime);\n if (time >= threshold) {\n this.load().catch(this.onLoadError);\n }\n }\n }\n\n private signalContentStart(): void {\n this.contentStartReleased = true;\n this.notify(NotificationName.CONTENT_START);\n }\n\n private signalContentComplete(): void {\n this.contentCompleteReleased = true;\n if (this.contentSegmentStarted) {\n this.notify(NotificationName.CONTENT_SEGMENT_END);\n }\n this.notify(NotificationName.CONTENT_COMPLETE);\n }\n\n override listNotificationInterests(): string[] {\n return super.listNotificationInterests().concat([\n NotificationName.FULLSCREEN_ENTER,\n NotificationName.FULLSCREEN_EXIT,\n NotificationName.PRESENTATION_SIZE_CHANGE\n ]);\n }\n\n override onRegister() {\n super.onRegister();\n this.domProxy?.showAdContainer(false);\n this.domProxy?.showAdClickElement(false);\n }\n}\n","import { NotificationName } from '../enum/NotificationName';\nimport { PresentationMediatorInterface } from '../iface';\nimport { ContentPlaybackStateInterface } from '../iface/ContentPlaybackStateInterface';\nimport { PresentationStateInterface } from '../iface/PresentationStateInterface';\nimport { CommonPresentationMediator } from './CommonPresentationMediator';\n\n/**\n * ContentPresentationMediator is used for content-only playback\n */\nexport class ContentPresentationMediator extends CommonPresentationMediator implements PresentationMediatorInterface {\n\n constructor(name: string, viewControl?: any) {\n super(name, viewControl);\n }\n\n // start the presentation\n override start(): void {\n const pm: PresentationStateInterface = this.presoModel;\n\n this.uiMediator && this.uiMediator.setMuteState(pm.isMuted);\n\n if (this.isClickToPlay) {\n this.setForClickToPlay();\n }\n else {\n this.notify(NotificationName.VIDEO_LOAD_START);\n }\n }\n\n protected override respondToVideoPlaying(): void {\n const cps: ContentPlaybackStateInterface = this.contentPlaybackStateProxy.model;\n let sendStart = false;\n\n cps.started = true;\n\n if (!this.presoModel.started) {\n this.presoModel.started = true;\n this.started = true;\n\n if (this.uiMediator) {\n this.uiMediator.displayPoster(false);\n this.presoModel.isMuteAtPlayStart && !this.presoModel.userHasUnmuted && this.uiMediator.showUnmutePrompt();\n this.notify(NotificationName.ENABLE_UI);\n this.uiMediator.setFullScreenAccessRestricted(false);\n this.uiMediator.enableFullscreen();\n this.setTransportType();\n }\n\n sendStart = true;\n }\n\n super.respondToVideoPlaying();\n this.setPlayingState();\n\n sendStart && this.notify(NotificationName.CONTENT_START);\n this.notify(NotificationName.CONTENT_PLAYING);\n }\n\n protected override respondToVideoTimeUpdate(streamTime: number) {\n if (this.contentComplete) {\n return;\n }\n const cps: ContentPlaybackStateInterface = this.contentPlaybackStateProxy.model;\n\n if (this.presoModel.started) {\n this.presoModel.streamTime = streamTime;\n cps.time = streamTime;\n\n super.respondToVideoTimeUpdate(streamTime);\n }\n }\n\n protected override respondToVideoPaused(): void {\n super.respondToVideoPaused();\n this.setPausedState();\n\n this.notify(NotificationName.CONTENT_PAUSED);\n }\n\n protected override respondToIsPlayingLiveChange(isLive: boolean): void {\n this.uiMediator && this.uiMediator.setIsPlayingLive(isLive);\n super.respondToIsPlayingLiveChange(isLive);\n }\n\n protected override respondToVideoEnd(): void {\n this.contentComplete = true;\n this.notify(NotificationName.CONTENT_COMPLETE);\n super.respondToVideoEnd();\n }\n\n protected override respondToDurationChange(duration: number): void {\n this.presoModel.streamDuration = duration;\n this.contentPlaybackStateProxy.model.duration = duration;\n\n if (!this.contentDurationReleased) {\n this.releaseContentDuration(duration);\n }\n }\n\n override onRegister() {\n super.onRegister();\n this.domProxy && this.domProxy.showAdContainer(false);\n\n !this.isClickToPlay && this.prepareForPlayback();\n }\n}\n","import { AppResources } from '../app/AppResources';\nimport { Util } from '../core/Util';\nimport { DaiProxyApi } from '../deprecated/ad/dai-api/DaiProxyApi';\nimport { DaiAdService } from '../deprecated/ad/DaiAdService';\nimport { DaiPresentationMediator } from '../deprecated/ad/DaiPresentationMediator';\nimport { ImaAdServiceInterface } from '../deprecated/ad/iface';\nimport { ImaAdService } from '../deprecated/ad/ImaAdService';\nimport { ImaPresentationMediator } from '../deprecated/ad/ImaPresentationMediator';\nimport { AdapterRole } from '../enum/AdapterRole';\nimport { AdContext } from '../enum/AdContext';\nimport { Autoplay } from '../enum/Autoplay';\nimport { ErrorCode } from '../enum/ErrorCode';\nimport { MediatorName } from '../enum/MediatorName';\nimport { ModelName } from '../enum/ModelName';\nimport { NotificationName } from '../enum/NotificationName';\nimport { NotificationType } from '../enum/NotificationType';\nimport { PlayerDom } from '../enum/PlayerDom';\nimport { ProxyName } from '../enum/ProxyName';\nimport { ServiceName } from '../enum/ServiceName';\nimport { NotificationInterface, PlayerDomProxyInterface, PresentationMediatorInterface, ServiceInterface, SystemServiceInterface } from '../iface';\nimport { AdAdapterDelegateInterface } from '../iface/AdAdapterDelegateInterface';\nimport { AdAdapterInterface } from '../iface/AdAdapterInterface';\nimport { AutoplayInfoInterface } from '../iface/AutoplayInfoInterface';\nimport { PlayerOptionsInterface } from '../iface/PlayerOptionsInterface';\nimport { PresentationStateInterface } from '../iface/PresentationStateInterface';\nimport { ResourceAdInterface } from '../iface/ResourceAdInterface';\nimport { ResourceConfigurationInterface } from '../iface/ResourceConfigurationInterface';\nimport { AdapterProxy } from '../model/AdapterProxy';\nimport { ContentPlaybackStateProxy } from '../model/ContentPlaybackStateProxy';\nimport { PlayerDomProxy } from '../model/PlayerDomProxy';\nimport { ResourceProxy } from '../model/ResourceProxy';\nimport { AutoplayCapabilitiesService } from '../service/AutoplayCapabilitiesService';\nimport { AdPresentationMediator } from '../view/AdPresentationMediator';\nimport { ContentPresentationMediator } from '../view/ContentPresentationMediator';\nimport { LogAwareSimpleCommand } from './LogAwareSimpleCommand';\n\n\nexport class PrepPlaybackCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface) {\n const sysSvc = this.facade.retrieveService(ServiceName.System);\n const resource = notification.body as ResourceConfigurationInterface;\n\n if (!sysSvc.global || !sysSvc.global.document) {\n this.sendNotification(NotificationName.VIDEO_START_ERROR, { error: AppResources.messages.ENVIRONMENT_NOT_SUPPORTED, fatal: true });\n\n return;\n }\n\n const presoState = this.getModel(ModelName.PresentationState);\n const playerOpts = this.getModel(ModelName.PlayerOptions);\n const useAutoplay = this.isAutoplayRequested(playerOpts.autoplay);\n\n this.facade.registerProxy(new ContentPlaybackStateProxy(ProxyName.ContentPlaybackStateProxy));\n\n if (sysSvc.isWebMaf || sysSvc.isTizenSmartTv || sysSvc.isXboxOne) {\n this.processAutoplaySupport({\n supportsMutedAutoplay: true,\n supportsUnmutedAutoplay: true\n }, presoState, playerOpts);\n\n this.createPresentation(sysSvc, resource, presoState, playerOpts);\n }\n else if (!presoState.skipAutoplayCheck && useAutoplay) {\n this.checkAutoplay(playerOpts).then((result: AutoplayInfoInterface) => {\n this.processAutoplaySupport(result, presoState, playerOpts);\n this.createPresentation(sysSvc, resource, presoState, playerOpts);\n });\n }\n else {\n this.createPresentation(sysSvc, resource, presoState, playerOpts);\n }\n }\n\n private async createPresentation(sysSvc: SystemServiceInterface, resource: ResourceConfigurationInterface, presentationState: PresentationStateInterface, playerOpts: PlayerOptionsInterface) {\n const presoMed = await this.getPresoMediator(sysSvc, resource, presentationState, playerOpts);\n\n if (!presoMed) {\n return;\n }\n\n this.facade.registerMediator(presoMed);\n\n this.sendNotification(NotificationName.START_PRESENTATION);\n }\n\n private async getPresoMediator(sysSvc: SystemServiceInterface, resource: ResourceConfigurationInterface, presentationState: PresentationStateInterface, playerOpts: PlayerOptionsInterface): Promise {\n const domProxy = this.facade.retrieveProxy(ProxyName.PlayerDomProxy);\n const video = this.getVideo(sysSvc, domProxy, playerOpts);\n const adCfg = resource.ad;\n const adContext: string | null = (adCfg && adCfg.context) || null;\n const n = MediatorName.PRESENTATION_MEDIATOR;\n\n let ret: PresentationMediatorInterface = null,\n ok: boolean;\n\n if (video === null) {\n this.sendNotification(NotificationName.RESOURCE_ERROR, {\n code: ErrorCode.UNEXPECTED_CONDITION,\n message: AppResources.messages.VIDEO_PLAYBACK_UNAVAILABLE,\n fatal: true,\n });\n\n return ret;\n }\n\n if (adContext && adContext !== AdContext.NONE || presentationState.isAutoplay) {\n // VTG-2214: Only required for iOS; attribute ignored elsewhere\n domProxy?.setVideoAttribute('playsinline', '');\n }\n\n switch (adContext) {\n case AdContext.IMA:\n case AdContext.IMA_AD_ONLY:\n ok = this.createImaAdService(resource);\n if (!ok) {\n this.sendNotification(NotificationName.RESOURCE_ERROR, {\n code: ErrorCode.IMA_SDK_MISSING,\n message: AppResources.messages.IMA_SDK_MISSING,\n fatal: true,\n });\n }\n else {\n ret = new ImaPresentationMediator(n, video);\n }\n break;\n\n case AdContext.DAI_SDK:\n case AdContext.DAI_API:\n const useApi = adContext === AdContext.DAI_API;\n ok = this.createDaiAdService(domProxy, resource, useApi, sysSvc);\n ok && (ret = new DaiPresentationMediator(n, video));\n !ok && this.sendNotification(NotificationName.RESOURCE_ERROR, {\n code: ErrorCode.DAI_SDK_MISSING,\n message: AppResources.messages.DAI_SDK_UNAVAILABLE,\n fatal: true,\n });\n break;\n\n case AdContext.DAI_SSB:\n if (adCfg.dai.ssbStreamUrl) {\n // for now- until we decide whether mediaUrl will act as fallback stream \n resource.location.mediaUrl = adCfg.dai.ssbStreamUrl;\n }\n ret = new ContentPresentationMediator(n, video);\n break;\n\n default:\n if (adCfg.enabled === true) {\n try {\n const ad = new AdPresentationMediator(n, video);\n const delegate = ad.getDelegate();\n const adapterProxy = this.facade.retrieveProxy(ProxyName.AdapterProxy) as AdapterProxy;\n const adapter = await adapterProxy.createAdapter(AdapterRole.AD, resource, () => delegate);\n ad.adAdapter = adapter;\n\n const resourceOverride = await adapter.getResource?.();\n\n if (resourceOverride) {\n resource = resourceOverride;\n }\n ret = ad;\n }\n catch (error) {\n this.sendNotification(NotificationName.RESOURCE_ERROR, {\n code: ErrorCode.AD_ADAPTER_ERROR,\n message: error.message,\n data: error,\n fatal: true,\n });\n }\n }\n else {\n ret = new ContentPresentationMediator(n, video);\n }\n break;\n }\n\n this.createResourceProxy(resource);\n\n return ret;\n }\n\n private createResourceProxy(resource: ResourceConfigurationInterface): void {\n const resourceProxy = new ResourceProxy(ProxyName.ResourceProxy, resource);\n this.facade.registerProxy(resourceProxy);\n }\n\n ////////////////\n // Ad services\n private createDaiAdService(\n domProxy: PlayerDomProxyInterface,\n resource: ResourceConfigurationInterface,\n useApi: boolean,\n sysSvc: SystemServiceInterface\n ): boolean {\n\n if (this.facade.retrieveService(ServiceName.DaiAd)) {\n return true;\n }\n\n // issue/83: enable OM\n const playerOpts = this.getModel(ModelName.PlayerOptions);\n if (!useApi && playerOpts.enableOm === true) {\n /** @ts-ignore */\n sysSvc.global?.google?.ima?.dai?.api?.DaiSdkSettings?.setFeatureFlags({ 'enableOmidBeta': true });\n }\n\n const svc = new DaiAdService(ServiceName.DaiAd, (useApi ? DaiProxyApi : null));\n this.facade.registerService(svc);\n\n if (!svc.sdk) {\n svc.destroy();\n this.facade.removeService(ServiceName.DaiAd);\n return false;\n }\n\n const trkSets = resource.ad.viewabilityTracking;\n domProxy && svc.setContainer(domProxy.getElement(PlayerDom.AD_CONTAINER));\n\n const videoIface = useApi ? sysSvc.createSimpleVideoInterface() : domProxy.getVideo();\n svc.setVideoInterface(videoIface);\n\n svc.setTrackingData({\n pageType: trkSets.pageType,\n viewGuid: trkSets.viewGuid,\n partner: trkSets.partner\n });\n\n return true;\n }\n\n getVideoInterface(sysSvc: SystemServiceInterface): any {\n return sysSvc.createSimpleVideoInterface();\n }\n\n getVideo(sysSvc: SystemServiceInterface, domProxy: PlayerDomProxyInterface, playerOpts: PlayerOptionsInterface): any {\n if (sysSvc.isWebMaf) {\n return sysSvc.webMafPlayer;\n }\n else if (domProxy) {\n if (playerOpts.overrides?.reuseVideoElement === false) {\n domProxy.recreateVideo();\n }\n return domProxy.getVideo();\n }\n\n return null;\n }\n\n createImaAdService(resource: ResourceConfigurationInterface): boolean {\n if (this.facade.retrieveService(ServiceName.ImaAd)) {\n return true;\n }\n\n const svc: ImaAdServiceInterface = new ImaAdService(ServiceName.ImaAd);\n this.facade.registerService(svc);\n\n const sdk = svc.sdk;\n\n if (sdk !== null) {\n const domProxy = this.facade.retrieveProxy(ProxyName.PlayerDomProxy);\n const adC = domProxy.getElement(PlayerDom.AD_CONTAINER);\n const playerOpts = this.getModel(ModelName.PlayerOptions);\n\n if (playerOpts.enableOm === true) {\n // Issue #83; enable Open measurement\n (sdk as any).settings?.setFeatureFlags({ 'enableOmidBeta': true });\n }\n\n svc.setContainer(adC);\n svc.adsLoaderOptions = {\n enableOm: playerOpts.enableOm === true,\n adContainer: adC,\n adClickEl: domProxy.getElement(PlayerDom.AD_CLICK_EL),\n video: domProxy.getVideo(),\n sdkSettings: svc.sdkSettings,\n adService: svc,\n };\n\n const trkSets = resource.ad.viewabilityTracking;\n svc.setTrackingData({\n pageType: trkSets.pageType,\n viewGuid: trkSets.viewGuid,\n partner: trkSets.partner\n });\n svc.createAdsLoader();\n\n return true;\n }\n else {\n this.facade.removeService(ServiceName.ImaAd);\n\n return false;\n }\n }\n\n ////////////\n // autoplay\n private processAutoplaySupport(\n result: AutoplayInfoInterface,\n presoMdl: PresentationStateInterface,\n playerOpts: PlayerOptionsInterface\n ): void {\n\n const apOpt = playerOpts.autoplay;\n const mutedOk = result.supportsMutedAutoplay;\n const unmutedOk = result.supportsUnmutedAutoplay;\n\n const wantsMuted = apOpt === Autoplay.ATTEMPT_MUTED || apOpt === Autoplay.ATTEMPT_UNMUTED_THEN_MUTED;\n const wantsUnmuted = apOpt === Autoplay.ATTEMPT_UNMUTED;\n const conflict = (wantsMuted && !mutedOk) || (wantsUnmuted && !unmutedOk);\n if (!presoMdl.isAutoplay && conflict) {\n this.sendNotification(NotificationName.AUTOPLAY_BLOCKED, new Error('Autoplay capability conflict.'), NotificationType.INTERNAL);\n }\n\n presoMdl.autoplaySupport = {\n supportsMutedAutoplay: mutedOk,\n supportsUnmutedAutoplay: unmutedOk\n };\n\n presoMdl.isMuteAtPlayStart = (\n apOpt === Autoplay.ATTEMPT_MUTED && mutedOk ||\n (apOpt === Autoplay.ATTEMPT_UNMUTED_THEN_MUTED && !unmutedOk && mutedOk)\n );\n\n presoMdl.isAutoplay = this.shouldAutoplay(apOpt, result);\n }\n\n private isAutoplayRequested(opt: Autoplay): boolean {\n if (Util.isEmpty(opt) || opt === Autoplay.NONE) {\n return false;\n }\n\n return true;\n }\n\n private shouldAutoplay(opt: Autoplay, info: AutoplayInfoInterface): boolean {\n if (Util.isEmpty(opt) || opt === Autoplay.NONE) {\n return false;\n }\n\n const mutedOk = info.supportsMutedAutoplay;\n const unmutedOk = info.supportsUnmutedAutoplay;\n\n const muteOnly = opt === Autoplay.ATTEMPT_MUTED && mutedOk;\n const soundOnly = opt === Autoplay.ATTEMPT_UNMUTED && unmutedOk;\n const fallback = !soundOnly && (opt === Autoplay.ATTEMPT_UNMUTED_THEN_MUTED && mutedOk);\n\n return muteOnly || soundOnly || fallback;\n }\n\n private checkAutoplay(playerOpts: PlayerOptionsInterface): Promise {\n const ads = this.getService(ServiceName.AutoplayCapabilities);\n\n return ads.detectCapabilities(playerOpts.overrides?.blankVideoUrl);\n }\n}\n","import { AppResources } from '../../app/AppResources';\nimport { ResourceConfiguration } from '../../app/ResourceConfiguration';\nimport { Util } from '../../core/Util';\nimport { AdContext } from '../../enum/AdContext';\nimport { ValidationInterface } from '../../iface';\nimport { ResourceAdInterface } from '../../iface/ResourceAdInterface';\nimport { ResourceConfigurationInterface } from '../../iface/ResourceConfigurationInterface';\n\n\nexport class ResourceValidator {\n\n static validate(r: ResourceConfigurationInterface): ValidationInterface {\n if (Util.isEmpty(r)) {\n return { error: true, msg: AppResources.messages.RESOURCE_MISSING };\n }\n\n const hasRootKeys = this.hasRootKeys(r);\n if (hasRootKeys.error) return hasRootKeys;\n\n const canAccessMedia = this.canAccessMedia(r, r.ad.enabled);\n if (canAccessMedia.error) return canAccessMedia;\n\n return { error: false, msg: '' };\n }\n\n private static hasRootKeys(r: ResourceConfigurationInterface): ValidationInterface {\n const missing: string[] = [];\n const defRsc = new ResourceConfiguration();\n let msg = null;\n\n Object.keys(defRsc).forEach(k => {\n if (!(k in r)) {\n missing.push(k);\n }\n });\n if (missing.length) {\n msg = `One or more configuration properties not found: ${missing.join(', ')}`;\n }\n\n return {\n error: !!msg,\n msg: msg\n };\n }\n\n private static canAccessMedia(r: ResourceConfigurationInterface, usesAdAdapter: boolean): ValidationInterface {\n const hasCms = !Util.isEmpty(r.location.cms),\n hasIdOrUri = !Util.isEmpty(r.location.tokenMap) || !Util.isEmpty(r.location.cmsUri),\n hasMediaUrl = !Util.isEmpty(r.location.mediaUrl) || r.ad.context === AdContext.IMA_AD_ONLY,\n hasSsbMedia = (!r.ad.context && !usesAdAdapter && hasMediaUrl) || r.ad.context === AdContext.DAI_SSB && !Util.isEmpty(r.ad.dai.ssbStreamUrl),\n hasValidAdSettings = this.hasValidDaiSettings(r, usesAdAdapter),\n mediaNotConfigured = !(hasSsbMedia || hasMediaUrl) && !(hasCms && hasIdOrUri),\n msg = hasValidAdSettings.error ? hasValidAdSettings.msg : (mediaNotConfigured ? 'Media not specified' : '');\n\n return {\n error: mediaNotConfigured && hasValidAdSettings.error,\n msg: msg\n };\n }\n\n private static hasValidDaiSettings(r: ResourceConfigurationInterface, usesAdAdapter: boolean): ValidationInterface {\n const adSets: ResourceAdInterface = r.ad;\n const fwCfg = adSets?.ssai;\n const gamCfg = adSets?.dai;\n const context = adSets?.context;\n\n let error: boolean = false, msg = '';\n\n if (!adSets) {\n return { error, msg };\n }\n \n let cfg: any = null;\n let isFw = false;\n\n if (gamCfg?.assetKey || gamCfg?.contentSourceId || (gamCfg.ssbStreamUrl && context == AdContext.DAI_SSB)) {\n cfg = gamCfg;\n }\n else if (fwCfg?.assetKey || fwCfg?.contentSourceId) {\n cfg = fwCfg;\n isFw = true;\n }\n\n // GAM plugin (or other ad plugin) will validate ad config\n if (usesAdAdapter || !context) return { error, msg };\n\n if (context === AdContext.DAI_SDK || context === AdContext.DAI_API) {\n if (!cfg.isLive) {\n error = isFw && Util.isEmpty(cfg.videoId) || !isFw && Util.isEmpty(cfg.daiVideoId) ;\n msg = 'Missing video id';\n }\n else {\n error = Util.isEmpty(cfg.assetKey);\n msg = 'Missing assetKey';\n }\n }\n else if (context === AdContext.DAI_SSB) {\n error = (!isFw && Util.isEmpty(cfg.ssbStreamUrl) && Util.isEmpty(r.location?.mediaUrl)) \n ||\n (isFw && Util.isEmpty(r.location?.mediaUrl));\n\n msg = 'Missing asset url for SSB';\n }\n\n return { error, msg: error ? msg : '' };\n }\n \n}\n","import { AppResources } from '../app/AppResources';\nimport { Util } from '../core/Util';\nimport { ErrorCode } from '../enum/ErrorCode';\nimport { LogLevel } from '../enum/LogLevel';\nimport { NotificationName } from '../enum/NotificationName';\nimport { NotificationType } from '../enum/NotificationType';\nimport { NotificationInterface, ValidationInterface } from '../iface';\nimport { ResourceConfigurationInterface } from '../iface/ResourceConfigurationInterface';\nimport { ResourceValidator } from './command-helpers/ResourceValidator';\nimport { LogAwareSimpleCommand } from './LogAwareSimpleCommand';\nimport { ResourceConfiguration } from '../app/ResourceConfiguration';\n\nexport class PrepResourceCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface) {\n switch (notification.name) {\n case NotificationName.PREP_RESOURCE_COLLECTION:\n this.prepResourceCollection(notification);\n break;\n\n case NotificationName.REGISTER_RESOURCE:\n this.registerResource(notification);\n break;\n }\n }\n\n private prepResourceCollection(notification: NotificationInterface): void {\n if (!notification.body.resource) {\n this.invalidResource(AppResources.messages.RESOURCE_MISSING);\n\n return;\n }\n\n const resource: ResourceConfigurationInterface = new ResourceConfiguration(notification.body.resource);\n\n this.validateResource(resource);\n }\n\n private validateResource(resource: ResourceConfigurationInterface): void {\n const resourceValidation: ValidationInterface = ResourceValidator.validate(resource);\n\n if (!resourceValidation.error) {\n this.facade.sendNotification(\n this.cmsDataRetrievalRequired(resource) ? NotificationName.RETRIEVE_RESOURCE : NotificationName.TRANSFORM_RESOURCE,\n { resource },\n NotificationType.INTERNAL\n );\n }\n else {\n this.invalidResource(resourceValidation.msg);\n }\n }\n\n private registerResource(notification: NotificationInterface): void {\n const resource: ResourceConfigurationInterface = notification.body.resource;\n this.facade.sendNotification(NotificationName.PLAY_RESOURCE, resource, NotificationType.INTERNAL);\n }\n\n private cmsDataRetrievalRequired(r: ResourceConfigurationInterface): boolean {\n return !Util.isEmpty(r.location.cms) &&\n (!Util.isEmpty(r.location.tokenMap) || !Util.isEmpty(r.location.cmsUri));\n }\n\n private invalidResource(msg: string) {\n this.log(LogLevel.ERROR, AppResources.messages.INVALID_RESOURCE);\n this.facade.sendNotification(NotificationName.RESOURCE_ERROR, {\n message: `${AppResources.messages.INVALID_RESOURCE}: ${msg}`,\n code: ErrorCode.INVALID_RESOURCE_FORMAT,\n fatal: true,\n }, NotificationType.INTERNAL);\n }\n\n}\n","import { UiMediatorInterface } from '../deprecated/cvui/UiMediatorInterface';\nimport { MediatorName } from '../enum/MediatorName';\nimport { NotificationName } from '../enum/NotificationName';\nimport { ProxyName } from '../enum/ProxyName';\nimport { NotificationInterface, PlayerDomProxyInterface } from '../iface';\nimport { PlaylistInterface } from '../iface/PlaylistInterface';\nimport { AbstractPresentationMediator } from '../view/AbstractPresentationMediator';\nimport { TimerMediator } from '../view/TimerMediator';\nimport { LogAwareSimpleCommand } from \"./LogAwareSimpleCommand\";\n\nexport class PresentationStateChangeCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface) {\n switch (notification.name) {\n case NotificationName.RESOURCE_COMPLETE:\n // The resource truly reached completion so advance the playlist, which will trigger .close()\n const pl = this.getProxy(ProxyName.Playlist);\n pl && pl.next();\n\n return;\n\n case NotificationName.RESOURCE_END:\n case NotificationName.RESOURCE_INTERRUPTED:\n // .close() has completed, kill the resource\n (this.facade.retrieveMediator(MediatorName.TIMER_MEDIATOR)).killTimer();\n\n this.sendNotification(NotificationName.KILL_RESOURCE_PRESENTATION);\n\n const uim = this.facade.retrieveMediator(MediatorName.UI);\n uim && uim.resetUi();\n break;\n\n case NotificationName.CONTENT_BUFFERING:\n case NotificationName.AD_BUFFERING:\n const dom = this.facade.retrieveProxy(ProxyName.PlayerDomProxy) as PlayerDomProxyInterface;\n const main = dom?.getMain();\n main?.setAttribute('aria-busy', notification.body.value.toString());\n break;\n\n case NotificationName.AD_BREAK_START:\n // VTG-2223 - XBOX was the only platform showing symptoms, but change may work on others so not device specific targeting. \n const pres = this.facade.retrieveMediator(MediatorName.PRESENTATION_MEDIATOR) as AbstractPresentationMediator;\n pres?.adapter?.clearCue();\n break;\n }\n\n this.sendNotification(NotificationName.APP_EVENT, {\n notificationName: notification.name,\n data: notification.body\n });\n }\n}\n","import { NotificationName } from '../enum/NotificationName';\nimport { ProxyName } from '../enum/ProxyName';\nimport { NotificationInterface, PlayerDomProxyInterface } from '../iface';\nimport { LogAwareSimpleCommand } from './LogAwareSimpleCommand';\n\nexport class ReadyCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface) {\n const { name, body } = notification;\n\n // accessibility\n const dom = this.facade.retrieveProxy(ProxyName.PlayerDomProxy) as PlayerDomProxyInterface;\n if (dom) {\n const main = dom.getMain();\n main.setAttribute('role', 'region');\n\n const tabindex = main.getAttribute('tabindex') || \"0\";\n main.setAttribute('tabindex', tabindex);\n }\n\n this.sendNotification(NotificationName.APP_EVENT, { notificationName: name, data: body });\n }\n}\n","import { LogAwareSimpleCommand } from \"./LogAwareSimpleCommand\";\nimport { NotificationInterface, PresentationMediatorInterface } from '../iface';\nimport { MediatorName } from '../enum/MediatorName';\n\nimport { PresentationStateInterface } from '../iface/PresentationStateInterface';\nimport { ModelName } from '../enum/ModelName';\nimport { NotificationName } from \"../enum/NotificationName\";\nimport { ContentPlaybackStateInterface } from \"../iface/ContentPlaybackStateInterface\";\nimport { ProxyName } from '../enum/ProxyName';\n\n\nexport class ResumePlaybackCommand extends LogAwareSimpleCommand {\n \n execute(notification: NotificationInterface) {\n const presoState = this.getModel(ModelName.PresentationState);\n const pm = this.facade.retrieveMediator(MediatorName.PRESENTATION_MEDIATOR);\n\n presoState.suspended = false;\n pm.resume();\n\n const cps = this.getProxy(ProxyName.ContentPlaybackStateProxy);\n this.sendNotification(NotificationName.PLAYBACK_RESUMED, {contentTime: cps.model.time});\n }\n}\n","import { request } from '../../core/Request';\nimport { XhrResponseType } from '../../enum/XhrResponseType';\nimport { CmsDataRetrieverCallback, CmsDataRetrieverOptions } from '../../iface';\nimport { ErrorRecoveryInterface } from '../../iface/ErrorRecoveryInterface';\nimport { StrStrDict } from '../../iface/StrStrDict';\n\n\n// Will make an XHR call upon instantiation.\n// See CmsDataRetrieverOptions; either a uriTemplate and id, or a url may be supplied.\n// A responseType and callback are required. \nexport class CmsDataRetriever {\n\n constructor(options: CmsDataRetrieverOptions) {\n const errRecovery = options.errorRecovery || null;\n let errorMsg: string | null = null;\n\n if (options.url) {\n this.retrieveResource(options.url, options.responseType, options.callback, errRecovery, options.timeout);\n }\n else if (options.uriTemplate && options.tokenMap) {\n const uri = this.replaceUriTokens(options.uriTemplate, options.tokenMap);\n this.retrieveResource(uri, options.responseType, options.callback, errRecovery, options.timeout);\n }\n else {\n errorMsg = 'Invalid options passed to CmsDataRetriever.';\n }\n\n if (errorMsg) {\n options.callback && options.callback(null, {\n status: 0,\n error: true,\n url: 'n/a',\n message: errorMsg\n });\n }\n }\n\n private replaceUriTokens(uri: string, tokenMap: StrStrDict): string {\n let u: string = uri;\n\n if (tokenMap) {\n for (const q in tokenMap) {\n u = u.replace(q, tokenMap[q]);\n }\n }\n return u;\n }\n\n private retrieveResource(\n url: string,\n responseType: XhrResponseType,\n callback: CmsDataRetrieverCallback,\n errorRecovery: ErrorRecoveryInterface = null,\n timeout: number,\n ): void {\n request({\n responseType, // REM: Use XhrResponseType.TEXT for MPX SMIL! (is converted to Document by AsyncDataRequest)\n timeout,\n url,\n errorRecovery,\n })\n .then(response => callback?.(response, null))\n .catch(error => callback?.(null, error));\n }\n}\n","import { AppResources } from '../app/AppResources';\nimport { ErrorCode } from '../enum/ErrorCode';\nimport { LogLevel } from '../enum/LogLevel';\nimport { ModelName } from '../enum/ModelName';\nimport { NotificationName } from '../enum/NotificationName';\nimport { NotificationType } from '../enum/NotificationType';\nimport { CmsDataRetrieverOptions, NotificationInterface } from '../iface';\nimport { DataTransformerConfigInterface } from '../iface/DataTransformerConfigInterface';\nimport { DataTransformersConfigInterface } from '../iface/DataTransformersConfigInterface';\nimport { PlayerOptionsInterface } from '../iface/PlayerOptionsInterface';\nimport { ResourceConfigurationInterface } from '../iface/ResourceConfigurationInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { CmsDataRetriever } from './command-helpers/CmsDataRetriever';\nimport { LogAwareSimpleCommand } from './LogAwareSimpleCommand';\n\n\nexport class RetrieveResourceCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface): void {\n const r: ResourceConfigurationInterface = notification.body.resource,\n loc = r && r.location,\n cms: string = (loc && loc.cms) || null,\n cfg: DataTransformerConfigInterface = this.getConfig(cms),\n valid = cfg && ((cfg.uriTemplate && loc.tokenMap) || loc.cmsUri);\n\n if (valid) {\n const pOpts = this.getModel(ModelName.PlayerOptions);\n const opts: CmsDataRetrieverOptions = {\n uriTemplate: cfg.uriTemplate,\n tokenMap: loc && loc.tokenMap || null,\n url: loc && loc.cmsUri || null,\n responseType: cfg.responseType,\n errorRecovery: pOpts.networkErrorRecovery,\n timeout: cfg.timeout || pOpts.networkTimeout,\n callback: (doc: XMLDocument, err: StrAnyDict | null) => {\n if (err) {\n this.log(LogLevel.ERROR, err.status, err.message);\n this.sendNotification(NotificationName.RESOURCE_ERROR, {\n code: ErrorCode.SELECTOR_CALL_ERROR,\n message: err.message,\n fatal: true,\n }, NotificationType.INTERNAL);\n\n return;\n }\n\n this.sendNotification(NotificationName.TRANSFORM_RESOURCE, { resource: r, data: doc }, NotificationType.INTERNAL);\n }\n };\n\n new CmsDataRetriever(opts);\n }\n else {\n this.log(LogLevel.ERROR, `RetrieveResourceCommand: ${AppResources.messages.UNEXPECTED_CONDITION}; CMS config error.`);\n }\n }\n\n getConfig(cms: string): DataTransformerConfigInterface | null {\n const playerOptions = this.getModel(ModelName.PlayerOptions),\n txDefs: DataTransformersConfigInterface = playerOptions.dataTransformers;\n\n if (cms && txDefs && txDefs[cms] && txDefs[cms].objectRef && txDefs[cms].responseType) {\n return txDefs[cms];\n }\n\n return null;\n }\n}\n","import { MediatorName } from '../enum/MediatorName';\nimport { NotificationName } from '../enum/NotificationName';\nimport { NotificationInterface, PresentationMediatorInterface } from '../iface';\nimport { LogAwareSimpleCommand } from './LogAwareSimpleCommand';\n\nexport class StartPresentationCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface) {\n const pm = this.facade.retrieveMediator(MediatorName.PRESENTATION_MEDIATOR);\n this.sendNotification(NotificationName.RESOURCE_START);\n pm.start();\n }\n}\n","import { LogAwareSimpleCommand } from \"./LogAwareSimpleCommand\";\nimport { NotificationInterface, PresentationMediatorInterface } from '../iface';\nimport { MediatorName } from '../enum/MediatorName';\n\nimport { PresentationStateInterface } from '../iface/PresentationStateInterface';\nimport { ModelName } from '../enum/ModelName';\nimport { NotificationName } from '../enum/NotificationName';\nimport { ContentPlaybackStateInterface } from '../iface/ContentPlaybackStateInterface';\nimport { ProxyName } from \"../enum/ProxyName\";\n\n\n\nexport class SuspendPlaybackCommand extends LogAwareSimpleCommand {\n \n execute(notification: NotificationInterface) {\n const presoState = this.getModel(ModelName.PresentationState);\n const pm = this.facade.retrieveMediator(MediatorName.PRESENTATION_MEDIATOR);\n\n pm.suspend();\n presoState.suspended = true;\n\n const cps = this.getProxy(ProxyName.ContentPlaybackStateProxy);\n this.sendNotification(NotificationName.PLAYBACK_SUSPENDED, {contentTime: cps.model.time});\n }\n}\n","import { AppResources } from '../app/AppResources';\nimport { Util } from '../core/Util';\nimport { ErrorCode } from '../enum/ErrorCode';\nimport { ModelName } from '../enum/ModelName';\nimport { NotificationName } from '../enum/NotificationName';\nimport { NotificationType } from '../enum/NotificationType';\nimport { NotificationInterface } from '../iface';\nimport { PlayerOptionsInterface } from '../iface/PlayerOptionsInterface';\nimport { ResourceConfigurationInterface } from '../iface/ResourceConfigurationInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { ResourceValidator } from './command-helpers/ResourceValidator';\nimport { LogAwareSimpleCommand } from './LogAwareSimpleCommand';\n\n\nexport class TransformResourceCommand extends LogAwareSimpleCommand {\n\n execute(notification: NotificationInterface): void {\n const r: ResourceConfigurationInterface = notification.body.resource;\n const data = notification.body.data || null;\n const playerOpts = this.getModel(ModelName.PlayerOptions);\n const dtx: any = playerOpts.dataTransformers?.[r.location.cms]?.objectRef;\n\n Promise.resolve()\n .then(() => {\n return (dtx) ? this.transform(r, data, dtx) : r;\n })\n .then((resource) => {\n this.sendNotification(NotificationName.REGISTER_RESOURCE, { resource }, NotificationType.INTERNAL);\n })\n .catch((error) => {\n const code = this.getCodeForError(error);\n const message = error.message || AppResources.messages.CMS_RESOURCE_UNAVAILABLE;\n const fatal = true;\n this.sendNotification(NotificationName.RESOURCE_ERROR, { code, message, fatal }, NotificationType.INTERNAL);\n });\n }\n\n transform(resource: ResourceConfigurationInterface, data: any, dtx: any): Promise {\n const tx = Util.isFunction(dtx.transform) ? dtx : new dtx();\n const r = tx.transform?.(data, resource);\n return Promise.resolve(r)\n .then((r: any) => {\n // check for CMS errors\n if (r?.error) {\n throw r.data;\n }\n\n // ensure resource is valid\n const resourceValidation = ResourceValidator.validate(r);\n if (resourceValidation.error) {\n const error = new Error(resourceValidation.msg) as any;\n error.code = ErrorCode.INVALID_RESOURCE_FORMAT;\n throw error;\n }\n\n return r as ResourceConfigurationInterface;\n });\n }\n\n getCodeForError(obj: StrAnyDict): ErrorCode {\n if (obj.cms === 'mpx') {\n return this.getCodeForMpxError(obj);\n }\n else if (obj.code) {\n return obj.code;\n }\n else {\n return ErrorCode.RESOURCE_UNAVAILABLE;\n }\n }\n\n getCodeForMpxError(obj: StrAnyDict): ErrorCode {\n const exc = obj ? obj.exception : null;\n\n switch (exc) {\n case 'DomainBlocked':\n return ErrorCode.DOMAIN_BLOCKED;\n\n case 'GeoLocationBlocked':\n return ErrorCode.GEO_LOCATION_BLOCKED;\n\n case 'IpBlocked':\n return ErrorCode.IP_BLOCKED;\n\n case 'SatelliteProviderBlocked':\n return ErrorCode.SATELLITE_PROVIDER_BLOCKED;\n\n case 'Expired':\n return ErrorCode.EXPIRED;\n\n default:\n return ErrorCode.RESOURCE_UNAVAILABLE;\n }\n }\n}\n","import { LogAwareSimpleCommand } from \"./LogAwareSimpleCommand\";\nimport { NotificationInterface } from '../iface';\nimport { NotificationName } from '../enum/NotificationName';\nimport { MediatorName } from '../enum/MediatorName';\nimport { PluginMediator } from '../view/PluginMediator';\nimport { DiagnosticAction } from '../enum/DiagnosticAction';\nimport { ProxyName } from '../enum/ProxyName';\nimport { PlayerDomProxy } from '../model/PlayerDomProxy';\nimport { AppMediator } from '../view/AppMediator';\n\n\nexport class UserKeyboardCommand extends LogAwareSimpleCommand {\n\n private copyNoticeStyle: string = 'position: absolute; z-Index: 900000000; top: 0; right: 0; width: 180px; ' +\n 'background: #fc0; color: #000; font-family: Arial, sans-serif; text-align: center; height: 64px; line-height: 64px; font-size: 32px';\n\n execute(notification: NotificationInterface) {\n const action = notification.body && notification.body.action;\n\n switch (action) {\n case DiagnosticAction.DIAGNOSTIC_PLUGIN:\n const pim = this.facade.retrieveMediator(MediatorName.PLUGIN_MEDIATOR);\n\n pim && pim.toggleDiagnosticPlugin();\n break;\n\n case DiagnosticAction.CONFIG_TO_CLIPBOARD:\n case DiagnosticAction.CONFIG_TO_TEST_PAGE:\n const toClip = action === DiagnosticAction.CONFIG_TO_CLIPBOARD;\n const d = this.getSerializedData();\n\n if (toClip) {\n this.copyToClipboard(d);\n this.displayCopyNotice();\n }\n else {\n // NOT YET IMPL'D: send to test page\n // const w: Window = window.open('TEST_PAGE_URL', '_blank');\n // w.addEventListener('load', () => {\n // w.postMessage(d, `${DOMAIN}`); // domain of test page\n // });\n }\n break;\n\n default:\n this.sendNotification(NotificationName.APP_EVENT, {\n notificationName: notification.name,\n data: notification.body\n });\n break;\n }\n }\n\n\n displayCopyNotice(): void {\n const pdp = this.facade.retrieveProxy(ProxyName.PlayerDomProxy);\n const m = pdp.getMain();\n const d = document.createElement('div');\n\n d.setAttribute('style', this.copyNoticeStyle);\n d.innerHTML = 'Copied!';\n\n m.appendChild(d);\n setTimeout(() => m.removeChild(d), 2500);\n }\n\n copyToClipboard(str: string): void {\n const t: HTMLTextAreaElement = document.createElement('textarea');\n\n t.setAttribute('style', 'position: absolute; top: -120px;');\n document.body.appendChild(t);\n t.value = str;\n t.select();\n\n document.execCommand(\"copy\");\n\n document.body.removeChild(t);\n }\n\n getSerializedData(): string {\n const am = this.facade.retrieveMediator(MediatorName.APPLICATION);\n\n return am.getConfigAsJson();\n }\n}","import { AbrSwitchCommand } from '../controller/AbrSwitchCommand';\nimport { BootCommand } from \"../controller/boot/BootCommand\";\nimport { HandleErrorCommand } from '../controller/HandleErrorCommand';\nimport { KillResourcePresentationCommand } from '../controller/KillResourcePresentationCommand';\nimport { LocalizationCommand } from \"../controller/LocalizationCommand\";\nimport { MetricCommand } from '../controller/MetricCommand';\nimport { PlaybackCommand } from \"../controller/PlaybackCommand\";\nimport { PlaylistCommand } from '../controller/PlaylistCommand';\nimport { PrepPlaybackCommand } from \"../controller/PrepPlaybackCommand\";\nimport { PrepResourceCommand } from \"../controller/PrepResourceCommand\";\nimport { PresentationStateChangeCommand } from '../controller/PresentationStateChangeCommand';\nimport { ReadyCommand } from '../controller/ReadyCommand';\nimport { ResumePlaybackCommand } from '../controller/ResumePlaybackCommand';\nimport { RetrieveResourceCommand } from '../controller/RetrieveResourceCommand';\nimport { StartPresentationCommand } from '../controller/StartPresentationCommand';\nimport { SuspendPlaybackCommand } from '../controller/SuspendPlaybackCommand';\nimport { TransformResourceCommand } from '../controller/TransformResourceCommand';\nimport { UserKeyboardCommand } from '../controller/UserKeyboardCommand';\nimport { NotificationName } from \"../enum/NotificationName\";\nimport { NotificationCommandMapInterface } from '../iface';\n\n\nexport const command_map: NotificationCommandMapInterface = {\n [NotificationName.DEFAULT]: null,\n [NotificationName.BOOT_APP]: BootCommand,\n [NotificationName.READY]: ReadyCommand,\n\n [NotificationName.PLAY_ON_USER_GESTURE]: PlaybackCommand,\n [NotificationName.PLAY]: PlaybackCommand,\n [NotificationName.PAUSE]: PlaybackCommand,\n [NotificationName.STOP]: PlaybackCommand,\n [NotificationName.SEEK]: PlaybackCommand,\n [NotificationName.SEEK_FORWARD]: PlaybackCommand,\n [NotificationName.SEEK_BACK]: PlaybackCommand,\n [NotificationName.SEEK_TO_LIVE]: PlaybackCommand,\n [NotificationName.MUTE]: PlaybackCommand,\n [NotificationName.UNMUTE]: PlaybackCommand,\n [NotificationName.VOLUME_CHANGE]: PlaybackCommand,\n [NotificationName.SWITCH_AUDIO_TRACK]: PlaybackCommand,\n [NotificationName.SWITCH_TEXT_TRACK]: PlaybackCommand,\n [NotificationName.SWITCH_TEXT_MODE]: PlaybackCommand,\n [NotificationName.PLAYBACK_STATE_CHANGE]: PresentationStateChangeCommand,\n\n [NotificationName.SUSPEND_PLAYBACK]: SuspendPlaybackCommand,\n [NotificationName.RESUME_PLAYBACK]: ResumePlaybackCommand,\n\n [NotificationName.SWITCH_BITRATE]: AbrSwitchCommand,\n [NotificationName.SWITCH_QUALITY_CATEGORY]: AbrSwitchCommand,\n [NotificationName.AUTO_QUALITY_SWITCHING]: AbrSwitchCommand,\n [NotificationName.MIN_BITRATE]: AbrSwitchCommand,\n [NotificationName.MAX_BITRATE]: AbrSwitchCommand,\n\n [NotificationName.PREP_RESOURCE_COLLECTION]: PrepResourceCommand,\n [NotificationName.REGISTER_RESOURCE]: PrepResourceCommand,\n [NotificationName.REGISTER_RESOURCE]: PrepResourceCommand,\n [NotificationName.RETRIEVE_RESOURCE]: RetrieveResourceCommand,\n [NotificationName.TRANSFORM_RESOURCE]: TransformResourceCommand,\n [NotificationName.START_PRESENTATION]: StartPresentationCommand,\n\n [NotificationName.PLAYLIST_ADVANCED]: PlaylistCommand,\n [NotificationName.PLAYLIST_COMPLETE]: PlaylistCommand,\n [NotificationName.PLAYLIST_CLEARED]: PlaylistCommand,\n [NotificationName.PLAYLIST_CURRENT_RESOURCE_CLEARED]: PlaylistCommand,\n\n [NotificationName.PLAY_RESOURCE]: PrepPlaybackCommand,\n [NotificationName.KILL_RESOURCE_PRESENTATION]: KillResourcePresentationCommand,\n\n [NotificationName.RESOURCE_INTERRUPTED]: PresentationStateChangeCommand,\n\n [NotificationName.VIDEO_START_ERROR]: HandleErrorCommand,\n [NotificationName.VIDEO_PLAYBACK_ERROR]: HandleErrorCommand,\n [NotificationName.RESOURCE_ERROR]: HandleErrorCommand,\n [NotificationName.AD_ERROR]: HandleErrorCommand,\n [NotificationName.AD_STALLED]: HandleErrorCommand,\n\n // PresentationStateChangeCommand is a sink for any events \n // which are to be emitted externally. If special treatment is needed\n // a custom command may be used.\n [NotificationName.PLAYBACK_SUSPENDED]: PresentationStateChangeCommand,\n [NotificationName.PLAYBACK_RESUMED]: PresentationStateChangeCommand,\n\n [NotificationName.POSTER_CLICK]: PresentationStateChangeCommand,\n [NotificationName.PLAYLIST_CHANGE]: PresentationStateChangeCommand,\n\n [NotificationName.RESOURCE_START]: PresentationStateChangeCommand,\n [NotificationName.VIDEO_PROGRESS]: PresentationStateChangeCommand,\n [NotificationName.QUALITY_CHANGE]: PresentationStateChangeCommand,\n [NotificationName.QUALITY_INFO_CHANGE]: PresentationStateChangeCommand,\n [NotificationName.CDN_CHANGE]: PresentationStateChangeCommand,\n [NotificationName.DRM_KEYSYSTEM_CREATED]: PresentationStateChangeCommand,\n\n [NotificationName.PRESENTATION_SIZE_CHANGE]: PresentationStateChangeCommand,\n [NotificationName.FULLSCREEN_ENTER]: PresentationStateChangeCommand,\n [NotificationName.FULLSCREEN_EXIT]: PresentationStateChangeCommand,\n [NotificationName.CONTENT_TIME_UPDATE]: PresentationStateChangeCommand,\n [NotificationName.CONTENT_BUFFERING]: PresentationStateChangeCommand,\n [NotificationName.CONTENT_START]: PresentationStateChangeCommand,\n [NotificationName.CONTENT_DURATION_AVAILABLE]: PresentationStateChangeCommand,\n [NotificationName.CONTENT_SEGMENT_START]: PresentationStateChangeCommand,\n [NotificationName.CONTENT_PLAYING]: PresentationStateChangeCommand,\n [NotificationName.CONTENT_PAUSED]: PresentationStateChangeCommand,\n [NotificationName.CONTENT_SEEKING]: PresentationStateChangeCommand,\n [NotificationName.CONTENT_SEEKED]: PresentationStateChangeCommand,\n [NotificationName.SEEK_REDIRECT_START]: PresentationStateChangeCommand,\n [NotificationName.SEEK_REDIRECT_COMPLETE]: PresentationStateChangeCommand,\n [NotificationName.CONTENT_SEGMENT_END]: PresentationStateChangeCommand,\n [NotificationName.CONTENT_COMPLETE]: PresentationStateChangeCommand,\n [NotificationName.CONTENT_IS_LIVE_CHANGED]: PresentationStateChangeCommand,\n [NotificationName.STREAM_TYPE_CHANGE]: PresentationStateChangeCommand,\n [NotificationName.STREAM_METADATA]: PresentationStateChangeCommand,\n [NotificationName.STREAM_ID_AVAILABLE]: PresentationStateChangeCommand,\n [NotificationName.RESOURCE_END]: PresentationStateChangeCommand,\n [NotificationName.RESOURCE_COMPLETE]: PresentationStateChangeCommand,\n\n [NotificationName.AD_SEGMENT_START]: PresentationStateChangeCommand,\n [NotificationName.AD_SEGMENT_END]: PresentationStateChangeCommand,\n [NotificationName.AD_CUEPOINTS_AVAILABLE]: PresentationStateChangeCommand,\n [NotificationName.AD_BREAK_START]: PresentationStateChangeCommand,\n [NotificationName.AD_BREAK_METADATA]: PresentationStateChangeCommand,\n [NotificationName.AD_BREAK_COMPLETE]: PresentationStateChangeCommand,\n [NotificationName.AD_START]: PresentationStateChangeCommand,\n [NotificationName.AD_PAUSED]: PresentationStateChangeCommand,\n [NotificationName.AD_PLAYING]: PresentationStateChangeCommand,\n [NotificationName.AD_TIME_UPDATE]: PresentationStateChangeCommand,\n [NotificationName.AD_FIRST_QUARTILE]: PresentationStateChangeCommand,\n [NotificationName.AD_MIDPOINT]: PresentationStateChangeCommand,\n [NotificationName.AD_THIRD_QUARTILE]: PresentationStateChangeCommand,\n [NotificationName.AD_COMPLETE]: PresentationStateChangeCommand,\n [NotificationName.AD_BREAK_COMPLETE]: PresentationStateChangeCommand,\n\n [NotificationName.AD_STALLED]: PresentationStateChangeCommand,\n [NotificationName.AD_STALLED]: PresentationStateChangeCommand,\n [NotificationName.AD_BUFFERING]: PresentationStateChangeCommand,\n [NotificationName.AD_CLICK]: PresentationStateChangeCommand,\n [NotificationName.AD_SKIPPED]: PresentationStateChangeCommand,\n\n [NotificationName.VIDEO_LOAD_COMPLETE]: PresentationStateChangeCommand,\n [NotificationName.METADATA_CUEPOINT]: PresentationStateChangeCommand,\n [NotificationName.TEXT_CUEPOINT]: PresentationStateChangeCommand,\n [NotificationName.TEXT_TRACK_DISPLAY_MODE_CHANGE]: PresentationStateChangeCommand,\n [NotificationName.TEXT_TRACK_CHANGE]: PresentationStateChangeCommand,\n [NotificationName.TEXT_TRACK_INFO_CHANGE]: PresentationStateChangeCommand,\n [NotificationName.TEXT_TRACK_AVAILABLE]: PresentationStateChangeCommand,\n [NotificationName.AUDIO_TRACK_INFO_CHANGE]: PresentationStateChangeCommand,\n [NotificationName.AUDIO_TRACK_CHANGE]: PresentationStateChangeCommand,\n [NotificationName.THUMBNAIL_TRACK_AVAILABLE]: PresentationStateChangeCommand,\n\n [NotificationName.BEFORE_CONTROLS_VISIBLE]: PresentationStateChangeCommand,\n [NotificationName.BEFORE_CONTROLS_HIDDEN]: PresentationStateChangeCommand,\n [NotificationName.CONTROLS_VISIBLE]: PresentationStateChangeCommand,\n [NotificationName.CONTROLS_HIDDEN]: PresentationStateChangeCommand,\n\n [NotificationName.MOUSE_ENTER_PRESENTATION]: PresentationStateChangeCommand,\n [NotificationName.MOUSE_LEAVE_PRESENTATION]: PresentationStateChangeCommand,\n [NotificationName.USER_PAUSE]: PresentationStateChangeCommand,\n [NotificationName.USER_SETTINGS_REQUEST]: PresentationStateChangeCommand,\n\n [NotificationName.AUTOPLAY_BLOCKED]: PresentationStateChangeCommand,\n [NotificationName.PLAYLIST_OUT_OF_RANGE]: PresentationStateChangeCommand,\n [NotificationName.HOTKEY_ACTION]: PresentationStateChangeCommand,\n\n // END PresentationStateChangeCommand \n\n [NotificationName.CHANGE_LANGUAGE]: LocalizationCommand,\n [NotificationName.LANGUAGE_CHANGE]: LocalizationCommand,\n [NotificationName.USER_KEY_COMMAND]: UserKeyboardCommand,\n\n [NotificationName.METRIC]: MetricCommand,\n};\n","import { buildInfo } from '../core/BuildInfo';\nimport { Logger } from '../core/Logger';\nimport { Metric } from '../core/Metric';\nimport { Util } from '../core/Util';\nimport { Deprecated } from '../deprecated/Deprecated';\nimport { ModelSnapshotInterface } from '../deprecated/ModelSnapshotInterface';\nimport { ApiMetric } from '../enum/ApiMetric';\nimport { HookType } from '../enum/HookType';\nimport { LogLevel } from '../enum/LogLevel';\nimport { MediatorName } from '../enum/MediatorName';\nimport { MetricType } from '../enum/MetricType';\nimport { ModelName } from '../enum/ModelName';\nimport { NativePlugin } from '../enum/NativePlugin';\nimport { NotificationName } from '../enum/NotificationName';\nimport { NotificationType } from '../enum/NotificationType';\nimport { PlaybackState } from '../enum/PlaybackState';\nimport { PlayerEvent } from '../enum/PlayerEvent';\nimport { ProxyName } from '../enum/ProxyName';\nimport { QualityMode } from '../enum/QualityMode';\nimport { StreamType } from '../enum/StreamType';\nimport { ApplicationOptionsInterface, NotificationInterface, PlayerDomProxyInterface, VideoPlayerApplicationOptions } from '../iface';\nimport { AdapterConfigInterface } from '../iface/AdapterConfigInterface';\nimport { AdCuePointInterface } from '../iface/AdCuePointInterface';\nimport { AudioTrackInterface } from '../iface/AudioTrackInterface';\nimport { AudioTracksInterface } from '../iface/AudioTracksInterface';\nimport { AutoplayInfoInterface } from '../iface/AutoplayInfoInterface';\nimport { DimensionsInterface } from '../iface/DimensionsInterface';\nimport { EventHandler } from '../iface/EventHandler';\nimport { EventInterface } from '../iface/EventInterface';\nimport { HookInterface } from '../iface/HookInterface';\nimport { LiveStreamInfoInterface } from '../iface/LiveStreamInfoInterface';\nimport { LocalizationInterface } from '../iface/LocalizationInterface';\nimport { PlayerOptionsInterface } from '../iface/PlayerOptionsInterface';\nimport { PlaylistInterface } from '../iface/PlaylistInterface';\nimport { PluginConfigInterface } from '../iface/PluginConfigInterface';\nimport { PluginInterface } from '../iface/PluginInterface';\nimport { PresentationStateInterface } from '../iface/PresentationStateInterface';\nimport { QualityInfoInterface } from '../iface/QualityInfoInterface';\nimport { ResourceConfigurationInterface } from '../iface/ResourceConfigurationInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { TextTrackInterface } from '../iface/TextTrackInterface';\nimport { TextTracksInterface } from '../iface/TextTracksInterface';\nimport { ThumbnailCueInterface } from '../iface/ThumbnailCueInterface';\nimport { VideoPlayerInterface } from '../iface/VideoPlayerInterface';\nimport { AdapterProxy } from '../model/AdapterProxy';\nimport { ContentPlaybackStateProxy } from '../model/ContentPlaybackStateProxy';\nimport { HookProxy } from '../model/HookProxy';\nimport { LocalizationProxy } from '../model/LocalizationProxy';\nimport { PlayerDomProxy } from '../model/PlayerDomProxy';\nimport { PlaylistProxy } from '../model/PlaylistProxy';\nimport { TextTrackProxy } from '../model/TextTrackProxy';\nimport { Utils } from '../util/Utils';\nimport { AbstractApplication } from './AbstractApplication';\nimport { apiAccessor, apiCollection, apiMethod } from './ApiDecorators';\nimport { AppResources } from './AppResources';\nimport { command_map } from './command_map';\n\n\nexport class VideoPlayer extends AbstractApplication implements VideoPlayerInterface {\n\n /**\n * @ignore\n */\n apiMethods!: StrAnyDict;\n\n /**\n * @ignore\n */\n apiAccessors!: StrAnyDict;\n\n private pIsReady: boolean = false;\n private api: VideoPlayerInterface;\n\n /**\n * @hidden\n */\n constructor(options: VideoPlayerApplicationOptions) {\n super(Util.assign({\n commandMap: command_map,\n id: options.playerOptions.id || null\n }, options));\n\n this.api = apiCollection({}, this) as VideoPlayerInterface;\n this.target = this.api;\n this.init();\n }\n\n initialize(): Promise {\n const options = this.modelCollectionProxy.getModel(ModelName.PlayerOptions);\n const plugins = (options.plugins || []) as PluginConfigInterface[];\n const api = this.getApi();\n const note = { name: NotificationName.CHANGE_LANGUAGE, body: { value: options.language }, type: NotificationType.INTERNAL };\n\n this.addNativePlugins(plugins, options);\n\n return api.registerPlugins(plugins)\n .then(() => {\n this.localization.registerLocalizationData(options.localization);\n return this.sendAsyncNotification(note, [PlayerEvent.LANGUAGE_CHANGE]);\n })\n .then(() => {\n this.pIsReady = true;\n this.sendNotification(NotificationName.READY, api);\n\n return api;\n })\n .catch(error => {\n Logger.error(error);\n\n throw error;\n });\n }\n\n /**\n * @ignore\n */\n override destroy(): Promise {\n const destroy = super.destroy.bind(this);\n return this.killCurrentResource()\n .then(() => {\n this.appMediator && this.appMediator.prepForPlayerRemoval();\n this.apiAccessors = null;\n this.apiMethods = null;\n destroy();\n })\n .catch(e => {\n Logger.error(e);\n throw e;\n });\n }\n\n /**\n * @ignore\n */\n getApi(): VideoPlayerInterface {\n return this.api;\n }\n\n /**\n * @ignore\n */\n killCurrentResource(): Promise {\n return this.appMediator.killCurrentResource();\n }\n\n //////////////////////\n // BEGIN PUBLIC API //\n //////////////////////\n\n ////////////////\n // Inherited\n ////////////////\n @apiMethod()\n override hasListenerFor(name: string): boolean {\n return super.hasListenerFor(Deprecated.checkEventName(name));\n }\n\n @apiMethod()\n override on(name: string, func: EventHandler): void {\n super.on(Deprecated.checkEventName(name), func);\n }\n\n @apiMethod()\n override once(name: string, func: EventHandler): void {\n super.once(Deprecated.checkEventName(name), func);\n }\n\n @apiMethod()\n override off(name: string, func?: EventHandler): void {\n super.off(Deprecated.checkEventName(name), func);\n }\n\n ////////////////\n // Accessors\n ////////////////\n @apiAccessor()\n get isReady(): boolean {\n return this.pIsReady;\n }\n\n @apiAccessor()\n get id(): string {\n return this.appId;\n }\n\n @apiAccessor()\n get dimensions(): DimensionsInterface {\n return this.appMediator.getDimensions();\n }\n\n @apiAccessor()\n get muted(): boolean {\n return this.appMediator.getMuteState();\n }\n set muted(value: boolean) {\n const note = value ? NotificationName.MUTE : NotificationName.UNMUTE;\n this.transmitExtRequest(note);\n }\n\n @apiAccessor()\n get volume(): number {\n return this.appMediator.getVolume();\n }\n set volume(value: number) {\n this.transmitExtRequest(NotificationName.VOLUME_CHANGE, { value: value });\n }\n\n @apiAccessor()\n get language(): string {\n return this.localization.language;\n }\n set language(value: string) {\n this.transmitExtRequest(NotificationName.CHANGE_LANGUAGE, { value });\n }\n\n @apiAccessor()\n get contentTime(): number {\n return this.contentPlaybackStateProxy ? this.contentPlaybackStateProxy.model.time : 0;\n }\n\n @apiAccessor()\n get contentDuration(): number {\n return this.contentPlaybackStateProxy ? this.contentPlaybackStateProxy.model.duration : NaN;\n }\n\n @apiAccessor()\n get streamTime(): number {\n const presoModel = this.modelCollectionProxy.getModel(ModelName.PresentationState);\n return presoModel.streamTime;\n }\n\n @apiAccessor()\n get streamDuration(): number {\n const presoModel = this.modelCollectionProxy.getModel(ModelName.PresentationState);\n return presoModel.streamDuration;\n }\n\n @apiAccessor()\n get playbackState(): PlaybackState {\n return this.contentPlaybackStateProxy ? this.contentPlaybackStateProxy.model.state : PlaybackState.IDLE;\n }\n\n @apiAccessor()\n get playlist(): PlaylistInterface {\n const proxy = this.facade.retrieveProxy(ProxyName.Playlist);\n\n return proxy ? proxy.getApi() : null;\n }\n\n @apiAccessor()\n get autoQualitySwitching(): boolean {\n return this.contentPlaybackStateProxy ? this.contentPlaybackStateProxy.qualitySwitchingMode === QualityMode.AUTO : false;\n }\n set autoQualitySwitching(value: boolean) {\n if (this.contentPlaybackStateReady) {\n this.transmitExtRequest(NotificationName.AUTO_QUALITY_SWITCHING, { value: value });\n }\n else {\n this.log(AppResources.messages.CONTENT_PLAYBACK_SETTING_IGNORED);\n }\n }\n\n @apiAccessor()\n get qualityInfo(): QualityInfoInterface {\n return this.contentPlaybackStateProxy ? this.contentPlaybackStateProxy.qualityInfo : null;\n }\n\n @apiAccessor()\n get bitrate(): number {\n const quality = this.qualityInfo.quality || { bitrate: NaN };\n const bitrate = (quality.bitrate != null) ? quality.bitrate : NaN;\n return bitrate;\n }\n set bitrate(bitrate: number) {\n if (this.contentPlaybackStateReady) {\n this.transmitExtRequest(NotificationName.SWITCH_BITRATE, { value: bitrate });\n }\n else {\n this.log(AppResources.messages.CONTENT_PLAYBACK_SETTING_IGNORED);\n }\n }\n\n @apiAccessor()\n get qualityCategory(): string {\n return this.contentPlaybackStateProxy ? this.contentPlaybackStateProxy.userQualityCategory : null;\n }\n set qualityCategory(category: string) {\n if (this.contentPlaybackStateReady) {\n this.transmitExtRequest(NotificationName.SWITCH_QUALITY_CATEGORY, { value: category });\n }\n else {\n this.log(AppResources.messages.CONTENT_PLAYBACK_SETTING_IGNORED);\n }\n }\n\n @apiAccessor()\n get minBitrate(): number {\n return this.contentPlaybackStateProxy ? this.contentPlaybackStateProxy.minBitrate : NaN;\n }\n set minBitrate(value: number) {\n if (this.contentPlaybackStateReady) {\n this.transmitExtRequest(NotificationName.MIN_BITRATE, { value: value });\n }\n else {\n this.log(AppResources.messages.CONTENT_PLAYBACK_SETTING_IGNORED);\n }\n }\n\n @apiAccessor()\n get maxBitrate(): number {\n return this.contentPlaybackStateProxy ? this.contentPlaybackStateProxy.maxBitrate : NaN;\n }\n set maxBitrate(value: number) {\n if (this.contentPlaybackStateReady) {\n this.transmitExtRequest(NotificationName.MAX_BITRATE, { value: value });\n }\n else {\n this.log(AppResources.messages.CONTENT_PLAYBACK_SETTING_IGNORED);\n }\n }\n\n @apiAccessor()\n get audioTrackInfo(): AudioTracksInterface {\n return this.contentPlaybackStateProxy ? this.contentPlaybackStateProxy.model.audioTracks : null;\n }\n\n @apiAccessor()\n get audioTrack(): AudioTrackInterface {\n return this.contentPlaybackStateProxy ? this.contentPlaybackStateProxy.model.audioTracks.track : null;\n }\n set audioTrack(track: AudioTrackInterface) {\n if (this.contentPlaybackStateReady) {\n this.transmitExtRequest(NotificationName.SWITCH_AUDIO_TRACK, { value: track });\n }\n else {\n this.log(AppResources.messages.CONTENT_PLAYBACK_SETTING_IGNORED);\n }\n }\n\n @apiMethod()\n attachResource(resource: Partial): Promise {\n return this.appMediator.attachResource(resource);\n }\n\n @apiAccessor()\n get resource(): ResourceConfigurationInterface {\n return this.appMediator.getCurrentResource();\n }\n set resource(value: ResourceConfigurationInterface) {\n Deprecated.setResource(this.appMediator, value);\n }\n\n @apiAccessor()\n get textTrackEnabled(): boolean {\n return (this.facade.retrieveProxy(ProxyName.TextTrackProxy)).enabled;\n }\n set textTrackEnabled(value: boolean) {\n this.transmitExtRequest(NotificationName.SWITCH_TEXT_MODE, { value: value });\n }\n\n @apiAccessor()\n get textTrack(): TextTrackInterface {\n return this.textTrackInfo ? this.textTrackInfo.track : null;\n }\n set textTrack(value: TextTrackInterface) {\n if (this.contentPlaybackStateReady) {\n this.transmitExtRequest(NotificationName.SWITCH_TEXT_TRACK, { value: value });\n }\n else {\n this.log(AppResources.messages.CONTENT_PLAYBACK_SETTING_IGNORED);\n }\n }\n\n @apiAccessor()\n get textTrackInfo(): TextTracksInterface {\n return this.contentPlaybackStateProxy ? this.contentPlaybackStateProxy.textTrackInfo : null;\n }\n\n @apiAccessor()\n get streamType(): StreamType {\n return this.contentPlaybackStateProxy ? this.contentPlaybackStateProxy.model.streamType : null;\n }\n\n @apiAccessor()\n get isPlayingLive(): boolean {\n const lsi = this.contentPlaybackStateProxy ? this.contentPlaybackStateProxy.model.liveStreamInfo : null;\n return lsi?.isPlayingLive === true;\n }\n\n @apiAccessor()\n get liveStreamUtcStart(): number {\n const lsi: LiveStreamInfoInterface = this.contentPlaybackStateProxy ? this.contentPlaybackStateProxy.model.liveStreamInfo : null;\n return lsi ? lsi.absoluteStart : NaN;\n }\n\n @apiAccessor()\n get liveStreamUtcTime(): number {\n const lsi: LiveStreamInfoInterface = this.contentPlaybackStateProxy ? this.contentPlaybackStateProxy.model.liveStreamInfo : null;\n return lsi ? lsi.absoluteTime : NaN;\n }\n\n @apiAccessor()\n get liveStreamUtcDuration(): number {\n const lsi: LiveStreamInfoInterface = this.contentPlaybackStateProxy ? this.contentPlaybackStateProxy.model.liveStreamInfo : null;\n return lsi ? lsi.absoluteDuration : NaN;\n }\n\n @apiAccessor()\n get isSuspended(): boolean {\n return this.appMediator.isPlaybackSuspended();\n }\n\n @apiAccessor()\n get fullscreenElement(): HTMLElement {\n return this.appMediator.getFullscreenElement();\n }\n set fullscreenElement(value: HTMLElement) {\n this.appMediator.setFullscreenElement(value);\n }\n\n @apiAccessor()\n get pausable(): boolean {\n return this.opts.playerOptions.overrides?.liveStreamPausable === true || this.streamType !== StreamType.LIVE;\n }\n\n // end accessors\n\n // methods\n\n @apiMethod()\n enterFullscreen(): void {\n this.transmitExtRequest(NotificationName.ENTER_FULLSCREEN_REQUEST);\n }\n\n @apiMethod()\n exitFullscreen(): void {\n this.transmitExtRequest(NotificationName.EXIT_FULLSCREEN_REQUEST);\n }\n\n @apiMethod()\n play(): Promise {\n this.recordMetric(MetricType.API, ApiMetric.PLAY);\n\n if (this.appMediator.isPlaybackSuspended()) {\n this.transmitExtRequest(NotificationName.RESUME_PLAYBACK);\n }\n\n const note = { name: NotificationName.PLAY, type: NotificationType.EXTERNAL };\n return this.sendAsyncNotification(note, [PlayerEvent.CONTENT_PLAYING, PlayerEvent.AD_PLAYING], [PlayerEvent.AUTOPLAY_BLOCKED, PlayerEvent.VIDEO_PLAYBACK_ERROR, PlayerEvent.AD_ERROR]);\n }\n\n @apiMethod()\n pause(): Promise {\n this.recordMetric(MetricType.API, ApiMetric.PAUSE);\n\n if (!this.pausable) {\n this.log(AppResources.messages.PAUSING_LINEAR_LIVE_STREAM_NOT_ALLOWED);\n return this.stop();\n }\n else {\n const note = { name: NotificationName.PAUSE, type: NotificationType.EXTERNAL };\n return this.sendAsyncNotification(note, [PlayerEvent.CONTENT_PAUSED, PlayerEvent.AD_PAUSED]);\n }\n }\n\n @apiMethod()\n togglePlayPause(): Promise {\n return this.playbackState === PlaybackState.PLAYING ? this.pause() : this.play();\n }\n\n @apiMethod()\n seek(position: number): Promise {\n const seekPos = this.appMediator.validateSeek(position, this.contentDuration);\n if (seekPos === null) {\n return Promise.resolve();\n }\n\n this.recordMetric(MetricType.API, ApiMetric.SEEK, position);\n\n const note = { name: NotificationName.SEEK, body: { value: seekPos }, type: NotificationType.EXTERNAL };\n\n return this.sendAsyncNotification(note, [PlayerEvent.SEEK_COMPLETE], [PlayerEvent.VIDEO_PLAYBACK_ERROR, PlayerEvent.AD_ERROR]);\n }\n\n @apiMethod()\n getModelSnapshot(): ModelSnapshotInterface {\n return Deprecated.getModelSnapShot(this.appMediator);\n }\n\n @apiMethod()\n getAdBreakTimes(): AdCuePointInterface[] {\n return this.appMediator.getAdBreakTimes() || [];\n }\n\n @apiMethod()\n grabFrame(): HTMLImageElement {\n return this.appMediator.grabFrame();\n }\n\n @apiMethod()\n getThumbnail(time: number): ThumbnailCueInterface {\n return this.contentPlaybackStateProxy?.getThumbnail(time);\n }\n\n @apiMethod()\n getContainerRect(): ClientRect | null {\n return this.appMediator.getContainerRect();\n }\n\n @apiMethod()\n registerPlugins(pc: PluginConfigInterface[], callback?: () => void): Promise {\n return new Promise((resolve, reject) => {\n this.transmitExtRequest(NotificationName.LOAD_PLUGINS, {\n plugins: pc,\n callback: () => {\n if (typeof callback === 'function') {\n callback();\n }\n resolve();\n }\n });\n });\n }\n\n @apiMethod()\n removePlugin(name: string): void {\n this.transmitExtRequest(NotificationName.REMOVE_PLUGIN, {\n name: name\n });\n }\n\n @apiMethod()\n registerAdapter(adapterConfig: AdapterConfigInterface): void {\n return this.adapters.registerAdapter(adapterConfig);\n }\n\n @apiMethod()\n retrieveAdapter(id: string): AdapterConfigInterface {\n return this.adapters.retrieveAdapter(id);\n }\n\n @apiMethod()\n removeAdapter(id: string): void {\n return this.adapters.removeAdapter(id);\n }\n\n @apiMethod()\n registerHook(type: HookType, hook: HookInterface): void {\n return this.hooks.registerHook(type, hook);\n }\n\n @apiMethod()\n removeHook(type: HookType, hook: HookInterface): void {\n return this.hooks.removeHook(type, hook);\n }\n\n @apiMethod()\n getPlugin(name: string): void {\n return this.appMediator.getPlugin(name);\n }\n\n @apiMethod()\n loadNativePlugin(name: NativePlugin, url?: string): Promise {\n return this.appMediator.loadNativePlugin(name, url)\n .then(plugin => {\n if (!plugin) {\n throw new Error(`Unable to load plugin ${name}`);\n }\n\n return plugin;\n });\n }\n\n @apiMethod()\n stop(): Promise {\n return this.appMediator.stopPresentation();\n }\n\n @apiMethod()\n goLive(): void {\n if (this.streamType && this.streamType !== StreamType.VOD) {\n this.recordMetric(MetricType.API, ApiMetric.GO_LIVE);\n this.transmitExtRequest(NotificationName.SEEK_TO_LIVE);\n }\n }\n\n @apiMethod()\n skipAd(): void {\n this.appMediator.skipAd();\n }\n\n @apiMethod()\n focus(options?: { preventScroll: boolean; }): void {\n const main = this.dom.getMain();\n if (main) {\n main.focus(options);\n }\n }\n\n @apiMethod()\n blur(): void {\n const main = this.dom.getMain();\n if (main) {\n main.blur();\n }\n }\n\n @apiMethod()\n getConfigAsJson(spacing?: number): string {\n return this.appMediator.getConfigAsJson(spacing);\n }\n\n /**\n * @deprecated\n */\n @apiMethod()\n getAutoplayCapabilities(): Promise {\n return this.appMediator.getAutoplayCapabilities();\n }\n\n @apiMethod()\n suspendPlayback(): void {\n if (!this.appMediator.isPlaybackSuspended()) {\n this.pause().then(() => {\n this.transmitExtRequest(NotificationName.SUSPEND_PLAYBACK);\n });\n }\n }\n\n @apiMethod()\n resumePlayback(): void {\n if (this.appMediator.isPlaybackSuspended()) {\n this.transmitExtRequest(NotificationName.RESUME_PLAYBACK);\n }\n }\n\n @apiMethod()\n recordMetric(type: string, key: string, value?: any): void {\n this.sendNotification(NotificationName.METRIC, new Metric(key, value, type));\n }\n\n // end methods\n ////////////////////\n // END PUBLIC API //\n ////////////////////\n\n /**\n * @ignore\n */\n sendEvent(name: string, data: StrAnyDict): void {\n this.emit(name, data);\n }\n\n /**\n * @ignore\n */\n sendErrorEvent(event: EventInterface): void {\n this.dispatchEvt(event);\n }\n\n private addNativePlugins(pluginsArray: PluginConfigInterface[], playerOptions: PlayerOptionsInterface): void {\n const { nativePlugins } = playerOptions;\n\n if (!nativePlugins?.length) {\n return;\n }\n\n nativePlugins.forEach(plugin => {\n pluginsArray.push(Utils.getNativePluginConfig(plugin, playerOptions));\n });\n }\n\n private get contentPlaybackStateProxy(): ContentPlaybackStateProxy {\n return this.facade.retrieveProxy(ProxyName.ContentPlaybackStateProxy);\n }\n\n private get contentPlaybackStateReady(): boolean {\n return this.contentPlaybackStateProxy?.isReady || false;\n }\n\n private get localization(): LocalizationInterface {\n return this.facade.retrieveProxy(ProxyName.LocalizationProxy) as LocalizationProxy;\n }\n\n private get dom(): PlayerDomProxyInterface {\n return this.facade.retrieveProxy(ProxyName.PlayerDomProxy) as PlayerDomProxy;\n }\n\n private get adapters(): AdapterProxy {\n return this.facade.retrieveProxy(ProxyName.AdapterProxy) as AdapterProxy;\n }\n\n private get hooks(): HookProxy {\n return this.facade.retrieveProxy(ProxyName.HookProxy) as HookProxy;\n }\n\n private transmitExtRequest(name: NotificationName, data?: any): void {\n this.sendNotification(name, data, NotificationType.EXTERNAL);\n }\n\n private log(message: string, logLevelOverride?: LogLevel): void {\n const lv = logLevelOverride ? logLevelOverride : LogLevel.DEBUG;\n this.facade.log(lv, message);\n }\n\n private init(): void {\n this.facade.registerProxy(new HookProxy(ProxyName.HookProxy));\n\n const gServices = this.opts.globalServices;\n const logLvl = this.opts.playerOptions.logLevel ? this.opts.playerOptions.logLevel : LogLevel.OFF;\n\n this.createLoggingService(logLvl);\n this.facade.log(LogLevel.INFO, `${buildInfo.playerName}; Ver. ${buildInfo.playerVersion} ${buildInfo.buildTime}`);\n\n this.registerGlobalServices(gServices);\n\n this.createApplicationMediator(MediatorName.APPLICATION);\n\n delete this.opts.globalServices;\n\n this.sendNotification(NotificationName.BOOT_APP, {\n playerOptions: this.opts.playerOptions || null,\n app: this,\n }, NotificationType.INTERNAL);\n }\n\n /**\n * @ignore \n */\n sendAsyncNotification(notification: NotificationInterface, event: string[], errorEvent: string[] = []): Promise {\n return new Promise((resolve, reject) => {\n errorEvent.push(PlayerEvent.FATAL_ERROR);\n let timeout: any;\n\n const success = (event: EventInterface) => {\n timeout = setTimeout(() => {\n remove(); //eslint-disable-line\n resolve(event);\n }, 0);\n };\n\n const fail = (error: any) => {\n clearTimeout(timeout);\n remove(); //eslint-disable-line\n reject(error);\n };\n\n const remove = () => {\n event.forEach(type => this.off(type, success));\n errorEvent.forEach(type => this.off(type, fail));\n };\n\n try {\n event.forEach(type => this.on(type, success));\n errorEvent.forEach(type => this.on(type, fail));\n this.sendNotification(notification.name, notification.body, notification.type);\n }\n catch (error) {\n fail(error);\n }\n });\n }\n}\n","import { AutoplayInfoInterface } from '..';\nimport { Logger } from '../core/Logger';\nimport { Util } from '../core/Util';\nimport { Utilities } from '../core/Utilities';\nimport { ServiceName } from '../enum/ServiceName';\nimport { MediaCapabilitiesServiceInterface, ServiceCollection, SystemServiceInterface } from '../iface';\nimport { DeepPartial } from '../iface/DeepPartial';\nimport { PlayerOptionsInterface } from '../iface/PlayerOptionsInterface';\nimport { ResourceConfigurationInterface } from '../iface/ResourceConfigurationInterface';\nimport { StrAnyDict } from '../iface/StrAnyDict';\nimport { SystemInfoApiInterface } from '../iface/SystemInfoApiInterface';\nimport { SystemInfoInterface } from '../iface/SystemInfoInterface';\nimport { VideoPlayerInterface } from '../iface/VideoPlayerInterface';\nimport { VideoPlayerReadyCallback } from '../iface/VideoPlayerReadyCallback';\nimport * as sdk from '../sdk';\nimport { AutoplayCapabilitiesService } from '../service/AutoplayCapabilitiesService';\nimport { MediaCapabilitiesService } from '../service/MediaCapabilitiesService';\nimport { SystemService } from '../service/SystemService';\nimport { System } from '../util/System';\nimport { ResourceConfiguration } from './ResourceConfiguration';\nimport { VideoPlayer } from './VideoPlayer';\n\ninterface PlayerRequestObject {\n options: PlayerOptionsInterface;\n callback: VideoPlayerReadyCallback;\n}\n\nclass Shell {\n private static serviceCollection: ServiceCollection = null;\n private static playerCollection: Record = {};\n private static initialized: boolean = false;\n private static initializing: boolean = null;\n private static pendingPlayerRequests: PlayerRequestObject[] = [];\n private static pendingPlayerDestroys: Record> = {};\n\n protected constructor() { }\n\n static createVideoPlayer(options: PlayerOptionsInterface, callback: VideoPlayerReadyCallback): void {\n if (this.initialized) {\n this.createVideoPlayerApp({ options, callback });\n return;\n }\n else {\n this.pendingPlayerRequests.push({ options, callback });\n }\n\n if (this.initializing === null) {\n this.initialize(options);\n }\n }\n\n static createVideoPlayerApp(pro: PlayerRequestObject) {\n const c = pro.options.container,\n sys = this.serviceCollection[ServiceName.System];\n\n let ok = false;\n\n if (sys.isWebMaf) {\n ok = true;\n }\n else if (\n c !== null && c !== undefined &&\n (\n c.constructor === HTMLDivElement ||\n (typeof c == 'object' && typeof c.getBoundingClientRect === 'function') ||\n (typeof c == 'string' && document.querySelector(c) != null)\n )\n ) {\n ok = true;\n }\n\n if (!ok) {\n const msg = 'Invalid player configuration: Missing presentation container.';\n Logger.error(msg);\n pro.callback(null, { message: msg });\n }\n\n try {\n const vp = new VideoPlayer({\n globalServices: this.serviceCollection,\n playerOptions: pro.options\n });\n\n this.playerCollection[vp.appId] = vp;\n\n vp\n .initialize()\n .then(api => pro.callback(api, null))\n .catch(error => pro.callback(null, error));\n }\n catch (error) {\n if (error.key) {\n error.message = `A player with id \"${error.key}\" a already exists`;\n }\n pro.callback(null, error);\n }\n }\n\n static retrieveVideoPlayer(playerId: string): Promise {\n const player = this.playerCollection[playerId];\n\n if (player) {\n return Promise.resolve(player);\n }\n\n const destroy = this.pendingPlayerDestroys[playerId];\n if (destroy) {\n return destroy.then(() => null);\n }\n\n const pending = Util.find(this.pendingPlayerRequests, (request) => request.options.id == playerId);\n if (pending) {\n return new Promise((resolve, reject) => {\n const callback = pending.callback;\n pending.callback = (api, error) => {\n callback(api, error);\n if (error) {\n reject(error);\n }\n else {\n resolve(api);\n }\n };\n });\n }\n\n return Promise.resolve(null);\n }\n\n static removeVideoPlayer(playerId: string): Promise {\n const pending = this.pendingPlayerDestroys[playerId];\n if (pending) {\n return pending;\n }\n\n const p = this.playerCollection[playerId];\n if (!p) {\n return Promise.resolve();\n }\n\n delete this.playerCollection[playerId];\n return this.pendingPlayerDestroys[playerId] = p\n .destroy()\n .then(() => {\n delete this.pendingPlayerDestroys[playerId];\n Logger.log(`[Avia] Player with id \"${playerId}\" removed.`);\n });\n }\n\n static createResourceConfig(config?: DeepPartial): ResourceConfigurationInterface {\n return new ResourceConfiguration(config);\n }\n\n static getSysInfoForUser(): SystemInfoApiInterface {\n if (this.serviceCollection === null) {\n return null;\n }\n\n const info = Util.assign({}, System.info),\n mc = (this.serviceCollection[ServiceName.MediaCapabilities]).capabilities;\n\n info.hasMediaSource = mc.hasMediaSource;\n info.supportsNativeHls = mc.supportsNativeHls;\n\n return info;\n }\n\n static getPlatformInfo(): Promise {\n return new Promise((resolve, reject) => {\n const s = SystemService.getInstance();\n if (s?.info) {\n resolve(s.info);\n }\n else {\n reject(null);\n }\n });\n }\n\n private static processPending(): void {\n const n = this.pendingPlayerRequests.length;\n\n for (let i = 0; i < n; i++) {\n this.createVideoPlayerApp(this.pendingPlayerRequests[i]);\n this.pendingPlayerRequests[i] = null;\n }\n this.pendingPlayerRequests = [];\n }\n\n private static initialize(options: PlayerOptionsInterface) {\n this.initializing = true;\n\n const systemService = SystemService.getInstance();\n systemService.appNamespace = appNamespace;\n\n const mediaCapabilities = MediaCapabilitiesService.getInstance();\n const autoplayCapabilities = AutoplayCapabilitiesService.getInstance();\n\n const overrides = options.overrides;\n const deferAutoplayDetection = overrides?.deferAutoplayDetection === true;\n\n return Promise\n .all([\n mediaCapabilities.detectCapabilities(),\n !deferAutoplayDetection && autoplayCapabilities.detectCapabilities(overrides?.blankVideoUrl),\n ])\n .then(() => {\n this.serviceCollection = {\n [ServiceName.System]: systemService,\n [ServiceName.MediaCapabilities]: mediaCapabilities,\n [ServiceName.AutoplayCapabilities]: autoplayCapabilities,\n };\n\n this.initialized = true;\n this.initializing = false;\n this.processPending();\n });\n }\n}\n\nexport function createVideoPlayer(options: PlayerOptionsInterface, callback?: VideoPlayerReadyCallback): Promise {\n return new Promise((resolve, reject) => {\n Shell.createVideoPlayer(options, (player: VideoPlayerInterface, error: StrAnyDict) => {\n if (Utilities.isFunction(callback)) {\n callback(player, error);\n }\n\n if (error != null) {\n reject(error);\n }\n else {\n resolve(player);\n }\n });\n });\n}\n\nexport function retrieveVideoPlayer(playerId: string): Promise {\n return Shell.retrieveVideoPlayer(playerId);\n}\n\nexport function removeVideoPlayer(playerId: string): Promise {\n return Shell.removeVideoPlayer(playerId);\n}\n\nexport function createResourceConfig(config?: DeepPartial): ResourceConfigurationInterface {\n return Shell.createResourceConfig(config);\n}\n\nexport function getSystemInfo(): SystemInfoApiInterface | null {\n return Shell.getSysInfoForUser();\n}\n\nexport function getPlatformInfo(): Promise {\n return Shell.getPlatformInfo();\n}\n\nexport function getAutoplayCapabilities(url?: string): Promise {\n return AutoplayCapabilitiesService.getInstance().detectCapabilities(url);\n}\n\nconst appNamespace = {\n ...sdk,\n createVideoPlayer,\n retrieveVideoPlayer,\n removeVideoPlayer,\n createResourceConfig,\n getSystemInfo,\n getPlatformInfo,\n getAutoplayCapabilities,\n};\n","import ObjectAssign from 'es6-object-assign';\nimport 'es6-promise/auto';\n\nexport * from './app/Shell';\nexport * from './iface/AdAdapterContextInterface';\nexport * from './iface/AdAdapterDelegateInterface';\nexport * from './iface/AdAdapterInterface';\nexport * from './iface/AdapterConfigInterface';\nexport * from './iface/AdapterContextInterface';\nexport * from './iface/AdBreakInfoInterface';\nexport * from './iface/AdBreakScheduleItemInterface';\nexport * from './iface/AdCuePointInterface';\nexport * from './iface/AdItemInterface';\nexport * from './iface/AdTagParametersInterface';\nexport * from './iface/AesEncryptionInterface';\nexport * from './iface/AudioTrackInterface';\nexport * from './iface/AudioTracksInterface';\nexport * from './iface/AutoplayInfoInterface';\nexport * from './iface/BuildInfoInterface';\nexport * from './iface/ConfigInterface';\nexport * from './iface/DataTransformerConfigInterface';\nexport * from './iface/DeepPartial';\nexport * from './iface/DestroyFunction';\nexport * from './iface/DestroyInterface';\nexport * from './iface/DimensionsInterface';\nexport * from './iface/Either';\nexport * from './iface/ErrorInfoInterface';\nexport * from './iface/ErrorRecoveryInterface';\nexport * from './iface/EventInterface';\nexport * from './iface/EventTargetInterface';\nexport * from './iface/FairPlayDrmInterface';\nexport * from './iface/HookContextInterface';\nexport * from './iface/HookInterface';\nexport * from './iface/LanguageTagInterface';\nexport * from './iface/LocalizationInterface';\nexport * from './iface/LoggerInterface';\nexport * from './iface/MetricInterface';\nexport * from './iface/PlaybackAdapterContextInterface';\nexport * from './iface/PlaybackAdapterDelegateInterface';\nexport * from './iface/PlaybackAdapterInterface';\nexport * from './iface/PlaybackMetricsInterface';\nexport * from './iface/PlayerDomInterface';\nexport * from './iface/PlayerOptionsInterface';\nexport * from './iface/PlaylistInterface';\nexport * from './iface/PlayreadyDrmInterface';\nexport * from './iface/PluginConfigInterface';\nexport * from './iface/PluginFactory';\nexport * from './iface/PluginFactoryResult';\nexport * from './iface/PluginInterface';\nexport * from './iface/PluginOptionsInterface';\nexport * from './iface/PluginServicesInterface';\nexport * from './iface/QualityInfoInterface';\nexport * from './iface/QualityInterface';\nexport * from './iface/RangeInterface';\nexport * from './iface/RequestOptionsInterface';\nexport * from './iface/ResourceAdCsaiInterface';\nexport * from './iface/ResourceAdDaiInterface';\nexport * from './iface/ResourceAdImaInterface';\nexport * from './iface/ResourceAdInterface';\nexport * from './iface/ResourceAdSsaiInterface';\nexport * from './iface/ResourceAdViewabilityTrackingInterface';\nexport * from './iface/ResourceConfigurationInterface';\nexport * from './iface/ResourceLocationDrmInterface';\nexport * from './iface/ResourceLocationInterface';\nexport * from './iface/ResourcePlaybackAbrInterface';\nexport * from './iface/ResourcePlaybackInterface';\nexport * from './iface/StreamMetadataInterface';\nexport * from './iface/SystemInfoInterface';\nexport * from './iface/TextTrackInterface';\nexport * from './iface/TextTrackSettingsInterface';\nexport * from './iface/TextTracksInterface';\nexport * from './iface/ThumbnailCueInterface';\nexport * from './iface/ThumbnailDataInterface';\nexport * from './iface/VideoPlayerInterface';\nexport * from './iface/WidevineDrmInterface';\nexport * from './sdk';\n\nObjectAssign.polyfill();\n"]}