avo-inspector 2.2.0 → 2.2.2-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/CHANGELOG.md +34 -1
  2. package/README.md +130 -0
  3. package/bin/avo-inspector.js +97 -0
  4. package/dist/AvoBatcher.d.ts +4 -11
  5. package/dist/AvoEncryption.d.ts +33 -0
  6. package/dist/AvoInspector.d.ts +35 -6
  7. package/dist/AvoNetworkCallsHandler.d.ts +42 -12
  8. package/dist/AvoSchemaParser.d.ts +12 -5
  9. package/dist/browser.js.LICENSE.txt +5 -0
  10. package/dist/eventSpec/AvoEventSpecCache.d.ts +73 -0
  11. package/dist/eventSpec/AvoEventSpecFetchTypes.d.ts +141 -0
  12. package/dist/eventSpec/AvoEventSpecFetcher.d.ts +54 -0
  13. package/dist/eventSpec/EventValidator.d.ts +34 -0
  14. package/dist/eventSpec/cache.d.ts +73 -0
  15. package/dist/eventSpec/index.d.ts +4 -0
  16. package/dist/eventSpec/types.d.ts +74 -0
  17. package/dist/index.js +2 -1
  18. package/dist/index.js.LICENSE.txt +5 -0
  19. package/dist-browser/AvoAnonymousId.d.ts +26 -0
  20. package/dist-browser/AvoBatcher.d.ts +26 -0
  21. package/dist-browser/AvoDeduplicator.d.ts +20 -0
  22. package/dist-browser/AvoEncryption.d.ts +33 -0
  23. package/dist-browser/AvoGuid.d.ts +3 -0
  24. package/dist-browser/AvoInspector.d.ts +78 -0
  25. package/dist-browser/AvoInspectorEnv.d.ts +7 -0
  26. package/dist-browser/AvoNetworkCallsHandler.d.ts +74 -0
  27. package/dist-browser/AvoSchemaParser.d.ts +20 -0
  28. package/dist-browser/AvoStorage.d.ts +22 -0
  29. package/dist-browser/__mocks__/xhr.d.ts +12 -0
  30. package/dist-browser/__mocks__/xhrError.d.ts +12 -0
  31. package/dist-browser/__tests__/AnonymousId_test.d.ts +1 -0
  32. package/dist-browser/__tests__/AvoEncryption_test.d.ts +1 -0
  33. package/dist-browser/__tests__/AvoInspectorEventSpec_test.d.ts +1 -0
  34. package/dist-browser/__tests__/AvoInspector_test.d.ts +1 -0
  35. package/dist-browser/__tests__/BatcherPublic_test.d.ts +1 -0
  36. package/dist-browser/__tests__/Batcher_test.d.ts +1 -0
  37. package/dist-browser/__tests__/Deduplicator_test.d.ts +1 -0
  38. package/dist-browser/__tests__/EncryptedPropertyTracking_test.d.ts +1 -0
  39. package/dist-browser/__tests__/EventSpecCache_test.d.ts +1 -0
  40. package/dist-browser/__tests__/EventSpecFetcher_test.d.ts +1 -0
  41. package/dist-browser/__tests__/EventValidator_test.d.ts +1 -0
  42. package/dist-browser/__tests__/NetworkCallsHandler_test.d.ts +1 -0
  43. package/dist-browser/__tests__/Parsing_test.d.ts +1 -0
  44. package/dist-browser/__tests__/Storage_test.d.ts +1 -0
  45. package/dist-browser/__tests__/ValidationIntegration_test.d.ts +1 -0
  46. package/dist-browser/__tests__/constants.d.ts +36 -0
  47. package/dist-browser/__tests__/helpers/encryptionHelpers.d.ts +13 -0
  48. package/dist-browser/__tests__/helpers/mockFactories.d.ts +49 -0
  49. package/dist-browser/eventSpec/AvoEventSpecCache.d.ts +73 -0
  50. package/dist-browser/eventSpec/AvoEventSpecFetchTypes.d.ts +109 -0
  51. package/dist-browser/eventSpec/AvoEventSpecFetcher.d.ts +55 -0
  52. package/dist-browser/eventSpec/EventValidator.d.ts +90 -0
  53. package/dist-browser/eventSpec/index.d.ts +4 -0
  54. package/dist-browser/index.d.ts +2 -0
  55. package/dist-browser/utils.d.ts +3 -0
  56. package/dist-native/AvoBatcher.d.ts +24 -0
  57. package/dist-native/AvoBatcher.js +82 -0
  58. package/dist-native/AvoDeduplicator.d.ts +36 -0
  59. package/dist-native/AvoDeduplicator.js +142 -0
  60. package/dist-native/AvoGuid.d.ts +3 -0
  61. package/dist-native/AvoGuid.js +14 -0
  62. package/dist-native/AvoInspector.d.ts +52 -0
  63. package/dist-native/AvoInspector.js +220 -0
  64. package/dist-native/AvoInspectorEnv.d.ts +7 -0
  65. package/dist-native/AvoInspectorEnv.js +8 -0
  66. package/dist-native/AvoInstallationId.d.ts +5 -0
  67. package/dist-native/AvoInstallationId.js +36 -0
  68. package/dist-native/AvoNetworkCallsHandler.d.ts +48 -0
  69. package/dist-native/AvoNetworkCallsHandler.js +142 -0
  70. package/dist-native/AvoSchemaParser.d.ts +11 -0
  71. package/dist-native/AvoSchemaParser.js +95 -0
  72. package/dist-native/AvoSessionTracker.d.ts +15 -0
  73. package/dist-native/AvoSessionTracker.js +104 -0
  74. package/dist-native/AvoStorage.d.ts +22 -0
  75. package/dist-native/AvoStorage.js +336 -0
  76. package/dist-native/__mocks__/xhr.d.ts +12 -0
  77. package/dist-native/__mocks__/xhr.js +14 -0
  78. package/dist-native/__mocks__/xhrError.d.ts +12 -0
  79. package/dist-native/__mocks__/xhrError.js +14 -0
  80. package/dist-native/__tests__/AvoInspector.d.ts +1 -0
  81. package/dist-native/__tests__/AvoInspector.js +207 -0
  82. package/dist-native/__tests__/Batcher.d.ts +1 -0
  83. package/dist-native/__tests__/Batcher.js +280 -0
  84. package/dist-native/__tests__/BatcherPublic.d.ts +1 -0
  85. package/dist-native/__tests__/BatcherPublic.js +82 -0
  86. package/dist-native/__tests__/Deduplicator.d.ts +1 -0
  87. package/dist-native/__tests__/Deduplicator.js +111 -0
  88. package/dist-native/__tests__/InstallationId.d.ts +1 -0
  89. package/dist-native/__tests__/InstallationId.js +40 -0
  90. package/dist-native/__tests__/NetworkCallsHandler.d.ts +1 -0
  91. package/dist-native/__tests__/NetworkCallsHandler.js +132 -0
  92. package/dist-native/__tests__/Parsing.d.ts +1 -0
  93. package/dist-native/__tests__/Parsing.js +115 -0
  94. package/dist-native/__tests__/Sessions.d.ts +1 -0
  95. package/dist-native/__tests__/Sessions.js +179 -0
  96. package/dist-native/__tests__/Storage.d.ts +1 -0
  97. package/dist-native/__tests__/Storage.js +173 -0
  98. package/dist-native/__tests__/constants.d.ts +36 -0
  99. package/dist-native/__tests__/constants.js +47 -0
  100. package/dist-native/index.d.ts +2 -0
  101. package/dist-native/index.js +7 -0
  102. package/dist-native/utils.d.ts +3 -0
  103. package/dist-native/utils.js +42 -0
  104. package/jest.config.js +6 -0
  105. package/package.json +8 -2
  106. package/webpack.browserConfig.js +1 -1
  107. package/webpack.config.js +1 -1
  108. package/.claude/settings.local.json +0 -9
