@formo/analytics 1.11.8 → 1.11.9-alpha.1

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 (47) hide show
  1. package/README.md +1 -1
  2. package/dist/223.index.umd.min.js +125 -0
  3. package/dist/223.index.umd.min.js.map +1 -0
  4. package/dist/cjs/src/FormoAnalytics.d.ts +26 -33
  5. package/dist/cjs/src/FormoAnalytics.d.ts.map +1 -1
  6. package/dist/cjs/src/FormoAnalytics.js +158 -205
  7. package/dist/cjs/src/FormoAnalytics.js.map +1 -1
  8. package/dist/cjs/src/FormoAnalyticsProvider.d.ts.map +1 -1
  9. package/dist/cjs/src/FormoAnalyticsProvider.js.map +1 -1
  10. package/dist/cjs/src/types/base.d.ts +1 -1
  11. package/dist/cjs/src/types/base.d.ts.map +1 -1
  12. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  13. package/dist/esm/src/FormoAnalytics.d.ts +26 -33
  14. package/dist/esm/src/FormoAnalytics.d.ts.map +1 -1
  15. package/dist/esm/src/FormoAnalytics.js +158 -205
  16. package/dist/esm/src/FormoAnalytics.js.map +1 -1
  17. package/dist/esm/src/FormoAnalyticsProvider.d.ts.map +1 -1
  18. package/dist/esm/src/FormoAnalyticsProvider.js.map +1 -1
  19. package/dist/esm/src/types/base.d.ts +1 -1
  20. package/dist/esm/src/types/base.d.ts.map +1 -1
  21. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  22. package/dist/index.umd.min.js +1 -1
  23. package/dist/index.umd.min.js.map +1 -1
  24. package/package.json +2 -2
  25. package/src/FormoAnalytics.ts +168 -221
  26. package/src/FormoAnalyticsProvider.tsx +0 -3
  27. package/src/types/base.ts +1 -1
  28. package/dist/387.index.umd.min.js +0 -125
  29. package/dist/387.index.umd.min.js.map +0 -1
  30. package/dist/cjs/src/utils/index.d.ts +0 -2
  31. package/dist/cjs/src/utils/index.d.ts.map +0 -1
  32. package/dist/cjs/src/utils/index.js +0 -18
  33. package/dist/cjs/src/utils/index.js.map +0 -1
  34. package/dist/cjs/src/utils/isNotEmptyObject.d.ts +0 -2
  35. package/dist/cjs/src/utils/isNotEmptyObject.d.ts.map +0 -1
  36. package/dist/cjs/src/utils/isNotEmptyObject.js +0 -9
  37. package/dist/cjs/src/utils/isNotEmptyObject.js.map +0 -1
  38. package/dist/esm/src/utils/index.d.ts +0 -2
  39. package/dist/esm/src/utils/index.d.ts.map +0 -1
  40. package/dist/esm/src/utils/index.js +0 -2
  41. package/dist/esm/src/utils/index.js.map +0 -1
  42. package/dist/esm/src/utils/isNotEmptyObject.d.ts +0 -2
  43. package/dist/esm/src/utils/isNotEmptyObject.d.ts.map +0 -1
  44. package/dist/esm/src/utils/isNotEmptyObject.js +0 -6
  45. package/dist/esm/src/utils/isNotEmptyObject.js.map +0 -1
  46. package/src/utils/index.ts +0 -1
  47. package/src/utils/isNotEmptyObject.ts +0 -5
