avo-inspector 1.2.7 → 1.3.0

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.
Files changed (70) hide show
  1. package/.vscode/launch.json +4 -15
  2. package/dist/AvoInspector.d.ts +1 -0
  3. package/dist/AvoStorage.d.ts +2 -2
  4. package/dist/index.js +1 -1
  5. package/dist/main.js +1 -0
  6. package/dist-native/AvoBatcher.d.ts +24 -0
  7. package/dist-native/AvoBatcher.js +82 -0
  8. package/dist-native/AvoDeduplicator.d.ts +36 -0
  9. package/dist-native/AvoDeduplicator.js +142 -0
  10. package/dist-native/AvoGuid.d.ts +3 -0
  11. package/dist-native/AvoGuid.js +14 -0
  12. package/dist-native/AvoInspector.d.ts +53 -0
  13. package/dist-native/AvoInspector.js +220 -0
  14. package/dist-native/AvoInspectorEnv.d.ts +7 -0
  15. package/dist-native/AvoInspectorEnv.js +8 -0
  16. package/dist-native/AvoInstallationId.d.ts +5 -0
  17. package/dist-native/AvoInstallationId.js +36 -0
  18. package/dist-native/AvoNetworkCallsHandler.d.ts +48 -0
  19. package/dist-native/AvoNetworkCallsHandler.js +142 -0
  20. package/dist-native/AvoSchemaParser.d.ts +11 -0
  21. package/dist-native/AvoSchemaParser.js +95 -0
  22. package/dist-native/AvoSessionTracker.d.ts +15 -0
  23. package/dist-native/AvoSessionTracker.js +104 -0
  24. package/dist-native/AvoStorage.d.ts +22 -0
  25. package/dist-native/AvoStorage.js +343 -0
  26. package/dist-native/__mocks__/xhr.d.ts +12 -0
  27. package/dist-native/__mocks__/xhr.js +14 -0
  28. package/dist-native/__mocks__/xhrError.d.ts +12 -0
  29. package/dist-native/__mocks__/xhrError.js +14 -0
  30. package/dist-native/__tests__/AvoInspector.d.ts +1 -0
  31. package/dist-native/__tests__/AvoInspector.js +207 -0
  32. package/dist-native/__tests__/Batcher.d.ts +1 -0
  33. package/dist-native/__tests__/Batcher.js +278 -0
  34. package/dist-native/__tests__/BatcherPublic.d.ts +1 -0
  35. package/dist-native/__tests__/BatcherPublic.js +82 -0
  36. package/dist-native/__tests__/Deduplicator.d.ts +1 -0
  37. package/dist-native/__tests__/Deduplicator.js +111 -0
  38. package/dist-native/__tests__/InstallationId.d.ts +1 -0
  39. package/dist-native/__tests__/InstallationId.js +40 -0
  40. package/dist-native/__tests__/NetworkCallsHandler.d.ts +1 -0
  41. package/dist-native/__tests__/NetworkCallsHandler.js +135 -0
  42. package/dist-native/__tests__/Parsing.d.ts +1 -0
  43. package/dist-native/__tests__/Parsing.js +174 -0
  44. package/dist-native/__tests__/Sessions.d.ts +1 -0
  45. package/dist-native/__tests__/Sessions.js +179 -0
  46. package/dist-native/__tests__/Storage.d.ts +1 -0
  47. package/dist-native/__tests__/Storage.js +173 -0
  48. package/dist-native/__tests__/constants.d.ts +36 -0
  49. package/dist-native/__tests__/constants.js +47 -0
  50. package/dist-native/index.d.ts +2 -0
  51. package/dist-native/index.js +7 -0
  52. package/dist-native/utils.d.ts +3 -0
  53. package/dist-native/utils.js +42 -0
  54. package/package.json +2 -1
  55. package/.cache/09/18f5747b8308b0668b57dbe0154ab2.json +0 -1
  56. package/.cache/0d/2d21007ec7549e0a06c7bd662eeeb9.json +0 -1
  57. package/.cache/22/eee3664ac508c6144f86dc284c71ea.json +0 -1
  58. package/.cache/35/cefb6a47ec637299d7e622654ffb6f.json +0 -1
  59. package/.cache/39/f8cb614eabb2724b53c84803cd11ca.json +0 -1
  60. package/.cache/45/4f89ce2193890bb9565478ff11eb62.json +0 -1
  61. package/.cache/74/4a5a54e5bfd162df26d1cb8fdd908b.json +0 -1
  62. package/.cache/95/477acb3d9bccf1d5a810d32f9d97f7.json +0 -1
  63. package/.cache/a7/d33f3e58a7d7304b1a94ebb361aa3d.json +0 -1
  64. package/.cache/b2/3a12b6483c7e57c6d0aaa2075f67ce.json +0 -1
  65. package/.cache/b3/519bd85a01e1a9d91cd9beb3868a10.json +0 -1
  66. package/.cache/c1/45b01792e2ef466b52a80a36149e7c.json +0 -1
  67. package/.cache/c7/a423aca9bb7be775cf8ea5516d84e8.json +0 -1
  68. package/.cache/f3/2d83490ca733c5619d610330f067ea.json +0 -1
  69. package/.cache/fc/1e415b8bb6a94f1645aa6a4716d43c.json +0 -1
  70. package/.vscode/tasks.json +0 -13
@@ -4,23 +4,12 @@
4
4
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
5
  "version": "0.2.0",
6
6
  "configurations": [
7
-
8
-
9
-
10
7
  {
11
- "type": "node",
8
+ "type": "pwa-chrome",
12
9
  "request": "launch",
13
- "name": "Jest Tests",
14
- "program": "${workspaceRoot}/node_modules/jest/bin/jest.js",
15
- "args": [
16
- "test", "--runInBand", "--no-cache", "--watchAll=false"
17
- ],
18
- // "preLaunchTask": "build",
19
- "console": "integratedTerminal",
20
- "internalConsoleOptions": "openOnSessionStart",
21
- "outFiles": [
22
- "${workspaceRoot}/dist/**/*"
23
- ],
10
+ "name": "Launch Chrome against localhost",
11
+ "url": "http://localhost:8080",
12
+ "webRoot": "${workspaceFolder}"
24
13
  }
25
14
  ]
26
15
  }
@@ -24,6 +24,7 @@ export declare class AvoInspector {
24
24
  env: AvoInspectorEnvValueType;
25
25
  version: string;
26
26
  appName?: string;
27
+ suffix?: string;
27
28
  });
