From 9ddacb17ddd13139653b158292b00b2e9e90bfa3 Mon Sep 17 00:00:00 2001 From: Dan Ziv Date: Tue, 28 Jul 2020 10:07:14 +0300 Subject: [PATCH] fix: add defaults to request builder (#114) --- dist/playkit-analytics-service.js | 6 +++--- dist/playkit-analytics-service.js.map | 2 +- dist/playkit-bookmark-service.js | 6 +++--- dist/playkit-bookmark-service.js.map | 2 +- dist/playkit-ott-provider.js | 6 +++--- dist/playkit-ott-provider.js.map | 2 +- dist/playkit-ovp-provider.js | 6 +++--- dist/playkit-ovp-provider.js.map | 2 +- dist/playkit-stats-service.js | 6 +++--- dist/playkit-stats-service.js.map | 2 +- src/util/request-builder.js | 6 +++++- 11 files changed, 25 insertions(+), 21 deletions(-) diff --git a/dist/playkit-analytics-service.js b/dist/playkit-analytics-service.js index 4852008d..69d7d27e 100644 --- a/dist/playkit-analytics-service.js +++ b/dist/playkit-analytics-service.js @@ -1,7 +1,7 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.analytics=t():(e.playkit=e.playkit||{},e.playkit.services=e.playkit.services||{},e.playkit.services.analytics=t())}(this,function(){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.i=function(e){return e},t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=19)}([function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:new Map;n(this,e),this._attemptCounter=1,this.headers=t}return o(e,[{key:"getUrl",value:function(e){return e+"/service/"+this.service+(this.action?"/action/"+this.action:"")}},{key:"doHttpRequest",value:function(){var e=this,t=new Promise(function(t,r){e._requestPromise={resolve:t,reject:r}});return this.url||this._requestPromise.reject(new u.default(u.default.Severity.CRITICAL,u.default.Category.NETWORK,u.default.Code.MALFORMED_DATA_URI,{url:this.url})),this._createXHR(),t}},{key:"_createXHR",value:function(){var e=this,t=new XMLHttpRequest;t.onreadystatechange=function(){if(4===t.readyState&&200===t.status)try{var r=JSON.parse(t.responseText);return e.responseHeaders=e._getResponseHeaders(t),e._requestPromise.resolve(r)}catch(r){e._requestPromise.reject(e._createError(t,u.default.Code.BAD_SERVER_RESPONSE,{text:t.responseText}))}},t.open(this.method,this.url,this.retryConfig.async),this.retryConfig.async&&this.retryConfig.timeout&&(t.timeout=this.retryConfig.timeout);var r=performance.now();t.ontimeout=function(){e._handleError(t,u.default.Code.TIMEOUT,{timeout:(performance.now()-r)/1e3,statusText:t.statusText})},t.onerror=t.onabort=function(){e._handleError(t,u.default.Code.HTTP_ERROR,{text:t.responseText,statusText:t.statusText})},this.headers.forEach(function(e,r){t.setRequestHeader(r,e)}),t.send(this.params)}},{key:"_getResponseHeaders",value:function(e){return e.getAllResponseHeaders().split("\n").filter(function(e){return 0===e.toLowerCase().indexOf("x-")})}},{key:"_handleError",value:function(e,t,r){var n=this._createError(e,t,r);if(e.onreadystatechange=function(){},e.onerror=function(){},e.ontimeout=function(){},e.onabort=function(){},!(this.retryConfig.maxAttempts&&this._attemptCounter3&&void 0!==arguments[3]?arguments[3]:{};n(this,e),this.severity=t,this.category=r,this.code=i,this.data=u,(0,o.getLogLevel)("Error")!==o.LogLevel.OFF&&e._logger.error("Category:"+r+" | Code:"+i+" |",u)};c.Severity=u.Severity,c.Category=s.Category,c.Code=a.Code,c._logger=(0,i.default)("Error"),t.default=c},function(e,t,r){"use strict";function n(e){s.setHandler(function(t,r){return e(t,r)})}function o(e){return e?s.get(e):s}function i(e){return o(e).getLevel()}function u(e,t){o(t).setLevel(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.setLogHandler=t.setLogLevel=t.getLogLevel=t.LogLevel=void 0;var a=r(10),s=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(a),c={DEBUG:s.DEBUG,INFO:s.INFO,TIME:s.TIME,WARN:s.WARN,ERROR:s.ERROR,OFF:s.OFF};s.useDefaults({defaultLevel:s.ERROR}),t.default=o,t.LogLevel=c,t.getLogLevel=i,t.setLogLevel=u,t.setLogHandler=n},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function e(t){n(this,e),this.hasError=!1,"KalturaAPIException"===t.objectType?(this.hasError=!0,this.error=new i(t.code,t.message)):t.error&&"KalturaAPIException"===t.error.objectType?(this.hasError=!0,this.error=new i(t.error.code,t.error.message)):this.data=t};t.default=o;var i=function e(t,r){n(this,e),this.code=t,this.message=r}},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.MultiRequestResult=void 0;var s=function(){function e(e,t){for(var r=0;r0?t.slice(0):[],r.forEach(function(t,o){("object"===(void 0===t?"undefined":n(t))&&t!=={}||Array.isArray(t)&&t.length>0)&&(r[o]=e(t))})):"object"===(void 0===t?"undefined":n(t))?(r=Object.assign({},t),Object.keys(r).forEach(function(t){("object"===n(r[t])&&r[t]!=={}||Array.isArray(r[t])&&r[t].length>0)&&(r[t]=e(r[t]))})):r=t,r};t.clone=o},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={NETWORK:1,SERVICE:2,PROVIDER:3};t.Category=n},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={UNSUPPORTED_SCHEME:1e3,BAD_HTTP_STATUS:1001,HTTP_ERROR:1002,TIMEOUT:1003,MALFORMED_DATA_URI:1004,BAD_SERVER_RESPONSE:1005,MULTIREQUEST_API_ERROR:1006,API_RESPONSE_MISMATCH:1007,ERROR:2e3,BLOCK_ACTION:2001,MEDIA_STATUS_NOT_READY:2002,MISSING_MANDATORY_PARAMS:3e3,MISSING_PLAY_SOURCE:3001,METHOD_NOT_IMPLEMENTED:3002};t.Code=n},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={RECOVERABLE:1,CRITICAL:2};t.Severity=n},function(e,t,r){var n,o;/*! +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.analytics=t():(e.playkit=e.playkit||{},e.playkit.services=e.playkit.services||{},e.playkit.services.analytics=t())}(window,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=10)}([function(e,t,r){"use strict";r.d(t,"a",(function(){return a}));var n=r(2);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var a=function e(t,r,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};o(this,e),this.severity=t,this.category=r,this.code=i,this.data=a,Object(n.c)("Error")!==n.a.OFF&&e._logger.error("Category:".concat(r," | Code:").concat(i," |"),a)};i(a,"Severity",{RECOVERABLE:1,CRITICAL:2}),i(a,"Category",{NETWORK:1,SERVICE:2,PROVIDER:3}),i(a,"Code",{UNSUPPORTED_SCHEME:1e3,BAD_HTTP_STATUS:1001,HTTP_ERROR:1002,TIMEOUT:1003,MALFORMED_DATA_URI:1004,BAD_SERVER_RESPONSE:1005,MULTIREQUEST_API_ERROR:1006,API_RESPONSE_MISMATCH:1007,ERROR:2e3,BLOCK_ACTION:2001,MEDIA_STATUS_NOT_READY:2002,MISSING_MANDATORY_PARAMS:3e3,MISSING_PLAY_SOURCE:3001,METHOD_NOT_IMPLEMENTED:3002}),i(a,"_logger",Object(n.b)("Error"))},function(e,t,r){var n,o; +/*! * js-logger - http://github.com/jonnyreeves/js-logger * Jonny Reeves, http://jonnyreeves.co.uk/ * js-logger may be freely distributed under the MIT license. - */ -!function(i){"use strict";var u={};u.VERSION="1.4.1";var a,s={},c=function(e,t){return function(){return t.apply(e,arguments)}},l=function(){var e,t,r=arguments,n=r[0];for(t=1;t=t.value},debug:function(){this.invoke(u.DEBUG,arguments)},info:function(){this.invoke(u.INFO,arguments)},warn:function(){this.invoke(u.WARN,arguments)},error:function(){this.invoke(u.ERROR,arguments)},time:function(e){"string"==typeof e&&e.length>0&&this.invoke(u.TIME,[e,"start"])},timeEnd:function(e){"string"==typeof e&&e.length>0&&this.invoke(u.TIME,[e,"end"])},invoke:function(e,t){a&&this.enabledFor(e)&&a(t,l({level:e},this.context))}};var p=new d({filterLevel:u.OFF});!function(){var e=u;e.enabledFor=c(p,p.enabledFor),e.debug=c(p,p.debug),e.time=c(p,p.time),e.timeEnd=c(p,p.timeEnd),e.info=c(p,p.info),e.warn=c(p,p.warn),e.error=c(p,p.error),e.log=e.info}(),u.setHandler=function(e){a=e},u.setLevel=function(e){p.setLevel(e);for(var t in s)s.hasOwnProperty(t)&&s[t].setLevel(e)},u.getLevel=function(){return p.getLevel()},u.get=function(e){return s[e]||(s[e]=new d(l({name:e},p.context)))},u.createDefaultHandler=function(e){e=e||{},e.formatter=e.formatter||function(e,t){t.name&&e.unshift("["+t.name+"]")};var t={},r=function(e,t){Function.prototype.apply.call(e,console,t)};return"undefined"==typeof console?function(){}:function(n,o){n=Array.prototype.slice.call(n);var i,a=console.log;o.level===u.TIME?(i=(o.name?"["+o.name+"] ":"")+n[0],"start"===n[1]?console.time?console.time(i):t[i]=(new Date).getTime():console.timeEnd?console.timeEnd(i):r(a,[i+": "+((new Date).getTime()-t[i])+"ms"])):(o.level===u.WARN&&console.warn?a=console.warn:o.level===u.ERROR&&console.error?a=console.error:o.level===u.INFO&&console.info?a=console.info:o.level===u.DEBUG&&console.debug&&(a=console.debug),e.formatter(n,o),r(a,n))}},u.useDefaults=function(e){u.setLevel(e&&e.defaultLevel||u.DEBUG),u.setHandler(u.createDefaultHandler(e))},n=u,void 0!==(o="function"==typeof n?n.call(t,r,t,e):n)&&(e.exports=o)}()},,function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var r=0;r=t.value},trace:function(){this.invoke(c.TRACE,arguments)},debug:function(){this.invoke(c.DEBUG,arguments)},info:function(){this.invoke(c.INFO,arguments)},warn:function(){this.invoke(c.WARN,arguments)},error:function(){this.invoke(c.ERROR,arguments)},time:function(e){"string"==typeof e&&e.length>0&&this.invoke(c.TIME,[e,"start"])},timeEnd:function(e){"string"==typeof e&&e.length>0&&this.invoke(c.TIME,[e,"end"])},invoke:function(e,t){a&&this.enabledFor(e)&&a(t,f({level:e},this.context))}};var y,v=new p({filterLevel:c.OFF});(y=c).enabledFor=s(v,v.enabledFor),y.trace=s(v,v.trace),y.debug=s(v,v.debug),y.time=s(v,v.time),y.timeEnd=s(v,v.timeEnd),y.info=s(v,v.info),y.warn=s(v,v.warn),y.error=s(v,v.error),y.log=y.info,c.setHandler=function(e){a=e},c.setLevel=function(e){for(var t in v.setLevel(e),u)u.hasOwnProperty(t)&&u[t].setLevel(e)},c.getLevel=function(){return v.getLevel()},c.get=function(e){return u[e]||(u[e]=new p(f({name:e},v.context)))},c.createDefaultHandler=function(e){(e=e||{}).formatter=e.formatter||function(e,t){t.name&&e.unshift("["+t.name+"]")};var t={},r=function(e,t){Function.prototype.apply.call(e,console,t)};return"undefined"==typeof console?function(){}:function(n,o){n=Array.prototype.slice.call(n);var i,a=console.log;o.level===c.TIME?(i=(o.name?"["+o.name+"] ":"")+n[0],"start"===n[1]?console.time?console.time(i):t[i]=(new Date).getTime():console.timeEnd?console.timeEnd(i):r(a,[i+": "+((new Date).getTime()-t[i])+"ms"])):(o.level===c.WARN&&console.warn?a=console.warn:o.level===c.ERROR&&console.error?a=console.error:o.level===c.INFO&&console.info?a=console.info:o.level===c.DEBUG&&console.debug?a=console.debug:o.level===c.TRACE&&console.trace&&(a=console.trace),e.formatter(n,o),r(a,n))}},c.useDefaults=function(e){c.setLevel(e&&e.defaultLevel||c.DEBUG),c.setHandler(c.createDefaultHandler(e))},void 0===(o="function"==typeof(n=c)?n.call(t,r,t,e):n)||(e.exports=o)}()},function(e,t,r){"use strict";r.d(t,"a",(function(){return o})),r.d(t,"c",(function(){return a}));var n=r(1),o={DEBUG:n.DEBUG,INFO:n.INFO,TIME:n.TIME,WARN:n.WARN,ERROR:n.ERROR,OFF:n.OFF};function i(e){return e?n.get(e):n}function a(e){return i(e).getLevel()}n.useDefaults({defaultLevel:n.ERROR}),t.b=i},function(e,t,r){"use strict";r.d(t,"a",(function(){return c}));var n=r(0);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:new Map;o(this,e),a(this,"retryConfig",{async:!0,timeout:0,maxAttempts:4}),a(this,"_attemptCounter",1),this.headers=t}var t,r,c;return t=e,(r=[{key:"getUrl",value:function(e){return e+"/service/"+this.service+(this.action?"/action/"+this.action:"")}},{key:"doHttpRequest",value:function(){var e=this,t=new Promise((function(t,r){e._requestPromise={resolve:t,reject:r}}));return this.url||this._requestPromise.reject(new n.a(n.a.Severity.CRITICAL,n.a.Category.NETWORK,n.a.Code.MALFORMED_DATA_URI,{url:this.url})),this._createXHR(),t}},{key:"_createXHR",value:function(){var e=this,t=new XMLHttpRequest;t.onreadystatechange=function(){if(4===t.readyState&&200===t.status)try{var r=JSON.parse(t.responseText);return e.responseHeaders=e._getResponseHeaders(t),e._requestPromise.resolve(r)}catch(r){e._requestPromise.reject(e._createError(t,n.a.Code.BAD_SERVER_RESPONSE,{text:t.responseText}))}},t.open(this.method,this.url,this.retryConfig.async),this.retryConfig.async&&this.retryConfig.timeout&&(t.timeout=this.retryConfig.timeout);var r=performance.now();t.ontimeout=function(){e._handleError(t,n.a.Code.TIMEOUT,{timeout:(performance.now()-r)/1e3,statusText:t.statusText})},t.onerror=t.onabort=function(){e._handleError(t,n.a.Code.HTTP_ERROR,{text:t.responseText,statusText:t.statusText})},this.headers.forEach((function(e,r){t.setRequestHeader(r,e)})),t.send(this.params)}},{key:"_getResponseHeaders",value:function(e){return e.getAllResponseHeaders().split("\n").filter((function(e){return 0===e.toLowerCase().indexOf("x-")}))}},{key:"_handleError",value:function(e,t,r){var n=this._createError(e,t,r);if(e.onreadystatechange=function(){},e.onerror=function(){},e.ontimeout=function(){},e.onabort=function(){},!(this.retryConfig.maxAttempts&&this._attemptCounter0?t.slice(0):[]).forEach((function(t,o){("object"===n(t)&&t!=={}||Array.isArray(t)&&t.length>0)&&(r[o]=e(t))})):"object"===n(t)?(r=Object.assign({},t),Object.keys(r).forEach((function(t){("object"===n(r[t])&&r[t]!=={}||Array.isArray(r[t])&&r[t].length>0)&&(r[t]=e(r[t]))}))):r=t,r}},function(e,t,r){"use strict";r.d(t,"a",(function(){return m}));var n=r(3),o=r(2);function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function e(t){var r,n,o;i(this,e),o=!1,(n="hasError")in(r=this)?Object.defineProperty(r,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[n]=o,"KalturaAPIException"===t.objectType?(this.hasError=!0,this.error=new c(t.code,t.message)):t.error&&"KalturaAPIException"===t.error.objectType?(this.hasError=!0,this.error=new c(t.error.code,t.error.message)):this.data=t},c=function e(t,r){i(this,e),this.code=t,this.message=r},u=r(0);function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var r=0;r} headers The request headers\n */\n\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\n /**\n * @description network retry configuration\n * @memberof RequestBuilder\n * @type {ProviderNetworkRetryParameters}\n */\n\n /**\n * @memberof - Service tag\n * @type {string}\n */\n\n /**\n * @memberof - Service URL\n * @type {string}\n */\n\n /**\n * @member - Service params\n * @type {any}\n */\n\n /**\n * @member - Service name\n * @type {string}\n */\n function RequestBuilder() {\n var headers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Map();\n\n _classCallCheck(this, RequestBuilder);\n\n this._attemptCounter = 1;\n\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\n\n /**\n * @description number of xhr attempts for the same multi - request.\n * @memberof RequestBuilder\n * @type {number}\n * @private\n */\n\n /**\n * @memberof - the response headers of the arra\n * @type {Array}\n */\n\n /**\n * @memberof - Service method (POST,GET,DELETE etc..)\n * @type {string}\n */\n\n /**\n * @memberof - Service headers\n * @type {Map}\n */\n\n /**\n * @member - Service action\n * @type {string}\n */\n\n\n _createClass(RequestBuilder, [{\n key: 'getUrl',\n value: function getUrl(serviceUrl) {\n return serviceUrl + '/service/' + this.service + (this.action ? '/action/' + this.action : '');\n }\n\n /**\n * Executes service\n * @function doHttpRequest\n * @returns {Promise.} Service response as promise\n */\n\n }, {\n key: 'doHttpRequest',\n value: function doHttpRequest() {\n var _this = this;\n\n var promise = new Promise(function (resolve, reject) {\n _this._requestPromise = {\n resolve: resolve,\n reject: reject\n };\n });\n if (!this.url) {\n this._requestPromise.reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, _error2.default.Code.MALFORMED_DATA_URI, {\n url: this.url\n }));\n }\n this._createXHR();\n return promise;\n }\n }, {\n key: '_createXHR',\n value: function _createXHR() {\n var _this2 = this;\n\n var request = new XMLHttpRequest();\n request.onreadystatechange = function () {\n if (request.readyState === 4) {\n if (request.status === 200) {\n try {\n var response = JSON.parse(request.responseText);\n _this2.responseHeaders = _this2._getResponseHeaders(request);\n // the promise returns the response for backwards compatibility\n return _this2._requestPromise.resolve(response);\n } catch (error) {\n _this2._requestPromise.reject(_this2._createError(request, _error2.default.Code.BAD_SERVER_RESPONSE, {\n text: request.responseText\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 var requestTime = performance.now();\n request.ontimeout = function () {\n _this2._handleError(request, _error2.default.Code.TIMEOUT, {\n timeout: (performance.now() - requestTime) / 1000,\n statusText: request.statusText\n });\n };\n request.onerror = request.onabort = function () {\n _this2._handleError(request, _error2.default.Code.HTTP_ERROR, {\n text: request.responseText,\n statusText: request.statusText\n });\n };\n this.headers.forEach(function (value, key) {\n request.setRequestHeader(key, value);\n });\n request.send(this.params);\n }\n }, {\n key: '_getResponseHeaders',\n value: function _getResponseHeaders(request) {\n return request.getAllResponseHeaders().split('\\n').filter(function (header) {\n return header.toLowerCase().indexOf(KALTURA_HEADER_PREFIX) === 0;\n });\n }\n }, {\n key: '_handleError',\n value: function _handleError(request, code, data) {\n var 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 key: '_createError',\n value: function _createError(request, code, data) {\n Object.assign(data, {\n url: this.url,\n headers: this._getResponseHeaders(request),\n attempt: this._attemptCounter\n });\n return new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, code, data);\n }\n }]);\n\n return RequestBuilder;\n}();\n\nexports.default = RequestBuilder;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.OVPConfiguration = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _clone = __webpack_require__(6);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar defaultConfig = {\n serviceUrl: 'https://cdnapisec.kaltura.com/api_v3',\n cdnUrl: 'https://cdnapisec.kaltura.com',\n serviceParams: {\n apiVersion: '3.3.0',\n format: 1\n },\n useApiCaptions: true\n};\n\nvar OVPConfiguration = function () {\n function OVPConfiguration() {\n _classCallCheck(this, OVPConfiguration);\n }\n\n _createClass(OVPConfiguration, null, [{\n key: 'set',\n value: function set(clientConfig) {\n if (clientConfig) {\n Object.assign(defaultConfig, clientConfig);\n }\n }\n }, {\n key: 'get',\n value: function get() {\n return (0, _clone.clone)(defaultConfig);\n }\n }]);\n\n return OVPConfiguration;\n}();\n\nexports.default = OVPConfiguration;\nexports.OVPConfiguration = OVPConfiguration;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _logger = __webpack_require__(3);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _severity = __webpack_require__(9);\n\nvar _code = __webpack_require__(8);\n\nvar _category = __webpack_require__(7);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CLASS_NAME = 'Error';\n\n/**\n * @classdesc This is a description of the error class.\n */\n\nvar Error =\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\n/**\n * @enum {number}\n */\n\n/**\n * @enum {number}\n */\nfunction Error(severity, category, code) {\n var data = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n _classCallCheck(this, Error);\n\n this.severity = severity;\n this.category = category;\n this.code = code;\n this.data = data;\n if ((0, _logger.getLogLevel)(CLASS_NAME) !== _logger.LogLevel.OFF) {\n Error._logger.error('Category:' + category + ' | Code:' + code + ' |', data);\n }\n}\n/**\n * @enum {number}\n */\n;\n\nError.Severity = _severity.Severity;\nError.Category = _category.Category;\nError.Code = _code.Code;\nError._logger = (0, _logger2.default)(CLASS_NAME);\nexports.default = Error;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.setLogHandler = exports.setLogLevel = exports.getLogLevel = exports.LogLevel = undefined;\n\nvar _jsLogger = __webpack_require__(10);\n\nvar JsLogger = _interopRequireWildcard(_jsLogger);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar LogLevel = {\n DEBUG: JsLogger.DEBUG,\n INFO: JsLogger.INFO,\n TIME: JsLogger.TIME,\n WARN: JsLogger.WARN,\n ERROR: JsLogger.ERROR,\n OFF: JsLogger.OFF\n};\n\n\nJsLogger.useDefaults({ defaultLevel: JsLogger.ERROR });\n\n/**\n * sets the logger handler\n * @param {LogHandlerType} handler - the log level\n * @returns {void}\n */\nfunction setLogHandler(handler) {\n JsLogger.setHandler(function (messages, context) {\n return handler(messages, context);\n });\n}\n/**\n * get a logger\n * @param {?string} name - the logger name\n * @returns {Object} - the logger class\n */\nfunction getLogger(name) {\n if (!name) {\n return JsLogger;\n }\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) {\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, name) {\n getLogger(name).setLevel(level);\n}\n\nexports.default = getLogger;\nexports.LogLevel = LogLevel;\nexports.getLogLevel = getLogLevel;\nexports.setLogLevel = setLogLevel;\nexports.setLogHandler = setLogHandler;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ServiceResult =\n\n/**\n * @constructor\n * @param {Object} response - Service response\n */\n\n/**\n * @member - The service error\n * @type {ServiceError}\n */\n\n/**\n * @member - The service result data\n * @type {Object}\n */\nfunction ServiceResult(response) {\n _classCallCheck(this, ServiceResult);\n\n this.hasError = false;\n\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 * @member - Is service returned an error\n * @type {boolean}\n */\n;\n\nexports.default = ServiceResult;\n\nvar ServiceError =\n\n/**\n * @constructor\n * @param {string} code - The result code\n * @param {string} message - The result message\n */\n\n/**\n * @member - The error code\n * @type {string}\n */\nfunction ServiceError(code, message) {\n _classCallCheck(this, ServiceError);\n\n this.code = code;\n this.message = message;\n}\n/**\n * @member - The error message\n * @type {string}\n */\n;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MultiRequestResult = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _logger = __webpack_require__(3);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _baseServiceResult = __webpack_require__(4);\n\nvar _baseServiceResult2 = _interopRequireDefault(_baseServiceResult);\n\nvar _error = __webpack_require__(2);\n\nvar _error2 = _interopRequireDefault(_error);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MultiRequestBuilder = function (_RequestBuilder) {\n _inherits(MultiRequestBuilder, _RequestBuilder);\n\n function MultiRequestBuilder() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, MultiRequestBuilder);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = MultiRequestBuilder.__proto__ || Object.getPrototypeOf(MultiRequestBuilder)).call.apply(_ref, [this].concat(args))), _this), _this.requests = [], _temp), _possibleConstructorReturn(_this, _ret);\n }\n /**\n * @memberof - MultiRequestBuilder\n * @type {Array}\n */\n\n\n _createClass(MultiRequestBuilder, [{\n key: 'add',\n\n /**\n * Adds request to requests array\n * @function add\n * @param {RequestBuilder} request The request\n * @returns {MultiRequestBuilder} The multiRequest\n */\n value: function add(request) {\n this.requests.push(request);\n var requestParams = {};\n var serviceDef = { service: request.service, action: request.action };\n Object.assign(requestParams, _defineProperty({}, 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 * @returns {Promise} The multirequest execution promise\n */\n\n }, {\n key: 'execute',\n value: function execute() {\n var _this2 = this;\n\n return new Promise(function (resolve, reject) {\n try {\n _this2.params = JSON.stringify(_this2.params);\n } catch (err) {\n MultiRequestBuilder._logger.error('' + err.message);\n reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.PROVIDER, _error2.default.Code.FAILED_PARSING_REQUEST, {\n error: err,\n params: _this2.params\n }));\n }\n _this2.doHttpRequest().then(function (data) {\n var multiRequestResult = new MultiRequestResult(data);\n if (multiRequestResult.success) {\n resolve({\n headers: _this2.responseHeaders,\n response: multiRequestResult\n });\n } else {\n reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, _error2.default.Code.MULTIREQUEST_API_ERROR, {\n url: _this2.url,\n headers: _this2.responseHeaders,\n results: multiRequestResult.results\n }));\n }\n }, function (err) {\n reject(err);\n });\n });\n }\n }]);\n\n return MultiRequestBuilder;\n}(_requestBuilder2.default);\n\nMultiRequestBuilder._logger = (0, _logger2.default)('MultiRequestBuilder');\nexports.default = MultiRequestBuilder;\n\nvar MultiRequestResult =\n/**\n * @constructor\n * @param {Object} response data\n */\nexports.MultiRequestResult = function MultiRequestResult(response) {\n var _this3 = this;\n\n _classCallCheck(this, MultiRequestResult);\n\n this.results = [];\n\n this.success = true;\n var responseArr = response.result ? response.result : response;\n responseArr.forEach(function (result) {\n var serviceResult = new _baseServiceResult2.default(result);\n _this3.results.push(serviceResult);\n if (serviceResult.hasError) {\n MultiRequestResult._logger.error('Service returned an error with error code: ' + serviceResult.error.code + ' and message: ' + serviceResult.error.message + '.');\n _this3.success = false;\n return;\n }\n });\n}\n/**\n * @memberof MultiRequestResult\n * @type {Object}\n */\n\n/**\n * @memberof MultiRequestResult\n * @type {boolean}\n */\n;\n\nMultiRequestResult._logger = (0, _logger2.default)('MultiRequestResult');\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar clone = function clone(data) {\n var node = void 0;\n if (Array.isArray(data)) {\n node = data.length > 0 ? data.slice(0) : [];\n node.forEach(function (e, i) {\n if ((typeof e === 'undefined' ? 'undefined' : _typeof(e)) === 'object' && e !== {} || Array.isArray(e) && e.length > 0) {\n node[i] = clone(e);\n }\n });\n } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') {\n node = Object.assign({}, data);\n Object.keys(node).forEach(function (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\nexports.clone = clone;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n\nvar Category = {\n /** Errors from the network stack. */\n NETWORK: 1,\n SERVICE: 2,\n PROVIDER: 3\n};\nexports.Category = Category;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n\nvar Code = {\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\nexports.Code = Code;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n\nvar Severity = {\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\nexports.Severity = Severity;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.4.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.DEBUG = defineLogLevel(1, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(2, 'INFO');\r\n\tLogger.TIME = defineLogLevel(3, 'TIME');\r\n\tLogger.WARN = defineLogLevel(4, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (true) {\r\n\t\t!(__WEBPACK_AMD_DEFINE_FACTORY__ = (Logger),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n\n\n/***/ }),\n/* 11 */,\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _multiRequestBuilder = __webpack_require__(5);\n\nvar _multiRequestBuilder2 = _interopRequireDefault(_multiRequestBuilder);\n\nvar _config = __webpack_require__(1);\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SERVICE_NAME = 'multirequest';\n\nvar OVPService = function () {\n function OVPService() {\n _classCallCheck(this, OVPService);\n }\n\n _createClass(OVPService, null, [{\n key: 'getMultiRequest',\n\n /**\n * Gets a new instance of MultiRequestBuilder with ovp params\n * @function getMultiRequest\n * @param {string} playerVersion The player version\n * @param {string} ks The ks\n * @param {string} partnerId The partner ID\n * @returns {MultiRequestBuilder} The multi request builder\n * @static\n */\n value: function getMultiRequest(playerVersion, ks, partnerId) {\n var config = _config2.default.get();\n var ovpParams = config.serviceParams;\n Object.assign(ovpParams, { ks: ks, clientTag: 'html5:v' + playerVersion });\n if (partnerId) {\n Object.assign(ovpParams, { partnerId: partnerId });\n }\n var headers = new Map();\n headers.set('Content-Type', 'application/json');\n var multiReq = new _multiRequestBuilder2.default(headers);\n multiReq.method = 'POST';\n multiReq.service = SERVICE_NAME;\n multiReq.url = multiReq.getUrl(config.serviceUrl);\n multiReq.params = ovpParams;\n return multiReq;\n }\n }]);\n\n return OVPService;\n}();\n\nexports.default = OVPService;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar param = function param(a) {\n var s = [],\n rbracket = /\\[\\]$/,\n isArray = function isArray(obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n },\n add = function add(k, v) {\n v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v;\n s[s.length] = encodeURIComponent(k) + '=' + encodeURIComponent(v);\n },\n buildParams = function buildParams(prefix, obj) {\n var i = void 0,\n len = void 0,\n key = void 0;\n\n if (prefix) {\n if (isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n if (rbracket.test(prefix)) {\n add(prefix, obj[i]);\n } else {\n buildParams(prefix + ':' + (_typeof(obj[i]) === 'object' ? i : ''), obj[i]);\n }\n }\n } else if (obj && String(obj) === '[object Object]') {\n for (key in obj) {\n buildParams(prefix + ':' + key, obj[key]);\n }\n } else {\n add(prefix, obj);\n }\n } else if (isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n add(obj[i].name, obj[i].value);\n }\n } else {\n for (key in obj) {\n buildParams(key, obj[key]);\n }\n }\n return s;\n };\n\n return buildParams('', a).join('&').replace(/%20/g, '+');\n};\n\nexports.param = param;\n\n/***/ }),\n/* 14 */,\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _ovpService = __webpack_require__(12);\n\nvar _ovpService2 = _interopRequireDefault(_ovpService);\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _config = __webpack_require__(1);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _param = __webpack_require__(13);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SERVICE_NAME = 'analytics';\n\nvar OVPAnalyticsService = function (_OVPService) {\n _inherits(OVPAnalyticsService, _OVPService);\n\n function OVPAnalyticsService() {\n _classCallCheck(this, OVPAnalyticsService);\n\n return _possibleConstructorReturn(this, (OVPAnalyticsService.__proto__ || Object.getPrototypeOf(OVPAnalyticsService)).apply(this, arguments));\n }\n\n _createClass(OVPAnalyticsService, null, [{\n key: 'trackEvent',\n\n /**\n * Creates an instance of RequestBuilder for analytics.trackEvent\n * @function trackEvent\n * @param {string} serviceUrl - The service base url\n * @param {Object} params - The event params\n * @returns {RequestBuilder} - The request builder\n * @static\n */\n value: function trackEvent(serviceUrl, params) {\n var ovpParams = _config2.default.get();\n var serviceParams = {};\n Object.assign(serviceParams, ovpParams.serviceParams, params);\n var request = new _requestBuilder2.default();\n request.service = SERVICE_NAME;\n request.action = 'trackEvent';\n request.method = 'GET';\n request.tag = 'analytics-trackEvent';\n request.params = serviceParams;\n request.url = serviceUrl + '?service=' + request.service + '&action=' + request.action + '&' + (0, _param.param)(request.params);\n return request;\n }\n }]);\n\n return OVPAnalyticsService;\n}(_ovpService2.default);\n\nexports.default = OVPAnalyticsService;\n\n/***/ }),\n/* 16 */,\n/* 17 */,\n/* 18 */,\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.VERSION = exports.NAME = exports.RequestBuilder = exports.OVPConfiguration = exports.OVPAnalyticsService = undefined;\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _config = __webpack_require__(1);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _analyticsService = __webpack_require__(15);\n\nvar _analyticsService2 = _interopRequireDefault(_analyticsService);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar NAME = \"playkit-js-providers\" + '-analytics-service';\n\nvar VERSION = \"2.21.1\";\n\nexports.OVPAnalyticsService = _analyticsService2.default;\nexports.OVPConfiguration = _config2.default;\nexports.RequestBuilder = _requestBuilder2.default;\nexports.NAME = NAME;\nexports.VERSION = VERSION;\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// playkit-analytics-service.js"," \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// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\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 \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 19);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 19f73764c22efc6116dd","//@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}\n */\n headers: Map;\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}\n */\n responseHeaders: Array;\n /**\n * @description network retry configuration\n * @memberof RequestBuilder\n * @type {ProviderNetworkRetryParameters}\n */\n retryConfig: ProviderNetworkRetryParameters;\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} headers The request headers\n */\n constructor(headers: Map = 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.} Service response as promise\n */\n doHttpRequest(): Promise {\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 {\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\n\n\n// WEBPACK FOOTER //\n// ./util/request-builder.js","//@flow\nimport {clone} from '../../util/clone';\n\nconst defaultConfig: Object = {\n serviceUrl: 'https://cdnapisec.kaltura.com/api_v3',\n cdnUrl: 'https://cdnapisec.kaltura.com',\n serviceParams: {\n apiVersion: '3.3.0',\n format: 1\n },\n useApiCaptions: true\n};\n\nexport default class OVPConfiguration {\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 {OVPConfiguration};\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/config.js","//@flow\nimport getLogger, {getLogLevel, LogLevel} 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 if (getLogLevel(CLASS_NAME) !== LogLevel.OFF) {\n Error._logger.error(`Category:${category} | Code:${code} |`, data);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./util/error/error.js","//@flow\nimport * as JsLogger from 'js-logger';\n\nexport type LogLevelObject = {value: number, name: string};\nexport type LogLevelType = {[level: string]: LogLevelObject};\n\nconst LogLevel: LogLevelType = {\n DEBUG: JsLogger.DEBUG,\n INFO: JsLogger.INFO,\n TIME: JsLogger.TIME,\n WARN: JsLogger.WARN,\n ERROR: JsLogger.ERROR,\n OFF: JsLogger.OFF\n};\n\nJsLogger.useDefaults({defaultLevel: JsLogger.ERROR});\n\n/**\n * sets the logger handler\n * @param {LogHandlerType} handler - the log level\n * @returns {void}\n */\nfunction setLogHandler(handler: LogHandlerType): void {\n JsLogger.setHandler((messages, context) => handler(messages, context));\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 if (!name) {\n return JsLogger;\n }\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 {LogLevel, getLogLevel, setLogLevel, setLogHandler};\n\n\n\n// WEBPACK FOOTER //\n// ./util/logger.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/base-service-result.js","//@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}\n */\n requests: Array = [];\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 * @returns {Promise} The multirequest execution promise\n */\n execute(): Promise {\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);\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 = [];\n /**\n * @constructor\n * @param {Object} response data\n */\n constructor(response: Object) {\n this.success = true;\n const responseArr = response.result ? response.result : response;\n responseArr.forEach(result => {\n const serviceResult: ServiceResult = new ServiceResult(result);\n this.results.push(serviceResult);\n if (serviceResult.hasError) {\n MultiRequestResult._logger.error(\n `Service returned an error with error code: ${serviceResult.error.code} and message: ${serviceResult.error.message}.`\n );\n this.success = false;\n return;\n }\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/multi-request-builder.js","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\n\n\n// WEBPACK FOOTER //\n// ./util/clone.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./util/error/category.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./util/error/code.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./util/error/severity.js","/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.4.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.DEBUG = defineLogLevel(1, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(2, 'INFO');\r\n\tLogger.TIME = defineLogLevel(3, 'TIME');\r\n\tLogger.WARN = defineLogLevel(4, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(Logger);\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/js-logger/src/logger.js\n// module id = 10\n// module chunks = 0 1 2","//@flow\nimport MultiRequestBuilder from '../../common/multi-request-builder';\nimport OVPConfiguration from '../config';\n\nconst SERVICE_NAME: string = 'multirequest';\n\nexport default class OVPService {\n /**\n * Gets a new instance of MultiRequestBuilder with ovp params\n * @function getMultiRequest\n * @param {string} playerVersion The player version\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(playerVersion: string, ks: string, partnerId?: number): MultiRequestBuilder {\n const config = OVPConfiguration.get();\n const ovpParams = config.serviceParams;\n Object.assign(ovpParams, {ks: ks, clientTag: 'html5:v' + playerVersion});\n if (partnerId) {\n Object.assign(ovpParams, {partnerId: partnerId});\n }\n const headers: Map = 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 = ovpParams;\n return multiReq;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/services/ovp-service.js","const param = a => {\n let s = [],\n rbracket = /\\[\\]$/,\n isArray = function(obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n },\n add = function(k, v) {\n v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v;\n s[s.length] = encodeURIComponent(k) + '=' + encodeURIComponent(v);\n },\n buildParams = function(prefix, obj) {\n let i, len, key;\n\n if (prefix) {\n if (isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n if (rbracket.test(prefix)) {\n add(prefix, obj[i]);\n } else {\n buildParams(prefix + ':' + (typeof obj[i] === 'object' ? i : ''), obj[i]);\n }\n }\n } else if (obj && String(obj) === '[object Object]') {\n for (key in obj) {\n buildParams(prefix + ':' + key, obj[key]);\n }\n } else {\n add(prefix, obj);\n }\n } else if (isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n add(obj[i].name, obj[i].value);\n }\n } else {\n for (key in obj) {\n buildParams(key, obj[key]);\n }\n }\n return s;\n };\n\n return buildParams('', a)\n .join('&')\n .replace(/%20/g, '+');\n};\n\nexport {param};\n\n\n\n// WEBPACK FOOTER //\n// ./util/param.js","//@flow\nimport OVPService from '../ovp-service';\nimport RequestBuilder from '../../../../util/request-builder';\nimport OVPConfiguration from '../../config';\nimport {param} from '../../../../util/param';\n\nconst SERVICE_NAME: string = 'analytics';\n\nexport default class OVPAnalyticsService extends OVPService {\n /**\n * Creates an instance of RequestBuilder for analytics.trackEvent\n * @function trackEvent\n * @param {string} serviceUrl - The service base url\n * @param {Object} params - The event params\n * @returns {RequestBuilder} - The request builder\n * @static\n */\n static trackEvent(serviceUrl: string, params: Object): RequestBuilder {\n const ovpParams = OVPConfiguration.get();\n const serviceParams = {};\n Object.assign(serviceParams, ovpParams.serviceParams, params);\n const request = new RequestBuilder();\n request.service = SERVICE_NAME;\n request.action = 'trackEvent';\n request.method = 'GET';\n request.tag = 'analytics-trackEvent';\n request.params = serviceParams;\n request.url = serviceUrl + '?service=' + request.service + '&action=' + request.action + '&' + param(request.params);\n return request;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/services/analytics/analytics-service.js","// @flow\nimport RequestBuilder from '../../../../util/request-builder';\nimport OVPConfiguration from '../../config';\nimport OVPAnalyticsService from './analytics-service';\n\ndeclare var __VERSION__: string;\ndeclare var __NAME__: string;\n\nconst NAME = __NAME__ + '-analytics-service';\nconst VERSION = __VERSION__;\n\nexport {OVPAnalyticsService, OVPConfiguration, RequestBuilder, NAME, VERSION};\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/services/analytics/index.js"],"sourceRoot":""} \ No newline at end of file +{"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/../node_modules/js-logger/src/logger.js","./providers/./util/logger.js","./providers/./util/request-builder.js","./providers/./k-provider/ovp/config.js","./providers/./util/clone.js","./providers/./k-provider/common/base-service-result.js","./providers/./k-provider/common/multi-request-builder.js","./providers/./k-provider/ovp/services/ovp-service.js","./providers/./util/param.js","./providers/./k-provider/ovp/services/analytics/analytics-service.js","./providers/./k-provider/ovp/services/analytics/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","getLogLevel","LogLevel","OFF","_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","global","logHandler","Logger","VERSION","contextualLoggersByNameMap","scope","func","apply","arguments","merge","args","target","length","defineLogLevel","TRACE","DEBUG","INFO","TIME","WARN","ContextualLogger","defaultContext","context","setLevel","filterLevel","log","info","newLevel","getLevel","enabledFor","lvl","trace","invoke","debug","warn","time","label","timeEnd","level","msgArgs","L","globalLogger","setHandler","createDefaultHandler","options","formatter","messages","unshift","timerStartTimeByLabelMap","invokeConsoleMethod","hdlr","Function","console","Array","slice","timerLabel","Date","getTime","useDefaults","defaultLevel","JsLogger","RequestBuilder","headers","Map","async","timeout","maxAttempts","serviceUrl","service","action","promise","Promise","resolve","reject","_requestPromise","url","Severity","Category","Code","_createXHR","request","XMLHttpRequest","onreadystatechange","readyState","status","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","defaultConfig","cdnUrl","serviceParams","apiVersion","format","useApiCaptions","OVPConfiguration","clientConfig","clone","node","isArray","e","keys","ServiceResult","objectType","hasError","ServiceError","message","MultiRequestBuilder","requests","push","requestParams","serviceDef","stringify","err","FAILED_PARSING_REQUEST","doHttpRequest","then","multiRequestResult","MultiRequestResult","success","results","result","serviceResult","OVPService","playerVersion","ks","partnerId","config","ovpParams","clientTag","set","multiReq","getUrl","param","a","rbracket","obj","toString","add","k","v","encodeURIComponent","buildParams","prefix","len","test","String","join","replace","OVPAnalyticsService","tag","NAME","__NAME__","__VERSION__"],"mappings":"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","file":"playkit-analytics-service.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[\"analytics\"] = factory();\n\telse\n\t\troot[\"playkit\"] = root[\"playkit\"] || {}, root[\"playkit\"][\"services\"] = root[\"playkit\"][\"services\"] || {}, root[\"playkit\"][\"services\"][\"analytics\"] = 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 = 10);\n","//@flow\nimport getLogger, {getLogLevel, LogLevel} 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 if (getLogLevel(CLASS_NAME) !== LogLevel.OFF) {\n Error._logger.error(`Category:${category} | Code:${code} |`, data);\n }\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","/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.6.0\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.TRACE = defineLogLevel(1, 'TRACE');\r\n\tLogger.DEBUG = defineLogLevel(2, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(3, 'INFO');\r\n\tLogger.TIME = defineLogLevel(4, 'TIME');\r\n\tLogger.WARN = defineLogLevel(5, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\ttrace: function () {\r\n\t\t\tthis.invoke(Logger.TRACE, arguments);\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.trace = bind(globalLogger, globalLogger.trace);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t} else if (context.level === Logger.TRACE && console.trace) {\r\n\t\t\t\t\thdlr = console.trace;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(Logger);\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n","//@flow\nimport * as JsLogger from 'js-logger';\n\nexport type LogLevelObject = {value: number, name: string};\nexport type LogLevelType = {[level: string]: LogLevelObject};\n\nconst LogLevel: LogLevelType = {\n DEBUG: JsLogger.DEBUG,\n INFO: JsLogger.INFO,\n TIME: JsLogger.TIME,\n WARN: JsLogger.WARN,\n ERROR: JsLogger.ERROR,\n OFF: JsLogger.OFF\n};\n\nJsLogger.useDefaults({defaultLevel: JsLogger.ERROR});\n\n/**\n * sets the logger handler\n * @param {LogHandlerType} handler - the log level\n * @returns {void}\n */\nfunction setLogHandler(handler: LogHandlerType): void {\n JsLogger.setHandler((messages, context) => handler(messages, context));\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 if (!name) {\n return JsLogger;\n }\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 {LogLevel, getLogLevel, setLogLevel, setLogHandler};\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}\n */\n headers: Map;\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}\n */\n responseHeaders: Array;\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} headers The request headers\n */\n constructor(headers: Map = 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.} Service response as promise\n */\n doHttpRequest(): Promise {\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 {\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\nimport {clone} from '../../util/clone';\n\nconst defaultConfig: Object = {\n serviceUrl: 'https://cdnapisec.kaltura.com/api_v3',\n cdnUrl: 'https://cdnapisec.kaltura.com',\n serviceParams: {\n apiVersion: '3.3.0',\n format: 1\n },\n useApiCaptions: true\n};\n\nexport default class OVPConfiguration {\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 {OVPConfiguration};\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\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\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}\n */\n requests: Array = [];\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 * @returns {Promise} The multirequest execution promise\n */\n execute(): Promise {\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);\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 = [];\n /**\n * @constructor\n * @param {Object} response data\n */\n constructor(response: Object) {\n this.success = true;\n const responseArr = response.result ? response.result : response;\n responseArr.forEach(result => {\n const serviceResult: ServiceResult = new ServiceResult(result);\n this.results.push(serviceResult);\n if (serviceResult.hasError) {\n MultiRequestResult._logger.error(\n `Service returned an error with error code: ${serviceResult.error.code} and message: ${serviceResult.error.message}.`\n );\n this.success = false;\n return;\n }\n });\n }\n}\n","//@flow\nimport MultiRequestBuilder from '../../common/multi-request-builder';\nimport OVPConfiguration from '../config';\n\nconst SERVICE_NAME: string = 'multirequest';\n\nexport default class OVPService {\n /**\n * Gets a new instance of MultiRequestBuilder with ovp params\n * @function getMultiRequest\n * @param {string} playerVersion The player version\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(playerVersion: string, ks: string, partnerId?: number): MultiRequestBuilder {\n const config = OVPConfiguration.get();\n const ovpParams = config.serviceParams;\n Object.assign(ovpParams, {ks: ks, clientTag: 'html5:v' + playerVersion});\n if (partnerId) {\n Object.assign(ovpParams, {partnerId: partnerId});\n }\n const headers: Map = 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 = ovpParams;\n return multiReq;\n }\n}\n","const param = a => {\n let s = [],\n rbracket = /\\[\\]$/,\n isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n },\n add = function (k, v) {\n v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v;\n s[s.length] = encodeURIComponent(k) + '=' + encodeURIComponent(v);\n },\n buildParams = function (prefix, obj) {\n let i, len, key;\n\n if (prefix) {\n if (isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n if (rbracket.test(prefix)) {\n add(prefix, obj[i]);\n } else {\n buildParams(prefix + ':' + (typeof obj[i] === 'object' ? i : ''), obj[i]);\n }\n }\n } else if (obj && String(obj) === '[object Object]') {\n for (key in obj) {\n buildParams(prefix + ':' + key, obj[key]);\n }\n } else {\n add(prefix, obj);\n }\n } else if (isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n add(obj[i].name, obj[i].value);\n }\n } else {\n for (key in obj) {\n buildParams(key, obj[key]);\n }\n }\n return s;\n };\n\n return buildParams('', a).join('&').replace(/%20/g, '+');\n};\n\nexport {param};\n","//@flow\nimport OVPService from '../ovp-service';\nimport RequestBuilder from '../../../../util/request-builder';\nimport OVPConfiguration from '../../config';\nimport {param} from '../../../../util/param';\n\nconst SERVICE_NAME: string = 'analytics';\n\nexport default class OVPAnalyticsService extends OVPService {\n /**\n * Creates an instance of RequestBuilder for analytics.trackEvent\n * @function trackEvent\n * @param {string} serviceUrl - The service base url\n * @param {Object} params - The event params\n * @returns {RequestBuilder} - The request builder\n * @static\n */\n static trackEvent(serviceUrl: string, params: Object): RequestBuilder {\n const ovpParams = OVPConfiguration.get();\n const serviceParams = {};\n Object.assign(serviceParams, ovpParams.serviceParams, params);\n const request = new RequestBuilder();\n request.service = SERVICE_NAME;\n request.action = 'trackEvent';\n request.method = 'GET';\n request.tag = 'analytics-trackEvent';\n request.params = serviceParams;\n request.url = serviceUrl + '?service=' + request.service + '&action=' + request.action + '&' + param(request.params);\n return request;\n }\n}\n","// @flow\nimport RequestBuilder from '../../../../util/request-builder';\nimport OVPConfiguration from '../../config';\nimport OVPAnalyticsService from './analytics-service';\n\ndeclare var __VERSION__: string;\ndeclare var __NAME__: string;\n\nconst NAME = __NAME__ + '-analytics-service';\nconst VERSION = __VERSION__;\n\nexport {OVPAnalyticsService, OVPConfiguration, RequestBuilder, NAME, VERSION};\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/playkit-bookmark-service.js b/dist/playkit-bookmark-service.js index 5ce7fbf2..6b9e2fa8 100644 --- a/dist/playkit-bookmark-service.js +++ b/dist/playkit-bookmark-service.js @@ -1,7 +1,7 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.bookmark=t():(e.playkit=e.playkit||{},e.playkit.services=e.playkit.services||{},e.playkit.services.bookmark=t())}(this,function(){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.i=function(e){return e},t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=17)}([function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:new Map;n(this,e),this._attemptCounter=1,this.headers=t}return o(e,[{key:"getUrl",value:function(e){return e+"/service/"+this.service+(this.action?"/action/"+this.action:"")}},{key:"doHttpRequest",value:function(){var e=this,t=new Promise(function(t,r){e._requestPromise={resolve:t,reject:r}});return this.url||this._requestPromise.reject(new a.default(a.default.Severity.CRITICAL,a.default.Category.NETWORK,a.default.Code.MALFORMED_DATA_URI,{url:this.url})),this._createXHR(),t}},{key:"_createXHR",value:function(){var e=this,t=new XMLHttpRequest;t.onreadystatechange=function(){if(4===t.readyState&&200===t.status)try{var r=JSON.parse(t.responseText);return e.responseHeaders=e._getResponseHeaders(t),e._requestPromise.resolve(r)}catch(r){e._requestPromise.reject(e._createError(t,a.default.Code.BAD_SERVER_RESPONSE,{text:t.responseText}))}},t.open(this.method,this.url,this.retryConfig.async),this.retryConfig.async&&this.retryConfig.timeout&&(t.timeout=this.retryConfig.timeout);var r=performance.now();t.ontimeout=function(){e._handleError(t,a.default.Code.TIMEOUT,{timeout:(performance.now()-r)/1e3,statusText:t.statusText})},t.onerror=t.onabort=function(){e._handleError(t,a.default.Code.HTTP_ERROR,{text:t.responseText,statusText:t.statusText})},this.headers.forEach(function(e,r){t.setRequestHeader(r,e)}),t.send(this.params)}},{key:"_getResponseHeaders",value:function(e){return e.getAllResponseHeaders().split("\n").filter(function(e){return 0===e.toLowerCase().indexOf("x-")})}},{key:"_handleError",value:function(e,t,r){var n=this._createError(e,t,r);if(e.onreadystatechange=function(){},e.onerror=function(){},e.ontimeout=function(){},e.onabort=function(){},!(this.retryConfig.maxAttempts&&this._attemptCounter3&&void 0!==arguments[3]?arguments[3]:{};n(this,e),this.severity=t,this.category=r,this.code=i,this.data=a,(0,o.getLogLevel)("Error")!==o.LogLevel.OFF&&e._logger.error("Category:"+r+" | Code:"+i+" |",a)};l.Severity=a.Severity,l.Category=s.Category,l.Code=u.Code,l._logger=(0,i.default)("Error"),t.default=l},function(e,t,r){"use strict";function n(e){s.setHandler(function(t,r){return e(t,r)})}function o(e){return e?s.get(e):s}function i(e){return o(e).getLevel()}function a(e,t){o(t).setLevel(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.setLogHandler=t.setLogLevel=t.getLogLevel=t.LogLevel=void 0;var u=r(10),s=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(u),l={DEBUG:s.DEBUG,INFO:s.INFO,TIME:s.TIME,WARN:s.WARN,ERROR:s.ERROR,OFF:s.OFF};s.useDefaults({defaultLevel:s.ERROR}),t.default=o,t.LogLevel=l,t.getLogLevel=i,t.setLogLevel=a,t.setLogHandler=n},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function e(t){n(this,e),this.hasError=!1,"KalturaAPIException"===t.objectType?(this.hasError=!0,this.error=new i(t.code,t.message)):t.error&&"KalturaAPIException"===t.error.objectType?(this.hasError=!0,this.error=new i(t.error.code,t.error.message)):this.data=t};t.default=o;var i=function e(t,r){n(this,e),this.code=t,this.message=r}},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function u(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.MultiRequestResult=void 0;var s=function(){function e(e,t){for(var r=0;r0?t.slice(0):[],r.forEach(function(t,o){("object"===(void 0===t?"undefined":n(t))&&t!=={}||Array.isArray(t)&&t.length>0)&&(r[o]=e(t))})):"object"===(void 0===t?"undefined":n(t))?(r=Object.assign({},t),Object.keys(r).forEach(function(t){("object"===n(r[t])&&r[t]!=={}||Array.isArray(r[t])&&r[t].length>0)&&(r[t]=e(r[t]))})):r=t,r};t.clone=o},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={NETWORK:1,SERVICE:2,PROVIDER:3};t.Category=n},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={UNSUPPORTED_SCHEME:1e3,BAD_HTTP_STATUS:1001,HTTP_ERROR:1002,TIMEOUT:1003,MALFORMED_DATA_URI:1004,BAD_SERVER_RESPONSE:1005,MULTIREQUEST_API_ERROR:1006,API_RESPONSE_MISMATCH:1007,ERROR:2e3,BLOCK_ACTION:2001,MEDIA_STATUS_NOT_READY:2002,MISSING_MANDATORY_PARAMS:3e3,MISSING_PLAY_SOURCE:3001,METHOD_NOT_IMPLEMENTED:3002};t.Code=n},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={RECOVERABLE:1,CRITICAL:2};t.Severity=n},function(e,t,r){var n,o;/*! +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.bookmark=t():(e.playkit=e.playkit||{},e.playkit.services=e.playkit.services||{},e.playkit.services.bookmark=t())}(window,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=9)}([function(e,t,r){"use strict";r.d(t,"a",(function(){return a}));var n=r(2);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var a=function e(t,r,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};o(this,e),this.severity=t,this.category=r,this.code=i,this.data=a,Object(n.c)("Error")!==n.a.OFF&&e._logger.error("Category:".concat(r," | Code:").concat(i," |"),a)};i(a,"Severity",{RECOVERABLE:1,CRITICAL:2}),i(a,"Category",{NETWORK:1,SERVICE:2,PROVIDER:3}),i(a,"Code",{UNSUPPORTED_SCHEME:1e3,BAD_HTTP_STATUS:1001,HTTP_ERROR:1002,TIMEOUT:1003,MALFORMED_DATA_URI:1004,BAD_SERVER_RESPONSE:1005,MULTIREQUEST_API_ERROR:1006,API_RESPONSE_MISMATCH:1007,ERROR:2e3,BLOCK_ACTION:2001,MEDIA_STATUS_NOT_READY:2002,MISSING_MANDATORY_PARAMS:3e3,MISSING_PLAY_SOURCE:3001,METHOD_NOT_IMPLEMENTED:3002}),i(a,"_logger",Object(n.b)("Error"))},function(e,t,r){var n,o; +/*! * js-logger - http://github.com/jonnyreeves/js-logger * Jonny Reeves, http://jonnyreeves.co.uk/ * js-logger may be freely distributed under the MIT license. - */ -!function(i){"use strict";var a={};a.VERSION="1.4.1";var u,s={},l=function(e,t){return function(){return t.apply(e,arguments)}},c=function(){var e,t,r=arguments,n=r[0];for(t=1;t=t.value},debug:function(){this.invoke(a.DEBUG,arguments)},info:function(){this.invoke(a.INFO,arguments)},warn:function(){this.invoke(a.WARN,arguments)},error:function(){this.invoke(a.ERROR,arguments)},time:function(e){"string"==typeof e&&e.length>0&&this.invoke(a.TIME,[e,"start"])},timeEnd:function(e){"string"==typeof e&&e.length>0&&this.invoke(a.TIME,[e,"end"])},invoke:function(e,t){u&&this.enabledFor(e)&&u(t,c({level:e},this.context))}};var p=new d({filterLevel:a.OFF});!function(){var e=a;e.enabledFor=l(p,p.enabledFor),e.debug=l(p,p.debug),e.time=l(p,p.time),e.timeEnd=l(p,p.timeEnd),e.info=l(p,p.info),e.warn=l(p,p.warn),e.error=l(p,p.error),e.log=e.info}(),a.setHandler=function(e){u=e},a.setLevel=function(e){p.setLevel(e);for(var t in s)s.hasOwnProperty(t)&&s[t].setLevel(e)},a.getLevel=function(){return p.getLevel()},a.get=function(e){return s[e]||(s[e]=new d(c({name:e},p.context)))},a.createDefaultHandler=function(e){e=e||{},e.formatter=e.formatter||function(e,t){t.name&&e.unshift("["+t.name+"]")};var t={},r=function(e,t){Function.prototype.apply.call(e,console,t)};return"undefined"==typeof console?function(){}:function(n,o){n=Array.prototype.slice.call(n);var i,u=console.log;o.level===a.TIME?(i=(o.name?"["+o.name+"] ":"")+n[0],"start"===n[1]?console.time?console.time(i):t[i]=(new Date).getTime():console.timeEnd?console.timeEnd(i):r(u,[i+": "+((new Date).getTime()-t[i])+"ms"])):(o.level===a.WARN&&console.warn?u=console.warn:o.level===a.ERROR&&console.error?u=console.error:o.level===a.INFO&&console.info?u=console.info:o.level===a.DEBUG&&console.debug&&(u=console.debug),e.formatter(n,o),r(u,n))}},a.useDefaults=function(e){a.setLevel(e&&e.defaultLevel||a.DEBUG),a.setHandler(a.createDefaultHandler(e))},n=a,void 0!==(o="function"==typeof n?n.call(t,r,t,e):n)&&(e.exports=o)}()},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.OTTConfiguration=void 0;var o=function(){function e(e,t){for(var r=0;r=t.value},trace:function(){this.invoke(u.TRACE,arguments)},debug:function(){this.invoke(u.DEBUG,arguments)},info:function(){this.invoke(u.INFO,arguments)},warn:function(){this.invoke(u.WARN,arguments)},error:function(){this.invoke(u.ERROR,arguments)},time:function(e){"string"==typeof e&&e.length>0&&this.invoke(u.TIME,[e,"start"])},timeEnd:function(e){"string"==typeof e&&e.length>0&&this.invoke(u.TIME,[e,"end"])},invoke:function(e,t){a&&this.enabledFor(e)&&a(t,f({level:e},this.context))}};var y,v=new p({filterLevel:u.OFF});(y=u).enabledFor=s(v,v.enabledFor),y.trace=s(v,v.trace),y.debug=s(v,v.debug),y.time=s(v,v.time),y.timeEnd=s(v,v.timeEnd),y.info=s(v,v.info),y.warn=s(v,v.warn),y.error=s(v,v.error),y.log=y.info,u.setHandler=function(e){a=e},u.setLevel=function(e){for(var t in v.setLevel(e),c)c.hasOwnProperty(t)&&c[t].setLevel(e)},u.getLevel=function(){return v.getLevel()},u.get=function(e){return c[e]||(c[e]=new p(f({name:e},v.context)))},u.createDefaultHandler=function(e){(e=e||{}).formatter=e.formatter||function(e,t){t.name&&e.unshift("["+t.name+"]")};var t={},r=function(e,t){Function.prototype.apply.call(e,console,t)};return"undefined"==typeof console?function(){}:function(n,o){n=Array.prototype.slice.call(n);var i,a=console.log;o.level===u.TIME?(i=(o.name?"["+o.name+"] ":"")+n[0],"start"===n[1]?console.time?console.time(i):t[i]=(new Date).getTime():console.timeEnd?console.timeEnd(i):r(a,[i+": "+((new Date).getTime()-t[i])+"ms"])):(o.level===u.WARN&&console.warn?a=console.warn:o.level===u.ERROR&&console.error?a=console.error:o.level===u.INFO&&console.info?a=console.info:o.level===u.DEBUG&&console.debug?a=console.debug:o.level===u.TRACE&&console.trace&&(a=console.trace),e.formatter(n,o),r(a,n))}},u.useDefaults=function(e){u.setLevel(e&&e.defaultLevel||u.DEBUG),u.setHandler(u.createDefaultHandler(e))},void 0===(o="function"==typeof(n=u)?n.call(t,r,t,e):n)||(e.exports=o)}()},function(e,t,r){"use strict";r.d(t,"a",(function(){return o})),r.d(t,"c",(function(){return a}));var n=r(1),o={DEBUG:n.DEBUG,INFO:n.INFO,TIME:n.TIME,WARN:n.WARN,ERROR:n.ERROR,OFF:n.OFF};function i(e){return e?n.get(e):n}function a(e){return i(e).getLevel()}n.useDefaults({defaultLevel:n.ERROR}),t.b=i},function(e,t,r){"use strict";r.d(t,"a",(function(){return u}));var n=r(0);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:new Map;o(this,e),a(this,"retryConfig",{async:!0,timeout:0,maxAttempts:4}),a(this,"_attemptCounter",1),this.headers=t}var t,r,u;return t=e,(r=[{key:"getUrl",value:function(e){return e+"/service/"+this.service+(this.action?"/action/"+this.action:"")}},{key:"doHttpRequest",value:function(){var e=this,t=new Promise((function(t,r){e._requestPromise={resolve:t,reject:r}}));return this.url||this._requestPromise.reject(new n.a(n.a.Severity.CRITICAL,n.a.Category.NETWORK,n.a.Code.MALFORMED_DATA_URI,{url:this.url})),this._createXHR(),t}},{key:"_createXHR",value:function(){var e=this,t=new XMLHttpRequest;t.onreadystatechange=function(){if(4===t.readyState&&200===t.status)try{var r=JSON.parse(t.responseText);return e.responseHeaders=e._getResponseHeaders(t),e._requestPromise.resolve(r)}catch(r){e._requestPromise.reject(e._createError(t,n.a.Code.BAD_SERVER_RESPONSE,{text:t.responseText}))}},t.open(this.method,this.url,this.retryConfig.async),this.retryConfig.async&&this.retryConfig.timeout&&(t.timeout=this.retryConfig.timeout);var r=performance.now();t.ontimeout=function(){e._handleError(t,n.a.Code.TIMEOUT,{timeout:(performance.now()-r)/1e3,statusText:t.statusText})},t.onerror=t.onabort=function(){e._handleError(t,n.a.Code.HTTP_ERROR,{text:t.responseText,statusText:t.statusText})},this.headers.forEach((function(e,r){t.setRequestHeader(r,e)})),t.send(this.params)}},{key:"_getResponseHeaders",value:function(e){return e.getAllResponseHeaders().split("\n").filter((function(e){return 0===e.toLowerCase().indexOf("x-")}))}},{key:"_handleError",value:function(e,t,r){var n=this._createError(e,t,r);if(e.onreadystatechange=function(){},e.onerror=function(){},e.ontimeout=function(){},e.onabort=function(){},!(this.retryConfig.maxAttempts&&this._attemptCounter0?t.slice(0):[]).forEach((function(t,o){("object"===n(t)&&t!=={}||Array.isArray(t)&&t.length>0)&&(r[o]=e(t))})):"object"===n(t)?(r=Object.assign({},t),Object.keys(r).forEach((function(t){("object"===n(r[t])&&r[t]!=={}||Array.isArray(r[t])&&r[t].length>0)&&(r[t]=e(r[t]))}))):r=t,r}},function(e,t,r){"use strict";r.d(t,"a",(function(){return m}));var n=r(3),o=r(2);function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function e(t){var r,n,o;i(this,e),o=!1,(n="hasError")in(r=this)?Object.defineProperty(r,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[n]=o,"KalturaAPIException"===t.objectType?(this.hasError=!0,this.error=new u(t.code,t.message)):t.error&&"KalturaAPIException"===t.error.objectType?(this.hasError=!0,this.error=new u(t.error.code,t.error.message)):this.data=t},u=function e(t,r){i(this,e),this.code=t,this.message=r},c=r(0);function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var r=0;r} headers The request headers\n */\n\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\n /**\n * @description network retry configuration\n * @memberof RequestBuilder\n * @type {ProviderNetworkRetryParameters}\n */\n\n /**\n * @memberof - Service tag\n * @type {string}\n */\n\n /**\n * @memberof - Service URL\n * @type {string}\n */\n\n /**\n * @member - Service params\n * @type {any}\n */\n\n /**\n * @member - Service name\n * @type {string}\n */\n function RequestBuilder() {\n var headers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Map();\n\n _classCallCheck(this, RequestBuilder);\n\n this._attemptCounter = 1;\n\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\n\n /**\n * @description number of xhr attempts for the same multi - request.\n * @memberof RequestBuilder\n * @type {number}\n * @private\n */\n\n /**\n * @memberof - the response headers of the arra\n * @type {Array}\n */\n\n /**\n * @memberof - Service method (POST,GET,DELETE etc..)\n * @type {string}\n */\n\n /**\n * @memberof - Service headers\n * @type {Map}\n */\n\n /**\n * @member - Service action\n * @type {string}\n */\n\n\n _createClass(RequestBuilder, [{\n key: 'getUrl',\n value: function getUrl(serviceUrl) {\n return serviceUrl + '/service/' + this.service + (this.action ? '/action/' + this.action : '');\n }\n\n /**\n * Executes service\n * @function doHttpRequest\n * @returns {Promise.} Service response as promise\n */\n\n }, {\n key: 'doHttpRequest',\n value: function doHttpRequest() {\n var _this = this;\n\n var promise = new Promise(function (resolve, reject) {\n _this._requestPromise = {\n resolve: resolve,\n reject: reject\n };\n });\n if (!this.url) {\n this._requestPromise.reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, _error2.default.Code.MALFORMED_DATA_URI, {\n url: this.url\n }));\n }\n this._createXHR();\n return promise;\n }\n }, {\n key: '_createXHR',\n value: function _createXHR() {\n var _this2 = this;\n\n var request = new XMLHttpRequest();\n request.onreadystatechange = function () {\n if (request.readyState === 4) {\n if (request.status === 200) {\n try {\n var response = JSON.parse(request.responseText);\n _this2.responseHeaders = _this2._getResponseHeaders(request);\n // the promise returns the response for backwards compatibility\n return _this2._requestPromise.resolve(response);\n } catch (error) {\n _this2._requestPromise.reject(_this2._createError(request, _error2.default.Code.BAD_SERVER_RESPONSE, {\n text: request.responseText\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 var requestTime = performance.now();\n request.ontimeout = function () {\n _this2._handleError(request, _error2.default.Code.TIMEOUT, {\n timeout: (performance.now() - requestTime) / 1000,\n statusText: request.statusText\n });\n };\n request.onerror = request.onabort = function () {\n _this2._handleError(request, _error2.default.Code.HTTP_ERROR, {\n text: request.responseText,\n statusText: request.statusText\n });\n };\n this.headers.forEach(function (value, key) {\n request.setRequestHeader(key, value);\n });\n request.send(this.params);\n }\n }, {\n key: '_getResponseHeaders',\n value: function _getResponseHeaders(request) {\n return request.getAllResponseHeaders().split('\\n').filter(function (header) {\n return header.toLowerCase().indexOf(KALTURA_HEADER_PREFIX) === 0;\n });\n }\n }, {\n key: '_handleError',\n value: function _handleError(request, code, data) {\n var 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 key: '_createError',\n value: function _createError(request, code, data) {\n Object.assign(data, {\n url: this.url,\n headers: this._getResponseHeaders(request),\n attempt: this._attemptCounter\n });\n return new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, code, data);\n }\n }]);\n\n return RequestBuilder;\n}();\n\nexports.default = RequestBuilder;\n\n/***/ }),\n/* 1 */,\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _logger = __webpack_require__(3);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _severity = __webpack_require__(9);\n\nvar _code = __webpack_require__(8);\n\nvar _category = __webpack_require__(7);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CLASS_NAME = 'Error';\n\n/**\n * @classdesc This is a description of the error class.\n */\n\nvar Error =\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\n/**\n * @enum {number}\n */\n\n/**\n * @enum {number}\n */\nfunction Error(severity, category, code) {\n var data = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n _classCallCheck(this, Error);\n\n this.severity = severity;\n this.category = category;\n this.code = code;\n this.data = data;\n if ((0, _logger.getLogLevel)(CLASS_NAME) !== _logger.LogLevel.OFF) {\n Error._logger.error('Category:' + category + ' | Code:' + code + ' |', data);\n }\n}\n/**\n * @enum {number}\n */\n;\n\nError.Severity = _severity.Severity;\nError.Category = _category.Category;\nError.Code = _code.Code;\nError._logger = (0, _logger2.default)(CLASS_NAME);\nexports.default = Error;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.setLogHandler = exports.setLogLevel = exports.getLogLevel = exports.LogLevel = undefined;\n\nvar _jsLogger = __webpack_require__(10);\n\nvar JsLogger = _interopRequireWildcard(_jsLogger);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar LogLevel = {\n DEBUG: JsLogger.DEBUG,\n INFO: JsLogger.INFO,\n TIME: JsLogger.TIME,\n WARN: JsLogger.WARN,\n ERROR: JsLogger.ERROR,\n OFF: JsLogger.OFF\n};\n\n\nJsLogger.useDefaults({ defaultLevel: JsLogger.ERROR });\n\n/**\n * sets the logger handler\n * @param {LogHandlerType} handler - the log level\n * @returns {void}\n */\nfunction setLogHandler(handler) {\n JsLogger.setHandler(function (messages, context) {\n return handler(messages, context);\n });\n}\n/**\n * get a logger\n * @param {?string} name - the logger name\n * @returns {Object} - the logger class\n */\nfunction getLogger(name) {\n if (!name) {\n return JsLogger;\n }\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) {\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, name) {\n getLogger(name).setLevel(level);\n}\n\nexports.default = getLogger;\nexports.LogLevel = LogLevel;\nexports.getLogLevel = getLogLevel;\nexports.setLogLevel = setLogLevel;\nexports.setLogHandler = setLogHandler;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ServiceResult =\n\n/**\n * @constructor\n * @param {Object} response - Service response\n */\n\n/**\n * @member - The service error\n * @type {ServiceError}\n */\n\n/**\n * @member - The service result data\n * @type {Object}\n */\nfunction ServiceResult(response) {\n _classCallCheck(this, ServiceResult);\n\n this.hasError = false;\n\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 * @member - Is service returned an error\n * @type {boolean}\n */\n;\n\nexports.default = ServiceResult;\n\nvar ServiceError =\n\n/**\n * @constructor\n * @param {string} code - The result code\n * @param {string} message - The result message\n */\n\n/**\n * @member - The error code\n * @type {string}\n */\nfunction ServiceError(code, message) {\n _classCallCheck(this, ServiceError);\n\n this.code = code;\n this.message = message;\n}\n/**\n * @member - The error message\n * @type {string}\n */\n;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MultiRequestResult = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _logger = __webpack_require__(3);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _baseServiceResult = __webpack_require__(4);\n\nvar _baseServiceResult2 = _interopRequireDefault(_baseServiceResult);\n\nvar _error = __webpack_require__(2);\n\nvar _error2 = _interopRequireDefault(_error);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MultiRequestBuilder = function (_RequestBuilder) {\n _inherits(MultiRequestBuilder, _RequestBuilder);\n\n function MultiRequestBuilder() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, MultiRequestBuilder);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = MultiRequestBuilder.__proto__ || Object.getPrototypeOf(MultiRequestBuilder)).call.apply(_ref, [this].concat(args))), _this), _this.requests = [], _temp), _possibleConstructorReturn(_this, _ret);\n }\n /**\n * @memberof - MultiRequestBuilder\n * @type {Array}\n */\n\n\n _createClass(MultiRequestBuilder, [{\n key: 'add',\n\n /**\n * Adds request to requests array\n * @function add\n * @param {RequestBuilder} request The request\n * @returns {MultiRequestBuilder} The multiRequest\n */\n value: function add(request) {\n this.requests.push(request);\n var requestParams = {};\n var serviceDef = { service: request.service, action: request.action };\n Object.assign(requestParams, _defineProperty({}, 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 * @returns {Promise} The multirequest execution promise\n */\n\n }, {\n key: 'execute',\n value: function execute() {\n var _this2 = this;\n\n return new Promise(function (resolve, reject) {\n try {\n _this2.params = JSON.stringify(_this2.params);\n } catch (err) {\n MultiRequestBuilder._logger.error('' + err.message);\n reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.PROVIDER, _error2.default.Code.FAILED_PARSING_REQUEST, {\n error: err,\n params: _this2.params\n }));\n }\n _this2.doHttpRequest().then(function (data) {\n var multiRequestResult = new MultiRequestResult(data);\n if (multiRequestResult.success) {\n resolve({\n headers: _this2.responseHeaders,\n response: multiRequestResult\n });\n } else {\n reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, _error2.default.Code.MULTIREQUEST_API_ERROR, {\n url: _this2.url,\n headers: _this2.responseHeaders,\n results: multiRequestResult.results\n }));\n }\n }, function (err) {\n reject(err);\n });\n });\n }\n }]);\n\n return MultiRequestBuilder;\n}(_requestBuilder2.default);\n\nMultiRequestBuilder._logger = (0, _logger2.default)('MultiRequestBuilder');\nexports.default = MultiRequestBuilder;\n\nvar MultiRequestResult =\n/**\n * @constructor\n * @param {Object} response data\n */\nexports.MultiRequestResult = function MultiRequestResult(response) {\n var _this3 = this;\n\n _classCallCheck(this, MultiRequestResult);\n\n this.results = [];\n\n this.success = true;\n var responseArr = response.result ? response.result : response;\n responseArr.forEach(function (result) {\n var serviceResult = new _baseServiceResult2.default(result);\n _this3.results.push(serviceResult);\n if (serviceResult.hasError) {\n MultiRequestResult._logger.error('Service returned an error with error code: ' + serviceResult.error.code + ' and message: ' + serviceResult.error.message + '.');\n _this3.success = false;\n return;\n }\n });\n}\n/**\n * @memberof MultiRequestResult\n * @type {Object}\n */\n\n/**\n * @memberof MultiRequestResult\n * @type {boolean}\n */\n;\n\nMultiRequestResult._logger = (0, _logger2.default)('MultiRequestResult');\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar clone = function clone(data) {\n var node = void 0;\n if (Array.isArray(data)) {\n node = data.length > 0 ? data.slice(0) : [];\n node.forEach(function (e, i) {\n if ((typeof e === 'undefined' ? 'undefined' : _typeof(e)) === 'object' && e !== {} || Array.isArray(e) && e.length > 0) {\n node[i] = clone(e);\n }\n });\n } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') {\n node = Object.assign({}, data);\n Object.keys(node).forEach(function (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\nexports.clone = clone;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n\nvar Category = {\n /** Errors from the network stack. */\n NETWORK: 1,\n SERVICE: 2,\n PROVIDER: 3\n};\nexports.Category = Category;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n\nvar Code = {\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\nexports.Code = Code;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n\nvar Severity = {\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\nexports.Severity = Severity;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.4.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.DEBUG = defineLogLevel(1, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(2, 'INFO');\r\n\tLogger.TIME = defineLogLevel(3, 'TIME');\r\n\tLogger.WARN = defineLogLevel(4, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (true) {\r\n\t\t!(__WEBPACK_AMD_DEFINE_FACTORY__ = (Logger),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.OTTConfiguration = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _clone = __webpack_require__(6);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar defaultConfig = {\n serviceParams: {\n apiVersion: '5.2.6'\n }\n};\n\nvar OTTConfiguration = function () {\n function OTTConfiguration() {\n _classCallCheck(this, OTTConfiguration);\n }\n\n _createClass(OTTConfiguration, null, [{\n key: 'set',\n value: function set(clientConfig) {\n if (clientConfig) {\n Object.assign(defaultConfig, clientConfig);\n }\n }\n }, {\n key: 'get',\n value: function get() {\n return (0, _clone.clone)(defaultConfig);\n }\n }]);\n\n return OTTConfiguration;\n}();\n\nexports.default = OTTConfiguration;\nexports.OTTConfiguration = OTTConfiguration;\n\n/***/ }),\n/* 12 */,\n/* 13 */,\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _ottService = __webpack_require__(18);\n\nvar _ottService2 = _interopRequireDefault(_ottService);\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _config = __webpack_require__(11);\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SERVICE_NAME = 'bookmark';\n\nvar OTTBookmarkService = function (_OTTService) {\n _inherits(OTTBookmarkService, _OTTService);\n\n function OTTBookmarkService() {\n _classCallCheck(this, OTTBookmarkService);\n\n return _possibleConstructorReturn(this, (OTTBookmarkService.__proto__ || Object.getPrototypeOf(OTTBookmarkService)).apply(this, arguments));\n }\n\n _createClass(OTTBookmarkService, null, [{\n key: 'add',\n\n /**\n * Creates an instance of RequestBuilder for session.startWidgetSession\n * @function add\n * @param {string} serviceUrl - The service url\n * @param {string} ks - The ks\n * @param {Object} bookmark - The udid\n * @returns {RequestBuilder} - The request builder\n * @static\n */\n value: function add(serviceUrl, ks, bookmark) {\n var headers = new Map();\n headers.set('Content-Type', 'application/json');\n var request = new _requestBuilder2.default(headers);\n request.service = SERVICE_NAME;\n request.action = 'add';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n var playerData = {\n objectType: 'KalturaBookmarkPlayerData',\n action: bookmark.playerData.action,\n averageBitrate: bookmark.playerData.averageBitrate,\n totalBitrate: bookmark.playerData.totalBitrate,\n currentBitrate: bookmark.playerData.currentBitrate,\n fileId: bookmark.playerData.fileId\n };\n var bookmarkServiceParams = {\n objectType: 'KalturaBookmark',\n type: bookmark.type,\n id: bookmark.id,\n position: bookmark.position,\n playerData: playerData\n };\n var config = _config2.default.get();\n var serviceParams = config.serviceParams;\n Object.assign(serviceParams, { bookmark: bookmarkServiceParams, ks: ks });\n request.params = JSON.stringify(serviceParams);\n return request;\n }\n }]);\n\n return OTTBookmarkService;\n}(_ottService2.default);\n\nexports.default = OTTBookmarkService;\n\n/***/ }),\n/* 15 */,\n/* 16 */,\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.VERSION = exports.NAME = exports.RequestBuilder = exports.OTTConfiguration = exports.OTTBookmarkService = undefined;\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _config = __webpack_require__(11);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _bookmarkService = __webpack_require__(14);\n\nvar _bookmarkService2 = _interopRequireDefault(_bookmarkService);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar NAME = \"playkit-js-providers\" + '-bookmark-service';\n\nvar VERSION = \"2.21.1\";\n\nexports.OTTBookmarkService = _bookmarkService2.default;\nexports.OTTConfiguration = _config2.default;\nexports.RequestBuilder = _requestBuilder2.default;\nexports.NAME = NAME;\nexports.VERSION = VERSION;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _multiRequestBuilder = __webpack_require__(5);\n\nvar _multiRequestBuilder2 = _interopRequireDefault(_multiRequestBuilder);\n\nvar _config = __webpack_require__(11);\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SERVICE_NAME = 'multirequest';\n\nvar OTTService = function () {\n function OTTService() {\n _classCallCheck(this, OTTService);\n }\n\n _createClass(OTTService, null, [{\n key: 'getMultiRequest',\n\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 value: function getMultiRequest(ks, partnerId) {\n var config = _config2.default.get();\n var ottParams = config.serviceParams;\n if (ks) {\n Object.assign(ottParams, { ks: ks });\n }\n if (partnerId) {\n Object.assign(ottParams, { partnerId: partnerId });\n }\n var headers = new Map();\n headers.set('Content-Type', 'application/json');\n var multiReq = new _multiRequestBuilder2.default(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\n return OTTService;\n}();\n\nexports.default = OTTService;\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// playkit-bookmark-service.js"," \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// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\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 \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 17);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 19f73764c22efc6116dd","//@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}\n */\n headers: Map;\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}\n */\n responseHeaders: Array;\n /**\n * @description network retry configuration\n * @memberof RequestBuilder\n * @type {ProviderNetworkRetryParameters}\n */\n retryConfig: ProviderNetworkRetryParameters;\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} headers The request headers\n */\n constructor(headers: Map = 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.} Service response as promise\n */\n doHttpRequest(): Promise {\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 {\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\n\n\n// WEBPACK FOOTER //\n// ./util/request-builder.js","//@flow\nimport getLogger, {getLogLevel, LogLevel} 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 if (getLogLevel(CLASS_NAME) !== LogLevel.OFF) {\n Error._logger.error(`Category:${category} | Code:${code} |`, data);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./util/error/error.js","//@flow\nimport * as JsLogger from 'js-logger';\n\nexport type LogLevelObject = {value: number, name: string};\nexport type LogLevelType = {[level: string]: LogLevelObject};\n\nconst LogLevel: LogLevelType = {\n DEBUG: JsLogger.DEBUG,\n INFO: JsLogger.INFO,\n TIME: JsLogger.TIME,\n WARN: JsLogger.WARN,\n ERROR: JsLogger.ERROR,\n OFF: JsLogger.OFF\n};\n\nJsLogger.useDefaults({defaultLevel: JsLogger.ERROR});\n\n/**\n * sets the logger handler\n * @param {LogHandlerType} handler - the log level\n * @returns {void}\n */\nfunction setLogHandler(handler: LogHandlerType): void {\n JsLogger.setHandler((messages, context) => handler(messages, context));\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 if (!name) {\n return JsLogger;\n }\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 {LogLevel, getLogLevel, setLogLevel, setLogHandler};\n\n\n\n// WEBPACK FOOTER //\n// ./util/logger.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/base-service-result.js","//@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}\n */\n requests: Array = [];\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 * @returns {Promise} The multirequest execution promise\n */\n execute(): Promise {\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);\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 = [];\n /**\n * @constructor\n * @param {Object} response data\n */\n constructor(response: Object) {\n this.success = true;\n const responseArr = response.result ? response.result : response;\n responseArr.forEach(result => {\n const serviceResult: ServiceResult = new ServiceResult(result);\n this.results.push(serviceResult);\n if (serviceResult.hasError) {\n MultiRequestResult._logger.error(\n `Service returned an error with error code: ${serviceResult.error.code} and message: ${serviceResult.error.message}.`\n );\n this.success = false;\n return;\n }\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/multi-request-builder.js","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\n\n\n// WEBPACK FOOTER //\n// ./util/clone.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./util/error/category.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./util/error/code.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./util/error/severity.js","/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.4.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.DEBUG = defineLogLevel(1, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(2, 'INFO');\r\n\tLogger.TIME = defineLogLevel(3, 'TIME');\r\n\tLogger.WARN = defineLogLevel(4, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(Logger);\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/js-logger/src/logger.js\n// module id = 10\n// module chunks = 0 1 2","//@flow\nimport {clone} from '../../util/clone';\n\nconst defaultConfig: Object = {\n serviceParams: {\n apiVersion: '5.2.6'\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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/config.js","//@flow\nimport OTTService from '../ott-service';\nimport RequestBuilder from '../../../../util/request-builder';\nimport OTTConfiguration from '../../config';\n\nconst SERVICE_NAME: string = 'bookmark';\n\nexport default class OTTBookmarkService extends OTTService {\n /**\n * Creates an instance of RequestBuilder for session.startWidgetSession\n * @function add\n * @param {string} serviceUrl - The service url\n * @param {string} ks - The ks\n * @param {Object} bookmark - The udid\n * @returns {RequestBuilder} - The request builder\n * @static\n */\n static add(serviceUrl: string, ks: string, bookmark: Object): RequestBuilder {\n const headers: Map = new Map();\n headers.set('Content-Type', 'application/json');\n const request = new RequestBuilder(headers);\n request.service = SERVICE_NAME;\n request.action = 'add';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n const playerData: Object = {\n objectType: 'KalturaBookmarkPlayerData',\n action: bookmark.playerData.action,\n averageBitrate: bookmark.playerData.averageBitrate,\n totalBitrate: bookmark.playerData.totalBitrate,\n currentBitrate: bookmark.playerData.currentBitrate,\n fileId: bookmark.playerData.fileId\n };\n const bookmarkServiceParams: Object = {\n objectType: 'KalturaBookmark',\n type: bookmark.type,\n id: bookmark.id,\n position: bookmark.position,\n playerData: playerData\n };\n const config = OTTConfiguration.get();\n const serviceParams = config.serviceParams;\n Object.assign(serviceParams, {bookmark: bookmarkServiceParams, ks: ks});\n request.params = JSON.stringify(serviceParams);\n return request;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/services/bookmark/bookmark-service.js","// @flow\nimport RequestBuilder from '../../../../util/request-builder';\nimport OTTConfiguration from '../../config';\nimport OTTBookmarkService from './bookmark-service';\n\ndeclare var __VERSION__: string;\ndeclare var __NAME__: string;\n\nconst NAME = __NAME__ + '-bookmark-service';\nconst VERSION = __VERSION__;\n\nexport {OTTBookmarkService, OTTConfiguration, RequestBuilder, NAME, VERSION};\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/services/bookmark/index.js","//@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 = 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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/services/ott-service.js"],"sourceRoot":""} \ No newline at end of file +{"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/../node_modules/js-logger/src/logger.js","./providers/./util/logger.js","./providers/./util/request-builder.js","./providers/./util/clone.js","./providers/./k-provider/common/base-service-result.js","./providers/./k-provider/common/multi-request-builder.js","./providers/./k-provider/ott/config.js","./providers/./k-provider/ott/services/bookmark/bookmark-service.js","./providers/./k-provider/ott/services/ott-service.js","./providers/./k-provider/ott/services/bookmark/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","getLogLevel","LogLevel","OFF","_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","global","logHandler","Logger","VERSION","contextualLoggersByNameMap","scope","func","apply","arguments","merge","args","target","length","defineLogLevel","TRACE","DEBUG","INFO","TIME","WARN","ContextualLogger","defaultContext","context","setLevel","filterLevel","log","info","newLevel","getLevel","enabledFor","lvl","trace","invoke","debug","warn","time","label","timeEnd","level","msgArgs","L","globalLogger","setHandler","createDefaultHandler","options","formatter","messages","unshift","timerStartTimeByLabelMap","invokeConsoleMethod","hdlr","Function","console","Array","slice","timerLabel","Date","getTime","useDefaults","defaultLevel","JsLogger","RequestBuilder","headers","Map","async","timeout","maxAttempts","serviceUrl","service","action","promise","Promise","resolve","reject","_requestPromise","url","Severity","Category","Code","_createXHR","request","XMLHttpRequest","onreadystatechange","readyState","status","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","clone","node","isArray","e","keys","ServiceResult","objectType","hasError","ServiceError","message","MultiRequestBuilder","requests","push","requestParams","serviceDef","stringify","err","FAILED_PARSING_REQUEST","doHttpRequest","then","multiRequestResult","MultiRequestResult","success","results","result","serviceResult","defaultConfig","serviceParams","apiVersion","OTTConfiguration","clientConfig","OTTBookmarkService","ks","bookmark","set","getUrl","playerData","averageBitrate","totalBitrate","currentBitrate","fileId","bookmarkServiceParams","type","id","position","partnerId","config","ottParams","multiReq","NAME","__NAME__","__VERSION__"],"mappings":"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","file":"playkit-bookmark-service.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[\"bookmark\"] = factory();\n\telse\n\t\troot[\"playkit\"] = root[\"playkit\"] || {}, root[\"playkit\"][\"services\"] = root[\"playkit\"][\"services\"] || {}, root[\"playkit\"][\"services\"][\"bookmark\"] = 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 = 9);\n","//@flow\nimport getLogger, {getLogLevel, LogLevel} 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 if (getLogLevel(CLASS_NAME) !== LogLevel.OFF) {\n Error._logger.error(`Category:${category} | Code:${code} |`, data);\n }\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","/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.6.0\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.TRACE = defineLogLevel(1, 'TRACE');\r\n\tLogger.DEBUG = defineLogLevel(2, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(3, 'INFO');\r\n\tLogger.TIME = defineLogLevel(4, 'TIME');\r\n\tLogger.WARN = defineLogLevel(5, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\ttrace: function () {\r\n\t\t\tthis.invoke(Logger.TRACE, arguments);\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.trace = bind(globalLogger, globalLogger.trace);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t} else if (context.level === Logger.TRACE && console.trace) {\r\n\t\t\t\t\thdlr = console.trace;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(Logger);\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n","//@flow\nimport * as JsLogger from 'js-logger';\n\nexport type LogLevelObject = {value: number, name: string};\nexport type LogLevelType = {[level: string]: LogLevelObject};\n\nconst LogLevel: LogLevelType = {\n DEBUG: JsLogger.DEBUG,\n INFO: JsLogger.INFO,\n TIME: JsLogger.TIME,\n WARN: JsLogger.WARN,\n ERROR: JsLogger.ERROR,\n OFF: JsLogger.OFF\n};\n\nJsLogger.useDefaults({defaultLevel: JsLogger.ERROR});\n\n/**\n * sets the logger handler\n * @param {LogHandlerType} handler - the log level\n * @returns {void}\n */\nfunction setLogHandler(handler: LogHandlerType): void {\n JsLogger.setHandler((messages, context) => handler(messages, context));\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 if (!name) {\n return JsLogger;\n }\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 {LogLevel, getLogLevel, setLogLevel, setLogHandler};\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}\n */\n headers: Map;\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}\n */\n responseHeaders: Array;\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} headers The request headers\n */\n constructor(headers: Map = 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.} Service response as promise\n */\n doHttpRequest(): Promise {\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 {\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","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\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\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}\n */\n requests: Array = [];\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 * @returns {Promise} The multirequest execution promise\n */\n execute(): Promise {\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);\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 = [];\n /**\n * @constructor\n * @param {Object} response data\n */\n constructor(response: Object) {\n this.success = true;\n const responseArr = response.result ? response.result : response;\n responseArr.forEach(result => {\n const serviceResult: ServiceResult = new ServiceResult(result);\n this.results.push(serviceResult);\n if (serviceResult.hasError) {\n MultiRequestResult._logger.error(\n `Service returned an error with error code: ${serviceResult.error.code} and message: ${serviceResult.error.message}.`\n );\n this.success = false;\n return;\n }\n });\n }\n}\n","//@flow\nimport {clone} from '../../util/clone';\n\nconst defaultConfig: Object = {\n serviceParams: {\n apiVersion: '5.2.6'\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 OTTService from '../ott-service';\nimport RequestBuilder from '../../../../util/request-builder';\nimport OTTConfiguration from '../../config';\n\nconst SERVICE_NAME: string = 'bookmark';\n\nexport default class OTTBookmarkService extends OTTService {\n /**\n * Creates an instance of RequestBuilder for session.startWidgetSession\n * @function add\n * @param {string} serviceUrl - The service url\n * @param {string} ks - The ks\n * @param {Object} bookmark - The udid\n * @returns {RequestBuilder} - The request builder\n * @static\n */\n static add(serviceUrl: string, ks: string, bookmark: Object): RequestBuilder {\n const headers: Map = new Map();\n headers.set('Content-Type', 'application/json');\n const request = new RequestBuilder(headers);\n request.service = SERVICE_NAME;\n request.action = 'add';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n const playerData: Object = {\n objectType: 'KalturaBookmarkPlayerData',\n action: bookmark.playerData.action,\n averageBitrate: bookmark.playerData.averageBitrate,\n totalBitrate: bookmark.playerData.totalBitrate,\n currentBitrate: bookmark.playerData.currentBitrate,\n fileId: bookmark.playerData.fileId\n };\n const bookmarkServiceParams: Object = {\n objectType: 'KalturaBookmark',\n type: bookmark.type,\n id: bookmark.id,\n position: bookmark.position,\n playerData: playerData\n };\n const config = OTTConfiguration.get();\n const serviceParams = config.serviceParams;\n Object.assign(serviceParams, {bookmark: bookmarkServiceParams, ks: ks});\n request.params = JSON.stringify(serviceParams);\n return request;\n }\n}\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 = 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 RequestBuilder from '../../../../util/request-builder';\nimport OTTConfiguration from '../../config';\nimport OTTBookmarkService from './bookmark-service';\n\ndeclare var __VERSION__: string;\ndeclare var __NAME__: string;\n\nconst NAME = __NAME__ + '-bookmark-service';\nconst VERSION = __VERSION__;\n\nexport {OTTBookmarkService, OTTConfiguration, RequestBuilder, NAME, VERSION};\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/playkit-ott-provider.js b/dist/playkit-ott-provider.js index 0aa1df37..d9315d46 100644 --- a/dist/playkit-ott-provider.js +++ b/dist/playkit-ott-provider.js @@ -1,7 +1,7 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ott=t():(e.playkit=e.playkit||{},e.playkit.providers=e.playkit.providers||{},e.playkit.providers.ott=t())}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=42)}([function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:new Map;r(this,e),this._attemptCounter=1,this.headers=t}return o(e,[{key:"getUrl",value:function(e){return e+"/service/"+this.service+(this.action?"/action/"+this.action:"")}},{key:"doHttpRequest",value:function(){var e=this,t=new Promise(function(t,n){e._requestPromise={resolve:t,reject:n}});return this.url||this._requestPromise.reject(new i.default(i.default.Severity.CRITICAL,i.default.Category.NETWORK,i.default.Code.MALFORMED_DATA_URI,{url:this.url})),this._createXHR(),t}},{key:"_createXHR",value:function(){var e=this,t=new XMLHttpRequest;t.onreadystatechange=function(){if(4===t.readyState&&200===t.status)try{var n=JSON.parse(t.responseText);return e.responseHeaders=e._getResponseHeaders(t),e._requestPromise.resolve(n)}catch(n){e._requestPromise.reject(e._createError(t,i.default.Code.BAD_SERVER_RESPONSE,{text:t.responseText}))}},t.open(this.method,this.url,this.retryConfig.async),this.retryConfig.async&&this.retryConfig.timeout&&(t.timeout=this.retryConfig.timeout);var n=performance.now();t.ontimeout=function(){e._handleError(t,i.default.Code.TIMEOUT,{timeout:(performance.now()-n)/1e3,statusText:t.statusText})},t.onerror=t.onabort=function(){e._handleError(t,i.default.Code.HTTP_ERROR,{text:t.responseText,statusText:t.statusText})},this.headers.forEach(function(e,n){t.setRequestHeader(n,e)}),t.send(this.params)}},{key:"_getResponseHeaders",value:function(e){return e.getAllResponseHeaders().split("\n").filter(function(e){return 0===e.toLowerCase().indexOf("x-")})}},{key:"_handleError",value:function(e,t,n){var r=this._createError(e,t,n);if(e.onreadystatechange=function(){},e.onerror=function(){},e.ontimeout=function(){},e.onabort=function(){},!(this.retryConfig.maxAttempts&&this._attemptCounter3&&void 0!==arguments[3]?arguments[3]:{};r(this,e),this.severity=t,this.category=n,this.code=a,this.data=i,(0,o.getLogLevel)("Error")!==o.LogLevel.OFF&&e._logger.error("Category:"+n+" | Code:"+a+" |",i)};c.Severity=i.Severity,c.Category=s.Category,c.Code=u.Code,c._logger=(0,a.default)("Error"),t.default=c},function(e,t,n){"use strict";function r(e){s.setHandler(function(t,n){return e(t,n)})}function o(e){return e?s.get(e):s}function a(e){return o(e).getLevel()}function i(e,t){o(t).setLevel(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.setLogHandler=t.setLogLevel=t.getLogLevel=t.LogLevel=void 0;var u=n(27),s=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(u),c={DEBUG:s.DEBUG,INFO:s.INFO,TIME:s.TIME,WARN:s.WARN,ERROR:s.ERROR,OFF:s.OFF};s.useDefaults({defaultLevel:s.ERROR}),t.default=o,t.LogLevel=c,t.getLogLevel=a,t.setLogLevel=i,t.setLogHandler=r},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function e(t){r(this,e),this.hasError=!1,"KalturaAPIException"===t.objectType?(this.hasError=!0,this.error=new a(t.code,t.message)):t.error&&"KalturaAPIException"===t.error.objectType?(this.hasError=!0,this.error=new a(t.error.code,t.error.message)):this.data=t};t.default=o;var a=function e(t,n){r(this,e),this.code=t,this.message=n}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&(e.drmData=[],this.drmData.forEach(function(t){Array.isArray(e.drmData)&&e.drmData.push(t.toJSON())})),e}}]),e}());t.default=i},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&(n.response=e.results.slice(o[0],o[o.length-1]+1))}catch(e){return{success:!1,error:e}}}),{success:!0,data:this._loaders}}}]),e}();t.default=c},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function u(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.MultiRequestResult=void 0;var s=function(){function e(e,t){for(var n=0;n0?t.slice(0):[],n.forEach(function(t,o){("object"===(void 0===t?"undefined":r(t))&&t!=={}||Array.isArray(t)&&t.length>0)&&(n[o]=e(t))})):"object"===(void 0===t?"undefined":r(t))?(n=Object.assign({},t),Object.keys(n).forEach(function(t){("object"===r(n[t])&&n[t]!=={}||Array.isArray(n[t])&&n[t].length>0)&&(n[t]=e(n[t]))})):n=t,n};t.clone=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={NETWORK:1,SERVICE:2,PROVIDER:3};t.Category=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={UNSUPPORTED_SCHEME:1e3,BAD_HTTP_STATUS:1001,HTTP_ERROR:1002,TIMEOUT:1003,MALFORMED_DATA_URI:1004,BAD_SERVER_RESPONSE:1005,MULTIREQUEST_API_ERROR:1006,API_RESPONSE_MISMATCH:1007,ERROR:2e3,BLOCK_ACTION:2001,MEDIA_STATUS_NOT_READY:2002,MISSING_MANDATORY_PARAMS:3e3,MISSING_PLAY_SOURCE:3001,METHOD_NOT_IMPLEMENTED:3002};t.Code=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={RECOVERABLE:1,CRITICAL:2};t.Severity=r},function(e,t,n){var r,o;/*! +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ott=t():(e.playkit=e.playkit||{},e.playkit.providers=e.playkit.providers||{},e.playkit.providers.ott=t())}(window,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=18)}([function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(1);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var a=function e(t,n,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};o(this,e),this.severity=t,this.category=n,this.code=i,this.data=a,Object(r.c)("Error")!==r.a.OFF&&e._logger.error("Category:".concat(n," | Code:").concat(i," |"),a)};i(a,"Severity",{RECOVERABLE:1,CRITICAL:2}),i(a,"Category",{NETWORK:1,SERVICE:2,PROVIDER:3}),i(a,"Code",{UNSUPPORTED_SCHEME:1e3,BAD_HTTP_STATUS:1001,HTTP_ERROR:1002,TIMEOUT:1003,MALFORMED_DATA_URI:1004,BAD_SERVER_RESPONSE:1005,MULTIREQUEST_API_ERROR:1006,API_RESPONSE_MISMATCH:1007,ERROR:2e3,BLOCK_ACTION:2001,MEDIA_STATUS_NOT_READY:2002,MISSING_MANDATORY_PARAMS:3e3,MISSING_PLAY_SOURCE:3001,METHOD_NOT_IMPLEMENTED:3002}),i(a,"_logger",Object(r.b)("Error"))},function(e,t,n){"use strict";n.d(t,"a",(function(){return o})),n.d(t,"c",(function(){return s})),n.d(t,"e",(function(){return u})),n.d(t,"d",(function(){return i}));var r=n(4),o={DEBUG:r.DEBUG,INFO:r.INFO,TIME:r.TIME,WARN:r.WARN,ERROR:r.ERROR,OFF:r.OFF};function i(e){r.setHandler((function(t,n){return e(t,n)}))}function a(e){return e?r.get(e):r}function s(e){return a(e).getLevel()}function u(e,t){a(t).setLevel(e)}r.useDefaults({defaultLevel:r.ERROR}),t.b=a},function(e,t,n){"use strict";n.d(t,"a",(function(){return u}));var r=n(8);function o(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:new Map;o(this,e),a(this,"retryConfig",{async:!0,timeout:0,maxAttempts:4}),a(this,"_attemptCounter",1),this.headers=t}var t,n,s;return t=e,(n=[{key:"getUrl",value:function(e){return e+"/service/"+this.service+(this.action?"/action/"+this.action:"")}},{key:"doHttpRequest",value:function(){var e=this,t=new Promise((function(t,n){e._requestPromise={resolve:t,reject:n}}));return this.url||this._requestPromise.reject(new r.a(r.a.Severity.CRITICAL,r.a.Category.NETWORK,r.a.Code.MALFORMED_DATA_URI,{url:this.url})),this._createXHR(),t}},{key:"_createXHR",value:function(){var e=this,t=new XMLHttpRequest;t.onreadystatechange=function(){if(4===t.readyState&&200===t.status)try{var n=JSON.parse(t.responseText);return e.responseHeaders=e._getResponseHeaders(t),e._requestPromise.resolve(n)}catch(n){e._requestPromise.reject(e._createError(t,r.a.Code.BAD_SERVER_RESPONSE,{text:t.responseText}))}},t.open(this.method,this.url,this.retryConfig.async),this.retryConfig.async&&this.retryConfig.timeout&&(t.timeout=this.retryConfig.timeout);var n=performance.now();t.ontimeout=function(){e._handleError(t,r.a.Code.TIMEOUT,{timeout:(performance.now()-n)/1e3,statusText:t.statusText})},t.onerror=t.onabort=function(){e._handleError(t,r.a.Code.HTTP_ERROR,{text:t.responseText,statusText:t.statusText})},this.headers.forEach((function(e,n){t.setRequestHeader(n,e)})),t.send(this.params)}},{key:"_getResponseHeaders",value:function(e){return e.getAllResponseHeaders().split("\n").filter((function(e){return 0===e.toLowerCase().indexOf("x-")}))}},{key:"_handleError",value:function(e,t,n){var r=this._createError(e,t,n);if(e.onreadystatechange=function(){},e.onerror=function(){},e.ontimeout=function(){},e.onabort=function(){},!(this.retryConfig.maxAttempts&&this._attemptCounter=t.value},debug:function(){this.invoke(i.DEBUG,arguments)},info:function(){this.invoke(i.INFO,arguments)},warn:function(){this.invoke(i.WARN,arguments)},error:function(){this.invoke(i.ERROR,arguments)},time:function(e){"string"==typeof e&&e.length>0&&this.invoke(i.TIME,[e,"start"])},timeEnd:function(e){"string"==typeof e&&e.length>0&&this.invoke(i.TIME,[e,"end"])},invoke:function(e,t){u&&this.enabledFor(e)&&u(t,l({level:e},this.context))}};var p=new d({filterLevel:i.OFF});!function(){var e=i;e.enabledFor=c(p,p.enabledFor),e.debug=c(p,p.debug),e.time=c(p,p.time),e.timeEnd=c(p,p.timeEnd),e.info=c(p,p.info),e.warn=c(p,p.warn),e.error=c(p,p.error),e.log=e.info}(),i.setHandler=function(e){u=e},i.setLevel=function(e){p.setLevel(e);for(var t in s)s.hasOwnProperty(t)&&s[t].setLevel(e)},i.getLevel=function(){return p.getLevel()},i.get=function(e){return s[e]||(s[e]=new d(l({name:e},p.context)))},i.createDefaultHandler=function(e){e=e||{},e.formatter=e.formatter||function(e,t){t.name&&e.unshift("["+t.name+"]")};var t={},n=function(e,t){Function.prototype.apply.call(e,console,t)};return"undefined"==typeof console?function(){}:function(r,o){r=Array.prototype.slice.call(r);var a,u=console.log;o.level===i.TIME?(a=(o.name?"["+o.name+"] ":"")+r[0],"start"===r[1]?console.time?console.time(a):t[a]=(new Date).getTime():console.timeEnd?console.timeEnd(a):n(u,[a+": "+((new Date).getTime()-t[a])+"ms"])):(o.level===i.WARN&&console.warn?u=console.warn:o.level===i.ERROR&&console.error?u=console.error:o.level===i.INFO&&console.info?u=console.info:o.level===i.DEBUG&&console.debug&&(u=console.debug),e.formatter(r,o),n(u,r))}},i.useDefaults=function(e){i.setLevel(e&&e.defaultLevel||i.DEBUG),i.setHandler(i.createDefaultHandler(e))},r=i,void 0!==(o="function"==typeof r?r.call(t,n,t,e):r)&&(e.exports=o)}()},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function e(t){r(this,e),this.streamertype=t.streamertype,this.url=t.url};o.StreamerType={HLS:"hls",DASH:"dash",PROGRESSIVE:"progressive"},t.default=o},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0}},{key:"getProtocol",value:function(e){var t="";if(this.protocols&&this.protocols.length>0){this.protocols.split(",").forEach(function(n){n===e&&(t=n)})}else if("http"===e)return e;return t}}]),e}();t.default=u},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function e(t){r(this,e),this.type=t.type};o.Type={BLOCK:"BLOCK",START_DATE_OFFSET:"START_DATE_OFFSET",END_DATE_OFFSET:"END_DATE_OFFSET",USER_BLOCK:"USER_BLOCK",ALLOW_PLAYBACK:"ALLOW_PLAYBACK",BLOCK_PLAYBACK:"BLOCK_PLAYBACK",APPLY_DISCOUNT_MODULE:"APPLY_DISCOUNT_MODULE"},t.default=o},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n-1&&(t.vr={}),Object.assign(t.metadata,e.metadata),t}}]),t}(c.default);t.default=j},,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function e(t){r(this,e),this.url=t.url};t.default=o},,function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.VERSION=t.NAME=t.MediaType=t.ContextType=t.Provider=void 0;var o=n(38),a=r(o),i=n(18),u=r(i),s=n(6),c=r(s),l=u.default.Type,f=c.default.Type;t.Provider=a.default,t.ContextType=l,t.MediaType=f,t.NAME="playkit-js-providers-ott",t.VERSION="2.21.1"},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"",r=arguments[2];o(this,t);var i=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,r));return i._multiRequest=l.default.getMultiRequest(n,e),i}return i(t,e),t}(s.default);t.default=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n0||"KalturaLiveAsset"===e.objectType?{type:_.default.Type.LIVE,dvrStatus:0}:{type:_.default.Type.VOD}}),i)),a(s,v.default.Type.EPG,(u={},a(u,y.default.Type.CATCHUP,function(){return{type:_.default.Type.VOD}}),a(u,y.default.Type.START_OVER,function(){return{type:_.default.Type.LIVE,dvrStatus:1}}),u)),a(s,v.default.Type.RECORDING,a({},y.default.Type.PLAYBACK,function(){return{type:_.default.Type.VOD}})),s),x=function(){function e(){o(this,e)}return c(e,null,[{key:"getMediaEntry",value:function(t,n){var r=new _.default;e._fillBaseData(r,t,n);var o=t.playBackContextResult,a=t.mediaDataResult,i=o.sources,u=e._filterSourcesByFormats(i,n.formats);r.sources=e._getParsedSources(u);var s=e._getMediaType(a.data,n.mediaType,n.contextType);return r.type=s.type,r.dvrStatus=s.dvrStatus,r.duration=Math.max.apply(Math,i.map(function(e){return e.duration})),r}},{key:"getEntryList",value:function(t,n){var r=new P.default;return t.playlistItems.entries.forEach(function(t){var o=new _.default,a=n.find(function(e){return e.entryId===t.mediaDataResult.id});e._fillBaseData(o,t,a),r.items.push(o)}),r}},{key:"getBumper",value:function(e){var t=e.playBackContextResult,n=t.plugins.find(function(e){return e.streamertype===D.default.StreamerType.PROGRESSIVE});if(n)return new k.default(n)}},{key:"_fillBaseData",value:function(t,n,r){var o=n.mediaDataResult,a=e.reconstructMetadata(o);return a.description=o.description,a.name=o.name,r&&r.mediaType&&(a.mediaType=r.mediaType),t.metadata=a,t.poster=e._getPoster(o.pictures),t.id=o.id,t}},{key:"reconstructMetadata",value:function(t){return{metas:e.addToMetaObject(t.metas),tags:e.addToMetaObject(t.tags)}}},{key:"addToMetaObject",value:function(e){var t={};return e&&e.forEach(function(e){t[e.key]=e.value}),t}},{key:"_getPoster",value:function(e){if(e&&e.length>0){var t=e[0],n=t.url;return/.*\/thumbnail\/.*(?:width|height)\/\d+\/(?:height|width)\/\d+/.test(n)?n:e.map(function(e){return{url:e.url,width:e.width,height:e.height}})}return""}},{key:"_getMediaType",value:function(e,t,n){var r={type:_.default.Type.UNKNOWN};return N[t]&&N[t][n]&&(r=N[t][n](e)),r}},{key:"_filterSourcesByFormats",value:function(e,t){return t.length>0&&(e=e.filter(function(e){return t.includes(e.type)})),e}},{key:"_getParsedSources",value:function(t){var n=new w.default,r=function(t){var r=e._parseAdaptiveSource(t);if(r){var o=M.SupportedStreamFormat.get(t.format);n.map(r,o)}};return t&&t.length>0&&(function(){t.filter(function(e){return!(0,M.isProgressiveSource)(e.format)}).forEach(r)}(),function(){t.filter(function(e){return(0,M.isProgressiveSource)(e.format)}).forEach(r)}()),n}},{key:"_parseAdaptiveSource",value:function(t){var n=new E.default;if(t){var r=t.url,o=M.SupportedStreamFormat.get(t.format);if(o&&(n.mimetype=o.mimeType),!r)return e._logger.error("failed to create play url from source, discarding source: ("+t.fileId+"), "+t.format+"."),null;if(n.url=r,n.id=t.fileId+","+t.format,t.hasDrmData()){var a=[];t.drm.forEach(function(e){a.push(new b.default(e.licenseURL,A.default.Scheme[e.scheme],e.certificate))}),n.drmData=a}}return n}},{key:"hasBlockAction",value:function(e){return e.playBackContextResult.hasBlockAction()}},{key:"getBlockAction",value:function(e){return e.playBackContextResult.getBlockAction()}},{key:"getErrorMessages",value:function(e){return e.playBackContextResult.getErrorMessages()}}]),e}();x._logger=(0,f.default)("OTTProviderParser"),t.default=x},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var u=function(){function e(e,t){for(var n=0;n=t.value},trace:function(){this.invoke(s.TRACE,arguments)},debug:function(){this.invoke(s.DEBUG,arguments)},info:function(){this.invoke(s.INFO,arguments)},warn:function(){this.invoke(s.WARN,arguments)},error:function(){this.invoke(s.ERROR,arguments)},time:function(e){"string"==typeof e&&e.length>0&&this.invoke(s.TIME,[e,"start"])},timeEnd:function(e){"string"==typeof e&&e.length>0&&this.invoke(s.TIME,[e,"end"])},invoke:function(e,t){a&&this.enabledFor(e)&&a(t,f({level:e},this.context))}};var y,h=new p({filterLevel:s.OFF});(y=s).enabledFor=c(h,h.enabledFor),y.trace=c(h,h.trace),y.debug=c(h,h.debug),y.time=c(h,h.time),y.timeEnd=c(h,h.timeEnd),y.info=c(h,h.info),y.warn=c(h,h.warn),y.error=c(h,h.error),y.log=y.info,s.setHandler=function(e){a=e},s.setLevel=function(e){for(var t in h.setLevel(e),u)u.hasOwnProperty(t)&&u[t].setLevel(e)},s.getLevel=function(){return h.getLevel()},s.get=function(e){return u[e]||(u[e]=new p(f({name:e},h.context)))},s.createDefaultHandler=function(e){(e=e||{}).formatter=e.formatter||function(e,t){t.name&&e.unshift("["+t.name+"]")};var t={},n=function(e,t){Function.prototype.apply.call(e,console,t)};return"undefined"==typeof console?function(){}:function(r,o){r=Array.prototype.slice.call(r);var i,a=console.log;o.level===s.TIME?(i=(o.name?"["+o.name+"] ":"")+r[0],"start"===r[1]?console.time?console.time(i):t[i]=(new Date).getTime():console.timeEnd?console.timeEnd(i):n(a,[i+": "+((new Date).getTime()-t[i])+"ms"])):(o.level===s.WARN&&console.warn?a=console.warn:o.level===s.ERROR&&console.error?a=console.error:o.level===s.INFO&&console.info?a=console.info:o.level===s.DEBUG&&console.debug?a=console.debug:o.level===s.TRACE&&console.trace&&(a=console.trace),e.formatter(r,o),n(a,r))}},s.useDefaults=function(e){s.setLevel(e&&e.defaultLevel||s.DEBUG),s.setHandler(s.createDefaultHandler(e))},void 0===(o="function"==typeof(r=s)?r.call(t,n,t,e):r)||(e.exports=o)}()},function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return o})),n.d(t,"c",(function(){return i}));var r={DASH:{name:"dash",mimeType:"application/dash+xml",pathExt:"mpd"},HLS:{name:"hls",mimeType:"application/x-mpegURL",pathExt:"m3u8"},WVM:{name:"wvm",mimeType:"video/wvm",pathExt:"wvm"},MP4:{name:"mp4",mimeType:"video/mp4",pathExt:"mp4"},MP3:{name:"mp3",mimeType:"audio/mpeg",pathExt:"mp3"}},o=new Map([["mpegdash",r.DASH],["applehttp",r.HLS],["url",r.MP4]]);function i(e){var t=o.get(e);return!!t&&t.name===r.MP4.name}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}n.d(t,"a",(function(){return o}));var o=function e(t){var n,o,a;r(this,e),a=!1,(o="hasError")in(n=this)?Object.defineProperty(n,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[o]=a,"KalturaAPIException"===t.objectType?(this.hasError=!0,this.error=new i(t.code,t.message)):t.error&&"KalturaAPIException"===t.error.objectType?(this.hasError=!0,this.error=new i(t.error.code,t.error.message)):this.data=t},i=function e(t,n){r(this,e),this.code=t,this.message=n}},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r,o,i,a=function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.scheme=t.scheme,this.licenseURL=t.licenseURL,this.certificate=t.certificate};i={"drm.PLAYREADY_CENC":"com.microsoft.playready","drm.WIDEVINE_CENC":"com.widevine.alpha","fairplay.FAIRPLAY":"com.apple.fairplay",WIDEVINE_CENC:"com.widevine.alpha",PLAYREADY_CENC:"com.microsoft.playready",FAIRPLAY:"com.apple.fairplay"},(o="Scheme")in(r=a)?Object.defineProperty(r,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[o]=i},function(e,t,n){"use strict";n.d(t,"a",(function(){return i}));n(9);var r=n(5);function o(e,t){for(var n=0;n0&&(e.drmData=[],this.drmData.forEach((function(t){Array.isArray(e.drmData)&&e.drmData.push(t.toJSON())}))),e}}])&&r(t.prototype,n),o&&r(t,o),e}()},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));n(11);var r=n(0);function o(e,t){for(var n=0;n0&&(n.response=e.results.slice(o[0],o[o.length-1]+1))}catch(e){return{success:!1,error:e}}})),{success:!0,data:this._loaders}}}])&&o(t.prototype,n),a&&o(t,a),e}()},function(e,t,n){"use strict";n.d(t,"a",(function(){return v}));var r=n(3),o=n(1),i=n(6),a=n(0);function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(e,t){for(var n=0;n0?t.slice(0):[]).forEach((function(t,o){("object"===r(t)&&t!=={}||Array.isArray(t)&&t.length>0)&&(n[o]=e(t))})):"object"===r(t)?(n=Object.assign({},t),Object.keys(n).forEach((function(t){("object"===r(n[t])&&n[t]!=={}||Array.isArray(n[t])&&n[t].length>0)&&(n[t]=e(n[t]))}))):n=t,n}},function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));n(2);var r=function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.items=[]}},,function(e,t,n){"use strict";n.r(t),n.d(t,"Provider",(function(){return qe})),n.d(t,"ContextType",(function(){return Ke})),n.d(t,"MediaType",(function(){return We})),n.d(t,"NAME",(function(){return He})),n.d(t,"VERSION",(function(){return Ve}));var r=n(14),o=n(1),i=n(15);function a(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2?arguments[2]:void 0;return h(this,n),(r=t.call(this,i))._multiRequest=p.getMultiRequest(o,e),r}return n}(c.a),_=n(3);function O(e){return(O="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function E(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function R(e,t){for(var n=0;n0}},{key:"getProtocol",value:function(e){var t="";if(this.protocols&&this.protocols.length>0)this.protocols.split(",").forEach((function(n){n===e&&(t=n)}));else if("http"===e)return e;return t}}])&&G(t.prototype,n),r&&G(t,r),e}();var X=function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.streamertype=t.streamertype,this.url=t.url};function Q(e){return(Q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function z(e,t){for(var n=0;n0||"KalturaLiveAsset"===e.objectType?{type:_e.a.Type.LIVE,dvrStatus:0}:{type:_e.a.Type.VOD}})),Te)),Ae(Pe,ye.Type.EPG,(Ae(Ce={},oe.Type.CATCHUP,(function(){return{type:_e.a.Type.VOD}})),Ae(Ce,oe.Type.START_OVER,(function(){return{type:_e.a.Type.LIVE,dvrStatus:1}})),Ce)),Ae(Pe,ye.Type.RECORDING,Ae({},oe.Type.PLAYBACK,(function(){return{type:_e.a.Type.VOD}}))),Pe),De=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e)}var t,n,r;return t=e,r=[{key:"getMediaEntry",value:function(t,n){var r=new _e.a;e._fillBaseData(r,t,n);var o=t.playBackContextResult,i=t.mediaDataResult,a=o.sources,s=e._filterSourcesByFormats(a,n.formats);r.sources=e._getParsedSources(s);var u=e._getMediaType(i.data,n.mediaType,n.contextType);return r.type=u.type,r.dvrStatus=u.dvrStatus,r.duration=Math.max.apply(Math,a.map((function(e){return e.duration}))),r}},{key:"getEntryList",value:function(t,n){var r=new we.a;return t.playlistItems.entries.forEach((function(t){var o=new _e.a,i=n.find((function(e){return e.entryId===t.mediaDataResult.id}));e._fillBaseData(o,t,i),r.items.push(o)})),r}},{key:"getBumper",value:function(e){var t=e.playBackContextResult.plugins.find((function(e){return e.streamertype===X.StreamerType.PROGRESSIVE}));if(t)return new ke(t)}},{key:"_fillBaseData",value:function(t,n,r){var o=n.mediaDataResult,i=e.reconstructMetadata(o);return i.description=o.description,i.name=o.name,r&&r.mediaType&&(i.mediaType=r.mediaType),t.metadata=i,t.poster=e._getPoster(o.pictures),t.id=o.id,t}},{key:"reconstructMetadata",value:function(t){return{metas:e.addToMetaObject(t.metas),tags:e.addToMetaObject(t.tags)}}},{key:"addToMetaObject",value:function(e){var t={};return e&&e.forEach((function(e){t[e.key]=e.value})),t}},{key:"_getPoster",value:function(e){if(e&&e.length>0){var t=e[0].url;return/.*\/thumbnail\/.*(?:width|height)\/\d+\/(?:height|width)\/\d+/.test(t)?t:e.map((function(e){return{url:e.url,width:e.width,height:e.height}}))}return""}},{key:"_getMediaType",value:function(e,t,n){var r={type:_e.a.Type.UNKNOWN};return je[t]&&je[t][n]&&(r=je[t][n](e)),r}},{key:"_filterSourcesByFormats",value:function(e,t){return t.length>0&&(e=e.filter((function(e){return t.includes(e.type)}))),e}},{key:"_getParsedSources",value:function(t){var n=new Re.a,r=function(t){var r=e._parseAdaptiveSource(t);if(r){var o=Se.b.get(t.format);n.map(r,o)}};return t&&t.length>0&&(t.filter((function(e){return!Object(Se.c)(e.format)})).forEach(r),t.filter((function(e){return Object(Se.c)(e.format)})).forEach(r)),n}},{key:"_parseAdaptiveSource",value:function(t){var n=new Ee.a;if(t){var r=t.url,o=Se.b.get(t.format);if(o&&(n.mimetype=o.mimeType),!r)return e._logger.error("failed to create play url from source, discarding source: (".concat(t.fileId,"), ").concat(t.format,".")),null;if(n.url=r,n.id=t.fileId+","+t.format,t.hasDrmData()){var i=[];t.drm.forEach((function(e){i.push(new Oe.a(e.licenseURL,Y.a.Scheme[e.scheme],e.certificate))})),n.drmData=i}}return n}},{key:"hasBlockAction",value:function(e){return e.playBackContextResult.hasBlockAction()}},{key:"getBlockAction",value:function(e){return e.playBackContextResult.getBlockAction()}},{key:"getErrorMessages",value:function(e){return e.playBackContextResult.getErrorMessages()}}],(n=null)&&Ie(t.prototype,n),r&&Ie(t,r),e}();Ae(De,"_logger",Object(o.b)("OTTProviderParser"));var Le=n(0);function Me(e){return(Me="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function Ne(e,t){for(var n=0;n-1&&(t.vr={}),Object.assign(t.metadata,e.metadata),t}}])&&Ne(t.prototype,n),r&&Ne(t,r),a}(r.a),He="playkit-js-providers-ott",Ve="2.21.1",Ke=oe.Type,We=ye.Type}])})); //# sourceMappingURL=playkit-ott-provider.js.map \ No newline at end of file diff --git a/dist/playkit-ott-provider.js.map b/dist/playkit-ott-provider.js.map index 578e8d1b..f5570416 100644 --- a/dist/playkit-ott-provider.js.map +++ b/dist/playkit-ott-provider.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition?5ca6","./providers/playkit-ott-provider.js","webpack:///webpack/bootstrap 59d72028ff5eee9a0b0d?552f","webpack:///./util/request-builder.js?3e89","webpack:///./util/error/error.js?b2db","webpack:///./util/logger.js?8c6e","webpack:///./k-provider/common/base-service-result.js?3ffa","webpack:///./entities/media-entry.js?f496","./providers/./k-provider/ott/response-types/kaltura-asset.js","webpack:///./entities/drm.js?1c78","webpack:///./entities/media-format.js?60b5","webpack:///./entities/media-source.js?489a","webpack:///./entities/media-sources.js?fb37","webpack:///./k-provider/common/data-loader-manager.js?4c3e","webpack:///./k-provider/common/multi-request-builder.js?9930","webpack:///./k-provider/common/response-types/kaltura-access-control-message.js?bbd4","webpack:///./k-provider/common/response-types/kaltura-drm-playback-plugin-data.js?bb31","./providers/./k-provider/ott/config.js","./providers/./k-provider/ott/response-types/kaltura-playback-context.js","webpack:///./entities/entry-list.js?8f3f","webpack:///./k-provider/common/base-provider.js?8ae2","./providers/./k-provider/ott/services/ott-service.js","webpack:///./util/clone.js?3f6f","webpack:///./util/error/category.js?09d6","webpack:///./util/error/code.js?da3a","webpack:///./util/error/severity.js?a489","webpack:///../~/js-logger/src/logger.js?779b","./providers/./k-provider/ott/response-types/kaltura-bumper-playback-plugin-data.js","./providers/./k-provider/ott/response-types/kaltura-playback-source.js","./providers/./k-provider/ott/response-types/kaltura-rule-action.js","./providers/./k-provider/ott/services/asset-service.js","./providers/./k-provider/ott/provider.js","./providers/./entities/bumper.js","./providers/./k-provider/ott/index.js","./providers/./k-provider/ott/loaders/asset-list-loader.js","./providers/./k-provider/ott/loaders/asset-loader.js","./providers/./k-provider/ott/loaders/data-loader-manager.js","./providers/./k-provider/ott/loaders/session-loader.js","./providers/./k-provider/ott/provider-parser.js","./providers/./k-provider/ott/services/user-service.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","length","descriptor","writable","key","protoProps","staticProps","_error","_error2","obj","default","RequestBuilder","headers","arguments","undefined","Map","_attemptCounter","serviceUrl","service","action","_this","promise","Promise","resolve","reject","_requestPromise","url","Severity","CRITICAL","Category","NETWORK","Code","MALFORMED_DATA_URI","_createXHR","_this2","request","XMLHttpRequest","onreadystatechange","readyState","status","response","JSON","parse","responseText","responseHeaders","_getResponseHeaders","error","_createError","BAD_SERVER_RESPONSE","text","open","method","retryConfig","async","timeout","requestTime","performance","now","ontimeout","_handleError","TIMEOUT","statusText","onerror","onabort","HTTP_ERROR","forEach","setRequestHeader","send","params","getAllResponseHeaders","split","filter","header","toLowerCase","indexOf","code","data","maxAttempts","assign","attempt","_logger","_logger2","_severity","_code","_category","Error","severity","category","getLogLevel","LogLevel","OFF","setLogHandler","handler","JsLogger","setHandler","messages","context","getLogger","getLevel","setLogLevel","level","setLevel","_jsLogger","newObj","DEBUG","INFO","TIME","WARN","ERROR","useDefaults","defaultLevel","ServiceResult","hasError","objectType","ServiceError","message","_mediaSources","_mediaSources2","MediaEntry","metadata","sources","type","Type","UNKNOWN","id","toJSON","duration","dvrStatus","poster","assetReferenceType","VOD","LIVE","IMAGE","AUDIO","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","_baseServiceResult","_baseServiceResult2","KalturaAsset","_ServiceResult","getPrototypeOf","description","tags","metas","pictures","_formatTagsMetas","images","objectToParse","parsed","keys","objects","push","MEDIA","RECORDING","EPG","AssetReferenceType","EPG_INTERNAL","EPG_EXTERNAL","NPVR","Drm","licenseUrl","scheme","certificate","isProgressiveSource","formatName","sourceFormat","SupportedStreamFormat","MediaFormat","MP4","DASH","mimeType","pathExt","HLS","WVM","MP3","_drm","MediaSource","mimetype","bandwidth","width","height","label","drmData","Array","isArray","_mediaSource","_mediaFormat","MediaSources","progressive","dash","hls","source","mediaFormat","h","_interopRequireDefault","_multiRequestBuilder","DataLoaderManager","networkRetryConfig","_loadersResponseMap","_loaders","_networkRetryConfig","loader","execution_loader","isValid","set","startIndex","_multiRequest","requests","add","executionLoaderResponseMap","from","val","index","execute","then","_multiResponse","prepareData","success","API_RESPONSE_MISMATCH","err","_this3","loaderDataIndexes","results","slice","_defineProperty","MultiRequestResult","_requestBuilder","_requestBuilder2","MultiRequestBuilder","_RequestBuilder","_ref","_temp","_ret","_len","args","_key","apply","concat","requestParams","serviceDef","stringify","PROVIDER","FAILED_PARSING_REQUEST","doHttpRequest","multiRequestResult","MULTIREQUEST_API_ERROR","result","serviceResult","KalturaAccessControlMessage","KalturaDrmPlaybackPluginData","drm","licenseURL","Scheme","drm.PLAYREADY_CENC","drm.WIDEVINE_CENC","fairplay.FAIRPLAY","WIDEVINE_CENC","PLAYREADY_CENC","FAIRPLAY","OTTConfiguration","_clone","defaultConfig","serviceParams","apiVersion","clientConfig","clone","_kalturaAccessControlMessage","_kalturaAccessControlMessage2","_kalturaRuleAction","_kalturaRuleAction2","_kalturaPlaybackSource","_kalturaPlaybackSource2","_kalturaBumperPlaybackPluginData","_kalturaBumperPlaybackPluginData2","KalturaPlaybackContext","actions","plugins","map","plugin","getBlockAction","find","BLOCK","TRAILER","CATCHUP","START_OVER","PLAYBACK","_mediaEntry","EntryList","items","_dataLoaderManager","BaseProvider","options","playerVersion","_partnerId","partnerId","_widgetId","widgetId","_uiConfId","uiConfId","_isAnonymous","ks","_ks","_playerVersion","log","defaultWidgetId","mediaInfo","METHOD_NOT_IMPLEMENTED","playlistInfo","entryListInfo","SERVICE","MISSING_PLAY_SOURCE","_multiRequestBuilder2","_config","_config2","OTTService","config","ottParams","multiReq","getUrl","_typeof","Symbol","iterator","node","e","UNSUPPORTED_SCHEME","BAD_HTTP_STATUS","BLOCK_ACTION","MEDIA_STATUS_NOT_READY","MISSING_MANDATORY_PARAMS","RECOVERABLE","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_RESULT__","global","Logger","VERSION","logHandler","contextualLoggersByNameMap","bind","scope","func","merge","defineLogLevel","ContextualLogger","defaultContext","filterLevel","info","newLevel","enabledFor","lvl","debug","invoke","warn","time","timeEnd","msgArgs","globalLogger","L","createDefaultHandler","formatter","unshift","timerStartTimeByLabelMap","invokeConsoleMethod","hdlr","Function","console","timerLabel","Date","getTime","KalturaBumpersPlaybackPluginData","streamertype","StreamerType","PROGRESSIVE","_kalturaDrmPlaybackPluginData","_kalturaDrmPlaybackPluginData2","KalturaPlaybackSource","format","adsPolicy","adsParam","fileId","protocols","protocol","returnValue","KalturaRuleAction","START_DATE_OFFSET","END_DATE_OFFSET","USER_BLOCK","ALLOW_PLAYBACK","BLOCK_PLAYBACK","APPLY_DISCOUNT_MODULE","_ottService","_ottService2","OTTAssetService","_OTTService","assetId","playbackContextOptions","contextDataParams","assetType","_baseProvider","_baseProvider2","_dataLoaderManager2","_sessionLoader","_sessionLoader2","_assetLoader","_assetLoader2","_assetListLoader","_assetListLoader2","_providerParser","_providerParser2","_kalturaAsset","_kalturaAsset2","_kalturaPlaybackContext","_kalturaPlaybackContext2","_mediaEntry2","OTTProvider","_BaseProvider","env","networkRetryParameters","_dataLoader","entryId","contextType","mediaType","playbackContext","mediaProtocol","assetFileIds","fileIds","requestData","formats","fetchData","_parseDataFromResponse","mediaConfig","session","isAnonymous","_getDefaultSourcesObject","has","sessionLoader","assetLoader","hasBlockAction","getErrorMessages","mediaEntry","getMediaEntry","_getSourcesObject","_verifyHasSources","bumper","getBumper","entries","_parseEntryListDataFromResponse","requestEntries","_this4","playlistConfig","playlistLoader","getEntryList","dvr","vr","sourcesObject","mediaSources","Bumper","NAME","MediaType","ContextType","Provider","_provider","_provider2","_assetService","_assetService2","OTTAssetListLoader","_response","playlistItems","buildRequests","_entries","entry","_requests","item","mediaDataResult","OTTAssetLoader","_entryId","getPlaybackContext","playBackContextResult","OTTDataLoaderManager","_DataLoaderManager","getMultiRequest","_userService","_userService2","OTTSessionLoader","anonymousLogin","udid","_KalturaAsset$Type$ME","_KalturaAsset$Type$EP","_MediaTypeCombination","_drm2","_mediaSource2","_entryList","_entryList2","_bumper","_bumper2","MediaTypeCombinations","mediaAssetData","parseInt","externalIds","OTTProviderParser","assetResponse","_fillBaseData","mediaAsset","kalturaSources","filteredKalturaSources","_filterSourcesByFormats","_getParsedSources","typeData","_getMediaType","Math","max","playlistResponse","entryList","requestEntry","progressiveBumper","metaData","reconstructMetadata","_getPoster","addToMetaObject","list","categoryObj","picObj","test","pic","includes","addAdaptiveSource","parsedSource","_parseAdaptiveSource","kalturaSource","mediaSource","playUrl","hasDrmData","drmParams","OTTUserService"],"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})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(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})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \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// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\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, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\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/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 42);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _error = __webpack_require__(1);\n\nvar _error2 = _interopRequireDefault(_error);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KALTURA_HEADER_PREFIX = 'x-';\n\nvar RequestBuilder = function () {\n\n /**\n * @constructor\n * @param {Map} headers The request headers\n */\n\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\n /**\n * @description network retry configuration\n * @memberof RequestBuilder\n * @type {ProviderNetworkRetryParameters}\n */\n\n /**\n * @memberof - Service tag\n * @type {string}\n */\n\n /**\n * @memberof - Service URL\n * @type {string}\n */\n\n /**\n * @member - Service params\n * @type {any}\n */\n\n /**\n * @member - Service name\n * @type {string}\n */\n function RequestBuilder() {\n var headers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Map();\n\n _classCallCheck(this, RequestBuilder);\n\n this._attemptCounter = 1;\n\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\n\n /**\n * @description number of xhr attempts for the same multi - request.\n * @memberof RequestBuilder\n * @type {number}\n * @private\n */\n\n /**\n * @memberof - the response headers of the arra\n * @type {Array}\n */\n\n /**\n * @memberof - Service method (POST,GET,DELETE etc..)\n * @type {string}\n */\n\n /**\n * @memberof - Service headers\n * @type {Map}\n */\n\n /**\n * @member - Service action\n * @type {string}\n */\n\n\n _createClass(RequestBuilder, [{\n key: 'getUrl',\n value: function getUrl(serviceUrl) {\n return serviceUrl + '/service/' + this.service + (this.action ? '/action/' + this.action : '');\n }\n\n /**\n * Executes service\n * @function doHttpRequest\n * @returns {Promise.} Service response as promise\n */\n\n }, {\n key: 'doHttpRequest',\n value: function doHttpRequest() {\n var _this = this;\n\n var promise = new Promise(function (resolve, reject) {\n _this._requestPromise = {\n resolve: resolve,\n reject: reject\n };\n });\n if (!this.url) {\n this._requestPromise.reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, _error2.default.Code.MALFORMED_DATA_URI, {\n url: this.url\n }));\n }\n this._createXHR();\n return promise;\n }\n }, {\n key: '_createXHR',\n value: function _createXHR() {\n var _this2 = this;\n\n var request = new XMLHttpRequest();\n request.onreadystatechange = function () {\n if (request.readyState === 4) {\n if (request.status === 200) {\n try {\n var response = JSON.parse(request.responseText);\n _this2.responseHeaders = _this2._getResponseHeaders(request);\n // the promise returns the response for backwards compatibility\n return _this2._requestPromise.resolve(response);\n } catch (error) {\n _this2._requestPromise.reject(_this2._createError(request, _error2.default.Code.BAD_SERVER_RESPONSE, {\n text: request.responseText\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 var requestTime = performance.now();\n request.ontimeout = function () {\n _this2._handleError(request, _error2.default.Code.TIMEOUT, {\n timeout: (performance.now() - requestTime) / 1000,\n statusText: request.statusText\n });\n };\n request.onerror = request.onabort = function () {\n _this2._handleError(request, _error2.default.Code.HTTP_ERROR, {\n text: request.responseText,\n statusText: request.statusText\n });\n };\n this.headers.forEach(function (value, key) {\n request.setRequestHeader(key, value);\n });\n request.send(this.params);\n }\n }, {\n key: '_getResponseHeaders',\n value: function _getResponseHeaders(request) {\n return request.getAllResponseHeaders().split('\\n').filter(function (header) {\n return header.toLowerCase().indexOf(KALTURA_HEADER_PREFIX) === 0;\n });\n }\n }, {\n key: '_handleError',\n value: function _handleError(request, code, data) {\n var 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 key: '_createError',\n value: function _createError(request, code, data) {\n Object.assign(data, {\n url: this.url,\n headers: this._getResponseHeaders(request),\n attempt: this._attemptCounter\n });\n return new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, code, data);\n }\n }]);\n\n return RequestBuilder;\n}();\n\nexports.default = RequestBuilder;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _logger = __webpack_require__(2);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _severity = __webpack_require__(26);\n\nvar _code = __webpack_require__(25);\n\nvar _category = __webpack_require__(24);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CLASS_NAME = 'Error';\n\n/**\n * @classdesc This is a description of the error class.\n */\n\nvar Error =\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\n/**\n * @enum {number}\n */\n\n/**\n * @enum {number}\n */\nfunction Error(severity, category, code) {\n var data = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n _classCallCheck(this, Error);\n\n this.severity = severity;\n this.category = category;\n this.code = code;\n this.data = data;\n if ((0, _logger.getLogLevel)(CLASS_NAME) !== _logger.LogLevel.OFF) {\n Error._logger.error('Category:' + category + ' | Code:' + code + ' |', data);\n }\n}\n/**\n * @enum {number}\n */\n;\n\nError.Severity = _severity.Severity;\nError.Category = _category.Category;\nError.Code = _code.Code;\nError._logger = (0, _logger2.default)(CLASS_NAME);\nexports.default = Error;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.setLogHandler = exports.setLogLevel = exports.getLogLevel = exports.LogLevel = undefined;\n\nvar _jsLogger = __webpack_require__(27);\n\nvar JsLogger = _interopRequireWildcard(_jsLogger);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar LogLevel = {\n DEBUG: JsLogger.DEBUG,\n INFO: JsLogger.INFO,\n TIME: JsLogger.TIME,\n WARN: JsLogger.WARN,\n ERROR: JsLogger.ERROR,\n OFF: JsLogger.OFF\n};\n\n\nJsLogger.useDefaults({ defaultLevel: JsLogger.ERROR });\n\n/**\n * sets the logger handler\n * @param {LogHandlerType} handler - the log level\n * @returns {void}\n */\nfunction setLogHandler(handler) {\n JsLogger.setHandler(function (messages, context) {\n return handler(messages, context);\n });\n}\n/**\n * get a logger\n * @param {?string} name - the logger name\n * @returns {Object} - the logger class\n */\nfunction getLogger(name) {\n if (!name) {\n return JsLogger;\n }\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) {\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, name) {\n getLogger(name).setLevel(level);\n}\n\nexports.default = getLogger;\nexports.LogLevel = LogLevel;\nexports.getLogLevel = getLogLevel;\nexports.setLogLevel = setLogLevel;\nexports.setLogHandler = setLogHandler;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ServiceResult =\n\n/**\n * @constructor\n * @param {Object} response - Service response\n */\n\n/**\n * @member - The service error\n * @type {ServiceError}\n */\n\n/**\n * @member - The service result data\n * @type {Object}\n */\nfunction ServiceResult(response) {\n _classCallCheck(this, ServiceResult);\n\n this.hasError = false;\n\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 * @member - Is service returned an error\n * @type {boolean}\n */\n;\n\nexports.default = ServiceResult;\n\nvar ServiceError =\n\n/**\n * @constructor\n * @param {string} code - The result code\n * @param {string} message - The result message\n */\n\n/**\n * @member - The error code\n * @type {string}\n */\nfunction ServiceError(code, message) {\n _classCallCheck(this, ServiceError);\n\n this.code = code;\n this.message = message;\n}\n/**\n * @member - The error message\n * @type {string}\n */\n;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _mediaSources = __webpack_require__(10);\n\nvar _mediaSources2 = _interopRequireDefault(_mediaSources);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MediaEntry = function () {\n\n /**\n * @constructor\n */\n\n\n /**\n * @member - entry id\n * @type {string}\n */\n\n /**\n * @member - entry name\n * @type {string}\n */\n\n /**\n * @member - entry sources\n * @type {MediaSources}\n */\n\n /**\n * @member - entry duration\n * @type {number}\n */\n\n /**\n * @member - entry type\n * @type {string}\n */\n\n /**\n * @member - entry metadata\n * @type {Object}\n */\n\n /**\n * @member - DVR status\n * @type {number}\n */\n\n /**\n * @member - media status\n * @type {number}\n */\n\n /**\n * @member - media poster\n * @type {string | Array}\n */\n\n\n /**\n * @member - assetReferenceType\n * @type {string }\n */\n function MediaEntry() {\n _classCallCheck(this, MediaEntry);\n\n this.metadata = new Map();\n this.sources = new _mediaSources2.default();\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\n\n _createClass(MediaEntry, [{\n key: 'toJSON',\n value: function toJSON() {\n return {\n id: this.id,\n name: this.name,\n sources: this.sources.toJSON(),\n duration: this.duration,\n dvrStatus: this.dvrStatus,\n metadata: this.metadata,\n type: this.type,\n poster: this.poster,\n assetReferenceType: this.assetReferenceType\n };\n }\n }]);\n\n return MediaEntry;\n}();\n\nMediaEntry.Type = {\n VOD: 'Vod',\n LIVE: 'Live',\n IMAGE: 'Image',\n AUDIO: 'Audio',\n UNKNOWN: 'Unknown'\n};\nexports.default = MediaEntry;\n\n/***/ }),\n/* 5 */,\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _baseServiceResult = __webpack_require__(3);\n\nvar _baseServiceResult2 = _interopRequireDefault(_baseServiceResult);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar KalturaAsset = function (_ServiceResult) {\n _inherits(KalturaAsset, _ServiceResult);\n\n /**\n * @constructor\n * @param {Object} response The response\n */\n\n /**\n * @member - The asset metas\n * @type {Array}\n */\n\n /**\n * @member - The asset name description\n * @type {string}\n */\n function KalturaAsset(response) {\n _classCallCheck(this, KalturaAsset);\n\n var _this = _possibleConstructorReturn(this, (KalturaAsset.__proto__ || Object.getPrototypeOf(KalturaAsset)).call(this, response));\n\n _this.name = '';\n _this.description = '';\n _this.tags = [];\n _this.metas = [];\n _this.pictures = [];\n\n if (!_this.hasError) {\n _this.id = response.id;\n _this.name = response.name;\n _this.description = response.description;\n _this.metas = _this._formatTagsMetas(response.metas);\n _this.tags = _this._formatTagsMetas(response.tags);\n _this.pictures = response.images;\n }\n return _this;\n }\n /**\n * @member - The asset images\n * @type {Array}\n */\n\n /**\n * @member - The asset tags\n * @type {Array}\n */\n\n /**\n * @member - The asset name\n * @type {string}\n */\n\n /**\n * @member - The asset id\n * @type {number}\n */\n\n\n _createClass(KalturaAsset, [{\n key: '_formatTagsMetas',\n value: function _formatTagsMetas(objectToParse) {\n var parsed = [];\n Object.keys(objectToParse).forEach(function (key) {\n if (objectToParse[key].objects) {\n var 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\n return KalturaAsset;\n}(_baseServiceResult2.default);\n\nKalturaAsset.Type = {\n MEDIA: 'media',\n RECORDING: 'recording',\n EPG: 'epg'\n};\nKalturaAsset.AssetReferenceType = {\n MEDIA: 'media',\n EPG_INTERNAL: 'epg_internal',\n EPG_EXTERNAL: 'epg_external',\n NPVR: 'nPVR'\n};\nexports.default = KalturaAsset;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Drm = function () {\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\n /**\n * @member - drm scheme\n * @type {string}\n */\n function Drm(licenseUrl, scheme, certificate) {\n _classCallCheck(this, Drm);\n\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\n\n /**\n * @member - drm certificate\n * @type {string}\n */\n\n /**\n * @member - license url\n * @type {string}\n */\n\n\n _createClass(Drm, [{\n key: \"toJSON\",\n value: function toJSON() {\n var response = {\n licenseUrl: this.licenseUrl,\n scheme: this.scheme\n };\n if (this.certificate) response.certificate = this.certificate;\n return response;\n }\n }]);\n\n return Drm;\n}();\n\nexports.default = Drm;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar MediaFormat = exports.MediaFormat = {\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\nvar SupportedStreamFormat = exports.SupportedStreamFormat = new Map([['mpegdash', MediaFormat.DASH], ['applehttp', MediaFormat.HLS], ['url', MediaFormat.MP4]]);\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) {\n var sourceFormat = SupportedStreamFormat.get(formatName);\n return !!sourceFormat && sourceFormat.name === MediaFormat.MP4.name;\n}\n\nexports.isProgressiveSource = isProgressiveSource;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _drm = __webpack_require__(7);\n\nvar _drm2 = _interopRequireDefault(_drm);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MediaSource = function () {\n function MediaSource() {\n _classCallCheck(this, MediaSource);\n }\n\n _createClass(MediaSource, [{\n key: 'toJSON',\n\n\n /**\n * Convert class to native js object.\n * @returns {ProviderMediaSourceObject} - The json class object.\n */\n\n /**\n * @member - media source height\n * @type {number}\n */\n\n /**\n * @member - media source bandwidth\n * @type {number}\n */\n\n /**\n * @member - media source mimetype\n * @type {string}\n */\n\n /**\n * @member - media source id\n * @type {string}\n */\n value: function toJSON() {\n var response = {\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(function (d) {\n if (Array.isArray(response.drmData)) {\n response.drmData.push(d.toJSON());\n }\n });\n }\n return response;\n }\n /**\n * @member - media source label\n * @type {string}\n */\n\n /**\n * @member - media source width\n * @type {number}\n */\n\n /**\n * @member - media source drm data\n * @type {Array}\n */\n\n /**\n * @member - media source url\n * @type {string}\n */\n\n }]);\n\n return MediaSource;\n}();\n\nexports.default = MediaSource;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _mediaSource = __webpack_require__(9);\n\nvar _mediaSource2 = _interopRequireDefault(_mediaSource);\n\nvar _mediaFormat = __webpack_require__(8);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MediaSources = function () {\n\n /**\n * @constructor\n */\n\n /**\n * Hls media sources container.\n * @type {Array}\n * @public\n */\n\n /**\n * Progressive download media sources container.\n * @type {Array}\n * @public\n */\n function MediaSources() {\n _classCallCheck(this, MediaSources);\n\n this.progressive = [];\n this.dash = [];\n this.hls = [];\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\n /**\n * Dash media sources container.\n * @type {Array}\n * @public\n */\n\n\n _createClass(MediaSources, [{\n key: 'map',\n value: function map(source, mediaFormat) {\n if (mediaFormat) {\n switch (mediaFormat.name) {\n case _mediaFormat.MediaFormat.MP4.name:\n this.progressive.push(source);\n break;\n case _mediaFormat.MediaFormat.DASH.name:\n this.dash.push(source);\n break;\n case _mediaFormat.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\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var response = {\n progressive: [],\n dash: [],\n hls: []\n };\n this.progressive.forEach(function (p) {\n return response.progressive.push(p.toJSON());\n });\n this.hls.forEach(function (h) {\n return response.hls.push(h.toJSON());\n });\n this.dash.forEach(function (d) {\n return response.dash.push(d.toJSON());\n });\n return response;\n }\n }]);\n\n return MediaSources;\n}();\n\nexports.default = MediaSources;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _multiRequestBuilder = __webpack_require__(12);\n\nvar _multiRequestBuilder2 = _interopRequireDefault(_multiRequestBuilder);\n\nvar _error = __webpack_require__(1);\n\nvar _error2 = _interopRequireDefault(_error);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DataLoaderManager = function () {\n /**\n * @member - Loaders response map index\n * @type {Map>}\n * @private\n */\n function DataLoaderManager(networkRetryConfig) {\n _classCallCheck(this, DataLoaderManager);\n\n this._loadersResponseMap = new Map();\n this._loaders = new Map();\n\n this._networkRetryConfig = networkRetryConfig;\n }\n\n /**\n * Add loader too execution loaders map\n * @function\n * @param {Function} loader Loader to add\n * @param {Object} params Loader params\n * @returns {void}\n */\n\n /**\n * @member - Loaders to execute\n * @type {Map}\n * @private\n */\n\n /**\n * @member - Loaders multi request\n * @type {MultiRequestBuilder}\n * @protected\n */\n\n /**\n * @member - Loaders multi response\n * @type {MultiRequestResult}\n * @private\n */\n\n\n _createClass(DataLoaderManager, [{\n key: 'add',\n value: function add(loader, params) {\n var _this = this;\n\n var 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 var startIndex = this._multiRequest.requests.length;\n // Get the requests\n var requests = execution_loader.requests;\n this._multiRequest.retryConfig = this._networkRetryConfig;\n // Add requests to muktiRequest queue\n requests.forEach(function (request) {\n _this._multiRequest.add(request);\n });\n // Create range array of current execution_loader requests\n var executionLoaderResponseMap = Array.from(new Array(requests.length), function (val, index) {\n return index + startIndex;\n });\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 * @function\n * @returns {Promise} Promise\n */\n\n }, {\n key: 'fetchData',\n value: function fetchData() {\n var _this2 = this;\n\n return new Promise(function (resolve, reject) {\n _this2._multiRequest.execute().then(function (data) {\n _this2._multiResponse = data.response;\n var preparedData = _this2.prepareData(data.response);\n if (preparedData.success) {\n resolve(_this2._loaders);\n } else {\n reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, _error2.default.Code.API_RESPONSE_MISMATCH, {\n headers: data.headers\n }));\n }\n }, function (err) {\n reject(err);\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\n }, {\n key: 'prepareData',\n value: function prepareData(response) {\n var _this3 = this;\n\n this._loaders.forEach(function (loader, name) {\n var loaderDataIndexes = _this3._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\n return DataLoaderManager;\n}();\n\nexports.default = DataLoaderManager;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MultiRequestResult = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _logger = __webpack_require__(2);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _baseServiceResult = __webpack_require__(3);\n\nvar _baseServiceResult2 = _interopRequireDefault(_baseServiceResult);\n\nvar _error = __webpack_require__(1);\n\nvar _error2 = _interopRequireDefault(_error);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MultiRequestBuilder = function (_RequestBuilder) {\n _inherits(MultiRequestBuilder, _RequestBuilder);\n\n function MultiRequestBuilder() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, MultiRequestBuilder);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = MultiRequestBuilder.__proto__ || Object.getPrototypeOf(MultiRequestBuilder)).call.apply(_ref, [this].concat(args))), _this), _this.requests = [], _temp), _possibleConstructorReturn(_this, _ret);\n }\n /**\n * @memberof - MultiRequestBuilder\n * @type {Array}\n */\n\n\n _createClass(MultiRequestBuilder, [{\n key: 'add',\n\n /**\n * Adds request to requests array\n * @function add\n * @param {RequestBuilder} request The request\n * @returns {MultiRequestBuilder} The multiRequest\n */\n value: function add(request) {\n this.requests.push(request);\n var requestParams = {};\n var serviceDef = { service: request.service, action: request.action };\n Object.assign(requestParams, _defineProperty({}, 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 * @returns {Promise} The multirequest execution promise\n */\n\n }, {\n key: 'execute',\n value: function execute() {\n var _this2 = this;\n\n return new Promise(function (resolve, reject) {\n try {\n _this2.params = JSON.stringify(_this2.params);\n } catch (err) {\n MultiRequestBuilder._logger.error('' + err.message);\n reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.PROVIDER, _error2.default.Code.FAILED_PARSING_REQUEST, {\n error: err,\n params: _this2.params\n }));\n }\n _this2.doHttpRequest().then(function (data) {\n var multiRequestResult = new MultiRequestResult(data);\n if (multiRequestResult.success) {\n resolve({\n headers: _this2.responseHeaders,\n response: multiRequestResult\n });\n } else {\n reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, _error2.default.Code.MULTIREQUEST_API_ERROR, {\n url: _this2.url,\n headers: _this2.responseHeaders,\n results: multiRequestResult.results\n }));\n }\n }, function (err) {\n reject(err);\n });\n });\n }\n }]);\n\n return MultiRequestBuilder;\n}(_requestBuilder2.default);\n\nMultiRequestBuilder._logger = (0, _logger2.default)('MultiRequestBuilder');\nexports.default = MultiRequestBuilder;\n\nvar MultiRequestResult =\n/**\n * @constructor\n * @param {Object} response data\n */\nexports.MultiRequestResult = function MultiRequestResult(response) {\n var _this3 = this;\n\n _classCallCheck(this, MultiRequestResult);\n\n this.results = [];\n\n this.success = true;\n var responseArr = response.result ? response.result : response;\n responseArr.forEach(function (result) {\n var serviceResult = new _baseServiceResult2.default(result);\n _this3.results.push(serviceResult);\n if (serviceResult.hasError) {\n MultiRequestResult._logger.error('Service returned an error with error code: ' + serviceResult.error.code + ' and message: ' + serviceResult.error.message + '.');\n _this3.success = false;\n return;\n }\n });\n}\n/**\n * @memberof MultiRequestResult\n * @type {Object}\n */\n\n/**\n * @memberof MultiRequestResult\n * @type {boolean}\n */\n;\n\nMultiRequestResult._logger = (0, _logger2.default)('MultiRequestResult');\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KalturaAccessControlMessage =\n\n/**\n * @constructor\n * @param {Object} data The json response\n */\n\n/**\n * @member - The access control message\n * @type {string}\n */\nfunction KalturaAccessControlMessage(data) {\n _classCallCheck(this, KalturaAccessControlMessage);\n\n this.message = data.message;\n this.code = data.code;\n}\n/**\n * @member - The access control message code\n * @@type {string}\n */\n;\n\nexports.default = KalturaAccessControlMessage;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KalturaDrmPlaybackPluginData =\n\n/**\n * @constructor\n * @param {Object} drm The json response\n */\n\n\n/**\n * @member - The drm scheme\n * @type {string}\n */\n\n\n/**\n * @member - The license URL\n * @type {string}\n */\n\n\n/**\n * @member - The drm certificate\n * @type {?string}\n */\nfunction KalturaDrmPlaybackPluginData(drm) {\n _classCallCheck(this, KalturaDrmPlaybackPluginData);\n\n this.scheme = drm.scheme;\n this.licenseURL = drm.licenseURL;\n this.certificate = drm.certificate;\n};\n\nKalturaDrmPlaybackPluginData.Scheme = {\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};\nexports.default = KalturaDrmPlaybackPluginData;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.OTTConfiguration = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _clone = __webpack_require__(23);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar defaultConfig = {\n serviceParams: {\n apiVersion: '5.2.6'\n }\n};\n\nvar OTTConfiguration = function () {\n function OTTConfiguration() {\n _classCallCheck(this, OTTConfiguration);\n }\n\n _createClass(OTTConfiguration, null, [{\n key: 'set',\n value: function set(clientConfig) {\n if (clientConfig) {\n Object.assign(defaultConfig, clientConfig);\n }\n }\n }, {\n key: 'get',\n value: function get() {\n return (0, _clone.clone)(defaultConfig);\n }\n }]);\n\n return OTTConfiguration;\n}();\n\nexports.default = OTTConfiguration;\nexports.OTTConfiguration = OTTConfiguration;\n\n/***/ }),\n/* 16 */,\n/* 17 */,\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _baseServiceResult = __webpack_require__(3);\n\nvar _baseServiceResult2 = _interopRequireDefault(_baseServiceResult);\n\nvar _kalturaAccessControlMessage = __webpack_require__(13);\n\nvar _kalturaAccessControlMessage2 = _interopRequireDefault(_kalturaAccessControlMessage);\n\nvar _kalturaRuleAction = __webpack_require__(30);\n\nvar _kalturaRuleAction2 = _interopRequireDefault(_kalturaRuleAction);\n\nvar _kalturaPlaybackSource = __webpack_require__(29);\n\nvar _kalturaPlaybackSource2 = _interopRequireDefault(_kalturaPlaybackSource);\n\nvar _kalturaBumperPlaybackPluginData = __webpack_require__(28);\n\nvar _kalturaBumperPlaybackPluginData2 = _interopRequireDefault(_kalturaBumperPlaybackPluginData);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar KalturaPlaybackContext = function (_ServiceResult) {\n _inherits(KalturaPlaybackContext, _ServiceResult);\n\n /**\n * @constructor\n * @param {Object} response The response\n */\n\n /**\n * @member - Array of access control massages\n * @type {Array}\n */\n\n /**\n * @member - The playback sources\n * @type {Array}\n */\n function KalturaPlaybackContext(response) {\n _classCallCheck(this, KalturaPlaybackContext);\n\n var _this = _possibleConstructorReturn(this, (KalturaPlaybackContext.__proto__ || Object.getPrototypeOf(KalturaPlaybackContext)).call(this, response));\n\n _this.sources = [];\n _this.actions = [];\n _this.messages = [];\n _this.plugins = [];\n\n if (!_this.hasError) {\n var messages = response.messages;\n if (messages) {\n messages.map(function (message) {\n return _this.messages.push(new _kalturaAccessControlMessage2.default(message));\n });\n }\n var actions = response.actions;\n if (actions) {\n actions.map(function (action) {\n return _this.actions.push(new _kalturaRuleAction2.default(action));\n });\n }\n var sources = response.sources;\n if (sources) {\n sources.map(function (source) {\n return _this.sources.push(new _kalturaPlaybackSource2.default(source));\n });\n }\n var plugins = response.plugins;\n if (plugins) {\n plugins.map(function (plugin) {\n return _this.plugins.push(new _kalturaBumperPlaybackPluginData2.default(plugin));\n });\n }\n }\n return _this;\n }\n /**\n * @member - Array of bumper plugins\n * @type {Array}\n */\n\n /**\n * @member - Array of actions as received from the rules that invalidated\n * @type {Array}\n */\n\n\n _createClass(KalturaPlaybackContext, [{\n key: 'hasBlockAction',\n value: function hasBlockAction() {\n return this.getBlockAction() !== undefined;\n }\n }, {\n key: 'getBlockAction',\n value: function getBlockAction() {\n return this.actions.find(function (action) {\n return action.type === _kalturaRuleAction2.default.Type.BLOCK;\n });\n }\n }, {\n key: 'getErrorMessages',\n value: function getErrorMessages() {\n return this.messages;\n }\n }]);\n\n return KalturaPlaybackContext;\n}(_baseServiceResult2.default);\n\nKalturaPlaybackContext.Type = {\n TRAILER: 'TRAILER',\n CATCHUP: 'CATCHUP',\n START_OVER: 'START_OVER',\n PLAYBACK: 'PLAYBACK'\n};\nexports.default = KalturaPlaybackContext;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _mediaEntry = __webpack_require__(4);\n\nvar _mediaEntry2 = _interopRequireDefault(_mediaEntry);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar EntryList = function EntryList() {\n _classCallCheck(this, EntryList);\n\n this.items = [];\n}\n/**\n * @member - entry list items\n * @type {Array}\n */\n;\n\nexports.default = EntryList;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _logger = __webpack_require__(2);\n\nvar _dataLoaderManager = __webpack_require__(11);\n\nvar _dataLoaderManager2 = _interopRequireDefault(_dataLoaderManager);\n\nvar _error = __webpack_require__(1);\n\nvar _error2 = _interopRequireDefault(_error);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar BaseProvider = function () {\n _createClass(BaseProvider, [{\n key: 'partnerId',\n get: function get() {\n return this._partnerId;\n }\n }, {\n key: 'widgetId',\n get: function get() {\n return this._widgetId || this.defaultWidgetId;\n }\n }, {\n key: 'defaultWidgetId',\n get: function get() {\n return '_' + this._partnerId;\n }\n }, {\n key: 'uiConfId',\n get: function get() {\n return this._uiConfId;\n }\n }, {\n key: 'ks',\n get: function get() {\n return this._ks;\n },\n set: function set(value) {\n this._ks = value;\n }\n }, {\n key: 'playerVersion',\n get: function get() {\n return this._playerVersion;\n }\n }, {\n key: 'isAnonymous',\n get: function get() {\n return this._isAnonymous;\n }\n }]);\n\n function BaseProvider(options, playerVersion) {\n _classCallCheck(this, BaseProvider);\n\n this._networkRetryConfig = {\n async: true,\n timeout: 0,\n maxAttempts: 4\n };\n\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 if (options.log && options.log.level && this.LogLevel[options.log.level]) {\n (0, _logger.setLogLevel)(this.LogLevel[options.log.level]);\n }\n if (options.log && typeof options.log.handler === 'function') {\n (0, _logger.setLogHandler)(options.log.handler);\n }\n }\n\n // eslint-disable-next-line no-unused-vars\n\n\n _createClass(BaseProvider, [{\n key: 'getMediaConfig',\n value: function getMediaConfig(mediaInfo) {\n return Promise.reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.PROVIDER, _error2.default.Code.METHOD_NOT_IMPLEMENTED, {\n message: 'getMediaConfig method must be implement by the derived class'\n }));\n }\n\n // eslint-disable-next-line no-unused-vars\n\n }, {\n key: 'getPlaylistConfig',\n value: function getPlaylistConfig(playlistInfo) {\n return Promise.reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.PROVIDER, _error2.default.Code.METHOD_NOT_IMPLEMENTED, {\n message: 'The provider does not support loading playlist by id'\n }));\n }\n\n // eslint-disable-next-line no-unused-vars\n\n }, {\n key: 'getEntryListConfig',\n value: function getEntryListConfig(entryListInfo) {\n return Promise.reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.PROVIDER, _error2.default.Code.METHOD_NOT_IMPLEMENTED, {\n message: 'The provider does not support loading entry list'\n }));\n }\n }, {\n key: '_verifyHasSources',\n value: function _verifyHasSources(sources) {\n if (sources.hls.concat(sources.dash, sources.progressive).length === 0) {\n throw new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.SERVICE, _error2.default.Code.MISSING_PLAY_SOURCE, {\n action: '',\n messages: 'No play source for entry id: ' + sources.id\n });\n }\n }\n }, {\n key: 'getLogLevel',\n value: function getLogLevel(name) {\n return (0, _logger.getLogLevel)(name);\n }\n }, {\n key: 'setLogLevel',\n value: function setLogLevel(level, name) {\n (0, _logger.setLogLevel)(level, name);\n }\n }, {\n key: 'LogLevel',\n get: function get() {\n return _logger.LogLevel;\n }\n }]);\n\n return BaseProvider;\n}();\n\nexports.default = BaseProvider;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _multiRequestBuilder = __webpack_require__(12);\n\nvar _multiRequestBuilder2 = _interopRequireDefault(_multiRequestBuilder);\n\nvar _config = __webpack_require__(15);\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SERVICE_NAME = 'multirequest';\n\nvar OTTService = function () {\n function OTTService() {\n _classCallCheck(this, OTTService);\n }\n\n _createClass(OTTService, null, [{\n key: 'getMultiRequest',\n\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 value: function getMultiRequest(ks, partnerId) {\n var config = _config2.default.get();\n var ottParams = config.serviceParams;\n if (ks) {\n Object.assign(ottParams, { ks: ks });\n }\n if (partnerId) {\n Object.assign(ottParams, { partnerId: partnerId });\n }\n var headers = new Map();\n headers.set('Content-Type', 'application/json');\n var multiReq = new _multiRequestBuilder2.default(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\n return OTTService;\n}();\n\nexports.default = OTTService;\n\n/***/ }),\n/* 22 */,\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar clone = function clone(data) {\n var node = void 0;\n if (Array.isArray(data)) {\n node = data.length > 0 ? data.slice(0) : [];\n node.forEach(function (e, i) {\n if ((typeof e === 'undefined' ? 'undefined' : _typeof(e)) === 'object' && e !== {} || Array.isArray(e) && e.length > 0) {\n node[i] = clone(e);\n }\n });\n } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') {\n node = Object.assign({}, data);\n Object.keys(node).forEach(function (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\nexports.clone = clone;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n\nvar Category = {\n /** Errors from the network stack. */\n NETWORK: 1,\n SERVICE: 2,\n PROVIDER: 3\n};\nexports.Category = Category;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n\nvar Code = {\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\nexports.Code = Code;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n\nvar Severity = {\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\nexports.Severity = Severity;\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.4.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.DEBUG = defineLogLevel(1, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(2, 'INFO');\r\n\tLogger.TIME = defineLogLevel(3, 'TIME');\r\n\tLogger.WARN = defineLogLevel(4, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (true) {\r\n\t\t!(__WEBPACK_AMD_DEFINE_FACTORY__ = (Logger),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KalturaBumpersPlaybackPluginData =\n\n/**\n * @constructor\n * @param {Object} data - The response\n */\n\n\n/**\n * @member - The streamer type\n * @type {string}\n */\n\n/**\n * @member - The url\n * @type {string}\n */\nfunction KalturaBumpersPlaybackPluginData(data) {\n _classCallCheck(this, KalturaBumpersPlaybackPluginData);\n\n this.streamertype = data.streamertype;\n this.url = data.url;\n};\n\nKalturaBumpersPlaybackPluginData.StreamerType = {\n HLS: 'hls',\n DASH: 'dash',\n PROGRESSIVE: 'progressive'\n};\nexports.default = KalturaBumpersPlaybackPluginData;\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _kalturaDrmPlaybackPluginData = __webpack_require__(14);\n\nvar _kalturaDrmPlaybackPluginData2 = _interopRequireDefault(_kalturaDrmPlaybackPluginData);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KalturaPlaybackSource = function () {\n\n /**\n * @constructor\n * @param {Object} source The response\n */\n function KalturaPlaybackSource(source) {\n var _this = this;\n\n _classCallCheck(this, KalturaPlaybackSource);\n\n this.drm = [];\n\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(function (drm) {\n return _this.drm.push(new _kalturaDrmPlaybackPluginData2.default(drm));\n });\n }\n }\n\n /**\n * Checks if source has DRM data\n * @function hasDrmData\n * @returns {boolean} Is source has DRM\n */\n\n\n _createClass(KalturaPlaybackSource, [{\n key: 'hasDrmData',\n value: function hasDrmData() {\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\n }, {\n key: 'getProtocol',\n value: function getProtocol(protocol) {\n var returnValue = '';\n if (this.protocols && this.protocols.length > 0) {\n var protocolsArr = this.protocols.split(',');\n protocolsArr.forEach(function (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\n return KalturaPlaybackSource;\n}();\n\nexports.default = KalturaPlaybackSource;\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KalturaRuleAction =\n\n/**\n * @constructor\n * @param {Object} data - The response\n */\n\n\n/**\n * @member - The type of the action\n * @type {string|number}\n */\nfunction KalturaRuleAction(data) {\n _classCallCheck(this, KalturaRuleAction);\n\n this.type = data.type;\n};\n\nKalturaRuleAction.Type = {\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};\nexports.default = KalturaRuleAction;\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _ottService = __webpack_require__(21);\n\nvar _ottService2 = _interopRequireDefault(_ottService);\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SERVICE_NAME = 'asset';\n\nvar OTTAssetService = function (_OTTService) {\n _inherits(OTTAssetService, _OTTService);\n\n function OTTAssetService() {\n _classCallCheck(this, OTTAssetService);\n\n return _possibleConstructorReturn(this, (OTTAssetService.__proto__ || Object.getPrototypeOf(OTTAssetService)).apply(this, arguments));\n }\n\n _createClass(OTTAssetService, null, [{\n key: 'getPlaybackContext',\n\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 value: function getPlaybackContext(serviceUrl, ks, assetId, type, playbackContextOptions) {\n var headers = new Map();\n headers.set('Content-Type', 'application/json');\n var request = new _requestBuilder2.default(headers);\n request.service = SERVICE_NAME;\n request.action = 'getPlaybackContext';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n var contextDataParams = { objectType: 'KalturaPlaybackContextOptions' };\n Object.assign(contextDataParams, playbackContextOptions);\n request.params = { assetId: assetId, assetType: type, contextDataParams: contextDataParams, ks: ks };\n return request;\n }\n }, {\n key: 'get',\n value: function get(serviceUrl, ks, assetId, assetReferenceType) {\n var headers = new Map();\n headers.set('Content-Type', 'application/json');\n var request = new _requestBuilder2.default(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\n return OTTAssetService;\n}(_ottService2.default);\n\nexports.default = OTTAssetService;\n\n/***/ }),\n/* 32 */,\n/* 33 */,\n/* 34 */,\n/* 35 */,\n/* 36 */,\n/* 37 */,\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _baseProvider = __webpack_require__(20);\n\nvar _baseProvider2 = _interopRequireDefault(_baseProvider);\n\nvar _logger = __webpack_require__(2);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _config = __webpack_require__(15);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _dataLoaderManager = __webpack_require__(45);\n\nvar _dataLoaderManager2 = _interopRequireDefault(_dataLoaderManager);\n\nvar _sessionLoader = __webpack_require__(46);\n\nvar _sessionLoader2 = _interopRequireDefault(_sessionLoader);\n\nvar _assetLoader = __webpack_require__(44);\n\nvar _assetLoader2 = _interopRequireDefault(_assetLoader);\n\nvar _assetListLoader = __webpack_require__(43);\n\nvar _assetListLoader2 = _interopRequireDefault(_assetListLoader);\n\nvar _providerParser = __webpack_require__(47);\n\nvar _providerParser2 = _interopRequireDefault(_providerParser);\n\nvar _kalturaAsset = __webpack_require__(6);\n\nvar _kalturaAsset2 = _interopRequireDefault(_kalturaAsset);\n\nvar _kalturaPlaybackContext = __webpack_require__(18);\n\nvar _kalturaPlaybackContext2 = _interopRequireDefault(_kalturaPlaybackContext);\n\nvar _mediaEntry = __webpack_require__(4);\n\nvar _mediaEntry2 = _interopRequireDefault(_mediaEntry);\n\nvar _error = __webpack_require__(1);\n\nvar _error2 = _interopRequireDefault(_error);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar OTTProvider = function (_BaseProvider) {\n _inherits(OTTProvider, _BaseProvider);\n\n /**\n * @constructor\n * @param {ProviderOptionsObject} options - provider options\n * @param {string} playerVersion - player version\n */\n function OTTProvider(options, playerVersion) {\n _classCallCheck(this, OTTProvider);\n\n var _this = _possibleConstructorReturn(this, (OTTProvider.__proto__ || Object.getPrototypeOf(OTTProvider)).call(this, options, playerVersion));\n\n _this._logger = (0, _logger2.default)('OTTProvider');\n _config2.default.set(options.env);\n _this._networkRetryConfig = Object.assign(_this._networkRetryConfig, options.networkRetryParameters);\n return _this;\n }\n\n /**\n * Gets the backend media config.\n * @param {OTTProviderMediaInfoObject} mediaInfo - ott media info\n * @returns {Promise} - The provider media config\n */\n\n\n _createClass(OTTProvider, [{\n key: 'getMediaConfig',\n value: function getMediaConfig(mediaInfo) {\n var _this2 = this;\n\n if (mediaInfo.ks) {\n this.ks = mediaInfo.ks;\n this._isAnonymous = false;\n }\n this._dataLoader = new _dataLoaderManager2.default(this.partnerId, this.ks, this._networkRetryConfig);\n return new Promise(function (resolve, reject) {\n var entryId = mediaInfo.entryId;\n if (entryId) {\n var ks = _this2.ks;\n if (!ks) {\n ks = '{1:result:ks}';\n _this2._dataLoader.add(_sessionLoader2.default, { partnerId: _this2.partnerId });\n }\n var contextType = mediaInfo.contextType || _kalturaPlaybackContext2.default.Type.PLAYBACK;\n var mediaType = mediaInfo.mediaType || _kalturaAsset2.default.Type.MEDIA;\n var assetReferenceType = mediaInfo.assetReferenceType || _kalturaAsset2.default.AssetReferenceType.MEDIA;\n var playbackContext = {\n mediaProtocol: mediaInfo.protocol,\n assetFileIds: mediaInfo.fileIds,\n context: contextType\n };\n _this2._dataLoader.add(_assetLoader2.default, {\n entryId: entryId,\n ks: ks,\n type: mediaType,\n playbackContext: playbackContext,\n assetReferenceType: assetReferenceType\n });\n var requestData = {\n contextType: contextType,\n mediaType: mediaType,\n formats: mediaInfo.formats || []\n };\n return _this2._dataLoader.fetchData().then(function (response) {\n try {\n resolve(_this2._parseDataFromResponse(response, requestData));\n } catch (err) {\n reject(err);\n }\n }, function (err) {\n reject(err);\n });\n } else {\n reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.PROVIDER, _error2.default.Code.MISSING_MANDATORY_PARAMS, { message: 'missing entry id' }));\n }\n });\n }\n }, {\n key: '_parseDataFromResponse',\n value: function _parseDataFromResponse(data, requestData) {\n this._logger.debug('Data parsing started');\n var mediaConfig = {\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(_sessionLoader2.default.id)) {\n var sessionLoader = data.get(_sessionLoader2.default.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(_assetLoader2.default.id)) {\n var assetLoader = data.get(_assetLoader2.default.id);\n if (assetLoader && assetLoader.response && Object.keys(assetLoader.response).length) {\n var response = assetLoader.response;\n if (_providerParser2.default.hasBlockAction(response)) {\n throw new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.SERVICE, _error2.default.Code.BLOCK_ACTION, {\n action: _providerParser2.default.getBlockAction(response),\n messages: _providerParser2.default.getErrorMessages(response)\n });\n }\n var mediaEntry = _providerParser2.default.getMediaEntry(response, requestData);\n Object.assign(mediaConfig.sources, this._getSourcesObject(mediaEntry));\n this._verifyHasSources(mediaConfig.sources);\n var bumper = _providerParser2.default.getBumper(response);\n if (bumper) {\n Object.assign(mediaConfig.plugins, { bumper: bumper });\n }\n }\n }\n }\n this._logger.debug('Data parsing finished', mediaConfig);\n return mediaConfig;\n }\n\n /**\n * Gets playlist config from entry list.\n * @param {ProviderEntryListObject} entryListInfo - ott entry list info\n * @returns {Promise} - The provider playlist config\n */\n\n }, {\n key: 'getEntryListConfig',\n value: function getEntryListConfig(entryListInfo) {\n var _this3 = this;\n\n if (entryListInfo.ks) {\n this.ks = entryListInfo.ks;\n this._isAnonymous = false;\n }\n this._dataLoader = new _dataLoaderManager2.default(this.partnerId, this.ks, this._networkRetryConfig);\n return new Promise(function (resolve, reject) {\n var entries = entryListInfo.entries;\n if (entries && entries.length) {\n var ks = _this3.ks;\n if (!ks) {\n ks = '{1:result:ks}';\n _this3._dataLoader.add(_sessionLoader2.default, { partnerId: _this3.partnerId });\n }\n _this3._dataLoader.add(_assetListLoader2.default, { entries: entries, ks: ks });\n _this3._dataLoader.fetchData().then(function (response) {\n resolve(_this3._parseEntryListDataFromResponse(response, entries));\n }, function (err) {\n reject(err);\n });\n } else {\n reject({ success: false, data: 'Missing mandatory parameter' });\n }\n });\n }\n }, {\n key: '_parseEntryListDataFromResponse',\n value: function _parseEntryListDataFromResponse(data, requestEntries) {\n var _this4 = this;\n\n this._logger.debug('Data parsing started');\n var playlistConfig = {\n id: '',\n metadata: {\n name: '',\n description: ''\n },\n poster: '',\n items: []\n };\n if (data && data.has(_assetListLoader2.default.id)) {\n var playlistLoader = data.get(_assetListLoader2.default.id);\n if (playlistLoader && playlistLoader.response) {\n var entryList = _providerParser2.default.getEntryList(playlistLoader.response, requestEntries);\n entryList.items.forEach(function (i) {\n return playlistConfig.items.push({ sources: _this4._getSourcesObject(i) });\n });\n }\n }\n this._logger.debug('Data parsing finished', playlistConfig);\n return playlistConfig;\n }\n }, {\n key: '_getDefaultSourcesObject',\n value: function _getDefaultSourcesObject() {\n return {\n hls: [],\n dash: [],\n progressive: [],\n id: '',\n duration: 0,\n type: _mediaEntry2.default.Type.UNKNOWN,\n poster: '',\n dvr: false,\n vr: null,\n metadata: {\n name: '',\n description: '',\n tags: ''\n }\n };\n }\n }, {\n key: '_getSourcesObject',\n value: function _getSourcesObject(mediaEntry) {\n var sourcesObject = this._getDefaultSourcesObject();\n var 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 (mediaEntry.metadata && mediaEntry.metadata.metas && typeof mediaEntry.metadata.metas.tags === 'string' && mediaEntry.metadata.metas.tags.indexOf('360') > -1) {\n sourcesObject.vr = {};\n }\n Object.assign(sourcesObject.metadata, mediaEntry.metadata);\n return sourcesObject;\n }\n }]);\n\n return OTTProvider;\n}(_baseProvider2.default);\n\nexports.default = OTTProvider;\n\n/***/ }),\n/* 39 */,\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Bumper =\n\n/**\n * @constructor\n * @param {Object} data - The bumper response\n */\nfunction Bumper(data) {\n _classCallCheck(this, Bumper);\n\n this.url = data.url;\n}\n/**\n * @member - bumper url\n * @type {string}\n */\n;\n\nexports.default = Bumper;\n\n/***/ }),\n/* 41 */,\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.VERSION = exports.NAME = exports.MediaType = exports.ContextType = exports.Provider = undefined;\n\nvar _provider = __webpack_require__(38);\n\nvar _provider2 = _interopRequireDefault(_provider);\n\nvar _kalturaPlaybackContext = __webpack_require__(18);\n\nvar _kalturaPlaybackContext2 = _interopRequireDefault(_kalturaPlaybackContext);\n\nvar _kalturaAsset = __webpack_require__(6);\n\nvar _kalturaAsset2 = _interopRequireDefault(_kalturaAsset);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar NAME = \"playkit-js-providers\" + '-ott';\n\nvar VERSION = \"2.21.1\";\n\nvar ContextType = _kalturaPlaybackContext2.default.Type;\nvar MediaType = _kalturaAsset2.default.Type;\n\nexports.Provider = _provider2.default;\nexports.ContextType = ContextType;\nexports.MediaType = MediaType;\nexports.NAME = NAME;\nexports.VERSION = VERSION;\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _config = __webpack_require__(15);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _assetService = __webpack_require__(31);\n\nvar _assetService2 = _interopRequireDefault(_assetService);\n\nvar _kalturaAsset = __webpack_require__(6);\n\nvar _kalturaAsset2 = _interopRequireDefault(_kalturaAsset);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar OTTAssetListLoader = function () {\n _createClass(OTTAssetListLoader, null, [{\n key: 'id',\n get: function get() {\n return 'asset_list';\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n */\n\n }]);\n\n function OTTAssetListLoader(params) {\n _classCallCheck(this, OTTAssetListLoader);\n\n this._response = { playlistItems: { entries: [] } };\n\n this.requests = this.buildRequests(params);\n this._entries = params.entries;\n }\n\n _createClass(OTTAssetListLoader, [{\n key: 'buildRequests',\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 value: function buildRequests(params) {\n var config = _config2.default.get();\n var requests = [];\n params.entries.forEach(function (entry) {\n var assetReferenceType = entry.assetReferenceType || _kalturaAsset2.default.AssetReferenceType.MEDIA;\n requests.push(_assetService2.default.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\n }, {\n key: 'isValid',\n value: function isValid() {\n return !!(this._entries && this._entries.length);\n }\n }, {\n key: 'requests',\n set: function set(requests) {\n this._requests = requests;\n },\n get: function get() {\n return this._requests;\n }\n }, {\n key: 'response',\n set: function set(response) {\n var _this = this;\n\n response.forEach(function (item) {\n _this._response.playlistItems.entries.push({ mediaDataResult: new _kalturaAsset2.default(item.data) });\n });\n },\n get: function get() {\n return this._response;\n }\n }]);\n\n return OTTAssetListLoader;\n}();\n\nexports.default = OTTAssetListLoader;\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _assetService = __webpack_require__(31);\n\nvar _assetService2 = _interopRequireDefault(_assetService);\n\nvar _config = __webpack_require__(15);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _kalturaPlaybackContext = __webpack_require__(18);\n\nvar _kalturaPlaybackContext2 = _interopRequireDefault(_kalturaPlaybackContext);\n\nvar _kalturaAsset = __webpack_require__(6);\n\nvar _kalturaAsset2 = _interopRequireDefault(_kalturaAsset);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar OTTAssetLoader = function () {\n _createClass(OTTAssetLoader, null, [{\n key: 'id',\n get: function get() {\n return 'asset';\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n */\n\n }]);\n\n function OTTAssetLoader(params) {\n _classCallCheck(this, OTTAssetLoader);\n\n this._response = {};\n\n this.requests = this.buildRequests(params);\n this._entryId = params.entryId;\n }\n\n _createClass(OTTAssetLoader, [{\n key: 'buildRequests',\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 value: function buildRequests(params) {\n var config = _config2.default.get();\n var requests = [];\n requests.push(_assetService2.default.get(config.serviceUrl, params.ks, params.entryId, params.assetReferenceType));\n requests.push(_assetService2.default.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\n }, {\n key: 'isValid',\n value: function isValid() {\n return !!this._entryId;\n }\n }, {\n key: 'requests',\n set: function set(requests) {\n this._requests = requests;\n },\n get: function get() {\n return this._requests;\n }\n }, {\n key: 'response',\n set: function set(response) {\n this._response.mediaDataResult = new _kalturaAsset2.default(response[0].data);\n this._response.playBackContextResult = new _kalturaPlaybackContext2.default(response[1].data);\n },\n get: function get() {\n return this._response;\n }\n }]);\n\n return OTTAssetLoader;\n}();\n\nexports.default = OTTAssetLoader;\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _dataLoaderManager = __webpack_require__(11);\n\nvar _dataLoaderManager2 = _interopRequireDefault(_dataLoaderManager);\n\nvar _ottService = __webpack_require__(21);\n\nvar _ottService2 = _interopRequireDefault(_ottService);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\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 */\nvar OTTDataLoaderManager = function (_DataLoaderManager) {\n _inherits(OTTDataLoaderManager, _DataLoaderManager);\n\n function OTTDataLoaderManager(partnerId) {\n var ks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var networkRetryConfig = arguments[2];\n\n _classCallCheck(this, OTTDataLoaderManager);\n\n var _this = _possibleConstructorReturn(this, (OTTDataLoaderManager.__proto__ || Object.getPrototypeOf(OTTDataLoaderManager)).call(this, networkRetryConfig));\n\n _this._multiRequest = _ottService2.default.getMultiRequest(ks, partnerId);\n return _this;\n }\n\n return OTTDataLoaderManager;\n}(_dataLoaderManager2.default);\n\nexports.default = OTTDataLoaderManager;\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _userService = __webpack_require__(48);\n\nvar _userService2 = _interopRequireDefault(_userService);\n\nvar _config = __webpack_require__(15);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar OTTSessionLoader = function () {\n _createClass(OTTSessionLoader, null, [{\n key: 'id',\n get: function get() {\n return 'session';\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n */\n\n }]);\n\n function OTTSessionLoader(params) {\n _classCallCheck(this, OTTSessionLoader);\n\n this._response = {};\n\n this.requests = this.buildRequests(params);\n this._partnerId = params.partnerId;\n }\n\n _createClass(OTTSessionLoader, [{\n key: 'buildRequests',\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 value: function buildRequests(params) {\n var config = _config2.default.get();\n var requests = [];\n requests.push(_userService2.default.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\n }, {\n key: 'isValid',\n value: function isValid() {\n return !!this._partnerId;\n }\n }, {\n key: 'requests',\n set: function set(requests) {\n this._requests = requests;\n },\n get: function get() {\n return this._requests;\n }\n }, {\n key: 'response',\n set: function set(response) {\n this._response.ks = response[0].data.ks;\n },\n get: function get() {\n return this._response.ks;\n }\n }]);\n\n return OTTSessionLoader;\n}();\n\nexports.default = OTTSessionLoader;\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _KalturaAsset$Type$ME, _KalturaAsset$Type$EP, _MediaTypeCombination;\n\nvar _logger = __webpack_require__(2);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _kalturaPlaybackSource = __webpack_require__(29);\n\nvar _kalturaPlaybackSource2 = _interopRequireDefault(_kalturaPlaybackSource);\n\nvar _kalturaPlaybackContext = __webpack_require__(18);\n\nvar _kalturaPlaybackContext2 = _interopRequireDefault(_kalturaPlaybackContext);\n\nvar _kalturaAsset = __webpack_require__(6);\n\nvar _kalturaAsset2 = _interopRequireDefault(_kalturaAsset);\n\nvar _mediaEntry = __webpack_require__(4);\n\nvar _mediaEntry2 = _interopRequireDefault(_mediaEntry);\n\nvar _drm = __webpack_require__(7);\n\nvar _drm2 = _interopRequireDefault(_drm);\n\nvar _mediaSource = __webpack_require__(9);\n\nvar _mediaSource2 = _interopRequireDefault(_mediaSource);\n\nvar _mediaSources = __webpack_require__(10);\n\nvar _mediaSources2 = _interopRequireDefault(_mediaSources);\n\nvar _entryList = __webpack_require__(19);\n\nvar _entryList2 = _interopRequireDefault(_entryList);\n\nvar _bumper = __webpack_require__(40);\n\nvar _bumper2 = _interopRequireDefault(_bumper);\n\nvar _mediaFormat = __webpack_require__(8);\n\nvar _kalturaDrmPlaybackPluginData = __webpack_require__(14);\n\nvar _kalturaDrmPlaybackPluginData2 = _interopRequireDefault(_kalturaDrmPlaybackPluginData);\n\nvar _kalturaRuleAction = __webpack_require__(30);\n\nvar _kalturaRuleAction2 = _interopRequireDefault(_kalturaRuleAction);\n\nvar _kalturaAccessControlMessage = __webpack_require__(13);\n\nvar _kalturaAccessControlMessage2 = _interopRequireDefault(_kalturaAccessControlMessage);\n\nvar _kalturaBumperPlaybackPluginData = __webpack_require__(28);\n\nvar _kalturaBumperPlaybackPluginData2 = _interopRequireDefault(_kalturaBumperPlaybackPluginData);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar LIVE_ASST_OBJECT_TYPE = 'KalturaLiveAsset';\n\nvar MediaTypeCombinations = (_MediaTypeCombination = {}, _defineProperty(_MediaTypeCombination, _kalturaAsset2.default.Type.MEDIA, (_KalturaAsset$Type$ME = {}, _defineProperty(_KalturaAsset$Type$ME, _kalturaPlaybackContext2.default.Type.TRAILER, function () {\n return { type: _mediaEntry2.default.Type.VOD };\n}), _defineProperty(_KalturaAsset$Type$ME, _kalturaPlaybackContext2.default.Type.PLAYBACK, function (mediaAssetData) {\n if (parseInt(mediaAssetData.externalIds) > 0 || mediaAssetData.objectType === LIVE_ASST_OBJECT_TYPE) {\n return { type: _mediaEntry2.default.Type.LIVE, dvrStatus: 0 };\n }\n return { type: _mediaEntry2.default.Type.VOD };\n}), _KalturaAsset$Type$ME)), _defineProperty(_MediaTypeCombination, _kalturaAsset2.default.Type.EPG, (_KalturaAsset$Type$EP = {}, _defineProperty(_KalturaAsset$Type$EP, _kalturaPlaybackContext2.default.Type.CATCHUP, function () {\n return { type: _mediaEntry2.default.Type.VOD };\n}), _defineProperty(_KalturaAsset$Type$EP, _kalturaPlaybackContext2.default.Type.START_OVER, function () {\n return { type: _mediaEntry2.default.Type.LIVE, dvrStatus: 1 };\n}), _KalturaAsset$Type$EP)), _defineProperty(_MediaTypeCombination, _kalturaAsset2.default.Type.RECORDING, _defineProperty({}, _kalturaPlaybackContext2.default.Type.PLAYBACK, function () {\n return { type: _mediaEntry2.default.Type.VOD };\n})), _MediaTypeCombination);\n\nvar OTTProviderParser = function () {\n function OTTProviderParser() {\n _classCallCheck(this, OTTProviderParser);\n }\n\n _createClass(OTTProviderParser, null, [{\n key: 'getMediaEntry',\n\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 value: function getMediaEntry(assetResponse, requestData) {\n var mediaEntry = new _mediaEntry2.default();\n OTTProviderParser._fillBaseData(mediaEntry, assetResponse, requestData);\n var playbackContext = assetResponse.playBackContextResult;\n var mediaAsset = assetResponse.mediaDataResult;\n var kalturaSources = playbackContext.sources;\n var filteredKalturaSources = OTTProviderParser._filterSourcesByFormats(kalturaSources, requestData.formats);\n mediaEntry.sources = OTTProviderParser._getParsedSources(filteredKalturaSources);\n var 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(Math, kalturaSources.map(function (source) {\n return 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} requestEntries - entries list\n * @returns {Playlist} - The entry list\n * @static\n * @public\n */\n\n }, {\n key: 'getEntryList',\n value: function getEntryList(playlistResponse, requestEntries) {\n var entryList = new _entryList2.default();\n var playlistItems = playlistResponse.playlistItems.entries;\n playlistItems.forEach(function (entry) {\n var mediaEntry = new _mediaEntry2.default();\n var requestData = requestEntries.find(function (requestEntry) {\n return requestEntry.entryId === entry.mediaDataResult.id;\n });\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\n }, {\n key: 'getBumper',\n value: function getBumper(assetResponse) {\n var playbackContext = assetResponse.playBackContextResult;\n var progressiveBumper = playbackContext.plugins.find(function (bumper) {\n return bumper.streamertype === _kalturaBumperPlaybackPluginData2.default.StreamerType.PROGRESSIVE;\n });\n if (progressiveBumper) {\n return new _bumper2.default(progressiveBumper);\n }\n }\n }, {\n key: '_fillBaseData',\n value: function _fillBaseData(mediaEntry, assetResponse, requestData) {\n var mediaAsset = assetResponse.mediaDataResult;\n var metaData = OTTProviderParser.reconstructMetadata(mediaAsset);\n metaData.description = mediaAsset.description;\n metaData.name = mediaAsset.name;\n if (requestData && requestData.mediaType) metaData.mediaType = requestData.mediaType;\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\n }, {\n key: 'reconstructMetadata',\n value: function reconstructMetadata(mediaAsset) {\n var 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} list a list of objects\n * @returns {Object} an mapped object of the arrayed list.\n */\n\n }, {\n key: 'addToMetaObject',\n value: function addToMetaObject(list) {\n var categoryObj = {};\n if (list) {\n list.forEach(function (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} pictures - Media pictures.\n * @returns {string | Array} - Poster base url or array of poster candidates.\n * @private\n */\n\n }, {\n key: '_getPoster',\n value: function _getPoster(pictures) {\n if (pictures && pictures.length > 0) {\n var picObj = pictures[0];\n var url = picObj.url;\n // Search for thumbnail service\n var regex = /.*\\/thumbnail\\/.*(?:width|height)\\/\\d+\\/(?:height|width)\\/\\d+/;\n if (regex.test(url)) {\n return url;\n }\n return pictures.map(function (pic) {\n return { url: pic.url, width: pic.width, height: pic.height };\n });\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\n }, {\n key: '_getMediaType',\n value: function _getMediaType(mediaAssetData, mediaType, contextType) {\n var typeData = { type: _mediaEntry2.default.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} kalturaSources - The kaltura sources.\n * @param {Array} formats - Partner device formats.\n * @returns {Array} - Filtered kalturaSources array.\n * @private\n */\n\n }, {\n key: '_filterSourcesByFormats',\n value: function _filterSourcesByFormats(kalturaSources, formats) {\n if (formats.length > 0) {\n kalturaSources = kalturaSources.filter(function (source) {\n return formats.includes(source.type);\n });\n }\n return kalturaSources;\n }\n\n /**\n * Returns the parsed sources\n * @function _getParsedSources\n * @param {Array} kalturaSources - The kaltura sources\n * @param {Object} playbackContext - The playback context\n * @return {MediaSources} - A media sources\n * @static\n * @private\n */\n\n }, {\n key: '_getParsedSources',\n value: function _getParsedSources(kalturaSources) {\n var sources = new _mediaSources2.default();\n var addAdaptiveSource = function addAdaptiveSource(source) {\n var parsedSource = OTTProviderParser._parseAdaptiveSource(source);\n if (parsedSource) {\n var sourceFormat = _mediaFormat.SupportedStreamFormat.get(source.format);\n sources.map(parsedSource, sourceFormat);\n }\n };\n var parseAdaptiveSources = function parseAdaptiveSources() {\n kalturaSources.filter(function (source) {\n return !(0, _mediaFormat.isProgressiveSource)(source.format);\n }).forEach(addAdaptiveSource);\n };\n var parseProgressiveSources = function parseProgressiveSources() {\n kalturaSources.filter(function (source) {\n return (0, _mediaFormat.isProgressiveSource)(source.format);\n }).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\n }, {\n key: '_parseAdaptiveSource',\n value: function _parseAdaptiveSource(kalturaSource) {\n var mediaSource = new _mediaSource2.default();\n if (kalturaSource) {\n var playUrl = kalturaSource.url;\n var mediaFormat = _mediaFormat.SupportedStreamFormat.get(kalturaSource.format);\n if (mediaFormat) {\n mediaSource.mimetype = mediaFormat.mimeType;\n }\n if (!playUrl) {\n OTTProviderParser._logger.error('failed to create play url from source, discarding source: (' + kalturaSource.fileId + '), ' + kalturaSource.format + '.');\n return null;\n }\n mediaSource.url = playUrl;\n mediaSource.id = kalturaSource.fileId + ',' + kalturaSource.format;\n if (kalturaSource.hasDrmData()) {\n var drmParams = [];\n kalturaSource.drm.forEach(function (drm) {\n drmParams.push(new _drm2.default(drm.licenseURL, _kalturaDrmPlaybackPluginData2.default.Scheme[drm.scheme], drm.certificate));\n });\n mediaSource.drmData = drmParams;\n }\n }\n return mediaSource;\n }\n }, {\n key: 'hasBlockAction',\n value: function hasBlockAction(response) {\n return response.playBackContextResult.hasBlockAction();\n }\n }, {\n key: 'getBlockAction',\n value: function getBlockAction(response) {\n return response.playBackContextResult.getBlockAction();\n }\n }, {\n key: 'getErrorMessages',\n value: function getErrorMessages(response) {\n return response.playBackContextResult.getErrorMessages();\n }\n }]);\n\n return OTTProviderParser;\n}();\n\nOTTProviderParser._logger = (0, _logger2.default)('OTTProviderParser');\nexports.default = OTTProviderParser;\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _ottService = __webpack_require__(21);\n\nvar _ottService2 = _interopRequireDefault(_ottService);\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SERVICE_NAME = 'ottuser';\n\nvar OTTUserService = function (_OTTService) {\n _inherits(OTTUserService, _OTTService);\n\n function OTTUserService() {\n _classCallCheck(this, OTTUserService);\n\n return _possibleConstructorReturn(this, (OTTUserService.__proto__ || Object.getPrototypeOf(OTTUserService)).apply(this, arguments));\n }\n\n _createClass(OTTUserService, null, [{\n key: 'anonymousLogin',\n\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 value: function anonymousLogin(serviceUrl, partnerId, udid) {\n var headers = new Map();\n headers.set('Content-Type', 'application/json');\n var request = new _requestBuilder2.default(headers);\n request.service = SERVICE_NAME;\n request.action = 'anonymousLogin';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n var params = { partnerId: partnerId };\n if (udid) {\n Object.assign(params, { udid: udid });\n }\n request.params = params;\n return request;\n }\n }]);\n\n return OTTUserService;\n}(_ottService2.default);\n\nexports.default = OTTUserService;\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// playkit-ott-provider.js"," \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// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\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 \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 42);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 59d72028ff5eee9a0b0d","//@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}\n */\n headers: Map;\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}\n */\n responseHeaders: Array;\n /**\n * @description network retry configuration\n * @memberof RequestBuilder\n * @type {ProviderNetworkRetryParameters}\n */\n retryConfig: ProviderNetworkRetryParameters;\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} headers The request headers\n */\n constructor(headers: Map = 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.} Service response as promise\n */\n doHttpRequest(): Promise {\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 {\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\n\n\n// WEBPACK FOOTER //\n// ./util/request-builder.js","//@flow\nimport getLogger, {getLogLevel, LogLevel} 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 if (getLogLevel(CLASS_NAME) !== LogLevel.OFF) {\n Error._logger.error(`Category:${category} | Code:${code} |`, data);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./util/error/error.js","//@flow\nimport * as JsLogger from 'js-logger';\n\nexport type LogLevelObject = {value: number, name: string};\nexport type LogLevelType = {[level: string]: LogLevelObject};\n\nconst LogLevel: LogLevelType = {\n DEBUG: JsLogger.DEBUG,\n INFO: JsLogger.INFO,\n TIME: JsLogger.TIME,\n WARN: JsLogger.WARN,\n ERROR: JsLogger.ERROR,\n OFF: JsLogger.OFF\n};\n\nJsLogger.useDefaults({defaultLevel: JsLogger.ERROR});\n\n/**\n * sets the logger handler\n * @param {LogHandlerType} handler - the log level\n * @returns {void}\n */\nfunction setLogHandler(handler: LogHandlerType): void {\n JsLogger.setHandler((messages, context) => handler(messages, context));\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 if (!name) {\n return JsLogger;\n }\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 {LogLevel, getLogLevel, setLogLevel, setLogHandler};\n\n\n\n// WEBPACK FOOTER //\n// ./util/logger.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/base-service-result.js","//@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\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}\n */\n poster: string | Array;\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 metadata: this.metadata,\n type: this.type,\n poster: this.poster,\n assetReferenceType: this.assetReferenceType\n };\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./entities/media-entry.js","//@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 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}\n */\n tags: Array = [];\n /**\n * @member - The asset metas\n * @type {Array}\n */\n metas: Array = [];\n /**\n * @member - The asset images\n * @type {Array}\n */\n pictures: Array = [];\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.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 {\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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/response-types/kaltura-asset.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./entities/drm.js","//@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 = 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\n\n\n// WEBPACK FOOTER //\n// ./entities/media-format.js","//@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}\n */\n drmData: Array;\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\n\n\n// WEBPACK FOOTER //\n// ./entities/media-source.js","// @flow\nimport MediaSource from './media-source';\nimport {MediaFormat} from './media-format';\n\nexport default class MediaSources {\n /**\n * Progressive download media sources container.\n * @type {Array}\n * @public\n */\n progressive: Array;\n /**\n * Dash media sources container.\n * @type {Array}\n * @public\n */\n dash: Array;\n /**\n * Hls media sources container.\n * @type {Array}\n * @public\n */\n hls: Array;\n captions: Array;\n\n /**\n * @constructor\n */\n constructor() {\n this.progressive = [];\n this.dash = [];\n this.hls = [];\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 };\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 return response;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./entities/media-sources.js","// @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>}\n * @private\n */\n _loadersResponseMap: Map> = 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}\n * @private\n */\n _loaders: Map = new Map();\n\n _networkRetryConfig: ProviderNetworkRetryParameters;\n\n constructor(networkRetryConfig: ProviderNetworkRetryParameters) {\n this._networkRetryConfig = networkRetryConfig;\n }\n\n /**\n * Add loader too execution loaders map\n * @function\n * @param {Function} loader Loader to add\n * @param {Object} params Loader params\n * @returns {void}\n */\n add(loader: Function, params: Object): 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 muktiRequest queue\n requests.forEach(request => {\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 * @function\n * @returns {Promise} Promise\n */\n fetchData(): Promise {\n return new Promise((resolve, reject) => {\n this._multiRequest.execute().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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/data-loader-manager.js","//@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}\n */\n requests: Array = [];\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 * @returns {Promise} The multirequest execution promise\n */\n execute(): Promise {\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);\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 = [];\n /**\n * @constructor\n * @param {Object} response data\n */\n constructor(response: Object) {\n this.success = true;\n const responseArr = response.result ? response.result : response;\n responseArr.forEach(result => {\n const serviceResult: ServiceResult = new ServiceResult(result);\n this.results.push(serviceResult);\n if (serviceResult.hasError) {\n MultiRequestResult._logger.error(\n `Service returned an error with error code: ${serviceResult.error.code} and message: ${serviceResult.error.message}.`\n );\n this.success = false;\n return;\n }\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/multi-request-builder.js","//@flow\nexport default 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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/response-types/kaltura-access-control-message.js","//@flow\nexport default 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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/response-types/kaltura-drm-playback-plugin-data.js","//@flow\nimport {clone} from '../../util/clone';\n\nconst defaultConfig: Object = {\n serviceParams: {\n apiVersion: '5.2.6'\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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/config.js","//@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 TRAILER: 'TRAILER',\n CATCHUP: 'CATCHUP',\n START_OVER: 'START_OVER',\n PLAYBACK: 'PLAYBACK'\n };\n /**\n * @member - The playback sources\n * @type {Array}\n */\n sources: Array = [];\n /**\n * @member - Array of actions as received from the rules that invalidated\n * @type {Array}\n */\n actions: Array = [];\n /**\n * @member - Array of access control massages\n * @type {Array}\n */\n messages: Array = [];\n /**\n * @member - Array of bumper plugins\n * @type {Array}\n */\n plugins: Array = [];\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 {\n return this.messages;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/response-types/kaltura-playback-context.js","//@flow\n\nimport MediaEntry from '../entities/media-entry';\n\nexport default class EntryList {\n /**\n * @member - entry list items\n * @type {Array}\n */\n items: Array;\n\n constructor() {\n this.items = [];\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./entities/entry-list.js","// @flow\nimport {setLogLevel, getLogLevel, LogLevel, setLogHandler} from '../../util/logger';\nimport DataLoaderManager from './data-loader-manager';\nimport Error from '../../util/error/error';\n\nexport default class BaseProvider {\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 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 if (options.log && options.log.level && this.LogLevel[options.log.level]) {\n setLogLevel(this.LogLevel[options.log.level]);\n }\n if (options.log && typeof options.log.handler === 'function') {\n setLogHandler(options.log.handler);\n }\n }\n\n // eslint-disable-next-line no-unused-vars\n getMediaConfig(mediaInfo: MI): Promise {\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 {\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 {\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).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(): {[level: string]: Object} {\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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/base-provider.js","//@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 = 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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/services/ott-service.js","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\n\n\n// WEBPACK FOOTER //\n// ./util/clone.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./util/error/category.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./util/error/code.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./util/error/severity.js","/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.4.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.DEBUG = defineLogLevel(1, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(2, 'INFO');\r\n\tLogger.TIME = defineLogLevel(3, 'TIME');\r\n\tLogger.WARN = defineLogLevel(4, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(Logger);\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/js-logger/src/logger.js\n// module id = 27\n// module chunks = 0 1","//@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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/response-types/kaltura-bumper-playback-plugin-data.js","//@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 = [];\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 = 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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/response-types/kaltura-playback-source.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/response-types/kaltura-rule-action.js","//@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 = 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 = 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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/services/asset-service.js","// @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 {\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 /**\n * Gets the backend media config.\n * @param {OTTProviderMediaInfoObject} mediaInfo - ott media info\n * @returns {Promise} - The provider media config\n */\n getMediaConfig(mediaInfo: OTTProviderMediaInfoObject): Promise {\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 = {\n mediaProtocol: mediaInfo.protocol,\n assetFileIds: mediaInfo.fileIds,\n context: contextType\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, 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 playlist config from entry list.\n * @param {ProviderEntryListObject} entryListInfo - ott entry list info\n * @returns {Promise} - The provider playlist config\n */\n getEntryListConfig(entryListInfo: ProviderEntryListObject): Promise {\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().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, requestEntries: Array): 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 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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/provider.js","//@flow\n\nexport default class Bumper {\n /**\n * @member - bumper url\n * @type {string}\n */\n url: string;\n\n /**\n * @constructor\n * @param {Object} data - The bumper response\n */\n constructor(data: Object) {\n this.url = data.url;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./entities/bumper.js","// @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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/index.js","//@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;\n _requests: Array;\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) {\n this._requests = requests;\n }\n\n get requests(): Array {\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 {\n const config = OTTConfiguration.get();\n const requests: Array = [];\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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/loaders/asset-list-loader.js","//@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;\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) {\n this._requests = requests;\n }\n\n get requests(): Array {\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 {\n const config = OTTConfiguration.get();\n const requests: Array = [];\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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/loaders/asset-loader.js","// @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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/loaders/data-loader-manager.js","//@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;\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) {\n this._requests = requests;\n }\n\n get requests(): Array {\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 {\n const config = OTTConfiguration.get();\n const requests: Array = [];\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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/loaders/session-loader.js","//@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 (parseInt(mediaAssetData.externalIds) > 0 || mediaAssetData.objectType === LIVE_ASST_OBJECT_TYPE) {\n return {type: MediaEntry.Type.LIVE, dvrStatus: 0};\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: 1})\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(Math, kalturaSources.map(source => source.duration));\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} requestEntries - entries list\n * @returns {Playlist} - The entry list\n * @static\n * @public\n */\n static getEntryList(playlistResponse: any, requestEntries: Array): 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 (requestData && requestData.mediaType) metaData.mediaType = requestData.mediaType;\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} list a list of objects\n * @returns {Object} an mapped object of the arrayed list.\n */\n static addToMetaObject(list: Array): 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} pictures - Media pictures.\n * @returns {string | Array} - Poster base url or array of poster candidates.\n * @private\n */\n static _getPoster(pictures: Array): string | Array {\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} kalturaSources - The kaltura sources.\n * @param {Array} formats - Partner device formats.\n * @returns {Array} - Filtered kalturaSources array.\n * @private\n */\n static _filterSourcesByFormats(kalturaSources: Array, formats: Array): Array {\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} 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): 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 = [];\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): boolean {\n return response.playBackContextResult.hasBlockAction();\n }\n\n static getBlockAction(response): ?KalturaRuleAction {\n return response.playBackContextResult.getBlockAction();\n }\n\n static getErrorMessages(response: OTTAssetLoaderResponse): Array {\n return response.playBackContextResult.getErrorMessages();\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/provider-parser.js","//@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 = 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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ott/services/user-service.js"],"sourceRoot":""} \ No newline at end of file +{"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/./util/logger.js","./providers/./entities/media-entry.js","./providers/./util/request-builder.js","./providers/../node_modules/js-logger/src/logger.js","./providers/./entities/media-format.js","./providers/./k-provider/common/base-service-result.js","./providers/./k-provider/common/response-types/kaltura-drm-playback-plugin-data.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/./k-provider/common/response-types/kaltura-access-control-message.js","./providers/./entities/drm.js","./providers/./k-provider/common/base-provider.js","./providers/./util/clone.js","./providers/./entities/entry-list.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/./entities/bumper.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","getLogLevel","LogLevel","OFF","_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","DEBUG","JsLogger","INFO","TIME","WARN","setLogHandler","handler","messages","context","getLevel","setLogLevel","level","setLevel","defaultLevel","MediaEntry","metadata","Map","sources","MediaSources","type","Type","UNKNOWN","id","toJSON","duration","dvrStatus","status","poster","assetReferenceType","VOD","LIVE","IMAGE","AUDIO","RequestBuilder","headers","async","timeout","maxAttempts","serviceUrl","service","action","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","global","logHandler","Logger","VERSION","contextualLoggersByNameMap","scope","func","apply","arguments","merge","args","target","length","defineLogLevel","TRACE","ContextualLogger","defaultContext","filterLevel","log","info","newLevel","enabledFor","lvl","trace","invoke","debug","warn","time","label","timeEnd","msgArgs","L","globalLogger","setHandler","createDefaultHandler","options","formatter","unshift","timerStartTimeByLabelMap","invokeConsoleMethod","hdlr","Function","console","Array","slice","timerLabel","Date","getTime","useDefaults","MediaFormat","DASH","mimeType","pathExt","HLS","WVM","MP4","MP3","SupportedStreamFormat","isProgressiveSource","formatName","sourceFormat","ServiceResult","objectType","hasError","ServiceError","message","KalturaDrmPlaybackPluginData","drm","scheme","licenseURL","certificate","WIDEVINE_CENC","PLAYREADY_CENC","FAIRPLAY","progressive","dash","hls","source","mediaFormat","push","h","MediaSource","mimetype","bandwidth","width","height","drmData","isArray","DataLoaderManager","networkRetryConfig","_networkRetryConfig","loader","execution_loader","isValid","_loaders","set","startIndex","_multiRequest","requests","add","executionLoaderResponseMap","from","val","index","_loadersResponseMap","execute","then","_multiResponse","prepareData","success","err","loaderDataIndexes","results","MultiRequestBuilder","requestParams","serviceDef","stringify","FAILED_PARSING_REQUEST","doHttpRequest","multiRequestResult","MultiRequestResult","result","serviceResult","KalturaAccessControlMessage","Drm","licenseUrl","BaseProvider","playerVersion","_partnerId","partnerId","_widgetId","widgetId","_uiConfId","uiConfId","_isAnonymous","ks","_ks","_playerVersion","defaultWidgetId","mediaInfo","playlistInfo","entryListInfo","concat","clone","node","e","keys","EntryList","items","defaultConfig","serviceParams","apiVersion","OTTConfiguration","clientConfig","OTTService","config","ottParams","multiReq","getUrl","OTTDataLoaderManager","getMultiRequest","OTTUserService","udid","OTTSessionLoader","buildRequests","UserService","anonymousLogin","_requests","_response","OTTAssetService","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","map","protocol","returnValue","KalturaBumpersPlaybackPluginData","streamertype","PROGRESSIVE","KalturaPlaybackContext","actions","plugins","plugin","undefined","getBlockAction","find","TRAILER","CATCHUP","START_OVER","PLAYBACK","KalturaAsset","description","metas","_formatTagsMetas","tags","pictures","images","objectToParse","parsed","objects","MEDIA","RECORDING","EPG","EPG_INTERNAL","EPG_EXTERNAL","NPVR","OTTAssetLoader","_entryId","entryId","getPlaybackContext","playbackContext","mediaDataResult","playBackContextResult","OTTAssetListLoader","playlistItems","entries","_entries","entry","AssetReferenceType","item","Bumper","MediaTypeCombinations","mediaAssetData","parseInt","externalIds","OTTProviderParser","assetResponse","requestData","mediaEntry","_fillBaseData","mediaAsset","kalturaSources","filteredKalturaSources","_filterSourcesByFormats","formats","_getParsedSources","typeData","_getMediaType","mediaType","contextType","Math","max","playlistResponse","requestEntries","entryList","requestEntry","progressiveBumper","bumper","StreamerType","metaData","reconstructMetadata","_getPoster","addToMetaObject","list","categoryObj","test","pic","includes","addAdaptiveSource","parsedSource","_parseAdaptiveSource","kalturaSource","mediaSource","playUrl","hasDrmData","drmParams","Scheme","hasBlockAction","getErrorMessages","OTTProvider","env","networkRetryParameters","_dataLoader","mediaProtocol","assetFileIds","fileIds","fetchData","_parseDataFromResponse","mediaConfig","session","isAnonymous","_getDefaultSourcesObject","has","sessionLoader","assetLoader","getMediaEntry","_getSourcesObject","_verifyHasSources","getBumper","_parseEntryListDataFromResponse","playlistConfig","playlistLoader","getEntryList","dvr","vr","sourcesObject","mediaSources","NAME","__NAME__","__VERSION__","ContextType","MediaType"],"mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAa,IAAID,KAEjBD,EAAc,QAAIA,EAAc,SAAK,GAAIA,EAAc,QAAa,UAAIA,EAAc,QAAa,WAAK,GAAIA,EAAc,QAAa,UAAO,IAAIC,KARpJ,CASGK,QAAQ,WACX,O,YCTE,IAAIC,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUP,QAGnC,IAAIC,EAASI,EAAiBE,GAAY,CACzCC,EAAGD,EACHE,GAAG,EACHT,QAAS,IAUV,OANAU,EAAQH,GAAUI,KAAKV,EAAOD,QAASC,EAAQA,EAAOD,QAASM,GAG/DL,EAAOQ,GAAI,EAGJR,EAAOD,QA0Df,OArDAM,EAAoBM,EAAIF,EAGxBJ,EAAoBO,EAAIR,EAGxBC,EAAoBQ,EAAI,SAASd,EAASe,EAAMC,GAC3CV,EAAoBW,EAAEjB,EAASe,IAClCG,OAAOC,eAAenB,EAASe,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEV,EAAoBgB,EAAI,SAAStB,GACX,oBAAXuB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAenB,EAASuB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAenB,EAAS,aAAc,CAAEyB,OAAO,KAQvDnB,EAAoBoB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQnB,EAAoBmB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFAxB,EAAoBgB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOnB,EAAoBQ,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRvB,EAAoB2B,EAAI,SAAShC,GAChC,IAAIe,EAASf,GAAUA,EAAO2B,WAC7B,WAAwB,OAAO3B,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAK,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRV,EAAoBW,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG7B,EAAoBgC,EAAI,GAIjBhC,EAAoBA,EAAoBiC,EAAI,I,kSCzErD,IAKqBC,EA0BnB,WAAYC,EAAkBC,EAAkBC,GAA8B,IAAhBC,EAAgB,uDAAJ,GAAI,UAC5EC,KAAKJ,SAAWA,EAChBI,KAAKH,SAAWA,EAChBG,KAAKF,KAAOA,EACZE,KAAKD,KAAOA,EACRE,YApCmB,WAoCSC,IAASC,KACvCR,EAAMS,QAAQC,MAAd,mBAAgCR,EAAhC,mBAAmDC,EAAnD,MAA6DC,I,EAhC9CJ,E,WCVU,CAQ7BW,YAAa,EAMbC,SAAU,I,EDJSZ,E,WEXU,CAE7Ba,QAAS,EACTC,QAAS,EACTC,SAAU,I,EFOSf,E,OGVE,CAIrBgB,mBAAoB,IAKpBC,gBAAiB,KAKjBC,WAAY,KAKZC,QAAS,KAKTC,mBAAoB,KAKpBC,oBAAqB,KAKrBC,uBAAwB,KAKxBC,sBAAuB,KAKvBC,MAAO,IAKPC,aAAc,KAKdC,uBAAwB,KAMxBC,yBAA0B,IAK1BC,oBAAqB,KAKrBC,uBAAwB,O,EH5DL7B,E,UAiBG8B,YAtBG,W,6BIR3B,mJAKMvB,EAAyB,CAC7BwB,MAAOC,QACPC,KAAMD,OACNE,KAAMF,OACNG,KAAMH,OACNR,MAAOQ,QACPxB,IAAKwB,OAUP,SAASI,EAAcC,GACrBL,cAAoB,SAACM,EAAUC,GAAX,OAAuBF,EAAQC,EAAUC,MAO/D,SAAST,EAAUvD,GACjB,OAAKA,EAGEyD,MAAazD,GAFXyD,EAUX,SAAS1B,EAAY/B,GACnB,OAAOuD,EAAUvD,GAAMiE,WASzB,SAASC,EAAYC,EAAuBnE,GAC1CuD,EAAUvD,GAAMoE,SAASD,GAtC3BV,cAAqB,CAACY,aAAcZ,UAyCrBF,O,0PCrDMe,E,WAgEnB,c,4FAAc,SACZxC,KAAKyC,SAAW,IAAIC,IACpB1C,KAAK2C,QAAU,IAAIC,IACnB5C,KAAK6C,KAAOL,EAAWM,KAAKC,Q,wDAQ5B,MAAO,CACLC,GAAIhD,KAAKgD,GACT9E,KAAM8B,KAAK9B,KACXyE,QAAS3C,KAAK2C,QAAQM,SACtBC,SAAUlD,KAAKkD,SACfC,UAAWnD,KAAKmD,UAChBC,OAAQpD,KAAKoD,OACbX,SAAUzC,KAAKyC,SACfI,KAAM7C,KAAK6C,KACXQ,OAAQrD,KAAKqD,OACbC,mBAAoBtD,KAAKsD,yB,kCApFW,CACtCC,IAAK,MACLC,KAAM,OACNC,MAAO,QACPC,MAAO,QACPX,QAAS,Y,cANQP,G,6hBCArB,IAEqBmB,E,WAwEnB,aAAsD,IAA1CC,EAA0C,uDAAX,IAAIlB,IAAO,+BA1BR,CAC5CmB,OAAO,EACPC,QAAS,EACTC,YAAa,IAuBuC,yBAd5B,GAexB/D,KAAK4D,QAAUA,E,sDASVI,GACL,OAAOA,EAAa,YAAchE,KAAKiE,SAAWjE,KAAKkE,OAAS,WAAalE,KAAKkE,OAAS,M,sCAQ/D,WACtBC,EAAU,IAAIC,SAAQ,SAACC,EAASC,GACpC,EAAKC,gBAAkB,CACrBF,UACAC,aAWJ,OARKtE,KAAKwE,KACRxE,KAAKuE,gBAAgBD,OACnB,IAAI3E,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAASlE,QAASb,IAAMgF,KAAK5D,mBAAoB,CACxFyD,IAAKxE,KAAKwE,OAIhBxE,KAAK4E,aACET,I,mCAGU,WACbU,EAAU,IAAIC,eAClBD,EAAQE,mBAAqB,WAC3B,GAA2B,IAAvBF,EAAQG,YACa,MAAnBH,EAAQzB,OACV,IACE,IAAM6B,EAAWC,KAAKC,MAAMN,EAAQO,cAGpC,OAFA,EAAKC,gBAAkB,EAAKC,oBAAoBT,GAEzC,EAAKN,gBAAgBF,QAAQY,GACpC,MAAO5E,GACP,EAAKkE,gBAAgBD,OACnB,EAAKiB,aAAaV,EAASlF,IAAMgF,KAAK3D,oBAAqB,CACzDwE,KAAMX,EAAQO,kBAO1BP,EAAQY,KAAKzF,KAAK0F,OAAQ1F,KAAKwE,IAAKxE,KAAK2F,YAAY9B,OACjD7D,KAAK2F,YAAY9B,OAAS7D,KAAK2F,YAAY7B,UAC7Ce,EAAQf,QAAU9D,KAAK2F,YAAY7B,SAErC,IAAM8B,EAAcC,YAAYC,MAChCjB,EAAQkB,UAAY,WAClB,EAAKC,aAAanB,EAASlF,IAAMgF,KAAK7D,QAAS,CAC7CgD,SAAU+B,YAAYC,MAAQF,GAAe,IAC7CK,WAAYpB,EAAQoB,cAGxBpB,EAAQqB,QAAUrB,EAAQsB,QAAU,WAClC,EAAKH,aAAanB,EAASlF,IAAMgF,KAAK9D,WAAY,CAChD2E,KAAMX,EAAQO,aACda,WAAYpB,EAAQoB,cAGxBjG,KAAK4D,QAAQwC,SAAQ,SAACxH,EAAOM,GAC3B2F,EAAQwB,iBAAiBnH,EAAKN,MAEhCiG,EAAQyB,KAAKtG,KAAKuG,U,0CAGA1B,GAClB,OAAOA,EACJ2B,wBACAC,MAAM,MACNC,QAAO,SAAAC,GAAM,OAA4D,IAAxDA,EAAOC,cAAcC,QA9JP,W,mCAiKvBhC,EAAyB/E,EAAcC,GAClD,IAAMM,EAAQL,KAAKuF,aAAaV,EAAS/E,EAAMC,GAK/C,GAJA8E,EAAQE,mBAAqB,aAC7BF,EAAQqB,QAAU,aAClBrB,EAAQkB,UAAY,aACpBlB,EAAQsB,QAAU,eACdnG,KAAK2F,YAAY5B,aAAe/D,KAAK8G,gBAAkB9G,KAAK2F,YAAY5B,aAI1E,OAAO/D,KAAKuE,gBAAgBD,OAAOjE,GAHnCL,KAAK8G,kBACL9G,KAAK4E,e,mCAMIC,EAAyB/E,EAAcC,GAMlD,OALA1B,OAAO0I,OAAOhH,EAAM,CAClByE,IAAKxE,KAAKwE,IACVZ,QAAS5D,KAAKsF,oBAAoBT,GAClCmC,QAAShH,KAAK8G,kBAET,IAAInH,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAASlE,QAASV,EAAMC,Q,iDCxL5E;;;;;IAKC,SAAUkH,GACV,aAGA,IAMIC,EANAC,EAAS,GAGbA,EAAOC,QAAU,QAMjB,IAAIC,EAA6B,GAG7BlI,EAAO,SAASmI,EAAOC,GAC1B,OAAO,WACN,OAAOA,EAAKC,MAAMF,EAAOG,aAKvBC,EAAQ,WACX,IAAwCxI,EAAKvB,EAAzCgK,EAAOF,UAAWG,EAASD,EAAK,GACpC,IAAKhK,EAAI,EAAGA,EAAIgK,EAAKE,OAAQlK,IAC5B,IAAKuB,KAAOyI,EAAKhK,KACVuB,KAAO0I,IAAWD,EAAKhK,GAAG6B,eAAeN,KAC9C0I,EAAO1I,GAAOyI,EAAKhK,GAAGuB,IAIzB,OAAO0I,GAIJE,EAAiB,SAASlJ,EAAOV,GACpC,MAAO,CAAEU,MAAOA,EAAOV,KAAMA,IAI9BiJ,EAAOY,MAAQD,EAAe,EAAG,SACjCX,EAAOzF,MAAQoG,EAAe,EAAG,SACjCX,EAAOvF,KAAOkG,EAAe,EAAG,QAChCX,EAAOtF,KAAOiG,EAAe,EAAG,QAChCX,EAAOrF,KAAOgG,EAAe,EAAG,QAChCX,EAAOhG,MAAQ2G,EAAe,EAAG,SACjCX,EAAOhH,IAAM2H,EAAe,GAAI,OAIhC,IAAIE,EAAmB,SAASC,GAC/BjI,KAAKkC,QAAU+F,EACfjI,KAAKsC,SAAS2F,EAAeC,aAC7BlI,KAAKmI,IAAMnI,KAAKoI,MAGjBJ,EAAiBzI,UAAY,CAE5B+C,SAAU,SAAU+F,GAEfA,GAAY,UAAWA,IAC1BrI,KAAKkC,QAAQgG,YAAcG,IAK7BlG,SAAU,WACT,OAAOnC,KAAKkC,QAAQgG,aAIrBI,WAAY,SAAUC,GACrB,IAAIL,EAAclI,KAAKkC,QAAQgG,YAC/B,OAAOK,EAAI3J,OAASsJ,EAAYtJ,OAGjC4J,MAAO,WACNxI,KAAKyI,OAAOtB,EAAOY,MAAON,YAG3BiB,MAAO,WACN1I,KAAKyI,OAAOtB,EAAOzF,MAAO+F,YAG3BW,KAAM,WACLpI,KAAKyI,OAAOtB,EAAOvF,KAAM6F,YAG1BkB,KAAM,WACL3I,KAAKyI,OAAOtB,EAAOrF,KAAM2F,YAG1BpH,MAAO,WACNL,KAAKyI,OAAOtB,EAAOhG,MAAOsG,YAG3BmB,KAAM,SAAUC,GACM,iBAAVA,GAAsBA,EAAMhB,OAAS,GAC/C7H,KAAKyI,OAAOtB,EAAOtF,KAAM,CAAEgH,EAAO,WAIpCC,QAAS,SAAUD,GACG,iBAAVA,GAAsBA,EAAMhB,OAAS,GAC/C7H,KAAKyI,OAAOtB,EAAOtF,KAAM,CAAEgH,EAAO,SAKpCJ,OAAQ,SAAUpG,EAAO0G,GACpB7B,GAAclH,KAAKsI,WAAWjG,IACjC6E,EAAW6B,EAASrB,EAAM,CAAErF,MAAOA,GAASrC,KAAKkC,YAMpD,IAKK8G,EALDC,EAAe,IAAIjB,EAAiB,CAAEE,YAAaf,EAAOhH,OAKzD6I,EAAI7B,GAENmB,WAAanJ,EAAK8J,EAAcA,EAAaX,YAC/CU,EAAER,MAAQrJ,EAAK8J,EAAcA,EAAaT,OAC1CQ,EAAEN,MAAQvJ,EAAK8J,EAAcA,EAAaP,OAC1CM,EAAEJ,KAAOzJ,EAAK8J,EAAcA,EAAaL,MACzCI,EAAEF,QAAU3J,EAAK8J,EAAcA,EAAaH,SAC5CE,EAAEZ,KAAOjJ,EAAK8J,EAAcA,EAAab,MACzCY,EAAEL,KAAOxJ,EAAK8J,EAAcA,EAAaN,MACzCK,EAAE3I,MAAQlB,EAAK8J,EAAcA,EAAa5I,OAG1C2I,EAAEb,IAAMa,EAAEZ,KAMXjB,EAAO+B,WAAa,SAAU3B,GAC7BL,EAAaK,GAKdJ,EAAO7E,SAAW,SAASD,GAK1B,IAAK,IAAInD,KAHT+J,EAAa3G,SAASD,GAGNgF,EACXA,EAA2B7H,eAAeN,IAC7CmI,EAA2BnI,GAAKoD,SAASD,IAM5C8E,EAAOhF,SAAW,WACjB,OAAO8G,EAAa9G,YAKrBgF,EAAO3I,IAAM,SAAUN,GAEtB,OAAOmJ,EAA2BnJ,KAChCmJ,EAA2BnJ,GAAQ,IAAI8J,EAAiBN,EAAM,CAAExJ,KAAMA,GAAQ+K,EAAa/G,YAM9FiF,EAAOgC,qBAAuB,SAAUC,IACvCA,EAAUA,GAAW,IAEbC,UAAYD,EAAQC,WAAa,SAAiCpH,EAAUC,GAE/EA,EAAQhE,MACX+D,EAASqH,QAAQ,IAAMpH,EAAQhE,KAAO,MAMxC,IAAIqL,EAA2B,GAG3BC,EAAsB,SAAUC,EAAMxH,GACzCyH,SAASnK,UAAUiI,MAAM1J,KAAK2L,EAAME,QAAS1H,IAI9C,MAAuB,oBAAZ0H,QACH,aAGD,SAAS1H,EAAUC,GAEzBD,EAAW2H,MAAMrK,UAAUsK,MAAM/L,KAAKmE,GAEtC,IACI6H,EADAL,EAAOE,QAAQxB,IAGfjG,EAAQG,QAAU8E,EAAOtF,MAC5BiI,GAAc5H,EAAQhE,KAAO,IAAMgE,EAAQhE,KAAO,KAAO,IAAM+D,EAAS,GAEpD,UAAhBA,EAAS,GACR0H,QAAQf,KACXe,QAAQf,KAAKkB,GAGbP,EAAyBO,IAAc,IAAIC,MAAOC,UAI/CL,QAAQb,QACXa,QAAQb,QAAQgB,GAGhBN,EAAoBC,EAAM,CAAEK,EAAa,OACvC,IAAIC,MAAOC,UAAYT,EAAyBO,IAAe,SAM/D5H,EAAQG,QAAU8E,EAAOrF,MAAQ6H,QAAQhB,KAC5Cc,EAAOE,QAAQhB,KACLzG,EAAQG,QAAU8E,EAAOhG,OAASwI,QAAQtJ,MACpDoJ,EAAOE,QAAQtJ,MACL6B,EAAQG,QAAU8E,EAAOvF,MAAQ+H,QAAQvB,KACnDqB,EAAOE,QAAQvB,KACLlG,EAAQG,QAAU8E,EAAOzF,OAASiI,QAAQjB,MACpDe,EAAOE,QAAQjB,MACLxG,EAAQG,QAAU8E,EAAOY,OAAS4B,QAAQnB,QACpDiB,EAAOE,QAAQnB,OAGhBY,EAAQC,UAAUpH,EAAUC,GAC5BsH,EAAoBC,EAAMxH,MAO7BkF,EAAO8C,YAAc,SAASb,GAC7BjC,EAAO7E,SAAS8G,GAAWA,EAAQ7G,cAAgB4E,EAAOzF,OAC1DyF,EAAO+B,WAAW/B,EAAOgC,qBAAqBC,UAKjC,0BAAb,KAAa,kCAhQf,I,6BCJA,sGAAO,IAAMc,EAAyD,CACpEC,KAAM,CACJjM,KAAM,OACNkM,SAAU,uBACVC,QAAS,OAEXC,IAAK,CACHpM,KAAM,MACNkM,SAAU,wBACVC,QAAS,QAEXE,IAAK,CACHrM,KAAM,MACNkM,SAAU,YACVC,QAAS,OAEXG,IAAK,CACHtM,KAAM,MACNkM,SAAU,YACVC,QAAS,OAEXI,IAAK,CACHvM,KAAM,MACNkM,SAAU,aACVC,QAAS,QAIAK,EAA8D,IAAIhI,IAAI,CACjF,CAAC,WAAYwH,EAAYC,MACzB,CAAC,YAAaD,EAAYI,KAC1B,CAAC,MAAOJ,EAAYM,OAQtB,SAASG,EAAoBC,GAC3B,IAAMC,EAAeH,EAAsBlM,IAAIoM,GAC/C,QAASC,GAAgBA,EAAa3M,OAASgM,EAAYM,IAAItM,O,iKCzC5C4M,EAqBnB,WAAY7F,G,UAAkB,U,GAhBV,G,EAgBU,c,EAAA,M,sFACA,wBAAxBA,EAAS8F,YACX/K,KAAKgL,UAAW,EAChBhL,KAAKK,MAAQ,IAAI4K,EAAahG,EAASnF,KAAMmF,EAASiG,UAC7CjG,EAAS5E,OAAuC,wBAA9B4E,EAAS5E,MAAM0K,YAC1C/K,KAAKgL,UAAW,EAChBhL,KAAKK,MAAQ,IAAI4K,EAAahG,EAAS5E,MAAMP,KAAMmF,EAAS5E,MAAM6K,UAElElL,KAAKD,KAAOkF,GAKZgG,EAiBJ,WAAYnL,EAAcoL,GAAiB,UACzClL,KAAKF,KAAOA,EACZE,KAAKkL,QAAUA,I,yECrDEC,EAgCnB,WAAYC,I,4FAAU,SACpBpL,KAAKqL,OAASD,EAAIC,OAClBrL,KAAKsL,WAAaF,EAAIE,WACtBtL,KAAKuL,YAAcH,EAAIG,a,EAlCmB,CAC1C,qBAAsB,0BACtB,oBAAqB,qBACrB,oBAAqB,qBACrBC,cAAe,qBACfC,eAAgB,0BAChBC,SAAU,uB,gBAPOP,G,gVCGAvI,E,WAwBnB,c,4FAAc,SACZ5C,KAAK2L,YAAc,GACnB3L,KAAK4L,KAAO,GACZ5L,KAAK6L,IAAM,G,mDASTC,EAAqBC,GACvB,GAAIA,EACF,OAAQA,EAAY7N,MAClB,KAAKgM,IAAYM,IAAItM,KACnB8B,KAAK2L,YAAYK,KAAKF,GACtB,MACF,KAAK5B,IAAYC,KAAKjM,KACpB8B,KAAK4L,KAAKI,KAAKF,GACf,MACF,KAAK5B,IAAYI,IAAIpM,KACnB8B,KAAK6L,IAAIG,KAAKF,M,+BAapB,IAAM7G,EAAuC,CAC3C0G,YAAa,GACbC,KAAM,GACNC,IAAK,IAKP,OAHA7L,KAAK2L,YAAYvF,SAAQ,SAAA3G,GAAC,OAAIwF,EAAS0G,YAAYK,KAAKvM,EAAEwD,aAC1DjD,KAAK6L,IAAIzF,SAAQ,SAAA6F,GAAC,OAAIhH,EAAS4G,IAAIG,KAAKC,EAAEhJ,aAC1CjD,KAAK4L,KAAKxF,SAAQ,SAAAnI,GAAC,OAAIgH,EAAS2G,KAAKI,KAAK/N,EAAEgF,aACrCgC,O,gRCpEUiH,E,sLA+CjB,IAAMjH,EAAsC,CAC1CjC,GAAIhD,KAAKgD,GACTwB,IAAKxE,KAAKwE,IACV2H,SAAUnM,KAAKmM,UAcjB,OAZInM,KAAKoM,YAAWnH,EAASmH,UAAYpM,KAAKoM,WAC1CpM,KAAKqM,QAAOpH,EAASoH,MAAQrM,KAAKqM,OAClCrM,KAAKsM,SAAQrH,EAASqH,OAAStM,KAAKsM,QACpCtM,KAAK6I,QAAO5D,EAAS4D,MAAQ7I,KAAK6I,OAClC7I,KAAKuM,SAAWvM,KAAKuM,QAAQ1E,OAAS,IACxC5C,EAASsH,QAAU,GACnBvM,KAAKuM,QAAQnG,SAAQ,SAAAnI,GACf2L,MAAM4C,QAAQvH,EAASsH,UACzBtH,EAASsH,QAAQP,KAAK/N,EAAEgF,cAIvBgC,O,mZC/DUwH,E,WA4BnB,WAAYC,I,4FAAoD,sCAtBd,IAAIhK,KAsBU,kBAJ/B,IAAIA,KAKnC1C,KAAK2M,oBAAsBD,E,mDAUzBE,EAAkBrG,GAAsB,WACtCsG,EAAmB,IAAID,EAAOrG,GAClC,GAAIsG,EAAiBC,UAAW,CAC9B9M,KAAK+M,SAASC,IAAIJ,EAAO5J,GAAI6J,GAE7B,IAAII,EAAajN,KAAKkN,cAAcC,SAAStF,OAEzCsF,EAAWN,EAAiBM,SAChCnN,KAAKkN,cAAcvH,YAAc3F,KAAK2M,oBAEtCQ,EAAS/G,SAAQ,SAAAvB,GACf,EAAKqI,cAAcE,IAAIvI,MAGzB,IAAIwI,EAA6BzD,MAAM0D,KAAK,IAAI1D,MAAMuD,EAAStF,SAAS,SAAC0F,EAAKC,GAAN,OAAgBA,EAAQP,KAEhGjN,KAAKyN,oBAAoBT,IAAIJ,EAAO5J,GAAIqK,M,kCASlB,WACxB,OAAO,IAAIjJ,SAAQ,SAACC,EAASC,GAC3B,EAAK4I,cAAcQ,UAAUC,MAC3B,SAAA5N,GACE,EAAK6N,eAAiB7N,EAAKkF,SACA,EAAK4I,YAAY9N,EAAKkF,UAChC6I,QACfzJ,EAAQ,EAAK0I,UAEbzI,EACE,IAAI3E,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAASlE,QAASb,IAAMgF,KAAKzD,sBAAuB,CAC3F0C,QAAS7D,EAAK6D,cAKtB,SAAAmK,GACEzJ,EAAOyJ,W,kCAYH9I,GAAsC,WAWhD,OAVAjF,KAAK+M,SAAS3G,SAAQ,SAACwG,EAAQ1O,GAC7B,IAAI8P,EAAoB,EAAKP,oBAAoBjP,IAAIN,GACrD,IACM8P,GAAqBA,EAAkBnG,OAAS,IAClD+E,EAAO3H,SAAWA,EAASgJ,QAAQpE,MAAMmE,EAAkB,GAAIA,EAAkBA,EAAkBnG,OAAS,GAAK,IAEnH,MAAOkG,GACP,MAAO,CAACD,SAAS,EAAOzN,MAAO0N,OAG5B,CAACD,SAAS,EAAM/N,KAAMC,KAAK+M,e,siDCtGjBmB,E,qaAMe,I,2CAO9BrJ,GACF7E,KAAKmN,SAASnB,KAAKnH,GACnB,IAAMsJ,EAAgB,GAChBC,EAAqB,CAACnK,QAASY,EAAQZ,QAASC,OAAQW,EAAQX,QAItE,OAHA7F,OAAO0I,OAAOoH,EAAd,KAA+BnO,KAAKmN,SAAStF,OAASxJ,OAAO0I,OAAOqH,EAAYvJ,EAAQ0B,UACxFlI,OAAO0I,OAAOoH,EAAenO,KAAKuG,QAClCvG,KAAKuG,OAAS4H,EACPnO,O,gCAQkB,WACzB,OAAO,IAAIoE,SAAQ,SAACC,EAASC,GAC3B,IACE,EAAKiC,OAASrB,KAAKmJ,UAAU,EAAK9H,QAClC,MAAOwH,GACPG,EAAoB9N,QAAQC,MAA5B,UAAqC0N,EAAI7C,UACzC5G,EACE,IAAI3E,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAAShE,SAAUf,IAAMgF,KAAK2J,uBAAwB,CAC7FjO,MAAO0N,EACPxH,OAAQ,EAAKA,UAInB,EAAKgI,gBAAgBZ,MACnB,SAAA5N,GACE,IAAMyO,EAAqB,IAAIC,EAAmB1O,GAC9CyO,EAAmBV,QACrBzJ,EAAQ,CACNT,QAAS,EAAKyB,gBACdJ,SAAUuJ,IAGZlK,EACE,IAAI3E,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAASlE,QAASb,IAAMgF,KAAK1D,uBAAwB,CAC5FuD,IAAK,EAAKA,IACVZ,QAAS,EAAKyB,gBACd4I,QAASO,EAAmBP,cAKpC,SAAAF,GACEzJ,EAAOyJ,c,8BA5DgCpK,K,EAA5BuK,E,UACFzM,YAAU,wBAkEtB,IAAMgN,EAgBX,WAAYxJ,GAAkB,sCALE,IAM9BjF,KAAK8N,SAAU,GACK7I,EAASyJ,OAASzJ,EAASyJ,OAASzJ,GAC5CmB,SAAQ,SAAAsI,GAClB,IAAMC,EAA+B,IAAI7D,IAAc4D,GAEvD,GADA,EAAKT,QAAQjC,KAAK2C,GACdA,EAAc3D,SAKhB,OAJAyD,EAAmBrO,QAAQC,MAA3B,qDACgDsO,EAActO,MAAMP,KADpE,yBACyF6O,EAActO,MAAM6K,QAD7G,WAGA,EAAK4C,SAAU,O,EA1BVW,E,UACMhN,YAAU,wB,mECzERmN,EAgBnB,WAAY7O,I,4FAAc,SACxBC,KAAKkL,QAAUnL,EAAKmL,QACpBlL,KAAKF,KAAOC,EAAKD,O,yOClBA+O,E,WAwBnB,WAAYC,EAAoBzD,EAAgBE,I,4FAAsB,SACpEvL,KAAK8O,WAAaA,EAClB9O,KAAKqL,OAASA,EACVE,IACFvL,KAAKuL,YAAcA,G,wDASrB,IAAMtG,EAAkC,CACtC6J,WAAY9O,KAAK8O,WACjBzD,OAAQrL,KAAKqL,QAGf,OADIrL,KAAKuL,cAAatG,EAASsG,YAAcvL,KAAKuL,aAC3CtG,O,6VCtCU8J,E,WA+CnB,WAAY3F,EAAgC4F,G,uGAAuB,S,EAtCb,CACpDnL,OAAO,EACPC,QAAS,EACTC,YAAa,I,EAmCoD,yB,EAAA,M,sFACjE/D,KAAKiP,WAAa7F,EAAQ8F,UAC1BlP,KAAKmP,UAAY/F,EAAQgG,SACzBpP,KAAKqP,UAAYjG,EAAQkG,SACzBtP,KAAKuP,cAAgBnG,EAAQoG,GAC7BxP,KAAKyP,IAAMrG,EAAQoG,IAAM,GACzBxP,KAAK0P,eAAiBV,EAClB5F,EAAQjB,KAAOiB,EAAQjB,IAAI9F,OAASrC,KAAKE,SAASkJ,EAAQjB,IAAI9F,QAChED,YAAYpC,KAAKE,SAASkJ,EAAQjB,IAAI9F,QAEpC+G,EAAQjB,KAAsC,mBAAxBiB,EAAQjB,IAAInG,SACpCD,YAAcqH,EAAQjB,IAAInG,S,4CA1C5B,OAAOhC,KAAKiP,a,+BAIZ,OAAOjP,KAAKmP,WAAanP,KAAK2P,kB,sCAI9B,MAAO,IAAM3P,KAAKiP,a,+BAIlB,OAAOjP,KAAKqP,Y,yBAIZ,OAAOrP,KAAKyP,K,aAGP7Q,GACLoB,KAAKyP,IAAM7Q,I,oCAIX,OAAOoB,KAAK0P,iB,kCAIZ,OAAO1P,KAAKuP,iB,0CAmBCK,GACb,OAAOxL,QAAQE,OACb,IAAI3E,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAAShE,SAAUf,IAAMgF,KAAKnD,uBAAwB,CAC7F0J,QAAS,oE,wCAMG2E,GAChB,OAAOzL,QAAQE,OACb,IAAI3E,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAAShE,SAAUf,IAAMgF,KAAKnD,uBAAwB,CAC7F0J,QAAS,4D,yCAMI4E,GACjB,OAAO1L,QAAQE,OACb,IAAI3E,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAAShE,SAAUf,IAAMgF,KAAKnD,uBAAwB,CAC7F0J,QAAS,wD,wCAKGvI,GAChB,GAAqE,IAAjEA,EAAQkJ,IAAIkE,OAAOpN,EAAQiJ,KAAMjJ,EAAQgJ,aAAa9D,OACxD,MAAM,IAAIlI,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAASjE,QAASd,IAAMgF,KAAKpD,oBAAqB,CAC/F2C,OAAQ,GACRjC,SAAU,gCAAF,OAAkCU,EAAQK,Q,kCAS5C9E,GACV,OAAO+B,YAAY/B,K,kCAGTmE,EAAenE,GACzBkE,YAAYC,EAAOnE,K,+BARnB,OAAOgC,Q,0SCxGX,IAAM8P,EAAQ,SAARA,EAAQjQ,GACZ,IAAIkQ,EAkBJ,OAjBIrG,MAAM4C,QAAQzM,IAChBkQ,EAAOlQ,EAAK8H,OAAS,EAAI9H,EAAK8J,MAAM,GAAK,IACpCzD,SAAQ,SAAC8J,EAAGvS,IACG,WAAb,EAAOuS,IAAkBA,IAAM,IAAQtG,MAAM4C,QAAQ0D,IAAMA,EAAErI,OAAS,KACzEoI,EAAKtS,GAAKqS,EAAME,OAGK,WAAhB,EAAOnQ,IAChBkQ,EAAO5R,OAAO0I,OAAO,GAAIhH,GACzB1B,OAAO8R,KAAKF,GAAM7J,SAAQ,SAAAlH,IACE,WAArB,EAAO+Q,EAAK/Q,KAAqB+Q,EAAK/Q,KAAS,IAAQ0K,MAAM4C,QAAQyD,EAAK/Q,KAAS+Q,EAAK/Q,GAAK2I,OAAS,KACzGoI,EAAK/Q,GAAO8Q,EAAMC,EAAK/Q,SAI3B+Q,EAAOlQ,EAEFkQ,I,wECfYG,EAOnB,c,4FAAc,SACZpQ,KAAKqQ,MAAQ,K,ubCTjB,IAAMC,EAAwB,CAC5BC,cAAe,CACbC,WAAY,UAIKC,E,gLACRC,GACLA,GACFrS,OAAO0I,OAAOuJ,EAAeI,K,4BAK/B,OAAOV,YAAMM,O,+NCbjB,IAEqBK,E,4LASInB,EAAYN,GACjC,IAAM0B,EAASH,EAAiBjS,MAC1BqS,EAAYD,EAAOL,cACrBf,GACFnR,OAAO0I,OAAO8J,EAAW,CAACrB,GAAIA,IAE5BN,GACF7Q,OAAO0I,OAAO8J,EAAW,CAAC3B,UAAWA,IAEvC,IAAMtL,EAA+B,IAAIlB,IACzCkB,EAAQoJ,IAAI,eAAgB,oBAC5B,IAAM8D,EAAW,IAAI5C,IAAoBtK,GAKzC,OAJAkN,EAASpL,OAAS,OAClBoL,EAAS7M,QAxBgB,eAyBzB6M,EAAStM,IAAMsM,EAASC,OAAOH,EAAO5M,YACtC8M,EAASvK,OAASsK,EACXC,M,8qCCtBUE,E,gQACnB,WAAY9B,GAAwF,MAArEM,EAAqE,uDAAxD,GAAI9C,EAAoD,yDAClG,cAAMA,IACDQ,cAAgByD,EAAWM,gBAAgBzB,EAAIN,GAF8C,E,UADpDzC,K,8yCCLlD,IAEqByE,E,+WAUGlN,EAAoBkL,EAAmBiC,GAC3D,IAAMvN,EAA+B,IAAIlB,IACzCkB,EAAQoJ,IAAI,eAAgB,oBAC5B,IAAMnI,EAAU,IAAIlB,IAAeC,GACnCiB,EAAQZ,QAhBiB,UAiBzBY,EAAQX,OAAS,iBACjBW,EAAQa,OAAS,OACjBb,EAAQL,IAAMK,EAAQkM,OAAO/M,GAC7B,IAAMuC,EAAiB,CAAC2I,UAAWA,GAKnC,OAJIiC,GACF9S,OAAO0I,OAAOR,EAAQ,CAAC4K,KAAMA,IAE/BtM,EAAQ0B,OAASA,EACV1B,M,uCAvBiC8L,G,mOCDvBS,E,WAanB,WAAY7K,G,uGAAgB,S,EAVX,I,EAUW,e,EAAA,M,sFAC1BvG,KAAKmN,SAAWnN,KAAKqR,cAAc9K,GACnCvG,KAAKiP,WAAa1I,EAAO2I,U,0CATzB,MAAO,c,yCAmCK3I,GACZ,IAAMqK,EAASH,EAAiBjS,MAC1B2O,EAAkC,GAExC,OADAA,EAASnB,KAAKsF,EAAYC,eAAeX,EAAO5M,WAAYuC,EAAO2I,UAAW3I,EAAO4K,OAC9EhE,I,gCASP,QAASnN,KAAKiP,a,6BApCH9B,GACXnN,KAAKwR,UAAYrE,G,eAIjB,OAAOnN,KAAKwR,Y,6BAGDvM,GACXjF,KAAKyR,UAAUjC,GAAKvK,EAAS,GAAGlF,KAAKyP,I,eAIrC,OAAOxP,KAAKyR,UAAUjC,O,4yCChC1B,IAEqBkC,E,mXAajB1N,EACAwL,EACAmC,EACA9O,EACA+O,GAEA,IAAMhO,EAA+B,IAAIlB,IACzCkB,EAAQoJ,IAAI,eAAgB,oBAC5B,IAAMnI,EAAU,IAAIlB,IAAeC,GACnCiB,EAAQZ,QAxBiB,QAyBzBY,EAAQX,OAAS,qBACjBW,EAAQa,OAAS,OACjBb,EAAQL,IAAMK,EAAQkM,OAAO/M,GAC7B,IAAM6N,EAA4B,CAAC9G,WAAY,iCAG/C,OAFA1M,OAAO0I,OAAO8K,EAAmBD,GACjC/M,EAAQ0B,OAAS,CAACoL,QAASA,EAASG,UAAWjP,EAAMgP,kBAAmBA,EAAmBrC,GAAIA,GACxF3K,I,0BAGEb,EAAoBwL,EAAYmC,EAAiBrO,GAC1D,IAAMM,EAA+B,IAAIlB,IACzCkB,EAAQoJ,IAAI,eAAgB,oBAC5B,IAAMnI,EAAU,IAAIlB,IAAeC,GAMnC,OALAiB,EAAQZ,QAtCiB,QAuCzBY,EAAQX,OAAS,MACjBW,EAAQa,OAAS,OACjBb,EAAQL,IAAMK,EAAQkM,OAAO/M,GAC7Ba,EAAQ0B,OAAS,CAACvD,GAAI2O,EAASrO,mBAAoBA,EAAoBkM,GAAIA,GACpE3K,M,uCAzCkC8L,G,yBCLxBoB,EAqBnB,WAAYhS,I,4FAAc,SACxBC,KAAK6C,KAAO9C,EAAK8C,M,EArB8B,CAC/CmP,MAAO,QACPC,kBAAmB,oBACnBC,gBAAiB,kBACjBC,WAAY,aACZC,eAAgB,iBAChBC,eAAgB,iBAChBC,sBAAuB,0B,cARNP,G,2QCIAQ,E,WAenB,WAAYzG,GAAgB,Y,4FAAA,S,6GAAA,YAZe,IAazC9L,KAAKwS,OAAS1G,EAAO0G,OACrBxS,KAAKyS,UAAY3G,EAAO2G,UACxBzS,KAAK0S,SAAW5G,EAAO4G,SACvB1S,KAAKkD,SAAW4I,EAAO5I,SACvBlD,KAAKwE,IAAMsH,EAAOtH,IAClBxE,KAAK6C,KAAOiJ,EAAOjJ,KACnB7C,KAAK2S,OAAS7G,EAAO9I,GACrBhD,KAAK4S,UAAY9G,EAAO8G,UACpB9G,EAAOV,KACTU,EAAOV,IAAIyH,KAAI,SAAAzH,GAAG,OAAI,EAAKA,IAAIY,KAAK,IAAIb,IAA6BC,O,4DAUvE,OAAOpL,KAAKoL,KAAOpL,KAAKoL,IAAIvD,OAAS,I,kCAQ3BiL,GACV,IAAIC,EAAsB,GAC1B,GAAI/S,KAAK4S,WAAa5S,KAAK4S,UAAU/K,OAAS,EACV7H,KAAK4S,UAAUnM,MAAM,KAC1CL,SAAQ,SAAA3G,GACfA,IAAMqT,IACRC,EAActT,WAGb,GAAiB,SAAbqT,EACT,OAAOA,EAET,OAAOC,O,oCC3DUC,EAsBnB,WAAYjT,I,4FAAc,SACxBC,KAAKiT,aAAelT,EAAKkT,aACzBjT,KAAKwE,IAAMzE,EAAKyE,K,47CAxBCwO,E,eAC6B,CAC9C1I,IAAK,MACLH,KAAM,OACN+I,YAAa,gB,ICEIC,G,sQAgCnB,WAAYlO,GAAkB,MAE5B,G,4FAF4B,eAC5B,cAAMA,IADsB,UArBU,IAqBV,mBAhBM,IAgBN,oBAXiB,IAWjB,mBANqB,KAQ5C,EAAK+F,SAAU,CAClB,IAAM/I,EAAWgD,EAAShD,SACtBA,GACFA,EAAS4Q,KAAI,SAAA3H,GAAO,OAAI,EAAKjJ,SAAS+J,KAAK,IAAI4C,IAA4B1D,OAE7E,IAAMkI,EAAUnO,EAASmO,QACrBA,GACFA,EAAQP,KAAI,SAAA3O,GAAM,OAAI,EAAKkP,QAAQpH,KAAK,IAAI+F,EAAkB7N,OAEhE,IAAMvB,EAAUsC,EAAStC,QACrBA,GACFA,EAAQkQ,KAAI,SAAA/G,GAAM,OAAI,EAAKnJ,QAAQqJ,KAAK,IAAIuG,EAAsBzG,OAEpE,IAAMuH,EAAUpO,EAASoO,QACrBA,GACFA,EAAQR,KAAI,SAAAS,GAAM,OAAI,EAAKD,QAAQrH,KAAK,IAAIgH,EAAiCM,OAjBrD,S,sDAuB5B,YAAiCC,IAA1BvT,KAAKwT,mB,uCAIZ,OAAOxT,KAAKoT,QAAQK,MAAK,SAAAvP,GAAM,OAAIA,EAAOrB,OAASkP,EAAkBjP,KAAKkP,W,yCAI1E,OAAOhS,KAAKiC,c,8BA/DoC6I,K,u1CAA/BqI,G,OACqB,CACtCO,QAAS,UACTC,QAAS,UACTC,WAAY,aACZC,SAAU,a,ICTOC,G,wQAgDnB,WAAY7O,GAAkB,a,4FAAA,eAC5B,cAAMA,IADsB,OA1Bf,IA0Be,uBArBR,IAqBQ,gBAhBR,IAgBQ,iBAXP,IAWO,oBANP,IAQhB,EAAK+F,WACR,EAAKhI,GAAKiC,EAASjC,GACnB,EAAK9E,KAAO+G,EAAS/G,KACrB,EAAK6V,YAAc9O,EAAS8O,YAC5B,EAAKC,MAAQ,EAAKC,iBAAiBhP,EAAS+O,OAC5C,EAAKE,KAAO,EAAKD,iBAAiBhP,EAASiP,MAC3C,EAAKC,SAAWlP,EAASmP,QARC,E,sDAYbC,GACf,IAAMC,EAAS,GAYf,OAXAjW,OAAO8R,KAAKkE,GAAejO,SAAQ,SAAUlH,GAC3C,GAAImV,EAAcnV,GAAKqV,QAAS,CAC9B,IAAI3V,EAAQ,GACZyV,EAAcnV,GAAKqV,QAAQnO,SAAQ,SAAU/G,GAC3CT,GAASS,EAAOT,MAAQ,OAE1B0V,EAAOtI,KAAK,CAAC9M,IAAKA,EAAKN,MAAOA,SAE9B0V,EAAOtI,KAAK,CAAC9M,IAAKA,EAAKN,MAAOyV,EAAcnV,GAAKN,WAG9C0V,O,gCAzE+BxJ,K,sOAArBgJ,G,OACqB,CACtCU,MAAO,QACPC,UAAW,YACXC,IAAK,Q,GAJYZ,G,qBAOmC,CACpDU,MAAO,QACPG,aAAc,eACdC,aAAc,eACdC,KAAM,S,ICJWC,G,WAanB,WAAYvO,I,4FAAgB,S,6GAAA,kBAVX,IAWfvG,KAAKmN,SAAWnN,KAAKqR,cAAc9K,GACnCvG,KAAK+U,SAAWxO,EAAOyO,Q,2CATvB,MAAO,Y,0CAoCKzO,GACZ,IAAMqK,EAASH,EAAiBjS,MAC1B2O,EAAkC,GAGxC,OAFAA,EAASnB,KAAK0F,EAAgBlT,IAAIoS,EAAO5M,WAAYuC,EAAOiJ,GAAIjJ,EAAOyO,QAASzO,EAAOjD,qBACvF6J,EAASnB,KAAK0F,EAAgBuD,mBAAmBrE,EAAO5M,WAAYuC,EAAOiJ,GAAIjJ,EAAOyO,QAASzO,EAAO1D,KAAM0D,EAAO2O,kBAC5G/H,I,gCASP,QAASnN,KAAK+U,W,6BAtCH5H,GACXnN,KAAKwR,UAAYrE,G,eAIjB,OAAOnN,KAAKwR,Y,6BAGDvM,GACXjF,KAAKyR,UAAU0D,gBAAkB,IAAIrB,GAAa7O,EAAS,GAAGlF,MAC9DC,KAAKyR,UAAU2D,sBAAwB,IAAIjC,GAAuBlO,EAAS,GAAGlF,O,eAI9E,OAAOC,KAAKyR,c,4OCpCK4D,G,WAanB,WAAY9O,I,4FAAgB,S,6GAAA,kBAVX,CAAC+O,cAAe,CAACC,QAAS,MAWzCvV,KAAKmN,SAAWnN,KAAKqR,cAAc9K,GACnCvG,KAAKwV,SAAWjP,EAAOgP,Q,2CATvB,MAAO,iB,0CAqCKhP,GACZ,IAAMqK,EAASH,EAAiBjS,MAC1B2O,EAAkC,GAKxC,OAJA5G,EAAOgP,QAAQnP,SAAQ,SAAAqP,GACrB,IAAMnS,EAAqBmS,EAAMnS,oBAAsBwQ,GAAa4B,mBAAmBlB,MACvFrH,EAASnB,KAAK0F,EAAgBlT,IAAIoS,EAAO5M,WAAYuC,EAAOiJ,GAAIiG,EAAMT,SAAWS,EAAOnS,OAEnF6J,I,gCASP,SAAUnN,KAAKwV,WAAYxV,KAAKwV,SAAS3N,U,6BAzC9BsF,GACXnN,KAAKwR,UAAYrE,G,eAIjB,OAAOnN,KAAKwR,Y,6BAGDvM,GAAe,WAC1BA,EAASmB,SAAQ,SAAAuP,GACf,EAAKlE,UAAU6D,cAAcC,QAAQvJ,KAAK,CAACmJ,gBAAiB,IAAIrB,GAAa6B,EAAK5V,Y,eAKpF,OAAOC,KAAKyR,c,4DCrCKmE,GAWnB,WAAY7V,I,4FAAc,SACxBC,KAAKwE,IAAMzE,EAAKyE,K,wSCIpB,IAEMqR,IAAoD,SACvD/B,GAAahR,KAAK0R,OADqC,SAErDrB,GAAuBrQ,KAAK4Q,SAAU,iBAAO,CAAC7Q,KAAML,KAAWM,KAAKS,QAFf,MAGrD4P,GAAuBrQ,KAAK+Q,UAAW,SAAAiC,GACtC,OAAIC,SAASD,EAAeE,aAAe,GANX,qBAMgBF,EAAe/K,WACtD,CAAClI,KAAML,KAAWM,KAAKU,KAAML,UAAW,GAE1C,CAACN,KAAML,KAAWM,KAAKS,QAPsB,WAUvDuQ,GAAahR,KAAK4R,KAVqC,SAWrDvB,GAAuBrQ,KAAK6Q,SAAU,iBAAO,CAAC9Q,KAAML,KAAWM,KAAKS,QAXf,MAYrD4P,GAAuBrQ,KAAK8Q,YAAa,iBAAO,CAAC/Q,KAAML,KAAWM,KAAKU,KAAML,UAAW,MAZnC,WAcvD2Q,GAAahR,KAAK2R,UAdqC,MAerDtB,GAAuBrQ,KAAK+Q,UAAW,iBAAO,CAAChR,KAAML,KAAWM,KAAKS,SAfhB,IAmBrC0S,G,0LAYEC,EAAoBC,GACvC,IAAMC,EAAa,IAAI5T,KACvByT,EAAkBI,cAAcD,EAAYF,EAAeC,GAC3D,IAAMjB,EAAkBgB,EAAcd,sBAChCkB,EAAaJ,EAAcf,gBAC3BoB,EAAiBrB,EAAgBvS,QACjC6T,EAAyBP,EAAkBQ,wBAAwBF,EAAgBJ,EAAYO,SACrGN,EAAWzT,QAAUsT,EAAkBU,kBAAkBH,GACzD,IAAMI,EAAWX,EAAkBY,cAAcP,EAAWvW,KAAMoW,EAAYW,UAAWX,EAAYY,aAOrG,OANAX,EAAWvT,KAAO+T,EAAS/T,KAC3BuT,EAAWjT,UAAYyT,EAASzT,UAChCiT,EAAWlT,SAAW8T,KAAKC,IAAIzP,MAC7BwP,KACAT,EAAe1D,KAAI,SAAA/G,GAAM,OAAIA,EAAO5I,aAE/BkT,I,mCAYWc,EAAuBC,GACzC,IAAMC,EAAY,IAAIhH,KAQtB,OAPsB8G,EAAiB5B,cAAcC,QACvCnP,SAAQ,SAAAqP,GACpB,IAAMW,EAAa,IAAI5T,KACjB2T,EAAcgB,EAAe1D,MAAK,SAAA4D,GAAY,OAAIA,EAAarC,UAAYS,EAAMN,gBAAgBnS,MACvGiT,EAAkBI,cAAcD,EAAYX,EAAOU,GACnDiB,EAAU/G,MAAMrE,KAAKoK,MAEhBgB,I,gCAWQlB,GACf,IACMoB,EADkBpB,EAAcd,sBACI/B,QAAQI,MAChD,SAAA8D,GAAM,OAAIA,EAAOtE,eAAiBD,EAAiCwE,aAAatE,eAElF,GAAIoE,EACF,OAAO,IAAI1B,GAAO0B,K,oCAIDlB,EAAwBF,EAAoBC,GAC/D,IAAMG,EAAaJ,EAAcf,gBAC3BsC,EAAWxB,EAAkByB,oBAAoBpB,GAOvD,OANAmB,EAAS1D,YAAcuC,EAAWvC,YAClC0D,EAASvZ,KAAOoY,EAAWpY,KACvBiY,GAAeA,EAAYW,YAAWW,EAASX,UAAYX,EAAYW,WAC3EV,EAAW3T,SAAWgV,EACtBrB,EAAW/S,OAAS4S,EAAkB0B,WAAWrB,EAAWnC,UAC5DiC,EAAWpT,GAAKsT,EAAWtT,GACpBoT,I,0CAQkBE,GAKzB,MAJiB,CACftC,MAAOiC,EAAkB2B,gBAAgBtB,EAAWtC,OACpDE,KAAM+B,EAAkB2B,gBAAgBtB,EAAWpC,S,sCAUhC2D,GACrB,IAAIC,EAAc,GAMlB,OALID,GACFA,EAAKzR,SAAQ,SAAAuP,GACXmC,EAAYnC,EAAKzW,KAAOyW,EAAK/W,SAG1BkZ,I,iCASS3D,GAChB,GAAIA,GAAYA,EAAStM,OAAS,EAAG,CACnC,IACMrD,EADS2P,EAAS,GACL3P,IAGnB,MADc,gEACJuT,KAAKvT,GACNA,EAEF2P,EAAStB,KAAI,SAAAmF,GAAG,MAAK,CAACxT,IAAKwT,EAAIxT,IAAK6H,MAAO2L,EAAI3L,MAAOC,OAAQ0L,EAAI1L,WAE3E,MAAO,K,oCAWYwJ,EAAwBgB,EAAmBC,GAC9D,IAAIH,EAAW,CAAC/T,KAAML,KAAWM,KAAKC,SAItC,OAHI8S,GAAsBiB,IAAcjB,GAAsBiB,GAAWC,KACvEH,EAAWf,GAAsBiB,GAAWC,GAAajB,IAEpDc,I,8CAUsBL,EAA8CG,GAI3E,OAHIA,EAAQ7O,OAAS,IACnB0O,EAAiBA,EAAe7P,QAAO,SAAAoF,GAAM,OAAI4K,EAAQuB,SAASnM,EAAOjJ,UAEpE0T,I,wCAYgBA,GACvB,IAAM5T,EAAU,IAAIC,KACdsV,EAAoB,SAACpM,GACzB,IAAMqM,EAAelC,EAAkBmC,qBAAqBtM,GAC5D,GAAIqM,EAAc,CAChB,IAAMtN,EAAeH,KAAsBlM,IAAIsN,EAAO0G,QACtD7P,EAAQkQ,IAAIsF,EAActN,KAa9B,OAJI0L,GAAkBA,EAAe1O,OAAS,IAL5C0O,EAAe7P,QAAO,SAAAoF,GAAM,OAAKnB,aAAoBmB,EAAO0G,WAASpM,QAAQ8R,GAG7E3B,EAAe7P,QAAO,SAAAoF,GAAM,OAAInB,aAAoBmB,EAAO0G,WAASpM,QAAQ8R,IAMvEvV,I,2CAWmB0V,GAC1B,IAAMC,EAAc,IAAIpM,KACxB,GAAImM,EAAe,CACjB,IAAME,EAAUF,EAAc7T,IACxBuH,EAAcrB,KAAsBlM,IAAI6Z,EAAc7F,QAI5D,GAHIzG,IACFuM,EAAYnM,SAAWJ,EAAY3B,WAEhCmO,EAIH,OAHAtC,EAAkB7V,QAAQC,MAA1B,qEACgEgY,EAAc1F,OAD9E,cAC0F0F,EAAc7F,OADxG,MAGO,KAIT,GAFA8F,EAAY9T,IAAM+T,EAClBD,EAAYtV,GAAKqV,EAAc1F,OAAS,IAAM0F,EAAc7F,OACxD6F,EAAcG,aAAc,CAC9B,IAAMC,EAAwB,GAC9BJ,EAAcjN,IAAIhF,SAAQ,SAAAgF,GACxBqN,EAAUzM,KAAK,IAAI6C,KAAIzD,EAAIE,WAAYH,IAA6BuN,OAAOtN,EAAIC,QAASD,EAAIG,iBAE9F+M,EAAY/L,QAAUkM,GAG1B,OAAOH,I,qCAGarT,GACpB,OAAOA,EAASmQ,sBAAsBuD,mB,qCAGlB1T,GACpB,OAAOA,EAASmQ,sBAAsB5B,mB,uCAGhBvO,GACtB,OAAOA,EAASmQ,sBAAsBwD,uB,8CA1OrB3C,G,UACFxU,YAAU,sB,suCC1BRoX,G,wQAMnB,WAAYzP,EAAgC4F,GAAuB,a,4FAAA,UACjE,cAAM5F,EAAS4F,IACV5O,QAAUqB,YAAU,eACzBgP,EAAiBzD,IAAI5D,EAAQ0P,KAC7B,EAAKnM,oBAAsBtO,OAAO0I,OAAO,EAAK4F,oBAAqBvD,EAAQ2P,wBAJV,E,oDAYpDnJ,GAA2E,WAMxF,OALIA,EAAUJ,KACZxP,KAAKwP,GAAKI,EAAUJ,GACpBxP,KAAKuP,cAAe,GAEtBvP,KAAKgZ,YAAc,IAAIhI,EAAqBhR,KAAKkP,UAAWlP,KAAKwP,GAAIxP,KAAK2M,qBACnE,IAAIvI,SAAQ,SAACC,EAASC,GAC3B,IAAM0Q,EAAUpF,EAAUoF,QAC1B,GAAIA,EAAS,CACX,IAAIxF,EAAa,EAAKA,GACjBA,IACHA,EAAK,gBACL,EAAKwJ,YAAY5L,IAAIgE,EAAkB,CAAClC,UAAW,EAAKA,aAE1D,IAAM6H,EAAcnH,EAAUmH,aAAe5D,GAAuBrQ,KAAK+Q,SACnEiD,EAAYlH,EAAUkH,WAAahD,GAAahR,KAAK0R,MACrDlR,EAAqBsM,EAAUtM,oBAAsBwQ,GAAa4B,mBAAmBlB,MACrFU,EAAkB,CACtB+D,cAAerJ,EAAUkD,SACzBoG,aAActJ,EAAUuJ,QACxBjX,QAAS6U,GAEX,EAAKiC,YAAY5L,IAAI0H,GAAgB,CACnCE,QAASA,EACTxF,GAAIA,EACJ3M,KAAMiU,EACN5B,gBAAiBA,EACjB5R,mBAAoBA,IAEtB,IAAM6S,EAAc,CAClBY,YAAaA,EACbD,UAAWA,EACXJ,QAAS9G,EAAU8G,SAAW,IAEhC,OAAO,EAAKsC,YAAYI,YAAYzL,MAClC,SAAA1I,GACE,IACEZ,EAAQ,EAAKgV,uBAAuBpU,EAAUkR,IAC9C,MAAOpI,GACPzJ,EAAOyJ,OAGX,SAAAA,GACEzJ,EAAOyJ,MAIXzJ,EAAO,IAAI3E,KAAMA,KAAM8E,SAASlE,SAAUZ,KAAM+E,SAAShE,SAAUf,KAAMgF,KAAKrD,yBAA0B,CAAC4J,QAAS,2B,6CAKjGnL,EAA6BoW,GAClDnW,KAAKI,QAAQsI,MAAM,wBACnB,IAAM4Q,EAAyC,CAC7CC,QAAS,CACPC,YAAaxZ,KAAKuP,aAClBL,UAAWlP,KAAKkP,WAElBvM,QAAS3C,KAAKyZ,2BACdpG,QAAS,IAKX,GAHIrT,KAAKsP,WACPgK,EAAYC,QAAQjK,SAAWtP,KAAKsP,UAElCvP,EAAM,CACR,GAAIA,EAAK2Z,IAAItI,EAAiBpO,IAAK,CACjC,IAAM2W,EAAgB5Z,EAAKvB,IAAI4S,EAAiBpO,IAC5C2W,GAAiBA,EAAc1U,WACjCqU,EAAYC,QAAQ/J,GAAKmK,EAAc1U,eAGzCqU,EAAYC,QAAQ/J,GAAKxP,KAAKwP,GAEhC,GAAIzP,EAAK2Z,IAAI5E,GAAe9R,IAAK,CAC/B,IAAM4W,EAAc7Z,EAAKvB,IAAIsW,GAAe9R,IAC5C,GAAI4W,GAAeA,EAAY3U,UAAY5G,OAAO8R,KAAKyJ,EAAY3U,UAAU4C,OAAQ,CACnF,IAAM5C,EAAY2U,EAA6B3U,SAC/C,GAAIgR,GAAkB0C,eAAe1T,GACnC,MAAM,IAAItF,KAAMA,KAAM8E,SAASlE,SAAUZ,KAAM+E,SAASjE,QAASd,KAAMgF,KAAKvD,aAAc,CACxF8C,OAAQ+R,GAAkBzC,eAAevO,GACzChD,SAAUgU,GAAkB2C,iBAAiB3T,KAGjD,IAAMmR,EAAaH,GAAkB4D,cAAc5U,EAAUkR,GAC7D9X,OAAO0I,OAAOuS,EAAY3W,QAAS3C,KAAK8Z,kBAAkB1D,IAC1DpW,KAAK+Z,kBAAkBT,EAAY3W,SACnC,IAAM4U,EAAStB,GAAkB+D,UAAU/U,GACvCsS,GACFlZ,OAAO0I,OAAOuS,EAAYjG,QAAS,CAACkE,aAM5C,OADAvX,KAAKI,QAAQsI,MAAM,wBAAyB4Q,GACrCA,I,yCAQUxJ,GAAyE,WAM1F,OALIA,EAAcN,KAChBxP,KAAKwP,GAAKM,EAAcN,GACxBxP,KAAKuP,cAAe,GAEtBvP,KAAKgZ,YAAc,IAAIhI,EAAqBhR,KAAKkP,UAAWlP,KAAKwP,GAAIxP,KAAK2M,qBACnE,IAAIvI,SAAQ,SAACC,EAASC,GAC3B,IAAMiR,EAAUzF,EAAcyF,QAC9B,GAAIA,GAAWA,EAAQ1N,OAAQ,CAC7B,IAAI2H,EAAa,EAAKA,GACjBA,IACHA,EAAK,gBACL,EAAKwJ,YAAY5L,IAAIgE,EAAkB,CAAClC,UAAW,EAAKA,aAE1D,EAAK8J,YAAY5L,IAAIiI,GAAoB,CAACE,UAAS/F,OACnD,EAAKwJ,YAAYI,YAAYzL,MAC3B,SAAA1I,GACEZ,EAAQ,EAAK4V,gCAAgChV,EAAUsQ,OAEzD,SAAAxH,GACEzJ,EAAOyJ,WAIXzJ,EAAO,CAACwJ,SAAS,EAAO/N,KAAM,qC,sDAKJA,EAA6BoX,GAAwE,WACnInX,KAAKI,QAAQsI,MAAM,wBACnB,IAAMwR,EAAyC,CAC7ClX,GAAI,GACJP,SAAU,CACRvE,KAAM,GACN6V,YAAa,IAEf1Q,OAAQ,GACRgN,MAAO,IAET,GAAItQ,GAAQA,EAAK2Z,IAAIrE,GAAmBrS,IAAK,CAC3C,IAAMmX,EAAiBpa,EAAKvB,IAAI6W,GAAmBrS,IAC/CmX,GAAkBA,EAAelV,UACjBgR,GAAkBmE,aAAaD,EAAelV,SAAUkS,GAChE9G,MAAMjK,SAAQ,SAAAzI,GAAC,OAAIuc,EAAe7J,MAAMrE,KAAK,CAACrJ,QAAS,EAAKmX,kBAAkBnc,QAI5F,OADAqC,KAAKI,QAAQsI,MAAM,wBAAyBwR,GACrCA,I,iDAIP,MAAO,CACLrO,IAAK,GACLD,KAAM,GACND,YAAa,GACb3I,GAAI,GACJE,SAAU,EACVL,KAAML,KAAWM,KAAKC,QACtBM,OAAQ,GACRgX,KAAK,EACLC,GAAI,KACJ7X,SAAU,CACRvE,KAAM,GACN6V,YAAa,GACbG,KAAM,O,wCAKMkC,GAChB,IAAMmE,EAAkDva,KAAKyZ,2BACvDe,EAAepE,EAAWzT,QAAQM,SAkBxC,OAjBAsX,EAAc1O,IAAM2O,EAAa3O,IACjC0O,EAAc3O,KAAO4O,EAAa5O,KAClC2O,EAAc5O,YAAc6O,EAAa7O,YACzC4O,EAAcvX,GAAKoT,EAAWpT,GAC9BuX,EAAcrX,SAAWkT,EAAWlT,SACpCqX,EAAc1X,KAAOuT,EAAWvT,KAChC0X,EAAcF,MAAQjE,EAAWjT,UACjCoX,EAAclX,OAAS+S,EAAW/S,OAEhC+S,EAAW3T,UACX2T,EAAW3T,SAASuR,OACsB,iBAAnCoC,EAAW3T,SAASuR,MAAME,MACjCkC,EAAW3T,SAASuR,MAAME,KAAKrN,QAAQ,QAAU,IAEjD0T,EAAcD,GAAK,IAErBjc,OAAO0I,OAAOwT,EAAc9X,SAAU2T,EAAW3T,UAC1C8X,O,gCAnN8BxL,KCNnC0L,GAAOC,2BACPtT,GAAUuT,SAEVC,GAAczH,GAAuBrQ,KACrC+X,GAAY/G,GAAahR","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 = 18);\n","//@flow\nimport getLogger, {getLogLevel, LogLevel} 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 if (getLogLevel(CLASS_NAME) !== LogLevel.OFF) {\n Error._logger.error(`Category:${category} | Code:${code} |`, data);\n }\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 * as JsLogger from 'js-logger';\n\nexport type LogLevelObject = {value: number, name: string};\nexport type LogLevelType = {[level: string]: LogLevelObject};\n\nconst LogLevel: LogLevelType = {\n DEBUG: JsLogger.DEBUG,\n INFO: JsLogger.INFO,\n TIME: JsLogger.TIME,\n WARN: JsLogger.WARN,\n ERROR: JsLogger.ERROR,\n OFF: JsLogger.OFF\n};\n\nJsLogger.useDefaults({defaultLevel: JsLogger.ERROR});\n\n/**\n * sets the logger handler\n * @param {LogHandlerType} handler - the log level\n * @returns {void}\n */\nfunction setLogHandler(handler: LogHandlerType): void {\n JsLogger.setHandler((messages, context) => handler(messages, context));\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 if (!name) {\n return JsLogger;\n }\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 {LogLevel, getLogLevel, setLogLevel, setLogHandler};\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\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}\n */\n poster: string | Array;\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\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}\n */\n headers: Map;\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}\n */\n responseHeaders: Array;\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} headers The request headers\n */\n constructor(headers: Map = 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.} Service response as promise\n */\n doHttpRequest(): Promise {\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 {\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","/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.6.0\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.TRACE = defineLogLevel(1, 'TRACE');\r\n\tLogger.DEBUG = defineLogLevel(2, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(3, 'INFO');\r\n\tLogger.TIME = defineLogLevel(4, 'TIME');\r\n\tLogger.WARN = defineLogLevel(5, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\ttrace: function () {\r\n\t\t\tthis.invoke(Logger.TRACE, arguments);\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.trace = bind(globalLogger, globalLogger.trace);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t} else if (context.level === Logger.TRACE && console.trace) {\r\n\t\t\t\t\thdlr = console.trace;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(Logger);\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\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 = 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 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 default 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\nimport MediaSource from './media-source';\nimport {MediaFormat} from './media-format';\n\nexport default class MediaSources {\n /**\n * Progressive download media sources container.\n * @type {Array}\n * @public\n */\n progressive: Array;\n /**\n * Dash media sources container.\n * @type {Array}\n * @public\n */\n dash: Array;\n /**\n * Hls media sources container.\n * @type {Array}\n * @public\n */\n hls: Array;\n captions: Array;\n\n /**\n * @constructor\n */\n constructor() {\n this.progressive = [];\n this.dash = [];\n this.hls = [];\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 };\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 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}\n */\n drmData: Array;\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>}\n * @private\n */\n _loadersResponseMap: Map> = 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}\n * @private\n */\n _loaders: Map = new Map();\n\n _networkRetryConfig: ProviderNetworkRetryParameters;\n\n constructor(networkRetryConfig: ProviderNetworkRetryParameters) {\n this._networkRetryConfig = networkRetryConfig;\n }\n\n /**\n * Add loader too execution loaders map\n * @function\n * @param {Function} loader Loader to add\n * @param {Object} params Loader params\n * @returns {void}\n */\n add(loader: Function, params: Object): 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 muktiRequest queue\n requests.forEach(request => {\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 * @function\n * @returns {Promise} Promise\n */\n fetchData(): Promise {\n return new Promise((resolve, reject) => {\n this._multiRequest.execute().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}\n */\n requests: Array = [];\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 * @returns {Promise} The multirequest execution promise\n */\n execute(): Promise {\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);\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 = [];\n /**\n * @constructor\n * @param {Object} response data\n */\n constructor(response: Object) {\n this.success = true;\n const responseArr = response.result ? response.result : response;\n responseArr.forEach(result => {\n const serviceResult: ServiceResult = new ServiceResult(result);\n this.results.push(serviceResult);\n if (serviceResult.hasError) {\n MultiRequestResult._logger.error(\n `Service returned an error with error code: ${serviceResult.error.code} and message: ${serviceResult.error.message}.`\n );\n this.success = false;\n return;\n }\n });\n }\n}\n","//@flow\nexport default 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\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\nimport {setLogLevel, getLogLevel, LogLevel, setLogHandler} from '../../util/logger';\nimport DataLoaderManager from './data-loader-manager';\nimport Error from '../../util/error/error';\n\nexport default class BaseProvider {\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 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 if (options.log && options.log.level && this.LogLevel[options.log.level]) {\n setLogLevel(this.LogLevel[options.log.level]);\n }\n if (options.log && typeof options.log.handler === 'function') {\n setLogHandler(options.log.handler);\n }\n }\n\n // eslint-disable-next-line no-unused-vars\n getMediaConfig(mediaInfo: MI): Promise {\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 {\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 {\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).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(): {[level: string]: Object} {\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}\n */\n items: Array;\n\n constructor() {\n this.items = [];\n }\n}\n","//@flow\nimport {clone} from '../../util/clone';\n\nconst defaultConfig: Object = {\n serviceParams: {\n apiVersion: '5.2.6'\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 = 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 = 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;\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) {\n this._requests = requests;\n }\n\n get requests(): Array {\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 {\n const config = OTTConfiguration.get();\n const requests: Array = [];\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 = 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 = 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 = [];\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 = 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 TRAILER: 'TRAILER',\n CATCHUP: 'CATCHUP',\n START_OVER: 'START_OVER',\n PLAYBACK: 'PLAYBACK'\n };\n /**\n * @member - The playback sources\n * @type {Array}\n */\n sources: Array = [];\n /**\n * @member - Array of actions as received from the rules that invalidated\n * @type {Array}\n */\n actions: Array = [];\n /**\n * @member - Array of access control massages\n * @type {Array}\n */\n messages: Array = [];\n /**\n * @member - Array of bumper plugins\n * @type {Array}\n */\n plugins: Array = [];\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 {\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 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}\n */\n tags: Array = [];\n /**\n * @member - The asset metas\n * @type {Array}\n */\n metas: Array = [];\n /**\n * @member - The asset images\n * @type {Array}\n */\n pictures: Array = [];\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.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 {\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;\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) {\n this._requests = requests;\n }\n\n get requests(): Array {\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 {\n const config = OTTConfiguration.get();\n const requests: Array = [];\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;\n _requests: Array;\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) {\n this._requests = requests;\n }\n\n get requests(): Array {\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 {\n const config = OTTConfiguration.get();\n const requests: Array = [];\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\n\nexport default class Bumper {\n /**\n * @member - bumper url\n * @type {string}\n */\n url: string;\n\n /**\n * @constructor\n * @param {Object} data - The bumper response\n */\n constructor(data: Object) {\n this.url = data.url;\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 (parseInt(mediaAssetData.externalIds) > 0 || mediaAssetData.objectType === LIVE_ASST_OBJECT_TYPE) {\n return {type: MediaEntry.Type.LIVE, dvrStatus: 0};\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: 1})\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} requestEntries - entries list\n * @returns {Playlist} - The entry list\n * @static\n * @public\n */\n static getEntryList(playlistResponse: any, requestEntries: Array): 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 (requestData && requestData.mediaType) metaData.mediaType = requestData.mediaType;\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} list a list of objects\n * @returns {Object} an mapped object of the arrayed list.\n */\n static addToMetaObject(list: Array): 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} pictures - Media pictures.\n * @returns {string | Array} - Poster base url or array of poster candidates.\n * @private\n */\n static _getPoster(pictures: Array): string | Array {\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} kalturaSources - The kaltura sources.\n * @param {Array} formats - Partner device formats.\n * @returns {Array} - Filtered kalturaSources array.\n * @private\n */\n static _filterSourcesByFormats(kalturaSources: Array, formats: Array): Array {\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} 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): 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 = [];\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 {\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 {\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 /**\n * Gets the backend media config.\n * @param {OTTProviderMediaInfoObject} mediaInfo - ott media info\n * @returns {Promise} - The provider media config\n */\n getMediaConfig(mediaInfo: OTTProviderMediaInfoObject): Promise {\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 = {\n mediaProtocol: mediaInfo.protocol,\n assetFileIds: mediaInfo.fileIds,\n context: contextType\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, 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 playlist config from entry list.\n * @param {ProviderEntryListObject} entryListInfo - ott entry list info\n * @returns {Promise} - The provider playlist config\n */\n getEntryListConfig(entryListInfo: ProviderEntryListObject): Promise {\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().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, requestEntries: Array): 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 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":""} \ No newline at end of file diff --git a/dist/playkit-ovp-provider.js b/dist/playkit-ovp-provider.js index 9cc6b3ae..89f79c51 100644 --- a/dist/playkit-ovp-provider.js +++ b/dist/playkit-ovp-provider.js @@ -1,7 +1,7 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ovp=t():(e.playkit=e.playkit||{},e.playkit.providers=e.playkit.providers||{},e.playkit.providers.ovp=t())}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=50)}([function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:new Map;r(this,e),this._attemptCounter=1,this.headers=t}return o(e,[{key:"getUrl",value:function(e){return e+"/service/"+this.service+(this.action?"/action/"+this.action:"")}},{key:"doHttpRequest",value:function(){var e=this,t=new Promise(function(t,n){e._requestPromise={resolve:t,reject:n}});return this.url||this._requestPromise.reject(new i.default(i.default.Severity.CRITICAL,i.default.Category.NETWORK,i.default.Code.MALFORMED_DATA_URI,{url:this.url})),this._createXHR(),t}},{key:"_createXHR",value:function(){var e=this,t=new XMLHttpRequest;t.onreadystatechange=function(){if(4===t.readyState&&200===t.status)try{var n=JSON.parse(t.responseText);return e.responseHeaders=e._getResponseHeaders(t),e._requestPromise.resolve(n)}catch(n){e._requestPromise.reject(e._createError(t,i.default.Code.BAD_SERVER_RESPONSE,{text:t.responseText}))}},t.open(this.method,this.url,this.retryConfig.async),this.retryConfig.async&&this.retryConfig.timeout&&(t.timeout=this.retryConfig.timeout);var n=performance.now();t.ontimeout=function(){e._handleError(t,i.default.Code.TIMEOUT,{timeout:(performance.now()-n)/1e3,statusText:t.statusText})},t.onerror=t.onabort=function(){e._handleError(t,i.default.Code.HTTP_ERROR,{text:t.responseText,statusText:t.statusText})},this.headers.forEach(function(e,n){t.setRequestHeader(n,e)}),t.send(this.params)}},{key:"_getResponseHeaders",value:function(e){return e.getAllResponseHeaders().split("\n").filter(function(e){return 0===e.toLowerCase().indexOf("x-")})}},{key:"_handleError",value:function(e,t,n){var r=this._createError(e,t,n);if(e.onreadystatechange=function(){},e.onerror=function(){},e.ontimeout=function(){},e.onabort=function(){},!(this.retryConfig.maxAttempts&&this._attemptCounter3&&void 0!==arguments[3]?arguments[3]:{};r(this,e),this.severity=t,this.category=n,this.code=a,this.data=i,(0,o.getLogLevel)("Error")!==o.LogLevel.OFF&&e._logger.error("Category:"+n+" | Code:"+a+" |",i)};l.Severity=i.Severity,l.Category=u.Category,l.Code=s.Code,l._logger=(0,a.default)("Error"),t.default=l},function(e,t,n){"use strict";function r(e){u.setHandler(function(t,n){return e(t,n)})}function o(e){return e?u.get(e):u}function a(e){return o(e).getLevel()}function i(e,t){o(t).setLevel(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.setLogHandler=t.setLogLevel=t.getLogLevel=t.LogLevel=void 0;var s=n(27),u=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}(s),l={DEBUG:u.DEBUG,INFO:u.INFO,TIME:u.TIME,WARN:u.WARN,ERROR:u.ERROR,OFF:u.OFF};u.useDefaults({defaultLevel:u.ERROR}),t.default=o,t.LogLevel=l,t.getLogLevel=a,t.setLogLevel=i,t.setLogHandler=r},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function e(t){r(this,e),this.hasError=!1,"KalturaAPIException"===t.objectType?(this.hasError=!0,this.error=new a(t.code,t.message)):t.error&&"KalturaAPIException"===t.error.objectType?(this.hasError=!0,this.error=new a(t.error.code,t.error.message)):this.data=t};t.default=o;var a=function e(t,n){r(this,e),this.code=t,this.message=n}},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&(e.drmData=[],this.drmData.forEach(function(t){Array.isArray(e.drmData)&&e.drmData.push(t.toJSON())})),e}}]),e}());t.default=i},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n0&&(n.response=e.results.slice(o[0],o[o.length-1]+1))}catch(e){return{success:!1,error:e}}}),{success:!0,data:this._loaders}}}]),e}();t.default=l},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.MultiRequestResult=void 0;var u=function(){function e(e,t){for(var n=0;n0?t.slice(0):[],n.forEach(function(t,o){("object"===(void 0===t?"undefined":r(t))&&t!=={}||Array.isArray(t)&&t.length>0)&&(n[o]=e(t))})):"object"===(void 0===t?"undefined":r(t))?(n=Object.assign({},t),Object.keys(n).forEach(function(t){("object"===r(n[t])&&n[t]!=={}||Array.isArray(n[t])&&n[t].length>0)&&(n[t]=e(n[t]))})):n=t,n};t.clone=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={NETWORK:1,SERVICE:2,PROVIDER:3};t.Category=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={UNSUPPORTED_SCHEME:1e3,BAD_HTTP_STATUS:1001,HTTP_ERROR:1002,TIMEOUT:1003,MALFORMED_DATA_URI:1004,BAD_SERVER_RESPONSE:1005,MULTIREQUEST_API_ERROR:1006,API_RESPONSE_MISMATCH:1007,ERROR:2e3,BLOCK_ACTION:2001,MEDIA_STATUS_NOT_READY:2002,MISSING_MANDATORY_PARAMS:3e3,MISSING_PLAY_SOURCE:3001,METHOD_NOT_IMPLEMENTED:3002};t.Code=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={RECOVERABLE:1,CRITICAL:2};t.Severity=r},function(e,t,n){var r,o;/*! +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ovp=e():(t.playkit=t.playkit||{},t.playkit.providers=t.playkit.providers||{},t.playkit.providers.ovp=e())}(window,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=17)}([function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var r=n(1);function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var a=function t(e,n,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};o(this,t),this.severity=e,this.category=n,this.code=i,this.data=a,Object(r.c)("Error")!==r.a.OFF&&t._logger.error("Category:".concat(n," | Code:").concat(i," |"),a)};i(a,"Severity",{RECOVERABLE:1,CRITICAL:2}),i(a,"Category",{NETWORK:1,SERVICE:2,PROVIDER:3}),i(a,"Code",{UNSUPPORTED_SCHEME:1e3,BAD_HTTP_STATUS:1001,HTTP_ERROR:1002,TIMEOUT:1003,MALFORMED_DATA_URI:1004,BAD_SERVER_RESPONSE:1005,MULTIREQUEST_API_ERROR:1006,API_RESPONSE_MISMATCH:1007,ERROR:2e3,BLOCK_ACTION:2001,MEDIA_STATUS_NOT_READY:2002,MISSING_MANDATORY_PARAMS:3e3,MISSING_PLAY_SOURCE:3001,METHOD_NOT_IMPLEMENTED:3002}),i(a,"_logger",Object(r.b)("Error"))},function(t,e,n){"use strict";n.d(e,"a",(function(){return o})),n.d(e,"c",(function(){return s})),n.d(e,"e",(function(){return u})),n.d(e,"d",(function(){return i}));var r=n(4),o={DEBUG:r.DEBUG,INFO:r.INFO,TIME:r.TIME,WARN:r.WARN,ERROR:r.ERROR,OFF:r.OFF};function i(t){r.setHandler((function(e,n){return t(e,n)}))}function a(t){return t?r.get(t):r}function s(t){return a(t).getLevel()}function u(t,e){a(e).setLevel(t)}r.useDefaults({defaultLevel:r.ERROR}),e.b=a},function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var r=n(8);function o(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:new Map;o(this,t),a(this,"retryConfig",{async:!0,timeout:0,maxAttempts:4}),a(this,"_attemptCounter",1),this.headers=e}var e,n,s;return e=t,(n=[{key:"getUrl",value:function(t){return t+"/service/"+this.service+(this.action?"/action/"+this.action:"")}},{key:"doHttpRequest",value:function(){var t=this,e=new Promise((function(e,n){t._requestPromise={resolve:e,reject:n}}));return this.url||this._requestPromise.reject(new r.a(r.a.Severity.CRITICAL,r.a.Category.NETWORK,r.a.Code.MALFORMED_DATA_URI,{url:this.url})),this._createXHR(),e}},{key:"_createXHR",value:function(){var t=this,e=new XMLHttpRequest;e.onreadystatechange=function(){if(4===e.readyState&&200===e.status)try{var n=JSON.parse(e.responseText);return t.responseHeaders=t._getResponseHeaders(e),t._requestPromise.resolve(n)}catch(n){t._requestPromise.reject(t._createError(e,r.a.Code.BAD_SERVER_RESPONSE,{text:e.responseText}))}},e.open(this.method,this.url,this.retryConfig.async),this.retryConfig.async&&this.retryConfig.timeout&&(e.timeout=this.retryConfig.timeout);var n=performance.now();e.ontimeout=function(){t._handleError(e,r.a.Code.TIMEOUT,{timeout:(performance.now()-n)/1e3,statusText:e.statusText})},e.onerror=e.onabort=function(){t._handleError(e,r.a.Code.HTTP_ERROR,{text:e.responseText,statusText:e.statusText})},this.headers.forEach((function(t,n){e.setRequestHeader(n,t)})),e.send(this.params)}},{key:"_getResponseHeaders",value:function(t){return t.getAllResponseHeaders().split("\n").filter((function(t){return 0===t.toLowerCase().indexOf("x-")}))}},{key:"_handleError",value:function(t,e,n){var r=this._createError(t,e,n);if(t.onreadystatechange=function(){},t.onerror=function(){},t.ontimeout=function(){},t.onabort=function(){},!(this.retryConfig.maxAttempts&&this._attemptCounter=t.value},debug:function(){this.invoke(i.DEBUG,arguments)},info:function(){this.invoke(i.INFO,arguments)},warn:function(){this.invoke(i.WARN,arguments)},error:function(){this.invoke(i.ERROR,arguments)},time:function(e){"string"==typeof e&&e.length>0&&this.invoke(i.TIME,[e,"start"])},timeEnd:function(e){"string"==typeof e&&e.length>0&&this.invoke(i.TIME,[e,"end"])},invoke:function(e,t){s&&this.enabledFor(e)&&s(t,c({level:e},this.context))}};var p=new d({filterLevel:i.OFF});!function(){var e=i;e.enabledFor=l(p,p.enabledFor),e.debug=l(p,p.debug),e.time=l(p,p.time),e.timeEnd=l(p,p.timeEnd),e.info=l(p,p.info),e.warn=l(p,p.warn),e.error=l(p,p.error),e.log=e.info}(),i.setHandler=function(e){s=e},i.setLevel=function(e){p.setLevel(e);for(var t in u)u.hasOwnProperty(t)&&u[t].setLevel(e)},i.getLevel=function(){return p.getLevel()},i.get=function(e){return u[e]||(u[e]=new d(c({name:e},p.context)))},i.createDefaultHandler=function(e){e=e||{},e.formatter=e.formatter||function(e,t){t.name&&e.unshift("["+t.name+"]")};var t={},n=function(e,t){Function.prototype.apply.call(e,console,t)};return"undefined"==typeof console?function(){}:function(r,o){r=Array.prototype.slice.call(r);var a,s=console.log;o.level===i.TIME?(a=(o.name?"["+o.name+"] ":"")+r[0],"start"===r[1]?console.time?console.time(a):t[a]=(new Date).getTime():console.timeEnd?console.timeEnd(a):n(s,[a+": "+((new Date).getTime()-t[a])+"ms"])):(o.level===i.WARN&&console.warn?s=console.warn:o.level===i.ERROR&&console.error?s=console.error:o.level===i.INFO&&console.info?s=console.info:o.level===i.DEBUG&&console.debug&&(s=console.debug),e.formatter(r,o),n(s,r))}},i.useDefaults=function(e){i.setLevel(e&&e.defaultLevel||i.DEBUG),i.setHandler(i.createDefaultHandler(e))},r=i,void 0!==(o="function"==typeof r?r.call(t,n,t,e):r)&&(e.exports=o)}()},,,,,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};r(this,e),this.type=t.type||e.Type.INCLUDE_FIELDS,this.fields=t.fields||"id,referenceId,name,description,thumbnailUrl,dataUrl,duration,msDuration,flavorParamsIds,mediaType,type,tags,dvrStatus,externalSourceType,status"};o.Type={INCLUDE_FIELDS:1,EXCLUDE_FIELDS:2},t.default=o},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=n(3),u=r(s),l=n(16),c=r(l),f=function(e){function t(e){o(this,t);var n=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.hasError||(n.totalCount=e.totalCount,n.totalCount>0&&(n.entries=[],e.objects.map(function(e){return n.entries.push(new c.default(e))}))),n}return i(t,e),t}(u.default);t.default=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=n(3),u=r(s),l=n(61),c=r(l),f=function(e){function t(e){o(this,t);var n=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.hasError||(n.totalCount=e.totalCount,n.totalCount>0&&(n.metas=[],e.objects.map(function(e){return n.metas.push(new c.default(e))}))),n}return i(t,e),t}(u.default);t.default=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n0}},{key:"hasFlavorIds",value:function(){return!!this.flavorIds&&this.flavorIds.length>0}},{key:"getProtocol",value:function(e){var t="";if(this.protocols&&this.protocols.length>0){this.protocols.split(",").forEach(function(n){n===e&&(t=n)})}else if("http"===e)return e;return t}}]),e}();t.default=s},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n-1&&(t.vr={}),Object.assign(t.metadata,e.metadata),t}}]),t}(P.default);t.default=A},,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=n(4),a=(function(e){e&&e.__esModule}(o),function e(){r(this,e),this.items=[]});t.default=a},,,,,,,,function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:"",i=arguments[3];o(this,t);var s=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,i));return s._multiRequest=c.default.getMultiRequest(e,r,n),s}return i(t,e),t}(u.default);t.default=f},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n0&&(function(){t.filter(function(e){return!(0,k.isProgressiveSource)(e.format)}).forEach(u)}(),function(){var u=t.find(function(t){return(0,k.isProgressiveSource)(t.format)&&""!==t.getProtocol(e._getBaseProtocol())});s.progressive=e._parseProgressiveSources(u,i,n,r,o,a.id)}()),s}},{key:"_parseAdaptiveSource",value:function(t,n,r,o,a,i){var s=new T.default;if(t){var u="",l=k.SupportedStreamFormat.get(t.format),c=t.getProtocol(e._getBaseProtocol()),f=t.deliveryProfileId,p=t.format,y="";if(l&&(y=l.pathExt,s.mimetype=l.mimeType),t.hasFlavorIds()?(!y&&n.flavorAssets&&n.flavorAssets.length>0&&(y=n.flavorAssets[0].fileExt),u=h.default.build({entryId:i,flavorIds:t.flavorIds,format:p,ks:r,partnerId:o,uiConfId:a,extension:y,protocol:c})):u=t.url,!u){var v="failed to create play url from source, discarding source: ("+i+"_"+f+"), "+p;return e._logger.warn(v),null}if(s.url=e._applyRegexAction(n,u),s.id=i+"_"+f+","+p,t.hasDrmData()){var _=[];t.drm.forEach(function(e){_.push(new I.default(e.licenseURL,d.default.Scheme[e.scheme],e.certificate))}),s.drmData=_}}return s}},{key:"_parseProgressiveSources",value:function(t,n,r,o,a,i){var s=[],u=[];if(t){var l=t.getProtocol(e._getBaseProtocol()),c=t.format,f=t.deliveryProfileId,d=f+","+c;n.flavorAssets.map(function(t){var p=new T.default;p.id=t.id+d,p.mimetype="mp3"===t.fileExt?"audio/mp3":"video/mp4",p.height=t.height,p.width=t.width,p.bandwidth=1024*t.bitrate,p.label=t.label||t.language;var y=h.default.build({entryId:i,flavorIds:t.id,format:c,ks:r,partnerId:o,uiConfId:a,extension:t.fileExt,protocol:l});if(""===y)return e._logger.warn("failed to create play url from source, discarding source: ("+i+"_"+f+"), "+c+"."),null;p.url=e._applyRegexAction(n,y),t.height&&t.width?s.push(p):u.push(p)})}return u.length&&!s.length?u:s}},{key:"_parseMetadata",value:function(e){var t={};return e&&e.metas&&e.metas.length>0&&e.metas.forEach(function(e){var n=void 0,r=new DOMParser;e.xml=e.xml.replace(/\r?\n|\r/g,""),e.xml=e.xml.replace(/>\s*/g,">"),e.xml=e.xml.replace(/>\s*/g,">"),n=r.parseFromString(e.xml,"text/xml");var o=v.default.xmlToJson(n);Object.keys(o.metadata).forEach(function(e){t[e]=o.metadata[e]["#text"]})}),t}},{key:"_getBaseProtocol",value:function(){var e=b.default.get(),t=/^https?:/,n=t.exec(e.cdnUrl),r=n?n[0]:document.location.protocol;return"string"==typeof r?r.slice(0,-1):"https"}},{key:"hasBlockAction",value:function(e){return e.playBackContextResult.hasBlockAction()}},{key:"getBlockAction",value:function(e){return e.playBackContextResult.getBlockAction()}},{key:"getErrorMessages",value:function(e){return e.playBackContextResult.getErrorMessages()}},{key:"_applyRegexAction",value:function(e,t){var n=e.getRequestHostRegexAction();if(n){var r=new RegExp(n.pattern,"i");if(t.match(r))return t.replace(r,n.replacement+"/")}return t}}]),e}();x._logger=(0,g.default)("OVPProviderParser"),t.default=x},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var i=n(22),s=function(e){return e&&e.__esModule?e:{default:e}}(i),u=function(e){function t(e){r(this,t);var n=o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.pattern=e.pattern,n.replacement=e.replacement,n.replacmenServerNodeId=e.replacmenServerNodeId,n}return a(t,e),t}(s.default);t.default=u},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function e(t){r(this,e),this.id=t.id,this.flavorParamsId=t.flavorParamsId,this.fileExt=t.fileExt,this.bitrate=t.bitrate,this.width=t.width,this.height=t.height,this.id=t.id,this.frameRate=t.frameRate,this.isOriginal=t.isOriginal,this.isWeb=t.isWeb,this.containerFormat=t.containerFormat,this.videoCodecId=t.videoCodecId,this.status=t.status,this.language=t.language,this.label=t.label};o.Status={ERROR:-1,QUEUED:0,CONVERTING:1,READY:2,DELETED:3,NOT_APPLICABLE:4,TEMP:5,WAIT_FOR_CONVERT:6,IMPORTING:7,VALIDATING:8,EXPORTING:9},t.default=o},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=n(3),u=r(s),l=n(16),c=r(l),f=function(e){function t(e){o(this,t);var n=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.hasError||(n.entries=[],e.map(function(e){return n.entries.push(new c.default(e))})),n}return i(t,e),t}(u.default);t.default=f},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function e(t){r(this,e),this.id=t.id,this.metadataProfileId=t.metadataProfileId,this.metadataProfileVersion=t.metadataProfileVersion,this.metadataProfileId=t.metadataProfileId,this.metadataObjectType=t.metadataObjectType,this.objectId=t.objectId,this.version=t.version,this.created=new Date(0),this.created.setUTCSeconds(t.createdAt),this.updated=new Date(0),this.updated.setUTCSeconds(t.updatedAt),this.status=t.status,this.xml=t.xml};o.ObjectType={AD_CUE_POINT:"adCuePointMetadata.AdCuePoint",ANNOTATION:"annotationMetadata.Annotation",CODE_CUE_POINT:"codeCuePointMetadata.CodeCuePoint",THUMB_CUE_POINT:"thumbCuePointMetadata.thumbCuePoint",ENTRY:1,CATEGORY:2,USER:3,PARTNER:4,DYNAMIC_OBJECT:5},o.Status={VALID:1,INVALID:2,DELETED:3},t.default=o},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function e(t){r(this,e),this.id=t.id,this.name=t.name,this.description=t.description,this.poster=t.thumbnailUrl};t.default=o},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n0){t["@attributes"]={};for(var n=0;n=e.value},trace:function(){this.invoke(s.TRACE,arguments)},debug:function(){this.invoke(s.DEBUG,arguments)},info:function(){this.invoke(s.INFO,arguments)},warn:function(){this.invoke(s.WARN,arguments)},error:function(){this.invoke(s.ERROR,arguments)},time:function(t){"string"==typeof t&&t.length>0&&this.invoke(s.TIME,[t,"start"])},timeEnd:function(t){"string"==typeof t&&t.length>0&&this.invoke(s.TIME,[t,"end"])},invoke:function(t,e){a&&this.enabledFor(t)&&a(e,f({level:t},this.context))}};var y,h=new p({filterLevel:s.OFF});(y=s).enabledFor=c(h,h.enabledFor),y.trace=c(h,h.trace),y.debug=c(h,h.debug),y.time=c(h,h.time),y.timeEnd=c(h,h.timeEnd),y.info=c(h,h.info),y.warn=c(h,h.warn),y.error=c(h,h.error),y.log=y.info,s.setHandler=function(t){a=t},s.setLevel=function(t){for(var e in h.setLevel(t),u)u.hasOwnProperty(e)&&u[e].setLevel(t)},s.getLevel=function(){return h.getLevel()},s.get=function(t){return u[t]||(u[t]=new p(f({name:t},h.context)))},s.createDefaultHandler=function(t){(t=t||{}).formatter=t.formatter||function(t,e){e.name&&t.unshift("["+e.name+"]")};var e={},n=function(t,e){Function.prototype.apply.call(t,console,e)};return"undefined"==typeof console?function(){}:function(r,o){r=Array.prototype.slice.call(r);var i,a=console.log;o.level===s.TIME?(i=(o.name?"["+o.name+"] ":"")+r[0],"start"===r[1]?console.time?console.time(i):e[i]=(new Date).getTime():console.timeEnd?console.timeEnd(i):n(a,[i+": "+((new Date).getTime()-e[i])+"ms"])):(o.level===s.WARN&&console.warn?a=console.warn:o.level===s.ERROR&&console.error?a=console.error:o.level===s.INFO&&console.info?a=console.info:o.level===s.DEBUG&&console.debug?a=console.debug:o.level===s.TRACE&&console.trace&&(a=console.trace),t.formatter(r,o),n(a,r))}},s.useDefaults=function(t){s.setLevel(t&&t.defaultLevel||s.DEBUG),s.setHandler(s.createDefaultHandler(t))},void 0===(o="function"==typeof(r=s)?r.call(e,n,e,t):r)||(t.exports=o)}()},function(t,e,n){"use strict";n.d(e,"a",(function(){return r})),n.d(e,"b",(function(){return o})),n.d(e,"c",(function(){return i}));var r={DASH:{name:"dash",mimeType:"application/dash+xml",pathExt:"mpd"},HLS:{name:"hls",mimeType:"application/x-mpegURL",pathExt:"m3u8"},WVM:{name:"wvm",mimeType:"video/wvm",pathExt:"wvm"},MP4:{name:"mp4",mimeType:"video/mp4",pathExt:"mp4"},MP3:{name:"mp3",mimeType:"audio/mpeg",pathExt:"mp3"}},o=new Map([["mpegdash",r.DASH],["applehttp",r.HLS],["url",r.MP4]]);function i(t){var e=o.get(t);return!!e&&e.name===r.MP4.name}},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}n.d(e,"a",(function(){return o}));var o=function t(e){var n,o,a;r(this,t),a=!1,(o="hasError")in(n=this)?Object.defineProperty(n,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[o]=a,"KalturaAPIException"===e.objectType?(this.hasError=!0,this.error=new i(e.code,e.message)):e.error&&"KalturaAPIException"===e.error.objectType?(this.hasError=!0,this.error=new i(e.error.code,e.error.message)):this.data=e},i=function t(e,n){r(this,t),this.code=e,this.message=n}},function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));var r,o,i,a=function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.scheme=e.scheme,this.licenseURL=e.licenseURL,this.certificate=e.certificate};i={"drm.PLAYREADY_CENC":"com.microsoft.playready","drm.WIDEVINE_CENC":"com.widevine.alpha","fairplay.FAIRPLAY":"com.apple.fairplay",WIDEVINE_CENC:"com.widevine.alpha",PLAYREADY_CENC:"com.microsoft.playready",FAIRPLAY:"com.apple.fairplay"},(o="Scheme")in(r=a)?Object.defineProperty(r,o,{value:i,enumerable:!0,configurable:!0,writable:!0}):r[o]=i},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));n(9);var r=n(5);function o(t,e){for(var n=0;n0&&(t.drmData=[],this.drmData.forEach((function(e){Array.isArray(t.drmData)&&t.drmData.push(e.toJSON())}))),t}}])&&r(e.prototype,n),o&&r(e,o),t}()},function(t,e,n){"use strict";n.d(e,"a",(function(){return a}));n(11);var r=n(0);function o(t,e){for(var n=0;n0&&(n.response=t.results.slice(o[0],o[o.length-1]+1))}catch(t){return{success:!1,error:t}}})),{success:!0,data:this._loaders}}}])&&o(e.prototype,n),a&&o(e,a),t}()},function(t,e,n){"use strict";n.d(e,"a",(function(){return v}));var r=n(3),o=n(1),i=n(6),a=n(0);function s(t){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function u(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function c(t,e){for(var n=0;n0?e.slice(0):[]).forEach((function(e,o){("object"===r(e)&&e!=={}||Array.isArray(e)&&e.length>0)&&(n[o]=t(e))})):"object"===r(e)?(n=Object.assign({},e),Object.keys(n).forEach((function(e){("object"===r(n[e])&&n[e]!=={}||Array.isArray(n[e])&&n[e].length>0)&&(n[e]=t(n[e]))}))):n=e,n}},function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));n(2);var r=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.items=[]}},function(t,e,n){"use strict";n.r(e),n.d(e,"Provider",(function(){return Ae})),n.d(e,"NAME",(function(){return De})),n.d(e,"VERSION",(function(){return Le}));var r=n(1),o=n(15);function i(t,e){for(var n=0;n0}},{key:"hasFlavorIds",value:function(){return!!this.flavorIds&&this.flavorIds.length>0}},{key:"getProtocol",value:function(t){var e="";if(this.protocols&&this.protocols.length>0)this.protocols.split(",").forEach((function(n){n===t&&(e=n)}));else if("http"===t)return t;return e}}])&&l(e.prototype,n),r&&l(e,r),t}();var y,h,d,v=function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.type=e.type};function b(t){return(b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function m(t,e){return(m=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function g(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=_(t);if(e){var o=_(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return E(this,n)}}function E(t,e){return!e||"object"!==b(e)&&"function"!=typeof e?function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t):e}function _(t){return(_=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}d={DRM_POLICY:"drm.DRM_POLICY",BLOCK:1,PREVIEW:2,LIMIT_FLAVORS:3,ADD_TO_STORAGE:4,LIMIT_DELIVERY_PROFILES:5,SERVE_FROM_REMOTE_SERVER:6,REQUEST_HOST_REGEX:7,LIMIT_THUMBNAIL_CAPTURE:8},(h="Type")in(y=v)?Object.defineProperty(y,h,{value:d,enumerable:!0,configurable:!0,writable:!0}):y[h]=d;var O=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&m(t,e)}(n,t);var e=g(n);function n(t){var r;return function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,n),(r=e.call(this,t)).pattern=t.pattern,r.replacement=t.replacement,r.replacmenServerNodeId=t.replacmenServerNodeId,r}return n}(v);var w=function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.id=e.id,this.flavorParamsId=e.flavorParamsId,this.fileExt=e.fileExt,this.bitrate=e.bitrate,this.width=e.width,this.height=e.height,this.id=e.id,this.frameRate=e.frameRate,this.isOriginal=e.isOriginal,this.isWeb=e.isWeb,this.containerFormat=e.containerFormat,this.videoCodecId=e.videoCodecId,this.status=e.status,this.language=e.language,this.label=e.label};function R(t){return(R="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function I(t,e){for(var n=0;n0&&(r.metas=[],t.objects.map((function(t){return r.metas.push(new L(t))})))),r}return n}(u.a);function q(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var H=function t(e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this.id=e.id,this.referenceId=e.referenceId,this.externalSourceType=e.externalSourceType,this.name=e.name,this.description=e.description,this.dataUrl=e.dataUrl,this.type=e.type,this.entryType=e.mediaType,this.flavorParamsIds=e.flavorParamsIds,this.duration=e.duration,this.poster=e.thumbnailUrl,this.status=e.status,this.dvrStatus=e.dvrStatus,this.tags=e.tags};function B(t,e){for(var n=0;n0){e["@attributes"]={};for(var n=0;n0&&(e.filter((function(t){return!Object(z.c)(t.format)})).forEach(f),s=e.find((function(e){return Object(z.c)(e.format)&&""!==e.getProtocol(t._getBaseProtocol())})),c.progressive=t._parseProgressiveSources(s,a,n,r,o,i.id)),c}},{key:"_parseAdaptiveSource",value:function(e,n,r,o,i,a){var s=new X.a;if(e){var u="",c=z.b.get(e.format),l=e.getProtocol(t._getBaseProtocol()),p=e.deliveryProfileId,y=e.format,h="";if(c&&(h=c.pathExt,s.mimetype=c.mimeType),e.hasFlavorIds()?(!h&&n.flavorAssets&&n.flavorAssets.length>0&&(h=n.flavorAssets[0].fileExt),u=W.build({entryId:a,flavorIds:e.flavorIds,format:y,ks:r,partnerId:o,uiConfId:i,extension:h,protocol:l})):u=e.url,!u){var d="failed to create play url from source, discarding source: (".concat(a,"_").concat(p,"), ").concat(y);return t._logger.warn(d),null}if(s.url=t._applyRegexAction(n,u),s.id=a+"_"+p+","+y,e.hasDrmData()){var v=[];e.drm.forEach((function(t){v.push(new J.a(t.licenseURL,f.a.Scheme[t.scheme],t.certificate))})),s.drmData=v}}return s}},{key:"_parseProgressiveSources",value:function(e,n,r,o,i,a){var s=[],u=[];if(e){var c=e.getProtocol(t._getBaseProtocol()),f=e.format,l=e.deliveryProfileId,p=l+","+f;n.flavorAssets.map((function(e){var y=new X.a;y.id=e.id+p,y.mimetype="mp3"===e.fileExt?"audio/mp3":"video/mp4",y.height=e.height,y.width=e.width,y.bandwidth=1024*e.bitrate,y.label=e.label||e.language;var h=W.build({entryId:a,flavorIds:e.id,format:f,ks:r,partnerId:o,uiConfId:i,extension:e.fileExt,protocol:c});if(""===h)return t._logger.warn("failed to create play url from source, discarding source: (".concat(a,"_").concat(l,"), ").concat(f,".")),null;y.url=t._applyRegexAction(n,h),e.height&&e.width?s.push(y):u.push(y)}))}return u.length&&!s.length?u:s}},{key:"_parseMetadata",value:function(t){var e={};return t&&t.metas&&t.metas.length>0&&t.metas.forEach((function(t){var n,r=new DOMParser;t.xml=t.xml.replace(/\r?\n|\r/g,""),t.xml=t.xml.replace(/>\s*/g,">"),t.xml=t.xml.replace(/>\s*/g,">"),n=r.parseFromString(t.xml,"text/xml");var o=Y.xmlToJson(n);Object.keys(o.metadata).forEach((function(t){e[t]=o.metadata[t]["#text"]}))})),e}},{key:"_getBaseProtocol",value:function(){var t=s.get(),e=/^https?:/.exec(t.cdnUrl),n=e?e[0]:document.location.protocol;return"string"==typeof n?n.slice(0,-1):"https"}},{key:"hasBlockAction",value:function(t){return t.playBackContextResult.hasBlockAction()}},{key:"getBlockAction",value:function(t){return t.playBackContextResult.getBlockAction()}},{key:"getErrorMessages",value:function(t){return t.playBackContextResult.getErrorMessages()}},{key:"_applyRegexAction",value:function(t,e){var n=t.getRequestHostRegexAction();if(n){var r=new RegExp(n.pattern,"i");if(e.match(r))return e.replace(r,n.replacement+"/")}return e}}],(n=null)&&ot(e.prototype,n),r&&ot(e,r),t}();!function(t,e,n){e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n}(it,"_logger",Object(r.b)("OVPProviderParser"));var at=n(3),st=n(11);function ut(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};ft(this,t),this.type=e.type||t.Type.INCLUDE_FIELDS,this.fields=e.fields||lt};function yt(t){return(yt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function ht(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function dt(t,e){for(var n=0;n0&&(r.entries=[],t.objects.map((function(t){return r.entries.push(new H(t))})))),r}return n}(u.a);function Mt(t,e){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:"",a=arguments.length>3?arguments[3]:void 0;return Qt(this,n),(o=e.call(this,a))._multiRequest=ct.getMultiRequest(t,i,r),o}return n}(n(10).a);function ne(t){return(ne="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function re(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function oe(t,e){for(var n=0;n-1&&(e.vr={}),Object.assign(e.metadata,t.metadata),e}}])&&Te(e.prototype,n),o&&Te(e,o),a}(Ee.a),De="playkit-js-providers-ovp",Le="2.21.1"}])})); //# sourceMappingURL=playkit-ovp-provider.js.map \ No newline at end of file diff --git a/dist/playkit-ovp-provider.js.map b/dist/playkit-ovp-provider.js.map index d7e278fb..a3b7d4fd 100644 --- a/dist/playkit-ovp-provider.js.map +++ b/dist/playkit-ovp-provider.js.map @@ -1 +1 @@ -{"version":3,"sources":["./providers/webpack/universalModuleDefinition","./providers/playkit-ovp-provider.js","./providers/webpack/bootstrap 59d72028ff5eee9a0b0d","./providers/./util/request-builder.js","./providers/./util/error/error.js","./providers/./util/logger.js","./providers/./k-provider/common/base-service-result.js","./providers/./entities/media-entry.js","./providers/./k-provider/ovp/config.js","./providers/./entities/drm.js","./providers/./entities/media-format.js","./providers/./entities/media-source.js","./providers/./entities/media-sources.js","./providers/./k-provider/common/data-loader-manager.js","./providers/./k-provider/common/multi-request-builder.js","./providers/./k-provider/common/response-types/kaltura-access-control-message.js","./providers/./k-provider/common/response-types/kaltura-drm-playback-plugin-data.js","./providers/./k-provider/ovp/response-types/kaltura-media-entry.js","./providers/./k-provider/ovp/services/ovp-service.js","./providers/./entities/entry-list.js","./providers/./k-provider/common/base-provider.js","./providers/./k-provider/ovp/response-types/kaltura-rule-action.js","./providers/./util/clone.js","./providers/./util/error/category.js","./providers/./util/error/code.js","./providers/./util/error/severity.js","./providers/../~/js-logger/src/logger.js","./providers/./k-provider/ovp/request-params/base-entry-response-profile.js","./providers/./k-provider/ovp/response-types/kaltura-base-entry-list-response.js","./providers/./k-provider/ovp/response-types/kaltura-metadata-list-response.js","./providers/./k-provider/ovp/response-types/kaltura-playback-context.js","./providers/./k-provider/ovp/response-types/kaltura-playback-source.js","./providers/./k-provider/ovp/services/base-entry-service.js","./providers/./k-provider/ovp/provider.js","./providers/./entities/playlist.js","./providers/./k-provider/ovp/external-captions-builder.js","./providers/./k-provider/ovp/index.js","./providers/./k-provider/ovp/loaders/data-loader-manager.js","./providers/./k-provider/ovp/loaders/entry-list-loader.js","./providers/./k-provider/ovp/loaders/media-entry-loader.js","./providers/./k-provider/ovp/loaders/playlist-loader.js","./providers/./k-provider/ovp/loaders/session-loader.js","./providers/./k-provider/ovp/play-source-url-builder.js","./providers/./k-provider/ovp/provider-parser.js","./providers/./k-provider/ovp/response-types/kaltura-access-control-modify-request-host-regex-action.js","./providers/./k-provider/ovp/response-types/kaltura-flavor-asset.js","./providers/./k-provider/ovp/response-types/kaltura-media-entries.js","./providers/./k-provider/ovp/response-types/kaltura-metadata.js","./providers/./k-provider/ovp/response-types/kaltura-playlist.js","./providers/./k-provider/ovp/services/meta-data-service.js","./providers/./k-provider/ovp/services/playlist-service.js","./providers/./k-provider/ovp/services/session-service.js","./providers/./util/xml-parser.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","length","descriptor","writable","key","protoProps","staticProps","_error","_error2","obj","default","RequestBuilder","headers","arguments","undefined","Map","_attemptCounter","serviceUrl","service","action","_this","promise","Promise","resolve","reject","_requestPromise","url","Severity","CRITICAL","Category","NETWORK","Code","MALFORMED_DATA_URI","_createXHR","_this2","request","XMLHttpRequest","onreadystatechange","readyState","status","response","JSON","parse","responseText","responseHeaders","_getResponseHeaders","error","_createError","BAD_SERVER_RESPONSE","text","open","method","retryConfig","async","timeout","requestTime","performance","now","ontimeout","_handleError","TIMEOUT","statusText","onerror","onabort","HTTP_ERROR","forEach","setRequestHeader","send","params","getAllResponseHeaders","split","filter","header","toLowerCase","indexOf","code","data","maxAttempts","assign","attempt","_logger","_logger2","_severity","_code","_category","Error","severity","category","getLogLevel","LogLevel","OFF","setLogHandler","handler","JsLogger","setHandler","messages","context","getLogger","getLevel","setLogLevel","level","setLevel","_jsLogger","newObj","DEBUG","INFO","TIME","WARN","ERROR","useDefaults","defaultLevel","ServiceResult","hasError","objectType","ServiceError","message","_mediaSources","_mediaSources2","MediaEntry","metadata","sources","type","Type","UNKNOWN","id","toJSON","duration","dvrStatus","poster","assetReferenceType","VOD","LIVE","IMAGE","AUDIO","OVPConfiguration","_clone","defaultConfig","cdnUrl","serviceParams","apiVersion","format","useApiCaptions","clientConfig","clone","Drm","licenseUrl","scheme","certificate","isProgressiveSource","formatName","sourceFormat","SupportedStreamFormat","MediaFormat","MP4","DASH","mimeType","pathExt","HLS","WVM","MP3","_drm","MediaSource","mimetype","bandwidth","width","height","label","drmData","Array","isArray","push","_mediaSource","_mediaFormat","MediaSources","progressive","dash","hls","source","mediaFormat","h","_interopRequireDefault","_multiRequestBuilder","DataLoaderManager","networkRetryConfig","_loadersResponseMap","_loaders","_networkRetryConfig","loader","execution_loader","isValid","set","startIndex","_multiRequest","requests","add","executionLoaderResponseMap","from","val","index","execute","then","_multiResponse","prepareData","success","API_RESPONSE_MISMATCH","err","_this3","loaderDataIndexes","results","slice","_defineProperty","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","MultiRequestResult","_requestBuilder","_requestBuilder2","_baseServiceResult","_baseServiceResult2","MultiRequestBuilder","_RequestBuilder","_ref","_temp","_ret","_len","args","_key","getPrototypeOf","apply","concat","requestParams","serviceDef","stringify","PROVIDER","FAILED_PARSING_REQUEST","doHttpRequest","multiRequestResult","MULTIREQUEST_API_ERROR","result","serviceResult","KalturaAccessControlMessage","KalturaDrmPlaybackPluginData","drm","licenseURL","Scheme","drm.PLAYREADY_CENC","drm.WIDEVINE_CENC","fairplay.FAIRPLAY","WIDEVINE_CENC","PLAYREADY_CENC","FAIRPLAY","KalturaMediaEntry","entry","referenceId","externalSourceType","description","dataUrl","entryType","mediaType","flavorParamsIds","thumbnailUrl","tags","EntryType","AUTOMATIC","EXTERNAL_MEDIA","MEDIA_CLIP","MIX","PLAYLIST","DATA","LIVE_STREAM","LIVE_CHANNEL","DOCUMENT","MediaType","VIDEO","LIVE_STREAM_FLASH","LIVE_STREAM_WINDOWS_MEDIA","LIVE_STREAM_REAL_MEDIA","LIVE_STREAM_QUICK_TIME","EntryStatus","ERROR_IMPORTING","ERROR_CONVERTING","SCAN_FAILURE","IMPORT","INFECTED","PRECONVERT","READY","DELETED","PENDING","MODERATE","BLOCKED","NO_CONTENT","EntryModerationStatus","PENDING_MODERATION","APPROVED","REJECTED","FLAGGED_FOR_REVIEW","AUTO_APPROVED","_multiRequestBuilder2","_config","_config2","OVPService","playerVersion","ks","partnerId","config","ovpParams","clientTag","multiReq","getUrl","_mediaEntry","EntryList","items","_dataLoaderManager","BaseProvider","options","_partnerId","_widgetId","widgetId","_uiConfId","uiConfId","_isAnonymous","_ks","_playerVersion","log","defaultWidgetId","mediaInfo","METHOD_NOT_IMPLEMENTED","playlistInfo","entryListInfo","SERVICE","MISSING_PLAY_SOURCE","KalturaRuleAction","DRM_POLICY","BLOCK","PREVIEW","LIMIT_FLAVORS","ADD_TO_STORAGE","LIMIT_DELIVERY_PROFILES","SERVE_FROM_REMOTE_SERVER","REQUEST_HOST_REGEX","LIMIT_THUMBNAIL_CAPTURE","_typeof","Symbol","iterator","node","e","keys","UNSUPPORTED_SCHEME","BAD_HTTP_STATUS","BLOCK_ACTION","MEDIA_STATUS_NOT_READY","MISSING_MANDATORY_PARAMS","RECOVERABLE","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_RESULT__","global","Logger","VERSION","logHandler","contextualLoggersByNameMap","bind","scope","func","merge","defineLogLevel","ContextualLogger","defaultContext","filterLevel","info","newLevel","enabledFor","lvl","debug","invoke","warn","time","timeEnd","msgArgs","globalLogger","L","createDefaultHandler","formatter","unshift","timerStartTimeByLabelMap","invokeConsoleMethod","hdlr","Function","console","timerLabel","Date","getTime","BaseEntryResponseProfile","responseProfile","INCLUDE_FIELDS","fields","EXCLUDE_FIELDS","_kalturaMediaEntry","_kalturaMediaEntry2","KalturaBaseEntryListResponse","_ServiceResult","responseObj","totalCount","entries","objects","map","_kalturaMetadata","_kalturaMetadata2","KalturaMetadataListResponse","metas","meta","_kalturaAccessControlMessage","_kalturaAccessControlMessage2","_kalturaPlaybackSource","_kalturaPlaybackSource2","_kalturaAccessControlModifyRequestHostRegexAction","_kalturaAccessControlModifyRequestHostRegexAction2","_kalturaRuleAction","_kalturaRuleAction2","_kalturaFlavorAsset","_kalturaFlavorAsset2","KalturaPlaybackContext","actions","flavorAssets","flavor","getBlockAction","find","_kalturaDrmPlaybackPluginData","_kalturaDrmPlaybackPluginData2","KalturaPlaybackSource","deliveryProfileId","protocols","flavorIds","protocol","returnValue","_ovpService","_ovpService2","_baseEntryResponseProfile","_baseEntryResponseProfile2","OVPBaseEntryService","_OVPService","serviceEntryId","tag","contextDataParams","flavorTags","entryId","redirectFromEntryId","getEntryListReqParams","idEqual","_providerParser","_providerParser2","_mediaEntryLoader","_mediaEntryLoader2","_sessionLoader","_sessionLoader2","_dataLoaderManager2","_playlistLoader","_playlistLoader2","_baseProvider","_baseProvider2","_mediaEntry2","_entryListLoader","_entryListLoader2","OVPProvider","_BaseProvider","_filterOptionsConfig","env","_setFilterOptionsConfig","filterOptions","networkRetryParameters","_dataLoader","_getEntryRedirectFilter","fetchData","_parseDataFromResponse","mediaConfig","session","isAnonymous","_getDefaultSourcesObject","plugins","has","sessionLoader","mediaLoader","hasBlockAction","getErrorMessages","mediaEntry","getMediaEntry","_getSourcesObject","_verifyMediaStatus","_verifyHasSources","includes","playlistId","_parsePlaylistDataFromResponse","_this4","playlistConfig","_getPlaylistObject","playlistLoader","playlist","getPlaylist","_this5","_parseEntryListDataFromResponse","_this6","getEntryList","dvr","vr","sourcesObject","mediaSources","captions","Playlist","KalturaCaptionType","SRT","DFXP","WEBVTT","CAP","CaptionsFormatsMap","3","1","ExternalCaptionsBuilder","caption","webVttUrl","isDefault","language","languageCode","NAME","Provider","_provider","_provider2","OVPDataLoaderManager","_DataLoaderManager","getMultiRequest","_baseEntryService","_baseEntryService2","_kalturaBaseEntryListResponse","_kalturaBaseEntryListResponse2","OVPEntryListLoader","_response","playlistItems","buildRequests","_entries","list","_requests","mediaEntryResponse","item","_metaDataService","_metaDataService2","_kalturaPlaybackContext","_kalturaPlaybackContext2","_kalturaMetadataListResponse","_kalturaMetadataListResponse2","OVPMediaEntryLoader","_entryId","getPlaybackContext","playBackContextResult","metadataListResult","_playlistService","_playlistService2","_kalturaPlaylist","_kalturaPlaylist2","_kalturaMediaEntries","_kalturaMediaEntries2","OVPPlaylistLoader","_playlistId","playlistData","_sessionService","_sessionService2","OVPSessionLoader","anonymousSession","PlaySourceUrlBuilder","urlParams","serviceUrlOrigin","substr","lastIndexOf","extension","playUrl","endsWith","_playSourceUrlBuilder","_playSourceUrlBuilder2","_xmlParser","_xmlParser2","_drm2","_mediaSource2","_playlist","_playlist2","_entryList","_entryList2","_externalCaptionsBuilder","OVPProviderParser","playbackContext","metadataList","kalturaSources","_getParsedSources","playbackCaptions","createConfig","_fillBaseData","playlistResponse","entryList","_parseMetadata","_getEntryType","entryTypeEnum","typeEnum","addAdaptiveSource","parsedSource","_parseAdaptiveSource","mediaSource","progressiveSource","getProtocol","_getBaseProtocol","_parseProgressiveSources","kalturaSource","hasFlavorIds","fileExt","build","_applyRegexAction","hasDrmData","drmParams","videoSources","audioSources","sourceId","bitrate","metaXml","domParser","DOMParser","xml","replace","parseFromString","metasObj","xmlToJson","protocolRegex","exec","document","location","regexAction","getRequestHostRegexAction","regex","RegExp","pattern","match","replacement","KalturaAccessControlModifyRequestHostRegexAction","_KalturaRuleAction","replacmenServerNodeId","KalturaFlavorAsset","flavorParamsId","frameRate","isOriginal","isWeb","containerFormat","videoCodecId","Status","QUEUED","CONVERTING","NOT_APPLICABLE","TEMP","WAIT_FOR_CONVERT","IMPORTING","VALIDATING","EXPORTING","KalturaMediaEntries","KalturaMetadata","metadataProfileId","metadataProfileVersion","metadataObjectType","objectId","version","created","setUTCSeconds","createdAt","updated","updatedAt","ObjectType","AD_CUE_POINT","ANNOTATION","CODE_CUE_POINT","THUMB_CUE_POINT","ENTRY","CATEGORY","USER","PARTNER","DYNAMIC_OBJECT","VALID","INVALID","KalturaPlaylist","OVPMetadataService","objectIdEqual","metadataObjectTypeEqual","OVPPlaylistService","SERVICE_NAME","OVPSessionService","XmlParser","nodeType","attributes","j","attribute","nodeName","nodeValue","hasChildNodes","childNodes","old"],"mappings":"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","file":"playkit-ovp-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[\"ovp\"] = factory();\n\telse\n\t\troot[\"playkit\"] = root[\"playkit\"] || {}, root[\"playkit\"][\"providers\"] = root[\"playkit\"][\"providers\"] || {}, root[\"playkit\"][\"providers\"][\"ovp\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(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[\"ovp\"] = factory();\n\telse\n\t\troot[\"playkit\"] = root[\"playkit\"] || {}, root[\"playkit\"][\"providers\"] = root[\"playkit\"][\"providers\"] || {}, root[\"playkit\"][\"providers\"][\"ovp\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \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// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\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, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\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/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 50);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _error = __webpack_require__(1);\n\nvar _error2 = _interopRequireDefault(_error);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KALTURA_HEADER_PREFIX = 'x-';\n\nvar RequestBuilder = function () {\n\n /**\n * @constructor\n * @param {Map} headers The request headers\n */\n\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\n /**\n * @description network retry configuration\n * @memberof RequestBuilder\n * @type {ProviderNetworkRetryParameters}\n */\n\n /**\n * @memberof - Service tag\n * @type {string}\n */\n\n /**\n * @memberof - Service URL\n * @type {string}\n */\n\n /**\n * @member - Service params\n * @type {any}\n */\n\n /**\n * @member - Service name\n * @type {string}\n */\n function RequestBuilder() {\n var headers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Map();\n\n _classCallCheck(this, RequestBuilder);\n\n this._attemptCounter = 1;\n\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\n\n /**\n * @description number of xhr attempts for the same multi - request.\n * @memberof RequestBuilder\n * @type {number}\n * @private\n */\n\n /**\n * @memberof - the response headers of the arra\n * @type {Array}\n */\n\n /**\n * @memberof - Service method (POST,GET,DELETE etc..)\n * @type {string}\n */\n\n /**\n * @memberof - Service headers\n * @type {Map}\n */\n\n /**\n * @member - Service action\n * @type {string}\n */\n\n\n _createClass(RequestBuilder, [{\n key: 'getUrl',\n value: function getUrl(serviceUrl) {\n return serviceUrl + '/service/' + this.service + (this.action ? '/action/' + this.action : '');\n }\n\n /**\n * Executes service\n * @function doHttpRequest\n * @returns {Promise.} Service response as promise\n */\n\n }, {\n key: 'doHttpRequest',\n value: function doHttpRequest() {\n var _this = this;\n\n var promise = new Promise(function (resolve, reject) {\n _this._requestPromise = {\n resolve: resolve,\n reject: reject\n };\n });\n if (!this.url) {\n this._requestPromise.reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, _error2.default.Code.MALFORMED_DATA_URI, {\n url: this.url\n }));\n }\n this._createXHR();\n return promise;\n }\n }, {\n key: '_createXHR',\n value: function _createXHR() {\n var _this2 = this;\n\n var request = new XMLHttpRequest();\n request.onreadystatechange = function () {\n if (request.readyState === 4) {\n if (request.status === 200) {\n try {\n var response = JSON.parse(request.responseText);\n _this2.responseHeaders = _this2._getResponseHeaders(request);\n // the promise returns the response for backwards compatibility\n return _this2._requestPromise.resolve(response);\n } catch (error) {\n _this2._requestPromise.reject(_this2._createError(request, _error2.default.Code.BAD_SERVER_RESPONSE, {\n text: request.responseText\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 var requestTime = performance.now();\n request.ontimeout = function () {\n _this2._handleError(request, _error2.default.Code.TIMEOUT, {\n timeout: (performance.now() - requestTime) / 1000,\n statusText: request.statusText\n });\n };\n request.onerror = request.onabort = function () {\n _this2._handleError(request, _error2.default.Code.HTTP_ERROR, {\n text: request.responseText,\n statusText: request.statusText\n });\n };\n this.headers.forEach(function (value, key) {\n request.setRequestHeader(key, value);\n });\n request.send(this.params);\n }\n }, {\n key: '_getResponseHeaders',\n value: function _getResponseHeaders(request) {\n return request.getAllResponseHeaders().split('\\n').filter(function (header) {\n return header.toLowerCase().indexOf(KALTURA_HEADER_PREFIX) === 0;\n });\n }\n }, {\n key: '_handleError',\n value: function _handleError(request, code, data) {\n var 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 key: '_createError',\n value: function _createError(request, code, data) {\n Object.assign(data, {\n url: this.url,\n headers: this._getResponseHeaders(request),\n attempt: this._attemptCounter\n });\n return new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, code, data);\n }\n }]);\n\n return RequestBuilder;\n}();\n\nexports.default = RequestBuilder;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _logger = __webpack_require__(2);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _severity = __webpack_require__(26);\n\nvar _code = __webpack_require__(25);\n\nvar _category = __webpack_require__(24);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CLASS_NAME = 'Error';\n\n/**\n * @classdesc This is a description of the error class.\n */\n\nvar Error =\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\n/**\n * @enum {number}\n */\n\n/**\n * @enum {number}\n */\nfunction Error(severity, category, code) {\n var data = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n _classCallCheck(this, Error);\n\n this.severity = severity;\n this.category = category;\n this.code = code;\n this.data = data;\n if ((0, _logger.getLogLevel)(CLASS_NAME) !== _logger.LogLevel.OFF) {\n Error._logger.error('Category:' + category + ' | Code:' + code + ' |', data);\n }\n}\n/**\n * @enum {number}\n */\n;\n\nError.Severity = _severity.Severity;\nError.Category = _category.Category;\nError.Code = _code.Code;\nError._logger = (0, _logger2.default)(CLASS_NAME);\nexports.default = Error;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.setLogHandler = exports.setLogLevel = exports.getLogLevel = exports.LogLevel = undefined;\n\nvar _jsLogger = __webpack_require__(27);\n\nvar JsLogger = _interopRequireWildcard(_jsLogger);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar LogLevel = {\n DEBUG: JsLogger.DEBUG,\n INFO: JsLogger.INFO,\n TIME: JsLogger.TIME,\n WARN: JsLogger.WARN,\n ERROR: JsLogger.ERROR,\n OFF: JsLogger.OFF\n};\n\n\nJsLogger.useDefaults({ defaultLevel: JsLogger.ERROR });\n\n/**\n * sets the logger handler\n * @param {LogHandlerType} handler - the log level\n * @returns {void}\n */\nfunction setLogHandler(handler) {\n JsLogger.setHandler(function (messages, context) {\n return handler(messages, context);\n });\n}\n/**\n * get a logger\n * @param {?string} name - the logger name\n * @returns {Object} - the logger class\n */\nfunction getLogger(name) {\n if (!name) {\n return JsLogger;\n }\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) {\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, name) {\n getLogger(name).setLevel(level);\n}\n\nexports.default = getLogger;\nexports.LogLevel = LogLevel;\nexports.getLogLevel = getLogLevel;\nexports.setLogLevel = setLogLevel;\nexports.setLogHandler = setLogHandler;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ServiceResult =\n\n/**\n * @constructor\n * @param {Object} response - Service response\n */\n\n/**\n * @member - The service error\n * @type {ServiceError}\n */\n\n/**\n * @member - The service result data\n * @type {Object}\n */\nfunction ServiceResult(response) {\n _classCallCheck(this, ServiceResult);\n\n this.hasError = false;\n\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 * @member - Is service returned an error\n * @type {boolean}\n */\n;\n\nexports.default = ServiceResult;\n\nvar ServiceError =\n\n/**\n * @constructor\n * @param {string} code - The result code\n * @param {string} message - The result message\n */\n\n/**\n * @member - The error code\n * @type {string}\n */\nfunction ServiceError(code, message) {\n _classCallCheck(this, ServiceError);\n\n this.code = code;\n this.message = message;\n}\n/**\n * @member - The error message\n * @type {string}\n */\n;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _mediaSources = __webpack_require__(10);\n\nvar _mediaSources2 = _interopRequireDefault(_mediaSources);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MediaEntry = function () {\n\n /**\n * @constructor\n */\n\n\n /**\n * @member - entry id\n * @type {string}\n */\n\n /**\n * @member - entry name\n * @type {string}\n */\n\n /**\n * @member - entry sources\n * @type {MediaSources}\n */\n\n /**\n * @member - entry duration\n * @type {number}\n */\n\n /**\n * @member - entry type\n * @type {string}\n */\n\n /**\n * @member - entry metadata\n * @type {Object}\n */\n\n /**\n * @member - DVR status\n * @type {number}\n */\n\n /**\n * @member - media status\n * @type {number}\n */\n\n /**\n * @member - media poster\n * @type {string | Array}\n */\n\n\n /**\n * @member - assetReferenceType\n * @type {string }\n */\n function MediaEntry() {\n _classCallCheck(this, MediaEntry);\n\n this.metadata = new Map();\n this.sources = new _mediaSources2.default();\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\n\n _createClass(MediaEntry, [{\n key: 'toJSON',\n value: function toJSON() {\n return {\n id: this.id,\n name: this.name,\n sources: this.sources.toJSON(),\n duration: this.duration,\n dvrStatus: this.dvrStatus,\n metadata: this.metadata,\n type: this.type,\n poster: this.poster,\n assetReferenceType: this.assetReferenceType\n };\n }\n }]);\n\n return MediaEntry;\n}();\n\nMediaEntry.Type = {\n VOD: 'Vod',\n LIVE: 'Live',\n IMAGE: 'Image',\n AUDIO: 'Audio',\n UNKNOWN: 'Unknown'\n};\nexports.default = MediaEntry;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.OVPConfiguration = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _clone = __webpack_require__(23);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar defaultConfig = {\n serviceUrl: 'https://cdnapisec.kaltura.com/api_v3',\n cdnUrl: 'https://cdnapisec.kaltura.com',\n serviceParams: {\n apiVersion: '3.3.0',\n format: 1\n },\n useApiCaptions: true\n};\n\nvar OVPConfiguration = function () {\n function OVPConfiguration() {\n _classCallCheck(this, OVPConfiguration);\n }\n\n _createClass(OVPConfiguration, null, [{\n key: 'set',\n value: function set(clientConfig) {\n if (clientConfig) {\n Object.assign(defaultConfig, clientConfig);\n }\n }\n }, {\n key: 'get',\n value: function get() {\n return (0, _clone.clone)(defaultConfig);\n }\n }]);\n\n return OVPConfiguration;\n}();\n\nexports.default = OVPConfiguration;\nexports.OVPConfiguration = OVPConfiguration;\n\n/***/ }),\n/* 6 */,\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Drm = function () {\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\n /**\n * @member - drm scheme\n * @type {string}\n */\n function Drm(licenseUrl, scheme, certificate) {\n _classCallCheck(this, Drm);\n\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\n\n /**\n * @member - drm certificate\n * @type {string}\n */\n\n /**\n * @member - license url\n * @type {string}\n */\n\n\n _createClass(Drm, [{\n key: \"toJSON\",\n value: function toJSON() {\n var response = {\n licenseUrl: this.licenseUrl,\n scheme: this.scheme\n };\n if (this.certificate) response.certificate = this.certificate;\n return response;\n }\n }]);\n\n return Drm;\n}();\n\nexports.default = Drm;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar MediaFormat = exports.MediaFormat = {\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\nvar SupportedStreamFormat = exports.SupportedStreamFormat = new Map([['mpegdash', MediaFormat.DASH], ['applehttp', MediaFormat.HLS], ['url', MediaFormat.MP4]]);\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) {\n var sourceFormat = SupportedStreamFormat.get(formatName);\n return !!sourceFormat && sourceFormat.name === MediaFormat.MP4.name;\n}\n\nexports.isProgressiveSource = isProgressiveSource;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _drm = __webpack_require__(7);\n\nvar _drm2 = _interopRequireDefault(_drm);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MediaSource = function () {\n function MediaSource() {\n _classCallCheck(this, MediaSource);\n }\n\n _createClass(MediaSource, [{\n key: 'toJSON',\n\n\n /**\n * Convert class to native js object.\n * @returns {ProviderMediaSourceObject} - The json class object.\n */\n\n /**\n * @member - media source height\n * @type {number}\n */\n\n /**\n * @member - media source bandwidth\n * @type {number}\n */\n\n /**\n * @member - media source mimetype\n * @type {string}\n */\n\n /**\n * @member - media source id\n * @type {string}\n */\n value: function toJSON() {\n var response = {\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(function (d) {\n if (Array.isArray(response.drmData)) {\n response.drmData.push(d.toJSON());\n }\n });\n }\n return response;\n }\n /**\n * @member - media source label\n * @type {string}\n */\n\n /**\n * @member - media source width\n * @type {number}\n */\n\n /**\n * @member - media source drm data\n * @type {Array}\n */\n\n /**\n * @member - media source url\n * @type {string}\n */\n\n }]);\n\n return MediaSource;\n}();\n\nexports.default = MediaSource;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _mediaSource = __webpack_require__(9);\n\nvar _mediaSource2 = _interopRequireDefault(_mediaSource);\n\nvar _mediaFormat = __webpack_require__(8);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MediaSources = function () {\n\n /**\n * @constructor\n */\n\n /**\n * Hls media sources container.\n * @type {Array}\n * @public\n */\n\n /**\n * Progressive download media sources container.\n * @type {Array}\n * @public\n */\n function MediaSources() {\n _classCallCheck(this, MediaSources);\n\n this.progressive = [];\n this.dash = [];\n this.hls = [];\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\n /**\n * Dash media sources container.\n * @type {Array}\n * @public\n */\n\n\n _createClass(MediaSources, [{\n key: 'map',\n value: function map(source, mediaFormat) {\n if (mediaFormat) {\n switch (mediaFormat.name) {\n case _mediaFormat.MediaFormat.MP4.name:\n this.progressive.push(source);\n break;\n case _mediaFormat.MediaFormat.DASH.name:\n this.dash.push(source);\n break;\n case _mediaFormat.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\n }, {\n key: 'toJSON',\n value: function toJSON() {\n var response = {\n progressive: [],\n dash: [],\n hls: []\n };\n this.progressive.forEach(function (p) {\n return response.progressive.push(p.toJSON());\n });\n this.hls.forEach(function (h) {\n return response.hls.push(h.toJSON());\n });\n this.dash.forEach(function (d) {\n return response.dash.push(d.toJSON());\n });\n return response;\n }\n }]);\n\n return MediaSources;\n}();\n\nexports.default = MediaSources;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _multiRequestBuilder = __webpack_require__(12);\n\nvar _multiRequestBuilder2 = _interopRequireDefault(_multiRequestBuilder);\n\nvar _error = __webpack_require__(1);\n\nvar _error2 = _interopRequireDefault(_error);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DataLoaderManager = function () {\n /**\n * @member - Loaders response map index\n * @type {Map>}\n * @private\n */\n function DataLoaderManager(networkRetryConfig) {\n _classCallCheck(this, DataLoaderManager);\n\n this._loadersResponseMap = new Map();\n this._loaders = new Map();\n\n this._networkRetryConfig = networkRetryConfig;\n }\n\n /**\n * Add loader too execution loaders map\n * @function\n * @param {Function} loader Loader to add\n * @param {Object} params Loader params\n * @returns {void}\n */\n\n /**\n * @member - Loaders to execute\n * @type {Map}\n * @private\n */\n\n /**\n * @member - Loaders multi request\n * @type {MultiRequestBuilder}\n * @protected\n */\n\n /**\n * @member - Loaders multi response\n * @type {MultiRequestResult}\n * @private\n */\n\n\n _createClass(DataLoaderManager, [{\n key: 'add',\n value: function add(loader, params) {\n var _this = this;\n\n var 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 var startIndex = this._multiRequest.requests.length;\n // Get the requests\n var requests = execution_loader.requests;\n this._multiRequest.retryConfig = this._networkRetryConfig;\n // Add requests to muktiRequest queue\n requests.forEach(function (request) {\n _this._multiRequest.add(request);\n });\n // Create range array of current execution_loader requests\n var executionLoaderResponseMap = Array.from(new Array(requests.length), function (val, index) {\n return index + startIndex;\n });\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 * @function\n * @returns {Promise} Promise\n */\n\n }, {\n key: 'fetchData',\n value: function fetchData() {\n var _this2 = this;\n\n return new Promise(function (resolve, reject) {\n _this2._multiRequest.execute().then(function (data) {\n _this2._multiResponse = data.response;\n var preparedData = _this2.prepareData(data.response);\n if (preparedData.success) {\n resolve(_this2._loaders);\n } else {\n reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, _error2.default.Code.API_RESPONSE_MISMATCH, {\n headers: data.headers\n }));\n }\n }, function (err) {\n reject(err);\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\n }, {\n key: 'prepareData',\n value: function prepareData(response) {\n var _this3 = this;\n\n this._loaders.forEach(function (loader, name) {\n var loaderDataIndexes = _this3._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\n return DataLoaderManager;\n}();\n\nexports.default = DataLoaderManager;\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MultiRequestResult = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _logger = __webpack_require__(2);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _baseServiceResult = __webpack_require__(3);\n\nvar _baseServiceResult2 = _interopRequireDefault(_baseServiceResult);\n\nvar _error = __webpack_require__(1);\n\nvar _error2 = _interopRequireDefault(_error);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MultiRequestBuilder = function (_RequestBuilder) {\n _inherits(MultiRequestBuilder, _RequestBuilder);\n\n function MultiRequestBuilder() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, MultiRequestBuilder);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = MultiRequestBuilder.__proto__ || Object.getPrototypeOf(MultiRequestBuilder)).call.apply(_ref, [this].concat(args))), _this), _this.requests = [], _temp), _possibleConstructorReturn(_this, _ret);\n }\n /**\n * @memberof - MultiRequestBuilder\n * @type {Array}\n */\n\n\n _createClass(MultiRequestBuilder, [{\n key: 'add',\n\n /**\n * Adds request to requests array\n * @function add\n * @param {RequestBuilder} request The request\n * @returns {MultiRequestBuilder} The multiRequest\n */\n value: function add(request) {\n this.requests.push(request);\n var requestParams = {};\n var serviceDef = { service: request.service, action: request.action };\n Object.assign(requestParams, _defineProperty({}, 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 * @returns {Promise} The multirequest execution promise\n */\n\n }, {\n key: 'execute',\n value: function execute() {\n var _this2 = this;\n\n return new Promise(function (resolve, reject) {\n try {\n _this2.params = JSON.stringify(_this2.params);\n } catch (err) {\n MultiRequestBuilder._logger.error('' + err.message);\n reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.PROVIDER, _error2.default.Code.FAILED_PARSING_REQUEST, {\n error: err,\n params: _this2.params\n }));\n }\n _this2.doHttpRequest().then(function (data) {\n var multiRequestResult = new MultiRequestResult(data);\n if (multiRequestResult.success) {\n resolve({\n headers: _this2.responseHeaders,\n response: multiRequestResult\n });\n } else {\n reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, _error2.default.Code.MULTIREQUEST_API_ERROR, {\n url: _this2.url,\n headers: _this2.responseHeaders,\n results: multiRequestResult.results\n }));\n }\n }, function (err) {\n reject(err);\n });\n });\n }\n }]);\n\n return MultiRequestBuilder;\n}(_requestBuilder2.default);\n\nMultiRequestBuilder._logger = (0, _logger2.default)('MultiRequestBuilder');\nexports.default = MultiRequestBuilder;\n\nvar MultiRequestResult =\n/**\n * @constructor\n * @param {Object} response data\n */\nexports.MultiRequestResult = function MultiRequestResult(response) {\n var _this3 = this;\n\n _classCallCheck(this, MultiRequestResult);\n\n this.results = [];\n\n this.success = true;\n var responseArr = response.result ? response.result : response;\n responseArr.forEach(function (result) {\n var serviceResult = new _baseServiceResult2.default(result);\n _this3.results.push(serviceResult);\n if (serviceResult.hasError) {\n MultiRequestResult._logger.error('Service returned an error with error code: ' + serviceResult.error.code + ' and message: ' + serviceResult.error.message + '.');\n _this3.success = false;\n return;\n }\n });\n}\n/**\n * @memberof MultiRequestResult\n * @type {Object}\n */\n\n/**\n * @memberof MultiRequestResult\n * @type {boolean}\n */\n;\n\nMultiRequestResult._logger = (0, _logger2.default)('MultiRequestResult');\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KalturaAccessControlMessage =\n\n/**\n * @constructor\n * @param {Object} data The json response\n */\n\n/**\n * @member - The access control message\n * @type {string}\n */\nfunction KalturaAccessControlMessage(data) {\n _classCallCheck(this, KalturaAccessControlMessage);\n\n this.message = data.message;\n this.code = data.code;\n}\n/**\n * @member - The access control message code\n * @@type {string}\n */\n;\n\nexports.default = KalturaAccessControlMessage;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KalturaDrmPlaybackPluginData =\n\n/**\n * @constructor\n * @param {Object} drm The json response\n */\n\n\n/**\n * @member - The drm scheme\n * @type {string}\n */\n\n\n/**\n * @member - The license URL\n * @type {string}\n */\n\n\n/**\n * @member - The drm certificate\n * @type {?string}\n */\nfunction KalturaDrmPlaybackPluginData(drm) {\n _classCallCheck(this, KalturaDrmPlaybackPluginData);\n\n this.scheme = drm.scheme;\n this.licenseURL = drm.licenseURL;\n this.certificate = drm.certificate;\n};\n\nKalturaDrmPlaybackPluginData.Scheme = {\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};\nexports.default = KalturaDrmPlaybackPluginData;\n\n/***/ }),\n/* 15 */,\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KalturaMediaEntry =\n\n/**\n * @constructor\n * @param {Object} entry The json response\n */\n\n\n/**\n * @member - The entry id\n * @type {string}\n */\n\n/**\n * @member - The entry referenceId\n * @type {string}\n */\n\n/**\n * @member - The entry externalSourceType\n * @type {string}\n */\n\n/**\n * @member - Entry name (Min 1 chars)\n * @type {string}\n */\n\n/**\n * @member - Entry description\n * @type {string}\n */\n\n/**\n * @member - The URL used for playback. This is not the download URL.\n * @type {string}\n */\n\n/**\n * @member - Comma separated flavor params ids that exists for this media entry\n * @type {string}\n */\n\n/**\n * @member - The entry duration\n * @type {number}\n */\n\n/**\n * @member - The type of the entry, this is auto filled by the derived entry object\n * @type {string | number}\n */\n\n/**\n * @member - The type of the entry, this is auto filled by the derived entry object (Image, Audio etc.)\n * @type {number}\n */\n\n/**\n * @member - Entry poster image\n * @type {string}\n */\n\n/**\n * @member - DVR status\n * @type {number}\n */\n\n/**\n * @member - Entry tags\n * @type {string}\n */\n\n\n/**\n * @member - Entry status\n * @type {number}\n */\nfunction KalturaMediaEntry(entry) {\n _classCallCheck(this, KalturaMediaEntry);\n\n this.id = entry.id;\n this.referenceId = entry.referenceId;\n this.externalSourceType = entry.externalSourceType;\n this.name = entry.name;\n this.description = entry.description;\n this.dataUrl = entry.dataUrl;\n this.type = entry.type;\n this.entryType = entry.mediaType;\n this.flavorParamsIds = entry.flavorParamsIds;\n this.duration = entry.duration;\n this.poster = entry.thumbnailUrl;\n this.status = entry.status;\n this.dvrStatus = entry.dvrStatus;\n this.tags = entry.tags;\n};\n\nKalturaMediaEntry.EntryType = {\n AUTOMATIC: { value: -1 },\n EXTERNAL_MEDIA: { value: 'externalMedia.externalMedia' },\n MEDIA_CLIP: { value: 1 },\n MIX: { value: 2 },\n PLAYLIST: { value: 5 },\n DATA: { value: 6 },\n LIVE_STREAM: { value: 7 },\n LIVE_CHANNEL: { value: 8 },\n DOCUMENT: { value: 10 }\n};\nKalturaMediaEntry.MediaType = {\n VIDEO: { value: 1 },\n IMAGE: { value: 2 },\n AUDIO: { value: 5 },\n LIVE_STREAM_FLASH: { value: 201 },\n LIVE_STREAM_WINDOWS_MEDIA: { value: 202 },\n LIVE_STREAM_REAL_MEDIA: { value: 203 },\n LIVE_STREAM_QUICK_TIME: { value: 204 }\n};\nKalturaMediaEntry.EntryStatus = {\n ERROR_IMPORTING: -2,\n ERROR_CONVERTING: -1,\n SCAN_FAILURE: 'virusScan.ScanFailure',\n IMPORT: 0,\n INFECTED: 'virusScan.Infected',\n PRECONVERT: 1,\n READY: 2,\n DELETED: 3,\n PENDING: 4,\n MODERATE: 5,\n BLOCKED: 6,\n NO_CONTENT: 7\n};\nKalturaMediaEntry.EntryModerationStatus = {\n PENDING_MODERATION: 1,\n APPROVED: 2,\n REJECTED: 3,\n FLAGGED_FOR_REVIEW: 4,\n MODERATE: 5,\n AUTO_APPROVED: 6\n};\nexports.default = KalturaMediaEntry;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _multiRequestBuilder = __webpack_require__(12);\n\nvar _multiRequestBuilder2 = _interopRequireDefault(_multiRequestBuilder);\n\nvar _config = __webpack_require__(5);\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SERVICE_NAME = 'multirequest';\n\nvar OVPService = function () {\n function OVPService() {\n _classCallCheck(this, OVPService);\n }\n\n _createClass(OVPService, null, [{\n key: 'getMultiRequest',\n\n /**\n * Gets a new instance of MultiRequestBuilder with ovp params\n * @function getMultiRequest\n * @param {string} playerVersion The player version\n * @param {string} ks The ks\n * @param {string} partnerId The partner ID\n * @returns {MultiRequestBuilder} The multi request builder\n * @static\n */\n value: function getMultiRequest(playerVersion, ks, partnerId) {\n var config = _config2.default.get();\n var ovpParams = config.serviceParams;\n Object.assign(ovpParams, { ks: ks, clientTag: 'html5:v' + playerVersion });\n if (partnerId) {\n Object.assign(ovpParams, { partnerId: partnerId });\n }\n var headers = new Map();\n headers.set('Content-Type', 'application/json');\n var multiReq = new _multiRequestBuilder2.default(headers);\n multiReq.method = 'POST';\n multiReq.service = SERVICE_NAME;\n multiReq.url = multiReq.getUrl(config.serviceUrl);\n multiReq.params = ovpParams;\n return multiReq;\n }\n }]);\n\n return OVPService;\n}();\n\nexports.default = OVPService;\n\n/***/ }),\n/* 18 */,\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _mediaEntry = __webpack_require__(4);\n\nvar _mediaEntry2 = _interopRequireDefault(_mediaEntry);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar EntryList = function EntryList() {\n _classCallCheck(this, EntryList);\n\n this.items = [];\n}\n/**\n * @member - entry list items\n * @type {Array}\n */\n;\n\nexports.default = EntryList;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _logger = __webpack_require__(2);\n\nvar _dataLoaderManager = __webpack_require__(11);\n\nvar _dataLoaderManager2 = _interopRequireDefault(_dataLoaderManager);\n\nvar _error = __webpack_require__(1);\n\nvar _error2 = _interopRequireDefault(_error);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar BaseProvider = function () {\n _createClass(BaseProvider, [{\n key: 'partnerId',\n get: function get() {\n return this._partnerId;\n }\n }, {\n key: 'widgetId',\n get: function get() {\n return this._widgetId || this.defaultWidgetId;\n }\n }, {\n key: 'defaultWidgetId',\n get: function get() {\n return '_' + this._partnerId;\n }\n }, {\n key: 'uiConfId',\n get: function get() {\n return this._uiConfId;\n }\n }, {\n key: 'ks',\n get: function get() {\n return this._ks;\n },\n set: function set(value) {\n this._ks = value;\n }\n }, {\n key: 'playerVersion',\n get: function get() {\n return this._playerVersion;\n }\n }, {\n key: 'isAnonymous',\n get: function get() {\n return this._isAnonymous;\n }\n }]);\n\n function BaseProvider(options, playerVersion) {\n _classCallCheck(this, BaseProvider);\n\n this._networkRetryConfig = {\n async: true,\n timeout: 0,\n maxAttempts: 4\n };\n\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 if (options.log && options.log.level && this.LogLevel[options.log.level]) {\n (0, _logger.setLogLevel)(this.LogLevel[options.log.level]);\n }\n if (options.log && typeof options.log.handler === 'function') {\n (0, _logger.setLogHandler)(options.log.handler);\n }\n }\n\n // eslint-disable-next-line no-unused-vars\n\n\n _createClass(BaseProvider, [{\n key: 'getMediaConfig',\n value: function getMediaConfig(mediaInfo) {\n return Promise.reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.PROVIDER, _error2.default.Code.METHOD_NOT_IMPLEMENTED, {\n message: 'getMediaConfig method must be implement by the derived class'\n }));\n }\n\n // eslint-disable-next-line no-unused-vars\n\n }, {\n key: 'getPlaylistConfig',\n value: function getPlaylistConfig(playlistInfo) {\n return Promise.reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.PROVIDER, _error2.default.Code.METHOD_NOT_IMPLEMENTED, {\n message: 'The provider does not support loading playlist by id'\n }));\n }\n\n // eslint-disable-next-line no-unused-vars\n\n }, {\n key: 'getEntryListConfig',\n value: function getEntryListConfig(entryListInfo) {\n return Promise.reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.PROVIDER, _error2.default.Code.METHOD_NOT_IMPLEMENTED, {\n message: 'The provider does not support loading entry list'\n }));\n }\n }, {\n key: '_verifyHasSources',\n value: function _verifyHasSources(sources) {\n if (sources.hls.concat(sources.dash, sources.progressive).length === 0) {\n throw new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.SERVICE, _error2.default.Code.MISSING_PLAY_SOURCE, {\n action: '',\n messages: 'No play source for entry id: ' + sources.id\n });\n }\n }\n }, {\n key: 'getLogLevel',\n value: function getLogLevel(name) {\n return (0, _logger.getLogLevel)(name);\n }\n }, {\n key: 'setLogLevel',\n value: function setLogLevel(level, name) {\n (0, _logger.setLogLevel)(level, name);\n }\n }, {\n key: 'LogLevel',\n get: function get() {\n return _logger.LogLevel;\n }\n }]);\n\n return BaseProvider;\n}();\n\nexports.default = BaseProvider;\n\n/***/ }),\n/* 21 */,\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KalturaRuleAction =\n\n/**\n * @constructor\n * @param {Object} data - The response\n */\n\n\n/**\n * @member - The type of the action\n * @type {string|number}\n */\nfunction KalturaRuleAction(data) {\n _classCallCheck(this, KalturaRuleAction);\n\n this.type = data.type;\n};\n\nKalturaRuleAction.Type = {\n DRM_POLICY: 'drm.DRM_POLICY',\n BLOCK: 1,\n PREVIEW: 2,\n LIMIT_FLAVORS: 3,\n ADD_TO_STORAGE: 4,\n LIMIT_DELIVERY_PROFILES: 5,\n SERVE_FROM_REMOTE_SERVER: 6,\n REQUEST_HOST_REGEX: 7,\n LIMIT_THUMBNAIL_CAPTURE: 8\n};\nexports.default = KalturaRuleAction;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar clone = function clone(data) {\n var node = void 0;\n if (Array.isArray(data)) {\n node = data.length > 0 ? data.slice(0) : [];\n node.forEach(function (e, i) {\n if ((typeof e === 'undefined' ? 'undefined' : _typeof(e)) === 'object' && e !== {} || Array.isArray(e) && e.length > 0) {\n node[i] = clone(e);\n }\n });\n } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') {\n node = Object.assign({}, data);\n Object.keys(node).forEach(function (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\nexports.clone = clone;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n\nvar Category = {\n /** Errors from the network stack. */\n NETWORK: 1,\n SERVICE: 2,\n PROVIDER: 3\n};\nexports.Category = Category;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n\nvar Code = {\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\nexports.Code = Code;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n\nvar Severity = {\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\nexports.Severity = Severity;\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.4.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.DEBUG = defineLogLevel(1, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(2, 'INFO');\r\n\tLogger.TIME = defineLogLevel(3, 'TIME');\r\n\tLogger.WARN = defineLogLevel(4, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (true) {\r\n\t\t!(__WEBPACK_AMD_DEFINE_FACTORY__ = (Logger),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n\n\n/***/ }),\n/* 28 */,\n/* 29 */,\n/* 30 */,\n/* 31 */,\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar FIELDS = 'id,referenceId,name,description,thumbnailUrl,dataUrl,duration,msDuration,flavorParamsIds,mediaType,type,tags,dvrStatus,externalSourceType,status';\n\nvar BaseEntryResponseProfile =\n\n/**\n * @constructor\n * @param {Object} responseProfile -\n */\n\n/**\n * @member - the response profile type\n * @type {number}\n */\n\n/**\n * @member - Comma separated fields list to be included or excluded\n * @type {string}\n */\nfunction BaseEntryResponseProfile() {\n var responseProfile = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n _classCallCheck(this, BaseEntryResponseProfile);\n\n this.type = responseProfile.type || BaseEntryResponseProfile.Type.INCLUDE_FIELDS;\n this.fields = responseProfile.fields || FIELDS;\n};\n\nBaseEntryResponseProfile.Type = {\n INCLUDE_FIELDS: 1,\n EXCLUDE_FIELDS: 2\n};\nexports.default = BaseEntryResponseProfile;\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _baseServiceResult = __webpack_require__(3);\n\nvar _baseServiceResult2 = _interopRequireDefault(_baseServiceResult);\n\nvar _kalturaMediaEntry = __webpack_require__(16);\n\nvar _kalturaMediaEntry2 = _interopRequireDefault(_kalturaMediaEntry);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar KalturaBaseEntryListResponse = function (_ServiceResult) {\n _inherits(KalturaBaseEntryListResponse, _ServiceResult);\n\n /**\n * @constructor\n * @param {Object} responseObj The json response\n */\n\n /**\n * @member - The total count\n * @type {number}\n */\n function KalturaBaseEntryListResponse(responseObj) {\n _classCallCheck(this, KalturaBaseEntryListResponse);\n\n var _this = _possibleConstructorReturn(this, (KalturaBaseEntryListResponse.__proto__ || Object.getPrototypeOf(KalturaBaseEntryListResponse)).call(this, responseObj));\n\n if (!_this.hasError) {\n _this.totalCount = responseObj.totalCount;\n if (_this.totalCount > 0) {\n _this.entries = [];\n responseObj.objects.map(function (entry) {\n return _this.entries.push(new _kalturaMediaEntry2.default(entry));\n });\n }\n }\n return _this;\n }\n /**\n * @member - The entries\n * @type {Array}\n */\n\n\n return KalturaBaseEntryListResponse;\n}(_baseServiceResult2.default);\n\nexports.default = KalturaBaseEntryListResponse;\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _baseServiceResult = __webpack_require__(3);\n\nvar _baseServiceResult2 = _interopRequireDefault(_baseServiceResult);\n\nvar _kalturaMetadata = __webpack_require__(61);\n\nvar _kalturaMetadata2 = _interopRequireDefault(_kalturaMetadata);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar KalturaMetadataListResponse = function (_ServiceResult) {\n _inherits(KalturaMetadataListResponse, _ServiceResult);\n\n /**\n * @constructor\n * @param {Object} responseObj The response\n */\n function KalturaMetadataListResponse(responseObj) {\n _classCallCheck(this, KalturaMetadataListResponse);\n\n var _this = _possibleConstructorReturn(this, (KalturaMetadataListResponse.__proto__ || Object.getPrototypeOf(KalturaMetadataListResponse)).call(this, responseObj));\n\n if (!_this.hasError) {\n _this.totalCount = responseObj.totalCount;\n if (_this.totalCount > 0) {\n _this.metas = [];\n responseObj.objects.map(function (meta) {\n return _this.metas.push(new _kalturaMetadata2.default(meta));\n });\n }\n }\n return _this;\n }\n\n return KalturaMetadataListResponse;\n}(_baseServiceResult2.default);\n\nexports.default = KalturaMetadataListResponse;\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _baseServiceResult = __webpack_require__(3);\n\nvar _baseServiceResult2 = _interopRequireDefault(_baseServiceResult);\n\nvar _kalturaAccessControlMessage = __webpack_require__(13);\n\nvar _kalturaAccessControlMessage2 = _interopRequireDefault(_kalturaAccessControlMessage);\n\nvar _kalturaPlaybackSource = __webpack_require__(36);\n\nvar _kalturaPlaybackSource2 = _interopRequireDefault(_kalturaPlaybackSource);\n\nvar _kalturaAccessControlModifyRequestHostRegexAction = __webpack_require__(58);\n\nvar _kalturaAccessControlModifyRequestHostRegexAction2 = _interopRequireDefault(_kalturaAccessControlModifyRequestHostRegexAction);\n\nvar _kalturaRuleAction = __webpack_require__(22);\n\nvar _kalturaRuleAction2 = _interopRequireDefault(_kalturaRuleAction);\n\nvar _kalturaFlavorAsset = __webpack_require__(59);\n\nvar _kalturaFlavorAsset2 = _interopRequireDefault(_kalturaFlavorAsset);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar KalturaPlaybackContext = function (_ServiceResult) {\n _inherits(KalturaPlaybackContext, _ServiceResult);\n\n /**\n * @constructor\n * @param {Object} response The response\n */\n\n /**\n * @member - Array of actions as received from the rules that invalidated\n * @type {Array}\n */\n\n /**\n * @member - The playback sources\n * @type {Array}\n */\n function KalturaPlaybackContext(response) {\n _classCallCheck(this, KalturaPlaybackContext);\n\n var _this = _possibleConstructorReturn(this, (KalturaPlaybackContext.__proto__ || Object.getPrototypeOf(KalturaPlaybackContext)).call(this, response));\n\n _this.sources = [];\n _this.actions = [];\n _this.messages = [];\n _this.flavorAssets = [];\n\n if (!_this.hasError) {\n var messages = response.messages;\n if (messages) {\n messages.map(function (message) {\n return _this.messages.push(new _kalturaAccessControlMessage2.default(message));\n });\n }\n var actions = response.actions;\n if (actions) {\n actions.map(function (action) {\n if (action.type === _kalturaRuleAction2.default.Type.REQUEST_HOST_REGEX) {\n _this.actions.push(new _kalturaAccessControlModifyRequestHostRegexAction2.default(action));\n } else {\n _this.actions.push(new _kalturaRuleAction2.default(action));\n }\n });\n }\n var sources = response.sources;\n if (sources) {\n sources.map(function (source) {\n return _this.sources.push(new _kalturaPlaybackSource2.default(source));\n });\n }\n var flavorAssets = response.flavorAssets;\n if (flavorAssets) {\n flavorAssets.map(function (flavor) {\n return _this.flavorAssets.push(new _kalturaFlavorAsset2.default(flavor));\n });\n }\n }\n return _this;\n }\n /**\n * @member - The flavor assets\n * @type {Array}\n */\n\n /**\n * @member - Array of actions as received from the rules that invalidated\n * @type {Array}\n */\n\n\n _createClass(KalturaPlaybackContext, [{\n key: 'hasBlockAction',\n value: function hasBlockAction() {\n return this.getBlockAction() !== undefined;\n }\n }, {\n key: 'getBlockAction',\n value: function getBlockAction() {\n return this.actions.find(function (action) {\n return action.type === _kalturaRuleAction2.default.Type.BLOCK;\n });\n }\n }, {\n key: 'getErrorMessages',\n value: function getErrorMessages() {\n return this.messages;\n }\n\n /**\n * Get the KalturaAccessControlModifyRequestHostRegexAction action\n * @function getRequestHostRegexAction\n * @returns {?KalturaAccessControlModifyRequestHostRegexAction} The action\n * */\n\n }, {\n key: 'getRequestHostRegexAction',\n value: function getRequestHostRegexAction() {\n var action = this.actions.find(function (action) {\n return action.type === _kalturaRuleAction2.default.Type.REQUEST_HOST_REGEX;\n });\n if (action instanceof _kalturaAccessControlModifyRequestHostRegexAction2.default) {\n return action;\n }\n }\n }]);\n\n return KalturaPlaybackContext;\n}(_baseServiceResult2.default);\n\nexports.default = KalturaPlaybackContext;\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _kalturaDrmPlaybackPluginData = __webpack_require__(14);\n\nvar _kalturaDrmPlaybackPluginData2 = _interopRequireDefault(_kalturaDrmPlaybackPluginData);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KalturaPlaybackSource = function () {\n\n /**\n * @constructor\n * @param {Object} source The response\n */\n\n /**\n * @member - comma separated string of flavor ids\n * @type {string}\n */\n\n /**\n * @member - The source URL\n * @type {string}\n */\n\n /**\n * @member - source format according to delivery profile streamer type (applehttp, mpegdash etc.)\n * @type {string}\n */\n function KalturaPlaybackSource(source) {\n var _this = this;\n\n _classCallCheck(this, KalturaPlaybackSource);\n\n this.drm = [];\n\n this.format = source.format;\n this.deliveryProfileId = source.deliveryProfileId;\n this.url = source.url;\n this.protocols = source.protocols;\n this.flavorIds = source.flavorIds;\n if (source.drm) {\n source.drm.map(function (drm) {\n return _this.drm.push(new _kalturaDrmPlaybackPluginData2.default(drm));\n });\n }\n }\n\n /**\n * Checks if source has DRM data\n * @function hasDrmData\n * @returns {boolean} Is source has DRM\n */\n\n /**\n * @member - drm data object containing relevant license url ,scheme name and certificate\n * @type {Array}\n */\n\n /**\n * @member - comma separated string according to deliveryProfile media protocols ('http,https' etc.)\n * @type {string}\n */\n\n /**\n * @member - delivery profile Id\n * @type {string}\n */\n\n\n _createClass(KalturaPlaybackSource, [{\n key: 'hasDrmData',\n value: function hasDrmData() {\n return this.drm && this.drm.length > 0;\n }\n\n /**\n * Checks if source has flavor IDs\n * @function hasFlavorIds\n * @returns {boolean} Is source ha flavor IDs\n */\n\n }, {\n key: 'hasFlavorIds',\n value: function hasFlavorIds() {\n return !!this.flavorIds && this.flavorIds.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\n }, {\n key: 'getProtocol',\n value: function getProtocol(protocol) {\n var returnValue = '';\n if (this.protocols && this.protocols.length > 0) {\n var protocolsArr = this.protocols.split(',');\n protocolsArr.forEach(function (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\n return KalturaPlaybackSource;\n}();\n\nexports.default = KalturaPlaybackSource;\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _ovpService = __webpack_require__(17);\n\nvar _ovpService2 = _interopRequireDefault(_ovpService);\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _baseEntryResponseProfile = __webpack_require__(32);\n\nvar _baseEntryResponseProfile2 = _interopRequireDefault(_baseEntryResponseProfile);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SERVICE_NAME = 'baseEntry';\n\nvar OVPBaseEntryService = function (_OVPService) {\n _inherits(OVPBaseEntryService, _OVPService);\n\n function OVPBaseEntryService() {\n _classCallCheck(this, OVPBaseEntryService);\n\n return _possibleConstructorReturn(this, (OVPBaseEntryService.__proto__ || Object.getPrototypeOf(OVPBaseEntryService)).apply(this, arguments));\n }\n\n _createClass(OVPBaseEntryService, null, [{\n key: 'getPlaybackContext',\n\n /**\n * Creates an instance of RequestBuilder for baseentry.getPlaybackContext\n * @function getPlaybackContext\n * @param {string} serviceUrl The service base URL\n * @param {string} ks The ks\n * @returns {RequestBuilder} The request builder\n * @static\n */\n value: function getPlaybackContext(serviceUrl, ks) {\n var headers = new Map();\n var serviceEntryId = ks === '{1:result:ks}' ? '{2:result:objects:0:id}' : '{1:result:objects:0:id}';\n headers.set('Content-Type', 'application/json');\n var request = new _requestBuilder2.default(headers);\n request.service = SERVICE_NAME;\n request.action = 'getPlaybackContext';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n request.tag = 'baseEntry-getPlaybackContext';\n var contextDataParams = { objectType: 'KalturaContextDataParams', flavorTags: 'all' };\n request.params = { entryId: serviceEntryId, ks: ks, contextDataParams: contextDataParams };\n return request;\n }\n\n /**\n * Creates an instance of RequestBuilder for baseentry.list\n * @function list\n * @param {string} serviceUrl The base URL\n * @param {string} ks The ks\n * @param {string} entryId The entry ID\n * @param {boolean} redirectFromEntryId whether the live entry should continue and play the VOD one after the live stream ends.\n * @returns {RequestBuilder} The request builder\n * @static\n */\n\n }, {\n key: 'list',\n value: function list(serviceUrl, ks, entryId, redirectFromEntryId) {\n var headers = new Map();\n headers.set('Content-Type', 'application/json');\n var request = new _requestBuilder2.default(headers);\n request.service = SERVICE_NAME;\n request.action = 'list';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n request.tag = 'list';\n request.params = OVPBaseEntryService.getEntryListReqParams(entryId, ks, redirectFromEntryId);\n return request;\n }\n\n /**\n * Gets baseentry.list service params\n * @function getEntryListReqParams\n * @param {string} entryId The entry ID\n * @param {string} ks The ks\n * @param {boolean} redirectFromEntryId whether the live entry should continue and play the VOD one after the live stream ends.\n * @returns {{ks: string, filter: {redirectFromEntryId: string}, responseProfile: {fields: string, type: number}}} The service params object\n * @static\n */\n\n }, {\n key: 'getEntryListReqParams',\n value: function getEntryListReqParams(entryId, ks, redirectFromEntryId) {\n var filterParams = redirectFromEntryId ? { redirectFromEntryId: entryId } : { idEqual: entryId };\n return { ks: ks, filter: filterParams, responseProfile: new _baseEntryResponseProfile2.default() };\n }\n }]);\n\n return OVPBaseEntryService;\n}(_ovpService2.default);\n\nexports.default = OVPBaseEntryService;\n\n/***/ }),\n/* 38 */,\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _logger = __webpack_require__(2);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _config = __webpack_require__(5);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _providerParser = __webpack_require__(57);\n\nvar _providerParser2 = _interopRequireDefault(_providerParser);\n\nvar _kalturaMediaEntry = __webpack_require__(16);\n\nvar _kalturaMediaEntry2 = _interopRequireDefault(_kalturaMediaEntry);\n\nvar _mediaEntryLoader = __webpack_require__(53);\n\nvar _mediaEntryLoader2 = _interopRequireDefault(_mediaEntryLoader);\n\nvar _sessionLoader = __webpack_require__(55);\n\nvar _sessionLoader2 = _interopRequireDefault(_sessionLoader);\n\nvar _dataLoaderManager = __webpack_require__(51);\n\nvar _dataLoaderManager2 = _interopRequireDefault(_dataLoaderManager);\n\nvar _playlistLoader = __webpack_require__(54);\n\nvar _playlistLoader2 = _interopRequireDefault(_playlistLoader);\n\nvar _baseProvider = __webpack_require__(20);\n\nvar _baseProvider2 = _interopRequireDefault(_baseProvider);\n\nvar _mediaEntry = __webpack_require__(4);\n\nvar _mediaEntry2 = _interopRequireDefault(_mediaEntry);\n\nvar _entryListLoader = __webpack_require__(52);\n\nvar _entryListLoader2 = _interopRequireDefault(_entryListLoader);\n\nvar _error = __webpack_require__(1);\n\nvar _error2 = _interopRequireDefault(_error);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar OVPProvider = function (_BaseProvider) {\n _inherits(OVPProvider, _BaseProvider);\n\n /**\n * @constructor\n * @param {ProviderOptionsObject} options - provider options\n * @param {string} playerVersion - player version\n */\n function OVPProvider(options, playerVersion) {\n _classCallCheck(this, OVPProvider);\n\n var _this = _possibleConstructorReturn(this, (OVPProvider.__proto__ || Object.getPrototypeOf(OVPProvider)).call(this, options, playerVersion));\n\n _this._filterOptionsConfig = { redirectFromEntryId: true };\n\n _this._logger = (0, _logger2.default)('OVPProvider');\n _config2.default.set(options.env);\n _this._setFilterOptionsConfig(options.filterOptions);\n _this._networkRetryConfig = Object.assign(_this._networkRetryConfig, options.networkRetryParameters);\n return _this;\n }\n\n /**\n * Gets the backend media config.\n * @param {OVPProviderMediaInfoObject} mediaInfo - ovp media info\n * @returns {Promise} - The provider media config\n */\n\n\n _createClass(OVPProvider, [{\n key: 'getMediaConfig',\n value: function getMediaConfig(mediaInfo) {\n var _this2 = this;\n\n if (mediaInfo.ks) {\n this.ks = mediaInfo.ks;\n this._isAnonymous = false;\n }\n if (this.widgetId !== this.defaultWidgetId) {\n this._isAnonymous = false;\n }\n this._dataLoader = new _dataLoaderManager2.default(this.playerVersion, this.partnerId, this.ks, this._networkRetryConfig);\n return new Promise(function (resolve, reject) {\n var entryId = mediaInfo.entryId;\n if (entryId) {\n var ks = _this2.ks;\n if (!ks) {\n ks = '{1:result:ks}';\n _this2._dataLoader.add(_sessionLoader2.default, { widgetId: _this2.widgetId });\n }\n var redirectFromEntryId = _this2._getEntryRedirectFilter(mediaInfo);\n _this2._dataLoader.add(_mediaEntryLoader2.default, { entryId: entryId, ks: ks, redirectFromEntryId: redirectFromEntryId });\n return _this2._dataLoader.fetchData().then(function (response) {\n try {\n resolve(_this2._parseDataFromResponse(response));\n } catch (err) {\n reject(err);\n }\n }, function (err) {\n reject(err);\n });\n } else {\n reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.PROVIDER, _error2.default.Code.MISSING_MANDATORY_PARAMS, { message: 'missing entry id' }));\n }\n });\n }\n }, {\n key: '_getEntryRedirectFilter',\n value: function _getEntryRedirectFilter(mediaInfo) {\n return typeof mediaInfo.redirectFromEntryId === 'boolean' ? mediaInfo.redirectFromEntryId : typeof this._filterOptionsConfig.redirectFromEntryId === 'boolean' ? this._filterOptionsConfig.redirectFromEntryId : true;\n }\n }, {\n key: '_setFilterOptionsConfig',\n value: function _setFilterOptionsConfig(options) {\n if (options && typeof options.redirectFromEntryId == 'boolean') {\n this._filterOptionsConfig.redirectFromEntryId = options.redirectFromEntryId;\n }\n }\n }, {\n key: '_parseDataFromResponse',\n value: function _parseDataFromResponse(data) {\n this._logger.debug('Data parsing started');\n var mediaConfig = {\n session: {\n isAnonymous: this._isAnonymous,\n partnerId: this.partnerId\n },\n sources: this._getDefaultSourcesObject(),\n plugins: {}\n };\n\n if (this.uiConfId) {\n mediaConfig.session.uiConfId = this.uiConfId;\n }\n if (data) {\n if (data.has(_sessionLoader2.default.id)) {\n var sessionLoader = data.get(_sessionLoader2.default.id);\n if (sessionLoader && sessionLoader.response) {\n mediaConfig.session.ks = sessionLoader.response;\n if (this.widgetId !== this.defaultWidgetId) {\n this.ks = mediaConfig.session.ks;\n }\n }\n } else {\n mediaConfig.session.ks = this.ks;\n }\n if (data.has(_mediaEntryLoader2.default.id)) {\n var mediaLoader = data.get(_mediaEntryLoader2.default.id);\n if (mediaLoader && mediaLoader.response) {\n var response = mediaLoader.response;\n if (_providerParser2.default.hasBlockAction(response)) {\n throw new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.SERVICE, _error2.default.Code.BLOCK_ACTION, {\n action: _providerParser2.default.getBlockAction(response),\n messages: _providerParser2.default.getErrorMessages(response)\n });\n }\n var mediaEntry = _providerParser2.default.getMediaEntry(this.isAnonymous ? '' : this.ks, this.partnerId, this.uiConfId, response);\n Object.assign(mediaConfig.sources, this._getSourcesObject(mediaEntry));\n this._verifyMediaStatus(mediaEntry);\n this._verifyHasSources(mediaConfig.sources);\n }\n }\n }\n this._logger.debug('Data parsing finished', mediaConfig);\n return mediaConfig;\n }\n\n /**\n * Checks media is ready for playback (not being imported or converted)\n * @param {MediaEntry} mediaEntry - the media entry info\n * @returns {void}\n */\n\n }, {\n key: '_verifyMediaStatus',\n value: function _verifyMediaStatus(mediaEntry) {\n if ([_kalturaMediaEntry2.default.EntryStatus.IMPORT, _kalturaMediaEntry2.default.EntryStatus.PRECONVERT].includes(mediaEntry.status)) {\n throw new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.SERVICE, _error2.default.Code.MEDIA_STATUS_NOT_READY, {\n messages: 'Status of entry id ' + mediaEntry.id + ' is ' + mediaEntry.status + ' and is still being imported or converted',\n data: { status: status }\n });\n }\n }\n /**\n * Gets the backend playlist config.\n * @param {ProviderPlaylistInfoObject} playlistInfo - ovp playlist info\n * @returns {Promise} - The provider playlist config\n */\n\n }, {\n key: 'getPlaylistConfig',\n value: function getPlaylistConfig(playlistInfo) {\n var _this3 = this;\n\n if (playlistInfo.ks) {\n this.ks = playlistInfo.ks;\n this._isAnonymous = false;\n }\n if (this.widgetId !== this.defaultWidgetId) {\n this._isAnonymous = false;\n }\n this._dataLoader = new _dataLoaderManager2.default(this.playerVersion, this.partnerId, this.ks, this._networkRetryConfig);\n return new Promise(function (resolve, reject) {\n var playlistId = playlistInfo.playlistId;\n if (playlistId) {\n var ks = _this3.ks;\n if (!ks) {\n ks = '{1:result:ks}';\n _this3._dataLoader.add(_sessionLoader2.default, { widgetId: _this3.widgetId });\n }\n _this3._dataLoader.add(_playlistLoader2.default, { playlistId: playlistId, ks: ks });\n _this3._dataLoader.fetchData().then(function (response) {\n resolve(_this3._parsePlaylistDataFromResponse(response));\n }, function (err) {\n reject(err);\n });\n } else {\n reject({ success: false, data: 'Missing mandatory parameter' });\n }\n });\n }\n }, {\n key: '_parsePlaylistDataFromResponse',\n value: function _parsePlaylistDataFromResponse(data) {\n var _this4 = this;\n\n this._logger.debug('Data parsing started');\n var playlistConfig = this._getPlaylistObject();\n if (data && data.has(_playlistLoader2.default.id)) {\n var playlistLoader = data.get(_playlistLoader2.default.id);\n if (playlistLoader && playlistLoader.response) {\n var playlist = _providerParser2.default.getPlaylist(playlistLoader.response);\n playlistConfig.id = playlist.id;\n playlistConfig.poster = playlist.poster;\n playlistConfig.metadata.name = playlist.name;\n playlistConfig.metadata.description = playlist.description;\n playlist.items.forEach(function (i) {\n return playlistConfig.items.push({ sources: _this4._getSourcesObject(i) });\n });\n }\n }\n this._logger.debug('Data parsing finished', playlistConfig);\n return playlistConfig;\n }\n\n /**\n * Gets playlist config from entry list.\n * @param {ProviderEntryListObject} entryListInfo - ovp entry list info\n * @returns {Promise} - The provider playlist config\n */\n\n }, {\n key: 'getEntryListConfig',\n value: function getEntryListConfig(entryListInfo) {\n var _this5 = this;\n\n if (entryListInfo.ks) {\n this.ks = entryListInfo.ks;\n this._isAnonymous = false;\n }\n if (this.widgetId !== this.defaultWidgetId) {\n this._isAnonymous = false;\n }\n this._dataLoader = new _dataLoaderManager2.default(this.playerVersion, this.partnerId, this.ks, this._networkRetryConfig);\n return new Promise(function (resolve, reject) {\n var entries = entryListInfo.entries;\n if (entries && entries.length) {\n var ks = _this5.ks;\n if (!ks) {\n ks = '{1:result:ks}';\n _this5._dataLoader.add(_sessionLoader2.default, { widgetId: _this5.widgetId });\n }\n var redirectFromEntryId = _this5._getEntryRedirectFilter(entryListInfo);\n _this5._dataLoader.add(_entryListLoader2.default, { entries: entries, ks: ks, redirectFromEntryId: redirectFromEntryId });\n _this5._dataLoader.fetchData().then(function (response) {\n resolve(_this5._parseEntryListDataFromResponse(response));\n }, function (err) {\n reject(err);\n });\n } else {\n reject({ success: false, data: 'Missing mandatory parameter' });\n }\n });\n }\n }, {\n key: '_parseEntryListDataFromResponse',\n value: function _parseEntryListDataFromResponse(data) {\n var _this6 = this;\n\n this._logger.debug('Data parsing started');\n var playlistConfig = this._getPlaylistObject();\n if (data && data.has(_entryListLoader2.default.id)) {\n var playlistLoader = data.get(_entryListLoader2.default.id);\n if (playlistLoader && playlistLoader.response) {\n var entryList = _providerParser2.default.getEntryList(playlistLoader.response);\n entryList.items.forEach(function (i) {\n return playlistConfig.items.push({ sources: _this6._getSourcesObject(i) });\n });\n }\n }\n this._logger.debug('Data parsing finished', playlistConfig);\n return playlistConfig;\n }\n }, {\n key: '_getPlaylistObject',\n value: function _getPlaylistObject() {\n return {\n id: '',\n metadata: {\n name: '',\n description: ''\n },\n poster: '',\n items: []\n };\n }\n }, {\n key: '_getDefaultSourcesObject',\n value: function _getDefaultSourcesObject() {\n return {\n hls: [],\n dash: [],\n progressive: [],\n id: '',\n duration: 0,\n type: _mediaEntry2.default.Type.UNKNOWN,\n poster: '',\n dvr: false,\n vr: null,\n metadata: {\n name: '',\n description: '',\n tags: ''\n }\n };\n }\n }, {\n key: '_getSourcesObject',\n value: function _getSourcesObject(mediaEntry) {\n var sourcesObject = this._getDefaultSourcesObject();\n var 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 (mediaEntry.sources.captions) {\n sourcesObject.captions = mediaEntry.sources.captions;\n }\n if (mediaEntry.metadata && typeof mediaEntry.metadata.tags === 'string' && mediaEntry.metadata.tags.indexOf('360') > -1) {\n sourcesObject.vr = {};\n }\n Object.assign(sourcesObject.metadata, mediaEntry.metadata);\n return sourcesObject;\n }\n }]);\n\n return OVPProvider;\n}(_baseProvider2.default);\n\nexports.default = OVPProvider;\n\n/***/ }),\n/* 40 */,\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _mediaEntry = __webpack_require__(4);\n\nvar _mediaEntry2 = _interopRequireDefault(_mediaEntry);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Playlist =\n\n/**\n * @member - playlist poster\n * @type {string}\n */\n\n/**\n * @member - playlist name\n * @type {string}\n */\nfunction Playlist() {\n _classCallCheck(this, Playlist);\n\n this.items = [];\n}\n\n/**\n * @member - playlist items\n * @type {Array}\n */\n\n/**\n * @member - playlist description\n * @type {string}\n */\n\n/**\n * @member - playlist id\n * @type {string}\n */\n;\n\nexports.default = Playlist;\n\n/***/ }),\n/* 42 */,\n/* 43 */,\n/* 44 */,\n/* 45 */,\n/* 46 */,\n/* 47 */,\n/* 48 */,\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KalturaCaptionType = {\n SRT: '1',\n DFXP: '2',\n WEBVTT: '3',\n CAP: '4'\n};\n\nvar CaptionsFormatsMap = {\n '3': 'vtt',\n '1': 'srt'\n};\n\nvar ExternalCaptionsBuilder = function () {\n function ExternalCaptionsBuilder() {\n _classCallCheck(this, ExternalCaptionsBuilder);\n }\n\n _createClass(ExternalCaptionsBuilder, null, [{\n key: 'createConfig',\n value: function createConfig(captions) {\n return captions.map(function (caption) {\n var url = caption.url;\n var type = CaptionsFormatsMap[caption.format];\n if ([KalturaCaptionType.DFXP, KalturaCaptionType.CAP].includes(caption.format)) {\n url = caption.webVttUrl;\n type = CaptionsFormatsMap[KalturaCaptionType.WEBVTT];\n }\n return {\n default: !!caption.isDefault,\n type: type,\n language: caption.languageCode,\n label: caption.label,\n url: url\n };\n });\n }\n }]);\n\n return ExternalCaptionsBuilder;\n}();\n\nexports.ExternalCaptionsBuilder = ExternalCaptionsBuilder;\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.VERSION = exports.NAME = exports.Provider = undefined;\n\nvar _provider = __webpack_require__(39);\n\nvar _provider2 = _interopRequireDefault(_provider);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar NAME = \"playkit-js-providers\" + '-ovp';\n\nvar VERSION = \"2.21.1\";\n\nexports.Provider = _provider2.default;\nexports.NAME = NAME;\nexports.VERSION = VERSION;\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _dataLoaderManager = __webpack_require__(11);\n\nvar _dataLoaderManager2 = _interopRequireDefault(_dataLoaderManager);\n\nvar _ovpService = __webpack_require__(17);\n\nvar _ovpService2 = _interopRequireDefault(_ovpService);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/**\n * OTTDataLoaderManager is a class that handles the OVP data loading\n * @param {string} playerVersion - player version\n * @param {string} partnerId - partner id\n * @param {string} ks - ks\n * @param {ProviderNetworkRetryParameters} [networkRetryConfig] - network retry configuration\n */\nvar OVPDataLoaderManager = function (_DataLoaderManager) {\n _inherits(OVPDataLoaderManager, _DataLoaderManager);\n\n function OVPDataLoaderManager(playerVersion, partnerId) {\n var ks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n var networkRetryConfig = arguments[3];\n\n _classCallCheck(this, OVPDataLoaderManager);\n\n var _this = _possibleConstructorReturn(this, (OVPDataLoaderManager.__proto__ || Object.getPrototypeOf(OVPDataLoaderManager)).call(this, networkRetryConfig));\n\n _this._multiRequest = _ovpService2.default.getMultiRequest(playerVersion, ks, partnerId);\n return _this;\n }\n\n return OVPDataLoaderManager;\n}(_dataLoaderManager2.default);\n\nexports.default = OVPDataLoaderManager;\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _config = __webpack_require__(5);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _baseEntryService = __webpack_require__(37);\n\nvar _baseEntryService2 = _interopRequireDefault(_baseEntryService);\n\nvar _kalturaBaseEntryListResponse = __webpack_require__(33);\n\nvar _kalturaBaseEntryListResponse2 = _interopRequireDefault(_kalturaBaseEntryListResponse);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar OVPEntryListLoader = function () {\n _createClass(OVPEntryListLoader, null, [{\n key: 'id',\n get: function get() {\n return 'entry_list';\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n */\n\n }]);\n\n function OVPEntryListLoader(params) {\n _classCallCheck(this, OVPEntryListLoader);\n\n this._response = { playlistItems: { entries: [] } };\n\n this.requests = this.buildRequests(params);\n this._entries = params.entries;\n }\n\n _createClass(OVPEntryListLoader, [{\n key: 'buildRequests',\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 value: function buildRequests(params) {\n var config = _config2.default.get();\n var requests = [];\n params.entries.forEach(function (entry) {\n requests.push(_baseEntryService2.default.list(config.serviceUrl, params.ks, entry.entryId || entry, params.redirectFromEntryId));\n });\n return requests;\n }\n\n /**\n * Loader validation function\n * @function\n * @returns {boolean} Is valid\n */\n\n }, {\n key: 'isValid',\n value: function isValid() {\n return !!(this._entries && this._entries.length);\n }\n }, {\n key: 'requests',\n set: function set(requests) {\n this._requests = requests;\n },\n get: function get() {\n return this._requests;\n }\n }, {\n key: 'response',\n set: function set(response) {\n var _this = this;\n\n var mediaEntryResponse = void 0;\n response.forEach(function (item) {\n mediaEntryResponse = new _kalturaBaseEntryListResponse2.default(item.data);\n _this._response.playlistItems.entries.push(mediaEntryResponse.entries[0]);\n });\n },\n get: function get() {\n return this._response;\n }\n }]);\n\n return OVPEntryListLoader;\n}();\n\nexports.default = OVPEntryListLoader;\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _baseEntryService = __webpack_require__(37);\n\nvar _baseEntryService2 = _interopRequireDefault(_baseEntryService);\n\nvar _metaDataService = __webpack_require__(63);\n\nvar _metaDataService2 = _interopRequireDefault(_metaDataService);\n\nvar _config = __webpack_require__(5);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _kalturaPlaybackContext = __webpack_require__(35);\n\nvar _kalturaPlaybackContext2 = _interopRequireDefault(_kalturaPlaybackContext);\n\nvar _kalturaMetadataListResponse = __webpack_require__(34);\n\nvar _kalturaMetadataListResponse2 = _interopRequireDefault(_kalturaMetadataListResponse);\n\nvar _kalturaBaseEntryListResponse = __webpack_require__(33);\n\nvar _kalturaBaseEntryListResponse2 = _interopRequireDefault(_kalturaBaseEntryListResponse);\n\nvar _kalturaMediaEntry = __webpack_require__(16);\n\nvar _kalturaMediaEntry2 = _interopRequireDefault(_kalturaMediaEntry);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar OVPMediaEntryLoader = function () {\n _createClass(OVPMediaEntryLoader, null, [{\n key: 'id',\n get: function get() {\n return 'media';\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n * @boolean {boolean} useExternalCaptions - if we should add captions request to the multirequests.\n */\n\n }]);\n\n function OVPMediaEntryLoader(params) {\n _classCallCheck(this, OVPMediaEntryLoader);\n\n this._response = {};\n\n this.requests = this.buildRequests(params);\n this._entryId = params.entryId;\n }\n\n _createClass(OVPMediaEntryLoader, [{\n key: 'buildRequests',\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 value: function buildRequests(params) {\n var config = _config2.default.get();\n var requests = [];\n requests.push(_baseEntryService2.default.list(config.serviceUrl, params.ks, params.entryId, params.redirectFromEntryId));\n requests.push(_baseEntryService2.default.getPlaybackContext(config.serviceUrl, params.ks));\n requests.push(_metaDataService2.default.list(config.serviceUrl, params.ks, params.entryId));\n return requests;\n }\n\n /**\n * Loader validation function\n * @function\n * @returns {boolean} Is valid\n */\n\n }, {\n key: 'isValid',\n value: function isValid() {\n return !!this._entryId;\n }\n }, {\n key: 'requests',\n set: function set(requests) {\n this._requests = requests;\n },\n get: function get() {\n return this._requests;\n }\n }, {\n key: 'response',\n set: function set(response) {\n var mediaEntryResponse = new _kalturaBaseEntryListResponse2.default(response[0].data);\n this._response.entry = mediaEntryResponse.entries[0];\n this._response.playBackContextResult = new _kalturaPlaybackContext2.default(response[1].data);\n this._response.metadataListResult = new _kalturaMetadataListResponse2.default(response[2].data);\n },\n get: function get() {\n return this._response;\n }\n }]);\n\n return OVPMediaEntryLoader;\n}();\n\nexports.default = OVPMediaEntryLoader;\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _playlistService = __webpack_require__(64);\n\nvar _playlistService2 = _interopRequireDefault(_playlistService);\n\nvar _config = __webpack_require__(5);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _kalturaPlaylist = __webpack_require__(62);\n\nvar _kalturaPlaylist2 = _interopRequireDefault(_kalturaPlaylist);\n\nvar _kalturaMediaEntries = __webpack_require__(60);\n\nvar _kalturaMediaEntries2 = _interopRequireDefault(_kalturaMediaEntries);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar OVPPlaylistLoader = function () {\n _createClass(OVPPlaylistLoader, null, [{\n key: 'id',\n get: function get() {\n return 'playlist';\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n */\n\n }]);\n\n function OVPPlaylistLoader(params) {\n _classCallCheck(this, OVPPlaylistLoader);\n\n this._response = {};\n\n this.requests = this.buildRequests(params);\n this._playlistId = params.playlistId;\n }\n\n _createClass(OVPPlaylistLoader, [{\n key: 'buildRequests',\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 value: function buildRequests(params) {\n var config = _config2.default.get();\n var requests = [];\n requests.push(_playlistService2.default.get(config.serviceUrl, params.ks, params.playlistId));\n requests.push(_playlistService2.default.execute(config.serviceUrl, params.ks, params.playlistId));\n return requests;\n }\n\n /**\n * Loader validation function\n * @function\n * @returns {boolean} Is valid\n */\n\n }, {\n key: 'isValid',\n value: function isValid() {\n return !!this._playlistId;\n }\n }, {\n key: 'requests',\n set: function set(requests) {\n this._requests = requests;\n },\n get: function get() {\n return this._requests;\n }\n }, {\n key: 'response',\n set: function set(response) {\n this._response.playlistData = new _kalturaPlaylist2.default(response[0].data);\n this._response.playlistItems = new _kalturaMediaEntries2.default(response[1].data);\n },\n get: function get() {\n return this._response;\n }\n }]);\n\n return OVPPlaylistLoader;\n}();\n\nexports.default = OVPPlaylistLoader;\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _sessionService = __webpack_require__(65);\n\nvar _sessionService2 = _interopRequireDefault(_sessionService);\n\nvar _config = __webpack_require__(5);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar OVPSessionLoader = function () {\n _createClass(OVPSessionLoader, [{\n key: 'requests',\n set: function set(requests) {\n this._requests = requests;\n },\n get: function get() {\n return this._requests;\n }\n }, {\n key: 'response',\n set: function set(response) {\n this._response.ks = response[0].data.ks;\n },\n get: function get() {\n return this._response.ks;\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n */\n\n }], [{\n key: 'id',\n get: function get() {\n return 'session';\n }\n }]);\n\n function OVPSessionLoader(params) {\n _classCallCheck(this, OVPSessionLoader);\n\n this._response = {};\n\n this.requests = this.buildRequests(params);\n this._widgetId = params.widgetId;\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\n\n _createClass(OVPSessionLoader, [{\n key: 'buildRequests',\n value: function buildRequests(params) {\n var config = _config2.default.get();\n var requests = [];\n requests.push(_sessionService2.default.anonymousSession(config.serviceUrl, params.widgetId));\n return requests;\n }\n\n /**\n * Loader validation function\n * @function\n * @returns {boolean} Is valid\n */\n\n }, {\n key: 'isValid',\n value: function isValid() {\n return !!this._widgetId;\n }\n }]);\n\n return OVPSessionLoader;\n}();\n\nexports.default = OVPSessionLoader;\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _config = __webpack_require__(5);\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar PlaySourceUrlBuilder = function () {\n function PlaySourceUrlBuilder() {\n _classCallCheck(this, PlaySourceUrlBuilder);\n }\n\n _createClass(PlaySourceUrlBuilder, null, [{\n key: 'build',\n\n /**\n * Returns source url by given url params\n * @function build\n * @param {urlParamsType} urlParams The params\n * @returns {string} The URL\n * @static\n */\n value: function build(urlParams) {\n var config = _config2.default.get();\n var serviceUrlOrigin = config.serviceUrl.substr(0, config.serviceUrl.lastIndexOf('/'));\n var partnerId = urlParams.partnerId,\n entryId = urlParams.entryId,\n ks = urlParams.ks,\n uiConfId = urlParams.uiConfId,\n format = urlParams.format,\n protocol = urlParams.protocol,\n extension = urlParams.extension,\n flavorIds = urlParams.flavorIds;\n\n //verify mandatory params\n\n if (!serviceUrlOrigin || !partnerId || !entryId || !format || !protocol) {\n return '';\n }\n\n var playUrl = serviceUrlOrigin;\n if (!serviceUrlOrigin.endsWith('/')) {\n playUrl += '/';\n }\n playUrl += 'p/' + partnerId + '/sp/' + partnerId + '00' + '/playManifest/entryId/' + entryId + '/protocol/' + protocol + '/format/' + format;\n\n if (flavorIds) {\n playUrl += '/flavorIds/' + flavorIds;\n } else if (uiConfId) {\n playUrl += '/uiConfId/' + uiConfId;\n }\n\n if (ks !== '') {\n playUrl += '/ks/' + ks;\n }\n\n if (extension !== '') {\n playUrl += '/a.' + extension;\n }\n\n if (uiConfId && flavorIds !== '') {\n playUrl += '?uiConfId=' + uiConfId;\n }\n\n return playUrl;\n }\n }]);\n\n return PlaySourceUrlBuilder;\n}();\n\nexports.default = PlaySourceUrlBuilder;\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _kalturaPlaybackContext = __webpack_require__(35);\n\nvar _kalturaPlaybackContext2 = _interopRequireDefault(_kalturaPlaybackContext);\n\nvar _kalturaMetadataListResponse = __webpack_require__(34);\n\nvar _kalturaMetadataListResponse2 = _interopRequireDefault(_kalturaMetadataListResponse);\n\nvar _kalturaMediaEntry = __webpack_require__(16);\n\nvar _kalturaMediaEntry2 = _interopRequireDefault(_kalturaMediaEntry);\n\nvar _kalturaPlaybackSource = __webpack_require__(36);\n\nvar _kalturaPlaybackSource2 = _interopRequireDefault(_kalturaPlaybackSource);\n\nvar _kalturaDrmPlaybackPluginData = __webpack_require__(14);\n\nvar _kalturaDrmPlaybackPluginData2 = _interopRequireDefault(_kalturaDrmPlaybackPluginData);\n\nvar _playSourceUrlBuilder = __webpack_require__(56);\n\nvar _playSourceUrlBuilder2 = _interopRequireDefault(_playSourceUrlBuilder);\n\nvar _xmlParser = __webpack_require__(66);\n\nvar _xmlParser2 = _interopRequireDefault(_xmlParser);\n\nvar _logger = __webpack_require__(2);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _config = __webpack_require__(5);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _mediaEntry = __webpack_require__(4);\n\nvar _mediaEntry2 = _interopRequireDefault(_mediaEntry);\n\nvar _drm = __webpack_require__(7);\n\nvar _drm2 = _interopRequireDefault(_drm);\n\nvar _mediaSource = __webpack_require__(9);\n\nvar _mediaSource2 = _interopRequireDefault(_mediaSource);\n\nvar _mediaSources = __webpack_require__(10);\n\nvar _mediaSources2 = _interopRequireDefault(_mediaSources);\n\nvar _mediaFormat = __webpack_require__(8);\n\nvar _playlist = __webpack_require__(41);\n\nvar _playlist2 = _interopRequireDefault(_playlist);\n\nvar _entryList = __webpack_require__(19);\n\nvar _entryList2 = _interopRequireDefault(_entryList);\n\nvar _kalturaRuleAction = __webpack_require__(22);\n\nvar _kalturaRuleAction2 = _interopRequireDefault(_kalturaRuleAction);\n\nvar _kalturaAccessControlMessage = __webpack_require__(13);\n\nvar _kalturaAccessControlMessage2 = _interopRequireDefault(_kalturaAccessControlMessage);\n\nvar _externalCaptionsBuilder = __webpack_require__(49);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar OVPProviderParser = function () {\n function OVPProviderParser() {\n _classCallCheck(this, OVPProviderParser);\n }\n\n _createClass(OVPProviderParser, null, [{\n key: 'getMediaEntry',\n\n\n /**\n * Returns parsed media entry by given OVP response objects\n * @function getMediaEntry\n * @param {string} ks - The ks\n * @param {number} partnerId - The partner ID\n * @param {number} uiConfId - The uiConf ID\n * @param {any} mediaEntryResponse - The media entry response\n * @returns {MediaEntry} - The media entry\n * @static\n * @public\n */\n value: function getMediaEntry(ks, partnerId, uiConfId, mediaEntryResponse) {\n var mediaEntry = new _mediaEntry2.default();\n var entry = mediaEntryResponse.entry;\n var playbackContext = mediaEntryResponse.playBackContextResult;\n var metadataList = mediaEntryResponse.metadataListResult;\n var kalturaSources = playbackContext.sources;\n\n mediaEntry.sources = OVPProviderParser._getParsedSources(kalturaSources, ks, partnerId, uiConfId, entry, playbackContext);\n if (_config2.default.get().useApiCaptions && playbackContext.data.playbackCaptions) {\n mediaEntry.sources.captions = _externalCaptionsBuilder.ExternalCaptionsBuilder.createConfig(playbackContext.data.playbackCaptions);\n }\n OVPProviderParser._fillBaseData(mediaEntry, entry, metadataList);\n return mediaEntry;\n }\n\n /**\n * Returns parsed playlist by given OVP response objects\n * @function getPlaylist\n * @param {any} playlistResponse - The playlist response\n * @returns {Playlist} - The playlist\n * @static\n * @public\n */\n\n }, {\n key: 'getPlaylist',\n value: function getPlaylist(playlistResponse) {\n var playlist = new _playlist2.default();\n var playlistData = playlistResponse.playlistData;\n var playlistItems = playlistResponse.playlistItems.entries;\n playlist.id = playlistData.id;\n playlist.name = playlistData.name;\n playlist.description = playlistData.description;\n playlist.poster = playlistData.poster;\n playlistItems.forEach(function (entry) {\n var mediaEntry = new _mediaEntry2.default();\n OVPProviderParser._fillBaseData(mediaEntry, entry);\n playlist.items.push(mediaEntry);\n });\n return playlist;\n }\n\n /**\n * Returns parsed entry list by given OVP response objects\n * @function getEntryList\n * @param {any} playlistResponse - response\n * @returns {Playlist} - The entry list\n * @static\n * @public\n */\n\n }, {\n key: 'getEntryList',\n value: function getEntryList(playlistResponse) {\n var entryList = new _entryList2.default();\n var playlistItems = playlistResponse.playlistItems.entries;\n playlistItems.forEach(function (entry) {\n var mediaEntry = new _mediaEntry2.default();\n OVPProviderParser._fillBaseData(mediaEntry, entry);\n entryList.items.push(mediaEntry);\n });\n return entryList;\n }\n }, {\n key: '_fillBaseData',\n value: function _fillBaseData(mediaEntry, entry, metadataList) {\n mediaEntry.poster = entry.poster;\n mediaEntry.id = entry.id;\n mediaEntry.duration = entry.duration;\n mediaEntry.metadata = OVPProviderParser._parseMetadata(metadataList);\n mediaEntry.metadata.description = entry.description || '';\n mediaEntry.metadata.name = entry.name || '';\n mediaEntry.metadata.tags = entry.tags || '';\n mediaEntry.status = entry.status;\n\n mediaEntry.type = OVPProviderParser._getEntryType(entry.entryType, entry.type);\n if (mediaEntry.type === _mediaEntry2.default.Type.LIVE) {\n mediaEntry.dvrStatus = entry.dvrStatus;\n }\n\n return mediaEntry;\n }\n }, {\n key: '_getEntryType',\n value: function _getEntryType(entryTypeEnum, typeEnum) {\n var type = _mediaEntry2.default.Type.UNKNOWN;\n switch (entryTypeEnum) {\n case _kalturaMediaEntry2.default.MediaType.IMAGE.value:\n type = _mediaEntry2.default.Type.IMAGE;\n break;\n case _kalturaMediaEntry2.default.MediaType.AUDIO.value:\n type = _mediaEntry2.default.Type.AUDIO;\n break;\n default:\n switch (typeEnum) {\n case _kalturaMediaEntry2.default.EntryType.MEDIA_CLIP.value:\n type = _mediaEntry2.default.Type.VOD;\n break;\n case _kalturaMediaEntry2.default.EntryType.LIVE_STREAM.value:\n case _kalturaMediaEntry2.default.EntryType.LIVE_CHANNEL.value:\n type = _mediaEntry2.default.Type.LIVE;\n break;\n default:\n type = _mediaEntry2.default.Type.UNKNOWN;\n }\n }\n return type;\n }\n\n /**\n * Returns the parsed sources\n * @function _getParsedSources\n * @param {Array} kalturaSources - The kaltura sources\n * @param {string} ks - The ks\n * @param {number} partnerId - The partner ID\n * @param {number} uiConfId - The uiConf ID\n * @param {Object} entry - The entry\n * @param {KalturaPlaybackContext} playbackContext - The playback context\n * @return {MediaSources} - A media sources\n * @static\n * @private\n */\n\n }, {\n key: '_getParsedSources',\n value: function _getParsedSources(kalturaSources, ks, partnerId, uiConfId, entry, playbackContext) {\n var sources = new _mediaSources2.default();\n var addAdaptiveSource = function addAdaptiveSource(source) {\n var parsedSource = OVPProviderParser._parseAdaptiveSource(source, playbackContext, ks, partnerId, uiConfId, entry.id);\n if (parsedSource) {\n var sourceFormat = _mediaFormat.SupportedStreamFormat.get(source.format);\n sources.map(parsedSource, sourceFormat);\n }\n };\n var parseAdaptiveSources = function parseAdaptiveSources() {\n kalturaSources.filter(function (source) {\n return !(0, _mediaFormat.isProgressiveSource)(source.format);\n }).forEach(addAdaptiveSource);\n };\n var parseProgressiveSources = function parseProgressiveSources() {\n var progressiveSource = kalturaSources.find(function (source) {\n //match progressive source with supported protocol(http/s)\n return (0, _mediaFormat.isProgressiveSource)(source.format) && source.getProtocol(OVPProviderParser._getBaseProtocol()) !== '';\n });\n sources.progressive = OVPProviderParser._parseProgressiveSources(progressiveSource, playbackContext, ks, partnerId, uiConfId, entry.id);\n };\n\n var parseExternalMedia = function parseExternalMedia() {\n var mediaSource = new _mediaSource2.default();\n mediaSource.mimetype = 'video/youtube';\n mediaSource.url = entry.referenceId;\n mediaSource.id = entry.id + '_youtube';\n sources.progressive.push(mediaSource);\n };\n\n if (entry.type === _kalturaMediaEntry2.default.EntryType.EXTERNAL_MEDIA.value) {\n parseExternalMedia();\n } else 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 * @param {KalturaPlaybackContext} playbackContext - The playback context\n * @param {string} ks - The ks\n * @param {number} partnerId - The partner ID\n * @param {number} uiConfId - The uiConf ID\n * @param {string} entryId - The entry id\n * @returns {?MediaSource} - The parsed adaptive kalturaSource\n * @static\n * @private\n */\n\n }, {\n key: '_parseAdaptiveSource',\n value: function _parseAdaptiveSource(kalturaSource, playbackContext, ks, partnerId, uiConfId, entryId) {\n var mediaSource = new _mediaSource2.default();\n if (kalturaSource) {\n var playUrl = '';\n var mediaFormat = _mediaFormat.SupportedStreamFormat.get(kalturaSource.format);\n var protocol = kalturaSource.getProtocol(OVPProviderParser._getBaseProtocol());\n var deliveryProfileId = kalturaSource.deliveryProfileId;\n var format = kalturaSource.format;\n var extension = '';\n if (mediaFormat) {\n extension = mediaFormat.pathExt;\n mediaSource.mimetype = mediaFormat.mimeType;\n }\n // in case playbackSource doesn't have flavors we don't need to build the url and we'll use the provided one.\n if (kalturaSource.hasFlavorIds()) {\n if (!extension && playbackContext.flavorAssets && playbackContext.flavorAssets.length > 0) {\n extension = playbackContext.flavorAssets[0].fileExt;\n }\n playUrl = _playSourceUrlBuilder2.default.build({\n entryId: entryId,\n flavorIds: kalturaSource.flavorIds,\n format: format,\n ks: ks,\n partnerId: partnerId,\n uiConfId: uiConfId,\n extension: extension,\n protocol: protocol\n });\n } else {\n playUrl = kalturaSource.url;\n }\n if (!playUrl) {\n var message = 'failed to create play url from source, discarding source: (' + entryId + '_' + deliveryProfileId + '), ' + format;\n OVPProviderParser._logger.warn(message);\n return null;\n }\n mediaSource.url = OVPProviderParser._applyRegexAction(playbackContext, playUrl);\n mediaSource.id = entryId + '_' + deliveryProfileId + ',' + format;\n if (kalturaSource.hasDrmData()) {\n var drmParams = [];\n kalturaSource.drm.forEach(function (drm) {\n drmParams.push(new _drm2.default(drm.licenseURL, _kalturaDrmPlaybackPluginData2.default.Scheme[drm.scheme], drm.certificate));\n });\n mediaSource.drmData = drmParams;\n }\n }\n return mediaSource;\n }\n\n /**\n * Returns parsed progressive sources\n * @function _parseProgressiveSources\n * @param {KalturaPlaybackSource} kalturaSource - A kaltura source\n * @param {KalturaPlaybackContext} playbackContext - The playback context\n * @param {string} ks - The ks\n * @param {number} partnerId - The partner ID\n * @param {number} uiConfId - The uiConf ID\n * @param {string} entryId - The entry id\n * @returns {Array} - The parsed progressive kalturaSources\n * @static\n * @private\n */\n\n }, {\n key: '_parseProgressiveSources',\n value: function _parseProgressiveSources(kalturaSource, playbackContext, ks, partnerId, uiConfId, entryId) {\n var videoSources = [];\n var audioSources = [];\n if (kalturaSource) {\n var protocol = kalturaSource.getProtocol(OVPProviderParser._getBaseProtocol());\n var format = kalturaSource.format;\n var deliveryProfileId = kalturaSource.deliveryProfileId;\n var sourceId = deliveryProfileId + ',' + format;\n playbackContext.flavorAssets.map(function (flavor) {\n var mediaSource = new _mediaSource2.default();\n mediaSource.id = flavor.id + sourceId;\n mediaSource.mimetype = flavor.fileExt === 'mp3' ? 'audio/mp3' : 'video/mp4';\n mediaSource.height = flavor.height;\n mediaSource.width = flavor.width;\n mediaSource.bandwidth = flavor.bitrate * 1024;\n mediaSource.label = flavor.label || flavor.language;\n var playUrl = _playSourceUrlBuilder2.default.build({\n entryId: entryId,\n flavorIds: flavor.id,\n format: format,\n ks: ks,\n partnerId: partnerId,\n uiConfId: uiConfId,\n extension: flavor.fileExt,\n protocol: protocol\n });\n if (playUrl === '') {\n OVPProviderParser._logger.warn('failed to create play url from source, discarding source: (' + entryId + '_' + deliveryProfileId + '), ' + format + '.');\n return null;\n } else {\n mediaSource.url = OVPProviderParser._applyRegexAction(playbackContext, playUrl);\n if (flavor.height && flavor.width) {\n videoSources.push(mediaSource);\n } else {\n audioSources.push(mediaSource);\n }\n }\n });\n }\n //If we have only audio flavors return them, otherwise return video flavors\n return audioSources.length && !videoSources.length ? audioSources : videoSources;\n }\n\n /**\n * Ovp metadata parser\n * @function _parseMetaData\n * @param {KalturaMetadataListResponse} metadataList The metadata list\n * @returns {Object} Parsed metadata\n * @static\n * @private\n */\n\n }, {\n key: '_parseMetadata',\n value: function _parseMetadata(metadataList) {\n var metadata = {};\n if (metadataList && metadataList.metas && metadataList.metas.length > 0) {\n metadataList.metas.forEach(function (meta) {\n var metaXml = void 0;\n var domParser = new DOMParser();\n meta.xml = meta.xml.replace(/\\r?\\n|\\r/g, '');\n meta.xml = meta.xml.replace(/>\\s*/g, '>');\n meta.xml = meta.xml.replace(/>\\s*/g, '>');\n metaXml = domParser.parseFromString(meta.xml, 'text/xml');\n var metasObj = _xmlParser2.default.xmlToJson(metaXml);\n var metaKeys = Object.keys(metasObj.metadata);\n metaKeys.forEach(function (key) {\n metadata[key] = metasObj.metadata[key]['#text'];\n });\n });\n }\n return metadata;\n }\n\n /**\n * Returns the base protocol\n * @function _getBaseProtocol\n * @returns {string} - The base protocol\n * @static\n * @private\n */\n\n }, {\n key: '_getBaseProtocol',\n value: function _getBaseProtocol() {\n var config = _config2.default.get();\n var protocolRegex = /^https?:/;\n var result = protocolRegex.exec(config.cdnUrl);\n var protocol = result ? result[0] : document.location.protocol;\n if (typeof protocol === 'string') {\n return protocol.slice(0, -1); // remove ':' from the end\n }\n return 'https';\n }\n }, {\n key: 'hasBlockAction',\n value: function hasBlockAction(response) {\n return response.playBackContextResult.hasBlockAction();\n }\n }, {\n key: 'getBlockAction',\n value: function getBlockAction(response) {\n return response.playBackContextResult.getBlockAction();\n }\n }, {\n key: 'getErrorMessages',\n value: function getErrorMessages(response) {\n return response.playBackContextResult.getErrorMessages();\n }\n\n /**\n * Applies the request host regex on the url\n * @function _applyRegexAction\n * @param {KalturaPlaybackContext} playbackContext - The playback context\n * @param {string} playUrl - The original url\n * @returns {string} - The request host regex applied url\n * @static\n * @private\n */\n\n }, {\n key: '_applyRegexAction',\n value: function _applyRegexAction(playbackContext, playUrl) {\n var regexAction = playbackContext.getRequestHostRegexAction();\n if (regexAction) {\n var regex = new RegExp(regexAction.pattern, 'i');\n if (playUrl.match(regex)) {\n return playUrl.replace(regex, regexAction.replacement + '/');\n }\n }\n return playUrl;\n }\n }]);\n\n return OVPProviderParser;\n}();\n\nOVPProviderParser._logger = (0, _logger2.default)('OVPProviderParser');\nexports.default = OVPProviderParser;\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _kalturaRuleAction = __webpack_require__(22);\n\nvar _kalturaRuleAction2 = _interopRequireDefault(_kalturaRuleAction);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar KalturaAccessControlModifyRequestHostRegexAction = function (_KalturaRuleAction) {\n _inherits(KalturaAccessControlModifyRequestHostRegexAction, _KalturaRuleAction);\n\n /**\n * @constructor\n * @param {Object} data - The response\n */\n\n /**\n * @member - Request host regex replacement\n * @type {string}\n */\n function KalturaAccessControlModifyRequestHostRegexAction(data) {\n _classCallCheck(this, KalturaAccessControlModifyRequestHostRegexAction);\n\n var _this = _possibleConstructorReturn(this, (KalturaAccessControlModifyRequestHostRegexAction.__proto__ || Object.getPrototypeOf(KalturaAccessControlModifyRequestHostRegexAction)).call(this, data));\n\n _this.pattern = data.pattern;\n _this.replacement = data.replacement;\n _this.replacmenServerNodeId = data.replacmenServerNodeId;\n return _this;\n }\n /**\n * @member - serverNodeId to generate replacment host from\n * @type {number}\n */\n\n /**\n * @member - Request host regex pattern\n * @type {string}\n */\n\n\n return KalturaAccessControlModifyRequestHostRegexAction;\n}(_kalturaRuleAction2.default);\n\nexports.default = KalturaAccessControlModifyRequestHostRegexAction;\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KalturaFlavorAsset =\n\n/**\n * @constructor\n * @param {Object} data The json response\n */\n\n\n/**\n * @member - The ID of the Flavor Asset\n * @type {string}\n */\n\n/**\n * @member -The Flavor Params used to create this Flavor Asset\n * @type {string}\n */\n\n/**\n * @member -The file extension\n * @type {string}\n */\n\n/**\n * @member - The overall bitrate (in KBits) of the Flavor Asset\n * @type {string}\n */\n\n/**\n * @member - The width of the Flavor Asset\n * @type {number}\n */\n\n/**\n * @member - The height of the Flavor Asset\n * @type {number}\n */\n\n/**\n * @member - The frame rate (in FPS) of the Flavor Asset\n * @type {number}\n */\n\n/**\n * @member - True if this Flavor Asset is the original source\n * @type {number}\n */\n\n/**\n * @member - True if this Flavor Asset is playable in KDP\n * @type {boolean}\n */\n\n/**\n * @member - The container format\n * @type {boolean}\n */\n\n/**\n *@member - The video codec\n * @type {boolean}\n */\n\n/**\n * @member - The status of the Flavor Asset\n * @type {number}\n */\n\n/**\n * @member - The language of the flavor asset\n * @type {Status}\n */\n\n/**\n * @member - The label of the flavor asset\n * @type {string}\n */\nfunction KalturaFlavorAsset(data) {\n _classCallCheck(this, KalturaFlavorAsset);\n\n this.id = data.id;\n this.flavorParamsId = data.flavorParamsId;\n this.fileExt = data.fileExt;\n this.bitrate = data.bitrate;\n this.width = data.width;\n this.height = data.height;\n this.id = data.id;\n this.frameRate = data.frameRate;\n this.isOriginal = data.isOriginal;\n this.isWeb = data.isWeb;\n this.containerFormat = data.containerFormat;\n this.videoCodecId = data.videoCodecId;\n this.status = data.status;\n this.language = data.language;\n this.label = data.label;\n};\n\nKalturaFlavorAsset.Status = {\n ERROR: -1,\n QUEUED: 0,\n CONVERTING: 1,\n READY: 2,\n DELETED: 3,\n NOT_APPLICABLE: 4,\n TEMP: 5,\n WAIT_FOR_CONVERT: 6,\n IMPORTING: 7,\n VALIDATING: 8,\n EXPORTING: 9\n};\nexports.default = KalturaFlavorAsset;\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _baseServiceResult = __webpack_require__(3);\n\nvar _baseServiceResult2 = _interopRequireDefault(_baseServiceResult);\n\nvar _kalturaMediaEntry = __webpack_require__(16);\n\nvar _kalturaMediaEntry2 = _interopRequireDefault(_kalturaMediaEntry);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar KalturaMediaEntries = function (_ServiceResult) {\n _inherits(KalturaMediaEntries, _ServiceResult);\n\n /**\n * @constructor\n * @param {Object} responseObj The json response\n */\n function KalturaMediaEntries(responseObj) {\n _classCallCheck(this, KalturaMediaEntries);\n\n var _this = _possibleConstructorReturn(this, (KalturaMediaEntries.__proto__ || Object.getPrototypeOf(KalturaMediaEntries)).call(this, responseObj));\n\n if (!_this.hasError) {\n _this.entries = [];\n responseObj.map(function (entry) {\n return _this.entries.push(new _kalturaMediaEntry2.default(entry));\n });\n }\n return _this;\n }\n /**\n * @member - The entries\n * @type {Array}\n */\n\n\n return KalturaMediaEntries;\n}(_baseServiceResult2.default);\n\nexports.default = KalturaMediaEntries;\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KalturaMetadata =\n\n/**\n * @constructor\n * @param {Object} data The response\n */\nfunction KalturaMetadata(data) {\n _classCallCheck(this, KalturaMetadata);\n\n this.id = data.id;\n this.metadataProfileId = data.metadataProfileId;\n this.metadataProfileVersion = data.metadataProfileVersion;\n this.metadataProfileId = data.metadataProfileId;\n this.metadataObjectType = data.metadataObjectType;\n this.objectId = data.objectId;\n this.version = data.version;\n this.created = new Date(0);\n this.created.setUTCSeconds(data.createdAt);\n this.updated = new Date(0);\n this.updated.setUTCSeconds(data.updatedAt);\n this.status = data.status;\n this.xml = data.xml;\n};\n\nKalturaMetadata.ObjectType = {\n AD_CUE_POINT: 'adCuePointMetadata.AdCuePoint',\n ANNOTATION: 'annotationMetadata.Annotation',\n CODE_CUE_POINT: 'codeCuePointMetadata.CodeCuePoint',\n THUMB_CUE_POINT: 'thumbCuePointMetadata.thumbCuePoint',\n ENTRY: 1,\n CATEGORY: 2,\n USER: 3,\n PARTNER: 4,\n DYNAMIC_OBJECT: 5\n};\nKalturaMetadata.Status = {\n VALID: 1,\n INVALID: 2,\n DELETED: 3\n};\nexports.default = KalturaMetadata;\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar KalturaPlaylist =\n\n/**\n * @constructor\n * @param {Object} playlist - The json response\n */\n\n/**\n * @member - playlist description\n * @type {string}\n */\n\n/**\n * @member - playlist id\n * @type {string}\n */\nfunction KalturaPlaylist(playlist) {\n _classCallCheck(this, KalturaPlaylist);\n\n this.id = playlist.id;\n this.name = playlist.name;\n this.description = playlist.description;\n this.poster = playlist.thumbnailUrl;\n}\n/**\n * @member - playlist poster image\n * @type {string}\n */\n\n/**\n * @member - playlist name\n * @type {string}\n */\n;\n\nexports.default = KalturaPlaylist;\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _ovpService = __webpack_require__(17);\n\nvar _ovpService2 = _interopRequireDefault(_ovpService);\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SERVICE_NAME = 'metadata_metadata';\n\nvar OVPMetadataService = function (_OVPService) {\n _inherits(OVPMetadataService, _OVPService);\n\n function OVPMetadataService() {\n _classCallCheck(this, OVPMetadataService);\n\n return _possibleConstructorReturn(this, (OVPMetadataService.__proto__ || Object.getPrototypeOf(OVPMetadataService)).apply(this, arguments));\n }\n\n _createClass(OVPMetadataService, null, [{\n key: 'list',\n\n /**\n * Creates an instance of RequestBuilder for metadata_metadata.list\n * @function getPlaybackContext\n * @param {string} serviceUrl The service base URL\n * @param {string} ks The ks\n * @param {string} entryId The entry ID\n * @returns {RequestBuilder} The request builder\n * @static\n */\n value: function list(serviceUrl, ks, entryId) {\n var headers = new Map();\n headers.set('Content-Type', 'application/json');\n var request = new _requestBuilder2.default(headers);\n request.service = SERVICE_NAME;\n request.action = 'list';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n request.tag = 'metadata_metadata-list';\n var filter = { objectType: 'KalturaMetadataFilter', objectIdEqual: entryId, metadataObjectTypeEqual: '1' };\n request.params = { filter: filter, ks: ks };\n return request;\n }\n }]);\n\n return OVPMetadataService;\n}(_ovpService2.default);\n\nexports.default = OVPMetadataService;\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _ovpService = __webpack_require__(17);\n\nvar _ovpService2 = _interopRequireDefault(_ovpService);\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _baseEntryResponseProfile = __webpack_require__(32);\n\nvar _baseEntryResponseProfile2 = _interopRequireDefault(_baseEntryResponseProfile);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SERVICE_NAME = 'playlist';\n\nvar OVPPlaylistService = function (_OVPService) {\n _inherits(OVPPlaylistService, _OVPService);\n\n function OVPPlaylistService() {\n _classCallCheck(this, OVPPlaylistService);\n\n return _possibleConstructorReturn(this, (OVPPlaylistService.__proto__ || Object.getPrototypeOf(OVPPlaylistService)).apply(this, arguments));\n }\n\n _createClass(OVPPlaylistService, null, [{\n key: 'execute',\n\n /**\n * Creates an instance of RequestBuilder for playlist.getPlaybackContext\n * @function getPlaybackContext\n * @param {string} serviceUrl The service base URL\n * @param {string} ks The ks\n * @param {string} playlistId The playlist ID\n * @returns {RequestBuilder} The request builder\n * @static\n */\n value: function execute(serviceUrl, ks, playlistId) {\n var headers = new Map();\n headers.set('Content-Type', 'application/json');\n var request = new _requestBuilder2.default(headers);\n request.service = SERVICE_NAME;\n request.action = 'execute';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n request.tag = SERVICE_NAME + '-execute';\n request.params = {\n ks: ks,\n id: playlistId,\n responseProfile: new _baseEntryResponseProfile2.default()\n };\n return request;\n }\n\n /**\n * Creates an instance of RequestBuilder for playlist.list\n * @function list\n * @param {string} serviceUrl The base URL\n * @param {string} ks The ks\n * @param {string} playlistId The playlist ID\n * @returns {RequestBuilder} The request builder\n * @static\n */\n\n }, {\n key: 'get',\n value: function get(serviceUrl, ks, playlistId) {\n var headers = new Map();\n headers.set('Content-Type', 'application/json');\n var request = new _requestBuilder2.default(headers);\n request.service = SERVICE_NAME;\n request.action = 'get';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n request.tag = SERVICE_NAME + '-get';\n request.params = {\n ks: ks,\n id: playlistId,\n responseProfile: {\n fields: 'id,name,description,thumbnailUrl',\n type: 1\n }\n };\n return request;\n }\n }]);\n\n return OVPPlaylistService;\n}(_ovpService2.default);\n\nexports.default = OVPPlaylistService;\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _ovpService = __webpack_require__(17);\n\nvar _ovpService2 = _interopRequireDefault(_ovpService);\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SERVICE_NAME = 'session';\n\nvar OVPSessionService = function (_OVPService) {\n _inherits(OVPSessionService, _OVPService);\n\n function OVPSessionService() {\n _classCallCheck(this, OVPSessionService);\n\n return _possibleConstructorReturn(this, (OVPSessionService.__proto__ || Object.getPrototypeOf(OVPSessionService)).apply(this, arguments));\n }\n\n _createClass(OVPSessionService, null, [{\n key: 'anonymousSession',\n\n /**\n * Creates an instance of RequestBuilder for session.startWidgetSession\n * @function anonymousSession\n * @param {string} serviceUrl The service base URL\n * @param {string} widgetId The widget ID\n * @returns {RequestBuilder} The request builder\n * @static\n */\n value: function anonymousSession(serviceUrl, widgetId) {\n var headers = new Map();\n headers.set('Content-Type', 'application/json');\n var request = new _requestBuilder2.default(headers);\n request.service = SERVICE_NAME;\n request.action = 'startWidgetSession';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n request.tag = 'session-startWidget';\n request.params = { widgetId: widgetId };\n return request;\n }\n }]);\n\n return OVPSessionService;\n}(_ovpService2.default);\n\nexports.default = OVPSessionService;\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar XmlParser = function () {\n function XmlParser() {\n _classCallCheck(this, XmlParser);\n }\n\n _createClass(XmlParser, null, [{\n key: 'xmlToJson',\n\n /**\n * Parses xml string to json object\n * @param {string} xml The xml to parse\n * @returns {{}} The parsed xml as Json object\n * @static\n */\n value: function xmlToJson(xml) {\n var obj = {};\n if (xml.nodeType === 1) {\n if (xml.attributes.length > 0) {\n obj['@attributes'] = {};\n for (var j = 0; j < xml.attributes.length; j++) {\n var attribute = xml.attributes.item(j);\n obj['@attributes'][attribute.nodeName] = attribute.nodeValue;\n }\n }\n } else if (xml.nodeType === 3) {\n obj = xml.nodeValue;\n }\n if (xml.hasChildNodes()) {\n for (var i = 0; i < xml.childNodes.length; i++) {\n var item = xml.childNodes.item(i);\n var nodeName = item.nodeName;\n if (typeof obj[nodeName] === 'undefined') {\n obj[nodeName] = this.xmlToJson(item);\n } else {\n if (typeof obj[nodeName].push === 'undefined') {\n var old = obj[nodeName];\n obj[nodeName] = [];\n obj[nodeName].push(old);\n }\n obj[nodeName].push(this.xmlToJson(item));\n }\n }\n }\n return obj;\n }\n }]);\n\n return XmlParser;\n}();\n\nexports.default = XmlParser;\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// playkit-ovp-provider.js"," \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// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\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 \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 50);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 59d72028ff5eee9a0b0d","//@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}\n */\n headers: Map;\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}\n */\n responseHeaders: Array;\n /**\n * @description network retry configuration\n * @memberof RequestBuilder\n * @type {ProviderNetworkRetryParameters}\n */\n retryConfig: ProviderNetworkRetryParameters;\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} headers The request headers\n */\n constructor(headers: Map = 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.} Service response as promise\n */\n doHttpRequest(): Promise {\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 {\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\n\n\n// WEBPACK FOOTER //\n// ./util/request-builder.js","//@flow\nimport getLogger, {getLogLevel, LogLevel} 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 if (getLogLevel(CLASS_NAME) !== LogLevel.OFF) {\n Error._logger.error(`Category:${category} | Code:${code} |`, data);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./util/error/error.js","//@flow\nimport * as JsLogger from 'js-logger';\n\nexport type LogLevelObject = {value: number, name: string};\nexport type LogLevelType = {[level: string]: LogLevelObject};\n\nconst LogLevel: LogLevelType = {\n DEBUG: JsLogger.DEBUG,\n INFO: JsLogger.INFO,\n TIME: JsLogger.TIME,\n WARN: JsLogger.WARN,\n ERROR: JsLogger.ERROR,\n OFF: JsLogger.OFF\n};\n\nJsLogger.useDefaults({defaultLevel: JsLogger.ERROR});\n\n/**\n * sets the logger handler\n * @param {LogHandlerType} handler - the log level\n * @returns {void}\n */\nfunction setLogHandler(handler: LogHandlerType): void {\n JsLogger.setHandler((messages, context) => handler(messages, context));\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 if (!name) {\n return JsLogger;\n }\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 {LogLevel, getLogLevel, setLogLevel, setLogHandler};\n\n\n\n// WEBPACK FOOTER //\n// ./util/logger.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/base-service-result.js","//@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\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}\n */\n poster: string | Array;\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 metadata: this.metadata,\n type: this.type,\n poster: this.poster,\n assetReferenceType: this.assetReferenceType\n };\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./entities/media-entry.js","//@flow\nimport {clone} from '../../util/clone';\n\nconst defaultConfig: Object = {\n serviceUrl: 'https://cdnapisec.kaltura.com/api_v3',\n cdnUrl: 'https://cdnapisec.kaltura.com',\n serviceParams: {\n apiVersion: '3.3.0',\n format: 1\n },\n useApiCaptions: true\n};\n\nexport default class OVPConfiguration {\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 {OVPConfiguration};\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/config.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./entities/drm.js","//@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 = 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\n\n\n// WEBPACK FOOTER //\n// ./entities/media-format.js","//@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}\n */\n drmData: Array;\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\n\n\n// WEBPACK FOOTER //\n// ./entities/media-source.js","// @flow\nimport MediaSource from './media-source';\nimport {MediaFormat} from './media-format';\n\nexport default class MediaSources {\n /**\n * Progressive download media sources container.\n * @type {Array}\n * @public\n */\n progressive: Array;\n /**\n * Dash media sources container.\n * @type {Array}\n * @public\n */\n dash: Array;\n /**\n * Hls media sources container.\n * @type {Array}\n * @public\n */\n hls: Array;\n captions: Array;\n\n /**\n * @constructor\n */\n constructor() {\n this.progressive = [];\n this.dash = [];\n this.hls = [];\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 };\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 return response;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./entities/media-sources.js","// @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>}\n * @private\n */\n _loadersResponseMap: Map> = 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}\n * @private\n */\n _loaders: Map = new Map();\n\n _networkRetryConfig: ProviderNetworkRetryParameters;\n\n constructor(networkRetryConfig: ProviderNetworkRetryParameters) {\n this._networkRetryConfig = networkRetryConfig;\n }\n\n /**\n * Add loader too execution loaders map\n * @function\n * @param {Function} loader Loader to add\n * @param {Object} params Loader params\n * @returns {void}\n */\n add(loader: Function, params: Object): 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 muktiRequest queue\n requests.forEach(request => {\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 * @function\n * @returns {Promise} Promise\n */\n fetchData(): Promise {\n return new Promise((resolve, reject) => {\n this._multiRequest.execute().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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/data-loader-manager.js","//@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}\n */\n requests: Array = [];\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 * @returns {Promise} The multirequest execution promise\n */\n execute(): Promise {\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);\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 = [];\n /**\n * @constructor\n * @param {Object} response data\n */\n constructor(response: Object) {\n this.success = true;\n const responseArr = response.result ? response.result : response;\n responseArr.forEach(result => {\n const serviceResult: ServiceResult = new ServiceResult(result);\n this.results.push(serviceResult);\n if (serviceResult.hasError) {\n MultiRequestResult._logger.error(\n `Service returned an error with error code: ${serviceResult.error.code} and message: ${serviceResult.error.message}.`\n );\n this.success = false;\n return;\n }\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/multi-request-builder.js","//@flow\nexport default 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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/response-types/kaltura-access-control-message.js","//@flow\nexport default 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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/response-types/kaltura-drm-playback-plugin-data.js","//@flow\nexport default class KalturaMediaEntry {\n static EntryType: {[entryType: string]: {value: number | string}} = {\n AUTOMATIC: {value: -1},\n EXTERNAL_MEDIA: {value: 'externalMedia.externalMedia'},\n MEDIA_CLIP: {value: 1},\n MIX: {value: 2},\n PLAYLIST: {value: 5},\n DATA: {value: 6},\n LIVE_STREAM: {value: 7},\n LIVE_CHANNEL: {value: 8},\n DOCUMENT: {value: 10}\n };\n\n static MediaType: {[mediaType: string]: {value: number}} = {\n VIDEO: {value: 1},\n IMAGE: {value: 2},\n AUDIO: {value: 5},\n LIVE_STREAM_FLASH: {value: 201},\n LIVE_STREAM_WINDOWS_MEDIA: {value: 202},\n LIVE_STREAM_REAL_MEDIA: {value: 203},\n LIVE_STREAM_QUICK_TIME: {value: 204}\n };\n\n static EntryStatus: {[status: string]: string | number} = {\n ERROR_IMPORTING: -2,\n ERROR_CONVERTING: -1,\n SCAN_FAILURE: 'virusScan.ScanFailure',\n IMPORT: 0,\n INFECTED: 'virusScan.Infected',\n PRECONVERT: 1,\n READY: 2,\n DELETED: 3,\n PENDING: 4,\n MODERATE: 5,\n BLOCKED: 6,\n NO_CONTENT: 7\n };\n\n static EntryModerationStatus: {[status: string]: number} = {\n PENDING_MODERATION: 1,\n APPROVED: 2,\n REJECTED: 3,\n FLAGGED_FOR_REVIEW: 4,\n MODERATE: 5,\n AUTO_APPROVED: 6\n };\n\n /**\n * @member - The entry id\n * @type {string}\n */\n id: string;\n /**\n * @member - The entry referenceId\n * @type {string}\n */\n referenceId: string;\n /**\n * @member - The entry externalSourceType\n * @type {string}\n */\n externalSourceType: string;\n /**\n * @member - Entry name (Min 1 chars)\n * @type {string}\n */\n name: string;\n /**\n * @member - Entry description\n * @type {string}\n */\n description: string;\n /**\n * @member - The URL used for playback. This is not the download URL.\n * @type {string}\n */\n dataUrl: string;\n /**\n * @member - Comma separated flavor params ids that exists for this media entry\n * @type {string}\n */\n flavorParamsIds: string;\n /**\n * @member - The entry duration\n * @type {number}\n */\n duration: number;\n /**\n * @member - The type of the entry, this is auto filled by the derived entry object\n * @type {string | number}\n */\n type: string | number;\n /**\n * @member - The type of the entry, this is auto filled by the derived entry object (Image, Audio etc.)\n * @type {number}\n */\n entryType: number;\n /**\n * @member - Entry poster image\n * @type {string}\n */\n poster: string;\n /**\n * @member - DVR status\n * @type {number}\n */\n dvrStatus: number;\n /**\n * @member - Entry tags\n * @type {string}\n */\n tags: string;\n\n /**\n * @member - Entry status\n * @type {number}\n */\n status: number;\n\n /**\n * @constructor\n * @param {Object} entry The json response\n */\n constructor(entry: Object) {\n this.id = entry.id;\n this.referenceId = entry.referenceId;\n this.externalSourceType = entry.externalSourceType;\n this.name = entry.name;\n this.description = entry.description;\n this.dataUrl = entry.dataUrl;\n this.type = entry.type;\n this.entryType = entry.mediaType;\n this.flavorParamsIds = entry.flavorParamsIds;\n this.duration = entry.duration;\n this.poster = entry.thumbnailUrl;\n this.status = entry.status;\n this.dvrStatus = entry.dvrStatus;\n this.tags = entry.tags;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/response-types/kaltura-media-entry.js","//@flow\nimport MultiRequestBuilder from '../../common/multi-request-builder';\nimport OVPConfiguration from '../config';\n\nconst SERVICE_NAME: string = 'multirequest';\n\nexport default class OVPService {\n /**\n * Gets a new instance of MultiRequestBuilder with ovp params\n * @function getMultiRequest\n * @param {string} playerVersion The player version\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(playerVersion: string, ks: string, partnerId?: number): MultiRequestBuilder {\n const config = OVPConfiguration.get();\n const ovpParams = config.serviceParams;\n Object.assign(ovpParams, {ks: ks, clientTag: 'html5:v' + playerVersion});\n if (partnerId) {\n Object.assign(ovpParams, {partnerId: partnerId});\n }\n const headers: Map = 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 = ovpParams;\n return multiReq;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/services/ovp-service.js","//@flow\n\nimport MediaEntry from '../entities/media-entry';\n\nexport default class EntryList {\n /**\n * @member - entry list items\n * @type {Array}\n */\n items: Array;\n\n constructor() {\n this.items = [];\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./entities/entry-list.js","// @flow\nimport {setLogLevel, getLogLevel, LogLevel, setLogHandler} from '../../util/logger';\nimport DataLoaderManager from './data-loader-manager';\nimport Error from '../../util/error/error';\n\nexport default class BaseProvider {\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 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 if (options.log && options.log.level && this.LogLevel[options.log.level]) {\n setLogLevel(this.LogLevel[options.log.level]);\n }\n if (options.log && typeof options.log.handler === 'function') {\n setLogHandler(options.log.handler);\n }\n }\n\n // eslint-disable-next-line no-unused-vars\n getMediaConfig(mediaInfo: MI): Promise {\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 {\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 {\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).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(): {[level: string]: Object} {\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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/base-provider.js","//@flow\nexport default class KalturaRuleAction {\n static Type: {[type: string]: string | number} = {\n DRM_POLICY: 'drm.DRM_POLICY',\n BLOCK: 1,\n PREVIEW: 2,\n LIMIT_FLAVORS: 3,\n ADD_TO_STORAGE: 4,\n LIMIT_DELIVERY_PROFILES: 5,\n SERVE_FROM_REMOTE_SERVER: 6,\n REQUEST_HOST_REGEX: 7,\n LIMIT_THUMBNAIL_CAPTURE: 8\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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/response-types/kaltura-rule-action.js","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\n\n\n// WEBPACK FOOTER //\n// ./util/clone.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./util/error/category.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./util/error/code.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./util/error/severity.js","/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.4.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.DEBUG = defineLogLevel(1, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(2, 'INFO');\r\n\tLogger.TIME = defineLogLevel(3, 'TIME');\r\n\tLogger.WARN = defineLogLevel(4, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(Logger);\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/js-logger/src/logger.js\n// module id = 27\n// module chunks = 0 1","//@flow\nconst FIELDS =\n 'id,referenceId,name,description,thumbnailUrl,dataUrl,duration,msDuration,flavorParamsIds,mediaType,type,tags,dvrStatus,externalSourceType,status';\n\nexport default class BaseEntryResponseProfile {\n static Type: {[type: string]: number} = {\n INCLUDE_FIELDS: 1,\n EXCLUDE_FIELDS: 2\n };\n /**\n * @member - the response profile type\n * @type {number}\n */\n type: number;\n /**\n * @member - Comma separated fields list to be included or excluded\n * @type {string}\n */\n fields: string;\n\n /**\n * @constructor\n * @param {Object} responseProfile -\n */\n constructor(responseProfile: Object = {}) {\n this.type = responseProfile.type || BaseEntryResponseProfile.Type.INCLUDE_FIELDS;\n this.fields = responseProfile.fields || FIELDS;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/request-params/base-entry-response-profile.js","//@flow\nimport ServiceResult from '../../common/base-service-result';\nimport KalturaMediaEntry from './kaltura-media-entry';\n\nexport default class KalturaBaseEntryListResponse extends ServiceResult {\n /**\n * @member - The total count\n * @type {number}\n */\n totalCount: number;\n /**\n * @member - The entries\n * @type {Array}\n */\n entries: Array;\n\n /**\n * @constructor\n * @param {Object} responseObj The json response\n */\n constructor(responseObj: Object) {\n super(responseObj);\n if (!this.hasError) {\n this.totalCount = responseObj.totalCount;\n if (this.totalCount > 0) {\n this.entries = [];\n responseObj.objects.map(entry => this.entries.push(new KalturaMediaEntry(entry)));\n }\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/response-types/kaltura-base-entry-list-response.js","//@flow\nimport ServiceResult from '../../common/base-service-result';\nimport KalturaMetadata from './kaltura-metadata';\n\nexport default class KalturaMetadataListResponse extends ServiceResult {\n totalCount: number;\n metas: Array;\n\n /**\n * @constructor\n * @param {Object} responseObj The response\n */\n constructor(responseObj: Object) {\n super(responseObj);\n if (!this.hasError) {\n this.totalCount = responseObj.totalCount;\n if (this.totalCount > 0) {\n this.metas = [];\n responseObj.objects.map(meta => this.metas.push(new KalturaMetadata(meta)));\n }\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/response-types/kaltura-metadata-list-response.js","//@flow\nimport ServiceResult from '../../common/base-service-result';\nimport KalturaAccessControlMessage from '../../common/response-types/kaltura-access-control-message';\nimport KalturaPlaybackSource from './kaltura-playback-source';\nimport KalturaAccessControlModifyRequestHostRegexAction from './kaltura-access-control-modify-request-host-regex-action';\nimport KalturaRuleAction from './kaltura-rule-action';\nimport KalturaFlavorAsset from './kaltura-flavor-asset';\n\nexport default class KalturaPlaybackContext extends ServiceResult {\n /**\n * @member - The playback sources\n * @type {Array}\n */\n sources: Array = [];\n /**\n * @member - Array of actions as received from the rules that invalidated\n * @type {Array}\n */\n actions: Array = [];\n /**\n * @member - Array of actions as received from the rules that invalidated\n * @type {Array}\n */\n messages: Array = [];\n /**\n * @member - The flavor assets\n * @type {Array}\n */\n flavorAssets: Array = [];\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 => {\n if (action.type === KalturaRuleAction.Type.REQUEST_HOST_REGEX) {\n this.actions.push(new KalturaAccessControlModifyRequestHostRegexAction(action));\n } else {\n this.actions.push(new KalturaRuleAction(action));\n }\n });\n }\n const sources = response.sources;\n if (sources) {\n sources.map(source => this.sources.push(new KalturaPlaybackSource(source)));\n }\n const flavorAssets = response.flavorAssets;\n if (flavorAssets) {\n flavorAssets.map(flavor => this.flavorAssets.push(new KalturaFlavorAsset(flavor)));\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 {\n return this.messages;\n }\n\n /**\n * Get the KalturaAccessControlModifyRequestHostRegexAction action\n * @function getRequestHostRegexAction\n * @returns {?KalturaAccessControlModifyRequestHostRegexAction} The action\n * */\n getRequestHostRegexAction(): ?KalturaAccessControlModifyRequestHostRegexAction {\n const action = this.actions.find(action => action.type === KalturaRuleAction.Type.REQUEST_HOST_REGEX);\n if (action instanceof KalturaAccessControlModifyRequestHostRegexAction) {\n return action;\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/response-types/kaltura-playback-context.js","//@flow\nimport KalturaDrmPlaybackPluginData from '../../common/response-types/kaltura-drm-playback-plugin-data';\n\nexport type OVPKalturaPlaybackSource = KalturaPlaybackSource;\n\nexport default class KalturaPlaybackSource {\n /**\n * @member - source format according to delivery profile streamer type (applehttp, mpegdash etc.)\n * @type {string}\n */\n format: string;\n /**\n * @member - delivery profile Id\n * @type {string}\n */\n deliveryProfileId: string;\n /**\n * @member - The source URL\n * @type {string}\n */\n url: string;\n /**\n * @member - comma separated string according to deliveryProfile media protocols ('http,https' etc.)\n * @type {string}\n */\n protocols: string;\n /**\n * @member - comma separated string of flavor ids\n * @type {string}\n */\n flavorIds: string;\n /**\n * @member - drm data object containing relevant license url ,scheme name and certificate\n * @type {Array}\n */\n drm: Array = [];\n\n /**\n * @constructor\n * @param {Object} source The response\n */\n constructor(source: Object) {\n this.format = source.format;\n this.deliveryProfileId = source.deliveryProfileId;\n this.url = source.url;\n this.protocols = source.protocols;\n this.flavorIds = source.flavorIds;\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 * Checks if source has flavor IDs\n * @function hasFlavorIds\n * @returns {boolean} Is source ha flavor IDs\n */\n hasFlavorIds(): boolean {\n return !!this.flavorIds && this.flavorIds.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 = 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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/response-types/kaltura-playback-source.js","//@flow\nimport OVPService from './ovp-service';\nimport RequestBuilder from '../../../util/request-builder';\nimport BaseEntryResponseProfile from '../request-params/base-entry-response-profile';\n\nconst SERVICE_NAME: string = 'baseEntry';\n\nexport default class OVPBaseEntryService extends OVPService {\n /**\n * Creates an instance of RequestBuilder for baseentry.getPlaybackContext\n * @function getPlaybackContext\n * @param {string} serviceUrl The service base URL\n * @param {string} ks The ks\n * @returns {RequestBuilder} The request builder\n * @static\n */\n static getPlaybackContext(serviceUrl: string, ks: string): RequestBuilder {\n const headers: Map = new Map();\n const serviceEntryId = ks === '{1:result:ks}' ? '{2:result:objects:0:id}' : '{1:result:objects:0:id}';\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 request.tag = 'baseEntry-getPlaybackContext';\n const contextDataParams = {objectType: 'KalturaContextDataParams', flavorTags: 'all'};\n request.params = {entryId: serviceEntryId, ks: ks, contextDataParams: contextDataParams};\n return request;\n }\n\n /**\n * Creates an instance of RequestBuilder for baseentry.list\n * @function list\n * @param {string} serviceUrl The base URL\n * @param {string} ks The ks\n * @param {string} entryId The entry ID\n * @param {boolean} redirectFromEntryId whether the live entry should continue and play the VOD one after the live stream ends.\n * @returns {RequestBuilder} The request builder\n * @static\n */\n static list(serviceUrl: string, ks: string, entryId: string, redirectFromEntryId: boolean): RequestBuilder {\n const headers: Map = new Map();\n headers.set('Content-Type', 'application/json');\n const request = new RequestBuilder(headers);\n request.service = SERVICE_NAME;\n request.action = 'list';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n request.tag = 'list';\n request.params = OVPBaseEntryService.getEntryListReqParams(entryId, ks, redirectFromEntryId);\n return request;\n }\n\n /**\n * Gets baseentry.list service params\n * @function getEntryListReqParams\n * @param {string} entryId The entry ID\n * @param {string} ks The ks\n * @param {boolean} redirectFromEntryId whether the live entry should continue and play the VOD one after the live stream ends.\n * @returns {{ks: string, filter: {redirectFromEntryId: string}, responseProfile: {fields: string, type: number}}} The service params object\n * @static\n */\n static getEntryListReqParams(entryId: string, ks: string, redirectFromEntryId: boolean): any {\n const filterParams = redirectFromEntryId ? {redirectFromEntryId: entryId} : {idEqual: entryId};\n return {ks: ks, filter: filterParams, responseProfile: new BaseEntryResponseProfile()};\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/services/base-entry-service.js","//@flow\nimport getLogger from '../../util/logger';\nimport OVPConfiguration from './config';\nimport OVPProviderParser from './provider-parser';\nimport KalturaMediaEntry from './response-types/kaltura-media-entry';\nimport OVPMediaEntryLoader from './loaders/media-entry-loader';\nimport OVPSessionLoader from './loaders/session-loader';\nimport OVPDataLoaderManager from './loaders/data-loader-manager';\nimport OVPPlaylistLoader from './loaders/playlist-loader';\nimport BaseProvider from '../common/base-provider';\nimport MediaEntry from '../../entities/media-entry';\nimport OVPEntryListLoader from './loaders/entry-list-loader';\nimport Error from '../../util/error/error';\n\nexport default class OVPProvider extends BaseProvider {\n _filterOptionsConfig: ProviderFilterOptionsObject = {redirectFromEntryId: true};\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('OVPProvider');\n OVPConfiguration.set(options.env);\n this._setFilterOptionsConfig(options.filterOptions);\n this._networkRetryConfig = Object.assign(this._networkRetryConfig, options.networkRetryParameters);\n }\n\n /**\n * Gets the backend media config.\n * @param {OVPProviderMediaInfoObject} mediaInfo - ovp media info\n * @returns {Promise} - The provider media config\n */\n getMediaConfig(mediaInfo: OVPProviderMediaInfoObject): Promise {\n if (mediaInfo.ks) {\n this.ks = mediaInfo.ks;\n this._isAnonymous = false;\n }\n if (this.widgetId !== this.defaultWidgetId) {\n this._isAnonymous = false;\n }\n this._dataLoader = new OVPDataLoaderManager(this.playerVersion, 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(OVPSessionLoader, {widgetId: this.widgetId});\n }\n const redirectFromEntryId = this._getEntryRedirectFilter(mediaInfo);\n this._dataLoader.add(OVPMediaEntryLoader, {entryId, ks, redirectFromEntryId});\n return this._dataLoader.fetchData().then(\n response => {\n try {\n resolve(this._parseDataFromResponse(response));\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 _getEntryRedirectFilter(mediaInfo: Object): boolean {\n return typeof mediaInfo.redirectFromEntryId === 'boolean'\n ? mediaInfo.redirectFromEntryId\n : typeof this._filterOptionsConfig.redirectFromEntryId === 'boolean'\n ? this._filterOptionsConfig.redirectFromEntryId\n : true;\n }\n\n _setFilterOptionsConfig(options?: ProviderFilterOptionsObject): void {\n if (options && typeof options.redirectFromEntryId == 'boolean') {\n this._filterOptionsConfig.redirectFromEntryId = options.redirectFromEntryId;\n }\n }\n\n _parseDataFromResponse(data: Map): 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\n if (this.uiConfId) {\n mediaConfig.session.uiConfId = this.uiConfId;\n }\n if (data) {\n if (data.has(OVPSessionLoader.id)) {\n const sessionLoader = data.get(OVPSessionLoader.id);\n if (sessionLoader && sessionLoader.response) {\n mediaConfig.session.ks = sessionLoader.response;\n if (this.widgetId !== this.defaultWidgetId) {\n this.ks = mediaConfig.session.ks;\n }\n }\n } else {\n mediaConfig.session.ks = this.ks;\n }\n if (data.has(OVPMediaEntryLoader.id)) {\n const mediaLoader = data.get(OVPMediaEntryLoader.id);\n if (mediaLoader && mediaLoader.response) {\n const response = (mediaLoader: OVPMediaEntryLoader).response;\n if (OVPProviderParser.hasBlockAction(response)) {\n throw new Error(Error.Severity.CRITICAL, Error.Category.SERVICE, Error.Code.BLOCK_ACTION, {\n action: OVPProviderParser.getBlockAction(response),\n messages: OVPProviderParser.getErrorMessages(response)\n });\n }\n const mediaEntry = OVPProviderParser.getMediaEntry(this.isAnonymous ? '' : this.ks, this.partnerId, this.uiConfId, response);\n Object.assign(mediaConfig.sources, this._getSourcesObject(mediaEntry));\n this._verifyMediaStatus(mediaEntry);\n this._verifyHasSources(mediaConfig.sources);\n }\n }\n }\n this._logger.debug('Data parsing finished', mediaConfig);\n return mediaConfig;\n }\n\n /**\n * Checks media is ready for playback (not being imported or converted)\n * @param {MediaEntry} mediaEntry - the media entry info\n * @returns {void}\n */\n _verifyMediaStatus(mediaEntry: MediaEntry) {\n if ([KalturaMediaEntry.EntryStatus.IMPORT, KalturaMediaEntry.EntryStatus.PRECONVERT].includes(mediaEntry.status)) {\n throw new Error(Error.Severity.CRITICAL, Error.Category.SERVICE, Error.Code.MEDIA_STATUS_NOT_READY, {\n messages: `Status of entry id ${mediaEntry.id} is ${mediaEntry.status} and is still being imported or converted`,\n data: {status}\n });\n }\n }\n /**\n * Gets the backend playlist config.\n * @param {ProviderPlaylistInfoObject} playlistInfo - ovp playlist info\n * @returns {Promise} - The provider playlist config\n */\n getPlaylistConfig(playlistInfo: ProviderPlaylistInfoObject): Promise {\n if (playlistInfo.ks) {\n this.ks = playlistInfo.ks;\n this._isAnonymous = false;\n }\n if (this.widgetId !== this.defaultWidgetId) {\n this._isAnonymous = false;\n }\n this._dataLoader = new OVPDataLoaderManager(this.playerVersion, this.partnerId, this.ks, this._networkRetryConfig);\n return new Promise((resolve, reject) => {\n const playlistId = playlistInfo.playlistId;\n if (playlistId) {\n let ks: string = this.ks;\n if (!ks) {\n ks = '{1:result:ks}';\n this._dataLoader.add(OVPSessionLoader, {widgetId: this.widgetId});\n }\n this._dataLoader.add(OVPPlaylistLoader, {playlistId, ks});\n this._dataLoader.fetchData().then(\n response => {\n resolve(this._parsePlaylistDataFromResponse(response));\n },\n err => {\n reject(err);\n }\n );\n } else {\n reject({success: false, data: 'Missing mandatory parameter'});\n }\n });\n }\n\n _parsePlaylistDataFromResponse(data: Map): ProviderPlaylistObject {\n this._logger.debug('Data parsing started');\n const playlistConfig: ProviderPlaylistObject = this._getPlaylistObject();\n if (data && data.has(OVPPlaylistLoader.id)) {\n const playlistLoader = data.get(OVPPlaylistLoader.id);\n if (playlistLoader && playlistLoader.response) {\n const playlist = OVPProviderParser.getPlaylist(playlistLoader.response);\n playlistConfig.id = playlist.id;\n playlistConfig.poster = playlist.poster;\n playlistConfig.metadata.name = playlist.name;\n playlistConfig.metadata.description = playlist.description;\n playlist.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 /**\n * Gets playlist config from entry list.\n * @param {ProviderEntryListObject} entryListInfo - ovp entry list info\n * @returns {Promise} - The provider playlist config\n */\n getEntryListConfig(entryListInfo: ProviderEntryListObject): Promise {\n if (entryListInfo.ks) {\n this.ks = entryListInfo.ks;\n this._isAnonymous = false;\n }\n if (this.widgetId !== this.defaultWidgetId) {\n this._isAnonymous = false;\n }\n this._dataLoader = new OVPDataLoaderManager(this.playerVersion, 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(OVPSessionLoader, {widgetId: this.widgetId});\n }\n const redirectFromEntryId = this._getEntryRedirectFilter(entryListInfo);\n this._dataLoader.add(OVPEntryListLoader, {entries, ks, redirectFromEntryId});\n this._dataLoader.fetchData().then(\n response => {\n resolve(this._parseEntryListDataFromResponse(response));\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): ProviderPlaylistObject {\n this._logger.debug('Data parsing started');\n const playlistConfig: ProviderPlaylistObject = this._getPlaylistObject();\n if (data && data.has(OVPEntryListLoader.id)) {\n const playlistLoader = data.get(OVPEntryListLoader.id);\n if (playlistLoader && playlistLoader.response) {\n const entryList = OVPProviderParser.getEntryList(playlistLoader.response);\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 _getPlaylistObject(): ProviderPlaylistObject {\n return {\n id: '',\n metadata: {\n name: '',\n description: ''\n },\n poster: '',\n items: []\n };\n }\n\n _getDefaultSourcesObject(): ProviderMediaConfigSourcesObject {\n return {\n hls: [],\n dash: [],\n progressive: [],\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 (mediaEntry.sources.captions) {\n sourcesObject.captions = mediaEntry.sources.captions;\n }\n if (mediaEntry.metadata && typeof mediaEntry.metadata.tags === 'string' && mediaEntry.metadata.tags.indexOf('360') > -1) {\n sourcesObject.vr = {};\n }\n Object.assign(sourcesObject.metadata, mediaEntry.metadata);\n return sourcesObject;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/provider.js","//@flow\n\nimport MediaEntry from '../entities/media-entry';\n\nexport default class Playlist {\n /**\n * @member - playlist id\n * @type {string}\n */\n id: string;\n /**\n * @member - playlist name\n * @type {string}\n */\n name: string;\n /**\n * @member - playlist description\n * @type {string}\n */\n description: string;\n\n /**\n * @member - playlist poster\n * @type {string}\n */\n poster: string;\n\n /**\n * @member - playlist items\n * @type {Array}\n */\n items: Array;\n\n constructor() {\n this.items = [];\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./entities/playlist.js","// @flow\n\nconst KalturaCaptionType: CaptionType = {\n SRT: '1',\n DFXP: '2',\n WEBVTT: '3',\n CAP: '4'\n};\n\nconst CaptionsFormatsMap: {[format: string]: string} = {\n '3': 'vtt',\n '1': 'srt'\n};\n\nclass ExternalCaptionsBuilder {\n static createConfig(captions: Array): Array {\n return captions.map(caption => {\n let url = caption.url;\n let type = CaptionsFormatsMap[caption.format];\n if ([KalturaCaptionType.DFXP, KalturaCaptionType.CAP].includes(caption.format)) {\n url = caption.webVttUrl;\n type = CaptionsFormatsMap[KalturaCaptionType.WEBVTT];\n }\n return {\n default: !!caption.isDefault,\n type: type,\n language: caption.languageCode,\n label: caption.label,\n url: url\n };\n });\n }\n}\n\nexport {ExternalCaptionsBuilder};\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/external-captions-builder.js","// @flow\nimport OVPProvider from './provider';\n\ndeclare var __VERSION__: string;\ndeclare var __NAME__: string;\n\nconst NAME = __NAME__ + '-ovp';\nconst VERSION = __VERSION__;\n\nexport {OVPProvider as Provider, NAME, VERSION};\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/index.js","// @flow\nimport DataLoaderManager from '../../common/data-loader-manager';\nimport OVPService from '../services/ovp-service';\n\n/**\n * OTTDataLoaderManager is a class that handles the OVP data loading\n * @param {string} playerVersion - player version\n * @param {string} partnerId - partner id\n * @param {string} ks - ks\n * @param {ProviderNetworkRetryParameters} [networkRetryConfig] - network retry configuration\n */\nexport default class OVPDataLoaderManager extends DataLoaderManager {\n constructor(playerVersion: string, partnerId: number, ks: string = '', networkRetryConfig: ProviderNetworkRetryParameters) {\n super(networkRetryConfig);\n this._multiRequest = OVPService.getMultiRequest(playerVersion, ks, partnerId);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/loaders/data-loader-manager.js","//@flow\nimport RequestBuilder from '../../../util/request-builder';\nimport OVPConfiguration from '../config';\nimport OVPBaseEntryService from '../services/base-entry-service';\nimport KalturaBaseEntryListResponse from '../response-types/kaltura-base-entry-list-response';\n\nexport default class OVPEntryListLoader implements ILoader {\n _entries: Array;\n _requests: Array;\n _response: any = {playlistItems: {entries: []}};\n\n static get id(): string {\n return 'entry_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) {\n this._requests = requests;\n }\n\n get requests(): Array {\n return this._requests;\n }\n\n set response(response: any) {\n let mediaEntryResponse: KalturaBaseEntryListResponse;\n response.forEach(item => {\n mediaEntryResponse = new KalturaBaseEntryListResponse(item.data);\n this._response.playlistItems.entries.push(mediaEntryResponse.entries[0]);\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 {\n const config = OVPConfiguration.get();\n const requests: Array = [];\n params.entries.forEach(entry => {\n requests.push(OVPBaseEntryService.list(config.serviceUrl, params.ks, entry.entryId || entry, params.redirectFromEntryId));\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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/loaders/entry-list-loader.js","//@flow\nimport RequestBuilder from '../../../util/request-builder';\nimport OVPBaseEntryService from '../services/base-entry-service';\nimport OVPMetadataService from '../services/meta-data-service';\nimport OVPConfiguration from '../config';\nimport KalturaPlaybackContext from '../response-types/kaltura-playback-context';\nimport KalturaMetadataListResponse from '../response-types/kaltura-metadata-list-response';\nimport KalturaBaseEntryListResponse from '../response-types/kaltura-base-entry-list-response';\nimport KalturaMediaEntry from '../response-types/kaltura-media-entry';\n\ntype OVPMediaEntryLoaderResponse = {\n entry: KalturaMediaEntry,\n playBackContextResult: KalturaPlaybackContext,\n metadataListResult: KalturaMetadataListResponse\n};\nexport type {OVPMediaEntryLoaderResponse};\n\nexport default class OVPMediaEntryLoader implements ILoader {\n _entryId: string;\n _requests: Array;\n _response: any = {};\n\n static get id(): string {\n return 'media';\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n * @boolean {boolean} useExternalCaptions - if we should add captions request to the multirequests.\n */\n constructor(params: Object) {\n this.requests = this.buildRequests(params);\n this._entryId = params.entryId;\n }\n\n set requests(requests: Array) {\n this._requests = requests;\n }\n\n get requests(): Array {\n return this._requests;\n }\n\n set response(response: any) {\n let mediaEntryResponse: KalturaBaseEntryListResponse = new KalturaBaseEntryListResponse(response[0].data);\n this._response.entry = mediaEntryResponse.entries[0];\n this._response.playBackContextResult = new KalturaPlaybackContext(response[1].data);\n this._response.metadataListResult = new KalturaMetadataListResponse(response[2].data);\n }\n\n get response(): OVPMediaEntryLoaderResponse {\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 {\n const config = OVPConfiguration.get();\n const requests: Array = [];\n requests.push(OVPBaseEntryService.list(config.serviceUrl, params.ks, params.entryId, params.redirectFromEntryId));\n requests.push(OVPBaseEntryService.getPlaybackContext(config.serviceUrl, params.ks));\n requests.push(OVPMetadataService.list(config.serviceUrl, params.ks, params.entryId));\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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/loaders/media-entry-loader.js","//@flow\nimport RequestBuilder from '../../../util/request-builder';\nimport OVPPlaylistService from '../services/playlist-service';\nimport OVPConfiguration from '../config';\nimport KalturaPlaylist from '../response-types/kaltura-playlist';\nimport KalturaMediaEntries from '../response-types/kaltura-media-entries';\n\nexport default class OVPPlaylistLoader implements ILoader {\n _playlistId: string;\n _requests: Array;\n _response: any = {};\n\n static get id(): string {\n return 'playlist';\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n */\n constructor(params: Object) {\n this.requests = this.buildRequests(params);\n this._playlistId = params.playlistId;\n }\n\n set requests(requests: Array) {\n this._requests = requests;\n }\n\n get requests(): Array {\n return this._requests;\n }\n\n set response(response: any) {\n this._response.playlistData = new KalturaPlaylist(response[0].data);\n this._response.playlistItems = new KalturaMediaEntries(response[1].data);\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 {\n const config = OVPConfiguration.get();\n const requests: Array = [];\n requests.push(OVPPlaylistService.get(config.serviceUrl, params.ks, params.playlistId));\n requests.push(OVPPlaylistService.execute(config.serviceUrl, params.ks, params.playlistId));\n return requests;\n }\n\n /**\n * Loader validation function\n * @function\n * @returns {boolean} Is valid\n */\n isValid(): boolean {\n return !!this._playlistId;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/loaders/playlist-loader.js","//@flow\nimport OVPSessionService from '../services/session-service';\nimport OVPConfiguration from '../config';\nimport RequestBuilder from '../../../util/request-builder';\n\nexport default class OVPSessionLoader implements ILoader {\n _widgetId: string;\n _requests: Array;\n _response: any = {};\n\n static get id(): string {\n return 'session';\n }\n\n set requests(requests: Array) {\n this._requests = requests;\n }\n\n get requests(): Array {\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 * @constructor\n * @param {Object} params loader params\n */\n constructor(params: Object) {\n this.requests = this.buildRequests(params);\n this._widgetId = params.widgetId;\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 {\n const config = OVPConfiguration.get();\n const requests: Array = [];\n requests.push(OVPSessionService.anonymousSession(config.serviceUrl, params.widgetId));\n return requests;\n }\n\n /**\n * Loader validation function\n * @function\n * @returns {boolean} Is valid\n */\n isValid(): boolean {\n return !!this._widgetId;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/loaders/session-loader.js","//@flow\nimport OVPConfiguration from './config';\n\ntype urlParamsType = {\n partnerId: number,\n entryId: string,\n ks: string,\n uiConfId: ?number,\n format: string,\n protocol: string,\n extension: string,\n flavorIds: ?string\n};\n\nexport default class PlaySourceUrlBuilder {\n /**\n * Returns source url by given url params\n * @function build\n * @param {urlParamsType} urlParams The params\n * @returns {string} The URL\n * @static\n */\n static build(urlParams: urlParamsType): string {\n const config = OVPConfiguration.get();\n const serviceUrlOrigin: string = config.serviceUrl.substr(0, config.serviceUrl.lastIndexOf('/'));\n const {partnerId, entryId, ks, uiConfId, format, protocol, extension, flavorIds} = urlParams;\n\n //verify mandatory params\n if (!serviceUrlOrigin || !partnerId || !entryId || !format || !protocol) {\n return '';\n }\n\n let playUrl = serviceUrlOrigin;\n if (!serviceUrlOrigin.endsWith('/')) {\n playUrl += '/';\n }\n playUrl += 'p/' + partnerId + '/sp/' + partnerId + '00' + '/playManifest/entryId/' + entryId + '/protocol/' + protocol + '/format/' + format;\n\n if (flavorIds) {\n playUrl += '/flavorIds/' + flavorIds;\n } else if (uiConfId) {\n playUrl += '/uiConfId/' + uiConfId;\n }\n\n if (ks !== '') {\n playUrl += '/ks/' + ks;\n }\n\n if (extension !== '') {\n playUrl += '/a.' + extension;\n }\n\n if (uiConfId && flavorIds !== '') {\n playUrl += '?uiConfId=' + uiConfId;\n }\n\n return playUrl;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/play-source-url-builder.js","//@flow\nimport KalturaPlaybackContext from './response-types/kaltura-playback-context';\nimport KalturaMetadataListResponse from './response-types/kaltura-metadata-list-response';\nimport KalturaMediaEntry from './response-types/kaltura-media-entry';\nimport KalturaPlaybackSource from './response-types/kaltura-playback-source';\nimport KalturaDrmPlaybackPluginData from '../common/response-types/kaltura-drm-playback-plugin-data';\nimport PlaySourceUrlBuilder from './play-source-url-builder';\nimport XmlParser from '../../util/xml-parser';\nimport getLogger from '../../util/logger';\nimport OVPConfiguration from './config';\nimport MediaEntry from '../../entities/media-entry';\nimport Drm from '../../entities/drm';\nimport MediaSource from '../../entities/media-source';\nimport MediaSources from '../../entities/media-sources';\nimport {SupportedStreamFormat, isProgressiveSource} from '../../entities/media-format';\nimport Playlist from '../../entities/playlist';\nimport EntryList from '../../entities/entry-list';\nimport KalturaRuleAction from './response-types/kaltura-rule-action';\nimport KalturaAccessControlMessage from '../common/response-types/kaltura-access-control-message';\nimport type {OVPMediaEntryLoaderResponse} from './loaders/media-entry-loader';\nimport {ExternalCaptionsBuilder} from './external-captions-builder';\n\nexport default class OVPProviderParser {\n static _logger = getLogger('OVPProviderParser');\n\n /**\n * Returns parsed media entry by given OVP response objects\n * @function getMediaEntry\n * @param {string} ks - The ks\n * @param {number} partnerId - The partner ID\n * @param {number} uiConfId - The uiConf ID\n * @param {any} mediaEntryResponse - The media entry response\n * @returns {MediaEntry} - The media entry\n * @static\n * @public\n */\n static getMediaEntry(ks: string, partnerId: number, uiConfId: ?number, mediaEntryResponse: any): MediaEntry {\n const mediaEntry = new MediaEntry();\n const entry = mediaEntryResponse.entry;\n const playbackContext = mediaEntryResponse.playBackContextResult;\n const metadataList = mediaEntryResponse.metadataListResult;\n const kalturaSources = playbackContext.sources;\n\n mediaEntry.sources = OVPProviderParser._getParsedSources(kalturaSources, ks, partnerId, uiConfId, entry, playbackContext);\n if (OVPConfiguration.get().useApiCaptions && playbackContext.data.playbackCaptions) {\n mediaEntry.sources.captions = ExternalCaptionsBuilder.createConfig(playbackContext.data.playbackCaptions);\n }\n OVPProviderParser._fillBaseData(mediaEntry, entry, metadataList);\n return mediaEntry;\n }\n\n /**\n * Returns parsed playlist by given OVP response objects\n * @function getPlaylist\n * @param {any} playlistResponse - The playlist response\n * @returns {Playlist} - The playlist\n * @static\n * @public\n */\n static getPlaylist(playlistResponse: any): Playlist {\n const playlist = new Playlist();\n const playlistData = playlistResponse.playlistData;\n const playlistItems = playlistResponse.playlistItems.entries;\n playlist.id = playlistData.id;\n playlist.name = playlistData.name;\n playlist.description = playlistData.description;\n playlist.poster = playlistData.poster;\n playlistItems.forEach((entry: KalturaMediaEntry) => {\n const mediaEntry = new MediaEntry();\n OVPProviderParser._fillBaseData(mediaEntry, entry);\n playlist.items.push(mediaEntry);\n });\n return playlist;\n }\n\n /**\n * Returns parsed entry list by given OVP response objects\n * @function getEntryList\n * @param {any} playlistResponse - response\n * @returns {Playlist} - The entry list\n * @static\n * @public\n */\n static getEntryList(playlistResponse: any): EntryList {\n const entryList = new EntryList();\n const playlistItems = playlistResponse.playlistItems.entries;\n playlistItems.forEach(entry => {\n const mediaEntry = new MediaEntry();\n OVPProviderParser._fillBaseData(mediaEntry, entry);\n entryList.items.push(mediaEntry);\n });\n return entryList;\n }\n\n static _fillBaseData(mediaEntry: MediaEntry, entry: KalturaMediaEntry, metadataList: ?KalturaMetadataListResponse) {\n mediaEntry.poster = entry.poster;\n mediaEntry.id = entry.id;\n mediaEntry.duration = entry.duration;\n mediaEntry.metadata = OVPProviderParser._parseMetadata(metadataList);\n mediaEntry.metadata.description = entry.description || '';\n mediaEntry.metadata.name = entry.name || '';\n mediaEntry.metadata.tags = entry.tags || '';\n mediaEntry.status = entry.status;\n\n mediaEntry.type = OVPProviderParser._getEntryType(entry.entryType, entry.type);\n if (mediaEntry.type === MediaEntry.Type.LIVE) {\n mediaEntry.dvrStatus = entry.dvrStatus;\n }\n\n return mediaEntry;\n }\n\n static _getEntryType(entryTypeEnum: number, typeEnum: number | string): string {\n let type = MediaEntry.Type.UNKNOWN;\n switch (entryTypeEnum) {\n case KalturaMediaEntry.MediaType.IMAGE.value:\n type = MediaEntry.Type.IMAGE;\n break;\n case KalturaMediaEntry.MediaType.AUDIO.value:\n type = MediaEntry.Type.AUDIO;\n break;\n default:\n switch (typeEnum) {\n case KalturaMediaEntry.EntryType.MEDIA_CLIP.value:\n type = MediaEntry.Type.VOD;\n break;\n case KalturaMediaEntry.EntryType.LIVE_STREAM.value:\n case KalturaMediaEntry.EntryType.LIVE_CHANNEL.value:\n type = MediaEntry.Type.LIVE;\n break;\n default:\n type = MediaEntry.Type.UNKNOWN;\n }\n }\n return type;\n }\n\n /**\n * Returns the parsed sources\n * @function _getParsedSources\n * @param {Array} kalturaSources - The kaltura sources\n * @param {string} ks - The ks\n * @param {number} partnerId - The partner ID\n * @param {number} uiConfId - The uiConf ID\n * @param {Object} entry - The entry\n * @param {KalturaPlaybackContext} playbackContext - The playback context\n * @return {MediaSources} - A media sources\n * @static\n * @private\n */\n static _getParsedSources(\n kalturaSources: Array,\n ks: string,\n partnerId: number,\n uiConfId: ?number,\n entry: Object,\n playbackContext: KalturaPlaybackContext\n ): MediaSources {\n const sources = new MediaSources();\n const addAdaptiveSource = (source: KalturaPlaybackSource) => {\n const parsedSource = OVPProviderParser._parseAdaptiveSource(source, playbackContext, ks, partnerId, uiConfId, entry.id);\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 const progressiveSource = kalturaSources.find(source => {\n //match progressive source with supported protocol(http/s)\n return isProgressiveSource(source.format) && source.getProtocol(OVPProviderParser._getBaseProtocol()) !== '';\n });\n sources.progressive = OVPProviderParser._parseProgressiveSources(progressiveSource, playbackContext, ks, partnerId, uiConfId, entry.id);\n };\n\n const parseExternalMedia = () => {\n const mediaSource = new MediaSource();\n mediaSource.mimetype = 'video/youtube';\n mediaSource.url = entry.referenceId;\n mediaSource.id = entry.id + '_youtube';\n sources.progressive.push(mediaSource);\n };\n\n if (entry.type === KalturaMediaEntry.EntryType.EXTERNAL_MEDIA.value) {\n parseExternalMedia();\n } else 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 * @param {KalturaPlaybackContext} playbackContext - The playback context\n * @param {string} ks - The ks\n * @param {number} partnerId - The partner ID\n * @param {number} uiConfId - The uiConf ID\n * @param {string} entryId - The entry id\n * @returns {?MediaSource} - The parsed adaptive kalturaSource\n * @static\n * @private\n */\n static _parseAdaptiveSource(\n kalturaSource: ?KalturaPlaybackSource,\n playbackContext: KalturaPlaybackContext,\n ks: string,\n partnerId: number,\n uiConfId: ?number,\n entryId: string\n ): ?MediaSource {\n const mediaSource: MediaSource = new MediaSource();\n if (kalturaSource) {\n let playUrl: string = '';\n const mediaFormat = SupportedStreamFormat.get(kalturaSource.format);\n const protocol = kalturaSource.getProtocol(OVPProviderParser._getBaseProtocol());\n const deliveryProfileId = kalturaSource.deliveryProfileId;\n const format = kalturaSource.format;\n let extension: string = '';\n if (mediaFormat) {\n extension = mediaFormat.pathExt;\n mediaSource.mimetype = mediaFormat.mimeType;\n }\n // in case playbackSource doesn't have flavors we don't need to build the url and we'll use the provided one.\n if (kalturaSource.hasFlavorIds()) {\n if (!extension && playbackContext.flavorAssets && playbackContext.flavorAssets.length > 0) {\n extension = playbackContext.flavorAssets[0].fileExt;\n }\n playUrl = PlaySourceUrlBuilder.build({\n entryId,\n flavorIds: kalturaSource.flavorIds,\n format,\n ks,\n partnerId,\n uiConfId,\n extension,\n protocol\n });\n } else {\n playUrl = kalturaSource.url;\n }\n if (!playUrl) {\n const message = `failed to create play url from source, discarding source: (${entryId}_${deliveryProfileId}), ${format}`;\n OVPProviderParser._logger.warn(message);\n return null;\n }\n mediaSource.url = OVPProviderParser._applyRegexAction(playbackContext, playUrl);\n mediaSource.id = entryId + '_' + deliveryProfileId + ',' + format;\n if (kalturaSource.hasDrmData()) {\n const drmParams: Array = [];\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 /**\n * Returns parsed progressive sources\n * @function _parseProgressiveSources\n * @param {KalturaPlaybackSource} kalturaSource - A kaltura source\n * @param {KalturaPlaybackContext} playbackContext - The playback context\n * @param {string} ks - The ks\n * @param {number} partnerId - The partner ID\n * @param {number} uiConfId - The uiConf ID\n * @param {string} entryId - The entry id\n * @returns {Array} - The parsed progressive kalturaSources\n * @static\n * @private\n */\n static _parseProgressiveSources(\n kalturaSource: ?KalturaPlaybackSource,\n playbackContext: KalturaPlaybackContext,\n ks: string,\n partnerId: number,\n uiConfId: ?number,\n entryId: string\n ): Array {\n const videoSources: Array = [];\n const audioSources: Array = [];\n if (kalturaSource) {\n const protocol = kalturaSource.getProtocol(OVPProviderParser._getBaseProtocol());\n const format = kalturaSource.format;\n const deliveryProfileId = kalturaSource.deliveryProfileId;\n const sourceId = deliveryProfileId + ',' + format;\n playbackContext.flavorAssets.map(flavor => {\n const mediaSource: MediaSource = new MediaSource();\n mediaSource.id = flavor.id + sourceId;\n mediaSource.mimetype = flavor.fileExt === 'mp3' ? 'audio/mp3' : 'video/mp4';\n mediaSource.height = flavor.height;\n mediaSource.width = flavor.width;\n mediaSource.bandwidth = flavor.bitrate * 1024;\n mediaSource.label = flavor.label || flavor.language;\n const playUrl = PlaySourceUrlBuilder.build({\n entryId,\n flavorIds: flavor.id,\n format,\n ks,\n partnerId: partnerId,\n uiConfId: uiConfId,\n extension: flavor.fileExt,\n protocol\n });\n if (playUrl === '') {\n OVPProviderParser._logger.warn(`failed to create play url from source, discarding source: (${entryId}_${deliveryProfileId}), ${format}.`);\n return null;\n } else {\n mediaSource.url = OVPProviderParser._applyRegexAction(playbackContext, playUrl);\n if (flavor.height && flavor.width) {\n videoSources.push(mediaSource);\n } else {\n audioSources.push(mediaSource);\n }\n }\n });\n }\n //If we have only audio flavors return them, otherwise return video flavors\n return audioSources.length && !videoSources.length ? audioSources : videoSources;\n }\n\n /**\n * Ovp metadata parser\n * @function _parseMetaData\n * @param {KalturaMetadataListResponse} metadataList The metadata list\n * @returns {Object} Parsed metadata\n * @static\n * @private\n */\n static _parseMetadata(metadataList: ?KalturaMetadataListResponse): Object {\n const metadata = {};\n if (metadataList && metadataList.metas && metadataList.metas.length > 0) {\n metadataList.metas.forEach(meta => {\n let metaXml: Object;\n const domParser: DOMParser = new DOMParser();\n meta.xml = meta.xml.replace(/\\r?\\n|\\r/g, '');\n meta.xml = meta.xml.replace(/>\\s*/g, '>');\n meta.xml = meta.xml.replace(/>\\s*/g, '>');\n metaXml = domParser.parseFromString(meta.xml, 'text/xml');\n const metasObj: Object = XmlParser.xmlToJson(metaXml);\n const metaKeys = Object.keys(metasObj.metadata);\n metaKeys.forEach(key => {\n metadata[key] = metasObj.metadata[key]['#text'];\n });\n });\n }\n return metadata;\n }\n\n /**\n * Returns the base protocol\n * @function _getBaseProtocol\n * @returns {string} - The base protocol\n * @static\n * @private\n */\n static _getBaseProtocol(): string {\n const config = OVPConfiguration.get();\n const protocolRegex = /^https?:/;\n const result = protocolRegex.exec(config.cdnUrl);\n const protocol = result ? result[0] : document.location.protocol;\n if (typeof protocol === 'string') {\n return protocol.slice(0, -1); // remove ':' from the end\n }\n return 'https';\n }\n\n static hasBlockAction(response: OVPMediaEntryLoaderResponse): boolean {\n return response.playBackContextResult.hasBlockAction();\n }\n\n static getBlockAction(response: OVPMediaEntryLoaderResponse): ?KalturaRuleAction {\n return response.playBackContextResult.getBlockAction();\n }\n\n static getErrorMessages(response: OVPMediaEntryLoaderResponse): Array {\n return response.playBackContextResult.getErrorMessages();\n }\n\n /**\n * Applies the request host regex on the url\n * @function _applyRegexAction\n * @param {KalturaPlaybackContext} playbackContext - The playback context\n * @param {string} playUrl - The original url\n * @returns {string} - The request host regex applied url\n * @static\n * @private\n */\n static _applyRegexAction(playbackContext: KalturaPlaybackContext, playUrl: string): string {\n const regexAction = playbackContext.getRequestHostRegexAction();\n if (regexAction) {\n const regex = new RegExp(regexAction.pattern, 'i');\n if (playUrl.match(regex)) {\n return playUrl.replace(regex, regexAction.replacement + '/');\n }\n }\n return playUrl;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/provider-parser.js","//@flow\nimport KalturaRuleAction from './kaltura-rule-action';\n\nexport default class KalturaAccessControlModifyRequestHostRegexAction extends KalturaRuleAction {\n /**\n * @member - Request host regex pattern\n * @type {string}\n */\n pattern: string;\n /**\n * @member - Request host regex replacement\n * @type {string}\n */\n replacement: string;\n /**\n * @member - serverNodeId to generate replacment host from\n * @type {number}\n */\n replacmenServerNodeId: number;\n\n /**\n * @constructor\n * @param {Object} data - The response\n */\n constructor(data: Object) {\n super(data);\n this.pattern = data.pattern;\n this.replacement = data.replacement;\n this.replacmenServerNodeId = data.replacmenServerNodeId;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/response-types/kaltura-access-control-modify-request-host-regex-action.js","//@flow\nexport default class KalturaFlavorAsset {\n static Status: {[status: string]: number} = {\n ERROR: -1,\n QUEUED: 0,\n CONVERTING: 1,\n READY: 2,\n DELETED: 3,\n NOT_APPLICABLE: 4,\n TEMP: 5,\n WAIT_FOR_CONVERT: 6,\n IMPORTING: 7,\n VALIDATING: 8,\n EXPORTING: 9\n };\n\n /**\n * @member - The ID of the Flavor Asset\n * @type {string}\n */\n id: string;\n /**\n * @member -The Flavor Params used to create this Flavor Asset\n * @type {string}\n */\n flavorParamsId: string;\n /**\n * @member -The file extension\n * @type {string}\n */\n fileExt: string;\n /**\n * @member - The overall bitrate (in KBits) of the Flavor Asset\n * @type {string}\n */\n bitrate: number;\n /**\n * @member - The width of the Flavor Asset\n * @type {number}\n */\n width: number;\n /**\n * @member - The height of the Flavor Asset\n * @type {number}\n */\n height: number;\n /**\n * @member - The frame rate (in FPS) of the Flavor Asset\n * @type {number}\n */\n frameRate: number;\n /**\n * @member - True if this Flavor Asset is the original source\n * @type {number}\n */\n isOriginal: boolean;\n /**\n * @member - True if this Flavor Asset is playable in KDP\n * @type {boolean}\n */\n isWeb: boolean;\n /**\n * @member - The container format\n * @type {boolean}\n */\n containerFormat: string;\n /**\n *@member - The video codec\n * @type {boolean}\n */\n videoCodecId: string;\n /**\n * @member - The status of the Flavor Asset\n * @type {number}\n */\n status: number;\n /**\n * @member - The language of the flavor asset\n * @type {Status}\n */\n language: string;\n /**\n * @member - The label of the flavor asset\n * @type {string}\n */\n label: string;\n\n /**\n * @constructor\n * @param {Object} data The json response\n */\n constructor(data: any) {\n this.id = data.id;\n this.flavorParamsId = data.flavorParamsId;\n this.fileExt = data.fileExt;\n this.bitrate = data.bitrate;\n this.width = data.width;\n this.height = data.height;\n this.id = data.id;\n this.frameRate = data.frameRate;\n this.isOriginal = data.isOriginal;\n this.isWeb = data.isWeb;\n this.containerFormat = data.containerFormat;\n this.videoCodecId = data.videoCodecId;\n this.status = data.status;\n this.language = data.language;\n this.label = data.label;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/response-types/kaltura-flavor-asset.js","//@flow\nimport ServiceResult from '../../common/base-service-result';\nimport KalturaMediaEntry from './kaltura-media-entry';\n\nexport default class KalturaMediaEntries extends ServiceResult {\n /**\n * @member - The entries\n * @type {Array}\n */\n entries: Array;\n\n /**\n * @constructor\n * @param {Object} responseObj The json response\n */\n constructor(responseObj: Object) {\n super(responseObj);\n if (!this.hasError) {\n this.entries = [];\n responseObj.map(entry => this.entries.push(new KalturaMediaEntry(entry)));\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/response-types/kaltura-media-entries.js","//@flow\nexport default class KalturaMetadata {\n static ObjectType: {[type: string]: string | number} = {\n AD_CUE_POINT: 'adCuePointMetadata.AdCuePoint',\n ANNOTATION: 'annotationMetadata.Annotation',\n CODE_CUE_POINT: 'codeCuePointMetadata.CodeCuePoint',\n THUMB_CUE_POINT: 'thumbCuePointMetadata.thumbCuePoint',\n ENTRY: 1,\n CATEGORY: 2,\n USER: 3,\n PARTNER: 4,\n DYNAMIC_OBJECT: 5\n };\n\n static Status: {[status: string]: number} = {\n VALID: 1,\n INVALID: 2,\n DELETED: 3\n };\n\n id: number;\n metadataProfileId: number;\n metadataProfileVersion: number;\n metadataObjectType: string | number;\n objectId: string;\n version: number;\n created: Date;\n updated: Date;\n status: number;\n xml: string;\n\n /**\n * @constructor\n * @param {Object} data The response\n */\n constructor(data: Object) {\n this.id = data.id;\n this.metadataProfileId = data.metadataProfileId;\n this.metadataProfileVersion = data.metadataProfileVersion;\n this.metadataProfileId = data.metadataProfileId;\n this.metadataObjectType = data.metadataObjectType;\n this.objectId = data.objectId;\n this.version = data.version;\n this.created = new Date(0);\n this.created.setUTCSeconds(data.createdAt);\n this.updated = new Date(0);\n this.updated.setUTCSeconds(data.updatedAt);\n this.status = data.status;\n this.xml = data.xml;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/response-types/kaltura-metadata.js","//@flow\n\nexport default class KalturaPlaylist {\n /**\n * @member - playlist id\n * @type {string}\n */\n id: string;\n /**\n * @member - playlist name\n * @type {string}\n */\n name: string;\n /**\n * @member - playlist description\n * @type {string}\n */\n description: string;\n /**\n * @member - playlist poster image\n * @type {string}\n */\n poster: string;\n\n /**\n * @constructor\n * @param {Object} playlist - The json response\n */\n constructor(playlist: Object) {\n this.id = playlist.id;\n this.name = playlist.name;\n this.description = playlist.description;\n this.poster = playlist.thumbnailUrl;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/response-types/kaltura-playlist.js","//@flow\nimport OVPService from './ovp-service';\nimport RequestBuilder from '../../../util/request-builder';\n\nconst SERVICE_NAME: string = 'metadata_metadata';\n\nexport default class OVPMetadataService extends OVPService {\n /**\n * Creates an instance of RequestBuilder for metadata_metadata.list\n * @function getPlaybackContext\n * @param {string} serviceUrl The service base URL\n * @param {string} ks The ks\n * @param {string} entryId The entry ID\n * @returns {RequestBuilder} The request builder\n * @static\n */\n static list(serviceUrl: string, ks: string, entryId: string): RequestBuilder {\n const headers: Map = new Map();\n headers.set('Content-Type', 'application/json');\n const request = new RequestBuilder(headers);\n request.service = SERVICE_NAME;\n request.action = 'list';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n request.tag = 'metadata_metadata-list';\n const filter = {objectType: 'KalturaMetadataFilter', objectIdEqual: entryId, metadataObjectTypeEqual: '1'};\n request.params = {filter: filter, ks: ks};\n return request;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/services/meta-data-service.js","//@flow\nimport OVPService from './ovp-service';\nimport RequestBuilder from '../../../util/request-builder';\nimport BaseEntryResponseProfile from '../request-params/base-entry-response-profile';\n\nconst SERVICE_NAME: string = 'playlist';\n\nexport default class OVPPlaylistService extends OVPService {\n /**\n * Creates an instance of RequestBuilder for playlist.getPlaybackContext\n * @function getPlaybackContext\n * @param {string} serviceUrl The service base URL\n * @param {string} ks The ks\n * @param {string} playlistId The playlist ID\n * @returns {RequestBuilder} The request builder\n * @static\n */\n static execute(serviceUrl: string, ks: string, playlistId: string): RequestBuilder {\n const headers: Map = new Map();\n headers.set('Content-Type', 'application/json');\n const request = new RequestBuilder(headers);\n request.service = SERVICE_NAME;\n request.action = 'execute';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n request.tag = `${SERVICE_NAME}-execute`;\n request.params = {\n ks: ks,\n id: playlistId,\n responseProfile: new BaseEntryResponseProfile()\n };\n return request;\n }\n\n /**\n * Creates an instance of RequestBuilder for playlist.list\n * @function list\n * @param {string} serviceUrl The base URL\n * @param {string} ks The ks\n * @param {string} playlistId The playlist ID\n * @returns {RequestBuilder} The request builder\n * @static\n */\n static get(serviceUrl: string, ks: string, playlistId: string): RequestBuilder {\n const headers: Map = 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.tag = `${SERVICE_NAME}-get`;\n request.params = {\n ks: ks,\n id: playlistId,\n responseProfile: {\n fields: 'id,name,description,thumbnailUrl',\n type: 1\n }\n };\n return request;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/services/playlist-service.js","//@flow\nimport OVPService from './ovp-service';\nimport RequestBuilder from '../../../util/request-builder';\n\nconst SERVICE_NAME: string = 'session';\n\nexport default class OVPSessionService extends OVPService {\n /**\n * Creates an instance of RequestBuilder for session.startWidgetSession\n * @function anonymousSession\n * @param {string} serviceUrl The service base URL\n * @param {string} widgetId The widget ID\n * @returns {RequestBuilder} The request builder\n * @static\n */\n static anonymousSession(serviceUrl: string, widgetId: string): RequestBuilder {\n const headers: Map = new Map();\n headers.set('Content-Type', 'application/json');\n const request = new RequestBuilder(headers);\n request.service = SERVICE_NAME;\n request.action = 'startWidgetSession';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n request.tag = 'session-startWidget';\n request.params = {widgetId};\n return request;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/services/session-service.js","//@flow\nexport default class XmlParser {\n /**\n * Parses xml string to json object\n * @param {string} xml The xml to parse\n * @returns {{}} The parsed xml as Json object\n * @static\n */\n static xmlToJson(xml: Object) {\n let obj = {};\n if (xml.nodeType === 1) {\n if (xml.attributes.length > 0) {\n obj['@attributes'] = {};\n for (let j = 0; j < xml.attributes.length; j++) {\n let attribute = xml.attributes.item(j);\n obj['@attributes'][attribute.nodeName] = attribute.nodeValue;\n }\n }\n } else if (xml.nodeType === 3) {\n obj = xml.nodeValue;\n }\n if (xml.hasChildNodes()) {\n for (let i = 0; i < xml.childNodes.length; i++) {\n let item = xml.childNodes.item(i);\n let nodeName = item.nodeName;\n if (typeof obj[nodeName] === 'undefined') {\n obj[nodeName] = this.xmlToJson(item);\n } else {\n if (typeof obj[nodeName].push === 'undefined') {\n let old = obj[nodeName];\n obj[nodeName] = [];\n obj[nodeName].push(old);\n }\n obj[nodeName].push(this.xmlToJson(item));\n }\n }\n }\n return obj;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./util/xml-parser.js"],"sourceRoot":""} \ No newline at end of file +{"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/./util/logger.js","./providers/./entities/media-entry.js","./providers/./util/request-builder.js","./providers/../node_modules/js-logger/src/logger.js","./providers/./entities/media-format.js","./providers/./k-provider/common/base-service-result.js","./providers/./k-provider/common/response-types/kaltura-drm-playback-plugin-data.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/./k-provider/common/response-types/kaltura-access-control-message.js","./providers/./entities/drm.js","./providers/./k-provider/common/base-provider.js","./providers/./util/clone.js","./providers/./entities/entry-list.js","./providers/./k-provider/ovp/config.js","./providers/./k-provider/ovp/response-types/kaltura-playback-source.js","./providers/./k-provider/ovp/response-types/kaltura-rule-action.js","./providers/./k-provider/ovp/response-types/kaltura-access-control-modify-request-host-regex-action.js","./providers/./k-provider/ovp/response-types/kaltura-flavor-asset.js","./providers/./k-provider/ovp/response-types/kaltura-playback-context.js","./providers/./k-provider/ovp/response-types/kaltura-metadata.js","./providers/./k-provider/ovp/response-types/kaltura-metadata-list-response.js","./providers/./k-provider/ovp/response-types/kaltura-media-entry.js","./providers/./k-provider/ovp/play-source-url-builder.js","./providers/./util/xml-parser.js","./providers/./entities/playlist.js","./providers/./k-provider/ovp/external-captions-builder.js","./providers/./k-provider/ovp/provider-parser.js","./providers/./k-provider/ovp/services/ovp-service.js","./providers/./k-provider/ovp/request-params/base-entry-response-profile.js","./providers/./k-provider/ovp/services/base-entry-service.js","./providers/./k-provider/ovp/services/meta-data-service.js","./providers/./k-provider/ovp/response-types/kaltura-base-entry-list-response.js","./providers/./k-provider/ovp/loaders/media-entry-loader.js","./providers/./k-provider/ovp/services/session-service.js","./providers/./k-provider/ovp/loaders/session-loader.js","./providers/./k-provider/ovp/loaders/data-loader-manager.js","./providers/./k-provider/ovp/services/playlist-service.js","./providers/./k-provider/ovp/response-types/kaltura-playlist.js","./providers/./k-provider/ovp/response-types/kaltura-media-entries.js","./providers/./k-provider/ovp/loaders/playlist-loader.js","./providers/./k-provider/ovp/loaders/entry-list-loader.js","./providers/./k-provider/ovp/provider.js","./providers/./k-provider/ovp/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","getLogLevel","LogLevel","OFF","_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","DEBUG","JsLogger","INFO","TIME","WARN","setLogHandler","handler","messages","context","getLevel","setLogLevel","level","setLevel","defaultLevel","MediaEntry","metadata","Map","sources","MediaSources","type","Type","UNKNOWN","id","toJSON","duration","dvrStatus","status","poster","assetReferenceType","VOD","LIVE","IMAGE","AUDIO","RequestBuilder","headers","async","timeout","maxAttempts","serviceUrl","service","action","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","global","logHandler","Logger","VERSION","contextualLoggersByNameMap","scope","func","apply","arguments","merge","args","target","length","defineLogLevel","TRACE","ContextualLogger","defaultContext","filterLevel","log","info","newLevel","enabledFor","lvl","trace","invoke","debug","warn","time","label","timeEnd","msgArgs","L","globalLogger","setHandler","createDefaultHandler","options","formatter","unshift","timerStartTimeByLabelMap","invokeConsoleMethod","hdlr","Function","console","Array","slice","timerLabel","Date","getTime","useDefaults","MediaFormat","DASH","mimeType","pathExt","HLS","WVM","MP4","MP3","SupportedStreamFormat","isProgressiveSource","formatName","sourceFormat","ServiceResult","objectType","hasError","ServiceError","message","KalturaDrmPlaybackPluginData","drm","scheme","licenseURL","certificate","WIDEVINE_CENC","PLAYREADY_CENC","FAIRPLAY","progressive","dash","hls","source","mediaFormat","push","h","MediaSource","mimetype","bandwidth","width","height","drmData","isArray","DataLoaderManager","networkRetryConfig","_networkRetryConfig","loader","execution_loader","isValid","_loaders","set","startIndex","_multiRequest","requests","add","executionLoaderResponseMap","from","val","index","_loadersResponseMap","execute","then","_multiResponse","prepareData","success","err","loaderDataIndexes","results","MultiRequestBuilder","requestParams","serviceDef","stringify","FAILED_PARSING_REQUEST","doHttpRequest","multiRequestResult","MultiRequestResult","result","serviceResult","KalturaAccessControlMessage","Drm","licenseUrl","BaseProvider","playerVersion","_partnerId","partnerId","_widgetId","widgetId","_uiConfId","uiConfId","_isAnonymous","ks","_ks","_playerVersion","defaultWidgetId","mediaInfo","playlistInfo","entryListInfo","concat","clone","node","e","keys","EntryList","items","defaultConfig","cdnUrl","serviceParams","apiVersion","format","useApiCaptions","OVPConfiguration","clientConfig","KalturaPlaybackSource","deliveryProfileId","protocols","flavorIds","map","protocol","returnValue","KalturaRuleAction","DRM_POLICY","BLOCK","PREVIEW","LIMIT_FLAVORS","ADD_TO_STORAGE","LIMIT_DELIVERY_PROFILES","SERVE_FROM_REMOTE_SERVER","REQUEST_HOST_REGEX","LIMIT_THUMBNAIL_CAPTURE","KalturaAccessControlModifyRequestHostRegexAction","pattern","replacement","replacmenServerNodeId","KalturaFlavorAsset","flavorParamsId","fileExt","bitrate","frameRate","isOriginal","isWeb","containerFormat","videoCodecId","language","QUEUED","CONVERTING","READY","DELETED","NOT_APPLICABLE","TEMP","WAIT_FOR_CONVERT","IMPORTING","VALIDATING","EXPORTING","KalturaPlaybackContext","actions","flavorAssets","flavor","undefined","getBlockAction","find","KalturaMetadata","metadataProfileId","metadataProfileVersion","metadataObjectType","objectId","version","created","setUTCSeconds","createdAt","updated","updatedAt","xml","AD_CUE_POINT","ANNOTATION","CODE_CUE_POINT","THUMB_CUE_POINT","ENTRY","CATEGORY","USER","PARTNER","DYNAMIC_OBJECT","VALID","INVALID","KalturaMetadataListResponse","responseObj","totalCount","metas","objects","meta","KalturaMediaEntry","entry","referenceId","externalSourceType","description","dataUrl","entryType","mediaType","flavorParamsIds","thumbnailUrl","tags","AUTOMATIC","EXTERNAL_MEDIA","MEDIA_CLIP","MIX","PLAYLIST","DATA","LIVE_STREAM","LIVE_CHANNEL","DOCUMENT","VIDEO","LIVE_STREAM_FLASH","LIVE_STREAM_WINDOWS_MEDIA","LIVE_STREAM_REAL_MEDIA","LIVE_STREAM_QUICK_TIME","ERROR_IMPORTING","ERROR_CONVERTING","SCAN_FAILURE","IMPORT","INFECTED","PRECONVERT","PENDING","MODERATE","BLOCKED","NO_CONTENT","PENDING_MODERATION","APPROVED","REJECTED","FLAGGED_FOR_REVIEW","AUTO_APPROVED","PlaySourceUrlBuilder","urlParams","config","serviceUrlOrigin","substr","lastIndexOf","entryId","extension","playUrl","endsWith","XmlParser","obj","nodeType","attributes","j","attribute","item","nodeName","nodeValue","hasChildNodes","childNodes","xmlToJson","old","Playlist","KalturaCaptionType","SRT","DFXP","WEBVTT","CAP","CaptionsFormatsMap","ExternalCaptionsBuilder","captions","caption","includes","webVttUrl","default","isDefault","languageCode","OVPProviderParser","mediaEntryResponse","mediaEntry","playbackContext","playBackContextResult","metadataList","metadataListResult","kalturaSources","_getParsedSources","playbackCaptions","createConfig","_fillBaseData","playlistResponse","playlist","playlistData","playlistItems","entries","entryList","_parseMetadata","_getEntryType","entryTypeEnum","typeEnum","MediaType","EntryType","progressiveSource","mediaSource","addAdaptiveSource","parsedSource","_parseAdaptiveSource","getProtocol","_getBaseProtocol","_parseProgressiveSources","kalturaSource","hasFlavorIds","build","_applyRegexAction","hasDrmData","drmParams","Scheme","videoSources","audioSources","sourceId","metaXml","domParser","DOMParser","replace","parseFromString","metasObj","exec","document","location","hasBlockAction","getErrorMessages","regexAction","getRequestHostRegexAction","regex","RegExp","match","OVPService","ovpParams","clientTag","multiReq","getUrl","FIELDS","BaseEntryResponseProfile","responseProfile","INCLUDE_FIELDS","fields","EXCLUDE_FIELDS","OVPBaseEntryService","serviceEntryId","tag","contextDataParams","flavorTags","redirectFromEntryId","getEntryListReqParams","idEqual","OVPMetadataService","objectIdEqual","metadataObjectTypeEqual","KalturaBaseEntryListResponse","OVPMediaEntryLoader","buildRequests","_entryId","list","getPlaybackContext","_requests","_response","OVPSessionService","OVPSessionLoader","anonymousSession","OVPDataLoaderManager","getMultiRequest","OVPPlaylistService","playlistId","KalturaPlaylist","KalturaMediaEntries","OVPPlaylistLoader","_playlistId","OVPEntryListLoader","_entries","OVPProvider","env","_setFilterOptionsConfig","filterOptions","networkRetryParameters","_dataLoader","_getEntryRedirectFilter","fetchData","_parseDataFromResponse","_filterOptionsConfig","mediaConfig","session","isAnonymous","_getDefaultSourcesObject","plugins","has","sessionLoader","mediaLoader","getMediaEntry","_getSourcesObject","_verifyMediaStatus","_verifyHasSources","EntryStatus","_parsePlaylistDataFromResponse","playlistConfig","_getPlaylistObject","playlistLoader","getPlaylist","_parseEntryListDataFromResponse","getEntryList","dvr","vr","sourcesObject","mediaSources","NAME","__NAME__","__VERSION__"],"mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAa,IAAID,KAEjBD,EAAc,QAAIA,EAAc,SAAK,GAAIA,EAAc,QAAa,UAAIA,EAAc,QAAa,WAAK,GAAIA,EAAc,QAAa,UAAO,IAAIC,KARpJ,CASGK,QAAQ,WACX,O,YCTE,IAAIC,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUP,QAGnC,IAAIC,EAASI,EAAiBE,GAAY,CACzCC,EAAGD,EACHE,GAAG,EACHT,QAAS,IAUV,OANAU,EAAQH,GAAUI,KAAKV,EAAOD,QAASC,EAAQA,EAAOD,QAASM,GAG/DL,EAAOQ,GAAI,EAGJR,EAAOD,QA0Df,OArDAM,EAAoBM,EAAIF,EAGxBJ,EAAoBO,EAAIR,EAGxBC,EAAoBQ,EAAI,SAASd,EAASe,EAAMC,GAC3CV,EAAoBW,EAAEjB,EAASe,IAClCG,OAAOC,eAAenB,EAASe,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEV,EAAoBgB,EAAI,SAAStB,GACX,oBAAXuB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAenB,EAASuB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAenB,EAAS,aAAc,CAAEyB,OAAO,KAQvDnB,EAAoBoB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQnB,EAAoBmB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFAxB,EAAoBgB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOnB,EAAoBQ,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRvB,EAAoB2B,EAAI,SAAShC,GAChC,IAAIe,EAASf,GAAUA,EAAO2B,WAC7B,WAAwB,OAAO3B,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAK,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRV,EAAoBW,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG7B,EAAoBgC,EAAI,GAIjBhC,EAAoBA,EAAoBiC,EAAI,I,kSCzErD,IAKqBC,EA0BnB,WAAYC,EAAkBC,EAAkBC,GAA8B,IAAhBC,EAAgB,uDAAJ,GAAI,UAC5EC,KAAKJ,SAAWA,EAChBI,KAAKH,SAAWA,EAChBG,KAAKF,KAAOA,EACZE,KAAKD,KAAOA,EACRE,YApCmB,WAoCSC,IAASC,KACvCR,EAAMS,QAAQC,MAAd,mBAAgCR,EAAhC,mBAAmDC,EAAnD,MAA6DC,I,EAhC9CJ,E,WCVU,CAQ7BW,YAAa,EAMbC,SAAU,I,EDJSZ,E,WEXU,CAE7Ba,QAAS,EACTC,QAAS,EACTC,SAAU,I,EFOSf,E,OGVE,CAIrBgB,mBAAoB,IAKpBC,gBAAiB,KAKjBC,WAAY,KAKZC,QAAS,KAKTC,mBAAoB,KAKpBC,oBAAqB,KAKrBC,uBAAwB,KAKxBC,sBAAuB,KAKvBC,MAAO,IAKPC,aAAc,KAKdC,uBAAwB,KAMxBC,yBAA0B,IAK1BC,oBAAqB,KAKrBC,uBAAwB,O,EH5DL7B,E,UAiBG8B,YAtBG,W,6BIR3B,mJAKMvB,EAAyB,CAC7BwB,MAAOC,QACPC,KAAMD,OACNE,KAAMF,OACNG,KAAMH,OACNR,MAAOQ,QACPxB,IAAKwB,OAUP,SAASI,EAAcC,GACrBL,cAAoB,SAACM,EAAUC,GAAX,OAAuBF,EAAQC,EAAUC,MAO/D,SAAST,EAAUvD,GACjB,OAAKA,EAGEyD,MAAazD,GAFXyD,EAUX,SAAS1B,EAAY/B,GACnB,OAAOuD,EAAUvD,GAAMiE,WASzB,SAASC,EAAYC,EAAuBnE,GAC1CuD,EAAUvD,GAAMoE,SAASD,GAtC3BV,cAAqB,CAACY,aAAcZ,UAyCrBF,O,0PCrDMe,E,WAgEnB,c,4FAAc,SACZxC,KAAKyC,SAAW,IAAIC,IACpB1C,KAAK2C,QAAU,IAAIC,IACnB5C,KAAK6C,KAAOL,EAAWM,KAAKC,Q,wDAQ5B,MAAO,CACLC,GAAIhD,KAAKgD,GACT9E,KAAM8B,KAAK9B,KACXyE,QAAS3C,KAAK2C,QAAQM,SACtBC,SAAUlD,KAAKkD,SACfC,UAAWnD,KAAKmD,UAChBC,OAAQpD,KAAKoD,OACbX,SAAUzC,KAAKyC,SACfI,KAAM7C,KAAK6C,KACXQ,OAAQrD,KAAKqD,OACbC,mBAAoBtD,KAAKsD,yB,kCApFW,CACtCC,IAAK,MACLC,KAAM,OACNC,MAAO,QACPC,MAAO,QACPX,QAAS,Y,cANQP,G,6hBCArB,IAEqBmB,E,WAwEnB,aAAsD,IAA1CC,EAA0C,uDAAX,IAAIlB,IAAO,+BA1BR,CAC5CmB,OAAO,EACPC,QAAS,EACTC,YAAa,IAuBuC,yBAd5B,GAexB/D,KAAK4D,QAAUA,E,sDASVI,GACL,OAAOA,EAAa,YAAchE,KAAKiE,SAAWjE,KAAKkE,OAAS,WAAalE,KAAKkE,OAAS,M,sCAQ/D,WACtBC,EAAU,IAAIC,SAAQ,SAACC,EAASC,GACpC,EAAKC,gBAAkB,CACrBF,UACAC,aAWJ,OARKtE,KAAKwE,KACRxE,KAAKuE,gBAAgBD,OACnB,IAAI3E,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAASlE,QAASb,IAAMgF,KAAK5D,mBAAoB,CACxFyD,IAAKxE,KAAKwE,OAIhBxE,KAAK4E,aACET,I,mCAGU,WACbU,EAAU,IAAIC,eAClBD,EAAQE,mBAAqB,WAC3B,GAA2B,IAAvBF,EAAQG,YACa,MAAnBH,EAAQzB,OACV,IACE,IAAM6B,EAAWC,KAAKC,MAAMN,EAAQO,cAGpC,OAFA,EAAKC,gBAAkB,EAAKC,oBAAoBT,GAEzC,EAAKN,gBAAgBF,QAAQY,GACpC,MAAO5E,GACP,EAAKkE,gBAAgBD,OACnB,EAAKiB,aAAaV,EAASlF,IAAMgF,KAAK3D,oBAAqB,CACzDwE,KAAMX,EAAQO,kBAO1BP,EAAQY,KAAKzF,KAAK0F,OAAQ1F,KAAKwE,IAAKxE,KAAK2F,YAAY9B,OACjD7D,KAAK2F,YAAY9B,OAAS7D,KAAK2F,YAAY7B,UAC7Ce,EAAQf,QAAU9D,KAAK2F,YAAY7B,SAErC,IAAM8B,EAAcC,YAAYC,MAChCjB,EAAQkB,UAAY,WAClB,EAAKC,aAAanB,EAASlF,IAAMgF,KAAK7D,QAAS,CAC7CgD,SAAU+B,YAAYC,MAAQF,GAAe,IAC7CK,WAAYpB,EAAQoB,cAGxBpB,EAAQqB,QAAUrB,EAAQsB,QAAU,WAClC,EAAKH,aAAanB,EAASlF,IAAMgF,KAAK9D,WAAY,CAChD2E,KAAMX,EAAQO,aACda,WAAYpB,EAAQoB,cAGxBjG,KAAK4D,QAAQwC,SAAQ,SAACxH,EAAOM,GAC3B2F,EAAQwB,iBAAiBnH,EAAKN,MAEhCiG,EAAQyB,KAAKtG,KAAKuG,U,0CAGA1B,GAClB,OAAOA,EACJ2B,wBACAC,MAAM,MACNC,QAAO,SAAAC,GAAM,OAA4D,IAAxDA,EAAOC,cAAcC,QA9JP,W,mCAiKvBhC,EAAyB/E,EAAcC,GAClD,IAAMM,EAAQL,KAAKuF,aAAaV,EAAS/E,EAAMC,GAK/C,GAJA8E,EAAQE,mBAAqB,aAC7BF,EAAQqB,QAAU,aAClBrB,EAAQkB,UAAY,aACpBlB,EAAQsB,QAAU,eACdnG,KAAK2F,YAAY5B,aAAe/D,KAAK8G,gBAAkB9G,KAAK2F,YAAY5B,aAI1E,OAAO/D,KAAKuE,gBAAgBD,OAAOjE,GAHnCL,KAAK8G,kBACL9G,KAAK4E,e,mCAMIC,EAAyB/E,EAAcC,GAMlD,OALA1B,OAAO0I,OAAOhH,EAAM,CAClByE,IAAKxE,KAAKwE,IACVZ,QAAS5D,KAAKsF,oBAAoBT,GAClCmC,QAAShH,KAAK8G,kBAET,IAAInH,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAASlE,QAASV,EAAMC,Q,iDCxL5E;;;;;IAKC,SAAUkH,GACV,aAGA,IAMIC,EANAC,EAAS,GAGbA,EAAOC,QAAU,QAMjB,IAAIC,EAA6B,GAG7BlI,EAAO,SAASmI,EAAOC,GAC1B,OAAO,WACN,OAAOA,EAAKC,MAAMF,EAAOG,aAKvBC,EAAQ,WACX,IAAwCxI,EAAKvB,EAAzCgK,EAAOF,UAAWG,EAASD,EAAK,GACpC,IAAKhK,EAAI,EAAGA,EAAIgK,EAAKE,OAAQlK,IAC5B,IAAKuB,KAAOyI,EAAKhK,KACVuB,KAAO0I,IAAWD,EAAKhK,GAAG6B,eAAeN,KAC9C0I,EAAO1I,GAAOyI,EAAKhK,GAAGuB,IAIzB,OAAO0I,GAIJE,EAAiB,SAASlJ,EAAOV,GACpC,MAAO,CAAEU,MAAOA,EAAOV,KAAMA,IAI9BiJ,EAAOY,MAAQD,EAAe,EAAG,SACjCX,EAAOzF,MAAQoG,EAAe,EAAG,SACjCX,EAAOvF,KAAOkG,EAAe,EAAG,QAChCX,EAAOtF,KAAOiG,EAAe,EAAG,QAChCX,EAAOrF,KAAOgG,EAAe,EAAG,QAChCX,EAAOhG,MAAQ2G,EAAe,EAAG,SACjCX,EAAOhH,IAAM2H,EAAe,GAAI,OAIhC,IAAIE,EAAmB,SAASC,GAC/BjI,KAAKkC,QAAU+F,EACfjI,KAAKsC,SAAS2F,EAAeC,aAC7BlI,KAAKmI,IAAMnI,KAAKoI,MAGjBJ,EAAiBzI,UAAY,CAE5B+C,SAAU,SAAU+F,GAEfA,GAAY,UAAWA,IAC1BrI,KAAKkC,QAAQgG,YAAcG,IAK7BlG,SAAU,WACT,OAAOnC,KAAKkC,QAAQgG,aAIrBI,WAAY,SAAUC,GACrB,IAAIL,EAAclI,KAAKkC,QAAQgG,YAC/B,OAAOK,EAAI3J,OAASsJ,EAAYtJ,OAGjC4J,MAAO,WACNxI,KAAKyI,OAAOtB,EAAOY,MAAON,YAG3BiB,MAAO,WACN1I,KAAKyI,OAAOtB,EAAOzF,MAAO+F,YAG3BW,KAAM,WACLpI,KAAKyI,OAAOtB,EAAOvF,KAAM6F,YAG1BkB,KAAM,WACL3I,KAAKyI,OAAOtB,EAAOrF,KAAM2F,YAG1BpH,MAAO,WACNL,KAAKyI,OAAOtB,EAAOhG,MAAOsG,YAG3BmB,KAAM,SAAUC,GACM,iBAAVA,GAAsBA,EAAMhB,OAAS,GAC/C7H,KAAKyI,OAAOtB,EAAOtF,KAAM,CAAEgH,EAAO,WAIpCC,QAAS,SAAUD,GACG,iBAAVA,GAAsBA,EAAMhB,OAAS,GAC/C7H,KAAKyI,OAAOtB,EAAOtF,KAAM,CAAEgH,EAAO,SAKpCJ,OAAQ,SAAUpG,EAAO0G,GACpB7B,GAAclH,KAAKsI,WAAWjG,IACjC6E,EAAW6B,EAASrB,EAAM,CAAErF,MAAOA,GAASrC,KAAKkC,YAMpD,IAKK8G,EALDC,EAAe,IAAIjB,EAAiB,CAAEE,YAAaf,EAAOhH,OAKzD6I,EAAI7B,GAENmB,WAAanJ,EAAK8J,EAAcA,EAAaX,YAC/CU,EAAER,MAAQrJ,EAAK8J,EAAcA,EAAaT,OAC1CQ,EAAEN,MAAQvJ,EAAK8J,EAAcA,EAAaP,OAC1CM,EAAEJ,KAAOzJ,EAAK8J,EAAcA,EAAaL,MACzCI,EAAEF,QAAU3J,EAAK8J,EAAcA,EAAaH,SAC5CE,EAAEZ,KAAOjJ,EAAK8J,EAAcA,EAAab,MACzCY,EAAEL,KAAOxJ,EAAK8J,EAAcA,EAAaN,MACzCK,EAAE3I,MAAQlB,EAAK8J,EAAcA,EAAa5I,OAG1C2I,EAAEb,IAAMa,EAAEZ,KAMXjB,EAAO+B,WAAa,SAAU3B,GAC7BL,EAAaK,GAKdJ,EAAO7E,SAAW,SAASD,GAK1B,IAAK,IAAInD,KAHT+J,EAAa3G,SAASD,GAGNgF,EACXA,EAA2B7H,eAAeN,IAC7CmI,EAA2BnI,GAAKoD,SAASD,IAM5C8E,EAAOhF,SAAW,WACjB,OAAO8G,EAAa9G,YAKrBgF,EAAO3I,IAAM,SAAUN,GAEtB,OAAOmJ,EAA2BnJ,KAChCmJ,EAA2BnJ,GAAQ,IAAI8J,EAAiBN,EAAM,CAAExJ,KAAMA,GAAQ+K,EAAa/G,YAM9FiF,EAAOgC,qBAAuB,SAAUC,IACvCA,EAAUA,GAAW,IAEbC,UAAYD,EAAQC,WAAa,SAAiCpH,EAAUC,GAE/EA,EAAQhE,MACX+D,EAASqH,QAAQ,IAAMpH,EAAQhE,KAAO,MAMxC,IAAIqL,EAA2B,GAG3BC,EAAsB,SAAUC,EAAMxH,GACzCyH,SAASnK,UAAUiI,MAAM1J,KAAK2L,EAAME,QAAS1H,IAI9C,MAAuB,oBAAZ0H,QACH,aAGD,SAAS1H,EAAUC,GAEzBD,EAAW2H,MAAMrK,UAAUsK,MAAM/L,KAAKmE,GAEtC,IACI6H,EADAL,EAAOE,QAAQxB,IAGfjG,EAAQG,QAAU8E,EAAOtF,MAC5BiI,GAAc5H,EAAQhE,KAAO,IAAMgE,EAAQhE,KAAO,KAAO,IAAM+D,EAAS,GAEpD,UAAhBA,EAAS,GACR0H,QAAQf,KACXe,QAAQf,KAAKkB,GAGbP,EAAyBO,IAAc,IAAIC,MAAOC,UAI/CL,QAAQb,QACXa,QAAQb,QAAQgB,GAGhBN,EAAoBC,EAAM,CAAEK,EAAa,OACvC,IAAIC,MAAOC,UAAYT,EAAyBO,IAAe,SAM/D5H,EAAQG,QAAU8E,EAAOrF,MAAQ6H,QAAQhB,KAC5Cc,EAAOE,QAAQhB,KACLzG,EAAQG,QAAU8E,EAAOhG,OAASwI,QAAQtJ,MACpDoJ,EAAOE,QAAQtJ,MACL6B,EAAQG,QAAU8E,EAAOvF,MAAQ+H,QAAQvB,KACnDqB,EAAOE,QAAQvB,KACLlG,EAAQG,QAAU8E,EAAOzF,OAASiI,QAAQjB,MACpDe,EAAOE,QAAQjB,MACLxG,EAAQG,QAAU8E,EAAOY,OAAS4B,QAAQnB,QACpDiB,EAAOE,QAAQnB,OAGhBY,EAAQC,UAAUpH,EAAUC,GAC5BsH,EAAoBC,EAAMxH,MAO7BkF,EAAO8C,YAAc,SAASb,GAC7BjC,EAAO7E,SAAS8G,GAAWA,EAAQ7G,cAAgB4E,EAAOzF,OAC1DyF,EAAO+B,WAAW/B,EAAOgC,qBAAqBC,UAKjC,0BAAb,KAAa,kCAhQf,I,6BCJA,sGAAO,IAAMc,EAAyD,CACpEC,KAAM,CACJjM,KAAM,OACNkM,SAAU,uBACVC,QAAS,OAEXC,IAAK,CACHpM,KAAM,MACNkM,SAAU,wBACVC,QAAS,QAEXE,IAAK,CACHrM,KAAM,MACNkM,SAAU,YACVC,QAAS,OAEXG,IAAK,CACHtM,KAAM,MACNkM,SAAU,YACVC,QAAS,OAEXI,IAAK,CACHvM,KAAM,MACNkM,SAAU,aACVC,QAAS,QAIAK,EAA8D,IAAIhI,IAAI,CACjF,CAAC,WAAYwH,EAAYC,MACzB,CAAC,YAAaD,EAAYI,KAC1B,CAAC,MAAOJ,EAAYM,OAQtB,SAASG,EAAoBC,GAC3B,IAAMC,EAAeH,EAAsBlM,IAAIoM,GAC/C,QAASC,GAAgBA,EAAa3M,OAASgM,EAAYM,IAAItM,O,iKCzC5C4M,EAqBnB,WAAY7F,G,UAAkB,U,GAhBV,G,EAgBU,c,EAAA,M,sFACA,wBAAxBA,EAAS8F,YACX/K,KAAKgL,UAAW,EAChBhL,KAAKK,MAAQ,IAAI4K,EAAahG,EAASnF,KAAMmF,EAASiG,UAC7CjG,EAAS5E,OAAuC,wBAA9B4E,EAAS5E,MAAM0K,YAC1C/K,KAAKgL,UAAW,EAChBhL,KAAKK,MAAQ,IAAI4K,EAAahG,EAAS5E,MAAMP,KAAMmF,EAAS5E,MAAM6K,UAElElL,KAAKD,KAAOkF,GAKZgG,EAiBJ,WAAYnL,EAAcoL,GAAiB,UACzClL,KAAKF,KAAOA,EACZE,KAAKkL,QAAUA,I,yECrDEC,EAgCnB,WAAYC,I,4FAAU,SACpBpL,KAAKqL,OAASD,EAAIC,OAClBrL,KAAKsL,WAAaF,EAAIE,WACtBtL,KAAKuL,YAAcH,EAAIG,a,EAlCmB,CAC1C,qBAAsB,0BACtB,oBAAqB,qBACrB,oBAAqB,qBACrBC,cAAe,qBACfC,eAAgB,0BAChBC,SAAU,uB,gBAPOP,G,gVCGAvI,E,WAwBnB,c,4FAAc,SACZ5C,KAAK2L,YAAc,GACnB3L,KAAK4L,KAAO,GACZ5L,KAAK6L,IAAM,G,mDASTC,EAAqBC,GACvB,GAAIA,EACF,OAAQA,EAAY7N,MAClB,KAAKgM,IAAYM,IAAItM,KACnB8B,KAAK2L,YAAYK,KAAKF,GACtB,MACF,KAAK5B,IAAYC,KAAKjM,KACpB8B,KAAK4L,KAAKI,KAAKF,GACf,MACF,KAAK5B,IAAYI,IAAIpM,KACnB8B,KAAK6L,IAAIG,KAAKF,M,+BAapB,IAAM7G,EAAuC,CAC3C0G,YAAa,GACbC,KAAM,GACNC,IAAK,IAKP,OAHA7L,KAAK2L,YAAYvF,SAAQ,SAAA3G,GAAC,OAAIwF,EAAS0G,YAAYK,KAAKvM,EAAEwD,aAC1DjD,KAAK6L,IAAIzF,SAAQ,SAAA6F,GAAC,OAAIhH,EAAS4G,IAAIG,KAAKC,EAAEhJ,aAC1CjD,KAAK4L,KAAKxF,SAAQ,SAAAnI,GAAC,OAAIgH,EAAS2G,KAAKI,KAAK/N,EAAEgF,aACrCgC,O,gRCpEUiH,E,sLA+CjB,IAAMjH,EAAsC,CAC1CjC,GAAIhD,KAAKgD,GACTwB,IAAKxE,KAAKwE,IACV2H,SAAUnM,KAAKmM,UAcjB,OAZInM,KAAKoM,YAAWnH,EAASmH,UAAYpM,KAAKoM,WAC1CpM,KAAKqM,QAAOpH,EAASoH,MAAQrM,KAAKqM,OAClCrM,KAAKsM,SAAQrH,EAASqH,OAAStM,KAAKsM,QACpCtM,KAAK6I,QAAO5D,EAAS4D,MAAQ7I,KAAK6I,OAClC7I,KAAKuM,SAAWvM,KAAKuM,QAAQ1E,OAAS,IACxC5C,EAASsH,QAAU,GACnBvM,KAAKuM,QAAQnG,SAAQ,SAAAnI,GACf2L,MAAM4C,QAAQvH,EAASsH,UACzBtH,EAASsH,QAAQP,KAAK/N,EAAEgF,cAIvBgC,O,mZC/DUwH,E,WA4BnB,WAAYC,I,4FAAoD,sCAtBd,IAAIhK,KAsBU,kBAJ/B,IAAIA,KAKnC1C,KAAK2M,oBAAsBD,E,mDAUzBE,EAAkBrG,GAAsB,WACtCsG,EAAmB,IAAID,EAAOrG,GAClC,GAAIsG,EAAiBC,UAAW,CAC9B9M,KAAK+M,SAASC,IAAIJ,EAAO5J,GAAI6J,GAE7B,IAAII,EAAajN,KAAKkN,cAAcC,SAAStF,OAEzCsF,EAAWN,EAAiBM,SAChCnN,KAAKkN,cAAcvH,YAAc3F,KAAK2M,oBAEtCQ,EAAS/G,SAAQ,SAAAvB,GACf,EAAKqI,cAAcE,IAAIvI,MAGzB,IAAIwI,EAA6BzD,MAAM0D,KAAK,IAAI1D,MAAMuD,EAAStF,SAAS,SAAC0F,EAAKC,GAAN,OAAgBA,EAAQP,KAEhGjN,KAAKyN,oBAAoBT,IAAIJ,EAAO5J,GAAIqK,M,kCASlB,WACxB,OAAO,IAAIjJ,SAAQ,SAACC,EAASC,GAC3B,EAAK4I,cAAcQ,UAAUC,MAC3B,SAAA5N,GACE,EAAK6N,eAAiB7N,EAAKkF,SACA,EAAK4I,YAAY9N,EAAKkF,UAChC6I,QACfzJ,EAAQ,EAAK0I,UAEbzI,EACE,IAAI3E,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAASlE,QAASb,IAAMgF,KAAKzD,sBAAuB,CAC3F0C,QAAS7D,EAAK6D,cAKtB,SAAAmK,GACEzJ,EAAOyJ,W,kCAYH9I,GAAsC,WAWhD,OAVAjF,KAAK+M,SAAS3G,SAAQ,SAACwG,EAAQ1O,GAC7B,IAAI8P,EAAoB,EAAKP,oBAAoBjP,IAAIN,GACrD,IACM8P,GAAqBA,EAAkBnG,OAAS,IAClD+E,EAAO3H,SAAWA,EAASgJ,QAAQpE,MAAMmE,EAAkB,GAAIA,EAAkBA,EAAkBnG,OAAS,GAAK,IAEnH,MAAOkG,GACP,MAAO,CAACD,SAAS,EAAOzN,MAAO0N,OAG5B,CAACD,SAAS,EAAM/N,KAAMC,KAAK+M,e,siDCtGjBmB,E,qaAMe,I,2CAO9BrJ,GACF7E,KAAKmN,SAASnB,KAAKnH,GACnB,IAAMsJ,EAAgB,GAChBC,EAAqB,CAACnK,QAASY,EAAQZ,QAASC,OAAQW,EAAQX,QAItE,OAHA7F,OAAO0I,OAAOoH,EAAd,KAA+BnO,KAAKmN,SAAStF,OAASxJ,OAAO0I,OAAOqH,EAAYvJ,EAAQ0B,UACxFlI,OAAO0I,OAAOoH,EAAenO,KAAKuG,QAClCvG,KAAKuG,OAAS4H,EACPnO,O,gCAQkB,WACzB,OAAO,IAAIoE,SAAQ,SAACC,EAASC,GAC3B,IACE,EAAKiC,OAASrB,KAAKmJ,UAAU,EAAK9H,QAClC,MAAOwH,GACPG,EAAoB9N,QAAQC,MAA5B,UAAqC0N,EAAI7C,UACzC5G,EACE,IAAI3E,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAAShE,SAAUf,IAAMgF,KAAK2J,uBAAwB,CAC7FjO,MAAO0N,EACPxH,OAAQ,EAAKA,UAInB,EAAKgI,gBAAgBZ,MACnB,SAAA5N,GACE,IAAMyO,EAAqB,IAAIC,EAAmB1O,GAC9CyO,EAAmBV,QACrBzJ,EAAQ,CACNT,QAAS,EAAKyB,gBACdJ,SAAUuJ,IAGZlK,EACE,IAAI3E,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAASlE,QAASb,IAAMgF,KAAK1D,uBAAwB,CAC5FuD,IAAK,EAAKA,IACVZ,QAAS,EAAKyB,gBACd4I,QAASO,EAAmBP,cAKpC,SAAAF,GACEzJ,EAAOyJ,c,8BA5DgCpK,K,EAA5BuK,E,UACFzM,YAAU,wBAkEtB,IAAMgN,EAgBX,WAAYxJ,GAAkB,sCALE,IAM9BjF,KAAK8N,SAAU,GACK7I,EAASyJ,OAASzJ,EAASyJ,OAASzJ,GAC5CmB,SAAQ,SAAAsI,GAClB,IAAMC,EAA+B,IAAI7D,IAAc4D,GAEvD,GADA,EAAKT,QAAQjC,KAAK2C,GACdA,EAAc3D,SAKhB,OAJAyD,EAAmBrO,QAAQC,MAA3B,qDACgDsO,EAActO,MAAMP,KADpE,yBACyF6O,EAActO,MAAM6K,QAD7G,WAGA,EAAK4C,SAAU,O,EA1BVW,E,UACMhN,YAAU,wB,mECzERmN,EAgBnB,WAAY7O,I,4FAAc,SACxBC,KAAKkL,QAAUnL,EAAKmL,QACpBlL,KAAKF,KAAOC,EAAKD,O,yOClBA+O,E,WAwBnB,WAAYC,EAAoBzD,EAAgBE,I,4FAAsB,SACpEvL,KAAK8O,WAAaA,EAClB9O,KAAKqL,OAASA,EACVE,IACFvL,KAAKuL,YAAcA,G,wDASrB,IAAMtG,EAAkC,CACtC6J,WAAY9O,KAAK8O,WACjBzD,OAAQrL,KAAKqL,QAGf,OADIrL,KAAKuL,cAAatG,EAASsG,YAAcvL,KAAKuL,aAC3CtG,O,6VCtCU8J,E,WA+CnB,WAAY3F,EAAgC4F,G,uGAAuB,S,EAtCb,CACpDnL,OAAO,EACPC,QAAS,EACTC,YAAa,I,EAmCoD,yB,EAAA,M,sFACjE/D,KAAKiP,WAAa7F,EAAQ8F,UAC1BlP,KAAKmP,UAAY/F,EAAQgG,SACzBpP,KAAKqP,UAAYjG,EAAQkG,SACzBtP,KAAKuP,cAAgBnG,EAAQoG,GAC7BxP,KAAKyP,IAAMrG,EAAQoG,IAAM,GACzBxP,KAAK0P,eAAiBV,EAClB5F,EAAQjB,KAAOiB,EAAQjB,IAAI9F,OAASrC,KAAKE,SAASkJ,EAAQjB,IAAI9F,QAChED,YAAYpC,KAAKE,SAASkJ,EAAQjB,IAAI9F,QAEpC+G,EAAQjB,KAAsC,mBAAxBiB,EAAQjB,IAAInG,SACpCD,YAAcqH,EAAQjB,IAAInG,S,4CA1C5B,OAAOhC,KAAKiP,a,+BAIZ,OAAOjP,KAAKmP,WAAanP,KAAK2P,kB,sCAI9B,MAAO,IAAM3P,KAAKiP,a,+BAIlB,OAAOjP,KAAKqP,Y,yBAIZ,OAAOrP,KAAKyP,K,aAGP7Q,GACLoB,KAAKyP,IAAM7Q,I,oCAIX,OAAOoB,KAAK0P,iB,kCAIZ,OAAO1P,KAAKuP,iB,0CAmBCK,GACb,OAAOxL,QAAQE,OACb,IAAI3E,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAAShE,SAAUf,IAAMgF,KAAKnD,uBAAwB,CAC7F0J,QAAS,oE,wCAMG2E,GAChB,OAAOzL,QAAQE,OACb,IAAI3E,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAAShE,SAAUf,IAAMgF,KAAKnD,uBAAwB,CAC7F0J,QAAS,4D,yCAMI4E,GACjB,OAAO1L,QAAQE,OACb,IAAI3E,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAAShE,SAAUf,IAAMgF,KAAKnD,uBAAwB,CAC7F0J,QAAS,wD,wCAKGvI,GAChB,GAAqE,IAAjEA,EAAQkJ,IAAIkE,OAAOpN,EAAQiJ,KAAMjJ,EAAQgJ,aAAa9D,OACxD,MAAM,IAAIlI,IAAMA,IAAM8E,SAASlE,SAAUZ,IAAM+E,SAASjE,QAASd,IAAMgF,KAAKpD,oBAAqB,CAC/F2C,OAAQ,GACRjC,SAAU,gCAAF,OAAkCU,EAAQK,Q,kCAS5C9E,GACV,OAAO+B,YAAY/B,K,kCAGTmE,EAAenE,GACzBkE,YAAYC,EAAOnE,K,+BARnB,OAAOgC,Q,0SCxGX,IAAM8P,EAAQ,SAARA,EAAQjQ,GACZ,IAAIkQ,EAkBJ,OAjBIrG,MAAM4C,QAAQzM,IAChBkQ,EAAOlQ,EAAK8H,OAAS,EAAI9H,EAAK8J,MAAM,GAAK,IACpCzD,SAAQ,SAAC8J,EAAGvS,IACG,WAAb,EAAOuS,IAAkBA,IAAM,IAAQtG,MAAM4C,QAAQ0D,IAAMA,EAAErI,OAAS,KACzEoI,EAAKtS,GAAKqS,EAAME,OAGK,WAAhB,EAAOnQ,IAChBkQ,EAAO5R,OAAO0I,OAAO,GAAIhH,GACzB1B,OAAO8R,KAAKF,GAAM7J,SAAQ,SAAAlH,IACE,WAArB,EAAO+Q,EAAK/Q,KAAqB+Q,EAAK/Q,KAAS,IAAQ0K,MAAM4C,QAAQyD,EAAK/Q,KAAS+Q,EAAK/Q,GAAK2I,OAAS,KACzGoI,EAAK/Q,GAAO8Q,EAAMC,EAAK/Q,SAI3B+Q,EAAOlQ,EAEFkQ,I,wECfYG,EAOnB,c,4FAAc,SACZpQ,KAAKqQ,MAAQ,K,sVCTjB,IAAMC,EAAwB,CAC5BtM,WAAY,uCACZuM,OAAQ,gCACRC,cAAe,CACbC,WAAY,QACZC,OAAQ,GAEVC,gBAAgB,GAGGC,E,gLACRC,GACLA,GACFxS,OAAO0I,OAAOuJ,EAAeO,K,4BAK/B,OAAOb,YAAMM,O,yOChBIQ,E,WAoCnB,WAAYhF,GAAgB,I,MAAA,Q,4FAAA,S,EANe,I,EAMf,S,EAAA,M,sFAC1B9L,KAAK0Q,OAAS5E,EAAO4E,OACrB1Q,KAAK+Q,kBAAoBjF,EAAOiF,kBAChC/Q,KAAKwE,IAAMsH,EAAOtH,IAClBxE,KAAKgR,UAAYlF,EAAOkF,UACxBhR,KAAKiR,UAAYnF,EAAOmF,UACpBnF,EAAOV,KACTU,EAAOV,IAAI8F,KAAI,SAAA9F,GAAG,OAAI,EAAKA,IAAIY,KAAK,IAAIb,IAA6BC,O,4DAUvE,OAAOpL,KAAKoL,KAAOpL,KAAKoL,IAAIvD,OAAS,I,qCASrC,QAAS7H,KAAKiR,WAAajR,KAAKiR,UAAUpJ,OAAS,I,kCAQzCsJ,GACV,IAAIC,EAAsB,GAC1B,GAAIpR,KAAKgR,WAAahR,KAAKgR,UAAUnJ,OAAS,EACV7H,KAAKgR,UAAUvK,MAAM,KAC1CL,SAAQ,SAAA3G,GACfA,IAAM0R,IACRC,EAAc3R,WAGb,GAAiB,SAAb0R,EACT,OAAOA,EAET,OAAOC,O,0CCtFUC,EAuBnB,WAAYtR,I,4FAAc,SACxBC,KAAK6C,KAAO9C,EAAK8C,M,qiCAvB8B,CAC/CyO,WAAY,iBACZC,MAAO,EACPC,QAAS,EACTC,cAAe,EACfC,eAAgB,EAChBC,wBAAyB,EACzBC,yBAA0B,EAC1BC,mBAAoB,EACpBC,wBAAyB,I,cAVRT,G,0FCEAU,E,gQAqBnB,WAAYhS,GAAc,a,4FAAA,UACxB,cAAMA,IACDiS,QAAUjS,EAAKiS,QACpB,EAAKC,YAAclS,EAAKkS,YACxB,EAAKC,sBAAwBnS,EAAKmS,sBAJV,E,UArBkDb,G,ICFzDc,EA0FnB,WAAYpS,I,4FAAW,SACrBC,KAAKgD,GAAKjD,EAAKiD,GACfhD,KAAKoS,eAAiBrS,EAAKqS,eAC3BpS,KAAKqS,QAAUtS,EAAKsS,QACpBrS,KAAKsS,QAAUvS,EAAKuS,QACpBtS,KAAKqM,MAAQtM,EAAKsM,MAClBrM,KAAKsM,OAASvM,EAAKuM,OACnBtM,KAAKgD,GAAKjD,EAAKiD,GACfhD,KAAKuS,UAAYxS,EAAKwS,UACtBvS,KAAKwS,WAAazS,EAAKyS,WACvBxS,KAAKyS,MAAQ1S,EAAK0S,MAClBzS,KAAK0S,gBAAkB3S,EAAK2S,gBAC5B1S,KAAK2S,aAAe5S,EAAK4S,aACzB3S,KAAKoD,OAASrD,EAAKqD,OACnBpD,KAAK4S,SAAW7S,EAAK6S,SACrB5S,KAAK6I,MAAQ9I,EAAK8I,O,m7CAzGDsJ,E,SACyB,CAC1ChR,OAAQ,EACR0R,OAAQ,EACRC,WAAY,EACZC,MAAO,EACPC,QAAS,EACTC,eAAgB,EAChBC,KAAM,EACNC,iBAAkB,EAClBC,UAAW,EACXC,WAAY,EACZC,UAAW,I,ICLMC,E,sQA0BnB,WAAYtO,GAAkB,MAE5B,G,4FAF4B,aAC5B,cAAMA,IADsB,UArBU,IAqBV,iBAhBM,IAgBN,kBAXiB,IAWjB,sBANY,KAQnC,EAAK+F,SAAU,CAClB,IAAM/I,EAAWgD,EAAShD,SACtBA,GACFA,EAASiP,KAAI,SAAAhG,GAAO,OAAI,EAAKjJ,SAAS+J,KAAK,IAAI4C,IAA4B1D,OAE7E,IAAMsI,EAAUvO,EAASuO,QACrBA,GACFA,EAAQtC,KAAI,SAAAhN,GACNA,EAAOrB,OAASwO,EAAkBvO,KAAK+O,mBACzC,EAAK2B,QAAQxH,KAAK,IAAI+F,EAAiD7N,IAEvE,EAAKsP,QAAQxH,KAAK,IAAIqF,EAAkBnN,OAI9C,IAAMvB,EAAUsC,EAAStC,QACrBA,GACFA,EAAQuO,KAAI,SAAApF,GAAM,OAAI,EAAKnJ,QAAQqJ,KAAK,IAAI8E,EAAsBhF,OAEpE,IAAM2H,EAAexO,EAASwO,aAC1BA,GACFA,EAAavC,KAAI,SAAAwC,GAAM,OAAI,EAAKD,aAAazH,KAAK,IAAImG,EAAmBuB,OAvBjD,S,sDA6B5B,YAAiCC,IAA1B3T,KAAK4T,mB,uCAIZ,OAAO5T,KAAKwT,QAAQK,MAAK,SAAA3P,GAAM,OAAIA,EAAOrB,OAASwO,EAAkBvO,KAAKyO,W,yCAI1E,OAAOvR,KAAKiC,W,kDASZ,IAAMiC,EAASlE,KAAKwT,QAAQK,MAAK,SAAA3P,GAAM,OAAIA,EAAOrB,OAASwO,EAAkBvO,KAAK+O,sBAClF,GAAI3N,aAAkB6N,EACpB,OAAO7N,O,8BA1EuC4G,K,4HCP/BgJ,EAkCnB,WAAY/T,I,4FAAc,SACxBC,KAAKgD,GAAKjD,EAAKiD,GACfhD,KAAK+T,kBAAoBhU,EAAKgU,kBAC9B/T,KAAKgU,uBAAyBjU,EAAKiU,uBACnChU,KAAK+T,kBAAoBhU,EAAKgU,kBAC9B/T,KAAKiU,mBAAqBlU,EAAKkU,mBAC/BjU,KAAKkU,SAAWnU,EAAKmU,SACrBlU,KAAKmU,QAAUpU,EAAKoU,QACpBnU,KAAKoU,QAAU,IAAIrK,KAAK,GACxB/J,KAAKoU,QAAQC,cAActU,EAAKuU,WAChCtU,KAAKuU,QAAU,IAAIxK,KAAK,GACxB/J,KAAKuU,QAAQF,cAActU,EAAKyU,WAChCxU,KAAKoD,OAASrD,EAAKqD,OACnBpD,KAAKyU,IAAM1U,EAAK0U,K,qiCA/CCX,E,aACoC,CACrDY,aAAc,gCACdC,WAAY,gCACZC,eAAgB,oCAChBC,gBAAiB,sCACjBC,MAAO,EACPC,SAAU,EACVC,KAAM,EACNC,QAAS,EACTC,eAAgB,I,EAVCpB,E,SAayB,CAC1CqB,MAAO,EACPC,QAAS,EACTpC,QAAS,I,ICbQqC,E,gQAQnB,WAAYC,GAAqB,a,4FAAA,UAC/B,cAAMA,IACItK,WACR,EAAKuK,WAAaD,EAAYC,WAC1B,EAAKA,WAAa,IACpB,EAAKC,MAAQ,GACbF,EAAYG,QAAQvE,KAAI,SAAAwE,GAAI,OAAI,EAAKF,MAAMxJ,KAAK,IAAI8H,EAAgB4B,SANzC,E,UARsB5K,K,4HCHpC6K,EA2HnB,WAAYC,I,4FAAe,SACzB5V,KAAKgD,GAAK4S,EAAM5S,GAChBhD,KAAK6V,YAAcD,EAAMC,YACzB7V,KAAK8V,mBAAqBF,EAAME,mBAChC9V,KAAK9B,KAAO0X,EAAM1X,KAClB8B,KAAK+V,YAAcH,EAAMG,YACzB/V,KAAKgW,QAAUJ,EAAMI,QACrBhW,KAAK6C,KAAO+S,EAAM/S,KAClB7C,KAAKiW,UAAYL,EAAMM,UACvBlW,KAAKmW,gBAAkBP,EAAMO,gBAC7BnW,KAAKkD,SAAW0S,EAAM1S,SACtBlD,KAAKqD,OAASuS,EAAMQ,aACpBpW,KAAKoD,OAASwS,EAAMxS,OACpBpD,KAAKmD,UAAYyS,EAAMzS,UACvBnD,KAAKqW,KAAOT,EAAMS,M,wKAzIDV,E,YACiD,CAClEW,UAAW,CAAC1X,OAAQ,GACpB2X,eAAgB,CAAC3X,MAAO,+BACxB4X,WAAY,CAAC5X,MAAO,GACpB6X,IAAK,CAAC7X,MAAO,GACb8X,SAAU,CAAC9X,MAAO,GAClB+X,KAAM,CAAC/X,MAAO,GACdgY,YAAa,CAAChY,MAAO,GACrBiY,aAAc,CAACjY,MAAO,GACtBkY,SAAU,CAAClY,MAAO,M,EAVD+W,E,YAawC,CACzDoB,MAAO,CAACnY,MAAO,GACf6E,MAAO,CAAC7E,MAAO,GACf8E,MAAO,CAAC9E,MAAO,GACfoY,kBAAmB,CAACpY,MAAO,KAC3BqY,0BAA2B,CAACrY,MAAO,KACnCsY,uBAAwB,CAACtY,MAAO,KAChCuY,uBAAwB,CAACvY,MAAO,O,EApBf+W,E,cAuBuC,CACxDyB,iBAAkB,EAClBC,kBAAmB,EACnBC,aAAc,wBACdC,OAAQ,EACRC,SAAU,qBACVC,WAAY,EACZ1E,MAAO,EACPC,QAAS,EACT0E,QAAS,EACTC,SAAU,EACVC,QAAS,EACTC,WAAY,I,EAnCKlC,E,wBAsCwC,CACzDmC,mBAAoB,EACpBC,SAAU,EACVC,SAAU,EACVC,mBAAoB,EACpBN,SAAU,EACVO,cAAe,I,IC/BEC,E,kLAQNC,GACX,IAAMC,EAASzH,EAAiBpS,MAC1B8Z,EAA2BD,EAAOrU,WAAWuU,OAAO,EAAGF,EAAOrU,WAAWwU,YAAY,MACpFtJ,EAA4EkJ,EAA5ElJ,UAAWuJ,EAAiEL,EAAjEK,QAASjJ,EAAwD4I,EAAxD5I,GAAIF,EAAoD8I,EAApD9I,SAAUoB,EAA0C0H,EAA1C1H,OAAQS,EAAkCiH,EAAlCjH,SAAUuH,EAAwBN,EAAxBM,UAAWzH,EAAamH,EAAbnH,UAGtE,KAAKqH,GAAqBpJ,GAAcuJ,GAAY/H,GAAWS,GAC7D,MAAO,GAGT,IAAIwH,EAAUL,EAwBd,OAvBKA,EAAiBM,SAAS,OAC7BD,GAAW,KAEbA,GAAW,KAAOzJ,EAAY,OAASA,EAA5B,2BAA0EuJ,EAAU,aAAetH,EAAW,WAAaT,EAElIO,EACF0H,GAAW,cAAgB1H,EAClB3B,IACTqJ,GAAW,aAAerJ,GAGjB,KAAPE,IACFmJ,GAAW,OAASnJ,GAGJ,KAAdkJ,IACFC,GAAW,MAAQD,GAGjBpJ,GAA0B,KAAd2B,IACd0H,GAAW,aAAerJ,GAGrBqJ,M,mNCvDUE,E,sLAOFpE,GACf,IAAIqE,EAAM,GACV,GAAqB,IAAjBrE,EAAIsE,UACN,GAAItE,EAAIuE,WAAWnR,OAAS,EAAG,CAC7BiR,EAAI,eAAiB,GACrB,IAAK,IAAIG,EAAI,EAAGA,EAAIxE,EAAIuE,WAAWnR,OAAQoR,IAAK,CAC9C,IAAIC,EAAYzE,EAAIuE,WAAWG,KAAKF,GACpCH,EAAI,eAAeI,EAAUE,UAAYF,EAAUG,iBAG7B,IAAjB5E,EAAIsE,WACbD,EAAMrE,EAAI4E,WAEZ,GAAI5E,EAAI6E,gBACN,IAAK,IAAI3b,EAAI,EAAGA,EAAI8W,EAAI8E,WAAW1R,OAAQlK,IAAK,CAC9C,IAAIwb,EAAO1E,EAAI8E,WAAWJ,KAAKxb,GAC3Byb,EAAWD,EAAKC,SACpB,QAA6B,IAAlBN,EAAIM,GACbN,EAAIM,GAAYpZ,KAAKwZ,UAAUL,OAC1B,CACL,QAAkC,IAAvBL,EAAIM,GAAUpN,KAAsB,CAC7C,IAAIyN,EAAMX,EAAIM,GACdN,EAAIM,GAAY,GAChBN,EAAIM,GAAUpN,KAAKyN,GAErBX,EAAIM,GAAUpN,KAAKhM,KAAKwZ,UAAUL,KAIxC,OAAOL,M,iFCjCUY,EA6BnB,c,4FAAc,SACZ1Z,KAAKqQ,MAAQ,I,+KChCjB,IAAMsJ,GAAkC,CACtCC,IAAK,IACLC,KAAM,IACNC,OAAQ,IACRC,IAAK,KAGDC,GAAiD,CACrD,EAAK,MACL,EAAK,OAGDC,G,yLACgBC,GAClB,OAAOA,EAAShJ,KAAI,SAAAiJ,GAClB,IAAI3V,EAAM2V,EAAQ3V,IACd3B,EAAOmX,GAAmBG,EAAQzJ,QAKtC,MAJI,CAACiJ,GAAmBE,KAAMF,GAAmBI,KAAKK,SAASD,EAAQzJ,UACrElM,EAAM2V,EAAQE,UACdxX,EAAOmX,GAAmBL,GAAmBG,SAExC,CACLQ,UAAWH,EAAQI,UACnB1X,KAAMA,EACN+P,SAAUuH,EAAQK,aAClB3R,MAAOsR,EAAQtR,MACfrE,IAAKA,U,sNCNQiW,G,0LAcEjL,EAAYN,EAAmBI,EAAmBoL,GACrE,IAAMC,EAAa,IAAInY,IACjBoT,EAAQ8E,EAAmB9E,MAC3BgF,EAAkBF,EAAmBG,sBACrCC,EAAeJ,EAAmBK,mBAClCC,EAAiBJ,EAAgBjY,QAOvC,OALAgY,EAAWhY,QAAU8X,EAAkBQ,kBAAkBD,EAAgBxL,EAAIN,EAAWI,EAAUsG,EAAOgF,GACrGhK,EAAiBpS,MAAMmS,gBAAkBiK,EAAgB7a,KAAKmb,mBAChEP,EAAWhY,QAAQuX,SAAWD,GAAwBkB,aAAaP,EAAgB7a,KAAKmb,mBAE1FT,EAAkBW,cAAcT,EAAY/E,EAAOkF,GAC5CH,I,kCAWUU,GACjB,IAAMC,EAAW,IAAI5B,EACf6B,EAAeF,EAAiBE,aAChCC,EAAgBH,EAAiBG,cAAcC,QAUrD,OATAH,EAAStY,GAAKuY,EAAavY,GAC3BsY,EAASpd,KAAOqd,EAAard,KAC7Bod,EAASvF,YAAcwF,EAAaxF,YACpCuF,EAASjY,OAASkY,EAAalY,OAC/BmY,EAAcpV,SAAQ,SAACwP,GACrB,IAAM+E,EAAa,IAAInY,IACvBiY,EAAkBW,cAAcT,EAAY/E,GAC5C0F,EAASjL,MAAMrE,KAAK2O,MAEfW,I,mCAWWD,GAClB,IAAMK,EAAY,IAAItL,IAOtB,OANsBiL,EAAiBG,cAAcC,QACvCrV,SAAQ,SAAAwP,GACpB,IAAM+E,EAAa,IAAInY,IACvBiY,EAAkBW,cAAcT,EAAY/E,GAC5C8F,EAAUrL,MAAMrE,KAAK2O,MAEhBe,I,oCAGYf,EAAwB/E,EAA0BkF,GAerE,OAdAH,EAAWtX,OAASuS,EAAMvS,OAC1BsX,EAAW3X,GAAK4S,EAAM5S,GACtB2X,EAAWzX,SAAW0S,EAAM1S,SAC5ByX,EAAWlY,SAAWgY,EAAkBkB,eAAeb,GACvDH,EAAWlY,SAASsT,YAAcH,EAAMG,aAAe,GACvD4E,EAAWlY,SAASvE,KAAO0X,EAAM1X,MAAQ,GACzCyc,EAAWlY,SAAS4T,KAAOT,EAAMS,MAAQ,GACzCsE,EAAWvX,OAASwS,EAAMxS,OAE1BuX,EAAW9X,KAAO4X,EAAkBmB,cAAchG,EAAMK,UAAWL,EAAM/S,MACrE8X,EAAW9X,OAASL,IAAWM,KAAKU,OACtCmX,EAAWxX,UAAYyS,EAAMzS,WAGxBwX,I,oCAGYkB,EAAuBC,GAC1C,IAAIjZ,EAAOL,IAAWM,KAAKC,QAC3B,OAAQ8Y,GACN,KAAKlG,EAAkBoG,UAAUtY,MAAM7E,MACrCiE,EAAOL,IAAWM,KAAKW,MACvB,MACF,KAAKkS,EAAkBoG,UAAUrY,MAAM9E,MACrCiE,EAAOL,IAAWM,KAAKY,MACvB,MACF,QACE,OAAQoY,GACN,KAAKnG,EAAkBqG,UAAUxF,WAAW5X,MAC1CiE,EAAOL,IAAWM,KAAKS,IACvB,MACF,KAAKoS,EAAkBqG,UAAUpF,YAAYhY,MAC7C,KAAK+W,EAAkBqG,UAAUnF,aAAajY,MAC5CiE,EAAOL,IAAWM,KAAKU,KACvB,MACF,QACEX,EAAOL,IAAWM,KAAKC,SAG/B,OAAOF,I,wCAiBPmY,EACAxL,EACAN,EACAI,EACAsG,EACAgF,GAEA,IAYQqB,EAQAC,EApBFvZ,EAAU,IAAIC,IACduZ,EAAoB,SAACrQ,GACzB,IAAMsQ,EAAe3B,EAAkB4B,qBAAqBvQ,EAAQ8O,EAAiBpL,EAAIN,EAAWI,EAAUsG,EAAM5S,IACpH,GAAIoZ,EAAc,CAChB,IAAMvR,EAAeH,IAAsBlM,IAAIsN,EAAO4E,QACtD/N,EAAQuO,IAAIkL,EAAcvR,KA4B9B,OANI+K,EAAM/S,OAAS8S,EAAkBqG,UAAUzF,eAAe3X,QAPtDsd,EAAc,IAAIhQ,KACZC,SAAW,gBACvB+P,EAAY1X,IAAMoR,EAAMC,YACxBqG,EAAYlZ,GAAK4S,EAAM5S,GAAK,WAC5BL,EAAQgJ,YAAYK,KAAKkQ,IAKhBlB,GAAkBA,EAAenT,OAAS,IApBnDmT,EAAetU,QAAO,SAAAoF,GAAM,OAAKnB,YAAoBmB,EAAO4E,WAAStK,QAAQ+V,GAGvEF,EAAoBjB,EAAenH,MAAK,SAAA/H,GAE5C,OAAOnB,YAAoBmB,EAAO4E,SAAwE,KAA7D5E,EAAOwQ,YAAY7B,EAAkB8B,uBAEpF5Z,EAAQgJ,YAAc8O,EAAkB+B,yBAAyBP,EAAmBrB,EAAiBpL,EAAIN,EAAWI,EAAUsG,EAAM5S,KAiB/HL,I,2CAiBP8Z,EACA7B,EACApL,EACAN,EACAI,EACAmJ,GAEA,IAAMyD,EAA2B,IAAIhQ,IACrC,GAAIuQ,EAAe,CACjB,IAAI9D,EAAkB,GAChB5M,EAAcrB,IAAsBlM,IAAIie,EAAc/L,QACtDS,EAAWsL,EAAcH,YAAY7B,EAAkB8B,oBACvDxL,EAAoB0L,EAAc1L,kBAClCL,EAAS+L,EAAc/L,OACzBgI,EAAoB,GAuBxB,GAtBI3M,IACF2M,EAAY3M,EAAY1B,QACxB6R,EAAY/P,SAAWJ,EAAY3B,UAGjCqS,EAAcC,iBACXhE,GAAakC,EAAgBnH,cAAgBmH,EAAgBnH,aAAa5L,OAAS,IACtF6Q,EAAYkC,EAAgBnH,aAAa,GAAGpB,SAE9CsG,EAAUR,EAAqBwE,MAAM,CACnClE,UACAxH,UAAWwL,EAAcxL,UACzBP,SACAlB,KACAN,YACAI,WACAoJ,YACAvH,cAGFwH,EAAU8D,EAAcjY,KAErBmU,EAAS,CACZ,IAAMzN,EAAU,8DAAH,OAAiEuN,EAAjE,YAA4E1H,EAA5E,cAAmGL,GAEhH,OADA+J,EAAkBra,QAAQuI,KAAKuC,GACxB,KAIT,GAFAgR,EAAY1X,IAAMiW,EAAkBmC,kBAAkBhC,EAAiBjC,GACvEuD,EAAYlZ,GAAKyV,EAAU,IAAM1H,EAAoB,IAAML,EACvD+L,EAAcI,aAAc,CAC9B,IAAMC,EAAwB,GAC9BL,EAAcrR,IAAIhF,SAAQ,SAAAgF,GACxB0R,EAAU9Q,KAAK,IAAI6C,IAAIzD,EAAIE,WAAYH,IAA6B4R,OAAO3R,EAAIC,QAASD,EAAIG,iBAE9F2Q,EAAY3P,QAAUuQ,GAG1B,OAAOZ,I,+CAiBPO,EACA7B,EACApL,EACAN,EACAI,EACAmJ,GAEA,IAAMuE,EAAmC,GACnCC,EAAmC,GACzC,GAAIR,EAAe,CACjB,IAAMtL,EAAWsL,EAAcH,YAAY7B,EAAkB8B,oBACvD7L,EAAS+L,EAAc/L,OACvBK,EAAoB0L,EAAc1L,kBAClCmM,EAAWnM,EAAoB,IAAML,EAC3CkK,EAAgBnH,aAAavC,KAAI,SAAAwC,GAC/B,IAAMwI,EAA2B,IAAIhQ,IACrCgQ,EAAYlZ,GAAK0Q,EAAO1Q,GAAKka,EAC7BhB,EAAY/P,SAA8B,QAAnBuH,EAAOrB,QAAoB,YAAc,YAChE6J,EAAY5P,OAASoH,EAAOpH,OAC5B4P,EAAY7P,MAAQqH,EAAOrH,MAC3B6P,EAAY9P,UAA6B,KAAjBsH,EAAOpB,QAC/B4J,EAAYrT,MAAQ6K,EAAO7K,OAAS6K,EAAOd,SAC3C,IAAM+F,EAAUR,EAAqBwE,MAAM,CACzClE,UACAxH,UAAWyC,EAAO1Q,GAClB0N,SACAlB,KACAN,UAAWA,EACXI,SAAUA,EACVoJ,UAAWhF,EAAOrB,QAClBlB,aAEF,GAAgB,KAAZwH,EAEF,OADA8B,EAAkBra,QAAQuI,KAA1B,qEAA6F8P,EAA7F,YAAwG1H,EAAxG,cAA+HL,EAA/H,MACO,KAEPwL,EAAY1X,IAAMiW,EAAkBmC,kBAAkBhC,EAAiBjC,GACnEjF,EAAOpH,QAAUoH,EAAOrH,MAC1B2Q,EAAahR,KAAKkQ,GAElBe,EAAajR,KAAKkQ,MAM1B,OAAOe,EAAapV,SAAWmV,EAAanV,OAASoV,EAAeD,I,qCAWhDlC,GACpB,IAAMrY,EAAW,GAgBjB,OAfIqY,GAAgBA,EAAatF,OAASsF,EAAatF,MAAM3N,OAAS,GACpEiT,EAAatF,MAAMpP,SAAQ,SAAAsP,GACzB,IAAIyH,EACEC,EAAuB,IAAIC,UACjC3H,EAAKjB,IAAMiB,EAAKjB,IAAI6I,QAAQ,YAAa,IACzC5H,EAAKjB,IAAMiB,EAAKjB,IAAI6I,QAAQ,QAAS,KACrC5H,EAAKjB,IAAMiB,EAAKjB,IAAI6I,QAAQ,QAAS,KACrCH,EAAUC,EAAUG,gBAAgB7H,EAAKjB,IAAK,YAC9C,IAAM+I,EAAmB3E,EAAUW,UAAU2D,GAC5B9e,OAAO8R,KAAKqN,EAAS/a,UAC7B2D,SAAQ,SAAAlH,GACfuD,EAASvD,GAAOse,EAAS/a,SAASvD,GAAK,eAItCuD,I,yCAWP,IAAM4V,EAASzH,EAAiBpS,MAE1BkQ,EADgB,WACO+O,KAAKpF,EAAO9H,QACnCY,EAAWzC,EAASA,EAAO,GAAKgP,SAASC,SAASxM,SACxD,MAAwB,iBAAbA,EACFA,EAAStH,MAAM,GAAI,GAErB,U,qCAGa5E,GACpB,OAAOA,EAAS4V,sBAAsB+C,mB,qCAGlB3Y,GACpB,OAAOA,EAAS4V,sBAAsBjH,mB,uCAGhB3O,GACtB,OAAOA,EAAS4V,sBAAsBgD,qB,wCAYfjD,EAAyCjC,GAChE,IAAMmF,EAAclD,EAAgBmD,4BACpC,GAAID,EAAa,CACf,IAAME,EAAQ,IAAIC,OAAOH,EAAY9L,QAAS,KAC9C,GAAI2G,EAAQuF,MAAMF,GAChB,OAAOrF,EAAQ2E,QAAQU,EAAOF,EAAY7L,YAAc,KAG5D,OAAO0G,M,0JA3XU8B,G,UACFhZ,YAAU,sB,4LCnB7B,IAEqB0c,G,4LAUInP,EAAuBQ,EAAYN,GACxD,IAAMmJ,EAASzH,EAAiBpS,MAC1B4f,EAAY/F,EAAO7H,cACzBnS,OAAO0I,OAAOqX,EAAW,CAAC5O,GAAIA,EAAI6O,UAAW,UAAYrP,IACrDE,GACF7Q,OAAO0I,OAAOqX,EAAW,CAAClP,UAAWA,IAEvC,IAAMtL,EAA+B,IAAIlB,IACzCkB,EAAQoJ,IAAI,eAAgB,oBAC5B,IAAMsR,EAAW,IAAIpQ,KAAoBtK,GAKzC,OAJA0a,EAAS5Y,OAAS,OAClB4Y,EAASra,QAvBgB,eAwBzBqa,EAAS9Z,IAAM8Z,EAASC,OAAOlG,EAAOrU,YACtCsa,EAAS/X,OAAS6X,EACXE,M,0IC7BX,IAAME,GACJ,mJAEmBC,GAoBnB,aAA0C,IAA9BC,EAA8B,uDAAJ,GAAI,WACxC1e,KAAK6C,KAAO6b,EAAgB7b,MAAQ4b,EAAyB3b,KAAK6b,eAClE3e,KAAK4e,OAASF,EAAgBE,QAAUJ,I,o6CAtBvBC,G,OACqB,CACtCE,eAAgB,EAChBE,eAAgB,ICFpB,IAEqBC,G,sXASO9a,EAAoBwL,GAC5C,IAAM5L,EAA+B,IAAIlB,IACnCqc,EAAwB,kBAAPvP,EAAyB,0BAA4B,0BAC5E5L,EAAQoJ,IAAI,eAAgB,oBAC5B,IAAMnI,EAAU,IAAIlB,KAAeC,GAQnC,OAPAiB,EAAQZ,QAhBiB,YAiBzBY,EAAQX,OAAS,qBACjBW,EAAQa,OAAS,OACjBb,EAAQL,IAAMK,EAAQ0Z,OAAOva,GAC7Ba,EAAQma,IAAM,+BAEdna,EAAQ0B,OAAS,CAACkS,QAASsG,EAAgBvP,GAAIA,EAAIyP,kBADzB,CAAClU,WAAY,2BAA4BmU,WAAY,QAExEra,I,2BAaGb,EAAoBwL,EAAYiJ,EAAiB0G,GAC3D,IAAMvb,EAA+B,IAAIlB,IACzCkB,EAAQoJ,IAAI,eAAgB,oBAC5B,IAAMnI,EAAU,IAAIlB,KAAeC,GAOnC,OANAiB,EAAQZ,QAxCiB,YAyCzBY,EAAQX,OAAS,OACjBW,EAAQa,OAAS,OACjBb,EAAQL,IAAMK,EAAQ0Z,OAAOva,GAC7Ba,EAAQma,IAAM,OACdna,EAAQ0B,OAASuY,EAAoBM,sBAAsB3G,EAASjJ,EAAI2P,GACjEta,I,4CAYoB4T,EAAiBjJ,EAAY2P,GAExD,MAAO,CAAC3P,GAAIA,EAAI9I,OADKyY,EAAsB,CAACA,oBAAqB1G,GAAW,CAAC4G,QAAS5G,GAChDiG,gBAAiB,IAAID,Q,yCA1DdN,I,qzCCHjD,IAEqBmB,G,wWAUPtb,EAAoBwL,EAAYiJ,GAC1C,IAAM7U,EAA+B,IAAIlB,IACzCkB,EAAQoJ,IAAI,eAAgB,oBAC5B,IAAMnI,EAAU,IAAIlB,KAAeC,GACnCiB,EAAQZ,QAhBiB,oBAiBzBY,EAAQX,OAAS,OACjBW,EAAQa,OAAS,OACjBb,EAAQL,IAAMK,EAAQ0Z,OAAOva,GAC7Ba,EAAQma,IAAM,yBACd,IAAMtY,EAAS,CAACqE,WAAY,wBAAyBwU,cAAe9G,EAAS+G,wBAAyB,KAEtG,OADA3a,EAAQ0B,OAAS,CAACG,OAAQA,EAAQ8I,GAAIA,GAC/B3K,M,yCArBqCsZ,I,mjCCF3BsB,G,kQAgBnB,WAAYnK,GAAqB,a,4FAAA,UAC/B,cAAMA,IACItK,WACR,EAAKuK,WAAaD,EAAYC,WAC1B,EAAKA,WAAa,IACpB,EAAKkG,QAAU,GACfnG,EAAYG,QAAQvE,KAAI,SAAA0E,GAAK,OAAI,EAAK6F,QAAQzP,KAAK,IAAI2J,EAAkBC,SAN9C,E,UAhBuB9K,K,uOCarC4U,G,WAcnB,WAAYnZ,I,4FAAgB,S,6GAAA,kBAXX,IAYfvG,KAAKmN,SAAWnN,KAAK2f,cAAcpZ,GACnCvG,KAAK4f,SAAWrZ,EAAOkS,Q,2CAVvB,MAAO,Y,0CAuCKlS,GACZ,IAAM8R,EAASzH,EAAiBpS,MAC1B2O,EAAkC,GAIxC,OAHAA,EAASnB,KAAK8S,GAAoBe,KAAKxH,EAAOrU,WAAYuC,EAAOiJ,GAAIjJ,EAAOkS,QAASlS,EAAO4Y,sBAC5FhS,EAASnB,KAAK8S,GAAoBgB,mBAAmBzH,EAAOrU,WAAYuC,EAAOiJ,KAC/ErC,EAASnB,KAAKsT,GAAmBO,KAAKxH,EAAOrU,WAAYuC,EAAOiJ,GAAIjJ,EAAOkS,UACpEtL,I,gCASP,QAASnN,KAAK4f,W,6BAzCHzS,GACXnN,KAAK+f,UAAY5S,G,eAIjB,OAAOnN,KAAK+f,Y,6BAGD9a,GACX,IAAIyV,EAAmD,IAAI+E,GAA6Bxa,EAAS,GAAGlF,MACpGC,KAAKggB,UAAUpK,MAAQ8E,EAAmBe,QAAQ,GAClDzb,KAAKggB,UAAUnF,sBAAwB,IAAItH,EAAuBtO,EAAS,GAAGlF,MAC9EC,KAAKggB,UAAUjF,mBAAqB,IAAI1F,EAA4BpQ,EAAS,GAAGlF,O,eAIhF,OAAOC,KAAKggB,c,0zCChDhB,IAEqBC,G,oXASKjc,EAAoBoL,GAC1C,IAAMxL,EAA+B,IAAIlB,IACzCkB,EAAQoJ,IAAI,eAAgB,oBAC5B,IAAMnI,EAAU,IAAIlB,KAAeC,GAOnC,OANAiB,EAAQZ,QAfiB,UAgBzBY,EAAQX,OAAS,qBACjBW,EAAQa,OAAS,OACjBb,EAAQL,IAAMK,EAAQ0Z,OAAOva,GAC7Ba,EAAQma,IAAM,sBACdna,EAAQ0B,OAAS,CAAC6I,YACXvK,M,yCAnBoCsZ,I,uOCD1B+B,G,WA6BnB,WAAY3Z,I,4FAAgB,S,6GAAA,kBA1BX,IA2BfvG,KAAKmN,SAAWnN,KAAK2f,cAAcpZ,GACnCvG,KAAKmP,UAAY5I,EAAO6I,S,0CAtBbjC,GACXnN,KAAK+f,UAAY5S,G,eAIjB,OAAOnN,KAAK+f,Y,6BAGD9a,GACXjF,KAAKggB,UAAUxQ,GAAKvK,EAAS,GAAGlF,KAAKyP,I,eAIrC,OAAOxP,KAAKggB,UAAUxQ,M,0BAhBtB,MAAO,c,0CAmCKjJ,GACZ,IAAM8R,EAASzH,EAAiBpS,MAC1B2O,EAAkC,GAExC,OADAA,EAASnB,KAAKiU,GAAkBE,iBAAiB9H,EAAOrU,WAAYuC,EAAO6I,WACpEjC,I,gCASP,QAASnN,KAAKmP,c,upCChDGiR,G,kQACnB,WAAYpR,EAAuBE,GAAwF,MAArEM,EAAqE,uDAAxD,GAAI9C,EAAoD,0DACzH,cAAMA,IACDQ,cAAgBiR,GAAWkC,gBAAgBrR,EAAeQ,EAAIN,GAFsD,E,gBAD3EzC,G,qzCCNlD,IAEqB6T,G,2WAUJtc,EAAoBwL,EAAY+Q,GAC7C,IAAM3c,EAA+B,IAAIlB,IACzCkB,EAAQoJ,IAAI,eAAgB,oBAC5B,IAAMnI,EAAU,IAAIlB,KAAeC,GAWnC,OAVAiB,EAAQZ,QAhBiB,WAiBzBY,EAAQX,OAAS,UACjBW,EAAQa,OAAS,OACjBb,EAAQL,IAAMK,EAAQ0Z,OAAOva,GAC7Ba,EAAQma,IAAR,UApByB,WAoBzB,YACAna,EAAQ0B,OAAS,CACfiJ,GAAIA,EACJxM,GAAIud,EACJ7B,gBAAiB,IAAID,IAEhB5Z,I,0BAYEb,EAAoBwL,EAAY+Q,GACzC,IAAM3c,EAA+B,IAAIlB,IACzCkB,EAAQoJ,IAAI,eAAgB,oBAC5B,IAAMnI,EAAU,IAAIlB,KAAeC,GAcnC,OAbAiB,EAAQZ,QA1CiB,WA2CzBY,EAAQX,OAAS,MACjBW,EAAQa,OAAS,OACjBb,EAAQL,IAAMK,EAAQ0Z,OAAOva,GAC7Ba,EAAQma,IAAR,UA9CyB,WA8CzB,QACAna,EAAQ0B,OAAS,CACfiJ,GAAIA,EACJxM,GAAIud,EACJ7B,gBAAiB,CACfE,OAAQ,mCACR/b,KAAM,IAGHgC,M,yCArDqCsZ,I,ICL3BqC,GA0BnB,WAAYlF,I,4FAAkB,SAC5Btb,KAAKgD,GAAKsY,EAAStY,GACnBhD,KAAK9B,KAAOod,EAASpd,KACrB8B,KAAK+V,YAAcuF,EAASvF,YAC5B/V,KAAKqD,OAASiY,EAASlF,c,mjCC5BNqK,G,kQAWnB,WAAYnL,GAAqB,a,4FAAA,UAC/B,cAAMA,IACItK,WACR,EAAKyQ,QAAU,GACfnG,EAAYpE,KAAI,SAAA0E,GAAK,OAAI,EAAK6F,QAAQzP,KAAK,IAAI2J,EAAkBC,QAJpC,E,UAXc9K,K,uOCG5B4V,G,WAanB,WAAYna,I,4FAAgB,S,6GAAA,kBAVX,IAWfvG,KAAKmN,SAAWnN,KAAK2f,cAAcpZ,GACnCvG,KAAK2gB,YAAcpa,EAAOga,W,2CAT1B,MAAO,e,0CAoCKha,GACZ,IAAM8R,EAASzH,EAAiBpS,MAC1B2O,EAAkC,GAGxC,OAFAA,EAASnB,KAAKsU,GAAmB9hB,IAAI6Z,EAAOrU,WAAYuC,EAAOiJ,GAAIjJ,EAAOga,aAC1EpT,EAASnB,KAAKsU,GAAmB5S,QAAQ2K,EAAOrU,WAAYuC,EAAOiJ,GAAIjJ,EAAOga,aACvEpT,I,gCASP,QAASnN,KAAK2gB,c,6BAtCHxT,GACXnN,KAAK+f,UAAY5S,G,eAIjB,OAAOnN,KAAK+f,Y,6BAGD9a,GACXjF,KAAKggB,UAAUzE,aAAe,IAAIiF,GAAgBvb,EAAS,GAAGlF,MAC9DC,KAAKggB,UAAUxE,cAAgB,IAAIiF,GAAoBxb,EAAS,GAAGlF,O,eAInE,OAAOC,KAAKggB,c,qPCjCKY,G,WAanB,WAAYra,I,4FAAgB,S,6GAAA,kBAVX,CAACiV,cAAe,CAACC,QAAS,MAWzCzb,KAAKmN,SAAWnN,KAAK2f,cAAcpZ,GACnCvG,KAAK6gB,SAAWta,EAAOkV,Q,2CATvB,MAAO,iB,0CAuCKlV,GACZ,IAAM8R,EAASzH,EAAiBpS,MAC1B2O,EAAkC,GAIxC,OAHA5G,EAAOkV,QAAQrV,SAAQ,SAAAwP,GACrBzI,EAASnB,KAAK8S,GAAoBe,KAAKxH,EAAOrU,WAAYuC,EAAOiJ,GAAIoG,EAAM6C,SAAW7C,EAAOrP,EAAO4Y,yBAE/FhS,I,gCASP,SAAUnN,KAAK6gB,WAAY7gB,KAAK6gB,SAAShZ,U,6BA1C9BsF,GACXnN,KAAK+f,UAAY5S,G,eAIjB,OAAOnN,KAAK+f,Y,6BAGD9a,GAAe,IACtByV,EADsB,OAE1BzV,EAASmB,SAAQ,SAAA+S,GACfuB,EAAqB,IAAI+E,GAA6BtG,EAAKpZ,MAC3D,EAAKigB,UAAUxE,cAAcC,QAAQzP,KAAK0O,EAAmBe,QAAQ,Q,eAKvE,OAAOzb,KAAKggB,c,4uCC3BKc,G,wQAOnB,WAAY1X,EAAgC4F,GAAuB,a,4FAAA,S,6GAAA,IACjE,cAAM5F,EAAS4F,IADkD,uBANf,CAACmQ,qBAAqB,IAQxE,EAAK/e,QAAUqB,YAAU,eACzBmP,EAAiB5D,IAAI5D,EAAQ2X,KAC7B,EAAKC,wBAAwB5X,EAAQ6X,eACrC,EAAKtU,oBAAsBtO,OAAO0I,OAAO,EAAK4F,oBAAqBvD,EAAQ8X,wBALV,E,oDAapDtR,GAA2E,WASxF,OARIA,EAAUJ,KACZxP,KAAKwP,GAAKI,EAAUJ,GACpBxP,KAAKuP,cAAe,GAElBvP,KAAKoP,WAAapP,KAAK2P,kBACzB3P,KAAKuP,cAAe,GAEtBvP,KAAKmhB,YAAc,IAAIf,GAAqBpgB,KAAKgP,cAAehP,KAAKkP,UAAWlP,KAAKwP,GAAIxP,KAAK2M,qBACvF,IAAIvI,SAAQ,SAACC,EAASC,GAC3B,IAAMmU,EAAU7I,EAAU6I,QAC1B,GAAIA,EAAS,CACX,IAAIjJ,EAAa,EAAKA,GACjBA,IACHA,EAAK,gBACL,EAAK2R,YAAY/T,IAAI8S,GAAkB,CAAC9Q,SAAU,EAAKA,YAEzD,IAAM+P,EAAsB,EAAKiC,wBAAwBxR,GAEzD,OADA,EAAKuR,YAAY/T,IAAIsS,GAAqB,CAACjH,UAASjJ,KAAI2P,wBACjD,EAAKgC,YAAYE,YAAY1T,MAClC,SAAA1I,GACE,IACEZ,EAAQ,EAAKid,uBAAuBrc,IACpC,MAAO8I,GACPzJ,EAAOyJ,OAGX,SAAAA,GACEzJ,EAAOyJ,MAIXzJ,EAAO,IAAI3E,KAAMA,KAAM8E,SAASlE,SAAUZ,KAAM+E,SAAShE,SAAUf,KAAMgF,KAAKrD,yBAA0B,CAAC4J,QAAS,2B,8CAKhG0E,GACtB,MAAgD,kBAAlCA,EAAUuP,oBACpBvP,EAAUuP,oBAC+C,kBAAlDnf,KAAKuhB,qBAAqBpC,qBACjCnf,KAAKuhB,qBAAqBpC,sB,8CAIR/V,GAClBA,GAAiD,kBAA/BA,EAAQ+V,sBAC5Bnf,KAAKuhB,qBAAqBpC,oBAAsB/V,EAAQ+V,uB,6CAIrCpf,GACrBC,KAAKI,QAAQsI,MAAM,wBACnB,IAAM8Y,EAAyC,CAC7CC,QAAS,CACPC,YAAa1hB,KAAKuP,aAClBL,UAAWlP,KAAKkP,WAElBvM,QAAS3C,KAAK2hB,2BACdC,QAAS,IAMX,GAHI5hB,KAAKsP,WACPkS,EAAYC,QAAQnS,SAAWtP,KAAKsP,UAElCvP,EAAM,CACR,GAAIA,EAAK8hB,IAAI3B,GAAiBld,IAAK,CACjC,IAAM8e,EAAgB/hB,EAAKvB,IAAI0hB,GAAiBld,IAC5C8e,GAAiBA,EAAc7c,WACjCuc,EAAYC,QAAQjS,GAAKsS,EAAc7c,SACnCjF,KAAKoP,WAAapP,KAAK2P,kBACzB3P,KAAKwP,GAAKgS,EAAYC,QAAQjS,UAIlCgS,EAAYC,QAAQjS,GAAKxP,KAAKwP,GAEhC,GAAIzP,EAAK8hB,IAAInC,GAAoB1c,IAAK,CACpC,IAAM+e,EAAchiB,EAAKvB,IAAIkhB,GAAoB1c,IACjD,GAAI+e,GAAeA,EAAY9c,SAAU,CACvC,IAAMA,EAAY8c,EAAkC9c,SACpD,GAAIwV,GAAkBmD,eAAe3Y,GACnC,MAAM,IAAItF,KAAMA,KAAM8E,SAASlE,SAAUZ,KAAM+E,SAASjE,QAASd,KAAMgF,KAAKvD,aAAc,CACxF8C,OAAQuW,GAAkB7G,eAAe3O,GACzChD,SAAUwY,GAAkBoD,iBAAiB5Y,KAGjD,IAAM0V,EAAaF,GAAkBuH,cAAchiB,KAAK0hB,YAAc,GAAK1hB,KAAKwP,GAAIxP,KAAKkP,UAAWlP,KAAKsP,SAAUrK,GACnH5G,OAAO0I,OAAOya,EAAY7e,QAAS3C,KAAKiiB,kBAAkBtH,IAC1D3a,KAAKkiB,mBAAmBvH,GACxB3a,KAAKmiB,kBAAkBX,EAAY7e,WAKzC,OADA3C,KAAKI,QAAQsI,MAAM,wBAAyB8Y,GACrCA,I,yCAQU7G,GACjB,GAAI,CAAChF,EAAkByM,YAAY7K,OAAQ5B,EAAkByM,YAAY3K,YAAY2C,SAASO,EAAWvX,QACvG,MAAM,IAAIzD,KAAMA,KAAM8E,SAASlE,SAAUZ,KAAM+E,SAASjE,QAASd,KAAMgF,KAAKtD,uBAAwB,CAClGY,SAAU,sBAAF,OAAwB0Y,EAAW3X,GAAnC,eAA4C2X,EAAWvX,OAAvD,6CACRrD,KAAM,CAACqD,mB,wCASKyM,GAA2E,WAS3F,OARIA,EAAaL,KACfxP,KAAKwP,GAAKK,EAAaL,GACvBxP,KAAKuP,cAAe,GAElBvP,KAAKoP,WAAapP,KAAK2P,kBACzB3P,KAAKuP,cAAe,GAEtBvP,KAAKmhB,YAAc,IAAIf,GAAqBpgB,KAAKgP,cAAehP,KAAKkP,UAAWlP,KAAKwP,GAAIxP,KAAK2M,qBACvF,IAAIvI,SAAQ,SAACC,EAASC,GAC3B,IAAMic,EAAa1Q,EAAa0Q,WAChC,GAAIA,EAAY,CACd,IAAI/Q,EAAa,EAAKA,GACjBA,IACHA,EAAK,gBACL,EAAK2R,YAAY/T,IAAI8S,GAAkB,CAAC9Q,SAAU,EAAKA,YAEzD,EAAK+R,YAAY/T,IAAIsT,GAAmB,CAACH,aAAY/Q,OACrD,EAAK2R,YAAYE,YAAY1T,MAC3B,SAAA1I,GACEZ,EAAQ,EAAKge,+BAA+Bpd,OAE9C,SAAA8I,GACEzJ,EAAOyJ,WAIXzJ,EAAO,CAACwJ,SAAS,EAAO/N,KAAM,qC,qDAKLA,GAAqD,WAClFC,KAAKI,QAAQsI,MAAM,wBACnB,IAAM4Z,EAAyCtiB,KAAKuiB,qBACpD,GAAIxiB,GAAQA,EAAK8hB,IAAInB,GAAkB1d,IAAK,CAC1C,IAAMwf,EAAiBziB,EAAKvB,IAAIkiB,GAAkB1d,IAClD,GAAIwf,GAAkBA,EAAevd,SAAU,CAC7C,IAAMqW,EAAWb,GAAkBgI,YAAYD,EAAevd,UAC9Dqd,EAAetf,GAAKsY,EAAStY,GAC7Bsf,EAAejf,OAASiY,EAASjY,OACjCif,EAAe7f,SAASvE,KAAOod,EAASpd,KACxCokB,EAAe7f,SAASsT,YAAcuF,EAASvF,YAC/CuF,EAASjL,MAAMjK,SAAQ,SAAAzI,GAAC,OAAI2kB,EAAejS,MAAMrE,KAAK,CAACrJ,QAAS,EAAKsf,kBAAkBtkB,SAI3F,OADAqC,KAAKI,QAAQsI,MAAM,wBAAyB4Z,GACrCA,I,yCAQUxS,GAAyE,WAS1F,OARIA,EAAcN,KAChBxP,KAAKwP,GAAKM,EAAcN,GACxBxP,KAAKuP,cAAe,GAElBvP,KAAKoP,WAAapP,KAAK2P,kBACzB3P,KAAKuP,cAAe,GAEtBvP,KAAKmhB,YAAc,IAAIf,GAAqBpgB,KAAKgP,cAAehP,KAAKkP,UAAWlP,KAAKwP,GAAIxP,KAAK2M,qBACvF,IAAIvI,SAAQ,SAACC,EAASC,GAC3B,IAAMmX,EAAU3L,EAAc2L,QAC9B,GAAIA,GAAWA,EAAQ5T,OAAQ,CAC7B,IAAI2H,EAAa,EAAKA,GACjBA,IACHA,EAAK,gBACL,EAAK2R,YAAY/T,IAAI8S,GAAkB,CAAC9Q,SAAU,EAAKA,YAEzD,IAAM+P,EAAsB,EAAKiC,wBAAwBtR,GACzD,EAAKqR,YAAY/T,IAAIwT,GAAoB,CAACnF,UAASjM,KAAI2P,wBACvD,EAAKgC,YAAYE,YAAY1T,MAC3B,SAAA1I,GACEZ,EAAQ,EAAKqe,gCAAgCzd,OAE/C,SAAA8I,GACEzJ,EAAOyJ,WAIXzJ,EAAO,CAACwJ,SAAS,EAAO/N,KAAM,qC,sDAKJA,GAAqD,WACnFC,KAAKI,QAAQsI,MAAM,wBACnB,IAAM4Z,EAAyCtiB,KAAKuiB,qBACpD,GAAIxiB,GAAQA,EAAK8hB,IAAIjB,GAAmB5d,IAAK,CAC3C,IAAMwf,EAAiBziB,EAAKvB,IAAIoiB,GAAmB5d,IAC/Cwf,GAAkBA,EAAevd,UACjBwV,GAAkBkI,aAAaH,EAAevd,UACtDoL,MAAMjK,SAAQ,SAAAzI,GAAC,OAAI2kB,EAAejS,MAAMrE,KAAK,CAACrJ,QAAS,EAAKsf,kBAAkBtkB,QAI5F,OADAqC,KAAKI,QAAQsI,MAAM,wBAAyB4Z,GACrCA,I,2CAIP,MAAO,CACLtf,GAAI,GACJP,SAAU,CACRvE,KAAM,GACN6X,YAAa,IAEf1S,OAAQ,GACRgN,MAAO,M,iDAKT,MAAO,CACLxE,IAAK,GACLD,KAAM,GACND,YAAa,GACb3I,GAAI,GACJE,SAAU,EACVL,KAAML,IAAWM,KAAKC,QACtBM,OAAQ,GACRuf,KAAK,EACLC,GAAI,KACJpgB,SAAU,CACRvE,KAAM,GACN6X,YAAa,GACbM,KAAM,O,wCAKMsE,GAChB,IAAMmI,EAAkD9iB,KAAK2hB,2BACvDoB,EAAepI,EAAWhY,QAAQM,SAgBxC,OAfA6f,EAAcjX,IAAMkX,EAAalX,IACjCiX,EAAclX,KAAOmX,EAAanX,KAClCkX,EAAcnX,YAAcoX,EAAapX,YACzCmX,EAAc9f,GAAK2X,EAAW3X,GAC9B8f,EAAc5f,SAAWyX,EAAWzX,SACpC4f,EAAcjgB,KAAO8X,EAAW9X,KAChCigB,EAAcF,MAAQjI,EAAWxX,UACjC2f,EAAczf,OAASsX,EAAWtX,OAC9BsX,EAAWhY,QAAQuX,WACrB4I,EAAc5I,SAAWS,EAAWhY,QAAQuX,UAE1CS,EAAWlY,UAAgD,iBAA7BkY,EAAWlY,SAAS4T,MAAqBsE,EAAWlY,SAAS4T,KAAKxP,QAAQ,QAAU,IACpHic,EAAcD,GAAK,IAErBxkB,OAAO0I,OAAO+b,EAAcrgB,SAAUkY,EAAWlY,UAC1CqgB,O,gCA/R8B/T,MCRnCiU,GAAOC,2BACP7b,GAAU8b","file":"playkit-ovp-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[\"ovp\"] = factory();\n\telse\n\t\troot[\"playkit\"] = root[\"playkit\"] || {}, root[\"playkit\"][\"providers\"] = root[\"playkit\"][\"providers\"] || {}, root[\"playkit\"][\"providers\"][\"ovp\"] = 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 = 17);\n","//@flow\nimport getLogger, {getLogLevel, LogLevel} 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 if (getLogLevel(CLASS_NAME) !== LogLevel.OFF) {\n Error._logger.error(`Category:${category} | Code:${code} |`, data);\n }\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 * as JsLogger from 'js-logger';\n\nexport type LogLevelObject = {value: number, name: string};\nexport type LogLevelType = {[level: string]: LogLevelObject};\n\nconst LogLevel: LogLevelType = {\n DEBUG: JsLogger.DEBUG,\n INFO: JsLogger.INFO,\n TIME: JsLogger.TIME,\n WARN: JsLogger.WARN,\n ERROR: JsLogger.ERROR,\n OFF: JsLogger.OFF\n};\n\nJsLogger.useDefaults({defaultLevel: JsLogger.ERROR});\n\n/**\n * sets the logger handler\n * @param {LogHandlerType} handler - the log level\n * @returns {void}\n */\nfunction setLogHandler(handler: LogHandlerType): void {\n JsLogger.setHandler((messages, context) => handler(messages, context));\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 if (!name) {\n return JsLogger;\n }\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 {LogLevel, getLogLevel, setLogLevel, setLogHandler};\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\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}\n */\n poster: string | Array;\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\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}\n */\n headers: Map;\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}\n */\n responseHeaders: Array;\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} headers The request headers\n */\n constructor(headers: Map = 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.} Service response as promise\n */\n doHttpRequest(): Promise {\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 {\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","/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.6.0\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.TRACE = defineLogLevel(1, 'TRACE');\r\n\tLogger.DEBUG = defineLogLevel(2, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(3, 'INFO');\r\n\tLogger.TIME = defineLogLevel(4, 'TIME');\r\n\tLogger.WARN = defineLogLevel(5, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\ttrace: function () {\r\n\t\t\tthis.invoke(Logger.TRACE, arguments);\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.trace = bind(globalLogger, globalLogger.trace);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t} else if (context.level === Logger.TRACE && console.trace) {\r\n\t\t\t\t\thdlr = console.trace;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(Logger);\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\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 = 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 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 default 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\nimport MediaSource from './media-source';\nimport {MediaFormat} from './media-format';\n\nexport default class MediaSources {\n /**\n * Progressive download media sources container.\n * @type {Array}\n * @public\n */\n progressive: Array;\n /**\n * Dash media sources container.\n * @type {Array}\n * @public\n */\n dash: Array;\n /**\n * Hls media sources container.\n * @type {Array}\n * @public\n */\n hls: Array;\n captions: Array;\n\n /**\n * @constructor\n */\n constructor() {\n this.progressive = [];\n this.dash = [];\n this.hls = [];\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 };\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 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}\n */\n drmData: Array;\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>}\n * @private\n */\n _loadersResponseMap: Map> = 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}\n * @private\n */\n _loaders: Map = new Map();\n\n _networkRetryConfig: ProviderNetworkRetryParameters;\n\n constructor(networkRetryConfig: ProviderNetworkRetryParameters) {\n this._networkRetryConfig = networkRetryConfig;\n }\n\n /**\n * Add loader too execution loaders map\n * @function\n * @param {Function} loader Loader to add\n * @param {Object} params Loader params\n * @returns {void}\n */\n add(loader: Function, params: Object): 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 muktiRequest queue\n requests.forEach(request => {\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 * @function\n * @returns {Promise} Promise\n */\n fetchData(): Promise {\n return new Promise((resolve, reject) => {\n this._multiRequest.execute().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}\n */\n requests: Array = [];\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 * @returns {Promise} The multirequest execution promise\n */\n execute(): Promise {\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);\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 = [];\n /**\n * @constructor\n * @param {Object} response data\n */\n constructor(response: Object) {\n this.success = true;\n const responseArr = response.result ? response.result : response;\n responseArr.forEach(result => {\n const serviceResult: ServiceResult = new ServiceResult(result);\n this.results.push(serviceResult);\n if (serviceResult.hasError) {\n MultiRequestResult._logger.error(\n `Service returned an error with error code: ${serviceResult.error.code} and message: ${serviceResult.error.message}.`\n );\n this.success = false;\n return;\n }\n });\n }\n}\n","//@flow\nexport default 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\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\nimport {setLogLevel, getLogLevel, LogLevel, setLogHandler} from '../../util/logger';\nimport DataLoaderManager from './data-loader-manager';\nimport Error from '../../util/error/error';\n\nexport default class BaseProvider {\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 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 if (options.log && options.log.level && this.LogLevel[options.log.level]) {\n setLogLevel(this.LogLevel[options.log.level]);\n }\n if (options.log && typeof options.log.handler === 'function') {\n setLogHandler(options.log.handler);\n }\n }\n\n // eslint-disable-next-line no-unused-vars\n getMediaConfig(mediaInfo: MI): Promise {\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 {\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 {\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).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(): {[level: string]: Object} {\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}\n */\n items: Array;\n\n constructor() {\n this.items = [];\n }\n}\n","//@flow\nimport {clone} from '../../util/clone';\n\nconst defaultConfig: Object = {\n serviceUrl: 'https://cdnapisec.kaltura.com/api_v3',\n cdnUrl: 'https://cdnapisec.kaltura.com',\n serviceParams: {\n apiVersion: '3.3.0',\n format: 1\n },\n useApiCaptions: true\n};\n\nexport default class OVPConfiguration {\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 {OVPConfiguration};\n","//@flow\nimport KalturaDrmPlaybackPluginData from '../../common/response-types/kaltura-drm-playback-plugin-data';\n\nexport type OVPKalturaPlaybackSource = KalturaPlaybackSource;\n\nexport default class KalturaPlaybackSource {\n /**\n * @member - source format according to delivery profile streamer type (applehttp, mpegdash etc.)\n * @type {string}\n */\n format: string;\n /**\n * @member - delivery profile Id\n * @type {string}\n */\n deliveryProfileId: string;\n /**\n * @member - The source URL\n * @type {string}\n */\n url: string;\n /**\n * @member - comma separated string according to deliveryProfile media protocols ('http,https' etc.)\n * @type {string}\n */\n protocols: string;\n /**\n * @member - comma separated string of flavor ids\n * @type {string}\n */\n flavorIds: string;\n /**\n * @member - drm data object containing relevant license url ,scheme name and certificate\n * @type {Array}\n */\n drm: Array = [];\n\n /**\n * @constructor\n * @param {Object} source The response\n */\n constructor(source: Object) {\n this.format = source.format;\n this.deliveryProfileId = source.deliveryProfileId;\n this.url = source.url;\n this.protocols = source.protocols;\n this.flavorIds = source.flavorIds;\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 * Checks if source has flavor IDs\n * @function hasFlavorIds\n * @returns {boolean} Is source ha flavor IDs\n */\n hasFlavorIds(): boolean {\n return !!this.flavorIds && this.flavorIds.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 = 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 KalturaRuleAction {\n static Type: {[type: string]: string | number} = {\n DRM_POLICY: 'drm.DRM_POLICY',\n BLOCK: 1,\n PREVIEW: 2,\n LIMIT_FLAVORS: 3,\n ADD_TO_STORAGE: 4,\n LIMIT_DELIVERY_PROFILES: 5,\n SERVE_FROM_REMOTE_SERVER: 6,\n REQUEST_HOST_REGEX: 7,\n LIMIT_THUMBNAIL_CAPTURE: 8\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 KalturaRuleAction from './kaltura-rule-action';\n\nexport default class KalturaAccessControlModifyRequestHostRegexAction extends KalturaRuleAction {\n /**\n * @member - Request host regex pattern\n * @type {string}\n */\n pattern: string;\n /**\n * @member - Request host regex replacement\n * @type {string}\n */\n replacement: string;\n /**\n * @member - serverNodeId to generate replacment host from\n * @type {number}\n */\n replacmenServerNodeId: number;\n\n /**\n * @constructor\n * @param {Object} data - The response\n */\n constructor(data: Object) {\n super(data);\n this.pattern = data.pattern;\n this.replacement = data.replacement;\n this.replacmenServerNodeId = data.replacmenServerNodeId;\n }\n}\n","//@flow\nexport default class KalturaFlavorAsset {\n static Status: {[status: string]: number} = {\n ERROR: -1,\n QUEUED: 0,\n CONVERTING: 1,\n READY: 2,\n DELETED: 3,\n NOT_APPLICABLE: 4,\n TEMP: 5,\n WAIT_FOR_CONVERT: 6,\n IMPORTING: 7,\n VALIDATING: 8,\n EXPORTING: 9\n };\n\n /**\n * @member - The ID of the Flavor Asset\n * @type {string}\n */\n id: string;\n /**\n * @member -The Flavor Params used to create this Flavor Asset\n * @type {string}\n */\n flavorParamsId: string;\n /**\n * @member -The file extension\n * @type {string}\n */\n fileExt: string;\n /**\n * @member - The overall bitrate (in KBits) of the Flavor Asset\n * @type {string}\n */\n bitrate: number;\n /**\n * @member - The width of the Flavor Asset\n * @type {number}\n */\n width: number;\n /**\n * @member - The height of the Flavor Asset\n * @type {number}\n */\n height: number;\n /**\n * @member - The frame rate (in FPS) of the Flavor Asset\n * @type {number}\n */\n frameRate: number;\n /**\n * @member - True if this Flavor Asset is the original source\n * @type {number}\n */\n isOriginal: boolean;\n /**\n * @member - True if this Flavor Asset is playable in KDP\n * @type {boolean}\n */\n isWeb: boolean;\n /**\n * @member - The container format\n * @type {boolean}\n */\n containerFormat: string;\n /**\n *@member - The video codec\n * @type {boolean}\n */\n videoCodecId: string;\n /**\n * @member - The status of the Flavor Asset\n * @type {number}\n */\n status: number;\n /**\n * @member - The language of the flavor asset\n * @type {Status}\n */\n language: string;\n /**\n * @member - The label of the flavor asset\n * @type {string}\n */\n label: string;\n\n /**\n * @constructor\n * @param {Object} data The json response\n */\n constructor(data: any) {\n this.id = data.id;\n this.flavorParamsId = data.flavorParamsId;\n this.fileExt = data.fileExt;\n this.bitrate = data.bitrate;\n this.width = data.width;\n this.height = data.height;\n this.id = data.id;\n this.frameRate = data.frameRate;\n this.isOriginal = data.isOriginal;\n this.isWeb = data.isWeb;\n this.containerFormat = data.containerFormat;\n this.videoCodecId = data.videoCodecId;\n this.status = data.status;\n this.language = data.language;\n this.label = data.label;\n }\n}\n","//@flow\nimport ServiceResult from '../../common/base-service-result';\nimport KalturaAccessControlMessage from '../../common/response-types/kaltura-access-control-message';\nimport KalturaPlaybackSource from './kaltura-playback-source';\nimport KalturaAccessControlModifyRequestHostRegexAction from './kaltura-access-control-modify-request-host-regex-action';\nimport KalturaRuleAction from './kaltura-rule-action';\nimport KalturaFlavorAsset from './kaltura-flavor-asset';\n\nexport default class KalturaPlaybackContext extends ServiceResult {\n /**\n * @member - The playback sources\n * @type {Array}\n */\n sources: Array = [];\n /**\n * @member - Array of actions as received from the rules that invalidated\n * @type {Array}\n */\n actions: Array = [];\n /**\n * @member - Array of actions as received from the rules that invalidated\n * @type {Array}\n */\n messages: Array = [];\n /**\n * @member - The flavor assets\n * @type {Array}\n */\n flavorAssets: Array = [];\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 => {\n if (action.type === KalturaRuleAction.Type.REQUEST_HOST_REGEX) {\n this.actions.push(new KalturaAccessControlModifyRequestHostRegexAction(action));\n } else {\n this.actions.push(new KalturaRuleAction(action));\n }\n });\n }\n const sources = response.sources;\n if (sources) {\n sources.map(source => this.sources.push(new KalturaPlaybackSource(source)));\n }\n const flavorAssets = response.flavorAssets;\n if (flavorAssets) {\n flavorAssets.map(flavor => this.flavorAssets.push(new KalturaFlavorAsset(flavor)));\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 {\n return this.messages;\n }\n\n /**\n * Get the KalturaAccessControlModifyRequestHostRegexAction action\n * @function getRequestHostRegexAction\n * @returns {?KalturaAccessControlModifyRequestHostRegexAction} The action\n * */\n getRequestHostRegexAction(): ?KalturaAccessControlModifyRequestHostRegexAction {\n const action = this.actions.find(action => action.type === KalturaRuleAction.Type.REQUEST_HOST_REGEX);\n if (action instanceof KalturaAccessControlModifyRequestHostRegexAction) {\n return action;\n }\n }\n}\n","//@flow\nexport default class KalturaMetadata {\n static ObjectType: {[type: string]: string | number} = {\n AD_CUE_POINT: 'adCuePointMetadata.AdCuePoint',\n ANNOTATION: 'annotationMetadata.Annotation',\n CODE_CUE_POINT: 'codeCuePointMetadata.CodeCuePoint',\n THUMB_CUE_POINT: 'thumbCuePointMetadata.thumbCuePoint',\n ENTRY: 1,\n CATEGORY: 2,\n USER: 3,\n PARTNER: 4,\n DYNAMIC_OBJECT: 5\n };\n\n static Status: {[status: string]: number} = {\n VALID: 1,\n INVALID: 2,\n DELETED: 3\n };\n\n id: number;\n metadataProfileId: number;\n metadataProfileVersion: number;\n metadataObjectType: string | number;\n objectId: string;\n version: number;\n created: Date;\n updated: Date;\n status: number;\n xml: string;\n\n /**\n * @constructor\n * @param {Object} data The response\n */\n constructor(data: Object) {\n this.id = data.id;\n this.metadataProfileId = data.metadataProfileId;\n this.metadataProfileVersion = data.metadataProfileVersion;\n this.metadataProfileId = data.metadataProfileId;\n this.metadataObjectType = data.metadataObjectType;\n this.objectId = data.objectId;\n this.version = data.version;\n this.created = new Date(0);\n this.created.setUTCSeconds(data.createdAt);\n this.updated = new Date(0);\n this.updated.setUTCSeconds(data.updatedAt);\n this.status = data.status;\n this.xml = data.xml;\n }\n}\n","//@flow\nimport ServiceResult from '../../common/base-service-result';\nimport KalturaMetadata from './kaltura-metadata';\n\nexport default class KalturaMetadataListResponse extends ServiceResult {\n totalCount: number;\n metas: Array;\n\n /**\n * @constructor\n * @param {Object} responseObj The response\n */\n constructor(responseObj: Object) {\n super(responseObj);\n if (!this.hasError) {\n this.totalCount = responseObj.totalCount;\n if (this.totalCount > 0) {\n this.metas = [];\n responseObj.objects.map(meta => this.metas.push(new KalturaMetadata(meta)));\n }\n }\n }\n}\n","//@flow\nexport default class KalturaMediaEntry {\n static EntryType: {[entryType: string]: {value: number | string}} = {\n AUTOMATIC: {value: -1},\n EXTERNAL_MEDIA: {value: 'externalMedia.externalMedia'},\n MEDIA_CLIP: {value: 1},\n MIX: {value: 2},\n PLAYLIST: {value: 5},\n DATA: {value: 6},\n LIVE_STREAM: {value: 7},\n LIVE_CHANNEL: {value: 8},\n DOCUMENT: {value: 10}\n };\n\n static MediaType: {[mediaType: string]: {value: number}} = {\n VIDEO: {value: 1},\n IMAGE: {value: 2},\n AUDIO: {value: 5},\n LIVE_STREAM_FLASH: {value: 201},\n LIVE_STREAM_WINDOWS_MEDIA: {value: 202},\n LIVE_STREAM_REAL_MEDIA: {value: 203},\n LIVE_STREAM_QUICK_TIME: {value: 204}\n };\n\n static EntryStatus: {[status: string]: string | number} = {\n ERROR_IMPORTING: -2,\n ERROR_CONVERTING: -1,\n SCAN_FAILURE: 'virusScan.ScanFailure',\n IMPORT: 0,\n INFECTED: 'virusScan.Infected',\n PRECONVERT: 1,\n READY: 2,\n DELETED: 3,\n PENDING: 4,\n MODERATE: 5,\n BLOCKED: 6,\n NO_CONTENT: 7\n };\n\n static EntryModerationStatus: {[status: string]: number} = {\n PENDING_MODERATION: 1,\n APPROVED: 2,\n REJECTED: 3,\n FLAGGED_FOR_REVIEW: 4,\n MODERATE: 5,\n AUTO_APPROVED: 6\n };\n\n /**\n * @member - The entry id\n * @type {string}\n */\n id: string;\n /**\n * @member - The entry referenceId\n * @type {string}\n */\n referenceId: string;\n /**\n * @member - The entry externalSourceType\n * @type {string}\n */\n externalSourceType: string;\n /**\n * @member - Entry name (Min 1 chars)\n * @type {string}\n */\n name: string;\n /**\n * @member - Entry description\n * @type {string}\n */\n description: string;\n /**\n * @member - The URL used for playback. This is not the download URL.\n * @type {string}\n */\n dataUrl: string;\n /**\n * @member - Comma separated flavor params ids that exists for this media entry\n * @type {string}\n */\n flavorParamsIds: string;\n /**\n * @member - The entry duration\n * @type {number}\n */\n duration: number;\n /**\n * @member - The type of the entry, this is auto filled by the derived entry object\n * @type {string | number}\n */\n type: string | number;\n /**\n * @member - The type of the entry, this is auto filled by the derived entry object (Image, Audio etc.)\n * @type {number}\n */\n entryType: number;\n /**\n * @member - Entry poster image\n * @type {string}\n */\n poster: string;\n /**\n * @member - DVR status\n * @type {number}\n */\n dvrStatus: number;\n /**\n * @member - Entry tags\n * @type {string}\n */\n tags: string;\n\n /**\n * @member - Entry status\n * @type {number}\n */\n status: number;\n\n /**\n * @constructor\n * @param {Object} entry The json response\n */\n constructor(entry: Object) {\n this.id = entry.id;\n this.referenceId = entry.referenceId;\n this.externalSourceType = entry.externalSourceType;\n this.name = entry.name;\n this.description = entry.description;\n this.dataUrl = entry.dataUrl;\n this.type = entry.type;\n this.entryType = entry.mediaType;\n this.flavorParamsIds = entry.flavorParamsIds;\n this.duration = entry.duration;\n this.poster = entry.thumbnailUrl;\n this.status = entry.status;\n this.dvrStatus = entry.dvrStatus;\n this.tags = entry.tags;\n }\n}\n","//@flow\nimport OVPConfiguration from './config';\n\ntype urlParamsType = {\n partnerId: number,\n entryId: string,\n ks: string,\n uiConfId: ?number,\n format: string,\n protocol: string,\n extension: string,\n flavorIds: ?string\n};\n\nexport default class PlaySourceUrlBuilder {\n /**\n * Returns source url by given url params\n * @function build\n * @param {urlParamsType} urlParams The params\n * @returns {string} The URL\n * @static\n */\n static build(urlParams: urlParamsType): string {\n const config = OVPConfiguration.get();\n const serviceUrlOrigin: string = config.serviceUrl.substr(0, config.serviceUrl.lastIndexOf('/'));\n const {partnerId, entryId, ks, uiConfId, format, protocol, extension, flavorIds} = urlParams;\n\n //verify mandatory params\n if (!serviceUrlOrigin || !partnerId || !entryId || !format || !protocol) {\n return '';\n }\n\n let playUrl = serviceUrlOrigin;\n if (!serviceUrlOrigin.endsWith('/')) {\n playUrl += '/';\n }\n playUrl += 'p/' + partnerId + '/sp/' + partnerId + '00' + '/playManifest/entryId/' + entryId + '/protocol/' + protocol + '/format/' + format;\n\n if (flavorIds) {\n playUrl += '/flavorIds/' + flavorIds;\n } else if (uiConfId) {\n playUrl += '/uiConfId/' + uiConfId;\n }\n\n if (ks !== '') {\n playUrl += '/ks/' + ks;\n }\n\n if (extension !== '') {\n playUrl += '/a.' + extension;\n }\n\n if (uiConfId && flavorIds !== '') {\n playUrl += '?uiConfId=' + uiConfId;\n }\n\n return playUrl;\n }\n}\n","//@flow\nexport default class XmlParser {\n /**\n * Parses xml string to json object\n * @param {string} xml The xml to parse\n * @returns {{}} The parsed xml as Json object\n * @static\n */\n static xmlToJson(xml: Object) {\n let obj = {};\n if (xml.nodeType === 1) {\n if (xml.attributes.length > 0) {\n obj['@attributes'] = {};\n for (let j = 0; j < xml.attributes.length; j++) {\n let attribute = xml.attributes.item(j);\n obj['@attributes'][attribute.nodeName] = attribute.nodeValue;\n }\n }\n } else if (xml.nodeType === 3) {\n obj = xml.nodeValue;\n }\n if (xml.hasChildNodes()) {\n for (let i = 0; i < xml.childNodes.length; i++) {\n let item = xml.childNodes.item(i);\n let nodeName = item.nodeName;\n if (typeof obj[nodeName] === 'undefined') {\n obj[nodeName] = this.xmlToJson(item);\n } else {\n if (typeof obj[nodeName].push === 'undefined') {\n let old = obj[nodeName];\n obj[nodeName] = [];\n obj[nodeName].push(old);\n }\n obj[nodeName].push(this.xmlToJson(item));\n }\n }\n }\n return obj;\n }\n}\n","//@flow\n\nimport MediaEntry from '../entities/media-entry';\n\nexport default class Playlist {\n /**\n * @member - playlist id\n * @type {string}\n */\n id: string;\n /**\n * @member - playlist name\n * @type {string}\n */\n name: string;\n /**\n * @member - playlist description\n * @type {string}\n */\n description: string;\n\n /**\n * @member - playlist poster\n * @type {string}\n */\n poster: string;\n\n /**\n * @member - playlist items\n * @type {Array}\n */\n items: Array;\n\n constructor() {\n this.items = [];\n }\n}\n","// @flow\n\nconst KalturaCaptionType: CaptionType = {\n SRT: '1',\n DFXP: '2',\n WEBVTT: '3',\n CAP: '4'\n};\n\nconst CaptionsFormatsMap: {[format: string]: string} = {\n '3': 'vtt',\n '1': 'srt'\n};\n\nclass ExternalCaptionsBuilder {\n static createConfig(captions: Array): Array {\n return captions.map(caption => {\n let url = caption.url;\n let type = CaptionsFormatsMap[caption.format];\n if ([KalturaCaptionType.DFXP, KalturaCaptionType.CAP].includes(caption.format)) {\n url = caption.webVttUrl;\n type = CaptionsFormatsMap[KalturaCaptionType.WEBVTT];\n }\n return {\n default: !!caption.isDefault,\n type: type,\n language: caption.languageCode,\n label: caption.label,\n url: url\n };\n });\n }\n}\n\nexport {ExternalCaptionsBuilder};\n","//@flow\nimport KalturaPlaybackContext from './response-types/kaltura-playback-context';\nimport KalturaMetadataListResponse from './response-types/kaltura-metadata-list-response';\nimport KalturaMediaEntry from './response-types/kaltura-media-entry';\nimport KalturaPlaybackSource from './response-types/kaltura-playback-source';\nimport KalturaDrmPlaybackPluginData from '../common/response-types/kaltura-drm-playback-plugin-data';\nimport PlaySourceUrlBuilder from './play-source-url-builder';\nimport XmlParser from '../../util/xml-parser';\nimport getLogger from '../../util/logger';\nimport OVPConfiguration from './config';\nimport MediaEntry from '../../entities/media-entry';\nimport Drm from '../../entities/drm';\nimport MediaSource from '../../entities/media-source';\nimport MediaSources from '../../entities/media-sources';\nimport {SupportedStreamFormat, isProgressiveSource} from '../../entities/media-format';\nimport Playlist from '../../entities/playlist';\nimport EntryList from '../../entities/entry-list';\nimport KalturaRuleAction from './response-types/kaltura-rule-action';\nimport KalturaAccessControlMessage from '../common/response-types/kaltura-access-control-message';\nimport type {OVPMediaEntryLoaderResponse} from './loaders/media-entry-loader';\nimport {ExternalCaptionsBuilder} from './external-captions-builder';\n\nexport default class OVPProviderParser {\n static _logger = getLogger('OVPProviderParser');\n\n /**\n * Returns parsed media entry by given OVP response objects\n * @function getMediaEntry\n * @param {string} ks - The ks\n * @param {number} partnerId - The partner ID\n * @param {number} uiConfId - The uiConf ID\n * @param {any} mediaEntryResponse - The media entry response\n * @returns {MediaEntry} - The media entry\n * @static\n * @public\n */\n static getMediaEntry(ks: string, partnerId: number, uiConfId: ?number, mediaEntryResponse: any): MediaEntry {\n const mediaEntry = new MediaEntry();\n const entry = mediaEntryResponse.entry;\n const playbackContext = mediaEntryResponse.playBackContextResult;\n const metadataList = mediaEntryResponse.metadataListResult;\n const kalturaSources = playbackContext.sources;\n\n mediaEntry.sources = OVPProviderParser._getParsedSources(kalturaSources, ks, partnerId, uiConfId, entry, playbackContext);\n if (OVPConfiguration.get().useApiCaptions && playbackContext.data.playbackCaptions) {\n mediaEntry.sources.captions = ExternalCaptionsBuilder.createConfig(playbackContext.data.playbackCaptions);\n }\n OVPProviderParser._fillBaseData(mediaEntry, entry, metadataList);\n return mediaEntry;\n }\n\n /**\n * Returns parsed playlist by given OVP response objects\n * @function getPlaylist\n * @param {any} playlistResponse - The playlist response\n * @returns {Playlist} - The playlist\n * @static\n * @public\n */\n static getPlaylist(playlistResponse: any): Playlist {\n const playlist = new Playlist();\n const playlistData = playlistResponse.playlistData;\n const playlistItems = playlistResponse.playlistItems.entries;\n playlist.id = playlistData.id;\n playlist.name = playlistData.name;\n playlist.description = playlistData.description;\n playlist.poster = playlistData.poster;\n playlistItems.forEach((entry: KalturaMediaEntry) => {\n const mediaEntry = new MediaEntry();\n OVPProviderParser._fillBaseData(mediaEntry, entry);\n playlist.items.push(mediaEntry);\n });\n return playlist;\n }\n\n /**\n * Returns parsed entry list by given OVP response objects\n * @function getEntryList\n * @param {any} playlistResponse - response\n * @returns {Playlist} - The entry list\n * @static\n * @public\n */\n static getEntryList(playlistResponse: any): EntryList {\n const entryList = new EntryList();\n const playlistItems = playlistResponse.playlistItems.entries;\n playlistItems.forEach(entry => {\n const mediaEntry = new MediaEntry();\n OVPProviderParser._fillBaseData(mediaEntry, entry);\n entryList.items.push(mediaEntry);\n });\n return entryList;\n }\n\n static _fillBaseData(mediaEntry: MediaEntry, entry: KalturaMediaEntry, metadataList: ?KalturaMetadataListResponse) {\n mediaEntry.poster = entry.poster;\n mediaEntry.id = entry.id;\n mediaEntry.duration = entry.duration;\n mediaEntry.metadata = OVPProviderParser._parseMetadata(metadataList);\n mediaEntry.metadata.description = entry.description || '';\n mediaEntry.metadata.name = entry.name || '';\n mediaEntry.metadata.tags = entry.tags || '';\n mediaEntry.status = entry.status;\n\n mediaEntry.type = OVPProviderParser._getEntryType(entry.entryType, entry.type);\n if (mediaEntry.type === MediaEntry.Type.LIVE) {\n mediaEntry.dvrStatus = entry.dvrStatus;\n }\n\n return mediaEntry;\n }\n\n static _getEntryType(entryTypeEnum: number, typeEnum: number | string): string {\n let type = MediaEntry.Type.UNKNOWN;\n switch (entryTypeEnum) {\n case KalturaMediaEntry.MediaType.IMAGE.value:\n type = MediaEntry.Type.IMAGE;\n break;\n case KalturaMediaEntry.MediaType.AUDIO.value:\n type = MediaEntry.Type.AUDIO;\n break;\n default:\n switch (typeEnum) {\n case KalturaMediaEntry.EntryType.MEDIA_CLIP.value:\n type = MediaEntry.Type.VOD;\n break;\n case KalturaMediaEntry.EntryType.LIVE_STREAM.value:\n case KalturaMediaEntry.EntryType.LIVE_CHANNEL.value:\n type = MediaEntry.Type.LIVE;\n break;\n default:\n type = MediaEntry.Type.UNKNOWN;\n }\n }\n return type;\n }\n\n /**\n * Returns the parsed sources\n * @function _getParsedSources\n * @param {Array} kalturaSources - The kaltura sources\n * @param {string} ks - The ks\n * @param {number} partnerId - The partner ID\n * @param {number} uiConfId - The uiConf ID\n * @param {Object} entry - The entry\n * @param {KalturaPlaybackContext} playbackContext - The playback context\n * @return {MediaSources} - A media sources\n * @static\n * @private\n */\n static _getParsedSources(\n kalturaSources: Array,\n ks: string,\n partnerId: number,\n uiConfId: ?number,\n entry: Object,\n playbackContext: KalturaPlaybackContext\n ): MediaSources {\n const sources = new MediaSources();\n const addAdaptiveSource = (source: KalturaPlaybackSource) => {\n const parsedSource = OVPProviderParser._parseAdaptiveSource(source, playbackContext, ks, partnerId, uiConfId, entry.id);\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 const progressiveSource = kalturaSources.find(source => {\n //match progressive source with supported protocol(http/s)\n return isProgressiveSource(source.format) && source.getProtocol(OVPProviderParser._getBaseProtocol()) !== '';\n });\n sources.progressive = OVPProviderParser._parseProgressiveSources(progressiveSource, playbackContext, ks, partnerId, uiConfId, entry.id);\n };\n\n const parseExternalMedia = () => {\n const mediaSource = new MediaSource();\n mediaSource.mimetype = 'video/youtube';\n mediaSource.url = entry.referenceId;\n mediaSource.id = entry.id + '_youtube';\n sources.progressive.push(mediaSource);\n };\n\n if (entry.type === KalturaMediaEntry.EntryType.EXTERNAL_MEDIA.value) {\n parseExternalMedia();\n } else 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 * @param {KalturaPlaybackContext} playbackContext - The playback context\n * @param {string} ks - The ks\n * @param {number} partnerId - The partner ID\n * @param {number} uiConfId - The uiConf ID\n * @param {string} entryId - The entry id\n * @returns {?MediaSource} - The parsed adaptive kalturaSource\n * @static\n * @private\n */\n static _parseAdaptiveSource(\n kalturaSource: ?KalturaPlaybackSource,\n playbackContext: KalturaPlaybackContext,\n ks: string,\n partnerId: number,\n uiConfId: ?number,\n entryId: string\n ): ?MediaSource {\n const mediaSource: MediaSource = new MediaSource();\n if (kalturaSource) {\n let playUrl: string = '';\n const mediaFormat = SupportedStreamFormat.get(kalturaSource.format);\n const protocol = kalturaSource.getProtocol(OVPProviderParser._getBaseProtocol());\n const deliveryProfileId = kalturaSource.deliveryProfileId;\n const format = kalturaSource.format;\n let extension: string = '';\n if (mediaFormat) {\n extension = mediaFormat.pathExt;\n mediaSource.mimetype = mediaFormat.mimeType;\n }\n // in case playbackSource doesn't have flavors we don't need to build the url and we'll use the provided one.\n if (kalturaSource.hasFlavorIds()) {\n if (!extension && playbackContext.flavorAssets && playbackContext.flavorAssets.length > 0) {\n extension = playbackContext.flavorAssets[0].fileExt;\n }\n playUrl = PlaySourceUrlBuilder.build({\n entryId,\n flavorIds: kalturaSource.flavorIds,\n format,\n ks,\n partnerId,\n uiConfId,\n extension,\n protocol\n });\n } else {\n playUrl = kalturaSource.url;\n }\n if (!playUrl) {\n const message = `failed to create play url from source, discarding source: (${entryId}_${deliveryProfileId}), ${format}`;\n OVPProviderParser._logger.warn(message);\n return null;\n }\n mediaSource.url = OVPProviderParser._applyRegexAction(playbackContext, playUrl);\n mediaSource.id = entryId + '_' + deliveryProfileId + ',' + format;\n if (kalturaSource.hasDrmData()) {\n const drmParams: Array = [];\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 /**\n * Returns parsed progressive sources\n * @function _parseProgressiveSources\n * @param {KalturaPlaybackSource} kalturaSource - A kaltura source\n * @param {KalturaPlaybackContext} playbackContext - The playback context\n * @param {string} ks - The ks\n * @param {number} partnerId - The partner ID\n * @param {number} uiConfId - The uiConf ID\n * @param {string} entryId - The entry id\n * @returns {Array} - The parsed progressive kalturaSources\n * @static\n * @private\n */\n static _parseProgressiveSources(\n kalturaSource: ?KalturaPlaybackSource,\n playbackContext: KalturaPlaybackContext,\n ks: string,\n partnerId: number,\n uiConfId: ?number,\n entryId: string\n ): Array {\n const videoSources: Array = [];\n const audioSources: Array = [];\n if (kalturaSource) {\n const protocol = kalturaSource.getProtocol(OVPProviderParser._getBaseProtocol());\n const format = kalturaSource.format;\n const deliveryProfileId = kalturaSource.deliveryProfileId;\n const sourceId = deliveryProfileId + ',' + format;\n playbackContext.flavorAssets.map(flavor => {\n const mediaSource: MediaSource = new MediaSource();\n mediaSource.id = flavor.id + sourceId;\n mediaSource.mimetype = flavor.fileExt === 'mp3' ? 'audio/mp3' : 'video/mp4';\n mediaSource.height = flavor.height;\n mediaSource.width = flavor.width;\n mediaSource.bandwidth = flavor.bitrate * 1024;\n mediaSource.label = flavor.label || flavor.language;\n const playUrl = PlaySourceUrlBuilder.build({\n entryId,\n flavorIds: flavor.id,\n format,\n ks,\n partnerId: partnerId,\n uiConfId: uiConfId,\n extension: flavor.fileExt,\n protocol\n });\n if (playUrl === '') {\n OVPProviderParser._logger.warn(`failed to create play url from source, discarding source: (${entryId}_${deliveryProfileId}), ${format}.`);\n return null;\n } else {\n mediaSource.url = OVPProviderParser._applyRegexAction(playbackContext, playUrl);\n if (flavor.height && flavor.width) {\n videoSources.push(mediaSource);\n } else {\n audioSources.push(mediaSource);\n }\n }\n });\n }\n //If we have only audio flavors return them, otherwise return video flavors\n return audioSources.length && !videoSources.length ? audioSources : videoSources;\n }\n\n /**\n * Ovp metadata parser\n * @function _parseMetaData\n * @param {KalturaMetadataListResponse} metadataList The metadata list\n * @returns {Object} Parsed metadata\n * @static\n * @private\n */\n static _parseMetadata(metadataList: ?KalturaMetadataListResponse): Object {\n const metadata = {};\n if (metadataList && metadataList.metas && metadataList.metas.length > 0) {\n metadataList.metas.forEach(meta => {\n let metaXml: Object;\n const domParser: DOMParser = new DOMParser();\n meta.xml = meta.xml.replace(/\\r?\\n|\\r/g, '');\n meta.xml = meta.xml.replace(/>\\s*/g, '>');\n meta.xml = meta.xml.replace(/>\\s*/g, '>');\n metaXml = domParser.parseFromString(meta.xml, 'text/xml');\n const metasObj: Object = XmlParser.xmlToJson(metaXml);\n const metaKeys = Object.keys(metasObj.metadata);\n metaKeys.forEach(key => {\n metadata[key] = metasObj.metadata[key]['#text'];\n });\n });\n }\n return metadata;\n }\n\n /**\n * Returns the base protocol\n * @function _getBaseProtocol\n * @returns {string} - The base protocol\n * @static\n * @private\n */\n static _getBaseProtocol(): string {\n const config = OVPConfiguration.get();\n const protocolRegex = /^https?:/;\n const result = protocolRegex.exec(config.cdnUrl);\n const protocol = result ? result[0] : document.location.protocol;\n if (typeof protocol === 'string') {\n return protocol.slice(0, -1); // remove ':' from the end\n }\n return 'https';\n }\n\n static hasBlockAction(response: OVPMediaEntryLoaderResponse): boolean {\n return response.playBackContextResult.hasBlockAction();\n }\n\n static getBlockAction(response: OVPMediaEntryLoaderResponse): ?KalturaRuleAction {\n return response.playBackContextResult.getBlockAction();\n }\n\n static getErrorMessages(response: OVPMediaEntryLoaderResponse): Array {\n return response.playBackContextResult.getErrorMessages();\n }\n\n /**\n * Applies the request host regex on the url\n * @function _applyRegexAction\n * @param {KalturaPlaybackContext} playbackContext - The playback context\n * @param {string} playUrl - The original url\n * @returns {string} - The request host regex applied url\n * @static\n * @private\n */\n static _applyRegexAction(playbackContext: KalturaPlaybackContext, playUrl: string): string {\n const regexAction = playbackContext.getRequestHostRegexAction();\n if (regexAction) {\n const regex = new RegExp(regexAction.pattern, 'i');\n if (playUrl.match(regex)) {\n return playUrl.replace(regex, regexAction.replacement + '/');\n }\n }\n return playUrl;\n }\n}\n","//@flow\nimport MultiRequestBuilder from '../../common/multi-request-builder';\nimport OVPConfiguration from '../config';\n\nconst SERVICE_NAME: string = 'multirequest';\n\nexport default class OVPService {\n /**\n * Gets a new instance of MultiRequestBuilder with ovp params\n * @function getMultiRequest\n * @param {string} playerVersion The player version\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(playerVersion: string, ks: string, partnerId?: number): MultiRequestBuilder {\n const config = OVPConfiguration.get();\n const ovpParams = config.serviceParams;\n Object.assign(ovpParams, {ks: ks, clientTag: 'html5:v' + playerVersion});\n if (partnerId) {\n Object.assign(ovpParams, {partnerId: partnerId});\n }\n const headers: Map = 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 = ovpParams;\n return multiReq;\n }\n}\n","//@flow\nconst FIELDS =\n 'id,referenceId,name,description,thumbnailUrl,dataUrl,duration,msDuration,flavorParamsIds,mediaType,type,tags,dvrStatus,externalSourceType,status';\n\nexport default class BaseEntryResponseProfile {\n static Type: {[type: string]: number} = {\n INCLUDE_FIELDS: 1,\n EXCLUDE_FIELDS: 2\n };\n /**\n * @member - the response profile type\n * @type {number}\n */\n type: number;\n /**\n * @member - Comma separated fields list to be included or excluded\n * @type {string}\n */\n fields: string;\n\n /**\n * @constructor\n * @param {Object} responseProfile -\n */\n constructor(responseProfile: Object = {}) {\n this.type = responseProfile.type || BaseEntryResponseProfile.Type.INCLUDE_FIELDS;\n this.fields = responseProfile.fields || FIELDS;\n }\n}\n","//@flow\nimport OVPService from './ovp-service';\nimport RequestBuilder from '../../../util/request-builder';\nimport BaseEntryResponseProfile from '../request-params/base-entry-response-profile';\n\nconst SERVICE_NAME: string = 'baseEntry';\n\nexport default class OVPBaseEntryService extends OVPService {\n /**\n * Creates an instance of RequestBuilder for baseentry.getPlaybackContext\n * @function getPlaybackContext\n * @param {string} serviceUrl The service base URL\n * @param {string} ks The ks\n * @returns {RequestBuilder} The request builder\n * @static\n */\n static getPlaybackContext(serviceUrl: string, ks: string): RequestBuilder {\n const headers: Map = new Map();\n const serviceEntryId = ks === '{1:result:ks}' ? '{2:result:objects:0:id}' : '{1:result:objects:0:id}';\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 request.tag = 'baseEntry-getPlaybackContext';\n const contextDataParams = {objectType: 'KalturaContextDataParams', flavorTags: 'all'};\n request.params = {entryId: serviceEntryId, ks: ks, contextDataParams: contextDataParams};\n return request;\n }\n\n /**\n * Creates an instance of RequestBuilder for baseentry.list\n * @function list\n * @param {string} serviceUrl The base URL\n * @param {string} ks The ks\n * @param {string} entryId The entry ID\n * @param {boolean} redirectFromEntryId whether the live entry should continue and play the VOD one after the live stream ends.\n * @returns {RequestBuilder} The request builder\n * @static\n */\n static list(serviceUrl: string, ks: string, entryId: string, redirectFromEntryId: boolean): RequestBuilder {\n const headers: Map = new Map();\n headers.set('Content-Type', 'application/json');\n const request = new RequestBuilder(headers);\n request.service = SERVICE_NAME;\n request.action = 'list';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n request.tag = 'list';\n request.params = OVPBaseEntryService.getEntryListReqParams(entryId, ks, redirectFromEntryId);\n return request;\n }\n\n /**\n * Gets baseentry.list service params\n * @function getEntryListReqParams\n * @param {string} entryId The entry ID\n * @param {string} ks The ks\n * @param {boolean} redirectFromEntryId whether the live entry should continue and play the VOD one after the live stream ends.\n * @returns {{ks: string, filter: {redirectFromEntryId: string}, responseProfile: {fields: string, type: number}}} The service params object\n * @static\n */\n static getEntryListReqParams(entryId: string, ks: string, redirectFromEntryId: boolean): any {\n const filterParams = redirectFromEntryId ? {redirectFromEntryId: entryId} : {idEqual: entryId};\n return {ks: ks, filter: filterParams, responseProfile: new BaseEntryResponseProfile()};\n }\n}\n","//@flow\nimport OVPService from './ovp-service';\nimport RequestBuilder from '../../../util/request-builder';\n\nconst SERVICE_NAME: string = 'metadata_metadata';\n\nexport default class OVPMetadataService extends OVPService {\n /**\n * Creates an instance of RequestBuilder for metadata_metadata.list\n * @function getPlaybackContext\n * @param {string} serviceUrl The service base URL\n * @param {string} ks The ks\n * @param {string} entryId The entry ID\n * @returns {RequestBuilder} The request builder\n * @static\n */\n static list(serviceUrl: string, ks: string, entryId: string): RequestBuilder {\n const headers: Map = new Map();\n headers.set('Content-Type', 'application/json');\n const request = new RequestBuilder(headers);\n request.service = SERVICE_NAME;\n request.action = 'list';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n request.tag = 'metadata_metadata-list';\n const filter = {objectType: 'KalturaMetadataFilter', objectIdEqual: entryId, metadataObjectTypeEqual: '1'};\n request.params = {filter: filter, ks: ks};\n return request;\n }\n}\n","//@flow\nimport ServiceResult from '../../common/base-service-result';\nimport KalturaMediaEntry from './kaltura-media-entry';\n\nexport default class KalturaBaseEntryListResponse extends ServiceResult {\n /**\n * @member - The total count\n * @type {number}\n */\n totalCount: number;\n /**\n * @member - The entries\n * @type {Array}\n */\n entries: Array;\n\n /**\n * @constructor\n * @param {Object} responseObj The json response\n */\n constructor(responseObj: Object) {\n super(responseObj);\n if (!this.hasError) {\n this.totalCount = responseObj.totalCount;\n if (this.totalCount > 0) {\n this.entries = [];\n responseObj.objects.map(entry => this.entries.push(new KalturaMediaEntry(entry)));\n }\n }\n }\n}\n","//@flow\nimport RequestBuilder from '../../../util/request-builder';\nimport OVPBaseEntryService from '../services/base-entry-service';\nimport OVPMetadataService from '../services/meta-data-service';\nimport OVPConfiguration from '../config';\nimport KalturaPlaybackContext from '../response-types/kaltura-playback-context';\nimport KalturaMetadataListResponse from '../response-types/kaltura-metadata-list-response';\nimport KalturaBaseEntryListResponse from '../response-types/kaltura-base-entry-list-response';\nimport KalturaMediaEntry from '../response-types/kaltura-media-entry';\n\ntype OVPMediaEntryLoaderResponse = {\n entry: KalturaMediaEntry,\n playBackContextResult: KalturaPlaybackContext,\n metadataListResult: KalturaMetadataListResponse\n};\nexport type {OVPMediaEntryLoaderResponse};\n\nexport default class OVPMediaEntryLoader implements ILoader {\n _entryId: string;\n _requests: Array;\n _response: any = {};\n\n static get id(): string {\n return 'media';\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n * @boolean {boolean} useExternalCaptions - if we should add captions request to the multirequests.\n */\n constructor(params: Object) {\n this.requests = this.buildRequests(params);\n this._entryId = params.entryId;\n }\n\n set requests(requests: Array) {\n this._requests = requests;\n }\n\n get requests(): Array {\n return this._requests;\n }\n\n set response(response: any) {\n let mediaEntryResponse: KalturaBaseEntryListResponse = new KalturaBaseEntryListResponse(response[0].data);\n this._response.entry = mediaEntryResponse.entries[0];\n this._response.playBackContextResult = new KalturaPlaybackContext(response[1].data);\n this._response.metadataListResult = new KalturaMetadataListResponse(response[2].data);\n }\n\n get response(): OVPMediaEntryLoaderResponse {\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 {\n const config = OVPConfiguration.get();\n const requests: Array = [];\n requests.push(OVPBaseEntryService.list(config.serviceUrl, params.ks, params.entryId, params.redirectFromEntryId));\n requests.push(OVPBaseEntryService.getPlaybackContext(config.serviceUrl, params.ks));\n requests.push(OVPMetadataService.list(config.serviceUrl, params.ks, params.entryId));\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 OVPService from './ovp-service';\nimport RequestBuilder from '../../../util/request-builder';\n\nconst SERVICE_NAME: string = 'session';\n\nexport default class OVPSessionService extends OVPService {\n /**\n * Creates an instance of RequestBuilder for session.startWidgetSession\n * @function anonymousSession\n * @param {string} serviceUrl The service base URL\n * @param {string} widgetId The widget ID\n * @returns {RequestBuilder} The request builder\n * @static\n */\n static anonymousSession(serviceUrl: string, widgetId: string): RequestBuilder {\n const headers: Map = new Map();\n headers.set('Content-Type', 'application/json');\n const request = new RequestBuilder(headers);\n request.service = SERVICE_NAME;\n request.action = 'startWidgetSession';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n request.tag = 'session-startWidget';\n request.params = {widgetId};\n return request;\n }\n}\n","//@flow\nimport OVPSessionService from '../services/session-service';\nimport OVPConfiguration from '../config';\nimport RequestBuilder from '../../../util/request-builder';\n\nexport default class OVPSessionLoader implements ILoader {\n _widgetId: string;\n _requests: Array;\n _response: any = {};\n\n static get id(): string {\n return 'session';\n }\n\n set requests(requests: Array) {\n this._requests = requests;\n }\n\n get requests(): Array {\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 * @constructor\n * @param {Object} params loader params\n */\n constructor(params: Object) {\n this.requests = this.buildRequests(params);\n this._widgetId = params.widgetId;\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 {\n const config = OVPConfiguration.get();\n const requests: Array = [];\n requests.push(OVPSessionService.anonymousSession(config.serviceUrl, params.widgetId));\n return requests;\n }\n\n /**\n * Loader validation function\n * @function\n * @returns {boolean} Is valid\n */\n isValid(): boolean {\n return !!this._widgetId;\n }\n}\n","// @flow\nimport DataLoaderManager from '../../common/data-loader-manager';\nimport OVPService from '../services/ovp-service';\n\n/**\n * OTTDataLoaderManager is a class that handles the OVP data loading\n * @param {string} playerVersion - player version\n * @param {string} partnerId - partner id\n * @param {string} ks - ks\n * @param {ProviderNetworkRetryParameters} [networkRetryConfig] - network retry configuration\n */\nexport default class OVPDataLoaderManager extends DataLoaderManager {\n constructor(playerVersion: string, partnerId: number, ks: string = '', networkRetryConfig: ProviderNetworkRetryParameters) {\n super(networkRetryConfig);\n this._multiRequest = OVPService.getMultiRequest(playerVersion, ks, partnerId);\n }\n}\n","//@flow\nimport OVPService from './ovp-service';\nimport RequestBuilder from '../../../util/request-builder';\nimport BaseEntryResponseProfile from '../request-params/base-entry-response-profile';\n\nconst SERVICE_NAME: string = 'playlist';\n\nexport default class OVPPlaylistService extends OVPService {\n /**\n * Creates an instance of RequestBuilder for playlist.getPlaybackContext\n * @function getPlaybackContext\n * @param {string} serviceUrl The service base URL\n * @param {string} ks The ks\n * @param {string} playlistId The playlist ID\n * @returns {RequestBuilder} The request builder\n * @static\n */\n static execute(serviceUrl: string, ks: string, playlistId: string): RequestBuilder {\n const headers: Map = new Map();\n headers.set('Content-Type', 'application/json');\n const request = new RequestBuilder(headers);\n request.service = SERVICE_NAME;\n request.action = 'execute';\n request.method = 'POST';\n request.url = request.getUrl(serviceUrl);\n request.tag = `${SERVICE_NAME}-execute`;\n request.params = {\n ks: ks,\n id: playlistId,\n responseProfile: new BaseEntryResponseProfile()\n };\n return request;\n }\n\n /**\n * Creates an instance of RequestBuilder for playlist.list\n * @function list\n * @param {string} serviceUrl The base URL\n * @param {string} ks The ks\n * @param {string} playlistId The playlist ID\n * @returns {RequestBuilder} The request builder\n * @static\n */\n static get(serviceUrl: string, ks: string, playlistId: string): RequestBuilder {\n const headers: Map = 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.tag = `${SERVICE_NAME}-get`;\n request.params = {\n ks: ks,\n id: playlistId,\n responseProfile: {\n fields: 'id,name,description,thumbnailUrl',\n type: 1\n }\n };\n return request;\n }\n}\n","//@flow\n\nexport default class KalturaPlaylist {\n /**\n * @member - playlist id\n * @type {string}\n */\n id: string;\n /**\n * @member - playlist name\n * @type {string}\n */\n name: string;\n /**\n * @member - playlist description\n * @type {string}\n */\n description: string;\n /**\n * @member - playlist poster image\n * @type {string}\n */\n poster: string;\n\n /**\n * @constructor\n * @param {Object} playlist - The json response\n */\n constructor(playlist: Object) {\n this.id = playlist.id;\n this.name = playlist.name;\n this.description = playlist.description;\n this.poster = playlist.thumbnailUrl;\n }\n}\n","//@flow\nimport ServiceResult from '../../common/base-service-result';\nimport KalturaMediaEntry from './kaltura-media-entry';\n\nexport default class KalturaMediaEntries extends ServiceResult {\n /**\n * @member - The entries\n * @type {Array}\n */\n entries: Array;\n\n /**\n * @constructor\n * @param {Object} responseObj The json response\n */\n constructor(responseObj: Object) {\n super(responseObj);\n if (!this.hasError) {\n this.entries = [];\n responseObj.map(entry => this.entries.push(new KalturaMediaEntry(entry)));\n }\n }\n}\n","//@flow\nimport RequestBuilder from '../../../util/request-builder';\nimport OVPPlaylistService from '../services/playlist-service';\nimport OVPConfiguration from '../config';\nimport KalturaPlaylist from '../response-types/kaltura-playlist';\nimport KalturaMediaEntries from '../response-types/kaltura-media-entries';\n\nexport default class OVPPlaylistLoader implements ILoader {\n _playlistId: string;\n _requests: Array;\n _response: any = {};\n\n static get id(): string {\n return 'playlist';\n }\n\n /**\n * @constructor\n * @param {Object} params loader params\n */\n constructor(params: Object) {\n this.requests = this.buildRequests(params);\n this._playlistId = params.playlistId;\n }\n\n set requests(requests: Array) {\n this._requests = requests;\n }\n\n get requests(): Array {\n return this._requests;\n }\n\n set response(response: any) {\n this._response.playlistData = new KalturaPlaylist(response[0].data);\n this._response.playlistItems = new KalturaMediaEntries(response[1].data);\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 {\n const config = OVPConfiguration.get();\n const requests: Array = [];\n requests.push(OVPPlaylistService.get(config.serviceUrl, params.ks, params.playlistId));\n requests.push(OVPPlaylistService.execute(config.serviceUrl, params.ks, params.playlistId));\n return requests;\n }\n\n /**\n * Loader validation function\n * @function\n * @returns {boolean} Is valid\n */\n isValid(): boolean {\n return !!this._playlistId;\n }\n}\n","//@flow\nimport RequestBuilder from '../../../util/request-builder';\nimport OVPConfiguration from '../config';\nimport OVPBaseEntryService from '../services/base-entry-service';\nimport KalturaBaseEntryListResponse from '../response-types/kaltura-base-entry-list-response';\n\nexport default class OVPEntryListLoader implements ILoader {\n _entries: Array;\n _requests: Array;\n _response: any = {playlistItems: {entries: []}};\n\n static get id(): string {\n return 'entry_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) {\n this._requests = requests;\n }\n\n get requests(): Array {\n return this._requests;\n }\n\n set response(response: any) {\n let mediaEntryResponse: KalturaBaseEntryListResponse;\n response.forEach(item => {\n mediaEntryResponse = new KalturaBaseEntryListResponse(item.data);\n this._response.playlistItems.entries.push(mediaEntryResponse.entries[0]);\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 {\n const config = OVPConfiguration.get();\n const requests: Array = [];\n params.entries.forEach(entry => {\n requests.push(OVPBaseEntryService.list(config.serviceUrl, params.ks, entry.entryId || entry, params.redirectFromEntryId));\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 OVPConfiguration from './config';\nimport OVPProviderParser from './provider-parser';\nimport KalturaMediaEntry from './response-types/kaltura-media-entry';\nimport OVPMediaEntryLoader from './loaders/media-entry-loader';\nimport OVPSessionLoader from './loaders/session-loader';\nimport OVPDataLoaderManager from './loaders/data-loader-manager';\nimport OVPPlaylistLoader from './loaders/playlist-loader';\nimport BaseProvider from '../common/base-provider';\nimport MediaEntry from '../../entities/media-entry';\nimport OVPEntryListLoader from './loaders/entry-list-loader';\nimport Error from '../../util/error/error';\n\nexport default class OVPProvider extends BaseProvider {\n _filterOptionsConfig: ProviderFilterOptionsObject = {redirectFromEntryId: true};\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('OVPProvider');\n OVPConfiguration.set(options.env);\n this._setFilterOptionsConfig(options.filterOptions);\n this._networkRetryConfig = Object.assign(this._networkRetryConfig, options.networkRetryParameters);\n }\n\n /**\n * Gets the backend media config.\n * @param {OVPProviderMediaInfoObject} mediaInfo - ovp media info\n * @returns {Promise} - The provider media config\n */\n getMediaConfig(mediaInfo: OVPProviderMediaInfoObject): Promise {\n if (mediaInfo.ks) {\n this.ks = mediaInfo.ks;\n this._isAnonymous = false;\n }\n if (this.widgetId !== this.defaultWidgetId) {\n this._isAnonymous = false;\n }\n this._dataLoader = new OVPDataLoaderManager(this.playerVersion, 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(OVPSessionLoader, {widgetId: this.widgetId});\n }\n const redirectFromEntryId = this._getEntryRedirectFilter(mediaInfo);\n this._dataLoader.add(OVPMediaEntryLoader, {entryId, ks, redirectFromEntryId});\n return this._dataLoader.fetchData().then(\n response => {\n try {\n resolve(this._parseDataFromResponse(response));\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 _getEntryRedirectFilter(mediaInfo: Object): boolean {\n return typeof mediaInfo.redirectFromEntryId === 'boolean'\n ? mediaInfo.redirectFromEntryId\n : typeof this._filterOptionsConfig.redirectFromEntryId === 'boolean'\n ? this._filterOptionsConfig.redirectFromEntryId\n : true;\n }\n\n _setFilterOptionsConfig(options?: ProviderFilterOptionsObject): void {\n if (options && typeof options.redirectFromEntryId == 'boolean') {\n this._filterOptionsConfig.redirectFromEntryId = options.redirectFromEntryId;\n }\n }\n\n _parseDataFromResponse(data: Map): 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\n if (this.uiConfId) {\n mediaConfig.session.uiConfId = this.uiConfId;\n }\n if (data) {\n if (data.has(OVPSessionLoader.id)) {\n const sessionLoader = data.get(OVPSessionLoader.id);\n if (sessionLoader && sessionLoader.response) {\n mediaConfig.session.ks = sessionLoader.response;\n if (this.widgetId !== this.defaultWidgetId) {\n this.ks = mediaConfig.session.ks;\n }\n }\n } else {\n mediaConfig.session.ks = this.ks;\n }\n if (data.has(OVPMediaEntryLoader.id)) {\n const mediaLoader = data.get(OVPMediaEntryLoader.id);\n if (mediaLoader && mediaLoader.response) {\n const response = (mediaLoader: OVPMediaEntryLoader).response;\n if (OVPProviderParser.hasBlockAction(response)) {\n throw new Error(Error.Severity.CRITICAL, Error.Category.SERVICE, Error.Code.BLOCK_ACTION, {\n action: OVPProviderParser.getBlockAction(response),\n messages: OVPProviderParser.getErrorMessages(response)\n });\n }\n const mediaEntry = OVPProviderParser.getMediaEntry(this.isAnonymous ? '' : this.ks, this.partnerId, this.uiConfId, response);\n Object.assign(mediaConfig.sources, this._getSourcesObject(mediaEntry));\n this._verifyMediaStatus(mediaEntry);\n this._verifyHasSources(mediaConfig.sources);\n }\n }\n }\n this._logger.debug('Data parsing finished', mediaConfig);\n return mediaConfig;\n }\n\n /**\n * Checks media is ready for playback (not being imported or converted)\n * @param {MediaEntry} mediaEntry - the media entry info\n * @returns {void}\n */\n _verifyMediaStatus(mediaEntry: MediaEntry) {\n if ([KalturaMediaEntry.EntryStatus.IMPORT, KalturaMediaEntry.EntryStatus.PRECONVERT].includes(mediaEntry.status)) {\n throw new Error(Error.Severity.CRITICAL, Error.Category.SERVICE, Error.Code.MEDIA_STATUS_NOT_READY, {\n messages: `Status of entry id ${mediaEntry.id} is ${mediaEntry.status} and is still being imported or converted`,\n data: {status}\n });\n }\n }\n /**\n * Gets the backend playlist config.\n * @param {ProviderPlaylistInfoObject} playlistInfo - ovp playlist info\n * @returns {Promise} - The provider playlist config\n */\n getPlaylistConfig(playlistInfo: ProviderPlaylistInfoObject): Promise {\n if (playlistInfo.ks) {\n this.ks = playlistInfo.ks;\n this._isAnonymous = false;\n }\n if (this.widgetId !== this.defaultWidgetId) {\n this._isAnonymous = false;\n }\n this._dataLoader = new OVPDataLoaderManager(this.playerVersion, this.partnerId, this.ks, this._networkRetryConfig);\n return new Promise((resolve, reject) => {\n const playlistId = playlistInfo.playlistId;\n if (playlistId) {\n let ks: string = this.ks;\n if (!ks) {\n ks = '{1:result:ks}';\n this._dataLoader.add(OVPSessionLoader, {widgetId: this.widgetId});\n }\n this._dataLoader.add(OVPPlaylistLoader, {playlistId, ks});\n this._dataLoader.fetchData().then(\n response => {\n resolve(this._parsePlaylistDataFromResponse(response));\n },\n err => {\n reject(err);\n }\n );\n } else {\n reject({success: false, data: 'Missing mandatory parameter'});\n }\n });\n }\n\n _parsePlaylistDataFromResponse(data: Map): ProviderPlaylistObject {\n this._logger.debug('Data parsing started');\n const playlistConfig: ProviderPlaylistObject = this._getPlaylistObject();\n if (data && data.has(OVPPlaylistLoader.id)) {\n const playlistLoader = data.get(OVPPlaylistLoader.id);\n if (playlistLoader && playlistLoader.response) {\n const playlist = OVPProviderParser.getPlaylist(playlistLoader.response);\n playlistConfig.id = playlist.id;\n playlistConfig.poster = playlist.poster;\n playlistConfig.metadata.name = playlist.name;\n playlistConfig.metadata.description = playlist.description;\n playlist.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 /**\n * Gets playlist config from entry list.\n * @param {ProviderEntryListObject} entryListInfo - ovp entry list info\n * @returns {Promise} - The provider playlist config\n */\n getEntryListConfig(entryListInfo: ProviderEntryListObject): Promise {\n if (entryListInfo.ks) {\n this.ks = entryListInfo.ks;\n this._isAnonymous = false;\n }\n if (this.widgetId !== this.defaultWidgetId) {\n this._isAnonymous = false;\n }\n this._dataLoader = new OVPDataLoaderManager(this.playerVersion, 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(OVPSessionLoader, {widgetId: this.widgetId});\n }\n const redirectFromEntryId = this._getEntryRedirectFilter(entryListInfo);\n this._dataLoader.add(OVPEntryListLoader, {entries, ks, redirectFromEntryId});\n this._dataLoader.fetchData().then(\n response => {\n resolve(this._parseEntryListDataFromResponse(response));\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): ProviderPlaylistObject {\n this._logger.debug('Data parsing started');\n const playlistConfig: ProviderPlaylistObject = this._getPlaylistObject();\n if (data && data.has(OVPEntryListLoader.id)) {\n const playlistLoader = data.get(OVPEntryListLoader.id);\n if (playlistLoader && playlistLoader.response) {\n const entryList = OVPProviderParser.getEntryList(playlistLoader.response);\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 _getPlaylistObject(): ProviderPlaylistObject {\n return {\n id: '',\n metadata: {\n name: '',\n description: ''\n },\n poster: '',\n items: []\n };\n }\n\n _getDefaultSourcesObject(): ProviderMediaConfigSourcesObject {\n return {\n hls: [],\n dash: [],\n progressive: [],\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 (mediaEntry.sources.captions) {\n sourcesObject.captions = mediaEntry.sources.captions;\n }\n if (mediaEntry.metadata && typeof mediaEntry.metadata.tags === 'string' && mediaEntry.metadata.tags.indexOf('360') > -1) {\n sourcesObject.vr = {};\n }\n Object.assign(sourcesObject.metadata, mediaEntry.metadata);\n return sourcesObject;\n }\n}\n","// @flow\nimport OVPProvider from './provider';\n\ndeclare var __VERSION__: string;\ndeclare var __NAME__: string;\n\nconst NAME = __NAME__ + '-ovp';\nconst VERSION = __VERSION__;\n\nexport {OVPProvider as Provider, NAME, VERSION};\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/playkit-stats-service.js b/dist/playkit-stats-service.js index 3b89c0bf..67107a61 100644 --- a/dist/playkit-stats-service.js +++ b/dist/playkit-stats-service.js @@ -1,7 +1,7 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.stats=t():(e.playkit=e.playkit||{},e.playkit.services=e.playkit.services||{},e.playkit.services.stats=t())}(this,function(){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.i=function(e){return e},t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=20)}([function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:new Map;n(this,e),this._attemptCounter=1,this.headers=t}return o(e,[{key:"getUrl",value:function(e){return e+"/service/"+this.service+(this.action?"/action/"+this.action:"")}},{key:"doHttpRequest",value:function(){var e=this,t=new Promise(function(t,r){e._requestPromise={resolve:t,reject:r}});return this.url||this._requestPromise.reject(new u.default(u.default.Severity.CRITICAL,u.default.Category.NETWORK,u.default.Code.MALFORMED_DATA_URI,{url:this.url})),this._createXHR(),t}},{key:"_createXHR",value:function(){var e=this,t=new XMLHttpRequest;t.onreadystatechange=function(){if(4===t.readyState&&200===t.status)try{var r=JSON.parse(t.responseText);return e.responseHeaders=e._getResponseHeaders(t),e._requestPromise.resolve(r)}catch(r){e._requestPromise.reject(e._createError(t,u.default.Code.BAD_SERVER_RESPONSE,{text:t.responseText}))}},t.open(this.method,this.url,this.retryConfig.async),this.retryConfig.async&&this.retryConfig.timeout&&(t.timeout=this.retryConfig.timeout);var r=performance.now();t.ontimeout=function(){e._handleError(t,u.default.Code.TIMEOUT,{timeout:(performance.now()-r)/1e3,statusText:t.statusText})},t.onerror=t.onabort=function(){e._handleError(t,u.default.Code.HTTP_ERROR,{text:t.responseText,statusText:t.statusText})},this.headers.forEach(function(e,r){t.setRequestHeader(r,e)}),t.send(this.params)}},{key:"_getResponseHeaders",value:function(e){return e.getAllResponseHeaders().split("\n").filter(function(e){return 0===e.toLowerCase().indexOf("x-")})}},{key:"_handleError",value:function(e,t,r){var n=this._createError(e,t,r);if(e.onreadystatechange=function(){},e.onerror=function(){},e.ontimeout=function(){},e.onabort=function(){},!(this.retryConfig.maxAttempts&&this._attemptCounter3&&void 0!==arguments[3]?arguments[3]:{};n(this,e),this.severity=t,this.category=r,this.code=i,this.data=u,(0,o.getLogLevel)("Error")!==o.LogLevel.OFF&&e._logger.error("Category:"+r+" | Code:"+i+" |",u)};c.Severity=u.Severity,c.Category=s.Category,c.Code=a.Code,c._logger=(0,i.default)("Error"),t.default=c},function(e,t,r){"use strict";function n(e){s.setHandler(function(t,r){return e(t,r)})}function o(e){return e?s.get(e):s}function i(e){return o(e).getLevel()}function u(e,t){o(t).setLevel(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.setLogHandler=t.setLogLevel=t.getLogLevel=t.LogLevel=void 0;var a=r(10),s=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t}(a),c={DEBUG:s.DEBUG,INFO:s.INFO,TIME:s.TIME,WARN:s.WARN,ERROR:s.ERROR,OFF:s.OFF};s.useDefaults({defaultLevel:s.ERROR}),t.default=o,t.LogLevel=c,t.getLogLevel=i,t.setLogLevel=u,t.setLogHandler=n},function(e,t,r){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function e(t){n(this,e),this.hasError=!1,"KalturaAPIException"===t.objectType?(this.hasError=!0,this.error=new i(t.code,t.message)):t.error&&"KalturaAPIException"===t.error.objectType?(this.hasError=!0,this.error=new i(t.error.code,t.error.message)):this.data=t};t.default=o;var i=function e(t,r){n(this,e),this.code=t,this.message=r}},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function u(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.MultiRequestResult=void 0;var s=function(){function e(e,t){for(var r=0;r0?t.slice(0):[],r.forEach(function(t,o){("object"===(void 0===t?"undefined":n(t))&&t!=={}||Array.isArray(t)&&t.length>0)&&(r[o]=e(t))})):"object"===(void 0===t?"undefined":n(t))?(r=Object.assign({},t),Object.keys(r).forEach(function(t){("object"===n(r[t])&&r[t]!=={}||Array.isArray(r[t])&&r[t].length>0)&&(r[t]=e(r[t]))})):r=t,r};t.clone=o},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={NETWORK:1,SERVICE:2,PROVIDER:3};t.Category=n},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={UNSUPPORTED_SCHEME:1e3,BAD_HTTP_STATUS:1001,HTTP_ERROR:1002,TIMEOUT:1003,MALFORMED_DATA_URI:1004,BAD_SERVER_RESPONSE:1005,MULTIREQUEST_API_ERROR:1006,API_RESPONSE_MISMATCH:1007,ERROR:2e3,BLOCK_ACTION:2001,MEDIA_STATUS_NOT_READY:2002,MISSING_MANDATORY_PARAMS:3e3,MISSING_PLAY_SOURCE:3001,METHOD_NOT_IMPLEMENTED:3002};t.Code=n},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={RECOVERABLE:1,CRITICAL:2};t.Severity=n},function(e,t,r){var n,o;/*! +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.stats=t():(e.playkit=e.playkit||{},e.playkit.services=e.playkit.services||{},e.playkit.services.stats=t())}(window,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=11)}([function(e,t,r){"use strict";r.d(t,"a",(function(){return a}));var n=r(2);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var a=function e(t,r,i){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};o(this,e),this.severity=t,this.category=r,this.code=i,this.data=a,Object(n.c)("Error")!==n.a.OFF&&e._logger.error("Category:".concat(r," | Code:").concat(i," |"),a)};i(a,"Severity",{RECOVERABLE:1,CRITICAL:2}),i(a,"Category",{NETWORK:1,SERVICE:2,PROVIDER:3}),i(a,"Code",{UNSUPPORTED_SCHEME:1e3,BAD_HTTP_STATUS:1001,HTTP_ERROR:1002,TIMEOUT:1003,MALFORMED_DATA_URI:1004,BAD_SERVER_RESPONSE:1005,MULTIREQUEST_API_ERROR:1006,API_RESPONSE_MISMATCH:1007,ERROR:2e3,BLOCK_ACTION:2001,MEDIA_STATUS_NOT_READY:2002,MISSING_MANDATORY_PARAMS:3e3,MISSING_PLAY_SOURCE:3001,METHOD_NOT_IMPLEMENTED:3002}),i(a,"_logger",Object(n.b)("Error"))},function(e,t,r){var n,o; +/*! * js-logger - http://github.com/jonnyreeves/js-logger * Jonny Reeves, http://jonnyreeves.co.uk/ * js-logger may be freely distributed under the MIT license. - */ -!function(i){"use strict";var u={};u.VERSION="1.4.1";var a,s={},c=function(e,t){return function(){return t.apply(e,arguments)}},l=function(){var e,t,r=arguments,n=r[0];for(t=1;t=t.value},debug:function(){this.invoke(u.DEBUG,arguments)},info:function(){this.invoke(u.INFO,arguments)},warn:function(){this.invoke(u.WARN,arguments)},error:function(){this.invoke(u.ERROR,arguments)},time:function(e){"string"==typeof e&&e.length>0&&this.invoke(u.TIME,[e,"start"])},timeEnd:function(e){"string"==typeof e&&e.length>0&&this.invoke(u.TIME,[e,"end"])},invoke:function(e,t){a&&this.enabledFor(e)&&a(t,l({level:e},this.context))}};var p=new d({filterLevel:u.OFF});!function(){var e=u;e.enabledFor=c(p,p.enabledFor),e.debug=c(p,p.debug),e.time=c(p,p.time),e.timeEnd=c(p,p.timeEnd),e.info=c(p,p.info),e.warn=c(p,p.warn),e.error=c(p,p.error),e.log=e.info}(),u.setHandler=function(e){a=e},u.setLevel=function(e){p.setLevel(e);for(var t in s)s.hasOwnProperty(t)&&s[t].setLevel(e)},u.getLevel=function(){return p.getLevel()},u.get=function(e){return s[e]||(s[e]=new d(l({name:e},p.context)))},u.createDefaultHandler=function(e){e=e||{},e.formatter=e.formatter||function(e,t){t.name&&e.unshift("["+t.name+"]")};var t={},r=function(e,t){Function.prototype.apply.call(e,console,t)};return"undefined"==typeof console?function(){}:function(n,o){n=Array.prototype.slice.call(n);var i,a=console.log;o.level===u.TIME?(i=(o.name?"["+o.name+"] ":"")+n[0],"start"===n[1]?console.time?console.time(i):t[i]=(new Date).getTime():console.timeEnd?console.timeEnd(i):r(a,[i+": "+((new Date).getTime()-t[i])+"ms"])):(o.level===u.WARN&&console.warn?a=console.warn:o.level===u.ERROR&&console.error?a=console.error:o.level===u.INFO&&console.info?a=console.info:o.level===u.DEBUG&&console.debug&&(a=console.debug),e.formatter(n,o),r(a,n))}},u.useDefaults=function(e){u.setLevel(e&&e.defaultLevel||u.DEBUG),u.setHandler(u.createDefaultHandler(e))},n=u,void 0!==(o="function"==typeof n?n.call(t,r,t,e):n)&&(e.exports=o)}()},,function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var r=0;r=t.value},trace:function(){this.invoke(u.TRACE,arguments)},debug:function(){this.invoke(u.DEBUG,arguments)},info:function(){this.invoke(u.INFO,arguments)},warn:function(){this.invoke(u.WARN,arguments)},error:function(){this.invoke(u.ERROR,arguments)},time:function(e){"string"==typeof e&&e.length>0&&this.invoke(u.TIME,[e,"start"])},timeEnd:function(e){"string"==typeof e&&e.length>0&&this.invoke(u.TIME,[e,"end"])},invoke:function(e,t){a&&this.enabledFor(e)&&a(t,f({level:e},this.context))}};var y,v=new p({filterLevel:u.OFF});(y=u).enabledFor=s(v,v.enabledFor),y.trace=s(v,v.trace),y.debug=s(v,v.debug),y.time=s(v,v.time),y.timeEnd=s(v,v.timeEnd),y.info=s(v,v.info),y.warn=s(v,v.warn),y.error=s(v,v.error),y.log=y.info,u.setHandler=function(e){a=e},u.setLevel=function(e){for(var t in v.setLevel(e),c)c.hasOwnProperty(t)&&c[t].setLevel(e)},u.getLevel=function(){return v.getLevel()},u.get=function(e){return c[e]||(c[e]=new p(f({name:e},v.context)))},u.createDefaultHandler=function(e){(e=e||{}).formatter=e.formatter||function(e,t){t.name&&e.unshift("["+t.name+"]")};var t={},r=function(e,t){Function.prototype.apply.call(e,console,t)};return"undefined"==typeof console?function(){}:function(n,o){n=Array.prototype.slice.call(n);var i,a=console.log;o.level===u.TIME?(i=(o.name?"["+o.name+"] ":"")+n[0],"start"===n[1]?console.time?console.time(i):t[i]=(new Date).getTime():console.timeEnd?console.timeEnd(i):r(a,[i+": "+((new Date).getTime()-t[i])+"ms"])):(o.level===u.WARN&&console.warn?a=console.warn:o.level===u.ERROR&&console.error?a=console.error:o.level===u.INFO&&console.info?a=console.info:o.level===u.DEBUG&&console.debug?a=console.debug:o.level===u.TRACE&&console.trace&&(a=console.trace),e.formatter(n,o),r(a,n))}},u.useDefaults=function(e){u.setLevel(e&&e.defaultLevel||u.DEBUG),u.setHandler(u.createDefaultHandler(e))},void 0===(o="function"==typeof(n=u)?n.call(t,r,t,e):n)||(e.exports=o)}()},function(e,t,r){"use strict";r.d(t,"a",(function(){return o})),r.d(t,"c",(function(){return a}));var n=r(1),o={DEBUG:n.DEBUG,INFO:n.INFO,TIME:n.TIME,WARN:n.WARN,ERROR:n.ERROR,OFF:n.OFF};function i(e){return e?n.get(e):n}function a(e){return i(e).getLevel()}n.useDefaults({defaultLevel:n.ERROR}),t.b=i},function(e,t,r){"use strict";r.d(t,"a",(function(){return u}));var n=r(0);function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:new Map;o(this,e),a(this,"retryConfig",{async:!0,timeout:0,maxAttempts:4}),a(this,"_attemptCounter",1),this.headers=t}var t,r,u;return t=e,(r=[{key:"getUrl",value:function(e){return e+"/service/"+this.service+(this.action?"/action/"+this.action:"")}},{key:"doHttpRequest",value:function(){var e=this,t=new Promise((function(t,r){e._requestPromise={resolve:t,reject:r}}));return this.url||this._requestPromise.reject(new n.a(n.a.Severity.CRITICAL,n.a.Category.NETWORK,n.a.Code.MALFORMED_DATA_URI,{url:this.url})),this._createXHR(),t}},{key:"_createXHR",value:function(){var e=this,t=new XMLHttpRequest;t.onreadystatechange=function(){if(4===t.readyState&&200===t.status)try{var r=JSON.parse(t.responseText);return e.responseHeaders=e._getResponseHeaders(t),e._requestPromise.resolve(r)}catch(r){e._requestPromise.reject(e._createError(t,n.a.Code.BAD_SERVER_RESPONSE,{text:t.responseText}))}},t.open(this.method,this.url,this.retryConfig.async),this.retryConfig.async&&this.retryConfig.timeout&&(t.timeout=this.retryConfig.timeout);var r=performance.now();t.ontimeout=function(){e._handleError(t,n.a.Code.TIMEOUT,{timeout:(performance.now()-r)/1e3,statusText:t.statusText})},t.onerror=t.onabort=function(){e._handleError(t,n.a.Code.HTTP_ERROR,{text:t.responseText,statusText:t.statusText})},this.headers.forEach((function(e,r){t.setRequestHeader(r,e)})),t.send(this.params)}},{key:"_getResponseHeaders",value:function(e){return e.getAllResponseHeaders().split("\n").filter((function(e){return 0===e.toLowerCase().indexOf("x-")}))}},{key:"_handleError",value:function(e,t,r){var n=this._createError(e,t,r);if(e.onreadystatechange=function(){},e.onerror=function(){},e.ontimeout=function(){},e.onabort=function(){},!(this.retryConfig.maxAttempts&&this._attemptCounter0?t.slice(0):[]).forEach((function(t,o){("object"===n(t)&&t!=={}||Array.isArray(t)&&t.length>0)&&(r[o]=e(t))})):"object"===n(t)?(r=Object.assign({},t),Object.keys(r).forEach((function(t){("object"===n(r[t])&&r[t]!=={}||Array.isArray(r[t])&&r[t].length>0)&&(r[t]=e(r[t]))}))):r=t,r}},function(e,t,r){"use strict";r.d(t,"a",(function(){return m}));var n=r(3),o=r(2);function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function e(t){var r,n,o;i(this,e),o=!1,(n="hasError")in(r=this)?Object.defineProperty(r,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[n]=o,"KalturaAPIException"===t.objectType?(this.hasError=!0,this.error=new u(t.code,t.message)):t.error&&"KalturaAPIException"===t.error.objectType?(this.hasError=!0,this.error=new u(t.error.code,t.error.message)):this.data=t},u=function e(t,r){i(this,e),this.code=t,this.message=r},c=r(0);function s(e){return(s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var r=0;r} headers The request headers\n */\n\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\n /**\n * @description network retry configuration\n * @memberof RequestBuilder\n * @type {ProviderNetworkRetryParameters}\n */\n\n /**\n * @memberof - Service tag\n * @type {string}\n */\n\n /**\n * @memberof - Service URL\n * @type {string}\n */\n\n /**\n * @member - Service params\n * @type {any}\n */\n\n /**\n * @member - Service name\n * @type {string}\n */\n function RequestBuilder() {\n var headers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Map();\n\n _classCallCheck(this, RequestBuilder);\n\n this._attemptCounter = 1;\n\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\n\n /**\n * @description number of xhr attempts for the same multi - request.\n * @memberof RequestBuilder\n * @type {number}\n * @private\n */\n\n /**\n * @memberof - the response headers of the arra\n * @type {Array}\n */\n\n /**\n * @memberof - Service method (POST,GET,DELETE etc..)\n * @type {string}\n */\n\n /**\n * @memberof - Service headers\n * @type {Map}\n */\n\n /**\n * @member - Service action\n * @type {string}\n */\n\n\n _createClass(RequestBuilder, [{\n key: 'getUrl',\n value: function getUrl(serviceUrl) {\n return serviceUrl + '/service/' + this.service + (this.action ? '/action/' + this.action : '');\n }\n\n /**\n * Executes service\n * @function doHttpRequest\n * @returns {Promise.} Service response as promise\n */\n\n }, {\n key: 'doHttpRequest',\n value: function doHttpRequest() {\n var _this = this;\n\n var promise = new Promise(function (resolve, reject) {\n _this._requestPromise = {\n resolve: resolve,\n reject: reject\n };\n });\n if (!this.url) {\n this._requestPromise.reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, _error2.default.Code.MALFORMED_DATA_URI, {\n url: this.url\n }));\n }\n this._createXHR();\n return promise;\n }\n }, {\n key: '_createXHR',\n value: function _createXHR() {\n var _this2 = this;\n\n var request = new XMLHttpRequest();\n request.onreadystatechange = function () {\n if (request.readyState === 4) {\n if (request.status === 200) {\n try {\n var response = JSON.parse(request.responseText);\n _this2.responseHeaders = _this2._getResponseHeaders(request);\n // the promise returns the response for backwards compatibility\n return _this2._requestPromise.resolve(response);\n } catch (error) {\n _this2._requestPromise.reject(_this2._createError(request, _error2.default.Code.BAD_SERVER_RESPONSE, {\n text: request.responseText\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 var requestTime = performance.now();\n request.ontimeout = function () {\n _this2._handleError(request, _error2.default.Code.TIMEOUT, {\n timeout: (performance.now() - requestTime) / 1000,\n statusText: request.statusText\n });\n };\n request.onerror = request.onabort = function () {\n _this2._handleError(request, _error2.default.Code.HTTP_ERROR, {\n text: request.responseText,\n statusText: request.statusText\n });\n };\n this.headers.forEach(function (value, key) {\n request.setRequestHeader(key, value);\n });\n request.send(this.params);\n }\n }, {\n key: '_getResponseHeaders',\n value: function _getResponseHeaders(request) {\n return request.getAllResponseHeaders().split('\\n').filter(function (header) {\n return header.toLowerCase().indexOf(KALTURA_HEADER_PREFIX) === 0;\n });\n }\n }, {\n key: '_handleError',\n value: function _handleError(request, code, data) {\n var 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 key: '_createError',\n value: function _createError(request, code, data) {\n Object.assign(data, {\n url: this.url,\n headers: this._getResponseHeaders(request),\n attempt: this._attemptCounter\n });\n return new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, code, data);\n }\n }]);\n\n return RequestBuilder;\n}();\n\nexports.default = RequestBuilder;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.OVPConfiguration = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _clone = __webpack_require__(6);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar defaultConfig = {\n serviceUrl: 'https://cdnapisec.kaltura.com/api_v3',\n cdnUrl: 'https://cdnapisec.kaltura.com',\n serviceParams: {\n apiVersion: '3.3.0',\n format: 1\n },\n useApiCaptions: true\n};\n\nvar OVPConfiguration = function () {\n function OVPConfiguration() {\n _classCallCheck(this, OVPConfiguration);\n }\n\n _createClass(OVPConfiguration, null, [{\n key: 'set',\n value: function set(clientConfig) {\n if (clientConfig) {\n Object.assign(defaultConfig, clientConfig);\n }\n }\n }, {\n key: 'get',\n value: function get() {\n return (0, _clone.clone)(defaultConfig);\n }\n }]);\n\n return OVPConfiguration;\n}();\n\nexports.default = OVPConfiguration;\nexports.OVPConfiguration = OVPConfiguration;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _logger = __webpack_require__(3);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _severity = __webpack_require__(9);\n\nvar _code = __webpack_require__(8);\n\nvar _category = __webpack_require__(7);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CLASS_NAME = 'Error';\n\n/**\n * @classdesc This is a description of the error class.\n */\n\nvar Error =\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\n/**\n * @enum {number}\n */\n\n/**\n * @enum {number}\n */\nfunction Error(severity, category, code) {\n var data = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n _classCallCheck(this, Error);\n\n this.severity = severity;\n this.category = category;\n this.code = code;\n this.data = data;\n if ((0, _logger.getLogLevel)(CLASS_NAME) !== _logger.LogLevel.OFF) {\n Error._logger.error('Category:' + category + ' | Code:' + code + ' |', data);\n }\n}\n/**\n * @enum {number}\n */\n;\n\nError.Severity = _severity.Severity;\nError.Category = _category.Category;\nError.Code = _code.Code;\nError._logger = (0, _logger2.default)(CLASS_NAME);\nexports.default = Error;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.setLogHandler = exports.setLogLevel = exports.getLogLevel = exports.LogLevel = undefined;\n\nvar _jsLogger = __webpack_require__(10);\n\nvar JsLogger = _interopRequireWildcard(_jsLogger);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar LogLevel = {\n DEBUG: JsLogger.DEBUG,\n INFO: JsLogger.INFO,\n TIME: JsLogger.TIME,\n WARN: JsLogger.WARN,\n ERROR: JsLogger.ERROR,\n OFF: JsLogger.OFF\n};\n\n\nJsLogger.useDefaults({ defaultLevel: JsLogger.ERROR });\n\n/**\n * sets the logger handler\n * @param {LogHandlerType} handler - the log level\n * @returns {void}\n */\nfunction setLogHandler(handler) {\n JsLogger.setHandler(function (messages, context) {\n return handler(messages, context);\n });\n}\n/**\n * get a logger\n * @param {?string} name - the logger name\n * @returns {Object} - the logger class\n */\nfunction getLogger(name) {\n if (!name) {\n return JsLogger;\n }\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) {\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, name) {\n getLogger(name).setLevel(level);\n}\n\nexports.default = getLogger;\nexports.LogLevel = LogLevel;\nexports.getLogLevel = getLogLevel;\nexports.setLogLevel = setLogLevel;\nexports.setLogHandler = setLogHandler;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ServiceResult =\n\n/**\n * @constructor\n * @param {Object} response - Service response\n */\n\n/**\n * @member - The service error\n * @type {ServiceError}\n */\n\n/**\n * @member - The service result data\n * @type {Object}\n */\nfunction ServiceResult(response) {\n _classCallCheck(this, ServiceResult);\n\n this.hasError = false;\n\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 * @member - Is service returned an error\n * @type {boolean}\n */\n;\n\nexports.default = ServiceResult;\n\nvar ServiceError =\n\n/**\n * @constructor\n * @param {string} code - The result code\n * @param {string} message - The result message\n */\n\n/**\n * @member - The error code\n * @type {string}\n */\nfunction ServiceError(code, message) {\n _classCallCheck(this, ServiceError);\n\n this.code = code;\n this.message = message;\n}\n/**\n * @member - The error message\n * @type {string}\n */\n;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.MultiRequestResult = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _logger = __webpack_require__(3);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _baseServiceResult = __webpack_require__(4);\n\nvar _baseServiceResult2 = _interopRequireDefault(_baseServiceResult);\n\nvar _error = __webpack_require__(2);\n\nvar _error2 = _interopRequireDefault(_error);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MultiRequestBuilder = function (_RequestBuilder) {\n _inherits(MultiRequestBuilder, _RequestBuilder);\n\n function MultiRequestBuilder() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, MultiRequestBuilder);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = MultiRequestBuilder.__proto__ || Object.getPrototypeOf(MultiRequestBuilder)).call.apply(_ref, [this].concat(args))), _this), _this.requests = [], _temp), _possibleConstructorReturn(_this, _ret);\n }\n /**\n * @memberof - MultiRequestBuilder\n * @type {Array}\n */\n\n\n _createClass(MultiRequestBuilder, [{\n key: 'add',\n\n /**\n * Adds request to requests array\n * @function add\n * @param {RequestBuilder} request The request\n * @returns {MultiRequestBuilder} The multiRequest\n */\n value: function add(request) {\n this.requests.push(request);\n var requestParams = {};\n var serviceDef = { service: request.service, action: request.action };\n Object.assign(requestParams, _defineProperty({}, 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 * @returns {Promise} The multirequest execution promise\n */\n\n }, {\n key: 'execute',\n value: function execute() {\n var _this2 = this;\n\n return new Promise(function (resolve, reject) {\n try {\n _this2.params = JSON.stringify(_this2.params);\n } catch (err) {\n MultiRequestBuilder._logger.error('' + err.message);\n reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.PROVIDER, _error2.default.Code.FAILED_PARSING_REQUEST, {\n error: err,\n params: _this2.params\n }));\n }\n _this2.doHttpRequest().then(function (data) {\n var multiRequestResult = new MultiRequestResult(data);\n if (multiRequestResult.success) {\n resolve({\n headers: _this2.responseHeaders,\n response: multiRequestResult\n });\n } else {\n reject(new _error2.default(_error2.default.Severity.CRITICAL, _error2.default.Category.NETWORK, _error2.default.Code.MULTIREQUEST_API_ERROR, {\n url: _this2.url,\n headers: _this2.responseHeaders,\n results: multiRequestResult.results\n }));\n }\n }, function (err) {\n reject(err);\n });\n });\n }\n }]);\n\n return MultiRequestBuilder;\n}(_requestBuilder2.default);\n\nMultiRequestBuilder._logger = (0, _logger2.default)('MultiRequestBuilder');\nexports.default = MultiRequestBuilder;\n\nvar MultiRequestResult =\n/**\n * @constructor\n * @param {Object} response data\n */\nexports.MultiRequestResult = function MultiRequestResult(response) {\n var _this3 = this;\n\n _classCallCheck(this, MultiRequestResult);\n\n this.results = [];\n\n this.success = true;\n var responseArr = response.result ? response.result : response;\n responseArr.forEach(function (result) {\n var serviceResult = new _baseServiceResult2.default(result);\n _this3.results.push(serviceResult);\n if (serviceResult.hasError) {\n MultiRequestResult._logger.error('Service returned an error with error code: ' + serviceResult.error.code + ' and message: ' + serviceResult.error.message + '.');\n _this3.success = false;\n return;\n }\n });\n}\n/**\n * @memberof MultiRequestResult\n * @type {Object}\n */\n\n/**\n * @memberof MultiRequestResult\n * @type {boolean}\n */\n;\n\nMultiRequestResult._logger = (0, _logger2.default)('MultiRequestResult');\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar clone = function clone(data) {\n var node = void 0;\n if (Array.isArray(data)) {\n node = data.length > 0 ? data.slice(0) : [];\n node.forEach(function (e, i) {\n if ((typeof e === 'undefined' ? 'undefined' : _typeof(e)) === 'object' && e !== {} || Array.isArray(e) && e.length > 0) {\n node[i] = clone(e);\n }\n });\n } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') {\n node = Object.assign({}, data);\n Object.keys(node).forEach(function (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\nexports.clone = clone;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n\nvar Category = {\n /** Errors from the network stack. */\n NETWORK: 1,\n SERVICE: 2,\n PROVIDER: 3\n};\nexports.Category = Category;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n\nvar Code = {\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\nexports.Code = Code;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\n\nvar Severity = {\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\nexports.Severity = Severity;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.4.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.DEBUG = defineLogLevel(1, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(2, 'INFO');\r\n\tLogger.TIME = defineLogLevel(3, 'TIME');\r\n\tLogger.WARN = defineLogLevel(4, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (true) {\r\n\t\t!(__WEBPACK_AMD_DEFINE_FACTORY__ = (Logger),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n\n\n/***/ }),\n/* 11 */,\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _multiRequestBuilder = __webpack_require__(5);\n\nvar _multiRequestBuilder2 = _interopRequireDefault(_multiRequestBuilder);\n\nvar _config = __webpack_require__(1);\n\nvar _config2 = _interopRequireDefault(_config);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SERVICE_NAME = 'multirequest';\n\nvar OVPService = function () {\n function OVPService() {\n _classCallCheck(this, OVPService);\n }\n\n _createClass(OVPService, null, [{\n key: 'getMultiRequest',\n\n /**\n * Gets a new instance of MultiRequestBuilder with ovp params\n * @function getMultiRequest\n * @param {string} playerVersion The player version\n * @param {string} ks The ks\n * @param {string} partnerId The partner ID\n * @returns {MultiRequestBuilder} The multi request builder\n * @static\n */\n value: function getMultiRequest(playerVersion, ks, partnerId) {\n var config = _config2.default.get();\n var ovpParams = config.serviceParams;\n Object.assign(ovpParams, { ks: ks, clientTag: 'html5:v' + playerVersion });\n if (partnerId) {\n Object.assign(ovpParams, { partnerId: partnerId });\n }\n var headers = new Map();\n headers.set('Content-Type', 'application/json');\n var multiReq = new _multiRequestBuilder2.default(headers);\n multiReq.method = 'POST';\n multiReq.service = SERVICE_NAME;\n multiReq.url = multiReq.getUrl(config.serviceUrl);\n multiReq.params = ovpParams;\n return multiReq;\n }\n }]);\n\n return OVPService;\n}();\n\nexports.default = OVPService;\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar param = function param(a) {\n var s = [],\n rbracket = /\\[\\]$/,\n isArray = function isArray(obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n },\n add = function add(k, v) {\n v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v;\n s[s.length] = encodeURIComponent(k) + '=' + encodeURIComponent(v);\n },\n buildParams = function buildParams(prefix, obj) {\n var i = void 0,\n len = void 0,\n key = void 0;\n\n if (prefix) {\n if (isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n if (rbracket.test(prefix)) {\n add(prefix, obj[i]);\n } else {\n buildParams(prefix + ':' + (_typeof(obj[i]) === 'object' ? i : ''), obj[i]);\n }\n }\n } else if (obj && String(obj) === '[object Object]') {\n for (key in obj) {\n buildParams(prefix + ':' + key, obj[key]);\n }\n } else {\n add(prefix, obj);\n }\n } else if (isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n add(obj[i].name, obj[i].value);\n }\n } else {\n for (key in obj) {\n buildParams(key, obj[key]);\n }\n }\n return s;\n };\n\n return buildParams('', a).join('&').replace(/%20/g, '+');\n};\n\nexports.param = param;\n\n/***/ }),\n/* 14 */,\n/* 15 */,\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _ovpService = __webpack_require__(12);\n\nvar _ovpService2 = _interopRequireDefault(_ovpService);\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _config = __webpack_require__(1);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _param = __webpack_require__(13);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SERVICE_NAME = 'stats';\n\nvar OVPStatsService = function (_OVPService) {\n _inherits(OVPStatsService, _OVPService);\n\n function OVPStatsService() {\n _classCallCheck(this, OVPStatsService);\n\n return _possibleConstructorReturn(this, (OVPStatsService.__proto__ || Object.getPrototypeOf(OVPStatsService)).apply(this, arguments));\n }\n\n _createClass(OVPStatsService, null, [{\n key: 'collect',\n\n /**\n * Creates an instance of RequestBuilder for stats.collect\n * @function collect\n * @param {string} serviceUrl - The service base url\n * @param {string} ks - The ks\n * @param {string} playerVersion - The player version\n * @param {Object} event - The event data\n * @returns {RequestBuilder} - The request builder\n * @static\n */\n value: function collect(serviceUrl, ks, playerVersion, event) {\n var ovpParams = _config2.default.get();\n var serviceParams = {};\n Object.assign(serviceParams, ovpParams.serviceParams, { ks: ks, clientTag: 'html5:v' + playerVersion }, event);\n var request = new _requestBuilder2.default();\n request.service = SERVICE_NAME;\n request.action = 'collect';\n request.method = 'GET';\n request.tag = 'stats-collect';\n request.params = serviceParams;\n request.url = serviceUrl + '?service=' + request.service + '&action=' + request.action + '&' + (0, _param.param)(request.params);\n return request;\n }\n }]);\n\n return OVPStatsService;\n}(_ovpService2.default);\n\nexports.default = OVPStatsService;\n\n/***/ }),\n/* 17 */,\n/* 18 */,\n/* 19 */,\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.VERSION = exports.NAME = exports.RequestBuilder = exports.OVPConfiguration = exports.OVPStatsService = undefined;\n\nvar _requestBuilder = __webpack_require__(0);\n\nvar _requestBuilder2 = _interopRequireDefault(_requestBuilder);\n\nvar _config = __webpack_require__(1);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _statsService = __webpack_require__(16);\n\nvar _statsService2 = _interopRequireDefault(_statsService);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar NAME = \"playkit-js-providers\" + '-stats-service';\n\nvar VERSION = \"2.21.1\";\n\nexports.OVPStatsService = _statsService2.default;\nexports.OVPConfiguration = _config2.default;\nexports.RequestBuilder = _requestBuilder2.default;\nexports.NAME = NAME;\nexports.VERSION = VERSION;\n\n/***/ })\n/******/ ]);\n});\n\n\n// WEBPACK FOOTER //\n// playkit-stats-service.js"," \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// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\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 \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 20);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 19f73764c22efc6116dd","//@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}\n */\n headers: Map;\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}\n */\n responseHeaders: Array;\n /**\n * @description network retry configuration\n * @memberof RequestBuilder\n * @type {ProviderNetworkRetryParameters}\n */\n retryConfig: ProviderNetworkRetryParameters;\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} headers The request headers\n */\n constructor(headers: Map = 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.} Service response as promise\n */\n doHttpRequest(): Promise {\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 {\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\n\n\n// WEBPACK FOOTER //\n// ./util/request-builder.js","//@flow\nimport {clone} from '../../util/clone';\n\nconst defaultConfig: Object = {\n serviceUrl: 'https://cdnapisec.kaltura.com/api_v3',\n cdnUrl: 'https://cdnapisec.kaltura.com',\n serviceParams: {\n apiVersion: '3.3.0',\n format: 1\n },\n useApiCaptions: true\n};\n\nexport default class OVPConfiguration {\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 {OVPConfiguration};\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/config.js","//@flow\nimport getLogger, {getLogLevel, LogLevel} 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 if (getLogLevel(CLASS_NAME) !== LogLevel.OFF) {\n Error._logger.error(`Category:${category} | Code:${code} |`, data);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./util/error/error.js","//@flow\nimport * as JsLogger from 'js-logger';\n\nexport type LogLevelObject = {value: number, name: string};\nexport type LogLevelType = {[level: string]: LogLevelObject};\n\nconst LogLevel: LogLevelType = {\n DEBUG: JsLogger.DEBUG,\n INFO: JsLogger.INFO,\n TIME: JsLogger.TIME,\n WARN: JsLogger.WARN,\n ERROR: JsLogger.ERROR,\n OFF: JsLogger.OFF\n};\n\nJsLogger.useDefaults({defaultLevel: JsLogger.ERROR});\n\n/**\n * sets the logger handler\n * @param {LogHandlerType} handler - the log level\n * @returns {void}\n */\nfunction setLogHandler(handler: LogHandlerType): void {\n JsLogger.setHandler((messages, context) => handler(messages, context));\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 if (!name) {\n return JsLogger;\n }\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 {LogLevel, getLogLevel, setLogLevel, setLogHandler};\n\n\n\n// WEBPACK FOOTER //\n// ./util/logger.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/base-service-result.js","//@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}\n */\n requests: Array = [];\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 * @returns {Promise} The multirequest execution promise\n */\n execute(): Promise {\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);\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 = [];\n /**\n * @constructor\n * @param {Object} response data\n */\n constructor(response: Object) {\n this.success = true;\n const responseArr = response.result ? response.result : response;\n responseArr.forEach(result => {\n const serviceResult: ServiceResult = new ServiceResult(result);\n this.results.push(serviceResult);\n if (serviceResult.hasError) {\n MultiRequestResult._logger.error(\n `Service returned an error with error code: ${serviceResult.error.code} and message: ${serviceResult.error.message}.`\n );\n this.success = false;\n return;\n }\n });\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/common/multi-request-builder.js","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\n\n\n// WEBPACK FOOTER //\n// ./util/clone.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./util/error/category.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./util/error/code.js","//@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\n\n\n// WEBPACK FOOTER //\n// ./util/error/severity.js","/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.4.1\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.DEBUG = defineLogLevel(1, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(2, 'INFO');\r\n\tLogger.TIME = defineLogLevel(3, 'TIME');\r\n\tLogger.WARN = defineLogLevel(4, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(Logger);\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../~/js-logger/src/logger.js\n// module id = 10\n// module chunks = 0 1 2","//@flow\nimport MultiRequestBuilder from '../../common/multi-request-builder';\nimport OVPConfiguration from '../config';\n\nconst SERVICE_NAME: string = 'multirequest';\n\nexport default class OVPService {\n /**\n * Gets a new instance of MultiRequestBuilder with ovp params\n * @function getMultiRequest\n * @param {string} playerVersion The player version\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(playerVersion: string, ks: string, partnerId?: number): MultiRequestBuilder {\n const config = OVPConfiguration.get();\n const ovpParams = config.serviceParams;\n Object.assign(ovpParams, {ks: ks, clientTag: 'html5:v' + playerVersion});\n if (partnerId) {\n Object.assign(ovpParams, {partnerId: partnerId});\n }\n const headers: Map = 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 = ovpParams;\n return multiReq;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/services/ovp-service.js","const param = a => {\n let s = [],\n rbracket = /\\[\\]$/,\n isArray = function(obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n },\n add = function(k, v) {\n v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v;\n s[s.length] = encodeURIComponent(k) + '=' + encodeURIComponent(v);\n },\n buildParams = function(prefix, obj) {\n let i, len, key;\n\n if (prefix) {\n if (isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n if (rbracket.test(prefix)) {\n add(prefix, obj[i]);\n } else {\n buildParams(prefix + ':' + (typeof obj[i] === 'object' ? i : ''), obj[i]);\n }\n }\n } else if (obj && String(obj) === '[object Object]') {\n for (key in obj) {\n buildParams(prefix + ':' + key, obj[key]);\n }\n } else {\n add(prefix, obj);\n }\n } else if (isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n add(obj[i].name, obj[i].value);\n }\n } else {\n for (key in obj) {\n buildParams(key, obj[key]);\n }\n }\n return s;\n };\n\n return buildParams('', a)\n .join('&')\n .replace(/%20/g, '+');\n};\n\nexport {param};\n\n\n\n// WEBPACK FOOTER //\n// ./util/param.js","//@flow\nimport OVPService from '../ovp-service';\nimport RequestBuilder from '../../../../util/request-builder';\nimport OVPConfiguration from '../../config';\nimport {param} from '../../../../util/param';\n\nconst SERVICE_NAME: string = 'stats';\n\nexport default class OVPStatsService extends OVPService {\n /**\n * Creates an instance of RequestBuilder for stats.collect\n * @function collect\n * @param {string} serviceUrl - The service base url\n * @param {string} ks - The ks\n * @param {string} playerVersion - The player version\n * @param {Object} event - The event data\n * @returns {RequestBuilder} - The request builder\n * @static\n */\n static collect(serviceUrl: string, ks: string, playerVersion: string, event: Object): RequestBuilder {\n const ovpParams = OVPConfiguration.get();\n const serviceParams = {};\n Object.assign(serviceParams, ovpParams.serviceParams, {ks: ks, clientTag: 'html5:v' + playerVersion}, event);\n const request = new RequestBuilder();\n request.service = SERVICE_NAME;\n request.action = 'collect';\n request.method = 'GET';\n request.tag = 'stats-collect';\n request.params = serviceParams;\n request.url = serviceUrl + '?service=' + request.service + '&action=' + request.action + '&' + param(request.params);\n return request;\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/services/stats/stats-service.js","// @flow\nimport RequestBuilder from '../../../../util/request-builder';\nimport OVPConfiguration from '../../config';\nimport OVPStatsService from './stats-service';\n\ndeclare var __VERSION__: string;\ndeclare var __NAME__: string;\n\nconst NAME = __NAME__ + '-stats-service';\nconst VERSION = __VERSION__;\n\nexport {OVPStatsService, OVPConfiguration, RequestBuilder, NAME, VERSION};\n\n\n\n// WEBPACK FOOTER //\n// ./k-provider/ovp/services/stats/index.js"],"sourceRoot":""} \ No newline at end of file +{"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/../node_modules/js-logger/src/logger.js","./providers/./util/logger.js","./providers/./util/request-builder.js","./providers/./k-provider/ovp/config.js","./providers/./util/clone.js","./providers/./k-provider/common/base-service-result.js","./providers/./k-provider/common/multi-request-builder.js","./providers/./k-provider/ovp/services/ovp-service.js","./providers/./util/param.js","./providers/./k-provider/ovp/services/stats/stats-service.js","./providers/./k-provider/ovp/services/stats/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","getLogLevel","LogLevel","OFF","_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","global","logHandler","Logger","VERSION","contextualLoggersByNameMap","scope","func","apply","arguments","merge","args","target","length","defineLogLevel","TRACE","DEBUG","INFO","TIME","WARN","ContextualLogger","defaultContext","context","setLevel","filterLevel","log","info","newLevel","getLevel","enabledFor","lvl","trace","invoke","debug","warn","time","label","timeEnd","level","msgArgs","L","globalLogger","setHandler","createDefaultHandler","options","formatter","messages","unshift","timerStartTimeByLabelMap","invokeConsoleMethod","hdlr","Function","console","Array","slice","timerLabel","Date","getTime","useDefaults","defaultLevel","JsLogger","RequestBuilder","headers","Map","async","timeout","maxAttempts","serviceUrl","service","action","promise","Promise","resolve","reject","_requestPromise","url","Severity","Category","Code","_createXHR","request","XMLHttpRequest","onreadystatechange","readyState","status","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","defaultConfig","cdnUrl","serviceParams","apiVersion","format","useApiCaptions","OVPConfiguration","clientConfig","clone","node","isArray","e","keys","ServiceResult","objectType","hasError","ServiceError","message","MultiRequestBuilder","requests","push","requestParams","serviceDef","stringify","err","FAILED_PARSING_REQUEST","doHttpRequest","then","multiRequestResult","MultiRequestResult","success","results","result","serviceResult","OVPService","playerVersion","ks","partnerId","config","ovpParams","clientTag","set","multiReq","getUrl","param","a","rbracket","obj","toString","add","k","v","encodeURIComponent","buildParams","prefix","len","test","String","join","replace","OVPStatsService","event","tag","NAME","__NAME__","__VERSION__"],"mappings":"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","file":"playkit-stats-service.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[\"stats\"] = factory();\n\telse\n\t\troot[\"playkit\"] = root[\"playkit\"] || {}, root[\"playkit\"][\"services\"] = root[\"playkit\"][\"services\"] || {}, root[\"playkit\"][\"services\"][\"stats\"] = 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 = 11);\n","//@flow\nimport getLogger, {getLogLevel, LogLevel} 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 if (getLogLevel(CLASS_NAME) !== LogLevel.OFF) {\n Error._logger.error(`Category:${category} | Code:${code} |`, data);\n }\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","/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.6.0\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.TRACE = defineLogLevel(1, 'TRACE');\r\n\tLogger.DEBUG = defineLogLevel(2, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(3, 'INFO');\r\n\tLogger.TIME = defineLogLevel(4, 'TIME');\r\n\tLogger.WARN = defineLogLevel(5, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\ttrace: function () {\r\n\t\t\tthis.invoke(Logger.TRACE, arguments);\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.trace = bind(globalLogger, globalLogger.trace);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t} else if (context.level === Logger.TRACE && console.trace) {\r\n\t\t\t\t\thdlr = console.trace;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(Logger);\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n","//@flow\nimport * as JsLogger from 'js-logger';\n\nexport type LogLevelObject = {value: number, name: string};\nexport type LogLevelType = {[level: string]: LogLevelObject};\n\nconst LogLevel: LogLevelType = {\n DEBUG: JsLogger.DEBUG,\n INFO: JsLogger.INFO,\n TIME: JsLogger.TIME,\n WARN: JsLogger.WARN,\n ERROR: JsLogger.ERROR,\n OFF: JsLogger.OFF\n};\n\nJsLogger.useDefaults({defaultLevel: JsLogger.ERROR});\n\n/**\n * sets the logger handler\n * @param {LogHandlerType} handler - the log level\n * @returns {void}\n */\nfunction setLogHandler(handler: LogHandlerType): void {\n JsLogger.setHandler((messages, context) => handler(messages, context));\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 if (!name) {\n return JsLogger;\n }\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 {LogLevel, getLogLevel, setLogLevel, setLogHandler};\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}\n */\n headers: Map;\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}\n */\n responseHeaders: Array;\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} headers The request headers\n */\n constructor(headers: Map = 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.} Service response as promise\n */\n doHttpRequest(): Promise {\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 {\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\nimport {clone} from '../../util/clone';\n\nconst defaultConfig: Object = {\n serviceUrl: 'https://cdnapisec.kaltura.com/api_v3',\n cdnUrl: 'https://cdnapisec.kaltura.com',\n serviceParams: {\n apiVersion: '3.3.0',\n format: 1\n },\n useApiCaptions: true\n};\n\nexport default class OVPConfiguration {\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 {OVPConfiguration};\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\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\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}\n */\n requests: Array = [];\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 * @returns {Promise} The multirequest execution promise\n */\n execute(): Promise {\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);\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 = [];\n /**\n * @constructor\n * @param {Object} response data\n */\n constructor(response: Object) {\n this.success = true;\n const responseArr = response.result ? response.result : response;\n responseArr.forEach(result => {\n const serviceResult: ServiceResult = new ServiceResult(result);\n this.results.push(serviceResult);\n if (serviceResult.hasError) {\n MultiRequestResult._logger.error(\n `Service returned an error with error code: ${serviceResult.error.code} and message: ${serviceResult.error.message}.`\n );\n this.success = false;\n return;\n }\n });\n }\n}\n","//@flow\nimport MultiRequestBuilder from '../../common/multi-request-builder';\nimport OVPConfiguration from '../config';\n\nconst SERVICE_NAME: string = 'multirequest';\n\nexport default class OVPService {\n /**\n * Gets a new instance of MultiRequestBuilder with ovp params\n * @function getMultiRequest\n * @param {string} playerVersion The player version\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(playerVersion: string, ks: string, partnerId?: number): MultiRequestBuilder {\n const config = OVPConfiguration.get();\n const ovpParams = config.serviceParams;\n Object.assign(ovpParams, {ks: ks, clientTag: 'html5:v' + playerVersion});\n if (partnerId) {\n Object.assign(ovpParams, {partnerId: partnerId});\n }\n const headers: Map = 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 = ovpParams;\n return multiReq;\n }\n}\n","const param = a => {\n let s = [],\n rbracket = /\\[\\]$/,\n isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n },\n add = function (k, v) {\n v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v;\n s[s.length] = encodeURIComponent(k) + '=' + encodeURIComponent(v);\n },\n buildParams = function (prefix, obj) {\n let i, len, key;\n\n if (prefix) {\n if (isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n if (rbracket.test(prefix)) {\n add(prefix, obj[i]);\n } else {\n buildParams(prefix + ':' + (typeof obj[i] === 'object' ? i : ''), obj[i]);\n }\n }\n } else if (obj && String(obj) === '[object Object]') {\n for (key in obj) {\n buildParams(prefix + ':' + key, obj[key]);\n }\n } else {\n add(prefix, obj);\n }\n } else if (isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n add(obj[i].name, obj[i].value);\n }\n } else {\n for (key in obj) {\n buildParams(key, obj[key]);\n }\n }\n return s;\n };\n\n return buildParams('', a).join('&').replace(/%20/g, '+');\n};\n\nexport {param};\n","//@flow\nimport OVPService from '../ovp-service';\nimport RequestBuilder from '../../../../util/request-builder';\nimport OVPConfiguration from '../../config';\nimport {param} from '../../../../util/param';\n\nconst SERVICE_NAME: string = 'stats';\n\nexport default class OVPStatsService extends OVPService {\n /**\n * Creates an instance of RequestBuilder for stats.collect\n * @function collect\n * @param {string} serviceUrl - The service base url\n * @param {string} ks - The ks\n * @param {string} playerVersion - The player version\n * @param {Object} event - The event data\n * @returns {RequestBuilder} - The request builder\n * @static\n */\n static collect(serviceUrl: string, ks: string, playerVersion: string, event: Object): RequestBuilder {\n const ovpParams = OVPConfiguration.get();\n const serviceParams = {};\n Object.assign(serviceParams, ovpParams.serviceParams, {ks: ks, clientTag: 'html5:v' + playerVersion}, event);\n const request = new RequestBuilder();\n request.service = SERVICE_NAME;\n request.action = 'collect';\n request.method = 'GET';\n request.tag = 'stats-collect';\n request.params = serviceParams;\n request.url = serviceUrl + '?service=' + request.service + '&action=' + request.action + '&' + param(request.params);\n return request;\n }\n}\n","// @flow\nimport RequestBuilder from '../../../../util/request-builder';\nimport OVPConfiguration from '../../config';\nimport OVPStatsService from './stats-service';\n\ndeclare var __VERSION__: string;\ndeclare var __NAME__: string;\n\nconst NAME = __NAME__ + '-stats-service';\nconst VERSION = __VERSION__;\n\nexport {OVPStatsService, OVPConfiguration, RequestBuilder, NAME, VERSION};\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/util/request-builder.js b/src/util/request-builder.js index 5feaa863..0c3d18b0 100644 --- a/src/util/request-builder.js +++ b/src/util/request-builder.js @@ -49,7 +49,11 @@ export default class RequestBuilder { * @memberof RequestBuilder * @type {ProviderNetworkRetryParameters} */ - retryConfig: ProviderNetworkRetryParameters; + retryConfig: ProviderNetworkRetryParameters = { + async: true, + timeout: 0, + maxAttempts: 4 + }; /** * @description number of xhr attempts for the same multi - request.