@formo/analytics 1.17.9 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -1
- package/dist/cjs/src/FormoAnalytics.d.ts +16 -12
- package/dist/cjs/src/FormoAnalytics.d.ts.map +1 -1
- package/dist/cjs/src/FormoAnalytics.js +208 -153
- package/dist/cjs/src/FormoAnalytics.js.map +1 -1
- package/dist/cjs/src/lib/event/EventFactory.d.ts +1 -0
- package/dist/cjs/src/lib/event/EventFactory.d.ts.map +1 -1
- package/dist/cjs/src/lib/event/EventFactory.js +17 -5
- package/dist/cjs/src/lib/event/EventFactory.js.map +1 -1
- package/dist/cjs/src/types/base.d.ts +15 -8
- package/dist/cjs/src/types/base.d.ts.map +1 -1
- package/dist/cjs/src/types/events.d.ts +1 -0
- package/dist/cjs/src/types/events.d.ts.map +1 -1
- package/dist/cjs/src/types/events.js.map +1 -1
- package/dist/cjs/src/types/provider.d.ts +3 -0
- package/dist/cjs/src/types/provider.d.ts.map +1 -1
- package/dist/cjs/src/utils/chain.d.ts +7 -0
- package/dist/cjs/src/utils/chain.d.ts.map +1 -0
- package/dist/cjs/src/utils/chain.js +17 -0
- package/dist/cjs/src/utils/chain.js.map +1 -0
- package/dist/cjs/src/validators/address.d.ts +2 -2
- package/dist/cjs/src/validators/address.d.ts.map +1 -1
- package/dist/cjs/src/validators/address.js +6 -6
- package/dist/cjs/src/validators/address.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/src/FormoAnalytics.d.ts +16 -12
- package/dist/esm/src/FormoAnalytics.d.ts.map +1 -1
- package/dist/esm/src/FormoAnalytics.js +208 -153
- package/dist/esm/src/FormoAnalytics.js.map +1 -1
- package/dist/esm/src/lib/event/EventFactory.d.ts +1 -0
- package/dist/esm/src/lib/event/EventFactory.d.ts.map +1 -1
- package/dist/esm/src/lib/event/EventFactory.js +17 -5
- package/dist/esm/src/lib/event/EventFactory.js.map +1 -1
- package/dist/esm/src/types/base.d.ts +15 -8
- package/dist/esm/src/types/base.d.ts.map +1 -1
- package/dist/esm/src/types/events.d.ts +1 -0
- package/dist/esm/src/types/events.d.ts.map +1 -1
- package/dist/esm/src/types/events.js.map +1 -1
- package/dist/esm/src/types/provider.d.ts +3 -0
- package/dist/esm/src/types/provider.d.ts.map +1 -1
- package/dist/esm/src/utils/chain.d.ts +7 -0
- package/dist/esm/src/utils/chain.d.ts.map +1 -0
- package/dist/esm/src/utils/chain.js +14 -0
- package/dist/esm/src/utils/chain.js.map +1 -0
- package/dist/esm/src/validators/address.d.ts +2 -2
- package/dist/esm/src/validators/address.d.ts.map +1 -1
- package/dist/esm/src/validators/address.js +4 -4
- package/dist/esm/src/validators/address.js.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 +1 -1
package/README.md
CHANGED
|
@@ -20,9 +20,10 @@ export declare class FormoAnalytics implements IFormoAnalytics {
|
|
|
20
20
|
* @param {string} name - The name of the page
|
|
21
21
|
* @param {Record<string, any>} properties - Additional properties to include
|
|
22
22
|
* @param {Record<string, any>} context - Additional context to include
|
|
23
|
+
* @param {(...args: unknown[]) => void} callback - Optional callback function
|
|
23
24
|
* @returns {Promise<void>}
|
|
24
25
|
*/
|
|
25
|
-
page(category?: string, name?: string, properties?: IFormoEventProperties, context?: IFormoEventContext): Promise<void>;
|
|
26
|
+
page(category?: string, name?: string, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
|
|
26
27
|
/**
|
|
27
28
|
* Reset the current user session.
|
|
28
29
|
* @returns {void}
|
|
@@ -43,9 +44,9 @@ export declare class FormoAnalytics implements IFormoAnalytics {
|
|
|
43
44
|
address: Address;
|
|
44
45
|
}, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
|
|
45
46
|
/**
|
|
46
|
-
* Emits a wallet
|
|
47
|
-
* @param {ChainID} params.chainId
|
|
48
|
-
* @param {Address} params.address
|
|
47
|
+
* Emits a disconnect wallet event.
|
|
48
|
+
* @param {ChainID} [params.chainId]
|
|
49
|
+
* @param {Address} [params.address]
|
|
49
50
|
* @param {IFormoEventProperties} properties
|
|
50
51
|
* @param {IFormoEventContext} context
|
|
51
52
|
* @param {(...args: unknown[]) => void} callback
|
|
@@ -152,19 +153,22 @@ export declare class FormoAnalytics implements IFormoAnalytics {
|
|
|
152
153
|
*/
|
|
153
154
|
track(event: string, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
|
|
154
155
|
private trackProvider;
|
|
155
|
-
private
|
|
156
|
+
private registerAccountsChangedListener;
|
|
157
|
+
private onAccountsChanged;
|
|
156
158
|
private registerChainChangedListener;
|
|
157
|
-
private registerRequestListeners;
|
|
158
|
-
private onAddressChanged;
|
|
159
|
-
private onAddressConnected;
|
|
160
|
-
private handleDisconnect;
|
|
161
|
-
private onAddressDisconnected;
|
|
162
159
|
private onChainChanged;
|
|
163
|
-
private
|
|
164
|
-
private
|
|
160
|
+
private registerConnectListener;
|
|
161
|
+
private onConnected;
|
|
162
|
+
private registerRequestListeners;
|
|
165
163
|
private onLocationChange;
|
|
164
|
+
private trackPageHits;
|
|
166
165
|
private trackPageHit;
|
|
167
166
|
private trackEvent;
|
|
167
|
+
/**
|
|
168
|
+
* Determines if tracking should be enabled based on configuration
|
|
169
|
+
* @returns {boolean} True if tracking should be enabled
|
|
170
|
+
*/
|
|
171
|
+
private shouldTrack;
|
|
168
172
|
private getProviders;
|
|
169
173
|
get providers(): readonly EIP6963ProviderDetail[];
|
|
170
174
|
private detectWallets;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormoAnalytics.d.ts","sourceRoot":"","sources":["../../../src/FormoAnalytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,qBAAqB,EAAE,MAAM,MAAM,CAAC;AAmB1D,OAAO,EACL,OAAO,EACP,OAAO,EACP,MAAM,EACN,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,OAAO,EAGP,eAAe,
|
|
1
|
+
{"version":3,"file":"FormoAnalytics.d.ts","sourceRoot":"","sources":["../../../src/FormoAnalytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,qBAAqB,EAAE,MAAM,MAAM,CAAC;AAmB1D,OAAO,EACL,OAAO,EACP,OAAO,EACP,MAAM,EACN,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,OAAO,EAGP,eAAe,EAEf,iBAAiB,EAElB,MAAM,SAAS,CAAC;AAIjB,qBAAa,cAAe,YAAW,eAAe;aAalC,QAAQ,EAAE,MAAM;IACzB,OAAO,EAAE,OAAO;IAbzB,OAAO,CAAC,SAAS,CAAC,CAAkB;IACpC,OAAO,CAAC,kBAAkB,CAAoD;IAC9E,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,UAAU,CAAwC;IAE1D,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAM;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAM;IAE5B,OAAO;WAgDM,IAAI,CACf,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,cAAc,CAAC;IAe1B;;;;;;;;OAQG;IACU,IAAI,CACf,QAAQ,CAAC,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,EAC5B,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC;IAIhB;;;OAGG;IACI,KAAK,IAAI,IAAI;IAMpB;;;;;;;;;OASG;IACG,OAAO,CACX,EACE,OAAO,EACP,OAAO,GACR,EAAE;QACD,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;KAClB,EACD,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,EAC5B,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC;IAuBhB;;;;;;;;OAQG;IACG,UAAU,CACd,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,EACD,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,EAC5B,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC;IAoBhB;;;;;;;;;;OAUG;IACG,KAAK,CACT,EACE,OAAO,EACP,OAAO,GACR,EAAE;QACD,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,EACD,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,EAC5B,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC;IA6BhB;;;;;;;;;;;OAWG;IACG,SAAS,CACb,EACE,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EACP,aAAa,GACd,EAAE;QACD,MAAM,EAAE,eAAe,CAAC;QACxB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,EACD,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,EAC5B,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC;IAgBhB;;;;;;;;;;;;;OAaG;IACG,WAAW,CACf,EACE,MAAM,EACN,OAAO,EACP,OAAO,EACP,IAAI,EACJ,EAAE,EACF,KAAK,EACL,eAAe,GAChB,EAAE;QACD,MAAM,EAAE,iBAAiB,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,EACD,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,EAC5B,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC;IAkBhB;;;;;;;;;;OAUG;IACG,QAAQ,CACZ,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,EACD,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,EAC5B,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC;IAqEhB;;;;;;;;OAQG;IACG,MAAM,CACV,EACE,YAAY,EACZ,IAAI,GACL,EAAE;QACD,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;KACd,EACD,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,EAC5B,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC;IAmBhB;;;;;;;OAOG;IACG,KAAK,CACT,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,qBAAqB,EAClC,OAAO,CAAC,EAAE,kBAAkB,EAC5B,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GACtC,OAAO,CAAC,IAAI,CAAC;IAchB,OAAO,CAAC,aAAa;IAkCrB,OAAO,CAAC,+BAA+B;YASzB,iBAAiB;IAkB/B,OAAO,CAAC,4BAA4B;YAQtB,cAAc;IAkC5B,OAAO,CAAC,uBAAuB;YAUjB,WAAW;IAczB,OAAO,CAAC,wBAAwB;YAyIlB,gBAAgB;YAShB,aAAa;YAmBb,YAAY;YA4BZ,UAAU;IA6BxB;;;OAGG;IACH,OAAO,CAAC,WAAW;YAmDL,YAAY;IAiB1B,IAAI,SAAS,IAAI,SAAS,qBAAqB,EAAE,CAEhD;YAEa,aAAa;IAe3B,IAAI,QAAQ,IAAI,eAAe,GAAG,SAAS,CAE1C;YAEa,UAAU;YAwBV,WAAW;YAqBX,iBAAiB;IAqB/B,OAAO,CAAC,0BAA0B;YAgCpB,4BAA4B;IAgB1C;;OAEG;YACW,sBAAsB;CA4CrC"}
|
|
@@ -53,6 +53,7 @@ var constants_1 = require("./constants");
|
|
|
53
53
|
var lib_1 = require("./lib");
|
|
54
54
|
var types_1 = require("./types");
|
|
55
55
|
var validators_1 = require("./validators");
|
|
56
|
+
var chain_1 = require("./utils/chain");
|
|
56
57
|
var FormoAnalytics = /** @class */ (function () {
|
|
57
58
|
function FormoAnalytics(writeKey, options) {
|
|
58
59
|
if (options === void 0) { options = {}; }
|
|
@@ -65,8 +66,8 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
65
66
|
this.currentUserId = "";
|
|
66
67
|
this.config = {
|
|
67
68
|
writeKey: writeKey,
|
|
68
|
-
trackLocalhost: options.trackLocalhost || false,
|
|
69
69
|
};
|
|
70
|
+
this.options = options;
|
|
70
71
|
this.session = new FormoAnalyticsSession();
|
|
71
72
|
this.currentUserId =
|
|
72
73
|
(0, lib_1.cookie)().get(constants_1.SESSION_USER_ID_KEY) || undefined;
|
|
@@ -95,7 +96,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
95
96
|
if (provider) {
|
|
96
97
|
this.trackProvider(provider);
|
|
97
98
|
}
|
|
98
|
-
this.
|
|
99
|
+
this.trackPageHit();
|
|
99
100
|
this.trackPageHits();
|
|
100
101
|
}
|
|
101
102
|
FormoAnalytics.init = function (writeKey, options) {
|
|
@@ -129,13 +130,14 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
129
130
|
* @param {string} name - The name of the page
|
|
130
131
|
* @param {Record<string, any>} properties - Additional properties to include
|
|
131
132
|
* @param {Record<string, any>} context - Additional context to include
|
|
133
|
+
* @param {(...args: unknown[]) => void} callback - Optional callback function
|
|
132
134
|
* @returns {Promise<void>}
|
|
133
135
|
*/
|
|
134
|
-
FormoAnalytics.prototype.page = function (category, name, properties, context) {
|
|
136
|
+
FormoAnalytics.prototype.page = function (category, name, properties, context, callback) {
|
|
135
137
|
return __awaiter(this, void 0, void 0, function () {
|
|
136
138
|
return __generator(this, function (_a) {
|
|
137
139
|
switch (_a.label) {
|
|
138
|
-
case 0: return [4 /*yield*/, this.trackPageHit(category, name, properties, context)];
|
|
140
|
+
case 0: return [4 /*yield*/, this.trackPageHit(category, name, properties, context, callback)];
|
|
139
141
|
case 1:
|
|
140
142
|
_a.sent();
|
|
141
143
|
return [2 /*return*/];
|
|
@@ -188,9 +190,9 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
188
190
|
});
|
|
189
191
|
};
|
|
190
192
|
/**
|
|
191
|
-
* Emits a wallet
|
|
192
|
-
* @param {ChainID} params.chainId
|
|
193
|
-
* @param {Address} params.address
|
|
193
|
+
* Emits a disconnect wallet event.
|
|
194
|
+
* @param {ChainID} [params.chainId]
|
|
195
|
+
* @param {Address} [params.address]
|
|
194
196
|
* @param {IFormoEventProperties} properties
|
|
195
197
|
* @param {IFormoEventContext} context
|
|
196
198
|
* @param {(...args: unknown[]) => void} callback
|
|
@@ -198,15 +200,21 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
198
200
|
*/
|
|
199
201
|
FormoAnalytics.prototype.disconnect = function (params, properties, context, callback) {
|
|
200
202
|
return __awaiter(this, void 0, void 0, function () {
|
|
201
|
-
var
|
|
203
|
+
var chainId, address;
|
|
202
204
|
return __generator(this, function (_a) {
|
|
203
205
|
switch (_a.label) {
|
|
204
206
|
case 0:
|
|
205
|
-
address = (params === null || params === void 0 ? void 0 : params.address) || this.currentAddress;
|
|
206
207
|
chainId = (params === null || params === void 0 ? void 0 : params.chainId) || this.currentChainId;
|
|
207
|
-
|
|
208
|
+
address = (params === null || params === void 0 ? void 0 : params.address) || this.currentAddress;
|
|
209
|
+
return [4 /*yield*/, this.trackEvent(constants_1.EventType.DISCONNECT, {
|
|
210
|
+
chainId: chainId,
|
|
211
|
+
address: address,
|
|
212
|
+
}, properties, context, callback)];
|
|
208
213
|
case 1:
|
|
209
214
|
_a.sent();
|
|
215
|
+
this.currentAddress = undefined;
|
|
216
|
+
this.currentChainId = undefined;
|
|
217
|
+
lib_1.logger.info("Wallet disconnected: Cleared currentAddress and currentChainId");
|
|
210
218
|
return [2 /*return*/];
|
|
211
219
|
}
|
|
212
220
|
});
|
|
@@ -360,7 +368,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
360
368
|
case 8: return [2 /*return*/];
|
|
361
369
|
case 9:
|
|
362
370
|
userId = params.userId, address = params.address, providerName = params.providerName, rdns = params.rdns;
|
|
363
|
-
lib_1.logger.
|
|
371
|
+
lib_1.logger.info("Identify", address, userId, providerName, rdns);
|
|
364
372
|
if (address)
|
|
365
373
|
this.currentAddress = address;
|
|
366
374
|
if (userId) {
|
|
@@ -438,6 +446,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
438
446
|
SDK tracking and event listener functions
|
|
439
447
|
*/
|
|
440
448
|
FormoAnalytics.prototype.trackProvider = function (provider) {
|
|
449
|
+
lib_1.logger.info("trackProvider", provider);
|
|
441
450
|
try {
|
|
442
451
|
if (provider === this._provider) {
|
|
443
452
|
lib_1.logger.warn("TrackProvider: Provider already tracked.");
|
|
@@ -455,33 +464,65 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
455
464
|
}
|
|
456
465
|
this._provider = provider;
|
|
457
466
|
// Register listeners for web3 provider events
|
|
458
|
-
this.
|
|
467
|
+
this.registerAccountsChangedListener();
|
|
459
468
|
this.registerChainChangedListener();
|
|
469
|
+
this.registerConnectListener();
|
|
460
470
|
this.registerRequestListeners();
|
|
461
471
|
}
|
|
462
472
|
catch (error) {
|
|
463
473
|
lib_1.logger.error("Error tracking provider:", error);
|
|
464
474
|
}
|
|
465
475
|
};
|
|
466
|
-
FormoAnalytics.prototype.
|
|
476
|
+
FormoAnalytics.prototype.registerAccountsChangedListener = function () {
|
|
467
477
|
var _this = this;
|
|
468
|
-
var _a
|
|
478
|
+
var _a;
|
|
479
|
+
lib_1.logger.info("registerAccountsChangedListener");
|
|
469
480
|
var listener = function () {
|
|
470
481
|
var args = [];
|
|
471
482
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
472
483
|
args[_i] = arguments[_i];
|
|
473
484
|
}
|
|
474
|
-
return _this.
|
|
485
|
+
return _this.onAccountsChanged(args[0]);
|
|
475
486
|
};
|
|
476
487
|
(_a = this._provider) === null || _a === void 0 ? void 0 : _a.on("accountsChanged", listener);
|
|
477
488
|
this._providerListeners["accountsChanged"] = listener;
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
this
|
|
489
|
+
};
|
|
490
|
+
FormoAnalytics.prototype.onAccountsChanged = function (accounts) {
|
|
491
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
492
|
+
var address, _a;
|
|
493
|
+
return __generator(this, function (_b) {
|
|
494
|
+
switch (_b.label) {
|
|
495
|
+
case 0:
|
|
496
|
+
lib_1.logger.info("onAccountsChanged", accounts);
|
|
497
|
+
if (!(accounts.length === 0)) return [3 /*break*/, 2];
|
|
498
|
+
// Handle wallet disconnect
|
|
499
|
+
return [4 /*yield*/, this.disconnect()];
|
|
500
|
+
case 1:
|
|
501
|
+
// Handle wallet disconnect
|
|
502
|
+
_b.sent();
|
|
503
|
+
return [2 /*return*/];
|
|
504
|
+
case 2:
|
|
505
|
+
address = accounts[0];
|
|
506
|
+
if (address === this.currentAddress) {
|
|
507
|
+
// We have already reported this address
|
|
508
|
+
return [2 /*return*/];
|
|
509
|
+
}
|
|
510
|
+
// Handle wallet connect
|
|
511
|
+
this.currentAddress = address;
|
|
512
|
+
_a = this;
|
|
513
|
+
return [4 /*yield*/, this.getCurrentChainId()];
|
|
514
|
+
case 3:
|
|
515
|
+
_a.currentChainId = _b.sent();
|
|
516
|
+
this.connect({ chainId: this.currentChainId, address: address });
|
|
517
|
+
return [2 /*return*/];
|
|
518
|
+
}
|
|
519
|
+
});
|
|
520
|
+
});
|
|
481
521
|
};
|
|
482
522
|
FormoAnalytics.prototype.registerChainChangedListener = function () {
|
|
483
523
|
var _this = this;
|
|
484
524
|
var _a;
|
|
525
|
+
lib_1.logger.info("registerChainChangedListener");
|
|
485
526
|
var listener = function () {
|
|
486
527
|
var args = [];
|
|
487
528
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
@@ -492,10 +533,92 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
492
533
|
(_a = this.provider) === null || _a === void 0 ? void 0 : _a.on("chainChanged", listener);
|
|
493
534
|
this._providerListeners["chainChanged"] = listener;
|
|
494
535
|
};
|
|
536
|
+
FormoAnalytics.prototype.onChainChanged = function (chainIdHex) {
|
|
537
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
538
|
+
var address;
|
|
539
|
+
return __generator(this, function (_a) {
|
|
540
|
+
switch (_a.label) {
|
|
541
|
+
case 0:
|
|
542
|
+
lib_1.logger.info("onChainChanged", chainIdHex);
|
|
543
|
+
this.currentChainId = (0, chain_1.parseChainId)(chainIdHex);
|
|
544
|
+
if (!!this.currentAddress) return [3 /*break*/, 2];
|
|
545
|
+
if (!this.provider) {
|
|
546
|
+
lib_1.logger.info("OnChainChanged: Provider not found. CHAIN_CHANGED not reported");
|
|
547
|
+
return [2 /*return*/, Promise.resolve()];
|
|
548
|
+
}
|
|
549
|
+
return [4 /*yield*/, this.getAddress()];
|
|
550
|
+
case 1:
|
|
551
|
+
address = _a.sent();
|
|
552
|
+
if (!address) {
|
|
553
|
+
lib_1.logger.info("OnChainChanged: Unable to fetch or store connected address");
|
|
554
|
+
return [2 /*return*/, Promise.resolve()];
|
|
555
|
+
}
|
|
556
|
+
this.currentAddress = address;
|
|
557
|
+
_a.label = 2;
|
|
558
|
+
case 2:
|
|
559
|
+
// Proceed only if the address exists
|
|
560
|
+
if (this.currentAddress) {
|
|
561
|
+
return [2 /*return*/, this.chain({
|
|
562
|
+
chainId: this.currentChainId,
|
|
563
|
+
address: this.currentAddress,
|
|
564
|
+
})];
|
|
565
|
+
}
|
|
566
|
+
else {
|
|
567
|
+
lib_1.logger.info("OnChainChanged: Current connected address is null despite fetch attempt");
|
|
568
|
+
}
|
|
569
|
+
return [2 /*return*/];
|
|
570
|
+
}
|
|
571
|
+
});
|
|
572
|
+
});
|
|
573
|
+
};
|
|
574
|
+
FormoAnalytics.prototype.registerConnectListener = function () {
|
|
575
|
+
var _this = this;
|
|
576
|
+
var _a;
|
|
577
|
+
lib_1.logger.info("registerConnectListener");
|
|
578
|
+
var listener = function () {
|
|
579
|
+
var args = [];
|
|
580
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
581
|
+
args[_i] = arguments[_i];
|
|
582
|
+
}
|
|
583
|
+
var connection = args[0];
|
|
584
|
+
_this.onConnected(connection);
|
|
585
|
+
};
|
|
586
|
+
(_a = this._provider) === null || _a === void 0 ? void 0 : _a.on("connect", listener);
|
|
587
|
+
this._providerListeners["connect"] = listener;
|
|
588
|
+
};
|
|
589
|
+
FormoAnalytics.prototype.onConnected = function (connection) {
|
|
590
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
591
|
+
var chainId, address, e_2;
|
|
592
|
+
return __generator(this, function (_a) {
|
|
593
|
+
switch (_a.label) {
|
|
594
|
+
case 0:
|
|
595
|
+
lib_1.logger.info("onConnected", connection);
|
|
596
|
+
_a.label = 1;
|
|
597
|
+
case 1:
|
|
598
|
+
_a.trys.push([1, 3, , 4]);
|
|
599
|
+
if (!connection || typeof connection.chainId !== 'string')
|
|
600
|
+
return [2 /*return*/];
|
|
601
|
+
chainId = (0, chain_1.parseChainId)(connection.chainId);
|
|
602
|
+
return [4 /*yield*/, this.getAddress()];
|
|
603
|
+
case 2:
|
|
604
|
+
address = _a.sent();
|
|
605
|
+
if (chainId !== null && chainId !== undefined && address) {
|
|
606
|
+
this.connect({ chainId: chainId, address: address });
|
|
607
|
+
}
|
|
608
|
+
return [3 /*break*/, 4];
|
|
609
|
+
case 3:
|
|
610
|
+
e_2 = _a.sent();
|
|
611
|
+
lib_1.logger.error("Error handling connect event", e_2);
|
|
612
|
+
return [3 /*break*/, 4];
|
|
613
|
+
case 4: return [2 /*return*/];
|
|
614
|
+
}
|
|
615
|
+
});
|
|
616
|
+
});
|
|
617
|
+
};
|
|
495
618
|
FormoAnalytics.prototype.registerRequestListeners = function () {
|
|
496
619
|
var _this = this;
|
|
497
620
|
var _a;
|
|
498
|
-
lib_1.logger.
|
|
621
|
+
lib_1.logger.info("registerRequestListeners");
|
|
499
622
|
if (!this.provider) {
|
|
500
623
|
lib_1.logger.error("Provider not found for request (signature, transaction) tracking");
|
|
501
624
|
return;
|
|
@@ -570,7 +693,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
570
693
|
method === "eth_sendTransaction" &&
|
|
571
694
|
params[0])) return [3 /*break*/, 8];
|
|
572
695
|
(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
573
|
-
var payload,
|
|
696
|
+
var payload, e_3;
|
|
574
697
|
return __generator(this, function (_a) {
|
|
575
698
|
switch (_a.label) {
|
|
576
699
|
case 0:
|
|
@@ -581,8 +704,8 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
581
704
|
this.transaction(__assign({ status: types_1.TransactionStatus.STARTED }, payload));
|
|
582
705
|
return [3 /*break*/, 3];
|
|
583
706
|
case 2:
|
|
584
|
-
|
|
585
|
-
lib_1.logger.error("Formo: Failed to track transaction start",
|
|
707
|
+
e_3 = _a.sent();
|
|
708
|
+
lib_1.logger.error("Formo: Failed to track transaction start", e_3);
|
|
586
709
|
return [3 /*break*/, 3];
|
|
587
710
|
case 3: return [2 /*return*/];
|
|
588
711
|
}
|
|
@@ -598,7 +721,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
598
721
|
case 6:
|
|
599
722
|
transactionHash_1 = (_c.sent());
|
|
600
723
|
(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
601
|
-
var payload,
|
|
724
|
+
var payload, e_4;
|
|
602
725
|
return __generator(this, function (_a) {
|
|
603
726
|
switch (_a.label) {
|
|
604
727
|
case 0:
|
|
@@ -611,8 +734,8 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
611
734
|
this.pollTransactionReceipt(transactionHash_1, payload);
|
|
612
735
|
return [3 /*break*/, 3];
|
|
613
736
|
case 2:
|
|
614
|
-
|
|
615
|
-
lib_1.logger.error("Formo: Failed to track transaction broadcast",
|
|
737
|
+
e_4 = _a.sent();
|
|
738
|
+
lib_1.logger.error("Formo: Failed to track transaction broadcast", e_4);
|
|
616
739
|
return [3 /*break*/, 3];
|
|
617
740
|
case 3: return [2 /*return*/];
|
|
618
741
|
}
|
|
@@ -622,7 +745,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
622
745
|
case 7:
|
|
623
746
|
error_2 = _c.sent();
|
|
624
747
|
(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
625
|
-
var rpcError, payload,
|
|
748
|
+
var rpcError, payload, e_5;
|
|
626
749
|
return __generator(this, function (_a) {
|
|
627
750
|
switch (_a.label) {
|
|
628
751
|
case 0:
|
|
@@ -636,8 +759,8 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
636
759
|
_a.label = 2;
|
|
637
760
|
case 2: return [3 /*break*/, 4];
|
|
638
761
|
case 3:
|
|
639
|
-
|
|
640
|
-
lib_1.logger.error("Formo: Failed to track transaction rejection",
|
|
762
|
+
e_5 = _a.sent();
|
|
763
|
+
lib_1.logger.error("Formo: Failed to track transaction rejection", e_5);
|
|
641
764
|
return [3 /*break*/, 4];
|
|
642
765
|
case 4: return [2 /*return*/];
|
|
643
766
|
}
|
|
@@ -649,116 +772,16 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
649
772
|
});
|
|
650
773
|
}); };
|
|
651
774
|
};
|
|
652
|
-
FormoAnalytics.prototype.
|
|
653
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
654
|
-
return __generator(this, function (_a) {
|
|
655
|
-
if (addresses.length > 0) {
|
|
656
|
-
this.onAddressConnected(addresses[0]);
|
|
657
|
-
}
|
|
658
|
-
else {
|
|
659
|
-
this.onAddressDisconnected();
|
|
660
|
-
}
|
|
661
|
-
return [2 /*return*/];
|
|
662
|
-
});
|
|
663
|
-
});
|
|
664
|
-
};
|
|
665
|
-
FormoAnalytics.prototype.onAddressConnected = function (address) {
|
|
666
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
667
|
-
var _a;
|
|
668
|
-
return __generator(this, function (_b) {
|
|
669
|
-
switch (_b.label) {
|
|
670
|
-
case 0:
|
|
671
|
-
if (address === this.currentAddress)
|
|
672
|
-
// We have already reported this address
|
|
673
|
-
return [2 /*return*/];
|
|
674
|
-
this.currentAddress = address;
|
|
675
|
-
_a = this;
|
|
676
|
-
return [4 /*yield*/, this.getCurrentChainId()];
|
|
677
|
-
case 1:
|
|
678
|
-
_a.currentChainId = _b.sent();
|
|
679
|
-
this.connect({ chainId: this.currentChainId, address: address });
|
|
680
|
-
return [2 /*return*/];
|
|
681
|
-
}
|
|
682
|
-
});
|
|
683
|
-
});
|
|
684
|
-
};
|
|
685
|
-
FormoAnalytics.prototype.handleDisconnect = function (chainId, address, properties, context, callback) {
|
|
686
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
687
|
-
var payload;
|
|
688
|
-
return __generator(this, function (_a) {
|
|
689
|
-
switch (_a.label) {
|
|
690
|
-
case 0:
|
|
691
|
-
payload = {
|
|
692
|
-
chainId: chainId || this.currentChainId,
|
|
693
|
-
address: address || this.currentAddress,
|
|
694
|
-
};
|
|
695
|
-
this.currentChainId = undefined;
|
|
696
|
-
this.currentAddress = undefined;
|
|
697
|
-
(0, lib_1.cookie)().remove(constants_1.SESSION_USER_ID_KEY);
|
|
698
|
-
return [4 /*yield*/, this.trackEvent(constants_1.EventType.DISCONNECT, payload, properties, context, callback)];
|
|
699
|
-
case 1:
|
|
700
|
-
_a.sent();
|
|
701
|
-
return [2 /*return*/];
|
|
702
|
-
}
|
|
703
|
-
});
|
|
704
|
-
});
|
|
705
|
-
};
|
|
706
|
-
FormoAnalytics.prototype.onAddressDisconnected = function () {
|
|
707
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
708
|
-
return __generator(this, function (_a) {
|
|
709
|
-
switch (_a.label) {
|
|
710
|
-
case 0: return [4 /*yield*/, this.handleDisconnect(this.currentChainId, this.currentAddress)];
|
|
711
|
-
case 1:
|
|
712
|
-
_a.sent();
|
|
713
|
-
return [2 /*return*/];
|
|
714
|
-
}
|
|
715
|
-
});
|
|
716
|
-
});
|
|
717
|
-
};
|
|
718
|
-
FormoAnalytics.prototype.onChainChanged = function (chainIdHex) {
|
|
719
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
720
|
-
var address;
|
|
721
|
-
return __generator(this, function (_a) {
|
|
722
|
-
switch (_a.label) {
|
|
723
|
-
case 0:
|
|
724
|
-
this.currentChainId = parseInt(chainIdHex);
|
|
725
|
-
if (!!this.currentAddress) return [3 /*break*/, 2];
|
|
726
|
-
if (!this.provider) {
|
|
727
|
-
lib_1.logger.info("OnChainChanged: Provider not found. CHAIN_CHANGED not reported");
|
|
728
|
-
return [2 /*return*/, Promise.resolve()];
|
|
729
|
-
}
|
|
730
|
-
return [4 /*yield*/, this.getAddress()];
|
|
731
|
-
case 1:
|
|
732
|
-
address = _a.sent();
|
|
733
|
-
if (!address) {
|
|
734
|
-
lib_1.logger.info("OnChainChanged: Unable to fetch or store connected address");
|
|
735
|
-
return [2 /*return*/, Promise.resolve()];
|
|
736
|
-
}
|
|
737
|
-
this.currentAddress = address;
|
|
738
|
-
_a.label = 2;
|
|
739
|
-
case 2:
|
|
740
|
-
// Proceed only if the address exists
|
|
741
|
-
if (this.currentAddress) {
|
|
742
|
-
return [2 /*return*/, this.chain({
|
|
743
|
-
chainId: this.currentChainId,
|
|
744
|
-
address: this.currentAddress,
|
|
745
|
-
})];
|
|
746
|
-
}
|
|
747
|
-
else {
|
|
748
|
-
lib_1.logger.info("OnChainChanged: Current connected address is null despite fetch attempt");
|
|
749
|
-
}
|
|
750
|
-
return [2 /*return*/];
|
|
751
|
-
}
|
|
752
|
-
});
|
|
753
|
-
});
|
|
754
|
-
};
|
|
755
|
-
FormoAnalytics.prototype.trackFirstPageHit = function () {
|
|
775
|
+
FormoAnalytics.prototype.onLocationChange = function () {
|
|
756
776
|
return __awaiter(this, void 0, void 0, function () {
|
|
777
|
+
var currentUrl;
|
|
757
778
|
return __generator(this, function (_a) {
|
|
758
|
-
|
|
779
|
+
currentUrl = (0, lib_1.cookie)().get(constants_1.SESSION_CURRENT_URL_KEY);
|
|
780
|
+
if (currentUrl !== window.location.href) {
|
|
759
781
|
(0, lib_1.cookie)().set(constants_1.SESSION_CURRENT_URL_KEY, window.location.href);
|
|
782
|
+
this.trackPageHit();
|
|
760
783
|
}
|
|
761
|
-
return [2 /*return
|
|
784
|
+
return [2 /*return*/];
|
|
762
785
|
});
|
|
763
786
|
});
|
|
764
787
|
};
|
|
@@ -793,25 +816,13 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
793
816
|
});
|
|
794
817
|
});
|
|
795
818
|
};
|
|
796
|
-
FormoAnalytics.prototype.onLocationChange = function () {
|
|
797
|
-
return __awaiter(this, void 0, void 0, function () {
|
|
798
|
-
var currentUrl;
|
|
799
|
-
return __generator(this, function (_a) {
|
|
800
|
-
currentUrl = (0, lib_1.cookie)().get(constants_1.SESSION_CURRENT_URL_KEY);
|
|
801
|
-
if (currentUrl !== window.location.href) {
|
|
802
|
-
(0, lib_1.cookie)().set(constants_1.SESSION_CURRENT_URL_KEY, window.location.href);
|
|
803
|
-
this.trackPageHit();
|
|
804
|
-
}
|
|
805
|
-
return [2 /*return*/];
|
|
806
|
-
});
|
|
807
|
-
});
|
|
808
|
-
};
|
|
809
819
|
FormoAnalytics.prototype.trackPageHit = function (category, name, properties, context, callback) {
|
|
810
820
|
return __awaiter(this, void 0, void 0, function () {
|
|
811
821
|
var _this = this;
|
|
812
822
|
return __generator(this, function (_a) {
|
|
813
|
-
if (!this.
|
|
814
|
-
|
|
823
|
+
if (!this.shouldTrack()) {
|
|
824
|
+
lib_1.logger.info("Track page hit: Skipping event due to tracking configuration");
|
|
825
|
+
return [2 /*return*/];
|
|
815
826
|
}
|
|
816
827
|
setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
817
828
|
return __generator(this, function (_a) {
|
|
@@ -830,6 +841,10 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
830
841
|
return __awaiter(this, void 0, void 0, function () {
|
|
831
842
|
return __generator(this, function (_a) {
|
|
832
843
|
try {
|
|
844
|
+
if (!this.shouldTrack()) {
|
|
845
|
+
lib_1.logger.info("Skipping ".concat(type, " event due to tracking configuration"));
|
|
846
|
+
return [2 /*return*/];
|
|
847
|
+
}
|
|
833
848
|
this.eventManager.addEvent(__assign(__assign({ type: type }, payload), { properties: properties, context: context, callback: callback }), this.currentAddress, this.currentUserId);
|
|
834
849
|
}
|
|
835
850
|
catch (error) {
|
|
@@ -839,6 +854,46 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
839
854
|
});
|
|
840
855
|
});
|
|
841
856
|
};
|
|
857
|
+
/**
|
|
858
|
+
* Determines if tracking should be enabled based on configuration
|
|
859
|
+
* @returns {boolean} True if tracking should be enabled
|
|
860
|
+
*/
|
|
861
|
+
FormoAnalytics.prototype.shouldTrack = function () {
|
|
862
|
+
// Check if tracking is explicitly provided as a boolean
|
|
863
|
+
if (typeof this.options.tracking === 'boolean') {
|
|
864
|
+
return this.options.tracking;
|
|
865
|
+
}
|
|
866
|
+
// Handle object configuration with exclusion rules
|
|
867
|
+
if (this.options.tracking !== null &&
|
|
868
|
+
typeof this.options.tracking === 'object' &&
|
|
869
|
+
!Array.isArray(this.options.tracking)) {
|
|
870
|
+
var _a = this.options.tracking, _b = _a.excludeHosts, excludeHosts = _b === void 0 ? [] : _b, _c = _a.excludePaths, excludePaths = _c === void 0 ? [] : _c, _d = _a.excludeChains, excludeChains = _d === void 0 ? [] : _d;
|
|
871
|
+
// Check hostname exclusions - use exact matching
|
|
872
|
+
if (excludeHosts.length > 0 && typeof window !== 'undefined') {
|
|
873
|
+
var hostname = window.location.hostname;
|
|
874
|
+
if (excludeHosts.includes(hostname)) {
|
|
875
|
+
return false;
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
// Check path exclusions - use exact matching
|
|
879
|
+
if (excludePaths.length > 0 && typeof window !== 'undefined') {
|
|
880
|
+
var pathname = window.location.pathname;
|
|
881
|
+
if (excludePaths.includes(pathname)) {
|
|
882
|
+
return false;
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
// Check chainId exclusions
|
|
886
|
+
if (excludeChains.length > 0 &&
|
|
887
|
+
this.currentChainId &&
|
|
888
|
+
excludeChains.includes(this.currentChainId)) {
|
|
889
|
+
return false;
|
|
890
|
+
}
|
|
891
|
+
// If nothing is excluded, tracking is enabled
|
|
892
|
+
return true;
|
|
893
|
+
}
|
|
894
|
+
// Default behavior: track everywhere except localhost
|
|
895
|
+
return !(0, validators_1.isLocalhost)();
|
|
896
|
+
};
|
|
842
897
|
/*
|
|
843
898
|
Utility functions
|
|
844
899
|
*/
|
|
@@ -994,7 +1049,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
994
1049
|
lib_1.logger.info("Chain id not found");
|
|
995
1050
|
return [2 /*return*/, 0];
|
|
996
1051
|
}
|
|
997
|
-
return [2 /*return*/,
|
|
1052
|
+
return [2 /*return*/, (0, chain_1.parseChainId)(chainIdHex)];
|
|
998
1053
|
case 3:
|
|
999
1054
|
err_5 = _b.sent();
|
|
1000
1055
|
lib_1.logger.error("eth_chainId threw an error:", err_5);
|
|
@@ -1057,7 +1112,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1057
1112
|
if (!provider)
|
|
1058
1113
|
return [2 /*return*/];
|
|
1059
1114
|
poll = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1060
|
-
var receipt,
|
|
1115
|
+
var receipt, e_6;
|
|
1061
1116
|
return __generator(this, function (_a) {
|
|
1062
1117
|
switch (_a.label) {
|
|
1063
1118
|
case 0:
|
|
@@ -1081,8 +1136,8 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1081
1136
|
}
|
|
1082
1137
|
return [3 /*break*/, 3];
|
|
1083
1138
|
case 2:
|
|
1084
|
-
|
|
1085
|
-
lib_1.logger.error("Error polling transaction receipt",
|
|
1139
|
+
e_6 = _a.sent();
|
|
1140
|
+
lib_1.logger.error("Error polling transaction receipt", e_6);
|
|
1086
1141
|
return [3 /*break*/, 3];
|
|
1087
1142
|
case 3:
|
|
1088
1143
|
attempts++;
|