avo-inspector 2.2.2-alpha.2 → 2.2.2-alpha.4
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/.claude/settings.local.json +18 -0
- package/bin/avo-inspector.js +78 -26
- package/dist/AvoInspector.d.ts +5 -0
- package/dist/AvoNetworkCallsHandler.d.ts +5 -3
- package/dist/AvoStreamId.d.ts +58 -0
- package/dist/eventSpec/AvoEventSpecCache.d.ts +2 -1
- package/dist/eventSpec/AvoEventSpecFetchTypes.d.ts +24 -18
- package/dist/eventSpec/AvoEventSpecFetcher.d.ts +9 -3
- package/dist/eventSpec/fetcher.d.ts +52 -0
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/rescript/AvoInspector.res +1 -0
- package/rescript/AvoInspector.resi +1 -1
- package/dist/browser.js.LICENSE.txt +0 -5
- package/dist-browser/AvoAnonymousId.d.ts +0 -26
- package/dist-browser/AvoBatcher.d.ts +0 -26
- package/dist-browser/AvoDeduplicator.d.ts +0 -20
- package/dist-browser/AvoEncryption.d.ts +0 -33
- package/dist-browser/AvoGuid.d.ts +0 -3
- package/dist-browser/AvoInspector.d.ts +0 -78
- package/dist-browser/AvoInspectorEnv.d.ts +0 -7
- package/dist-browser/AvoNetworkCallsHandler.d.ts +0 -74
- package/dist-browser/AvoSchemaParser.d.ts +0 -20
- package/dist-browser/AvoStorage.d.ts +0 -22
- package/dist-browser/__mocks__/xhr.d.ts +0 -12
- package/dist-browser/__mocks__/xhrError.d.ts +0 -12
- package/dist-browser/__tests__/AnonymousId_test.d.ts +0 -1
- package/dist-browser/__tests__/AvoEncryption_test.d.ts +0 -1
- package/dist-browser/__tests__/AvoInspectorEventSpec_test.d.ts +0 -1
- package/dist-browser/__tests__/AvoInspector_test.d.ts +0 -1
- package/dist-browser/__tests__/BatcherPublic_test.d.ts +0 -1
- package/dist-browser/__tests__/Batcher_test.d.ts +0 -1
- package/dist-browser/__tests__/Deduplicator_test.d.ts +0 -1
- package/dist-browser/__tests__/EncryptedPropertyTracking_test.d.ts +0 -1
- package/dist-browser/__tests__/EventSpecCache_test.d.ts +0 -1
- package/dist-browser/__tests__/EventSpecFetcher_test.d.ts +0 -1
- package/dist-browser/__tests__/EventValidator_test.d.ts +0 -1
- package/dist-browser/__tests__/NetworkCallsHandler_test.d.ts +0 -1
- package/dist-browser/__tests__/Parsing_test.d.ts +0 -1
- package/dist-browser/__tests__/Storage_test.d.ts +0 -1
- package/dist-browser/__tests__/ValidationIntegration_test.d.ts +0 -1
- package/dist-browser/__tests__/constants.d.ts +0 -36
- package/dist-browser/__tests__/helpers/encryptionHelpers.d.ts +0 -13
- package/dist-browser/__tests__/helpers/mockFactories.d.ts +0 -49
- package/dist-browser/eventSpec/AvoEventSpecCache.d.ts +0 -73
- package/dist-browser/eventSpec/AvoEventSpecFetchTypes.d.ts +0 -109
- package/dist-browser/eventSpec/AvoEventSpecFetcher.d.ts +0 -55
- package/dist-browser/eventSpec/EventValidator.d.ts +0 -90
- package/dist-browser/eventSpec/index.d.ts +0 -4
- package/dist-browser/index.d.ts +0 -2
- package/dist-browser/utils.d.ts +0 -3
- package/dist-native/AvoBatcher.d.ts +0 -24
- package/dist-native/AvoBatcher.js +0 -82
- package/dist-native/AvoDeduplicator.d.ts +0 -36
- package/dist-native/AvoDeduplicator.js +0 -142
- package/dist-native/AvoGuid.d.ts +0 -3
- package/dist-native/AvoGuid.js +0 -14
- package/dist-native/AvoInspector.d.ts +0 -52
- package/dist-native/AvoInspector.js +0 -220
- package/dist-native/AvoInspectorEnv.d.ts +0 -7
- package/dist-native/AvoInspectorEnv.js +0 -8
- package/dist-native/AvoInstallationId.d.ts +0 -5
- package/dist-native/AvoInstallationId.js +0 -36
- package/dist-native/AvoNetworkCallsHandler.d.ts +0 -48
- package/dist-native/AvoNetworkCallsHandler.js +0 -142
- package/dist-native/AvoSchemaParser.d.ts +0 -11
- package/dist-native/AvoSchemaParser.js +0 -95
- package/dist-native/AvoSessionTracker.d.ts +0 -15
- package/dist-native/AvoSessionTracker.js +0 -104
- package/dist-native/AvoStorage.d.ts +0 -22
- package/dist-native/AvoStorage.js +0 -336
- package/dist-native/__mocks__/xhr.d.ts +0 -12
- package/dist-native/__mocks__/xhr.js +0 -14
- package/dist-native/__mocks__/xhrError.d.ts +0 -12
- package/dist-native/__mocks__/xhrError.js +0 -14
- package/dist-native/__tests__/AvoInspector.d.ts +0 -1
- package/dist-native/__tests__/AvoInspector.js +0 -207
- package/dist-native/__tests__/Batcher.d.ts +0 -1
- package/dist-native/__tests__/Batcher.js +0 -280
- package/dist-native/__tests__/BatcherPublic.d.ts +0 -1
- package/dist-native/__tests__/BatcherPublic.js +0 -82
- package/dist-native/__tests__/Deduplicator.d.ts +0 -1
- package/dist-native/__tests__/Deduplicator.js +0 -111
- package/dist-native/__tests__/InstallationId.d.ts +0 -1
- package/dist-native/__tests__/InstallationId.js +0 -40
- package/dist-native/__tests__/NetworkCallsHandler.d.ts +0 -1
- package/dist-native/__tests__/NetworkCallsHandler.js +0 -132
- package/dist-native/__tests__/Parsing.d.ts +0 -1
- package/dist-native/__tests__/Parsing.js +0 -115
- package/dist-native/__tests__/Sessions.d.ts +0 -1
- package/dist-native/__tests__/Sessions.js +0 -179
- package/dist-native/__tests__/Storage.d.ts +0 -1
- package/dist-native/__tests__/Storage.js +0 -173
- package/dist-native/__tests__/constants.d.ts +0 -36
- package/dist-native/__tests__/constants.js +0 -47
- package/dist-native/index.d.ts +0 -2
- package/dist-native/index.js +0 -7
- package/dist-native/utils.d.ts +0 -3
- package/dist-native/utils.js +0 -42
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
var AvoDeduplicator_1 = require("../AvoDeduplicator");
|
|
15
|
-
var utils_1 = require("../utils");
|
|
16
|
-
var AvoSchemaParser_1 = require("../AvoSchemaParser");
|
|
17
|
-
var AvoInspector_1 = require("../AvoInspector");
|
|
18
|
-
var constants_1 = require("./constants");
|
|
19
|
-
describe("Deduplicator", function () {
|
|
20
|
-
var deduplicator = new AvoDeduplicator_1.AvoDeduplicator();
|
|
21
|
-
var testObject = {
|
|
22
|
-
"0": "some string",
|
|
23
|
-
"1": [1, 2, 3],
|
|
24
|
-
2: [["str", true]],
|
|
25
|
-
3: { avo: [1.1, 2.2, 3.3] }
|
|
26
|
-
};
|
|
27
|
-
test("AvoDeduplicator.deepEqual tests", function () {
|
|
28
|
-
var secondObject = {
|
|
29
|
-
"0": "some string",
|
|
30
|
-
"1": [1, 2, 3],
|
|
31
|
-
2: [["str", true]],
|
|
32
|
-
3: { avo: [1.1, 2.2, 3.3] }
|
|
33
|
-
};
|
|
34
|
-
expect((0, utils_1.deepEquals)(testObject, secondObject)).toBe(true);
|
|
35
|
-
expect((0, utils_1.deepEquals)(testObject, __assign(__assign({}, secondObject), { "4": "4" }))).toBe(false);
|
|
36
|
-
expect((0, utils_1.deepEquals)(testObject, __assign(__assign({}, secondObject), { 3: __assign(__assign({}, secondObject[3]), { avo: [1.1] }) }))).toBe(false);
|
|
37
|
-
expect((0, utils_1.deepEquals)(testObject, __assign(__assign({}, secondObject), { 0: "other string" }))).toBe(false);
|
|
38
|
-
});
|
|
39
|
-
test("Detects duplications when track in avo and then manually", function () {
|
|
40
|
-
var shouldRegisterFromAvo = deduplicator.shouldRegisterEvent("Test", testObject, true);
|
|
41
|
-
var shouldRegisterManual = deduplicator.shouldRegisterEvent("Test", testObject, false);
|
|
42
|
-
expect(shouldRegisterFromAvo).toBe(true);
|
|
43
|
-
expect(shouldRegisterManual).toBe(false);
|
|
44
|
-
});
|
|
45
|
-
test("Detects duplications when track manually and then in avo", function () {
|
|
46
|
-
var shouldRegisterManual = deduplicator.shouldRegisterEvent("Test", testObject, false);
|
|
47
|
-
var shouldRegisterFromAvo = deduplicator.shouldRegisterEvent("Test", testObject, true);
|
|
48
|
-
expect(shouldRegisterManual).toBe(true);
|
|
49
|
-
expect(shouldRegisterFromAvo).toBe(false);
|
|
50
|
-
});
|
|
51
|
-
test("Detects duplications when track in avo and then schema manually", function () {
|
|
52
|
-
var shouldRegisterFromAvo = deduplicator.shouldRegisterEvent("Test", testObject, true);
|
|
53
|
-
var shouldRegisterSchemaManual = deduplicator.shouldRegisterSchemaFromManually("Test", AvoSchemaParser_1.AvoSchemaParser.extractSchema(testObject));
|
|
54
|
-
expect(shouldRegisterFromAvo).toBe(true);
|
|
55
|
-
expect(shouldRegisterSchemaManual).toBe(false);
|
|
56
|
-
});
|
|
57
|
-
test("Inspector deduplicates only one event when track manually, in avo and then manually again", function () {
|
|
58
|
-
var inspector = new AvoInspector_1.AvoInspector(constants_1.defaultOptions);
|
|
59
|
-
inspector.enableLogging(false);
|
|
60
|
-
var manuallyTrackedSchema = inspector.trackSchemaFromEvent("test", testObject);
|
|
61
|
-
// @ts-ignore
|
|
62
|
-
var avoTrackedSchema = inspector._avoFunctionTrackSchemaFromEvent("test", testObject, "eventId", "eventhash");
|
|
63
|
-
var manuallyTrackedSchemaAgain = inspector.trackSchemaFromEvent("test", testObject);
|
|
64
|
-
expect(manuallyTrackedSchema.length).toBe(4);
|
|
65
|
-
expect(avoTrackedSchema.length).toBe(0);
|
|
66
|
-
expect(manuallyTrackedSchemaAgain.length).toBe(4);
|
|
67
|
-
});
|
|
68
|
-
test("Inspector deduplicates only one event when track in avo, manually and then in avo again", function () {
|
|
69
|
-
var inspector = new AvoInspector_1.AvoInspector(constants_1.defaultOptions);
|
|
70
|
-
inspector.enableLogging(false);
|
|
71
|
-
// @ts-ignore
|
|
72
|
-
var avoTrackedSchema = inspector._avoFunctionTrackSchemaFromEvent("test", testObject, "eventId", "eventhash");
|
|
73
|
-
var manuallyTrackedSchema = inspector.trackSchemaFromEvent("test", testObject);
|
|
74
|
-
// @ts-ignore
|
|
75
|
-
var avoTrackedSchemaAgain = inspector._avoFunctionTrackSchemaFromEvent("test", testObject, "eventId", "eventhash");
|
|
76
|
-
expect(avoTrackedSchema.length).toBe(4);
|
|
77
|
-
expect(manuallyTrackedSchema.length).toBe(0);
|
|
78
|
-
expect(avoTrackedSchemaAgain.length).toBe(4);
|
|
79
|
-
});
|
|
80
|
-
test("Allows two same manual events in a row", function () {
|
|
81
|
-
var inspector = new AvoInspector_1.AvoInspector(constants_1.defaultOptions);
|
|
82
|
-
inspector.enableLogging(false);
|
|
83
|
-
var manuallyTrackedSchema = inspector.trackSchemaFromEvent("test", testObject);
|
|
84
|
-
var manuallyTrackedSchemaAgain = inspector.trackSchemaFromEvent("test", testObject);
|
|
85
|
-
expect(manuallyTrackedSchema.length).toBe(4);
|
|
86
|
-
expect(manuallyTrackedSchemaAgain.length).toBe(4);
|
|
87
|
-
});
|
|
88
|
-
test("Allows two same avo events in a row", function () {
|
|
89
|
-
var inspector = new AvoInspector_1.AvoInspector(constants_1.defaultOptions);
|
|
90
|
-
inspector.enableLogging(false);
|
|
91
|
-
// @ts-ignore
|
|
92
|
-
var avoTrackedSchema = inspector._avoFunctionTrackSchemaFromEvent("test", testObject, "eventId", "eventhash");
|
|
93
|
-
// @ts-ignore
|
|
94
|
-
var avoTrackedSchemaAgain = inspector._avoFunctionTrackSchemaFromEvent("test", testObject, "eventId", "eventhash");
|
|
95
|
-
expect(avoTrackedSchema.length).toBe(4);
|
|
96
|
-
expect(avoTrackedSchemaAgain.length).toBe(4);
|
|
97
|
-
});
|
|
98
|
-
test("Does not deduplicate if more than 300ms pass", function () {
|
|
99
|
-
var shouldRegisterFromAvo = deduplicator.shouldRegisterEvent("Test", testObject, true);
|
|
100
|
-
var now = new Date();
|
|
101
|
-
var dateNowSpy = jest
|
|
102
|
-
.spyOn(Date, "now")
|
|
103
|
-
.mockImplementation(function () {
|
|
104
|
-
return now.setMilliseconds(now.getMilliseconds() + 301);
|
|
105
|
-
});
|
|
106
|
-
var shouldRegisterManual = deduplicator.shouldRegisterEvent("Test", testObject, false);
|
|
107
|
-
expect(shouldRegisterFromAvo).toBe(true);
|
|
108
|
-
expect(shouldRegisterManual).toBe(true);
|
|
109
|
-
dateNowSpy.mockRestore();
|
|
110
|
-
});
|
|
111
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var AvoInstallationId_1 = require("../AvoInstallationId");
|
|
4
|
-
var AvoStorage_1 = require("../AvoStorage");
|
|
5
|
-
var AvoInspector_1 = require("../AvoInspector");
|
|
6
|
-
var constants_1 = require("../__tests__/constants");
|
|
7
|
-
describe("InstallationId", function () {
|
|
8
|
-
var storage = new AvoStorage_1.AvoStorage(constants_1.defaultOptions.shouldLog);
|
|
9
|
-
beforeAll(function () {
|
|
10
|
-
new AvoInspector_1.AvoInspector(constants_1.defaultOptions);
|
|
11
|
-
});
|
|
12
|
-
test("cacheKey equal to \"AvoInstallationId\"", function () {
|
|
13
|
-
expect(AvoInstallationId_1.AvoInstallationId.cacheKey).toEqual("AvoInstallationId");
|
|
14
|
-
});
|
|
15
|
-
test("Sets installationId on AvoInspector init", function () {
|
|
16
|
-
// Given
|
|
17
|
-
// When
|
|
18
|
-
var installationId = AvoInstallationId_1.AvoInstallationId.getInstallationId();
|
|
19
|
-
// Then
|
|
20
|
-
expect(installationId).not.toBeNull();
|
|
21
|
-
});
|
|
22
|
-
test("Creates installation id if not present", function () {
|
|
23
|
-
// Given
|
|
24
|
-
storage.removeItem(AvoInstallationId_1.AvoInstallationId.cacheKey);
|
|
25
|
-
// When
|
|
26
|
-
var installationId = AvoInstallationId_1.AvoInstallationId.getInstallationId();
|
|
27
|
-
// Then
|
|
28
|
-
expect(installationId).not.toBeNull();
|
|
29
|
-
});
|
|
30
|
-
test("Reuses installation id if present", function () {
|
|
31
|
-
// Given
|
|
32
|
-
var newId = "test-installation-id";
|
|
33
|
-
storage.setItem(AvoInstallationId_1.AvoInstallationId.cacheKey, "test-installation-id");
|
|
34
|
-
AvoInstallationId_1.AvoInstallationId.installationId = null;
|
|
35
|
-
// When
|
|
36
|
-
var installationId = AvoInstallationId_1.AvoInstallationId.getInstallationId();
|
|
37
|
-
// Then
|
|
38
|
-
expect(installationId).toBe(newId);
|
|
39
|
-
});
|
|
40
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
var AvoGuid_1 = require("../AvoGuid");
|
|
15
|
-
var AvoInstallationId_1 = require("../AvoInstallationId");
|
|
16
|
-
var AvoNetworkCallsHandler_1 = require("../AvoNetworkCallsHandler");
|
|
17
|
-
var AvoSessionTracker_1 = require("../AvoSessionTracker");
|
|
18
|
-
var xhr_1 = require("../__mocks__/xhr");
|
|
19
|
-
var constants_1 = require("./constants");
|
|
20
|
-
var inspectorVersion = process.env.npm_package_version || "";
|
|
21
|
-
describe("NetworkCallsHandler", function () {
|
|
22
|
-
var apiKey = constants_1.defaultOptions.apiKey, env = constants_1.defaultOptions.env, version = constants_1.defaultOptions.version;
|
|
23
|
-
var appName = "";
|
|
24
|
-
var networkHandler;
|
|
25
|
-
var baseBody;
|
|
26
|
-
var customCallback = jest.fn();
|
|
27
|
-
var now = new Date();
|
|
28
|
-
beforeAll(function () {
|
|
29
|
-
// @ts-ignore
|
|
30
|
-
jest.spyOn(global, "Date").mockImplementation(function () { return now; });
|
|
31
|
-
jest
|
|
32
|
-
.spyOn(AvoInstallationId_1.AvoInstallationId, "getInstallationId")
|
|
33
|
-
.mockImplementation(function () { return constants_1.mockedReturns.INSTALLATION_ID; });
|
|
34
|
-
jest
|
|
35
|
-
.spyOn(AvoGuid_1.default, "newGuid")
|
|
36
|
-
.mockImplementation(function () { return constants_1.mockedReturns.GUID; });
|
|
37
|
-
jest
|
|
38
|
-
.spyOn(AvoSessionTracker_1.AvoSessionTracker, "sessionId", "get")
|
|
39
|
-
.mockImplementation(function () { return constants_1.mockedReturns.SESSION_ID; });
|
|
40
|
-
networkHandler = new AvoNetworkCallsHandler_1.AvoNetworkCallsHandler(apiKey, env, "", version, inspectorVersion);
|
|
41
|
-
baseBody = {
|
|
42
|
-
apiKey: apiKey,
|
|
43
|
-
appName: appName,
|
|
44
|
-
appVersion: version,
|
|
45
|
-
libVersion: inspectorVersion,
|
|
46
|
-
env: env,
|
|
47
|
-
libPlatform: "web",
|
|
48
|
-
messageId: constants_1.mockedReturns.GUID,
|
|
49
|
-
trackingId: constants_1.mockedReturns.INSTALLATION_ID,
|
|
50
|
-
createdAt: new Date().toISOString(),
|
|
51
|
-
sessionId: constants_1.mockedReturns.SESSION_ID,
|
|
52
|
-
samplingRate: 1.0,
|
|
53
|
-
};
|
|
54
|
-
});
|
|
55
|
-
afterEach(function () {
|
|
56
|
-
jest.clearAllMocks();
|
|
57
|
-
});
|
|
58
|
-
test("bodyForSessionStartedCall returns base body + session started body used for session started", function () {
|
|
59
|
-
var body = networkHandler.bodyForSessionStartedCall();
|
|
60
|
-
expect(body).toEqual(__assign(__assign({}, baseBody), { type: "sessionStarted" }));
|
|
61
|
-
});
|
|
62
|
-
test("bodyForEventSchemaCall returns base body + event schema used for event sending from non avo functions", function () {
|
|
63
|
-
var eventName = "event name";
|
|
64
|
-
var eventProperties = [{ propertyName: "prop0", propertyType: "string" }];
|
|
65
|
-
var body = networkHandler.bodyForEventSchemaCall(eventName, eventProperties, null, null);
|
|
66
|
-
expect(body).toEqual(__assign(__assign({}, baseBody), { type: "event", eventName: eventName, eventProperties: eventProperties, avoFunction: false, eventId: null, eventHash: null }));
|
|
67
|
-
});
|
|
68
|
-
test("bodyForEventSchemaCall returns base body + event schema used for event sending from avo functions", function () {
|
|
69
|
-
var eventName = "event name";
|
|
70
|
-
var eventId = "event id";
|
|
71
|
-
var eventHash = "event hash";
|
|
72
|
-
var eventProperties = [{ propertyName: "prop0", propertyType: "string" }];
|
|
73
|
-
var body = networkHandler.bodyForEventSchemaCall(eventName, eventProperties, eventId, eventHash);
|
|
74
|
-
expect(body).toEqual(__assign(__assign({}, baseBody), { type: "event", eventName: eventName, eventProperties: eventProperties, avoFunction: true, eventId: eventId, eventHash: eventHash }));
|
|
75
|
-
});
|
|
76
|
-
test("POST request is not sent if event list is empty", function () {
|
|
77
|
-
var events = [];
|
|
78
|
-
networkHandler.callInspectorWithBatchBody(events, customCallback);
|
|
79
|
-
expect(xhr_1.default.open).not.toBeCalled();
|
|
80
|
-
});
|
|
81
|
-
test("callInspectorWithBatchBody sends POST request", function () {
|
|
82
|
-
var eventName = "event name";
|
|
83
|
-
var eventProperties = [{ propertyName: "prop0", propertyType: "string" }];
|
|
84
|
-
var sessionStartedBody = networkHandler.bodyForSessionStartedCall();
|
|
85
|
-
var eventBody = networkHandler.bodyForEventSchemaCall(eventName, eventProperties, null, null);
|
|
86
|
-
var events = [sessionStartedBody, eventBody];
|
|
87
|
-
networkHandler.callInspectorWithBatchBody(events, customCallback);
|
|
88
|
-
expect(xhr_1.default.open).toBeCalledTimes(1);
|
|
89
|
-
expect(xhr_1.default.open).toBeCalledWith("POST", constants_1.trackingEndpoint, true);
|
|
90
|
-
expect(xhr_1.default.setRequestHeader).toBeCalledWith("Content-Type", "text/plain");
|
|
91
|
-
expect(xhr_1.default.send).toBeCalledTimes(1);
|
|
92
|
-
expect(xhr_1.default.send).toBeCalledWith(JSON.stringify(events));
|
|
93
|
-
xhr_1.default.onload();
|
|
94
|
-
expect(customCallback).toBeCalledTimes(1);
|
|
95
|
-
expect(customCallback).toBeCalledWith(null);
|
|
96
|
-
});
|
|
97
|
-
test("Custom callback is called when 200 OK", function () {
|
|
98
|
-
var sessionStartedBody = networkHandler.bodyForSessionStartedCall();
|
|
99
|
-
var events = [sessionStartedBody];
|
|
100
|
-
networkHandler.callInspectorWithBatchBody(events, customCallback);
|
|
101
|
-
xhr_1.default.onload();
|
|
102
|
-
expect(customCallback).toBeCalledTimes(1);
|
|
103
|
-
expect(customCallback).toBeCalledWith(null);
|
|
104
|
-
});
|
|
105
|
-
test("Custom callback is called with error when not 200 OK", function () {
|
|
106
|
-
var xhrErrorMock = require("../__mocks__/xhrError").default;
|
|
107
|
-
var sessionStartedBody = networkHandler.bodyForSessionStartedCall();
|
|
108
|
-
var events = [sessionStartedBody];
|
|
109
|
-
networkHandler.callInspectorWithBatchBody(events, customCallback);
|
|
110
|
-
xhrErrorMock.onload();
|
|
111
|
-
expect(customCallback).toBeCalledTimes(1);
|
|
112
|
-
expect(customCallback).toBeCalledWith("Error 400: Bad Request");
|
|
113
|
-
});
|
|
114
|
-
test("Custom callback is called onerror", function () {
|
|
115
|
-
var xhrErrorMock = require("../__mocks__/xhrError").default;
|
|
116
|
-
var sessionStartedBody = networkHandler.bodyForSessionStartedCall();
|
|
117
|
-
var events = [sessionStartedBody];
|
|
118
|
-
networkHandler.callInspectorWithBatchBody(events, customCallback);
|
|
119
|
-
xhrErrorMock.onerror();
|
|
120
|
-
expect(customCallback).toBeCalledTimes(1);
|
|
121
|
-
expect(customCallback).toBeCalledWith(constants_1.requestMsg.ERROR);
|
|
122
|
-
});
|
|
123
|
-
test("Custom callback is called ontimeout", function () {
|
|
124
|
-
var xhrErrorMock = require("../__mocks__/xhrError").default;
|
|
125
|
-
var sessionStartedBody = networkHandler.bodyForSessionStartedCall();
|
|
126
|
-
var events = [sessionStartedBody];
|
|
127
|
-
networkHandler.callInspectorWithBatchBody(events, customCallback);
|
|
128
|
-
xhrErrorMock.ontimeout();
|
|
129
|
-
expect(customCallback).toBeCalledTimes(1);
|
|
130
|
-
expect(customCallback).toBeCalledWith(constants_1.requestMsg.TIMEOUT);
|
|
131
|
-
});
|
|
132
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var AvoInspector_1 = require("../AvoInspector");
|
|
4
|
-
var constants_1 = require("../__tests__/constants");
|
|
5
|
-
describe("Schema Parsing", function () {
|
|
6
|
-
var inspector = new AvoInspector_1.AvoInspector(constants_1.defaultOptions);
|
|
7
|
-
beforeAll(function () {
|
|
8
|
-
inspector.enableLogging(false);
|
|
9
|
-
});
|
|
10
|
-
test("Empty array returned if eventProperties are not set", function () {
|
|
11
|
-
// @ts-ignore
|
|
12
|
-
var schema = inspector.extractSchema();
|
|
13
|
-
expect(schema).toEqual([]);
|
|
14
|
-
});
|
|
15
|
-
test("Property types and names are set", function () {
|
|
16
|
-
// Given
|
|
17
|
-
var eventProperties = {
|
|
18
|
-
prop0: true,
|
|
19
|
-
prop1: 1,
|
|
20
|
-
prop2: "str",
|
|
21
|
-
prop3: 0.5,
|
|
22
|
-
prop4: undefined,
|
|
23
|
-
prop5: null,
|
|
24
|
-
prop6: { an: "object" },
|
|
25
|
-
prop7: [
|
|
26
|
-
"a",
|
|
27
|
-
"list",
|
|
28
|
-
{
|
|
29
|
-
"obj in list": true,
|
|
30
|
-
"int field": 1,
|
|
31
|
-
},
|
|
32
|
-
["another", "list"],
|
|
33
|
-
[1, 2],
|
|
34
|
-
],
|
|
35
|
-
};
|
|
36
|
-
// When
|
|
37
|
-
var res = inspector.extractSchema(eventProperties);
|
|
38
|
-
// Then
|
|
39
|
-
res.forEach(function (_a, index) {
|
|
40
|
-
var propertyName = _a.propertyName;
|
|
41
|
-
expect(propertyName).toBe("prop".concat(index));
|
|
42
|
-
});
|
|
43
|
-
expect(res[0].propertyType).toBe(constants_1.type.BOOL);
|
|
44
|
-
expect(res[1].propertyType).toBe(constants_1.type.INT);
|
|
45
|
-
expect(res[2].propertyType).toBe(constants_1.type.STRING);
|
|
46
|
-
expect(res[3].propertyType).toBe(constants_1.type.FLOAT);
|
|
47
|
-
expect(res[4].propertyType).toBe(constants_1.type.NULL);
|
|
48
|
-
expect(res[5].propertyType).toBe(constants_1.type.NULL);
|
|
49
|
-
expect(res[6].propertyType).toBe(constants_1.type.OBJECT);
|
|
50
|
-
expect(res[6].children).toMatchObject([
|
|
51
|
-
{
|
|
52
|
-
propertyName: "an",
|
|
53
|
-
propertyType: constants_1.type.STRING,
|
|
54
|
-
},
|
|
55
|
-
]);
|
|
56
|
-
expect(res[7].propertyType).toBe(constants_1.type.LIST);
|
|
57
|
-
expect(res[7].children).toMatchObject([
|
|
58
|
-
constants_1.type.STRING,
|
|
59
|
-
[
|
|
60
|
-
{
|
|
61
|
-
propertyName: "obj in list",
|
|
62
|
-
propertyType: constants_1.type.BOOL,
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
propertyName: "int field",
|
|
66
|
-
propertyType: constants_1.type.INT,
|
|
67
|
-
},
|
|
68
|
-
],
|
|
69
|
-
[constants_1.type.STRING],
|
|
70
|
-
[constants_1.type.INT],
|
|
71
|
-
]);
|
|
72
|
-
});
|
|
73
|
-
test("Duplicated values are removed", function () {
|
|
74
|
-
// Given
|
|
75
|
-
var eventProperties = {
|
|
76
|
-
prop0: ["true", "false", true, 10, "true", true, 11, 10, 0.1, 0.1],
|
|
77
|
-
};
|
|
78
|
-
// When
|
|
79
|
-
var res = inspector.extractSchema(eventProperties);
|
|
80
|
-
// Then
|
|
81
|
-
expect(res[0].propertyType).toBe(constants_1.type.LIST);
|
|
82
|
-
expect(res[0].children).toMatchObject([
|
|
83
|
-
constants_1.type.STRING,
|
|
84
|
-
constants_1.type.BOOL,
|
|
85
|
-
constants_1.type.INT,
|
|
86
|
-
constants_1.type.FLOAT,
|
|
87
|
-
]);
|
|
88
|
-
});
|
|
89
|
-
test("Empty and falsy values are set correctly", function () {
|
|
90
|
-
// Given
|
|
91
|
-
var eventProperties = {
|
|
92
|
-
prop0: false,
|
|
93
|
-
prop1: 0,
|
|
94
|
-
prop2: "",
|
|
95
|
-
prop3: 0.0,
|
|
96
|
-
prop4: undefined,
|
|
97
|
-
prop5: null,
|
|
98
|
-
prop6: {},
|
|
99
|
-
prop7: [],
|
|
100
|
-
};
|
|
101
|
-
// When
|
|
102
|
-
var res = inspector.extractSchema(eventProperties);
|
|
103
|
-
// Then
|
|
104
|
-
expect(res[0].propertyType).toBe(constants_1.type.BOOL);
|
|
105
|
-
expect(res[1].propertyType).toBe(constants_1.type.INT);
|
|
106
|
-
expect(res[2].propertyType).toBe(constants_1.type.STRING);
|
|
107
|
-
expect(res[3].propertyType).toBe(constants_1.type.INT);
|
|
108
|
-
expect(res[4].propertyType).toBe(constants_1.type.NULL);
|
|
109
|
-
expect(res[5].propertyType).toBe(constants_1.type.NULL);
|
|
110
|
-
expect(res[6].propertyType).toBe(constants_1.type.OBJECT);
|
|
111
|
-
expect(res[6].children).toMatchObject([]);
|
|
112
|
-
expect(res[7].propertyType).toBe(constants_1.type.LIST);
|
|
113
|
-
expect(res[7].children).toMatchObject([]);
|
|
114
|
-
});
|
|
115
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var AvoBatcher_1 = require("../AvoBatcher");
|
|
4
|
-
var AvoInspector_1 = require("../AvoInspector");
|
|
5
|
-
var AvoNetworkCallsHandler_1 = require("../AvoNetworkCallsHandler");
|
|
6
|
-
var AvoSessionTracker_1 = require("../AvoSessionTracker");
|
|
7
|
-
var AvoStorage_1 = require("../AvoStorage");
|
|
8
|
-
var constants_1 = require("../__tests__/constants");
|
|
9
|
-
var inspectorVersion = process.env.npm_package_version || "";
|
|
10
|
-
jest.mock("../AvoBatcher");
|
|
11
|
-
jest.mock("../AvoNetworkCallsHandler");
|
|
12
|
-
describe("Sessions", function () {
|
|
13
|
-
var apiKey = constants_1.defaultOptions.apiKey, env = constants_1.defaultOptions.env, version = constants_1.defaultOptions.version, shouldLog = constants_1.defaultOptions.shouldLog;
|
|
14
|
-
var storage = new AvoStorage_1.AvoStorage(shouldLog);
|
|
15
|
-
var networkHandler = new AvoNetworkCallsHandler_1.AvoNetworkCallsHandler(apiKey, env, "", version, inspectorVersion);
|
|
16
|
-
var mockBatcher = new AvoBatcher_1.AvoBatcher(networkHandler);
|
|
17
|
-
afterEach(function () {
|
|
18
|
-
jest.clearAllMocks();
|
|
19
|
-
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.idCacheKey);
|
|
20
|
-
});
|
|
21
|
-
test("Session started on window.onload", function () {
|
|
22
|
-
// Given
|
|
23
|
-
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey);
|
|
24
|
-
var inspector = new AvoInspector_1.AvoInspector(constants_1.defaultOptions);
|
|
25
|
-
inspector.enableLogging(false);
|
|
26
|
-
inspector.sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
|
|
27
|
-
// When
|
|
28
|
-
var loadEvent = document.createEvent("Event");
|
|
29
|
-
loadEvent.initEvent("load", false, false);
|
|
30
|
-
window.dispatchEvent(loadEvent);
|
|
31
|
-
// Then
|
|
32
|
-
expect(mockBatcher.handleSessionStarted).toHaveBeenCalledTimes(1);
|
|
33
|
-
});
|
|
34
|
-
test("Session started on trackSchemaFromEvent", function () {
|
|
35
|
-
// Given
|
|
36
|
-
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey);
|
|
37
|
-
var inspector = new AvoInspector_1.AvoInspector(constants_1.defaultOptions);
|
|
38
|
-
inspector.enableLogging(false);
|
|
39
|
-
inspector.sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
|
|
40
|
-
// When
|
|
41
|
-
inspector.trackSchemaFromEvent("Test event", {});
|
|
42
|
-
// Then
|
|
43
|
-
expect(mockBatcher.handleSessionStarted).toHaveBeenCalledTimes(1);
|
|
44
|
-
});
|
|
45
|
-
test("Session started on trackSchema", function () {
|
|
46
|
-
// Given
|
|
47
|
-
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey);
|
|
48
|
-
var inspector = new AvoInspector_1.AvoInspector(constants_1.defaultOptions);
|
|
49
|
-
inspector.enableLogging(false);
|
|
50
|
-
inspector.sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
|
|
51
|
-
// When
|
|
52
|
-
inspector.trackSchema("Test event", []);
|
|
53
|
-
// Then
|
|
54
|
-
expect(mockBatcher.handleSessionStarted).toHaveBeenCalledTimes(1);
|
|
55
|
-
});
|
|
56
|
-
test("Session started on extractSchema", function () {
|
|
57
|
-
// Given
|
|
58
|
-
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey);
|
|
59
|
-
var inspector = new AvoInspector_1.AvoInspector(constants_1.defaultOptions);
|
|
60
|
-
inspector.enableLogging(false);
|
|
61
|
-
inspector.sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
|
|
62
|
-
// When
|
|
63
|
-
inspector.extractSchema({});
|
|
64
|
-
// Then
|
|
65
|
-
expect(mockBatcher.handleSessionStarted).toHaveBeenCalledTimes(1);
|
|
66
|
-
});
|
|
67
|
-
test("Inits with session tracker", function () {
|
|
68
|
-
// When
|
|
69
|
-
var inspector = new AvoInspector_1.AvoInspector(constants_1.defaultOptions);
|
|
70
|
-
// Then
|
|
71
|
-
expect(inspector.sessionTracker).not.toBeNull();
|
|
72
|
-
});
|
|
73
|
-
test("Inits with timestamp 0 and a session id", function () {
|
|
74
|
-
// Given
|
|
75
|
-
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey);
|
|
76
|
-
// When
|
|
77
|
-
var sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(new AvoBatcher_1.AvoBatcher(networkHandler));
|
|
78
|
-
// Then
|
|
79
|
-
expect(sessionTracker.lastSessionTimestamp).toBe(0);
|
|
80
|
-
expect(AvoSessionTracker_1.AvoSessionTracker.sessionId).not.toBeNull();
|
|
81
|
-
});
|
|
82
|
-
test("Starts new session when no session recorded", function () {
|
|
83
|
-
// Given
|
|
84
|
-
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey);
|
|
85
|
-
var callMoment = Date.now();
|
|
86
|
-
// When
|
|
87
|
-
var sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
|
|
88
|
-
var prevSessionId = AvoSessionTracker_1.AvoSessionTracker.sessionId;
|
|
89
|
-
sessionTracker.startOrProlongSession(callMoment);
|
|
90
|
-
// Then
|
|
91
|
-
expect(sessionTracker.lastSessionTimestamp).toBe(callMoment);
|
|
92
|
-
expect(AvoSessionTracker_1.AvoSessionTracker.sessionId).not.toBeNull();
|
|
93
|
-
expect(AvoSessionTracker_1.AvoSessionTracker.sessionId).not.toBe(prevSessionId);
|
|
94
|
-
expect(mockBatcher.handleSessionStarted).toHaveBeenCalledTimes(1);
|
|
95
|
-
});
|
|
96
|
-
test("Starts new session when time between session calls is greater than time between sessions", function () {
|
|
97
|
-
// Given
|
|
98
|
-
var callMoment = Date.now();
|
|
99
|
-
storage.setItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey, callMoment - constants_1.sessionTimeMs - 1);
|
|
100
|
-
// When
|
|
101
|
-
var sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
|
|
102
|
-
var prevSessionId = AvoSessionTracker_1.AvoSessionTracker.sessionId;
|
|
103
|
-
sessionTracker.startOrProlongSession(callMoment);
|
|
104
|
-
// Then
|
|
105
|
-
expect(sessionTracker.lastSessionTimestamp).toBe(callMoment);
|
|
106
|
-
expect(AvoSessionTracker_1.AvoSessionTracker.sessionId).not.toBeNull();
|
|
107
|
-
expect(AvoSessionTracker_1.AvoSessionTracker.sessionId).not.toBe(prevSessionId);
|
|
108
|
-
expect(mockBatcher.handleSessionStarted).toHaveBeenCalledTimes(1);
|
|
109
|
-
});
|
|
110
|
-
test("Not starts new session when time between session calls is smaller than time between sessions", function () {
|
|
111
|
-
// Given
|
|
112
|
-
var callMoment = Date.now();
|
|
113
|
-
storage.setItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey, callMoment - constants_1.sessionTimeMs + 1);
|
|
114
|
-
// When
|
|
115
|
-
var sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
|
|
116
|
-
var prevSessionId = AvoSessionTracker_1.AvoSessionTracker.sessionId;
|
|
117
|
-
sessionTracker.startOrProlongSession(callMoment);
|
|
118
|
-
// Then
|
|
119
|
-
expect(sessionTracker.lastSessionTimestamp).toBe(callMoment);
|
|
120
|
-
expect(AvoSessionTracker_1.AvoSessionTracker.sessionId).toBe(prevSessionId);
|
|
121
|
-
expect(mockBatcher.handleSessionStarted).toHaveBeenCalledTimes(0);
|
|
122
|
-
});
|
|
123
|
-
test("Not starts new session when time between individual session calls is smaller than time between sessions but combined is greater", function () {
|
|
124
|
-
// Given
|
|
125
|
-
var callMoment = Date.now();
|
|
126
|
-
storage.setItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey, callMoment - constants_1.sessionTimeMs + 1);
|
|
127
|
-
// When
|
|
128
|
-
var sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
|
|
129
|
-
var prevSessionId = AvoSessionTracker_1.AvoSessionTracker.sessionId;
|
|
130
|
-
sessionTracker.startOrProlongSession(callMoment);
|
|
131
|
-
sessionTracker.startOrProlongSession(callMoment + constants_1.sessionTimeMs);
|
|
132
|
-
// Then
|
|
133
|
-
expect(sessionTracker.lastSessionTimestamp).toBe(callMoment + constants_1.sessionTimeMs);
|
|
134
|
-
expect(AvoSessionTracker_1.AvoSessionTracker.sessionId).toBe(prevSessionId);
|
|
135
|
-
expect(mockBatcher.handleSessionStarted).toHaveBeenCalledTimes(0);
|
|
136
|
-
});
|
|
137
|
-
test("Parses saved timestamp properly", function () {
|
|
138
|
-
// Given
|
|
139
|
-
var callMoment = Date.now();
|
|
140
|
-
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey);
|
|
141
|
-
// When
|
|
142
|
-
var sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
|
|
143
|
-
// Then
|
|
144
|
-
expect(sessionTracker.lastSessionTimestamp).toBe(0);
|
|
145
|
-
// When
|
|
146
|
-
sessionTracker.startOrProlongSession(callMoment);
|
|
147
|
-
// Then
|
|
148
|
-
expect(sessionTracker.lastSessionTimestamp).toBe(callMoment);
|
|
149
|
-
// When
|
|
150
|
-
sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
|
|
151
|
-
// Then
|
|
152
|
-
expect(sessionTracker.lastSessionTimestamp).toBe(callMoment);
|
|
153
|
-
});
|
|
154
|
-
test("Default session length is 5 mins", function () {
|
|
155
|
-
// Given
|
|
156
|
-
// When
|
|
157
|
-
var sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
|
|
158
|
-
// Then
|
|
159
|
-
expect(sessionTracker.sessionLengthMillis).toBe(constants_1.sessionTimeMs);
|
|
160
|
-
});
|
|
161
|
-
test("Delays session init if items from last sessions are not loaded", function () {
|
|
162
|
-
// Given
|
|
163
|
-
var callMoment = Date.now();
|
|
164
|
-
storage.removeItem(AvoSessionTracker_1.AvoSessionTracker.lastSessionTimestampKey);
|
|
165
|
-
AvoInspector_1.AvoInspector.avoStorage.storageImpl.storageInitialized = false;
|
|
166
|
-
// When
|
|
167
|
-
var sessionTracker = new AvoSessionTracker_1.AvoSessionTracker(mockBatcher);
|
|
168
|
-
// Then
|
|
169
|
-
expect(sessionTracker.lastSessionTimestamp).toBe(0);
|
|
170
|
-
// When
|
|
171
|
-
sessionTracker.startOrProlongSession(callMoment);
|
|
172
|
-
// Then
|
|
173
|
-
expect(sessionTracker.lastSessionTimestamp).toBe(0);
|
|
174
|
-
// When
|
|
175
|
-
AvoInspector_1.AvoInspector.avoStorage.storageImpl.init(true);
|
|
176
|
-
// Then
|
|
177
|
-
expect(sessionTracker.lastSessionTimestamp).toBe(callMoment);
|
|
178
|
-
});
|
|
179
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|