@formo/analytics 1.11.7 → 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.
- package/README.md +5 -8
- package/dist/223.index.umd.min.js +125 -0
- package/dist/223.index.umd.min.js.map +1 -0
- package/dist/cjs/src/FormoAnalytics.d.ts +26 -33
- package/dist/cjs/src/FormoAnalytics.d.ts.map +1 -1
- package/dist/cjs/src/FormoAnalytics.js +157 -205
- package/dist/cjs/src/FormoAnalytics.js.map +1 -1
- package/dist/cjs/src/FormoAnalyticsProvider.d.ts.map +1 -1
- package/dist/cjs/src/FormoAnalyticsProvider.js.map +1 -1
- package/dist/cjs/src/types/base.d.ts +1 -1
- package/dist/cjs/src/types/base.d.ts.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/src/FormoAnalytics.d.ts +26 -33
- package/dist/esm/src/FormoAnalytics.d.ts.map +1 -1
- package/dist/esm/src/FormoAnalytics.js +157 -205
- package/dist/esm/src/FormoAnalytics.js.map +1 -1
- package/dist/esm/src/FormoAnalyticsProvider.d.ts.map +1 -1
- package/dist/esm/src/FormoAnalyticsProvider.js.map +1 -1
- package/dist/esm/src/types/base.d.ts +1 -1
- package/dist/esm/src/types/base.d.ts.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/index.umd.min.js +1 -1
- package/dist/index.umd.min.js.map +1 -1
- package/package.json +2 -2
- package/src/FormoAnalytics.ts +168 -222
- package/src/FormoAnalyticsProvider.tsx +0 -3
- package/src/types/base.ts +1 -1
- package/dist/387.index.umd.min.js +0 -125
- package/dist/387.index.umd.min.js.map +0 -1
- package/dist/cjs/src/utils/index.d.ts +0 -2
- package/dist/cjs/src/utils/index.d.ts.map +0 -1
- package/dist/cjs/src/utils/index.js +0 -18
- package/dist/cjs/src/utils/index.js.map +0 -1
- package/dist/cjs/src/utils/isNotEmptyObject.d.ts +0 -2
- package/dist/cjs/src/utils/isNotEmptyObject.d.ts.map +0 -1
- package/dist/cjs/src/utils/isNotEmptyObject.js +0 -9
- package/dist/cjs/src/utils/isNotEmptyObject.js.map +0 -1
- package/dist/esm/src/utils/index.d.ts +0 -2
- package/dist/esm/src/utils/index.d.ts.map +0 -1
- package/dist/esm/src/utils/index.js +0 -2
- package/dist/esm/src/utils/index.js.map +0 -1
- package/dist/esm/src/utils/isNotEmptyObject.d.ts +0 -2
- package/dist/esm/src/utils/isNotEmptyObject.d.ts.map +0 -1
- package/dist/esm/src/utils/isNotEmptyObject.js +0 -6
- package/dist/esm/src/utils/isNotEmptyObject.js.map +0 -1
- package/src/utils/index.ts +0 -1
- 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
|
|
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(
|
|
26
|
-
account?: string;
|
|
21
|
+
disconnect(params?: {
|
|
27
22
|
chainId?: ChainID;
|
|
23
|
+
address?: string;
|
|
28
24
|
}): void;
|
|
29
25
|
/**
|
|
30
|
-
*
|
|
26
|
+
* Switches the blockchain chain context and optionally logs additional params.
|
|
31
27
|
*/
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Switches the blockchain chain context and optionally logs additional attributes.
|
|
35
|
-
*/
|
|
36
|
-
chain(attributes: {
|
|
28
|
+
chain(params: {
|
|
37
29
|
chainId: ChainID;
|
|
38
|
-
|
|
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
|
-
|
|
47
|
+
currentConnectedAddress?: string;
|
|
52
48
|
private constructor();
|
|
53
|
-
static init(apiKey: string, options
|
|
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
|
|
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
|
-
|
|
83
|
-
|
|
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(
|
|
87
|
-
account?: string;
|
|
81
|
+
disconnect(params?: {
|
|
88
82
|
chainId?: ChainID;
|
|
83
|
+
address?: string;
|
|
89
84
|
}): Promise<void> | undefined;
|
|
90
|
-
chain({ chainId,
|
|
85
|
+
chain({ chainId, address }: {
|
|
91
86
|
chainId: ChainID;
|
|
92
|
-
|
|
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":"
|
|
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:
|
|
134
|
+
payload: payload,
|
|
150
135
|
};
|
|
151
136
|
sendRequest = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
152
137
|
var response, error_1, retryDelay;
|
|
@@ -158,7 +143,6 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
158
143
|
headers: {
|
|
159
144
|
'Content-Type': 'application/json',
|
|
160
145
|
Authorization: "Bearer ".concat(this.apiKey),
|
|
161
|
-
'Origin': this.getOrigin(),
|
|
162
146
|
},
|
|
163
147
|
})];
|
|
164
148
|
case 1:
|
|
@@ -195,62 +179,6 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
195
179
|
});
|
|
196
180
|
});
|
|
197
181
|
};
|
|
198
|
-
// Function to mask sensitive data in the payload
|
|
199
|
-
FormoAnalytics.prototype.maskSensitiveData = function (data) {
|
|
200
|
-
// Check if data is null or undefined
|
|
201
|
-
if (data === null || data === undefined) {
|
|
202
|
-
console.warn('Data is null or undefined, returning null');
|
|
203
|
-
return null;
|
|
204
|
-
}
|
|
205
|
-
// Check if data is a string; if so, parse it to an object
|
|
206
|
-
if (typeof data === 'string') {
|
|
207
|
-
var parsedData = void 0;
|
|
208
|
-
try {
|
|
209
|
-
parsedData = JSON.parse(data);
|
|
210
|
-
}
|
|
211
|
-
catch (error) {
|
|
212
|
-
console.error('Failed to parse JSON:', error);
|
|
213
|
-
return null; // Return null if parsing fails
|
|
214
|
-
}
|
|
215
|
-
var sensitiveFields = [
|
|
216
|
-
'username',
|
|
217
|
-
'user',
|
|
218
|
-
'user_id',
|
|
219
|
-
'password',
|
|
220
|
-
'email',
|
|
221
|
-
'phone',
|
|
222
|
-
];
|
|
223
|
-
// Create a new object to store masked data
|
|
224
|
-
var maskedData_1 = __assign({}, parsedData);
|
|
225
|
-
// Mask sensitive fields
|
|
226
|
-
sensitiveFields.forEach(function (field) {
|
|
227
|
-
if (field in maskedData_1) {
|
|
228
|
-
maskedData_1[field] = '********'; // Replace value with masked string
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
return maskedData_1; // Return the new object with masked fields
|
|
232
|
-
}
|
|
233
|
-
else if (typeof data === 'object') {
|
|
234
|
-
// If data is already an object, handle masking directly
|
|
235
|
-
var sensitiveFields = [
|
|
236
|
-
'username',
|
|
237
|
-
'user',
|
|
238
|
-
'user_id',
|
|
239
|
-
'password',
|
|
240
|
-
'email',
|
|
241
|
-
'phone',
|
|
242
|
-
];
|
|
243
|
-
var maskedData_2 = __assign({}, data);
|
|
244
|
-
// Mask sensitive fields
|
|
245
|
-
sensitiveFields.forEach(function (field) {
|
|
246
|
-
if (field in maskedData_2) {
|
|
247
|
-
maskedData_2[field] = '********'; // Replace value with masked string
|
|
248
|
-
}
|
|
249
|
-
});
|
|
250
|
-
return maskedData_2; // Return the new object with masked fields
|
|
251
|
-
}
|
|
252
|
-
return data;
|
|
253
|
-
};
|
|
254
182
|
// Function to track page hits
|
|
255
183
|
FormoAnalytics.prototype.trackPageHit = function () {
|
|
256
184
|
var _this = this;
|
|
@@ -274,6 +202,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
274
202
|
var params = new URLSearchParams(url.search);
|
|
275
203
|
_this.trackEvent(constants_1.Event.PAGE, {
|
|
276
204
|
'user-agent': window.navigator.userAgent,
|
|
205
|
+
address: _this.currentConnectedAddress,
|
|
277
206
|
locale: language,
|
|
278
207
|
location: location,
|
|
279
208
|
referrer: document.referrer,
|
|
@@ -288,10 +217,11 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
288
217
|
};
|
|
289
218
|
FormoAnalytics.prototype.trackProvider = function (provider) {
|
|
290
219
|
if (provider === this._provider) {
|
|
220
|
+
console.log('Provider already tracked.');
|
|
291
221
|
return;
|
|
292
222
|
}
|
|
293
223
|
this.currentChainId = undefined;
|
|
294
|
-
this.
|
|
224
|
+
this.currentConnectedAddress = undefined;
|
|
295
225
|
if (this._provider) {
|
|
296
226
|
var eventNames = Object.keys(this._registeredProviderListeners);
|
|
297
227
|
for (var _i = 0, eventNames_1 = eventNames; _i < eventNames_1.length; _i++) {
|
|
@@ -300,49 +230,25 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
300
230
|
delete this._registeredProviderListeners[eventName];
|
|
301
231
|
}
|
|
302
232
|
}
|
|
233
|
+
console.log('Tracking new provider:', provider);
|
|
303
234
|
this._provider = provider;
|
|
304
235
|
this.getCurrentWallet();
|
|
305
|
-
this.
|
|
236
|
+
this.registerAddressChangedListener();
|
|
306
237
|
this.registerChainChangedListener();
|
|
307
238
|
};
|
|
308
|
-
FormoAnalytics.prototype.
|
|
309
|
-
var _this = this;
|
|
310
|
-
var _a;
|
|
311
|
-
var listener = function () {
|
|
312
|
-
var args = [];
|
|
313
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
314
|
-
args[_i] = arguments[_i];
|
|
315
|
-
}
|
|
316
|
-
return _this.onChainChanged(args[0]);
|
|
317
|
-
};
|
|
318
|
-
(_a = this.provider) === null || _a === void 0 ? void 0 : _a.on('chainChanged', listener);
|
|
319
|
-
this._registeredProviderListeners['chainChanged'] = listener;
|
|
320
|
-
};
|
|
321
|
-
FormoAnalytics.prototype.handleAccountDisconnected = function () {
|
|
322
|
-
if (!this.currentConnectedAccount) {
|
|
323
|
-
return;
|
|
324
|
-
}
|
|
325
|
-
var disconnectAttributes = {
|
|
326
|
-
address: this.currentConnectedAccount,
|
|
327
|
-
chainId: this.currentChainId,
|
|
328
|
-
};
|
|
329
|
-
this.currentChainId = undefined;
|
|
330
|
-
this.currentConnectedAccount = undefined;
|
|
331
|
-
this.clearWalletAddress();
|
|
332
|
-
return this.trackEvent(constants_1.Event.DISCONNECT, disconnectAttributes);
|
|
333
|
-
};
|
|
334
|
-
FormoAnalytics.prototype.onChainChanged = function (chainIdHex) {
|
|
239
|
+
FormoAnalytics.prototype.getCurrentWallet = function () {
|
|
335
240
|
return __awaiter(this, void 0, void 0, function () {
|
|
336
|
-
var
|
|
241
|
+
var sessionData, accounts, address, err_1, parsedData, sessionExpiry, currentTime;
|
|
337
242
|
return __generator(this, function (_a) {
|
|
338
243
|
switch (_a.label) {
|
|
339
244
|
case 0:
|
|
340
|
-
this.currentChainId = parseInt(chainIdHex).toString();
|
|
341
|
-
if (!!this.currentConnectedAccount) return [3 /*break*/, 4];
|
|
342
245
|
if (!this.provider) {
|
|
343
|
-
console.
|
|
246
|
+
console.warn('FormoAnalytics::getCurrentWallet: the provider is not set');
|
|
344
247
|
return [2 /*return*/];
|
|
345
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.');
|
|
346
252
|
_a.label = 1;
|
|
347
253
|
case 1:
|
|
348
254
|
_a.trys.push([1, 3, , 4]);
|
|
@@ -350,63 +256,33 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
350
256
|
method: 'eth_accounts',
|
|
351
257
|
})];
|
|
352
258
|
case 2:
|
|
353
|
-
|
|
354
|
-
if (
|
|
355
|
-
|
|
356
|
-
|
|
259
|
+
accounts = _a.sent();
|
|
260
|
+
if (accounts && accounts.length > 0) {
|
|
261
|
+
address = accounts[0];
|
|
262
|
+
this.storeWalletAddress(address);
|
|
263
|
+
return [2 /*return*/, address];
|
|
357
264
|
}
|
|
358
|
-
this.currentConnectedAccount = res[0];
|
|
359
265
|
return [3 /*break*/, 4];
|
|
360
266
|
case 3:
|
|
361
267
|
err_1 = _a.sent();
|
|
362
|
-
|
|
363
|
-
if (err_1.code !== 4001) {
|
|
364
|
-
// 4001: The request is rejected by the user , see https://docs.metamask.io/wallet/reference/provider-api/#errors
|
|
365
|
-
console.error('error', "FormoAnalytics::onChainChanged: unable to get account. eth_accounts threw an error", err_1);
|
|
366
|
-
return [2 /*return*/];
|
|
367
|
-
}
|
|
268
|
+
console.error('Failed to fetch accounts from provider:', err_1);
|
|
368
269
|
return [3 /*break*/, 4];
|
|
369
|
-
case 4: return [2 /*return*/,
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
if (accounts.length > 0) {
|
|
382
|
-
newAccount = accounts[0];
|
|
383
|
-
if (newAccount !== this.currentConnectedAccount) {
|
|
384
|
-
this.handleAccountConnected(newAccount);
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
else {
|
|
388
|
-
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 || ''];
|
|
389
282
|
}
|
|
390
|
-
return [2 /*return*/];
|
|
391
283
|
});
|
|
392
284
|
});
|
|
393
285
|
};
|
|
394
|
-
FormoAnalytics.prototype.registerAccountsChangedListener = function () {
|
|
395
|
-
var _this = this;
|
|
396
|
-
var _a, _b;
|
|
397
|
-
var listener = function () {
|
|
398
|
-
var args = [];
|
|
399
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
400
|
-
args[_i] = arguments[_i];
|
|
401
|
-
}
|
|
402
|
-
return _this.onAccountsChanged(args[0]);
|
|
403
|
-
};
|
|
404
|
-
(_a = this._provider) === null || _a === void 0 ? void 0 : _a.on('accountsChanged', listener);
|
|
405
|
-
this._registeredProviderListeners['accountsChanged'] = listener;
|
|
406
|
-
var handleAccountDisconnected = this.handleAccountDisconnected.bind(this);
|
|
407
|
-
(_b = this._provider) === null || _b === void 0 ? void 0 : _b.on('disconnect', handleAccountDisconnected);
|
|
408
|
-
this._registeredProviderListeners['disconnect'] = handleAccountDisconnected;
|
|
409
|
-
};
|
|
410
286
|
FormoAnalytics.prototype.getCurrentChainId = function () {
|
|
411
287
|
return __awaiter(this, void 0, void 0, function () {
|
|
412
288
|
var chainIdHex;
|
|
@@ -431,52 +307,129 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
431
307
|
});
|
|
432
308
|
});
|
|
433
309
|
};
|
|
434
|
-
FormoAnalytics.prototype.
|
|
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) {
|
|
435
357
|
return __awaiter(this, void 0, void 0, function () {
|
|
436
358
|
var _a;
|
|
437
359
|
return __generator(this, function (_b) {
|
|
438
360
|
switch (_b.label) {
|
|
439
361
|
case 0:
|
|
440
|
-
if (
|
|
441
|
-
// We have already reported this
|
|
362
|
+
if (address === this.currentConnectedAddress) {
|
|
363
|
+
// We have already reported this address
|
|
442
364
|
return [2 /*return*/];
|
|
443
365
|
}
|
|
444
366
|
else {
|
|
445
|
-
this.
|
|
367
|
+
this.currentConnectedAddress = address;
|
|
446
368
|
}
|
|
447
369
|
_a = this;
|
|
448
370
|
return [4 /*yield*/, this.getCurrentChainId()];
|
|
449
371
|
case 1:
|
|
450
372
|
_a.currentChainId = _b.sent();
|
|
451
|
-
this.connect({
|
|
452
|
-
this.storeWalletAddress(
|
|
373
|
+
this.connect({ chainId: this.currentChainId, address: address });
|
|
374
|
+
this.storeWalletAddress(address);
|
|
453
375
|
return [2 /*return*/];
|
|
454
376
|
}
|
|
455
377
|
});
|
|
456
378
|
});
|
|
457
379
|
};
|
|
458
|
-
FormoAnalytics.prototype.
|
|
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) {
|
|
459
394
|
return __awaiter(this, void 0, void 0, function () {
|
|
460
|
-
var
|
|
395
|
+
var res, err_2;
|
|
461
396
|
return __generator(this, function (_a) {
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
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
|
+
})];
|
|
477
432
|
}
|
|
478
|
-
this.handleAccountConnected(parsedData.address);
|
|
479
|
-
return [2 /*return*/, parsedData.address || ''];
|
|
480
433
|
});
|
|
481
434
|
});
|
|
482
435
|
};
|
|
@@ -501,58 +454,57 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
501
454
|
FormoAnalytics.prototype.clearWalletAddress = function () {
|
|
502
455
|
sessionStorage.removeItem(this.walletAddressSessionKey);
|
|
503
456
|
};
|
|
457
|
+
FormoAnalytics.prototype.init = function (apiKey, options) {
|
|
458
|
+
var instance = new FormoAnalytics(apiKey, options);
|
|
459
|
+
return Promise.resolve(instance);
|
|
460
|
+
};
|
|
504
461
|
FormoAnalytics.prototype.connect = function (_a) {
|
|
505
|
-
var
|
|
462
|
+
var chainId = _a.chainId, address = _a.address;
|
|
506
463
|
if (!chainId) {
|
|
507
|
-
throw new Error('FormoAnalytics::connect:
|
|
464
|
+
throw new Error('FormoAnalytics::connect: chain ID cannot be empty');
|
|
508
465
|
}
|
|
509
|
-
if (!
|
|
510
|
-
throw new Error('FormoAnalytics::connect:
|
|
466
|
+
if (!address) {
|
|
467
|
+
throw new Error('FormoAnalytics::connect: address cannot be empty');
|
|
511
468
|
}
|
|
512
469
|
this.currentChainId = chainId.toString();
|
|
513
|
-
this.
|
|
470
|
+
this.currentConnectedAddress = address;
|
|
514
471
|
return this.trackEvent(constants_1.Event.CONNECT, {
|
|
515
|
-
|
|
516
|
-
address:
|
|
472
|
+
chain_id: chainId,
|
|
473
|
+
address: address,
|
|
517
474
|
});
|
|
518
475
|
};
|
|
519
|
-
FormoAnalytics.prototype.disconnect = function (
|
|
520
|
-
var
|
|
521
|
-
if (!
|
|
476
|
+
FormoAnalytics.prototype.disconnect = function (params) {
|
|
477
|
+
var address = (params === null || params === void 0 ? void 0 : params.address) || this.currentConnectedAddress;
|
|
478
|
+
if (!address) {
|
|
522
479
|
// We have most likely already reported this disconnection with the automatic
|
|
523
480
|
// `disconnect` detection
|
|
524
481
|
return;
|
|
525
482
|
}
|
|
526
|
-
var
|
|
527
|
-
|
|
483
|
+
var payload = {
|
|
484
|
+
chain_id: (params === null || params === void 0 ? void 0 : params.chainId) || this.currentChainId,
|
|
485
|
+
address: address,
|
|
486
|
+
};
|
|
528
487
|
this.currentChainId = undefined;
|
|
529
|
-
this.
|
|
530
|
-
return this.trackEvent(constants_1.Event.DISCONNECT,
|
|
488
|
+
this.currentConnectedAddress = undefined;
|
|
489
|
+
return this.trackEvent(constants_1.Event.DISCONNECT, payload);
|
|
531
490
|
};
|
|
532
491
|
FormoAnalytics.prototype.chain = function (_a) {
|
|
533
|
-
var chainId = _a.chainId,
|
|
492
|
+
var chainId = _a.chainId, address = _a.address;
|
|
534
493
|
if (!chainId || Number(chainId) === 0) {
|
|
535
494
|
throw new Error('FormoAnalytics::chain: chainId cannot be empty or 0');
|
|
536
495
|
}
|
|
537
|
-
if (!
|
|
538
|
-
throw new Error('FormoAnalytics::chain:
|
|
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');
|
|
539
498
|
}
|
|
540
499
|
if (isNaN(Number(chainId))) {
|
|
541
500
|
throw new Error('FormoAnalytics::chain: chainId must be a valid hex or decimal number');
|
|
542
501
|
}
|
|
543
502
|
this.currentChainId = chainId.toString();
|
|
544
503
|
return this.trackEvent(constants_1.Event.CHAIN_CHANGED, {
|
|
545
|
-
|
|
546
|
-
|
|
504
|
+
chain_id: chainId,
|
|
505
|
+
address: address || this.currentConnectedAddress,
|
|
547
506
|
});
|
|
548
507
|
};
|
|
549
|
-
FormoAnalytics.prototype.init = function (apiKey, options) {
|
|
550
|
-
var instance = new FormoAnalytics(apiKey, options);
|
|
551
|
-
return Promise.resolve(instance);
|
|
552
|
-
};
|
|
553
|
-
FormoAnalytics.prototype.identify = function (userData) {
|
|
554
|
-
this.identifyUser(userData);
|
|
555
|
-
};
|
|
556
508
|
FormoAnalytics.prototype.page = function () {
|
|
557
509
|
this.trackPageHit();
|
|
558
510
|
};
|