avo-inspector 2.2.0 → 2.2.2-alpha

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 (108) hide show
  1. package/CHANGELOG.md +34 -1
  2. package/README.md +95 -0
  3. package/bin/avo-inspector.js +97 -0
  4. package/dist/AvoBatcher.d.ts +4 -2
  5. package/dist/AvoEncryption.d.ts +33 -0
  6. package/dist/AvoInspector.d.ts +31 -3
  7. package/dist/AvoNetworkCallsHandler.d.ts +28 -3
  8. package/dist/AvoSchemaParser.d.ts +12 -1
  9. package/dist/browser.js.LICENSE.txt +5 -0
  10. package/dist/eventSpec/AvoEventSpecCache.d.ts +73 -0
  11. package/dist/eventSpec/AvoEventSpecFetchTypes.d.ts +109 -0
  12. package/dist/eventSpec/AvoEventSpecFetcher.d.ts +54 -0
  13. package/dist/eventSpec/EventValidator.d.ts +90 -0
  14. package/dist/eventSpec/cache.d.ts +73 -0
  15. package/dist/eventSpec/index.d.ts +4 -0
  16. package/dist/eventSpec/types.d.ts +74 -0
  17. package/dist/index.js +2 -1
  18. package/dist/index.js.LICENSE.txt +5 -0
  19. package/dist-browser/AvoAnonymousId.d.ts +26 -0
  20. package/dist-browser/AvoBatcher.d.ts +26 -0
  21. package/dist-browser/AvoDeduplicator.d.ts +20 -0
  22. package/dist-browser/AvoEncryption.d.ts +33 -0
  23. package/dist-browser/AvoGuid.d.ts +3 -0
  24. package/dist-browser/AvoInspector.d.ts +78 -0
  25. package/dist-browser/AvoInspectorEnv.d.ts +7 -0
  26. package/dist-browser/AvoNetworkCallsHandler.d.ts +74 -0
  27. package/dist-browser/AvoSchemaParser.d.ts +20 -0
  28. package/dist-browser/AvoStorage.d.ts +22 -0
  29. package/dist-browser/__mocks__/xhr.d.ts +12 -0
  30. package/dist-browser/__mocks__/xhrError.d.ts +12 -0
  31. package/dist-browser/__tests__/AnonymousId_test.d.ts +1 -0
  32. package/dist-browser/__tests__/AvoEncryption_test.d.ts +1 -0
  33. package/dist-browser/__tests__/AvoInspectorEventSpec_test.d.ts +1 -0
  34. package/dist-browser/__tests__/AvoInspector_test.d.ts +1 -0
  35. package/dist-browser/__tests__/BatcherPublic_test.d.ts +1 -0
  36. package/dist-browser/__tests__/Batcher_test.d.ts +1 -0
  37. package/dist-browser/__tests__/Deduplicator_test.d.ts +1 -0
  38. package/dist-browser/__tests__/EncryptedPropertyTracking_test.d.ts +1 -0
  39. package/dist-browser/__tests__/EventSpecCache_test.d.ts +1 -0
  40. package/dist-browser/__tests__/EventSpecFetcher_test.d.ts +1 -0
  41. package/dist-browser/__tests__/EventValidator_test.d.ts +1 -0
  42. package/dist-browser/__tests__/NetworkCallsHandler_test.d.ts +1 -0
  43. package/dist-browser/__tests__/Parsing_test.d.ts +1 -0
  44. package/dist-browser/__tests__/Storage_test.d.ts +1 -0
  45. package/dist-browser/__tests__/ValidationIntegration_test.d.ts +1 -0
  46. package/dist-browser/__tests__/constants.d.ts +36 -0
  47. package/dist-browser/__tests__/helpers/encryptionHelpers.d.ts +13 -0
  48. package/dist-browser/__tests__/helpers/mockFactories.d.ts +49 -0
  49. package/dist-browser/eventSpec/AvoEventSpecCache.d.ts +73 -0
  50. package/dist-browser/eventSpec/AvoEventSpecFetchTypes.d.ts +109 -0
  51. package/dist-browser/eventSpec/AvoEventSpecFetcher.d.ts +55 -0
  52. package/dist-browser/eventSpec/EventValidator.d.ts +90 -0
  53. package/dist-browser/eventSpec/index.d.ts +4 -0
  54. package/dist-browser/index.d.ts +2 -0
  55. package/dist-browser/utils.d.ts +3 -0
  56. package/dist-native/AvoBatcher.d.ts +24 -0
  57. package/dist-native/AvoBatcher.js +82 -0
  58. package/dist-native/AvoDeduplicator.d.ts +36 -0
  59. package/dist-native/AvoDeduplicator.js +142 -0
  60. package/dist-native/AvoGuid.d.ts +3 -0
  61. package/dist-native/AvoGuid.js +14 -0
  62. package/dist-native/AvoInspector.d.ts +52 -0
  63. package/dist-native/AvoInspector.js +220 -0
  64. package/dist-native/AvoInspectorEnv.d.ts +7 -0
  65. package/dist-native/AvoInspectorEnv.js +8 -0
  66. package/dist-native/AvoInstallationId.d.ts +5 -0
  67. package/dist-native/AvoInstallationId.js +36 -0
  68. package/dist-native/AvoNetworkCallsHandler.d.ts +48 -0
  69. package/dist-native/AvoNetworkCallsHandler.js +142 -0
  70. package/dist-native/AvoSchemaParser.d.ts +11 -0
  71. package/dist-native/AvoSchemaParser.js +95 -0
  72. package/dist-native/AvoSessionTracker.d.ts +15 -0
  73. package/dist-native/AvoSessionTracker.js +104 -0
  74. package/dist-native/AvoStorage.d.ts +22 -0
  75. package/dist-native/AvoStorage.js +336 -0
  76. package/dist-native/__mocks__/xhr.d.ts +12 -0
  77. package/dist-native/__mocks__/xhr.js +14 -0
  78. package/dist-native/__mocks__/xhrError.d.ts +12 -0
  79. package/dist-native/__mocks__/xhrError.js +14 -0
  80. package/dist-native/__tests__/AvoInspector.d.ts +1 -0
  81. package/dist-native/__tests__/AvoInspector.js +207 -0
  82. package/dist-native/__tests__/Batcher.d.ts +1 -0
  83. package/dist-native/__tests__/Batcher.js +280 -0
  84. package/dist-native/__tests__/BatcherPublic.d.ts +1 -0
  85. package/dist-native/__tests__/BatcherPublic.js +82 -0
  86. package/dist-native/__tests__/Deduplicator.d.ts +1 -0
  87. package/dist-native/__tests__/Deduplicator.js +111 -0
  88. package/dist-native/__tests__/InstallationId.d.ts +1 -0
  89. package/dist-native/__tests__/InstallationId.js +40 -0
  90. package/dist-native/__tests__/NetworkCallsHandler.d.ts +1 -0
  91. package/dist-native/__tests__/NetworkCallsHandler.js +132 -0
  92. package/dist-native/__tests__/Parsing.d.ts +1 -0
  93. package/dist-native/__tests__/Parsing.js +115 -0
  94. package/dist-native/__tests__/Sessions.d.ts +1 -0
  95. package/dist-native/__tests__/Sessions.js +179 -0
  96. package/dist-native/__tests__/Storage.d.ts +1 -0
  97. package/dist-native/__tests__/Storage.js +173 -0
  98. package/dist-native/__tests__/constants.d.ts +36 -0
  99. package/dist-native/__tests__/constants.js +47 -0
  100. package/dist-native/index.d.ts +2 -0
  101. package/dist-native/index.js +7 -0
  102. package/dist-native/utils.d.ts +3 -0
  103. package/dist-native/utils.js +42 -0
  104. package/jest.config.js +6 -0
  105. package/package.json +8 -2
  106. package/webpack.browserConfig.js +1 -1
  107. package/webpack.config.js +1 -1
  108. package/.claude/settings.local.json +0 -9