@@ -0,0 +1,115 @@
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
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,179 @@
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
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,173 @@
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
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ var AvoStorage_1 = require("../AvoStorage");
51
+ var constants_1 = require("../__tests__/constants");
52
+ var originalWindow = __assign({}, window);
53
+ beforeEach(function () {
54
+ window = originalWindow;
55
+ });
56
+ describe("Avo Storage", function () {
57
+ var storage = new AvoStorage_1.AvoStorage(constants_1.defaultOptions.shouldLog);
58
+ var key = "avoKey";
59
+ var value = "avoValue";
60
+ test("Sets and gets item with shouldLog on", function () {
61
+ var storage = new AvoStorage_1.AvoStorage(true);
62
+ storage.setItem(key, value);
63
+ var item = storage.getItem(key);
64
+ expect(item).toBe(value);
65
+ });
66
+ test("Sets and gets item with shouldLog off", function () {
67
+ var storage = new AvoStorage_1.AvoStorage(false);
68
+ storage.setItem(key, value);
69
+ var item = storage.getItem(key);
70
+ expect(item).toBe(value);
71
+ });
72
+ test("Gets item asynchronously", function () { return __awaiter(void 0, void 0, void 0, function () {
73
+ var item;
74
+ return __generator(this, function (_a) {
75
+ switch (_a.label) {
76
+ case 0:
77
+ storage.removeItem(key);
78
+ storage.setItem(key, value);
79
+ return [4 /*yield*/, storage.getItemAsync(key)];
80
+ case 1:
81
+ item = _a.sent();
82
+ expect(item).toBe(value);
83
+ return [2 /*return*/];
84
+ }
85
+ });
86
+ }); });
87
+ test("Returns null if key does not exist", function () {
88
+ storage.removeItem(key);
89
+ var item = storage.getItem(key);
90
+ expect(item).toBeNull();
91
+ });
92
+ test("Deletes item with shouldLog on", function () {
93
+ var storage = new AvoStorage_1.AvoStorage(true);
94
+ storage.removeItem(key);
95
+ var item = storage.getItem(key);
96
+ expect(item).toBeNull();
97
+ });
98
+ test("Deletes item with shouldLog off", function () {
99
+ var storage = new AvoStorage_1.AvoStorage(false);
100
+ storage.removeItem(key);
101
+ var item = storage.getItem(key);
102
+ expect(item).toBeNull();
103
+ });
104
+ test("storage writes are delayed until the storage is initialized on web", function () {
105
+ var storageWebImpl = storage.storageImpl;
106
+ storageWebImpl.storageInitialized = false;
107
+ storage.setItem(key, "OnStorageInitFuncs on web");
108
+ var itemBeforeInit = storage.getItem(key);
109
+ expect(itemBeforeInit).toBeNull();
110
+ storageWebImpl.init(true);
111
+ var itemAfterInit = storage.getItem(key);
112
+ expect(itemAfterInit).toEqual("OnStorageInitFuncs on web");
113
+ });
114
+ });
115
+ describe("Avo Storage unavailable", function () {
116
+ var key = "avoKey";
117
+ var value = "avoValue";
118
+ beforeEach(function () {
119
+ Object.defineProperty(window, "localStorage", {});
120
+ });
121
+ test("Fallback mode enabled", function () {
122
+ var storage = new AvoStorage_1.AvoStorage(false);
123
+ var storageImpl = storage.storageImpl;
124
+ expect(storageImpl.useFallbackStorage).toBe(true);
125
+ expect(storageImpl.storageInitialized).toBe(true);
126
+ });
127
+ test("Sets and gets item with shouldLog on", function () {
128
+ var storage = new AvoStorage_1.AvoStorage(true);
129
+ storage.setItem(key, value);
130
+ var item = storage.getItem(key);
131
+ expect(item).toBe(value);
132
+ });
133
+ test("Sets and gets item with shouldLog off", function () {
134
+ var storage = new AvoStorage_1.AvoStorage(false);
135
+ storage.setItem(key, value);
136
+ var item = storage.getItem(key);
137
+ expect(item).toBe(value);
138
+ });
139
+ test("Gets item asynchronously", function () { return __awaiter(void 0, void 0, void 0, function () {
140
+ var storage, item;
141
+ return __generator(this, function (_a) {
142
+ switch (_a.label) {
143
+ case 0:
144
+ storage = new AvoStorage_1.AvoStorage(false);
145
+ storage.removeItem(key);
146
+ storage.setItem(key, value);
147
+ return [4 /*yield*/, storage.getItemAsync(key)];
148
+ case 1:
149
+ item = _a.sent();
150
+ expect(item).toBe(value);
151
+ return [2 /*return*/];
152
+ }
153
+ });
154
+ }); });
155
+ test("Returns null if key does not exist", function () {
156
+ var storage = new AvoStorage_1.AvoStorage(false);
157
+ storage.removeItem(key);
158
+ var item = storage.getItem(key);
159
+ expect(item).toBeNull();
160
+ });
161
+ test("Deletes item with shouldLog on", function () {
162
+ var storage = new AvoStorage_1.AvoStorage(true);
163
+ storage.removeItem(key);
164
+ var item = storage.getItem(key);
165
+ expect(item).toBeNull();
166
+ });
167
+ test("Deletes item with shouldLog off", function () {
168
+ var storage = new AvoStorage_1.AvoStorage(false);
169
+ storage.removeItem(key);
170
+ var item = storage.getItem(key);
171
+ expect(item).toBeNull();
172
+ });
173
+ });
@@ -0,0 +1,36 @@
1
+ declare const defaultOptions: {
2
+ apiKey: string;
3
+ env: "prod";
4
+ version: string;
5
+ shouldLog: boolean;
6
+ };
7
+ declare const error: {
8
+ API_KEY: string;
9
+ VERSION: string;
10
+ };
11
+ declare const mockedReturns: {
12
+ INSTALLATION_ID: string;
13
+ GUID: string;
14
+ SESSION_ID: string;
15
+ };
16
+ declare const networkCallType: {
17
+ EVENT: string;
18
+ SESSION_STARTED: string;
19
+ };
20
+ declare const requestMsg: {
21
+ ERROR: string;
22
+ TIMEOUT: string;
23
+ };
24
+ declare const trackingEndpoint = "https://api.avo.app/inspector/v1/track";
25
+ declare const sessionTimeMs: number;
26
+ declare const type: {
27
+ STRING: string;
28
+ INT: string;
29
+ OBJECT: string;
30
+ FLOAT: string;
31
+ LIST: string;
32
+ BOOL: string;
33
+ NULL: string;
34
+ UNKNOWN: string;
35
+ };
36
+ export { defaultOptions, error, mockedReturns, networkCallType, requestMsg, sessionTimeMs, type, trackingEndpoint, };
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.trackingEndpoint = exports.type = exports.sessionTimeMs = exports.requestMsg = exports.networkCallType = exports.mockedReturns = exports.error = exports.defaultOptions = void 0;
4
+ var AvoInspectorEnv_1 = require("../AvoInspectorEnv");
5
+ var defaultOptions = {
6
+ apiKey: "api-key-xxx",
7
+ env: AvoInspectorEnv_1.AvoInspectorEnv.Prod,
8
+ version: "1",
9
+ shouldLog: true
10
+ };
11
+ exports.defaultOptions = defaultOptions;
12
+ var error = {
13
+ API_KEY: "[Avo Inspector] No API key provided. Inspector can't operate without API key.",
14
+ VERSION: "[Avo Inspector] No version provided. Many features of Inspector rely on versioning. Please provide comparable string version, i.e. integer or semantic.",
15
+ };
16
+ exports.error = error;
17
+ var mockedReturns = {
18
+ INSTALLATION_ID: "avo-instalation-id",
19
+ GUID: "generated-guid",
20
+ SESSION_ID: "session-id",
21
+ };
22
+ exports.mockedReturns = mockedReturns;
23
+ var networkCallType = {
24
+ EVENT: "event",
25
+ SESSION_STARTED: "sessionStarted",
26
+ };
27
+ exports.networkCallType = networkCallType;
28
+ var requestMsg = {
29
+ ERROR: "Request failed",
30
+ TIMEOUT: "Request timed out",
31
+ };
32
+ exports.requestMsg = requestMsg;
33
+ var trackingEndpoint = "https://api.avo.app/inspector/v1/track";
34
+ exports.trackingEndpoint = trackingEndpoint;
35
+ var sessionTimeMs = 5 * 60 * 1000;
36
+ exports.sessionTimeMs = sessionTimeMs;
37
+ var type = {
38
+ STRING: "string",
39
+ INT: "int",
40
+ OBJECT: "object",
41
+ FLOAT: "float",
42
+ LIST: "list",
43
+ BOOL: "boolean",
44
+ NULL: "null",
45
+ UNKNOWN: "unknown",
46
+ };
47
+ exports.type = type;
@@ -0,0 +1,2 @@
1
+ export { AvoInspector } from "./AvoInspector";
2
+ export { AvoInspectorEnv } from "./AvoInspectorEnv";
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AvoInspectorEnv = exports.AvoInspector = void 0;
4
+ var AvoInspector_1 = require("./AvoInspector");
5
+ Object.defineProperty(exports, "AvoInspector", { enumerable: true, get: function () { return AvoInspector_1.AvoInspector; } });
6
+ var AvoInspectorEnv_1 = require("./AvoInspectorEnv");
7
+ Object.defineProperty(exports, "AvoInspectorEnv", { enumerable: true, get: function () { return AvoInspectorEnv_1.AvoInspectorEnv; } });
@@ -0,0 +1,3 @@
1
+ declare const isValueEmpty: (value: string | null | undefined) => boolean;
2
+ declare function deepEquals(x: any, y: any): boolean;
3
+ export { isValueEmpty, deepEquals };
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deepEquals = exports.isValueEmpty = void 0;
4
+ var isValueEmpty = function (value) {
5
+ return value === null || value === undefined || value.trim().length == 0;
6
+ };
7
+ exports.isValueEmpty = isValueEmpty;
8
+ function deepEquals(x, y) {
9
+ if (x === y) {
10
+ return true;
11
+ }
12
+ if (!(x instanceof Object) || !(y instanceof Object)) {
13
+ return false;
14
+ }
15
+ if (x.constructor !== y.constructor) {
16
+ return false;
17
+ }
18
+ for (var p in x) {
19
+ if (!x.hasOwnProperty(p)) {
20
+ continue;
21
+ }
22
+ if (!y.hasOwnProperty(p)) {
23
+ return false;
24
+ }
25
+ if (x[p] === y[p]) {
26
+ continue;
27
+ }
28
+ if (typeof x[p] !== "object") {
29
+ return false;
30
+ }
31
+ if (!deepEquals(x[p], y[p])) {
32
+ return false;
33
+ }
34
+ }
35
+ for (p in y) {
36
+ if (y.hasOwnProperty(p) && !x.hasOwnProperty(p)) {
37
+ return false;
38
+ }
39
+ }
40
+ return true;
41
+ }
42
+ exports.deepEquals = deepEquals;
package/jest.config.js CHANGED
@@ -2,6 +2,7 @@ module.exports = {
2
2
  preset: "ts-jest",
3
3
  testEnvironment: "jsdom",
4
4
  setupFiles: ["<rootDir>/src/__tests__/jest.setup.js"],
5
+ setupFilesAfterEnv: ["<rootDir>/src/__tests__/jest.setupAfterEnv.js"],
5
6
  moduleNameMapper: {
6
7
  "^react-native$": "<rootDir>/src/__tests__/jest.setup.js",
7
8
  },
@@ -9,6 +10,7 @@ module.exports = {
9
10
  "**/src/__tests__/**/*.ts",
10
11
  "!**/src/__tests__/setup.ts",
11
12
  "!**/src/__tests__/constants.ts",
13
+ "!**/src/__tests__/helpers/**",
12
14
  ],
13
15
  testPathIgnorePatterns: [
14
16
  "/node_modules/",
@@ -16,6 +18,10 @@ module.exports = {
16
18
  "/examples/",
17
19
  "/constants/",
18
20
  ],
21
+ modulePathIgnorePatterns: [
22
+ "<rootDir>/dist/",
23
+ "<rootDir>/dist-native/",
24
+ ],
19
25
  transform: {
20
26
  "^.+\\.(ts|tsx)$": "ts-jest",
21
27
  },
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
- {
1
+ {
2
2
  "name": "avo-inspector",
3
- "version": "2.2.0",
3
+ "version": "2.2.2-alpha.2",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "browser": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "avo-inspector": "./bin/avo-inspector.js"
10
+ },
8
11
  "scripts": {
9
12
  "build": "tsc --emitDeclarationOnly && webpack --config webpack.config.js",
10
13
  "build-for-script-tag": "tsc --outDir dist-browser --emitDeclarationOnly && webpack --config webpack.browserConfig.js",
@@ -32,6 +35,9 @@
32
35
  "url": "https://github.com/avohq/web-avo-inspector/issues"
33
36
  },
34
37
  "homepage": "https://github.com/avohq/web-avo-inspector#readme",
38
+ "dependencies": {
39
+ "eciesjs": "^0.4.11"
40
+ },
35
41
  "devDependencies": {
36
42
  "@babel/core": "^7.25.2",
37
43
  "@babel/preset-env": "^7.25.3",