@playkit-js/playkit-js-kava 1.5.5 → 1.5.6

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,10 @@
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.6 (2023-07-26)
6
+
7
+
8
+
5
9
  ### 1.5.5 (2023-05-31)
6
10
 
7
11
 
@@ -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,replaceHostOnlyManifestUrls:!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.retryConfig.maxAttempts=1,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.retryConfig.maxAttempts=1,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/playkit-js-providers-analytics-service",l="2.39.4-canary.0-ab0b9a0"}])},function(e,t,n){"use strict";n.r(t),n.d(t,"Plugin",(function(){return F})),n.d(t,"EventType",(function(){return E})),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,y={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{}}}},E=(o={},Object.keys(y).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(y[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.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(y.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(y.PLAY),this._onReport()}else this._isEnded?(this._timer.start(),this._isEnded=!1,this._sendAnalytics(y.REPLAY)):this._isPaused&&(this._timer.resume(),this._isPaused=!1,this._sendAnalytics(y.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(y.PLAY_REQUEST)},S._onSourceSelected=function(){var e=this;this._sendAnalytics(y.IMPRESSION),this.player.isImage()||this.player.isLive()||this.eventManager.listen(this.player,this.player.Event.TIME_UPDATE,(function(){return e._onTimeUpdate()}))},S._onSeeking=function(){this._previousCurrentTime=this.player.currentTime,this._model.updateModel({targetPosition:this.player.currentTime}),this._sendAnalytics(y.SEEK)},S._onPause=function(){this._isPaused=!0,this._timer.stop(),this._sendAnalytics(y.PAUSE)},S._onEnded=function(){this._isEnded=!0,this._onTimeUpdate(),this._model.updateModel({bufferTime:0})},S._onTimeUpdate=function(){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(y.PLAY_REACHED_25_PERCENT)),!this._timePercentEvent.PLAY_REACHED_50&&e>=.5&&(this._timePercentEvent.PLAY_REACHED_50=!0,this._sendAnalytics(y.PLAY_REACHED_50_PERCENT)),!this._timePercentEvent.PLAY_REACHED_75&&e>=.75&&(this._timePercentEvent.PLAY_REACHED_75=!0,this._sendAnalytics(y.PLAY_REACHED_75_PERCENT)),this._timePercentEvent.PLAY_REACHED_100||1!==e||(this._timePercentEvent.PLAY_REACHED_100=!0,this._sendAnalytics(y.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(y.FLAVOR_SWITCH):this._sendAnalytics(y.SOURCE_SELECTED)},S._onAudioTrackChanged=function(e){var t=e.payload.selectedAudioTrack;this._model.updateModel({language:t.language}),this._sendAnalytics(y.AUDIO_SELECTED)},S._onTextTrackChanged=function(e){if(this._isPlaying){var t=e.payload.selectedTextTrack;this._model.updateModel({caption:t.language}),this._sendAnalytics(y.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(y.ERROR),this.reset())},S._onPlaybackRateChanged=function(){this.player.playbackRates.length&&!this.player.playbackRates.includes(this.player.playbackRate)||this._sendAnalytics(y.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(y.BUFFER_END)),n.type===this.player.State.BUFFERING&&(this._isBuffering=!0,this._bufferStartTime=Date.now(),this._sendAnalytics(y.BUFFER_START))},S._onRelatedClicked=function(){this._sendAnalytics(y.RELATED_CLICKED)},S._onRelatedSelected=function(){this._sendAnalytics(y.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(E)}}])&&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.POST,viewEventCountdown:10,resetSessionCountdown:30,dvrThreshold:120,playbackContext:"",applicationVersion:"",application:"",kalturaApplicationVersion:"",kalturaApplication:""});var x="1.5.5",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,replaceHostOnlyManifestUrls:!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.retryConfig.maxAttempts=1,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.retryConfig.maxAttempts=1,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/playkit-js-providers-analytics-service",l="2.39.4-canary.0-ab0b9a0"}])},function(e,t,n){"use strict";n.r(t),n.d(t,"Plugin",(function(){return H})),n.d(t,"EventType",(function(){return y})),n.d(t,"HttpMethodType",(function(){return R})),n.d(t,"VERSION",(function(){return B})),n.d(t,"NAME",(function(){return V}));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),a(this,"shareNetworkName",""),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.getShareNetworkName=function(){return this.shareNetworkName},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{}}},SHARE_CLICKED:{type:"SHARE_CLICKED",index:21,getEventModel:function(){return{}}},SHARE_NETWORK:{type:"SHARE_NETWORK",index:22,getEventModel:function(e){return{socialNetwork:e.getShareNetworkName()}}}},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,C,P=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 P(r.Event.RESET)),this._resetCounter=0,this._eventCounter=0),this._resetCounter++):(this.dispatchEvent(new P(r.Event.TICK)),this._eventCounter===this._config.eventCounter&&(this.dispatchEvent(new P(r.Event.REPORT)),this._eventCounter=0),this._eventCounter++)},r}(A);C={TICK:"tick",RESET:"reset",REPORT:"report"},(S="Event")in(T=M)?Object.defineProperty(T,S,{value:C,enumerable:!0,configurable:!0,writable:!0}):T[S]=C;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",w="share_clicked",D="share_network";function N(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 L(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function k(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var F=r.core.Error,x=(r.core.FakeEvent,r.core.Utils),H=function(e){var t,n;function r(t,n,r){var i;if(k(L(i=e.call(this,t,n,r)||this),"_lastDroppedFrames",0),k(L(i),"_lastTotalFrames",0),k(L(i),"_performanceEntries",[]),k(L(i),"_pendingFragLoadedUrls",[]),k(L(i),"_fragLoadedFiredOnce",!1),k(L(i),"_canPlayOccured",!1),k(L(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.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.eventManager.listen(this.player,w,(function(){return e._onShareClicked()})),this.eventManager.listen(this.player,D,(function(t){return e._onShareNetworkClicked(t)})),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(){var e=this;this._sendAnalytics(E.IMPRESSION),this.player.isImage()||this.player.isLive()||this.eventManager.listen(this.player,this.player.Event.TIME_UPDATE,(function(){return e._onTimeUpdate()}))},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(){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===F.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._onShareClicked=function(){this._sendAnalytics(E.SHARE_CLICKED)},S._onShareNetworkClicked=function(e){var t=e.payload.shareNetworkName;t&&(this._model.updateModel({shareNetworkName:t}),this._sendAnalytics(E.SHARE_NETWORK))},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 x.Object.copyDeep(y)}}])&&N(a.prototype,o),T&&N(a,T),r}(r.BasePlugin);k(H,"defaultConfig",{serviceUrl:x.Http.protocol+"//analytics.kaltura.com/api_v3/index.php",requestMethod:R.POST,viewEventCountdown:10,resetSessionCountdown:30,dvrThreshold:120,playbackContext:"",applicationVersion:"",application:"",kalturaApplicationVersion:"",kalturaApplication:""});var B="1.5.6",V="@playkit-js/playkit-js-kava";Object(r.registerPlugin)("kava",H)}]);
2
2
  //# sourceMappingURL=playkit-kava.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["./kava/webpack/bootstrap","./kava/external [\"KalturaPlayer\"]","./kava/../node_modules/@playkit-js/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","replaceHostOnlyManifestUrls","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","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","isImage","isLive","TIME_UPDATE","_onTimeUpdate","currentTime","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","_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,replaceHostOnlyManifestUrls:!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.retryConfig.maxAttempts=1,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.retryConfig.maxAttempts=1,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/playkit-js-providers-analytics-service\",c=\"2.39.4-canary.0-ab0b9a0\"}])}));\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 '@playkit-js/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 '@playkit-js/kaltura-player-js';\nimport {OVPAnalyticsService} from '@playkit-js/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.POST,\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.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 if (!(this.player.isImage() || this.player.isLive())) {\n this.eventManager.listen(this.player, this.player.Event.TIME_UPDATE, () => this._onTimeUpdate());\n }\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 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 _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 '@playkit-js/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/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/../node_modules/@playkit-js/share/src/event/share-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","replaceHostOnlyManifestUrls","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","getShareNetworkName","shareNetworkName","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","SHARE_CLICKED","SHARE_NETWORK","socialNetwork","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","ShareEvent","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","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","_onShareClicked","_onShareNetworkClicked","_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","isImage","isLive","TIME_UPDATE","_onTimeUpdate","currentTime","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","_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,replaceHostOnlyManifestUrls:!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.retryConfig.maxAttempts=1,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.retryConfig.maxAttempts=1,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/playkit-js-providers-analytics-service\",c=\"2.39.4-canary.0-ab0b9a0\"}])}));\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 * @type {string} SHARE_CLICKED\n * @memberof KavaEventType\n */\n SHARE_CLICKED: {\n type: 'SHARE_CLICKED',\n index: 21,\n getEventModel: () => ({})\n },\n /**\n * @type {string} SHARE_NETWORK\n * @memberof KavaEventType\n */\n SHARE_NETWORK: {\n type: 'SHARE_NETWORK',\n index: 22,\n getEventModel: (model: KavaModel) => ({\n socialNetwork: model.getShareNetworkName()\n })\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 shareNetworkName: string = '';\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 * Gets the share network name.\n * @returns {number} - The session start time.\n * @memberof KavaModel\n * @instance\n */\n getShareNetworkName(): string {\n return this.shareNetworkName;\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 '@playkit-js/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","/**\n * Share plugin event types.\n */\nconst ShareEvent = {\n /**\n * Fired when the user clicks on share icon.\n */\n SHARE_CLICKED: 'share_clicked',\n /**\n * Fired when the user clicks on specific social network.\n */\n SHARE_NETWORK: 'share_network'\n};\n\nexport {ShareEvent};\n","// @flow\nimport {core, BasePlugin} from '@playkit-js/kaltura-player-js';\nimport {OVPAnalyticsService} from '@playkit-js/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';\nimport {ShareEvent} from '@playkit-js/share';\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.POST,\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.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.eventManager.listen(this.player, ShareEvent.SHARE_CLICKED, () => this._onShareClicked());\n this.eventManager.listen(this.player, ShareEvent.SHARE_NETWORK, event => this._onShareNetworkClicked(event));\n\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 if (!(this.player.isImage() || this.player.isLive())) {\n this.eventManager.listen(this.player, this.player.Event.TIME_UPDATE, () => this._onTimeUpdate());\n }\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 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 _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 _onShareClicked() {\n this._sendAnalytics(KavaEventModel.SHARE_CLICKED);\n }\n\n _onShareNetworkClicked(event: FakeEvent): void {\n const shareNetworkName = event.payload.shareNetworkName;\n if (shareNetworkName) {\n this._model.updateModel({shareNetworkName: shareNetworkName});\n this._sendAnalytics(KavaEventModel.SHARE_NETWORK);\n }\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 '@playkit-js/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.5",
3
+ "version": "1.5.6",
4
4
  "main": "dist/playkit-kava.js",
5
5
  "scripts": {
6
6
  "clean": "rm -rf ./dist",
@@ -45,6 +45,7 @@
45
45
  "@playkit-js/playkit-js": "latest",
46
46
  "@playkit-js/playkit-js-providers": "2.39.4-canary.0-ab0b9a0",
47
47
  "@playkit-js/related": "latest",
48
+ "@playkit-js/share": "https://github.com/kaltura/playkit-js-share.git#726fd2d383ee04c2889ec76ff390581998b339bb",
48
49
  "babel-eslint": "^10.1.0",
49
50
  "babel-loader": "^8.1.0",
50
51
  "babel-plugin-istanbul": "^6.0.0",