28
29
  trackSchemaFromEvent(eventName: string, eventProperties: {
29
30
  [propName: string]: any;
@@ -1,5 +1,5 @@
1
1
  declare abstract class PlatformAvoStorage {
2
- abstract init(shouldLog: boolean): void;
2
+ abstract init(shouldLog: boolean, suffix: string): void;
3
3
  abstract getItemAsync<T>(key: string): Promise<T | null>;
4
4
  abstract getItem<T>(key: string): T | null;
5
5
  abstract setItem<T>(key: string, value: T): void;
@@ -11,7 +11,7 @@ declare abstract class PlatformAvoStorage {
11
11
  export declare class AvoStorage {
12
12
  Platform: string | null;
13
13
  storageImpl: PlatformAvoStorage;
14
- constructor(shouldLog: boolean);
14
+ constructor(shouldLog: boolean, suffix?: string);
15
15
  isInitialized(): boolean;
16
16
  getItemAsync<T>(key: string): Promise<T | null>;
17
17
  getItem<T>(key: string): T | null;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var o in n)("object"==typeof exports?exports:e)[o]=n[o]}}(window,(function(){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},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 o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},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=6)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoInspector=void 0;var o=n(2),r=n(3),s=n(4),i=n(7),a=n(8),c=n(10),u=n(11),l=n(5),p=n(12).version,v=function(){function e(t){var n=this;if(l.isValueEmpty(t.env)?(this.environment=o.AvoInspectorEnv.Dev,console.warn("[Avo Inspector] No environment provided. Defaulting to dev.")):-1===Object.values(o.AvoInspectorEnv).indexOf(t.env)?(this.environment=o.AvoInspectorEnv.Dev,console.warn("[Avo Inspector] Unsupported environment provided. Defaulting to dev. Supported environments - Dev, Staging, Prod.")):this.environment=t.env,l.isValueEmpty(t.apiKey))throw new Error("[Avo Inspector] No API key provided. Inspector can't operate without API key.");if(this.apiKey=t.apiKey,l.isValueEmpty(t.version))throw new Error("[Avo Inspector] No version provided. Many features of Inspector rely on versioning. Please provide comparable string version, i.e. integer or semantic.");this.version=t.version,this.environment===o.AvoInspectorEnv.Dev?(e._batchSize=1,e._shouldLog=!0):(e._batchSize=30,e._batchFlushSeconds=30,e._shouldLog=!1),e.avoStorage=new c.AvoStorage(e._shouldLog);var r=new a.AvoNetworkCallsHandler(this.apiKey,this.environment.toString(),t.appName||"",this.version,p);this.avoBatcher=new i.AvoBatcher(r),this.sessionTracker=new s.AvoSessionTracker(this.avoBatcher),this.avoDeduplicator=new u.AvoDeduplicator;try{"undefined"!=typeof window&&window.addEventListener("load",(function(){n.sessionTracker.startOrProlongSession(Date.now())}),!1)}catch(e){console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e)}}return Object.defineProperty(e,"batchSize",{get:function(){return this._batchSize},set:function(e){this._batchSize=e<1?1:e},enumerable:!1,configurable:!0}),Object.defineProperty(e,"batchFlushSeconds",{get:function(){return this._batchFlushSeconds},enumerable:!1,configurable:!0}),Object.defineProperty(e,"shouldLog",{get:function(){return this._shouldLog},set:function(e){this._shouldLog=e},enumerable:!1,configurable:!0}),e.prototype.trackSchemaFromEvent=function(t,n){try{if(this.avoDeduplicator.shouldRegisterEvent(t,n,!1)){e.shouldLog&&console.log("Avo Inspector: supplied event "+t+" with params "+JSON.stringify(n));var o=this.extractSchema(n,!1);return this.trackSchemaInternal(t,o,null,null),o}return e.shouldLog&&console.log("Avo Inspector: Deduplicated event: "+t),[]}catch(e){return console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e),[]}},e.prototype._avoFunctionTrackSchemaFromEvent=function(t,n,o,r){try{if(this.avoDeduplicator.shouldRegisterEvent(t,n,!0)){e.shouldLog&&console.log("Avo Inspector: supplied event "+t+" with params "+JSON.stringify(n));var s=this.extractSchema(n,!1);return this.trackSchemaInternal(t,s,o,r),s}return e.shouldLog&&console.log("Avo Inspector: Deduplicated event: "+t),[]}catch(e){return console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e),[]}},e.prototype.trackSchema=function(t,n){try{this.avoDeduplicator.shouldRegisterSchemaFromManually(t,n)?(e.shouldLog&&console.log("Avo Inspector: supplied event "+t+" with schema "+JSON.stringify(n)),this.trackSchemaInternal(t,n,null,null)):e.shouldLog&&console.log("Avo Inspector: Deduplicated event: "+t)}catch(e){console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e)}},e.prototype.trackSchemaInternal=function(e,t,n,o){try{this.sessionTracker.startOrProlongSession(Date.now()),this.avoBatcher.handleTrackSchema(e,t,n,o)}catch(e){console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e)}},e.prototype.enableLogging=function(t){e._shouldLog=t},e.prototype.extractSchema=function(t,n){void 0===n&&(n=!0);try{return this.sessionTracker.startOrProlongSession(Date.now()),this.avoDeduplicator.hasSeenEventParams(t,!0)&&n&&e.shouldLog&&console.warn("Avo Inspector: WARNING! You are trying to extract schema shape that was just reported by your Avo functions. This is an indicator of duplicate inspector reporting. Please reach out to support@avo.app for advice if you are not sure how to handle this."),e.shouldLog&&console.log("Avo Inspector: extracting schema from "+JSON.stringify(t)),r.AvoSchemaParser.extractSchema(t)}catch(e){return console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e),[]}},e.prototype.setBatchSize=function(t){e._batchSize=t},e.prototype.setBatchFlushSeconds=function(t){e._batchFlushSeconds=t},e._batchSize=30,e._batchFlushSeconds=30,e._shouldLog=!1,e}();t.AvoInspector=v},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(){}return e.newGuid=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))},e}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoInspectorEnv=void 0,t.AvoInspectorEnv={Prod:"prod",Dev:"dev",Staging:"staging"}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoSchemaParser=void 0;var o=function(e){return"[object Array]"===Object.prototype.toString.call(e)},r=function(){function e(){}return e.extractSchema=function(e){var t=this;if(null==e)return[];var n=function(e){if(o(e)){var r=e.map((function(e){return n(e)}));return t.removeDuplicates(r)}if("object"==typeof e){var s=[];for(var i in e)if(e.hasOwnProperty(i)){var a=e[i],c={propertyName:i,propertyType:t.getPropValueType(a)};"object"==typeof a&&null!=a&&(c.children=n(a)),s.push(c)}return s}return t.getPropValueType(e)};return n(e)},e.removeDuplicates=function(e){var t={boolean:{},number:{},string:{}},n=[];return e.filter((function(e){var o=typeof e;return o in t?!t[o].hasOwnProperty(e)&&(t[o][e]=!0):!(n.indexOf(e)>=0)&&n.push(e)}))},e.getPropValueType=function(e){var t=typeof e;return null==e?"null":"string"===t?"string":"number"===t||"bigint"===t?(e+"").indexOf(".")>=0?"float":"int":"boolean"===t?"boolean":"object"===t?o(e)?"list":"object":"unknown"},e}();t.AvoSchemaParser=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoSessionTracker=void 0;var o=n(1),r=n(0),s=function(){function e(e){this._lastSessionTimestamp=null,this._sessionLengthMillis=3e5,this.avoBatcher=e}return Object.defineProperty(e,"sessionId",{get:function(){if(null===e._sessionId){if(!r.AvoInspector.avoStorage.isInitialized())return"unknown";var t=null;try{t=r.AvoInspector.avoStorage.getItem(e.idCacheKey)}catch(e){console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e)}e._sessionId=null==t?this.updateSessionId():t}return e._sessionId},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"lastSessionTimestamp",{get:function(){if(null===this._lastSessionTimestamp||0===this._lastSessionTimestamp){var t=r.AvoInspector.avoStorage.getItem(e.lastSessionTimestampKey);null!=t?(this._lastSessionTimestamp=t,isNaN(this._lastSessionTimestamp)&&(this._lastSessionTimestamp=0)):this._lastSessionTimestamp=0}return this._lastSessionTimestamp},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"sessionLengthMillis",{get:function(){return this._sessionLengthMillis},enumerable:!1,configurable:!0}),e.prototype.startOrProlongSession=function(t){var n=this;r.AvoInspector.avoStorage.runAfterInit((function(){t-n.lastSessionTimestamp>n._sessionLengthMillis&&(e.updateSessionId(),n.avoBatcher.handleSessionStarted()),n._lastSessionTimestamp=t,r.AvoInspector.avoStorage.setItem(e.lastSessionTimestampKey,n._lastSessionTimestamp)}))},e.updateSessionId=function(){e._sessionId=o.default.newGuid();try{r.AvoInspector.avoStorage.setItem(e.idCacheKey,e.sessionId)}catch(e){console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e)}return e._sessionId},Object.defineProperty(e,"lastSessionTimestampKey",{get:function(){return"AvoInspectorSessionTimestamp"},enumerable:!1,configurable:!0}),Object.defineProperty(e,"idCacheKey",{get:function(){return"AvoInspectorSessionId"},enumerable:!1,configurable:!0}),e._sessionId=null,e}();t.AvoSessionTracker=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.deepEquals=t.isValueEmpty=void 0;t.isValueEmpty=function(e){return null==e||0==e.trim().length},t.deepEquals=function e(t,n){if(t===n)return!0;if(!(t instanceof Object&&n instanceof Object))return!1;if(t.constructor!==n.constructor)return!1;for(var o in t)if(t.hasOwnProperty(o)){if(!n.hasOwnProperty(o))return!1;if(t[o]!==n[o]){if("object"!=typeof t[o])return!1;if(!e(t[o],n[o]))return!1}}for(o in n)if(n.hasOwnProperty(o)&&!t.hasOwnProperty(o))return!1;return!0}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoInspectorEnv=t.AvoInspector=void 0;var o=n(0);Object.defineProperty(t,"AvoInspector",{enumerable:!0,get:function(){return o.AvoInspector}});var r=n(2);Object.defineProperty(t,"AvoInspectorEnv",{enumerable:!0,get:function(){return r.AvoInspectorEnv}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoBatcher=void 0;var o=n(0),r=function(){function e(t){var n=this;this.events=[],this.networkCallsHandler=t,this.batchFlushAttemptTimestamp=Date.now(),o.AvoInspector.avoStorage.getItemAsync(e.cacheKey).then((function(e){if(null!==e){var t=e.filter((function(e){return null!==e}));n.events=n.events.concat(t),n.checkIfBatchNeedsToBeSent()}}))}return e.prototype.handleSessionStarted=function(){this.events.push(this.networkCallsHandler.bodyForSessionStartedCall()),this.saveEvents(),this.checkIfBatchNeedsToBeSent()},e.prototype.handleTrackSchema=function(e,t,n,r){this.events.push(this.networkCallsHandler.bodyForEventSchemaCall(e,t,n,r)),this.saveEvents(),o.AvoInspector.shouldLog&&console.log("Avo Inspector: saved event "+e+" with schema "+JSON.stringify(t)),this.checkIfBatchNeedsToBeSent()},e.prototype.checkIfBatchNeedsToBeSent=function(){var e=this.events.length,t=Date.now(),n=t-this.batchFlushAttemptTimestamp,r=e%o.AvoInspector.batchSize==0,s=n>=1e3*o.AvoInspector.batchFlushSeconds,i=this;if(r||s){this.batchFlushAttemptTimestamp=t;var a=i.events;i.events=[],this.networkCallsHandler.callInspectorWithBatchBody(a,(function(e){null!=e?(i.events=i.events.concat(a),o.AvoInspector.shouldLog&&console.log("Avo Inspector: batch sending failed: "+e+". We will attempt to send your schemas with next batch")):o.AvoInspector.shouldLog&&console.log("Avo Inspector: batch sent successfully."),i.saveEvents()}))}},e.prototype.saveEvents=function(){if(this.events.length>1e3){var t=this.events.length-1e3;this.events.splice(0,t)}o.AvoInspector.avoStorage.setItem(e.cacheKey,this.events)},Object.defineProperty(e,"cacheKey",{get:function(){return"AvoInspectorEvents"},enumerable:!1,configurable:!0}),e}();t.AvoBatcher=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoNetworkCallsHandler=void 0;var o=n(1),r=n(4),s=n(0),i=n(9),a=function(){function e(e,t,n,o,r){this.samplingRate=1,this.sending=!1,this.apiKey=e,this.envName=t,this.appName=n,this.appVersion=o,this.libVersion=r}return e.prototype.callInspectorWithBatchBody=function(t,n){var o=this;if(this.sending)n("Batch sending cancelled because another batch sending is in progress. Your events will be sent with next batch.");else{var r=t.filter((function(e){return null!=e}));if(this.fixSessionAndTrackingIds(r),0!==r.length)if(Math.random()>this.samplingRate)s.AvoInspector.shouldLog&&console.log("Avo Inspector: last event schema dropped due to sampling rate.");else{s.AvoInspector.shouldLog&&(console.log("Avo Inspector: events",r),r.forEach((function(e){if("sessionStarted"===e.type)console.log("Avo Inspector: sending session started event.");else if("event"===e.type){var t=e;console.log("Avo Inspector: sending event "+t.eventName+" with schema "+JSON.stringify(t.eventProperties))}}))),this.sending=!0;var i=new XMLHttpRequest;i.open("POST",e.trackingEndpoint,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(r)),i.onload=function(){if(200!=i.status)n("Error "+i.status+": "+i.statusText);else{var e=JSON.parse(i.response).samplingRate;void 0!==e&&(o.samplingRate=e),n(null)}},i.onerror=function(){n("Request failed")},i.ontimeout=function(){n("Request timed out")},this.sending=!1}}},e.prototype.fixSessionAndTrackingIds=function(e){var t=null,n=null;e.forEach((function(e){null!==e.sessionId&&void 0!==e.sessionId&&"unknown"!==e.sessionId&&(t=e.sessionId),null!==e.trackingId&&void 0!==e.trackingId&&"unknown"!==e.trackingId&&(n=e.trackingId)})),e.forEach((function(e){"unknown"===e.sessionId&&(e.sessionId=null!=t?t:r.AvoSessionTracker.sessionId),"unknown"===e.trackingId&&(e.trackingId=null!=n?n:i.AvoInstallationId.getInstallationId())}))},e.prototype.bodyForSessionStartedCall=function(){var e=this.createBaseCallBody();return e.type="sessionStarted",e},e.prototype.bodyForEventSchemaCall=function(e,t,n,o){var r=this.createBaseCallBody();return r.type="event",r.eventName=e,r.eventProperties=t,null!=n?(r.avoFunction=!0,r.eventId=n,r.eventHash=o):(r.avoFunction=!1,r.eventId=null,r.eventHash=null),r},e.prototype.createBaseCallBody=function(){return{apiKey:this.apiKey,appName:this.appName,appVersion:this.appVersion,libVersion:this.libVersion,env:this.envName,libPlatform:"web",messageId:o.default.newGuid(),trackingId:i.AvoInstallationId.getInstallationId(),createdAt:(new Date).toISOString(),sessionId:r.AvoSessionTracker.sessionId,samplingRate:this.samplingRate}},e.trackingEndpoint="https://api.avo.app/inspector/v1/track",e}();t.AvoNetworkCallsHandler=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoInstallationId=void 0;var o=n(1),r=n(0),s=function(){function e(){}return e.getInstallationId=function(){if(null!==e.installationId)return e.installationId;if(!r.AvoInspector.avoStorage.isInitialized())return"unknown";var t=r.AvoInspector.avoStorage.getItem(e.cacheKey);return null==t?(e.installationId=o.default.newGuid(),r.AvoInspector.avoStorage.setItem(e.cacheKey,e.installationId)):e.installationId=t,e.installationId},Object.defineProperty(e,"cacheKey",{get:function(){return"AvoInstallationId"},enumerable:!1,configurable:!0}),e.installationId=null,e}();t.AvoInstallationId=s},function(e,t,n){"use strict";var o,r=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0}),t.AvoStorage=void 0;var s=function(){function e(){}return e.prototype.parseJson=function(e){return null!=e?JSON.parse(e):null},e}(),i=(function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.androidMemoryDataToAvoidAsyncQueries={},t.AsyncStorage=null,t.memoryStorageInitialized=!1,t.onStorageInitFuncs=[],t.reactNative=null,t.shouldLog=!1,t}r(t,e),t.prototype.init=function(e){},t.prototype.loadAndroidDataToMemoryToAvoidAsyncQueries=function(e){var t=this;this.AsyncStorage.getAllKeys().then((function(n){return t.AsyncStorage.multiGet(n).then((function(n){t.shouldLog&&console.log("Avo Inspector: android loaded data from memory"),n.forEach((function(e){var n=e[0];t.androidMemoryDataToAvoidAsyncQueries[n]=e[1],t.shouldLog&&console.log(n,e[1])})),e()}))}))},t.prototype.initializeStorageAndroid=function(){this.memoryStorageInitialized=!0,this.onStorageInitFuncs.forEach((function(e){e()}))},t.prototype.isInitialized=function(){return this.reactNative&&this.memoryStorageInitialized},t.prototype.getItemAsync=function(e){return this.AsyncStorage.getItem(e).then((function(e){return null!=e?JSON.parse(e):null}))},t.prototype.getItem=function(e){var t=this.androidMemoryDataToAvoidAsyncQueries[e];return this.parseJson(t)},t.prototype.setItem=function(e,t){this.AsyncStorage.setItem(e,JSON.stringify(t)),this.androidMemoryDataToAvoidAsyncQueries[e]=JSON.stringify(t)},t.prototype.removeItem=function(e){this.AsyncStorage.removeItem(e),this.androidMemoryDataToAvoidAsyncQueries[e]=null},t.prototype.runAfterInit=function(e){!0===this.memoryStorageInitialized?e():this.onStorageInitFuncs.push(e)}}(s),function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.reactNative=null,t}r(t,e),t.prototype.init=function(e){0},t.prototype.isInitialized=function(){return null!=this.reactNative},t.prototype.getItemAsync=function(e){var t=this.reactNative.Settings.get(e);return Promise.resolve(this.parseJson(t))},t.prototype.getItem=function(e){var t=this.reactNative.Settings.get(e);return this.parseJson(t)},t.prototype.setItem=function(e,t){var n;this.reactNative.Settings.set(((n={})[e]=JSON.stringify(t),n))},t.prototype.removeItem=function(e){var t;this.reactNative.Settings.set(((t={})[e]=null,t))},t.prototype.runAfterInit=function(e){e()}}(s),function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.useFallbackStorage=!1,t.fallbackStorage={},t.storageInitialized=!1,t.onStorageInitFuncs=[],t.shouldLog=!1,t}return r(t,e),t.prototype.init=function(e){this.shouldLog=e,this.initializeStorageWeb(this.isLocalStorageAvailable())},t.prototype.initializeStorageWeb=function(e){this.storageInitialized=!0,!1===e&&(this.useFallbackStorage=!0),this.onStorageInitFuncs.forEach((function(e){e()}))},t.prototype.isLocalStorageAvailable=function(){var e=(new Date).toISOString();try{return window.localStorage.setItem(e,e),window.localStorage.getItem(e)===e&&(window.localStorage.removeItem(e),!0)}catch(e){return!1}},t.prototype.isInitialized=function(){return this.storageInitialized},t.prototype.getItemAsync=function(e){var t=this;return new Promise((function(n,o){t.runAfterInit((function(){if(!0===t.useFallbackStorage){var o=t.fallbackStorage[e];n(t.parseJson(o))}else if("undefined"!=typeof window){o=void 0;try{o=window.localStorage.getItem(e)}catch(e){t.shouldLog&&console.error("Avo Inspector Storage getItemAsync error:",e),n(null)}n(t.parseJson(o))}else n(null)}))}))},t.prototype.getItem=function(e){var t;if(!1===this.storageInitialized)t=null;else if(!0===this.useFallbackStorage)t=this.fallbackStorage[e];else if("undefined"!=typeof window)try{t=window.localStorage.getItem(e)}catch(e){this.shouldLog&&console.error("Avo Inspector Storage getItem error:",e)}return this.parseJson(t)},t.prototype.setItem=function(e,t){var n=this;this.runAfterInit((function(){if(!0===n.useFallbackStorage)n.fallbackStorage[e]=JSON.stringify(t);else if("undefined"!=typeof window)try{window.localStorage.setItem(e,JSON.stringify(t))}catch(e){n.shouldLog&&console.error("Avo Inspector Storage setItem error:",e)}}))},t.prototype.removeItem=function(e){var t=this;this.runAfterInit((function(){if(!0===t.useFallbackStorage)t.fallbackStorage[e]=null;else if("undefined"!=typeof window)try{window.localStorage.removeItem(e)}catch(e){t.shouldLog&&console.error("Avo Inspector Storage removeItem error:",e)}}))},t.prototype.runAfterInit=function(e){!0===this.storageInitialized?e():this.onStorageInitFuncs.push(e)},t}(s)),a=function(){function e(e){this.Platform=null,this.Platform="browser",this.storageImpl=new i,this.storageImpl.init(e)}return e.prototype.isInitialized=function(){return this.storageImpl.isInitialized()},e.prototype.getItemAsync=function(e){return this.storageImpl.getItemAsync(e)},e.prototype.getItem=function(e){return this.storageImpl.getItem(e)},e.prototype.setItem=function(e,t){this.storageImpl.setItem(e,t)},e.prototype.removeItem=function(e){this.storageImpl.removeItem(e)},e.prototype.runAfterInit=function(e){this.storageImpl.runAfterInit(e)},e}();t.AvoStorage=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoDeduplicator=void 0;var o=n(3),r=n(5),s=function(){function e(){this.avoFunctionsEvents={},this.manualEvents={},this.avoFunctionsEventsParams={},this.manualEventsParams={}}return e.prototype.shouldRegisterEvent=function(e,t,n){this.clearOldEvents(),n?(this.avoFunctionsEvents[Date.now()]=e,this.avoFunctionsEventsParams[e]=t):(this.manualEvents[Date.now()]=e,this.manualEventsParams[e]=t);var o=!n;return!this.hasSameEventAs(e,t,o)},e.prototype.hasSameEventAs=function(e,t,n){var o=!1;return n?this.lookForEventIn(e,t,this.avoFunctionsEventsParams)&&(o=!0):this.lookForEventIn(e,t,this.manualEventsParams)&&(o=!0),o&&(delete this.avoFunctionsEventsParams[e],delete this.manualEventsParams[e]),o},e.prototype.lookForEventIn=function(e,t,n){for(var o in n)if(n.hasOwnProperty(o)&&o===e){var s=n[e];if(s&&r.deepEquals(t,s))return!0}return!1},e.prototype.hasSeenEventParams=function(e,t){var n=!1;return t?this.lookForEventParamsIn(e,this.avoFunctionsEventsParams)&&(n=!0):this.lookForEventParamsIn(e,this.manualEventsParams)&&(n=!0),n},e.prototype.lookForEventParamsIn=function(e,t){for(var n in t)if(t.hasOwnProperty(n)){var o=t[n];if(o&&r.deepEquals(e,o))return!0}return!1},e.prototype.shouldRegisterSchemaFromManually=function(e,t){return this.clearOldEvents(),!this.hasSameShapeInAvoFunctionsAs(e,t)},e.prototype.hasSameShapeInAvoFunctionsAs=function(e,t){var n=!1;return this.lookForEventSchemaIn(e,t,this.avoFunctionsEventsParams)&&(n=!0),n&&delete this.avoFunctionsEventsParams[e],n},e.prototype.lookForEventSchemaIn=function(e,t,n){for(var s in n)if(n.hasOwnProperty(s)&&s===e){var i=o.AvoSchemaParser.extractSchema(n[e]);if(i&&r.deepEquals(t,i))return!0}return!1},e.prototype.clearOldEvents=function(){var e=Date.now();for(var t in this.avoFunctionsEvents){if(this.avoFunctionsEvents.hasOwnProperty(t))if(e-(Number(t)||0)>300){var n=this.avoFunctionsEvents[t];delete this.avoFunctionsEvents[t],delete this.avoFunctionsEventsParams[n]}}for(var t in this.manualEvents){if(this.manualEvents.hasOwnProperty(t))if(e-(Number(t)||0)>300){n=this.manualEvents[t];delete this.manualEvents[t],delete this.manualEventsParams[n]}}},e.prototype._clearEvents=function(){this.avoFunctionsEvents={},this.manualEvents={},this.avoFunctionsEventsParams={},this.manualEventsParams={}},e}();t.AvoDeduplicator=s},function(e){e.exports=JSON.parse('{"name":"avo-inspector","version":"1.2.6","description":"","main":"dist/index.js","browser":"dist/index.js","react-native":"dist-native/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc --emitDeclarationOnly && webpack src/index.ts --mode production --resolve-extensions .ts --module-bind ts=ts-loader --define process.env.BROWSER=1 --output-filename index.js --output-library-target umd","build-native":"tsc --outDir dist-native","test":"jest","test:browser":"BROWSER=1 jest","typecheck":"tsc --noEmit"},"repository":{"type":"git","url":"git+https://github.com/avohq/web-avo-inspector.git"},"jest":{"transform":{"^.+\\\\.[j]sx?$":"babel-jest","^.+\\\\.[t]sx?$":"ts-jest"},"testPathIgnorePatterns":["constants","examples","node_modules","dist","dist-native"],"testRegex":"(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$","moduleFileExtensions":["ts","tsx","js"]},"keywords":["web","analytics","avo","react","react-native","node","javascript"],"author":"Avo (https://www.avo.app)","license":"MIT","bugs":{"url":"https://github.com/avohq/web-avo-inspector/issues"},"homepage":"https://github.com/avohq/web-avo-inspector#readme","devDependencies":{"@babel/core":"7.12.10","@babel/preset-env":"7.12.11","@types/jest":"26.0.19","@types/node":"14.14.16","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","eslint":"7.16.0","eslint-plugin-react":"7.21.5","jest":"26.6.3","prettier":"2.2.1","prettier-eslint":"12.0.0","ts-jest":"26.4.4","ts-loader":"8.0.12","typescript":"4.1.3","webpack":"4.44.2","webpack-cli":"3.3.12"},"externals":["react-native"]}')}])}));
