@vkontakte/videoplayer-statistics 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/OneStat.d.ts CHANGED
@@ -62,6 +62,13 @@ export interface IOneStat {
62
62
  * произошла ошибка
63
63
  */
64
64
  logError(payload: IErrorPayload): void;
65
+ logAdSlotRequest(): void;
66
+ logAdStarted(sectionType: string): void;
67
+ logAdPaused(): void;
68
+ logAdResumed(): void;
69
+ logAdEnded(): void;
70
+ logAdSkipped(): void;
71
+ logAdClicked(): void;
65
72
  experimental: {
66
73
  error$: IObservable<IError>;
67
74
  };
@@ -138,6 +145,13 @@ export declare class OneStat implements IOneStat {
138
145
  logError(payload: IErrorPayload): void;
139
146
  logWatchCoverageRecord(payload: IWatchCoveragePayload): void;
140
147
  logWatchCoverageLive(payload: IWatchCoveragePayload): void;
148
+ logAdSlotRequest(): void;
149
+ logAdStarted(sectionType: string): void;
150
+ logAdPaused(): void;
151
+ logAdResumed(): void;
152
+ logAdEnded(): void;
153
+ logAdSkipped(): void;
154
+ logAdClicked(): void;
141
155
  private log;
142
156
  private crateLogItem;
143
157
  }
package/index.cjs.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @vkontakte/videoplayer-statistics v1.0.5
3
- * Mon, 11 Oct 2021 22:35:26 GMT
2
+ * @vkontakte/videoplayer-statistics v1.0.6
3
+ * Thu, 09 Dec 2021 12:00:52 GMT
4
4
  */
5
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("@vkontakte/videoplayer-shared");function e(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var s=e(require("lodash/debounce"));function i(t,e,s,i){return new(s||(s=Promise))((function(o,r){function n(t){try{h(i.next(t))}catch(t){r(t)}}function a(t){try{h(i.throw(t))}catch(t){r(t)}}function h(t){var e;t.done?o(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(n,a)}h((i=i.apply(t,e||[])).next())}))}const o=(()=>{try{const t=Date.now().toString(),e=window.localStorage;e.setItem(t,t);const s=e.getItem(t)===t;return e.removeItem(t),s?e:null}catch(t){return null}})();var r,n,a,h,u,p={get:t=>function(t){const e=o?o.getItem("_one-stat_"+t):null;if(null===e)return null;try{return JSON.parse(e)}catch(t){return null}}(t)||null,set(t,e){!function(t,e){try{o&&o.setItem("_one-stat_"+t,JSON.stringify(e))}catch(t){}}(t,e)},remove(t){!function(t){o&&o.removeItem("_one-stat_"+t)}(t)}};exports.ApiEnv=void 0,(r=exports.ApiEnv||(exports.ApiEnv={})).PROD="prod",r.VIDEOTEST="videotest",r.TEST="test",exports.Quality=void 0,(n=exports.Quality||(exports.Quality={})).Q144P="144",n.Q240P="240",n.Q360P="360",n.Q480P="480",n.Q720P="720",n.Q1080P="1080",n.Q1440P="1440",n.Q2160P="2160",n.Q4320P="4320",n.UNKNOWN="unknown",exports.ScreenDestination=void 0,(a=exports.ScreenDestination||(exports.ScreenDestination={})).CHROMECAST="chromecast",a.APPLE_TV="appletv",a.PIP="pip",a.HEADPHONES="externalHeadphones",a.SCREEN="",exports.ContentType=void 0,(h=exports.ContentType||(exports.ContentType={})).MP4="mp4",h.DASH="dash",h.HLS="hls",h.WEBM="webm",function(t){t.AUTO="auto",t.MANUAL=""}(u||(u={}));const l={[exports.ApiEnv.PROD]:"https://api.ok.ru",[exports.ApiEnv.VIDEOTEST]:"https://videotestapi.ok.ru/api",[exports.ApiEnv.TEST]:"https://apitest.ok.ru"};var d;!function(t){t[t.PARAM_SESSION_EXPIRED=102]="PARAM_SESSION_EXPIRED",t[t.PARAM_SESSION_KEY=103]="PARAM_SESSION_KEY",t[t.PARAM_SIGNATURE=104]="PARAM_SIGNATURE",t[t.AUTH_LOGIN=401]="AUTH_LOGIN"}(d||(d={}));class c{constructor(t){this.params=t;const e=p.get("uuid");e?this.uuid=String(e):(this.uuid=function(){const t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),e=new Array(36);let s,i,o=0;for(i=0;i<36;i++)8===i||13===i||18===i||23===i?e[i]="-":14===i?e[i]="4":(o<=2&&(o=33554432+16777216*Math.random()|0),s=15&o,o>>=4,e[i]=t[19===i?3&s|8:s]);return e.join("")}(),p.set("uuid",this.uuid))}authorize(t){return i(this,void 0,void 0,(function*(){return this.authToken=null!=t?t:yield this.refreshAuthToken(),this._authorize()}))}logBeacon(t){const e="log.externalLog",s=this.createLogParams(t),i=this.sessionKey;void 0!==i&&this.params.apiTransport.sendBeacon(e,s,i)||this.params.apiTransport.sendRequest(e,s,i)}logRequest(t){var e,s;return i(this,void 0,void 0,(function*(){const i="log.externalLog",o=this.createLogParams(t),r=null!==(e=this.sessionKey)&&void 0!==e?e:yield this._authorize();try{return yield this.params.apiTransport.sendRequest(i,o,r)}catch(t){switch(null===(s=t)||void 0===s?void 0:s.error_code){case d.PARAM_SESSION_EXPIRED:case d.PARAM_SESSION_KEY:case d.PARAM_SIGNATURE:{const t=yield this._authorize();return this.params.apiTransport.sendRequest(i,o,t)}case d.AUTH_LOGIN:{this.authToken=yield this.refreshAuthToken();const t=yield this._authorizeRequest();return this.params.apiTransport.sendRequest(i,o,t)}default:throw t}}}))}refreshAuthToken(){return i(this,void 0,void 0,(function*(){if(this.params.refreshAuthToken)return this.refreshAuthTokenPromise||(this.refreshAuthTokenPromise=this.params.refreshAuthToken().finally((()=>{this.refreshAuthTokenPromise=void 0}))),this.refreshAuthTokenPromise}))}createLogParams(t){return{collector:"ok.mobile.apps.video",data:JSON.stringify({application:"@vkontakte/videoplayer-statistics:1.0.5",platform:"WEB",items:t.map((t=>Object.assign(Object.assign({},t),{time:0,type:1})))})}}_authorize(){var t;return i(this,void 0,void 0,(function*(){try{return yield this._authorizeRequest()}catch(e){switch(null===(t=e)||void 0===t?void 0:t.error_code){case d.AUTH_LOGIN:return this.authToken=yield this.refreshAuthToken(),this._authorizeRequest()}throw e}}))}_authorizeRequest(){return i(this,void 0,void 0,(function*(){if(this.authorizePromise)return this.authorizePromise;this.sessionKey=void 0;const t="auth.anonymLogin",e={session_data:{version:2,device_id:this.uuid,client_version:"1.0.5".split("-")[0],client_type:"SDK_JS"}};return void 0!==this.authToken&&(e.session_data.auth_token=this.authToken,e.session_data.version=3),this.authorizePromise=this.params.apiTransport.sendRequest(t,e).then((s=>{if(!s)throw new Error(`Empty response. Method: ${t}, params: ${JSON.stringify(e)}`);if(!s.session_key)throw new Error(`Empty 'session_key' in response. Method: ${t}, params: ${JSON.stringify(e)}, response: ${JSON.stringify(s)}`);return this.sessionKey=s.session_key,this.sessionKey})).catch((t=>{throw this.sessionKey=void 0,t})).finally((()=>{this.authorizePromise=void 0})),this.authorizePromise}))}}class m{constructor(t){this.params=t,this.apiKey=t.apiKey,this.apiBaseUrl=t.apiBaseUrl,"/"!==this.apiBaseUrl[this.apiBaseUrl.length-1]&&(this.apiBaseUrl+="/")}sendBeacon(t,e,s){if(!window.Blob||!window.navigator.sendBeacon)return!1;const i=this._prepareQueryParams({method:t,queryParams:e,sessionKey:s}),o=new window.Blob([i.toString()],{type:"application/x-www-form-urlencoded"});return window.navigator.sendBeacon(`${this.apiBaseUrl}fb.do`,o)}sendRequest(t,e,s){return i(this,void 0,void 0,(function*(){const i=Date.now(),o=o=>{throw this.params.error$.next({id:"OneStat:ApiTransport:sendRequest",message:"Unhandled request error",thrown:o,data:{method:t,params:e,sessionKey:s,time:Date.now()-i}}),o};return fetch(`${this.apiBaseUrl}fb.do`,{method:"post",headers:{"Content-type":"application/x-www-form-urlencoded"},body:this._prepareQueryParams({method:t,queryParams:e,sessionKey:s})}).then((t=>Number(t.headers.get("content-length"))>0?t.json().then((t=>Object.prototype.hasOwnProperty.call(t,"error_msg")?Promise.reject(t):t),o):void 0),o)}))}_prepareQueryParams(t){const e=new URLSearchParams({format:"JSON",method:t.method,application_key:this.apiKey});return void 0!==t.sessionKey&&e.append("session_key",t.sessionKey),Object.entries(t.queryParams).forEach((([t,s])=>e.append(t,"string"==typeof s?s:JSON.stringify(s)))),e}}class y{constructor(t){this.requestQueue=[],this.isPaused=!1,this.debouncedFlush=s.default((()=>this.flush()),3e3,{maxWait:15e3}),this.api=t.api}log(t){this.requestQueue.push(t),this.isPaused||this.debouncedFlush()}flush(t=!1){0!==this.requestQueue.length&&(t?this.api.logBeacon(this.requestQueue):this.api.logRequest(this.requestQueue),this.requestQueue=[],this.debouncedFlush.cancel())}pause(){this.isPaused=!0,this.debouncedFlush.cancel()}resume(){this.isPaused=!1,this.debouncedFlush()}}exports.OneStat=class{constructor(e,s){this.statContext=e;const i=new t.Subject;this.experimental={error$:i};const o=new m({apiKey:"CIOPGQJGDIHBABABA",apiBaseUrl:l[s.apiEnv],error$:i});this.api=new c({apiTransport:o,refreshAuthToken:s.refreshAuthToken}),this.logger=new y({api:this.api}),window.addEventListener("beforeunload",(()=>this.logger.flush(!0)))}updateContext(t){this.statContext=Object.assign(Object.assign({},this.statContext),t)}authorize(t){return this.api.authorize(t)}pause(){this.logger.pause()}resume(){this.logger.resume()}logStarted(){this.log({operation:"play"})}logPlay(){this.log({operation:"play_toggle"})}logPause(t){this.log({operation:"pause",param:String(Math.round(t.position))})}logSeek(){this.log({operation:"seek"})}logFirstBytes(t){this.log({operation:"first_bytes",param:String(t.time)})}logFirstFrame(t){this.log({operation:"first_frame",param:String(t.time)})}logError(t){this.log({operation:"error",param:t.errorType})}logWatchCoverageRecord(t){this.log({operation:"watch_coverage_record",param:`${t.start}-${t.end}`})}logWatchCoverageLive(t){this.log({operation:"watch_coverage_live",param:`${t.start}-${t.end}`})}log(t){const e=this.crateLogItem(t);this.logger.log(e)}crateLogItem({operation:t,param:e}){const s=Date.now(),i={vid:this.statContext.movieId,quality:this.statContext.quality,dst:this.statContext.destination,ct:this.statContext.contentType,aid:this.statContext.albumId,place:this.statContext.place,cdn_host:this.statContext.cdnHostname,stat_type:!0===this.statContext.autoplay?u.AUTO:!1===this.statContext.autoplay?u.MANUAL:void 0,vk_playlist_id:this.statContext.vkPlaylistId,vk_app_id:this.statContext.vkAppId};return void 0!==e&&(i.param=e),{operation:t,timestamp:s,custom:i}}};
5
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("@vkontakte/videoplayer-shared");function e(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var s=e(require("lodash/debounce"));function o(t,e,s,o){return new(s||(s=Promise))((function(i,r){function a(t){try{h(o.next(t))}catch(t){r(t)}}function n(t){try{h(o.throw(t))}catch(t){r(t)}}function h(t){var e;t.done?i(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(a,n)}h((o=o.apply(t,e||[])).next())}))}const i=(()=>{try{const t=Date.now().toString(),e=window.localStorage;e.setItem(t,t);const s=e.getItem(t)===t;return e.removeItem(t),s?e:null}catch(t){return null}})();var r,a,n,h,u,p={get:t=>function(t){const e=i?i.getItem("_one-stat_"+t):null;if(null===e)return null;try{return JSON.parse(e)}catch(t){return null}}(t)||null,set(t,e){!function(t,e){try{i&&i.setItem("_one-stat_"+t,JSON.stringify(e))}catch(t){}}(t,e)},remove(t){!function(t){i&&i.removeItem("_one-stat_"+t)}(t)}};exports.ApiEnv=void 0,(r=exports.ApiEnv||(exports.ApiEnv={})).PROD="prod",r.VIDEOTEST="videotest",r.TEST="test",exports.Quality=void 0,(a=exports.Quality||(exports.Quality={})).Q144P="144",a.Q240P="240",a.Q360P="360",a.Q480P="480",a.Q720P="720",a.Q1080P="1080",a.Q1440P="1440",a.Q2160P="2160",a.Q4320P="4320",a.UNKNOWN="unknown",exports.ScreenDestination=void 0,(n=exports.ScreenDestination||(exports.ScreenDestination={})).CHROMECAST="chromecast",n.APPLE_TV="appletv",n.PIP="pip",n.HEADPHONES="externalHeadphones",n.SCREEN="",exports.ContentType=void 0,(h=exports.ContentType||(exports.ContentType={})).MP4="mp4",h.DASH="dash",h.HLS="hls",h.WEBM="webm",function(t){t.AUTO="auto",t.MANUAL=""}(u||(u={}));const d={[exports.ApiEnv.PROD]:"https://api.ok.ru",[exports.ApiEnv.VIDEOTEST]:"https://videotestapi.ok.ru/api",[exports.ApiEnv.TEST]:"https://apitest.ok.ru"};var l;!function(t){t[t.PARAM_SESSION_EXPIRED=102]="PARAM_SESSION_EXPIRED",t[t.PARAM_SESSION_KEY=103]="PARAM_SESSION_KEY",t[t.PARAM_SIGNATURE=104]="PARAM_SIGNATURE",t[t.AUTH_LOGIN=401]="AUTH_LOGIN"}(l||(l={}));class c{constructor(t){this.params=t;const e=p.get("uuid");e?this.uuid=String(e):(this.uuid=function(){const t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),e=new Array(36);let s,o,i=0;for(o=0;o<36;o++)8===o||13===o||18===o||23===o?e[o]="-":14===o?e[o]="4":(i<=2&&(i=33554432+16777216*Math.random()|0),s=15&i,i>>=4,e[o]=t[19===o?3&s|8:s]);return e.join("")}(),p.set("uuid",this.uuid))}authorize(t){return o(this,void 0,void 0,(function*(){return this.authToken=null!=t?t:yield this.refreshAuthToken(),this._authorize()}))}logBeacon(t){const e="log.externalLog",s=this.createLogParams(t),o=this.sessionKey;void 0!==o&&this.params.apiTransport.sendBeacon(e,s,o)||this.params.apiTransport.sendRequest(e,s,o)}logRequest(t){var e,s;return o(this,void 0,void 0,(function*(){const o="log.externalLog",i=this.createLogParams(t),r=null!==(e=this.sessionKey)&&void 0!==e?e:yield this._authorize();try{return yield this.params.apiTransport.sendRequest(o,i,r)}catch(t){switch(null===(s=t)||void 0===s?void 0:s.error_code){case l.PARAM_SESSION_EXPIRED:case l.PARAM_SESSION_KEY:case l.PARAM_SIGNATURE:{const t=yield this._authorize();return this.params.apiTransport.sendRequest(o,i,t)}case l.AUTH_LOGIN:{this.authToken=yield this.refreshAuthToken();const t=yield this._authorizeRequest();return this.params.apiTransport.sendRequest(o,i,t)}default:throw t}}}))}refreshAuthToken(){return o(this,void 0,void 0,(function*(){if(this.params.refreshAuthToken)return this.refreshAuthTokenPromise||(this.refreshAuthTokenPromise=this.params.refreshAuthToken().finally((()=>{this.refreshAuthTokenPromise=void 0}))),this.refreshAuthTokenPromise}))}createLogParams(t){return{collector:"ok.mobile.apps.video",data:JSON.stringify({application:"@vkontakte/videoplayer-statistics:1.0.6",platform:"WEB",items:t.map((t=>Object.assign(Object.assign({},t),{time:0,type:1})))})}}_authorize(){var t;return o(this,void 0,void 0,(function*(){try{return yield this._authorizeRequest()}catch(e){switch(null===(t=e)||void 0===t?void 0:t.error_code){case l.AUTH_LOGIN:return this.authToken=yield this.refreshAuthToken(),this._authorizeRequest()}throw e}}))}_authorizeRequest(){return o(this,void 0,void 0,(function*(){if(this.authorizePromise)return this.authorizePromise;this.sessionKey=void 0;const t="auth.anonymLogin",e={session_data:{version:2,device_id:this.uuid,client_version:"1.0.6".split("-")[0],client_type:"SDK_JS"}};return void 0!==this.authToken&&(e.session_data.auth_token=this.authToken,e.session_data.version=3),this.authorizePromise=this.params.apiTransport.sendRequest(t,e).then((s=>{if(!s)throw new Error(`Empty response. Method: ${t}, params: ${JSON.stringify(e)}`);if(!s.session_key)throw new Error(`Empty 'session_key' in response. Method: ${t}, params: ${JSON.stringify(e)}, response: ${JSON.stringify(s)}`);return this.sessionKey=s.session_key,this.sessionKey})).catch((t=>{throw this.sessionKey=void 0,t})).finally((()=>{this.authorizePromise=void 0})),this.authorizePromise}))}}class m{constructor(t){this.params=t,this.apiKey=t.apiKey,this.apiBaseUrl=t.apiBaseUrl,"/"!==this.apiBaseUrl[this.apiBaseUrl.length-1]&&(this.apiBaseUrl+="/")}sendBeacon(t,e,s){if(!window.Blob||!window.navigator.sendBeacon)return!1;const o=this._prepareQueryParams({method:t,queryParams:e,sessionKey:s}),i=new window.Blob([o.toString()],{type:"application/x-www-form-urlencoded"});return window.navigator.sendBeacon(`${this.apiBaseUrl}fb.do`,i)}sendRequest(t,e,s){return o(this,void 0,void 0,(function*(){const o=Date.now(),i=i=>{throw this.params.error$.next({id:"OneStat:ApiTransport:sendRequest",message:"Unhandled request error",thrown:i,data:{method:t,params:e,sessionKey:s,time:Date.now()-o}}),i};return fetch(`${this.apiBaseUrl}fb.do`,{method:"post",headers:{"Content-type":"application/x-www-form-urlencoded"},body:this._prepareQueryParams({method:t,queryParams:e,sessionKey:s})}).then((t=>Number(t.headers.get("content-length"))>0?t.json().then((t=>Object.prototype.hasOwnProperty.call(t,"error_msg")?Promise.reject(t):t),i):void 0),i)}))}_prepareQueryParams(t){const e=new URLSearchParams({format:"JSON",method:t.method,application_key:this.apiKey});return void 0!==t.sessionKey&&e.append("session_key",t.sessionKey),Object.entries(t.queryParams).forEach((([t,s])=>e.append(t,"string"==typeof s?s:JSON.stringify(s)))),e}}class g{constructor(t){this.requestQueue=[],this.isPaused=!1,this.debouncedFlush=s.default((()=>this.flush()),3e3,{maxWait:15e3}),this.api=t.api}log(t){this.requestQueue.push(t),this.isPaused||this.debouncedFlush()}flush(t=!1){0!==this.requestQueue.length&&(t?this.api.logBeacon(this.requestQueue):this.api.logRequest(this.requestQueue),this.requestQueue=[],this.debouncedFlush.cancel())}pause(){this.isPaused=!0,this.debouncedFlush.cancel()}resume(){this.isPaused=!1,this.debouncedFlush()}}exports.OneStat=class{constructor(e,s){this.statContext=e;const o=new t.Subject;this.experimental={error$:o};const i=new m({apiKey:"CIOPGQJGDIHBABABA",apiBaseUrl:d[s.apiEnv],error$:o});this.api=new c({apiTransport:i,refreshAuthToken:s.refreshAuthToken}),this.logger=new g({api:this.api}),window.addEventListener("beforeunload",(()=>this.logger.flush(!0)))}updateContext(t){this.statContext=Object.assign(Object.assign({},this.statContext),t)}authorize(t){return this.api.authorize(t)}pause(){this.logger.pause()}resume(){this.logger.resume()}logStarted(){this.log({operation:"play"})}logPlay(){this.log({operation:"play_toggle"})}logPause(t){this.log({operation:"pause",param:String(Math.round(t.position))})}logSeek(){this.log({operation:"seek"})}logFirstBytes(t){this.log({operation:"first_bytes",param:String(t.time)})}logFirstFrame(t){this.log({operation:"first_frame",param:String(t.time)})}logError(t){this.log({operation:"error",param:t.errorType})}logWatchCoverageRecord(t){this.log({operation:"watch_coverage_record",param:`${t.start}-${t.end}`})}logWatchCoverageLive(t){this.log({operation:"watch_coverage_live",param:`${t.start}-${t.end}`})}logAdSlotRequest(){this.log({operation:"adv",param:"slot_request"})}logAdStarted(t){this.log({operation:"adv",param:t})}logAdPaused(){this.log({operation:"adv",param:"pause"})}logAdResumed(){this.log({operation:"adv",param:"resume"})}logAdEnded(){this.log({operation:"adv",param:"ended"})}logAdSkipped(){this.log({operation:"adv",param:"skip"})}logAdClicked(){this.log({operation:"adv",param:"click"})}log(t){const e=this.crateLogItem(t);this.logger.log(e)}crateLogItem({operation:t,param:e}){const s=Date.now(),o={vid:this.statContext.movieId,quality:this.statContext.quality,dst:this.statContext.destination,ct:this.statContext.contentType,aid:this.statContext.albumId,place:this.statContext.place,cdn_host:this.statContext.cdnHostname,stat_type:!0===this.statContext.autoplay?u.AUTO:!1===this.statContext.autoplay?u.MANUAL:void 0,vk_playlist_id:this.statContext.vkPlaylistId,vk_app_id:this.statContext.vkAppId};return void 0!==e&&(o.param=e),{operation:t,timestamp:s,custom:o}}};
package/index.esm.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @vkontakte/videoplayer-statistics v1.0.5
3
- * Mon, 11 Oct 2021 22:35:26 GMT
2
+ * @vkontakte/videoplayer-statistics v1.0.6
3
+ * Thu, 09 Dec 2021 12:00:52 GMT
4
4
  */
5
- import{Subject as t}from"@vkontakte/videoplayer-shared";import e from"lodash/debounce";function s(t,e,s,i){return new(s||(s=Promise))((function(o,r){function a(t){try{h(i.next(t))}catch(t){r(t)}}function n(t){try{h(i.throw(t))}catch(t){r(t)}}function h(t){var e;t.done?o(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(a,n)}h((i=i.apply(t,e||[])).next())}))}const i=(()=>{try{const t=Date.now().toString(),e=window.localStorage;e.setItem(t,t);const s=e.getItem(t)===t;return e.removeItem(t),s?e:null}catch(t){return null}})();var o,r,a,n,h,u={get:t=>function(t){const e=i?i.getItem("_one-stat_"+t):null;if(null===e)return null;try{return JSON.parse(e)}catch(t){return null}}(t)||null,set(t,e){!function(t,e){try{i&&i.setItem("_one-stat_"+t,JSON.stringify(e))}catch(t){}}(t,e)},remove(t){!function(t){i&&i.removeItem("_one-stat_"+t)}(t)}};!function(t){t.PROD="prod",t.VIDEOTEST="videotest",t.TEST="test"}(o||(o={})),function(t){t.Q144P="144",t.Q240P="240",t.Q360P="360",t.Q480P="480",t.Q720P="720",t.Q1080P="1080",t.Q1440P="1440",t.Q2160P="2160",t.Q4320P="4320",t.UNKNOWN="unknown"}(r||(r={})),function(t){t.CHROMECAST="chromecast",t.APPLE_TV="appletv",t.PIP="pip",t.HEADPHONES="externalHeadphones",t.SCREEN=""}(a||(a={})),function(t){t.MP4="mp4",t.DASH="dash",t.HLS="hls",t.WEBM="webm"}(n||(n={})),function(t){t.AUTO="auto",t.MANUAL=""}(h||(h={}));const p={[o.PROD]:"https://api.ok.ru",[o.VIDEOTEST]:"https://videotestapi.ok.ru/api",[o.TEST]:"https://apitest.ok.ru"};var l;!function(t){t[t.PARAM_SESSION_EXPIRED=102]="PARAM_SESSION_EXPIRED",t[t.PARAM_SESSION_KEY=103]="PARAM_SESSION_KEY",t[t.PARAM_SIGNATURE=104]="PARAM_SIGNATURE",t[t.AUTH_LOGIN=401]="AUTH_LOGIN"}(l||(l={}));class c{constructor(t){this.params=t;const e=u.get("uuid");e?this.uuid=String(e):(this.uuid=function(){const t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),e=new Array(36);let s,i,o=0;for(i=0;i<36;i++)8===i||13===i||18===i||23===i?e[i]="-":14===i?e[i]="4":(o<=2&&(o=33554432+16777216*Math.random()|0),s=15&o,o>>=4,e[i]=t[19===i?3&s|8:s]);return e.join("")}(),u.set("uuid",this.uuid))}authorize(t){return s(this,void 0,void 0,(function*(){return this.authToken=null!=t?t:yield this.refreshAuthToken(),this._authorize()}))}logBeacon(t){const e="log.externalLog",s=this.createLogParams(t),i=this.sessionKey;void 0!==i&&this.params.apiTransport.sendBeacon(e,s,i)||this.params.apiTransport.sendRequest(e,s,i)}logRequest(t){var e,i;return s(this,void 0,void 0,(function*(){const s="log.externalLog",o=this.createLogParams(t),r=null!==(e=this.sessionKey)&&void 0!==e?e:yield this._authorize();try{return yield this.params.apiTransport.sendRequest(s,o,r)}catch(t){switch(null===(i=t)||void 0===i?void 0:i.error_code){case l.PARAM_SESSION_EXPIRED:case l.PARAM_SESSION_KEY:case l.PARAM_SIGNATURE:{const t=yield this._authorize();return this.params.apiTransport.sendRequest(s,o,t)}case l.AUTH_LOGIN:{this.authToken=yield this.refreshAuthToken();const t=yield this._authorizeRequest();return this.params.apiTransport.sendRequest(s,o,t)}default:throw t}}}))}refreshAuthToken(){return s(this,void 0,void 0,(function*(){if(this.params.refreshAuthToken)return this.refreshAuthTokenPromise||(this.refreshAuthTokenPromise=this.params.refreshAuthToken().finally((()=>{this.refreshAuthTokenPromise=void 0}))),this.refreshAuthTokenPromise}))}createLogParams(t){return{collector:"ok.mobile.apps.video",data:JSON.stringify({application:"@vkontakte/videoplayer-statistics:1.0.5",platform:"WEB",items:t.map((t=>Object.assign(Object.assign({},t),{time:0,type:1})))})}}_authorize(){var t;return s(this,void 0,void 0,(function*(){try{return yield this._authorizeRequest()}catch(e){switch(null===(t=e)||void 0===t?void 0:t.error_code){case l.AUTH_LOGIN:return this.authToken=yield this.refreshAuthToken(),this._authorizeRequest()}throw e}}))}_authorizeRequest(){return s(this,void 0,void 0,(function*(){if(this.authorizePromise)return this.authorizePromise;this.sessionKey=void 0;const t="auth.anonymLogin",e={session_data:{version:2,device_id:this.uuid,client_version:"1.0.5".split("-")[0],client_type:"SDK_JS"}};return void 0!==this.authToken&&(e.session_data.auth_token=this.authToken,e.session_data.version=3),this.authorizePromise=this.params.apiTransport.sendRequest(t,e).then((s=>{if(!s)throw new Error(`Empty response. Method: ${t}, params: ${JSON.stringify(e)}`);if(!s.session_key)throw new Error(`Empty 'session_key' in response. Method: ${t}, params: ${JSON.stringify(e)}, response: ${JSON.stringify(s)}`);return this.sessionKey=s.session_key,this.sessionKey})).catch((t=>{throw this.sessionKey=void 0,t})).finally((()=>{this.authorizePromise=void 0})),this.authorizePromise}))}}class d{constructor(t){this.params=t,this.apiKey=t.apiKey,this.apiBaseUrl=t.apiBaseUrl,"/"!==this.apiBaseUrl[this.apiBaseUrl.length-1]&&(this.apiBaseUrl+="/")}sendBeacon(t,e,s){if(!window.Blob||!window.navigator.sendBeacon)return!1;const i=this._prepareQueryParams({method:t,queryParams:e,sessionKey:s}),o=new window.Blob([i.toString()],{type:"application/x-www-form-urlencoded"});return window.navigator.sendBeacon(`${this.apiBaseUrl}fb.do`,o)}sendRequest(t,e,i){return s(this,void 0,void 0,(function*(){const s=Date.now(),o=o=>{throw this.params.error$.next({id:"OneStat:ApiTransport:sendRequest",message:"Unhandled request error",thrown:o,data:{method:t,params:e,sessionKey:i,time:Date.now()-s}}),o};return fetch(`${this.apiBaseUrl}fb.do`,{method:"post",headers:{"Content-type":"application/x-www-form-urlencoded"},body:this._prepareQueryParams({method:t,queryParams:e,sessionKey:i})}).then((t=>Number(t.headers.get("content-length"))>0?t.json().then((t=>Object.prototype.hasOwnProperty.call(t,"error_msg")?Promise.reject(t):t),o):void 0),o)}))}_prepareQueryParams(t){const e=new URLSearchParams({format:"JSON",method:t.method,application_key:this.apiKey});return void 0!==t.sessionKey&&e.append("session_key",t.sessionKey),Object.entries(t.queryParams).forEach((([t,s])=>e.append(t,"string"==typeof s?s:JSON.stringify(s)))),e}}class m{constructor(t){this.requestQueue=[],this.isPaused=!1,this.debouncedFlush=e((()=>this.flush()),3e3,{maxWait:15e3}),this.api=t.api}log(t){this.requestQueue.push(t),this.isPaused||this.debouncedFlush()}flush(t=!1){0!==this.requestQueue.length&&(t?this.api.logBeacon(this.requestQueue):this.api.logRequest(this.requestQueue),this.requestQueue=[],this.debouncedFlush.cancel())}pause(){this.isPaused=!0,this.debouncedFlush.cancel()}resume(){this.isPaused=!1,this.debouncedFlush()}}class g{constructor(e,s){this.statContext=e;const i=new t;this.experimental={error$:i};const o=new d({apiKey:"CIOPGQJGDIHBABABA",apiBaseUrl:p[s.apiEnv],error$:i});this.api=new c({apiTransport:o,refreshAuthToken:s.refreshAuthToken}),this.logger=new m({api:this.api}),window.addEventListener("beforeunload",(()=>this.logger.flush(!0)))}updateContext(t){this.statContext=Object.assign(Object.assign({},this.statContext),t)}authorize(t){return this.api.authorize(t)}pause(){this.logger.pause()}resume(){this.logger.resume()}logStarted(){this.log({operation:"play"})}logPlay(){this.log({operation:"play_toggle"})}logPause(t){this.log({operation:"pause",param:String(Math.round(t.position))})}logSeek(){this.log({operation:"seek"})}logFirstBytes(t){this.log({operation:"first_bytes",param:String(t.time)})}logFirstFrame(t){this.log({operation:"first_frame",param:String(t.time)})}logError(t){this.log({operation:"error",param:t.errorType})}logWatchCoverageRecord(t){this.log({operation:"watch_coverage_record",param:`${t.start}-${t.end}`})}logWatchCoverageLive(t){this.log({operation:"watch_coverage_live",param:`${t.start}-${t.end}`})}log(t){const e=this.crateLogItem(t);this.logger.log(e)}crateLogItem({operation:t,param:e}){const s=Date.now(),i={vid:this.statContext.movieId,quality:this.statContext.quality,dst:this.statContext.destination,ct:this.statContext.contentType,aid:this.statContext.albumId,place:this.statContext.place,cdn_host:this.statContext.cdnHostname,stat_type:!0===this.statContext.autoplay?h.AUTO:!1===this.statContext.autoplay?h.MANUAL:void 0,vk_playlist_id:this.statContext.vkPlaylistId,vk_app_id:this.statContext.vkAppId};return void 0!==e&&(i.param=e),{operation:t,timestamp:s,custom:i}}}export{o as ApiEnv,n as ContentType,g as OneStat,r as Quality,a as ScreenDestination};
5
+ import{Subject as t}from"@vkontakte/videoplayer-shared";import e from"lodash/debounce";function s(t,e,s,o){return new(s||(s=Promise))((function(i,r){function a(t){try{h(o.next(t))}catch(t){r(t)}}function n(t){try{h(o.throw(t))}catch(t){r(t)}}function h(t){var e;t.done?i(t.value):(e=t.value,e instanceof s?e:new s((function(t){t(e)}))).then(a,n)}h((o=o.apply(t,e||[])).next())}))}const o=(()=>{try{const t=Date.now().toString(),e=window.localStorage;e.setItem(t,t);const s=e.getItem(t)===t;return e.removeItem(t),s?e:null}catch(t){return null}})();var i,r,a,n,h,u={get:t=>function(t){const e=o?o.getItem("_one-stat_"+t):null;if(null===e)return null;try{return JSON.parse(e)}catch(t){return null}}(t)||null,set(t,e){!function(t,e){try{o&&o.setItem("_one-stat_"+t,JSON.stringify(e))}catch(t){}}(t,e)},remove(t){!function(t){o&&o.removeItem("_one-stat_"+t)}(t)}};!function(t){t.PROD="prod",t.VIDEOTEST="videotest",t.TEST="test"}(i||(i={})),function(t){t.Q144P="144",t.Q240P="240",t.Q360P="360",t.Q480P="480",t.Q720P="720",t.Q1080P="1080",t.Q1440P="1440",t.Q2160P="2160",t.Q4320P="4320",t.UNKNOWN="unknown"}(r||(r={})),function(t){t.CHROMECAST="chromecast",t.APPLE_TV="appletv",t.PIP="pip",t.HEADPHONES="externalHeadphones",t.SCREEN=""}(a||(a={})),function(t){t.MP4="mp4",t.DASH="dash",t.HLS="hls",t.WEBM="webm"}(n||(n={})),function(t){t.AUTO="auto",t.MANUAL=""}(h||(h={}));const p={[i.PROD]:"https://api.ok.ru",[i.VIDEOTEST]:"https://videotestapi.ok.ru/api",[i.TEST]:"https://apitest.ok.ru"};var d;!function(t){t[t.PARAM_SESSION_EXPIRED=102]="PARAM_SESSION_EXPIRED",t[t.PARAM_SESSION_KEY=103]="PARAM_SESSION_KEY",t[t.PARAM_SIGNATURE=104]="PARAM_SIGNATURE",t[t.AUTH_LOGIN=401]="AUTH_LOGIN"}(d||(d={}));class l{constructor(t){this.params=t;const e=u.get("uuid");e?this.uuid=String(e):(this.uuid=function(){const t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),e=new Array(36);let s,o,i=0;for(o=0;o<36;o++)8===o||13===o||18===o||23===o?e[o]="-":14===o?e[o]="4":(i<=2&&(i=33554432+16777216*Math.random()|0),s=15&i,i>>=4,e[o]=t[19===o?3&s|8:s]);return e.join("")}(),u.set("uuid",this.uuid))}authorize(t){return s(this,void 0,void 0,(function*(){return this.authToken=null!=t?t:yield this.refreshAuthToken(),this._authorize()}))}logBeacon(t){const e="log.externalLog",s=this.createLogParams(t),o=this.sessionKey;void 0!==o&&this.params.apiTransport.sendBeacon(e,s,o)||this.params.apiTransport.sendRequest(e,s,o)}logRequest(t){var e,o;return s(this,void 0,void 0,(function*(){const s="log.externalLog",i=this.createLogParams(t),r=null!==(e=this.sessionKey)&&void 0!==e?e:yield this._authorize();try{return yield this.params.apiTransport.sendRequest(s,i,r)}catch(t){switch(null===(o=t)||void 0===o?void 0:o.error_code){case d.PARAM_SESSION_EXPIRED:case d.PARAM_SESSION_KEY:case d.PARAM_SIGNATURE:{const t=yield this._authorize();return this.params.apiTransport.sendRequest(s,i,t)}case d.AUTH_LOGIN:{this.authToken=yield this.refreshAuthToken();const t=yield this._authorizeRequest();return this.params.apiTransport.sendRequest(s,i,t)}default:throw t}}}))}refreshAuthToken(){return s(this,void 0,void 0,(function*(){if(this.params.refreshAuthToken)return this.refreshAuthTokenPromise||(this.refreshAuthTokenPromise=this.params.refreshAuthToken().finally((()=>{this.refreshAuthTokenPromise=void 0}))),this.refreshAuthTokenPromise}))}createLogParams(t){return{collector:"ok.mobile.apps.video",data:JSON.stringify({application:"@vkontakte/videoplayer-statistics:1.0.6",platform:"WEB",items:t.map((t=>Object.assign(Object.assign({},t),{time:0,type:1})))})}}_authorize(){var t;return s(this,void 0,void 0,(function*(){try{return yield this._authorizeRequest()}catch(e){switch(null===(t=e)||void 0===t?void 0:t.error_code){case d.AUTH_LOGIN:return this.authToken=yield this.refreshAuthToken(),this._authorizeRequest()}throw e}}))}_authorizeRequest(){return s(this,void 0,void 0,(function*(){if(this.authorizePromise)return this.authorizePromise;this.sessionKey=void 0;const t="auth.anonymLogin",e={session_data:{version:2,device_id:this.uuid,client_version:"1.0.6".split("-")[0],client_type:"SDK_JS"}};return void 0!==this.authToken&&(e.session_data.auth_token=this.authToken,e.session_data.version=3),this.authorizePromise=this.params.apiTransport.sendRequest(t,e).then((s=>{if(!s)throw new Error(`Empty response. Method: ${t}, params: ${JSON.stringify(e)}`);if(!s.session_key)throw new Error(`Empty 'session_key' in response. Method: ${t}, params: ${JSON.stringify(e)}, response: ${JSON.stringify(s)}`);return this.sessionKey=s.session_key,this.sessionKey})).catch((t=>{throw this.sessionKey=void 0,t})).finally((()=>{this.authorizePromise=void 0})),this.authorizePromise}))}}class c{constructor(t){this.params=t,this.apiKey=t.apiKey,this.apiBaseUrl=t.apiBaseUrl,"/"!==this.apiBaseUrl[this.apiBaseUrl.length-1]&&(this.apiBaseUrl+="/")}sendBeacon(t,e,s){if(!window.Blob||!window.navigator.sendBeacon)return!1;const o=this._prepareQueryParams({method:t,queryParams:e,sessionKey:s}),i=new window.Blob([o.toString()],{type:"application/x-www-form-urlencoded"});return window.navigator.sendBeacon(`${this.apiBaseUrl}fb.do`,i)}sendRequest(t,e,o){return s(this,void 0,void 0,(function*(){const s=Date.now(),i=i=>{throw this.params.error$.next({id:"OneStat:ApiTransport:sendRequest",message:"Unhandled request error",thrown:i,data:{method:t,params:e,sessionKey:o,time:Date.now()-s}}),i};return fetch(`${this.apiBaseUrl}fb.do`,{method:"post",headers:{"Content-type":"application/x-www-form-urlencoded"},body:this._prepareQueryParams({method:t,queryParams:e,sessionKey:o})}).then((t=>Number(t.headers.get("content-length"))>0?t.json().then((t=>Object.prototype.hasOwnProperty.call(t,"error_msg")?Promise.reject(t):t),i):void 0),i)}))}_prepareQueryParams(t){const e=new URLSearchParams({format:"JSON",method:t.method,application_key:this.apiKey});return void 0!==t.sessionKey&&e.append("session_key",t.sessionKey),Object.entries(t.queryParams).forEach((([t,s])=>e.append(t,"string"==typeof s?s:JSON.stringify(s)))),e}}class m{constructor(t){this.requestQueue=[],this.isPaused=!1,this.debouncedFlush=e((()=>this.flush()),3e3,{maxWait:15e3}),this.api=t.api}log(t){this.requestQueue.push(t),this.isPaused||this.debouncedFlush()}flush(t=!1){0!==this.requestQueue.length&&(t?this.api.logBeacon(this.requestQueue):this.api.logRequest(this.requestQueue),this.requestQueue=[],this.debouncedFlush.cancel())}pause(){this.isPaused=!0,this.debouncedFlush.cancel()}resume(){this.isPaused=!1,this.debouncedFlush()}}class g{constructor(e,s){this.statContext=e;const o=new t;this.experimental={error$:o};const i=new c({apiKey:"CIOPGQJGDIHBABABA",apiBaseUrl:p[s.apiEnv],error$:o});this.api=new l({apiTransport:i,refreshAuthToken:s.refreshAuthToken}),this.logger=new m({api:this.api}),window.addEventListener("beforeunload",(()=>this.logger.flush(!0)))}updateContext(t){this.statContext=Object.assign(Object.assign({},this.statContext),t)}authorize(t){return this.api.authorize(t)}pause(){this.logger.pause()}resume(){this.logger.resume()}logStarted(){this.log({operation:"play"})}logPlay(){this.log({operation:"play_toggle"})}logPause(t){this.log({operation:"pause",param:String(Math.round(t.position))})}logSeek(){this.log({operation:"seek"})}logFirstBytes(t){this.log({operation:"first_bytes",param:String(t.time)})}logFirstFrame(t){this.log({operation:"first_frame",param:String(t.time)})}logError(t){this.log({operation:"error",param:t.errorType})}logWatchCoverageRecord(t){this.log({operation:"watch_coverage_record",param:`${t.start}-${t.end}`})}logWatchCoverageLive(t){this.log({operation:"watch_coverage_live",param:`${t.start}-${t.end}`})}logAdSlotRequest(){this.log({operation:"adv",param:"slot_request"})}logAdStarted(t){this.log({operation:"adv",param:t})}logAdPaused(){this.log({operation:"adv",param:"pause"})}logAdResumed(){this.log({operation:"adv",param:"resume"})}logAdEnded(){this.log({operation:"adv",param:"ended"})}logAdSkipped(){this.log({operation:"adv",param:"skip"})}logAdClicked(){this.log({operation:"adv",param:"click"})}log(t){const e=this.crateLogItem(t);this.logger.log(e)}crateLogItem({operation:t,param:e}){const s=Date.now(),o={vid:this.statContext.movieId,quality:this.statContext.quality,dst:this.statContext.destination,ct:this.statContext.contentType,aid:this.statContext.albumId,place:this.statContext.place,cdn_host:this.statContext.cdnHostname,stat_type:!0===this.statContext.autoplay?h.AUTO:!1===this.statContext.autoplay?h.MANUAL:void 0,vk_playlist_id:this.statContext.vkPlaylistId,vk_app_id:this.statContext.vkAppId};return void 0!==e&&(o.param=e),{operation:t,timestamp:s,custom:o}}}export{i as ApiEnv,n as ContentType,g as OneStat,r as Quality,a as ScreenDestination};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vkontakte/videoplayer-statistics",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "author": "vk.com",
5
5
  "description": "Statistics library for vk.com videoplayer",
6
6
  "homepage": "https://vk.com",
@@ -14,7 +14,7 @@
14
14
  "**/*.d.ts"
15
15
  ],
16
16
  "dependencies": {
17
- "@vkontakte/videoplayer-shared": "1.0.3",
17
+ "@vkontakte/videoplayer-shared": "1.0.5",
18
18
  "lodash": "4.17.21"
19
19
  }
20
20
  }