@playkit-js/playkit-js-kava 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,15 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [1.5.1](https://github.com/kaltura/playkit-js-kava/compare/v1.5.0...v1.5.1) (2023-03-22)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **FEC-13039:** ignore playbackRates not included in list ([#138](https://github.com/kaltura/playkit-js-kava/issues/138)) ([43e75e2](https://github.com/kaltura/playkit-js-kava/commit/43e75e2))
11
+
12
+
13
+
5
14
  ## [1.5.0](https://github.com/kaltura/playkit-js-kava/compare/v1.4.0...v1.5.0) (2023-02-22)
6
15
 
7
16
 
@@ -1,2 +1,2 @@
1
- var KalturaPlayer="object"==typeof KalturaPlayer?KalturaPlayer:{};KalturaPlayer.plugins=KalturaPlayer.plugins||{},KalturaPlayer.plugins.kava=function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.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 i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));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=2)}([function(e,t){e.exports=KalturaPlayer},function(e,t,n){window,e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.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 i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));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=9)}([function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(2);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,r,i){void 0===i&&(i={}),this.severity=t,this.category=n,this.code=r,this.data=i,e._logger.error("Category:"+n+" | Code:"+r+" |",i)};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.a)("Error"))},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(0);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(){function e(e){void 0===e&&(e=new Map),i(this,"retryConfig",{async:!0,timeout:0,maxAttempts:4}),i(this,"_attemptCounter",1),this.headers=e}var t=e.prototype;return t.getUrl=function(e){return e+"/service/"+this.service+(this.action?"/action/"+this.action:"")},t.doHttpRequest=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},t._createXHR=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)},t._getResponseHeaders=function(e){return e.getAllResponseHeaders().split("\n").filter((function(e){return 0===e.toLowerCase().indexOf("x-")}))},t._handleError=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<this.retryConfig.maxAttempts))return this._requestPromise.reject(r);this._attemptCounter++,this._createXHR()},t._createError=function(e,t,n){return Object.assign(n,{url:this.url,headers:this._getResponseHeaders(e),attempt:this._attemptCounter}),new r.a(r.a.Severity.CRITICAL,r.a.Category.NETWORK,t,n)},e}()},function(e,t,n){"use strict";var r=function(){return{VERSION:"",DEBUG:{value:"",name:""},ERROR:{value:"",name:""},INFO:{value:"",name:""},OFF:{value:"",name:""},TIME:{value:"",name:""},TRACE:{value:"",name:""},WARN:{value:"",name:""},createDefaultHandler:function(){},debug:function(){},enabledFor:function(){},error:function(){},get:function(){},getLevel:function(){},info:function(){},log:function(){},setHandler:function(){},setLevel:function(){},time:function(){},timeEnd:function(){},trace:function(){},useDefaults:function(){},warn:function(){}}};t.a=function(e){return r(e)}},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(4),i={serviceUrl:"https://cdnapisec.kaltura.com/api_v3",cdnUrl:"https://cdnapisec.kaltura.com",serviceParams:{apiVersion:"3.3.0",format:1},useApiCaptions:!0,loadThumbnailWithKs:!1},a=function(){function e(){}return e.set=function(e){e&&Object.assign(i,e)},e.get=function(){return Object(r.a)(i)},e}()},function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var r=function e(t){var n;return Array.isArray(t)?(n=t.length>0?t.slice(0):[]).forEach((function(t,r){("object"==typeof t&&t!=={}||Array.isArray(t)&&t.length>0)&&(n[r]=e(t))})):"object"==typeof t?(n=Object.assign({},t),Object.keys(n).forEach((function(t){("object"==typeof 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 d}));var r=n(1),i=n(2),a=function(e){var t;(t="hasError")in this?Object.defineProperty(this,t,{value:!1,enumerable:!0,configurable:!0,writable:!0}):this[t]=!1,"KalturaAPIException"===e.objectType?(this.hasError=!0,this.error=new o(e.code,e.message)):e.error&&"KalturaAPIException"===e.error.objectType?(this.hasError=!0,this.error=new o(e.error.code,e.error.message)):this.data=e},o=function(e,t){this.code=e,this.message=t},s=n(0);function u(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=function(e){var t,n;function r(){for(var t,n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];return l(u(t=e.call.apply(e,[this].concat(r))||this),"requests",[]),t}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var i=r.prototype;return i.add=function(e){var t;this.requests.push(e);var n={},r={service:e.service,action:e.action};return Object.assign(n,((t={})[this.requests.length]=Object.assign(r,e.params),t)),Object.assign(n,this.params),this.params=n,this},i.execute=function(e){var t=this;return new Promise((function(n,i){try{t.params=JSON.stringify(t.params)}catch(e){r._logger.error(""+e.message),i(new s.a(s.a.Severity.CRITICAL,s.a.Category.PROVIDER,s.a.Code.FAILED_PARSING_REQUEST,{error:e,params:t.params}))}t.doHttpRequest().then((function(r){var a=new c(r,e);a.success?n({headers:t.responseHeaders,response:a}):i(new s.a(s.a.Severity.CRITICAL,s.a.Category.NETWORK,s.a.Code.MULTIREQUEST_API_ERROR,{url:t.url,headers:t.responseHeaders,results:a.results}))}),(function(e){i(e)}))}))},r}(r.a);l(d,"_logger",Object(i.a)("MultiRequestBuilder"));var c=function e(t,n){void 0===n&&(n=!0),l(this,"results",[]);var r=t.result?t.result:t,i=(Array.isArray(r)?r:[r]).map((function(e){return new a(e)})),o=i.filter((function(e){return e.hasError}));o.forEach((function(t){e._logger.error("Service returned an error with error code: "+t.error.code+" and message: "+t.error.message+".")})),this.results=i,n&&o.length||o.length===this.results.length?this.success=!1:(this.results=this.results.filter((function(e){return!e.hasError})),this.success=!0)};l(c,"_logger",Object(i.a)("MultiRequestResult"))},function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var r=function(e){var t=[],n=/\[\]$/,r=function(e){return"[object Array]"===Object.prototype.toString.call(e)},i=function(e,n){n="function"==typeof n?n():null==n?"":n,t[t.length]=encodeURIComponent(e)+"="+encodeURIComponent(n)};return function e(a,o){var s,u,l;if(a)if(r(o))for(s=0,u=o.length;s<u;s++)n.test(a)?i(a,o[s]):e(a+":"+("object"==typeof o[s]?s:""),o[s]);else if(o&&"[object Object]"===String(o))for(l in o)e(a+":"+l,o[l]);else i(a,o);else if(r(o))for(s=0,u=o.length;s<u;s++)i(o[s].name,o[s].value);else for(l in o)e(l,o[l]);return t}("",e).join("&").replace(/%20/g,"+")}},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(5),i=n(3),a=function(){function e(){}return e.getMultiRequest=function(e,t,n){var a=i.a.get(),o=a.serviceParams;Object.assign(o,{ks:t,clientTag:"html5:v"+e}),n&&Object.assign(o,{partnerId:n});var s=new Map;s.set("Content-Type","application/json");var u=new r.a(s);return u.method="POST",u.service="multirequest",u.url=u.getUrl(a.serviceUrl),u.params=o,u},e}()},,function(e,t,n){"use strict";n.r(t),n.d(t,"OVPAnalyticsService",(function(){return s})),n.d(t,"OVPConfiguration",(function(){return i.a})),n.d(t,"RequestBuilder",(function(){return r.a})),n.d(t,"NAME",(function(){return u})),n.d(t,"VERSION",(function(){return l}));var r=n(1),i=n(3),a=n(7),o=n(6),s=function(e){var t,n;function a(){return e.apply(this,arguments)||this}return n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,a.trackEvent=function(e,t,n){return"POST"===n?a._trackEventByPOST(e,t):a._trackEventByGET(e,t)},a._trackEventByGET=function(e,t){var n=i.a.get(),a={};Object.assign(a,n.serviceParams,t);var s=new r.a;return s.service="analytics",s.action="trackEvent",s.method="GET",s.tag="analytics-trackEvent",s.params=a,s.url=e+"?service="+s.service+"&action="+s.action+"&"+Object(o.a)(s.params),s},a._trackEventByPOST=function(e,t){var n=i.a.get(),a={};Object.assign(a,n.serviceParams,t);var s=new Map;s.set("Content-Type","application/json");var u=new r.a(s),l={eventType:a.eventType,partnerId:a.partnerId,entryId:a.entryId,sessionId:a.sessionId};return["eventType","partnerId","entryId","sessionId"].forEach((function(e){return delete a[e]})),u.service="analytics",u.action="trackEvent",u.method="POST",u.tag="analytics-trackEvent",u.params=JSON.stringify(a),u.url=e+"?service="+u.service+"&action="+u.action+"&"+Object(o.a)(l),u},a}(a.a),u="playkit-js-providers-analytics-service",l="2.37.0"}])},function(e,t,n){"use strict";n.r(t),n.d(t,"Plugin",(function(){return F})),n.d(t,"EventType",(function(){return y})),n.d(t,"HttpMethodType",(function(){return R})),n.d(t,"VERSION",(function(){return x})),n.d(t,"NAME",(function(){return B}));var r=n(0),i=n(1);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var o,s=function(){function e(e){a(this,"totalSegmentsDownloadTime",0),a(this,"totalSegmentsDownloadBytes",0),a(this,"maxSegmentDownloadTime",0),a(this,"maxManifestDownloadTime",0),a(this,"droppedFramesRatio",null),a(this,"screenMode",p.NOT_IN_FULLSCREEN),a(this,"maxNetworkConnectionOverhead",0),a(this,"flavorParamsId",NaN),a(this,"playerJSLoadTime",null),e&&this.updateModel(e)}var t=e.prototype;return t.getPlayTimeSum=function(){return this.playTimeSum},t.getCanPlayTime=function(){return this.canPlayTime},t.getBufferTime=function(){return this.bufferTime},t.getBufferTimeSum=function(){return this.bufferTimeSum},t.getPlayerJSLoadTime=function(){return this.playerJSLoadTime?Math.round(1e3*this.playerJSLoadTime)/1e3:null},t.getJoinTime=function(){return this.joinTime},t.getTargetPosition=function(){return this.targetPosition},t.getTargetBuffer=function(){return this.targetBuffer},t.getLanguage=function(){return this.language},t.getCaption=function(){return this.caption},t.getBandwidth=function(){return this.totalSegmentsDownloadTime>0?Math.round(8*this.totalSegmentsDownloadBytes/this.totalSegmentsDownloadTime)/1e3:0},t.getMaxManifestDownloadTime=function(){return this.maxManifestDownloadTime},t.getSegmentDownloadTime=function(){return this.maxSegmentDownloadTime},t.getForwardBufferHealth=function(){return this.forwardBufferHealth},t.getDroppedFramesRatio=function(){return this.droppedFramesRatio},t.getSoundMode=function(){return this.soundMode},t.getViewabilityMode=function(){return this.viewabilityMode},t.getScreenMode=function(){return this.screenMode},t.getTabMode=function(){return this.tabMode},t.getNetworkConnectionType=function(){return this.networkConnectionType},t.getNetworkConnectionOverhead=function(){return Math.round(this.maxNetworkConnectionOverhead)/1e3},t.getErrorCode=function(){return this.errorCode},t.getFlavorParamsId=function(){return this.flavorParamsId},t.getErrorDetails=function(){var e="";if(this.errorDetails)try{e=JSON.stringify(this.errorDetails)}catch(e){}return e},t.getEventIndex=function(){return this.eventIndex},t.getErrorPosition=function(){return this.errorPosition},t.getSessionStartTime=function(){return this.sessionStartTime},t.updateModel=function(e){Object.assign(this,e)},t.getModel=function(e){return function(e,t){var n={eventType:e.index,partnerId:t.getPartnerId(),entryId:t.getEntryId(),sessionId:t.getSessionId(),eventIndex:t.getEventIndex(),referrer:t.getReferrer(),deliveryType:t.getDeliveryType(),playbackType:t.getPlaybackType(),clientVer:t.getClientVer(),clientTag:t.getClientTag(),position:t.getPosition(),playbackSpeed:t.getPlaybackSpeed()};t.getCaption()&&(n.caption=t.getCaption());t.getSessionStartTime()&&(n.sessionStartTime=t.getSessionStartTime());t.getKS()&&(n.ks=t.getKS());t.getVirtualEventId()&&(n.virtualEventId=t.getVirtualEventId());t.getUIConfId()&&(n.uiConfId=t.getUIConfId());t.getPlaylistId()&&(n.playlistId=t.getPlaylistId());t.getCustomVar1()&&(n.customVar1=t.getCustomVar1());t.getCustomVar2()&&(n.customVar2=t.getCustomVar2());t.getCustomVar3()&&(n.customVar3=t.getCustomVar3());t.getPlaybackContext()&&(n.playbackContext=t.getPlaybackContext());t.getApplicationVersion()&&(n.applicationVer=t.getApplicationVersion());t.getApplication()&&(n.application=t.getApplication());t.getKalturaApplicationVersion()&&(n.kalturaApplicationVer=t.getKalturaApplicationVersion());t.getKalturaApplication()&&(n.kalturaApplication=t.getKalturaApplication());t.getUserId()&&(n.userId=t.getUserId());t.getPersistentSessionId()&&(n.persistentSessionId=t.getPersistentSessionId());var r=e.getEventModel(t);return Object.assign(r,n)}(e,this)},e}(),u=1,l=2,d=1,c=2,f=1,h=2,p={NOT_IN_FULLSCREEN:1,FULLSCREEN:2},_=3,g=1,m=2,E={VIEW:{type:"VIEW",index:99,getEventModel:function(e){var t={playTimeSum:e.getPlayTimeSum(),bufferTime:e.getBufferTime(),bufferTimeSum:e.getBufferTimeSum(),actualBitrate:e.getActualBitrate(),averageBitrate:e.getAverageBitrate(),audioLanguage:e.getLanguage(),soundMode:e.getSoundMode(),tabMode:e.getTabMode(),viewabilityMode:e.getViewabilityMode(),screenMode:e.getScreenMode()};return isNaN(e.getForwardBufferHealth())||(t.forwardBufferHealth=e.getForwardBufferHealth()),e.getMaxManifestDownloadTime()>0&&(t.manifestDownloadTime=e.getMaxManifestDownloadTime()),e.getSegmentDownloadTime()>0&&(t.segmentDownloadTime=e.getSegmentDownloadTime()),e.getBandwidth()&&(t.bandwidth=e.getBandwidth()),null!=e.getDroppedFramesRatio()&&(t.droppedFramesRatio=e.getDroppedFramesRatio()),isNaN(e.getTargetBuffer())||(t.targetBuffer=e.getTargetBuffer()),""!==e.getNetworkConnectionType()&&(t.networkConnectionType=e.getNetworkConnectionType()),e.getNetworkConnectionOverhead()&&(t.networkConnectionOverhead=e.getNetworkConnectionOverhead()),isNaN(e.getFlavorParamsId())||(t.flavorParamsId=e.getFlavorParamsId()),t}},IMPRESSION:{type:"IMPRESSION",index:1,getEventModel:function(e){var t={};return null!=e.getPlayerJSLoadTime()&&(t.playerJSLoadTime=e.getPlayerJSLoadTime()),t}},PLAY_REQUEST:{type:"PLAY_REQUEST",index:2,getEventModel:function(){return{}}},PLAY:{type:"PLAY",index:3,getEventModel:function(e){var t={bufferTime:e.getBufferTime(),bufferTimeSum:e.getBufferTimeSum(),actualBitrate:e.getActualBitrate(),joinTime:e.getJoinTime(),canPlay:e.getCanPlayTime()};return""!==e.getNetworkConnectionType()&&(t.networkConnectionType=e.getNetworkConnectionType()),t}},RESUME:{type:"RESUME",index:4,getEventModel:function(e){return{bufferTime:e.getBufferTime(),bufferTimeSum:e.getBufferTimeSum(),actualBitrate:e.getActualBitrate()}}},PAUSE:{type:"PAUSE",index:33,getEventModel:function(){return{}}},BUFFER_START:{type:"BUFFER_START",index:45,getEventModel:function(){return{}}},BUFFER_END:{type:"BUFFER_END",index:46,getEventModel:function(){return{}}},REPLAY:{type:"REPLAY",index:34,getEventModel:function(){return{}}},SEEK:{type:"SEEK",index:35,getEventModel:function(e){return{targetPosition:e.getTargetPosition()}}},PLAY_REACHED_25_PERCENT:{type:"PLAY_REACHED_25_PERCENT",index:11,getEventModel:function(){return{}}},PLAY_REACHED_50_PERCENT:{type:"PLAY_REACHED_50_PERCENT",index:12,getEventModel:function(){return{}}},PLAY_REACHED_75_PERCENT:{type:"PLAY_REACHED_75_PERCENT",index:13,getEventModel:function(){return{}}},PLAY_REACHED_100_PERCENT:{type:"PLAY_REACHED_100_PERCENT",index:14,getEventModel:function(){return{}}},SOURCE_SELECTED:{type:"SOURCE_SELECTED",index:39,getEventModel:function(e){return{actualBitrate:e.getActualBitrate()}}},AUDIO_SELECTED:{type:"AUDIO_SELECTED",index:42,getEventModel:function(e){return{language:e.getLanguage()}}},FLAVOR_SWITCH:{type:"FLAVOR_SWITCH",index:43,getEventModel:function(e){return{actualBitrate:e.getActualBitrate()}}},SPEED:{type:"SPEED",index:41,getEventModel:function(){return{}}},CAPTIONS:{type:"CAPTIONS",index:38,getEventModel:function(){return{}}},ERROR:{type:"ERROR",index:98,getEventModel:function(e){return{errorCode:e.getErrorCode(),errorDetails:e.getErrorDetails(),errorPosition:e.getErrorPosition()}}},RELATED_CLICKED:{type:"RELATED_CLICKED",index:36,getEventModel:function(){return{}}},RELATED_SELECTED:{type:"RELATED_SELECTED",index:37,getEventModel:function(){return{}}}},y=(o={},Object.keys(E).forEach((function(e){return o[e]=e})),o);var v=function(){function e(){var e,t,n;n=[],(t="_rates")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,this._rates=[]}var t=e.prototype;return t.setRates=function(e){var t=this;this._rates=[],e.forEach((function(e){t._rates.push({rate:e,active:!1,duration:0})}))},t.setCurrent=function(e){this._rates.forEach((function(e){return e.active=!1}));var t=this._rates.find((function(t){return t.rate===e}));t&&(t.active=!0)},t.getCurrent=function(){var e=this._rates.find((function(e){return e.active}));return e?e.rate:-1},t.countCurrent=function(){var e=this._rates.find((function(e){return e.active}));e&&e.duration++},t.getAverage=function(){var e=0,t=0;return this._rates.forEach((function(n){t+=n.rate*n.duration,e+=n.duration})),e?t/e:0},t.reset=function(){this._rates.forEach((function(e){return e.duration=0}))},t.destroy=function(){this._rates=[]},e}();var T,S,P,C=r.core.FakeEvent,A=r.core.FakeEventTarget,M=function(e){var t,n;function r(t){var n;return(n=e.call(this)||this)._config=t,n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var i=r.prototype;return i.start=function(){var e=this;this._clearTimeout(),this._stopped=!1,this._resetCounter=0,this._eventCounter=0,this._intervalId=setInterval((function(){return e._monitor()}),1e3)},i.resume=function(){this._stopped=!1,this._resetCounter=0},i.stop=function(){this._stopped=!0},i.isStopped=function(){return this._stopped},i.destroy=function(){this._clearTimeout()},i._clearTimeout=function(){this._intervalId&&(clearInterval(this._intervalId),this._intervalId=null)},i._monitor=function(){this._stopped?(this._resetCounter===this._config.resetCounter&&(this.dispatchEvent(new C(r.Event.RESET)),this._resetCounter=0,this._eventCounter=0),this._resetCounter++):(this.dispatchEvent(new C(r.Event.TICK)),this._eventCounter===this._config.eventCounter&&(this.dispatchEvent(new C(r.Event.REPORT)),this._eventCounter=0),this._eventCounter++)},r}(A);P={TICK:"tick",RESET:"reset",REPORT:"report"},(S="Event")in(T=M)?Object.defineProperty(T,S,{value:P,enumerable:!0,configurable:!0,writable:!0}):T[S]=P;var R={GET:"GET",POST:"POST"},b={KMC:"0",KMS:"1",KAF:"2",PITCH:"3",KMS_GO:"4",WEBCASTING:"5",PERSONAL_CAPTURE:"6",KME:"7",KME_MOBILE_APP:"8",PATH:"9",LECTURE_CAPTURE:"10",EP:"11",CHAT_AND_COLLABORATION:"12",ANALYTICS:"13",EXPRESS_CAPTURE:"14",KPF:"15",KAF_GO:"16",SITES:"17",STUDIO:"18"};const I="related_selected",O="related_clicked";function w(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function D(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function L(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var N=r.core.Error,k=(r.core.FakeEvent,r.core.Utils),F=function(e){var t,n;function r(t,n,r){var i;if(L(D(i=e.call(this,t,n,r)||this),"_lastDroppedFrames",0),L(D(i),"_lastTotalFrames",0),L(D(i),"_performanceEntries",[]),L(D(i),"_pendingFragLoadedUrls",[]),L(D(i),"_fragLoadedFiredOnce",!1),L(D(i),"_canPlayOccured",!1),L(D(i),"_isManualPreload",!1),i._rateHandler=new v,i._model=new s,i._setModelDelegates(),i._timer=new M({resetCounter:i.config.resetSessionCountdown,eventCounter:i.config.viewEventCountdown}),i._viewEventEnabled=!0,i._resetFlags(),i._addBindings(),i._model.updateModel({eventIndex:1,bufferTime:0,bufferTimeSum:0,playTimeSum:0}),performance&&i.config.uiConfId){var a=performance.getEntriesByType("resource").find((function(e){return e.name.match("embedPlaykitJs.*"+i.config.uiConfId)}));a&&i._model.updateModel({playerJSLoadTime:a.duration})}return i}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,r.isValid=function(){return!0};var a,o,T,S=r.prototype;return S._updateSoundModeInModel=function(){this._model.updateModel({soundMode:this.player.muted||0===this.player.volume?u:l})},S._updateViewabilityModeInModel=function(e){this._model.updateModel({viewabilityMode:e||this.player.isInPictureInPicture()?c:d})},S._handleNewPerformanceEntries=function(e){for(var t=e.getEntries(),n=0;n<t.length;n++)this._performanceEntries.push(t[n]);for(;this._pendingFragLoadedUrls.length;)this._handleFragPerformanceObserver(this._pendingFragLoadedUrls.pop())},S.destroy=function(){this.eventManager.destroy(),this._reset()},S._reset=function(){this._timer.destroy(),this._rateHandler.destroy(),this._performanceObserver&&this._performanceObserver.disconnect(),this._performanceEntries=[],this._pendingFragLoadedUrls=[]},S.reset=function(){this.eventManager.removeAll(),this._resetFlags(),this._addBindings(),this._model.updateModel({eventIndex:1,bufferTime:0,bufferTimeSum:0,playTimeSum:0,sessionStartTime:null}),this._reset()},S.loadMedia=function(){window.PerformanceObserver&&(this._performanceObserver=new window.PerformanceObserver(this._handleNewPerformanceEntries.bind(this)),this._performanceObserver.observe({entryTypes:["resource"]}))},S.getEventModel=function(e){if(e)return this._model.getModel(E[e])},S.sendAnalytics=function(e){var t=this;return new Promise((function(n,r){i.OVPAnalyticsService.trackEvent(t.config.serviceUrl,e,t.config.requestMethod).doHttpRequest().then((function(r){t._handleServerResponseSuccess(r,e),n()}),(function(n){t._handleServerResponseFailed(n,e),r(n)})),t._model.updateModel({eventIndex:t._model.getEventIndex()+1})}))},S._resetFlags=function(){this._previousCurrentTime=0,this._isPlaying=!1,this._isFirstPlay=!0,this._isFirstPlaying=!0,this._isEnded=!1,this._isPaused=!1,this._isBuffering=!1,this._timePercentEvent={PLAY_REACHED_25_PERCENT:!1,PLAY_REACHED_50_PERCENT:!1,PLAY_REACHED_75_PERCENT:!1,PLAY_REACHED_100_PERCENT:!1},this._canPlayOccured=!1,this._isManualPreload=!1},S._resetSession=function(){this.logger.debug("Reset KAVA session"),this._rateHandler.reset(),this._model.updateModel({eventIndex:1,bufferTimeSum:0,playTimeSum:0})},S._sendAnalytics=function(e){if(this._validate()){this._isBuffering&&(this._updateBufferModel(),this._bufferStartTime=Date.now());var t=this._model.getModel(e);if("function"==typeof this.config.tamperAnalyticsHandler)if(!this.config.tamperAnalyticsHandler(t))return void this.logger.debug("Cancel KAVA request",t);this.logger.debug("Sending KAVA event "+t.eventType+":"+e.type),this.sendAnalytics(t).catch((function(){}))}},S._handleServerResponseSuccess=function(e,t){this.logger.debug("KAVA event sent",t),this._updateSessionStartTimeModel(e)},S._handleServerResponseFailed=function(e,t){this.logger.warn("Failed to send KAVA event",t,e)},S._addBindings=function(){var e=this;this.eventManager.listen(this._timer,M.Event.TICK,(function(){return e._rateHandler.countCurrent()})),this.eventManager.listen(this._timer,M.Event.REPORT,(function(){return e._onReport()})),this.eventManager.listen(this._timer,M.Event.RESET,(function(){return e._resetSession()})),this.eventManager.listen(this.player,this.player.Event.SOURCE_SELECTED,(function(){return e._onSourceSelected()})),this.eventManager.listen(this.player,this.player.Event.ERROR,(function(t){return e._onError(t)})),this.eventManager.listen(this.player,this.player.Event.FIRST_PLAY,(function(){return e._onFirstPlay()})),this.eventManager.listen(this.player,this.player.Event.FRAG_LOADED,(function(t){return e._onFragLoaded(t)})),this.eventManager.listen(this.player,this.player.Event.MANIFEST_LOADED,(function(t){return e._onManifestLoaded(t)})),this.eventManager.listen(this.player,this.player.Event.TIMED_METADATA,(function(t){return e._onTimedMetadataLoaded(t)})),this.eventManager.listen(this.player,this.player.Event.TRACKS_CHANGED,(function(){return e._setInitialTracks()})),this.eventManager.listen(this.player,this.player.Event.PLAYING,(function(){return e._onPlaying()})),this.eventManager.listen(this.player,this.player.Event.FIRST_PLAYING,(function(){return e._onFirstPlaying()})),this.eventManager.listen(this.player,this.player.Event.SEEKING,(function(){return e._onSeeking()})),this.eventManager.listen(this.player,this.player.Event.PAUSE,(function(){return e._onPause()})),this.eventManager.listen(this.player,this.player.Event.ENDED,(function(){return e._onEnded()})),this.eventManager.listen(this.player,this.player.Event.TIME_UPDATE,(function(){return e._onTimeUpdate()})),this.eventManager.listen(this.player,this.player.Event.VIDEO_TRACK_CHANGED,(function(t){return e._onVideoTrackChanged(t)})),this.eventManager.listen(this.player,this.player.Event.AUDIO_TRACK_CHANGED,(function(t){return e._onAudioTrackChanged(t)})),this.eventManager.listen(this.player,this.player.Event.TEXT_TRACK_CHANGED,(function(t){return e._onTextTrackChanged(t)})),this.eventManager.listen(this.player,this.player.Event.PLAYER_STATE_CHANGED,(function(t){return e._onPlayerStateChanged(t)})),this.eventManager.listen(this.player,this.player.Event.RATE_CHANGE,(function(){return e._onPlaybackRateChanged()})),this.eventManager.listen(this.player,this.player.Event.CAN_PLAY,(function(){return e._onCanPlay()})),this.eventManager.listen(this.player,this.player.Event.LOAD_START,(function(){return e._onLoadStart()})),this.eventManager.listen(this.player,this.player.Event.VOLUME_CHANGE,(function(){return e._updateSoundModeInModel()})),this.eventManager.listen(this.player,this.player.Event.VISIBILITY_CHANGE,(function(t){return e._updateViewabilityModeInModel(t.payload.visible)})),this.eventManager.listen(this.player,this.player.Event.MUTE_CHANGE,(function(){return e._updateSoundModeInModel()})),this.eventManager.listen(this.player,this.player.Event.ENTER_FULLSCREEN,(function(){return e._model.updateModel({screenMode:p.FULLSCREEN})})),this.eventManager.listen(this.player,this.player.Event.EXIT_FULLSCREEN,(function(){return e._model.updateModel({screenMode:p.NOT_IN_FULLSCREEN})})),this.eventManager.listen(this.player,O,(function(){return e._onRelatedClicked()})),this.eventManager.listen(this.player,I,(function(){return e._onRelatedSelected()})),this._initTabMode(),this._initNetworkConnectionType()},S._onFirstPlaying=function(){this._isPlaying=!0,!this._fragLoadedFiredOnce&&this._performanceObserver&&(this._performanceObserver.disconnect(),this.logger.debug("This adapter / media doesn't fire fragLoaded - disconnect performance observer"))},S._onLoadStart=function(){this._loadStartTime=Date.now()},S._getRates=function(){var e=[];return this.player.getTracks(this.player.Track.VIDEO).forEach((function(t){return e.push(t.bandwidth/1024)})),e},S._setInitialTracks=function(){var e=this._getRates(),t=this.player.getActiveTracks();this._rateHandler.setRates(e),t.video&&this._rateHandler.setCurrent(t.video.bandwidth/1024),t.audio&&this._model.updateModel({language:t.audio.language}),t.text&&this._model.updateModel({caption:t.text.language})},S._getAvailableBuffer=function(){var e=NaN;return this.player.stats&&(e=this.player.stats.availableBuffer),e},S._getForwardBufferHealth=function(){var e=NaN,t=this._getAvailableBuffer(),n=this._getTargetBuffer();return isNaN(n)||(e=Math.round(1e3*t/n)/1e3),e},S._getTargetBuffer=function(){var e=NaN;return this.player.stats&&(e=this.player.stats.targetBuffer),e},S._getDroppedFramesRatio=function(){var e=-1,t=this._getDroppedAndDecodedFrames();if(t){var n,r,i=t[0],a=t[1];n=i-this._lastDroppedFrames,e=(r=a-this._lastTotalFrames)?Math.round(n/r*1e3)/1e3:0,this._lastTotalFrames=a,this._lastDroppedFrames=i}return e},S._getDroppedAndDecodedFrames=function(){if("function"==typeof this.player.getVideoElement().getVideoPlaybackQuality){var e=this.player.getVideoElement().getVideoPlaybackQuality();return[e.droppedVideoFrames,e.totalVideoFrames]}return"number"==typeof this.player.getVideoElement().webkitDroppedFrameCount&&"number"==typeof this.player.getVideoElement().webkitDecodedFrameCount?[this.player.getVideoElement().webkitDroppedFrameCount,this.player.getVideoElement().webkitDecodedFrameCount]:null},S._onReport=function(){this._viewEventEnabled?(this._updatePlayTimeSumModel(),this._model.updateModel({forwardBufferHealth:this._getForwardBufferHealth(),targetBuffer:this._getTargetBuffer(),droppedFramesRatio:this._getDroppedFramesRatio()}),this._sendAnalytics(E.VIEW)):this.logger.warn("VIEW event blocked because server response of viewEventsEnabled=false"),this._model.updateModel({totalSegmentsDownloadTime:0,totalSegmentsDownloadBytes:0,maxManifestDownloadTime:0,maxSegmentDownloadTime:0,maxNetworkConnectionOverhead:0,bufferTime:0})},S._updateNetworkConnectionTypeinModel=function(e){this._model.updateModel({networkConnectionType:e.effectiveType})},S._initNetworkConnectionType=function(){var e=this,t=window.navigator.connection||window.navigator.mozConnection||window.navigator.webkitConnection;t&&(this.eventManager.listen(t,"change",(function(){return e._updateNetworkConnectionTypeinModel(t)})),this._updateNetworkConnectionTypeinModel(t))},S._onPlaying=function(){if(this._isFirstPlaying){this._updateSoundModeInModel(),this._updateViewabilityModeInModel(this.player.isVisible),this.player.isUntimedImg()||this._timer.start(),this._isFirstPlaying=!1;var e="auto"===this.player.config.playback.preload||this._isManualPreload?this._firstPlayRequestTime:this._loadStartTime;this._model.updateModel({joinTime:r._getTimeDifferenceInSeconds(e)}),this._sendAnalytics(E.PLAY),this._onReport()}else this._isEnded?(this._timer.start(),this._isEnded=!1,this._sendAnalytics(E.REPLAY)):this._isPaused&&(this._timer.resume(),this._isPaused=!1,this._sendAnalytics(E.RESUME))},S._onCanPlay=function(){this._canPlayOccured=!0,this._model.updateModel({canPlayTime:r._getTimeDifferenceInSeconds(this._loadStartTime)})},S._onFirstPlay=function(){this._canPlayOccured&&(this._isManualPreload=!0),this._isFirstPlay=!1,this._firstPlayRequestTime=Date.now(),this._sendAnalytics(E.PLAY_REQUEST)},S._onSourceSelected=function(){this._sendAnalytics(E.IMPRESSION)},S._onSeeking=function(){this._previousCurrentTime=this.player.currentTime,this._model.updateModel({targetPosition:this.player.currentTime}),this._sendAnalytics(E.SEEK)},S._onPause=function(){this._isPaused=!0,this._timer.stop(),this._sendAnalytics(E.PAUSE)},S._onEnded=function(){this._isEnded=!0,this._onTimeUpdate(),this._model.updateModel({bufferTime:0})},S._onTimeUpdate=function(){if(!this.player.isLive()){this._updatePlayTimeSumModel();var e=parseFloat((this.player.currentTime/this.player.duration).toFixed(2));!this._timePercentEvent.PLAY_REACHED_25&&e>=.25&&(this._timePercentEvent.PLAY_REACHED_25=!0,this._sendAnalytics(E.PLAY_REACHED_25_PERCENT)),!this._timePercentEvent.PLAY_REACHED_50&&e>=.5&&(this._timePercentEvent.PLAY_REACHED_50=!0,this._sendAnalytics(E.PLAY_REACHED_50_PERCENT)),!this._timePercentEvent.PLAY_REACHED_75&&e>=.75&&(this._timePercentEvent.PLAY_REACHED_75=!0,this._sendAnalytics(E.PLAY_REACHED_75_PERCENT)),this._timePercentEvent.PLAY_REACHED_100||1!==e||(this._timePercentEvent.PLAY_REACHED_100=!0,this._sendAnalytics(E.PLAY_REACHED_100_PERCENT))}},S._onFragLoaded=function(e){(this._fragLoadedFiredOnce||(this._fragLoadedFiredOnce=!0),this._updateFragLoadedStats(e),this._performanceObserver)&&(this._handleFragPerformanceObserver(e.payload.url)||this._pendingFragLoadedUrls.push(e.payload.url))},S._handleFragPerformanceObserver=function(e){var t=this._performanceEntries.filter((function(t){return t.name==e})),n=t&&t.length?t[t.length-1]:null;if(n){this._updateMaxNetworkConnectionOverhead(n.connectEnd-n.domainLookupStart);var r=this._performanceEntries.indexOf(n);return r>-1&&r<this._performanceEntries.length&&(this._performanceEntries=this._performanceEntries.splice(r+1,this._performanceEntries.length-(r+1))),!0}return!1},S._updateMaxNetworkConnectionOverhead=function(e){this._model.updateModel({maxNetworkConnectionOverhead:Math.max(this._model.maxNetworkConnectionOverhead,e)})},S._updateFragLoadedStats=function(e){var t=Math.round(e.payload.miliSeconds)/1e3;this._model.updateModel({totalSegmentsDownloadTime:this._model.totalSegmentsDownloadTime+t,totalSegmentsDownloadBytes:this._model.totalSegmentsDownloadBytes+e.payload.bytes,maxSegmentDownloadTime:Math.max(t,this._model.maxSegmentDownloadTime)})},S._onManifestLoaded=function(e){var t=Math.round(e.payload.miliSeconds)/1e3;this._model.updateModel({maxManifestDownloadTime:Math.max(t,this._model.maxManifestDownloadTime)})},S._onTimedMetadataLoaded=function(e){var t=e.payload.cues.filter((function(e){return e.value&&"TEXT"===e.value.key}));if(t.length)try{this._model.updateModel({flavorParamsId:Number(JSON.parse(t[t.length-1].value.data).sequenceId)})}catch(e){this.logger.debug("error parsing id3",e)}},S._onVideoTrackChanged=function(e){var t=e.payload.selectedVideoTrack;this._rateHandler.setCurrent(t.bandwidth/1024),this.player.isAdaptiveBitrateEnabled()?this._sendAnalytics(E.FLAVOR_SWITCH):this._sendAnalytics(E.SOURCE_SELECTED)},S._onAudioTrackChanged=function(e){var t=e.payload.selectedAudioTrack;this._model.updateModel({language:t.language}),this._sendAnalytics(E.AUDIO_SELECTED)},S._onTextTrackChanged=function(e){if(this._isPlaying){var t=e.payload.selectedTextTrack;this._model.updateModel({caption:t.language}),this._sendAnalytics(E.CAPTIONS)}},S._onError=function(e){e.payload&&e.payload.severity===N.Severity.CRITICAL&&(this._model.updateModel({errorCode:e.payload.code,errorDetails:e.payload.data,errorPosition:this._isFirstPlay?_:this._isFirstPlaying?g:m}),this._sendAnalytics(E.ERROR),this.reset())},S._onPlaybackRateChanged=function(){this._sendAnalytics(E.SPEED)},S._onPlayerStateChanged=function(e){var t=e.payload.oldState,n=e.payload.newState;t.type===this.player.State.BUFFERING&&(this._isBuffering=!1,this._updateBufferModel(),this._sendAnalytics(E.BUFFER_END)),n.type===this.player.State.BUFFERING&&(this._isBuffering=!0,this._bufferStartTime=Date.now(),this._sendAnalytics(E.BUFFER_START))},S._onRelatedClicked=function(){this._sendAnalytics(E.RELATED_CLICKED)},S._onRelatedSelected=function(){this._sendAnalytics(E.RELATED_SELECTED)},S._updateSessionStartTimeModel=function(e){!this._model.getSessionStartTime()&&e&&("object"==typeof e?(this._model.updateModel({sessionStartTime:e.time}),this._viewEventEnabled=e.viewEventsEnabled):this._model.updateModel({sessionStartTime:e})),this._timer.isStopped()&&this._model.updateModel({sessionStartTime:null})},S._updateBufferModel=function(){var e=r._getTimeDifferenceInSeconds(this._bufferStartTime);this._model.updateModel({bufferTime:this._model.getBufferTime()+e,bufferTimeSum:this._model.getBufferTimeSum()+e})},S._updatePlayTimeSumModel=function(){var e;this.player.isLive()?e=this.config.viewEventCountdown-this._model.getBufferTime():(e=this.player.currentTime-this._previousCurrentTime,this._previousCurrentTime=this.player.currentTime),this._model.updateModel({playTimeSum:this._model.getPlayTimeSum()+e})},S._setModelDelegates=function(){var e=this;this._model.getPlaybackSpeed=function(){return e.player.playbackRate},this._model.getActualBitrate=function(){return e._rateHandler.getCurrent()},this._model.getAverageBitrate=function(){return e._rateHandler.getAverage()},this._model.getPartnerId=function(){return e.config.partnerId},this._model.getEntryId=function(){return e.config.entryId},this._model.getPlaylistId=function(){return e.config.playlistId},this._model.getSessionId=function(){return e.config.sessionId},this._model.getPersistentSessionId=function(){return e.config.persistentSessionId},this._model.getClientVer=function(){return e.config.playerVersion},this._model.getClientTag=function(){return"html5:v"+e.config.playerVersion},this._model.getKS=function(){return e.config.ks},this._model.getVirtualEventId=function(){return e.config.virtualEventId},this._model.getUIConfId=function(){return e.config.uiConfId},this._model.getReferrer=function(){return e.config.referrer},this._model.getCustomVar1=function(){return e.config.customVar1},this._model.getCustomVar2=function(){return e.config.customVar2},this._model.getCustomVar3=function(){return e.config.customVar3},this._model.getPosition=function(){return e._getPosition()},this._model.getDeliveryType=function(){return e._getDeliveryType()},this._model.getPlaybackType=function(){return e._getPlaybackType()},this._model.getPlaybackContext=function(){return e.config.playbackContext},this._model.getApplicationVersion=function(){return e.config.applicationVersion},this._model.getApplication=function(){return e.config.application},this._model.getKalturaApplicationVersion=function(){return e.config.kalturaApplicationVersion},this._model.getKalturaApplication=function(){return e._getKalturaApplicationId(e.config.kalturaApplication)},this._model.getUserId=function(){return e.config.userId}},S._getKalturaApplicationId=function(e){return e in b?b[e]:(this.logger.warn("Kava analytics - unknon kalturaAppName: "+e),"")},S._getPosition=function(){return this.player.isLive()?Number.isNaN(this.player.duration)||this.player.duration-this.player.currentTime<1?0:-(this.player.duration-this.player.currentTime):this._isFirstPlaying?this.player.currentTime||this.player.sources.startTime||0:this.player.currentTime},S._getDeliveryType=function(){return this.player.streamType===this.player.StreamType.PROGRESSIVE?"url":this.player.streamType},S._getPlaybackType=function(){if(this.player.isLive()){if(this.player.isDvr())if(this.player.duration-this.player.currentTime>=this.config.dvrThreshold)return"dvr";return"live"}return this.player.isImage()?"img":"vod"},S._validate=function(){return this.config.partnerId?!!this.config.entryId||(this._logMissingParam("entryId"),!1):(this._logMissingParam("partnerId"),!1)},S._logMissingParam=function(e){this.logger.warn("Kava analytics block report because of missing param "+e)},r._getTimeDifferenceInSeconds=function(e){return(Date.now()-e)/1e3},S._updateTabModeInModel=function(e){this._model.updateModel({tabMode:this._isTabHidden(e)&&!this.player.isInPictureInPicture()?f:h})},S._isTabHidden=function(e){return document[e]},S._initTabMode=function(){var e,t,n=this;void 0!==document.hidden?(e="hidden",t="visibilitychange"):void 0!==document.msHidden?(e="msHidden",t="msvisibilitychange"):void 0!==document.webkitHidden&&(e="webkitHidden",t="webkitvisibilitychange"),e&&t&&(this.eventManager.listen(document,t,(function(){return n._updateTabModeInModel(e)})),this._updateTabModeInModel(e))},a=r,(o=[{key:"EventType",get:function(){return k.Object.copyDeep(y)}}])&&w(a.prototype,o),T&&w(a,T),r}(r.BasePlugin);L(F,"defaultConfig",{serviceUrl:k.Http.protocol+"//analytics.kaltura.com/api_v3/index.php",requestMethod:R.GET,viewEventCountdown:10,resetSessionCountdown:30,dvrThreshold:120,playbackContext:"",applicationVersion:"",application:"",kalturaApplicationVersion:"",kalturaApplication:""});var x="1.5.0",B="@playkit-js/playkit-js-kava";Object(r.registerPlugin)("kava",F)}]);
1
+ var KalturaPlayer="object"==typeof KalturaPlayer?KalturaPlayer:{};KalturaPlayer.plugins=KalturaPlayer.plugins||{},KalturaPlayer.plugins.kava=function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.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 i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));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=2)}([function(e,t){e.exports=KalturaPlayer},function(e,t,n){window,e.exports=function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.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 i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));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=9)}([function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(2);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,r,i){void 0===i&&(i={}),this.severity=t,this.category=n,this.code=r,this.data=i,e._logger.error("Category:"+n+" | Code:"+r+" |",i)};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.a)("Error"))},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(0);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(){function e(e){void 0===e&&(e=new Map),i(this,"retryConfig",{async:!0,timeout:0,maxAttempts:4}),i(this,"_attemptCounter",1),this.headers=e}var t=e.prototype;return t.getUrl=function(e){return e+"/service/"+this.service+(this.action?"/action/"+this.action:"")},t.doHttpRequest=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},t._createXHR=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)},t._getResponseHeaders=function(e){return e.getAllResponseHeaders().split("\n").filter((function(e){return 0===e.toLowerCase().indexOf("x-")}))},t._handleError=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<this.retryConfig.maxAttempts))return this._requestPromise.reject(r);this._attemptCounter++,this._createXHR()},t._createError=function(e,t,n){return Object.assign(n,{url:this.url,headers:this._getResponseHeaders(e),attempt:this._attemptCounter}),new r.a(r.a.Severity.CRITICAL,r.a.Category.NETWORK,t,n)},e}()},function(e,t,n){"use strict";var r=function(){return{VERSION:"",DEBUG:{value:"",name:""},ERROR:{value:"",name:""},INFO:{value:"",name:""},OFF:{value:"",name:""},TIME:{value:"",name:""},TRACE:{value:"",name:""},WARN:{value:"",name:""},createDefaultHandler:function(){},debug:function(){},enabledFor:function(){},error:function(){},get:function(){},getLevel:function(){},info:function(){},log:function(){},setHandler:function(){},setLevel:function(){},time:function(){},timeEnd:function(){},trace:function(){},useDefaults:function(){},warn:function(){}}};t.a=function(e){return r(e)}},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(4),i={serviceUrl:"https://cdnapisec.kaltura.com/api_v3",cdnUrl:"https://cdnapisec.kaltura.com",serviceParams:{apiVersion:"3.3.0",format:1},useApiCaptions:!0,loadThumbnailWithKs:!1},a=function(){function e(){}return e.set=function(e){e&&Object.assign(i,e)},e.get=function(){return Object(r.a)(i)},e}()},function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var r=function e(t){var n;return Array.isArray(t)?(n=t.length>0?t.slice(0):[]).forEach((function(t,r){("object"==typeof t&&t!=={}||Array.isArray(t)&&t.length>0)&&(n[r]=e(t))})):"object"==typeof t?(n=Object.assign({},t),Object.keys(n).forEach((function(t){("object"==typeof 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 d}));var r=n(1),i=n(2),a=function(e){var t;(t="hasError")in this?Object.defineProperty(this,t,{value:!1,enumerable:!0,configurable:!0,writable:!0}):this[t]=!1,"KalturaAPIException"===e.objectType?(this.hasError=!0,this.error=new o(e.code,e.message)):e.error&&"KalturaAPIException"===e.error.objectType?(this.hasError=!0,this.error=new o(e.error.code,e.error.message)):this.data=e},o=function(e,t){this.code=e,this.message=t},s=n(0);function u(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=function(e){var t,n;function r(){for(var t,n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];return l(u(t=e.call.apply(e,[this].concat(r))||this),"requests",[]),t}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var i=r.prototype;return i.add=function(e){var t;this.requests.push(e);var n={},r={service:e.service,action:e.action};return Object.assign(n,((t={})[this.requests.length]=Object.assign(r,e.params),t)),Object.assign(n,this.params),this.params=n,this},i.execute=function(e){var t=this;return new Promise((function(n,i){try{t.params=JSON.stringify(t.params)}catch(e){r._logger.error(""+e.message),i(new s.a(s.a.Severity.CRITICAL,s.a.Category.PROVIDER,s.a.Code.FAILED_PARSING_REQUEST,{error:e,params:t.params}))}t.doHttpRequest().then((function(r){var a=new c(r,e);a.success?n({headers:t.responseHeaders,response:a}):i(new s.a(s.a.Severity.CRITICAL,s.a.Category.NETWORK,s.a.Code.MULTIREQUEST_API_ERROR,{url:t.url,headers:t.responseHeaders,results:a.results}))}),(function(e){i(e)}))}))},r}(r.a);l(d,"_logger",Object(i.a)("MultiRequestBuilder"));var c=function e(t,n){void 0===n&&(n=!0),l(this,"results",[]);var r=t.result?t.result:t,i=(Array.isArray(r)?r:[r]).map((function(e){return new a(e)})),o=i.filter((function(e){return e.hasError}));o.forEach((function(t){e._logger.error("Service returned an error with error code: "+t.error.code+" and message: "+t.error.message+".")})),this.results=i,n&&o.length||o.length===this.results.length?this.success=!1:(this.results=this.results.filter((function(e){return!e.hasError})),this.success=!0)};l(c,"_logger",Object(i.a)("MultiRequestResult"))},function(e,t,n){"use strict";n.d(t,"a",(function(){return r}));var r=function(e){var t=[],n=/\[\]$/,r=function(e){return"[object Array]"===Object.prototype.toString.call(e)},i=function(e,n){n="function"==typeof n?n():null==n?"":n,t[t.length]=encodeURIComponent(e)+"="+encodeURIComponent(n)};return function e(a,o){var s,u,l;if(a)if(r(o))for(s=0,u=o.length;s<u;s++)n.test(a)?i(a,o[s]):e(a+":"+("object"==typeof o[s]?s:""),o[s]);else if(o&&"[object Object]"===String(o))for(l in o)e(a+":"+l,o[l]);else i(a,o);else if(r(o))for(s=0,u=o.length;s<u;s++)i(o[s].name,o[s].value);else for(l in o)e(l,o[l]);return t}("",e).join("&").replace(/%20/g,"+")}},function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));var r=n(5),i=n(3),a=function(){function e(){}return e.getMultiRequest=function(e,t,n){var a=i.a.get(),o=a.serviceParams;Object.assign(o,{ks:t,clientTag:"html5:v"+e}),n&&Object.assign(o,{partnerId:n});var s=new Map;s.set("Content-Type","application/json");var u=new r.a(s);return u.method="POST",u.service="multirequest",u.url=u.getUrl(a.serviceUrl),u.params=o,u},e}()},,function(e,t,n){"use strict";n.r(t),n.d(t,"OVPAnalyticsService",(function(){return s})),n.d(t,"OVPConfiguration",(function(){return i.a})),n.d(t,"RequestBuilder",(function(){return r.a})),n.d(t,"NAME",(function(){return u})),n.d(t,"VERSION",(function(){return l}));var r=n(1),i=n(3),a=n(7),o=n(6),s=function(e){var t,n;function a(){return e.apply(this,arguments)||this}return n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,a.trackEvent=function(e,t,n){return"POST"===n?a._trackEventByPOST(e,t):a._trackEventByGET(e,t)},a._trackEventByGET=function(e,t){var n=i.a.get(),a={};Object.assign(a,n.serviceParams,t);var s=new r.a;return s.service="analytics",s.action="trackEvent",s.method="GET",s.tag="analytics-trackEvent",s.params=a,s.url=e+"?service="+s.service+"&action="+s.action+"&"+Object(o.a)(s.params),s},a._trackEventByPOST=function(e,t){var n=i.a.get(),a={};Object.assign(a,n.serviceParams,t);var s=new Map;s.set("Content-Type","application/json");var u=new r.a(s),l={eventType:a.eventType,partnerId:a.partnerId,entryId:a.entryId,sessionId:a.sessionId};return["eventType","partnerId","entryId","sessionId"].forEach((function(e){return delete a[e]})),u.service="analytics",u.action="trackEvent",u.method="POST",u.tag="analytics-trackEvent",u.params=JSON.stringify(a),u.url=e+"?service="+u.service+"&action="+u.action+"&"+Object(o.a)(l),u},a}(a.a),u="playkit-js-providers-analytics-service",l="2.37.0"}])},function(e,t,n){"use strict";n.r(t),n.d(t,"Plugin",(function(){return F})),n.d(t,"EventType",(function(){return y})),n.d(t,"HttpMethodType",(function(){return R})),n.d(t,"VERSION",(function(){return x})),n.d(t,"NAME",(function(){return B}));var r=n(0),i=n(1);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var o,s=function(){function e(e){a(this,"totalSegmentsDownloadTime",0),a(this,"totalSegmentsDownloadBytes",0),a(this,"maxSegmentDownloadTime",0),a(this,"maxManifestDownloadTime",0),a(this,"droppedFramesRatio",null),a(this,"screenMode",p.NOT_IN_FULLSCREEN),a(this,"maxNetworkConnectionOverhead",0),a(this,"flavorParamsId",NaN),a(this,"playerJSLoadTime",null),e&&this.updateModel(e)}var t=e.prototype;return t.getPlayTimeSum=function(){return this.playTimeSum},t.getCanPlayTime=function(){return this.canPlayTime},t.getBufferTime=function(){return this.bufferTime},t.getBufferTimeSum=function(){return this.bufferTimeSum},t.getPlayerJSLoadTime=function(){return this.playerJSLoadTime?Math.round(1e3*this.playerJSLoadTime)/1e3:null},t.getJoinTime=function(){return this.joinTime},t.getTargetPosition=function(){return this.targetPosition},t.getTargetBuffer=function(){return this.targetBuffer},t.getLanguage=function(){return this.language},t.getCaption=function(){return this.caption},t.getBandwidth=function(){return this.totalSegmentsDownloadTime>0?Math.round(8*this.totalSegmentsDownloadBytes/this.totalSegmentsDownloadTime)/1e3:0},t.getMaxManifestDownloadTime=function(){return this.maxManifestDownloadTime},t.getSegmentDownloadTime=function(){return this.maxSegmentDownloadTime},t.getForwardBufferHealth=function(){return this.forwardBufferHealth},t.getDroppedFramesRatio=function(){return this.droppedFramesRatio},t.getSoundMode=function(){return this.soundMode},t.getViewabilityMode=function(){return this.viewabilityMode},t.getScreenMode=function(){return this.screenMode},t.getTabMode=function(){return this.tabMode},t.getNetworkConnectionType=function(){return this.networkConnectionType},t.getNetworkConnectionOverhead=function(){return Math.round(this.maxNetworkConnectionOverhead)/1e3},t.getErrorCode=function(){return this.errorCode},t.getFlavorParamsId=function(){return this.flavorParamsId},t.getErrorDetails=function(){var e="";if(this.errorDetails)try{e=JSON.stringify(this.errorDetails)}catch(e){}return e},t.getEventIndex=function(){return this.eventIndex},t.getErrorPosition=function(){return this.errorPosition},t.getSessionStartTime=function(){return this.sessionStartTime},t.updateModel=function(e){Object.assign(this,e)},t.getModel=function(e){return function(e,t){var n={eventType:e.index,partnerId:t.getPartnerId(),entryId:t.getEntryId(),sessionId:t.getSessionId(),eventIndex:t.getEventIndex(),referrer:t.getReferrer(),deliveryType:t.getDeliveryType(),playbackType:t.getPlaybackType(),clientVer:t.getClientVer(),clientTag:t.getClientTag(),position:t.getPosition(),playbackSpeed:t.getPlaybackSpeed()};t.getCaption()&&(n.caption=t.getCaption());t.getSessionStartTime()&&(n.sessionStartTime=t.getSessionStartTime());t.getKS()&&(n.ks=t.getKS());t.getVirtualEventId()&&(n.virtualEventId=t.getVirtualEventId());t.getUIConfId()&&(n.uiConfId=t.getUIConfId());t.getPlaylistId()&&(n.playlistId=t.getPlaylistId());t.getCustomVar1()&&(n.customVar1=t.getCustomVar1());t.getCustomVar2()&&(n.customVar2=t.getCustomVar2());t.getCustomVar3()&&(n.customVar3=t.getCustomVar3());t.getPlaybackContext()&&(n.playbackContext=t.getPlaybackContext());t.getApplicationVersion()&&(n.applicationVer=t.getApplicationVersion());t.getApplication()&&(n.application=t.getApplication());t.getKalturaApplicationVersion()&&(n.kalturaApplicationVer=t.getKalturaApplicationVersion());t.getKalturaApplication()&&(n.kalturaApplication=t.getKalturaApplication());t.getUserId()&&(n.userId=t.getUserId());t.getPersistentSessionId()&&(n.persistentSessionId=t.getPersistentSessionId());var r=e.getEventModel(t);return Object.assign(r,n)}(e,this)},e}(),u=1,l=2,d=1,c=2,f=1,h=2,p={NOT_IN_FULLSCREEN:1,FULLSCREEN:2},_=3,g=1,m=2,E={VIEW:{type:"VIEW",index:99,getEventModel:function(e){var t={playTimeSum:e.getPlayTimeSum(),bufferTime:e.getBufferTime(),bufferTimeSum:e.getBufferTimeSum(),actualBitrate:e.getActualBitrate(),averageBitrate:e.getAverageBitrate(),audioLanguage:e.getLanguage(),soundMode:e.getSoundMode(),tabMode:e.getTabMode(),viewabilityMode:e.getViewabilityMode(),screenMode:e.getScreenMode()};return isNaN(e.getForwardBufferHealth())||(t.forwardBufferHealth=e.getForwardBufferHealth()),e.getMaxManifestDownloadTime()>0&&(t.manifestDownloadTime=e.getMaxManifestDownloadTime()),e.getSegmentDownloadTime()>0&&(t.segmentDownloadTime=e.getSegmentDownloadTime()),e.getBandwidth()&&(t.bandwidth=e.getBandwidth()),null!=e.getDroppedFramesRatio()&&(t.droppedFramesRatio=e.getDroppedFramesRatio()),isNaN(e.getTargetBuffer())||(t.targetBuffer=e.getTargetBuffer()),""!==e.getNetworkConnectionType()&&(t.networkConnectionType=e.getNetworkConnectionType()),e.getNetworkConnectionOverhead()&&(t.networkConnectionOverhead=e.getNetworkConnectionOverhead()),isNaN(e.getFlavorParamsId())||(t.flavorParamsId=e.getFlavorParamsId()),t}},IMPRESSION:{type:"IMPRESSION",index:1,getEventModel:function(e){var t={};return null!=e.getPlayerJSLoadTime()&&(t.playerJSLoadTime=e.getPlayerJSLoadTime()),t}},PLAY_REQUEST:{type:"PLAY_REQUEST",index:2,getEventModel:function(){return{}}},PLAY:{type:"PLAY",index:3,getEventModel:function(e){var t={bufferTime:e.getBufferTime(),bufferTimeSum:e.getBufferTimeSum(),actualBitrate:e.getActualBitrate(),joinTime:e.getJoinTime(),canPlay:e.getCanPlayTime()};return""!==e.getNetworkConnectionType()&&(t.networkConnectionType=e.getNetworkConnectionType()),t}},RESUME:{type:"RESUME",index:4,getEventModel:function(e){return{bufferTime:e.getBufferTime(),bufferTimeSum:e.getBufferTimeSum(),actualBitrate:e.getActualBitrate()}}},PAUSE:{type:"PAUSE",index:33,getEventModel:function(){return{}}},BUFFER_START:{type:"BUFFER_START",index:45,getEventModel:function(){return{}}},BUFFER_END:{type:"BUFFER_END",index:46,getEventModel:function(){return{}}},REPLAY:{type:"REPLAY",index:34,getEventModel:function(){return{}}},SEEK:{type:"SEEK",index:35,getEventModel:function(e){return{targetPosition:e.getTargetPosition()}}},PLAY_REACHED_25_PERCENT:{type:"PLAY_REACHED_25_PERCENT",index:11,getEventModel:function(){return{}}},PLAY_REACHED_50_PERCENT:{type:"PLAY_REACHED_50_PERCENT",index:12,getEventModel:function(){return{}}},PLAY_REACHED_75_PERCENT:{type:"PLAY_REACHED_75_PERCENT",index:13,getEventModel:function(){return{}}},PLAY_REACHED_100_PERCENT:{type:"PLAY_REACHED_100_PERCENT",index:14,getEventModel:function(){return{}}},SOURCE_SELECTED:{type:"SOURCE_SELECTED",index:39,getEventModel:function(e){return{actualBitrate:e.getActualBitrate()}}},AUDIO_SELECTED:{type:"AUDIO_SELECTED",index:42,getEventModel:function(e){return{language:e.getLanguage()}}},FLAVOR_SWITCH:{type:"FLAVOR_SWITCH",index:43,getEventModel:function(e){return{actualBitrate:e.getActualBitrate()}}},SPEED:{type:"SPEED",index:41,getEventModel:function(){return{}}},CAPTIONS:{type:"CAPTIONS",index:38,getEventModel:function(){return{}}},ERROR:{type:"ERROR",index:98,getEventModel:function(e){return{errorCode:e.getErrorCode(),errorDetails:e.getErrorDetails(),errorPosition:e.getErrorPosition()}}},RELATED_CLICKED:{type:"RELATED_CLICKED",index:36,getEventModel:function(){return{}}},RELATED_SELECTED:{type:"RELATED_SELECTED",index:37,getEventModel:function(){return{}}}},y=(o={},Object.keys(E).forEach((function(e){return o[e]=e})),o);var v=function(){function e(){var e,t,n;n=[],(t="_rates")in(e=this)?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,this._rates=[]}var t=e.prototype;return t.setRates=function(e){var t=this;this._rates=[],e.forEach((function(e){t._rates.push({rate:e,active:!1,duration:0})}))},t.setCurrent=function(e){this._rates.forEach((function(e){return e.active=!1}));var t=this._rates.find((function(t){return t.rate===e}));t&&(t.active=!0)},t.getCurrent=function(){var e=this._rates.find((function(e){return e.active}));return e?e.rate:-1},t.countCurrent=function(){var e=this._rates.find((function(e){return e.active}));e&&e.duration++},t.getAverage=function(){var e=0,t=0;return this._rates.forEach((function(n){t+=n.rate*n.duration,e+=n.duration})),e?t/e:0},t.reset=function(){this._rates.forEach((function(e){return e.duration=0}))},t.destroy=function(){this._rates=[]},e}();var T,S,P,C=r.core.FakeEvent,A=r.core.FakeEventTarget,M=function(e){var t,n;function r(t){var n;return(n=e.call(this)||this)._config=t,n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var i=r.prototype;return i.start=function(){var e=this;this._clearTimeout(),this._stopped=!1,this._resetCounter=0,this._eventCounter=0,this._intervalId=setInterval((function(){return e._monitor()}),1e3)},i.resume=function(){this._stopped=!1,this._resetCounter=0},i.stop=function(){this._stopped=!0},i.isStopped=function(){return this._stopped},i.destroy=function(){this._clearTimeout()},i._clearTimeout=function(){this._intervalId&&(clearInterval(this._intervalId),this._intervalId=null)},i._monitor=function(){this._stopped?(this._resetCounter===this._config.resetCounter&&(this.dispatchEvent(new C(r.Event.RESET)),this._resetCounter=0,this._eventCounter=0),this._resetCounter++):(this.dispatchEvent(new C(r.Event.TICK)),this._eventCounter===this._config.eventCounter&&(this.dispatchEvent(new C(r.Event.REPORT)),this._eventCounter=0),this._eventCounter++)},r}(A);P={TICK:"tick",RESET:"reset",REPORT:"report"},(S="Event")in(T=M)?Object.defineProperty(T,S,{value:P,enumerable:!0,configurable:!0,writable:!0}):T[S]=P;var R={GET:"GET",POST:"POST"},b={KMC:"0",KMS:"1",KAF:"2",PITCH:"3",KMS_GO:"4",WEBCASTING:"5",PERSONAL_CAPTURE:"6",KME:"7",KME_MOBILE_APP:"8",PATH:"9",LECTURE_CAPTURE:"10",EP:"11",CHAT_AND_COLLABORATION:"12",ANALYTICS:"13",EXPRESS_CAPTURE:"14",KPF:"15",KAF_GO:"16",SITES:"17",STUDIO:"18"};const I="related_selected",O="related_clicked";function w(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function D(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function L(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var N=r.core.Error,k=(r.core.FakeEvent,r.core.Utils),F=function(e){var t,n;function r(t,n,r){var i;if(L(D(i=e.call(this,t,n,r)||this),"_lastDroppedFrames",0),L(D(i),"_lastTotalFrames",0),L(D(i),"_performanceEntries",[]),L(D(i),"_pendingFragLoadedUrls",[]),L(D(i),"_fragLoadedFiredOnce",!1),L(D(i),"_canPlayOccured",!1),L(D(i),"_isManualPreload",!1),i._rateHandler=new v,i._model=new s,i._setModelDelegates(),i._timer=new M({resetCounter:i.config.resetSessionCountdown,eventCounter:i.config.viewEventCountdown}),i._viewEventEnabled=!0,i._resetFlags(),i._addBindings(),i._model.updateModel({eventIndex:1,bufferTime:0,bufferTimeSum:0,playTimeSum:0}),performance&&i.config.uiConfId){var a=performance.getEntriesByType("resource").find((function(e){return e.name.match("embedPlaykitJs.*"+i.config.uiConfId)}));a&&i._model.updateModel({playerJSLoadTime:a.duration})}return i}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,r.isValid=function(){return!0};var a,o,T,S=r.prototype;return S._updateSoundModeInModel=function(){this._model.updateModel({soundMode:this.player.muted||0===this.player.volume?u:l})},S._updateViewabilityModeInModel=function(e){this._model.updateModel({viewabilityMode:e||this.player.isInPictureInPicture()?c:d})},S._handleNewPerformanceEntries=function(e){for(var t=e.getEntries(),n=0;n<t.length;n++)this._performanceEntries.push(t[n]);for(;this._pendingFragLoadedUrls.length;)this._handleFragPerformanceObserver(this._pendingFragLoadedUrls.pop())},S.destroy=function(){this.eventManager.destroy(),this._reset()},S._reset=function(){this._timer.destroy(),this._rateHandler.destroy(),this._performanceObserver&&this._performanceObserver.disconnect(),this._performanceEntries=[],this._pendingFragLoadedUrls=[]},S.reset=function(){this.eventManager.removeAll(),this._resetFlags(),this._addBindings(),this._model.updateModel({eventIndex:1,bufferTime:0,bufferTimeSum:0,playTimeSum:0,sessionStartTime:null}),this._reset()},S.loadMedia=function(){window.PerformanceObserver&&(this._performanceObserver=new window.PerformanceObserver(this._handleNewPerformanceEntries.bind(this)),this._performanceObserver.observe({entryTypes:["resource"]}))},S.getEventModel=function(e){if(e)return this._model.getModel(E[e])},S.sendAnalytics=function(e){var t=this;return new Promise((function(n,r){i.OVPAnalyticsService.trackEvent(t.config.serviceUrl,e,t.config.requestMethod).doHttpRequest().then((function(r){t._handleServerResponseSuccess(r,e),n()}),(function(n){t._handleServerResponseFailed(n,e),r(n)})),t._model.updateModel({eventIndex:t._model.getEventIndex()+1})}))},S._resetFlags=function(){this._previousCurrentTime=0,this._isPlaying=!1,this._isFirstPlay=!0,this._isFirstPlaying=!0,this._isEnded=!1,this._isPaused=!1,this._isBuffering=!1,this._timePercentEvent={PLAY_REACHED_25_PERCENT:!1,PLAY_REACHED_50_PERCENT:!1,PLAY_REACHED_75_PERCENT:!1,PLAY_REACHED_100_PERCENT:!1},this._canPlayOccured=!1,this._isManualPreload=!1},S._resetSession=function(){this.logger.debug("Reset KAVA session"),this._rateHandler.reset(),this._model.updateModel({eventIndex:1,bufferTimeSum:0,playTimeSum:0})},S._sendAnalytics=function(e){if(this._validate()){this._isBuffering&&(this._updateBufferModel(),this._bufferStartTime=Date.now());var t=this._model.getModel(e);if("function"==typeof this.config.tamperAnalyticsHandler)if(!this.config.tamperAnalyticsHandler(t))return void this.logger.debug("Cancel KAVA request",t);this.logger.debug("Sending KAVA event "+t.eventType+":"+e.type),this.sendAnalytics(t).catch((function(){}))}},S._handleServerResponseSuccess=function(e,t){this.logger.debug("KAVA event sent",t),this._updateSessionStartTimeModel(e)},S._handleServerResponseFailed=function(e,t){this.logger.warn("Failed to send KAVA event",t,e)},S._addBindings=function(){var e=this;this.eventManager.listen(this._timer,M.Event.TICK,(function(){return e._rateHandler.countCurrent()})),this.eventManager.listen(this._timer,M.Event.REPORT,(function(){return e._onReport()})),this.eventManager.listen(this._timer,M.Event.RESET,(function(){return e._resetSession()})),this.eventManager.listen(this.player,this.player.Event.SOURCE_SELECTED,(function(){return e._onSourceSelected()})),this.eventManager.listen(this.player,this.player.Event.ERROR,(function(t){return e._onError(t)})),this.eventManager.listen(this.player,this.player.Event.FIRST_PLAY,(function(){return e._onFirstPlay()})),this.eventManager.listen(this.player,this.player.Event.FRAG_LOADED,(function(t){return e._onFragLoaded(t)})),this.eventManager.listen(this.player,this.player.Event.MANIFEST_LOADED,(function(t){return e._onManifestLoaded(t)})),this.eventManager.listen(this.player,this.player.Event.TIMED_METADATA,(function(t){return e._onTimedMetadataLoaded(t)})),this.eventManager.listen(this.player,this.player.Event.TRACKS_CHANGED,(function(){return e._setInitialTracks()})),this.eventManager.listen(this.player,this.player.Event.PLAYING,(function(){return e._onPlaying()})),this.eventManager.listen(this.player,this.player.Event.FIRST_PLAYING,(function(){return e._onFirstPlaying()})),this.eventManager.listen(this.player,this.player.Event.SEEKING,(function(){return e._onSeeking()})),this.eventManager.listen(this.player,this.player.Event.PAUSE,(function(){return e._onPause()})),this.eventManager.listen(this.player,this.player.Event.ENDED,(function(){return e._onEnded()})),this.eventManager.listen(this.player,this.player.Event.TIME_UPDATE,(function(){return e._onTimeUpdate()})),this.eventManager.listen(this.player,this.player.Event.VIDEO_TRACK_CHANGED,(function(t){return e._onVideoTrackChanged(t)})),this.eventManager.listen(this.player,this.player.Event.AUDIO_TRACK_CHANGED,(function(t){return e._onAudioTrackChanged(t)})),this.eventManager.listen(this.player,this.player.Event.TEXT_TRACK_CHANGED,(function(t){return e._onTextTrackChanged(t)})),this.eventManager.listen(this.player,this.player.Event.PLAYER_STATE_CHANGED,(function(t){return e._onPlayerStateChanged(t)})),this.eventManager.listen(this.player,this.player.Event.RATE_CHANGE,(function(){return e._onPlaybackRateChanged()})),this.eventManager.listen(this.player,this.player.Event.CAN_PLAY,(function(){return e._onCanPlay()})),this.eventManager.listen(this.player,this.player.Event.LOAD_START,(function(){return e._onLoadStart()})),this.eventManager.listen(this.player,this.player.Event.VOLUME_CHANGE,(function(){return e._updateSoundModeInModel()})),this.eventManager.listen(this.player,this.player.Event.VISIBILITY_CHANGE,(function(t){return e._updateViewabilityModeInModel(t.payload.visible)})),this.eventManager.listen(this.player,this.player.Event.MUTE_CHANGE,(function(){return e._updateSoundModeInModel()})),this.eventManager.listen(this.player,this.player.Event.ENTER_FULLSCREEN,(function(){return e._model.updateModel({screenMode:p.FULLSCREEN})})),this.eventManager.listen(this.player,this.player.Event.EXIT_FULLSCREEN,(function(){return e._model.updateModel({screenMode:p.NOT_IN_FULLSCREEN})})),this.eventManager.listen(this.player,O,(function(){return e._onRelatedClicked()})),this.eventManager.listen(this.player,I,(function(){return e._onRelatedSelected()})),this._initTabMode(),this._initNetworkConnectionType()},S._onFirstPlaying=function(){this._isPlaying=!0,!this._fragLoadedFiredOnce&&this._performanceObserver&&(this._performanceObserver.disconnect(),this.logger.debug("This adapter / media doesn't fire fragLoaded - disconnect performance observer"))},S._onLoadStart=function(){this._loadStartTime=Date.now()},S._getRates=function(){var e=[];return this.player.getTracks(this.player.Track.VIDEO).forEach((function(t){return e.push(t.bandwidth/1024)})),e},S._setInitialTracks=function(){var e=this._getRates(),t=this.player.getActiveTracks();this._rateHandler.setRates(e),t.video&&this._rateHandler.setCurrent(t.video.bandwidth/1024),t.audio&&this._model.updateModel({language:t.audio.language}),t.text&&this._model.updateModel({caption:t.text.language})},S._getAvailableBuffer=function(){var e=NaN;return this.player.stats&&(e=this.player.stats.availableBuffer),e},S._getForwardBufferHealth=function(){var e=NaN,t=this._getAvailableBuffer(),n=this._getTargetBuffer();return isNaN(n)||(e=Math.round(1e3*t/n)/1e3),e},S._getTargetBuffer=function(){var e=NaN;return this.player.stats&&(e=this.player.stats.targetBuffer),e},S._getDroppedFramesRatio=function(){var e=-1,t=this._getDroppedAndDecodedFrames();if(t){var n,r,i=t[0],a=t[1];n=i-this._lastDroppedFrames,e=(r=a-this._lastTotalFrames)?Math.round(n/r*1e3)/1e3:0,this._lastTotalFrames=a,this._lastDroppedFrames=i}return e},S._getDroppedAndDecodedFrames=function(){if("function"==typeof this.player.getVideoElement().getVideoPlaybackQuality){var e=this.player.getVideoElement().getVideoPlaybackQuality();return[e.droppedVideoFrames,e.totalVideoFrames]}return"number"==typeof this.player.getVideoElement().webkitDroppedFrameCount&&"number"==typeof this.player.getVideoElement().webkitDecodedFrameCount?[this.player.getVideoElement().webkitDroppedFrameCount,this.player.getVideoElement().webkitDecodedFrameCount]:null},S._onReport=function(){this._viewEventEnabled?(this._updatePlayTimeSumModel(),this._model.updateModel({forwardBufferHealth:this._getForwardBufferHealth(),targetBuffer:this._getTargetBuffer(),droppedFramesRatio:this._getDroppedFramesRatio()}),this._sendAnalytics(E.VIEW)):this.logger.warn("VIEW event blocked because server response of viewEventsEnabled=false"),this._model.updateModel({totalSegmentsDownloadTime:0,totalSegmentsDownloadBytes:0,maxManifestDownloadTime:0,maxSegmentDownloadTime:0,maxNetworkConnectionOverhead:0,bufferTime:0})},S._updateNetworkConnectionTypeinModel=function(e){this._model.updateModel({networkConnectionType:e.effectiveType})},S._initNetworkConnectionType=function(){var e=this,t=window.navigator.connection||window.navigator.mozConnection||window.navigator.webkitConnection;t&&(this.eventManager.listen(t,"change",(function(){return e._updateNetworkConnectionTypeinModel(t)})),this._updateNetworkConnectionTypeinModel(t))},S._onPlaying=function(){if(this._isFirstPlaying){this._updateSoundModeInModel(),this._updateViewabilityModeInModel(this.player.isVisible),this.player.isUntimedImg()||this._timer.start(),this._isFirstPlaying=!1;var e="auto"===this.player.config.playback.preload||this._isManualPreload?this._firstPlayRequestTime:this._loadStartTime;this._model.updateModel({joinTime:r._getTimeDifferenceInSeconds(e)}),this._sendAnalytics(E.PLAY),this._onReport()}else this._isEnded?(this._timer.start(),this._isEnded=!1,this._sendAnalytics(E.REPLAY)):this._isPaused&&(this._timer.resume(),this._isPaused=!1,this._sendAnalytics(E.RESUME))},S._onCanPlay=function(){this._canPlayOccured=!0,this._model.updateModel({canPlayTime:r._getTimeDifferenceInSeconds(this._loadStartTime)})},S._onFirstPlay=function(){this._canPlayOccured&&(this._isManualPreload=!0),this._isFirstPlay=!1,this._firstPlayRequestTime=Date.now(),this._sendAnalytics(E.PLAY_REQUEST)},S._onSourceSelected=function(){this._sendAnalytics(E.IMPRESSION)},S._onSeeking=function(){this._previousCurrentTime=this.player.currentTime,this._model.updateModel({targetPosition:this.player.currentTime}),this._sendAnalytics(E.SEEK)},S._onPause=function(){this._isPaused=!0,this._timer.stop(),this._sendAnalytics(E.PAUSE)},S._onEnded=function(){this._isEnded=!0,this._onTimeUpdate(),this._model.updateModel({bufferTime:0})},S._onTimeUpdate=function(){if(!this.player.isLive()){this._updatePlayTimeSumModel();var e=parseFloat((this.player.currentTime/this.player.duration).toFixed(2));!this._timePercentEvent.PLAY_REACHED_25&&e>=.25&&(this._timePercentEvent.PLAY_REACHED_25=!0,this._sendAnalytics(E.PLAY_REACHED_25_PERCENT)),!this._timePercentEvent.PLAY_REACHED_50&&e>=.5&&(this._timePercentEvent.PLAY_REACHED_50=!0,this._sendAnalytics(E.PLAY_REACHED_50_PERCENT)),!this._timePercentEvent.PLAY_REACHED_75&&e>=.75&&(this._timePercentEvent.PLAY_REACHED_75=!0,this._sendAnalytics(E.PLAY_REACHED_75_PERCENT)),this._timePercentEvent.PLAY_REACHED_100||1!==e||(this._timePercentEvent.PLAY_REACHED_100=!0,this._sendAnalytics(E.PLAY_REACHED_100_PERCENT))}},S._onFragLoaded=function(e){(this._fragLoadedFiredOnce||(this._fragLoadedFiredOnce=!0),this._updateFragLoadedStats(e),this._performanceObserver)&&(this._handleFragPerformanceObserver(e.payload.url)||this._pendingFragLoadedUrls.push(e.payload.url))},S._handleFragPerformanceObserver=function(e){var t=this._performanceEntries.filter((function(t){return t.name==e})),n=t&&t.length?t[t.length-1]:null;if(n){this._updateMaxNetworkConnectionOverhead(n.connectEnd-n.domainLookupStart);var r=this._performanceEntries.indexOf(n);return r>-1&&r<this._performanceEntries.length&&(this._performanceEntries=this._performanceEntries.splice(r+1,this._performanceEntries.length-(r+1))),!0}return!1},S._updateMaxNetworkConnectionOverhead=function(e){this._model.updateModel({maxNetworkConnectionOverhead:Math.max(this._model.maxNetworkConnectionOverhead,e)})},S._updateFragLoadedStats=function(e){var t=Math.round(e.payload.miliSeconds)/1e3;this._model.updateModel({totalSegmentsDownloadTime:this._model.totalSegmentsDownloadTime+t,totalSegmentsDownloadBytes:this._model.totalSegmentsDownloadBytes+e.payload.bytes,maxSegmentDownloadTime:Math.max(t,this._model.maxSegmentDownloadTime)})},S._onManifestLoaded=function(e){var t=Math.round(e.payload.miliSeconds)/1e3;this._model.updateModel({maxManifestDownloadTime:Math.max(t,this._model.maxManifestDownloadTime)})},S._onTimedMetadataLoaded=function(e){var t=e.payload.cues.filter((function(e){return e.value&&"TEXT"===e.value.key}));if(t.length)try{this._model.updateModel({flavorParamsId:Number(JSON.parse(t[t.length-1].value.data).sequenceId)})}catch(e){this.logger.debug("error parsing id3",e)}},S._onVideoTrackChanged=function(e){var t=e.payload.selectedVideoTrack;this._rateHandler.setCurrent(t.bandwidth/1024),this.player.isAdaptiveBitrateEnabled()?this._sendAnalytics(E.FLAVOR_SWITCH):this._sendAnalytics(E.SOURCE_SELECTED)},S._onAudioTrackChanged=function(e){var t=e.payload.selectedAudioTrack;this._model.updateModel({language:t.language}),this._sendAnalytics(E.AUDIO_SELECTED)},S._onTextTrackChanged=function(e){if(this._isPlaying){var t=e.payload.selectedTextTrack;this._model.updateModel({caption:t.language}),this._sendAnalytics(E.CAPTIONS)}},S._onError=function(e){e.payload&&e.payload.severity===N.Severity.CRITICAL&&(this._model.updateModel({errorCode:e.payload.code,errorDetails:e.payload.data,errorPosition:this._isFirstPlay?_:this._isFirstPlaying?g:m}),this._sendAnalytics(E.ERROR),this.reset())},S._onPlaybackRateChanged=function(){this.player.playbackRates.length&&!this.player.playbackRates.includes(this.player.playbackRate)||this._sendAnalytics(E.SPEED)},S._onPlayerStateChanged=function(e){var t=e.payload.oldState,n=e.payload.newState;t.type===this.player.State.BUFFERING&&(this._isBuffering=!1,this._updateBufferModel(),this._sendAnalytics(E.BUFFER_END)),n.type===this.player.State.BUFFERING&&(this._isBuffering=!0,this._bufferStartTime=Date.now(),this._sendAnalytics(E.BUFFER_START))},S._onRelatedClicked=function(){this._sendAnalytics(E.RELATED_CLICKED)},S._onRelatedSelected=function(){this._sendAnalytics(E.RELATED_SELECTED)},S._updateSessionStartTimeModel=function(e){!this._model.getSessionStartTime()&&e&&("object"==typeof e?(this._model.updateModel({sessionStartTime:e.time}),this._viewEventEnabled=e.viewEventsEnabled):this._model.updateModel({sessionStartTime:e})),this._timer.isStopped()&&this._model.updateModel({sessionStartTime:null})},S._updateBufferModel=function(){var e=r._getTimeDifferenceInSeconds(this._bufferStartTime);this._model.updateModel({bufferTime:this._model.getBufferTime()+e,bufferTimeSum:this._model.getBufferTimeSum()+e})},S._updatePlayTimeSumModel=function(){var e;this.player.isLive()?e=this.config.viewEventCountdown-this._model.getBufferTime():(e=this.player.currentTime-this._previousCurrentTime,this._previousCurrentTime=this.player.currentTime),this._model.updateModel({playTimeSum:this._model.getPlayTimeSum()+e})},S._setModelDelegates=function(){var e=this;this._model.getPlaybackSpeed=function(){return e.player.playbackRate},this._model.getActualBitrate=function(){return e._rateHandler.getCurrent()},this._model.getAverageBitrate=function(){return e._rateHandler.getAverage()},this._model.getPartnerId=function(){return e.config.partnerId},this._model.getEntryId=function(){return e.config.entryId},this._model.getPlaylistId=function(){return e.config.playlistId},this._model.getSessionId=function(){return e.config.sessionId},this._model.getPersistentSessionId=function(){return e.config.persistentSessionId},this._model.getClientVer=function(){return e.config.playerVersion},this._model.getClientTag=function(){return"html5:v"+e.config.playerVersion},this._model.getKS=function(){return e.config.ks},this._model.getVirtualEventId=function(){return e.config.virtualEventId},this._model.getUIConfId=function(){return e.config.uiConfId},this._model.getReferrer=function(){return e.config.referrer},this._model.getCustomVar1=function(){return e.config.customVar1},this._model.getCustomVar2=function(){return e.config.customVar2},this._model.getCustomVar3=function(){return e.config.customVar3},this._model.getPosition=function(){return e._getPosition()},this._model.getDeliveryType=function(){return e._getDeliveryType()},this._model.getPlaybackType=function(){return e._getPlaybackType()},this._model.getPlaybackContext=function(){return e.config.playbackContext},this._model.getApplicationVersion=function(){return e.config.applicationVersion},this._model.getApplication=function(){return e.config.application},this._model.getKalturaApplicationVersion=function(){return e.config.kalturaApplicationVersion},this._model.getKalturaApplication=function(){return e._getKalturaApplicationId(e.config.kalturaApplication)},this._model.getUserId=function(){return e.config.userId}},S._getKalturaApplicationId=function(e){return e in b?b[e]:(this.logger.warn("Kava analytics - unknon kalturaAppName: "+e),"")},S._getPosition=function(){return this.player.isLive()?Number.isNaN(this.player.duration)||this.player.duration-this.player.currentTime<1?0:-(this.player.duration-this.player.currentTime):this._isFirstPlaying?this.player.currentTime||this.player.sources.startTime||0:this.player.currentTime},S._getDeliveryType=function(){return this.player.streamType===this.player.StreamType.PROGRESSIVE?"url":this.player.streamType},S._getPlaybackType=function(){if(this.player.isLive()){if(this.player.isDvr())if(this.player.duration-this.player.currentTime>=this.config.dvrThreshold)return"dvr";return"live"}return this.player.isImage()?"img":"vod"},S._validate=function(){return this.config.partnerId?!!this.config.entryId||(this._logMissingParam("entryId"),!1):(this._logMissingParam("partnerId"),!1)},S._logMissingParam=function(e){this.logger.warn("Kava analytics block report because of missing param "+e)},r._getTimeDifferenceInSeconds=function(e){return(Date.now()-e)/1e3},S._updateTabModeInModel=function(e){this._model.updateModel({tabMode:this._isTabHidden(e)&&!this.player.isInPictureInPicture()?f:h})},S._isTabHidden=function(e){return document[e]},S._initTabMode=function(){var e,t,n=this;void 0!==document.hidden?(e="hidden",t="visibilitychange"):void 0!==document.msHidden?(e="msHidden",t="msvisibilitychange"):void 0!==document.webkitHidden&&(e="webkitHidden",t="webkitvisibilitychange"),e&&t&&(this.eventManager.listen(document,t,(function(){return n._updateTabModeInModel(e)})),this._updateTabModeInModel(e))},a=r,(o=[{key:"EventType",get:function(){return k.Object.copyDeep(y)}}])&&w(a.prototype,o),T&&w(a,T),r}(r.BasePlugin);L(F,"defaultConfig",{serviceUrl:k.Http.protocol+"//analytics.kaltura.com/api_v3/index.php",requestMethod:R.GET,viewEventCountdown:10,resetSessionCountdown:30,dvrThreshold:120,playbackContext:"",applicationVersion:"",application:"",kalturaApplicationVersion:"",kalturaApplication:""});var x="1.5.1",B="@playkit-js/playkit-js-kava";Object(r.registerPlugin)("kava",F)}]);
2
2
  //# sourceMappingURL=playkit-kava.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["./kava/webpack/bootstrap","./kava/external [\"KalturaPlayer\"]","./kava/../node_modules/playkit-js-providers/dist/playkit-analytics-service.js","./kava/./kava-event-model.js","./kava/./kava-model.js","./kava/./kava-rate-handler.js","./kava/./kava-timer.js","./kava/./http-method-type.js","./kava/./kaltura-application.js","./kava/../node_modules/@playkit-js/related/src/event/related-event.js","./kava/./kava.js","./kava/./index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","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","KalturaPlayer","window","e","default","a","configurable","writable","this","severity","category","code","data","_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","Map","async","timeout","maxAttempts","headers","getUrl","service","action","doHttpRequest","Promise","_requestPromise","resolve","reject","url","Severity","Category","Code","_createXHR","XMLHttpRequest","onreadystatechange","readyState","status","JSON","parse","responseText","responseHeaders","_getResponseHeaders","_createError","text","open","method","retryConfig","performance","now","ontimeout","_handleError","statusText","onerror","onabort","forEach","setRequestHeader","send","params","getAllResponseHeaders","split","filter","toLowerCase","indexOf","_attemptCounter","assign","attempt","VERSION","DEBUG","INFO","OFF","TIME","TRACE","WARN","createDefaultHandler","debug","enabledFor","getLevel","info","log","setHandler","setLevel","time","timeEnd","trace","useDefaults","warn","serviceUrl","cdnUrl","serviceParams","apiVersion","format","useApiCaptions","loadThumbnailWithKs","set","Array","isArray","length","slice","keys","f","objectType","hasError","message","u","ReferenceError","arguments","apply","concat","constructor","__proto__","add","requests","push","execute","stringify","FAILED_PARSING_REQUEST","then","success","response","results","result","map","toString","encodeURIComponent","test","String","join","replace","getMultiRequest","ks","clientTag","partnerId","trackEvent","_trackEventByPOST","_trackEventByGET","tag","eventType","entryId","sessionId","KavaModel","model","ScreenMode","NOT_IN_FULLSCREEN","NaN","updateModel","getPlayTimeSum","playTimeSum","getCanPlayTime","canPlayTime","getBufferTime","bufferTime","getBufferTimeSum","bufferTimeSum","getPlayerJSLoadTime","playerJSLoadTime","Math","round","getJoinTime","joinTime","getTargetPosition","targetPosition","getTargetBuffer","targetBuffer","getLanguage","language","getCaption","caption","getBandwidth","totalSegmentsDownloadTime","totalSegmentsDownloadBytes","getMaxManifestDownloadTime","maxManifestDownloadTime","getSegmentDownloadTime","maxSegmentDownloadTime","getForwardBufferHealth","forwardBufferHealth","getDroppedFramesRatio","droppedFramesRatio","getSoundMode","soundMode","getViewabilityMode","viewabilityMode","getScreenMode","screenMode","getTabMode","tabMode","getNetworkConnectionType","networkConnectionType","getNetworkConnectionOverhead","maxNetworkConnectionOverhead","getErrorCode","errorCode","getFlavorParamsId","flavorParamsId","getErrorDetails","retVal","errorDetails","getEventIndex","eventIndex","getErrorPosition","errorPosition","getSessionStartTime","sessionStartTime","obj","getModel","eventObj","commonModel","index","getPartnerId","getEntryId","getSessionId","referrer","getReferrer","deliveryType","getDeliveryType","playbackType","getPlaybackType","clientVer","getClientVer","getClientTag","position","getPosition","playbackSpeed","getPlaybackSpeed","getKS","getVirtualEventId","virtualEventId","getUIConfId","uiConfId","getPlaylistId","playlistId","getCustomVar1","customVar1","getCustomVar2","customVar2","getCustomVar3","customVar3","getPlaybackContext","playbackContext","getApplicationVersion","applicationVer","getApplication","application","getKalturaApplicationVersion","kalturaApplicationVer","getKalturaApplication","kalturaApplication","getUserId","userId","getPersistentSessionId","persistentSessionId","eventModel","getEventModel","SoundMode","ViewabilityMode","TabMode","FULLSCREEN","ErrorPosition","KavaEventModel","VIEW","type","actualBitrate","getActualBitrate","averageBitrate","getAverageBitrate","audioLanguage","isNaN","manifestDownloadTime","segmentDownloadTime","bandwidth","networkConnectionOverhead","IMPRESSION","PLAY_REQUEST","PLAY","canPlay","RESUME","PAUSE","BUFFER_START","BUFFER_END","REPLAY","SEEK","PLAY_REACHED_25_PERCENT","PLAY_REACHED_50_PERCENT","PLAY_REACHED_75_PERCENT","PLAY_REACHED_100_PERCENT","SOURCE_SELECTED","AUDIO_SELECTED","FLAVOR_SWITCH","SPEED","CAPTIONS","RELATED_CLICKED","RELATED_SELECTED","KavaEventType","k","KavaRateHandler","_rates","setRates","rates","rate","active","duration","setCurrent","find","getCurrent","current","countCurrent","getAverage","totalDuration","sum","reset","destroy","FakeEvent","core","FakeEventTarget","KavaTimer","config","_config","start","_clearTimeout","_stopped","_resetCounter","_eventCounter","_intervalId","setInterval","_monitor","resume","stop","isStopped","clearInterval","resetCounter","dispatchEvent","Event","RESET","TICK","eventCounter","REPORT","HttpMethodType","GET","POST","KalturaApplication","KMC","KMS","KAF","PITCH","KMS_GO","WEBCASTING","PERSONAL_CAPTURE","KME","KME_MOBILE_APP","PATH","LECTURE_CAPTURE","EP","CHAT_AND_COLLABORATION","ANALYTICS","EXPRESS_CAPTURE","KPF","KAF_GO","SITES","STUDIO","RelatedEvent","PKError","Error","Utils","Kava","player","_rateHandler","_model","_setModelDelegates","_timer","resetSessionCountdown","viewEventCountdown","_viewEventEnabled","_resetFlags","_addBindings","entry","getEntriesByType","match","isValid","_updateSoundModeInModel","muted","volume","_updateViewabilityModeInModel","isVisible","isInPictureInPicture","_handleNewPerformanceEntries","list","perfEntries","getEntries","_performanceEntries","_pendingFragLoadedUrls","_handleFragPerformanceObserver","pop","eventManager","_reset","_performanceObserver","disconnect","removeAll","loadMedia","PerformanceObserver","observe","entryTypes","event","sendAnalytics","OVPAnalyticsService","requestMethod","_handleServerResponseSuccess","err","_handleServerResponseFailed","_previousCurrentTime","_isPlaying","_isFirstPlay","_isFirstPlaying","_isEnded","_isPaused","_isBuffering","_timePercentEvent","_canPlayOccured","_isManualPreload","_resetSession","logger","_sendAnalytics","_validate","_updateBufferModel","_bufferStartTime","Date","tamperAnalyticsHandler","catch","_updateSessionStartTimeModel","listen","_onReport","_onSourceSelected","_onError","FIRST_PLAY","_onFirstPlay","FRAG_LOADED","_onFragLoaded","MANIFEST_LOADED","_onManifestLoaded","TIMED_METADATA","_onTimedMetadataLoaded","TRACKS_CHANGED","_setInitialTracks","PLAYING","_onPlaying","FIRST_PLAYING","_onFirstPlaying","SEEKING","_onSeeking","_onPause","ENDED","_onEnded","TIME_UPDATE","_onTimeUpdate","VIDEO_TRACK_CHANGED","_onVideoTrackChanged","AUDIO_TRACK_CHANGED","_onAudioTrackChanged","TEXT_TRACK_CHANGED","_onTextTrackChanged","PLAYER_STATE_CHANGED","_onPlayerStateChanged","RATE_CHANGE","_onPlaybackRateChanged","CAN_PLAY","_onCanPlay","LOAD_START","_onLoadStart","VOLUME_CHANGE","VISIBILITY_CHANGE","payload","visible","MUTE_CHANGE","ENTER_FULLSCREEN","EXIT_FULLSCREEN","_onRelatedClicked","_onRelatedSelected","_initTabMode","_initNetworkConnectionType","_fragLoadedFiredOnce","_loadStartTime","_getRates","getTracks","Track","VIDEO","videoTrack","activeTracks","getActiveTracks","video","audio","_getAvailableBuffer","availableBuffer","stats","_getForwardBufferHealth","_getTargetBuffer","_getDroppedFramesRatio","droppedFrames","droppedAndDecoded","_getDroppedAndDecodedFrames","droppedFramesDelta","totalFramesDelta","lastDroppedFrames","lastTotalFrames","_lastDroppedFrames","_lastTotalFrames","getVideoElement","getVideoPlaybackQuality","videoPlaybackQuality","droppedVideoFrames","totalVideoFrames","webkitDroppedFrameCount","webkitDecodedFrameCount","_updatePlayTimeSumModel","_updateNetworkConnectionTypeinModel","navConnection","effectiveType","navigator","connection","mozConnection","webkitConnection","isUntimedImg","playRequestStartTime","playback","preload","_firstPlayRequestTime","_getTimeDifferenceInSeconds","currentTime","isLive","percent","parseFloat","toFixed","PLAY_REACHED_25","PLAY_REACHED_50","PLAY_REACHED_75","PLAY_REACHED_100","_updateFragLoadedStats","fragResourceTimings","lastFragResourceTiming","_updateMaxNetworkConnectionOverhead","connectEnd","domainLookupStart","lastIndexOftheFragment","splice","max","seconds","miliSeconds","bytes","id3TagCues","cues","Number","sequenceId","selectedVideoTrack","isAdaptiveBitrateEnabled","audioTrack","selectedAudioTrack","textTrack","selectedTextTrack","oldState","newState","State","BUFFERING","viewEventsEnabled","delta","playbackRate","playerVersion","_getPosition","_getDeliveryType","_getPlaybackType","applicationVersion","kalturaApplicationVersion","_getKalturaApplicationId","kalturaAppName","sources","startTime","streamType","StreamType","PROGRESSIVE","isDvr","dvrThreshold","isImage","_logMissingParam","missingParam","_updateTabModeInModel","hiddenAttr","_isTabHidden","document","visibilityChangeEventName","hidden","msHidden","webkitHidden","copyDeep","BasePlugin","Http","protocol","__VERSION__","NAME","__NAME__","registerPlugin"],"mappings":"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","file":"playkit-kava.js","sourcesContent":[" \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 = 2);\n","module.exports = KalturaPlayer;","!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=9)}([function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return a}));var n=r(2);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}var a=function e(t,r,n,o){void 0===o&&(o={}),this.severity=t,this.category=r,this.code=n,this.data=o,e._logger.error(\"Category:\"+r+\" | Code:\"+n+\" |\",o)};o(a,\"Severity\",{RECOVERABLE:1,CRITICAL:2}),o(a,\"Category\",{NETWORK:1,SERVICE:2,PROVIDER:3}),o(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}),o(a,\"_logger\",Object(n.a)(\"Error\"))},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return a}));var n=r(0);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}var a=function(){function e(e){void 0===e&&(e=new Map),o(this,\"retryConfig\",{async:!0,timeout:0,maxAttempts:4}),o(this,\"_attemptCounter\",1),this.headers=e}var t=e.prototype;return t.getUrl=function(e){return e+\"/service/\"+this.service+(this.action?\"/action/\"+this.action:\"\")},t.doHttpRequest=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},t._createXHR=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)},t._getResponseHeaders=function(e){return e.getAllResponseHeaders().split(\"\\n\").filter((function(e){return 0===e.toLowerCase().indexOf(\"x-\")}))},t._handleError=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._attemptCounter<this.retryConfig.maxAttempts))return this._requestPromise.reject(n);this._attemptCounter++,this._createXHR()},t._createError=function(e,t,r){return Object.assign(r,{url:this.url,headers:this._getResponseHeaders(e),attempt:this._attemptCounter}),new n.a(n.a.Severity.CRITICAL,n.a.Category.NETWORK,t,r)},e}()},function(e,t,r){\"use strict\";var n={get:function(){return{VERSION:\"\",DEBUG:{value:\"\",name:\"\"},ERROR:{value:\"\",name:\"\"},INFO:{value:\"\",name:\"\"},OFF:{value:\"\",name:\"\"},TIME:{value:\"\",name:\"\"},TRACE:{value:\"\",name:\"\"},WARN:{value:\"\",name:\"\"},createDefaultHandler:function(){},debug:function(){},enabledFor:function(){},error:function(){},get:function(){},getLevel:function(){},info:function(){},log:function(){},setHandler:function(){},setLevel:function(){},time:function(){},timeEnd:function(){},trace:function(){},useDefaults:function(){},warn:function(){}}}};function o(e){return n.get(e)}t.a=o},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return a}));var n=r(4),o={serviceUrl:\"https://cdnapisec.kaltura.com/api_v3\",cdnUrl:\"https://cdnapisec.kaltura.com\",serviceParams:{apiVersion:\"3.3.0\",format:1},useApiCaptions:!0,loadThumbnailWithKs:!1},a=function(){function e(){}return e.set=function(e){e&&Object.assign(o,e)},e.get=function(){return Object(n.a)(o)},e}()},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return n}));var n=function e(t){var r;return Array.isArray(t)?(r=t.length>0?t.slice(0):[]).forEach((function(t,n){(\"object\"==typeof t&&t!=={}||Array.isArray(t)&&t.length>0)&&(r[n]=e(t))})):\"object\"==typeof t?(r=Object.assign({},t),Object.keys(r).forEach((function(t){(\"object\"==typeof 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 f}));var n=r(1),o=r(2);var a=function(e){var t,r,n;n=!1,(r=\"hasError\")in(t=this)?Object.defineProperty(t,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[r]=n,\"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(e,t){this.code=e,this.message=t},s=r(0);function u(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}function c(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var f=function(e){var t,r;function n(){for(var t,r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return c(u(t=e.call.apply(e,[this].concat(n))||this),\"requests\",[]),t}r=e,(t=n).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r;var o=n.prototype;return o.add=function(e){var t;this.requests.push(e);var r={},n={service:e.service,action:e.action};return Object.assign(r,((t={})[this.requests.length]=Object.assign(n,e.params),t)),Object.assign(r,this.params),this.params=r,this},o.execute=function(e){var t=this;return new Promise((function(r,o){try{t.params=JSON.stringify(t.params)}catch(e){n._logger.error(\"\"+e.message),o(new s.a(s.a.Severity.CRITICAL,s.a.Category.PROVIDER,s.a.Code.FAILED_PARSING_REQUEST,{error:e,params:t.params}))}t.doHttpRequest().then((function(n){var a=new l(n,e);a.success?r({headers:t.responseHeaders,response:a}):o(new s.a(s.a.Severity.CRITICAL,s.a.Category.NETWORK,s.a.Code.MULTIREQUEST_API_ERROR,{url:t.url,headers:t.responseHeaders,results:a.results}))}),(function(e){o(e)}))}))},n}(n.a);c(f,\"_logger\",Object(o.a)(\"MultiRequestBuilder\"));var l=function e(t,r){void 0===r&&(r=!0),c(this,\"results\",[]);var n=t.result?t.result:t,o=(Array.isArray(n)?n:[n]).map((function(e){return new a(e)})),i=o.filter((function(e){return e.hasError}));i.forEach((function(t){e._logger.error(\"Service returned an error with error code: \"+t.error.code+\" and message: \"+t.error.message+\".\")})),this.results=o,r&&i.length||i.length===this.results.length?this.success=!1:(this.results=this.results.filter((function(e){return!e.hasError})),this.success=!0)};c(l,\"_logger\",Object(o.a)(\"MultiRequestResult\"))},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return n}));var n=function(e){var t=[],r=/\\[\\]$/,n=function(e){return\"[object Array]\"===Object.prototype.toString.call(e)},o=function(e,r){r=\"function\"==typeof r?r():null==r?\"\":r,t[t.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(r)};return function e(a,i){var s,u,c;if(a)if(n(i))for(s=0,u=i.length;s<u;s++)r.test(a)?o(a,i[s]):e(a+\":\"+(\"object\"==typeof i[s]?s:\"\"),i[s]);else if(i&&\"[object Object]\"===String(i))for(c in i)e(a+\":\"+c,i[c]);else o(a,i);else if(n(i))for(s=0,u=i.length;s<u;s++)o(i[s].name,i[s].value);else for(c in i)e(c,i[c]);return t}(\"\",e).join(\"&\").replace(/%20/g,\"+\")}},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return a}));var n=r(5),o=r(3),a=function(){function e(){}return e.getMultiRequest=function(e,t,r){var a=o.a.get(),i=a.serviceParams;Object.assign(i,{ks:t,clientTag:\"html5:v\"+e}),r&&Object.assign(i,{partnerId:r});var s=new Map;s.set(\"Content-Type\",\"application/json\");var u=new n.a(s);return u.method=\"POST\",u.service=\"multirequest\",u.url=u.getUrl(a.serviceUrl),u.params=i,u},e}()},,function(e,t,r){\"use strict\";r.r(t),r.d(t,\"OVPAnalyticsService\",(function(){return s})),r.d(t,\"OVPConfiguration\",(function(){return o.a})),r.d(t,\"RequestBuilder\",(function(){return n.a})),r.d(t,\"NAME\",(function(){return u})),r.d(t,\"VERSION\",(function(){return c}));var n=r(1),o=r(3),a=r(7),i=r(6);var s=function(e){var t,r;function a(){return e.apply(this,arguments)||this}return r=e,(t=a).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r,a.trackEvent=function(e,t,r){return\"POST\"===r?a._trackEventByPOST(e,t):a._trackEventByGET(e,t)},a._trackEventByGET=function(e,t){var r=o.a.get(),a={};Object.assign(a,r.serviceParams,t);var s=new n.a;return s.service=\"analytics\",s.action=\"trackEvent\",s.method=\"GET\",s.tag=\"analytics-trackEvent\",s.params=a,s.url=e+\"?service=\"+s.service+\"&action=\"+s.action+\"&\"+Object(i.a)(s.params),s},a._trackEventByPOST=function(e,t){var r=o.a.get(),a={};Object.assign(a,r.serviceParams,t);var s=new Map;s.set(\"Content-Type\",\"application/json\");var u=new n.a(s),c={eventType:a.eventType,partnerId:a.partnerId,entryId:a.entryId,sessionId:a.sessionId};return[\"eventType\",\"partnerId\",\"entryId\",\"sessionId\"].forEach((function(e){return delete a[e]})),u.service=\"analytics\",u.action=\"trackEvent\",u.method=\"POST\",u.tag=\"analytics-trackEvent\",u.params=JSON.stringify(a),u.url=e+\"?service=\"+u.service+\"&action=\"+u.action+\"&\"+Object(i.a)(c),u},a}(a.a),u=\"playkit-js-providers-analytics-service\",c=\"2.37.0\"}])}));\n//# sourceMappingURL=playkit-analytics-service.js.map","// @flow\nimport {KavaModel} from './kava-model';\n\n/**\n * @name KavaEventType\n * @enum\n */\nexport const KavaEventModel: {[event: string]: KavaEvent} = {\n /**\n * @type {string} VIEW\n * @memberof KavaEventType\n */\n VIEW: {\n type: 'VIEW',\n index: 99,\n getEventModel: (model: KavaModel) => {\n const eventModel: {[name: string]: any} = {\n playTimeSum: model.getPlayTimeSum(),\n bufferTime: model.getBufferTime(),\n bufferTimeSum: model.getBufferTimeSum(),\n actualBitrate: model.getActualBitrate(),\n averageBitrate: model.getAverageBitrate(),\n audioLanguage: model.getLanguage(),\n soundMode: model.getSoundMode(),\n tabMode: model.getTabMode(),\n viewabilityMode: model.getViewabilityMode(),\n screenMode: model.getScreenMode()\n };\n\n if (!isNaN(model.getForwardBufferHealth())) {\n eventModel.forwardBufferHealth = model.getForwardBufferHealth();\n }\n if (model.getMaxManifestDownloadTime() > 0) {\n eventModel.manifestDownloadTime = model.getMaxManifestDownloadTime();\n }\n if (model.getSegmentDownloadTime() > 0) {\n eventModel.segmentDownloadTime = model.getSegmentDownloadTime();\n }\n if (model.getBandwidth()) {\n eventModel.bandwidth = model.getBandwidth();\n }\n if (model.getDroppedFramesRatio() != null) {\n eventModel.droppedFramesRatio = model.getDroppedFramesRatio();\n }\n\n if (!isNaN(model.getTargetBuffer())) {\n eventModel.targetBuffer = model.getTargetBuffer();\n }\n\n if (model.getNetworkConnectionType() !== '') {\n eventModel.networkConnectionType = model.getNetworkConnectionType();\n }\n\n if (model.getNetworkConnectionOverhead()) {\n eventModel.networkConnectionOverhead = model.getNetworkConnectionOverhead();\n }\n if (!isNaN(model.getFlavorParamsId())) {\n eventModel.flavorParamsId = model.getFlavorParamsId();\n }\n\n return eventModel;\n }\n },\n /**\n * @type {string} IMPRESSION\n * @memberof KavaEventType\n */\n IMPRESSION: {\n type: 'IMPRESSION',\n index: 1,\n getEventModel: (model: KavaModel) => {\n const eventModel = {};\n if (model.getPlayerJSLoadTime() != null) {\n eventModel.playerJSLoadTime = model.getPlayerJSLoadTime();\n }\n return eventModel;\n }\n },\n /**\n * @type {string} PLAY_REQUEST\n * @memberof KavaEventType\n */\n PLAY_REQUEST: {\n type: 'PLAY_REQUEST',\n index: 2,\n getEventModel: () => ({})\n },\n /**\n * @type {string} PLAY\n * @memberof KavaEventType\n */\n PLAY: {\n type: 'PLAY',\n index: 3,\n getEventModel: (model: KavaModel) => {\n const eventModel: {[name: string]: any} = {\n bufferTime: model.getBufferTime(),\n bufferTimeSum: model.getBufferTimeSum(),\n actualBitrate: model.getActualBitrate(),\n joinTime: model.getJoinTime(),\n canPlay: model.getCanPlayTime()\n };\n if (model.getNetworkConnectionType() !== '') {\n eventModel.networkConnectionType = model.getNetworkConnectionType();\n }\n return eventModel;\n }\n },\n /**\n * @type {string} RESUME\n * @memberof KavaEventType\n */\n RESUME: {\n type: 'RESUME',\n index: 4,\n getEventModel: (model: KavaModel) => ({\n bufferTime: model.getBufferTime(),\n bufferTimeSum: model.getBufferTimeSum(),\n actualBitrate: model.getActualBitrate()\n })\n },\n /**\n * @type {string} PAUSE\n * @memberof KavaEventType\n */\n PAUSE: {\n type: 'PAUSE',\n index: 33,\n getEventModel: () => ({})\n },\n /**\n * @type {string} BUFFER_START\n * @memberof KavaEventType\n */\n BUFFER_START: {\n type: 'BUFFER_START',\n index: 45,\n getEventModel: () => ({})\n },\n /**\n * @type {string} BUFFER_END\n * @memberof KavaEventType\n */\n BUFFER_END: {\n type: 'BUFFER_END',\n index: 46,\n getEventModel: () => ({})\n },\n /**\n * @type {string} REPLAY\n * @memberof KavaEventType\n */\n REPLAY: {\n type: 'REPLAY',\n index: 34,\n getEventModel: () => ({})\n },\n /**\n * @type {string} SEEK\n * @memberof KavaEventType\n */\n SEEK: {\n type: 'SEEK',\n index: 35,\n getEventModel: (model: KavaModel) => ({\n targetPosition: model.getTargetPosition()\n })\n },\n /**\n * @type {string} PLAY_REACHED_25_PERCENT\n * @memberof KavaEventType\n */\n PLAY_REACHED_25_PERCENT: {\n type: 'PLAY_REACHED_25_PERCENT',\n index: 11,\n getEventModel: () => ({})\n },\n /**\n * @type {string} PLAY_REACHED_50_PERCENT\n * @memberof KavaEventType\n */\n PLAY_REACHED_50_PERCENT: {\n type: 'PLAY_REACHED_50_PERCENT',\n index: 12,\n getEventModel: () => ({})\n },\n /**\n * @type {string} PLAY_REACHED_75_PERCENT\n * @memberof KavaEventType\n */\n PLAY_REACHED_75_PERCENT: {\n type: 'PLAY_REACHED_75_PERCENT',\n index: 13,\n getEventModel: () => ({})\n },\n /**\n * @type {string} PLAY_REACHED_100_PERCENT\n * @memberof KavaEventType\n */\n PLAY_REACHED_100_PERCENT: {\n type: 'PLAY_REACHED_100_PERCENT',\n index: 14,\n getEventModel: () => ({})\n },\n /**\n * @type {string} SOURCE_SELECTED\n * @memberof KavaEventType\n */\n SOURCE_SELECTED: {\n type: 'SOURCE_SELECTED',\n index: 39,\n getEventModel: (model: KavaModel) => ({\n actualBitrate: model.getActualBitrate()\n })\n },\n /**\n * @type {string} AUDIO_SELECTED\n * @memberof KavaEventType\n */\n AUDIO_SELECTED: {\n type: 'AUDIO_SELECTED',\n index: 42,\n getEventModel: (model: KavaModel) => ({\n language: model.getLanguage()\n })\n },\n /**\n * @type {string} FLAVOR_SWITCH\n * @memberof KavaEventType\n */\n FLAVOR_SWITCH: {\n type: 'FLAVOR_SWITCH',\n index: 43,\n getEventModel: (model: KavaModel) => ({\n actualBitrate: model.getActualBitrate()\n })\n },\n /**\n * @type {string} SPEED\n * @memberof KavaEventType\n */\n SPEED: {\n type: 'SPEED',\n index: 41,\n getEventModel: () => ({})\n },\n /**\n * @type {string} CAPTIONS\n * @memberof KavaEventType\n */\n CAPTIONS: {\n type: 'CAPTIONS',\n index: 38,\n getEventModel: () => ({})\n },\n /**\n * @type {string} ERROR\n * @memberof KavaEventType\n */\n ERROR: {\n type: 'ERROR',\n index: 98,\n getEventModel: (model: KavaModel) => ({\n errorCode: model.getErrorCode(),\n errorDetails: model.getErrorDetails(),\n errorPosition: model.getErrorPosition()\n })\n },\n /**\n * @type {string} RELATED_CLICKED\n * @memberof KavaEventType\n */\n RELATED_CLICKED: {\n type: 'RELATED_CLICKED',\n index: 36,\n getEventModel: () => ({})\n },\n /**\n * @type {string} RELATED_SELECTED\n * @memberof KavaEventType\n */\n RELATED_SELECTED: {\n type: 'RELATED_SELECTED',\n index: 37,\n getEventModel: () => ({})\n }\n};\n\nexport const KavaEventType: {[event: string]: string} = (eventType => {\n Object.keys(KavaEventModel).forEach(k => (eventType[k] = k));\n return eventType;\n})({});\n\n/**\n * Gets the full event model for a certain event object including the common params.\n * @private\n * @param {KavaEvent} eventObj - The event model.\n * @param {KavaModel} model - The plugin model store.\n * @returns {Object} - The full event model.\n */\nexport function getEventModel(eventObj: KavaEvent, model: KavaModel): Object {\n const commonModel: Object = {\n eventType: eventObj.index,\n partnerId: model.getPartnerId(),\n entryId: model.getEntryId(),\n sessionId: model.getSessionId(),\n eventIndex: model.getEventIndex(),\n referrer: model.getReferrer(),\n deliveryType: model.getDeliveryType(),\n playbackType: model.getPlaybackType(),\n clientVer: model.getClientVer(),\n clientTag: model.getClientTag(),\n position: model.getPosition(),\n playbackSpeed: model.getPlaybackSpeed()\n };\n\n if (model.getCaption()) {\n commonModel.caption = model.getCaption();\n }\n if (model.getSessionStartTime()) {\n commonModel.sessionStartTime = model.getSessionStartTime();\n }\n if (model.getKS()) {\n commonModel.ks = model.getKS();\n }\n if (model.getVirtualEventId()) {\n commonModel.virtualEventId = model.getVirtualEventId();\n }\n if (model.getUIConfId()) {\n commonModel.uiConfId = model.getUIConfId();\n }\n if (model.getPlaylistId()) {\n commonModel.playlistId = model.getPlaylistId();\n }\n if (model.getCustomVar1()) {\n commonModel.customVar1 = model.getCustomVar1();\n }\n if (model.getCustomVar2()) {\n commonModel.customVar2 = model.getCustomVar2();\n }\n if (model.getCustomVar3()) {\n commonModel.customVar3 = model.getCustomVar3();\n }\n if (model.getPlaybackContext()) {\n commonModel.playbackContext = model.getPlaybackContext();\n }\n if (model.getApplicationVersion()) {\n commonModel.applicationVer = model.getApplicationVersion();\n }\n if (model.getApplication()) {\n commonModel.application = model.getApplication();\n }\n if (model.getKalturaApplicationVersion()) {\n commonModel.kalturaApplicationVer = model.getKalturaApplicationVersion();\n }\n if (model.getKalturaApplication()) {\n commonModel.kalturaApplication = model.getKalturaApplication();\n }\n if (model.getUserId()) {\n commonModel.userId = model.getUserId();\n }\n if (model.getPersistentSessionId()) {\n commonModel.persistentSessionId = model.getPersistentSessionId();\n }\n const eventModel = eventObj.getEventModel(model);\n return Object.assign(eventModel, commonModel);\n}\n","// @flow\nimport {getEventModel} from './kava-event-model';\n\n/**\n * The KAVA model that stores data.\n * @class KavaModel\n * @private\n * @param {?Object} - Initial model.\n */\nclass KavaModel {\n sessionStartTime: number;\n eventIndex: number;\n errorPosition: $Values<typeof ErrorPosition>;\n playTimeSum: number;\n bufferTime: number;\n bufferTimeSum: number;\n language: string;\n caption: string;\n errorCode: number;\n errorDetails: any;\n joinTime: number;\n canPlayTime: number;\n targetPosition: number;\n targetBuffer: number;\n totalSegmentsDownloadTime: number = 0;\n totalSegmentsDownloadBytes: number = 0;\n maxSegmentDownloadTime: number = 0;\n maxManifestDownloadTime: number = 0;\n forwardBufferHealth: number;\n droppedFramesRatio: ?number = null;\n soundMode: $Values<typeof SoundMode>;\n viewabilityMode: $Values<typeof ViewabilityMode>;\n tabMode: $Values<typeof TabMode>;\n screenMode: $Values<typeof ScreenMode> = ScreenMode.NOT_IN_FULLSCREEN;\n maxNetworkConnectionOverhead: number = 0;\n flavorParamsId: number = NaN;\n networkConnectionType: string;\n playerJSLoadTime: ?number = null;\n getActualBitrate: Function;\n getPlaybackSpeed: Function;\n getAverageBitrate: Function;\n getPartnerId: Function;\n getEntryId: Function;\n getPlaylistId: Function;\n getSessionId: Function;\n getClientVer: Function;\n getClientTag: Function;\n getKS: Function;\n getVirtualEventId: Function;\n getUIConfId: Function;\n getReferrer: Function;\n getCustomVar1: Function;\n getCustomVar2: Function;\n getCustomVar3: Function;\n getPosition: Function;\n getDeliveryType: Function;\n getPlaybackType: Function;\n getPlaybackContext: Function;\n getApplicationVersion: Function;\n getApplication: Function;\n getKalturaApplicationVersion: Function;\n getKalturaApplication: Function;\n getUserId: Function;\n getCanPlayTime: Function;\n getPersistentSessionId: Function;\n\n constructor(model?: Object) {\n if (model) {\n this.updateModel(model);\n }\n }\n\n /**\n * Gets the total play time.\n * @returns {number} - The play time sum.\n * @memberof KavaModel\n * @instance\n */\n getPlayTimeSum(): number {\n return this.playTimeSum;\n }\n\n getCanPlayTime(): number {\n return this.canPlayTime;\n }\n\n /**\n * Gets the buffer time.\n * @returns {number} - The buffer time.\n * @memberof KavaModel\n * @instance\n */\n getBufferTime(): number {\n return this.bufferTime;\n }\n\n /**\n * Gets the total buffer time.\n * @returns {number} - The total buffer time.\n * @memberof KavaModel\n * @instance\n */\n getBufferTimeSum(): number {\n return this.bufferTimeSum;\n }\n\n /**\n * Gets the player bundle js load duration time\n * @returns {number} - The player js load duration time\n * @memberof KavaModel\n * @instance\n */\n getPlayerJSLoadTime(): ?number {\n if (this.playerJSLoadTime) {\n return Math.round(this.playerJSLoadTime * 1000) / 1000;\n } else {\n return null;\n }\n }\n\n /**\n * Gets the join time.\n * @returns {number} - The join time.\n * @memberof KavaModel\n * @instance\n */\n getJoinTime(): number {\n return this.joinTime;\n }\n\n /**\n * Gets a target position\n * @returns {number} - The target position.\n * @memberof KavaModel\n * @instance\n */\n getTargetPosition(): number {\n return this.targetPosition;\n }\n\n /**\n * Gets the target buffer\n * @returns {number} - The target buffer in seconds.\n * @memberof KavaModel\n * @instance\n */\n getTargetBuffer(): number {\n return this.targetBuffer;\n }\n\n /**\n * Gets an audio language.\n * @returns {string} - The audio language.\n * @memberof KavaModel\n * @instance\n */\n getLanguage(): string {\n return this.language;\n }\n\n /**\n * Gets a caption language.\n * @returns {string} - The caption language.\n * @memberof KavaModel\n * @instance\n */\n getCaption(): string {\n return this.caption;\n }\n\n /**\n * Gets the average bandwidth since last report.\n * @returns {number} - The bandwidth in kbps\n * @memberof KavaModel\n * @instance\n */\n getBandwidth(): number {\n return this.totalSegmentsDownloadTime > 0 ? Math.round((this.totalSegmentsDownloadBytes * 8) / this.totalSegmentsDownloadTime) / 1000 : 0;\n }\n\n /**\n * Returns the longest manifest download time in seconds\n * @returns {number} - manifest max download time in seconds\n * @memberof KavaModel\n * @instance\n */\n getMaxManifestDownloadTime(): number {\n return this.maxManifestDownloadTime;\n }\n\n /**\n * Returns the longest segment download time in seconds\n * @returns {number} - segment max download time in seconds\n * @memberof KavaModel\n * @instance\n */\n getSegmentDownloadTime(): number {\n return this.maxSegmentDownloadTime;\n }\n\n /**\n * Gets the forward buffer health ratio.\n * @returns {number} - the ratio between the available buffer and the target buffer\n * @memberof KavaModel\n * @instance\n */\n getForwardBufferHealth(): number {\n return this.forwardBufferHealth;\n }\n /**\n * Gets the dropped frames ratio since last view event.\n * @returns {number} - dropped frames ratio since last view event\n * @memberof KavaModel\n * @instance\n */\n getDroppedFramesRatio(): ?number {\n return this.droppedFramesRatio;\n }\n\n /**\n * Gets the sound mode of the player.\n * @returns {SoundMode} the state of the sound (muted ot not)\n * @memberof KavaModel\n * @instance\n */\n getSoundMode(): $Values<typeof SoundMode> {\n return this.soundMode;\n }\n\n /**\n * Gets the viewability mode of the player.\n * @returns {ViewabilityMode} the state of the view (in-view ot not)\n * @memberof KavaModel\n * @instance\n */\n getViewabilityMode(): $Values<typeof ViewabilityMode> {\n return this.viewabilityMode;\n }\n\n /**\n * Gets the screen mode of the browser player.\n * @returns {number} the state of the full screen if is on or not.\n * @memberof KavaModel\n * @instance\n */\n getScreenMode(): $Values<typeof ScreenMode> {\n return this.screenMode;\n }\n\n /**\n * Gets the Tab mode of the browser.\n * @returns {TabMode} the state of the tab (focused or not)\n * @memberof KavaModel\n * @instance\n */\n getTabMode(): $Values<typeof TabMode> {\n return this.tabMode;\n }\n\n /**\n * Gets the effectiveType read-only property of the NetworkInformation interface (from navigator)\n * @returns {string} the effective type of the connection meaning one of 'slow-2g', '2g', '3g', or '4g'\n * @memberof KavaModel\n * @instance\n */\n getNetworkConnectionType(): string {\n return this.networkConnectionType;\n }\n\n /**\n * Gets the max dns+ssl+tcp resolving time over all video segments\n * @returns {number} max dns+ssl+tcp in seconds\n * @memberof KavaModel\n * @instance\n */\n getNetworkConnectionOverhead(): number {\n // convert ms to seconds in 0.xxx format\n return Math.round(this.maxNetworkConnectionOverhead) / 1000;\n }\n\n /**\n * Gets the error code.\n * @returns {number} - The error code.\n * @memberof KavaModel\n * @instance\n */\n getErrorCode(): number {\n return this.errorCode;\n }\n\n /**\n * Gets the flavor id from ID3 tag in the packager\n * @returns {number} - The flavor id.\n * @memberof KavaModel\n * @instance\n */\n getFlavorParamsId(): number {\n return this.flavorParamsId;\n }\n\n /**\n * Gets the error additional data.\n * @returns {string} - The stringifyed error data.\n * @memberof KavaModel\n * @instance\n */\n getErrorDetails(): string {\n let retVal: string = '';\n if (this.errorDetails) {\n try {\n retVal = JSON.stringify(this.errorDetails);\n } catch (e) {\n // do nothing\n }\n }\n return retVal;\n }\n\n /**\n * Gets the event index counter.\n * @returns {number} - The event index counter.\n * @memberof KavaModel\n * @instance\n */\n getEventIndex(): number {\n return this.eventIndex;\n }\n\n /**\n * Gets the error position (start or mid playing)\n * @returns {number} - The error position - 1 for pre playing, 2 for mid stream error\n * @memberof KavaModel\n * @instance\n */\n getErrorPosition(): $Values<typeof ErrorPosition> {\n return this.errorPosition;\n }\n\n /**\n * Gets the session start time.\n * @returns {number} - The session start time.\n * @memberof KavaModel\n * @instance\n */\n getSessionStartTime(): number {\n return this.sessionStartTime;\n }\n\n /**\n * Updates the model.\n * @param {Object} obj - A partial or full updated model.\n * @returns {void}\n * @memberof KavaModel\n * @instance\n */\n updateModel(obj: Object): void {\n Object.assign(this, obj);\n }\n\n /**\n * Gets the model for a certain event.\n * @param {KavaEvent} eventObj - The event object.\n * @returns {Object} - The event model.\n * @memberof KavaModel\n * @instance\n */\n getModel(eventObj: KavaEvent): Object {\n return getEventModel(eventObj, this);\n }\n}\n\nconst SoundMode = {\n SOUND_OFF: 1,\n SOUND_ON: 2\n};\n\nconst ViewabilityMode = {\n NOT_IN_VIEW: 1,\n IN_VIEW: 2\n};\n\nconst TabMode = {\n TAB_NOT_FOCUSED: 1,\n TAB_FOCUSED: 2\n};\n\nconst ScreenMode = {\n NOT_IN_FULLSCREEN: 1,\n FULLSCREEN: 2\n};\n\nconst ErrorPosition = {\n PRE_PLAY: 3,\n PRE_PLAYING: 1,\n MID_STREAM: 2\n};\n\nexport {KavaModel, SoundMode, TabMode, ErrorPosition, ScreenMode, ViewabilityMode};\n","// @flow\n\n/**\n * Manage the video rates for the KAVA plugin.\n * @private\n * @class KavaRateHandler\n */\nclass KavaRateHandler {\n _rates: Array<Object> = [];\n\n constructor() {\n this._rates = [];\n }\n\n /**\n * Sets the video rates.\n * @param {Array<number>} rates - The video rates.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n setRates(rates: Array<number>): void {\n this._rates = [];\n rates.forEach(rate => {\n this._rates.push({\n rate: rate,\n active: false,\n duration: 0\n });\n });\n }\n\n /**\n * Sets the current rate.\n * @param {number} rate - The current rate.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n setCurrent(rate: number): void {\n this._rates.forEach(o => (o.active = false));\n const obj = this._rates.find(o => o.rate === rate);\n if (obj) {\n obj.active = true;\n }\n }\n\n /**\n * Gets the current rate.\n * @returns {number} - The current rate.\n * @memberof KavaRateHandler\n * @instance\n */\n getCurrent(): number {\n const current = this._rates.find(o => o.active);\n return current ? current.rate : -1;\n }\n\n /**\n * Increases the duration of the current rate.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n countCurrent(): void {\n const current = this._rates.find(o => o.active);\n if (current) {\n current.duration++;\n }\n }\n\n /**\n * Gets the average rate.\n * @returns {number} - The average rate.\n * @memberof KavaRateHandler\n * @instance\n */\n getAverage(): number {\n let totalDuration = 0;\n let sum = 0;\n this._rates.forEach(o => {\n sum += o.rate * o.duration;\n totalDuration += o.duration;\n });\n return totalDuration ? sum / totalDuration : 0;\n }\n\n /**\n * Resets the duration of all rates.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n reset(): void {\n this._rates.forEach(o => (o.duration = 0));\n }\n\n /**\n * Destroys the class.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n destroy(): void {\n this._rates = [];\n }\n}\n\nexport {KavaRateHandler};\n","// @flow\nimport {core} from 'kaltura-player-js';\nconst {FakeEvent, FakeEventTarget} = core;\n\nconst SECOND: number = 1000;\n\n/**\n * Mange a timer and dispatches related events.\n * @private\n * @class KavaTimer\n * @param {Object} config - The timer config.\n */\nclass KavaTimer extends FakeEventTarget {\n _resetCounter: number;\n _eventCounter: number;\n _intervalId: ?IntervalID;\n _stopped: boolean;\n _config: Object;\n\n static Event = {\n TICK: 'tick',\n RESET: 'reset',\n REPORT: 'report'\n };\n\n constructor(config: Object) {\n super();\n this._config = config;\n }\n\n /**\n * Starts the timer interval.\n * @returns {void}\n * @memberof KavaTimer\n * @instance\n */\n start(): void {\n this._clearTimeout();\n this._stopped = false;\n this._resetCounter = 0;\n this._eventCounter = 0;\n this._intervalId = setInterval(() => this._monitor(), SECOND);\n }\n\n /**\n * Continues the timer to dispatch REPORT.\n * @returns {void}\n * @memberof KavaTimer\n * @instance\n */\n resume(): void {\n this._stopped = false;\n this._resetCounter = 0;\n }\n\n /**\n * Stops the timer from dispatch REPORT and starts the timer to dispatch RESET.\n * @returns {void}\n * @memberof KavaTimer\n * @instance\n */\n stop(): void {\n this._stopped = true;\n }\n\n /**\n * @returns {boolean} - Whether the timer is stopped.\n * @memberof KavaTimer\n * @instance\n */\n isStopped(): boolean {\n return this._stopped;\n }\n\n /**\n * Destroys the timer.\n * @returns {void}\n * @memberof KavaTimer\n * @instance\n */\n destroy(): void {\n this._clearTimeout();\n }\n\n _clearTimeout(): void {\n if (this._intervalId) {\n clearInterval(this._intervalId);\n this._intervalId = null;\n }\n }\n\n _monitor(): void {\n if (this._stopped) {\n if (this._resetCounter === this._config.resetCounter) {\n this.dispatchEvent(new FakeEvent(KavaTimer.Event.RESET));\n this._resetCounter = 0;\n this._eventCounter = 0;\n }\n this._resetCounter++;\n } else {\n this.dispatchEvent(new FakeEvent(KavaTimer.Event.TICK));\n if (this._eventCounter === this._config.eventCounter) {\n this.dispatchEvent(new FakeEvent(KavaTimer.Event.REPORT));\n this._eventCounter = 0;\n }\n this._eventCounter++;\n }\n }\n}\n\nexport {KavaTimer};\n","// @flow\nconst HttpMethodType: KavaHttpMethodType = {\n GET: 'GET',\n POST: 'POST'\n};\n\nexport {HttpMethodType};\n","//@flow\n\ntype ApplicationType = {[app: string]: string};\n\nconst KalturaApplication: ApplicationType = {\n KMC: '0',\n KMS: '1',\n KAF: '2',\n PITCH: '3',\n KMS_GO: '4',\n WEBCASTING: '5',\n PERSONAL_CAPTURE: '6',\n KME: '7',\n KME_MOBILE_APP: '8',\n PATH: '9',\n LECTURE_CAPTURE: '10',\n EP: '11',\n CHAT_AND_COLLABORATION: '12',\n ANALYTICS: '13',\n EXPRESS_CAPTURE: '14',\n KPF: '15',\n KAF_GO: '16',\n SITES: '17',\n STUDIO: '18'\n};\n\nexport {KalturaApplication};\nexport type {ApplicationType};\n","/**\n * Related plugin event types.\n */\nconst RelatedEvent = {\n /**\n * Fired when the user selects an entry from the list or the grid.\n */\n RELATED_SELECTED: 'related_selected',\n /**\n * Fired when the user clicks the button to show the related list.\n */\n RELATED_CLICKED: 'related_clicked'\n};\n\nexport {RelatedEvent};\n","// @flow\nimport {core, BasePlugin} from 'kaltura-player-js';\nimport {OVPAnalyticsService} from 'playkit-js-providers/dist/playkit-analytics-service';\nimport {KavaEventModel, KavaEventType} from './kava-event-model';\nimport {KavaRateHandler} from './kava-rate-handler';\nimport {KavaTimer} from './kava-timer';\nimport {ErrorPosition, KavaModel, SoundMode, TabMode, ScreenMode, ViewabilityMode} from './kava-model';\nimport {HttpMethodType} from './http-method-type';\nimport {KalturaApplication} from './kaltura-application';\n//$FlowFixMe\nimport {RelatedEvent} from '@playkit-js/related';\n\nconst {Error: PKError, FakeEvent, Utils} = core;\nconst DIVIDER: number = 1024;\nconst TEXT_TYPE: string = 'TEXT';\n/**\n * Kaltura Advanced Analytics plugin.\n * @class Kava\n * @param {string} name - The plugin name.\n * @param {Player} player - The player instance.\n * @param {KavaConfigObject} config - The plugin config.\n */\nclass Kava extends BasePlugin {\n _model: KavaModel;\n _timer: KavaTimer;\n _rateHandler: KavaRateHandler;\n _viewEventEnabled: boolean;\n _firstPlayRequestTime: number;\n _bufferStartTime: number;\n _previousCurrentTime: number;\n _isFirstPlay: boolean;\n _isFirstPlaying: boolean;\n _isEnded: boolean;\n _isPaused: boolean;\n _isBuffering: boolean;\n _timePercentEvent: {[time: string]: boolean};\n _isPlaying: boolean;\n _loadStartTime: number;\n _lastDroppedFrames: number = 0;\n _lastTotalFrames: number = 0;\n _performanceObserver: window.PerformanceObserver;\n _performanceEntries: window.PerformanceEntry[] = [];\n _pendingFragLoadedUrls: string[] = [];\n _fragLoadedFiredOnce: boolean = false;\n _canPlayOccured: boolean = false;\n _isManualPreload: boolean = false;\n\n /**\n * Default config of the plugin.\n * @type {Object}\n * @static\n * @memberof Kava\n */\n static defaultConfig: Object = {\n serviceUrl: `${Utils.Http.protocol}//analytics.kaltura.com/api_v3/index.php`,\n requestMethod: HttpMethodType.GET,\n viewEventCountdown: 10,\n resetSessionCountdown: 30,\n dvrThreshold: 120,\n playbackContext: '',\n applicationVersion: '',\n application: '',\n kalturaApplicationVersion: '',\n kalturaApplication: ''\n };\n\n /**\n * @static\n * @return {boolean} - Whether the plugin is valid in the current environment.\n * @memberof Kava\n */\n static isValid(): boolean {\n return true;\n }\n\n constructor(name: string, player: Player, config: KavaConfigObject) {\n super(name, player, config);\n this._rateHandler = new KavaRateHandler();\n this._model = new KavaModel();\n this._setModelDelegates();\n this._timer = new KavaTimer({\n resetCounter: this.config.resetSessionCountdown,\n eventCounter: this.config.viewEventCountdown\n });\n this._viewEventEnabled = true;\n this._resetFlags();\n this._addBindings();\n this._model.updateModel({\n eventIndex: 1,\n bufferTime: 0.0,\n bufferTimeSum: 0.0,\n playTimeSum: 0.0\n });\n // check the Resource Timing API is supported in the browser and we have a uiConfId\n if (performance && this.config.uiConfId) {\n let entry = performance.getEntriesByType('resource').find(entry => entry.name.match('embedPlaykitJs.*' + this.config.uiConfId));\n if (entry) {\n this._model.updateModel({playerJSLoadTime: entry.duration});\n }\n }\n }\n\n _updateSoundModeInModel() {\n this._model.updateModel({\n soundMode: this.player.muted || this.player.volume === 0 ? SoundMode.SOUND_OFF : SoundMode.SOUND_ON\n });\n }\n\n _updateViewabilityModeInModel(isVisible: boolean): void {\n this._model.updateModel({\n viewabilityMode: isVisible || this.player.isInPictureInPicture() ? ViewabilityMode.IN_VIEW : ViewabilityMode.NOT_IN_VIEW\n });\n }\n\n _handleNewPerformanceEntries(list: window.PerformanceObserverEntryList) {\n let perfEntries = list.getEntries();\n for (let i = 0; i < perfEntries.length; i++) {\n this._performanceEntries.push(perfEntries[i]);\n }\n while (this._pendingFragLoadedUrls.length) {\n // handle frag loaded events which haven't been added to the entry list yet\n this._handleFragPerformanceObserver(this._pendingFragLoadedUrls.pop());\n }\n }\n\n /**\n * Destroys the plugin.\n * @return {void}\n * @memberof Kava\n * @instance\n */\n destroy(): void {\n this.eventManager.destroy();\n this._reset();\n }\n\n _reset(): void {\n this._timer.destroy();\n this._rateHandler.destroy();\n if (this._performanceObserver) {\n this._performanceObserver.disconnect();\n }\n this._performanceEntries = [];\n this._pendingFragLoadedUrls = [];\n }\n\n /**\n * Reset the plugin.\n * @return {void}\n * @memberof Kava\n * @instance\n */\n reset(): void {\n this.eventManager.removeAll();\n this._resetFlags();\n this._addBindings();\n this._model.updateModel({\n eventIndex: 1,\n bufferTime: 0.0,\n bufferTimeSum: 0.0,\n playTimeSum: 0.0,\n sessionStartTime: null\n });\n this._reset();\n }\n\n /**\n * loadMedia of the plugin.\n * @return {void}\n * @memberof Kava\n * @instance\n */\n loadMedia(): void {\n if (window.PerformanceObserver) {\n this._performanceObserver = new window.PerformanceObserver(this._handleNewPerformanceEntries.bind(this));\n this._performanceObserver.observe({entryTypes: ['resource']});\n }\n }\n\n /**\n * Gets the model object for a certain event.\n * @param {string} event - Event name.\n * @returns {Object} - Model object.\n * @instance\n * @memberof Kava\n * @example\n * const kava = player.plugins.kava;\n * const viewModel = kava.getEventModel(kava.EventType.VIEW);\n * kava.sendAnalytics(viewModel);\n */\n getEventModel(event: string): ?Object {\n if (event) {\n return this._model.getModel(KavaEventModel[event]);\n }\n }\n\n /**\n * @returns {KavaEventType} - The kava events list.\n * @instance\n * @memberof Kava\n */\n get EventType(): {[event: string]: string} {\n return Utils.Object.copyDeep(KavaEventType);\n }\n\n /**\n * Sends KAVA analytics event to analytics service.\n * @param {Object} model - Event model.\n * @returns {Promise} - Promise to indicate request succeed or failed.\n * @instance\n * @memberof Kava\n * @example\n * player.plugins.kava.sendAnalytics({...})\n * .then(() => {\n * console.log('kava analytics sent successfully');\n * })\n * .catch(e => {\n * console.log('kava analytics send failed', e);\n * });\n */\n sendAnalytics(model: Object): Promise<*> {\n return new Promise((resolve, reject) => {\n OVPAnalyticsService.trackEvent(this.config.serviceUrl, model, this.config.requestMethod)\n .doHttpRequest()\n .then(\n response => {\n this._handleServerResponseSuccess(response, model);\n resolve();\n },\n err => {\n this._handleServerResponseFailed(err, model);\n reject(err);\n }\n );\n this._model.updateModel({eventIndex: this._model.getEventIndex() + 1});\n });\n }\n\n _resetFlags(): void {\n this._previousCurrentTime = 0;\n this._isPlaying = false;\n this._isFirstPlay = true;\n this._isFirstPlaying = true;\n this._isEnded = false;\n this._isPaused = false;\n this._isBuffering = false;\n this._timePercentEvent = {\n PLAY_REACHED_25_PERCENT: false,\n PLAY_REACHED_50_PERCENT: false,\n PLAY_REACHED_75_PERCENT: false,\n PLAY_REACHED_100_PERCENT: false\n };\n this._canPlayOccured = false;\n this._isManualPreload = false;\n }\n\n _resetSession(): void {\n this.logger.debug('Reset KAVA session');\n this._rateHandler.reset();\n this._model.updateModel({\n eventIndex: 1,\n bufferTimeSum: 0.0,\n playTimeSum: 0.0\n });\n }\n\n _sendAnalytics(eventObj: KavaEvent): void {\n if (!this._validate()) {\n return;\n }\n if (this._isBuffering) {\n this._updateBufferModel();\n this._bufferStartTime = Date.now();\n }\n const model = this._model.getModel(eventObj);\n if (typeof this.config.tamperAnalyticsHandler === 'function') {\n const sendRequest = this.config.tamperAnalyticsHandler(model);\n if (!sendRequest) {\n this.logger.debug('Cancel KAVA request', model);\n return;\n }\n }\n this.logger.debug(`Sending KAVA event ${model.eventType}:${eventObj.type}`);\n this.sendAnalytics(model).catch(() => {});\n }\n\n _handleServerResponseSuccess(response: Object, model: Object): void {\n this.logger.debug(`KAVA event sent`, model);\n this._updateSessionStartTimeModel(response);\n }\n\n _handleServerResponseFailed(err: Object, model: Object): void {\n this.logger.warn(`Failed to send KAVA event`, model, err);\n }\n\n _addBindings(): void {\n this.eventManager.listen(this._timer, KavaTimer.Event.TICK, () => this._rateHandler.countCurrent());\n this.eventManager.listen(this._timer, KavaTimer.Event.REPORT, () => this._onReport());\n this.eventManager.listen(this._timer, KavaTimer.Event.RESET, () => this._resetSession());\n this.eventManager.listen(this.player, this.player.Event.SOURCE_SELECTED, () => this._onSourceSelected());\n this.eventManager.listen(this.player, this.player.Event.ERROR, event => this._onError(event));\n this.eventManager.listen(this.player, this.player.Event.FIRST_PLAY, () => this._onFirstPlay());\n this.eventManager.listen(this.player, this.player.Event.FRAG_LOADED, event => this._onFragLoaded(event));\n this.eventManager.listen(this.player, this.player.Event.MANIFEST_LOADED, event => this._onManifestLoaded(event));\n this.eventManager.listen(this.player, this.player.Event.TIMED_METADATA, event => this._onTimedMetadataLoaded(event));\n this.eventManager.listen(this.player, this.player.Event.TRACKS_CHANGED, () => this._setInitialTracks());\n this.eventManager.listen(this.player, this.player.Event.PLAYING, () => this._onPlaying());\n this.eventManager.listen(this.player, this.player.Event.FIRST_PLAYING, () => this._onFirstPlaying());\n this.eventManager.listen(this.player, this.player.Event.SEEKING, () => this._onSeeking());\n this.eventManager.listen(this.player, this.player.Event.PAUSE, () => this._onPause());\n this.eventManager.listen(this.player, this.player.Event.ENDED, () => this._onEnded());\n this.eventManager.listen(this.player, this.player.Event.TIME_UPDATE, () => this._onTimeUpdate());\n this.eventManager.listen(this.player, this.player.Event.VIDEO_TRACK_CHANGED, event => this._onVideoTrackChanged(event));\n this.eventManager.listen(this.player, this.player.Event.AUDIO_TRACK_CHANGED, event => this._onAudioTrackChanged(event));\n this.eventManager.listen(this.player, this.player.Event.TEXT_TRACK_CHANGED, event => this._onTextTrackChanged(event));\n this.eventManager.listen(this.player, this.player.Event.PLAYER_STATE_CHANGED, event => this._onPlayerStateChanged(event));\n this.eventManager.listen(this.player, this.player.Event.RATE_CHANGE, () => this._onPlaybackRateChanged());\n this.eventManager.listen(this.player, this.player.Event.CAN_PLAY, () => this._onCanPlay());\n this.eventManager.listen(this.player, this.player.Event.LOAD_START, () => this._onLoadStart());\n this.eventManager.listen(this.player, this.player.Event.VOLUME_CHANGE, () => this._updateSoundModeInModel());\n this.eventManager.listen(this.player, this.player.Event.VISIBILITY_CHANGE, e => this._updateViewabilityModeInModel(e.payload.visible));\n this.eventManager.listen(this.player, this.player.Event.MUTE_CHANGE, () => this._updateSoundModeInModel());\n this.eventManager.listen(this.player, this.player.Event.ENTER_FULLSCREEN, () => this._model.updateModel({screenMode: ScreenMode.FULLSCREEN}));\n this.eventManager.listen(this.player, this.player.Event.EXIT_FULLSCREEN, () =>\n this._model.updateModel({screenMode: ScreenMode.NOT_IN_FULLSCREEN})\n );\n this.eventManager.listen(this.player, RelatedEvent.RELATED_CLICKED, () => this._onRelatedClicked());\n this.eventManager.listen(this.player, RelatedEvent.RELATED_SELECTED, () => this._onRelatedSelected());\n this._initTabMode();\n this._initNetworkConnectionType();\n }\n\n _onFirstPlaying(): void {\n this._isPlaying = true;\n if (!this._fragLoadedFiredOnce && this._performanceObserver) {\n this._performanceObserver.disconnect();\n this.logger.debug(\"This adapter / media doesn't fire fragLoaded - disconnect performance observer\");\n }\n }\n\n _onLoadStart(): void {\n this._loadStartTime = Date.now();\n }\n\n _getRates(): Array<number> {\n const rates = [];\n const videoTracks = this.player.getTracks(this.player.Track.VIDEO);\n videoTracks.forEach(videoTrack => rates.push(videoTrack.bandwidth / DIVIDER));\n return rates;\n }\n\n _setInitialTracks(): void {\n const rates = this._getRates();\n const activeTracks = this.player.getActiveTracks();\n this._rateHandler.setRates(rates);\n if (activeTracks.video) {\n this._rateHandler.setCurrent(activeTracks.video.bandwidth / DIVIDER);\n }\n if (activeTracks.audio) {\n this._model.updateModel({language: activeTracks.audio.language});\n }\n if (activeTracks.text) {\n this._model.updateModel({caption: activeTracks.text.language});\n }\n }\n\n /**\n * gets the available buffer length\n * @returns {number} the remaining buffer length of the current played time range\n * @private\n */\n _getAvailableBuffer(): number {\n let availableBuffer = NaN;\n if (this.player.stats) {\n availableBuffer = this.player.stats.availableBuffer;\n }\n return availableBuffer;\n }\n\n /**\n * calculates the forward buffer health ratio\n * @returns {number} the ratio between available buffer and the target buffer\n * @private\n */\n _getForwardBufferHealth(): number {\n let forwardBufferHealth = NaN;\n let availableBuffer = this._getAvailableBuffer();\n let targetBuffer = this._getTargetBuffer();\n\n if (!isNaN(targetBuffer)) {\n // considering playback left to the target calculation\n forwardBufferHealth = Math.round((availableBuffer * 1000) / targetBuffer) / 1000;\n }\n\n return forwardBufferHealth;\n }\n\n /**\n * get the target buffer length from the player\n * @returns {number} the target buffer in seconds\n * @private\n */\n _getTargetBuffer(): number {\n let targetBuffer = NaN;\n if (this.player.stats) {\n targetBuffer = this.player.stats.targetBuffer;\n }\n return targetBuffer;\n }\n\n /**\n * calculates the dropped frames ratio since last call\n * @returns {number} the ratio between dropped frames and the total frames\n * @private\n */\n _getDroppedFramesRatio(): number {\n let droppedFrames = -1;\n const droppedAndDecoded: ?[number, number] = this._getDroppedAndDecodedFrames();\n if (droppedAndDecoded) {\n let droppedFramesDelta: number;\n let totalFramesDelta: number;\n const lastDroppedFrames = droppedAndDecoded[0];\n const lastTotalFrames = droppedAndDecoded[1];\n droppedFramesDelta = lastDroppedFrames - this._lastDroppedFrames;\n totalFramesDelta = lastTotalFrames - this._lastTotalFrames;\n droppedFrames = totalFramesDelta ? Math.round((droppedFramesDelta / totalFramesDelta) * 1000) / 1000 : 0;\n\n this._lastTotalFrames = lastTotalFrames;\n this._lastDroppedFrames = lastDroppedFrames;\n }\n return droppedFrames;\n }\n\n /**\n * returns dropped and total frames from the VideoPlaybackQuality Interface of the browser (if supported)\n * @returns {number} {number} the number of video frames dropped and total video frames (created and dropped)\n * since the creation of the associated HTMLVideoElement\n * @private\n */\n _getDroppedAndDecodedFrames(): ?[number, number] {\n if (typeof this.player.getVideoElement().getVideoPlaybackQuality === 'function') {\n const videoPlaybackQuality = this.player.getVideoElement().getVideoPlaybackQuality();\n return [videoPlaybackQuality.droppedVideoFrames, videoPlaybackQuality.totalVideoFrames];\n } else if (\n typeof this.player.getVideoElement().webkitDroppedFrameCount == 'number' &&\n typeof this.player.getVideoElement().webkitDecodedFrameCount == 'number'\n ) {\n return [this.player.getVideoElement().webkitDroppedFrameCount, this.player.getVideoElement().webkitDecodedFrameCount];\n } else {\n return null;\n }\n }\n\n _onReport(): void {\n if (this._viewEventEnabled) {\n this._updatePlayTimeSumModel();\n this._model.updateModel({\n forwardBufferHealth: this._getForwardBufferHealth(),\n targetBuffer: this._getTargetBuffer(),\n droppedFramesRatio: this._getDroppedFramesRatio()\n });\n this._sendAnalytics(KavaEventModel.VIEW);\n } else {\n this.logger.warn(`VIEW event blocked because server response of viewEventsEnabled=false`);\n }\n this._model.updateModel({\n totalSegmentsDownloadTime: 0,\n totalSegmentsDownloadBytes: 0,\n maxManifestDownloadTime: 0,\n maxSegmentDownloadTime: 0,\n maxNetworkConnectionOverhead: 0,\n bufferTime: 0\n });\n }\n\n _updateNetworkConnectionTypeinModel(navConnection: any): void {\n this._model.updateModel({\n networkConnectionType: navConnection.effectiveType\n });\n }\n\n _initNetworkConnectionType(): void {\n const navConnection = window.navigator.connection || window.navigator.mozConnection || window.navigator.webkitConnection;\n\n if (navConnection) {\n this.eventManager.listen(navConnection, 'change', () => this._updateNetworkConnectionTypeinModel(navConnection));\n this._updateNetworkConnectionTypeinModel(navConnection);\n }\n }\n\n _onPlaying(): void {\n if (this._isFirstPlaying) {\n this._updateSoundModeInModel();\n this._updateViewabilityModeInModel(this.player.isVisible);\n if (!this.player.isUntimedImg()) this._timer.start();\n this._isFirstPlaying = false;\n const playRequestStartTime =\n this.player.config.playback.preload === 'auto' || this._isManualPreload ? this._firstPlayRequestTime : this._loadStartTime;\n this._model.updateModel({\n joinTime: Kava._getTimeDifferenceInSeconds(playRequestStartTime)\n });\n this._sendAnalytics(KavaEventModel.PLAY);\n this._onReport();\n } else if (this._isEnded) {\n this._timer.start();\n this._isEnded = false;\n this._sendAnalytics(KavaEventModel.REPLAY);\n } else if (this._isPaused) {\n this._timer.resume();\n this._isPaused = false;\n this._sendAnalytics(KavaEventModel.RESUME);\n }\n }\n\n _onCanPlay(): void {\n this._canPlayOccured = true;\n this._model.updateModel({\n canPlayTime: Kava._getTimeDifferenceInSeconds(this._loadStartTime)\n });\n }\n\n _onFirstPlay(): void {\n if (this._canPlayOccured) {\n this._isManualPreload = true;\n }\n this._isFirstPlay = false;\n this._firstPlayRequestTime = Date.now();\n this._sendAnalytics(KavaEventModel.PLAY_REQUEST);\n }\n\n _onSourceSelected(): void {\n this._sendAnalytics(KavaEventModel.IMPRESSION);\n }\n\n _onSeeking(): void {\n this._previousCurrentTime = this.player.currentTime;\n this._model.updateModel({targetPosition: this.player.currentTime});\n this._sendAnalytics(KavaEventModel.SEEK);\n }\n\n _onPause(): void {\n this._isPaused = true;\n this._timer.stop();\n this._sendAnalytics(KavaEventModel.PAUSE);\n }\n\n _onEnded(): void {\n this._isEnded = true;\n this._onTimeUpdate();\n this._model.updateModel({bufferTime: 0});\n }\n\n _onTimeUpdate(): void {\n if (!this.player.isLive()) {\n this._updatePlayTimeSumModel();\n const percent = parseFloat((this.player.currentTime / this.player.duration).toFixed(2));\n if (!this._timePercentEvent.PLAY_REACHED_25 && percent >= 0.25) {\n this._timePercentEvent.PLAY_REACHED_25 = true;\n this._sendAnalytics(KavaEventModel.PLAY_REACHED_25_PERCENT);\n }\n if (!this._timePercentEvent.PLAY_REACHED_50 && percent >= 0.5) {\n this._timePercentEvent.PLAY_REACHED_50 = true;\n this._sendAnalytics(KavaEventModel.PLAY_REACHED_50_PERCENT);\n }\n if (!this._timePercentEvent.PLAY_REACHED_75 && percent >= 0.75) {\n this._timePercentEvent.PLAY_REACHED_75 = true;\n this._sendAnalytics(KavaEventModel.PLAY_REACHED_75_PERCENT);\n }\n if (!this._timePercentEvent.PLAY_REACHED_100 && percent === 1) {\n this._timePercentEvent.PLAY_REACHED_100 = true;\n this._sendAnalytics(KavaEventModel.PLAY_REACHED_100_PERCENT);\n }\n }\n }\n\n _onFragLoaded(event: FakeEvent): void {\n if (!this._fragLoadedFiredOnce) {\n this._fragLoadedFiredOnce = true;\n }\n this._updateFragLoadedStats(event);\n if (this._performanceObserver) {\n const succHandle = this._handleFragPerformanceObserver(event.payload.url);\n if (!succHandle) {\n this._pendingFragLoadedUrls.push(event.payload.url);\n }\n }\n }\n\n _handleFragPerformanceObserver(url: string): boolean {\n const fragResourceTimings = this._performanceEntries.filter(entry => entry.name == url);\n const lastFragResourceTiming: ?Object =\n fragResourceTimings && fragResourceTimings.length ? fragResourceTimings[fragResourceTimings.length - 1] : null;\n if (lastFragResourceTiming) {\n this._updateMaxNetworkConnectionOverhead(lastFragResourceTiming.connectEnd - lastFragResourceTiming.domainLookupStart);\n const lastIndexOftheFragment: number = this._performanceEntries.indexOf(lastFragResourceTiming);\n if (lastIndexOftheFragment > -1 && lastIndexOftheFragment < this._performanceEntries.length) {\n this._performanceEntries = this._performanceEntries.splice(\n lastIndexOftheFragment + 1,\n this._performanceEntries.length - (lastIndexOftheFragment + 1)\n );\n }\n return true;\n } else {\n return false;\n }\n }\n\n _updateMaxNetworkConnectionOverhead(networkConnectionOverhead: number): void {\n this._model.updateModel({\n maxNetworkConnectionOverhead: Math.max(this._model.maxNetworkConnectionOverhead, networkConnectionOverhead)\n });\n }\n\n _updateFragLoadedStats(event: FakeEvent): void {\n const seconds = Math.round(event.payload.miliSeconds) / 1000;\n this._model.updateModel({\n totalSegmentsDownloadTime: this._model.totalSegmentsDownloadTime + seconds,\n totalSegmentsDownloadBytes: this._model.totalSegmentsDownloadBytes + event.payload.bytes,\n maxSegmentDownloadTime: Math.max(seconds, this._model.maxSegmentDownloadTime)\n });\n }\n\n _onManifestLoaded(event: FakeEvent): void {\n const seconds = Math.round(event.payload.miliSeconds) / 1000;\n this._model.updateModel({\n maxManifestDownloadTime: Math.max(seconds, this._model.maxManifestDownloadTime)\n });\n }\n\n _onTimedMetadataLoaded(event: FakeEvent): void {\n const id3TagCues = event.payload.cues.filter(entry => entry.value && entry.value.key === TEXT_TYPE);\n if (id3TagCues.length) {\n try {\n this._model.updateModel({flavorParamsId: Number(JSON.parse(id3TagCues[id3TagCues.length - 1].value.data).sequenceId)});\n } catch (e) {\n this.logger.debug('error parsing id3', e);\n }\n }\n }\n\n _onVideoTrackChanged(event: FakeEvent): void {\n const videoTrack = event.payload.selectedVideoTrack;\n this._rateHandler.setCurrent(videoTrack.bandwidth / DIVIDER);\n if (this.player.isAdaptiveBitrateEnabled()) {\n this._sendAnalytics(KavaEventModel.FLAVOR_SWITCH);\n } else {\n this._sendAnalytics(KavaEventModel.SOURCE_SELECTED);\n }\n }\n\n _onAudioTrackChanged(event: FakeEvent): void {\n const audioTrack = event.payload.selectedAudioTrack;\n this._model.updateModel({language: audioTrack.language});\n this._sendAnalytics(KavaEventModel.AUDIO_SELECTED);\n }\n\n _onTextTrackChanged(event: FakeEvent): void {\n if (this._isPlaying) {\n const textTrack = event.payload.selectedTextTrack;\n this._model.updateModel({caption: textTrack.language});\n this._sendAnalytics(KavaEventModel.CAPTIONS);\n }\n }\n\n _onError(event: FakeEvent): void {\n if (event.payload && event.payload.severity === PKError.Severity.CRITICAL) {\n this._model.updateModel({\n errorCode: event.payload.code,\n errorDetails: event.payload.data,\n errorPosition: this._isFirstPlay ? ErrorPosition.PRE_PLAY : this._isFirstPlaying ? ErrorPosition.PRE_PLAYING : ErrorPosition.MID_STREAM\n });\n this._sendAnalytics(KavaEventModel.ERROR);\n this.reset();\n }\n }\n\n _onPlaybackRateChanged(): void {\n this._sendAnalytics(KavaEventModel.SPEED);\n }\n\n _onPlayerStateChanged(event: FakeEvent): void {\n const oldState = event.payload.oldState;\n const newState = event.payload.newState;\n if (oldState.type === this.player.State.BUFFERING) {\n this._isBuffering = false;\n this._updateBufferModel();\n this._sendAnalytics(KavaEventModel.BUFFER_END);\n }\n if (newState.type === this.player.State.BUFFERING) {\n this._isBuffering = true;\n this._bufferStartTime = Date.now();\n this._sendAnalytics(KavaEventModel.BUFFER_START);\n }\n }\n\n _onRelatedClicked() {\n this._sendAnalytics(KavaEventModel.RELATED_CLICKED);\n }\n\n _onRelatedSelected() {\n this._sendAnalytics(KavaEventModel.RELATED_SELECTED);\n }\n\n _updateSessionStartTimeModel(response: Object | number): void {\n if (!this._model.getSessionStartTime() && response) {\n if (typeof response === 'object') {\n this._model.updateModel({sessionStartTime: response.time});\n this._viewEventEnabled = response.viewEventsEnabled;\n } else {\n this._model.updateModel({sessionStartTime: response});\n }\n }\n if (this._timer.isStopped()) {\n this._model.updateModel({sessionStartTime: null});\n }\n }\n\n _updateBufferModel(): void {\n const duration = Kava._getTimeDifferenceInSeconds(this._bufferStartTime);\n this._model.updateModel({\n bufferTime: this._model.getBufferTime() + duration,\n bufferTimeSum: this._model.getBufferTimeSum() + duration\n });\n }\n\n _updatePlayTimeSumModel(): void {\n let delta;\n if (this.player.isLive()) {\n delta = this.config.viewEventCountdown - this._model.getBufferTime();\n } else {\n delta = this.player.currentTime - this._previousCurrentTime;\n this._previousCurrentTime = this.player.currentTime;\n }\n this._model.updateModel({playTimeSum: this._model.getPlayTimeSum() + delta});\n }\n\n _setModelDelegates() {\n this._model.getPlaybackSpeed = () => this.player.playbackRate;\n this._model.getActualBitrate = () => this._rateHandler.getCurrent();\n this._model.getAverageBitrate = () => this._rateHandler.getAverage();\n this._model.getPartnerId = () => this.config.partnerId;\n this._model.getEntryId = () => this.config.entryId;\n this._model.getPlaylistId = () => this.config.playlistId;\n this._model.getSessionId = () => this.config.sessionId;\n this._model.getPersistentSessionId = () => this.config.persistentSessionId;\n this._model.getClientVer = () => this.config.playerVersion;\n this._model.getClientTag = () => 'html5:v' + this.config.playerVersion;\n this._model.getKS = () => this.config.ks;\n this._model.getVirtualEventId = () => this.config.virtualEventId;\n this._model.getUIConfId = () => this.config.uiConfId;\n this._model.getReferrer = () => this.config.referrer;\n this._model.getCustomVar1 = () => this.config.customVar1;\n this._model.getCustomVar2 = () => this.config.customVar2;\n this._model.getCustomVar3 = () => this.config.customVar3;\n this._model.getPosition = () => this._getPosition();\n this._model.getDeliveryType = () => this._getDeliveryType();\n this._model.getPlaybackType = () => this._getPlaybackType();\n this._model.getPlaybackContext = () => this.config.playbackContext;\n this._model.getApplicationVersion = () => this.config.applicationVersion;\n this._model.getApplication = () => this.config.application;\n this._model.getKalturaApplicationVersion = () => this.config.kalturaApplicationVersion;\n this._model.getKalturaApplication = () => this._getKalturaApplicationId(this.config.kalturaApplication);\n this._model.getUserId = () => this.config.userId;\n }\n\n _getKalturaApplicationId(kalturaAppName: string): string {\n if (kalturaAppName in KalturaApplication) {\n return KalturaApplication[kalturaAppName];\n } else {\n this.logger.warn(`Kava analytics - unknon kalturaAppName: ` + kalturaAppName);\n return '';\n }\n }\n\n _getPosition(): number {\n if (this.player.isLive()) {\n if (!Number.isNaN(this.player.duration)) {\n if (this.player.duration - this.player.currentTime < 1) {\n return 0;\n }\n return -(this.player.duration - this.player.currentTime);\n }\n return 0;\n }\n return this._isFirstPlaying ? this.player.currentTime || this.player.sources.startTime || 0 : this.player.currentTime;\n }\n\n _getDeliveryType(): string {\n if (this.player.streamType === this.player.StreamType.PROGRESSIVE) {\n return 'url';\n }\n return this.player.streamType;\n }\n\n _getPlaybackType(): string {\n if (this.player.isLive()) {\n if (this.player.isDvr()) {\n const distanceFromLiveEdge = this.player.duration - this.player.currentTime;\n if (distanceFromLiveEdge >= this.config.dvrThreshold) {\n return 'dvr';\n }\n }\n return 'live';\n }\n return this.player.isImage() ? 'img' : 'vod';\n }\n\n _validate(): boolean {\n if (!this.config.partnerId) {\n this._logMissingParam('partnerId');\n return false;\n }\n if (!this.config.entryId) {\n this._logMissingParam('entryId');\n return false;\n }\n return true;\n }\n\n _logMissingParam(missingParam: string): void {\n this.logger.warn(`Kava analytics block report because of missing param ${missingParam}`);\n }\n\n static _getTimeDifferenceInSeconds(time: number): number {\n return (Date.now() - time) / 1000.0;\n }\n\n _updateTabModeInModel(hiddenAttr: string): void {\n this._model.updateModel({\n // $FlowFixMe\n tabMode: this._isTabHidden(hiddenAttr) && !this.player.isInPictureInPicture() ? TabMode.TAB_NOT_FOCUSED : TabMode.TAB_FOCUSED\n });\n }\n\n _isTabHidden(hiddenAttr: string): boolean {\n return document[hiddenAttr];\n }\n\n _initTabMode(): void {\n let hiddenAttr: string;\n let visibilityChangeEventName: string;\n if (typeof document.hidden !== 'undefined') {\n // Opera 12.10 and Firefox 18 and later support\n hiddenAttr = 'hidden';\n visibilityChangeEventName = 'visibilitychange';\n } else if (typeof document.msHidden !== 'undefined') {\n hiddenAttr = 'msHidden';\n visibilityChangeEventName = 'msvisibilitychange';\n } else if (typeof document.webkitHidden !== 'undefined') {\n hiddenAttr = 'webkitHidden';\n visibilityChangeEventName = 'webkitvisibilitychange';\n }\n\n if (hiddenAttr && visibilityChangeEventName) {\n this.eventManager.listen(document, visibilityChangeEventName, () => this._updateTabModeInModel(hiddenAttr));\n this._updateTabModeInModel(hiddenAttr);\n }\n }\n}\n\nexport {Kava};\n","// @flow\nimport {registerPlugin} from 'kaltura-player-js';\nimport {Kava} from './kava';\n\ndeclare var __VERSION__: string;\ndeclare var __NAME__: string;\n\nconst VERSION = __VERSION__;\nconst NAME = __NAME__;\n\nexport {Kava as Plugin};\nexport {KavaEventType as EventType} from './kava-event-model';\nexport {HttpMethodType} from './http-method-type';\nexport {VERSION, NAME};\n\nconst pluginName: string = 'kava';\n\nregisterPlugin(pluginName, Kava);\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["./kava/webpack/bootstrap","./kava/external [\"KalturaPlayer\"]","./kava/../node_modules/playkit-js-providers/dist/playkit-analytics-service.js","./kava/./kava-event-model.js","./kava/./kava-model.js","./kava/./kava-rate-handler.js","./kava/./kava-timer.js","./kava/./http-method-type.js","./kava/./kaltura-application.js","./kava/../node_modules/@playkit-js/related/src/event/related-event.js","./kava/./kava.js","./kava/./index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","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","KalturaPlayer","window","e","default","a","configurable","writable","this","severity","category","code","data","_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","Map","async","timeout","maxAttempts","headers","getUrl","service","action","doHttpRequest","Promise","_requestPromise","resolve","reject","url","Severity","Category","Code","_createXHR","XMLHttpRequest","onreadystatechange","readyState","status","JSON","parse","responseText","responseHeaders","_getResponseHeaders","_createError","text","open","method","retryConfig","performance","now","ontimeout","_handleError","statusText","onerror","onabort","forEach","setRequestHeader","send","params","getAllResponseHeaders","split","filter","toLowerCase","indexOf","_attemptCounter","assign","attempt","VERSION","DEBUG","INFO","OFF","TIME","TRACE","WARN","createDefaultHandler","debug","enabledFor","getLevel","info","log","setHandler","setLevel","time","timeEnd","trace","useDefaults","warn","serviceUrl","cdnUrl","serviceParams","apiVersion","format","useApiCaptions","loadThumbnailWithKs","set","Array","isArray","length","slice","keys","f","objectType","hasError","message","u","ReferenceError","arguments","apply","concat","constructor","__proto__","add","requests","push","execute","stringify","FAILED_PARSING_REQUEST","then","success","response","results","result","map","toString","encodeURIComponent","test","String","join","replace","getMultiRequest","ks","clientTag","partnerId","trackEvent","_trackEventByPOST","_trackEventByGET","tag","eventType","entryId","sessionId","KavaModel","model","ScreenMode","NOT_IN_FULLSCREEN","NaN","updateModel","getPlayTimeSum","playTimeSum","getCanPlayTime","canPlayTime","getBufferTime","bufferTime","getBufferTimeSum","bufferTimeSum","getPlayerJSLoadTime","playerJSLoadTime","Math","round","getJoinTime","joinTime","getTargetPosition","targetPosition","getTargetBuffer","targetBuffer","getLanguage","language","getCaption","caption","getBandwidth","totalSegmentsDownloadTime","totalSegmentsDownloadBytes","getMaxManifestDownloadTime","maxManifestDownloadTime","getSegmentDownloadTime","maxSegmentDownloadTime","getForwardBufferHealth","forwardBufferHealth","getDroppedFramesRatio","droppedFramesRatio","getSoundMode","soundMode","getViewabilityMode","viewabilityMode","getScreenMode","screenMode","getTabMode","tabMode","getNetworkConnectionType","networkConnectionType","getNetworkConnectionOverhead","maxNetworkConnectionOverhead","getErrorCode","errorCode","getFlavorParamsId","flavorParamsId","getErrorDetails","retVal","errorDetails","getEventIndex","eventIndex","getErrorPosition","errorPosition","getSessionStartTime","sessionStartTime","obj","getModel","eventObj","commonModel","index","getPartnerId","getEntryId","getSessionId","referrer","getReferrer","deliveryType","getDeliveryType","playbackType","getPlaybackType","clientVer","getClientVer","getClientTag","position","getPosition","playbackSpeed","getPlaybackSpeed","getKS","getVirtualEventId","virtualEventId","getUIConfId","uiConfId","getPlaylistId","playlistId","getCustomVar1","customVar1","getCustomVar2","customVar2","getCustomVar3","customVar3","getPlaybackContext","playbackContext","getApplicationVersion","applicationVer","getApplication","application","getKalturaApplicationVersion","kalturaApplicationVer","getKalturaApplication","kalturaApplication","getUserId","userId","getPersistentSessionId","persistentSessionId","eventModel","getEventModel","SoundMode","ViewabilityMode","TabMode","FULLSCREEN","ErrorPosition","KavaEventModel","VIEW","type","actualBitrate","getActualBitrate","averageBitrate","getAverageBitrate","audioLanguage","isNaN","manifestDownloadTime","segmentDownloadTime","bandwidth","networkConnectionOverhead","IMPRESSION","PLAY_REQUEST","PLAY","canPlay","RESUME","PAUSE","BUFFER_START","BUFFER_END","REPLAY","SEEK","PLAY_REACHED_25_PERCENT","PLAY_REACHED_50_PERCENT","PLAY_REACHED_75_PERCENT","PLAY_REACHED_100_PERCENT","SOURCE_SELECTED","AUDIO_SELECTED","FLAVOR_SWITCH","SPEED","CAPTIONS","RELATED_CLICKED","RELATED_SELECTED","KavaEventType","k","KavaRateHandler","_rates","setRates","rates","rate","active","duration","setCurrent","find","getCurrent","current","countCurrent","getAverage","totalDuration","sum","reset","destroy","FakeEvent","core","FakeEventTarget","KavaTimer","config","_config","start","_clearTimeout","_stopped","_resetCounter","_eventCounter","_intervalId","setInterval","_monitor","resume","stop","isStopped","clearInterval","resetCounter","dispatchEvent","Event","RESET","TICK","eventCounter","REPORT","HttpMethodType","GET","POST","KalturaApplication","KMC","KMS","KAF","PITCH","KMS_GO","WEBCASTING","PERSONAL_CAPTURE","KME","KME_MOBILE_APP","PATH","LECTURE_CAPTURE","EP","CHAT_AND_COLLABORATION","ANALYTICS","EXPRESS_CAPTURE","KPF","KAF_GO","SITES","STUDIO","RelatedEvent","PKError","Error","Utils","Kava","player","_rateHandler","_model","_setModelDelegates","_timer","resetSessionCountdown","viewEventCountdown","_viewEventEnabled","_resetFlags","_addBindings","entry","getEntriesByType","match","isValid","_updateSoundModeInModel","muted","volume","_updateViewabilityModeInModel","isVisible","isInPictureInPicture","_handleNewPerformanceEntries","list","perfEntries","getEntries","_performanceEntries","_pendingFragLoadedUrls","_handleFragPerformanceObserver","pop","eventManager","_reset","_performanceObserver","disconnect","removeAll","loadMedia","PerformanceObserver","observe","entryTypes","event","sendAnalytics","OVPAnalyticsService","requestMethod","_handleServerResponseSuccess","err","_handleServerResponseFailed","_previousCurrentTime","_isPlaying","_isFirstPlay","_isFirstPlaying","_isEnded","_isPaused","_isBuffering","_timePercentEvent","_canPlayOccured","_isManualPreload","_resetSession","logger","_sendAnalytics","_validate","_updateBufferModel","_bufferStartTime","Date","tamperAnalyticsHandler","catch","_updateSessionStartTimeModel","listen","_onReport","_onSourceSelected","_onError","FIRST_PLAY","_onFirstPlay","FRAG_LOADED","_onFragLoaded","MANIFEST_LOADED","_onManifestLoaded","TIMED_METADATA","_onTimedMetadataLoaded","TRACKS_CHANGED","_setInitialTracks","PLAYING","_onPlaying","FIRST_PLAYING","_onFirstPlaying","SEEKING","_onSeeking","_onPause","ENDED","_onEnded","TIME_UPDATE","_onTimeUpdate","VIDEO_TRACK_CHANGED","_onVideoTrackChanged","AUDIO_TRACK_CHANGED","_onAudioTrackChanged","TEXT_TRACK_CHANGED","_onTextTrackChanged","PLAYER_STATE_CHANGED","_onPlayerStateChanged","RATE_CHANGE","_onPlaybackRateChanged","CAN_PLAY","_onCanPlay","LOAD_START","_onLoadStart","VOLUME_CHANGE","VISIBILITY_CHANGE","payload","visible","MUTE_CHANGE","ENTER_FULLSCREEN","EXIT_FULLSCREEN","_onRelatedClicked","_onRelatedSelected","_initTabMode","_initNetworkConnectionType","_fragLoadedFiredOnce","_loadStartTime","_getRates","getTracks","Track","VIDEO","videoTrack","activeTracks","getActiveTracks","video","audio","_getAvailableBuffer","availableBuffer","stats","_getForwardBufferHealth","_getTargetBuffer","_getDroppedFramesRatio","droppedFrames","droppedAndDecoded","_getDroppedAndDecodedFrames","droppedFramesDelta","totalFramesDelta","lastDroppedFrames","lastTotalFrames","_lastDroppedFrames","_lastTotalFrames","getVideoElement","getVideoPlaybackQuality","videoPlaybackQuality","droppedVideoFrames","totalVideoFrames","webkitDroppedFrameCount","webkitDecodedFrameCount","_updatePlayTimeSumModel","_updateNetworkConnectionTypeinModel","navConnection","effectiveType","navigator","connection","mozConnection","webkitConnection","isUntimedImg","playRequestStartTime","playback","preload","_firstPlayRequestTime","_getTimeDifferenceInSeconds","currentTime","isLive","percent","parseFloat","toFixed","PLAY_REACHED_25","PLAY_REACHED_50","PLAY_REACHED_75","PLAY_REACHED_100","_updateFragLoadedStats","fragResourceTimings","lastFragResourceTiming","_updateMaxNetworkConnectionOverhead","connectEnd","domainLookupStart","lastIndexOftheFragment","splice","max","seconds","miliSeconds","bytes","id3TagCues","cues","Number","sequenceId","selectedVideoTrack","isAdaptiveBitrateEnabled","audioTrack","selectedAudioTrack","textTrack","selectedTextTrack","playbackRates","includes","playbackRate","oldState","newState","State","BUFFERING","viewEventsEnabled","delta","playerVersion","_getPosition","_getDeliveryType","_getPlaybackType","applicationVersion","kalturaApplicationVersion","_getKalturaApplicationId","kalturaAppName","sources","startTime","streamType","StreamType","PROGRESSIVE","isDvr","dvrThreshold","isImage","_logMissingParam","missingParam","_updateTabModeInModel","hiddenAttr","_isTabHidden","document","visibilityChangeEventName","hidden","msHidden","webkitHidden","copyDeep","BasePlugin","Http","protocol","__VERSION__","NAME","__NAME__","registerPlugin"],"mappings":"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","file":"playkit-kava.js","sourcesContent":[" \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 = 2);\n","module.exports = KalturaPlayer;","!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=9)}([function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return a}));var n=r(2);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}var a=function e(t,r,n,o){void 0===o&&(o={}),this.severity=t,this.category=r,this.code=n,this.data=o,e._logger.error(\"Category:\"+r+\" | Code:\"+n+\" |\",o)};o(a,\"Severity\",{RECOVERABLE:1,CRITICAL:2}),o(a,\"Category\",{NETWORK:1,SERVICE:2,PROVIDER:3}),o(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}),o(a,\"_logger\",Object(n.a)(\"Error\"))},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return a}));var n=r(0);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}var a=function(){function e(e){void 0===e&&(e=new Map),o(this,\"retryConfig\",{async:!0,timeout:0,maxAttempts:4}),o(this,\"_attemptCounter\",1),this.headers=e}var t=e.prototype;return t.getUrl=function(e){return e+\"/service/\"+this.service+(this.action?\"/action/\"+this.action:\"\")},t.doHttpRequest=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},t._createXHR=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)},t._getResponseHeaders=function(e){return e.getAllResponseHeaders().split(\"\\n\").filter((function(e){return 0===e.toLowerCase().indexOf(\"x-\")}))},t._handleError=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._attemptCounter<this.retryConfig.maxAttempts))return this._requestPromise.reject(n);this._attemptCounter++,this._createXHR()},t._createError=function(e,t,r){return Object.assign(r,{url:this.url,headers:this._getResponseHeaders(e),attempt:this._attemptCounter}),new n.a(n.a.Severity.CRITICAL,n.a.Category.NETWORK,t,r)},e}()},function(e,t,r){\"use strict\";var n={get:function(){return{VERSION:\"\",DEBUG:{value:\"\",name:\"\"},ERROR:{value:\"\",name:\"\"},INFO:{value:\"\",name:\"\"},OFF:{value:\"\",name:\"\"},TIME:{value:\"\",name:\"\"},TRACE:{value:\"\",name:\"\"},WARN:{value:\"\",name:\"\"},createDefaultHandler:function(){},debug:function(){},enabledFor:function(){},error:function(){},get:function(){},getLevel:function(){},info:function(){},log:function(){},setHandler:function(){},setLevel:function(){},time:function(){},timeEnd:function(){},trace:function(){},useDefaults:function(){},warn:function(){}}}};function o(e){return n.get(e)}t.a=o},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return a}));var n=r(4),o={serviceUrl:\"https://cdnapisec.kaltura.com/api_v3\",cdnUrl:\"https://cdnapisec.kaltura.com\",serviceParams:{apiVersion:\"3.3.0\",format:1},useApiCaptions:!0,loadThumbnailWithKs:!1},a=function(){function e(){}return e.set=function(e){e&&Object.assign(o,e)},e.get=function(){return Object(n.a)(o)},e}()},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return n}));var n=function e(t){var r;return Array.isArray(t)?(r=t.length>0?t.slice(0):[]).forEach((function(t,n){(\"object\"==typeof t&&t!=={}||Array.isArray(t)&&t.length>0)&&(r[n]=e(t))})):\"object\"==typeof t?(r=Object.assign({},t),Object.keys(r).forEach((function(t){(\"object\"==typeof 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 f}));var n=r(1),o=r(2);var a=function(e){var t,r,n;n=!1,(r=\"hasError\")in(t=this)?Object.defineProperty(t,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[r]=n,\"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(e,t){this.code=e,this.message=t},s=r(0);function u(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}function c(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var f=function(e){var t,r;function n(){for(var t,r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return c(u(t=e.call.apply(e,[this].concat(n))||this),\"requests\",[]),t}r=e,(t=n).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r;var o=n.prototype;return o.add=function(e){var t;this.requests.push(e);var r={},n={service:e.service,action:e.action};return Object.assign(r,((t={})[this.requests.length]=Object.assign(n,e.params),t)),Object.assign(r,this.params),this.params=r,this},o.execute=function(e){var t=this;return new Promise((function(r,o){try{t.params=JSON.stringify(t.params)}catch(e){n._logger.error(\"\"+e.message),o(new s.a(s.a.Severity.CRITICAL,s.a.Category.PROVIDER,s.a.Code.FAILED_PARSING_REQUEST,{error:e,params:t.params}))}t.doHttpRequest().then((function(n){var a=new l(n,e);a.success?r({headers:t.responseHeaders,response:a}):o(new s.a(s.a.Severity.CRITICAL,s.a.Category.NETWORK,s.a.Code.MULTIREQUEST_API_ERROR,{url:t.url,headers:t.responseHeaders,results:a.results}))}),(function(e){o(e)}))}))},n}(n.a);c(f,\"_logger\",Object(o.a)(\"MultiRequestBuilder\"));var l=function e(t,r){void 0===r&&(r=!0),c(this,\"results\",[]);var n=t.result?t.result:t,o=(Array.isArray(n)?n:[n]).map((function(e){return new a(e)})),i=o.filter((function(e){return e.hasError}));i.forEach((function(t){e._logger.error(\"Service returned an error with error code: \"+t.error.code+\" and message: \"+t.error.message+\".\")})),this.results=o,r&&i.length||i.length===this.results.length?this.success=!1:(this.results=this.results.filter((function(e){return!e.hasError})),this.success=!0)};c(l,\"_logger\",Object(o.a)(\"MultiRequestResult\"))},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return n}));var n=function(e){var t=[],r=/\\[\\]$/,n=function(e){return\"[object Array]\"===Object.prototype.toString.call(e)},o=function(e,r){r=\"function\"==typeof r?r():null==r?\"\":r,t[t.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(r)};return function e(a,i){var s,u,c;if(a)if(n(i))for(s=0,u=i.length;s<u;s++)r.test(a)?o(a,i[s]):e(a+\":\"+(\"object\"==typeof i[s]?s:\"\"),i[s]);else if(i&&\"[object Object]\"===String(i))for(c in i)e(a+\":\"+c,i[c]);else o(a,i);else if(n(i))for(s=0,u=i.length;s<u;s++)o(i[s].name,i[s].value);else for(c in i)e(c,i[c]);return t}(\"\",e).join(\"&\").replace(/%20/g,\"+\")}},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return a}));var n=r(5),o=r(3),a=function(){function e(){}return e.getMultiRequest=function(e,t,r){var a=o.a.get(),i=a.serviceParams;Object.assign(i,{ks:t,clientTag:\"html5:v\"+e}),r&&Object.assign(i,{partnerId:r});var s=new Map;s.set(\"Content-Type\",\"application/json\");var u=new n.a(s);return u.method=\"POST\",u.service=\"multirequest\",u.url=u.getUrl(a.serviceUrl),u.params=i,u},e}()},,function(e,t,r){\"use strict\";r.r(t),r.d(t,\"OVPAnalyticsService\",(function(){return s})),r.d(t,\"OVPConfiguration\",(function(){return o.a})),r.d(t,\"RequestBuilder\",(function(){return n.a})),r.d(t,\"NAME\",(function(){return u})),r.d(t,\"VERSION\",(function(){return c}));var n=r(1),o=r(3),a=r(7),i=r(6);var s=function(e){var t,r;function a(){return e.apply(this,arguments)||this}return r=e,(t=a).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r,a.trackEvent=function(e,t,r){return\"POST\"===r?a._trackEventByPOST(e,t):a._trackEventByGET(e,t)},a._trackEventByGET=function(e,t){var r=o.a.get(),a={};Object.assign(a,r.serviceParams,t);var s=new n.a;return s.service=\"analytics\",s.action=\"trackEvent\",s.method=\"GET\",s.tag=\"analytics-trackEvent\",s.params=a,s.url=e+\"?service=\"+s.service+\"&action=\"+s.action+\"&\"+Object(i.a)(s.params),s},a._trackEventByPOST=function(e,t){var r=o.a.get(),a={};Object.assign(a,r.serviceParams,t);var s=new Map;s.set(\"Content-Type\",\"application/json\");var u=new n.a(s),c={eventType:a.eventType,partnerId:a.partnerId,entryId:a.entryId,sessionId:a.sessionId};return[\"eventType\",\"partnerId\",\"entryId\",\"sessionId\"].forEach((function(e){return delete a[e]})),u.service=\"analytics\",u.action=\"trackEvent\",u.method=\"POST\",u.tag=\"analytics-trackEvent\",u.params=JSON.stringify(a),u.url=e+\"?service=\"+u.service+\"&action=\"+u.action+\"&\"+Object(i.a)(c),u},a}(a.a),u=\"playkit-js-providers-analytics-service\",c=\"2.37.0\"}])}));\n//# sourceMappingURL=playkit-analytics-service.js.map","// @flow\nimport {KavaModel} from './kava-model';\n\n/**\n * @name KavaEventType\n * @enum\n */\nexport const KavaEventModel: {[event: string]: KavaEvent} = {\n /**\n * @type {string} VIEW\n * @memberof KavaEventType\n */\n VIEW: {\n type: 'VIEW',\n index: 99,\n getEventModel: (model: KavaModel) => {\n const eventModel: {[name: string]: any} = {\n playTimeSum: model.getPlayTimeSum(),\n bufferTime: model.getBufferTime(),\n bufferTimeSum: model.getBufferTimeSum(),\n actualBitrate: model.getActualBitrate(),\n averageBitrate: model.getAverageBitrate(),\n audioLanguage: model.getLanguage(),\n soundMode: model.getSoundMode(),\n tabMode: model.getTabMode(),\n viewabilityMode: model.getViewabilityMode(),\n screenMode: model.getScreenMode()\n };\n\n if (!isNaN(model.getForwardBufferHealth())) {\n eventModel.forwardBufferHealth = model.getForwardBufferHealth();\n }\n if (model.getMaxManifestDownloadTime() > 0) {\n eventModel.manifestDownloadTime = model.getMaxManifestDownloadTime();\n }\n if (model.getSegmentDownloadTime() > 0) {\n eventModel.segmentDownloadTime = model.getSegmentDownloadTime();\n }\n if (model.getBandwidth()) {\n eventModel.bandwidth = model.getBandwidth();\n }\n if (model.getDroppedFramesRatio() != null) {\n eventModel.droppedFramesRatio = model.getDroppedFramesRatio();\n }\n\n if (!isNaN(model.getTargetBuffer())) {\n eventModel.targetBuffer = model.getTargetBuffer();\n }\n\n if (model.getNetworkConnectionType() !== '') {\n eventModel.networkConnectionType = model.getNetworkConnectionType();\n }\n\n if (model.getNetworkConnectionOverhead()) {\n eventModel.networkConnectionOverhead = model.getNetworkConnectionOverhead();\n }\n if (!isNaN(model.getFlavorParamsId())) {\n eventModel.flavorParamsId = model.getFlavorParamsId();\n }\n\n return eventModel;\n }\n },\n /**\n * @type {string} IMPRESSION\n * @memberof KavaEventType\n */\n IMPRESSION: {\n type: 'IMPRESSION',\n index: 1,\n getEventModel: (model: KavaModel) => {\n const eventModel = {};\n if (model.getPlayerJSLoadTime() != null) {\n eventModel.playerJSLoadTime = model.getPlayerJSLoadTime();\n }\n return eventModel;\n }\n },\n /**\n * @type {string} PLAY_REQUEST\n * @memberof KavaEventType\n */\n PLAY_REQUEST: {\n type: 'PLAY_REQUEST',\n index: 2,\n getEventModel: () => ({})\n },\n /**\n * @type {string} PLAY\n * @memberof KavaEventType\n */\n PLAY: {\n type: 'PLAY',\n index: 3,\n getEventModel: (model: KavaModel) => {\n const eventModel: {[name: string]: any} = {\n bufferTime: model.getBufferTime(),\n bufferTimeSum: model.getBufferTimeSum(),\n actualBitrate: model.getActualBitrate(),\n joinTime: model.getJoinTime(),\n canPlay: model.getCanPlayTime()\n };\n if (model.getNetworkConnectionType() !== '') {\n eventModel.networkConnectionType = model.getNetworkConnectionType();\n }\n return eventModel;\n }\n },\n /**\n * @type {string} RESUME\n * @memberof KavaEventType\n */\n RESUME: {\n type: 'RESUME',\n index: 4,\n getEventModel: (model: KavaModel) => ({\n bufferTime: model.getBufferTime(),\n bufferTimeSum: model.getBufferTimeSum(),\n actualBitrate: model.getActualBitrate()\n })\n },\n /**\n * @type {string} PAUSE\n * @memberof KavaEventType\n */\n PAUSE: {\n type: 'PAUSE',\n index: 33,\n getEventModel: () => ({})\n },\n /**\n * @type {string} BUFFER_START\n * @memberof KavaEventType\n */\n BUFFER_START: {\n type: 'BUFFER_START',\n index: 45,\n getEventModel: () => ({})\n },\n /**\n * @type {string} BUFFER_END\n * @memberof KavaEventType\n */\n BUFFER_END: {\n type: 'BUFFER_END',\n index: 46,\n getEventModel: () => ({})\n },\n /**\n * @type {string} REPLAY\n * @memberof KavaEventType\n */\n REPLAY: {\n type: 'REPLAY',\n index: 34,\n getEventModel: () => ({})\n },\n /**\n * @type {string} SEEK\n * @memberof KavaEventType\n */\n SEEK: {\n type: 'SEEK',\n index: 35,\n getEventModel: (model: KavaModel) => ({\n targetPosition: model.getTargetPosition()\n })\n },\n /**\n * @type {string} PLAY_REACHED_25_PERCENT\n * @memberof KavaEventType\n */\n PLAY_REACHED_25_PERCENT: {\n type: 'PLAY_REACHED_25_PERCENT',\n index: 11,\n getEventModel: () => ({})\n },\n /**\n * @type {string} PLAY_REACHED_50_PERCENT\n * @memberof KavaEventType\n */\n PLAY_REACHED_50_PERCENT: {\n type: 'PLAY_REACHED_50_PERCENT',\n index: 12,\n getEventModel: () => ({})\n },\n /**\n * @type {string} PLAY_REACHED_75_PERCENT\n * @memberof KavaEventType\n */\n PLAY_REACHED_75_PERCENT: {\n type: 'PLAY_REACHED_75_PERCENT',\n index: 13,\n getEventModel: () => ({})\n },\n /**\n * @type {string} PLAY_REACHED_100_PERCENT\n * @memberof KavaEventType\n */\n PLAY_REACHED_100_PERCENT: {\n type: 'PLAY_REACHED_100_PERCENT',\n index: 14,\n getEventModel: () => ({})\n },\n /**\n * @type {string} SOURCE_SELECTED\n * @memberof KavaEventType\n */\n SOURCE_SELECTED: {\n type: 'SOURCE_SELECTED',\n index: 39,\n getEventModel: (model: KavaModel) => ({\n actualBitrate: model.getActualBitrate()\n })\n },\n /**\n * @type {string} AUDIO_SELECTED\n * @memberof KavaEventType\n */\n AUDIO_SELECTED: {\n type: 'AUDIO_SELECTED',\n index: 42,\n getEventModel: (model: KavaModel) => ({\n language: model.getLanguage()\n })\n },\n /**\n * @type {string} FLAVOR_SWITCH\n * @memberof KavaEventType\n */\n FLAVOR_SWITCH: {\n type: 'FLAVOR_SWITCH',\n index: 43,\n getEventModel: (model: KavaModel) => ({\n actualBitrate: model.getActualBitrate()\n })\n },\n /**\n * @type {string} SPEED\n * @memberof KavaEventType\n */\n SPEED: {\n type: 'SPEED',\n index: 41,\n getEventModel: () => ({})\n },\n /**\n * @type {string} CAPTIONS\n * @memberof KavaEventType\n */\n CAPTIONS: {\n type: 'CAPTIONS',\n index: 38,\n getEventModel: () => ({})\n },\n /**\n * @type {string} ERROR\n * @memberof KavaEventType\n */\n ERROR: {\n type: 'ERROR',\n index: 98,\n getEventModel: (model: KavaModel) => ({\n errorCode: model.getErrorCode(),\n errorDetails: model.getErrorDetails(),\n errorPosition: model.getErrorPosition()\n })\n },\n /**\n * @type {string} RELATED_CLICKED\n * @memberof KavaEventType\n */\n RELATED_CLICKED: {\n type: 'RELATED_CLICKED',\n index: 36,\n getEventModel: () => ({})\n },\n /**\n * @type {string} RELATED_SELECTED\n * @memberof KavaEventType\n */\n RELATED_SELECTED: {\n type: 'RELATED_SELECTED',\n index: 37,\n getEventModel: () => ({})\n }\n};\n\nexport const KavaEventType: {[event: string]: string} = (eventType => {\n Object.keys(KavaEventModel).forEach(k => (eventType[k] = k));\n return eventType;\n})({});\n\n/**\n * Gets the full event model for a certain event object including the common params.\n * @private\n * @param {KavaEvent} eventObj - The event model.\n * @param {KavaModel} model - The plugin model store.\n * @returns {Object} - The full event model.\n */\nexport function getEventModel(eventObj: KavaEvent, model: KavaModel): Object {\n const commonModel: Object = {\n eventType: eventObj.index,\n partnerId: model.getPartnerId(),\n entryId: model.getEntryId(),\n sessionId: model.getSessionId(),\n eventIndex: model.getEventIndex(),\n referrer: model.getReferrer(),\n deliveryType: model.getDeliveryType(),\n playbackType: model.getPlaybackType(),\n clientVer: model.getClientVer(),\n clientTag: model.getClientTag(),\n position: model.getPosition(),\n playbackSpeed: model.getPlaybackSpeed()\n };\n\n if (model.getCaption()) {\n commonModel.caption = model.getCaption();\n }\n if (model.getSessionStartTime()) {\n commonModel.sessionStartTime = model.getSessionStartTime();\n }\n if (model.getKS()) {\n commonModel.ks = model.getKS();\n }\n if (model.getVirtualEventId()) {\n commonModel.virtualEventId = model.getVirtualEventId();\n }\n if (model.getUIConfId()) {\n commonModel.uiConfId = model.getUIConfId();\n }\n if (model.getPlaylistId()) {\n commonModel.playlistId = model.getPlaylistId();\n }\n if (model.getCustomVar1()) {\n commonModel.customVar1 = model.getCustomVar1();\n }\n if (model.getCustomVar2()) {\n commonModel.customVar2 = model.getCustomVar2();\n }\n if (model.getCustomVar3()) {\n commonModel.customVar3 = model.getCustomVar3();\n }\n if (model.getPlaybackContext()) {\n commonModel.playbackContext = model.getPlaybackContext();\n }\n if (model.getApplicationVersion()) {\n commonModel.applicationVer = model.getApplicationVersion();\n }\n if (model.getApplication()) {\n commonModel.application = model.getApplication();\n }\n if (model.getKalturaApplicationVersion()) {\n commonModel.kalturaApplicationVer = model.getKalturaApplicationVersion();\n }\n if (model.getKalturaApplication()) {\n commonModel.kalturaApplication = model.getKalturaApplication();\n }\n if (model.getUserId()) {\n commonModel.userId = model.getUserId();\n }\n if (model.getPersistentSessionId()) {\n commonModel.persistentSessionId = model.getPersistentSessionId();\n }\n const eventModel = eventObj.getEventModel(model);\n return Object.assign(eventModel, commonModel);\n}\n","// @flow\nimport {getEventModel} from './kava-event-model';\n\n/**\n * The KAVA model that stores data.\n * @class KavaModel\n * @private\n * @param {?Object} - Initial model.\n */\nclass KavaModel {\n sessionStartTime: number;\n eventIndex: number;\n errorPosition: $Values<typeof ErrorPosition>;\n playTimeSum: number;\n bufferTime: number;\n bufferTimeSum: number;\n language: string;\n caption: string;\n errorCode: number;\n errorDetails: any;\n joinTime: number;\n canPlayTime: number;\n targetPosition: number;\n targetBuffer: number;\n totalSegmentsDownloadTime: number = 0;\n totalSegmentsDownloadBytes: number = 0;\n maxSegmentDownloadTime: number = 0;\n maxManifestDownloadTime: number = 0;\n forwardBufferHealth: number;\n droppedFramesRatio: ?number = null;\n soundMode: $Values<typeof SoundMode>;\n viewabilityMode: $Values<typeof ViewabilityMode>;\n tabMode: $Values<typeof TabMode>;\n screenMode: $Values<typeof ScreenMode> = ScreenMode.NOT_IN_FULLSCREEN;\n maxNetworkConnectionOverhead: number = 0;\n flavorParamsId: number = NaN;\n networkConnectionType: string;\n playerJSLoadTime: ?number = null;\n getActualBitrate: Function;\n getPlaybackSpeed: Function;\n getAverageBitrate: Function;\n getPartnerId: Function;\n getEntryId: Function;\n getPlaylistId: Function;\n getSessionId: Function;\n getClientVer: Function;\n getClientTag: Function;\n getKS: Function;\n getVirtualEventId: Function;\n getUIConfId: Function;\n getReferrer: Function;\n getCustomVar1: Function;\n getCustomVar2: Function;\n getCustomVar3: Function;\n getPosition: Function;\n getDeliveryType: Function;\n getPlaybackType: Function;\n getPlaybackContext: Function;\n getApplicationVersion: Function;\n getApplication: Function;\n getKalturaApplicationVersion: Function;\n getKalturaApplication: Function;\n getUserId: Function;\n getCanPlayTime: Function;\n getPersistentSessionId: Function;\n\n constructor(model?: Object) {\n if (model) {\n this.updateModel(model);\n }\n }\n\n /**\n * Gets the total play time.\n * @returns {number} - The play time sum.\n * @memberof KavaModel\n * @instance\n */\n getPlayTimeSum(): number {\n return this.playTimeSum;\n }\n\n getCanPlayTime(): number {\n return this.canPlayTime;\n }\n\n /**\n * Gets the buffer time.\n * @returns {number} - The buffer time.\n * @memberof KavaModel\n * @instance\n */\n getBufferTime(): number {\n return this.bufferTime;\n }\n\n /**\n * Gets the total buffer time.\n * @returns {number} - The total buffer time.\n * @memberof KavaModel\n * @instance\n */\n getBufferTimeSum(): number {\n return this.bufferTimeSum;\n }\n\n /**\n * Gets the player bundle js load duration time\n * @returns {number} - The player js load duration time\n * @memberof KavaModel\n * @instance\n */\n getPlayerJSLoadTime(): ?number {\n if (this.playerJSLoadTime) {\n return Math.round(this.playerJSLoadTime * 1000) / 1000;\n } else {\n return null;\n }\n }\n\n /**\n * Gets the join time.\n * @returns {number} - The join time.\n * @memberof KavaModel\n * @instance\n */\n getJoinTime(): number {\n return this.joinTime;\n }\n\n /**\n * Gets a target position\n * @returns {number} - The target position.\n * @memberof KavaModel\n * @instance\n */\n getTargetPosition(): number {\n return this.targetPosition;\n }\n\n /**\n * Gets the target buffer\n * @returns {number} - The target buffer in seconds.\n * @memberof KavaModel\n * @instance\n */\n getTargetBuffer(): number {\n return this.targetBuffer;\n }\n\n /**\n * Gets an audio language.\n * @returns {string} - The audio language.\n * @memberof KavaModel\n * @instance\n */\n getLanguage(): string {\n return this.language;\n }\n\n /**\n * Gets a caption language.\n * @returns {string} - The caption language.\n * @memberof KavaModel\n * @instance\n */\n getCaption(): string {\n return this.caption;\n }\n\n /**\n * Gets the average bandwidth since last report.\n * @returns {number} - The bandwidth in kbps\n * @memberof KavaModel\n * @instance\n */\n getBandwidth(): number {\n return this.totalSegmentsDownloadTime > 0 ? Math.round((this.totalSegmentsDownloadBytes * 8) / this.totalSegmentsDownloadTime) / 1000 : 0;\n }\n\n /**\n * Returns the longest manifest download time in seconds\n * @returns {number} - manifest max download time in seconds\n * @memberof KavaModel\n * @instance\n */\n getMaxManifestDownloadTime(): number {\n return this.maxManifestDownloadTime;\n }\n\n /**\n * Returns the longest segment download time in seconds\n * @returns {number} - segment max download time in seconds\n * @memberof KavaModel\n * @instance\n */\n getSegmentDownloadTime(): number {\n return this.maxSegmentDownloadTime;\n }\n\n /**\n * Gets the forward buffer health ratio.\n * @returns {number} - the ratio between the available buffer and the target buffer\n * @memberof KavaModel\n * @instance\n */\n getForwardBufferHealth(): number {\n return this.forwardBufferHealth;\n }\n /**\n * Gets the dropped frames ratio since last view event.\n * @returns {number} - dropped frames ratio since last view event\n * @memberof KavaModel\n * @instance\n */\n getDroppedFramesRatio(): ?number {\n return this.droppedFramesRatio;\n }\n\n /**\n * Gets the sound mode of the player.\n * @returns {SoundMode} the state of the sound (muted ot not)\n * @memberof KavaModel\n * @instance\n */\n getSoundMode(): $Values<typeof SoundMode> {\n return this.soundMode;\n }\n\n /**\n * Gets the viewability mode of the player.\n * @returns {ViewabilityMode} the state of the view (in-view ot not)\n * @memberof KavaModel\n * @instance\n */\n getViewabilityMode(): $Values<typeof ViewabilityMode> {\n return this.viewabilityMode;\n }\n\n /**\n * Gets the screen mode of the browser player.\n * @returns {number} the state of the full screen if is on or not.\n * @memberof KavaModel\n * @instance\n */\n getScreenMode(): $Values<typeof ScreenMode> {\n return this.screenMode;\n }\n\n /**\n * Gets the Tab mode of the browser.\n * @returns {TabMode} the state of the tab (focused or not)\n * @memberof KavaModel\n * @instance\n */\n getTabMode(): $Values<typeof TabMode> {\n return this.tabMode;\n }\n\n /**\n * Gets the effectiveType read-only property of the NetworkInformation interface (from navigator)\n * @returns {string} the effective type of the connection meaning one of 'slow-2g', '2g', '3g', or '4g'\n * @memberof KavaModel\n * @instance\n */\n getNetworkConnectionType(): string {\n return this.networkConnectionType;\n }\n\n /**\n * Gets the max dns+ssl+tcp resolving time over all video segments\n * @returns {number} max dns+ssl+tcp in seconds\n * @memberof KavaModel\n * @instance\n */\n getNetworkConnectionOverhead(): number {\n // convert ms to seconds in 0.xxx format\n return Math.round(this.maxNetworkConnectionOverhead) / 1000;\n }\n\n /**\n * Gets the error code.\n * @returns {number} - The error code.\n * @memberof KavaModel\n * @instance\n */\n getErrorCode(): number {\n return this.errorCode;\n }\n\n /**\n * Gets the flavor id from ID3 tag in the packager\n * @returns {number} - The flavor id.\n * @memberof KavaModel\n * @instance\n */\n getFlavorParamsId(): number {\n return this.flavorParamsId;\n }\n\n /**\n * Gets the error additional data.\n * @returns {string} - The stringifyed error data.\n * @memberof KavaModel\n * @instance\n */\n getErrorDetails(): string {\n let retVal: string = '';\n if (this.errorDetails) {\n try {\n retVal = JSON.stringify(this.errorDetails);\n } catch (e) {\n // do nothing\n }\n }\n return retVal;\n }\n\n /**\n * Gets the event index counter.\n * @returns {number} - The event index counter.\n * @memberof KavaModel\n * @instance\n */\n getEventIndex(): number {\n return this.eventIndex;\n }\n\n /**\n * Gets the error position (start or mid playing)\n * @returns {number} - The error position - 1 for pre playing, 2 for mid stream error\n * @memberof KavaModel\n * @instance\n */\n getErrorPosition(): $Values<typeof ErrorPosition> {\n return this.errorPosition;\n }\n\n /**\n * Gets the session start time.\n * @returns {number} - The session start time.\n * @memberof KavaModel\n * @instance\n */\n getSessionStartTime(): number {\n return this.sessionStartTime;\n }\n\n /**\n * Updates the model.\n * @param {Object} obj - A partial or full updated model.\n * @returns {void}\n * @memberof KavaModel\n * @instance\n */\n updateModel(obj: Object): void {\n Object.assign(this, obj);\n }\n\n /**\n * Gets the model for a certain event.\n * @param {KavaEvent} eventObj - The event object.\n * @returns {Object} - The event model.\n * @memberof KavaModel\n * @instance\n */\n getModel(eventObj: KavaEvent): Object {\n return getEventModel(eventObj, this);\n }\n}\n\nconst SoundMode = {\n SOUND_OFF: 1,\n SOUND_ON: 2\n};\n\nconst ViewabilityMode = {\n NOT_IN_VIEW: 1,\n IN_VIEW: 2\n};\n\nconst TabMode = {\n TAB_NOT_FOCUSED: 1,\n TAB_FOCUSED: 2\n};\n\nconst ScreenMode = {\n NOT_IN_FULLSCREEN: 1,\n FULLSCREEN: 2\n};\n\nconst ErrorPosition = {\n PRE_PLAY: 3,\n PRE_PLAYING: 1,\n MID_STREAM: 2\n};\n\nexport {KavaModel, SoundMode, TabMode, ErrorPosition, ScreenMode, ViewabilityMode};\n","// @flow\n\n/**\n * Manage the video rates for the KAVA plugin.\n * @private\n * @class KavaRateHandler\n */\nclass KavaRateHandler {\n _rates: Array<Object> = [];\n\n constructor() {\n this._rates = [];\n }\n\n /**\n * Sets the video rates.\n * @param {Array<number>} rates - The video rates.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n setRates(rates: Array<number>): void {\n this._rates = [];\n rates.forEach(rate => {\n this._rates.push({\n rate: rate,\n active: false,\n duration: 0\n });\n });\n }\n\n /**\n * Sets the current rate.\n * @param {number} rate - The current rate.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n setCurrent(rate: number): void {\n this._rates.forEach(o => (o.active = false));\n const obj = this._rates.find(o => o.rate === rate);\n if (obj) {\n obj.active = true;\n }\n }\n\n /**\n * Gets the current rate.\n * @returns {number} - The current rate.\n * @memberof KavaRateHandler\n * @instance\n */\n getCurrent(): number {\n const current = this._rates.find(o => o.active);\n return current ? current.rate : -1;\n }\n\n /**\n * Increases the duration of the current rate.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n countCurrent(): void {\n const current = this._rates.find(o => o.active);\n if (current) {\n current.duration++;\n }\n }\n\n /**\n * Gets the average rate.\n * @returns {number} - The average rate.\n * @memberof KavaRateHandler\n * @instance\n */\n getAverage(): number {\n let totalDuration = 0;\n let sum = 0;\n this._rates.forEach(o => {\n sum += o.rate * o.duration;\n totalDuration += o.duration;\n });\n return totalDuration ? sum / totalDuration : 0;\n }\n\n /**\n * Resets the duration of all rates.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n reset(): void {\n this._rates.forEach(o => (o.duration = 0));\n }\n\n /**\n * Destroys the class.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n destroy(): void {\n this._rates = [];\n }\n}\n\nexport {KavaRateHandler};\n","// @flow\nimport {core} from 'kaltura-player-js';\nconst {FakeEvent, FakeEventTarget} = core;\n\nconst SECOND: number = 1000;\n\n/**\n * Mange a timer and dispatches related events.\n * @private\n * @class KavaTimer\n * @param {Object} config - The timer config.\n */\nclass KavaTimer extends FakeEventTarget {\n _resetCounter: number;\n _eventCounter: number;\n _intervalId: ?IntervalID;\n _stopped: boolean;\n _config: Object;\n\n static Event = {\n TICK: 'tick',\n RESET: 'reset',\n REPORT: 'report'\n };\n\n constructor(config: Object) {\n super();\n this._config = config;\n }\n\n /**\n * Starts the timer interval.\n * @returns {void}\n * @memberof KavaTimer\n * @instance\n */\n start(): void {\n this._clearTimeout();\n this._stopped = false;\n this._resetCounter = 0;\n this._eventCounter = 0;\n this._intervalId = setInterval(() => this._monitor(), SECOND);\n }\n\n /**\n * Continues the timer to dispatch REPORT.\n * @returns {void}\n * @memberof KavaTimer\n * @instance\n */\n resume(): void {\n this._stopped = false;\n this._resetCounter = 0;\n }\n\n /**\n * Stops the timer from dispatch REPORT and starts the timer to dispatch RESET.\n * @returns {void}\n * @memberof KavaTimer\n * @instance\n */\n stop(): void {\n this._stopped = true;\n }\n\n /**\n * @returns {boolean} - Whether the timer is stopped.\n * @memberof KavaTimer\n * @instance\n */\n isStopped(): boolean {\n return this._stopped;\n }\n\n /**\n * Destroys the timer.\n * @returns {void}\n * @memberof KavaTimer\n * @instance\n */\n destroy(): void {\n this._clearTimeout();\n }\n\n _clearTimeout(): void {\n if (this._intervalId) {\n clearInterval(this._intervalId);\n this._intervalId = null;\n }\n }\n\n _monitor(): void {\n if (this._stopped) {\n if (this._resetCounter === this._config.resetCounter) {\n this.dispatchEvent(new FakeEvent(KavaTimer.Event.RESET));\n this._resetCounter = 0;\n this._eventCounter = 0;\n }\n this._resetCounter++;\n } else {\n this.dispatchEvent(new FakeEvent(KavaTimer.Event.TICK));\n if (this._eventCounter === this._config.eventCounter) {\n this.dispatchEvent(new FakeEvent(KavaTimer.Event.REPORT));\n this._eventCounter = 0;\n }\n this._eventCounter++;\n }\n }\n}\n\nexport {KavaTimer};\n","// @flow\nconst HttpMethodType: KavaHttpMethodType = {\n GET: 'GET',\n POST: 'POST'\n};\n\nexport {HttpMethodType};\n","//@flow\n\ntype ApplicationType = {[app: string]: string};\n\nconst KalturaApplication: ApplicationType = {\n KMC: '0',\n KMS: '1',\n KAF: '2',\n PITCH: '3',\n KMS_GO: '4',\n WEBCASTING: '5',\n PERSONAL_CAPTURE: '6',\n KME: '7',\n KME_MOBILE_APP: '8',\n PATH: '9',\n LECTURE_CAPTURE: '10',\n EP: '11',\n CHAT_AND_COLLABORATION: '12',\n ANALYTICS: '13',\n EXPRESS_CAPTURE: '14',\n KPF: '15',\n KAF_GO: '16',\n SITES: '17',\n STUDIO: '18'\n};\n\nexport {KalturaApplication};\nexport type {ApplicationType};\n","/**\n * Related plugin event types.\n */\nconst RelatedEvent = {\n /**\n * Fired when the user selects an entry from the list or the grid.\n */\n RELATED_SELECTED: 'related_selected',\n /**\n * Fired when the user clicks the button to show the related list.\n */\n RELATED_CLICKED: 'related_clicked'\n};\n\nexport {RelatedEvent};\n","// @flow\nimport {core, BasePlugin} from 'kaltura-player-js';\nimport {OVPAnalyticsService} from 'playkit-js-providers/dist/playkit-analytics-service';\nimport {KavaEventModel, KavaEventType} from './kava-event-model';\nimport {KavaRateHandler} from './kava-rate-handler';\nimport {KavaTimer} from './kava-timer';\nimport {ErrorPosition, KavaModel, SoundMode, TabMode, ScreenMode, ViewabilityMode} from './kava-model';\nimport {HttpMethodType} from './http-method-type';\nimport {KalturaApplication} from './kaltura-application';\n//$FlowFixMe\nimport {RelatedEvent} from '@playkit-js/related';\n\nconst {Error: PKError, FakeEvent, Utils} = core;\nconst DIVIDER: number = 1024;\nconst TEXT_TYPE: string = 'TEXT';\n/**\n * Kaltura Advanced Analytics plugin.\n * @class Kava\n * @param {string} name - The plugin name.\n * @param {Player} player - The player instance.\n * @param {KavaConfigObject} config - The plugin config.\n */\nclass Kava extends BasePlugin {\n _model: KavaModel;\n _timer: KavaTimer;\n _rateHandler: KavaRateHandler;\n _viewEventEnabled: boolean;\n _firstPlayRequestTime: number;\n _bufferStartTime: number;\n _previousCurrentTime: number;\n _isFirstPlay: boolean;\n _isFirstPlaying: boolean;\n _isEnded: boolean;\n _isPaused: boolean;\n _isBuffering: boolean;\n _timePercentEvent: {[time: string]: boolean};\n _isPlaying: boolean;\n _loadStartTime: number;\n _lastDroppedFrames: number = 0;\n _lastTotalFrames: number = 0;\n _performanceObserver: window.PerformanceObserver;\n _performanceEntries: window.PerformanceEntry[] = [];\n _pendingFragLoadedUrls: string[] = [];\n _fragLoadedFiredOnce: boolean = false;\n _canPlayOccured: boolean = false;\n _isManualPreload: boolean = false;\n\n /**\n * Default config of the plugin.\n * @type {Object}\n * @static\n * @memberof Kava\n */\n static defaultConfig: Object = {\n serviceUrl: `${Utils.Http.protocol}//analytics.kaltura.com/api_v3/index.php`,\n requestMethod: HttpMethodType.GET,\n viewEventCountdown: 10,\n resetSessionCountdown: 30,\n dvrThreshold: 120,\n playbackContext: '',\n applicationVersion: '',\n application: '',\n kalturaApplicationVersion: '',\n kalturaApplication: ''\n };\n\n /**\n * @static\n * @return {boolean} - Whether the plugin is valid in the current environment.\n * @memberof Kava\n */\n static isValid(): boolean {\n return true;\n }\n\n constructor(name: string, player: Player, config: KavaConfigObject) {\n super(name, player, config);\n this._rateHandler = new KavaRateHandler();\n this._model = new KavaModel();\n this._setModelDelegates();\n this._timer = new KavaTimer({\n resetCounter: this.config.resetSessionCountdown,\n eventCounter: this.config.viewEventCountdown\n });\n this._viewEventEnabled = true;\n this._resetFlags();\n this._addBindings();\n this._model.updateModel({\n eventIndex: 1,\n bufferTime: 0.0,\n bufferTimeSum: 0.0,\n playTimeSum: 0.0\n });\n // check the Resource Timing API is supported in the browser and we have a uiConfId\n if (performance && this.config.uiConfId) {\n let entry = performance.getEntriesByType('resource').find(entry => entry.name.match('embedPlaykitJs.*' + this.config.uiConfId));\n if (entry) {\n this._model.updateModel({playerJSLoadTime: entry.duration});\n }\n }\n }\n\n _updateSoundModeInModel() {\n this._model.updateModel({\n soundMode: this.player.muted || this.player.volume === 0 ? SoundMode.SOUND_OFF : SoundMode.SOUND_ON\n });\n }\n\n _updateViewabilityModeInModel(isVisible: boolean): void {\n this._model.updateModel({\n viewabilityMode: isVisible || this.player.isInPictureInPicture() ? ViewabilityMode.IN_VIEW : ViewabilityMode.NOT_IN_VIEW\n });\n }\n\n _handleNewPerformanceEntries(list: window.PerformanceObserverEntryList) {\n let perfEntries = list.getEntries();\n for (let i = 0; i < perfEntries.length; i++) {\n this._performanceEntries.push(perfEntries[i]);\n }\n while (this._pendingFragLoadedUrls.length) {\n // handle frag loaded events which haven't been added to the entry list yet\n this._handleFragPerformanceObserver(this._pendingFragLoadedUrls.pop());\n }\n }\n\n /**\n * Destroys the plugin.\n * @return {void}\n * @memberof Kava\n * @instance\n */\n destroy(): void {\n this.eventManager.destroy();\n this._reset();\n }\n\n _reset(): void {\n this._timer.destroy();\n this._rateHandler.destroy();\n if (this._performanceObserver) {\n this._performanceObserver.disconnect();\n }\n this._performanceEntries = [];\n this._pendingFragLoadedUrls = [];\n }\n\n /**\n * Reset the plugin.\n * @return {void}\n * @memberof Kava\n * @instance\n */\n reset(): void {\n this.eventManager.removeAll();\n this._resetFlags();\n this._addBindings();\n this._model.updateModel({\n eventIndex: 1,\n bufferTime: 0.0,\n bufferTimeSum: 0.0,\n playTimeSum: 0.0,\n sessionStartTime: null\n });\n this._reset();\n }\n\n /**\n * loadMedia of the plugin.\n * @return {void}\n * @memberof Kava\n * @instance\n */\n loadMedia(): void {\n if (window.PerformanceObserver) {\n this._performanceObserver = new window.PerformanceObserver(this._handleNewPerformanceEntries.bind(this));\n this._performanceObserver.observe({entryTypes: ['resource']});\n }\n }\n\n /**\n * Gets the model object for a certain event.\n * @param {string} event - Event name.\n * @returns {Object} - Model object.\n * @instance\n * @memberof Kava\n * @example\n * const kava = player.plugins.kava;\n * const viewModel = kava.getEventModel(kava.EventType.VIEW);\n * kava.sendAnalytics(viewModel);\n */\n getEventModel(event: string): ?Object {\n if (event) {\n return this._model.getModel(KavaEventModel[event]);\n }\n }\n\n /**\n * @returns {KavaEventType} - The kava events list.\n * @instance\n * @memberof Kava\n */\n get EventType(): {[event: string]: string} {\n return Utils.Object.copyDeep(KavaEventType);\n }\n\n /**\n * Sends KAVA analytics event to analytics service.\n * @param {Object} model - Event model.\n * @returns {Promise} - Promise to indicate request succeed or failed.\n * @instance\n * @memberof Kava\n * @example\n * player.plugins.kava.sendAnalytics({...})\n * .then(() => {\n * console.log('kava analytics sent successfully');\n * })\n * .catch(e => {\n * console.log('kava analytics send failed', e);\n * });\n */\n sendAnalytics(model: Object): Promise<*> {\n return new Promise((resolve, reject) => {\n OVPAnalyticsService.trackEvent(this.config.serviceUrl, model, this.config.requestMethod)\n .doHttpRequest()\n .then(\n response => {\n this._handleServerResponseSuccess(response, model);\n resolve();\n },\n err => {\n this._handleServerResponseFailed(err, model);\n reject(err);\n }\n );\n this._model.updateModel({eventIndex: this._model.getEventIndex() + 1});\n });\n }\n\n _resetFlags(): void {\n this._previousCurrentTime = 0;\n this._isPlaying = false;\n this._isFirstPlay = true;\n this._isFirstPlaying = true;\n this._isEnded = false;\n this._isPaused = false;\n this._isBuffering = false;\n this._timePercentEvent = {\n PLAY_REACHED_25_PERCENT: false,\n PLAY_REACHED_50_PERCENT: false,\n PLAY_REACHED_75_PERCENT: false,\n PLAY_REACHED_100_PERCENT: false\n };\n this._canPlayOccured = false;\n this._isManualPreload = false;\n }\n\n _resetSession(): void {\n this.logger.debug('Reset KAVA session');\n this._rateHandler.reset();\n this._model.updateModel({\n eventIndex: 1,\n bufferTimeSum: 0.0,\n playTimeSum: 0.0\n });\n }\n\n _sendAnalytics(eventObj: KavaEvent): void {\n if (!this._validate()) {\n return;\n }\n if (this._isBuffering) {\n this._updateBufferModel();\n this._bufferStartTime = Date.now();\n }\n const model = this._model.getModel(eventObj);\n if (typeof this.config.tamperAnalyticsHandler === 'function') {\n const sendRequest = this.config.tamperAnalyticsHandler(model);\n if (!sendRequest) {\n this.logger.debug('Cancel KAVA request', model);\n return;\n }\n }\n this.logger.debug(`Sending KAVA event ${model.eventType}:${eventObj.type}`);\n this.sendAnalytics(model).catch(() => {});\n }\n\n _handleServerResponseSuccess(response: Object, model: Object): void {\n this.logger.debug(`KAVA event sent`, model);\n this._updateSessionStartTimeModel(response);\n }\n\n _handleServerResponseFailed(err: Object, model: Object): void {\n this.logger.warn(`Failed to send KAVA event`, model, err);\n }\n\n _addBindings(): void {\n this.eventManager.listen(this._timer, KavaTimer.Event.TICK, () => this._rateHandler.countCurrent());\n this.eventManager.listen(this._timer, KavaTimer.Event.REPORT, () => this._onReport());\n this.eventManager.listen(this._timer, KavaTimer.Event.RESET, () => this._resetSession());\n this.eventManager.listen(this.player, this.player.Event.SOURCE_SELECTED, () => this._onSourceSelected());\n this.eventManager.listen(this.player, this.player.Event.ERROR, event => this._onError(event));\n this.eventManager.listen(this.player, this.player.Event.FIRST_PLAY, () => this._onFirstPlay());\n this.eventManager.listen(this.player, this.player.Event.FRAG_LOADED, event => this._onFragLoaded(event));\n this.eventManager.listen(this.player, this.player.Event.MANIFEST_LOADED, event => this._onManifestLoaded(event));\n this.eventManager.listen(this.player, this.player.Event.TIMED_METADATA, event => this._onTimedMetadataLoaded(event));\n this.eventManager.listen(this.player, this.player.Event.TRACKS_CHANGED, () => this._setInitialTracks());\n this.eventManager.listen(this.player, this.player.Event.PLAYING, () => this._onPlaying());\n this.eventManager.listen(this.player, this.player.Event.FIRST_PLAYING, () => this._onFirstPlaying());\n this.eventManager.listen(this.player, this.player.Event.SEEKING, () => this._onSeeking());\n this.eventManager.listen(this.player, this.player.Event.PAUSE, () => this._onPause());\n this.eventManager.listen(this.player, this.player.Event.ENDED, () => this._onEnded());\n this.eventManager.listen(this.player, this.player.Event.TIME_UPDATE, () => this._onTimeUpdate());\n this.eventManager.listen(this.player, this.player.Event.VIDEO_TRACK_CHANGED, event => this._onVideoTrackChanged(event));\n this.eventManager.listen(this.player, this.player.Event.AUDIO_TRACK_CHANGED, event => this._onAudioTrackChanged(event));\n this.eventManager.listen(this.player, this.player.Event.TEXT_TRACK_CHANGED, event => this._onTextTrackChanged(event));\n this.eventManager.listen(this.player, this.player.Event.PLAYER_STATE_CHANGED, event => this._onPlayerStateChanged(event));\n this.eventManager.listen(this.player, this.player.Event.RATE_CHANGE, () => this._onPlaybackRateChanged());\n this.eventManager.listen(this.player, this.player.Event.CAN_PLAY, () => this._onCanPlay());\n this.eventManager.listen(this.player, this.player.Event.LOAD_START, () => this._onLoadStart());\n this.eventManager.listen(this.player, this.player.Event.VOLUME_CHANGE, () => this._updateSoundModeInModel());\n this.eventManager.listen(this.player, this.player.Event.VISIBILITY_CHANGE, e => this._updateViewabilityModeInModel(e.payload.visible));\n this.eventManager.listen(this.player, this.player.Event.MUTE_CHANGE, () => this._updateSoundModeInModel());\n this.eventManager.listen(this.player, this.player.Event.ENTER_FULLSCREEN, () => this._model.updateModel({screenMode: ScreenMode.FULLSCREEN}));\n this.eventManager.listen(this.player, this.player.Event.EXIT_FULLSCREEN, () =>\n this._model.updateModel({screenMode: ScreenMode.NOT_IN_FULLSCREEN})\n );\n this.eventManager.listen(this.player, RelatedEvent.RELATED_CLICKED, () => this._onRelatedClicked());\n this.eventManager.listen(this.player, RelatedEvent.RELATED_SELECTED, () => this._onRelatedSelected());\n this._initTabMode();\n this._initNetworkConnectionType();\n }\n\n _onFirstPlaying(): void {\n this._isPlaying = true;\n if (!this._fragLoadedFiredOnce && this._performanceObserver) {\n this._performanceObserver.disconnect();\n this.logger.debug(\"This adapter / media doesn't fire fragLoaded - disconnect performance observer\");\n }\n }\n\n _onLoadStart(): void {\n this._loadStartTime = Date.now();\n }\n\n _getRates(): Array<number> {\n const rates = [];\n const videoTracks = this.player.getTracks(this.player.Track.VIDEO);\n videoTracks.forEach(videoTrack => rates.push(videoTrack.bandwidth / DIVIDER));\n return rates;\n }\n\n _setInitialTracks(): void {\n const rates = this._getRates();\n const activeTracks = this.player.getActiveTracks();\n this._rateHandler.setRates(rates);\n if (activeTracks.video) {\n this._rateHandler.setCurrent(activeTracks.video.bandwidth / DIVIDER);\n }\n if (activeTracks.audio) {\n this._model.updateModel({language: activeTracks.audio.language});\n }\n if (activeTracks.text) {\n this._model.updateModel({caption: activeTracks.text.language});\n }\n }\n\n /**\n * gets the available buffer length\n * @returns {number} the remaining buffer length of the current played time range\n * @private\n */\n _getAvailableBuffer(): number {\n let availableBuffer = NaN;\n if (this.player.stats) {\n availableBuffer = this.player.stats.availableBuffer;\n }\n return availableBuffer;\n }\n\n /**\n * calculates the forward buffer health ratio\n * @returns {number} the ratio between available buffer and the target buffer\n * @private\n */\n _getForwardBufferHealth(): number {\n let forwardBufferHealth = NaN;\n let availableBuffer = this._getAvailableBuffer();\n let targetBuffer = this._getTargetBuffer();\n\n if (!isNaN(targetBuffer)) {\n // considering playback left to the target calculation\n forwardBufferHealth = Math.round((availableBuffer * 1000) / targetBuffer) / 1000;\n }\n\n return forwardBufferHealth;\n }\n\n /**\n * get the target buffer length from the player\n * @returns {number} the target buffer in seconds\n * @private\n */\n _getTargetBuffer(): number {\n let targetBuffer = NaN;\n if (this.player.stats) {\n targetBuffer = this.player.stats.targetBuffer;\n }\n return targetBuffer;\n }\n\n /**\n * calculates the dropped frames ratio since last call\n * @returns {number} the ratio between dropped frames and the total frames\n * @private\n */\n _getDroppedFramesRatio(): number {\n let droppedFrames = -1;\n const droppedAndDecoded: ?[number, number] = this._getDroppedAndDecodedFrames();\n if (droppedAndDecoded) {\n let droppedFramesDelta: number;\n let totalFramesDelta: number;\n const lastDroppedFrames = droppedAndDecoded[0];\n const lastTotalFrames = droppedAndDecoded[1];\n droppedFramesDelta = lastDroppedFrames - this._lastDroppedFrames;\n totalFramesDelta = lastTotalFrames - this._lastTotalFrames;\n droppedFrames = totalFramesDelta ? Math.round((droppedFramesDelta / totalFramesDelta) * 1000) / 1000 : 0;\n\n this._lastTotalFrames = lastTotalFrames;\n this._lastDroppedFrames = lastDroppedFrames;\n }\n return droppedFrames;\n }\n\n /**\n * returns dropped and total frames from the VideoPlaybackQuality Interface of the browser (if supported)\n * @returns {number} {number} the number of video frames dropped and total video frames (created and dropped)\n * since the creation of the associated HTMLVideoElement\n * @private\n */\n _getDroppedAndDecodedFrames(): ?[number, number] {\n if (typeof this.player.getVideoElement().getVideoPlaybackQuality === 'function') {\n const videoPlaybackQuality = this.player.getVideoElement().getVideoPlaybackQuality();\n return [videoPlaybackQuality.droppedVideoFrames, videoPlaybackQuality.totalVideoFrames];\n } else if (\n typeof this.player.getVideoElement().webkitDroppedFrameCount == 'number' &&\n typeof this.player.getVideoElement().webkitDecodedFrameCount == 'number'\n ) {\n return [this.player.getVideoElement().webkitDroppedFrameCount, this.player.getVideoElement().webkitDecodedFrameCount];\n } else {\n return null;\n }\n }\n\n _onReport(): void {\n if (this._viewEventEnabled) {\n this._updatePlayTimeSumModel();\n this._model.updateModel({\n forwardBufferHealth: this._getForwardBufferHealth(),\n targetBuffer: this._getTargetBuffer(),\n droppedFramesRatio: this._getDroppedFramesRatio()\n });\n this._sendAnalytics(KavaEventModel.VIEW);\n } else {\n this.logger.warn(`VIEW event blocked because server response of viewEventsEnabled=false`);\n }\n this._model.updateModel({\n totalSegmentsDownloadTime: 0,\n totalSegmentsDownloadBytes: 0,\n maxManifestDownloadTime: 0,\n maxSegmentDownloadTime: 0,\n maxNetworkConnectionOverhead: 0,\n bufferTime: 0\n });\n }\n\n _updateNetworkConnectionTypeinModel(navConnection: any): void {\n this._model.updateModel({\n networkConnectionType: navConnection.effectiveType\n });\n }\n\n _initNetworkConnectionType(): void {\n const navConnection = window.navigator.connection || window.navigator.mozConnection || window.navigator.webkitConnection;\n\n if (navConnection) {\n this.eventManager.listen(navConnection, 'change', () => this._updateNetworkConnectionTypeinModel(navConnection));\n this._updateNetworkConnectionTypeinModel(navConnection);\n }\n }\n\n _onPlaying(): void {\n if (this._isFirstPlaying) {\n this._updateSoundModeInModel();\n this._updateViewabilityModeInModel(this.player.isVisible);\n if (!this.player.isUntimedImg()) this._timer.start();\n this._isFirstPlaying = false;\n const playRequestStartTime =\n this.player.config.playback.preload === 'auto' || this._isManualPreload ? this._firstPlayRequestTime : this._loadStartTime;\n this._model.updateModel({\n joinTime: Kava._getTimeDifferenceInSeconds(playRequestStartTime)\n });\n this._sendAnalytics(KavaEventModel.PLAY);\n this._onReport();\n } else if (this._isEnded) {\n this._timer.start();\n this._isEnded = false;\n this._sendAnalytics(KavaEventModel.REPLAY);\n } else if (this._isPaused) {\n this._timer.resume();\n this._isPaused = false;\n this._sendAnalytics(KavaEventModel.RESUME);\n }\n }\n\n _onCanPlay(): void {\n this._canPlayOccured = true;\n this._model.updateModel({\n canPlayTime: Kava._getTimeDifferenceInSeconds(this._loadStartTime)\n });\n }\n\n _onFirstPlay(): void {\n if (this._canPlayOccured) {\n this._isManualPreload = true;\n }\n this._isFirstPlay = false;\n this._firstPlayRequestTime = Date.now();\n this._sendAnalytics(KavaEventModel.PLAY_REQUEST);\n }\n\n _onSourceSelected(): void {\n this._sendAnalytics(KavaEventModel.IMPRESSION);\n }\n\n _onSeeking(): void {\n this._previousCurrentTime = this.player.currentTime;\n this._model.updateModel({targetPosition: this.player.currentTime});\n this._sendAnalytics(KavaEventModel.SEEK);\n }\n\n _onPause(): void {\n this._isPaused = true;\n this._timer.stop();\n this._sendAnalytics(KavaEventModel.PAUSE);\n }\n\n _onEnded(): void {\n this._isEnded = true;\n this._onTimeUpdate();\n this._model.updateModel({bufferTime: 0});\n }\n\n _onTimeUpdate(): void {\n if (!this.player.isLive()) {\n this._updatePlayTimeSumModel();\n const percent = parseFloat((this.player.currentTime / this.player.duration).toFixed(2));\n if (!this._timePercentEvent.PLAY_REACHED_25 && percent >= 0.25) {\n this._timePercentEvent.PLAY_REACHED_25 = true;\n this._sendAnalytics(KavaEventModel.PLAY_REACHED_25_PERCENT);\n }\n if (!this._timePercentEvent.PLAY_REACHED_50 && percent >= 0.5) {\n this._timePercentEvent.PLAY_REACHED_50 = true;\n this._sendAnalytics(KavaEventModel.PLAY_REACHED_50_PERCENT);\n }\n if (!this._timePercentEvent.PLAY_REACHED_75 && percent >= 0.75) {\n this._timePercentEvent.PLAY_REACHED_75 = true;\n this._sendAnalytics(KavaEventModel.PLAY_REACHED_75_PERCENT);\n }\n if (!this._timePercentEvent.PLAY_REACHED_100 && percent === 1) {\n this._timePercentEvent.PLAY_REACHED_100 = true;\n this._sendAnalytics(KavaEventModel.PLAY_REACHED_100_PERCENT);\n }\n }\n }\n\n _onFragLoaded(event: FakeEvent): void {\n if (!this._fragLoadedFiredOnce) {\n this._fragLoadedFiredOnce = true;\n }\n this._updateFragLoadedStats(event);\n if (this._performanceObserver) {\n const succHandle = this._handleFragPerformanceObserver(event.payload.url);\n if (!succHandle) {\n this._pendingFragLoadedUrls.push(event.payload.url);\n }\n }\n }\n\n _handleFragPerformanceObserver(url: string): boolean {\n const fragResourceTimings = this._performanceEntries.filter(entry => entry.name == url);\n const lastFragResourceTiming: ?Object =\n fragResourceTimings && fragResourceTimings.length ? fragResourceTimings[fragResourceTimings.length - 1] : null;\n if (lastFragResourceTiming) {\n this._updateMaxNetworkConnectionOverhead(lastFragResourceTiming.connectEnd - lastFragResourceTiming.domainLookupStart);\n const lastIndexOftheFragment: number = this._performanceEntries.indexOf(lastFragResourceTiming);\n if (lastIndexOftheFragment > -1 && lastIndexOftheFragment < this._performanceEntries.length) {\n this._performanceEntries = this._performanceEntries.splice(\n lastIndexOftheFragment + 1,\n this._performanceEntries.length - (lastIndexOftheFragment + 1)\n );\n }\n return true;\n } else {\n return false;\n }\n }\n\n _updateMaxNetworkConnectionOverhead(networkConnectionOverhead: number): void {\n this._model.updateModel({\n maxNetworkConnectionOverhead: Math.max(this._model.maxNetworkConnectionOverhead, networkConnectionOverhead)\n });\n }\n\n _updateFragLoadedStats(event: FakeEvent): void {\n const seconds = Math.round(event.payload.miliSeconds) / 1000;\n this._model.updateModel({\n totalSegmentsDownloadTime: this._model.totalSegmentsDownloadTime + seconds,\n totalSegmentsDownloadBytes: this._model.totalSegmentsDownloadBytes + event.payload.bytes,\n maxSegmentDownloadTime: Math.max(seconds, this._model.maxSegmentDownloadTime)\n });\n }\n\n _onManifestLoaded(event: FakeEvent): void {\n const seconds = Math.round(event.payload.miliSeconds) / 1000;\n this._model.updateModel({\n maxManifestDownloadTime: Math.max(seconds, this._model.maxManifestDownloadTime)\n });\n }\n\n _onTimedMetadataLoaded(event: FakeEvent): void {\n const id3TagCues = event.payload.cues.filter(entry => entry.value && entry.value.key === TEXT_TYPE);\n if (id3TagCues.length) {\n try {\n this._model.updateModel({flavorParamsId: Number(JSON.parse(id3TagCues[id3TagCues.length - 1].value.data).sequenceId)});\n } catch (e) {\n this.logger.debug('error parsing id3', e);\n }\n }\n }\n\n _onVideoTrackChanged(event: FakeEvent): void {\n const videoTrack = event.payload.selectedVideoTrack;\n this._rateHandler.setCurrent(videoTrack.bandwidth / DIVIDER);\n if (this.player.isAdaptiveBitrateEnabled()) {\n this._sendAnalytics(KavaEventModel.FLAVOR_SWITCH);\n } else {\n this._sendAnalytics(KavaEventModel.SOURCE_SELECTED);\n }\n }\n\n _onAudioTrackChanged(event: FakeEvent): void {\n const audioTrack = event.payload.selectedAudioTrack;\n this._model.updateModel({language: audioTrack.language});\n this._sendAnalytics(KavaEventModel.AUDIO_SELECTED);\n }\n\n _onTextTrackChanged(event: FakeEvent): void {\n if (this._isPlaying) {\n const textTrack = event.payload.selectedTextTrack;\n this._model.updateModel({caption: textTrack.language});\n this._sendAnalytics(KavaEventModel.CAPTIONS);\n }\n }\n\n _onError(event: FakeEvent): void {\n if (event.payload && event.payload.severity === PKError.Severity.CRITICAL) {\n this._model.updateModel({\n errorCode: event.payload.code,\n errorDetails: event.payload.data,\n errorPosition: this._isFirstPlay ? ErrorPosition.PRE_PLAY : this._isFirstPlaying ? ErrorPosition.PRE_PLAYING : ErrorPosition.MID_STREAM\n });\n this._sendAnalytics(KavaEventModel.ERROR);\n this.reset();\n }\n }\n\n _onPlaybackRateChanged(): void {\n if (!this.player.playbackRates.length || this.player.playbackRates.includes(this.player.playbackRate)) {\n this._sendAnalytics(KavaEventModel.SPEED);\n }\n }\n\n _onPlayerStateChanged(event: FakeEvent): void {\n const oldState = event.payload.oldState;\n const newState = event.payload.newState;\n if (oldState.type === this.player.State.BUFFERING) {\n this._isBuffering = false;\n this._updateBufferModel();\n this._sendAnalytics(KavaEventModel.BUFFER_END);\n }\n if (newState.type === this.player.State.BUFFERING) {\n this._isBuffering = true;\n this._bufferStartTime = Date.now();\n this._sendAnalytics(KavaEventModel.BUFFER_START);\n }\n }\n\n _onRelatedClicked() {\n this._sendAnalytics(KavaEventModel.RELATED_CLICKED);\n }\n\n _onRelatedSelected() {\n this._sendAnalytics(KavaEventModel.RELATED_SELECTED);\n }\n\n _updateSessionStartTimeModel(response: Object | number): void {\n if (!this._model.getSessionStartTime() && response) {\n if (typeof response === 'object') {\n this._model.updateModel({sessionStartTime: response.time});\n this._viewEventEnabled = response.viewEventsEnabled;\n } else {\n this._model.updateModel({sessionStartTime: response});\n }\n }\n if (this._timer.isStopped()) {\n this._model.updateModel({sessionStartTime: null});\n }\n }\n\n _updateBufferModel(): void {\n const duration = Kava._getTimeDifferenceInSeconds(this._bufferStartTime);\n this._model.updateModel({\n bufferTime: this._model.getBufferTime() + duration,\n bufferTimeSum: this._model.getBufferTimeSum() + duration\n });\n }\n\n _updatePlayTimeSumModel(): void {\n let delta;\n if (this.player.isLive()) {\n delta = this.config.viewEventCountdown - this._model.getBufferTime();\n } else {\n delta = this.player.currentTime - this._previousCurrentTime;\n this._previousCurrentTime = this.player.currentTime;\n }\n this._model.updateModel({playTimeSum: this._model.getPlayTimeSum() + delta});\n }\n\n _setModelDelegates() {\n this._model.getPlaybackSpeed = () => this.player.playbackRate;\n this._model.getActualBitrate = () => this._rateHandler.getCurrent();\n this._model.getAverageBitrate = () => this._rateHandler.getAverage();\n this._model.getPartnerId = () => this.config.partnerId;\n this._model.getEntryId = () => this.config.entryId;\n this._model.getPlaylistId = () => this.config.playlistId;\n this._model.getSessionId = () => this.config.sessionId;\n this._model.getPersistentSessionId = () => this.config.persistentSessionId;\n this._model.getClientVer = () => this.config.playerVersion;\n this._model.getClientTag = () => 'html5:v' + this.config.playerVersion;\n this._model.getKS = () => this.config.ks;\n this._model.getVirtualEventId = () => this.config.virtualEventId;\n this._model.getUIConfId = () => this.config.uiConfId;\n this._model.getReferrer = () => this.config.referrer;\n this._model.getCustomVar1 = () => this.config.customVar1;\n this._model.getCustomVar2 = () => this.config.customVar2;\n this._model.getCustomVar3 = () => this.config.customVar3;\n this._model.getPosition = () => this._getPosition();\n this._model.getDeliveryType = () => this._getDeliveryType();\n this._model.getPlaybackType = () => this._getPlaybackType();\n this._model.getPlaybackContext = () => this.config.playbackContext;\n this._model.getApplicationVersion = () => this.config.applicationVersion;\n this._model.getApplication = () => this.config.application;\n this._model.getKalturaApplicationVersion = () => this.config.kalturaApplicationVersion;\n this._model.getKalturaApplication = () => this._getKalturaApplicationId(this.config.kalturaApplication);\n this._model.getUserId = () => this.config.userId;\n }\n\n _getKalturaApplicationId(kalturaAppName: string): string {\n if (kalturaAppName in KalturaApplication) {\n return KalturaApplication[kalturaAppName];\n } else {\n this.logger.warn(`Kava analytics - unknon kalturaAppName: ` + kalturaAppName);\n return '';\n }\n }\n\n _getPosition(): number {\n if (this.player.isLive()) {\n if (!Number.isNaN(this.player.duration)) {\n if (this.player.duration - this.player.currentTime < 1) {\n return 0;\n }\n return -(this.player.duration - this.player.currentTime);\n }\n return 0;\n }\n return this._isFirstPlaying ? this.player.currentTime || this.player.sources.startTime || 0 : this.player.currentTime;\n }\n\n _getDeliveryType(): string {\n if (this.player.streamType === this.player.StreamType.PROGRESSIVE) {\n return 'url';\n }\n return this.player.streamType;\n }\n\n _getPlaybackType(): string {\n if (this.player.isLive()) {\n if (this.player.isDvr()) {\n const distanceFromLiveEdge = this.player.duration - this.player.currentTime;\n if (distanceFromLiveEdge >= this.config.dvrThreshold) {\n return 'dvr';\n }\n }\n return 'live';\n }\n return this.player.isImage() ? 'img' : 'vod';\n }\n\n _validate(): boolean {\n if (!this.config.partnerId) {\n this._logMissingParam('partnerId');\n return false;\n }\n if (!this.config.entryId) {\n this._logMissingParam('entryId');\n return false;\n }\n return true;\n }\n\n _logMissingParam(missingParam: string): void {\n this.logger.warn(`Kava analytics block report because of missing param ${missingParam}`);\n }\n\n static _getTimeDifferenceInSeconds(time: number): number {\n return (Date.now() - time) / 1000.0;\n }\n\n _updateTabModeInModel(hiddenAttr: string): void {\n this._model.updateModel({\n // $FlowFixMe\n tabMode: this._isTabHidden(hiddenAttr) && !this.player.isInPictureInPicture() ? TabMode.TAB_NOT_FOCUSED : TabMode.TAB_FOCUSED\n });\n }\n\n _isTabHidden(hiddenAttr: string): boolean {\n return document[hiddenAttr];\n }\n\n _initTabMode(): void {\n let hiddenAttr: string;\n let visibilityChangeEventName: string;\n if (typeof document.hidden !== 'undefined') {\n // Opera 12.10 and Firefox 18 and later support\n hiddenAttr = 'hidden';\n visibilityChangeEventName = 'visibilitychange';\n } else if (typeof document.msHidden !== 'undefined') {\n hiddenAttr = 'msHidden';\n visibilityChangeEventName = 'msvisibilitychange';\n } else if (typeof document.webkitHidden !== 'undefined') {\n hiddenAttr = 'webkitHidden';\n visibilityChangeEventName = 'webkitvisibilitychange';\n }\n\n if (hiddenAttr && visibilityChangeEventName) {\n this.eventManager.listen(document, visibilityChangeEventName, () => this._updateTabModeInModel(hiddenAttr));\n this._updateTabModeInModel(hiddenAttr);\n }\n }\n}\n\nexport {Kava};\n","// @flow\nimport {registerPlugin} from 'kaltura-player-js';\nimport {Kava} from './kava';\n\ndeclare var __VERSION__: string;\ndeclare var __NAME__: string;\n\nconst VERSION = __VERSION__;\nconst NAME = __NAME__;\n\nexport {Kava as Plugin};\nexport {KavaEventType as EventType} from './kava-event-model';\nexport {HttpMethodType} from './http-method-type';\nexport {VERSION, NAME};\n\nconst pluginName: string = 'kava';\n\nregisterPlugin(pluginName, Kava);\n"],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@playkit-js/playkit-js-kava",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "main": "dist/playkit-kava.js",
5
5
  "scripts": {
6
6
  "clean": "rm -rf ./dist",