@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.
- package/README.md +1 -1
- 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 +158 -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 +158 -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 -221
- 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;
|
|
@@ -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.
|
|
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.
|
|
236
|
+
this.registerAddressChangedListener();
|
|
305
237
|
this.registerChainChangedListener();
|
|
306
238
|
};
|
|
307
|
-
FormoAnalytics.prototype.
|
|
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
|
|
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.
|
|
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
|
-
|
|
353
|
-
if (
|
|
354
|
-
|
|
355
|
-
|
|
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
|
-
|
|
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*/,
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
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.
|
|
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 (
|
|
440
|
-
// We have already reported this
|
|
362
|
+
if (address === this.currentConnectedAddress) {
|
|
363
|
+
// We have already reported this address
|
|
441
364
|
return [2 /*return*/];
|
|
442
365
|
}
|
|
443
366
|
else {
|
|
444
|
-
this.
|
|
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({
|
|
451
|
-
this.storeWalletAddress(
|
|
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.
|
|
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
|
|
395
|
+
var res, err_2;
|
|
460
396
|
return __generator(this, function (_a) {
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
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
|
|
462
|
+
var chainId = _a.chainId, address = _a.address;
|
|
505
463
|
if (!chainId) {
|
|
506
|
-
throw new Error('FormoAnalytics::connect:
|
|
464
|
+
throw new Error('FormoAnalytics::connect: chain ID cannot be empty');
|
|
507
465
|
}
|
|
508
|
-
if (!
|
|
509
|
-
throw new Error('FormoAnalytics::connect:
|
|
466
|
+
if (!address) {
|
|
467
|
+
throw new Error('FormoAnalytics::connect: address cannot be empty');
|
|
510
468
|
}
|
|
511
469
|
this.currentChainId = chainId.toString();
|
|
512
|
-
this.
|
|
470
|
+
this.currentConnectedAddress = address;
|
|
513
471
|
return this.trackEvent(constants_1.Event.CONNECT, {
|
|
514
|
-
|
|
515
|
-
address:
|
|
472
|
+
chain_id: chainId,
|
|
473
|
+
address: address,
|
|
516
474
|
});
|
|
517
475
|
};
|
|
518
|
-
FormoAnalytics.prototype.disconnect = function (
|
|
519
|
-
var
|
|
520
|
-
if (!
|
|
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
|
|
526
|
-
|
|
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.
|
|
529
|
-
return this.trackEvent(constants_1.Event.DISCONNECT,
|
|
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,
|
|
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 (!
|
|
537
|
-
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');
|
|
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
|
-
|
|
545
|
-
|
|
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
|
};
|