@@ -0,0 +1,7 @@
1
+ export declare const AvoInspectorEnv: {
2
+ readonly Prod: "prod";
3
+ readonly Dev: "dev";
4
+ readonly Staging: "staging";
5
+ };
6
+ export type AvoInspectorEnvType = typeof AvoInspectorEnv;
7
+ export type AvoInspectorEnvValueType = AvoInspectorEnvType[keyof AvoInspectorEnvType];
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AvoInspectorEnv = void 0;
4
+ exports.AvoInspectorEnv = {
5
+ Prod: "prod",
6
+ Dev: "dev",
7
+ Staging: "staging",
8
+ };
@@ -0,0 +1,5 @@
1
+ export declare class AvoInstallationId {
2
+ static installationId: null | string;
3
+ static getInstallationId(): string;
4
+ static get cacheKey(): string;
5
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AvoInstallationId = void 0;
4
+ var AvoGuid_1 = require("./AvoGuid");
5
+ var AvoInspector_1 = require("./AvoInspector");
6
+ var AvoInstallationId = /** @class */ (function () {
7
+ function AvoInstallationId() {
8
+ }
9
+ AvoInstallationId.getInstallationId = function () {
10
+ if (AvoInstallationId.installationId !== null) {
11
+ return AvoInstallationId.installationId;
12
+ }
13
+ if (!AvoInspector_1.AvoInspector.avoStorage.isInitialized()) {
14
+ return "unknown";
15
+ }
16
+ var maybeInstallationId = AvoInspector_1.AvoInspector.avoStorage.getItem(AvoInstallationId.cacheKey);
17
+ if (maybeInstallationId === null || maybeInstallationId === undefined) {
18
+ AvoInstallationId.installationId = AvoGuid_1.default.newGuid();
19
+ AvoInspector_1.AvoInspector.avoStorage.setItem(AvoInstallationId.cacheKey, AvoInstallationId.installationId);
20
+ }
21
+ else {
22
+ AvoInstallationId.installationId = maybeInstallationId;
23
+ }
24
+ return AvoInstallationId.installationId;
25
+ };
26
+ Object.defineProperty(AvoInstallationId, "cacheKey", {
27
+ get: function () {
28
+ return "AvoInstallationId";
29
+ },
30
+ enumerable: false,
31
+ configurable: true
32
+ });
33
+ AvoInstallationId.installationId = null;
34
+ return AvoInstallationId;
35
+ }());
36
+ exports.AvoInstallationId = AvoInstallationId;
@@ -0,0 +1,48 @@
1
+ export interface BaseBody {
2
+ apiKey: string;
3
+ appName: string;
4
+ appVersion: string;
5
+ libVersion: string;
6
+ env: string;
7
+ libPlatform: "web";
8
+ messageId: string;
9
+ trackingId: string;
10
+ createdAt: string;
11
+ sessionId: string;
12
+ samplingRate: number;
13
+ }
14
+ export interface SessionStartedBody extends BaseBody {
15
+ type: "sessionStarted";
16
+ }
17
+ export interface EventSchemaBody extends BaseBody {
18
+ type: "event";
19
+ eventName: string;
20
+ eventProperties: Array<{
21
+ propertyName: string;
22
+ propertyType: string;
23
+ children?: any;
24
+ }>;
25
+ avoFunction: boolean;
26
+ eventId: string | null;
27
+ eventHash: string | null;
28
+ }
29
+ export declare class AvoNetworkCallsHandler {
30
+ private apiKey;
31
+ private envName;
32
+ private appName;
33
+ private appVersion;
34
+ private libVersion;
35
+ private samplingRate;
36
+ private sending;
37
+ private static trackingEndpoint;
38
+ constructor(apiKey: string, envName: string, appName: string, appVersion: string, libVersion: string);
39
+ callInspectorWithBatchBody(inEvents: Array<SessionStartedBody | EventSchemaBody>, onCompleted: (error: string | null) => any): void;
40
+ private fixSessionAndTrackingIds;
41
+ bodyForSessionStartedCall(): SessionStartedBody;
42
+ bodyForEventSchemaCall(eventName: string, eventProperties: Array<{
43
+ propertyName: string;
44
+ propertyType: string;
45
+ children?: any;
46
+ }>, eventId: string | null, eventHash: string | null): EventSchemaBody;
47
+ private createBaseCallBody;
48
+ }
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AvoNetworkCallsHandler = void 0;
4
+ var AvoGuid_1 = require("./AvoGuid");
5
+ var AvoSessionTracker_1 = require("./AvoSessionTracker");
6
+ var AvoInspector_1 = require("./AvoInspector");
7
+ var AvoInstallationId_1 = require("./AvoInstallationId");
8
+ var AvoNetworkCallsHandler = /** @class */ (function () {
9
+ function AvoNetworkCallsHandler(apiKey, envName, appName, appVersion, libVersion) {
10
+ this.samplingRate = 1.0;
11
+ this.sending = false;
12
+ this.apiKey = apiKey;
13
+ this.envName = envName;
14
+ this.appName = appName;
15
+ this.appVersion = appVersion;
16
+ this.libVersion = libVersion;
17
+ }
18
+ AvoNetworkCallsHandler.prototype.callInspectorWithBatchBody = function (inEvents, onCompleted) {
19
+ var _this = this;
20
+ if (this.sending) {
21
+ onCompleted("Batch sending cancelled because another batch sending is in progress. Your events will be sent with next batch.");
22
+ return;
23
+ }
24
+ var events = inEvents.filter(function (x) { return x != null; });
25
+ this.fixSessionAndTrackingIds(events);
26
+ if (events.length === 0) {
27
+ return;
28
+ }
29
+ if (Math.random() > this.samplingRate) {
30
+ if (AvoInspector_1.AvoInspector.shouldLog) {
31
+ console.log("Avo Inspector: last event schema dropped due to sampling rate.");
32
+ }
33
+ return;
34
+ }
35
+ if (AvoInspector_1.AvoInspector.shouldLog) {
36
+ console.log("Avo Inspector: events", events);
37
+ events.forEach(function (event) {
38
+ if (event.type === "sessionStarted") {
39
+ console.log("Avo Inspector: sending session started event.");
40
+ }
41
+ else if (event.type === "event") {
42
+ var schemaEvent = event;
43
+ console.log("Avo Inspector: sending event " + schemaEvent.eventName + " with schema " + JSON.stringify(schemaEvent.eventProperties));
44
+ }
45
+ });
46
+ }
47
+ this.sending = true;
48
+ var xmlhttp = new XMLHttpRequest();
49
+ xmlhttp.open("POST", AvoNetworkCallsHandler.trackingEndpoint, true);
50
+ xmlhttp.setRequestHeader("Content-Type", "text/plain");
51
+ xmlhttp.send(JSON.stringify(events));
52
+ xmlhttp.onload = function () {
53
+ if (xmlhttp.status != 200) {
54
+ onCompleted("Error ".concat(xmlhttp.status, ": ").concat(xmlhttp.statusText));
55
+ }
56
+ else {
57
+ var samplingRate = JSON.parse(xmlhttp.response).samplingRate;
58
+ if (samplingRate !== undefined) {
59
+ _this.samplingRate = samplingRate;
60
+ }
61
+ onCompleted(null);
62
+ }
63
+ };
64
+ xmlhttp.onerror = function () {
65
+ onCompleted("Request failed");
66
+ };
67
+ xmlhttp.ontimeout = function () {
68
+ onCompleted("Request timed out");
69
+ };
70
+ this.sending = false;
71
+ };
72
+ AvoNetworkCallsHandler.prototype.fixSessionAndTrackingIds = function (events) {
73
+ var knownSessionId = null;
74
+ var knownTrackingId = null;
75
+ events.forEach(function (event) {
76
+ if (event.sessionId !== null && event.sessionId !== undefined && event.sessionId !== "unknown") {
77
+ knownSessionId = event.sessionId;
78
+ }
79
+ if (event.trackingId !== null && event.trackingId !== undefined && event.trackingId !== "unknown") {
80
+ knownTrackingId = event.trackingId;
81
+ }
82
+ });
83
+ events.forEach(function (event) {
84
+ if (event.sessionId === "unknown") {
85
+ if (knownSessionId != null) {
86
+ event.sessionId = knownSessionId;
87
+ }
88
+ else {
89
+ event.sessionId = AvoSessionTracker_1.AvoSessionTracker.sessionId;
90
+ }
91
+ }
92
+ if (event.trackingId === "unknown") {
93
+ if (knownTrackingId != null) {
94
+ event.trackingId = knownTrackingId;
95
+ }
96
+ else {
97
+ event.trackingId = AvoInstallationId_1.AvoInstallationId.getInstallationId();
98
+ }
99
+ }
100
+ });
101
+ };
102
+ AvoNetworkCallsHandler.prototype.bodyForSessionStartedCall = function () {
103
+ var sessionBody = this.createBaseCallBody();
104
+ sessionBody.type = "sessionStarted";
105
+ return sessionBody;
106
+ };
107
+ AvoNetworkCallsHandler.prototype.bodyForEventSchemaCall = function (eventName, eventProperties, eventId, eventHash) {
108
+ var eventSchemaBody = this.createBaseCallBody();
109
+ eventSchemaBody.type = "event";
110
+ eventSchemaBody.eventName = eventName;
111
+ eventSchemaBody.eventProperties = eventProperties;
112
+ if (eventId != null) {
113
+ eventSchemaBody.avoFunction = true;
114
+ eventSchemaBody.eventId = eventId;
115
+ eventSchemaBody.eventHash = eventHash;
116
+ }
117
+ else {
118
+ eventSchemaBody.avoFunction = false;
119
+ eventSchemaBody.eventId = null;
120
+ eventSchemaBody.eventHash = null;
121
+ }
122
+ return eventSchemaBody;
123
+ };
124
+ AvoNetworkCallsHandler.prototype.createBaseCallBody = function () {
125
+ return {
126
+ apiKey: this.apiKey,
127
+ appName: this.appName,
128
+ appVersion: this.appVersion,
129
+ libVersion: this.libVersion,
130
+ env: this.envName,
131
+ libPlatform: "web",
132
+ messageId: AvoGuid_1.default.newGuid(),
133
+ trackingId: AvoInstallationId_1.AvoInstallationId.getInstallationId(),
134
+ createdAt: new Date().toISOString(),
135
+ sessionId: AvoSessionTracker_1.AvoSessionTracker.sessionId,
136
+ samplingRate: this.samplingRate,
137
+ };
138
+ };
139
+ AvoNetworkCallsHandler.trackingEndpoint = "https://api.avo.app/inspector/v1/track";
140
+ return AvoNetworkCallsHandler;
141
+ }());
142
+ exports.AvoNetworkCallsHandler = AvoNetworkCallsHandler;
@@ -0,0 +1,11 @@
1
+ export declare class AvoSchemaParser {
2
+ static extractSchema(eventProperties: {
3
+ [propName: string]: any;
4
+ }): Array<{
5
+ propertyName: string;
6
+ propertyType: string;
7
+ children?: any;
8
+ }>;
9
+ private static removeDuplicates;
10
+ private static getPropValueType;
11
+ }
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AvoSchemaParser = void 0;
4
+ var isArray = function (obj) {
5
+ return Object.prototype.toString.call(obj) === "[object Array]";
6
+ };
7
+ var AvoSchemaParser = /** @class */ (function () {
8
+ function AvoSchemaParser() {
9
+ }
10
+ AvoSchemaParser.extractSchema = function (eventProperties) {
11
+ var _this = this;
12
+ if (eventProperties === null || eventProperties === undefined) {
13
+ return [];
14
+ }
15
+ var mapping = function (object) {
16
+ if (isArray(object)) {
17
+ var list = object.map(function (x) {
18
+ return mapping(x);
19
+ });
20
+ return _this.removeDuplicates(list);
21
+ }
22
+ else if (typeof object === "object") {
23
+ var mappedResult = [];
24
+ for (var key in object) {
25
+ if (object.hasOwnProperty(key)) {
26
+ var val = object[key];
27
+ var mappedEntry = {
28
+ propertyName: key,
29
+ propertyType: _this.getPropValueType(val),
30
+ };
31
+ if (typeof val === "object" && val != null) {
32
+ mappedEntry["children"] = mapping(val);
33
+ }
34
+ mappedResult.push(mappedEntry);
35
+ }
36
+ }
37
+ return mappedResult;
38
+ }
39
+ else {
40
+ return _this.getPropValueType(object);
41
+ }
42
+ };
43
+ var mappedEventProps = mapping(eventProperties);
44
+ return mappedEventProps;
45
+ };
46
+ AvoSchemaParser.removeDuplicates = function (array) {
47
+ // XXX TODO fix any types
48
+ var primitives = { boolean: {}, number: {}, string: {} };
49
+ var objects = [];
50
+ return array.filter(function (item) {
51
+ var type = typeof item;
52
+ if (type in primitives) {
53
+ return primitives[type].hasOwnProperty(item)
54
+ ? false
55
+ : (primitives[type][item] = true);
56
+ }
57
+ else {
58
+ return objects.indexOf(item) >= 0 ? false : objects.push(item);
59
+ }
60
+ });
61
+ };
62
+ AvoSchemaParser.getPropValueType = function (propValue) {
63
+ var propType = typeof propValue;
64
+ if (propValue == null) {
65
+ return "null";
66
+ }
67
+ else if (propType === "string") {
68
+ return "string";
69
+ }
70
+ else if (propType === "number" || propType === "bigint") {
71
+ if ((propValue + "").indexOf(".") >= 0) {
72
+ return "float";
73
+ }
74
+ else {
75
+ return "int";
76
+ }
77
+ }
78
+ else if (propType === "boolean") {
79
+ return "boolean";
80
+ }
81
+ else if (propType === "object") {
82
+ if (isArray(propValue)) {
83
+ return "list";
84
+ }
85
+ else {
86
+ return "object";
87
+ }
88
+ }
89
+ else {
90
+ return "unknown";
91
+ }
92
+ };
93
+ return AvoSchemaParser;
94
+ }());
95
+ exports.AvoSchemaParser = AvoSchemaParser;
@@ -0,0 +1,15 @@
1
+ import { AvoBatcherType } from "./AvoBatcher";
2
+ export declare class AvoSessionTracker {
3
+ private static _sessionId;
4
+ static get sessionId(): string;
5
+ private _lastSessionTimestamp;
6
+ get lastSessionTimestamp(): number;
7
+ private _sessionLengthMillis;
8
+ get sessionLengthMillis(): number;
9
+ private avoBatcher;
10
+ constructor(avoBatcher: AvoBatcherType);
11
+ startOrProlongSession(atTime: number): void;
12
+ private static updateSessionId;
13
+ static get lastSessionTimestampKey(): string;
14
+ static get idCacheKey(): string;
15
+ }
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AvoSessionTracker = void 0;
4
+ var AvoGuid_1 = require("./AvoGuid");
5
+ var AvoInspector_1 = require("./AvoInspector");
6
+ var AvoSessionTracker = /** @class */ (function () {
7
+ function AvoSessionTracker(avoBatcher) {
8
+ this._lastSessionTimestamp = null;
9
+ this._sessionLengthMillis = 5 * 60 * 1000;
10
+ this.avoBatcher = avoBatcher;
11
+ }
12
+ Object.defineProperty(AvoSessionTracker, "sessionId", {
13
+ get: function () {
14
+ if (AvoSessionTracker._sessionId === null) {
15
+ if (!AvoInspector_1.AvoInspector.avoStorage.isInitialized()) {
16
+ return "unknown";
17
+ }
18
+ var maybeSessionId = null;
19
+ try {
20
+ maybeSessionId = AvoInspector_1.AvoInspector.avoStorage.getItem(AvoSessionTracker.idCacheKey);
21
+ }
22
+ catch (e) {
23
+ console.error("Avo Inspector: something went wrong. Please report to support@avo.app.", e);
24
+ }
25
+ if (maybeSessionId === null || maybeSessionId === undefined) {
26
+ AvoSessionTracker._sessionId = this.updateSessionId();
27
+ }
28
+ else {
29
+ AvoSessionTracker._sessionId = maybeSessionId;
30
+ }
31
+ }
32
+ return AvoSessionTracker._sessionId;
33
+ },
34
+ enumerable: false,
35
+ configurable: true
36
+ });
37
+ Object.defineProperty(AvoSessionTracker.prototype, "lastSessionTimestamp", {
38
+ get: function () {
39
+ if (this._lastSessionTimestamp === null ||
40
+ this._lastSessionTimestamp === 0) {
41
+ var maybeLastSessionTimestamp = AvoInspector_1.AvoInspector.avoStorage.getItem(AvoSessionTracker.lastSessionTimestampKey);
42
+ if (maybeLastSessionTimestamp !== null &&
43
+ maybeLastSessionTimestamp !== undefined) {
44
+ this._lastSessionTimestamp = maybeLastSessionTimestamp;
45
+ if (isNaN(this._lastSessionTimestamp)) {
46
+ this._lastSessionTimestamp = 0;
47
+ }
48
+ }
49
+ else {
50
+ this._lastSessionTimestamp = 0;
51
+ }
52
+ }
53
+ return this._lastSessionTimestamp;
54
+ },
55
+ enumerable: false,
56
+ configurable: true
57
+ });
58
+ Object.defineProperty(AvoSessionTracker.prototype, "sessionLengthMillis", {
59
+ get: function () {
60
+ return this._sessionLengthMillis;
61
+ },
62
+ enumerable: false,
63
+ configurable: true
64
+ });
65
+ AvoSessionTracker.prototype.startOrProlongSession = function (atTime) {
66
+ var _this = this;
67
+ AvoInspector_1.AvoInspector.avoStorage.runAfterInit(function () {
68
+ var timeSinceLastSession = atTime - _this.lastSessionTimestamp;
69
+ if (timeSinceLastSession > _this._sessionLengthMillis) {
70
+ AvoSessionTracker.updateSessionId();
71
+ _this.avoBatcher.handleSessionStarted();
72
+ }
73
+ _this._lastSessionTimestamp = atTime;
74
+ AvoInspector_1.AvoInspector.avoStorage.setItem(AvoSessionTracker.lastSessionTimestampKey, _this._lastSessionTimestamp);
75
+ });
76
+ };
77
+ AvoSessionTracker.updateSessionId = function () {
78
+ AvoSessionTracker._sessionId = AvoGuid_1.default.newGuid();
79
+ try {
80
+ AvoInspector_1.AvoInspector.avoStorage.setItem(AvoSessionTracker.idCacheKey, AvoSessionTracker.sessionId);
81
+ }
82
+ catch (e) {
83
+ console.error("Avo Inspector: something went wrong. Please report to support@avo.app.", e);
84
+ }
85
+ return AvoSessionTracker._sessionId;
86
+ };
87
+ Object.defineProperty(AvoSessionTracker, "lastSessionTimestampKey", {
88
+ get: function () {
89
+ return "AvoInspectorSessionTimestamp";
90
+ },
91
+ enumerable: false,
92
+ configurable: true
93
+ });
94
+ Object.defineProperty(AvoSessionTracker, "idCacheKey", {
95
+ get: function () {
96
+ return "AvoInspectorSessionId";
97
+ },
98
+ enumerable: false,
99
+ configurable: true
100
+ });
101
+ AvoSessionTracker._sessionId = null;
102
+ return AvoSessionTracker;
103
+ }());
104
+ exports.AvoSessionTracker = AvoSessionTracker;
@@ -0,0 +1,22 @@
1
+ declare abstract class PlatformAvoStorage {
2
+ abstract init(shouldLog: boolean): void;
3
+ abstract getItemAsync<T>(key: string): Promise<T | null>;
4
+ abstract getItem<T>(key: string): T | null;
5
+ abstract setItem<T>(key: string, value: T): void;
6
+ abstract removeItem(key: string): void;
7
+ abstract runAfterInit(func: () => void): void;
8
+ abstract isInitialized(): boolean;
9
+ parseJson<T>(maybeItem: string | null | undefined): T | null;
10
+ }
11
+ export declare class AvoStorage {
12
+ Platform: string | null;
13
+ storageImpl: PlatformAvoStorage;
14
+ constructor(shouldLog: boolean);
15
+ isInitialized(): boolean;
16
+ getItemAsync<T>(key: string): Promise<T | null>;
17
+ getItem<T>(key: string): T | null;
18
+ setItem<T>(key: string, value: T): void;
19
+ removeItem(key: string): void;
20
+ runAfterInit(func: () => void): void;
21
+ }
22
+ export {};