1
+ !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var o in n)("object"==typeof exports?exports:e)[o]=n[o]}}(window,(function(){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},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 o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(o,r,function(t){return e[t]}.bind(null,r));return o},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=6)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoInspector=void 0;var o=n(2),r=n(3),s=n(4),i=n(7),a=n(8),c=n(10),u=n(11),l=n(5),p=n(12).version,v=function(){function e(t){var n=this;if(l.isValueEmpty(t.env)?(this.environment=o.AvoInspectorEnv.Dev,console.warn("[Avo Inspector] No environment provided. Defaulting to dev.")):-1===Object.values(o.AvoInspectorEnv).indexOf(t.env)?(this.environment=o.AvoInspectorEnv.Dev,console.warn("[Avo Inspector] Unsupported environment provided. Defaulting to dev. Supported environments - Dev, Staging, Prod.")):this.environment=t.env,l.isValueEmpty(t.apiKey))throw new Error("[Avo Inspector] No API key provided. Inspector can't operate without API key.");if(this.apiKey=t.apiKey,l.isValueEmpty(t.version))throw new Error("[Avo Inspector] No version provided. Many features of Inspector rely on versioning. Please provide comparable string version, i.e. integer or semantic.");this.version=t.version,this.environment===o.AvoInspectorEnv.Dev?(e._batchSize=1,e._shouldLog=!0):(e._batchSize=30,e._batchFlushSeconds=30,e._shouldLog=!1),e.avoStorage=new c.AvoStorage(e._shouldLog,null!=t.suffix?t.suffix:"");var r=new a.AvoNetworkCallsHandler(this.apiKey,this.environment.toString(),t.appName||"",this.version,p);this.avoBatcher=new i.AvoBatcher(r),this.sessionTracker=new s.AvoSessionTracker(this.avoBatcher),this.avoDeduplicator=new u.AvoDeduplicator;try{"undefined"!=typeof window&&window.addEventListener("load",(function(){n.sessionTracker.startOrProlongSession(Date.now())}),!1)}catch(e){console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e)}}return Object.defineProperty(e,"batchSize",{get:function(){return this._batchSize},set:function(e){this._batchSize=e<1?1:e},enumerable:!1,configurable:!0}),Object.defineProperty(e,"batchFlushSeconds",{get:function(){return this._batchFlushSeconds},enumerable:!1,configurable:!0}),Object.defineProperty(e,"shouldLog",{get:function(){return this._shouldLog},set:function(e){this._shouldLog=e},enumerable:!1,configurable:!0}),e.prototype.trackSchemaFromEvent=function(t,n){try{if(this.avoDeduplicator.shouldRegisterEvent(t,n,!1)){e.shouldLog&&console.log("Avo Inspector: supplied event "+t+" with params "+JSON.stringify(n));var o=this.extractSchema(n,!1);return this.trackSchemaInternal(t,o,null,null),o}return e.shouldLog&&console.log("Avo Inspector: Deduplicated event: "+t),[]}catch(e){return console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e),[]}},e.prototype._avoFunctionTrackSchemaFromEvent=function(t,n,o,r){try{if(this.avoDeduplicator.shouldRegisterEvent(t,n,!0)){e.shouldLog&&console.log("Avo Inspector: supplied event "+t+" with params "+JSON.stringify(n));var s=this.extractSchema(n,!1);return this.trackSchemaInternal(t,s,o,r),s}return e.shouldLog&&console.log("Avo Inspector: Deduplicated event: "+t),[]}catch(e){return console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e),[]}},e.prototype.trackSchema=function(t,n){try{this.avoDeduplicator.shouldRegisterSchemaFromManually(t,n)?(e.shouldLog&&console.log("Avo Inspector: supplied event "+t+" with schema "+JSON.stringify(n)),this.trackSchemaInternal(t,n,null,null)):e.shouldLog&&console.log("Avo Inspector: Deduplicated event: "+t)}catch(e){console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e)}},e.prototype.trackSchemaInternal=function(e,t,n,o){try{this.sessionTracker.startOrProlongSession(Date.now()),this.avoBatcher.handleTrackSchema(e,t,n,o)}catch(e){console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e)}},e.prototype.enableLogging=function(t){e._shouldLog=t},e.prototype.extractSchema=function(t,n){void 0===n&&(n=!0);try{return this.sessionTracker.startOrProlongSession(Date.now()),this.avoDeduplicator.hasSeenEventParams(t,!0)&&n&&e.shouldLog&&console.warn("Avo Inspector: WARNING! You are trying to extract schema shape that was just reported by your Avo functions. This is an indicator of duplicate inspector reporting. Please reach out to support@avo.app for advice if you are not sure how to handle this."),e.shouldLog&&console.log("Avo Inspector: extracting schema from "+JSON.stringify(t)),r.AvoSchemaParser.extractSchema(t)}catch(e){return console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e),[]}},e.prototype.setBatchSize=function(t){e._batchSize=t},e.prototype.setBatchFlushSeconds=function(t){e._batchFlushSeconds=t},e._batchSize=30,e._batchFlushSeconds=30,e._shouldLog=!1,e}();t.AvoInspector=v},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(){}return e.newGuid=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))},e}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoInspectorEnv=void 0,t.AvoInspectorEnv={Prod:"prod",Dev:"dev",Staging:"staging"}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoSchemaParser=void 0;var o=function(e){return"[object Array]"===Object.prototype.toString.call(e)},r=function(){function e(){}return e.extractSchema=function(e){var t=this;if(null==e)return[];var n=function(e){if(o(e)){var r=e.map((function(e){return n(e)}));return t.removeDuplicates(r)}if("object"==typeof e){var s=[];for(var i in e)if(e.hasOwnProperty(i)){var a=e[i],c={propertyName:i,propertyType:t.getPropValueType(a)};"object"==typeof a&&null!=a&&(c.children=n(a)),s.push(c)}return s}return t.getPropValueType(e)};return n(e)},e.removeDuplicates=function(e){var t={boolean:{},number:{},string:{}},n=[];return e.filter((function(e){var o=typeof e;return o in t?!t[o].hasOwnProperty(e)&&(t[o][e]=!0):!(n.indexOf(e)>=0)&&n.push(e)}))},e.getPropValueType=function(e){var t=typeof e;return null==e?"null":"string"===t?"string":"number"===t||"bigint"===t?(e+"").indexOf(".")>=0?"float":"int":"boolean"===t?"boolean":"object"===t?o(e)?"list":"object":"unknown"},e}();t.AvoSchemaParser=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoSessionTracker=void 0;var o=n(1),r=n(0),s=function(){function e(e){this._lastSessionTimestamp=null,this._sessionLengthMillis=3e5,this.avoBatcher=e}return Object.defineProperty(e,"sessionId",{get:function(){if(null===e._sessionId){if(!r.AvoInspector.avoStorage.isInitialized())return"unknown";var t=null;try{t=r.AvoInspector.avoStorage.getItem(e.idCacheKey)}catch(e){console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e)}e._sessionId=null==t?this.updateSessionId():t}return e._sessionId},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"lastSessionTimestamp",{get:function(){if(null===this._lastSessionTimestamp||0===this._lastSessionTimestamp){var t=r.AvoInspector.avoStorage.getItem(e.lastSessionTimestampKey);null!=t?(this._lastSessionTimestamp=t,isNaN(this._lastSessionTimestamp)&&(this._lastSessionTimestamp=0)):this._lastSessionTimestamp=0}return this._lastSessionTimestamp},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"sessionLengthMillis",{get:function(){return this._sessionLengthMillis},enumerable:!1,configurable:!0}),e.prototype.startOrProlongSession=function(t){var n=this;r.AvoInspector.avoStorage.runAfterInit((function(){t-n.lastSessionTimestamp>n._sessionLengthMillis&&(e.updateSessionId(),n.avoBatcher.handleSessionStarted()),n._lastSessionTimestamp=t,r.AvoInspector.avoStorage.setItem(e.lastSessionTimestampKey,n._lastSessionTimestamp)}))},e.updateSessionId=function(){e._sessionId=o.default.newGuid();try{r.AvoInspector.avoStorage.setItem(e.idCacheKey,e.sessionId)}catch(e){console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e)}return e._sessionId},Object.defineProperty(e,"lastSessionTimestampKey",{get:function(){return"AvoInspectorSessionTimestamp"},enumerable:!1,configurable:!0}),Object.defineProperty(e,"idCacheKey",{get:function(){return"AvoInspectorSessionId"},enumerable:!1,configurable:!0}),e._sessionId=null,e}();t.AvoSessionTracker=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.deepEquals=t.isValueEmpty=void 0;t.isValueEmpty=function(e){return null==e||0==e.trim().length},t.deepEquals=function e(t,n){if(t===n)return!0;if(!(t instanceof Object&&n instanceof Object))return!1;if(t.constructor!==n.constructor)return!1;for(var o in t)if(t.hasOwnProperty(o)){if(!n.hasOwnProperty(o))return!1;if(t[o]!==n[o]){if("object"!=typeof t[o])return!1;if(!e(t[o],n[o]))return!1}}for(o in n)if(n.hasOwnProperty(o)&&!t.hasOwnProperty(o))return!1;return!0}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoInspectorEnv=t.AvoInspector=void 0;var o=n(0);Object.defineProperty(t,"AvoInspector",{enumerable:!0,get:function(){return o.AvoInspector}});var r=n(2);Object.defineProperty(t,"AvoInspectorEnv",{enumerable:!0,get:function(){return r.AvoInspectorEnv}})},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoBatcher=void 0;var o=n(0),r=function(){function e(t){var n=this;this.events=[],this.networkCallsHandler=t,this.batchFlushAttemptTimestamp=Date.now(),o.AvoInspector.avoStorage.getItemAsync(e.cacheKey).then((function(e){if(null!==e){var t=e.filter((function(e){return null!==e}));n.events=n.events.concat(t),n.checkIfBatchNeedsToBeSent()}}))}return e.prototype.handleSessionStarted=function(){this.events.push(this.networkCallsHandler.bodyForSessionStartedCall()),this.saveEvents(),this.checkIfBatchNeedsToBeSent()},e.prototype.handleTrackSchema=function(e,t,n,r){this.events.push(this.networkCallsHandler.bodyForEventSchemaCall(e,t,n,r)),this.saveEvents(),o.AvoInspector.shouldLog&&console.log("Avo Inspector: saved event "+e+" with schema "+JSON.stringify(t)),this.checkIfBatchNeedsToBeSent()},e.prototype.checkIfBatchNeedsToBeSent=function(){var e=this.events.length,t=Date.now(),n=t-this.batchFlushAttemptTimestamp,r=e%o.AvoInspector.batchSize==0,s=n>=1e3*o.AvoInspector.batchFlushSeconds,i=this;if(r||s){this.batchFlushAttemptTimestamp=t;var a=i.events;i.events=[],this.networkCallsHandler.callInspectorWithBatchBody(a,(function(e){null!=e?(i.events=i.events.concat(a),o.AvoInspector.shouldLog&&console.log("Avo Inspector: batch sending failed: "+e+". We will attempt to send your schemas with next batch")):o.AvoInspector.shouldLog&&console.log("Avo Inspector: batch sent successfully."),i.saveEvents()}))}},e.prototype.saveEvents=function(){if(this.events.length>1e3){var t=this.events.length-1e3;this.events.splice(0,t)}o.AvoInspector.avoStorage.setItem(e.cacheKey,this.events)},Object.defineProperty(e,"cacheKey",{get:function(){return"AvoInspectorEvents"},enumerable:!1,configurable:!0}),e}();t.AvoBatcher=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoNetworkCallsHandler=void 0;var o=n(1),r=n(4),s=n(0),i=n(9),a=function(){function e(e,t,n,o,r){this.samplingRate=1,this.sending=!1,this.apiKey=e,this.envName=t,this.appName=n,this.appVersion=o,this.libVersion=r}return e.prototype.callInspectorWithBatchBody=function(t,n){var o=this;if(this.sending)n("Batch sending cancelled because another batch sending is in progress. Your events will be sent with next batch.");else{var r=t.filter((function(e){return null!=e}));if(this.fixSessionAndTrackingIds(r),0!==r.length)if(Math.random()>this.samplingRate)s.AvoInspector.shouldLog&&console.log("Avo Inspector: last event schema dropped due to sampling rate.");else{s.AvoInspector.shouldLog&&(console.log("Avo Inspector: events",r),r.forEach((function(e){if("sessionStarted"===e.type)console.log("Avo Inspector: sending session started event.");else if("event"===e.type){var t=e;console.log("Avo Inspector: sending event "+t.eventName+" with schema "+JSON.stringify(t.eventProperties))}}))),this.sending=!0;var i=new XMLHttpRequest;i.open("POST",e.trackingEndpoint,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(r)),i.onload=function(){if(200!=i.status)n("Error "+i.status+": "+i.statusText);else{var e=JSON.parse(i.response).samplingRate;void 0!==e&&(o.samplingRate=e),n(null)}},i.onerror=function(){n("Request failed")},i.ontimeout=function(){n("Request timed out")},this.sending=!1}}},e.prototype.fixSessionAndTrackingIds=function(e){var t=null,n=null;e.forEach((function(e){null!==e.sessionId&&void 0!==e.sessionId&&"unknown"!==e.sessionId&&(t=e.sessionId),null!==e.trackingId&&void 0!==e.trackingId&&"unknown"!==e.trackingId&&(n=e.trackingId)})),e.forEach((function(e){"unknown"===e.sessionId&&(e.sessionId=null!=t?t:r.AvoSessionTracker.sessionId),"unknown"===e.trackingId&&(e.trackingId=null!=n?n:i.AvoInstallationId.getInstallationId())}))},e.prototype.bodyForSessionStartedCall=function(){var e=this.createBaseCallBody();return e.type="sessionStarted",e},e.prototype.bodyForEventSchemaCall=function(e,t,n,o){var r=this.createBaseCallBody();return r.type="event",r.eventName=e,r.eventProperties=t,null!=n?(r.avoFunction=!0,r.eventId=n,r.eventHash=o):(r.avoFunction=!1,r.eventId=null,r.eventHash=null),r},e.prototype.createBaseCallBody=function(){return{apiKey:this.apiKey,appName:this.appName,appVersion:this.appVersion,libVersion:this.libVersion,env:this.envName,libPlatform:"web",messageId:o.default.newGuid(),trackingId:i.AvoInstallationId.getInstallationId(),createdAt:(new Date).toISOString(),sessionId:r.AvoSessionTracker.sessionId,samplingRate:this.samplingRate}},e.trackingEndpoint="https://api.avo.app/inspector/v1/track",e}();t.AvoNetworkCallsHandler=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoInstallationId=void 0;var o=n(1),r=n(0),s=function(){function e(){}return e.getInstallationId=function(){if(null!==e.installationId)return e.installationId;if(!r.AvoInspector.avoStorage.isInitialized())return"unknown";var t=r.AvoInspector.avoStorage.getItem(e.cacheKey);return null==t?(e.installationId=o.default.newGuid(),r.AvoInspector.avoStorage.setItem(e.cacheKey,e.installationId)):e.installationId=t,e.installationId},Object.defineProperty(e,"cacheKey",{get:function(){return"AvoInstallationId"},enumerable:!1,configurable:!0}),e.installationId=null,e}();t.AvoInstallationId=s},function(e,t,n){"use strict";var o,r=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0}),t.AvoStorage=void 0;var s=function(){function e(){}return e.prototype.parseJson=function(e){return null!=e?JSON.parse(e):null},e}(),i=(function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.androidMemoryDataToAvoidAsyncQueries={},t.AsyncStorage=null,t.memoryStorageInitialized=!1,t.onStorageInitFuncs=[],t.reactNative=null,t.shouldLog=!1,t.suffix="",t}r(t,e),t.prototype.init=function(e,t){},t.prototype.loadAndroidDataToMemoryToAvoidAsyncQueries=function(e){var t=this;this.AsyncStorage.getAllKeys().then((function(n){return t.AsyncStorage.multiGet(n).then((function(n){t.shouldLog&&console.log("Avo Inspector: android loaded data from memory"),n.forEach((function(e){var n=e[0];n.endsWith(t.suffix)&&(t.androidMemoryDataToAvoidAsyncQueries[n]=e[1],t.shouldLog&&console.log(n,e[1]))})),e()}))}))},t.prototype.initializeStorageAndroid=function(){this.memoryStorageInitialized=!0,this.onStorageInitFuncs.forEach((function(e){e()}))},t.prototype.isInitialized=function(){return this.reactNative&&this.memoryStorageInitialized},t.prototype.getItemAsync=function(e){return this.AsyncStorage.getItem(e+this.suffix).then((function(e){return null!=e?JSON.parse(e):null}))},t.prototype.getItem=function(e){var t=this.androidMemoryDataToAvoidAsyncQueries[e+this.suffix];return this.parseJson(t)},t.prototype.setItem=function(e,t){this.AsyncStorage.setItem(e+this.suffix,JSON.stringify(t)),this.androidMemoryDataToAvoidAsyncQueries[e+this.suffix]=JSON.stringify(t)},t.prototype.removeItem=function(e){this.AsyncStorage.removeItem(e+this.suffix),this.androidMemoryDataToAvoidAsyncQueries[e+this.suffix]=null},t.prototype.runAfterInit=function(e){!0===this.memoryStorageInitialized?e():this.onStorageInitFuncs.push(e)}}(s),function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.reactNative=null,t.suffix="",t}r(t,e),t.prototype.init=function(e,t){0},t.prototype.isInitialized=function(){return null!=this.reactNative},t.prototype.getItemAsync=function(e){var t=this.reactNative.Settings.get(e+this.suffix);return Promise.resolve(this.parseJson(t))},t.prototype.getItem=function(e){var t=this.reactNative.Settings.get(e+this.suffix);return this.parseJson(t)},t.prototype.setItem=function(e,t){var n;this.reactNative.Settings.set(((n={})[e+this.suffix]=JSON.stringify(t),n))},t.prototype.removeItem=function(e){var t;this.reactNative.Settings.set(((t={})[e+this.suffix]=null,t))},t.prototype.runAfterInit=function(e){e()}}(s),function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.useFallbackStorage=!1,t.fallbackStorage={},t.storageInitialized=!1,t.onStorageInitFuncs=[],t.shouldLog=!1,t.suffix="",t}return r(t,e),t.prototype.init=function(e,t){this.shouldLog=e,this.suffix=t,this.initializeStorageWeb(this.isLocalStorageAvailable())},t.prototype.initializeStorageWeb=function(e){this.storageInitialized=!0,!1===e&&(this.useFallbackStorage=!0),this.onStorageInitFuncs.forEach((function(e){e()}))},t.prototype.isLocalStorageAvailable=function(){var e=(new Date).toISOString();try{return window.localStorage.setItem(e,e),window.localStorage.getItem(e)===e&&(window.localStorage.removeItem(e),!0)}catch(e){return!1}},t.prototype.isInitialized=function(){return this.storageInitialized},t.prototype.getItemAsync=function(e){var t=this;return new Promise((function(n,o){t.runAfterInit((function(){if(!0===t.useFallbackStorage){var o=t.fallbackStorage[e+t.suffix];n(t.parseJson(o))}else if("undefined"!=typeof window){o=void 0;try{o=window.localStorage.getItem(e+t.suffix)}catch(e){t.shouldLog&&console.error("Avo Inspector Storage getItemAsync error:",e),n(null)}n(t.parseJson(o))}else n(null)}))}))},t.prototype.getItem=function(e){var t;if(!1===this.storageInitialized)t=null;else if(!0===this.useFallbackStorage)t=this.fallbackStorage[e+this.suffix];else if("undefined"!=typeof window)try{t=window.localStorage.getItem(e+this.suffix)}catch(e){this.shouldLog&&console.error("Avo Inspector Storage getItem error:",e)}return this.parseJson(t)},t.prototype.setItem=function(e,t){var n=this;this.runAfterInit((function(){if(!0===n.useFallbackStorage)n.fallbackStorage[e+n.suffix]=JSON.stringify(t);else if("undefined"!=typeof window)try{window.localStorage.setItem(e+n.suffix,JSON.stringify(t))}catch(e){n.shouldLog&&console.error("Avo Inspector Storage setItem error:",e)}}))},t.prototype.removeItem=function(e){var t=this;this.runAfterInit((function(){if(!0===t.useFallbackStorage)t.fallbackStorage[e+t.suffix]=null;else if("undefined"!=typeof window)try{window.localStorage.removeItem(e+t.suffix)}catch(e){t.shouldLog&&console.error("Avo Inspector Storage removeItem error:",e)}}))},t.prototype.runAfterInit=function(e){!0===this.storageInitialized?e():this.onStorageInitFuncs.push(e)},t}(s)),a=function(){function e(e,t){void 0===t&&(t=""),this.Platform=null,this.Platform="browser",this.storageImpl=new i,this.storageImpl.init(e,t)}return e.prototype.isInitialized=function(){return this.storageImpl.isInitialized()},e.prototype.getItemAsync=function(e){return this.storageImpl.getItemAsync(e)},e.prototype.getItem=function(e){return this.storageImpl.getItem(e)},e.prototype.setItem=function(e,t){this.storageImpl.setItem(e,t)},e.prototype.removeItem=function(e){this.storageImpl.removeItem(e)},e.prototype.runAfterInit=function(e){this.storageImpl.runAfterInit(e)},e}();t.AvoStorage=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoDeduplicator=void 0;var o=n(3),r=n(5),s=function(){function e(){this.avoFunctionsEvents={},this.manualEvents={},this.avoFunctionsEventsParams={},this.manualEventsParams={}}return e.prototype.shouldRegisterEvent=function(e,t,n){this.clearOldEvents(),n?(this.avoFunctionsEvents[Date.now()]=e,this.avoFunctionsEventsParams[e]=t):(this.manualEvents[Date.now()]=e,this.manualEventsParams[e]=t);var o=!n;return!this.hasSameEventAs(e,t,o)},e.prototype.hasSameEventAs=function(e,t,n){var o=!1;return n?this.lookForEventIn(e,t,this.avoFunctionsEventsParams)&&(o=!0):this.lookForEventIn(e,t,this.manualEventsParams)&&(o=!0),o&&(delete this.avoFunctionsEventsParams[e],delete this.manualEventsParams[e]),o},e.prototype.lookForEventIn=function(e,t,n){for(var o in n)if(n.hasOwnProperty(o)&&o===e){var s=n[e];if(s&&r.deepEquals(t,s))return!0}return!1},e.prototype.hasSeenEventParams=function(e,t){var n=!1;return t?this.lookForEventParamsIn(e,this.avoFunctionsEventsParams)&&(n=!0):this.lookForEventParamsIn(e,this.manualEventsParams)&&(n=!0),n},e.prototype.lookForEventParamsIn=function(e,t){for(var n in t)if(t.hasOwnProperty(n)){var o=t[n];if(o&&r.deepEquals(e,o))return!0}return!1},e.prototype.shouldRegisterSchemaFromManually=function(e,t){return this.clearOldEvents(),!this.hasSameShapeInAvoFunctionsAs(e,t)},e.prototype.hasSameShapeInAvoFunctionsAs=function(e,t){var n=!1;return this.lookForEventSchemaIn(e,t,this.avoFunctionsEventsParams)&&(n=!0),n&&delete this.avoFunctionsEventsParams[e],n},e.prototype.lookForEventSchemaIn=function(e,t,n){for(var s in n)if(n.hasOwnProperty(s)&&s===e){var i=o.AvoSchemaParser.extractSchema(n[e]);if(i&&r.deepEquals(t,i))return!0}return!1},e.prototype.clearOldEvents=function(){var e=Date.now();for(var t in this.avoFunctionsEvents){if(this.avoFunctionsEvents.hasOwnProperty(t))if(e-(Number(t)||0)>300){var n=this.avoFunctionsEvents[t];delete this.avoFunctionsEvents[t],delete this.avoFunctionsEventsParams[n]}}for(var t in this.manualEvents){if(this.manualEvents.hasOwnProperty(t))if(e-(Number(t)||0)>300){n=this.manualEvents[t];delete this.manualEvents[t],delete this.manualEventsParams[n]}}},e.prototype._clearEvents=function(){this.avoFunctionsEvents={},this.manualEvents={},this.avoFunctionsEventsParams={},this.manualEventsParams={}},e}();t.AvoDeduplicator=s},function(e){e.exports=JSON.parse('{"name":"avo-inspector","version":"1.3.0","description":"","main":"dist/index.js","browser":"dist/index.js","react-native":"dist-native/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc --emitDeclarationOnly && webpack src/index.ts --mode production --resolve-extensions .ts --module-bind ts=ts-loader --define process.env.BROWSER=1 --output-filename index.js --output-library-target umd","build-for-script-tag":"tsc --emitDeclarationOnly && webpack src/browser.js --mode production --resolve-extensions .ts --module-bind ts=ts-loader --define process.env.BROWSER=1 --woutput-filename browser.js --output-library-target umd","build-native":"tsc --outDir dist-native","test":"jest","test:browser":"BROWSER=1 jest","typecheck":"tsc --noEmit"},"repository":{"type":"git","url":"git+https://github.com/avohq/web-avo-inspector.git"},"jest":{"transform":{"^.+\\\\.[j]sx?$":"babel-jest","^.+\\\\.[t]sx?$":"ts-jest"},"testPathIgnorePatterns":["constants","examples","node_modules","dist","dist-native"],"testRegex":"(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$","moduleFileExtensions":["ts","tsx","js"]},"keywords":["web","analytics","avo","react","react-native","node","javascript"],"author":"Avo (https://www.avo.app)","license":"MIT","bugs":{"url":"https://github.com/avohq/web-avo-inspector/issues"},"homepage":"https://github.com/avohq/web-avo-inspector#readme","devDependencies":{"@babel/core":"7.12.10","@babel/preset-env":"7.12.11","@types/jest":"26.0.19","@types/node":"14.14.16","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","eslint":"7.16.0","eslint-plugin-react":"7.21.5","jest":"26.6.3","prettier":"2.2.1","prettier-eslint":"12.0.0","ts-jest":"26.4.4","ts-loader":"8.0.12","typescript":"4.1.3","webpack":"4.44.2","webpack-cli":"3.3.12"},"externals":["react-native"]}')}])}));
package/dist/main.js ADDED
@@ -0,0 +1 @@
1
+ !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var o in n)("object"==typeof exports?exports:e)[o]=n[o]}}(window,(function(){return function(e){var t={};function n(o){if(t[o])return t[o].exports;var s=t[o]={i:o,l:!1,exports:{}};return e[o].call(s.exports,s,s.exports,n),s.l=!0,s.exports}return n.m=e,n.c=t,n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},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 o=Object.create(null);if(n.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)n.d(o,s,function(t){return e[t]}.bind(null,s));return o},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=5)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoInspector=void 0;var o=n(6),s=n(2),r=n(3),i=n(7),a=n(8),c=n(10),u=n(11),l=n(4),p=n(12).version,v=function(){function e(t){var n=this;if(l.isValueEmpty(t.env)?(this.environment=o.AvoInspectorEnv.Dev,console.warn("[Avo Inspector] No environment provided. Defaulting to dev.")):-1===Object.values(o.AvoInspectorEnv).indexOf(t.env)?(this.environment=o.AvoInspectorEnv.Dev,console.warn("[Avo Inspector] Unsupported environment provided. Defaulting to dev. Supported environments - Dev, Staging, Prod.")):this.environment=t.env,l.isValueEmpty(t.apiKey))throw new Error("[Avo Inspector] No API key provided. Inspector can't operate without API key.");if(this.apiKey=t.apiKey,l.isValueEmpty(t.version))throw new Error("[Avo Inspector] No version provided. Many features of Inspector rely on versioning. Please provide comparable string version, i.e. integer or semantic.");this.version=t.version,this.environment===o.AvoInspectorEnv.Dev?(e._batchSize=1,e._shouldLog=!0):(e._batchSize=30,e._batchFlushSeconds=30,e._shouldLog=!1),e.avoStorage=new c.AvoStorage(e._shouldLog,null!=t.suffix?t.suffix:"");var s=new a.AvoNetworkCallsHandler(this.apiKey,this.environment.toString(),t.appName||"",this.version,p);this.avoBatcher=new i.AvoBatcher(s),this.sessionTracker=new r.AvoSessionTracker(this.avoBatcher),this.avoDeduplicator=new u.AvoDeduplicator;try{"undefined"!=typeof window&&window.addEventListener("load",(function(){n.sessionTracker.startOrProlongSession(Date.now())}),!1)}catch(e){console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e)}}return Object.defineProperty(e,"batchSize",{get:function(){return this._batchSize},set:function(e){this._batchSize=e<1?1:e},enumerable:!1,configurable:!0}),Object.defineProperty(e,"batchFlushSeconds",{get:function(){return this._batchFlushSeconds},enumerable:!1,configurable:!0}),Object.defineProperty(e,"shouldLog",{get:function(){return this._shouldLog},set:function(e){this._shouldLog=e},enumerable:!1,configurable:!0}),e.prototype.trackSchemaFromEvent=function(t,n){try{if(this.avoDeduplicator.shouldRegisterEvent(t,n,!1)){e.shouldLog&&console.log("Avo Inspector: supplied event "+t+" with params "+JSON.stringify(n));var o=this.extractSchema(n,!1);return this.trackSchemaInternal(t,o,null,null),o}return e.shouldLog&&console.log("Avo Inspector: Deduplicated event: "+t),[]}catch(e){return console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e),[]}},e.prototype._avoFunctionTrackSchemaFromEvent=function(t,n,o,s){try{if(this.avoDeduplicator.shouldRegisterEvent(t,n,!0)){e.shouldLog&&console.log("Avo Inspector: supplied event "+t+" with params "+JSON.stringify(n));var r=this.extractSchema(n,!1);return this.trackSchemaInternal(t,r,o,s),r}return e.shouldLog&&console.log("Avo Inspector: Deduplicated event: "+t),[]}catch(e){return console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e),[]}},e.prototype.trackSchema=function(t,n){try{this.avoDeduplicator.shouldRegisterSchemaFromManually(t,n)?(e.shouldLog&&console.log("Avo Inspector: supplied event "+t+" with schema "+JSON.stringify(n)),this.trackSchemaInternal(t,n,null,null)):e.shouldLog&&console.log("Avo Inspector: Deduplicated event: "+t)}catch(e){console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e)}},e.prototype.trackSchemaInternal=function(e,t,n,o){try{this.sessionTracker.startOrProlongSession(Date.now()),this.avoBatcher.handleTrackSchema(e,t,n,o)}catch(e){console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e)}},e.prototype.enableLogging=function(t){e._shouldLog=t},e.prototype.extractSchema=function(t,n){void 0===n&&(n=!0);try{return this.sessionTracker.startOrProlongSession(Date.now()),this.avoDeduplicator.hasSeenEventParams(t,!0)&&n&&e.shouldLog&&console.warn("Avo Inspector: WARNING! You are trying to extract schema shape that was just reported by your Avo functions. This is an indicator of duplicate inspector reporting. Please reach out to support@avo.app for advice if you are not sure how to handle this."),e.shouldLog&&console.log("Avo Inspector: extracting schema from "+JSON.stringify(t)),s.AvoSchemaParser.extractSchema(t)}catch(e){return console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e),[]}},e.prototype.setBatchSize=function(t){e._batchSize=t},e.prototype.setBatchFlushSeconds=function(t){e._batchFlushSeconds=t},e._batchSize=30,e._batchFlushSeconds=30,e._shouldLog=!1,e}();t.AvoInspector=v},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(){}return e.newGuid=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))},e}();t.default=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoSchemaParser=void 0;var o=function(e){return"[object Array]"===Object.prototype.toString.call(e)},s=function(){function e(){}return e.extractSchema=function(e){var t=this;if(null==e)return[];var n=function(e){if(o(e)){var s=e.map((function(e){return n(e)}));return t.removeDuplicates(s)}if("object"==typeof e){var r=[];for(var i in e)if(e.hasOwnProperty(i)){var a=e[i],c={propertyName:i,propertyType:t.getPropValueType(a)};"object"==typeof a&&null!=a&&(c.children=n(a)),r.push(c)}return r}return t.getPropValueType(e)};return n(e)},e.removeDuplicates=function(e){var t={boolean:{},number:{},string:{}},n=[];return e.filter((function(e){var o=typeof e;return o in t?!t[o].hasOwnProperty(e)&&(t[o][e]=!0):!(n.indexOf(e)>=0)&&n.push(e)}))},e.getPropValueType=function(e){var t=typeof e;return null==e?"null":"string"===t?"string":"number"===t||"bigint"===t?(e+"").indexOf(".")>=0?"float":"int":"boolean"===t?"boolean":"object"===t?o(e)?"list":"object":"unknown"},e}();t.AvoSchemaParser=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoSessionTracker=void 0;var o=n(1),s=n(0),r=function(){function e(e){this._lastSessionTimestamp=null,this._sessionLengthMillis=3e5,this.avoBatcher=e}return Object.defineProperty(e,"sessionId",{get:function(){if(null===e._sessionId){if(!s.AvoInspector.avoStorage.isInitialized())return"unknown";var t=null;try{t=s.AvoInspector.avoStorage.getItem(e.idCacheKey)}catch(e){console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e)}e._sessionId=null==t?this.updateSessionId():t}return e._sessionId},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"lastSessionTimestamp",{get:function(){if(null===this._lastSessionTimestamp||0===this._lastSessionTimestamp){var t=s.AvoInspector.avoStorage.getItem(e.lastSessionTimestampKey);null!=t?(this._lastSessionTimestamp=t,isNaN(this._lastSessionTimestamp)&&(this._lastSessionTimestamp=0)):this._lastSessionTimestamp=0}return this._lastSessionTimestamp},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"sessionLengthMillis",{get:function(){return this._sessionLengthMillis},enumerable:!1,configurable:!0}),e.prototype.startOrProlongSession=function(t){var n=this;s.AvoInspector.avoStorage.runAfterInit((function(){t-n.lastSessionTimestamp>n._sessionLengthMillis&&(e.updateSessionId(),n.avoBatcher.handleSessionStarted()),n._lastSessionTimestamp=t,s.AvoInspector.avoStorage.setItem(e.lastSessionTimestampKey,n._lastSessionTimestamp)}))},e.updateSessionId=function(){e._sessionId=o.default.newGuid();try{s.AvoInspector.avoStorage.setItem(e.idCacheKey,e.sessionId)}catch(e){console.error("Avo Inspector: something went wrong. Please report to support@avo.app.",e)}return e._sessionId},Object.defineProperty(e,"lastSessionTimestampKey",{get:function(){return"AvoInspectorSessionTimestamp"},enumerable:!1,configurable:!0}),Object.defineProperty(e,"idCacheKey",{get:function(){return"AvoInspectorSessionId"},enumerable:!1,configurable:!0}),e._sessionId=null,e}();t.AvoSessionTracker=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.deepEquals=t.isValueEmpty=void 0;t.isValueEmpty=function(e){return null==e||0==e.trim().length},t.deepEquals=function e(t,n){if(t===n)return!0;if(!(t instanceof Object&&n instanceof Object))return!1;if(t.constructor!==n.constructor)return!1;for(var o in t)if(t.hasOwnProperty(o)){if(!n.hasOwnProperty(o))return!1;if(t[o]!==n[o]){if("object"!=typeof t[o])return!1;if(!e(t[o],n[o]))return!1}}for(o in n)if(n.hasOwnProperty(o)&&!t.hasOwnProperty(o))return!1;return!0}},function(e,t,n){"use strict";n.r(t);var o=n(0);if("undefined"!=typeof window){"undefined"!==console&&"dev"==window.inspector.__ENV__&&console.log("Avo Inspector: Loaded. Starting initialization..."),"undefined"!==console&&"MY-API-KEY"==window.inspector.__API_KEY__&&console.error("Avo Inspector: API key not provided");const e=window.inspector;window.inspector=new o.AvoInspector({apiKey:window.inspector.__API_KEY__,env:window.inspector.__ENV__,version:window.inspector.__VERSION__,appName:window.inspector.__APP_NAME__}),e.forEach(e=>{const t=e[0];e.shift(),window.inspector[t](...e)})}else"undefined"!==console&&console.log("Avo Inspector: Window not available. Aborting.")},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoInspectorEnv=void 0,t.AvoInspectorEnv={Prod:"prod",Dev:"dev",Staging:"staging"}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoBatcher=void 0;var o=n(0),s=function(){function e(t){var n=this;this.events=[],this.networkCallsHandler=t,this.batchFlushAttemptTimestamp=Date.now(),o.AvoInspector.avoStorage.getItemAsync(e.cacheKey).then((function(e){if(null!==e){var t=e.filter((function(e){return null!==e}));n.events=n.events.concat(t),n.checkIfBatchNeedsToBeSent()}}))}return e.prototype.handleSessionStarted=function(){this.events.push(this.networkCallsHandler.bodyForSessionStartedCall()),this.saveEvents(),this.checkIfBatchNeedsToBeSent()},e.prototype.handleTrackSchema=function(e,t,n,s){this.events.push(this.networkCallsHandler.bodyForEventSchemaCall(e,t,n,s)),this.saveEvents(),o.AvoInspector.shouldLog&&console.log("Avo Inspector: saved event "+e+" with schema "+JSON.stringify(t)),this.checkIfBatchNeedsToBeSent()},e.prototype.checkIfBatchNeedsToBeSent=function(){var e=this.events.length,t=Date.now(),n=t-this.batchFlushAttemptTimestamp,s=e%o.AvoInspector.batchSize==0,r=n>=1e3*o.AvoInspector.batchFlushSeconds,i=this;if(s||r){this.batchFlushAttemptTimestamp=t;var a=i.events;i.events=[],this.networkCallsHandler.callInspectorWithBatchBody(a,(function(e){null!=e?(i.events=i.events.concat(a),o.AvoInspector.shouldLog&&console.log("Avo Inspector: batch sending failed: "+e+". We will attempt to send your schemas with next batch")):o.AvoInspector.shouldLog&&console.log("Avo Inspector: batch sent successfully."),i.saveEvents()}))}},e.prototype.saveEvents=function(){if(this.events.length>1e3){var t=this.events.length-1e3;this.events.splice(0,t)}o.AvoInspector.avoStorage.setItem(e.cacheKey,this.events)},Object.defineProperty(e,"cacheKey",{get:function(){return"AvoInspectorEvents"},enumerable:!1,configurable:!0}),e}();t.AvoBatcher=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoNetworkCallsHandler=void 0;var o=n(1),s=n(3),r=n(0),i=n(9),a=function(){function e(e,t,n,o,s){this.samplingRate=1,this.sending=!1,this.apiKey=e,this.envName=t,this.appName=n,this.appVersion=o,this.libVersion=s}return e.prototype.callInspectorWithBatchBody=function(t,n){var o=this;if(this.sending)n("Batch sending cancelled because another batch sending is in progress. Your events will be sent with next batch.");else{var s=t.filter((function(e){return null!=e}));if(this.fixSessionAndTrackingIds(s),0!==s.length)if(Math.random()>this.samplingRate)r.AvoInspector.shouldLog&&console.log("Avo Inspector: last event schema dropped due to sampling rate.");else{r.AvoInspector.shouldLog&&(console.log("Avo Inspector: events",s),s.forEach((function(e){if("sessionStarted"===e.type)console.log("Avo Inspector: sending session started event.");else if("event"===e.type){var t=e;console.log("Avo Inspector: sending event "+t.eventName+" with schema "+JSON.stringify(t.eventProperties))}}))),this.sending=!0;var i=new XMLHttpRequest;i.open("POST",e.trackingEndpoint,!0),i.setRequestHeader("Content-Type","text/plain"),i.send(JSON.stringify(s)),i.onload=function(){if(200!=i.status)n("Error "+i.status+": "+i.statusText);else{var e=JSON.parse(i.response).samplingRate;void 0!==e&&(o.samplingRate=e),n(null)}},i.onerror=function(){n("Request failed")},i.ontimeout=function(){n("Request timed out")},this.sending=!1}}},e.prototype.fixSessionAndTrackingIds=function(e){var t=null,n=null;e.forEach((function(e){null!==e.sessionId&&void 0!==e.sessionId&&"unknown"!==e.sessionId&&(t=e.sessionId),null!==e.trackingId&&void 0!==e.trackingId&&"unknown"!==e.trackingId&&(n=e.trackingId)})),e.forEach((function(e){"unknown"===e.sessionId&&(e.sessionId=null!=t?t:s.AvoSessionTracker.sessionId),"unknown"===e.trackingId&&(e.trackingId=null!=n?n:i.AvoInstallationId.getInstallationId())}))},e.prototype.bodyForSessionStartedCall=function(){var e=this.createBaseCallBody();return e.type="sessionStarted",e},e.prototype.bodyForEventSchemaCall=function(e,t,n,o){var s=this.createBaseCallBody();return s.type="event",s.eventName=e,s.eventProperties=t,null!=n?(s.avoFunction=!0,s.eventId=n,s.eventHash=o):(s.avoFunction=!1,s.eventId=null,s.eventHash=null),s},e.prototype.createBaseCallBody=function(){return{apiKey:this.apiKey,appName:this.appName,appVersion:this.appVersion,libVersion:this.libVersion,env:this.envName,libPlatform:"web",messageId:o.default.newGuid(),trackingId:i.AvoInstallationId.getInstallationId(),createdAt:(new Date).toISOString(),sessionId:s.AvoSessionTracker.sessionId,samplingRate:this.samplingRate}},e.trackingEndpoint="https://api.avo.app/inspector/v1/track",e}();t.AvoNetworkCallsHandler=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoInstallationId=void 0;var o=n(1),s=n(0),r=function(){function e(){}return e.getInstallationId=function(){if(null!==e.installationId)return e.installationId;if(!s.AvoInspector.avoStorage.isInitialized())return"unknown";var t=s.AvoInspector.avoStorage.getItem(e.cacheKey);return null==t?(e.installationId=o.default.newGuid(),s.AvoInspector.avoStorage.setItem(e.cacheKey,e.installationId)):e.installationId=t,e.installationId},Object.defineProperty(e,"cacheKey",{get:function(){return"AvoInstallationId"},enumerable:!1,configurable:!0}),e.installationId=null,e}();t.AvoInstallationId=r},function(e,t,n){"use strict";var o,s=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)});Object.defineProperty(t,"__esModule",{value:!0}),t.AvoStorage=void 0;var r=function(){function e(){}return e.prototype.parseJson=function(e){return null!=e?JSON.parse(e):null},e}(),i=(function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.androidMemoryDataToAvoidAsyncQueries={},t.AsyncStorage=null,t.memoryStorageInitialized=!1,t.onStorageInitFuncs=[],t.reactNative=null,t.shouldLog=!1,t.suffix="",t}s(t,e),t.prototype.init=function(e,t){},t.prototype.loadAndroidDataToMemoryToAvoidAsyncQueries=function(e){var t=this;this.AsyncStorage.getAllKeys().then((function(n){return t.AsyncStorage.multiGet(n).then((function(n){t.shouldLog&&console.log("Avo Inspector: android loaded data from memory"),n.forEach((function(e){var n=e[0];n.endsWith(t.suffix)&&(t.androidMemoryDataToAvoidAsyncQueries[n]=e[1],t.shouldLog&&console.log(n,e[1]))})),e()}))}))},t.prototype.initializeStorageAndroid=function(){this.memoryStorageInitialized=!0,this.onStorageInitFuncs.forEach((function(e){e()}))},t.prototype.isInitialized=function(){return this.reactNative&&this.memoryStorageInitialized},t.prototype.getItemAsync=function(e){return this.AsyncStorage.getItem(e+this.suffix).then((function(e){return null!=e?JSON.parse(e):null}))},t.prototype.getItem=function(e){var t=this.androidMemoryDataToAvoidAsyncQueries[e+this.suffix];return this.parseJson(t)},t.prototype.setItem=function(e,t){this.AsyncStorage.setItem(e+this.suffix,JSON.stringify(t)),this.androidMemoryDataToAvoidAsyncQueries[e+this.suffix]=JSON.stringify(t)},t.prototype.removeItem=function(e){this.AsyncStorage.removeItem(e+this.suffix),this.androidMemoryDataToAvoidAsyncQueries[e+this.suffix]=null},t.prototype.runAfterInit=function(e){!0===this.memoryStorageInitialized?e():this.onStorageInitFuncs.push(e)}}(r),function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.reactNative=null,t.suffix="",t}s(t,e),t.prototype.init=function(e,t){0},t.prototype.isInitialized=function(){return null!=this.reactNative},t.prototype.getItemAsync=function(e){var t=this.reactNative.Settings.get(e+this.suffix);return Promise.resolve(this.parseJson(t))},t.prototype.getItem=function(e){var t=this.reactNative.Settings.get(e+this.suffix);return this.parseJson(t)},t.prototype.setItem=function(e,t){var n;this.reactNative.Settings.set(((n={})[e+this.suffix]=JSON.stringify(t),n))},t.prototype.removeItem=function(e){var t;this.reactNative.Settings.set(((t={})[e+this.suffix]=null,t))},t.prototype.runAfterInit=function(e){e()}}(r),function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.useFallbackStorage=!1,t.fallbackStorage={},t.storageInitialized=!1,t.onStorageInitFuncs=[],t.shouldLog=!1,t.suffix="",t}return s(t,e),t.prototype.init=function(e,t){this.shouldLog=e,this.suffix=t,this.initializeStorageWeb(this.isLocalStorageAvailable())},t.prototype.initializeStorageWeb=function(e){this.storageInitialized=!0,!1===e&&(this.useFallbackStorage=!0),this.onStorageInitFuncs.forEach((function(e){e()}))},t.prototype.isLocalStorageAvailable=function(){var e=(new Date).toISOString();try{return window.localStorage.setItem(e,e),window.localStorage.getItem(e)===e&&(window.localStorage.removeItem(e),!0)}catch(e){return!1}},t.prototype.isInitialized=function(){return this.storageInitialized},t.prototype.getItemAsync=function(e){var t=this;return new Promise((function(n,o){t.runAfterInit((function(){if(!0===t.useFallbackStorage){var o=t.fallbackStorage[e+t.suffix];n(t.parseJson(o))}else if("undefined"!=typeof window){o=void 0;try{o=window.localStorage.getItem(e+t.suffix)}catch(e){t.shouldLog&&console.error("Avo Inspector Storage getItemAsync error:",e),n(null)}n(t.parseJson(o))}else n(null)}))}))},t.prototype.getItem=function(e){var t;if(!1===this.storageInitialized)t=null;else if(!0===this.useFallbackStorage)t=this.fallbackStorage[e+this.suffix];else if("undefined"!=typeof window)try{t=window.localStorage.getItem(e+this.suffix)}catch(e){this.shouldLog&&console.error("Avo Inspector Storage getItem error:",e)}return this.parseJson(t)},t.prototype.setItem=function(e,t){var n=this;this.runAfterInit((function(){if(!0===n.useFallbackStorage)n.fallbackStorage[e+n.suffix]=JSON.stringify(t);else if("undefined"!=typeof window)try{window.localStorage.setItem(e+n.suffix,JSON.stringify(t))}catch(e){n.shouldLog&&console.error("Avo Inspector Storage setItem error:",e)}}))},t.prototype.removeItem=function(e){var t=this;this.runAfterInit((function(){if(!0===t.useFallbackStorage)t.fallbackStorage[e+t.suffix]=null;else if("undefined"!=typeof window)try{window.localStorage.removeItem(e+t.suffix)}catch(e){t.shouldLog&&console.error("Avo Inspector Storage removeItem error:",e)}}))},t.prototype.runAfterInit=function(e){!0===this.storageInitialized?e():this.onStorageInitFuncs.push(e)},t}(r)),a=function(){function e(e,t){void 0===t&&(t=""),this.Platform=null,this.Platform="browser",this.storageImpl=new i,this.storageImpl.init(e,t)}return e.prototype.isInitialized=function(){return this.storageImpl.isInitialized()},e.prototype.getItemAsync=function(e){return this.storageImpl.getItemAsync(e)},e.prototype.getItem=function(e){return this.storageImpl.getItem(e)},e.prototype.setItem=function(e,t){this.storageImpl.setItem(e,t)},e.prototype.removeItem=function(e){this.storageImpl.removeItem(e)},e.prototype.runAfterInit=function(e){this.storageImpl.runAfterInit(e)},e}();t.AvoStorage=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AvoDeduplicator=void 0;var o=n(2),s=n(4),r=function(){function e(){this.avoFunctionsEvents={},this.manualEvents={},this.avoFunctionsEventsParams={},this.manualEventsParams={}}return e.prototype.shouldRegisterEvent=function(e,t,n){this.clearOldEvents(),n?(this.avoFunctionsEvents[Date.now()]=e,this.avoFunctionsEventsParams[e]=t):(this.manualEvents[Date.now()]=e,this.manualEventsParams[e]=t);var o=!n;return!this.hasSameEventAs(e,t,o)},e.prototype.hasSameEventAs=function(e,t,n){var o=!1;return n?this.lookForEventIn(e,t,this.avoFunctionsEventsParams)&&(o=!0):this.lookForEventIn(e,t,this.manualEventsParams)&&(o=!0),o&&(delete this.avoFunctionsEventsParams[e],delete this.manualEventsParams[e]),o},e.prototype.lookForEventIn=function(e,t,n){for(var o in n)if(n.hasOwnProperty(o)&&o===e){var r=n[e];if(r&&s.deepEquals(t,r))return!0}return!1},e.prototype.hasSeenEventParams=function(e,t){var n=!1;return t?this.lookForEventParamsIn(e,this.avoFunctionsEventsParams)&&(n=!0):this.lookForEventParamsIn(e,this.manualEventsParams)&&(n=!0),n},e.prototype.lookForEventParamsIn=function(e,t){for(var n in t)if(t.hasOwnProperty(n)){var o=t[n];if(o&&s.deepEquals(e,o))return!0}return!1},e.prototype.shouldRegisterSchemaFromManually=function(e,t){return this.clearOldEvents(),!this.hasSameShapeInAvoFunctionsAs(e,t)},e.prototype.hasSameShapeInAvoFunctionsAs=function(e,t){var n=!1;return this.lookForEventSchemaIn(e,t,this.avoFunctionsEventsParams)&&(n=!0),n&&delete this.avoFunctionsEventsParams[e],n},e.prototype.lookForEventSchemaIn=function(e,t,n){for(var r in n)if(n.hasOwnProperty(r)&&r===e){var i=o.AvoSchemaParser.extractSchema(n[e]);if(i&&s.deepEquals(t,i))return!0}return!1},e.prototype.clearOldEvents=function(){var e=Date.now();for(var t in this.avoFunctionsEvents){if(this.avoFunctionsEvents.hasOwnProperty(t))if(e-(Number(t)||0)>300){var n=this.avoFunctionsEvents[t];delete this.avoFunctionsEvents[t],delete this.avoFunctionsEventsParams[n]}}for(var t in this.manualEvents){if(this.manualEvents.hasOwnProperty(t))if(e-(Number(t)||0)>300){n=this.manualEvents[t];delete this.manualEvents[t],delete this.manualEventsParams[n]}}},e.prototype._clearEvents=function(){this.avoFunctionsEvents={},this.manualEvents={},this.avoFunctionsEventsParams={},this.manualEventsParams={}},e}();t.AvoDeduplicator=r},function(e){e.exports=JSON.parse('{"name":"avo-inspector","version":"1.3.0","description":"","main":"dist/index.js","browser":"dist/index.js","react-native":"dist-native/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc --emitDeclarationOnly && webpack src/index.ts --mode production --resolve-extensions .ts --module-bind ts=ts-loader --define process.env.BROWSER=1 --output-filename index.js --output-library-target umd","build-for-script-tag":"tsc --emitDeclarationOnly && webpack src/browser.js --mode production --resolve-extensions .ts --module-bind ts=ts-loader --define process.env.BROWSER=1 --woutput-filename browser.js --output-library-target umd","build-native":"tsc --outDir dist-native","test":"jest","test:browser":"BROWSER=1 jest","typecheck":"tsc --noEmit"},"repository":{"type":"git","url":"git+https://github.com/avohq/web-avo-inspector.git"},"jest":{"transform":{"^.+\\\\.[j]sx?$":"babel-jest","^.+\\\\.[t]sx?$":"ts-jest"},"testPathIgnorePatterns":["constants","examples","node_modules","dist","dist-native"],"testRegex":"(/__tests__/.*|\\\\.(test|spec))\\\\.(ts|tsx|js)$","moduleFileExtensions":["ts","tsx","js"]},"keywords":["web","analytics","avo","react","react-native","node","javascript"],"author":"Avo (https://www.avo.app)","license":"MIT","bugs":{"url":"https://github.com/avohq/web-avo-inspector/issues"},"homepage":"https://github.com/avohq/web-avo-inspector#readme","devDependencies":{"@babel/core":"7.12.10","@babel/preset-env":"7.12.11","@types/jest":"26.0.19","@types/node":"14.14.16","babel-preset-es2015":"6.24.1","babel-preset-react":"6.24.1","eslint":"7.16.0","eslint-plugin-react":"7.21.5","jest":"26.6.3","prettier":"2.2.1","prettier-eslint":"12.0.0","ts-jest":"26.4.4","ts-loader":"8.0.12","typescript":"4.1.3","webpack":"4.44.2","webpack-cli":"3.3.12"},"externals":["react-native"]}')}])}));
@@ -0,0 +1,24 @@
1
+ import { AvoNetworkCallsHandler } from "./AvoNetworkCallsHandler";
2
+ export interface AvoBatcherType {
3
+ handleSessionStarted(): void;
4
+ handleTrackSchema(eventName: string, schema: Array<{
5
+ propertyName: string;
6
+ propertyType: string;
7
+ children?: any;
8
+ }>, eventId: string | null, eventHash: string | null): void;
9
+ }
10
+ export declare class AvoBatcher implements AvoBatcherType {
11
+ private events;
12
+ private batchFlushAttemptTimestamp;
13
+ private networkCallsHandler;
14
+ constructor(networkCallsHandler: AvoNetworkCallsHandler);
15
+ handleSessionStarted(): void;
16
+ handleTrackSchema(eventName: string, schema: Array<{
17
+ propertyName: string;
18
+ propertyType: string;
19
+ children?: any;
20
+ }>, eventId: string | null, eventHash: string | null): void;
21
+ private checkIfBatchNeedsToBeSent;
22
+ private saveEvents;
23
+ static get cacheKey(): string;
24
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AvoBatcher = void 0;
4
+ var AvoInspector_1 = require("./AvoInspector");
5
+ var AvoBatcher = /** @class */ (function () {
6
+ function AvoBatcher(networkCallsHandler) {
7
+ var _this = this;
8
+ this.events = [];
9
+ this.networkCallsHandler = networkCallsHandler;
10
+ this.batchFlushAttemptTimestamp = Date.now();
11
+ AvoInspector_1.AvoInspector.avoStorage
12
+ .getItemAsync(AvoBatcher.cacheKey)
13
+ .then(function (savedEvents) {
14
+ if (savedEvents !== null) {
15
+ var nonNullSavedEvents = savedEvents.filter(function (event) { return event !== null; });
16
+ _this.events = _this.events.concat(nonNullSavedEvents);
17
+ _this.checkIfBatchNeedsToBeSent();
18
+ }
19
+ });
20
+ }
21
+ AvoBatcher.prototype.handleSessionStarted = function () {
22
+ this.events.push(this.networkCallsHandler.bodyForSessionStartedCall());
23
+ this.saveEvents();
24
+ this.checkIfBatchNeedsToBeSent();
25
+ };
26
+ AvoBatcher.prototype.handleTrackSchema = function (eventName, schema, eventId, eventHash) {
27
+ this.events.push(this.networkCallsHandler.bodyForEventSchemaCall(eventName, schema, eventId, eventHash));
28
+ this.saveEvents();
29
+ if (AvoInspector_1.AvoInspector.shouldLog) {
30
+ console.log("Avo Inspector: saved event " +
31
+ eventName +
32
+ " with schema " +
33
+ JSON.stringify(schema));
34
+ }
35
+ this.checkIfBatchNeedsToBeSent();
36
+ };
37
+ AvoBatcher.prototype.checkIfBatchNeedsToBeSent = function () {
38
+ var batchSize = this.events.length;
39
+ var now = Date.now();
40
+ var timeSinceLastFlushAttempt = now - this.batchFlushAttemptTimestamp;
41
+ var sendBySize = batchSize % AvoInspector_1.AvoInspector.batchSize == 0;
42
+ var sendByTime = timeSinceLastFlushAttempt >= AvoInspector_1.AvoInspector.batchFlushSeconds * 1000;
43
+ var avoBatcher = this;
44
+ if (sendBySize || sendByTime) {
45
+ this.batchFlushAttemptTimestamp = now;
46
+ var sendingEvents_1 = avoBatcher.events;
47
+ avoBatcher.events = [];
48
+ this.networkCallsHandler.callInspectorWithBatchBody(sendingEvents_1, function (error) {
49
+ if (error != null) {
50
+ avoBatcher.events = avoBatcher.events.concat(sendingEvents_1);
51
+ if (AvoInspector_1.AvoInspector.shouldLog) {
52
+ console.log("Avo Inspector: batch sending failed: " +
53
+ error +
54
+ ". We will attempt to send your schemas with next batch");
55
+ }
56
+ }
57
+ else {
58
+ if (AvoInspector_1.AvoInspector.shouldLog) {
59
+ console.log("Avo Inspector: batch sent successfully.");
60
+ }
61
+ }
62
+ avoBatcher.saveEvents();
63
+ });
64
+ }
65
+ };
66
+ AvoBatcher.prototype.saveEvents = function () {
67
+ if (this.events.length > 1000) {
68
+ var extraElements = this.events.length - 1000;
69
+ this.events.splice(0, extraElements);
70
+ }
71
+ AvoInspector_1.AvoInspector.avoStorage.setItem(AvoBatcher.cacheKey, this.events);
72
+ };
73
+ Object.defineProperty(AvoBatcher, "cacheKey", {
74
+ get: function () {
75
+ return "AvoInspectorEvents";
76
+ },
77
+ enumerable: false,
78
+ configurable: true
79
+ });
80
+ return AvoBatcher;
81
+ }());
82
+ exports.AvoBatcher = AvoBatcher;
@@ -0,0 +1,36 @@
1
+ export declare class AvoDeduplicator {
2
+ avoFunctionsEvents: {
3
+ [time: number]: string;
4
+ };
5
+ manualEvents: {
6
+ [time: number]: string;
7
+ };
8
+ avoFunctionsEventsParams: {
9
+ [eventName: string]: {
10
+ [propName: string]: any;
11
+ };
12
+ };
13
+ manualEventsParams: {
14
+ [eventName: string]: {
15
+ [propName: string]: any;
16
+ };
17
+ };
18
+ shouldRegisterEvent(eventName: string, params: {
19
+ [propName: string]: any;
20
+ }, fromAvoFunction: boolean): boolean;
21
+ private hasSameEventAs;
22
+ private lookForEventIn;
23
+ hasSeenEventParams(params: {
24
+ [propName: string]: any;
25
+ }, checkInAvoFunctions: boolean): boolean;
26
+ private lookForEventParamsIn;
27
+ shouldRegisterSchemaFromManually(eventName: string, eventSchema: Array<{
28
+ propertyName: string;
29
+ propertyType: string;
30
+ children?: any;
31
+ }>): boolean;
32
+ private hasSameShapeInAvoFunctionsAs;
33
+ private lookForEventSchemaIn;
34
+ private clearOldEvents;
35
+ private _clearEvents;
36
+ }
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AvoDeduplicator = void 0;
4
+ var AvoSchemaParser_1 = require("./AvoSchemaParser");
5
+ var utils_1 = require("./utils");
6
+ var AvoDeduplicator = /** @class */ (function () {
7
+ function AvoDeduplicator() {
8
+ this.avoFunctionsEvents = {};
9
+ this.manualEvents = {};
10
+ this.avoFunctionsEventsParams = {};
11
+ this.manualEventsParams = {};
12
+ }
13
+ AvoDeduplicator.prototype.shouldRegisterEvent = function (eventName, params, fromAvoFunction) {
14
+ this.clearOldEvents();
15
+ if (fromAvoFunction) {
16
+ this.avoFunctionsEvents[Date.now()] = eventName;
17
+ this.avoFunctionsEventsParams[eventName] = params;
18
+ }
19
+ else {
20
+ this.manualEvents[Date.now()] = eventName;
21
+ this.manualEventsParams[eventName] = params;
22
+ }
23
+ var checkInAvoFunctions = !fromAvoFunction;
24
+ return !this.hasSameEventAs(eventName, params, checkInAvoFunctions);
25
+ };
26
+ AvoDeduplicator.prototype.hasSameEventAs = function (eventName, params, checkInAvoFunctions) {
27
+ var result = false;
28
+ if (checkInAvoFunctions) {
29
+ if (this.lookForEventIn(eventName, params, this.avoFunctionsEventsParams)) {
30
+ result = true;
31
+ }
32
+ }
33
+ else {
34
+ if (this.lookForEventIn(eventName, params, this.manualEventsParams)) {
35
+ result = true;
36
+ }
37
+ }
38
+ if (result) {
39
+ delete this.avoFunctionsEventsParams[eventName];
40
+ delete this.manualEventsParams[eventName];
41
+ }
42
+ return result;
43
+ };
44
+ AvoDeduplicator.prototype.lookForEventIn = function (eventName, params, eventsStorage) {
45
+ for (var otherEventName in eventsStorage) {
46
+ if (eventsStorage.hasOwnProperty(otherEventName)) {
47
+ if (otherEventName === eventName) {
48
+ var otherParams = eventsStorage[eventName];
49
+ if (otherParams && utils_1.deepEquals(params, otherParams)) {
50
+ return true;
51
+ }
52
+ }
53
+ }
54
+ }
55
+ return false;
56
+ };
57
+ AvoDeduplicator.prototype.hasSeenEventParams = function (params, checkInAvoFunctions) {
58
+ var result = false;
59
+ if (checkInAvoFunctions) {
60
+ if (this.lookForEventParamsIn(params, this.avoFunctionsEventsParams)) {
61
+ result = true;
62
+ }
63
+ }
64
+ else {
65
+ if (this.lookForEventParamsIn(params, this.manualEventsParams)) {
66
+ result = true;
67
+ }
68
+ }
69
+ return result;
70
+ };
71
+ AvoDeduplicator.prototype.lookForEventParamsIn = function (params, eventsStorage) {
72
+ for (var otherEventName in eventsStorage) {
73
+ if (eventsStorage.hasOwnProperty(otherEventName)) {
74
+ var otherParams = eventsStorage[otherEventName];
75
+ if (otherParams && utils_1.deepEquals(params, otherParams)) {
76
+ return true;
77
+ }
78
+ }
79
+ }
80
+ return false;
81
+ };
82
+ AvoDeduplicator.prototype.shouldRegisterSchemaFromManually = function (eventName, eventSchema) {
83
+ this.clearOldEvents();
84
+ return !this.hasSameShapeInAvoFunctionsAs(eventName, eventSchema);
85
+ };
86
+ AvoDeduplicator.prototype.hasSameShapeInAvoFunctionsAs = function (eventName, eventSchema) {
87
+ var result = false;
88
+ if (this.lookForEventSchemaIn(eventName, eventSchema, this.avoFunctionsEventsParams)) {
89
+ result = true;
90
+ }
91
+ if (result) {
92
+ delete this.avoFunctionsEventsParams[eventName];
93
+ }
94
+ return result;
95
+ };
96
+ AvoDeduplicator.prototype.lookForEventSchemaIn = function (eventName, eventSchema, eventsStorage) {
97
+ for (var otherEventName in eventsStorage) {
98
+ if (eventsStorage.hasOwnProperty(otherEventName)) {
99
+ if (otherEventName === eventName) {
100
+ var otherSchema = AvoSchemaParser_1.AvoSchemaParser.extractSchema(eventsStorage[eventName]);
101
+ if (otherSchema && utils_1.deepEquals(eventSchema, otherSchema)) {
102
+ return true;
103
+ }
104
+ }
105
+ }
106
+ }
107
+ return false;
108
+ };
109
+ AvoDeduplicator.prototype.clearOldEvents = function () {
110
+ var now = Date.now();
111
+ var msToConsiderOld = 300;
112
+ for (var time in this.avoFunctionsEvents) {
113
+ if (this.avoFunctionsEvents.hasOwnProperty(time)) {
114
+ var timestamp = Number(time) || 0;
115
+ if (now - timestamp > msToConsiderOld) {
116
+ var eventName = this.avoFunctionsEvents[time];
117
+ delete this.avoFunctionsEvents[time];
118
+ delete this.avoFunctionsEventsParams[eventName];
119
+ }
120
+ }
121
+ }
122
+ for (var time in this.manualEvents) {
123
+ if (this.manualEvents.hasOwnProperty(time)) {
124
+ var timestamp = Number(time) || 0;
125
+ if (now - timestamp > msToConsiderOld) {
126
+ var eventName = this.manualEvents[time];
127
+ delete this.manualEvents[time];
128
+ delete this.manualEventsParams[eventName];
129
+ }
130
+ }
131
+ }
132
+ };
133
+ // used in tests
134
+ AvoDeduplicator.prototype._clearEvents = function () {
135
+ this.avoFunctionsEvents = {};
136
+ this.manualEvents = {};
137
+ this.avoFunctionsEventsParams = {};
138
+ this.manualEventsParams = {};
139
+ };
140
+ return AvoDeduplicator;
141
+ }());
142
+ exports.AvoDeduplicator = AvoDeduplicator;
@@ -0,0 +1,3 @@
1
+ export default class AvoGuid {
2
+ static newGuid(): string;
3
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var AvoGuid = /** @class */ (function () {
4
+ function AvoGuid() {
5
+ }
6
+ AvoGuid.newGuid = function () {
7
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
8
+ var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8;
9
+ return v.toString(16);
10
+ });
11
+ };
12
+ return AvoGuid;
13
+ }());
14
+ exports.default = AvoGuid;
@@ -0,0 +1,53 @@
1
+ import { AvoInspectorEnvValueType } from "./AvoInspectorEnv";
2
+ import { AvoSessionTracker } from "./AvoSessionTracker";
3
+ import { AvoBatcher } from "./AvoBatcher";
4
+ import { AvoStorage } from "./AvoStorage";
5
+ import { AvoDeduplicator } from "./AvoDeduplicator";
6
+ export declare class AvoInspector {
7
+ environment: AvoInspectorEnvValueType;
8
+ avoBatcher: AvoBatcher;
9
+ avoDeduplicator: AvoDeduplicator;
10
+ sessionTracker: AvoSessionTracker;
11
+ apiKey: string;
12
+ version: string;
13
+ static avoStorage: AvoStorage;
14
+ private static _batchSize;
15
+ static get batchSize(): number;
16
+ static set batchSize(newSize: number);
17
+ private static _batchFlushSeconds;
18
+ static get batchFlushSeconds(): number;
19
+ private static _shouldLog;
20
+ static get shouldLog(): boolean;
21
+ static set shouldLog(enable: boolean);
22
+ constructor(options: {
23
+ apiKey: string;
24
+ env: AvoInspectorEnvValueType;
25
+ version: string;
26
+ appName?: string;
27
+ suffix?: string;
28
+ });
29
+ trackSchemaFromEvent(eventName: string, eventProperties: {
30
+ [propName: string]: any;
31
+ }): Array<{
32
+ propertyName: string;
33
+ propertyType: string;
34
+ children?: any;
35
+ }>;
36
+ private _avoFunctionTrackSchemaFromEvent;
37
+ trackSchema(eventName: string, eventSchema: Array<{
38
+ propertyName: string;
39
+ propertyType: string;
40
+ children?: any;
41
+ }>): void;
42
+ private trackSchemaInternal;
43
+ enableLogging(enable: boolean): void;
44
+ extractSchema(eventProperties: {
45
+ [propName: string]: any;
46
+ }, shouldLogIfEnabled?: boolean): Array<{
47
+ propertyName: string;
48
+ propertyType: string;
49
+ children?: any;
50
+ }>;
51
+ setBatchSize(newBatchSize: number): void;
52
+ setBatchFlushSeconds(newBatchFlushSeconds: number): void;
53
+ }