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.
- package/CHANGELOG.md +34 -1
- package/README.md +95 -0
- package/bin/avo-inspector.js +97 -0
- package/dist/AvoBatcher.d.ts +4 -2
- package/dist/AvoEncryption.d.ts +33 -0
- package/dist/AvoInspector.d.ts +31 -3
- package/dist/AvoNetworkCallsHandler.d.ts +28 -3
- package/dist/AvoSchemaParser.d.ts +12 -1
- package/dist/browser.js.LICENSE.txt +5 -0
- package/dist/eventSpec/AvoEventSpecCache.d.ts +73 -0
- package/dist/eventSpec/AvoEventSpecFetchTypes.d.ts +109 -0
- package/dist/eventSpec/AvoEventSpecFetcher.d.ts +54 -0
- package/dist/eventSpec/EventValidator.d.ts +90 -0
- package/dist/eventSpec/cache.d.ts +73 -0
- package/dist/eventSpec/index.d.ts +4 -0
- package/dist/eventSpec/types.d.ts +74 -0
- package/dist/index.js +2 -1
- package/dist/index.js.LICENSE.txt +5 -0
- package/dist-browser/AvoAnonymousId.d.ts +26 -0
- package/dist-browser/AvoBatcher.d.ts +26 -0
- package/dist-browser/AvoDeduplicator.d.ts +20 -0
- package/dist-browser/AvoEncryption.d.ts +33 -0
- package/dist-browser/AvoGuid.d.ts +3 -0
- package/dist-browser/AvoInspector.d.ts +78 -0
- package/dist-browser/AvoInspectorEnv.d.ts +7 -0
- package/dist-browser/AvoNetworkCallsHandler.d.ts +74 -0
- package/dist-browser/AvoSchemaParser.d.ts +20 -0
- package/dist-browser/AvoStorage.d.ts +22 -0
- package/dist-browser/__mocks__/xhr.d.ts +12 -0
- package/dist-browser/__mocks__/xhrError.d.ts +12 -0
- package/dist-browser/__tests__/AnonymousId_test.d.ts +1 -0
- package/dist-browser/__tests__/AvoEncryption_test.d.ts +1 -0
- package/dist-browser/__tests__/AvoInspectorEventSpec_test.d.ts +1 -0
- package/dist-browser/__tests__/AvoInspector_test.d.ts +1 -0
- package/dist-browser/__tests__/BatcherPublic_test.d.ts +1 -0
- package/dist-browser/__tests__/Batcher_test.d.ts +1 -0
- package/dist-browser/__tests__/Deduplicator_test.d.ts +1 -0
- package/dist-browser/__tests__/EncryptedPropertyTracking_test.d.ts +1 -0
- package/dist-browser/__tests__/EventSpecCache_test.d.ts +1 -0
- package/dist-browser/__tests__/EventSpecFetcher_test.d.ts +1 -0
- package/dist-browser/__tests__/EventValidator_test.d.ts +1 -0
- package/dist-browser/__tests__/NetworkCallsHandler_test.d.ts +1 -0
- package/dist-browser/__tests__/Parsing_test.d.ts +1 -0
- package/dist-browser/__tests__/Storage_test.d.ts +1 -0
- package/dist-browser/__tests__/ValidationIntegration_test.d.ts +1 -0
- package/dist-browser/__tests__/constants.d.ts +36 -0
- package/dist-browser/__tests__/helpers/encryptionHelpers.d.ts +13 -0
- package/dist-browser/__tests__/helpers/mockFactories.d.ts +49 -0
- package/dist-browser/eventSpec/AvoEventSpecCache.d.ts +73 -0
- package/dist-browser/eventSpec/AvoEventSpecFetchTypes.d.ts +109 -0
- package/dist-browser/eventSpec/AvoEventSpecFetcher.d.ts +55 -0
- package/dist-browser/eventSpec/EventValidator.d.ts +90 -0
- package/dist-browser/eventSpec/index.d.ts +4 -0
- package/dist-browser/index.d.ts +2 -0
- package/dist-browser/utils.d.ts +3 -0
- package/dist-native/AvoBatcher.d.ts +24 -0
- package/dist-native/AvoBatcher.js +82 -0
- package/dist-native/AvoDeduplicator.d.ts +36 -0
- package/dist-native/AvoDeduplicator.js +142 -0
- package/dist-native/AvoGuid.d.ts +3 -0
- package/dist-native/AvoGuid.js +14 -0
- package/dist-native/AvoInspector.d.ts +52 -0
- package/dist-native/AvoInspector.js +220 -0
- package/dist-native/AvoInspectorEnv.d.ts +7 -0
- package/dist-native/AvoInspectorEnv.js +8 -0
- package/dist-native/AvoInstallationId.d.ts +5 -0
- package/dist-native/AvoInstallationId.js +36 -0
- package/dist-native/AvoNetworkCallsHandler.d.ts +48 -0
- package/dist-native/AvoNetworkCallsHandler.js +142 -0
- package/dist-native/AvoSchemaParser.d.ts +11 -0
- package/dist-native/AvoSchemaParser.js +95 -0
- package/dist-native/AvoSessionTracker.d.ts +15 -0
- package/dist-native/AvoSessionTracker.js +104 -0
- package/dist-native/AvoStorage.d.ts +22 -0
- package/dist-native/AvoStorage.js +336 -0
- package/dist-native/__mocks__/xhr.d.ts +12 -0
- package/dist-native/__mocks__/xhr.js +14 -0
- package/dist-native/__mocks__/xhrError.d.ts +12 -0
- package/dist-native/__mocks__/xhrError.js +14 -0
- package/dist-native/__tests__/AvoInspector.d.ts +1 -0
- package/dist-native/__tests__/AvoInspector.js +207 -0
- package/dist-native/__tests__/Batcher.d.ts +1 -0
- package/dist-native/__tests__/Batcher.js +280 -0
- package/dist-native/__tests__/BatcherPublic.d.ts +1 -0
- package/dist-native/__tests__/BatcherPublic.js +82 -0
- package/dist-native/__tests__/Deduplicator.d.ts +1 -0
- package/dist-native/__tests__/Deduplicator.js +111 -0
- package/dist-native/__tests__/InstallationId.d.ts +1 -0
- package/dist-native/__tests__/InstallationId.js +40 -0
- package/dist-native/__tests__/NetworkCallsHandler.d.ts +1 -0
- package/dist-native/__tests__/NetworkCallsHandler.js +132 -0
- package/dist-native/__tests__/Parsing.d.ts +1 -0
- package/dist-native/__tests__/Parsing.js +115 -0
- package/dist-native/__tests__/Sessions.d.ts +1 -0
- package/dist-native/__tests__/Sessions.js +179 -0
- package/dist-native/__tests__/Storage.d.ts +1 -0
- package/dist-native/__tests__/Storage.js +173 -0
- package/dist-native/__tests__/constants.d.ts +36 -0
- package/dist-native/__tests__/constants.js +47 -0
- package/dist-native/index.d.ts +2 -0
- package/dist-native/index.js +7 -0
- package/dist-native/utils.d.ts +3 -0
- package/dist-native/utils.js +42 -0
- package/jest.config.js +6 -0
- package/package.json +8 -2
- package/webpack.browserConfig.js +1 -1
- package/webpack.config.js +1 -1
- 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,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 {};
|