avo-inspector 2.1.0 → 2.2.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 (57) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/CHANGELOG.md +9 -0
  3. package/README.md +8 -0
  4. package/dist/AvoAnonymousId.d.ts +26 -0
  5. package/dist/AvoInspector.d.ts +0 -2
  6. package/dist/AvoNetworkCallsHandler.d.ts +2 -1
  7. package/dist/index.js +1 -1
  8. package/jest.config.js +23 -0
  9. package/package.json +1 -21
  10. package/dist-native/AvoBatcher.d.ts +0 -24
  11. package/dist-native/AvoBatcher.js +0 -82
  12. package/dist-native/AvoDeduplicator.d.ts +0 -36
  13. package/dist-native/AvoDeduplicator.js +0 -142
  14. package/dist-native/AvoGuid.d.ts +0 -3
  15. package/dist-native/AvoGuid.js +0 -14
  16. package/dist-native/AvoInspector.d.ts +0 -52
  17. package/dist-native/AvoInspector.js +0 -220
  18. package/dist-native/AvoInspectorEnv.d.ts +0 -7
  19. package/dist-native/AvoInspectorEnv.js +0 -8
  20. package/dist-native/AvoInstallationId.d.ts +0 -5
  21. package/dist-native/AvoInstallationId.js +0 -36
  22. package/dist-native/AvoNetworkCallsHandler.d.ts +0 -48
  23. package/dist-native/AvoNetworkCallsHandler.js +0 -142
  24. package/dist-native/AvoSchemaParser.d.ts +0 -11
  25. package/dist-native/AvoSchemaParser.js +0 -95
  26. package/dist-native/AvoSessionTracker.d.ts +0 -15
  27. package/dist-native/AvoSessionTracker.js +0 -104
  28. package/dist-native/AvoStorage.d.ts +0 -22
  29. package/dist-native/AvoStorage.js +0 -336
  30. package/dist-native/__mocks__/xhr.d.ts +0 -12
  31. package/dist-native/__mocks__/xhr.js +0 -14
  32. package/dist-native/__mocks__/xhrError.d.ts +0 -12
  33. package/dist-native/__mocks__/xhrError.js +0 -14
  34. package/dist-native/__tests__/AvoInspector.d.ts +0 -1
  35. package/dist-native/__tests__/AvoInspector.js +0 -207
  36. package/dist-native/__tests__/Batcher.d.ts +0 -1
  37. package/dist-native/__tests__/Batcher.js +0 -280
  38. package/dist-native/__tests__/BatcherPublic.d.ts +0 -1
  39. package/dist-native/__tests__/BatcherPublic.js +0 -82
  40. package/dist-native/__tests__/Deduplicator.d.ts +0 -1
  41. package/dist-native/__tests__/Deduplicator.js +0 -111
  42. package/dist-native/__tests__/InstallationId.d.ts +0 -1
  43. package/dist-native/__tests__/InstallationId.js +0 -40
  44. package/dist-native/__tests__/NetworkCallsHandler.d.ts +0 -1
  45. package/dist-native/__tests__/NetworkCallsHandler.js +0 -132
  46. package/dist-native/__tests__/Parsing.d.ts +0 -1
  47. package/dist-native/__tests__/Parsing.js +0 -115
  48. package/dist-native/__tests__/Sessions.d.ts +0 -1
  49. package/dist-native/__tests__/Sessions.js +0 -179
  50. package/dist-native/__tests__/Storage.d.ts +0 -1
  51. package/dist-native/__tests__/Storage.js +0 -173
  52. package/dist-native/__tests__/constants.d.ts +0 -36
  53. package/dist-native/__tests__/constants.js +0 -47
  54. package/dist-native/index.d.ts +0 -2
  55. package/dist-native/index.js +0 -7
  56. package/dist-native/utils.d.ts +0 -3
  57. 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 {};