@playkit-js/playkit-js-kava 1.2.2 → 1.3.0-canary.2-e6f264d
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 +9 -0
- package/dist/playkit-kava.js +1 -1
- package/dist/playkit-kava.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [1.3.0-canary.2-e6f264d](https://github.com/kaltura/playkit-js-kava/compare/v1.2.2...v1.3.0-canary.2-e6f264d) (2021-12-15)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **FEC-11748:** adding player events for EP analytics ([#109](https://github.com/kaltura/playkit-js-kava/issues/109)) ([e9bf239](https://github.com/kaltura/playkit-js-kava/commit/e9bf239))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
5
14
|
### [1.2.2](https://github.com/kaltura/playkit-js-kava/compare/v1.2.1...v1.2.2) (2021-10-27)
|
|
6
15
|
|
|
7
16
|
|
package/dist/playkit-kava.js
CHANGED
|
@@ -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{trace:function(){},debug:function(){},info:function(){},log:function(){},warn:function(){},error:function(){},time:function(){},timeEnd:function(){},getLevel:function(){},setLevel: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},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 l}));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 d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var l=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 d(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(){var e=this;return new Promise((function(t,n){try{e.params=JSON.stringify(e.params)}catch(t){r._logger.error(""+t.message),n(new s.a(s.a.Severity.CRITICAL,s.a.Category.PROVIDER,s.a.Code.FAILED_PARSING_REQUEST,{error:t,params:e.params}))}e.doHttpRequest().then((function(r){var i=new c(r);i.success?t({headers:e.responseHeaders,response:i}):n(new s.a(s.a.Severity.CRITICAL,s.a.Category.NETWORK,s.a.Code.MULTIREQUEST_API_ERROR,{url:e.url,headers:e.responseHeaders,results:i.results}))}),(function(e){n(e)}))}))},r}(r.a);d(l,"_logger",Object(i.a)("MultiRequestBuilder"));var c=function e(t){var n=this;d(this,"results",[]),this.success=!0,(t.result?t.result:t).forEach((function(t){var r=new a(t);if(n.results.push(r),r.hasError)return e._logger.error("Service returned an error with error code: "+r.error.code+" and message: "+r.error.message+"."),void(n.success=!1)}))};d(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,d;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(d in o)e(a+":"+d,o[d]);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(d in o)e(d,o[d]);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 d}));var r=n(1),i=n(3),a=n(7),o=n(6),s=function(e){var t,n;function a(){return e.apply(this,arguments)||this}return n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,a.trackEvent=function(e,t,n){return"POST"===n?a._trackEventByPOST(e,t):a._trackEventByGET(e,t)},a._trackEventByGET=function(e,t){var n=i.a.get(),a={};Object.assign(a,n.serviceParams,t);var s=new r.a;return s.service="analytics",s.action="trackEvent",s.method="GET",s.tag="analytics-trackEvent",s.params=a,s.url=e+"?service="+s.service+"&action="+s.action+"&"+Object(o.a)(s.params),s},a._trackEventByPOST=function(e,t){var n=i.a.get(),a={};Object.assign(a,n.serviceParams,t);var s=new Map;s.set("Content-Type","application/json");var u=new r.a(s),d={eventType:a.eventType,partnerId:a.partnerId,entryId:a.entryId,sessionId:a.sessionId};return["eventType","partnerId","entryId","sessionId"].forEach((function(e){return delete a[e]})),u.service="analytics",u.action="trackEvent",u.method="POST",u.tag="analytics-trackEvent",u.params=JSON.stringify(a),u.url=e+"?service="+u.service+"&action="+u.action+"&"+Object(o.a)(d),u},a}(a.a),u="playkit-js-providers-analytics-service",d="2.24.0"}])},function(e,t,n){"use strict";n.r(t),n.d(t,"Plugin",(function(){return L})),n.d(t,"EventType",(function(){return E})),n.d(t,"HttpMethodType",(function(){return A})),n.d(t,"VERSION",(function(){return N})),n.d(t,"NAME",(function(){return k}));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.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.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,d=2,l=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()}}}},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,M=r.core.FakeEventTarget,b=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}(M);P={TICK:"tick",RESET:"reset",REPORT:"report"},(S="Event")in(T=b)?Object.defineProperty(T,S,{value:P,enumerable:!0,configurable:!0,writable:!0}):T[S]=P;var A={GET:"GET",POST:"POST"};function R(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 I(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function w(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=r.core.Error,D=(r.core.FakeEvent,r.core.Utils),L=function(e){var t,n;function r(t,n,r){var i;if(w(I(i=e.call(this,t,n,r)||this),"_lastDroppedFrames",0),w(I(i),"_lastTotalFrames",0),w(I(i),"_performanceEntries",[]),w(I(i),"_pendingFragLoadedUrls",[]),w(I(i),"_fragLoadedFiredOnce",!1),w(I(i),"_canPlayOccured",!1),w(I(i),"_isManualPreload",!1),i._rateHandler=new v,i._model=new s,i._setModelDelegates(),i._timer=new b({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:d})},S._updateViewabilityModeInModel=function(e){this._model.updateModel({viewabilityMode:e?c:l})},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,b.Event.TICK,(function(){return e._rateHandler.countCurrent()})),this.eventManager.listen(this._timer,b.Event.REPORT,(function(){return e._onReport()})),this.eventManager.listen(this._timer,b.Event.RESET,(function(){return e._resetSession()})),this.eventManager.listen(this.player,this.player.Event.SOURCE_SELECTED,(function(){return e._onSourceSelected()})),this.eventManager.listen(this.player,this.player.Event.ERROR,(function(t){return e._onError(t)})),this.eventManager.listen(this.player,this.player.Event.FIRST_PLAY,(function(){return e._onFirstPlay()})),this.eventManager.listen(this.player,this.player.Event.FRAG_LOADED,(function(t){return e._onFragLoaded(t)})),this.eventManager.listen(this.player,this.player.Event.MANIFEST_LOADED,(function(t){return e._onManifestLoaded(t)})),this.eventManager.listen(this.player,this.player.Event.TIMED_METADATA,(function(t){return e._onTimedMetadataLoaded(t)})),this.eventManager.listen(this.player,this.player.Event.TRACKS_CHANGED,(function(){return e._setInitialTracks()})),this.eventManager.listen(this.player,this.player.Event.PLAYING,(function(){return e._onPlaying()})),this.eventManager.listen(this.player,this.player.Event.FIRST_PLAYING,(function(){return e._onFirstPlaying()})),this.eventManager.listen(this.player,this.player.Event.SEEKING,(function(){return e._onSeeking()})),this.eventManager.listen(this.player,this.player.Event.PAUSE,(function(){return e._onPause()})),this.eventManager.listen(this.player,this.player.Event.ENDED,(function(){return e._onEnded()})),this.eventManager.listen(this.player,this.player.Event.TIME_UPDATE,(function(){return e._onTimeUpdate()})),this.eventManager.listen(this.player,this.player.Event.VIDEO_TRACK_CHANGED,(function(t){return e._onVideoTrackChanged(t)})),this.eventManager.listen(this.player,this.player.Event.AUDIO_TRACK_CHANGED,(function(t){return e._onAudioTrackChanged(t)})),this.eventManager.listen(this.player,this.player.Event.TEXT_TRACK_CHANGED,(function(t){return e._onTextTrackChanged(t)})),this.eventManager.listen(this.player,this.player.Event.PLAYER_STATE_CHANGED,(function(t){return e._onPlayerStateChanged(t)})),this.eventManager.listen(this.player,this.player.Event.RATE_CHANGE,(function(){return e._onPlaybackRateChanged()})),this.eventManager.listen(this.player,this.player.Event.CAN_PLAY,(function(){return e._onCanPlay()})),this.eventManager.listen(this.player,this.player.Event.LOAD_START,(function(){return e._onLoadStart()})),this.eventManager.listen(this.player,this.player.Event.VOLUME_CHANGE,(function(){return e._updateSoundModeInModel()})),this.eventManager.listen(this.player,this.player.Event.VISIBILITY_CHANGE,(function(t){return e._updateViewabilityModeInModel(t.payload.visible)})),this.eventManager.listen(this.player,this.player.Event.MUTE_CHANGE,(function(){return e._updateSoundModeInModel()})),this.eventManager.listen(this.player,this.player.Event.ENTER_FULLSCREEN,(function(){return e._model.updateModel({screenMode:p.FULLSCREEN})})),this.eventManager.listen(this.player,this.player.Event.EXIT_FULLSCREEN,(function(){return e._model.updateModel({screenMode:p.NOT_IN_FULLSCREEN})})),this._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._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(){this._sendAnalytics(y.IMPRESSION)},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(){if(!this.player.isLive()){this._updatePlayTimeSumModel();var e=parseFloat((this.player.currentTime/this.player.duration).toFixed(2));!this._timePercentEvent.PLAY_REACHED_25&&e>=.25&&(this._timePercentEvent.PLAY_REACHED_25=!0,this._sendAnalytics(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===O.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._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._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.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.getUserId=function(){return e.config.userId}},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"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:document[e]?f:h})},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 D.Object.copyDeep(E)}}])&&R(a.prototype,o),T&&R(a,T),r}(r.BasePlugin);w(L,"defaultConfig",{serviceUrl:D.Http.protocol+"//analytics.kaltura.com/api_v3/index.php",requestMethod:A.GET,viewEventCountdown:10,resetSessionCountdown:30,dvrThreshold:120,playbackContext:"",applicationVersion:""});var N="1.2.2",k="@playkit-js/playkit-js-kava";Object(r.registerPlugin)("kava",L)}]);
|
|
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{trace:function(){},debug:function(){},info:function(){},log:function(){},warn:function(){},error:function(){},time:function(){},timeEnd:function(){},getLevel:function(){},setLevel: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},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 l}));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 d(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var l=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 d(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(){var e=this;return new Promise((function(t,n){try{e.params=JSON.stringify(e.params)}catch(t){r._logger.error(""+t.message),n(new s.a(s.a.Severity.CRITICAL,s.a.Category.PROVIDER,s.a.Code.FAILED_PARSING_REQUEST,{error:t,params:e.params}))}e.doHttpRequest().then((function(r){var i=new c(r);i.success?t({headers:e.responseHeaders,response:i}):n(new s.a(s.a.Severity.CRITICAL,s.a.Category.NETWORK,s.a.Code.MULTIREQUEST_API_ERROR,{url:e.url,headers:e.responseHeaders,results:i.results}))}),(function(e){n(e)}))}))},r}(r.a);d(l,"_logger",Object(i.a)("MultiRequestBuilder"));var c=function e(t){var n=this;d(this,"results",[]),this.success=!0,(t.result?t.result:t).forEach((function(t){var r=new a(t);if(n.results.push(r),r.hasError)return e._logger.error("Service returned an error with error code: "+r.error.code+" and message: "+r.error.message+"."),void(n.success=!1)}))};d(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,d;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(d in o)e(a+":"+d,o[d]);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(d in o)e(d,o[d]);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 d}));var r=n(1),i=n(3),a=n(7),o=n(6),s=function(e){var t,n;function a(){return e.apply(this,arguments)||this}return n=e,(t=a).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,a.trackEvent=function(e,t,n){return"POST"===n?a._trackEventByPOST(e,t):a._trackEventByGET(e,t)},a._trackEventByGET=function(e,t){var n=i.a.get(),a={};Object.assign(a,n.serviceParams,t);var s=new r.a;return s.service="analytics",s.action="trackEvent",s.method="GET",s.tag="analytics-trackEvent",s.params=a,s.url=e+"?service="+s.service+"&action="+s.action+"&"+Object(o.a)(s.params),s},a._trackEventByPOST=function(e,t){var n=i.a.get(),a={};Object.assign(a,n.serviceParams,t);var s=new Map;s.set("Content-Type","application/json");var u=new r.a(s),d={eventType:a.eventType,partnerId:a.partnerId,entryId:a.entryId,sessionId:a.sessionId};return["eventType","partnerId","entryId","sessionId"].forEach((function(e){return delete a[e]})),u.service="analytics",u.action="trackEvent",u.method="POST",u.tag="analytics-trackEvent",u.params=JSON.stringify(a),u.url=e+"?service="+u.service+"&action="+u.action+"&"+Object(o.a)(d),u},a}(a.a),u="playkit-js-providers-analytics-service",d="2.24.0"}])},function(e,t,n){"use strict";n.r(t),n.d(t,"Plugin",(function(){return L})),n.d(t,"EventType",(function(){return E})),n.d(t,"HttpMethodType",(function(){return A})),n.d(t,"VERSION",(function(){return N})),n.d(t,"NAME",(function(){return k}));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.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,d=2,l=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()}}}},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,M=r.core.FakeEventTarget,b=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}(M);P={TICK:"tick",RESET:"reset",REPORT:"report"},(S="Event")in(T=b)?Object.defineProperty(T,S,{value:P,enumerable:!0,configurable:!0,writable:!0}):T[S]=P;var A={GET:"GET",POST:"POST"};function R(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 I(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function w(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=r.core.Error,D=(r.core.FakeEvent,r.core.Utils),L=function(e){var t,n;function r(t,n,r){var i;if(w(I(i=e.call(this,t,n,r)||this),"_lastDroppedFrames",0),w(I(i),"_lastTotalFrames",0),w(I(i),"_performanceEntries",[]),w(I(i),"_pendingFragLoadedUrls",[]),w(I(i),"_fragLoadedFiredOnce",!1),w(I(i),"_canPlayOccured",!1),w(I(i),"_isManualPreload",!1),i._rateHandler=new v,i._model=new s,i._setModelDelegates(),i._timer=new b({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:d})},S._updateViewabilityModeInModel=function(e){this._model.updateModel({viewabilityMode:e?c:l})},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,b.Event.TICK,(function(){return e._rateHandler.countCurrent()})),this.eventManager.listen(this._timer,b.Event.REPORT,(function(){return e._onReport()})),this.eventManager.listen(this._timer,b.Event.RESET,(function(){return e._resetSession()})),this.eventManager.listen(this.player,this.player.Event.SOURCE_SELECTED,(function(){return e._onSourceSelected()})),this.eventManager.listen(this.player,this.player.Event.ERROR,(function(t){return e._onError(t)})),this.eventManager.listen(this.player,this.player.Event.FIRST_PLAY,(function(){return e._onFirstPlay()})),this.eventManager.listen(this.player,this.player.Event.FRAG_LOADED,(function(t){return e._onFragLoaded(t)})),this.eventManager.listen(this.player,this.player.Event.MANIFEST_LOADED,(function(t){return e._onManifestLoaded(t)})),this.eventManager.listen(this.player,this.player.Event.TIMED_METADATA,(function(t){return e._onTimedMetadataLoaded(t)})),this.eventManager.listen(this.player,this.player.Event.TRACKS_CHANGED,(function(){return e._setInitialTracks()})),this.eventManager.listen(this.player,this.player.Event.PLAYING,(function(){return e._onPlaying()})),this.eventManager.listen(this.player,this.player.Event.FIRST_PLAYING,(function(){return e._onFirstPlaying()})),this.eventManager.listen(this.player,this.player.Event.SEEKING,(function(){return e._onSeeking()})),this.eventManager.listen(this.player,this.player.Event.PAUSE,(function(){return e._onPause()})),this.eventManager.listen(this.player,this.player.Event.ENDED,(function(){return e._onEnded()})),this.eventManager.listen(this.player,this.player.Event.TIME_UPDATE,(function(){return e._onTimeUpdate()})),this.eventManager.listen(this.player,this.player.Event.VIDEO_TRACK_CHANGED,(function(t){return e._onVideoTrackChanged(t)})),this.eventManager.listen(this.player,this.player.Event.AUDIO_TRACK_CHANGED,(function(t){return e._onAudioTrackChanged(t)})),this.eventManager.listen(this.player,this.player.Event.TEXT_TRACK_CHANGED,(function(t){return e._onTextTrackChanged(t)})),this.eventManager.listen(this.player,this.player.Event.PLAYER_STATE_CHANGED,(function(t){return e._onPlayerStateChanged(t)})),this.eventManager.listen(this.player,this.player.Event.RATE_CHANGE,(function(){return e._onPlaybackRateChanged()})),this.eventManager.listen(this.player,this.player.Event.CAN_PLAY,(function(){return e._onCanPlay()})),this.eventManager.listen(this.player,this.player.Event.LOAD_START,(function(){return e._onLoadStart()})),this.eventManager.listen(this.player,this.player.Event.VOLUME_CHANGE,(function(){return e._updateSoundModeInModel()})),this.eventManager.listen(this.player,this.player.Event.VISIBILITY_CHANGE,(function(t){return e._updateViewabilityModeInModel(t.payload.visible)})),this.eventManager.listen(this.player,this.player.Event.MUTE_CHANGE,(function(){return e._updateSoundModeInModel()})),this.eventManager.listen(this.player,this.player.Event.ENTER_FULLSCREEN,(function(){return e._model.updateModel({screenMode:p.FULLSCREEN})})),this.eventManager.listen(this.player,this.player.Event.EXIT_FULLSCREEN,(function(){return e._model.updateModel({screenMode:p.NOT_IN_FULLSCREEN})})),this._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._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(){this._sendAnalytics(y.IMPRESSION)},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(){if(!this.player.isLive()){this._updatePlayTimeSumModel();var e=parseFloat((this.player.currentTime/this.player.duration).toFixed(2));!this._timePercentEvent.PLAY_REACHED_25&&e>=.25&&(this._timePercentEvent.PLAY_REACHED_25=!0,this._sendAnalytics(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===O.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._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._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.getUserId=function(){return e.config.userId}},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"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:document[e]?f:h})},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 D.Object.copyDeep(E)}}])&&R(a.prototype,o),T&&R(a,T),r}(r.BasePlugin);w(L,"defaultConfig",{serviceUrl:D.Http.protocol+"//analytics.kaltura.com/api_v3/index.php",requestMethod:A.GET,viewEventCountdown:10,resetSessionCountdown:30,dvrThreshold:120,playbackContext:"",applicationVersion:""});var N="1.3.0-canary.2-e6f264d",k="@playkit-js/playkit-js-kava";Object(r.registerPlugin)("kava",L)}]);
|
|
2
2
|
//# sourceMappingURL=playkit-kava.js.map
|
package/dist/playkit-kava.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["./kava/webpack/bootstrap","./kava/external [\"KalturaPlayer\"]","./kava/../node_modules/playkit-js-providers/dist/playkit-analytics-service.js","./kava/./kava-event-model.js","./kava/./kava-model.js","./kava/./kava-rate-handler.js","./kava/./kava-timer.js","./kava/./http-method-type.js","./kava/./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","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","a","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","trace","debug","info","log","warn","time","timeEnd","getLevel","setLevel","serviceUrl","cdnUrl","serviceParams","apiVersion","format","useApiCaptions","set","Array","isArray","length","slice","keys","f","objectType","hasError","message","ReferenceError","u","arguments","apply","concat","constructor","__proto__","add","requests","push","execute","stringify","FAILED_PARSING_REQUEST","then","success","response","results","result","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","getUIConfId","uiConfId","getPlaylistId","playlistId","getCustomVar1","customVar1","getCustomVar2","customVar2","getCustomVar3","customVar3","getPlaybackContext","playbackContext","getApplicationVersion","applicationVer","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","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","PKError","Error","Utils","Kava","player","_rateHandler","_model","_setModelDelegates","_timer","resetSessionCountdown","viewEventCountdown","_viewEventEnabled","_resetFlags","_addBindings","entry","getEntriesByType","match","isValid","_updateSoundModeInModel","muted","volume","_updateViewabilityModeInModel","isVisible","_handleNewPerformanceEntries","list","perfEntries","getEntries","_performanceEntries","_pendingFragLoadedUrls","_handleFragPerformanceObserver","pop","eventManager","_reset","_performanceObserver","disconnect","removeAll","loadMedia","PerformanceObserver","observe","entryTypes","event","sendAnalytics","OVPAnalyticsService","requestMethod","_handleServerResponseSuccess","err","_handleServerResponseFailed","_previousCurrentTime","_isPlaying","_isFirstPlay","_isFirstPlaying","_isEnded","_isPaused","_isBuffering","_timePercentEvent","_canPlayOccured","_isManualPreload","_resetSession","logger","_sendAnalytics","_validate","_updateBufferModel","_bufferStartTime","Date","tamperAnalyticsHandler","catch","_updateSessionStartTimeModel","listen","_onReport","_onSourceSelected","_onError","FIRST_PLAY","_onFirstPlay","FRAG_LOADED","_onFragLoaded","MANIFEST_LOADED","_onManifestLoaded","TIMED_METADATA","_onTimedMetadataLoaded","TRACKS_CHANGED","_setInitialTracks","PLAYING","_onPlaying","FIRST_PLAYING","_onFirstPlaying","SEEKING","_onSeeking","_onPause","ENDED","_onEnded","TIME_UPDATE","_onTimeUpdate","VIDEO_TRACK_CHANGED","_onVideoTrackChanged","AUDIO_TRACK_CHANGED","_onAudioTrackChanged","TEXT_TRACK_CHANGED","_onTextTrackChanged","PLAYER_STATE_CHANGED","_onPlayerStateChanged","RATE_CHANGE","_onPlaybackRateChanged","CAN_PLAY","_onCanPlay","LOAD_START","_onLoadStart","VOLUME_CHANGE","VISIBILITY_CHANGE","payload","visible","MUTE_CHANGE","ENTER_FULLSCREEN","EXIT_FULLSCREEN","_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","playRequestStartTime","playback","preload","_firstPlayRequestTime","_getTimeDifferenceInSeconds","currentTime","isLive","percent","parseFloat","toFixed","PLAY_REACHED_25","PLAY_REACHED_50","PLAY_REACHED_75","PLAY_REACHED_100","_updateFragLoadedStats","fragResourceTimings","lastFragResourceTiming","_updateMaxNetworkConnectionOverhead","connectEnd","domainLookupStart","lastIndexOftheFragment","splice","max","seconds","miliSeconds","bytes","id3TagCues","cues","Number","sequenceId","selectedVideoTrack","isAdaptiveBitrateEnabled","audioTrack","selectedAudioTrack","textTrack","selectedTextTrack","oldState","newState","State","BUFFERING","viewEventsEnabled","delta","playbackRate","playerVersion","_getPosition","_getDeliveryType","_getPlaybackType","applicationVersion","sources","startTime","streamType","StreamType","PROGRESSIVE","isDvr","dvrThreshold","_logMissingParam","missingParam","_updateTabModeInModel","hiddenAttr","document","visibilityChangeEventName","hidden","msHidden","webkitHidden","copyDeep","BasePlugin","Http","protocol","VERSION","__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 i}));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 i=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(i,\"Severity\",{RECOVERABLE:1,CRITICAL:2}),o(i,\"Category\",{NETWORK:1,SERVICE:2,PROVIDER:3}),o(i,\"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(i,\"_logger\",Object(n.a)(\"Error\"))},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return i}));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 i=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{trace:function(){},debug:function(){},info:function(){},log:function(){},warn:function(){},error:function(){},time:function(){},timeEnd:function(){},getLevel:function(){},setLevel:function(){}}}};function o(e){return n.get(e)}t.a=o},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return i}));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},i=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 i=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 a(e.code,e.message)):e.error&&\"KalturaAPIException\"===e.error.objectType?(this.hasError=!0,this.error=new a(e.error.code,e.error.message)):this.data=e},a=function(e,t){this.code=e,this.message=t},s=r(0);function c(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}function u(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 u(c(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(){var e=this;return new Promise((function(t,r){try{e.params=JSON.stringify(e.params)}catch(t){n._logger.error(\"\"+t.message),r(new s.a(s.a.Severity.CRITICAL,s.a.Category.PROVIDER,s.a.Code.FAILED_PARSING_REQUEST,{error:t,params:e.params}))}e.doHttpRequest().then((function(n){var o=new l(n);o.success?t({headers:e.responseHeaders,response:o}):r(new s.a(s.a.Severity.CRITICAL,s.a.Category.NETWORK,s.a.Code.MULTIREQUEST_API_ERROR,{url:e.url,headers:e.responseHeaders,results:o.results}))}),(function(e){r(e)}))}))},n}(n.a);u(f,\"_logger\",Object(o.a)(\"MultiRequestBuilder\"));var l=function e(t){var r=this;u(this,\"results\",[]),this.success=!0,(t.result?t.result:t).forEach((function(t){var n=new i(t);if(r.results.push(n),n.hasError)return e._logger.error(\"Service returned an error with error code: \"+n.error.code+\" and message: \"+n.error.message+\".\"),void(r.success=!1)}))};u(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(i,a){var s,c,u;if(i)if(n(a))for(s=0,c=a.length;s<c;s++)r.test(i)?o(i,a[s]):e(i+\":\"+(\"object\"==typeof a[s]?s:\"\"),a[s]);else if(a&&\"[object Object]\"===String(a))for(u in a)e(i+\":\"+u,a[u]);else o(i,a);else if(n(a))for(s=0,c=a.length;s<c;s++)o(a[s].name,a[s].value);else for(u in a)e(u,a[u]);return t}(\"\",e).join(\"&\").replace(/%20/g,\"+\")}},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return i}));var n=r(5),o=r(3),i=function(){function e(){}return e.getMultiRequest=function(e,t,r){var i=o.a.get(),a=i.serviceParams;Object.assign(a,{ks:t,clientTag:\"html5:v\"+e}),r&&Object.assign(a,{partnerId:r});var s=new Map;s.set(\"Content-Type\",\"application/json\");var c=new n.a(s);return c.method=\"POST\",c.service=\"multirequest\",c.url=c.getUrl(i.serviceUrl),c.params=a,c},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 c})),r.d(t,\"VERSION\",(function(){return u}));var n=r(1),o=r(3),i=r(7),a=r(6);var s=function(e){var t,r;function i(){return e.apply(this,arguments)||this}return r=e,(t=i).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r,i.trackEvent=function(e,t,r){return\"POST\"===r?i._trackEventByPOST(e,t):i._trackEventByGET(e,t)},i._trackEventByGET=function(e,t){var r=o.a.get(),i={};Object.assign(i,r.serviceParams,t);var s=new n.a;return s.service=\"analytics\",s.action=\"trackEvent\",s.method=\"GET\",s.tag=\"analytics-trackEvent\",s.params=i,s.url=e+\"?service=\"+s.service+\"&action=\"+s.action+\"&\"+Object(a.a)(s.params),s},i._trackEventByPOST=function(e,t){var r=o.a.get(),i={};Object.assign(i,r.serviceParams,t);var s=new Map;s.set(\"Content-Type\",\"application/json\");var c=new n.a(s),u={eventType:i.eventType,partnerId:i.partnerId,entryId:i.entryId,sessionId:i.sessionId};return[\"eventType\",\"partnerId\",\"entryId\",\"sessionId\"].forEach((function(e){return delete i[e]})),c.service=\"analytics\",c.action=\"trackEvent\",c.method=\"POST\",c.tag=\"analytics-trackEvent\",c.params=JSON.stringify(i),c.url=e+\"?service=\"+c.service+\"&action=\"+c.action+\"&\"+Object(a.a)(u),c},i}(i.a),c=\"playkit-js-providers-analytics-service\",u=\"2.24.0\"}])}));\n//# sourceMappingURL=playkit-analytics-service.js.map","// @flow\nimport {KavaModel} from './kava-model';\n\n/**\n * @name KavaEventType\n * @enum\n */\nexport const KavaEventModel: {[event: string]: KavaEvent} = {\n /**\n * @type {string} VIEW\n * @memberof KavaEventType\n */\n VIEW: {\n type: 'VIEW',\n index: 99,\n getEventModel: (model: KavaModel) => {\n const eventModel: {[name: string]: any} = {\n playTimeSum: model.getPlayTimeSum(),\n bufferTime: model.getBufferTime(),\n bufferTimeSum: model.getBufferTimeSum(),\n actualBitrate: model.getActualBitrate(),\n averageBitrate: model.getAverageBitrate(),\n audioLanguage: model.getLanguage(),\n soundMode: model.getSoundMode(),\n tabMode: model.getTabMode(),\n viewabilityMode: model.getViewabilityMode(),\n screenMode: model.getScreenMode()\n };\n\n if (!isNaN(model.getForwardBufferHealth())) {\n eventModel.forwardBufferHealth = model.getForwardBufferHealth();\n }\n if (model.getMaxManifestDownloadTime() > 0) {\n eventModel.manifestDownloadTime = model.getMaxManifestDownloadTime();\n }\n if (model.getSegmentDownloadTime() > 0) {\n eventModel.segmentDownloadTime = model.getSegmentDownloadTime();\n }\n if (model.getBandwidth()) {\n eventModel.bandwidth = model.getBandwidth();\n }\n if (model.getDroppedFramesRatio() != null) {\n eventModel.droppedFramesRatio = model.getDroppedFramesRatio();\n }\n\n if (!isNaN(model.getTargetBuffer())) {\n eventModel.targetBuffer = model.getTargetBuffer();\n }\n\n if (model.getNetworkConnectionType() !== '') {\n eventModel.networkConnectionType = model.getNetworkConnectionType();\n }\n\n if (model.getNetworkConnectionOverhead()) {\n eventModel.networkConnectionOverhead = model.getNetworkConnectionOverhead();\n }\n if (!isNaN(model.getFlavorParamsId())) {\n eventModel.flavorParamsId = model.getFlavorParamsId();\n }\n\n return eventModel;\n }\n },\n /**\n * @type {string} IMPRESSION\n * @memberof KavaEventType\n */\n IMPRESSION: {\n type: 'IMPRESSION',\n index: 1,\n getEventModel: (model: KavaModel) => {\n const eventModel = {};\n if (model.getPlayerJSLoadTime() != null) {\n eventModel.playerJSLoadTime = model.getPlayerJSLoadTime();\n }\n return eventModel;\n }\n },\n /**\n * @type {string} PLAY_REQUEST\n * @memberof KavaEventType\n */\n PLAY_REQUEST: {\n type: 'PLAY_REQUEST',\n index: 2,\n getEventModel: () => ({})\n },\n /**\n * @type {string} PLAY\n * @memberof KavaEventType\n */\n PLAY: {\n type: 'PLAY',\n index: 3,\n getEventModel: (model: KavaModel) => {\n const eventModel: {[name: string]: any} = {\n bufferTime: model.getBufferTime(),\n bufferTimeSum: model.getBufferTimeSum(),\n actualBitrate: model.getActualBitrate(),\n joinTime: model.getJoinTime(),\n canPlay: model.getCanPlayTime()\n };\n if (model.getNetworkConnectionType() !== '') {\n eventModel.networkConnectionType = model.getNetworkConnectionType();\n }\n return eventModel;\n }\n },\n /**\n * @type {string} RESUME\n * @memberof KavaEventType\n */\n RESUME: {\n type: 'RESUME',\n index: 4,\n getEventModel: (model: KavaModel) => ({\n bufferTime: model.getBufferTime(),\n bufferTimeSum: model.getBufferTimeSum(),\n actualBitrate: model.getActualBitrate()\n })\n },\n /**\n * @type {string} PAUSE\n * @memberof KavaEventType\n */\n PAUSE: {\n type: 'PAUSE',\n index: 33,\n getEventModel: () => ({})\n },\n /**\n * @type {string} BUFFER_START\n * @memberof KavaEventType\n */\n BUFFER_START: {\n type: 'BUFFER_START',\n index: 45,\n getEventModel: () => ({})\n },\n /**\n * @type {string} BUFFER_END\n * @memberof KavaEventType\n */\n BUFFER_END: {\n type: 'BUFFER_END',\n index: 46,\n getEventModel: () => ({})\n },\n /**\n * @type {string} REPLAY\n * @memberof KavaEventType\n */\n REPLAY: {\n type: 'REPLAY',\n index: 34,\n getEventModel: () => ({})\n },\n /**\n * @type {string} SEEK\n * @memberof KavaEventType\n */\n SEEK: {\n type: 'SEEK',\n index: 35,\n getEventModel: (model: KavaModel) => ({\n targetPosition: model.getTargetPosition()\n })\n },\n /**\n * @type {string} PLAY_REACHED_25_PERCENT\n * @memberof KavaEventType\n */\n PLAY_REACHED_25_PERCENT: {\n type: 'PLAY_REACHED_25_PERCENT',\n index: 11,\n getEventModel: () => ({})\n },\n /**\n * @type {string} PLAY_REACHED_50_PERCENT\n * @memberof KavaEventType\n */\n PLAY_REACHED_50_PERCENT: {\n type: 'PLAY_REACHED_50_PERCENT',\n index: 12,\n getEventModel: () => ({})\n },\n /**\n * @type {string} PLAY_REACHED_75_PERCENT\n * @memberof KavaEventType\n */\n PLAY_REACHED_75_PERCENT: {\n type: 'PLAY_REACHED_75_PERCENT',\n index: 13,\n getEventModel: () => ({})\n },\n /**\n * @type {string} PLAY_REACHED_100_PERCENT\n * @memberof KavaEventType\n */\n PLAY_REACHED_100_PERCENT: {\n type: 'PLAY_REACHED_100_PERCENT',\n index: 14,\n getEventModel: () => ({})\n },\n /**\n * @type {string} SOURCE_SELECTED\n * @memberof KavaEventType\n */\n SOURCE_SELECTED: {\n type: 'SOURCE_SELECTED',\n index: 39,\n getEventModel: (model: KavaModel) => ({\n actualBitrate: model.getActualBitrate()\n })\n },\n /**\n * @type {string} AUDIO_SELECTED\n * @memberof KavaEventType\n */\n AUDIO_SELECTED: {\n type: 'AUDIO_SELECTED',\n index: 42,\n getEventModel: (model: KavaModel) => ({\n language: model.getLanguage()\n })\n },\n /**\n * @type {string} FLAVOR_SWITCH\n * @memberof KavaEventType\n */\n FLAVOR_SWITCH: {\n type: 'FLAVOR_SWITCH',\n index: 43,\n getEventModel: (model: KavaModel) => ({\n actualBitrate: model.getActualBitrate()\n })\n },\n /**\n * @type {string} SPEED\n * @memberof KavaEventType\n */\n SPEED: {\n type: 'SPEED',\n index: 41,\n getEventModel: () => ({})\n },\n /**\n * @type {string} CAPTIONS\n * @memberof KavaEventType\n */\n CAPTIONS: {\n type: 'CAPTIONS',\n index: 38,\n getEventModel: () => ({})\n },\n /**\n * @type {string} ERROR\n * @memberof KavaEventType\n */\n ERROR: {\n type: 'ERROR',\n index: 98,\n getEventModel: (model: KavaModel) => ({\n errorCode: model.getErrorCode(),\n errorDetails: model.getErrorDetails(),\n errorPosition: model.getErrorPosition()\n })\n }\n};\n\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.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.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 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 getUserId: Function;\n getCanPlayTime: Function;\n getPersistentSessionId: Function;\n\n constructor(model?: Object) {\n if (model) {\n this.updateModel(model);\n }\n }\n\n /**\n * Gets the total play time.\n * @returns {number} - The play time sum.\n * @memberof KavaModel\n * @instance\n */\n getPlayTimeSum(): number {\n return this.playTimeSum;\n }\n\n getCanPlayTime(): number {\n return this.canPlayTime;\n }\n\n /**\n * Gets the buffer time.\n * @returns {number} - The buffer time.\n * @memberof KavaModel\n * @instance\n */\n getBufferTime(): number {\n return this.bufferTime;\n }\n\n /**\n * Gets the total buffer time.\n * @returns {number} - The total buffer time.\n * @memberof KavaModel\n * @instance\n */\n getBufferTimeSum(): number {\n return this.bufferTimeSum;\n }\n\n /**\n * Gets the player bundle js load duration time\n * @returns {number} - The player js load duration time\n * @memberof KavaModel\n * @instance\n */\n getPlayerJSLoadTime(): ?number {\n if (this.playerJSLoadTime) {\n return Math.round(this.playerJSLoadTime * 1000) / 1000;\n } else {\n return null;\n }\n }\n\n /**\n * Gets the join time.\n * @returns {number} - The join time.\n * @memberof KavaModel\n * @instance\n */\n getJoinTime(): number {\n return this.joinTime;\n }\n\n /**\n * Gets a target position\n * @returns {number} - The target position.\n * @memberof KavaModel\n * @instance\n */\n getTargetPosition(): number {\n return this.targetPosition;\n }\n\n /**\n * Gets the target buffer\n * @returns {number} - The target buffer in seconds.\n * @memberof KavaModel\n * @instance\n */\n getTargetBuffer(): number {\n return this.targetBuffer;\n }\n\n /**\n * Gets an audio language.\n * @returns {string} - The audio language.\n * @memberof KavaModel\n * @instance\n */\n getLanguage(): string {\n return this.language;\n }\n\n /**\n * Gets a caption language.\n * @returns {string} - The caption language.\n * @memberof KavaModel\n * @instance\n */\n getCaption(): string {\n return this.caption;\n }\n\n /**\n * Gets the average bandwidth since last report.\n * @returns {number} - The bandwidth in kbps\n * @memberof KavaModel\n * @instance\n */\n getBandwidth(): number {\n return this.totalSegmentsDownloadTime > 0 ? Math.round((this.totalSegmentsDownloadBytes * 8) / this.totalSegmentsDownloadTime) / 1000 : 0;\n }\n\n /**\n * Returns the longest manifest download time in seconds\n * @returns {number} - manifest max download time in seconds\n * @memberof KavaModel\n * @instance\n */\n getMaxManifestDownloadTime(): number {\n return this.maxManifestDownloadTime;\n }\n\n /**\n * Returns the longest segment download time in seconds\n * @returns {number} - segment max download time in seconds\n * @memberof KavaModel\n * @instance\n */\n getSegmentDownloadTime(): number {\n return this.maxSegmentDownloadTime;\n }\n\n /**\n * Gets the forward buffer health ratio.\n * @returns {number} - the ratio between the available buffer and the target buffer\n * @memberof KavaModel\n * @instance\n */\n getForwardBufferHealth(): number {\n return this.forwardBufferHealth;\n }\n /**\n * Gets the dropped frames ratio since last view event.\n * @returns {number} - dropped frames ratio since last view event\n * @memberof KavaModel\n * @instance\n */\n getDroppedFramesRatio(): ?number {\n return this.droppedFramesRatio;\n }\n\n /**\n * Gets the sound mode of the player.\n * @returns {SoundMode} the state of the sound (muted ot not)\n * @memberof KavaModel\n * @instance\n */\n getSoundMode(): $Values<typeof SoundMode> {\n return this.soundMode;\n }\n\n /**\n * Gets the viewability mode of the player.\n * @returns {ViewabilityMode} the state of the view (in-view ot not)\n * @memberof KavaModel\n * @instance\n */\n getViewabilityMode(): $Values<typeof ViewabilityMode> {\n return this.viewabilityMode;\n }\n\n /**\n * Gets the screen mode of the browser player.\n * @returns {number} the state of the full screen if is on or not.\n * @memberof KavaModel\n * @instance\n */\n getScreenMode(): $Values<typeof ScreenMode> {\n return this.screenMode;\n }\n\n /**\n * Gets the Tab mode of the browser.\n * @returns {TabMode} the state of the tab (focused or not)\n * @memberof KavaModel\n * @instance\n */\n getTabMode(): $Values<typeof TabMode> {\n return this.tabMode;\n }\n\n /**\n * Gets the effectiveType read-only property of the NetworkInformation interface (from navigator)\n * @returns {string} the effective type of the connection meaning one of 'slow-2g', '2g', '3g', or '4g'\n * @memberof KavaModel\n * @instance\n */\n getNetworkConnectionType(): string {\n return this.networkConnectionType;\n }\n\n /**\n * Gets the max dns+ssl+tcp resolving time over all video segments\n * @returns {number} max dns+ssl+tcp in seconds\n * @memberof KavaModel\n * @instance\n */\n getNetworkConnectionOverhead(): number {\n // convert ms to seconds in 0.xxx format\n return Math.round(this.maxNetworkConnectionOverhead) / 1000;\n }\n\n /**\n * Gets the error code.\n * @returns {number} - The error code.\n * @memberof KavaModel\n * @instance\n */\n getErrorCode(): number {\n return this.errorCode;\n }\n\n /**\n * Gets the flavor id from ID3 tag in the packager\n * @returns {number} - The flavor id.\n * @memberof KavaModel\n * @instance\n */\n getFlavorParamsId(): number {\n return this.flavorParamsId;\n }\n\n /**\n * Gets the error additional data.\n * @returns {string} - The stringifyed error data.\n * @memberof KavaModel\n * @instance\n */\n getErrorDetails(): string {\n let retVal: string = '';\n if (this.errorDetails) {\n try {\n retVal = JSON.stringify(this.errorDetails);\n } catch (e) {\n // do nothing\n }\n }\n return retVal;\n }\n\n /**\n * Gets the event index counter.\n * @returns {number} - The event index counter.\n * @memberof KavaModel\n * @instance\n */\n getEventIndex(): number {\n return this.eventIndex;\n }\n\n /**\n * Gets the error position (start or mid playing)\n * @returns {number} - The error position - 1 for pre playing, 2 for mid stream error\n * @memberof KavaModel\n * @instance\n */\n getErrorPosition(): $Values<typeof ErrorPosition> {\n return this.errorPosition;\n }\n\n /**\n * Gets the session start time.\n * @returns {number} - The session start time.\n * @memberof KavaModel\n * @instance\n */\n getSessionStartTime(): number {\n return this.sessionStartTime;\n }\n\n /**\n * Updates the model.\n * @param {Object} obj - A partial or full updated model.\n * @returns {void}\n * @memberof KavaModel\n * @instance\n */\n updateModel(obj: Object): void {\n Object.assign(this, obj);\n }\n\n /**\n * Gets the model for a certain event.\n * @param {KavaEvent} eventObj - The event object.\n * @returns {Object} - The event model.\n * @memberof KavaModel\n * @instance\n */\n getModel(eventObj: KavaEvent): Object {\n return getEventModel(eventObj, this);\n }\n}\n\nconst SoundMode = {\n SOUND_OFF: 1,\n SOUND_ON: 2\n};\n\nconst ViewabilityMode = {\n NOT_IN_VIEW: 1,\n IN_VIEW: 2\n};\n\nconst TabMode = {\n TAB_NOT_FOCUSED: 1,\n TAB_FOCUSED: 2\n};\n\nconst ScreenMode = {\n NOT_IN_FULLSCREEN: 1,\n FULLSCREEN: 2\n};\n\nconst ErrorPosition = {\n PRE_PLAY: 3,\n PRE_PLAYING: 1,\n MID_STREAM: 2\n};\n\nexport {KavaModel, SoundMode, TabMode, ErrorPosition, ScreenMode, ViewabilityMode};\n","// @flow\n\n/**\n * Manage the video rates for the KAVA plugin.\n * @private\n * @class KavaRateHandler\n */\nclass KavaRateHandler {\n _rates: Array<Object> = [];\n\n constructor() {\n this._rates = [];\n }\n\n /**\n * Sets the video rates.\n * @param {Array<number>} rates - The video rates.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n setRates(rates: Array<number>): void {\n this._rates = [];\n rates.forEach(rate => {\n this._rates.push({\n rate: rate,\n active: false,\n duration: 0\n });\n });\n }\n\n /**\n * Sets the current rate.\n * @param {number} rate - The current rate.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n setCurrent(rate: number): void {\n this._rates.forEach(o => (o.active = false));\n const obj = this._rates.find(o => o.rate === rate);\n if (obj) {\n obj.active = true;\n }\n }\n\n /**\n * Gets the current rate.\n * @returns {number} - The current rate.\n * @memberof KavaRateHandler\n * @instance\n */\n getCurrent(): number {\n const current = this._rates.find(o => o.active);\n return current ? current.rate : -1;\n }\n\n /**\n * Increases the duration of the current rate.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n countCurrent(): void {\n const current = this._rates.find(o => o.active);\n if (current) {\n current.duration++;\n }\n }\n\n /**\n * Gets the average rate.\n * @returns {number} - The average rate.\n * @memberof KavaRateHandler\n * @instance\n */\n getAverage(): number {\n let totalDuration = 0;\n let sum = 0;\n this._rates.forEach(o => {\n sum += o.rate * o.duration;\n totalDuration += o.duration;\n });\n return totalDuration ? sum / totalDuration : 0;\n }\n\n /**\n * Resets the duration of all rates.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n reset(): void {\n this._rates.forEach(o => (o.duration = 0));\n }\n\n /**\n * Destroys the class.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n destroy(): void {\n this._rates = [];\n }\n}\n\nexport {KavaRateHandler};\n","// @flow\nimport {core} from 'kaltura-player-js';\nconst {FakeEvent, FakeEventTarget} = core;\n\nconst SECOND: number = 1000;\n\n/**\n * Mange a timer and dispatches related events.\n * @private\n * @class KavaTimer\n * @param {Object} config - The timer config.\n */\nclass KavaTimer extends FakeEventTarget {\n _resetCounter: number;\n _eventCounter: number;\n _intervalId: ?IntervalID;\n _stopped: boolean;\n _config: Object;\n\n static Event = {\n TICK: 'tick',\n RESET: 'reset',\n REPORT: 'report'\n };\n\n constructor(config: Object) {\n super();\n this._config = config;\n }\n\n /**\n * Starts the timer interval.\n * @returns {void}\n * @memberof KavaTimer\n * @instance\n */\n start(): void {\n this._clearTimeout();\n this._stopped = false;\n this._resetCounter = 0;\n this._eventCounter = 0;\n this._intervalId = setInterval(() => this._monitor(), SECOND);\n }\n\n /**\n * Continues the timer to dispatch REPORT.\n * @returns {void}\n * @memberof KavaTimer\n * @instance\n */\n resume(): void {\n this._stopped = false;\n this._resetCounter = 0;\n }\n\n /**\n * Stops the timer from dispatch REPORT and starts the timer to dispatch RESET.\n * @returns {void}\n * @memberof KavaTimer\n * @instance\n */\n stop(): void {\n this._stopped = true;\n }\n\n /**\n * @returns {boolean} - Whether the timer is stopped.\n * @memberof KavaTimer\n * @instance\n */\n isStopped(): boolean {\n return this._stopped;\n }\n\n /**\n * Destroys the timer.\n * @returns {void}\n * @memberof KavaTimer\n * @instance\n */\n destroy(): void {\n this._clearTimeout();\n }\n\n _clearTimeout(): void {\n if (this._intervalId) {\n clearInterval(this._intervalId);\n this._intervalId = null;\n }\n }\n\n _monitor(): void {\n if (this._stopped) {\n if (this._resetCounter === this._config.resetCounter) {\n this.dispatchEvent(new FakeEvent(KavaTimer.Event.RESET));\n this._resetCounter = 0;\n this._eventCounter = 0;\n }\n this._resetCounter++;\n } else {\n this.dispatchEvent(new FakeEvent(KavaTimer.Event.TICK));\n if (this._eventCounter === this._config.eventCounter) {\n this.dispatchEvent(new FakeEvent(KavaTimer.Event.REPORT));\n this._eventCounter = 0;\n }\n this._eventCounter++;\n }\n }\n}\n\nexport {KavaTimer};\n","// @flow\nconst HttpMethodType: KavaHttpMethodType = {\n GET: 'GET',\n POST: 'POST'\n};\n\nexport {HttpMethodType};\n","// @flow\nimport {core, BasePlugin} from 'kaltura-player-js';\nimport {OVPAnalyticsService} from 'playkit-js-providers/dist/playkit-analytics-service';\nimport {KavaEventModel, KavaEventType} from './kava-event-model';\nimport {KavaRateHandler} from './kava-rate-handler';\nimport {KavaTimer} from './kava-timer';\nimport {ErrorPosition, KavaModel, SoundMode, TabMode, ScreenMode, ViewabilityMode} from './kava-model';\nimport {HttpMethodType} from './http-method-type';\n\nconst {Error: PKError, FakeEvent, Utils} = core;\nconst DIVIDER: number = 1024;\nconst TEXT_TYPE: string = 'TEXT';\n/**\n * Kaltura Advanced Analytics plugin.\n * @class Kava\n * @param {string} name - The plugin name.\n * @param {Player} player - The player instance.\n * @param {KavaConfigObject} config - The plugin config.\n */\nclass Kava extends BasePlugin {\n _model: KavaModel;\n _timer: KavaTimer;\n _rateHandler: KavaRateHandler;\n _viewEventEnabled: boolean;\n _firstPlayRequestTime: number;\n _bufferStartTime: number;\n _previousCurrentTime: number;\n _isFirstPlay: boolean;\n _isFirstPlaying: boolean;\n _isEnded: boolean;\n _isPaused: boolean;\n _isBuffering: boolean;\n _timePercentEvent: {[time: string]: boolean};\n _isPlaying: boolean;\n _loadStartTime: number;\n _lastDroppedFrames: number = 0;\n _lastTotalFrames: number = 0;\n _performanceObserver: window.PerformanceObserver;\n _performanceEntries: window.PerformanceEntry[] = [];\n _pendingFragLoadedUrls: string[] = [];\n _fragLoadedFiredOnce: boolean = false;\n _canPlayOccured: boolean = false;\n _isManualPreload: boolean = false;\n\n /**\n * Default config of the plugin.\n * @type {Object}\n * @static\n * @memberof Kava\n */\n static defaultConfig: Object = {\n serviceUrl: `${Utils.Http.protocol}//analytics.kaltura.com/api_v3/index.php`,\n requestMethod: HttpMethodType.GET,\n viewEventCountdown: 10,\n resetSessionCountdown: 30,\n dvrThreshold: 120,\n playbackContext: '',\n applicationVersion: ''\n };\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 ? ViewabilityMode.IN_VIEW : ViewabilityMode.NOT_IN_VIEW\n });\n }\n\n _handleNewPerformanceEntries(list: window.PerformanceObserverEntryList) {\n let perfEntries = list.getEntries();\n for (let i = 0; i < perfEntries.length; i++) {\n this._performanceEntries.push(perfEntries[i]);\n }\n while (this._pendingFragLoadedUrls.length) {\n // handle frag loaded events which haven't been added to the entry list yet\n this._handleFragPerformanceObserver(this._pendingFragLoadedUrls.pop());\n }\n }\n\n /**\n * Destroys the plugin.\n * @return {void}\n * @memberof Kava\n * @instance\n */\n destroy(): void {\n this.eventManager.destroy();\n this._reset();\n }\n\n _reset(): void {\n this._timer.destroy();\n this._rateHandler.destroy();\n if (this._performanceObserver) {\n this._performanceObserver.disconnect();\n }\n this._performanceEntries = [];\n this._pendingFragLoadedUrls = [];\n }\n\n /**\n * Reset the plugin.\n * @return {void}\n * @memberof Kava\n * @instance\n */\n reset(): void {\n this.eventManager.removeAll();\n this._resetFlags();\n this._addBindings();\n this._model.updateModel({\n eventIndex: 1,\n bufferTime: 0.0,\n bufferTimeSum: 0.0,\n playTimeSum: 0.0,\n sessionStartTime: null\n });\n this._reset();\n }\n\n /**\n * loadMedia of the plugin.\n * @return {void}\n * @memberof Kava\n * @instance\n */\n loadMedia(): void {\n if (window.PerformanceObserver) {\n this._performanceObserver = new window.PerformanceObserver(this._handleNewPerformanceEntries.bind(this));\n this._performanceObserver.observe({entryTypes: ['resource']});\n }\n }\n\n /**\n * Gets the model object for a certain event.\n * @param {string} event - Event name.\n * @returns {Object} - Model object.\n * @instance\n * @memberof Kava\n * @example\n * const kava = player.plugins.kava;\n * const viewModel = kava.getEventModel(kava.EventType.VIEW);\n * kava.sendAnalytics(viewModel);\n */\n getEventModel(event: string): ?Object {\n if (event) {\n return this._model.getModel(KavaEventModel[event]);\n }\n }\n\n /**\n * @returns {KavaEventType} - The kava events list.\n * @instance\n * @memberof Kava\n */\n get EventType(): {[event: string]: string} {\n return Utils.Object.copyDeep(KavaEventType);\n }\n\n /**\n * Sends KAVA analytics event to analytics service.\n * @param {Object} model - Event model.\n * @returns {Promise} - Promise to indicate request succeed or failed.\n * @instance\n * @memberof Kava\n * @example\n * player.plugins.kava.sendAnalytics({...})\n * .then(() => {\n * console.log('kava analytics sent successfully');\n * })\n * .catch(e => {\n * console.log('kava analytics send failed', e);\n * });\n */\n sendAnalytics(model: Object): Promise<*> {\n return new Promise((resolve, reject) => {\n OVPAnalyticsService.trackEvent(this.config.serviceUrl, model, this.config.requestMethod)\n .doHttpRequest()\n .then(\n response => {\n this._handleServerResponseSuccess(response, model);\n resolve();\n },\n err => {\n this._handleServerResponseFailed(err, model);\n reject(err);\n }\n );\n this._model.updateModel({eventIndex: this._model.getEventIndex() + 1});\n });\n }\n\n _resetFlags(): void {\n this._previousCurrentTime = 0;\n this._isPlaying = false;\n this._isFirstPlay = true;\n this._isFirstPlaying = true;\n this._isEnded = false;\n this._isPaused = false;\n this._isBuffering = false;\n this._timePercentEvent = {\n PLAY_REACHED_25_PERCENT: false,\n PLAY_REACHED_50_PERCENT: false,\n PLAY_REACHED_75_PERCENT: false,\n PLAY_REACHED_100_PERCENT: false\n };\n this._canPlayOccured = false;\n this._isManualPreload = false;\n }\n\n _resetSession(): void {\n this.logger.debug('Reset KAVA session');\n this._rateHandler.reset();\n this._model.updateModel({\n eventIndex: 1,\n bufferTimeSum: 0.0,\n playTimeSum: 0.0\n });\n }\n\n _sendAnalytics(eventObj: KavaEvent): void {\n if (!this._validate()) {\n return;\n }\n if (this._isBuffering) {\n this._updateBufferModel();\n this._bufferStartTime = Date.now();\n }\n const model = this._model.getModel(eventObj);\n if (typeof this.config.tamperAnalyticsHandler === 'function') {\n const sendRequest = this.config.tamperAnalyticsHandler(model);\n if (!sendRequest) {\n this.logger.debug('Cancel KAVA request', model);\n return;\n }\n }\n this.logger.debug(`Sending KAVA event ${model.eventType}:${eventObj.type}`);\n this.sendAnalytics(model).catch(() => {});\n }\n\n _handleServerResponseSuccess(response: Object, model: Object): void {\n this.logger.debug(`KAVA event sent`, model);\n this._updateSessionStartTimeModel(response);\n }\n\n _handleServerResponseFailed(err: Object, model: Object): void {\n this.logger.warn(`Failed to send KAVA event`, model, err);\n }\n\n _addBindings(): void {\n this.eventManager.listen(this._timer, KavaTimer.Event.TICK, () => this._rateHandler.countCurrent());\n this.eventManager.listen(this._timer, KavaTimer.Event.REPORT, () => this._onReport());\n this.eventManager.listen(this._timer, KavaTimer.Event.RESET, () => this._resetSession());\n this.eventManager.listen(this.player, this.player.Event.SOURCE_SELECTED, () => this._onSourceSelected());\n this.eventManager.listen(this.player, this.player.Event.ERROR, event => this._onError(event));\n this.eventManager.listen(this.player, this.player.Event.FIRST_PLAY, () => this._onFirstPlay());\n this.eventManager.listen(this.player, this.player.Event.FRAG_LOADED, event => this._onFragLoaded(event));\n this.eventManager.listen(this.player, this.player.Event.MANIFEST_LOADED, event => this._onManifestLoaded(event));\n this.eventManager.listen(this.player, this.player.Event.TIMED_METADATA, event => this._onTimedMetadataLoaded(event));\n this.eventManager.listen(this.player, this.player.Event.TRACKS_CHANGED, () => this._setInitialTracks());\n this.eventManager.listen(this.player, this.player.Event.PLAYING, () => this._onPlaying());\n this.eventManager.listen(this.player, this.player.Event.FIRST_PLAYING, () => this._onFirstPlaying());\n this.eventManager.listen(this.player, this.player.Event.SEEKING, () => this._onSeeking());\n this.eventManager.listen(this.player, this.player.Event.PAUSE, () => this._onPause());\n this.eventManager.listen(this.player, this.player.Event.ENDED, () => this._onEnded());\n this.eventManager.listen(this.player, this.player.Event.TIME_UPDATE, () => this._onTimeUpdate());\n this.eventManager.listen(this.player, this.player.Event.VIDEO_TRACK_CHANGED, event => this._onVideoTrackChanged(event));\n this.eventManager.listen(this.player, this.player.Event.AUDIO_TRACK_CHANGED, event => this._onAudioTrackChanged(event));\n this.eventManager.listen(this.player, this.player.Event.TEXT_TRACK_CHANGED, event => this._onTextTrackChanged(event));\n this.eventManager.listen(this.player, this.player.Event.PLAYER_STATE_CHANGED, event => this._onPlayerStateChanged(event));\n this.eventManager.listen(this.player, this.player.Event.RATE_CHANGE, () => this._onPlaybackRateChanged());\n this.eventManager.listen(this.player, this.player.Event.CAN_PLAY, () => this._onCanPlay());\n this.eventManager.listen(this.player, this.player.Event.LOAD_START, () => this._onLoadStart());\n this.eventManager.listen(this.player, this.player.Event.VOLUME_CHANGE, () => this._updateSoundModeInModel());\n this.eventManager.listen(this.player, this.player.Event.VISIBILITY_CHANGE, e => this._updateViewabilityModeInModel(e.payload.visible));\n this.eventManager.listen(this.player, this.player.Event.MUTE_CHANGE, () => this._updateSoundModeInModel());\n this.eventManager.listen(this.player, this.player.Event.ENTER_FULLSCREEN, () => this._model.updateModel({screenMode: ScreenMode.FULLSCREEN}));\n this.eventManager.listen(this.player, this.player.Event.EXIT_FULLSCREEN, () =>\n this._model.updateModel({screenMode: ScreenMode.NOT_IN_FULLSCREEN})\n );\n this._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 this._timer.start();\n this._isFirstPlaying = false;\n const playRequestStartTime =\n this.player.config.playback.preload === 'auto' || this._isManualPreload ? this._firstPlayRequestTime : this._loadStartTime;\n this._model.updateModel({\n joinTime: Kava._getTimeDifferenceInSeconds(playRequestStartTime)\n });\n this._sendAnalytics(KavaEventModel.PLAY);\n this._onReport();\n } else if (this._isEnded) {\n this._timer.start();\n this._isEnded = false;\n this._sendAnalytics(KavaEventModel.REPLAY);\n } else if (this._isPaused) {\n this._timer.resume();\n this._isPaused = false;\n this._sendAnalytics(KavaEventModel.RESUME);\n }\n }\n\n _onCanPlay(): void {\n this._canPlayOccured = true;\n this._model.updateModel({\n canPlayTime: Kava._getTimeDifferenceInSeconds(this._loadStartTime)\n });\n }\n\n _onFirstPlay(): void {\n if (this._canPlayOccured) {\n this._isManualPreload = true;\n }\n this._isFirstPlay = false;\n this._firstPlayRequestTime = Date.now();\n this._sendAnalytics(KavaEventModel.PLAY_REQUEST);\n }\n\n _onSourceSelected(): void {\n this._sendAnalytics(KavaEventModel.IMPRESSION);\n }\n\n _onSeeking(): void {\n this._previousCurrentTime = this.player.currentTime;\n this._model.updateModel({targetPosition: this.player.currentTime});\n this._sendAnalytics(KavaEventModel.SEEK);\n }\n\n _onPause(): void {\n this._isPaused = true;\n this._timer.stop();\n this._sendAnalytics(KavaEventModel.PAUSE);\n }\n\n _onEnded(): void {\n this._isEnded = true;\n this._onTimeUpdate();\n this._model.updateModel({bufferTime: 0});\n }\n\n _onTimeUpdate(): void {\n if (!this.player.isLive()) {\n this._updatePlayTimeSumModel();\n const percent = parseFloat((this.player.currentTime / this.player.duration).toFixed(2));\n if (!this._timePercentEvent.PLAY_REACHED_25 && percent >= 0.25) {\n this._timePercentEvent.PLAY_REACHED_25 = true;\n this._sendAnalytics(KavaEventModel.PLAY_REACHED_25_PERCENT);\n }\n if (!this._timePercentEvent.PLAY_REACHED_50 && percent >= 0.5) {\n this._timePercentEvent.PLAY_REACHED_50 = true;\n this._sendAnalytics(KavaEventModel.PLAY_REACHED_50_PERCENT);\n }\n if (!this._timePercentEvent.PLAY_REACHED_75 && percent >= 0.75) {\n this._timePercentEvent.PLAY_REACHED_75 = true;\n this._sendAnalytics(KavaEventModel.PLAY_REACHED_75_PERCENT);\n }\n if (!this._timePercentEvent.PLAY_REACHED_100 && percent === 1) {\n this._timePercentEvent.PLAY_REACHED_100 = true;\n this._sendAnalytics(KavaEventModel.PLAY_REACHED_100_PERCENT);\n }\n }\n }\n\n _onFragLoaded(event: FakeEvent): void {\n if (!this._fragLoadedFiredOnce) {\n this._fragLoadedFiredOnce = true;\n }\n this._updateFragLoadedStats(event);\n if (this._performanceObserver) {\n const succHandle = this._handleFragPerformanceObserver(event.payload.url);\n if (!succHandle) {\n this._pendingFragLoadedUrls.push(event.payload.url);\n }\n }\n }\n\n _handleFragPerformanceObserver(url: string): boolean {\n const fragResourceTimings = this._performanceEntries.filter(entry => entry.name == url);\n const lastFragResourceTiming: ?Object =\n fragResourceTimings && fragResourceTimings.length ? fragResourceTimings[fragResourceTimings.length - 1] : null;\n if (lastFragResourceTiming) {\n this._updateMaxNetworkConnectionOverhead(lastFragResourceTiming.connectEnd - lastFragResourceTiming.domainLookupStart);\n const lastIndexOftheFragment: number = this._performanceEntries.indexOf(lastFragResourceTiming);\n if (lastIndexOftheFragment > -1 && lastIndexOftheFragment < this._performanceEntries.length) {\n this._performanceEntries = this._performanceEntries.splice(\n lastIndexOftheFragment + 1,\n this._performanceEntries.length - (lastIndexOftheFragment + 1)\n );\n }\n return true;\n } else {\n return false;\n }\n }\n\n _updateMaxNetworkConnectionOverhead(networkConnectionOverhead: number): void {\n this._model.updateModel({\n maxNetworkConnectionOverhead: Math.max(this._model.maxNetworkConnectionOverhead, networkConnectionOverhead)\n });\n }\n\n _updateFragLoadedStats(event: FakeEvent): void {\n const seconds = Math.round(event.payload.miliSeconds) / 1000;\n this._model.updateModel({\n totalSegmentsDownloadTime: this._model.totalSegmentsDownloadTime + seconds,\n totalSegmentsDownloadBytes: this._model.totalSegmentsDownloadBytes + event.payload.bytes,\n maxSegmentDownloadTime: Math.max(seconds, this._model.maxSegmentDownloadTime)\n });\n }\n\n _onManifestLoaded(event: FakeEvent): void {\n const seconds = Math.round(event.payload.miliSeconds) / 1000;\n this._model.updateModel({\n maxManifestDownloadTime: Math.max(seconds, this._model.maxManifestDownloadTime)\n });\n }\n\n _onTimedMetadataLoaded(event: FakeEvent): void {\n const id3TagCues = event.payload.cues.filter(entry => entry.value && entry.value.key === TEXT_TYPE);\n if (id3TagCues.length) {\n try {\n this._model.updateModel({flavorParamsId: Number(JSON.parse(id3TagCues[id3TagCues.length - 1].value.data).sequenceId)});\n } catch (e) {\n this.logger.debug('error parsing id3', e);\n }\n }\n }\n\n _onVideoTrackChanged(event: FakeEvent): void {\n const videoTrack = event.payload.selectedVideoTrack;\n this._rateHandler.setCurrent(videoTrack.bandwidth / DIVIDER);\n if (this.player.isAdaptiveBitrateEnabled()) {\n this._sendAnalytics(KavaEventModel.FLAVOR_SWITCH);\n } else {\n this._sendAnalytics(KavaEventModel.SOURCE_SELECTED);\n }\n }\n\n _onAudioTrackChanged(event: FakeEvent): void {\n const audioTrack = event.payload.selectedAudioTrack;\n this._model.updateModel({language: audioTrack.language});\n this._sendAnalytics(KavaEventModel.AUDIO_SELECTED);\n }\n\n _onTextTrackChanged(event: FakeEvent): void {\n if (this._isPlaying) {\n const textTrack = event.payload.selectedTextTrack;\n this._model.updateModel({caption: textTrack.language});\n this._sendAnalytics(KavaEventModel.CAPTIONS);\n }\n }\n\n _onError(event: FakeEvent): void {\n if (event.payload && event.payload.severity === PKError.Severity.CRITICAL) {\n this._model.updateModel({\n errorCode: event.payload.code,\n errorDetails: event.payload.data,\n errorPosition: this._isFirstPlay ? ErrorPosition.PRE_PLAY : this._isFirstPlaying ? ErrorPosition.PRE_PLAYING : ErrorPosition.MID_STREAM\n });\n this._sendAnalytics(KavaEventModel.ERROR);\n this.reset();\n }\n }\n\n _onPlaybackRateChanged(): void {\n this._sendAnalytics(KavaEventModel.SPEED);\n }\n\n _onPlayerStateChanged(event: FakeEvent): void {\n const oldState = event.payload.oldState;\n const newState = event.payload.newState;\n if (oldState.type === this.player.State.BUFFERING) {\n this._isBuffering = false;\n this._updateBufferModel();\n this._sendAnalytics(KavaEventModel.BUFFER_END);\n }\n if (newState.type === this.player.State.BUFFERING) {\n this._isBuffering = true;\n this._bufferStartTime = Date.now();\n this._sendAnalytics(KavaEventModel.BUFFER_START);\n }\n }\n\n _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.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.getUserId = () => this.config.userId;\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 '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: document[hiddenAttr] ? TabMode.TAB_NOT_FOCUSED : TabMode.TAB_FOCUSED\n });\n }\n\n _initTabMode(): void {\n let hiddenAttr: string;\n let visibilityChangeEventName: string;\n if (typeof document.hidden !== 'undefined') {\n // Opera 12.10 and Firefox 18 and later support\n hiddenAttr = 'hidden';\n visibilityChangeEventName = 'visibilitychange';\n } else if (typeof document.msHidden !== 'undefined') {\n hiddenAttr = 'msHidden';\n visibilityChangeEventName = 'msvisibilitychange';\n } else if (typeof document.webkitHidden !== 'undefined') {\n hiddenAttr = 'webkitHidden';\n visibilityChangeEventName = 'webkitvisibilitychange';\n }\n\n if (hiddenAttr && visibilityChangeEventName) {\n this.eventManager.listen(document, visibilityChangeEventName, () => this._updateTabModeInModel(hiddenAttr));\n this._updateTabModeInModel(hiddenAttr);\n }\n }\n}\n\nexport {Kava};\n","// @flow\nimport {registerPlugin} from 'kaltura-player-js';\nimport {Kava} from './kava';\n\ndeclare var __VERSION__: string;\ndeclare var __NAME__: string;\n\nconst VERSION = __VERSION__;\nconst NAME = __NAME__;\n\nexport {Kava as Plugin};\nexport {KavaEventType as EventType} from './kava-event-model';\nexport {HttpMethodType} from './http-method-type';\nexport {VERSION, NAME};\n\nconst pluginName: string = 'kava';\n\nregisterPlugin(pluginName, Kava);\n"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"sources":["./kava/webpack/bootstrap","./kava/external [\"KalturaPlayer\"]","./kava/../node_modules/playkit-js-providers/dist/playkit-analytics-service.js","./kava/./kava-event-model.js","./kava/./kava-model.js","./kava/./kava-rate-handler.js","./kava/./kava-timer.js","./kava/./http-method-type.js","./kava/./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","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","a","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","trace","debug","info","log","warn","time","timeEnd","getLevel","setLevel","serviceUrl","cdnUrl","serviceParams","apiVersion","format","useApiCaptions","set","Array","isArray","length","slice","keys","f","objectType","hasError","message","ReferenceError","u","arguments","apply","concat","constructor","__proto__","add","requests","push","execute","stringify","FAILED_PARSING_REQUEST","then","success","response","results","result","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","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","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","PKError","Error","Utils","Kava","player","_rateHandler","_model","_setModelDelegates","_timer","resetSessionCountdown","viewEventCountdown","_viewEventEnabled","_resetFlags","_addBindings","entry","getEntriesByType","match","isValid","_updateSoundModeInModel","muted","volume","_updateViewabilityModeInModel","isVisible","_handleNewPerformanceEntries","list","perfEntries","getEntries","_performanceEntries","_pendingFragLoadedUrls","_handleFragPerformanceObserver","pop","eventManager","_reset","_performanceObserver","disconnect","removeAll","loadMedia","PerformanceObserver","observe","entryTypes","event","sendAnalytics","OVPAnalyticsService","requestMethod","_handleServerResponseSuccess","err","_handleServerResponseFailed","_previousCurrentTime","_isPlaying","_isFirstPlay","_isFirstPlaying","_isEnded","_isPaused","_isBuffering","_timePercentEvent","_canPlayOccured","_isManualPreload","_resetSession","logger","_sendAnalytics","_validate","_updateBufferModel","_bufferStartTime","Date","tamperAnalyticsHandler","catch","_updateSessionStartTimeModel","listen","_onReport","_onSourceSelected","_onError","FIRST_PLAY","_onFirstPlay","FRAG_LOADED","_onFragLoaded","MANIFEST_LOADED","_onManifestLoaded","TIMED_METADATA","_onTimedMetadataLoaded","TRACKS_CHANGED","_setInitialTracks","PLAYING","_onPlaying","FIRST_PLAYING","_onFirstPlaying","SEEKING","_onSeeking","_onPause","ENDED","_onEnded","TIME_UPDATE","_onTimeUpdate","VIDEO_TRACK_CHANGED","_onVideoTrackChanged","AUDIO_TRACK_CHANGED","_onAudioTrackChanged","TEXT_TRACK_CHANGED","_onTextTrackChanged","PLAYER_STATE_CHANGED","_onPlayerStateChanged","RATE_CHANGE","_onPlaybackRateChanged","CAN_PLAY","_onCanPlay","LOAD_START","_onLoadStart","VOLUME_CHANGE","VISIBILITY_CHANGE","payload","visible","MUTE_CHANGE","ENTER_FULLSCREEN","EXIT_FULLSCREEN","_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","playRequestStartTime","playback","preload","_firstPlayRequestTime","_getTimeDifferenceInSeconds","currentTime","isLive","percent","parseFloat","toFixed","PLAY_REACHED_25","PLAY_REACHED_50","PLAY_REACHED_75","PLAY_REACHED_100","_updateFragLoadedStats","fragResourceTimings","lastFragResourceTiming","_updateMaxNetworkConnectionOverhead","connectEnd","domainLookupStart","lastIndexOftheFragment","splice","max","seconds","miliSeconds","bytes","id3TagCues","cues","Number","sequenceId","selectedVideoTrack","isAdaptiveBitrateEnabled","audioTrack","selectedAudioTrack","textTrack","selectedTextTrack","oldState","newState","State","BUFFERING","viewEventsEnabled","delta","playbackRate","playerVersion","_getPosition","_getDeliveryType","_getPlaybackType","applicationVersion","sources","startTime","streamType","StreamType","PROGRESSIVE","isDvr","dvrThreshold","_logMissingParam","missingParam","_updateTabModeInModel","hiddenAttr","document","visibilityChangeEventName","hidden","msHidden","webkitHidden","copyDeep","BasePlugin","Http","protocol","VERSION","__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 i}));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 i=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(i,\"Severity\",{RECOVERABLE:1,CRITICAL:2}),o(i,\"Category\",{NETWORK:1,SERVICE:2,PROVIDER:3}),o(i,\"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(i,\"_logger\",Object(n.a)(\"Error\"))},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return i}));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 i=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{trace:function(){},debug:function(){},info:function(){},log:function(){},warn:function(){},error:function(){},time:function(){},timeEnd:function(){},getLevel:function(){},setLevel:function(){}}}};function o(e){return n.get(e)}t.a=o},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return i}));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},i=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 i=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 a(e.code,e.message)):e.error&&\"KalturaAPIException\"===e.error.objectType?(this.hasError=!0,this.error=new a(e.error.code,e.error.message)):this.data=e},a=function(e,t){this.code=e,this.message=t},s=r(0);function c(e){if(void 0===e)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return e}function u(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 u(c(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(){var e=this;return new Promise((function(t,r){try{e.params=JSON.stringify(e.params)}catch(t){n._logger.error(\"\"+t.message),r(new s.a(s.a.Severity.CRITICAL,s.a.Category.PROVIDER,s.a.Code.FAILED_PARSING_REQUEST,{error:t,params:e.params}))}e.doHttpRequest().then((function(n){var o=new l(n);o.success?t({headers:e.responseHeaders,response:o}):r(new s.a(s.a.Severity.CRITICAL,s.a.Category.NETWORK,s.a.Code.MULTIREQUEST_API_ERROR,{url:e.url,headers:e.responseHeaders,results:o.results}))}),(function(e){r(e)}))}))},n}(n.a);u(f,\"_logger\",Object(o.a)(\"MultiRequestBuilder\"));var l=function e(t){var r=this;u(this,\"results\",[]),this.success=!0,(t.result?t.result:t).forEach((function(t){var n=new i(t);if(r.results.push(n),n.hasError)return e._logger.error(\"Service returned an error with error code: \"+n.error.code+\" and message: \"+n.error.message+\".\"),void(r.success=!1)}))};u(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(i,a){var s,c,u;if(i)if(n(a))for(s=0,c=a.length;s<c;s++)r.test(i)?o(i,a[s]):e(i+\":\"+(\"object\"==typeof a[s]?s:\"\"),a[s]);else if(a&&\"[object Object]\"===String(a))for(u in a)e(i+\":\"+u,a[u]);else o(i,a);else if(n(a))for(s=0,c=a.length;s<c;s++)o(a[s].name,a[s].value);else for(u in a)e(u,a[u]);return t}(\"\",e).join(\"&\").replace(/%20/g,\"+\")}},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return i}));var n=r(5),o=r(3),i=function(){function e(){}return e.getMultiRequest=function(e,t,r){var i=o.a.get(),a=i.serviceParams;Object.assign(a,{ks:t,clientTag:\"html5:v\"+e}),r&&Object.assign(a,{partnerId:r});var s=new Map;s.set(\"Content-Type\",\"application/json\");var c=new n.a(s);return c.method=\"POST\",c.service=\"multirequest\",c.url=c.getUrl(i.serviceUrl),c.params=a,c},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 c})),r.d(t,\"VERSION\",(function(){return u}));var n=r(1),o=r(3),i=r(7),a=r(6);var s=function(e){var t,r;function i(){return e.apply(this,arguments)||this}return r=e,(t=i).prototype=Object.create(r.prototype),t.prototype.constructor=t,t.__proto__=r,i.trackEvent=function(e,t,r){return\"POST\"===r?i._trackEventByPOST(e,t):i._trackEventByGET(e,t)},i._trackEventByGET=function(e,t){var r=o.a.get(),i={};Object.assign(i,r.serviceParams,t);var s=new n.a;return s.service=\"analytics\",s.action=\"trackEvent\",s.method=\"GET\",s.tag=\"analytics-trackEvent\",s.params=i,s.url=e+\"?service=\"+s.service+\"&action=\"+s.action+\"&\"+Object(a.a)(s.params),s},i._trackEventByPOST=function(e,t){var r=o.a.get(),i={};Object.assign(i,r.serviceParams,t);var s=new Map;s.set(\"Content-Type\",\"application/json\");var c=new n.a(s),u={eventType:i.eventType,partnerId:i.partnerId,entryId:i.entryId,sessionId:i.sessionId};return[\"eventType\",\"partnerId\",\"entryId\",\"sessionId\"].forEach((function(e){return delete i[e]})),c.service=\"analytics\",c.action=\"trackEvent\",c.method=\"POST\",c.tag=\"analytics-trackEvent\",c.params=JSON.stringify(i),c.url=e+\"?service=\"+c.service+\"&action=\"+c.action+\"&\"+Object(a.a)(u),c},i}(i.a),c=\"playkit-js-providers-analytics-service\",u=\"2.24.0\"}])}));\n//# sourceMappingURL=playkit-analytics-service.js.map","// @flow\nimport {KavaModel} from './kava-model';\n\n/**\n * @name KavaEventType\n * @enum\n */\nexport const KavaEventModel: {[event: string]: KavaEvent} = {\n /**\n * @type {string} VIEW\n * @memberof KavaEventType\n */\n VIEW: {\n type: 'VIEW',\n index: 99,\n getEventModel: (model: KavaModel) => {\n const eventModel: {[name: string]: any} = {\n playTimeSum: model.getPlayTimeSum(),\n bufferTime: model.getBufferTime(),\n bufferTimeSum: model.getBufferTimeSum(),\n actualBitrate: model.getActualBitrate(),\n averageBitrate: model.getAverageBitrate(),\n audioLanguage: model.getLanguage(),\n soundMode: model.getSoundMode(),\n tabMode: model.getTabMode(),\n viewabilityMode: model.getViewabilityMode(),\n screenMode: model.getScreenMode()\n };\n\n if (!isNaN(model.getForwardBufferHealth())) {\n eventModel.forwardBufferHealth = model.getForwardBufferHealth();\n }\n if (model.getMaxManifestDownloadTime() > 0) {\n eventModel.manifestDownloadTime = model.getMaxManifestDownloadTime();\n }\n if (model.getSegmentDownloadTime() > 0) {\n eventModel.segmentDownloadTime = model.getSegmentDownloadTime();\n }\n if (model.getBandwidth()) {\n eventModel.bandwidth = model.getBandwidth();\n }\n if (model.getDroppedFramesRatio() != null) {\n eventModel.droppedFramesRatio = model.getDroppedFramesRatio();\n }\n\n if (!isNaN(model.getTargetBuffer())) {\n eventModel.targetBuffer = model.getTargetBuffer();\n }\n\n if (model.getNetworkConnectionType() !== '') {\n eventModel.networkConnectionType = model.getNetworkConnectionType();\n }\n\n if (model.getNetworkConnectionOverhead()) {\n eventModel.networkConnectionOverhead = model.getNetworkConnectionOverhead();\n }\n if (!isNaN(model.getFlavorParamsId())) {\n eventModel.flavorParamsId = model.getFlavorParamsId();\n }\n\n return eventModel;\n }\n },\n /**\n * @type {string} IMPRESSION\n * @memberof KavaEventType\n */\n IMPRESSION: {\n type: 'IMPRESSION',\n index: 1,\n getEventModel: (model: KavaModel) => {\n const eventModel = {};\n if (model.getPlayerJSLoadTime() != null) {\n eventModel.playerJSLoadTime = model.getPlayerJSLoadTime();\n }\n return eventModel;\n }\n },\n /**\n * @type {string} PLAY_REQUEST\n * @memberof KavaEventType\n */\n PLAY_REQUEST: {\n type: 'PLAY_REQUEST',\n index: 2,\n getEventModel: () => ({})\n },\n /**\n * @type {string} PLAY\n * @memberof KavaEventType\n */\n PLAY: {\n type: 'PLAY',\n index: 3,\n getEventModel: (model: KavaModel) => {\n const eventModel: {[name: string]: any} = {\n bufferTime: model.getBufferTime(),\n bufferTimeSum: model.getBufferTimeSum(),\n actualBitrate: model.getActualBitrate(),\n joinTime: model.getJoinTime(),\n canPlay: model.getCanPlayTime()\n };\n if (model.getNetworkConnectionType() !== '') {\n eventModel.networkConnectionType = model.getNetworkConnectionType();\n }\n return eventModel;\n }\n },\n /**\n * @type {string} RESUME\n * @memberof KavaEventType\n */\n RESUME: {\n type: 'RESUME',\n index: 4,\n getEventModel: (model: KavaModel) => ({\n bufferTime: model.getBufferTime(),\n bufferTimeSum: model.getBufferTimeSum(),\n actualBitrate: model.getActualBitrate()\n })\n },\n /**\n * @type {string} PAUSE\n * @memberof KavaEventType\n */\n PAUSE: {\n type: 'PAUSE',\n index: 33,\n getEventModel: () => ({})\n },\n /**\n * @type {string} BUFFER_START\n * @memberof KavaEventType\n */\n BUFFER_START: {\n type: 'BUFFER_START',\n index: 45,\n getEventModel: () => ({})\n },\n /**\n * @type {string} BUFFER_END\n * @memberof KavaEventType\n */\n BUFFER_END: {\n type: 'BUFFER_END',\n index: 46,\n getEventModel: () => ({})\n },\n /**\n * @type {string} REPLAY\n * @memberof KavaEventType\n */\n REPLAY: {\n type: 'REPLAY',\n index: 34,\n getEventModel: () => ({})\n },\n /**\n * @type {string} SEEK\n * @memberof KavaEventType\n */\n SEEK: {\n type: 'SEEK',\n index: 35,\n getEventModel: (model: KavaModel) => ({\n targetPosition: model.getTargetPosition()\n })\n },\n /**\n * @type {string} PLAY_REACHED_25_PERCENT\n * @memberof KavaEventType\n */\n PLAY_REACHED_25_PERCENT: {\n type: 'PLAY_REACHED_25_PERCENT',\n index: 11,\n getEventModel: () => ({})\n },\n /**\n * @type {string} PLAY_REACHED_50_PERCENT\n * @memberof KavaEventType\n */\n PLAY_REACHED_50_PERCENT: {\n type: 'PLAY_REACHED_50_PERCENT',\n index: 12,\n getEventModel: () => ({})\n },\n /**\n * @type {string} PLAY_REACHED_75_PERCENT\n * @memberof KavaEventType\n */\n PLAY_REACHED_75_PERCENT: {\n type: 'PLAY_REACHED_75_PERCENT',\n index: 13,\n getEventModel: () => ({})\n },\n /**\n * @type {string} PLAY_REACHED_100_PERCENT\n * @memberof KavaEventType\n */\n PLAY_REACHED_100_PERCENT: {\n type: 'PLAY_REACHED_100_PERCENT',\n index: 14,\n getEventModel: () => ({})\n },\n /**\n * @type {string} SOURCE_SELECTED\n * @memberof KavaEventType\n */\n SOURCE_SELECTED: {\n type: 'SOURCE_SELECTED',\n index: 39,\n getEventModel: (model: KavaModel) => ({\n actualBitrate: model.getActualBitrate()\n })\n },\n /**\n * @type {string} AUDIO_SELECTED\n * @memberof KavaEventType\n */\n AUDIO_SELECTED: {\n type: 'AUDIO_SELECTED',\n index: 42,\n getEventModel: (model: KavaModel) => ({\n language: model.getLanguage()\n })\n },\n /**\n * @type {string} FLAVOR_SWITCH\n * @memberof KavaEventType\n */\n FLAVOR_SWITCH: {\n type: 'FLAVOR_SWITCH',\n index: 43,\n getEventModel: (model: KavaModel) => ({\n actualBitrate: model.getActualBitrate()\n })\n },\n /**\n * @type {string} SPEED\n * @memberof KavaEventType\n */\n SPEED: {\n type: 'SPEED',\n index: 41,\n getEventModel: () => ({})\n },\n /**\n * @type {string} CAPTIONS\n * @memberof KavaEventType\n */\n CAPTIONS: {\n type: 'CAPTIONS',\n index: 38,\n getEventModel: () => ({})\n },\n /**\n * @type {string} ERROR\n * @memberof KavaEventType\n */\n ERROR: {\n type: 'ERROR',\n index: 98,\n getEventModel: (model: KavaModel) => ({\n errorCode: model.getErrorCode(),\n errorDetails: model.getErrorDetails(),\n errorPosition: model.getErrorPosition()\n })\n }\n};\n\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.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 getUserId: Function;\n getCanPlayTime: Function;\n getPersistentSessionId: Function;\n\n constructor(model?: Object) {\n if (model) {\n this.updateModel(model);\n }\n }\n\n /**\n * Gets the total play time.\n * @returns {number} - The play time sum.\n * @memberof KavaModel\n * @instance\n */\n getPlayTimeSum(): number {\n return this.playTimeSum;\n }\n\n getCanPlayTime(): number {\n return this.canPlayTime;\n }\n\n /**\n * Gets the buffer time.\n * @returns {number} - The buffer time.\n * @memberof KavaModel\n * @instance\n */\n getBufferTime(): number {\n return this.bufferTime;\n }\n\n /**\n * Gets the total buffer time.\n * @returns {number} - The total buffer time.\n * @memberof KavaModel\n * @instance\n */\n getBufferTimeSum(): number {\n return this.bufferTimeSum;\n }\n\n /**\n * Gets the player bundle js load duration time\n * @returns {number} - The player js load duration time\n * @memberof KavaModel\n * @instance\n */\n getPlayerJSLoadTime(): ?number {\n if (this.playerJSLoadTime) {\n return Math.round(this.playerJSLoadTime * 1000) / 1000;\n } else {\n return null;\n }\n }\n\n /**\n * Gets the join time.\n * @returns {number} - The join time.\n * @memberof KavaModel\n * @instance\n */\n getJoinTime(): number {\n return this.joinTime;\n }\n\n /**\n * Gets a target position\n * @returns {number} - The target position.\n * @memberof KavaModel\n * @instance\n */\n getTargetPosition(): number {\n return this.targetPosition;\n }\n\n /**\n * Gets the target buffer\n * @returns {number} - The target buffer in seconds.\n * @memberof KavaModel\n * @instance\n */\n getTargetBuffer(): number {\n return this.targetBuffer;\n }\n\n /**\n * Gets an audio language.\n * @returns {string} - The audio language.\n * @memberof KavaModel\n * @instance\n */\n getLanguage(): string {\n return this.language;\n }\n\n /**\n * Gets a caption language.\n * @returns {string} - The caption language.\n * @memberof KavaModel\n * @instance\n */\n getCaption(): string {\n return this.caption;\n }\n\n /**\n * Gets the average bandwidth since last report.\n * @returns {number} - The bandwidth in kbps\n * @memberof KavaModel\n * @instance\n */\n getBandwidth(): number {\n return this.totalSegmentsDownloadTime > 0 ? Math.round((this.totalSegmentsDownloadBytes * 8) / this.totalSegmentsDownloadTime) / 1000 : 0;\n }\n\n /**\n * Returns the longest manifest download time in seconds\n * @returns {number} - manifest max download time in seconds\n * @memberof KavaModel\n * @instance\n */\n getMaxManifestDownloadTime(): number {\n return this.maxManifestDownloadTime;\n }\n\n /**\n * Returns the longest segment download time in seconds\n * @returns {number} - segment max download time in seconds\n * @memberof KavaModel\n * @instance\n */\n getSegmentDownloadTime(): number {\n return this.maxSegmentDownloadTime;\n }\n\n /**\n * Gets the forward buffer health ratio.\n * @returns {number} - the ratio between the available buffer and the target buffer\n * @memberof KavaModel\n * @instance\n */\n getForwardBufferHealth(): number {\n return this.forwardBufferHealth;\n }\n /**\n * Gets the dropped frames ratio since last view event.\n * @returns {number} - dropped frames ratio since last view event\n * @memberof KavaModel\n * @instance\n */\n getDroppedFramesRatio(): ?number {\n return this.droppedFramesRatio;\n }\n\n /**\n * Gets the sound mode of the player.\n * @returns {SoundMode} the state of the sound (muted ot not)\n * @memberof KavaModel\n * @instance\n */\n getSoundMode(): $Values<typeof SoundMode> {\n return this.soundMode;\n }\n\n /**\n * Gets the viewability mode of the player.\n * @returns {ViewabilityMode} the state of the view (in-view ot not)\n * @memberof KavaModel\n * @instance\n */\n getViewabilityMode(): $Values<typeof ViewabilityMode> {\n return this.viewabilityMode;\n }\n\n /**\n * Gets the screen mode of the browser player.\n * @returns {number} the state of the full screen if is on or not.\n * @memberof KavaModel\n * @instance\n */\n getScreenMode(): $Values<typeof ScreenMode> {\n return this.screenMode;\n }\n\n /**\n * Gets the Tab mode of the browser.\n * @returns {TabMode} the state of the tab (focused or not)\n * @memberof KavaModel\n * @instance\n */\n getTabMode(): $Values<typeof TabMode> {\n return this.tabMode;\n }\n\n /**\n * Gets the effectiveType read-only property of the NetworkInformation interface (from navigator)\n * @returns {string} the effective type of the connection meaning one of 'slow-2g', '2g', '3g', or '4g'\n * @memberof KavaModel\n * @instance\n */\n getNetworkConnectionType(): string {\n return this.networkConnectionType;\n }\n\n /**\n * Gets the max dns+ssl+tcp resolving time over all video segments\n * @returns {number} max dns+ssl+tcp in seconds\n * @memberof KavaModel\n * @instance\n */\n getNetworkConnectionOverhead(): number {\n // convert ms to seconds in 0.xxx format\n return Math.round(this.maxNetworkConnectionOverhead) / 1000;\n }\n\n /**\n * Gets the error code.\n * @returns {number} - The error code.\n * @memberof KavaModel\n * @instance\n */\n getErrorCode(): number {\n return this.errorCode;\n }\n\n /**\n * Gets the flavor id from ID3 tag in the packager\n * @returns {number} - The flavor id.\n * @memberof KavaModel\n * @instance\n */\n getFlavorParamsId(): number {\n return this.flavorParamsId;\n }\n\n /**\n * Gets the error additional data.\n * @returns {string} - The stringifyed error data.\n * @memberof KavaModel\n * @instance\n */\n getErrorDetails(): string {\n let retVal: string = '';\n if (this.errorDetails) {\n try {\n retVal = JSON.stringify(this.errorDetails);\n } catch (e) {\n // do nothing\n }\n }\n return retVal;\n }\n\n /**\n * Gets the event index counter.\n * @returns {number} - The event index counter.\n * @memberof KavaModel\n * @instance\n */\n getEventIndex(): number {\n return this.eventIndex;\n }\n\n /**\n * Gets the error position (start or mid playing)\n * @returns {number} - The error position - 1 for pre playing, 2 for mid stream error\n * @memberof KavaModel\n * @instance\n */\n getErrorPosition(): $Values<typeof ErrorPosition> {\n return this.errorPosition;\n }\n\n /**\n * Gets the session start time.\n * @returns {number} - The session start time.\n * @memberof KavaModel\n * @instance\n */\n getSessionStartTime(): number {\n return this.sessionStartTime;\n }\n\n /**\n * Updates the model.\n * @param {Object} obj - A partial or full updated model.\n * @returns {void}\n * @memberof KavaModel\n * @instance\n */\n updateModel(obj: Object): void {\n Object.assign(this, obj);\n }\n\n /**\n * Gets the model for a certain event.\n * @param {KavaEvent} eventObj - The event object.\n * @returns {Object} - The event model.\n * @memberof KavaModel\n * @instance\n */\n getModel(eventObj: KavaEvent): Object {\n return getEventModel(eventObj, this);\n }\n}\n\nconst SoundMode = {\n SOUND_OFF: 1,\n SOUND_ON: 2\n};\n\nconst ViewabilityMode = {\n NOT_IN_VIEW: 1,\n IN_VIEW: 2\n};\n\nconst TabMode = {\n TAB_NOT_FOCUSED: 1,\n TAB_FOCUSED: 2\n};\n\nconst ScreenMode = {\n NOT_IN_FULLSCREEN: 1,\n FULLSCREEN: 2\n};\n\nconst ErrorPosition = {\n PRE_PLAY: 3,\n PRE_PLAYING: 1,\n MID_STREAM: 2\n};\n\nexport {KavaModel, SoundMode, TabMode, ErrorPosition, ScreenMode, ViewabilityMode};\n","// @flow\n\n/**\n * Manage the video rates for the KAVA plugin.\n * @private\n * @class KavaRateHandler\n */\nclass KavaRateHandler {\n _rates: Array<Object> = [];\n\n constructor() {\n this._rates = [];\n }\n\n /**\n * Sets the video rates.\n * @param {Array<number>} rates - The video rates.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n setRates(rates: Array<number>): void {\n this._rates = [];\n rates.forEach(rate => {\n this._rates.push({\n rate: rate,\n active: false,\n duration: 0\n });\n });\n }\n\n /**\n * Sets the current rate.\n * @param {number} rate - The current rate.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n setCurrent(rate: number): void {\n this._rates.forEach(o => (o.active = false));\n const obj = this._rates.find(o => o.rate === rate);\n if (obj) {\n obj.active = true;\n }\n }\n\n /**\n * Gets the current rate.\n * @returns {number} - The current rate.\n * @memberof KavaRateHandler\n * @instance\n */\n getCurrent(): number {\n const current = this._rates.find(o => o.active);\n return current ? current.rate : -1;\n }\n\n /**\n * Increases the duration of the current rate.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n countCurrent(): void {\n const current = this._rates.find(o => o.active);\n if (current) {\n current.duration++;\n }\n }\n\n /**\n * Gets the average rate.\n * @returns {number} - The average rate.\n * @memberof KavaRateHandler\n * @instance\n */\n getAverage(): number {\n let totalDuration = 0;\n let sum = 0;\n this._rates.forEach(o => {\n sum += o.rate * o.duration;\n totalDuration += o.duration;\n });\n return totalDuration ? sum / totalDuration : 0;\n }\n\n /**\n * Resets the duration of all rates.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n reset(): void {\n this._rates.forEach(o => (o.duration = 0));\n }\n\n /**\n * Destroys the class.\n * @returns {void}\n * @memberof KavaRateHandler\n * @instance\n */\n destroy(): void {\n this._rates = [];\n }\n}\n\nexport {KavaRateHandler};\n","// @flow\nimport {core} from 'kaltura-player-js';\nconst {FakeEvent, FakeEventTarget} = core;\n\nconst SECOND: number = 1000;\n\n/**\n * Mange a timer and dispatches related events.\n * @private\n * @class KavaTimer\n * @param {Object} config - The timer config.\n */\nclass KavaTimer extends FakeEventTarget {\n _resetCounter: number;\n _eventCounter: number;\n _intervalId: ?IntervalID;\n _stopped: boolean;\n _config: Object;\n\n static Event = {\n TICK: 'tick',\n RESET: 'reset',\n REPORT: 'report'\n };\n\n constructor(config: Object) {\n super();\n this._config = config;\n }\n\n /**\n * Starts the timer interval.\n * @returns {void}\n * @memberof KavaTimer\n * @instance\n */\n start(): void {\n this._clearTimeout();\n this._stopped = false;\n this._resetCounter = 0;\n this._eventCounter = 0;\n this._intervalId = setInterval(() => this._monitor(), SECOND);\n }\n\n /**\n * Continues the timer to dispatch REPORT.\n * @returns {void}\n * @memberof KavaTimer\n * @instance\n */\n resume(): void {\n this._stopped = false;\n this._resetCounter = 0;\n }\n\n /**\n * Stops the timer from dispatch REPORT and starts the timer to dispatch RESET.\n * @returns {void}\n * @memberof KavaTimer\n * @instance\n */\n stop(): void {\n this._stopped = true;\n }\n\n /**\n * @returns {boolean} - Whether the timer is stopped.\n * @memberof KavaTimer\n * @instance\n */\n isStopped(): boolean {\n return this._stopped;\n }\n\n /**\n * Destroys the timer.\n * @returns {void}\n * @memberof KavaTimer\n * @instance\n */\n destroy(): void {\n this._clearTimeout();\n }\n\n _clearTimeout(): void {\n if (this._intervalId) {\n clearInterval(this._intervalId);\n this._intervalId = null;\n }\n }\n\n _monitor(): void {\n if (this._stopped) {\n if (this._resetCounter === this._config.resetCounter) {\n this.dispatchEvent(new FakeEvent(KavaTimer.Event.RESET));\n this._resetCounter = 0;\n this._eventCounter = 0;\n }\n this._resetCounter++;\n } else {\n this.dispatchEvent(new FakeEvent(KavaTimer.Event.TICK));\n if (this._eventCounter === this._config.eventCounter) {\n this.dispatchEvent(new FakeEvent(KavaTimer.Event.REPORT));\n this._eventCounter = 0;\n }\n this._eventCounter++;\n }\n }\n}\n\nexport {KavaTimer};\n","// @flow\nconst HttpMethodType: KavaHttpMethodType = {\n GET: 'GET',\n POST: 'POST'\n};\n\nexport {HttpMethodType};\n","// @flow\nimport {core, BasePlugin} from 'kaltura-player-js';\nimport {OVPAnalyticsService} from 'playkit-js-providers/dist/playkit-analytics-service';\nimport {KavaEventModel, KavaEventType} from './kava-event-model';\nimport {KavaRateHandler} from './kava-rate-handler';\nimport {KavaTimer} from './kava-timer';\nimport {ErrorPosition, KavaModel, SoundMode, TabMode, ScreenMode, ViewabilityMode} from './kava-model';\nimport {HttpMethodType} from './http-method-type';\n\nconst {Error: PKError, FakeEvent, Utils} = core;\nconst DIVIDER: number = 1024;\nconst TEXT_TYPE: string = 'TEXT';\n/**\n * Kaltura Advanced Analytics plugin.\n * @class Kava\n * @param {string} name - The plugin name.\n * @param {Player} player - The player instance.\n * @param {KavaConfigObject} config - The plugin config.\n */\nclass Kava extends BasePlugin {\n _model: KavaModel;\n _timer: KavaTimer;\n _rateHandler: KavaRateHandler;\n _viewEventEnabled: boolean;\n _firstPlayRequestTime: number;\n _bufferStartTime: number;\n _previousCurrentTime: number;\n _isFirstPlay: boolean;\n _isFirstPlaying: boolean;\n _isEnded: boolean;\n _isPaused: boolean;\n _isBuffering: boolean;\n _timePercentEvent: {[time: string]: boolean};\n _isPlaying: boolean;\n _loadStartTime: number;\n _lastDroppedFrames: number = 0;\n _lastTotalFrames: number = 0;\n _performanceObserver: window.PerformanceObserver;\n _performanceEntries: window.PerformanceEntry[] = [];\n _pendingFragLoadedUrls: string[] = [];\n _fragLoadedFiredOnce: boolean = false;\n _canPlayOccured: boolean = false;\n _isManualPreload: boolean = false;\n\n /**\n * Default config of the plugin.\n * @type {Object}\n * @static\n * @memberof Kava\n */\n static defaultConfig: Object = {\n serviceUrl: `${Utils.Http.protocol}//analytics.kaltura.com/api_v3/index.php`,\n requestMethod: HttpMethodType.GET,\n viewEventCountdown: 10,\n resetSessionCountdown: 30,\n dvrThreshold: 120,\n playbackContext: '',\n applicationVersion: ''\n };\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 ? ViewabilityMode.IN_VIEW : ViewabilityMode.NOT_IN_VIEW\n });\n }\n\n _handleNewPerformanceEntries(list: window.PerformanceObserverEntryList) {\n let perfEntries = list.getEntries();\n for (let i = 0; i < perfEntries.length; i++) {\n this._performanceEntries.push(perfEntries[i]);\n }\n while (this._pendingFragLoadedUrls.length) {\n // handle frag loaded events which haven't been added to the entry list yet\n this._handleFragPerformanceObserver(this._pendingFragLoadedUrls.pop());\n }\n }\n\n /**\n * Destroys the plugin.\n * @return {void}\n * @memberof Kava\n * @instance\n */\n destroy(): void {\n this.eventManager.destroy();\n this._reset();\n }\n\n _reset(): void {\n this._timer.destroy();\n this._rateHandler.destroy();\n if (this._performanceObserver) {\n this._performanceObserver.disconnect();\n }\n this._performanceEntries = [];\n this._pendingFragLoadedUrls = [];\n }\n\n /**\n * Reset the plugin.\n * @return {void}\n * @memberof Kava\n * @instance\n */\n reset(): void {\n this.eventManager.removeAll();\n this._resetFlags();\n this._addBindings();\n this._model.updateModel({\n eventIndex: 1,\n bufferTime: 0.0,\n bufferTimeSum: 0.0,\n playTimeSum: 0.0,\n sessionStartTime: null\n });\n this._reset();\n }\n\n /**\n * loadMedia of the plugin.\n * @return {void}\n * @memberof Kava\n * @instance\n */\n loadMedia(): void {\n if (window.PerformanceObserver) {\n this._performanceObserver = new window.PerformanceObserver(this._handleNewPerformanceEntries.bind(this));\n this._performanceObserver.observe({entryTypes: ['resource']});\n }\n }\n\n /**\n * Gets the model object for a certain event.\n * @param {string} event - Event name.\n * @returns {Object} - Model object.\n * @instance\n * @memberof Kava\n * @example\n * const kava = player.plugins.kava;\n * const viewModel = kava.getEventModel(kava.EventType.VIEW);\n * kava.sendAnalytics(viewModel);\n */\n getEventModel(event: string): ?Object {\n if (event) {\n return this._model.getModel(KavaEventModel[event]);\n }\n }\n\n /**\n * @returns {KavaEventType} - The kava events list.\n * @instance\n * @memberof Kava\n */\n get EventType(): {[event: string]: string} {\n return Utils.Object.copyDeep(KavaEventType);\n }\n\n /**\n * Sends KAVA analytics event to analytics service.\n * @param {Object} model - Event model.\n * @returns {Promise} - Promise to indicate request succeed or failed.\n * @instance\n * @memberof Kava\n * @example\n * player.plugins.kava.sendAnalytics({...})\n * .then(() => {\n * console.log('kava analytics sent successfully');\n * })\n * .catch(e => {\n * console.log('kava analytics send failed', e);\n * });\n */\n sendAnalytics(model: Object): Promise<*> {\n return new Promise((resolve, reject) => {\n OVPAnalyticsService.trackEvent(this.config.serviceUrl, model, this.config.requestMethod)\n .doHttpRequest()\n .then(\n response => {\n this._handleServerResponseSuccess(response, model);\n resolve();\n },\n err => {\n this._handleServerResponseFailed(err, model);\n reject(err);\n }\n );\n this._model.updateModel({eventIndex: this._model.getEventIndex() + 1});\n });\n }\n\n _resetFlags(): void {\n this._previousCurrentTime = 0;\n this._isPlaying = false;\n this._isFirstPlay = true;\n this._isFirstPlaying = true;\n this._isEnded = false;\n this._isPaused = false;\n this._isBuffering = false;\n this._timePercentEvent = {\n PLAY_REACHED_25_PERCENT: false,\n PLAY_REACHED_50_PERCENT: false,\n PLAY_REACHED_75_PERCENT: false,\n PLAY_REACHED_100_PERCENT: false\n };\n this._canPlayOccured = false;\n this._isManualPreload = false;\n }\n\n _resetSession(): void {\n this.logger.debug('Reset KAVA session');\n this._rateHandler.reset();\n this._model.updateModel({\n eventIndex: 1,\n bufferTimeSum: 0.0,\n playTimeSum: 0.0\n });\n }\n\n _sendAnalytics(eventObj: KavaEvent): void {\n if (!this._validate()) {\n return;\n }\n if (this._isBuffering) {\n this._updateBufferModel();\n this._bufferStartTime = Date.now();\n }\n const model = this._model.getModel(eventObj);\n if (typeof this.config.tamperAnalyticsHandler === 'function') {\n const sendRequest = this.config.tamperAnalyticsHandler(model);\n if (!sendRequest) {\n this.logger.debug('Cancel KAVA request', model);\n return;\n }\n }\n this.logger.debug(`Sending KAVA event ${model.eventType}:${eventObj.type}`);\n this.sendAnalytics(model).catch(() => {});\n }\n\n _handleServerResponseSuccess(response: Object, model: Object): void {\n this.logger.debug(`KAVA event sent`, model);\n this._updateSessionStartTimeModel(response);\n }\n\n _handleServerResponseFailed(err: Object, model: Object): void {\n this.logger.warn(`Failed to send KAVA event`, model, err);\n }\n\n _addBindings(): void {\n this.eventManager.listen(this._timer, KavaTimer.Event.TICK, () => this._rateHandler.countCurrent());\n this.eventManager.listen(this._timer, KavaTimer.Event.REPORT, () => this._onReport());\n this.eventManager.listen(this._timer, KavaTimer.Event.RESET, () => this._resetSession());\n this.eventManager.listen(this.player, this.player.Event.SOURCE_SELECTED, () => this._onSourceSelected());\n this.eventManager.listen(this.player, this.player.Event.ERROR, event => this._onError(event));\n this.eventManager.listen(this.player, this.player.Event.FIRST_PLAY, () => this._onFirstPlay());\n this.eventManager.listen(this.player, this.player.Event.FRAG_LOADED, event => this._onFragLoaded(event));\n this.eventManager.listen(this.player, this.player.Event.MANIFEST_LOADED, event => this._onManifestLoaded(event));\n this.eventManager.listen(this.player, this.player.Event.TIMED_METADATA, event => this._onTimedMetadataLoaded(event));\n this.eventManager.listen(this.player, this.player.Event.TRACKS_CHANGED, () => this._setInitialTracks());\n this.eventManager.listen(this.player, this.player.Event.PLAYING, () => this._onPlaying());\n this.eventManager.listen(this.player, this.player.Event.FIRST_PLAYING, () => this._onFirstPlaying());\n this.eventManager.listen(this.player, this.player.Event.SEEKING, () => this._onSeeking());\n this.eventManager.listen(this.player, this.player.Event.PAUSE, () => this._onPause());\n this.eventManager.listen(this.player, this.player.Event.ENDED, () => this._onEnded());\n this.eventManager.listen(this.player, this.player.Event.TIME_UPDATE, () => this._onTimeUpdate());\n this.eventManager.listen(this.player, this.player.Event.VIDEO_TRACK_CHANGED, event => this._onVideoTrackChanged(event));\n this.eventManager.listen(this.player, this.player.Event.AUDIO_TRACK_CHANGED, event => this._onAudioTrackChanged(event));\n this.eventManager.listen(this.player, this.player.Event.TEXT_TRACK_CHANGED, event => this._onTextTrackChanged(event));\n this.eventManager.listen(this.player, this.player.Event.PLAYER_STATE_CHANGED, event => this._onPlayerStateChanged(event));\n this.eventManager.listen(this.player, this.player.Event.RATE_CHANGE, () => this._onPlaybackRateChanged());\n this.eventManager.listen(this.player, this.player.Event.CAN_PLAY, () => this._onCanPlay());\n this.eventManager.listen(this.player, this.player.Event.LOAD_START, () => this._onLoadStart());\n this.eventManager.listen(this.player, this.player.Event.VOLUME_CHANGE, () => this._updateSoundModeInModel());\n this.eventManager.listen(this.player, this.player.Event.VISIBILITY_CHANGE, e => this._updateViewabilityModeInModel(e.payload.visible));\n this.eventManager.listen(this.player, this.player.Event.MUTE_CHANGE, () => this._updateSoundModeInModel());\n this.eventManager.listen(this.player, this.player.Event.ENTER_FULLSCREEN, () => this._model.updateModel({screenMode: ScreenMode.FULLSCREEN}));\n this.eventManager.listen(this.player, this.player.Event.EXIT_FULLSCREEN, () =>\n this._model.updateModel({screenMode: ScreenMode.NOT_IN_FULLSCREEN})\n );\n this._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 this._timer.start();\n this._isFirstPlaying = false;\n const playRequestStartTime =\n this.player.config.playback.preload === 'auto' || this._isManualPreload ? this._firstPlayRequestTime : this._loadStartTime;\n this._model.updateModel({\n joinTime: Kava._getTimeDifferenceInSeconds(playRequestStartTime)\n });\n this._sendAnalytics(KavaEventModel.PLAY);\n this._onReport();\n } else if (this._isEnded) {\n this._timer.start();\n this._isEnded = false;\n this._sendAnalytics(KavaEventModel.REPLAY);\n } else if (this._isPaused) {\n this._timer.resume();\n this._isPaused = false;\n this._sendAnalytics(KavaEventModel.RESUME);\n }\n }\n\n _onCanPlay(): void {\n this._canPlayOccured = true;\n this._model.updateModel({\n canPlayTime: Kava._getTimeDifferenceInSeconds(this._loadStartTime)\n });\n }\n\n _onFirstPlay(): void {\n if (this._canPlayOccured) {\n this._isManualPreload = true;\n }\n this._isFirstPlay = false;\n this._firstPlayRequestTime = Date.now();\n this._sendAnalytics(KavaEventModel.PLAY_REQUEST);\n }\n\n _onSourceSelected(): void {\n this._sendAnalytics(KavaEventModel.IMPRESSION);\n }\n\n _onSeeking(): void {\n this._previousCurrentTime = this.player.currentTime;\n this._model.updateModel({targetPosition: this.player.currentTime});\n this._sendAnalytics(KavaEventModel.SEEK);\n }\n\n _onPause(): void {\n this._isPaused = true;\n this._timer.stop();\n this._sendAnalytics(KavaEventModel.PAUSE);\n }\n\n _onEnded(): void {\n this._isEnded = true;\n this._onTimeUpdate();\n this._model.updateModel({bufferTime: 0});\n }\n\n _onTimeUpdate(): void {\n if (!this.player.isLive()) {\n this._updatePlayTimeSumModel();\n const percent = parseFloat((this.player.currentTime / this.player.duration).toFixed(2));\n if (!this._timePercentEvent.PLAY_REACHED_25 && percent >= 0.25) {\n this._timePercentEvent.PLAY_REACHED_25 = true;\n this._sendAnalytics(KavaEventModel.PLAY_REACHED_25_PERCENT);\n }\n if (!this._timePercentEvent.PLAY_REACHED_50 && percent >= 0.5) {\n this._timePercentEvent.PLAY_REACHED_50 = true;\n this._sendAnalytics(KavaEventModel.PLAY_REACHED_50_PERCENT);\n }\n if (!this._timePercentEvent.PLAY_REACHED_75 && percent >= 0.75) {\n this._timePercentEvent.PLAY_REACHED_75 = true;\n this._sendAnalytics(KavaEventModel.PLAY_REACHED_75_PERCENT);\n }\n if (!this._timePercentEvent.PLAY_REACHED_100 && percent === 1) {\n this._timePercentEvent.PLAY_REACHED_100 = true;\n this._sendAnalytics(KavaEventModel.PLAY_REACHED_100_PERCENT);\n }\n }\n }\n\n _onFragLoaded(event: FakeEvent): void {\n if (!this._fragLoadedFiredOnce) {\n this._fragLoadedFiredOnce = true;\n }\n this._updateFragLoadedStats(event);\n if (this._performanceObserver) {\n const succHandle = this._handleFragPerformanceObserver(event.payload.url);\n if (!succHandle) {\n this._pendingFragLoadedUrls.push(event.payload.url);\n }\n }\n }\n\n _handleFragPerformanceObserver(url: string): boolean {\n const fragResourceTimings = this._performanceEntries.filter(entry => entry.name == url);\n const lastFragResourceTiming: ?Object =\n fragResourceTimings && fragResourceTimings.length ? fragResourceTimings[fragResourceTimings.length - 1] : null;\n if (lastFragResourceTiming) {\n this._updateMaxNetworkConnectionOverhead(lastFragResourceTiming.connectEnd - lastFragResourceTiming.domainLookupStart);\n const lastIndexOftheFragment: number = this._performanceEntries.indexOf(lastFragResourceTiming);\n if (lastIndexOftheFragment > -1 && lastIndexOftheFragment < this._performanceEntries.length) {\n this._performanceEntries = this._performanceEntries.splice(\n lastIndexOftheFragment + 1,\n this._performanceEntries.length - (lastIndexOftheFragment + 1)\n );\n }\n return true;\n } else {\n return false;\n }\n }\n\n _updateMaxNetworkConnectionOverhead(networkConnectionOverhead: number): void {\n this._model.updateModel({\n maxNetworkConnectionOverhead: Math.max(this._model.maxNetworkConnectionOverhead, networkConnectionOverhead)\n });\n }\n\n _updateFragLoadedStats(event: FakeEvent): void {\n const seconds = Math.round(event.payload.miliSeconds) / 1000;\n this._model.updateModel({\n totalSegmentsDownloadTime: this._model.totalSegmentsDownloadTime + seconds,\n totalSegmentsDownloadBytes: this._model.totalSegmentsDownloadBytes + event.payload.bytes,\n maxSegmentDownloadTime: Math.max(seconds, this._model.maxSegmentDownloadTime)\n });\n }\n\n _onManifestLoaded(event: FakeEvent): void {\n const seconds = Math.round(event.payload.miliSeconds) / 1000;\n this._model.updateModel({\n maxManifestDownloadTime: Math.max(seconds, this._model.maxManifestDownloadTime)\n });\n }\n\n _onTimedMetadataLoaded(event: FakeEvent): void {\n const id3TagCues = event.payload.cues.filter(entry => entry.value && entry.value.key === TEXT_TYPE);\n if (id3TagCues.length) {\n try {\n this._model.updateModel({flavorParamsId: Number(JSON.parse(id3TagCues[id3TagCues.length - 1].value.data).sequenceId)});\n } catch (e) {\n this.logger.debug('error parsing id3', e);\n }\n }\n }\n\n _onVideoTrackChanged(event: FakeEvent): void {\n const videoTrack = event.payload.selectedVideoTrack;\n this._rateHandler.setCurrent(videoTrack.bandwidth / DIVIDER);\n if (this.player.isAdaptiveBitrateEnabled()) {\n this._sendAnalytics(KavaEventModel.FLAVOR_SWITCH);\n } else {\n this._sendAnalytics(KavaEventModel.SOURCE_SELECTED);\n }\n }\n\n _onAudioTrackChanged(event: FakeEvent): void {\n const audioTrack = event.payload.selectedAudioTrack;\n this._model.updateModel({language: audioTrack.language});\n this._sendAnalytics(KavaEventModel.AUDIO_SELECTED);\n }\n\n _onTextTrackChanged(event: FakeEvent): void {\n if (this._isPlaying) {\n const textTrack = event.payload.selectedTextTrack;\n this._model.updateModel({caption: textTrack.language});\n this._sendAnalytics(KavaEventModel.CAPTIONS);\n }\n }\n\n _onError(event: FakeEvent): void {\n if (event.payload && event.payload.severity === PKError.Severity.CRITICAL) {\n this._model.updateModel({\n errorCode: event.payload.code,\n errorDetails: event.payload.data,\n errorPosition: this._isFirstPlay ? ErrorPosition.PRE_PLAY : this._isFirstPlaying ? ErrorPosition.PRE_PLAYING : ErrorPosition.MID_STREAM\n });\n this._sendAnalytics(KavaEventModel.ERROR);\n this.reset();\n }\n }\n\n _onPlaybackRateChanged(): void {\n this._sendAnalytics(KavaEventModel.SPEED);\n }\n\n _onPlayerStateChanged(event: FakeEvent): void {\n const oldState = event.payload.oldState;\n const newState = event.payload.newState;\n if (oldState.type === this.player.State.BUFFERING) {\n this._isBuffering = false;\n this._updateBufferModel();\n this._sendAnalytics(KavaEventModel.BUFFER_END);\n }\n if (newState.type === this.player.State.BUFFERING) {\n this._isBuffering = true;\n this._bufferStartTime = Date.now();\n this._sendAnalytics(KavaEventModel.BUFFER_START);\n }\n }\n\n _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.getUserId = () => this.config.userId;\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 '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: document[hiddenAttr] ? TabMode.TAB_NOT_FOCUSED : TabMode.TAB_FOCUSED\n });\n }\n\n _initTabMode(): void {\n let hiddenAttr: string;\n let visibilityChangeEventName: string;\n if (typeof document.hidden !== 'undefined') {\n // Opera 12.10 and Firefox 18 and later support\n hiddenAttr = 'hidden';\n visibilityChangeEventName = 'visibilitychange';\n } else if (typeof document.msHidden !== 'undefined') {\n hiddenAttr = 'msHidden';\n visibilityChangeEventName = 'msvisibilitychange';\n } else if (typeof document.webkitHidden !== 'undefined') {\n hiddenAttr = 'webkitHidden';\n visibilityChangeEventName = 'webkitvisibilitychange';\n }\n\n if (hiddenAttr && visibilityChangeEventName) {\n this.eventManager.listen(document, visibilityChangeEventName, () => this._updateTabModeInModel(hiddenAttr));\n this._updateTabModeInModel(hiddenAttr);\n }\n }\n}\n\nexport {Kava};\n","// @flow\nimport {registerPlugin} from 'kaltura-player-js';\nimport {Kava} from './kava';\n\ndeclare var __VERSION__: string;\ndeclare var __NAME__: string;\n\nconst VERSION = __VERSION__;\nconst NAME = __NAME__;\n\nexport {Kava as Plugin};\nexport {KavaEventType as EventType} from './kava-event-model';\nexport {HttpMethodType} from './http-method-type';\nexport {VERSION, NAME};\n\nconst pluginName: string = 'kava';\n\nregisterPlugin(pluginName, Kava);\n"],"sourceRoot":""}
|