@@ -3,11 +3,7 @@ interface IFormoAnalytics {
3
3
  /**
4
4
  * Initializes the FormoAnalytics instance with the provided API key and project ID.
5
5
  */
6
- init(apiKey: string, options: Options): Promise<FormoAnalytics>;
7
- /**
8
- * Identifies the user with the provided user data.
9
- */
10
- identify(userData: Record<string, any>): void;
6
+ init(apiKey: string, options?: Options): Promise<FormoAnalytics>;
11
7
  /**
12
8
  * Tracks page visit events.
13
9
  */
@@ -16,27 +12,27 @@ interface IFormoAnalytics {
16
12
  * Connects to a wallet with the specified chain ID and address.
17
13
  */
18
14
  connect(params: {
19
- account: string;
20
15
  chainId: ChainID;
16
+ address: string;
21
17
  }): Promise<void>;
22
18
  /**
23
19
  * Disconnects the current wallet and clears the session information.
24
20
  */
25
- disconnect(attributes?: {
26
- account?: string;
21
+ disconnect(params?: {
27
22
  chainId?: ChainID;
23
+ address?: string;
28
24
  }): void;
29
25
  /**
30
- * Tracks a specific event with a name and associated data.
26
+ * Switches the blockchain chain context and optionally logs additional params.
31
27
  */
32
- track(eventName: string, eventData: Record<string, any>): void;
33
- /**
34
- * Switches the blockchain chain context and optionally logs additional attributes.
35
- */
36
- chain(attributes: {
28
+ chain(params: {
37
29
  chainId: ChainID;
38
- account?: string;
30
+ address?: string;
39
31
  }): void;
32
+ /**
33
+ * Tracks a specific event with a name and associated data.
34
+ */
35
+ track(eventName: string, eventData: Record<string, any>): void;
40
36
  }
41
37
  export declare class FormoAnalytics implements IFormoAnalytics {
42
38
  readonly apiKey: string;
@@ -48,28 +44,26 @@ export declare class FormoAnalytics implements IFormoAnalytics {
48
44
  private sessionIdKey;
49
45
  private timezoneToCountry;
50
46
  currentChainId?: string | null;
51
- currentConnectedAccount?: string;
47
+ currentConnectedAddress?: string;
52
48
  private constructor();
53
- static init(apiKey: string, options: Options): Promise<FormoAnalytics>;
49
+ static init(apiKey: string, options?: Options): Promise<FormoAnalytics>;
54
50
  get provider(): EIP1193Provider | undefined;
55
- private identifyUser;
56
51
  private getSessionId;
57
52
  private getOrigin;
58
53
  private setSessionCookie;
59
54
  private generateSessionId;
60
55
  private getCookieValue;
61
56
  private trackEvent;
62
- private maskSensitiveData;
63
57
  private trackPageHit;
64
58
  private trackProvider;
59
+ private getCurrentWallet;
60
+ private getCurrentChainId;
61
+ private registerAddressChangedListener;
65
62
  private registerChainChangedListener;
66
- private handleAccountDisconnected;
63
+ private onAddressChanged;
64
+ private onAddressConnected;
65
+ private onAddressDisconnected;
67
66
  private onChainChanged;
68
- private onAccountsChanged;
69
- private registerAccountsChangedListener;
70
- private getCurrentChainId;
71
- private handleAccountConnected;
72
- private getCurrentWallet;
73
67
  /**
74
68
  * Stores the wallet address in session storage when connected.
75
69
  * @param address - The wallet address to store.
@@ -79,20 +73,19 @@ export declare class FormoAnalytics implements IFormoAnalytics {
79
73
  * Clears the wallet address from session storage when disconnected.
80
74
  */
81
75
  private clearWalletAddress;
82
- connect({ account, chainId }: {
83
- account: string;
76
+ init(apiKey: string, options: Options): Promise<FormoAnalytics>;
77
+ connect({ chainId, address }: {
84
78
  chainId: ChainID;
79
+ address: string;
85
80
  }): Promise<void>;
86
- disconnect(attributes?: {
87
- account?: string;
81
+ disconnect(params?: {
88
82
  chainId?: ChainID;
83
+ address?: string;
89
84
  }): Promise<void> | undefined;
90
- chain({ chainId, account }: {
85
+ chain({ chainId, address }: {
91
86
  chainId: ChainID;
92
- account?: string;
87
+ address?: string;
93
88
  }): Promise<void>;
94
- init(apiKey: string, options: Options): Promise<FormoAnalytics>;
95
- identify(userData: any): void;
96
89
  page(): void;
97
90
  track(eventName: string, eventData: any): void;
98
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FormoAnalytics.d.ts","sourceRoot":"","sources":["../../../src/FormoAnalytics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FormoAnalytics.d.ts","sourceRoot":"","sources":["../../../src/FormoAnalytics.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAE5D,UAAU,eAAe;IACvB;;OAEG;IACH,IAAI,CACF,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,cAAc,CAAC,CAAC;IAE3B;;OAEG;IACH,IAAI,IAAI,IAAI,CAAC;IAEb;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtE;;OAEG;IACH,UAAU,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAEnE;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAE5D;;OAEG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;CAChE;AAID,qBAAa,cAAe,YAAW,eAAe;aAgBlC,MAAM,EAAE,MAAM;IACvB,OAAO,EAAE,OAAO;IAhBzB,OAAO,CAAC,SAAS,CAAC,CAAkB;IACpC,OAAO,CAAC,4BAA4B,CAG7B;IAEP,OAAO,CAAC,uBAAuB,CAAmB;IAClD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,iBAAiB,CAAwC;IAEjE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC,OAAO;WAeM,IAAI,CACf,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,cAAc,CAAC;IAU1B,IAAI,QAAQ,IAAI,eAAe,GAAG,SAAS,CAE1C;IAED,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,cAAc;YAUR,UAAU;IA6DxB,OAAO,CAAC,YAAY;IAoCpB,OAAO,CAAC,aAAa;YA4BP,gBAAgB;YAyChB,iBAAiB;IAiB/B,OAAO,CAAC,8BAA8B;IAYtC,OAAO,CAAC,4BAA4B;YAOtB,gBAAgB;YAWhB,kBAAkB;IAchC,OAAO,CAAC,qBAAqB;YAgBf,cAAc;IA4C5B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC;IAK/D,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;IAiBnE,UAAU,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAkB3D,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAuBlE,IAAI;IAIJ,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG;CAGxC"}
@@ -1,15 +1,4 @@
1
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
2
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
3
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
4
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -53,7 +42,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
53
42
  exports.FormoAnalytics = void 0;
54
43
  var axios_1 = __importDefault(require("axios"));
55
44
  var constants_1 = require("./constants");
56
- var utils_1 = require("./utils");
57
45
  var highlight_run_1 = require("highlight.run");
58
46
  var FormoAnalytics = /** @class */ (function () {
59
47
  function FormoAnalytics(apiKey, options) {
@@ -93,9 +81,6 @@ var FormoAnalytics = /** @class */ (function () {
93
81
  enumerable: false,
94
82
  configurable: true
95
83
  });
96
- FormoAnalytics.prototype.identifyUser = function (userData) {
97
- this.trackEvent(constants_1.Event.IDENTIFY, userData);
98
- };
99
84
  FormoAnalytics.prototype.getSessionId = function () {
100
85
  var existingSessionId = this.getCookieValue(this.sessionIdKey);
101
86
  if (existingSessionId) {
@@ -146,7 +131,7 @@ var FormoAnalytics = /** @class */ (function () {
146
131
  timestamp: new Date().toISOString(),
147
132
  action: action,
148
133
  version: '1',
149
- payload: (0, utils_1.isNotEmpty)(payload) ? this.maskSensitiveData(payload) : payload,
134
+ payload: payload,
150
135
  };
151
136
  sendRequest = function () { return __awaiter(_this, void 0, void 0, function () {
152
137
  var response, error_1, retryDelay;
@@ -157,7 +142,7 @@ var FormoAnalytics = /** @class */ (function () {
157
142
  return [4 /*yield*/, axios_1.default.post(constants_1.EVENTS_API_URL, JSON.stringify(requestData), {
158
143
  headers: {
159
144
  'Content-Type': 'application/json',
160
- Authorization: "Bearer ".concat(this.apiKey)
145
+ Authorization: "Bearer ".concat(this.apiKey),
161
146
  },
162
147
  })];
163
148
  case 1:
@@ -194,62 +179,6 @@ var FormoAnalytics = /** @class */ (function () {
194
179
  });
195
180
  });
196
181
  };
197
- // Function to mask sensitive data in the payload
198
- FormoAnalytics.prototype.maskSensitiveData = function (data) {
199
- // Check if data is null or undefined
200
- if (data === null || data === undefined) {
201
- console.warn('Data is null or undefined, returning null');
202
- return null;
203
- }
204
- // Check if data is a string; if so, parse it to an object
205
- if (typeof data === 'string') {
206
- var parsedData = void 0;
207
- try {
208
- parsedData = JSON.parse(data);
209
- }
210
- catch (error) {
211
- console.error('Failed to parse JSON:', error);
212
- return null; // Return null if parsing fails
213
- }
214
- var sensitiveFields = [
215
- 'username',
216
- 'user',
217
- 'user_id',
218
- 'password',
219
- 'email',
220
- 'phone',
221
- ];
222
- // Create a new object to store masked data
223
- var maskedData_1 = __assign({}, parsedData);
224
- // Mask sensitive fields
225
- sensitiveFields.forEach(function (field) {
226
- if (field in maskedData_1) {
227
- maskedData_1[field] = '********'; // Replace value with masked string
228
- }
229
- });
230
- return maskedData_1; // Return the new object with masked fields
231
- }
232
- else if (typeof data === 'object') {
233
- // If data is already an object, handle masking directly
234
- var sensitiveFields = [
235
- 'username',
236
- 'user',
237
- 'user_id',
238
- 'password',
239
- 'email',
240
- 'phone',
241
- ];
242
- var maskedData_2 = __assign({}, data);
243
- // Mask sensitive fields
244
- sensitiveFields.forEach(function (field) {
245
- if (field in maskedData_2) {
246
- maskedData_2[field] = '********'; // Replace value with masked string
247
- }
248
- });
249
- return maskedData_2; // Return the new object with masked fields
250
- }
251
- return data;
252
- };
253
182
  // Function to track page hits
254
183
  FormoAnalytics.prototype.trackPageHit = function () {
255
184
  var _this = this;
@@ -273,6 +202,7 @@ var FormoAnalytics = /** @class */ (function () {
273
202
  var params = new URLSearchParams(url.search);
274
203
  _this.trackEvent(constants_1.Event.PAGE, {
275
204
  'user-agent': window.navigator.userAgent,
205
+ address: _this.currentConnectedAddress,
276
206
  locale: language,
277
207
  location: location,
278
208
  referrer: document.referrer,
@@ -287,10 +217,11 @@ var FormoAnalytics = /** @class */ (function () {
287
217
  };
288
218
  FormoAnalytics.prototype.trackProvider = function (provider) {
289
219
  if (provider === this._provider) {
220
+ console.log('Provider already tracked.');
290
221
  return;
291
222
  }
292
223
  this.currentChainId = undefined;
293
- this.currentConnectedAccount = undefined;
224
+ this.currentConnectedAddress = undefined;
294
225
  if (this._provider) {
295
226
  var eventNames = Object.keys(this._registeredProviderListeners);
296
227
  for (var _i = 0, eventNames_1 = eventNames; _i < eventNames_1.length; _i++) {
@@ -299,49 +230,25 @@ var FormoAnalytics = /** @class */ (function () {
299
230
  delete this._registeredProviderListeners[eventName];
300
231
  }
301
232
  }
233
+ console.log('Tracking new provider:', provider);
302
234
  this._provider = provider;
303
235
  this.getCurrentWallet();
304
- this.registerAccountsChangedListener();
236
+ this.registerAddressChangedListener();
305
237
  this.registerChainChangedListener();
306
238
  };
307
- FormoAnalytics.prototype.registerChainChangedListener = function () {
308
- var _this = this;
309
- var _a;
310
- var listener = function () {
311
- var args = [];
312
- for (var _i = 0; _i < arguments.length; _i++) {
313
- args[_i] = arguments[_i];
314
- }
315
- return _this.onChainChanged(args[0]);
316
- };
317
- (_a = this.provider) === null || _a === void 0 ? void 0 : _a.on('chainChanged', listener);
318
- this._registeredProviderListeners['chainChanged'] = listener;
319
- };
320
- FormoAnalytics.prototype.handleAccountDisconnected = function () {
321
- if (!this.currentConnectedAccount) {
322
- return;
323
- }
324
- var disconnectAttributes = {
325
- address: this.currentConnectedAccount,
326
- chainId: this.currentChainId,
327
- };
328
- this.currentChainId = undefined;
329
- this.currentConnectedAccount = undefined;
330
- this.clearWalletAddress();
331
- return this.trackEvent(constants_1.Event.DISCONNECT, disconnectAttributes);
332
- };
333
- FormoAnalytics.prototype.onChainChanged = function (chainIdHex) {
239
+ FormoAnalytics.prototype.getCurrentWallet = function () {
334
240
  return __awaiter(this, void 0, void 0, function () {
335
- var res, err_1;
241
+ var sessionData, accounts, address, err_1, parsedData, sessionExpiry, currentTime;
336
242
  return __generator(this, function (_a) {
337
243
  switch (_a.label) {
338
244
  case 0:
339
- this.currentChainId = parseInt(chainIdHex).toString();
340
- if (!!this.currentConnectedAccount) return [3 /*break*/, 4];
341
245
  if (!this.provider) {
342
- console.error('error', 'FormoAnalytics::onChainChanged: provider not found. CHAIN_CHANGED not reported');
246
+ console.warn('FormoAnalytics::getCurrentWallet: the provider is not set');
343
247
  return [2 /*return*/];
344
248
  }
249
+ sessionData = sessionStorage.getItem(this.walletAddressSessionKey);
250
+ if (!!sessionData) return [3 /*break*/, 5];
251
+ console.warn('Session data missing. Attempting to fetch address from provider.');
345
252
  _a.label = 1;
346
253
  case 1:
347
254
  _a.trys.push([1, 3, , 4]);
@@ -349,63 +256,33 @@ var FormoAnalytics = /** @class */ (function () {
349
256
  method: 'eth_accounts',
350
257
  })];
351
258
  case 2:
352
- res = _a.sent();
353
- if (!res || res.length === 0) {
354
- console.error('error', 'FormoAnalytics::onChainChanged: unable to get account. eth_accounts returned empty');
355
- return [2 /*return*/];
259
+ accounts = _a.sent();
260
+ if (accounts && accounts.length > 0) {
261
+ address = accounts[0];
262
+ this.storeWalletAddress(address);
263
+ return [2 /*return*/, address];
356
264
  }
357
- this.currentConnectedAccount = res[0];
358
265
  return [3 /*break*/, 4];
359
266
  case 3:
360
267
  err_1 = _a.sent();
361
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
362
- if (err_1.code !== 4001) {
363
- // 4001: The request is rejected by the user , see https://docs.metamask.io/wallet/reference/provider-api/#errors
364
- console.error('error', "FormoAnalytics::onChainChanged: unable to get account. eth_accounts threw an error", err_1);
365
- return [2 /*return*/];
366
- }
268
+ console.error('Failed to fetch accounts from provider:', err_1);
367
269
  return [3 /*break*/, 4];
368
- case 4: return [2 /*return*/, this.chain({
369
- chainId: this.currentChainId,
370
- account: this.currentConnectedAccount,
371
- })];
372
- }
373
- });
374
- });
375
- };
376
- FormoAnalytics.prototype.onAccountsChanged = function (accounts) {
377
- return __awaiter(this, void 0, void 0, function () {
378
- var newAccount;
379
- return __generator(this, function (_a) {
380
- if (accounts.length > 0) {
381
- newAccount = accounts[0];
382
- if (newAccount !== this.currentConnectedAccount) {
383
- this.handleAccountConnected(newAccount);
384
- }
385
- }
386
- else {
387
- this.handleAccountDisconnected();
270
+ case 4: return [2 /*return*/, null];
271
+ case 5:
272
+ parsedData = JSON.parse(sessionData);
273
+ sessionExpiry = 30 * 60 * 1000;
274
+ currentTime = Date.now();
275
+ if (currentTime - parsedData.timestamp > sessionExpiry) {
276
+ console.warn('Session expired. Ignoring wallet address.');
277
+ sessionStorage.removeItem(this.walletAddressSessionKey); // Clear expired session data
278
+ return [2 /*return*/, ''];
279
+ }
280
+ this.onAddressConnected(parsedData.address);
281
+ return [2 /*return*/, parsedData.address || ''];
388
282
  }
389
- return [2 /*return*/];
390
283
  });
391
284
  });
392
285
  };
393
- FormoAnalytics.prototype.registerAccountsChangedListener = function () {
394
- var _this = this;
395
- var _a, _b;
396
- var listener = function () {
397
- var args = [];
398
- for (var _i = 0; _i < arguments.length; _i++) {
399
- args[_i] = arguments[_i];
400
- }
401
- return _this.onAccountsChanged(args[0]);
402
- };
403
- (_a = this._provider) === null || _a === void 0 ? void 0 : _a.on('accountsChanged', listener);
404
- this._registeredProviderListeners['accountsChanged'] = listener;
405
- var handleAccountDisconnected = this.handleAccountDisconnected.bind(this);
406
- (_b = this._provider) === null || _b === void 0 ? void 0 : _b.on('disconnect', handleAccountDisconnected);
407
- this._registeredProviderListeners['disconnect'] = handleAccountDisconnected;
408
- };
409
286
  FormoAnalytics.prototype.getCurrentChainId = function () {
410
287
  return __awaiter(this, void 0, void 0, function () {
411
288
  var chainIdHex;
@@ -430,52 +307,129 @@ var FormoAnalytics = /** @class */ (function () {
430
307
  });
431
308
  });
432
309
  };
433
- FormoAnalytics.prototype.handleAccountConnected = function (account) {
310
+ FormoAnalytics.prototype.registerAddressChangedListener = function () {
311
+ var _this = this;
312
+ var _a, _b;
313
+ var listener = function () {
314
+ var args = [];
315
+ for (var _i = 0; _i < arguments.length; _i++) {
316
+ args[_i] = arguments[_i];
317
+ }
318
+ return _this.onAddressChanged(args[0]);
319
+ };
320
+ (_a = this._provider) === null || _a === void 0 ? void 0 : _a.on('accountsChanged', listener);
321
+ this._registeredProviderListeners['accountsChanged'] = listener;
322
+ var onAddressDisconnected = this.onAddressDisconnected.bind(this);
323
+ (_b = this._provider) === null || _b === void 0 ? void 0 : _b.on('disconnect', onAddressDisconnected);
324
+ this._registeredProviderListeners['disconnect'] = onAddressDisconnected;
325
+ };
326
+ FormoAnalytics.prototype.registerChainChangedListener = function () {
327
+ var _this = this;
328
+ var _a;
329
+ var listener = function () {
330
+ var args = [];
331
+ for (var _i = 0; _i < arguments.length; _i++) {
332
+ args[_i] = arguments[_i];
333
+ }
334
+ return _this.onChainChanged(args[0]);
335
+ };
336
+ (_a = this.provider) === null || _a === void 0 ? void 0 : _a.on('chainChanged', listener);
337
+ this._registeredProviderListeners['chainChanged'] = listener;
338
+ };
339
+ FormoAnalytics.prototype.onAddressChanged = function (addresses) {
340
+ return __awaiter(this, void 0, void 0, function () {
341
+ var newAccount;
342
+ return __generator(this, function (_a) {
343
+ if (addresses.length > 0) {
344
+ newAccount = addresses[0];
345
+ if (newAccount !== this.currentConnectedAddress) {
346
+ this.onAddressConnected(newAccount);
347
+ }
348
+ }
349
+ else {
350
+ this.onAddressDisconnected();
351
+ }
352
+ return [2 /*return*/];
353
+ });
354
+ });
355
+ };
356
+ FormoAnalytics.prototype.onAddressConnected = function (address) {
434
357
  return __awaiter(this, void 0, void 0, function () {
435
358
  var _a;
436
359
  return __generator(this, function (_b) {
437
360
  switch (_b.label) {
438
361
  case 0:
439
- if (account === this.currentConnectedAccount) {
440
- // We have already reported this account
362
+ if (address === this.currentConnectedAddress) {
363
+ // We have already reported this address
441
364
  return [2 /*return*/];
442
365
  }
443
366
  else {
444
- this.currentConnectedAccount = account;
367
+ this.currentConnectedAddress = address;
445
368
  }
446
369
  _a = this;
447
370
  return [4 /*yield*/, this.getCurrentChainId()];
448
371
  case 1:
449
372
  _a.currentChainId = _b.sent();
450
- this.connect({ account: account, chainId: this.currentChainId });
451
- this.storeWalletAddress(account);
373
+ this.connect({ chainId: this.currentChainId, address: address });
374
+ this.storeWalletAddress(address);
452
375
  return [2 /*return*/];
453
376
  }
454
377
  });
455
378
  });
456
379
  };
457
- FormoAnalytics.prototype.getCurrentWallet = function () {
380
+ FormoAnalytics.prototype.onAddressDisconnected = function () {
381
+ if (!this.currentConnectedAddress) {
382
+ return;
383
+ }
384
+ var payload = {
385
+ chain_id: this.currentChainId,
386
+ address: this.currentConnectedAddress,
387
+ };
388
+ this.currentChainId = undefined;
389
+ this.currentConnectedAddress = undefined;
390
+ this.clearWalletAddress();
391
+ return this.trackEvent(constants_1.Event.DISCONNECT, payload);
392
+ };
393
+ FormoAnalytics.prototype.onChainChanged = function (chainIdHex) {
458
394
  return __awaiter(this, void 0, void 0, function () {
459
- var sessionData, parsedData, sessionExpiry, currentTime;
395
+ var res, err_2;
460
396
  return __generator(this, function (_a) {
461
- if (!this.provider) {
462
- console.warn('FormoAnalytics::getCurrentWallet: the provider is not set');
463
- return [2 /*return*/];
464
- }
465
- sessionData = sessionStorage.getItem(this.walletAddressSessionKey);
466
- if (!sessionData) {
467
- return [2 /*return*/, null];
468
- }
469
- parsedData = JSON.parse(sessionData);
470
- sessionExpiry = 30 * 60 * 1000;
471
- currentTime = Date.now();
472
- if (currentTime - parsedData.timestamp > sessionExpiry) {
473
- console.warn('Session expired. Ignoring wallet address.');
474
- sessionStorage.removeItem(this.walletAddressSessionKey); // Clear expired session data
475
- return [2 /*return*/, ''];
397
+ switch (_a.label) {
398
+ case 0:
399
+ this.currentChainId = parseInt(chainIdHex).toString();
400
+ if (!!this.currentConnectedAddress) return [3 /*break*/, 4];
401
+ if (!this.provider) {
402
+ console.error('error', 'FormoAnalytics::onChainChanged: provider not found. CHAIN_CHANGED not reported');
403
+ return [2 /*return*/];
404
+ }
405
+ _a.label = 1;
406
+ case 1:
407
+ _a.trys.push([1, 3, , 4]);
408
+ return [4 /*yield*/, this.provider.request({
409
+ method: 'eth_accounts',
410
+ })];
411
+ case 2:
412
+ res = _a.sent();
413
+ if (!res || res.length === 0) {
414
+ console.error('error', 'FormoAnalytics::onChainChanged: unable to get account. eth_accounts returned empty');
415
+ return [2 /*return*/];
416
+ }
417
+ this.currentConnectedAddress = res[0];
418
+ return [3 /*break*/, 4];
419
+ case 3:
420
+ err_2 = _a.sent();
421
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
422
+ if (err_2.code !== 4001) {
423
+ // 4001: The request is rejected by the user , see https://docs.metamask.io/wallet/reference/provider-api/#errors
424
+ console.error('error', "FormoAnalytics::onChainChanged: unable to get account. eth_accounts threw an error", err_2);
425
+ return [2 /*return*/];
426
+ }
427
+ return [3 /*break*/, 4];
428
+ case 4: return [2 /*return*/, this.chain({
429
+ chainId: this.currentChainId,
430
+ address: this.currentConnectedAddress,
431
+ })];
476
432
  }
477
- this.handleAccountConnected(parsedData.address);
478
- return [2 /*return*/, parsedData.address || ''];
479
433
  });
480
434
  });
481
435
  };
@@ -500,58 +454,57 @@ var FormoAnalytics = /** @class */ (function () {
500
454
  FormoAnalytics.prototype.clearWalletAddress = function () {
501
455
  sessionStorage.removeItem(this.walletAddressSessionKey);
502
456
  };
457
+ FormoAnalytics.prototype.init = function (apiKey, options) {
458
+ var instance = new FormoAnalytics(apiKey, options);
459
+ return Promise.resolve(instance);
460
+ };
503
461
  FormoAnalytics.prototype.connect = function (_a) {
504
- var account = _a.account, chainId = _a.chainId;
462
+ var chainId = _a.chainId, address = _a.address;
505
463
  if (!chainId) {
506
- throw new Error('FormoAnalytics::connect: chainId cannot be empty');
464
+ throw new Error('FormoAnalytics::connect: chain ID cannot be empty');
507
465
  }
508
- if (!account) {
509
- throw new Error('FormoAnalytics::connect: account cannot be empty');
466
+ if (!address) {
467
+ throw new Error('FormoAnalytics::connect: address cannot be empty');
510
468
  }
511
469
  this.currentChainId = chainId.toString();
512
- this.currentConnectedAccount = account;
470
+ this.currentConnectedAddress = address;
513
471
  return this.trackEvent(constants_1.Event.CONNECT, {
514
- chainId: chainId,
515
- address: account,
472
+ chain_id: chainId,
473
+ address: address,
516
474
  });
517
475
  };
518
- FormoAnalytics.prototype.disconnect = function (attributes) {
519
- var account = (attributes === null || attributes === void 0 ? void 0 : attributes.account) || this.currentConnectedAccount;
520
- if (!account) {
476
+ FormoAnalytics.prototype.disconnect = function (params) {
477
+ var address = (params === null || params === void 0 ? void 0 : params.address) || this.currentConnectedAddress;
478
+ if (!address) {
521
479
  // We have most likely already reported this disconnection with the automatic
522
480
  // `disconnect` detection
523
481
  return;
524
482
  }
525
- var chainId = (attributes === null || attributes === void 0 ? void 0 : attributes.chainId) || this.currentChainId;
526
- var eventAttributes = __assign({ account: account }, (chainId && { chainId: chainId }));
483
+ var payload = {
484
+ chain_id: (params === null || params === void 0 ? void 0 : params.chainId) || this.currentChainId,
485
+ address: address,
486
+ };
527
487
  this.currentChainId = undefined;
528
- this.currentConnectedAccount = undefined;
529
- return this.trackEvent(constants_1.Event.DISCONNECT, eventAttributes);
488
+ this.currentConnectedAddress = undefined;
489
+ return this.trackEvent(constants_1.Event.DISCONNECT, payload);
530
490
  };
531
491
  FormoAnalytics.prototype.chain = function (_a) {
532
- var chainId = _a.chainId, account = _a.account;
492
+ var chainId = _a.chainId, address = _a.address;
533
493
  if (!chainId || Number(chainId) === 0) {
534
494
  throw new Error('FormoAnalytics::chain: chainId cannot be empty or 0');
535
495
  }
536
- if (!account && !this.currentConnectedAccount) {
537
- throw new Error('FormoAnalytics::chain: account was empty and no previous account has been recorded. You can either pass an account or call connect() first');
496
+ if (!address && !this.currentConnectedAddress) {
497
+ throw new Error('FormoAnalytics::chain: address was empty and no previous address has been recorded. You can either pass an address or call connect() first');
538
498
  }
539
499
  if (isNaN(Number(chainId))) {
540
500
  throw new Error('FormoAnalytics::chain: chainId must be a valid hex or decimal number');
541
501
  }
542
502
  this.currentChainId = chainId.toString();
543
503
  return this.trackEvent(constants_1.Event.CHAIN_CHANGED, {
544
- chainId: chainId,
545
- account: account || this.currentConnectedAccount,
504
+ chain_id: chainId,
505
+ address: address || this.currentConnectedAddress,
546
506
  });
547
507
  };
548
- FormoAnalytics.prototype.init = function (apiKey, options) {
549
- var instance = new FormoAnalytics(apiKey, options);
550
- return Promise.resolve(instance);
551
- };
552
- FormoAnalytics.prototype.identify = function (userData) {
553
- this.identifyUser(userData);
554
- };
555
508
  FormoAnalytics.prototype.page = function () {
556
509
  this.trackPageHit();
557
510
  };