@playkit-js/playkit-js-providers 2.39.4 → 2.39.5-canary.0-2e815cf
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/dist/playkit-analytics-service.js +1 -1
- package/dist/playkit-bookmark-service.js +1 -1
- package/dist/playkit-ott-provider.js +1 -1
- package/dist/playkit-ott-provider.js.map +1 -1
- package/dist/playkit-ovp-provider.js +1 -1
- package/dist/playkit-ovp-provider.js.map +1 -1
- package/dist/playkit-stats-service.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["./providers/webpack/universalModuleDefinition","./providers/webpack/bootstrap","./providers/./util/error/error.js","./providers/./util/error/severity.js","./providers/./util/error/category.js","./providers/./util/error/code.js","./providers/./entities/media-entry.js","./providers/./util/logger.js","./providers/./util/request-builder.js","./providers/./k-provider/common/base-service-result.js","./providers/./entities/media-format.js","./providers/./k-provider/common/response-types/kaltura-drm-playback-plugin-data.js","./providers/./k-provider/common/response-types/kaltura-access-control-message.js","./providers/./entities/media-sources.js","./providers/./entities/media-source.js","./providers/./k-provider/common/data-loader-manager.js","./providers/./k-provider/common/multi-request-builder.js","./providers/./entities/drm.js","./providers/./entities/image-source.js","./providers/./k-provider/common/base-provider.js","./providers/./util/clone.js","./providers/./entities/entry-list.js","./providers/./entities/bumper.js","./providers/./k-provider/ott/config.js","./providers/./k-provider/ott/services/ott-service.js","./providers/./k-provider/ott/loaders/data-loader-manager.js","./providers/./k-provider/ott/services/user-service.js","./providers/./k-provider/ott/loaders/session-loader.js","./providers/./k-provider/ott/services/asset-service.js","./providers/./k-provider/ott/response-types/kaltura-rule-action.js","./providers/./k-provider/ott/response-types/kaltura-playback-source.js","./providers/./k-provider/ott/response-types/kaltura-bumper-playback-plugin-data.js","./providers/./k-provider/ott/response-types/kaltura-playback-context.js","./providers/./k-provider/ott/response-types/kaltura-asset.js","./providers/./k-provider/ott/loaders/asset-loader.js","./providers/./k-provider/ott/loaders/asset-list-loader.js","./providers/./k-provider/ott/provider-parser.js","./providers/./k-provider/ott/provider.js","./providers/./k-provider/ott/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","Error","severity","category","code","data","this","_logger","error","RECOVERABLE","CRITICAL","NETWORK","SERVICE","PROVIDER","UNSUPPORTED_SCHEME","BAD_HTTP_STATUS","HTTP_ERROR","TIMEOUT","MALFORMED_DATA_URI","BAD_SERVER_RESPONSE","MULTIREQUEST_API_ERROR","API_RESPONSE_MISMATCH","ERROR","BLOCK_ACTION","MEDIA_STATUS_NOT_READY","MISSING_MANDATORY_PARAMS","MISSING_PLAY_SOURCE","METHOD_NOT_IMPLEMENTED","getLogger","MediaEntry","metadata","Map","sources","MediaSources","type","Type","UNKNOWN","toJSON","id","duration","dvrStatus","status","poster","assetReferenceType","VOD","LIVE","IMAGE","AUDIO","ON","OFF","JsLogger","VERSION","DEBUG","INFO","TIME","TRACE","WARN","createDefaultHandler","debug","enabledFor","getLevel","info","log","setHandler","setLevel","time","timeEnd","trace","useDefaults","warn","LogLevel","setLogger","logger","getLogLevel","setLogLevel","level","RequestBuilder","headers","async","timeout","maxAttempts","getUrl","serviceUrl","service","action","doHttpRequest","promise","Promise","resolve","reject","_requestPromise","url","Severity","Category","Code","_createXHR","request","XMLHttpRequest","onreadystatechange","readyState","response","JSON","parse","responseText","responseHeaders","_getResponseHeaders","_createError","text","open","method","retryConfig","requestTime","performance","now","ontimeout","_handleError","statusText","onerror","onabort","forEach","setRequestHeader","send","params","getAllResponseHeaders","split","filter","header","toLowerCase","indexOf","_attemptCounter","assign","attempt","ServiceResult","objectType","hasError","ServiceError","message","MediaFormat","DASH","mimeType","pathExt","HLS","WVM","MP4","MP3","SupportedStreamFormat","isProgressiveSource","formatName","sourceFormat","KalturaDrmPlaybackPluginData","drm","scheme","licenseURL","certificate","WIDEVINE_CENC","PLAYREADY_CENC","FAIRPLAY","KalturaAccessControlMessage","progressive","dash","hls","image","map","source","mediaFormat","push","h","MediaSource","mimetype","bandwidth","width","height","label","drmData","length","Array","isArray","DataLoaderManager","networkRetryConfig","_networkRetryConfig","add","loader","ks","execution_loader","isValid","_loaders","set","startIndex","_multiRequest","requests","executionLoaderResponseMap","from","val","index","_loadersResponseMap","fetchData","requestsMustSucceed","execute","then","_multiResponse","prepareData","success","err","loaderDataIndexes","results","slice","MultiRequestBuilder","requestParams","serviceDef","stringify","FAILED_PARSING_REQUEST","multiRequestResult","MultiRequestResult","result","errorResults","serviceResult","Drm","licenseUrl","ImageSource","entry","extractBaseThumbnailUrl","dataUrl","match","BaseProvider","options","playerVersion","_partnerId","partnerId","_widgetId","widgetId","_uiConfId","uiConfId","_isAnonymous","_ks","_playerVersion","defaultWidgetId","getMediaConfig","mediaInfo","getPlaylistConfig","playlistInfo","getEntryListConfig","entryListInfo","_verifyHasSources","concat","messages","clone","node","e","keys","EntryList","items","Bumper","clickThroughUrl","defaultConfig","serviceParams","apiVersion","OTTConfiguration","clientConfig","OTTService","getMultiRequest","config","ottParams","multiReq","OTTDataLoaderManager","OTTUserService","anonymousLogin","udid","OTTSessionLoader","buildRequests","UserService","_requests","_response","OTTAssetService","getPlaybackContext","assetId","playbackContextOptions","contextDataParams","assetType","KalturaRuleAction","BLOCK","START_DATE_OFFSET","END_DATE_OFFSET","USER_BLOCK","ALLOW_PLAYBACK","BLOCK_PLAYBACK","APPLY_DISCOUNT_MODULE","KalturaPlaybackSource","format","adsPolicy","adsParam","fileId","protocols","hasDrmData","getProtocol","protocol","returnValue","KalturaBumpersPlaybackPluginData","streamertype","PROGRESSIVE","KalturaPlaybackContext","actions","plugins","plugin","hasBlockAction","undefined","getBlockAction","find","getErrorMessages","DOWNLOAD","TRAILER","CATCHUP","START_OVER","PLAYBACK","KalturaAsset","description","createDate","endDate","metas","_formatTagsMetas","tags","pictures","images","objectToParse","parsed","objects","MEDIA","RECORDING","EPG","EPG_INTERNAL","EPG_EXTERNAL","NPVR","OTTAssetLoader","_entryId","entryId","playbackContext","mediaDataResult","playBackContextResult","OTTAssetListLoader","playlistItems","entries","_entries","AssetReferenceType","item","MediaTypeCombinations","mediaAssetData","enableTrickPlay","DvrStatus","parseInt","externalIds","OTTProviderParser","getMediaEntry","assetResponse","requestData","mediaEntry","_fillBaseData","mediaAsset","kalturaSources","filteredKalturaSources","_filterSourcesByFormats","formats","_getParsedSources","typeData","_getMediaType","mediaType","contextType","Math","max","apply","getEntryList","playlistResponse","requestEntries","entryList","requestEntry","getBumper","progressiveBumper","bumper","StreamerType","metaData","reconstructMetadata","createdAt","epgId","recordingId","_getPoster","addToMetaObject","list","categoryObj","test","pic","includes","addAdaptiveSource","parsedSource","_parseAdaptiveSource","kalturaSource","mediaSource","playUrl","drmParams","Scheme","OTTProvider","env","networkRetryParameters","_dataLoader","mediaProtocol","assetFileIds","fileIds","context","streamerType","urlType","adapterData","_parseDataFromResponse","mediaConfig","session","isAnonymous","_getDefaultSourcesObject","has","sessionLoader","assetLoader","_getSourcesObject","_parseEntryListDataFromResponse","playlistConfig","playlistLoader","dvr","vr","sourcesObject","mediaSources","NAME","__NAME__","__VERSION__","ContextType","MediaType"],"mappings":"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","file":"playkit-ott-provider.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ott\"] = factory();\n\telse\n\t\troot[\"playkit\"] = root[\"playkit\"] || {}, root[\"playkit\"][\"providers\"] = root[\"playkit\"][\"providers\"] || {}, root[\"playkit\"][\"providers\"][\"ott\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 19);\n","//@flow\nimport getLogger from '../logger';\nimport {Severity} from './severity';\nimport type {SeverityType} from './severity';\nimport {Code} from './code';\nimport type {CodeType} from './code';\nimport {Category} from './category';\nimport type {CategoryType} from './category';\n\nconst CLASS_NAME: string = 'Error';\n\n/**\n * @classdesc This is a description of the error class.\n */\nexport default class Error {\n severity: number;\n category: number;\n code: number;\n data: any;\n /**\n * @enum {number}\n */\n static Severity: SeverityType = Severity;\n /**\n * @enum {number}\n */\n static Category: CategoryType = Category;\n /**\n * @enum {number}\n */\n static Code: CodeType = Code;\n static _logger: any = getLogger(CLASS_NAME);\n\n /**\n * @constructor\n * @param {number} severity - error's severity\n * @param {number} category - error's category.\n * @param {number} code - error's code.\n * @param {any} data - additional data for the error.\n */\n constructor(severity: number, category: number, code: number, data: any = {}) {\n this.severity = severity;\n this.category = category;\n this.code = code;\n this.data = data;\n Error._logger.error(`Category:${category} | Code:${code} |`, data);\n }\n}\n","//@flow\n\ntype SeverityType = {[severity: string]: number};\n\nconst Severity: SeverityType = {\n /**\n * An error occurred, but the Player is attempting to recover from the error.\n *\n * If the Player cannot ultimately recover, it still may not throw a CRITICAL\n * error. For example, retrying for a media segment will never result in\n * a CRITICAL error (the Player will just retry forever).\n */\n RECOVERABLE: 1,\n /**\n * A critical error that the library cannot recover from. These usually cause\n * the Player to stop loading or updating. A new manifest must be loaded\n * to reset the library.\n */\n CRITICAL: 2\n};\n\nexport {Severity};\nexport type {SeverityType};\n","//@flow\ntype CategoryType = {[category: string]: number};\n\nconst Category: CategoryType = {\n /** Errors from the network stack. */\n NETWORK: 1,\n SERVICE: 2,\n PROVIDER: 3\n};\n\nexport {Category};\nexport type {CategoryType};\n","//@flow\n\ntype CodeType = {[code: string]: number};\n\nconst Code: CodeType = {\n /**\n * A network request was made using an unsupported URI scheme.\n */\n UNSUPPORTED_SCHEME: 1000,\n\n /**\n * An HTTP network request returned an HTTP status that indicated a failure.\n */\n BAD_HTTP_STATUS: 1001,\n\n /**\n * An HTTP network request failed with an error, but not from the server.\n */\n HTTP_ERROR: 1002,\n\n /**\n * A network request timed out.\n */\n TIMEOUT: 1003,\n\n /**\n * A network request was made with a malformed data URI.\n */\n MALFORMED_DATA_URI: 1004,\n\n /**\n * The server responsded with 2xx response, but it couldn't be parsed\n */\n BAD_SERVER_RESPONSE: 1005,\n\n /**\n * The server response had a valid structure but contained an error from the API\n */\n MULTIREQUEST_API_ERROR: 1006,\n\n /**\n * The server response had a valid structure and valid API result, but it did not match the request\n */\n API_RESPONSE_MISMATCH: 1007,\n\n /**\n * The server responded with an error\n */\n ERROR: 2000,\n\n /**\n * The server responded with a block action\n */\n BLOCK_ACTION: 2001,\n\n /**\n * The server responded with status import or pre convert\n */\n MEDIA_STATUS_NOT_READY: 2002,\n\n /**\n * The provider is missing mandatory parameter/s\n */\n\n MISSING_MANDATORY_PARAMS: 3000,\n\n /**\n * The server responded with empty sources objects (for HLS, Dash and progressive)\n */\n MISSING_PLAY_SOURCE: 3001,\n\n /**\n * The provider doesn't implement the called api\n */\n METHOD_NOT_IMPLEMENTED: 3002\n};\n\nexport {Code};\nexport type {CodeType};\n","//@flow\nimport MediaSources from './media-sources';\n\nexport default class MediaEntry {\n static Type: {[type: string]: string} = {\n VOD: 'Vod',\n LIVE: 'Live',\n IMAGE: 'Image',\n AUDIO: 'Audio',\n UNKNOWN: 'Unknown'\n };\n static DvrStatus: {[type: string]: number} = {\n ON: 1,\n OFF: 0\n };\n\n /**\n * @member - entry id\n * @type {string}\n */\n id: string;\n /**\n * @member - entry name\n * @type {string}\n */\n name: string;\n /**\n * @member - entry sources\n * @type {MediaSources}\n */\n sources: MediaSources;\n /**\n * @member - entry duration\n * @type {number}\n */\n duration: number;\n /**\n * @member - entry type\n * @type {string}\n */\n type: string;\n /**\n * @member - entry metadata\n * @type {Object}\n */\n metadata: Object;\n /**\n * @member - DVR status\n * @type {number}\n */\n dvrStatus: number;\n /**\n * @member - media status\n * @type {number}\n */\n status: number;\n /**\n * @member - media poster\n * @type {string | Array<Object>}\n */\n poster: string | Array<Object>;\n\n /**\n * @member - assetReferenceType\n * @type {string }\n */\n assetReferenceType: string;\n\n /**\n * @constructor\n */\n constructor() {\n this.metadata = new Map();\n this.sources = new MediaSources();\n this.type = MediaEntry.Type.UNKNOWN;\n }\n\n /**\n * Convert class to native js object.\n * @returns {ProviderMediaEntryObject} - The json class object.\n */\n toJSON(): ProviderMediaEntryObject {\n return {\n id: this.id,\n name: this.name,\n sources: this.sources.toJSON(),\n duration: this.duration,\n dvrStatus: this.dvrStatus,\n status: this.status,\n metadata: this.metadata,\n type: this.type,\n poster: this.poster,\n assetReferenceType: this.assetReferenceType\n };\n }\n}\n","//@flow\nexport type LogLevelObject = {value: number, name: string};\nexport type LogLevelType = {[level: string]: LogLevelObject};\nexport type loggerFunctionType = {\n VERSION: String,\n DEBUG: LogLevelObject,\n ERROR: LogLevelObject,\n INFO: LogLevelObject,\n OFF: LogLevelObject,\n TIME: LogLevelObject,\n TRACE: LogLevelObject,\n WARN: LogLevelObject,\n createDefaultHandler: Function,\n debug: Function,\n enabledFor: Function,\n error: Function,\n get: Function,\n getLevel: Function,\n info: Function,\n log: Function,\n setHandler: Function,\n setLevel: Function,\n time: Function,\n timeEnd: Function,\n trace: Function,\n useDefaults: Function,\n warn: Function\n};\n\nexport type LoggerType = {\n getLogger: loggerFunctionType,\n LogLevel: LogLevelType\n};\n\nlet JsLogger = {\n get: () => ({\n VERSION: '',\n DEBUG: {value: '', name: ''},\n ERROR: {value: '', name: ''},\n INFO: {value: '', name: ''},\n OFF: {value: '', name: ''},\n TIME: {value: '', name: ''},\n TRACE: {value: '', name: ''},\n WARN: {value: '', name: ''},\n createDefaultHandler: () => {},\n debug: () => {},\n enabledFor: () => {},\n error: () => {},\n get: () => {},\n getLevel: () => {},\n info: () => {},\n log: () => {},\n setHandler: () => {},\n setLevel: () => {},\n time: () => {},\n timeEnd: () => {},\n trace: () => {},\n useDefaults: () => {},\n warn: () => {}\n })\n};\n\nlet LogLevel: LogLevelType = {};\n/**\n * set logger\n * @param {LoggerType} logger - the logger\n * @returns {void}\n */\nfunction setLogger(logger: ?LoggerType): void {\n if (logger && typeof logger.getLogger === 'function') {\n JsLogger.get = logger.getLogger;\n }\n if (logger && logger.LogLevel) {\n LogLevel = logger.LogLevel;\n }\n}\n\n/**\n * get a logger\n * @param {?string} name - the logger name\n * @returns {Object} - the logger class\n */\nfunction getLogger(name?: string): Object {\n //$FlowFixMe\n return JsLogger.get(name);\n}\n\n/**\n * get the log level\n * @param {?string} name - the logger name\n * @returns {LogLevelObject} - the log level\n */\nfunction getLogLevel(name?: string): LogLevelObject {\n return getLogger(name).getLevel();\n}\n\n/**\n * sets the logger level\n * @param {LogLevelObject} level - the log level\n * @param {?string} name - the logger name\n * @returns {void}\n */\nfunction setLogLevel(level: LogLevelObject, name?: string): void {\n getLogger(name).setLevel(level);\n}\n\nexport default getLogger;\nexport {getLogLevel, setLogLevel, setLogger, LogLevel};\n","//@flow\nimport Error from './error/error';\n\nconst KALTURA_HEADER_PREFIX: string = 'x-';\n\nexport default class RequestBuilder {\n /**\n * @member - Service name\n * @type {string}\n */\n service: string;\n /**\n * @member - Service action\n * @type {string}\n */\n action: string;\n /**\n * @member - Service params\n * @type {any}\n */\n params: any;\n /**\n * @memberof - Service headers\n * @type {Map<string, string>}\n */\n headers: Map<string, string>;\n /**\n * @memberof - Service URL\n * @type {string}\n */\n url: string;\n /**\n * @memberof - Service method (POST,GET,DELETE etc..)\n * @type {string}\n */\n method: string;\n /**\n * @memberof - Service tag\n * @type {string}\n */\n tag: string;\n /**\n * @memberof - the response headers of the arra\n * @type {Array<string>}\n */\n responseHeaders: Array<string>;\n /**\n * @description network retry configuration\n * @memberof RequestBuilder\n * @type {ProviderNetworkRetryParameters}\n */\n retryConfig: ProviderNetworkRetryParameters = {\n async: true,\n timeout: 0,\n maxAttempts: 4\n };\n\n /**\n * @description number of xhr attempts for the same multi - request.\n * @memberof RequestBuilder\n * @type {number}\n * @private\n */\n _attemptCounter: number = 1;\n\n /**\n * @description hold the promise result of the XHR request(s) - if all tries fails, it rejects with the error.\n * @memberof RequestBuilder\n * @type {Object}\n * @private\n */\n _requestPromise: Object;\n\n /**\n * @constructor\n * @param {Map<string, string>} headers The request headers\n */\n constructor(headers: Map<string, string> = new Map()) {\n this.headers = headers;\n }\n\n /**\n * Builds restful service URL\n * @function getUrl\n * @param {string} serviceUrl - The service base URL\n * @returns {string} The service URL\n */\n getUrl(serviceUrl: string): string {\n return serviceUrl + '/service/' + this.service + (this.action ? '/action/' + this.action : '');\n }\n\n /**\n * Executes service\n * @function doHttpRequest\n * @returns {Promise.<any>} Service response as promise\n */\n doHttpRequest(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n this._requestPromise = {\n resolve,\n reject\n };\n });\n if (!this.url) {\n this._requestPromise.reject(\n new Error(Error.Severity.CRITICAL, Error.Category.NETWORK, Error.Code.MALFORMED_DATA_URI, {\n url: this.url\n })\n );\n }\n this._createXHR();\n return promise;\n }\n\n _createXHR(): void {\n let request = new XMLHttpRequest();\n request.onreadystatechange = () => {\n if (request.readyState === 4) {\n if (request.status === 200) {\n try {\n const response = JSON.parse(request.responseText);\n this.responseHeaders = this._getResponseHeaders(request);\n // the promise returns the response for backwards compatibility\n return this._requestPromise.resolve(response);\n } catch (error) {\n this._requestPromise.reject(\n this._createError(request, Error.Code.BAD_SERVER_RESPONSE, {\n text: request.responseText\n })\n );\n }\n }\n }\n };\n request.open(this.method, this.url, this.retryConfig.async);\n if (this.retryConfig.async && this.retryConfig.timeout) {\n request.timeout = this.retryConfig.timeout;\n }\n const requestTime = performance.now();\n request.ontimeout = () => {\n this._handleError(request, Error.Code.TIMEOUT, {\n timeout: (performance.now() - requestTime) / 1000,\n statusText: request.statusText\n });\n };\n request.onerror = request.onabort = () => {\n this._handleError(request, Error.Code.HTTP_ERROR, {\n text: request.responseText,\n statusText: request.statusText\n });\n };\n this.headers.forEach((value, key) => {\n request.setRequestHeader(key, value);\n });\n request.send(this.params);\n }\n\n _getResponseHeaders(request: XMLHttpRequest): Array<string> {\n return request\n .getAllResponseHeaders()\n .split('\\n')\n .filter(header => header.toLowerCase().indexOf(KALTURA_HEADER_PREFIX) === 0);\n }\n\n _handleError(request: XMLHttpRequest, code: number, data: Object): Promise<*> | void {\n const error = this._createError(request, code, data);\n request.onreadystatechange = function () {};\n request.onerror = function () {};\n request.ontimeout = function () {};\n request.onabort = function () {};\n if (this.retryConfig.maxAttempts && this._attemptCounter < this.retryConfig.maxAttempts) {\n this._attemptCounter++;\n this._createXHR();\n } else {\n return this._requestPromise.reject(error);\n }\n }\n\n _createError(request: XMLHttpRequest, code: number, data: Object): Error {\n Object.assign(data, {\n url: this.url,\n headers: this._getResponseHeaders(request),\n attempt: this._attemptCounter\n });\n return new Error(Error.Severity.CRITICAL, Error.Category.NETWORK, code, data);\n }\n}\n","//@flow\nexport default class ServiceResult {\n /**\n * @member - Is service returned an error\n * @type {boolean}\n */\n hasError: boolean = false;\n /**\n * @member - The service error\n * @type {ServiceError}\n */\n error: ServiceError;\n /**\n * @member - The service result data\n * @type {Object}\n */\n data: Object;\n\n /**\n * @constructor\n * @param {Object} response - Service response\n */\n constructor(response: Object) {\n if (response.objectType === 'KalturaAPIException') {\n this.hasError = true;\n this.error = new ServiceError(response.code, response.message);\n } else if (response.error && response.error.objectType === 'KalturaAPIException') {\n this.hasError = true;\n this.error = new ServiceError(response.error.code, response.error.message);\n } else {\n this.data = response;\n }\n }\n}\n\nclass ServiceError {\n /**\n * @member - The error code\n * @type {string}\n */\n code: string;\n /**\n * @member - The error message\n * @type {string}\n */\n message: string;\n\n /**\n * @constructor\n * @param {string} code - The result code\n * @param {string} message - The result message\n */\n constructor(code: string, message: string) {\n this.code = code;\n this.message = message;\n }\n}\n","//@flow\nexport const MediaFormat: {[name: string]: ProviderMediaFormatType} = {\n DASH: {\n name: 'dash',\n mimeType: 'application/dash+xml',\n pathExt: 'mpd'\n },\n HLS: {\n name: 'hls',\n mimeType: 'application/x-mpegURL',\n pathExt: 'm3u8'\n },\n WVM: {\n name: 'wvm',\n mimeType: 'video/wvm',\n pathExt: 'wvm'\n },\n MP4: {\n name: 'mp4',\n mimeType: 'video/mp4',\n pathExt: 'mp4'\n },\n MP3: {\n name: 'mp3',\n mimeType: 'audio/mpeg',\n pathExt: 'mp3'\n }\n};\n\nexport const SupportedStreamFormat: Map<string, ProviderMediaFormatType> = new Map([\n ['mpegdash', MediaFormat.DASH],\n ['applehttp', MediaFormat.HLS],\n ['url', MediaFormat.MP4]\n]);\n\n/**\n * returns a boolean whether a source is progressive or not\n * @param {string} formatName - the format name\n * @returns {boolean} - if source is progressive or not\n */\nfunction isProgressiveSource(formatName: string): boolean {\n const sourceFormat = SupportedStreamFormat.get(formatName);\n return !!sourceFormat && sourceFormat.name === MediaFormat.MP4.name;\n}\n\nexport {isProgressiveSource};\n","//@flow\nexport class KalturaDrmPlaybackPluginData {\n static Scheme: {[scheme: string]: string} = {\n 'drm.PLAYREADY_CENC': 'com.microsoft.playready',\n 'drm.WIDEVINE_CENC': 'com.widevine.alpha',\n 'fairplay.FAIRPLAY': 'com.apple.fairplay',\n WIDEVINE_CENC: 'com.widevine.alpha',\n PLAYREADY_CENC: 'com.microsoft.playready',\n FAIRPLAY: 'com.apple.fairplay'\n };\n\n /**\n * @member - The drm scheme\n * @type {string}\n */\n scheme: string;\n\n /**\n * @member - The license URL\n * @type {string}\n */\n licenseURL: string;\n\n /**\n * @member - The drm certificate\n * @type {?string}\n */\n certificate: ?string;\n\n /**\n * @constructor\n * @param {Object} drm The json response\n */\n constructor(drm: any) {\n this.scheme = drm.scheme;\n this.licenseURL = drm.licenseURL;\n this.certificate = drm.certificate;\n }\n}\n","//@flow\nexport class KalturaAccessControlMessage {\n /**\n * @member - The access control message\n * @type {string}\n */\n message: string;\n /**\n * @member - The access control message code\n * @@type {string}\n */\n code: string;\n\n /**\n * @constructor\n * @param {Object} data The json response\n */\n constructor(data: Object) {\n this.message = data.message;\n this.code = data.code;\n }\n}\n","// @flow\nimport MediaSource from './media-source';\nimport {MediaFormat} from './media-format';\nimport ImageSource from './image-source';\n\nexport default class MediaSources {\n /**\n * Progressive download media sources container.\n * @type {Array<MediaSource>}\n * @public\n */\n progressive: Array<MediaSource>;\n /**\n * Dash media sources container.\n * @type {Array<MediaSource>}\n * @public\n */\n dash: Array<MediaSource>;\n /**\n * Hls media sources container.\n * @type {Array<MediaSource>}\n * @public\n */\n hls: Array<MediaSource>;\n image: Array<ImageSource>;\n captions: Array<PKExternalCaptionObject>;\n\n /**\n * @constructor\n */\n constructor() {\n this.progressive = [];\n this.dash = [];\n this.hls = [];\n this.image = [];\n }\n\n /**\n * Maps the source to one of the containers according to his media format.\n * @param {MediaSource} source - The source to add to one of the containers.\n * @param {MediaFormat} mediaFormat - The media format of the source.\n * @returns {void}\n */\n map(source: MediaSource, mediaFormat: ?ProviderMediaFormatType) {\n if (mediaFormat) {\n switch (mediaFormat.name) {\n case MediaFormat.MP4.name:\n this.progressive.push(source);\n break;\n case MediaFormat.DASH.name:\n this.dash.push(source);\n break;\n case MediaFormat.HLS.name:\n this.hls.push(source);\n break;\n default:\n break;\n }\n }\n }\n\n /**\n * Convert class to native js object.\n * @returns {ProviderMediaSourcesObject} - The json class object.\n */\n toJSON(): ProviderMediaSourcesObject {\n const response: ProviderMediaSourcesObject = {\n progressive: [],\n dash: [],\n hls: [],\n image: []\n };\n this.progressive.forEach(p => response.progressive.push(p.toJSON()));\n this.hls.forEach(h => response.hls.push(h.toJSON()));\n this.dash.forEach(d => response.dash.push(d.toJSON()));\n response.image = this.image;\n return response;\n }\n}\n","//@flow\nimport Drm from './drm';\n\nexport default class MediaSource {\n /**\n * @member - media source id\n * @type {string}\n */\n id: string;\n /**\n * @member - media source url\n * @type {string}\n */\n url: string;\n /**\n * @member - media source mimetype\n * @type {string}\n */\n mimetype: string;\n /**\n * @member - media source drm data\n * @type {Array<Drm>}\n */\n drmData: Array<Drm>;\n /**\n * @member - media source bandwidth\n * @type {number}\n */\n bandwidth: number;\n /**\n * @member - media source width\n * @type {number}\n */\n width: number;\n /**\n * @member - media source height\n * @type {number}\n */\n height: number;\n /**\n * @member - media source label\n * @type {string}\n */\n label: string;\n\n /**\n * Convert class to native js object.\n * @returns {ProviderMediaSourceObject} - The json class object.\n */\n toJSON(): ProviderMediaSourceObject {\n const response: ProviderMediaSourceObject = {\n id: this.id,\n url: this.url,\n mimetype: this.mimetype\n };\n if (this.bandwidth) response.bandwidth = this.bandwidth;\n if (this.width) response.width = this.width;\n if (this.height) response.height = this.height;\n if (this.label) response.label = this.label;\n if (this.drmData && this.drmData.length > 0) {\n response.drmData = [];\n this.drmData.forEach(d => {\n if (Array.isArray(response.drmData)) {\n response.drmData.push(d.toJSON());\n }\n });\n }\n return response;\n }\n}\n","// @flow\nimport MultiRequestBuilder, {MultiRequestResult} from './multi-request-builder';\nimport Error from '../../util/error/error';\n\nexport default class DataLoaderManager {\n /**\n * @member - Loaders response map index\n * @type {Map<string,Array<number>>}\n * @private\n */\n _loadersResponseMap: Map<string, Array<number>> = new Map();\n /**\n * @member - Loaders multi request\n * @type {MultiRequestBuilder}\n * @protected\n */\n _multiRequest: MultiRequestBuilder;\n /**\n * @member - Loaders multi response\n * @type {MultiRequestResult}\n * @private\n */\n _multiResponse: MultiRequestResult;\n /**\n * @member - Loaders to execute\n * @type {Map<string,Function>}\n * @private\n */\n _loaders: Map<string, ILoader> = new Map();\n\n _networkRetryConfig: ProviderNetworkRetryParameters;\n\n constructor(networkRetryConfig: ProviderNetworkRetryParameters) {\n this._networkRetryConfig = networkRetryConfig;\n }\n\n /**\n * Add loader to execution loaders map\n * @function\n * @param {Function} loader Loader to add\n * @param {Object} params Loader params\n * @param {string} ks ks\n * @returns {void}\n */\n add(loader: Function, params: Object, ks?: string): void {\n let execution_loader = new loader(params);\n if (execution_loader.isValid()) {\n this._loaders.set(loader.id, execution_loader);\n // Get the start index from the multiReqeust before adding current execution_loader requests\n let startIndex = this._multiRequest.requests.length;\n // Get the requests\n let requests = execution_loader.requests;\n this._multiRequest.retryConfig = this._networkRetryConfig;\n // Add requests to multiRequest queue\n requests.forEach(request => {\n request.params = request.params || {};\n request.params.ks = request.params.ks || ks;\n this._multiRequest.add(request);\n });\n // Create range array of current execution_loader requests\n let executionLoaderResponseMap = Array.from(new Array(requests.length), (val, index) => index + startIndex);\n // Add to map\n this._loadersResponseMap.set(loader.id, executionLoaderResponseMap);\n }\n }\n\n /**\n * Get data from all loaders using multi request\n * @param {boolean} requestsMustSucceed whether all of the requests must succeed or not\n * @function\n * @returns {Promise} Promise\n */\n fetchData(requestsMustSucceed?: boolean): Promise<any> {\n return new Promise((resolve, reject) => {\n this._multiRequest.execute(requestsMustSucceed).then(\n data => {\n this._multiResponse = data.response;\n let preparedData: Object = this.prepareData(data.response);\n if (preparedData.success) {\n resolve(this._loaders);\n } else {\n reject(\n new Error(Error.Severity.CRITICAL, Error.Category.NETWORK, Error.Code.API_RESPONSE_MISMATCH, {\n headers: data.headers\n })\n );\n }\n },\n err => {\n reject(err);\n }\n );\n });\n }\n\n /**\n * Prepare fetched data\n * @function\n * @param {MultiRequestResult} response - The multi request result\n * @returns {Object} - The prepared data\n */\n prepareData(response: MultiRequestResult): Object {\n this._loaders.forEach((loader, name) => {\n let loaderDataIndexes = this._loadersResponseMap.get(name);\n try {\n if (loaderDataIndexes && loaderDataIndexes.length > 0) {\n loader.response = response.results.slice(loaderDataIndexes[0], loaderDataIndexes[loaderDataIndexes.length - 1] + 1);\n }\n } catch (err) {\n return {success: false, error: err};\n }\n });\n return {success: true, data: this._loaders};\n }\n}\n","//@flow\nimport RequestBuilder from '../../util/request-builder';\nimport getLogger from '../../util/logger';\nimport ServiceResult from './base-service-result';\nimport Error from '../../util/error/error';\n\nexport default class MultiRequestBuilder extends RequestBuilder {\n static _logger = getLogger('MultiRequestBuilder');\n /**\n * @memberof - MultiRequestBuilder\n * @type {Array<RequestBuilder>}\n */\n requests: Array<RequestBuilder> = [];\n /**\n * Adds request to requests array\n * @function add\n * @param {RequestBuilder} request The request\n * @returns {MultiRequestBuilder} The multiRequest\n */\n add(request: RequestBuilder): MultiRequestBuilder {\n this.requests.push(request);\n const requestParams = {};\n const serviceDef: Object = {service: request.service, action: request.action};\n Object.assign(requestParams, {[this.requests.length]: Object.assign(serviceDef, request.params)});\n Object.assign(requestParams, this.params);\n this.params = requestParams;\n return this;\n }\n\n /**\n * Executes a multi request\n * @function execute\n * @param {boolean} requestsMustSucceed whether all of the requests must succeed or not\n * @returns {Promise} The multirequest execution promise\n */\n execute(requestsMustSucceed?: boolean): Promise<Object> {\n return new Promise((resolve, reject) => {\n try {\n this.params = JSON.stringify(this.params);\n } catch (err) {\n MultiRequestBuilder._logger.error(`${err.message}`);\n reject(\n new Error(Error.Severity.CRITICAL, Error.Category.PROVIDER, Error.Code.FAILED_PARSING_REQUEST, {\n error: err,\n params: this.params\n })\n );\n }\n this.doHttpRequest().then(\n data => {\n const multiRequestResult = new MultiRequestResult(data, requestsMustSucceed);\n if (multiRequestResult.success) {\n resolve({\n headers: this.responseHeaders,\n response: multiRequestResult\n });\n } else {\n reject(\n new Error(Error.Severity.CRITICAL, Error.Category.NETWORK, Error.Code.MULTIREQUEST_API_ERROR, {\n url: this.url,\n headers: this.responseHeaders,\n results: multiRequestResult.results\n })\n );\n }\n },\n err => {\n reject(err);\n }\n );\n });\n }\n}\n\nexport class MultiRequestResult {\n static _logger = getLogger('MultiRequestResult');\n /**\n * @memberof MultiRequestResult\n * @type {boolean}\n */\n success: boolean;\n /**\n * @memberof MultiRequestResult\n * @type {Object}\n */\n results: Array<ServiceResult> = [];\n /**\n * @constructor\n * @param {Object} response data\n * @param {boolean} requestsMustSucceed whether all of the requests must succeed\n */\n constructor(response: Object, requestsMustSucceed?: boolean = true) {\n const result = response.result ? response.result : response;\n const responseArr = Array.isArray(result) ? result : [result];\n const results = responseArr.map(result => new ServiceResult(result));\n const errorResults = results.filter(serviceResult => serviceResult.hasError);\n\n errorResults.forEach(serviceResult => {\n MultiRequestResult._logger.error(\n `Service returned an error with error code: ${serviceResult.error.code} and message: ${serviceResult.error.message}.`\n );\n });\n\n this.results = results;\n if ((requestsMustSucceed && errorResults.length) || errorResults.length === this.results.length) {\n this.success = false;\n } else {\n this.results = this.results.filter(serviceResult => !serviceResult.hasError);\n this.success = true;\n }\n }\n}\n","//@flow\nexport default class Drm {\n /**\n * @member - license url\n * @type {string}\n */\n licenseUrl: string;\n /**\n * @member - drm scheme\n * @type {string}\n */\n scheme: string;\n\n /**\n * @member - drm certificate\n * @type {string}\n */\n certificate: string;\n\n /**\n * @constructor\n * @param {string} licenseUrl - the license url\n * @param {string} scheme - the drm scheme\n * @param {?string} certificate - the drm certificate\n */\n constructor(licenseUrl: string, scheme: string, certificate: ?string) {\n this.licenseUrl = licenseUrl;\n this.scheme = scheme;\n if (certificate) {\n this.certificate = certificate;\n }\n }\n\n /**\n * Convert class to native js object.\n * @returns {ProviderDrmDataObject} - The json class object.\n */\n toJSON(): ProviderDrmDataObject {\n const response: ProviderDrmDataObject = {\n licenseUrl: this.licenseUrl,\n scheme: this.scheme\n };\n if (this.certificate) response.certificate = this.certificate;\n return response;\n }\n}\n","//@flow\n\nconst BASE_THUMBNAIL_URL_TEMPLATE = '.+entry_id/[a-zA-Z0-9_]+/';\n\nexport default class ImageSource {\n /**\n * @member - media source id\n * @type {string}\n */\n id: string;\n /**\n * @member - media source url\n * @type {string}\n */\n url: string;\n /**\n * @member - media source mimetype\n * @type {string}\n */\n mimetype: string;\n\n constructor(entry: Object) {\n this.id = entry.id;\n this.url = ImageSource.extractBaseThumbnailUrl(entry.dataUrl);\n this.mimetype = '';\n }\n\n /**\n * Extract the base thumbnail url.\n * @param {string} url - dataUrl.\n * @returns {string} - The base thumbnail url.\n */\n static extractBaseThumbnailUrl(url: string): string {\n // $FlowFixMe\n return url.match(BASE_THUMBNAIL_URL_TEMPLATE)[0].slice(0, -1);\n }\n}\n","// @flow\nimport {getLogLevel, setLogLevel, setLogger, type LogLevelType, LogLevel} from '../../util/logger';\nimport DataLoaderManager from './data-loader-manager';\nimport Error from '../../util/error/error';\n\nexport default class BaseProvider<MI> {\n _partnerId: number;\n _widgetId: ?string;\n _ks: string;\n _uiConfId: ?number;\n _dataLoader: DataLoaderManager;\n _playerVersion: string;\n _logger: any;\n _isAnonymous: boolean;\n _networkRetryConfig: ProviderNetworkRetryParameters = {\n async: true,\n timeout: 0,\n maxAttempts: 4\n };\n\n get partnerId(): number {\n return this._partnerId;\n }\n\n get widgetId(): string {\n return this._widgetId || this.defaultWidgetId;\n }\n\n get defaultWidgetId(): string {\n return '_' + this._partnerId;\n }\n\n get uiConfId(): ?number {\n return this._uiConfId;\n }\n\n get ks(): string {\n return this._ks;\n }\n\n set ks(value: string): void {\n this._ks = value;\n }\n\n get playerVersion(): string {\n return this._playerVersion;\n }\n\n get isAnonymous(): boolean {\n return this._isAnonymous;\n }\n\n constructor(options: ProviderOptionsObject, playerVersion: string) {\n setLogger(options.logger);\n this._partnerId = options.partnerId;\n this._widgetId = options.widgetId;\n this._uiConfId = options.uiConfId;\n this._isAnonymous = !options.ks;\n this._ks = options.ks || '';\n this._playerVersion = playerVersion;\n }\n\n // eslint-disable-next-line no-unused-vars\n getMediaConfig(mediaInfo: MI): Promise<ProviderMediaConfigObject> {\n return Promise.reject(\n new Error(Error.Severity.CRITICAL, Error.Category.PROVIDER, Error.Code.METHOD_NOT_IMPLEMENTED, {\n message: 'getMediaConfig method must be implement by the derived class'\n })\n );\n }\n\n // eslint-disable-next-line no-unused-vars\n getPlaylistConfig(playlistInfo: ProviderPlaylistInfoObject): Promise<ProviderPlaylistObject> {\n return Promise.reject(\n new Error(Error.Severity.CRITICAL, Error.Category.PROVIDER, Error.Code.METHOD_NOT_IMPLEMENTED, {\n message: 'The provider does not support loading playlist by id'\n })\n );\n }\n\n // eslint-disable-next-line no-unused-vars\n getEntryListConfig(entryListInfo: ProviderEntryListObject): Promise<ProviderPlaylistObject> {\n return Promise.reject(\n new Error(Error.Severity.CRITICAL, Error.Category.PROVIDER, Error.Code.METHOD_NOT_IMPLEMENTED, {\n message: 'The provider does not support loading entry list'\n })\n );\n }\n\n _verifyHasSources(sources: ProviderMediaConfigSourcesObject) {\n if (sources.hls.concat(sources.dash, sources.progressive, sources.image).length === 0) {\n throw new Error(Error.Severity.CRITICAL, Error.Category.SERVICE, Error.Code.MISSING_PLAY_SOURCE, {\n action: '',\n messages: `No play source for entry id: ${sources.id}`\n });\n }\n }\n\n get LogLevel(): LogLevelType {\n return LogLevel;\n }\n\n getLogLevel(name?: string): Object {\n return getLogLevel(name);\n }\n\n setLogLevel(level: Object, name?: string): void {\n setLogLevel(level, name);\n }\n}\n","const clone = data => {\n let node;\n if (Array.isArray(data)) {\n node = data.length > 0 ? data.slice(0) : [];\n node.forEach((e, i) => {\n if ((typeof e === 'object' && e !== {}) || (Array.isArray(e) && e.length > 0)) {\n node[i] = clone(e);\n }\n });\n } else if (typeof data === 'object') {\n node = Object.assign({}, data);\n Object.keys(node).forEach(key => {\n if ((typeof node[key] === 'object' && node[key] !== {}) || (Array.isArray(node[key]) && node[key].length > 0)) {\n node[key] = clone(node[key]);\n }\n });\n } else {\n node = data;\n }\n return node;\n};\n\nexport {clone};\n","//@flow\n\nimport MediaEntry from '../entities/media-entry';\n\nexport default class EntryList {\n /**\n * @member - entry list items\n * @type {Array<MediaEntry>}\n */\n items: Array<MediaEntry>;\n\n constructor() {\n this.items = [];\n }\n}\n","//@flow\n\nexport default class Bumper {\n /**\n * @member - bumper url\n * @type {string}\n */\n url: string;\n /**\n * @member - bumper click through url\n * @type {string}\n */\n clickThroughUrl: string;\n\n /**\n * @constructor\n * @param {Object} data - The bumper response\n */\n constructor(data: Object) {\n this.url = data.url;\n this.clickThroughUrl = data.clickThroughUrl;\n }\n}\n","//@flow\nimport {clone} from '../../util/clone';\n\nconst defaultConfig: Object = {\n serviceParams: {\n apiVersion: '7.8.1'\n }\n};\n\nexport default class OTTConfiguration {\n static set(clientConfig?: ProviderEnvConfigObject) {\n if (clientConfig) {\n Object.assign(defaultConfig, clientConfig);\n }\n }\n\n static get(): Object {\n return clone(defaultConfig);\n }\n}\n\nexport {OTTConfiguration};\n","//@flow\nimport MultiRequestBuilder from '../../common/multi-request-builder';\nimport OTTConfiguration from '../config';\n\nconst SERVICE_NAME: string = 'multirequest';\n\nexport default class OTTService {\n /**\n * Gets a new instance of MultiRequestBuilder with ott params\n * @function getMultiRequest\n * @param {string} ks The ks\n * @param {string} partnerId The partner ID\n * @returns {MultiRequestBuilder} The multi request builder\n * @static\n */\n static getMultiRequest(ks: string, partnerId?: number): MultiRequestBuilder {\n const config = OTTConfiguration.get();\n const ottParams = config.serviceParams;\n if (ks) {\n Object.assign(ottParams, {ks: ks});\n }\n if (partnerId) {\n Object.assign(ottParams, {partnerId: partnerId});\n }\n const headers: Map<string, string> = new Map();\n headers.set('Content-Type', 'application/json');\n const multiReq = new MultiRequestBuilder(headers);\n multiReq.method = 'POST';\n multiReq.service = SERVICE_NAME;\n multiReq.url = multiReq.getUrl(config.serviceUrl);\n multiReq.params = ottParams;\n return multiReq;\n }\n}\n","// @flow\nimport DataLoaderManager from '../../common/data-loader-manager';\nimport OTTService from '../services/ott-service';\n/**\n * OTTDataLoaderManager is a class that handles the OTT data loading\n * @param {string} partnerId - partner id\n * @param {string} ks - ks\n * @param {ProviderNetworkRetryParameters} [networkRetryConfig] - network retry configuration\n */\nexport default class OTTDataLoaderManager extends DataLoaderManager {\n constructor(partnerId: number, ks: string = '', networkRetryConfig: ProviderNetworkRetryParameters) {\n super(networkRetryConfig);\n this._multiRequest = OTTService.getMultiRequest(ks, partnerId);\n }\n}\n","//@flow\nimport OTTService from './ott-service';\nimport RequestBuilder from '../../../util/request-builder';\n\nconst SERVICE_NAME: string = 'ottuser';\n\nexport default class OTTUserService extends OTTService {\n /**\n * Creates an instance of RequestBuilder for session.startWidgetSession\n * @function anonymousSession\n * @param {string} serviceUrl The service base URL\n * @param {string} partnerId The partner ID\n * @param {string} udid The udid\n * @returns {RequestBuilder} The request builder\n * @static\n */\n static anonymousLogin(serviceUrl: string, partnerId: number, udid?: string): RequestBuilder {\n const headers: Map<string, string> = new Map();\n headers.set('Content-Type', 'application/json');\n const request = new RequestBuilder(headers);\n request.service = SERVICE_NAME;\n request.action = 'anonymousLogin';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n const params: Object = {partnerId: partnerId};\n if (udid) {\n Object.assign(params, {udid: udid});\n }\n request.params = params;\n return request;\n }\n}\n","//@flow\nimport UserService from '../services/user-service';\nimport OTTConfiguration from '../config';\nimport RequestBuilder from '../../../util/request-builder';\n\nexport default class OTTSessionLoader implements ILoader {\n _partnerId: number;\n _requests: Array<RequestBuilder>;\n _response: any = {};\n\n static get id(): string {\n return 'session';\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n */\n constructor(params: Object) {\n this.requests = this.buildRequests(params);\n this._partnerId = params.partnerId;\n }\n\n set requests(requests: Array<RequestBuilder>) {\n this._requests = requests;\n }\n\n get requests(): Array<RequestBuilder> {\n return this._requests;\n }\n\n set response(response: any) {\n this._response.ks = response[0].data.ks;\n }\n\n get response(): any {\n return this._response.ks;\n }\n\n /**\n * Builds loader requests\n * @function\n * @param {Object} params Requests parameters\n * @returns {RequestBuilder} The request builder\n * @static\n */\n buildRequests(params: Object): Array<RequestBuilder> {\n const config = OTTConfiguration.get();\n const requests: Array<RequestBuilder> = [];\n requests.push(UserService.anonymousLogin(config.serviceUrl, params.partnerId, params.udid));\n return requests;\n }\n\n /**\n * Loader validation function\n * @function\n * @returns {boolean} Is valid\n */\n isValid(): boolean {\n return !!this._partnerId;\n }\n}\n","//@flow\nimport OTTService from './ott-service';\nimport RequestBuilder from '../../../util/request-builder';\n\nconst SERVICE_NAME: string = 'asset';\n\nexport default class OTTAssetService extends OTTService {\n /**\n * Creates an instance of RequestBuilder for session.startWidgetSession\n * @function anonymousSession\n * @param {string} serviceUrl The service base URL\n * @param {string} ks The partner ID\n * @param {string} assetId The asset ID\n * @param {string} type The asset type (media/recording/epg)\n * @param {ProviderPlaybackContextOptions} playbackContextOptions The playbackContextOptions\n * @returns {RequestBuilder} The request builder\n * @static\n */\n static getPlaybackContext(\n serviceUrl: string,\n ks: string,\n assetId: string,\n type: string,\n playbackContextOptions: ProviderPlaybackContextOptions\n ): RequestBuilder {\n const headers: Map<string, string> = new Map();\n headers.set('Content-Type', 'application/json');\n const request = new RequestBuilder(headers);\n request.service = SERVICE_NAME;\n request.action = 'getPlaybackContext';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n const contextDataParams: Object = {objectType: 'KalturaPlaybackContextOptions'};\n Object.assign(contextDataParams, playbackContextOptions);\n request.params = {assetId: assetId, assetType: type, contextDataParams: contextDataParams, ks: ks};\n return request;\n }\n\n static get(serviceUrl: string, ks: string, assetId: string, assetReferenceType: string): RequestBuilder {\n const headers: Map<string, string> = new Map();\n headers.set('Content-Type', 'application/json');\n const request = new RequestBuilder(headers);\n request.service = SERVICE_NAME;\n request.action = 'get';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n request.params = {id: assetId, assetReferenceType: assetReferenceType, ks: ks};\n return request;\n }\n}\n","//@flow\nexport default class KalturaRuleAction {\n static Type: {[type: string]: string | number} = {\n BLOCK: 'BLOCK',\n START_DATE_OFFSET: 'START_DATE_OFFSET',\n END_DATE_OFFSET: 'END_DATE_OFFSET',\n USER_BLOCK: 'USER_BLOCK',\n ALLOW_PLAYBACK: 'ALLOW_PLAYBACK',\n BLOCK_PLAYBACK: 'BLOCK_PLAYBACK',\n APPLY_DISCOUNT_MODULE: 'APPLY_DISCOUNT_MODULE'\n };\n\n /**\n * @member - The type of the action\n * @type {string|number}\n */\n type: string | number;\n\n /**\n * @constructor\n * @param {Object} data - The response\n */\n constructor(data: Object) {\n this.type = data.type;\n }\n}\n","//@flow\nimport {KalturaDrmPlaybackPluginData} from '../../common/response-types/kaltura-drm-playback-plugin-data';\n\nexport type OTTKalturaPlaybackSource = KalturaPlaybackSource;\n\nexport default class KalturaPlaybackSource {\n format: string;\n protocols: string;\n drm: Array<KalturaDrmPlaybackPluginData> = [];\n adsPolicy: string;\n adsParam: string;\n duration: number;\n url: string;\n type: string;\n fileId: number;\n\n /**\n * @constructor\n * @param {Object} source The response\n */\n constructor(source: Object) {\n this.format = source.format;\n this.adsPolicy = source.adsPolicy;\n this.adsParam = source.adsParam;\n this.duration = source.duration;\n this.url = source.url;\n this.type = source.type;\n this.fileId = source.id;\n this.protocols = source.protocols;\n if (source.drm) {\n source.drm.map(drm => this.drm.push(new KalturaDrmPlaybackPluginData(drm)));\n }\n }\n\n /**\n * Checks if source has DRM data\n * @function hasDrmData\n * @returns {boolean} Is source has DRM\n */\n hasDrmData(): boolean {\n return this.drm && this.drm.length > 0;\n }\n\n /**\n * Returns source desired protocol if supported\n * @param {string} protocol - the desired protocol for the source (base play url protocol)\n * @returns {string} - protocol if protocol is in the protocols list - if not empty string returned\n */\n getProtocol(protocol: string): string {\n let returnValue: string = '';\n if (this.protocols && this.protocols.length > 0) {\n let protocolsArr: Array<string> = this.protocols.split(',');\n protocolsArr.forEach(p => {\n if (p === protocol) {\n returnValue = p;\n }\n });\n } else if (protocol === 'http') {\n return protocol;\n }\n return returnValue;\n }\n}\n","//@flow\nexport default class KalturaBumpersPlaybackPluginData {\n static StreamerType: {[type: string]: string} = {\n HLS: 'hls',\n DASH: 'dash',\n PROGRESSIVE: 'progressive'\n };\n\n /**\n * @member - The streamer type\n * @type {string}\n */\n streamertype: string;\n /**\n * @member - The url\n * @type {string}\n */\n url: string;\n\n /**\n * @constructor\n * @param {Object} data - The response\n */\n constructor(data: Object) {\n this.streamertype = data.streamertype;\n this.url = data.url;\n }\n}\n","//@flow\nimport ServiceResult from '../../common/base-service-result';\nimport {KalturaAccessControlMessage} from '../../common/response-types/kaltura-access-control-message';\nimport KalturaRuleAction from './kaltura-rule-action';\nimport KalturaPlaybackSource from './kaltura-playback-source';\nimport KalturaBumpersPlaybackPluginData from './kaltura-bumper-playback-plugin-data';\n\nexport default class KalturaPlaybackContext extends ServiceResult {\n static Type: {[type: string]: string} = {\n DOWNLOAD: 'DOWNLOAD',\n TRAILER: 'TRAILER',\n CATCHUP: 'CATCHUP',\n START_OVER: 'START_OVER',\n PLAYBACK: 'PLAYBACK'\n };\n /**\n * @member - The playback sources\n * @type {Array<KalturaPlaybackSource>}\n */\n sources: Array<KalturaPlaybackSource> = [];\n /**\n * @member - Array of actions as received from the rules that invalidated\n * @type {Array<KalturaRuleAction>}\n */\n actions: Array<KalturaRuleAction> = [];\n /**\n * @member - Array of access control massages\n * @type {Array<KalturaAccessControlMessage>}\n */\n messages: Array<KalturaAccessControlMessage> = [];\n /**\n * @member - Array of bumper plugins\n * @type {Array<KalturaBumpersPlaybackPluginData>}\n */\n plugins: Array<KalturaBumpersPlaybackPluginData> = [];\n\n /**\n * @constructor\n * @param {Object} response The response\n */\n constructor(response: Object) {\n super(response);\n if (!this.hasError) {\n const messages = response.messages;\n if (messages) {\n messages.map(message => this.messages.push(new KalturaAccessControlMessage(message)));\n }\n const actions = response.actions;\n if (actions) {\n actions.map(action => this.actions.push(new KalturaRuleAction(action)));\n }\n const sources = response.sources;\n if (sources) {\n sources.map(source => this.sources.push(new KalturaPlaybackSource(source)));\n }\n const plugins = response.plugins;\n if (plugins) {\n plugins.map(plugin => this.plugins.push(new KalturaBumpersPlaybackPluginData(plugin)));\n }\n }\n }\n\n hasBlockAction(): boolean {\n return this.getBlockAction() !== undefined;\n }\n\n getBlockAction(): ?KalturaRuleAction {\n return this.actions.find(action => action.type === KalturaRuleAction.Type.BLOCK);\n }\n\n getErrorMessages(): Array<KalturaAccessControlMessage> {\n return this.messages;\n }\n}\n","//@flow\nimport ServiceResult from '../../common/base-service-result';\n\nexport default class KalturaAsset extends ServiceResult {\n static Type: {[type: string]: string} = {\n MEDIA: 'media',\n RECORDING: 'recording',\n EPG: 'epg'\n };\n\n static AssetReferenceType: {[type: string]: string} = {\n MEDIA: 'media',\n EPG_INTERNAL: 'epg_internal',\n EPG_EXTERNAL: 'epg_external',\n NPVR: 'nPVR'\n };\n /**\n * @member - The asset id\n * @type {number}\n */\n id: number;\n /**\n * @member - The asset createDate - Specifies when was the Asset was created. Date and time represented as epoch\n * @type {number}\n */\n createDate: number;\n /**\n * @member - The asset endDate - epoch For VOD: till when the asset be available in the catalog. For EPG/Linear: program end time and date\n * @type {number}\n */\n endDate: number;\n /**\n * @member - The asset name\n * @type {string}\n */\n name: string = '';\n /**\n * @member - The asset name description\n * @type {string}\n */\n description: string = '';\n /**\n * @member - The asset tags\n * @type {Array<Object>}\n */\n tags: Array<Object> = [];\n /**\n * @member - The asset metas\n * @type {Array<Object>}\n */\n metas: Array<Object> = [];\n /**\n * @member - The asset images\n * @type {Array<any>}\n */\n pictures: Array<any> = [];\n\n /**\n * @constructor\n * @param {Object} response The response\n */\n constructor(response: Object) {\n super(response);\n if (!this.hasError) {\n this.id = response.id;\n this.name = response.name;\n this.description = response.description;\n this.createDate = response.createDate;\n this.endDate = response.endDate;\n this.metas = this._formatTagsMetas(response.metas);\n this.tags = this._formatTagsMetas(response.tags);\n this.pictures = response.images;\n }\n }\n\n _formatTagsMetas(objectToParse: any): Array<Object> {\n const parsed = [];\n Object.keys(objectToParse).forEach(function (key) {\n if (objectToParse[key].objects) {\n let value = '';\n objectToParse[key].objects.forEach(function (object) {\n value += object.value + '|';\n });\n parsed.push({key: key, value: value});\n } else {\n parsed.push({key: key, value: objectToParse[key].value});\n }\n });\n return parsed;\n }\n}\n","//@flow\nimport OTTAssetService from '../services/asset-service';\nimport OTTConfiguration from '../config';\nimport RequestBuilder from '../../../util/request-builder';\nimport KalturaPlaybackContext from '../response-types/kaltura-playback-context';\nimport KalturaAsset from '../response-types/kaltura-asset';\n\ntype OTTAssetLoaderResponse = {mediaDataResult: KalturaAsset, playBackContextResult: KalturaPlaybackContext};\nexport type {OTTAssetLoaderResponse};\n\nexport default class OTTAssetLoader implements ILoader {\n _entryId: string;\n _requests: Array<RequestBuilder>;\n _response: any = {};\n\n static get id(): string {\n return 'asset';\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n */\n constructor(params: Object) {\n this.requests = this.buildRequests(params);\n this._entryId = params.entryId;\n }\n\n set requests(requests: Array<RequestBuilder>) {\n this._requests = requests;\n }\n\n get requests(): Array<RequestBuilder> {\n return this._requests;\n }\n\n set response(response: any) {\n this._response.mediaDataResult = new KalturaAsset(response[0].data);\n this._response.playBackContextResult = new KalturaPlaybackContext(response[1].data);\n }\n\n get response(): OTTAssetLoaderResponse {\n return this._response;\n }\n\n /**\n * Builds loader requests\n * @function\n * @param {Object} params Requests parameters\n * @returns {RequestBuilder} The request builder\n * @static\n */\n buildRequests(params: Object): Array<RequestBuilder> {\n const config = OTTConfiguration.get();\n const requests: Array<RequestBuilder> = [];\n requests.push(OTTAssetService.get(config.serviceUrl, params.ks, params.entryId, params.assetReferenceType));\n requests.push(OTTAssetService.getPlaybackContext(config.serviceUrl, params.ks, params.entryId, params.type, params.playbackContext));\n return requests;\n }\n\n /**\n * Loader validation function\n * @function\n * @returns {boolean} Is valid\n */\n isValid(): boolean {\n return !!this._entryId;\n }\n}\n","//@flow\nimport RequestBuilder from '../../../util/request-builder';\nimport OTTConfiguration from '../config';\nimport OTTAssetService from '../services/asset-service';\nimport KalturaAsset from '../response-types/kaltura-asset';\n\nexport default class OTTAssetListLoader implements ILoader {\n _entries: Array<string>;\n _requests: Array<RequestBuilder>;\n _response: any = {playlistItems: {entries: []}};\n\n static get id(): string {\n return 'asset_list';\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n */\n constructor(params: Object) {\n this.requests = this.buildRequests(params);\n this._entries = params.entries;\n }\n\n set requests(requests: Array<RequestBuilder>) {\n this._requests = requests;\n }\n\n get requests(): Array<RequestBuilder> {\n return this._requests;\n }\n\n set response(response: any) {\n response.forEach(item => {\n this._response.playlistItems.entries.push({mediaDataResult: new KalturaAsset(item.data)});\n });\n }\n\n get response(): any {\n return this._response;\n }\n\n /**\n * Builds loader requests\n * @function\n * @param {Object} params Requests parameters\n * @returns {RequestBuilder} The request builder\n * @static\n */\n buildRequests(params: Object): Array<RequestBuilder> {\n const config = OTTConfiguration.get();\n const requests: Array<RequestBuilder> = [];\n params.entries.forEach(entry => {\n const assetReferenceType = entry.assetReferenceType || KalturaAsset.AssetReferenceType.MEDIA;\n requests.push(OTTAssetService.get(config.serviceUrl, params.ks, entry.entryId || entry, assetReferenceType));\n });\n return requests;\n }\n\n /**\n * Loader validation function\n * @function\n * @returns {boolean} Is valid\n */\n isValid(): boolean {\n return !!(this._entries && this._entries.length);\n }\n}\n","//@flow\nimport getLogger from '../../util/logger';\nimport KalturaPlaybackSource from './response-types/kaltura-playback-source';\nimport KalturaPlaybackContext from './response-types/kaltura-playback-context';\nimport KalturaAsset from './response-types/kaltura-asset';\nimport MediaEntry from '../../entities/media-entry';\nimport Drm from '../../entities/drm';\nimport MediaSource from '../../entities/media-source';\nimport MediaSources from '../../entities/media-sources';\nimport EntryList from '../../entities/entry-list';\nimport Bumper from '../../entities/bumper';\nimport {SupportedStreamFormat, isProgressiveSource} from '../../entities/media-format';\nimport {KalturaDrmPlaybackPluginData} from '../common/response-types/kaltura-drm-playback-plugin-data';\nimport KalturaRuleAction from './response-types/kaltura-rule-action';\nimport {KalturaAccessControlMessage} from '../common/response-types/kaltura-access-control-message';\nimport type {OTTAssetLoaderResponse} from './loaders/asset-loader';\nimport KalturaBumpersPlaybackPluginData from './response-types/kaltura-bumper-playback-plugin-data';\n\nconst LIVE_ASST_OBJECT_TYPE: string = 'KalturaLiveAsset';\n\nconst MediaTypeCombinations: {[mediaType: string]: Object} = {\n [KalturaAsset.Type.MEDIA]: {\n [KalturaPlaybackContext.Type.TRAILER]: () => ({type: MediaEntry.Type.VOD}),\n [KalturaPlaybackContext.Type.PLAYBACK]: mediaAssetData => {\n if (mediaAssetData.objectType === LIVE_ASST_OBJECT_TYPE) {\n return {type: MediaEntry.Type.LIVE, dvrStatus: mediaAssetData.enableTrickPlay ? MediaEntry.DvrStatus.ON : MediaEntry.DvrStatus.OFF};\n } else if (parseInt(mediaAssetData.externalIds) > 0) {\n return {type: MediaEntry.Type.LIVE, dvrStatus: MediaEntry.DvrStatus.OFF};\n }\n return {type: MediaEntry.Type.VOD};\n }\n },\n [KalturaAsset.Type.EPG]: {\n [KalturaPlaybackContext.Type.CATCHUP]: () => ({type: MediaEntry.Type.VOD}),\n [KalturaPlaybackContext.Type.START_OVER]: () => ({type: MediaEntry.Type.LIVE, dvrStatus: MediaEntry.DvrStatus.ON})\n },\n [KalturaAsset.Type.RECORDING]: {\n [KalturaPlaybackContext.Type.PLAYBACK]: () => ({type: MediaEntry.Type.VOD})\n }\n};\n\nexport default class OTTProviderParser {\n static _logger = getLogger('OTTProviderParser');\n\n /**\n * Returns parsed media entry by given OTT response objects.\n * @function getMediaEntry\n * @param {any} assetResponse - The asset response.\n * @param {Object} requestData - The request data object.\n * @returns {MediaEntry} - The media entry\n * @static\n * @public\n */\n static getMediaEntry(assetResponse: any, requestData: Object): MediaEntry {\n const mediaEntry = new MediaEntry();\n OTTProviderParser._fillBaseData(mediaEntry, assetResponse, requestData);\n const playbackContext = assetResponse.playBackContextResult;\n const mediaAsset = assetResponse.mediaDataResult;\n const kalturaSources = playbackContext.sources;\n const filteredKalturaSources = OTTProviderParser._filterSourcesByFormats(kalturaSources, requestData.formats);\n mediaEntry.sources = OTTProviderParser._getParsedSources(filteredKalturaSources);\n const typeData = OTTProviderParser._getMediaType(mediaAsset.data, requestData.mediaType, requestData.contextType);\n mediaEntry.type = typeData.type;\n mediaEntry.dvrStatus = typeData.dvrStatus;\n mediaEntry.duration = Math.max.apply(\n Math,\n kalturaSources.map(source => source.duration)\n );\n return mediaEntry;\n }\n\n /**\n * Returns parsed entry list by given OTT response objects\n * @function getEntryList\n * @param {any} playlistResponse - response\n * @param {Array<ProviderMediaInfoObject>} requestEntries - entries list\n * @returns {Playlist} - The entry list\n * @static\n * @public\n */\n static getEntryList(playlistResponse: any, requestEntries: Array<ProviderMediaInfoObject>): EntryList {\n const entryList = new EntryList();\n const playlistItems = playlistResponse.playlistItems.entries;\n playlistItems.forEach(entry => {\n const mediaEntry = new MediaEntry();\n const requestData = requestEntries.find(requestEntry => requestEntry.entryId === entry.mediaDataResult.id);\n OTTProviderParser._fillBaseData(mediaEntry, entry, requestData);\n entryList.items.push(mediaEntry);\n });\n return entryList;\n }\n\n /**\n * Returns parsed bumper by given OTT response objects.\n * @function getBumper\n * @param {any} assetResponse - The asset response.\n * @returns {?Bumper} - The bumper\n * @static\n * @public\n */\n static getBumper(assetResponse: any): ?Bumper {\n const playbackContext = assetResponse.playBackContextResult;\n const progressiveBumper = playbackContext.plugins.find(\n bumper => bumper.streamertype === KalturaBumpersPlaybackPluginData.StreamerType.PROGRESSIVE\n );\n if (progressiveBumper) {\n return new Bumper(progressiveBumper);\n }\n }\n\n static _fillBaseData(mediaEntry: MediaEntry, assetResponse: any, requestData: any) {\n const mediaAsset = assetResponse.mediaDataResult;\n const metaData = OTTProviderParser.reconstructMetadata(mediaAsset);\n metaData.description = mediaAsset.description;\n metaData.name = mediaAsset.name;\n if (mediaAsset.createDate) metaData.createdAt = mediaAsset.createDate;\n if (mediaAsset.endDate) metaData.endDate = mediaAsset.endDate;\n if (mediaAsset.data.entryId) metaData.entryId = mediaAsset.data.entryId;\n if (mediaAsset.data.epgId) metaData.epgId = mediaAsset.data.epgId;\n if (mediaAsset.data.recordingId) metaData.recordingId = mediaAsset.data.recordingId;\n if (requestData && requestData.mediaType) metaData.mediaType = requestData.mediaType;\n if (requestData && requestData.contextType) metaData.contextType = requestData.contextType;\n mediaEntry.metadata = metaData;\n mediaEntry.poster = OTTProviderParser._getPoster(mediaAsset.pictures);\n mediaEntry.id = mediaAsset.id;\n return mediaEntry;\n }\n\n /**\n * reconstruct the metadata\n * @param {Object} mediaAsset the mediaAsset that contains the response with the metadata.\n * @returns {Object} reconstructed metadata object\n */\n static reconstructMetadata(mediaAsset: Object): Object {\n const metadata = {\n metas: OTTProviderParser.addToMetaObject(mediaAsset.metas),\n tags: OTTProviderParser.addToMetaObject(mediaAsset.tags)\n };\n return metadata;\n }\n\n /**\n * transform an array of [{key: value},{key: value}...] to an object\n * @param {Array<Object>} list a list of objects\n * @returns {Object} an mapped object of the arrayed list.\n */\n static addToMetaObject(list: Array<Object>): Object {\n let categoryObj = {};\n if (list) {\n list.forEach(item => {\n categoryObj[item.key] = item.value;\n });\n }\n return categoryObj;\n }\n\n /**\n * Gets the poster url without width and height.\n * @param {Array<Object>} pictures - Media pictures.\n * @returns {string | Array<Object>} - Poster base url or array of poster candidates.\n * @private\n */\n static _getPoster(pictures: Array<Object>): string | Array<Object> {\n if (pictures && pictures.length > 0) {\n const picObj = pictures[0];\n const url = picObj.url;\n // Search for thumbnail service\n const regex = /.*\\/thumbnail\\/.*(?:width|height)\\/\\d+\\/(?:height|width)\\/\\d+/;\n if (regex.test(url)) {\n return url;\n }\n return pictures.map(pic => ({url: pic.url, width: pic.width, height: pic.height}));\n }\n return '';\n }\n\n /**\n * Gets the media type (LIVE/VOD)\n * @param {Object} mediaAssetData - The media asset data.\n * @param {string} mediaType - The asset media type.\n * @param {string} contextType - The asset context type.\n * @returns {Object} - The type data object.\n * @private\n */\n static _getMediaType(mediaAssetData: Object, mediaType: string, contextType: string): Object {\n let typeData = {type: MediaEntry.Type.UNKNOWN};\n if (MediaTypeCombinations[mediaType] && MediaTypeCombinations[mediaType][contextType]) {\n typeData = MediaTypeCombinations[mediaType][contextType](mediaAssetData);\n }\n return typeData;\n }\n\n /**\n * Filtered the kalturaSources array by device type.\n * @param {Array<KalturaPlaybackSource>} kalturaSources - The kaltura sources.\n * @param {Array<string>} formats - Partner device formats.\n * @returns {Array<KalturaPlaybackSource>} - Filtered kalturaSources array.\n * @private\n */\n static _filterSourcesByFormats(kalturaSources: Array<KalturaPlaybackSource>, formats: Array<string>): Array<KalturaPlaybackSource> {\n if (formats.length > 0) {\n kalturaSources = kalturaSources.filter(source => formats.includes(source.type));\n }\n return kalturaSources;\n }\n\n /**\n * Returns the parsed sources\n * @function _getParsedSources\n * @param {Array<KalturaPlaybackSource>} kalturaSources - The kaltura sources\n * @param {Object} playbackContext - The playback context\n * @return {MediaSources} - A media sources\n * @static\n * @private\n */\n static _getParsedSources(kalturaSources: Array<KalturaPlaybackSource>): MediaSources {\n const sources = new MediaSources();\n const addAdaptiveSource = (source: KalturaPlaybackSource) => {\n const parsedSource = OTTProviderParser._parseAdaptiveSource(source);\n if (parsedSource) {\n const sourceFormat = SupportedStreamFormat.get(source.format);\n sources.map(parsedSource, sourceFormat);\n }\n };\n const parseAdaptiveSources = () => {\n kalturaSources.filter(source => !isProgressiveSource(source.format)).forEach(addAdaptiveSource);\n };\n const parseProgressiveSources = () => {\n kalturaSources.filter(source => isProgressiveSource(source.format)).forEach(addAdaptiveSource);\n };\n if (kalturaSources && kalturaSources.length > 0) {\n parseAdaptiveSources();\n parseProgressiveSources();\n }\n return sources;\n }\n\n /**\n * Returns a parsed adaptive source\n * @function _parseAdaptiveSource\n * @param {KalturaPlaybackSource} kalturaSource - A kaltura source\n * @returns {?MediaSource} - The parsed adaptive kalturaSource\n * @static\n * @private\n */\n static _parseAdaptiveSource(kalturaSource: ?KalturaPlaybackSource): ?MediaSource {\n const mediaSource = new MediaSource();\n if (kalturaSource) {\n const playUrl = kalturaSource.url;\n const mediaFormat = SupportedStreamFormat.get(kalturaSource.format);\n if (mediaFormat) {\n mediaSource.mimetype = mediaFormat.mimeType;\n }\n if (!playUrl) {\n OTTProviderParser._logger.error(\n `failed to create play url from source, discarding source: (${kalturaSource.fileId}), ${kalturaSource.format}.`\n );\n return null;\n }\n mediaSource.url = playUrl;\n mediaSource.id = kalturaSource.fileId + ',' + kalturaSource.format;\n if (kalturaSource.hasDrmData()) {\n const drmParams: Array<Drm> = [];\n kalturaSource.drm.forEach(drm => {\n drmParams.push(new Drm(drm.licenseURL, KalturaDrmPlaybackPluginData.Scheme[drm.scheme], drm.certificate));\n });\n mediaSource.drmData = drmParams;\n }\n }\n return mediaSource;\n }\n\n static hasBlockAction(response: OTTAssetLoaderResponse): boolean {\n return response.playBackContextResult.hasBlockAction();\n }\n\n static getBlockAction(response: OTTAssetLoaderResponse): ?KalturaRuleAction {\n return response.playBackContextResult.getBlockAction();\n }\n\n static getErrorMessages(response: OTTAssetLoaderResponse): Array<KalturaAccessControlMessage> {\n return response.playBackContextResult.getErrorMessages();\n }\n}\n","// @flow\nimport BaseProvider from '../common/base-provider';\nimport getLogger from '../../util/logger';\nimport OTTConfiguration from './config';\nimport OTTDataLoaderManager from './loaders/data-loader-manager';\nimport OTTSessionLoader from './loaders/session-loader';\nimport OTTAssetLoader from './loaders/asset-loader';\nimport OTTAssetListLoader from './loaders/asset-list-loader';\nimport OTTProviderParser from './provider-parser';\nimport KalturaAsset from './response-types/kaltura-asset';\nimport KalturaPlaybackContext from './response-types/kaltura-playback-context';\nimport MediaEntry from '../../entities/media-entry';\nimport Error from '../../util/error/error';\n\nexport default class OTTProvider extends BaseProvider<OTTProviderMediaInfoObject> {\n /**\n * @constructor\n * @param {ProviderOptionsObject} options - provider options\n * @param {string} playerVersion - player version\n */\n constructor(options: ProviderOptionsObject, playerVersion: string) {\n super(options, playerVersion);\n this._logger = getLogger('OTTProvider');\n OTTConfiguration.set(options.env);\n this._networkRetryConfig = Object.assign(this._networkRetryConfig, options.networkRetryParameters);\n }\n\n get env() {\n return OTTConfiguration.get();\n }\n\n /**\n * Gets the backend media config.\n * @param {OTTProviderMediaInfoObject} mediaInfo - ott media info\n * @returns {Promise<ProviderMediaConfigObject>} - The provider media config\n */\n getMediaConfig(mediaInfo: OTTProviderMediaInfoObject): Promise<ProviderMediaConfigObject> {\n if (mediaInfo.ks) {\n this.ks = mediaInfo.ks;\n this._isAnonymous = false;\n }\n this._dataLoader = new OTTDataLoaderManager(this.partnerId, this.ks, this._networkRetryConfig);\n return new Promise((resolve, reject) => {\n const entryId = mediaInfo.entryId;\n if (entryId) {\n let ks: string = this.ks;\n if (!ks) {\n ks = '{1:result:ks}';\n this._dataLoader.add(OTTSessionLoader, {partnerId: this.partnerId});\n }\n const contextType = mediaInfo.contextType || KalturaPlaybackContext.Type.PLAYBACK;\n const mediaType = mediaInfo.mediaType || KalturaAsset.Type.MEDIA;\n const assetReferenceType = mediaInfo.assetReferenceType || KalturaAsset.AssetReferenceType.MEDIA;\n const playbackContext: ProviderPlaybackContextOptions = {\n mediaProtocol: mediaInfo.protocol,\n assetFileIds: mediaInfo.fileIds,\n context: contextType\n };\n if (mediaInfo.streamerType) {\n playbackContext.streamerType = mediaInfo.streamerType;\n }\n if (mediaInfo.urlType) {\n playbackContext.urlType = mediaInfo.urlType;\n }\n if (mediaInfo.adapterData) {\n playbackContext.adapterData = mediaInfo.adapterData;\n }\n this._dataLoader.add(OTTAssetLoader, {\n entryId: entryId,\n ks: ks,\n type: mediaType,\n playbackContext: playbackContext,\n assetReferenceType: assetReferenceType\n });\n const requestData = {\n contextType: contextType,\n mediaType: mediaType,\n formats: mediaInfo.formats || []\n };\n return this._dataLoader.fetchData().then(\n response => {\n try {\n resolve(this._parseDataFromResponse(response, requestData));\n } catch (err) {\n reject(err);\n }\n },\n err => {\n reject(err);\n }\n );\n } else {\n reject(new Error(Error.Severity.CRITICAL, Error.Category.PROVIDER, Error.Code.MISSING_MANDATORY_PARAMS, {message: 'missing entry id'}));\n }\n });\n }\n\n _parseDataFromResponse(data: Map<string, Function>, requestData: Object): ProviderMediaConfigObject {\n this._logger.debug('Data parsing started');\n const mediaConfig: ProviderMediaConfigObject = {\n session: {\n isAnonymous: this._isAnonymous,\n partnerId: this.partnerId\n },\n sources: this._getDefaultSourcesObject(),\n plugins: {}\n };\n if (this.uiConfId) {\n mediaConfig.session.uiConfId = this.uiConfId;\n }\n if (data) {\n if (data.has(OTTSessionLoader.id)) {\n const sessionLoader = data.get(OTTSessionLoader.id);\n if (sessionLoader && sessionLoader.response) {\n mediaConfig.session.ks = sessionLoader.response;\n }\n } else {\n mediaConfig.session.ks = this.ks;\n }\n if (data.has(OTTAssetLoader.id)) {\n const assetLoader = data.get(OTTAssetLoader.id);\n if (assetLoader && assetLoader.response && Object.keys(assetLoader.response).length) {\n const response = (assetLoader: OTTAssetLoader).response;\n if (OTTProviderParser.hasBlockAction(response)) {\n throw new Error(Error.Severity.CRITICAL, Error.Category.SERVICE, Error.Code.BLOCK_ACTION, {\n action: OTTProviderParser.getBlockAction(response),\n messages: OTTProviderParser.getErrorMessages(response)\n });\n }\n const mediaEntry = OTTProviderParser.getMediaEntry(response, requestData);\n Object.assign(mediaConfig.sources, this._getSourcesObject(mediaEntry));\n this._verifyHasSources(mediaConfig.sources);\n const bumper = OTTProviderParser.getBumper(response);\n if (bumper) {\n Object.assign(mediaConfig.plugins, {bumper});\n }\n }\n }\n }\n this._logger.debug('Data parsing finished', mediaConfig);\n return mediaConfig;\n }\n\n /**\n * Gets the playlist config from entry list.\n * @param {ProviderEntryListObject} entryListInfo - ott entry list info\n * @returns {Promise<ProviderPlaylistObject>} - The provider playlist config\n */\n getEntryListConfig(entryListInfo: ProviderEntryListObject): Promise<ProviderPlaylistObject> {\n if (entryListInfo.ks) {\n this.ks = entryListInfo.ks;\n this._isAnonymous = false;\n }\n this._dataLoader = new OTTDataLoaderManager(this.partnerId, this.ks, this._networkRetryConfig);\n return new Promise((resolve, reject) => {\n const entries = entryListInfo.entries;\n if (entries && entries.length) {\n let ks: string = this.ks;\n if (!ks) {\n ks = '{1:result:ks}';\n this._dataLoader.add(OTTSessionLoader, {partnerId: this.partnerId});\n }\n this._dataLoader.add(OTTAssetListLoader, {entries, ks});\n this._dataLoader.fetchData(false).then(\n response => {\n resolve(this._parseEntryListDataFromResponse(response, entries));\n },\n err => {\n reject(err);\n }\n );\n } else {\n reject({success: false, data: 'Missing mandatory parameter'});\n }\n });\n }\n\n _parseEntryListDataFromResponse(data: Map<string, Function>, requestEntries: Array<ProviderMediaInfoObject>): ProviderPlaylistObject {\n this._logger.debug('Data parsing started');\n const playlistConfig: ProviderPlaylistObject = {\n id: '',\n metadata: {\n name: '',\n description: ''\n },\n poster: '',\n items: []\n };\n if (data && data.has(OTTAssetListLoader.id)) {\n const playlistLoader = data.get(OTTAssetListLoader.id);\n if (playlistLoader && playlistLoader.response) {\n const entryList = OTTProviderParser.getEntryList(playlistLoader.response, requestEntries);\n entryList.items.forEach(i => playlistConfig.items.push({sources: this._getSourcesObject(i)}));\n }\n }\n this._logger.debug('Data parsing finished', playlistConfig);\n return playlistConfig;\n }\n\n _getDefaultSourcesObject(): ProviderMediaConfigSourcesObject {\n return {\n hls: [],\n dash: [],\n progressive: [],\n image: [],\n id: '',\n duration: 0,\n type: MediaEntry.Type.UNKNOWN,\n poster: '',\n dvr: false,\n vr: null,\n metadata: {\n name: '',\n description: '',\n tags: ''\n }\n };\n }\n\n _getSourcesObject(mediaEntry: MediaEntry) {\n const sourcesObject: ProviderMediaConfigSourcesObject = this._getDefaultSourcesObject();\n const mediaSources = mediaEntry.sources.toJSON();\n sourcesObject.hls = mediaSources.hls;\n sourcesObject.dash = mediaSources.dash;\n sourcesObject.progressive = mediaSources.progressive;\n sourcesObject.id = mediaEntry.id;\n sourcesObject.duration = mediaEntry.duration;\n sourcesObject.type = mediaEntry.type;\n sourcesObject.dvr = !!mediaEntry.dvrStatus;\n sourcesObject.poster = mediaEntry.poster;\n if (\n mediaEntry.metadata &&\n mediaEntry.metadata.metas &&\n typeof mediaEntry.metadata.metas.tags === 'string' &&\n mediaEntry.metadata.metas.tags.indexOf('360') > -1\n ) {\n sourcesObject.vr = {};\n }\n Object.assign(sourcesObject.metadata, mediaEntry.metadata);\n return sourcesObject;\n }\n}\n","// @flow\nimport OTTProvider from './provider';\nimport KalturaPlaybackContext from './response-types/kaltura-playback-context';\nimport KalturaAsset from './response-types/kaltura-asset';\n\ndeclare var __VERSION__: string;\ndeclare var __NAME__: string;\n\nconst NAME = __NAME__ + '-ott';\nconst VERSION = __VERSION__;\n\nconst ContextType = KalturaPlaybackContext.Type;\nconst MediaType = KalturaAsset.Type;\n\nexport {OTTProvider as Provider, ContextType, MediaType, NAME, VERSION};\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["./providers/webpack/universalModuleDefinition","./providers/webpack/bootstrap","./providers/./util/error/error.js","./providers/./util/error/severity.js","./providers/./util/error/category.js","./providers/./util/error/code.js","./providers/./entities/media-entry.js","./providers/./util/logger.js","./providers/./util/request-builder.js","./providers/./k-provider/common/base-service-result.js","./providers/./entities/media-format.js","./providers/./k-provider/common/response-types/kaltura-drm-playback-plugin-data.js","./providers/./k-provider/common/response-types/kaltura-access-control-message.js","./providers/./entities/media-sources.js","./providers/./entities/media-source.js","./providers/./k-provider/common/data-loader-manager.js","./providers/./k-provider/common/multi-request-builder.js","./providers/./entities/drm.js","./providers/./entities/image-source.js","./providers/./k-provider/common/base-provider.js","./providers/./util/clone.js","./providers/./entities/entry-list.js","./providers/./entities/bumper.js","./providers/./k-provider/ott/config.js","./providers/./k-provider/ott/services/ott-service.js","./providers/./k-provider/ott/loaders/data-loader-manager.js","./providers/./k-provider/ott/services/user-service.js","./providers/./k-provider/ott/loaders/session-loader.js","./providers/./k-provider/ott/services/asset-service.js","./providers/./k-provider/ott/response-types/kaltura-rule-action.js","./providers/./k-provider/ott/response-types/kaltura-playback-source.js","./providers/./k-provider/ott/response-types/kaltura-bumper-playback-plugin-data.js","./providers/./k-provider/ott/response-types/kaltura-playback-context.js","./providers/./k-provider/ott/response-types/kaltura-asset.js","./providers/./k-provider/ott/loaders/asset-loader.js","./providers/./k-provider/ott/loaders/asset-list-loader.js","./providers/./k-provider/ott/provider-parser.js","./providers/./k-provider/ott/provider.js","./providers/./k-provider/ott/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","Error","severity","category","code","data","this","_logger","error","RECOVERABLE","CRITICAL","NETWORK","SERVICE","PROVIDER","UNSUPPORTED_SCHEME","BAD_HTTP_STATUS","HTTP_ERROR","TIMEOUT","MALFORMED_DATA_URI","BAD_SERVER_RESPONSE","MULTIREQUEST_API_ERROR","API_RESPONSE_MISMATCH","ERROR","BLOCK_ACTION","MEDIA_STATUS_NOT_READY","MISSING_MANDATORY_PARAMS","MISSING_PLAY_SOURCE","METHOD_NOT_IMPLEMENTED","getLogger","MediaEntry","metadata","Map","sources","MediaSources","type","Type","UNKNOWN","toJSON","id","duration","dvrStatus","status","poster","assetReferenceType","VOD","LIVE","IMAGE","AUDIO","ON","OFF","JsLogger","VERSION","DEBUG","INFO","TIME","TRACE","WARN","createDefaultHandler","debug","enabledFor","getLevel","info","log","setHandler","setLevel","time","timeEnd","trace","useDefaults","warn","LogLevel","setLogger","logger","getLogLevel","setLogLevel","level","RequestBuilder","headers","async","timeout","maxAttempts","getUrl","serviceUrl","service","action","doHttpRequest","promise","Promise","resolve","reject","_requestPromise","url","Severity","Category","Code","_createXHR","request","XMLHttpRequest","onreadystatechange","readyState","response","JSON","parse","responseText","responseHeaders","_getResponseHeaders","_createError","text","open","method","retryConfig","requestTime","performance","now","ontimeout","_handleError","statusText","onerror","onabort","forEach","setRequestHeader","send","params","getAllResponseHeaders","split","filter","header","toLowerCase","indexOf","_attemptCounter","assign","attempt","ServiceResult","objectType","hasError","ServiceError","message","MediaFormat","DASH","mimeType","pathExt","HLS","WVM","MP4","MP3","SupportedStreamFormat","isProgressiveSource","formatName","sourceFormat","KalturaDrmPlaybackPluginData","drm","scheme","licenseURL","certificate","WIDEVINE_CENC","PLAYREADY_CENC","FAIRPLAY","KalturaAccessControlMessage","progressive","dash","hls","image","map","source","mediaFormat","push","h","MediaSource","mimetype","bandwidth","width","height","label","drmData","length","Array","isArray","DataLoaderManager","networkRetryConfig","_networkRetryConfig","add","loader","ks","execution_loader","isValid","_loaders","set","startIndex","_multiRequest","requests","executionLoaderResponseMap","from","val","index","_loadersResponseMap","fetchData","requestsMustSucceed","execute","then","_multiResponse","prepareData","success","err","loaderDataIndexes","results","slice","MultiRequestBuilder","requestParams","serviceDef","stringify","FAILED_PARSING_REQUEST","multiRequestResult","MultiRequestResult","result","errorResults","serviceResult","Drm","licenseUrl","ImageSource","entry","extractBaseThumbnailUrl","dataUrl","match","BaseProvider","options","playerVersion","_partnerId","partnerId","_widgetId","widgetId","_uiConfId","uiConfId","_isAnonymous","_ks","_playerVersion","defaultWidgetId","getMediaConfig","mediaInfo","getPlaylistConfig","playlistInfo","getEntryListConfig","entryListInfo","_verifyHasSources","concat","messages","clone","node","e","keys","EntryList","items","Bumper","clickThroughUrl","defaultConfig","serviceParams","apiVersion","OTTConfiguration","clientConfig","OTTService","getMultiRequest","config","ottParams","multiReq","OTTDataLoaderManager","OTTUserService","anonymousLogin","udid","OTTSessionLoader","buildRequests","UserService","_requests","_response","OTTAssetService","getPlaybackContext","assetId","playbackContextOptions","contextDataParams","assetType","KalturaRuleAction","BLOCK","START_DATE_OFFSET","END_DATE_OFFSET","USER_BLOCK","ALLOW_PLAYBACK","BLOCK_PLAYBACK","APPLY_DISCOUNT_MODULE","KalturaPlaybackSource","format","adsPolicy","adsParam","fileId","protocols","hasDrmData","getProtocol","protocol","returnValue","KalturaBumpersPlaybackPluginData","streamertype","PROGRESSIVE","KalturaPlaybackContext","actions","plugins","plugin","hasBlockAction","undefined","getBlockAction","find","getErrorMessages","DOWNLOAD","TRAILER","CATCHUP","START_OVER","PLAYBACK","KalturaAsset","description","createDate","endDate","metas","_formatTagsMetas","tags","pictures","images","objectToParse","parsed","objects","MEDIA","RECORDING","EPG","EPG_INTERNAL","EPG_EXTERNAL","NPVR","OTTAssetLoader","_entryId","entryId","playbackContext","mediaDataResult","playBackContextResult","OTTAssetListLoader","playlistItems","entries","_entries","AssetReferenceType","item","MediaTypeCombinations","mediaAssetData","enableTrickPlay","DvrStatus","parseInt","externalIds","OTTProviderParser","getMediaEntry","assetResponse","requestData","mediaEntry","_fillBaseData","mediaAsset","kalturaSources","filteredKalturaSources","_filterSourcesByFormats","formats","_getParsedSources","typeData","_getMediaType","mediaType","contextType","Math","max","apply","getEntryList","playlistResponse","requestEntries","entryList","requestEntry","getBumper","progressiveBumper","bumper","StreamerType","metaData","reconstructMetadata","createdAt","epgId","recordingId","_getPoster","addToMetaObject","list","categoryObj","test","pic","includes","addAdaptiveSource","parsedSource","_parseAdaptiveSource","kalturaSource","mediaSource","playUrl","drmParams","Scheme","OTTProvider","env","networkRetryParameters","_dataLoader","mediaProtocol","assetFileIds","fileIds","context","streamerType","urlType","adapterData","_parseDataFromResponse","mediaConfig","session","isAnonymous","_getDefaultSourcesObject","has","sessionLoader","assetLoader","_getSourcesObject","_parseEntryListDataFromResponse","playlistConfig","playlistLoader","dvr","vr","sourcesObject","mediaSources","NAME","__NAME__","__VERSION__","ContextType","MediaType"],"mappings":"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","file":"playkit-ott-provider.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ott\"] = factory();\n\telse\n\t\troot[\"playkit\"] = root[\"playkit\"] || {}, root[\"playkit\"][\"providers\"] = root[\"playkit\"][\"providers\"] || {}, root[\"playkit\"][\"providers\"][\"ott\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 19);\n","//@flow\nimport getLogger from '../logger';\nimport {Severity} from './severity';\nimport type {SeverityType} from './severity';\nimport {Code} from './code';\nimport type {CodeType} from './code';\nimport {Category} from './category';\nimport type {CategoryType} from './category';\n\nconst CLASS_NAME: string = 'Error';\n\n/**\n * @classdesc This is a description of the error class.\n */\nexport default class Error {\n severity: number;\n category: number;\n code: number;\n data: any;\n /**\n * @enum {number}\n */\n static Severity: SeverityType = Severity;\n /**\n * @enum {number}\n */\n static Category: CategoryType = Category;\n /**\n * @enum {number}\n */\n static Code: CodeType = Code;\n static _logger: any = getLogger(CLASS_NAME);\n\n /**\n * @constructor\n * @param {number} severity - error's severity\n * @param {number} category - error's category.\n * @param {number} code - error's code.\n * @param {any} data - additional data for the error.\n */\n constructor(severity: number, category: number, code: number, data: any = {}) {\n this.severity = severity;\n this.category = category;\n this.code = code;\n this.data = data;\n Error._logger.error(`Category:${category} | Code:${code} |`, data);\n }\n}\n","//@flow\n\ntype SeverityType = {[severity: string]: number};\n\nconst Severity: SeverityType = {\n /**\n * An error occurred, but the Player is attempting to recover from the error.\n *\n * If the Player cannot ultimately recover, it still may not throw a CRITICAL\n * error. For example, retrying for a media segment will never result in\n * a CRITICAL error (the Player will just retry forever).\n */\n RECOVERABLE: 1,\n /**\n * A critical error that the library cannot recover from. These usually cause\n * the Player to stop loading or updating. A new manifest must be loaded\n * to reset the library.\n */\n CRITICAL: 2\n};\n\nexport {Severity};\nexport type {SeverityType};\n","//@flow\ntype CategoryType = {[category: string]: number};\n\nconst Category: CategoryType = {\n /** Errors from the network stack. */\n NETWORK: 1,\n SERVICE: 2,\n PROVIDER: 3\n};\n\nexport {Category};\nexport type {CategoryType};\n","//@flow\n\ntype CodeType = {[code: string]: number};\n\nconst Code: CodeType = {\n /**\n * A network request was made using an unsupported URI scheme.\n */\n UNSUPPORTED_SCHEME: 1000,\n\n /**\n * An HTTP network request returned an HTTP status that indicated a failure.\n */\n BAD_HTTP_STATUS: 1001,\n\n /**\n * An HTTP network request failed with an error, but not from the server.\n */\n HTTP_ERROR: 1002,\n\n /**\n * A network request timed out.\n */\n TIMEOUT: 1003,\n\n /**\n * A network request was made with a malformed data URI.\n */\n MALFORMED_DATA_URI: 1004,\n\n /**\n * The server responsded with 2xx response, but it couldn't be parsed\n */\n BAD_SERVER_RESPONSE: 1005,\n\n /**\n * The server response had a valid structure but contained an error from the API\n */\n MULTIREQUEST_API_ERROR: 1006,\n\n /**\n * The server response had a valid structure and valid API result, but it did not match the request\n */\n API_RESPONSE_MISMATCH: 1007,\n\n /**\n * The server responded with an error\n */\n ERROR: 2000,\n\n /**\n * The server responded with a block action\n */\n BLOCK_ACTION: 2001,\n\n /**\n * The server responded with status import or pre convert\n */\n MEDIA_STATUS_NOT_READY: 2002,\n\n /**\n * The provider is missing mandatory parameter/s\n */\n\n MISSING_MANDATORY_PARAMS: 3000,\n\n /**\n * The server responded with empty sources objects (for HLS, Dash and progressive)\n */\n MISSING_PLAY_SOURCE: 3001,\n\n /**\n * The provider doesn't implement the called api\n */\n METHOD_NOT_IMPLEMENTED: 3002\n};\n\nexport {Code};\nexport type {CodeType};\n","//@flow\nimport MediaSources from './media-sources';\n\nexport default class MediaEntry {\n static Type: {[type: string]: string} = {\n VOD: 'Vod',\n LIVE: 'Live',\n IMAGE: 'Image',\n AUDIO: 'Audio',\n UNKNOWN: 'Unknown'\n };\n static DvrStatus: {[type: string]: number} = {\n ON: 1,\n OFF: 0\n };\n\n /**\n * @member - entry id\n * @type {string}\n */\n id: string;\n /**\n * @member - entry name\n * @type {string}\n */\n name: string;\n /**\n * @member - entry sources\n * @type {MediaSources}\n */\n sources: MediaSources;\n /**\n * @member - entry duration\n * @type {number}\n */\n duration: number;\n /**\n * @member - entry type\n * @type {string}\n */\n type: string;\n /**\n * @member - entry metadata\n * @type {Object}\n */\n metadata: Object;\n /**\n * @member - DVR status\n * @type {number}\n */\n dvrStatus: number;\n /**\n * @member - media status\n * @type {number}\n */\n status: number;\n /**\n * @member - media poster\n * @type {string | Array<Object>}\n */\n poster: string | Array<Object>;\n\n /**\n * @member - assetReferenceType\n * @type {string }\n */\n assetReferenceType: string;\n\n /**\n * @constructor\n */\n constructor() {\n this.metadata = new Map();\n this.sources = new MediaSources();\n this.type = MediaEntry.Type.UNKNOWN;\n }\n\n /**\n * Convert class to native js object.\n * @returns {ProviderMediaEntryObject} - The json class object.\n */\n toJSON(): ProviderMediaEntryObject {\n return {\n id: this.id,\n name: this.name,\n sources: this.sources.toJSON(),\n duration: this.duration,\n dvrStatus: this.dvrStatus,\n status: this.status,\n metadata: this.metadata,\n type: this.type,\n poster: this.poster,\n assetReferenceType: this.assetReferenceType\n };\n }\n}\n","//@flow\nexport type LogLevelObject = {value: number, name: string};\nexport type LogLevelType = {[level: string]: LogLevelObject};\nexport type loggerFunctionType = {\n VERSION: String,\n DEBUG: LogLevelObject,\n ERROR: LogLevelObject,\n INFO: LogLevelObject,\n OFF: LogLevelObject,\n TIME: LogLevelObject,\n TRACE: LogLevelObject,\n WARN: LogLevelObject,\n createDefaultHandler: Function,\n debug: Function,\n enabledFor: Function,\n error: Function,\n get: Function,\n getLevel: Function,\n info: Function,\n log: Function,\n setHandler: Function,\n setLevel: Function,\n time: Function,\n timeEnd: Function,\n trace: Function,\n useDefaults: Function,\n warn: Function\n};\n\nexport type LoggerType = {\n getLogger: loggerFunctionType,\n LogLevel: LogLevelType\n};\n\nlet JsLogger = {\n get: () => ({\n VERSION: '',\n DEBUG: {value: '', name: ''},\n ERROR: {value: '', name: ''},\n INFO: {value: '', name: ''},\n OFF: {value: '', name: ''},\n TIME: {value: '', name: ''},\n TRACE: {value: '', name: ''},\n WARN: {value: '', name: ''},\n createDefaultHandler: () => {},\n debug: () => {},\n enabledFor: () => {},\n error: () => {},\n get: () => {},\n getLevel: () => {},\n info: () => {},\n log: () => {},\n setHandler: () => {},\n setLevel: () => {},\n time: () => {},\n timeEnd: () => {},\n trace: () => {},\n useDefaults: () => {},\n warn: () => {}\n })\n};\n\nlet LogLevel: LogLevelType = {};\n/**\n * set logger\n * @param {LoggerType} logger - the logger\n * @returns {void}\n */\nfunction setLogger(logger: ?LoggerType): void {\n if (logger && typeof logger.getLogger === 'function') {\n JsLogger.get = logger.getLogger;\n }\n if (logger && logger.LogLevel) {\n LogLevel = logger.LogLevel;\n }\n}\n\n/**\n * get a logger\n * @param {?string} name - the logger name\n * @returns {Object} - the logger class\n */\nfunction getLogger(name?: string): Object {\n //$FlowFixMe\n return JsLogger.get(name);\n}\n\n/**\n * get the log level\n * @param {?string} name - the logger name\n * @returns {LogLevelObject} - the log level\n */\nfunction getLogLevel(name?: string): LogLevelObject {\n return getLogger(name).getLevel();\n}\n\n/**\n * sets the logger level\n * @param {LogLevelObject} level - the log level\n * @param {?string} name - the logger name\n * @returns {void}\n */\nfunction setLogLevel(level: LogLevelObject, name?: string): void {\n getLogger(name).setLevel(level);\n}\n\nexport default getLogger;\nexport {getLogLevel, setLogLevel, setLogger, LogLevel};\n","//@flow\nimport Error from './error/error';\n\nconst KALTURA_HEADER_PREFIX: string = 'x-';\n\nexport default class RequestBuilder {\n /**\n * @member - Service name\n * @type {string}\n */\n service: string;\n /**\n * @member - Service action\n * @type {string}\n */\n action: string;\n /**\n * @member - Service params\n * @type {any}\n */\n params: any;\n /**\n * @memberof - Service headers\n * @type {Map<string, string>}\n */\n headers: Map<string, string>;\n /**\n * @memberof - Service URL\n * @type {string}\n */\n url: string;\n /**\n * @memberof - Service method (POST,GET,DELETE etc..)\n * @type {string}\n */\n method: string;\n /**\n * @memberof - Service tag\n * @type {string}\n */\n tag: string;\n /**\n * @memberof - the response headers of the arra\n * @type {Array<string>}\n */\n responseHeaders: Array<string>;\n /**\n * @description network retry configuration\n * @memberof RequestBuilder\n * @type {ProviderNetworkRetryParameters}\n */\n retryConfig: ProviderNetworkRetryParameters = {\n async: true,\n timeout: 0,\n maxAttempts: 4\n };\n\n /**\n * @description number of xhr attempts for the same multi - request.\n * @memberof RequestBuilder\n * @type {number}\n * @private\n */\n _attemptCounter: number = 1;\n\n /**\n * @description hold the promise result of the XHR request(s) - if all tries fails, it rejects with the error.\n * @memberof RequestBuilder\n * @type {Object}\n * @private\n */\n _requestPromise: Object;\n\n /**\n * @constructor\n * @param {Map<string, string>} headers The request headers\n */\n constructor(headers: Map<string, string> = new Map()) {\n this.headers = headers;\n }\n\n /**\n * Builds restful service URL\n * @function getUrl\n * @param {string} serviceUrl - The service base URL\n * @returns {string} The service URL\n */\n getUrl(serviceUrl: string): string {\n return serviceUrl + '/service/' + this.service + (this.action ? '/action/' + this.action : '');\n }\n\n /**\n * Executes service\n * @function doHttpRequest\n * @returns {Promise.<any>} Service response as promise\n */\n doHttpRequest(): Promise<any> {\n const promise = new Promise((resolve, reject) => {\n this._requestPromise = {\n resolve,\n reject\n };\n });\n if (!this.url) {\n this._requestPromise.reject(\n new Error(Error.Severity.CRITICAL, Error.Category.NETWORK, Error.Code.MALFORMED_DATA_URI, {\n url: this.url\n })\n );\n }\n this._createXHR();\n return promise;\n }\n\n _createXHR(): void {\n let request = new XMLHttpRequest();\n request.onreadystatechange = () => {\n if (request.readyState === 4) {\n if (request.status === 200) {\n try {\n const response = JSON.parse(request.responseText);\n this.responseHeaders = this._getResponseHeaders(request);\n // the promise returns the response for backwards compatibility\n return this._requestPromise.resolve(response);\n } catch (error) {\n this._requestPromise.reject(\n this._createError(request, Error.Code.BAD_SERVER_RESPONSE, {\n text: request.responseText\n })\n );\n }\n }\n }\n };\n request.open(this.method, this.url, this.retryConfig.async);\n if (this.retryConfig.async && this.retryConfig.timeout) {\n request.timeout = this.retryConfig.timeout;\n }\n const requestTime = performance.now();\n request.ontimeout = () => {\n this._handleError(request, Error.Code.TIMEOUT, {\n timeout: (performance.now() - requestTime) / 1000,\n statusText: request.statusText\n });\n };\n request.onerror = request.onabort = () => {\n this._handleError(request, Error.Code.HTTP_ERROR, {\n text: request.responseText,\n statusText: request.statusText\n });\n };\n this.headers.forEach((value, key) => {\n request.setRequestHeader(key, value);\n });\n request.send(this.params);\n }\n\n _getResponseHeaders(request: XMLHttpRequest): Array<string> {\n return request\n .getAllResponseHeaders()\n .split('\\n')\n .filter(header => header.toLowerCase().indexOf(KALTURA_HEADER_PREFIX) === 0);\n }\n\n _handleError(request: XMLHttpRequest, code: number, data: Object): Promise<*> | void {\n const error = this._createError(request, code, data);\n request.onreadystatechange = function () {};\n request.onerror = function () {};\n request.ontimeout = function () {};\n request.onabort = function () {};\n if (this.retryConfig.maxAttempts && this._attemptCounter < this.retryConfig.maxAttempts) {\n this._attemptCounter++;\n this._createXHR();\n } else {\n return this._requestPromise.reject(error);\n }\n }\n\n _createError(request: XMLHttpRequest, code: number, data: Object): Error {\n Object.assign(data, {\n url: this.url,\n headers: this._getResponseHeaders(request),\n attempt: this._attemptCounter\n });\n return new Error(Error.Severity.CRITICAL, Error.Category.NETWORK, code, data);\n }\n}\n","//@flow\nexport default class ServiceResult {\n /**\n * @member - Is service returned an error\n * @type {boolean}\n */\n hasError: boolean = false;\n /**\n * @member - The service error\n * @type {ServiceError}\n */\n error: ServiceError;\n /**\n * @member - The service result data\n * @type {Object}\n */\n data: Object;\n\n /**\n * @constructor\n * @param {Object} response - Service response\n */\n constructor(response: Object) {\n if (response.objectType === 'KalturaAPIException') {\n this.hasError = true;\n this.error = new ServiceError(response.code, response.message);\n } else if (response.error && response.error.objectType === 'KalturaAPIException') {\n this.hasError = true;\n this.error = new ServiceError(response.error.code, response.error.message);\n } else {\n this.data = response;\n }\n }\n}\n\nclass ServiceError {\n /**\n * @member - The error code\n * @type {string}\n */\n code: string;\n /**\n * @member - The error message\n * @type {string}\n */\n message: string;\n\n /**\n * @constructor\n * @param {string} code - The result code\n * @param {string} message - The result message\n */\n constructor(code: string, message: string) {\n this.code = code;\n this.message = message;\n }\n}\n","//@flow\nexport const MediaFormat: {[name: string]: ProviderMediaFormatType} = {\n DASH: {\n name: 'dash',\n mimeType: 'application/dash+xml',\n pathExt: 'mpd'\n },\n HLS: {\n name: 'hls',\n mimeType: 'application/x-mpegURL',\n pathExt: 'm3u8'\n },\n WVM: {\n name: 'wvm',\n mimeType: 'video/wvm',\n pathExt: 'wvm'\n },\n MP4: {\n name: 'mp4',\n mimeType: 'video/mp4',\n pathExt: 'mp4'\n },\n MP3: {\n name: 'mp3',\n mimeType: 'audio/mpeg',\n pathExt: 'mp3'\n }\n};\n\nexport const SupportedStreamFormat: Map<string, ProviderMediaFormatType> = new Map([\n ['mpegdash', MediaFormat.DASH],\n ['applehttp', MediaFormat.HLS],\n ['url', MediaFormat.MP4]\n]);\n\n/**\n * returns a boolean whether a source is progressive or not\n * @param {string} formatName - the format name\n * @returns {boolean} - if source is progressive or not\n */\nfunction isProgressiveSource(formatName: string): boolean {\n const sourceFormat = SupportedStreamFormat.get(formatName);\n return !!sourceFormat && sourceFormat.name === MediaFormat.MP4.name;\n}\n\nexport {isProgressiveSource};\n","//@flow\nexport class KalturaDrmPlaybackPluginData {\n static Scheme: {[scheme: string]: string} = {\n 'drm.PLAYREADY_CENC': 'com.microsoft.playready',\n 'drm.WIDEVINE_CENC': 'com.widevine.alpha',\n 'fairplay.FAIRPLAY': 'com.apple.fairplay',\n WIDEVINE_CENC: 'com.widevine.alpha',\n PLAYREADY_CENC: 'com.microsoft.playready',\n FAIRPLAY: 'com.apple.fairplay'\n };\n\n /**\n * @member - The drm scheme\n * @type {string}\n */\n scheme: string;\n\n /**\n * @member - The license URL\n * @type {string}\n */\n licenseURL: string;\n\n /**\n * @member - The drm certificate\n * @type {?string}\n */\n certificate: ?string;\n\n /**\n * @constructor\n * @param {Object} drm The json response\n */\n constructor(drm: any) {\n this.scheme = drm.scheme;\n this.licenseURL = drm.licenseURL;\n this.certificate = drm.certificate;\n }\n}\n","//@flow\nexport class KalturaAccessControlMessage {\n /**\n * @member - The access control message\n * @type {string}\n */\n message: string;\n /**\n * @member - The access control message code\n * @@type {string}\n */\n code: string;\n\n /**\n * @constructor\n * @param {Object} data The json response\n */\n constructor(data: Object) {\n this.message = data.message;\n this.code = data.code;\n }\n}\n","// @flow\nimport MediaSource from './media-source';\nimport {MediaFormat} from './media-format';\nimport ImageSource from './image-source';\n\nexport default class MediaSources {\n /**\n * Progressive download media sources container.\n * @type {Array<MediaSource>}\n * @public\n */\n progressive: Array<MediaSource>;\n /**\n * Dash media sources container.\n * @type {Array<MediaSource>}\n * @public\n */\n dash: Array<MediaSource>;\n /**\n * Hls media sources container.\n * @type {Array<MediaSource>}\n * @public\n */\n hls: Array<MediaSource>;\n image: Array<ImageSource>;\n captions: Array<PKExternalCaptionObject>;\n\n /**\n * @constructor\n */\n constructor() {\n this.progressive = [];\n this.dash = [];\n this.hls = [];\n this.image = [];\n }\n\n /**\n * Maps the source to one of the containers according to his media format.\n * @param {MediaSource} source - The source to add to one of the containers.\n * @param {MediaFormat} mediaFormat - The media format of the source.\n * @returns {void}\n */\n map(source: MediaSource, mediaFormat: ?ProviderMediaFormatType) {\n if (mediaFormat) {\n switch (mediaFormat.name) {\n case MediaFormat.MP4.name:\n this.progressive.push(source);\n break;\n case MediaFormat.DASH.name:\n this.dash.push(source);\n break;\n case MediaFormat.HLS.name:\n this.hls.push(source);\n break;\n default:\n break;\n }\n }\n }\n\n /**\n * Convert class to native js object.\n * @returns {ProviderMediaSourcesObject} - The json class object.\n */\n toJSON(): ProviderMediaSourcesObject {\n const response: ProviderMediaSourcesObject = {\n progressive: [],\n dash: [],\n hls: [],\n image: []\n };\n this.progressive.forEach(p => response.progressive.push(p.toJSON()));\n this.hls.forEach(h => response.hls.push(h.toJSON()));\n this.dash.forEach(d => response.dash.push(d.toJSON()));\n response.image = this.image;\n return response;\n }\n}\n","//@flow\nimport Drm from './drm';\n\nexport default class MediaSource {\n /**\n * @member - media source id\n * @type {string}\n */\n id: string;\n /**\n * @member - media source url\n * @type {string}\n */\n url: string;\n /**\n * @member - media source mimetype\n * @type {string}\n */\n mimetype: string;\n /**\n * @member - media source drm data\n * @type {Array<Drm>}\n */\n drmData: Array<Drm>;\n /**\n * @member - media source bandwidth\n * @type {number}\n */\n bandwidth: number;\n /**\n * @member - media source width\n * @type {number}\n */\n width: number;\n /**\n * @member - media source height\n * @type {number}\n */\n height: number;\n /**\n * @member - media source label\n * @type {string}\n */\n label: string;\n\n /**\n * Convert class to native js object.\n * @returns {ProviderMediaSourceObject} - The json class object.\n */\n toJSON(): ProviderMediaSourceObject {\n const response: ProviderMediaSourceObject = {\n id: this.id,\n url: this.url,\n mimetype: this.mimetype\n };\n if (this.bandwidth) response.bandwidth = this.bandwidth;\n if (this.width) response.width = this.width;\n if (this.height) response.height = this.height;\n if (this.label) response.label = this.label;\n if (this.drmData && this.drmData.length > 0) {\n response.drmData = [];\n this.drmData.forEach(d => {\n if (Array.isArray(response.drmData)) {\n response.drmData.push(d.toJSON());\n }\n });\n }\n return response;\n }\n}\n","// @flow\nimport MultiRequestBuilder, {MultiRequestResult} from './multi-request-builder';\nimport Error from '../../util/error/error';\n\nexport default class DataLoaderManager {\n /**\n * @member - Loaders response map index\n * @type {Map<string,Array<number>>}\n * @private\n */\n _loadersResponseMap: Map<string, Array<number>> = new Map();\n /**\n * @member - Loaders multi request\n * @type {MultiRequestBuilder}\n * @protected\n */\n _multiRequest: MultiRequestBuilder;\n /**\n * @member - Loaders multi response\n * @type {MultiRequestResult}\n * @private\n */\n _multiResponse: MultiRequestResult;\n /**\n * @member - Loaders to execute\n * @type {Map<string,Function>}\n * @private\n */\n _loaders: Map<string, ILoader> = new Map();\n\n _networkRetryConfig: ProviderNetworkRetryParameters;\n\n constructor(networkRetryConfig: ProviderNetworkRetryParameters) {\n this._networkRetryConfig = networkRetryConfig;\n }\n\n /**\n * Add loader to execution loaders map\n * @function\n * @param {Function} loader Loader to add\n * @param {Object} params Loader params\n * @param {string} ks ks\n * @returns {void}\n */\n add(loader: Function, params: Object, ks?: string): void {\n let execution_loader = new loader(params);\n if (execution_loader.isValid()) {\n this._loaders.set(loader.id, execution_loader);\n // Get the start index from the multiReqeust before adding current execution_loader requests\n let startIndex = this._multiRequest.requests.length;\n // Get the requests\n let requests = execution_loader.requests;\n this._multiRequest.retryConfig = this._networkRetryConfig;\n // Add requests to multiRequest queue\n requests.forEach(request => {\n request.params = request.params || {};\n request.params.ks = request.params.ks || ks;\n this._multiRequest.add(request);\n });\n // Create range array of current execution_loader requests\n let executionLoaderResponseMap = Array.from(new Array(requests.length), (val, index) => index + startIndex);\n // Add to map\n this._loadersResponseMap.set(loader.id, executionLoaderResponseMap);\n }\n }\n\n /**\n * Get data from all loaders using multi request\n * @param {boolean} requestsMustSucceed whether all of the requests must succeed or not\n * @function\n * @returns {Promise} Promise\n */\n fetchData(requestsMustSucceed?: boolean): Promise<any> {\n return new Promise((resolve, reject) => {\n this._multiRequest.execute(requestsMustSucceed).then(\n data => {\n this._multiResponse = data.response;\n let preparedData: Object = this.prepareData(data.response);\n if (preparedData.success) {\n resolve(this._loaders);\n } else {\n reject(\n new Error(Error.Severity.CRITICAL, Error.Category.NETWORK, Error.Code.API_RESPONSE_MISMATCH, {\n headers: data.headers\n })\n );\n }\n },\n err => {\n reject(err);\n }\n );\n });\n }\n\n /**\n * Prepare fetched data\n * @function\n * @param {MultiRequestResult} response - The multi request result\n * @returns {Object} - The prepared data\n */\n prepareData(response: MultiRequestResult): Object {\n this._loaders.forEach((loader, name) => {\n let loaderDataIndexes = this._loadersResponseMap.get(name);\n try {\n if (loaderDataIndexes && loaderDataIndexes.length > 0) {\n loader.response = response.results.slice(loaderDataIndexes[0], loaderDataIndexes[loaderDataIndexes.length - 1] + 1);\n }\n } catch (err) {\n return {success: false, error: err};\n }\n });\n return {success: true, data: this._loaders};\n }\n}\n","//@flow\nimport RequestBuilder from '../../util/request-builder';\nimport getLogger from '../../util/logger';\nimport ServiceResult from './base-service-result';\nimport Error from '../../util/error/error';\n\nexport default class MultiRequestBuilder extends RequestBuilder {\n static _logger = getLogger('MultiRequestBuilder');\n /**\n * @memberof - MultiRequestBuilder\n * @type {Array<RequestBuilder>}\n */\n requests: Array<RequestBuilder> = [];\n /**\n * Adds request to requests array\n * @function add\n * @param {RequestBuilder} request The request\n * @returns {MultiRequestBuilder} The multiRequest\n */\n add(request: RequestBuilder): MultiRequestBuilder {\n this.requests.push(request);\n const requestParams = {};\n const serviceDef: Object = {service: request.service, action: request.action};\n Object.assign(requestParams, {[this.requests.length]: Object.assign(serviceDef, request.params)});\n Object.assign(requestParams, this.params);\n this.params = requestParams;\n return this;\n }\n\n /**\n * Executes a multi request\n * @function execute\n * @param {boolean} requestsMustSucceed whether all of the requests must succeed or not\n * @returns {Promise} The multirequest execution promise\n */\n execute(requestsMustSucceed?: boolean): Promise<Object> {\n return new Promise((resolve, reject) => {\n try {\n this.params = JSON.stringify(this.params);\n } catch (err) {\n MultiRequestBuilder._logger.error(`${err.message}`);\n reject(\n new Error(Error.Severity.CRITICAL, Error.Category.PROVIDER, Error.Code.FAILED_PARSING_REQUEST, {\n error: err,\n params: this.params\n })\n );\n }\n this.doHttpRequest().then(\n data => {\n const multiRequestResult = new MultiRequestResult(data, requestsMustSucceed);\n if (multiRequestResult.success) {\n resolve({\n headers: this.responseHeaders,\n response: multiRequestResult\n });\n } else {\n reject(\n new Error(Error.Severity.CRITICAL, Error.Category.NETWORK, Error.Code.MULTIREQUEST_API_ERROR, {\n url: this.url,\n headers: this.responseHeaders,\n results: multiRequestResult.results\n })\n );\n }\n },\n err => {\n reject(err);\n }\n );\n });\n }\n}\n\nexport class MultiRequestResult {\n static _logger = getLogger('MultiRequestResult');\n /**\n * @memberof MultiRequestResult\n * @type {boolean}\n */\n success: boolean;\n /**\n * @memberof MultiRequestResult\n * @type {Object}\n */\n results: Array<ServiceResult> = [];\n /**\n * @constructor\n * @param {Object} response data\n * @param {boolean} requestsMustSucceed whether all of the requests must succeed\n */\n constructor(response: Object, requestsMustSucceed?: boolean = true) {\n const result = response.result ? response.result : response;\n const responseArr = Array.isArray(result) ? result : [result];\n const results = responseArr.map(result => new ServiceResult(result));\n const errorResults = results.filter(serviceResult => serviceResult.hasError);\n\n errorResults.forEach(serviceResult => {\n MultiRequestResult._logger.error(\n `Service returned an error with error code: ${serviceResult.error.code} and message: ${serviceResult.error.message}.`\n );\n });\n\n this.results = results;\n if ((requestsMustSucceed && errorResults.length) || errorResults.length === this.results.length) {\n this.success = false;\n } else {\n this.results = this.results.filter(serviceResult => !serviceResult.hasError);\n this.success = true;\n }\n }\n}\n","//@flow\nexport default class Drm {\n /**\n * @member - license url\n * @type {string}\n */\n licenseUrl: string;\n /**\n * @member - drm scheme\n * @type {string}\n */\n scheme: string;\n\n /**\n * @member - drm certificate\n * @type {string}\n */\n certificate: string;\n\n /**\n * @constructor\n * @param {string} licenseUrl - the license url\n * @param {string} scheme - the drm scheme\n * @param {?string} certificate - the drm certificate\n */\n constructor(licenseUrl: string, scheme: string, certificate: ?string) {\n this.licenseUrl = licenseUrl;\n this.scheme = scheme;\n if (certificate) {\n this.certificate = certificate;\n }\n }\n\n /**\n * Convert class to native js object.\n * @returns {ProviderDrmDataObject} - The json class object.\n */\n toJSON(): ProviderDrmDataObject {\n const response: ProviderDrmDataObject = {\n licenseUrl: this.licenseUrl,\n scheme: this.scheme\n };\n if (this.certificate) response.certificate = this.certificate;\n return response;\n }\n}\n","//@flow\n\nconst BASE_THUMBNAIL_URL_TEMPLATE = '.+entry_id/[a-zA-Z0-9_]+/';\n\nexport default class ImageSource {\n /**\n * @member - media source id\n * @type {string}\n */\n id: string;\n /**\n * @member - media source url\n * @type {string}\n */\n url: string;\n /**\n * @member - media source mimetype\n * @type {string}\n */\n mimetype: string;\n\n constructor(entry: Object) {\n this.id = entry.id;\n this.url = ImageSource.extractBaseThumbnailUrl(entry.dataUrl);\n this.mimetype = '';\n }\n\n /**\n * Extract the base thumbnail url.\n * @param {string} url - dataUrl.\n * @returns {string} - The base thumbnail url.\n */\n static extractBaseThumbnailUrl(url: string): string {\n // $FlowFixMe\n return url.match(BASE_THUMBNAIL_URL_TEMPLATE)[0].slice(0, -1);\n }\n}\n","// @flow\nimport {getLogLevel, setLogLevel, setLogger, type LogLevelType, LogLevel} from '../../util/logger';\nimport DataLoaderManager from './data-loader-manager';\nimport Error from '../../util/error/error';\n\nexport default class BaseProvider<MI> {\n _partnerId: number;\n _widgetId: ?string;\n _ks: string;\n _uiConfId: ?number;\n _dataLoader: DataLoaderManager;\n _playerVersion: string;\n _logger: any;\n _isAnonymous: boolean;\n _networkRetryConfig: ProviderNetworkRetryParameters = {\n async: true,\n timeout: 0,\n maxAttempts: 4\n };\n\n get partnerId(): number {\n return this._partnerId;\n }\n\n get widgetId(): string {\n return this._widgetId || this.defaultWidgetId;\n }\n\n get defaultWidgetId(): string {\n return '_' + this._partnerId;\n }\n\n get uiConfId(): ?number {\n return this._uiConfId;\n }\n\n get ks(): string {\n return this._ks;\n }\n\n set ks(value: string): void {\n this._ks = value;\n }\n\n get playerVersion(): string {\n return this._playerVersion;\n }\n\n get isAnonymous(): boolean {\n return this._isAnonymous;\n }\n\n constructor(options: ProviderOptionsObject, playerVersion: string) {\n setLogger(options.logger);\n this._partnerId = options.partnerId;\n this._widgetId = options.widgetId;\n this._uiConfId = options.uiConfId;\n this._isAnonymous = !options.ks;\n this._ks = options.ks || '';\n this._playerVersion = playerVersion;\n }\n\n // eslint-disable-next-line no-unused-vars\n getMediaConfig(mediaInfo: MI): Promise<ProviderMediaConfigObject> {\n return Promise.reject(\n new Error(Error.Severity.CRITICAL, Error.Category.PROVIDER, Error.Code.METHOD_NOT_IMPLEMENTED, {\n message: 'getMediaConfig method must be implement by the derived class'\n })\n );\n }\n\n // eslint-disable-next-line no-unused-vars\n getPlaylistConfig(playlistInfo: ProviderPlaylistInfoObject): Promise<ProviderPlaylistObject> {\n return Promise.reject(\n new Error(Error.Severity.CRITICAL, Error.Category.PROVIDER, Error.Code.METHOD_NOT_IMPLEMENTED, {\n message: 'The provider does not support loading playlist by id'\n })\n );\n }\n\n // eslint-disable-next-line no-unused-vars\n getEntryListConfig(entryListInfo: ProviderEntryListObject): Promise<ProviderPlaylistObject> {\n return Promise.reject(\n new Error(Error.Severity.CRITICAL, Error.Category.PROVIDER, Error.Code.METHOD_NOT_IMPLEMENTED, {\n message: 'The provider does not support loading entry list'\n })\n );\n }\n\n _verifyHasSources(sources: ProviderMediaConfigSourcesObject) {\n if (sources.hls.concat(sources.dash, sources.progressive, sources.image).length === 0) {\n throw new Error(Error.Severity.CRITICAL, Error.Category.SERVICE, Error.Code.MISSING_PLAY_SOURCE, {\n action: '',\n messages: `No play source for entry id: ${sources.id}`\n });\n }\n }\n\n get LogLevel(): LogLevelType {\n return LogLevel;\n }\n\n getLogLevel(name?: string): Object {\n return getLogLevel(name);\n }\n\n setLogLevel(level: Object, name?: string): void {\n setLogLevel(level, name);\n }\n}\n","const clone = data => {\n let node;\n if (Array.isArray(data)) {\n node = data.length > 0 ? data.slice(0) : [];\n node.forEach((e, i) => {\n if ((typeof e === 'object' && e !== {}) || (Array.isArray(e) && e.length > 0)) {\n node[i] = clone(e);\n }\n });\n } else if (typeof data === 'object') {\n node = Object.assign({}, data);\n Object.keys(node).forEach(key => {\n if ((typeof node[key] === 'object' && node[key] !== {}) || (Array.isArray(node[key]) && node[key].length > 0)) {\n node[key] = clone(node[key]);\n }\n });\n } else {\n node = data;\n }\n return node;\n};\n\nexport {clone};\n","//@flow\n\nimport MediaEntry from '../entities/media-entry';\n\nexport default class EntryList {\n /**\n * @member - entry list items\n * @type {Array<MediaEntry>}\n */\n items: Array<MediaEntry>;\n\n constructor() {\n this.items = [];\n }\n}\n","//@flow\n\nexport default class Bumper {\n /**\n * @member - bumper url\n * @type {string}\n */\n url: string;\n /**\n * @member - bumper click through url\n * @type {string}\n */\n clickThroughUrl: string;\n\n /**\n * @constructor\n * @param {Object} data - The bumper response\n */\n constructor(data: Object) {\n this.url = data.url;\n this.clickThroughUrl = data.clickThroughUrl;\n }\n}\n","//@flow\nimport {clone} from '../../util/clone';\n\nconst defaultConfig: Object = {\n serviceParams: {\n apiVersion: '7.8.1'\n }\n};\n\nexport default class OTTConfiguration {\n static set(clientConfig?: ProviderEnvConfigObject) {\n if (clientConfig) {\n Object.assign(defaultConfig, clientConfig);\n }\n }\n\n static get(): Object {\n return clone(defaultConfig);\n }\n}\n\nexport {OTTConfiguration};\n","//@flow\nimport MultiRequestBuilder from '../../common/multi-request-builder';\nimport OTTConfiguration from '../config';\n\nconst SERVICE_NAME: string = 'multirequest';\n\nexport default class OTTService {\n /**\n * Gets a new instance of MultiRequestBuilder with ott params\n * @function getMultiRequest\n * @param {string} ks The ks\n * @param {string} partnerId The partner ID\n * @returns {MultiRequestBuilder} The multi request builder\n * @static\n */\n static getMultiRequest(ks: string, partnerId?: number): MultiRequestBuilder {\n const config = OTTConfiguration.get();\n const ottParams = config.serviceParams;\n if (ks) {\n Object.assign(ottParams, {ks: ks});\n }\n if (partnerId) {\n Object.assign(ottParams, {partnerId: partnerId});\n }\n const headers: Map<string, string> = new Map();\n headers.set('Content-Type', 'application/json');\n const multiReq = new MultiRequestBuilder(headers);\n multiReq.method = 'POST';\n multiReq.service = SERVICE_NAME;\n multiReq.url = multiReq.getUrl(config.serviceUrl);\n multiReq.params = ottParams;\n return multiReq;\n }\n}\n","// @flow\nimport DataLoaderManager from '../../common/data-loader-manager';\nimport OTTService from '../services/ott-service';\n/**\n * OTTDataLoaderManager is a class that handles the OTT data loading\n * @param {string} partnerId - partner id\n * @param {string} ks - ks\n * @param {ProviderNetworkRetryParameters} [networkRetryConfig] - network retry configuration\n */\nexport default class OTTDataLoaderManager extends DataLoaderManager {\n constructor(partnerId: number, ks: string = '', networkRetryConfig: ProviderNetworkRetryParameters) {\n super(networkRetryConfig);\n this._multiRequest = OTTService.getMultiRequest(ks, partnerId);\n }\n}\n","//@flow\nimport OTTService from './ott-service';\nimport RequestBuilder from '../../../util/request-builder';\n\nconst SERVICE_NAME: string = 'ottuser';\n\nexport default class OTTUserService extends OTTService {\n /**\n * Creates an instance of RequestBuilder for session.startWidgetSession\n * @function anonymousSession\n * @param {string} serviceUrl The service base URL\n * @param {string} partnerId The partner ID\n * @param {string} udid The udid\n * @returns {RequestBuilder} The request builder\n * @static\n */\n static anonymousLogin(serviceUrl: string, partnerId: number, udid?: string): RequestBuilder {\n const headers: Map<string, string> = new Map();\n headers.set('Content-Type', 'application/json');\n const request = new RequestBuilder(headers);\n request.service = SERVICE_NAME;\n request.action = 'anonymousLogin';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n const params: Object = {partnerId: partnerId};\n if (udid) {\n Object.assign(params, {udid: udid});\n }\n request.params = params;\n return request;\n }\n}\n","//@flow\nimport UserService from '../services/user-service';\nimport OTTConfiguration from '../config';\nimport RequestBuilder from '../../../util/request-builder';\n\nexport default class OTTSessionLoader implements ILoader {\n _partnerId: number;\n _requests: Array<RequestBuilder>;\n _response: any = {};\n\n static get id(): string {\n return 'session';\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n */\n constructor(params: Object) {\n this.requests = this.buildRequests(params);\n this._partnerId = params.partnerId;\n }\n\n set requests(requests: Array<RequestBuilder>) {\n this._requests = requests;\n }\n\n get requests(): Array<RequestBuilder> {\n return this._requests;\n }\n\n set response(response: any) {\n this._response.ks = response[0].data.ks;\n }\n\n get response(): any {\n return this._response.ks;\n }\n\n /**\n * Builds loader requests\n * @function\n * @param {Object} params Requests parameters\n * @returns {RequestBuilder} The request builder\n * @static\n */\n buildRequests(params: Object): Array<RequestBuilder> {\n const config = OTTConfiguration.get();\n const requests: Array<RequestBuilder> = [];\n requests.push(UserService.anonymousLogin(config.serviceUrl, params.partnerId, params.udid));\n return requests;\n }\n\n /**\n * Loader validation function\n * @function\n * @returns {boolean} Is valid\n */\n isValid(): boolean {\n return !!this._partnerId;\n }\n}\n","//@flow\nimport OTTService from './ott-service';\nimport RequestBuilder from '../../../util/request-builder';\n\nconst SERVICE_NAME: string = 'asset';\n\nexport default class OTTAssetService extends OTTService {\n /**\n * Creates an instance of RequestBuilder for session.startWidgetSession\n * @function anonymousSession\n * @param {string} serviceUrl The service base URL\n * @param {string} ks The partner ID\n * @param {string} assetId The asset ID\n * @param {string} type The asset type (media/recording/epg)\n * @param {ProviderPlaybackContextOptions} playbackContextOptions The playbackContextOptions\n * @returns {RequestBuilder} The request builder\n * @static\n */\n static getPlaybackContext(\n serviceUrl: string,\n ks: string,\n assetId: string,\n type: string,\n playbackContextOptions: ProviderPlaybackContextOptions\n ): RequestBuilder {\n const headers: Map<string, string> = new Map();\n headers.set('Content-Type', 'application/json');\n const request = new RequestBuilder(headers);\n request.service = SERVICE_NAME;\n request.action = 'getPlaybackContext';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n const contextDataParams: Object = {objectType: 'KalturaPlaybackContextOptions'};\n Object.assign(contextDataParams, playbackContextOptions);\n request.params = {assetId: assetId, assetType: type, contextDataParams: contextDataParams, ks: ks};\n return request;\n }\n\n static get(serviceUrl: string, ks: string, assetId: string, assetReferenceType: string): RequestBuilder {\n const headers: Map<string, string> = new Map();\n headers.set('Content-Type', 'application/json');\n const request = new RequestBuilder(headers);\n request.service = SERVICE_NAME;\n request.action = 'get';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n request.params = {id: assetId, assetReferenceType: assetReferenceType, ks: ks};\n return request;\n }\n}\n","//@flow\nexport default class KalturaRuleAction {\n static Type: {[type: string]: string | number} = {\n BLOCK: 'BLOCK',\n START_DATE_OFFSET: 'START_DATE_OFFSET',\n END_DATE_OFFSET: 'END_DATE_OFFSET',\n USER_BLOCK: 'USER_BLOCK',\n ALLOW_PLAYBACK: 'ALLOW_PLAYBACK',\n BLOCK_PLAYBACK: 'BLOCK_PLAYBACK',\n APPLY_DISCOUNT_MODULE: 'APPLY_DISCOUNT_MODULE'\n };\n\n /**\n * @member - The type of the action\n * @type {string|number}\n */\n type: string | number;\n\n /**\n * @constructor\n * @param {Object} data - The response\n */\n constructor(data: Object) {\n this.type = data.type;\n }\n}\n","//@flow\nimport {KalturaDrmPlaybackPluginData} from '../../common/response-types/kaltura-drm-playback-plugin-data';\n\nexport type OTTKalturaPlaybackSource = KalturaPlaybackSource;\n\nexport default class KalturaPlaybackSource {\n format: string;\n protocols: string;\n drm: Array<KalturaDrmPlaybackPluginData> = [];\n adsPolicy: string;\n adsParam: string;\n duration: number;\n url: string;\n type: string;\n fileId: number;\n\n /**\n * @constructor\n * @param {Object} source The response\n */\n constructor(source: Object) {\n this.format = source.format;\n this.adsPolicy = source.adsPolicy;\n this.adsParam = source.adsParam;\n this.duration = source.duration;\n this.url = source.url;\n this.type = source.type;\n this.fileId = source.id;\n this.protocols = source.protocols;\n if (source.drm) {\n source.drm.map(drm => this.drm.push(new KalturaDrmPlaybackPluginData(drm)));\n }\n }\n\n /**\n * Checks if source has DRM data\n * @function hasDrmData\n * @returns {boolean} Is source has DRM\n */\n hasDrmData(): boolean {\n return this.drm && this.drm.length > 0;\n }\n\n /**\n * Returns source desired protocol if supported\n * @param {string} protocol - the desired protocol for the source (base play url protocol)\n * @returns {string} - protocol if protocol is in the protocols list - if not empty string returned\n */\n getProtocol(protocol: string): string {\n let returnValue: string = '';\n if (this.protocols && this.protocols.length > 0) {\n let protocolsArr: Array<string> = this.protocols.split(',');\n protocolsArr.forEach(p => {\n if (p === protocol) {\n returnValue = p;\n }\n });\n } else if (protocol === 'http') {\n return protocol;\n }\n return returnValue;\n }\n}\n","//@flow\nexport default class KalturaBumpersPlaybackPluginData {\n static StreamerType: {[type: string]: string} = {\n HLS: 'hls',\n DASH: 'dash',\n PROGRESSIVE: 'progressive'\n };\n\n /**\n * @member - The streamer type\n * @type {string}\n */\n streamertype: string;\n /**\n * @member - The url\n * @type {string}\n */\n url: string;\n\n /**\n * @constructor\n * @param {Object} data - The response\n */\n constructor(data: Object) {\n this.streamertype = data.streamertype;\n this.url = data.url;\n }\n}\n","//@flow\nimport ServiceResult from '../../common/base-service-result';\nimport {KalturaAccessControlMessage} from '../../common/response-types/kaltura-access-control-message';\nimport KalturaRuleAction from './kaltura-rule-action';\nimport KalturaPlaybackSource from './kaltura-playback-source';\nimport KalturaBumpersPlaybackPluginData from './kaltura-bumper-playback-plugin-data';\n\nexport default class KalturaPlaybackContext extends ServiceResult {\n static Type: {[type: string]: string} = {\n DOWNLOAD: 'DOWNLOAD',\n TRAILER: 'TRAILER',\n CATCHUP: 'CATCHUP',\n START_OVER: 'START_OVER',\n PLAYBACK: 'PLAYBACK'\n };\n /**\n * @member - The playback sources\n * @type {Array<KalturaPlaybackSource>}\n */\n sources: Array<KalturaPlaybackSource> = [];\n /**\n * @member - Array of actions as received from the rules that invalidated\n * @type {Array<KalturaRuleAction>}\n */\n actions: Array<KalturaRuleAction> = [];\n /**\n * @member - Array of access control massages\n * @type {Array<KalturaAccessControlMessage>}\n */\n messages: Array<KalturaAccessControlMessage> = [];\n /**\n * @member - Array of bumper plugins\n * @type {Array<KalturaBumpersPlaybackPluginData>}\n */\n plugins: Array<KalturaBumpersPlaybackPluginData> = [];\n\n /**\n * @constructor\n * @param {Object} response The response\n */\n constructor(response: Object) {\n super(response);\n if (!this.hasError) {\n const messages = response.messages;\n if (messages) {\n messages.map(message => this.messages.push(new KalturaAccessControlMessage(message)));\n }\n const actions = response.actions;\n if (actions) {\n actions.map(action => this.actions.push(new KalturaRuleAction(action)));\n }\n const sources = response.sources;\n if (sources) {\n sources.map(source => this.sources.push(new KalturaPlaybackSource(source)));\n }\n const plugins = response.plugins;\n if (plugins) {\n plugins.map(plugin => this.plugins.push(new KalturaBumpersPlaybackPluginData(plugin)));\n }\n }\n }\n\n hasBlockAction(): boolean {\n return this.getBlockAction() !== undefined;\n }\n\n getBlockAction(): ?KalturaRuleAction {\n return this.actions.find(action => action.type === KalturaRuleAction.Type.BLOCK);\n }\n\n getErrorMessages(): Array<KalturaAccessControlMessage> {\n return this.messages;\n }\n}\n","//@flow\nimport ServiceResult from '../../common/base-service-result';\n\nexport default class KalturaAsset extends ServiceResult {\n static Type: {[type: string]: string} = {\n MEDIA: 'media',\n RECORDING: 'recording',\n EPG: 'epg'\n };\n\n static AssetReferenceType: {[type: string]: string} = {\n MEDIA: 'media',\n EPG_INTERNAL: 'epg_internal',\n EPG_EXTERNAL: 'epg_external',\n NPVR: 'nPVR'\n };\n /**\n * @member - The asset id\n * @type {number}\n */\n id: number;\n /**\n * @member - The asset createDate - Specifies when was the Asset was created. Date and time represented as epoch\n * @type {number}\n */\n createDate: number;\n /**\n * @member - The asset endDate - epoch For VOD: till when the asset be available in the catalog. For EPG/Linear: program end time and date\n * @type {number}\n */\n endDate: number;\n /**\n * @member - The asset name\n * @type {string}\n */\n name: string = '';\n /**\n * @member - The asset name description\n * @type {string}\n */\n description: string = '';\n /**\n * @member - The asset tags\n * @type {Array<Object>}\n */\n tags: Array<Object> = [];\n /**\n * @member - The asset metas\n * @type {Array<Object>}\n */\n metas: Array<Object> = [];\n /**\n * @member - The asset images\n * @type {Array<any>}\n */\n pictures: Array<any> = [];\n\n /**\n * @constructor\n * @param {Object} response The response\n */\n constructor(response: Object) {\n super(response);\n if (!this.hasError) {\n this.id = response.id;\n this.name = response.name;\n this.description = response.description;\n this.createDate = response.createDate;\n this.endDate = response.endDate;\n this.metas = this._formatTagsMetas(response.metas);\n this.tags = this._formatTagsMetas(response.tags);\n this.pictures = response.images;\n }\n }\n\n _formatTagsMetas(objectToParse: any): Array<Object> {\n const parsed = [];\n Object.keys(objectToParse).forEach(function (key) {\n if (objectToParse[key].objects) {\n let value = '';\n objectToParse[key].objects.forEach(function (object) {\n value += object.value + '|';\n });\n parsed.push({key: key, value: value});\n } else {\n parsed.push({key: key, value: objectToParse[key].value});\n }\n });\n return parsed;\n }\n}\n","//@flow\nimport OTTAssetService from '../services/asset-service';\nimport OTTConfiguration from '../config';\nimport RequestBuilder from '../../../util/request-builder';\nimport KalturaPlaybackContext from '../response-types/kaltura-playback-context';\nimport KalturaAsset from '../response-types/kaltura-asset';\n\ntype OTTAssetLoaderResponse = {mediaDataResult: KalturaAsset, playBackContextResult: KalturaPlaybackContext};\nexport type {OTTAssetLoaderResponse};\n\nexport default class OTTAssetLoader implements ILoader {\n _entryId: string;\n _requests: Array<RequestBuilder>;\n _response: any = {};\n\n static get id(): string {\n return 'asset';\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n */\n constructor(params: Object) {\n this.requests = this.buildRequests(params);\n this._entryId = params.entryId;\n }\n\n set requests(requests: Array<RequestBuilder>) {\n this._requests = requests;\n }\n\n get requests(): Array<RequestBuilder> {\n return this._requests;\n }\n\n set response(response: any) {\n this._response.mediaDataResult = new KalturaAsset(response[0].data);\n this._response.playBackContextResult = new KalturaPlaybackContext(response[1].data);\n }\n\n get response(): OTTAssetLoaderResponse {\n return this._response;\n }\n\n /**\n * Builds loader requests\n * @function\n * @param {Object} params Requests parameters\n * @returns {RequestBuilder} The request builder\n * @static\n */\n buildRequests(params: Object): Array<RequestBuilder> {\n const config = OTTConfiguration.get();\n const requests: Array<RequestBuilder> = [];\n requests.push(OTTAssetService.get(config.serviceUrl, params.ks, params.entryId, params.assetReferenceType));\n requests.push(OTTAssetService.getPlaybackContext(config.serviceUrl, params.ks, params.entryId, params.type, params.playbackContext));\n return requests;\n }\n\n /**\n * Loader validation function\n * @function\n * @returns {boolean} Is valid\n */\n isValid(): boolean {\n return !!this._entryId;\n }\n}\n","//@flow\nimport RequestBuilder from '../../../util/request-builder';\nimport OTTConfiguration from '../config';\nimport OTTAssetService from '../services/asset-service';\nimport KalturaAsset from '../response-types/kaltura-asset';\n\nexport default class OTTAssetListLoader implements ILoader {\n _entries: Array<string>;\n _requests: Array<RequestBuilder>;\n _response: any = {playlistItems: {entries: []}};\n\n static get id(): string {\n return 'asset_list';\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n */\n constructor(params: Object) {\n this.requests = this.buildRequests(params);\n this._entries = params.entries;\n }\n\n set requests(requests: Array<RequestBuilder>) {\n this._requests = requests;\n }\n\n get requests(): Array<RequestBuilder> {\n return this._requests;\n }\n\n set response(response: any) {\n response.forEach(item => {\n this._response.playlistItems.entries.push({mediaDataResult: new KalturaAsset(item.data)});\n });\n }\n\n get response(): any {\n return this._response;\n }\n\n /**\n * Builds loader requests\n * @function\n * @param {Object} params Requests parameters\n * @returns {RequestBuilder} The request builder\n * @static\n */\n buildRequests(params: Object): Array<RequestBuilder> {\n const config = OTTConfiguration.get();\n const requests: Array<RequestBuilder> = [];\n params.entries.forEach(entry => {\n const assetReferenceType = entry.assetReferenceType || KalturaAsset.AssetReferenceType.MEDIA;\n requests.push(OTTAssetService.get(config.serviceUrl, params.ks, entry.entryId || entry, assetReferenceType));\n });\n return requests;\n }\n\n /**\n * Loader validation function\n * @function\n * @returns {boolean} Is valid\n */\n isValid(): boolean {\n return !!(this._entries && this._entries.length);\n }\n}\n","//@flow\nimport getLogger from '../../util/logger';\nimport KalturaPlaybackSource from './response-types/kaltura-playback-source';\nimport KalturaPlaybackContext from './response-types/kaltura-playback-context';\nimport KalturaAsset from './response-types/kaltura-asset';\nimport MediaEntry from '../../entities/media-entry';\nimport Drm from '../../entities/drm';\nimport MediaSource from '../../entities/media-source';\nimport MediaSources from '../../entities/media-sources';\nimport EntryList from '../../entities/entry-list';\nimport Bumper from '../../entities/bumper';\nimport {SupportedStreamFormat, isProgressiveSource} from '../../entities/media-format';\nimport {KalturaDrmPlaybackPluginData} from '../common/response-types/kaltura-drm-playback-plugin-data';\nimport KalturaRuleAction from './response-types/kaltura-rule-action';\nimport {KalturaAccessControlMessage} from '../common/response-types/kaltura-access-control-message';\nimport type {OTTAssetLoaderResponse} from './loaders/asset-loader';\nimport KalturaBumpersPlaybackPluginData from './response-types/kaltura-bumper-playback-plugin-data';\n\nconst LIVE_ASST_OBJECT_TYPE: string = 'KalturaLiveAsset';\n\nconst MediaTypeCombinations: {[mediaType: string]: Object} = {\n [KalturaAsset.Type.MEDIA]: {\n [KalturaPlaybackContext.Type.TRAILER]: () => ({type: MediaEntry.Type.VOD}),\n [KalturaPlaybackContext.Type.PLAYBACK]: mediaAssetData => {\n if (mediaAssetData.objectType === LIVE_ASST_OBJECT_TYPE) {\n return {type: MediaEntry.Type.LIVE, dvrStatus: mediaAssetData.enableTrickPlay ? MediaEntry.DvrStatus.ON : MediaEntry.DvrStatus.OFF};\n } else if (parseInt(mediaAssetData.externalIds) > 0) {\n return {type: MediaEntry.Type.LIVE, dvrStatus: MediaEntry.DvrStatus.OFF};\n }\n return {type: MediaEntry.Type.VOD};\n }\n },\n [KalturaAsset.Type.EPG]: {\n [KalturaPlaybackContext.Type.CATCHUP]: () => ({type: MediaEntry.Type.VOD}),\n [KalturaPlaybackContext.Type.START_OVER]: () => ({type: MediaEntry.Type.LIVE, dvrStatus: MediaEntry.DvrStatus.ON})\n },\n [KalturaAsset.Type.RECORDING]: {\n [KalturaPlaybackContext.Type.PLAYBACK]: () => ({type: MediaEntry.Type.VOD})\n }\n};\n\nexport default class OTTProviderParser {\n static _logger = getLogger('OTTProviderParser');\n\n /**\n * Returns parsed media entry by given OTT response objects.\n * @function getMediaEntry\n * @param {any} assetResponse - The asset response.\n * @param {Object} requestData - The request data object.\n * @returns {MediaEntry} - The media entry\n * @static\n * @public\n */\n static getMediaEntry(assetResponse: any, requestData: Object): MediaEntry {\n const mediaEntry = new MediaEntry();\n OTTProviderParser._fillBaseData(mediaEntry, assetResponse, requestData);\n const playbackContext = assetResponse.playBackContextResult;\n const mediaAsset = assetResponse.mediaDataResult;\n const kalturaSources = playbackContext.sources;\n const filteredKalturaSources = OTTProviderParser._filterSourcesByFormats(kalturaSources, requestData.formats);\n mediaEntry.sources = OTTProviderParser._getParsedSources(filteredKalturaSources);\n const typeData = OTTProviderParser._getMediaType(mediaAsset.data, requestData.mediaType, requestData.contextType);\n mediaEntry.type = typeData.type;\n mediaEntry.dvrStatus = typeData.dvrStatus;\n mediaEntry.duration = Math.max.apply(\n Math,\n kalturaSources.map(source => source.duration)\n );\n return mediaEntry;\n }\n\n /**\n * Returns parsed entry list by given OTT response objects\n * @function getEntryList\n * @param {any} playlistResponse - response\n * @param {Array<ProviderMediaInfoObject>} requestEntries - entries list\n * @returns {Playlist} - The entry list\n * @static\n * @public\n */\n static getEntryList(playlistResponse: any, requestEntries: Array<ProviderMediaInfoObject>): EntryList {\n const entryList = new EntryList();\n const playlistItems = playlistResponse.playlistItems.entries;\n playlistItems.forEach(entry => {\n const mediaEntry = new MediaEntry();\n const requestData = requestEntries.find(requestEntry => requestEntry.entryId === entry.mediaDataResult.id);\n OTTProviderParser._fillBaseData(mediaEntry, entry, requestData);\n entryList.items.push(mediaEntry);\n });\n return entryList;\n }\n\n /**\n * Returns parsed bumper by given OTT response objects.\n * @function getBumper\n * @param {any} assetResponse - The asset response.\n * @returns {?Bumper} - The bumper\n * @static\n * @public\n */\n static getBumper(assetResponse: any): ?Bumper {\n const playbackContext = assetResponse.playBackContextResult;\n const progressiveBumper = playbackContext.plugins.find(\n bumper => bumper.streamertype === KalturaBumpersPlaybackPluginData.StreamerType.PROGRESSIVE\n );\n if (progressiveBumper) {\n return new Bumper(progressiveBumper);\n }\n }\n\n static _fillBaseData(mediaEntry: MediaEntry, assetResponse: any, requestData: any) {\n const mediaAsset = assetResponse.mediaDataResult;\n const metaData = OTTProviderParser.reconstructMetadata(mediaAsset);\n metaData.description = mediaAsset.description;\n metaData.name = mediaAsset.name;\n if (mediaAsset.createDate) metaData.createdAt = mediaAsset.createDate;\n if (mediaAsset.endDate) metaData.endDate = mediaAsset.endDate;\n if (mediaAsset.data.entryId) metaData.entryId = mediaAsset.data.entryId;\n if (mediaAsset.data.epgId) metaData.epgId = mediaAsset.data.epgId;\n if (mediaAsset.data.recordingId) metaData.recordingId = mediaAsset.data.recordingId;\n if (requestData && requestData.mediaType) metaData.mediaType = requestData.mediaType;\n if (requestData && requestData.contextType) metaData.contextType = requestData.contextType;\n mediaEntry.metadata = metaData;\n mediaEntry.poster = OTTProviderParser._getPoster(mediaAsset.pictures);\n mediaEntry.id = mediaAsset.id;\n return mediaEntry;\n }\n\n /**\n * reconstruct the metadata\n * @param {Object} mediaAsset the mediaAsset that contains the response with the metadata.\n * @returns {Object} reconstructed metadata object\n */\n static reconstructMetadata(mediaAsset: Object): Object {\n const metadata = {\n metas: OTTProviderParser.addToMetaObject(mediaAsset.metas),\n tags: OTTProviderParser.addToMetaObject(mediaAsset.tags)\n };\n return metadata;\n }\n\n /**\n * transform an array of [{key: value},{key: value}...] to an object\n * @param {Array<Object>} list a list of objects\n * @returns {Object} an mapped object of the arrayed list.\n */\n static addToMetaObject(list: Array<Object>): Object {\n let categoryObj = {};\n if (list) {\n list.forEach(item => {\n categoryObj[item.key] = item.value;\n });\n }\n return categoryObj;\n }\n\n /**\n * Gets the poster url without width and height.\n * @param {Array<Object>} pictures - Media pictures.\n * @returns {string | Array<Object>} - Poster base url or array of poster candidates.\n * @private\n */\n static _getPoster(pictures: Array<Object>): string | Array<Object> {\n if (pictures && pictures.length > 0) {\n const picObj = pictures[0];\n const url = picObj.url;\n // Search for thumbnail service\n const regex = /.*\\/thumbnail\\/.*(?:width|height)\\/\\d+\\/(?:height|width)\\/\\d+/;\n if (regex.test(url)) {\n return url;\n }\n return pictures.map(pic => ({url: pic.url, width: pic.width, height: pic.height}));\n }\n return '';\n }\n\n /**\n * Gets the media type (LIVE/VOD)\n * @param {Object} mediaAssetData - The media asset data.\n * @param {string} mediaType - The asset media type.\n * @param {string} contextType - The asset context type.\n * @returns {Object} - The type data object.\n * @private\n */\n static _getMediaType(mediaAssetData: Object, mediaType: string, contextType: string): Object {\n let typeData = {type: MediaEntry.Type.UNKNOWN};\n if (MediaTypeCombinations[mediaType] && MediaTypeCombinations[mediaType][contextType]) {\n typeData = MediaTypeCombinations[mediaType][contextType](mediaAssetData);\n }\n return typeData;\n }\n\n /**\n * Filtered the kalturaSources array by device type.\n * @param {Array<KalturaPlaybackSource>} kalturaSources - The kaltura sources.\n * @param {Array<string>} formats - Partner device formats.\n * @returns {Array<KalturaPlaybackSource>} - Filtered kalturaSources array.\n * @private\n */\n static _filterSourcesByFormats(kalturaSources: Array<KalturaPlaybackSource>, formats: Array<string>): Array<KalturaPlaybackSource> {\n if (formats.length > 0) {\n kalturaSources = kalturaSources.filter(source => formats.includes(source.type));\n }\n return kalturaSources;\n }\n\n /**\n * Returns the parsed sources\n * @function _getParsedSources\n * @param {Array<KalturaPlaybackSource>} kalturaSources - The kaltura sources\n * @param {Object} playbackContext - The playback context\n * @return {MediaSources} - A media sources\n * @static\n * @private\n */\n static _getParsedSources(kalturaSources: Array<KalturaPlaybackSource>): MediaSources {\n const sources = new MediaSources();\n const addAdaptiveSource = (source: KalturaPlaybackSource) => {\n const parsedSource = OTTProviderParser._parseAdaptiveSource(source);\n if (parsedSource) {\n const sourceFormat = SupportedStreamFormat.get(source.format);\n sources.map(parsedSource, sourceFormat);\n }\n };\n const parseAdaptiveSources = () => {\n kalturaSources.filter(source => !isProgressiveSource(source.format)).forEach(addAdaptiveSource);\n };\n const parseProgressiveSources = () => {\n kalturaSources.filter(source => isProgressiveSource(source.format)).forEach(addAdaptiveSource);\n };\n if (kalturaSources && kalturaSources.length > 0) {\n parseAdaptiveSources();\n parseProgressiveSources();\n }\n return sources;\n }\n\n /**\n * Returns a parsed adaptive source\n * @function _parseAdaptiveSource\n * @param {KalturaPlaybackSource} kalturaSource - A kaltura source\n * @returns {?MediaSource} - The parsed adaptive kalturaSource\n * @static\n * @private\n */\n static _parseAdaptiveSource(kalturaSource: ?KalturaPlaybackSource): ?MediaSource {\n const mediaSource = new MediaSource();\n if (kalturaSource) {\n const playUrl = kalturaSource.url;\n const mediaFormat = SupportedStreamFormat.get(kalturaSource.format);\n if (mediaFormat) {\n mediaSource.mimetype = mediaFormat.mimeType;\n }\n if (!playUrl) {\n OTTProviderParser._logger.error(\n `failed to create play url from source, discarding source: (${kalturaSource.fileId}), ${kalturaSource.format}.`\n );\n return null;\n }\n mediaSource.url = playUrl;\n mediaSource.id = kalturaSource.fileId + ',' + kalturaSource.format;\n if (kalturaSource.hasDrmData()) {\n const drmParams: Array<Drm> = [];\n kalturaSource.drm.forEach(drm => {\n drmParams.push(new Drm(drm.licenseURL, KalturaDrmPlaybackPluginData.Scheme[drm.scheme], drm.certificate));\n });\n mediaSource.drmData = drmParams;\n }\n }\n return mediaSource;\n }\n\n static hasBlockAction(response: OTTAssetLoaderResponse): boolean {\n return response.playBackContextResult.hasBlockAction();\n }\n\n static getBlockAction(response: OTTAssetLoaderResponse): ?KalturaRuleAction {\n return response.playBackContextResult.getBlockAction();\n }\n\n static getErrorMessages(response: OTTAssetLoaderResponse): Array<KalturaAccessControlMessage> {\n return response.playBackContextResult.getErrorMessages();\n }\n}\n","// @flow\nimport BaseProvider from '../common/base-provider';\nimport getLogger from '../../util/logger';\nimport OTTConfiguration from './config';\nimport OTTDataLoaderManager from './loaders/data-loader-manager';\nimport OTTSessionLoader from './loaders/session-loader';\nimport OTTAssetLoader from './loaders/asset-loader';\nimport OTTAssetListLoader from './loaders/asset-list-loader';\nimport OTTProviderParser from './provider-parser';\nimport KalturaAsset from './response-types/kaltura-asset';\nimport KalturaPlaybackContext from './response-types/kaltura-playback-context';\nimport MediaEntry from '../../entities/media-entry';\nimport Error from '../../util/error/error';\n\nexport default class OTTProvider extends BaseProvider<OTTProviderMediaInfoObject> {\n /**\n * @constructor\n * @param {ProviderOptionsObject} options - provider options\n * @param {string} playerVersion - player version\n */\n constructor(options: ProviderOptionsObject, playerVersion: string) {\n super(options, playerVersion);\n this._logger = getLogger('OTTProvider');\n OTTConfiguration.set(options.env);\n this._networkRetryConfig = Object.assign(this._networkRetryConfig, options.networkRetryParameters);\n }\n\n get env() {\n return OTTConfiguration.get();\n }\n\n /**\n * Gets the backend media config.\n * @param {OTTProviderMediaInfoObject} mediaInfo - ott media info\n * @returns {Promise<ProviderMediaConfigObject>} - The provider media config\n */\n getMediaConfig(mediaInfo: OTTProviderMediaInfoObject): Promise<ProviderMediaConfigObject> {\n if (mediaInfo.ks) {\n this.ks = mediaInfo.ks;\n this._isAnonymous = false;\n }\n this._dataLoader = new OTTDataLoaderManager(this.partnerId, this.ks, this._networkRetryConfig);\n return new Promise((resolve, reject) => {\n const entryId = mediaInfo.entryId;\n if (entryId) {\n let ks: string = this.ks;\n if (!ks) {\n ks = '{1:result:ks}';\n this._dataLoader.add(OTTSessionLoader, {partnerId: this.partnerId});\n }\n const contextType = mediaInfo.contextType || KalturaPlaybackContext.Type.PLAYBACK;\n const mediaType = mediaInfo.mediaType || KalturaAsset.Type.MEDIA;\n const assetReferenceType = mediaInfo.assetReferenceType || KalturaAsset.AssetReferenceType.MEDIA;\n const playbackContext: ProviderPlaybackContextOptions = {\n mediaProtocol: mediaInfo.protocol,\n assetFileIds: mediaInfo.fileIds,\n context: contextType\n };\n if (mediaInfo.streamerType) {\n playbackContext.streamerType = mediaInfo.streamerType;\n }\n if (mediaInfo.urlType) {\n playbackContext.urlType = mediaInfo.urlType;\n }\n if (mediaInfo.adapterData) {\n playbackContext.adapterData = mediaInfo.adapterData;\n }\n this._dataLoader.add(OTTAssetLoader, {\n entryId: entryId,\n ks: ks,\n type: mediaType,\n playbackContext: playbackContext,\n assetReferenceType: assetReferenceType\n });\n const requestData = {\n contextType: contextType,\n mediaType: mediaType,\n formats: mediaInfo.formats || []\n };\n return this._dataLoader.fetchData().then(\n response => {\n try {\n resolve(this._parseDataFromResponse(response, requestData));\n } catch (err) {\n reject(err);\n }\n },\n err => {\n reject(err);\n }\n );\n } else {\n reject(new Error(Error.Severity.CRITICAL, Error.Category.PROVIDER, Error.Code.MISSING_MANDATORY_PARAMS, {message: 'missing entry id'}));\n }\n });\n }\n\n _parseDataFromResponse(data: Map<string, Function>, requestData: Object): ProviderMediaConfigObject {\n this._logger.debug('Data parsing started');\n const mediaConfig: ProviderMediaConfigObject = {\n session: {\n isAnonymous: this._isAnonymous,\n partnerId: this.partnerId\n },\n sources: this._getDefaultSourcesObject(),\n plugins: {}\n };\n if (this.uiConfId) {\n mediaConfig.session.uiConfId = this.uiConfId;\n }\n if (data) {\n if (data.has(OTTSessionLoader.id)) {\n const sessionLoader = data.get(OTTSessionLoader.id);\n if (sessionLoader && sessionLoader.response) {\n mediaConfig.session.ks = sessionLoader.response;\n }\n } else {\n mediaConfig.session.ks = this.ks;\n }\n if (data.has(OTTAssetLoader.id)) {\n const assetLoader = data.get(OTTAssetLoader.id);\n if (assetLoader && assetLoader.response && Object.keys(assetLoader.response).length) {\n const response = (assetLoader: OTTAssetLoader).response;\n if (OTTProviderParser.hasBlockAction(response)) {\n throw new Error(Error.Severity.CRITICAL, Error.Category.SERVICE, Error.Code.BLOCK_ACTION, {\n action: OTTProviderParser.getBlockAction(response),\n messages: OTTProviderParser.getErrorMessages(response)\n });\n }\n const mediaEntry = OTTProviderParser.getMediaEntry(response, requestData);\n Object.assign(mediaConfig.sources, this._getSourcesObject(mediaEntry));\n this._verifyHasSources(mediaConfig.sources);\n const bumper = OTTProviderParser.getBumper(response);\n if (bumper) {\n Object.assign(mediaConfig.plugins, {bumper});\n }\n }\n }\n }\n this._logger.debug('Data parsing finished', mediaConfig);\n return mediaConfig;\n }\n\n /**\n * Gets the playlist config from entry list.\n * @param {ProviderEntryListObject} entryListInfo - ott entry list info\n * @returns {Promise<ProviderPlaylistObject>} - The provider playlist config\n */\n getEntryListConfig(entryListInfo: ProviderEntryListObject): Promise<ProviderPlaylistObject> {\n if (entryListInfo.ks) {\n this.ks = entryListInfo.ks;\n this._isAnonymous = false;\n }\n this._dataLoader = new OTTDataLoaderManager(this.partnerId, this.ks, this._networkRetryConfig);\n return new Promise((resolve, reject) => {\n const entries = entryListInfo.entries;\n if (entries && entries.length) {\n let ks: string = this.ks;\n if (!ks) {\n ks = '{1:result:ks}';\n this._dataLoader.add(OTTSessionLoader, {partnerId: this.partnerId});\n }\n this._dataLoader.add(OTTAssetListLoader, {entries, ks});\n this._dataLoader.fetchData(false).then(\n response => {\n resolve(this._parseEntryListDataFromResponse(response, entries));\n },\n err => {\n reject(err);\n }\n );\n } else {\n reject({success: false, data: 'Missing mandatory parameter'});\n }\n });\n }\n\n _parseEntryListDataFromResponse(data: Map<string, Function>, requestEntries: Array<ProviderMediaInfoObject>): ProviderPlaylistObject {\n this._logger.debug('Data parsing started');\n const playlistConfig: ProviderPlaylistObject = {\n id: '',\n metadata: {\n name: '',\n description: ''\n },\n poster: '',\n items: []\n };\n if (data && data.has(OTTAssetListLoader.id)) {\n const playlistLoader = data.get(OTTAssetListLoader.id);\n if (playlistLoader && playlistLoader.response) {\n const entryList = OTTProviderParser.getEntryList(playlistLoader.response, requestEntries);\n entryList.items.forEach(i => playlistConfig.items.push({sources: this._getSourcesObject(i)}));\n }\n }\n this._logger.debug('Data parsing finished', playlistConfig);\n return playlistConfig;\n }\n\n _getDefaultSourcesObject(): ProviderMediaConfigSourcesObject {\n return {\n hls: [],\n dash: [],\n progressive: [],\n image: [],\n id: '',\n duration: 0,\n type: MediaEntry.Type.UNKNOWN,\n poster: '',\n dvr: false,\n vr: null,\n metadata: {\n name: '',\n description: '',\n tags: ''\n }\n };\n }\n\n _getSourcesObject(mediaEntry: MediaEntry) {\n const sourcesObject: ProviderMediaConfigSourcesObject = this._getDefaultSourcesObject();\n const mediaSources = mediaEntry.sources.toJSON();\n sourcesObject.hls = mediaSources.hls;\n sourcesObject.dash = mediaSources.dash;\n sourcesObject.progressive = mediaSources.progressive;\n sourcesObject.id = mediaEntry.id;\n sourcesObject.duration = mediaEntry.duration;\n sourcesObject.type = mediaEntry.type;\n sourcesObject.dvr = !!mediaEntry.dvrStatus;\n sourcesObject.poster = mediaEntry.poster;\n if (\n mediaEntry.metadata &&\n mediaEntry.metadata.metas &&\n typeof mediaEntry.metadata.metas.tags === 'string' &&\n mediaEntry.metadata.metas.tags.indexOf('360') > -1\n ) {\n sourcesObject.vr = {};\n }\n Object.assign(sourcesObject.metadata, mediaEntry.metadata);\n return sourcesObject;\n }\n}\n","// @flow\nimport OTTProvider from './provider';\nimport KalturaPlaybackContext from './response-types/kaltura-playback-context';\nimport KalturaAsset from './response-types/kaltura-asset';\n\ndeclare var __VERSION__: string;\ndeclare var __NAME__: string;\n\nconst NAME = __NAME__ + '-ott';\nconst VERSION = __VERSION__;\n\nconst ContextType = KalturaPlaybackContext.Type;\nconst MediaType = KalturaAsset.Type;\n\nexport {OTTProvider as Provider, ContextType, MediaType, NAME, VERSION};\n"],"sourceRoot":""}
|