@formo/analytics 1.24.0 → 1.26.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/LICENSE +21 -0
- package/README.md +1 -74
- package/dist/cjs/src/FormoAnalytics.d.ts +24 -14
- package/dist/cjs/src/FormoAnalytics.js +195 -255
- package/dist/cjs/src/FormoAnalyticsProvider.js +71 -13
- package/dist/cjs/src/{lib/consent.d.ts → consent/index.d.ts} +1 -1
- package/dist/cjs/src/{lib/consent.js → consent/index.js} +1 -1
- package/dist/cjs/src/constants/base.d.ts +0 -2
- package/dist/cjs/src/constants/base.js +3 -3
- package/dist/cjs/src/constants/config.js +1 -1
- package/dist/cjs/src/{lib/event → event}/EventFactory.d.ts +1 -1
- package/dist/cjs/src/{lib/event → event}/EventFactory.js +30 -13
- package/dist/cjs/src/{lib/event → event}/EventManager.d.ts +1 -1
- package/dist/cjs/src/{lib/event → event}/EventManager.js +1 -1
- package/dist/cjs/src/event/constants.d.ts +11 -0
- package/dist/cjs/src/event/constants.js +34 -0
- package/dist/cjs/src/{lib/event → event}/type.d.ts +1 -1
- package/dist/cjs/src/{lib/event → event}/utils.d.ts +1 -1
- package/dist/cjs/src/{lib/event → event}/utils.js +1 -1
- package/dist/cjs/src/{lib/fetch.d.ts → fetch/index.d.ts} +1 -1
- package/dist/cjs/src/{lib/fetch.js → fetch/index.js} +1 -1
- package/dist/cjs/src/provider/detection.d.ts +58 -0
- package/dist/cjs/src/provider/detection.js +103 -0
- package/dist/cjs/src/provider/index.d.ts +6 -0
- package/dist/cjs/src/provider/index.js +11 -0
- package/dist/{esm/src/lib → cjs/src}/queue/EventQueue.d.ts +1 -1
- package/dist/cjs/src/{lib/queue → queue}/EventQueue.js +3 -3
- package/dist/{esm/src/lib → cjs/src}/queue/type.d.ts +1 -1
- package/dist/cjs/src/session/index.d.ts +91 -0
- package/dist/cjs/src/session/index.js +126 -0
- package/dist/cjs/src/{lib/storage → storage}/built-in/blueprint.js +1 -1
- package/dist/cjs/src/types/base.d.ts +27 -1
- package/dist/cjs/src/validators/object.js +0 -2
- package/dist/cjs/src/version.d.ts +1 -1
- package/dist/cjs/src/version.js +1 -1
- package/dist/cjs/src/wagmi/WagmiEventHandler.d.ts +69 -0
- package/dist/cjs/src/wagmi/WagmiEventHandler.js +449 -0
- package/dist/cjs/src/wagmi/index.d.ts +9 -0
- package/dist/cjs/src/wagmi/index.js +12 -0
- package/dist/cjs/src/wagmi/types.d.ts +115 -0
- package/dist/cjs/src/wagmi/types.js +10 -0
- package/dist/esm/src/FormoAnalytics.d.ts +24 -14
- package/dist/esm/src/FormoAnalytics.js +85 -145
- package/dist/esm/src/FormoAnalyticsProvider.js +68 -10
- package/dist/esm/src/{lib/consent.d.ts → consent/index.d.ts} +1 -1
- package/dist/esm/src/{lib/consent.js → consent/index.js} +1 -1
- package/dist/esm/src/constants/base.d.ts +0 -2
- package/dist/esm/src/constants/base.js +2 -2
- package/dist/esm/src/constants/config.js +1 -1
- package/dist/esm/src/{lib/event → event}/EventFactory.d.ts +1 -1
- package/dist/esm/src/{lib/event → event}/EventFactory.js +31 -14
- package/dist/esm/src/{lib/event → event}/EventManager.d.ts +1 -1
- package/dist/esm/src/{lib/event → event}/EventManager.js +1 -1
- package/dist/esm/src/event/constants.d.ts +11 -0
- package/dist/esm/src/event/constants.js +29 -0
- package/dist/esm/src/{lib/event → event}/type.d.ts +1 -1
- package/dist/esm/src/{lib/event → event}/utils.d.ts +1 -1
- package/dist/esm/src/{lib/event → event}/utils.js +1 -1
- package/dist/esm/src/{lib/fetch.d.ts → fetch/index.d.ts} +1 -1
- package/dist/esm/src/{lib/fetch.js → fetch/index.js} +1 -1
- package/dist/esm/src/provider/detection.d.ts +58 -0
- package/dist/esm/src/provider/detection.js +98 -0
- package/dist/esm/src/provider/index.d.ts +6 -0
- package/dist/esm/src/provider/index.js +5 -0
- package/dist/{cjs/src/lib → esm/src}/queue/EventQueue.d.ts +1 -1
- package/dist/esm/src/{lib/queue → queue}/EventQueue.js +3 -3
- package/dist/{cjs/src/lib → esm/src}/queue/type.d.ts +1 -1
- package/dist/esm/src/session/index.d.ts +91 -0
- package/dist/esm/src/session/index.js +123 -0
- package/dist/esm/src/{lib/storage → storage}/built-in/blueprint.js +1 -1
- package/dist/esm/src/types/base.d.ts +27 -1
- package/dist/esm/src/validators/object.js +0 -2
- package/dist/esm/src/version.d.ts +1 -1
- package/dist/esm/src/version.js +1 -1
- package/dist/esm/src/wagmi/WagmiEventHandler.d.ts +69 -0
- package/dist/esm/src/wagmi/WagmiEventHandler.js +446 -0
- package/dist/esm/src/wagmi/index.d.ts +9 -0
- package/dist/esm/src/wagmi/index.js +8 -0
- package/dist/esm/src/wagmi/types.d.ts +115 -0
- package/dist/esm/src/wagmi/types.js +9 -0
- package/dist/index.umd.min.js +1 -1
- package/package.json +19 -4
- package/dist/cjs/src/lib/event/constants.d.ts +0 -4
- package/dist/cjs/src/lib/event/constants.js +0 -8
- package/dist/cjs/src/lib/index.d.ts +0 -7
- package/dist/cjs/src/lib/index.js +0 -28
- package/dist/esm/src/lib/event/constants.d.ts +0 -4
- package/dist/esm/src/lib/event/constants.js +0 -4
- package/dist/esm/src/lib/index.d.ts +0 -7
- package/dist/esm/src/lib/index.js +0 -7
- /package/dist/cjs/src/{lib/browser → browser}/browsers.d.ts +0 -0
- /package/dist/cjs/src/{lib/browser → browser}/browsers.js +0 -0
- /package/dist/cjs/src/{lib/event → event}/index.d.ts +0 -0
- /package/dist/cjs/src/{lib/event → event}/index.js +0 -0
- /package/dist/cjs/src/{lib/event → event}/type.js +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/Logger.d.ts +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/Logger.js +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/index.d.ts +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/index.js +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/type.d.ts +0 -0
- /package/dist/cjs/src/{lib/logger → logger}/type.js +0 -0
- /package/dist/cjs/src/{lib/queue → queue}/index.d.ts +0 -0
- /package/dist/cjs/src/{lib/queue → queue}/index.js +0 -0
- /package/dist/cjs/src/{lib/queue → queue}/type.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry1.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry1.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry2.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry2.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry3.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry3.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_has.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_has.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isObject.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isObject.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isPlaceholder.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isPlaceholder.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepRight.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepRight.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepWithKey.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepWithKey.js +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeWithKey.d.ts +0 -0
- /package/dist/cjs/src/{lib/ramda → ramda}/mergeWithKey.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/StorageManager.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/StorageManager.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/blueprint.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/cookie.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/cookie.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/memory.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/memory.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/web.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/built-in/web.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/constant.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/constant.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/index.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/index.js +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/type.d.ts +0 -0
- /package/dist/cjs/src/{lib/storage → storage}/type.js +0 -0
- /package/dist/esm/src/{lib/browser → browser}/browsers.d.ts +0 -0
- /package/dist/esm/src/{lib/browser → browser}/browsers.js +0 -0
- /package/dist/esm/src/{lib/event → event}/index.d.ts +0 -0
- /package/dist/esm/src/{lib/event → event}/index.js +0 -0
- /package/dist/esm/src/{lib/event → event}/type.js +0 -0
- /package/dist/esm/src/{lib/logger → logger}/Logger.d.ts +0 -0
- /package/dist/esm/src/{lib/logger → logger}/Logger.js +0 -0
- /package/dist/esm/src/{lib/logger → logger}/index.d.ts +0 -0
- /package/dist/esm/src/{lib/logger → logger}/index.js +0 -0
- /package/dist/esm/src/{lib/logger → logger}/type.d.ts +0 -0
- /package/dist/esm/src/{lib/logger → logger}/type.js +0 -0
- /package/dist/esm/src/{lib/queue → queue}/index.d.ts +0 -0
- /package/dist/esm/src/{lib/queue → queue}/index.js +0 -0
- /package/dist/esm/src/{lib/queue → queue}/type.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry1.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry1.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry2.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry2.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry3.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry3.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_has.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_has.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_isObject.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_isObject.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_isPlaceholder.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/internal/_isPlaceholder.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepRight.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepRight.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepWithKey.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepWithKey.js +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeWithKey.d.ts +0 -0
- /package/dist/esm/src/{lib/ramda → ramda}/mergeWithKey.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/StorageManager.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/StorageManager.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/blueprint.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/cookie.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/cookie.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/memory.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/memory.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/web.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/built-in/web.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/constant.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/constant.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/index.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/index.js +0 -0
- /package/dist/esm/src/{lib/storage → storage}/type.d.ts +0 -0
- /package/dist/esm/src/{lib/storage → storage}/type.js +0 -0
|
@@ -59,12 +59,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
59
59
|
exports.FormoAnalytics = void 0;
|
|
60
60
|
var mipd_1 = require("mipd");
|
|
61
61
|
var constants_1 = require("./constants");
|
|
62
|
-
var
|
|
62
|
+
var storage_1 = require("./storage");
|
|
63
|
+
var event_1 = require("./event");
|
|
64
|
+
var queue_1 = require("./queue");
|
|
65
|
+
var logger_1 = require("./logger");
|
|
66
|
+
var consent_1 = require("./consent");
|
|
67
|
+
var provider_1 = require("./provider");
|
|
68
|
+
var session_1 = require("./session");
|
|
63
69
|
var types_1 = require("./types");
|
|
64
70
|
var utils_1 = require("./utils");
|
|
65
71
|
var address_1 = require("./utils/address");
|
|
66
72
|
var validators_1 = require("./validators");
|
|
67
73
|
var chain_1 = require("./utils/chain");
|
|
74
|
+
var wagmi_1 = require("./wagmi");
|
|
68
75
|
/**
|
|
69
76
|
* Constants for provider switching reasons
|
|
70
77
|
*/
|
|
@@ -98,14 +105,21 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
98
105
|
this._processingAccountsChanged = false;
|
|
99
106
|
// Set to efficiently track seen providers for deduplication and O(1) lookup
|
|
100
107
|
this._seenProviders = new Set();
|
|
108
|
+
/**
|
|
109
|
+
* Flag indicating if Wagmi mode is enabled
|
|
110
|
+
* When true, EIP-1193 provider wrapping is skipped
|
|
111
|
+
*/
|
|
112
|
+
this.isWagmiMode = false;
|
|
101
113
|
this.currentUserId = "";
|
|
102
114
|
this.config = {
|
|
103
115
|
writeKey: writeKey,
|
|
104
116
|
};
|
|
105
117
|
this.options = options;
|
|
106
|
-
|
|
118
|
+
// Check if Wagmi mode is enabled
|
|
119
|
+
this.isWagmiMode = !!options.wagmi;
|
|
120
|
+
this.session = new session_1.FormoAnalyticsSession();
|
|
107
121
|
this.currentUserId =
|
|
108
|
-
(0,
|
|
122
|
+
(0, storage_1.cookie)().get(constants_1.SESSION_USER_ID_KEY) || undefined;
|
|
109
123
|
this.identify = this.identify.bind(this);
|
|
110
124
|
this.connect = this.connect.bind(this);
|
|
111
125
|
this.disconnect = this.disconnect.bind(this);
|
|
@@ -116,11 +130,11 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
116
130
|
this.track = this.track.bind(this);
|
|
117
131
|
this.isAutocaptureEnabled = this.isAutocaptureEnabled.bind(this);
|
|
118
132
|
// Initialize logger with configuration from options
|
|
119
|
-
|
|
133
|
+
logger_1.Logger.init({
|
|
120
134
|
enabled: ((_a = options.logger) === null || _a === void 0 ? void 0 : _a.enabled) || false,
|
|
121
135
|
enabledLevels: ((_b = options.logger) === null || _b === void 0 ? void 0 : _b.levels) || [],
|
|
122
136
|
});
|
|
123
|
-
this.eventManager = new
|
|
137
|
+
this.eventManager = new event_1.EventManager(new queue_1.EventQueue(this.config.writeKey, {
|
|
124
138
|
apiHost: options.apiHost || constants_1.EVENTS_API_HOST,
|
|
125
139
|
flushAt: options.flushAt,
|
|
126
140
|
retryCount: options.retryCount,
|
|
@@ -129,19 +143,26 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
129
143
|
}), options);
|
|
130
144
|
// Check consent status on initialization
|
|
131
145
|
if (this.hasOptedOutTracking()) {
|
|
132
|
-
|
|
146
|
+
logger_1.logger.info("User has previously opted out of tracking");
|
|
133
147
|
}
|
|
134
|
-
//
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
provider = optProvider;
|
|
148
|
+
// Initialize Wagmi handler if Wagmi mode is enabled
|
|
149
|
+
if (this.isWagmiMode && options.wagmi) {
|
|
150
|
+
logger_1.logger.info("FormoAnalytics: Initializing in Wagmi mode");
|
|
151
|
+
this.wagmiHandler = new wagmi_1.WagmiEventHandler(this, options.wagmi.config, options.wagmi.queryClient);
|
|
139
152
|
}
|
|
140
|
-
else
|
|
141
|
-
provider
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
153
|
+
else {
|
|
154
|
+
// Handle initial provider (injected) as fallback; listeners for EIP-6963 are added later
|
|
155
|
+
var provider = undefined;
|
|
156
|
+
var optProvider = options.provider;
|
|
157
|
+
if (optProvider) {
|
|
158
|
+
provider = optProvider;
|
|
159
|
+
}
|
|
160
|
+
else if (typeof window !== "undefined" && window.ethereum) {
|
|
161
|
+
provider = window.ethereum;
|
|
162
|
+
}
|
|
163
|
+
if (provider) {
|
|
164
|
+
this.trackEIP1193Provider(provider);
|
|
165
|
+
}
|
|
145
166
|
}
|
|
146
167
|
this.trackPageHit();
|
|
147
168
|
this.trackPageHits();
|
|
@@ -156,26 +177,15 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
156
177
|
// This allows legitimate provider switching while preventing race conditions
|
|
157
178
|
return this._provider != null && this._provider !== provider;
|
|
158
179
|
};
|
|
159
|
-
/**
|
|
160
|
-
* Check if a provider is in a valid state for switching
|
|
161
|
-
* @param provider The provider to validate
|
|
162
|
-
* @returns true if the provider is in a valid state
|
|
163
|
-
*/
|
|
164
|
-
FormoAnalytics.prototype.isProviderInValidState = function (provider) {
|
|
165
|
-
// Basic validation: ensure provider exists and has required methods
|
|
166
|
-
return (provider &&
|
|
167
|
-
typeof provider.request === "function" &&
|
|
168
|
-
typeof provider.on === "function" &&
|
|
169
|
-
typeof provider.removeListener === "function");
|
|
170
|
-
};
|
|
171
180
|
FormoAnalytics.init = function (writeKey, options) {
|
|
172
181
|
return __awaiter(this, void 0, void 0, function () {
|
|
173
182
|
var analytics, _a;
|
|
174
183
|
return __generator(this, function (_b) {
|
|
175
184
|
switch (_b.label) {
|
|
176
185
|
case 0:
|
|
177
|
-
(0,
|
|
186
|
+
(0, storage_1.initStorageManager)(writeKey);
|
|
178
187
|
analytics = new FormoAnalytics(writeKey, options);
|
|
188
|
+
if (!!analytics.isWagmiMode) return [3 /*break*/, 3];
|
|
179
189
|
// Auto-detect wallet provider
|
|
180
190
|
_a = analytics;
|
|
181
191
|
return [4 /*yield*/, analytics.getProviders()];
|
|
@@ -186,7 +196,11 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
186
196
|
case 2:
|
|
187
197
|
_b.sent();
|
|
188
198
|
analytics.trackProviders(analytics._providers);
|
|
189
|
-
return [
|
|
199
|
+
return [3 /*break*/, 4];
|
|
200
|
+
case 3:
|
|
201
|
+
logger_1.logger.info("FormoAnalytics: Skipping provider detection (Wagmi mode)");
|
|
202
|
+
_b.label = 4;
|
|
203
|
+
case 4: return [2 /*return*/, analytics];
|
|
190
204
|
}
|
|
191
205
|
});
|
|
192
206
|
});
|
|
@@ -221,10 +235,31 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
221
235
|
*/
|
|
222
236
|
FormoAnalytics.prototype.reset = function () {
|
|
223
237
|
this.currentUserId = undefined;
|
|
224
|
-
(0,
|
|
225
|
-
(0,
|
|
226
|
-
(0,
|
|
227
|
-
(0,
|
|
238
|
+
(0, storage_1.cookie)().remove(constants_1.LOCAL_ANONYMOUS_ID_KEY);
|
|
239
|
+
(0, storage_1.cookie)().remove(constants_1.SESSION_USER_ID_KEY);
|
|
240
|
+
(0, storage_1.cookie)().remove(session_1.SESSION_WALLET_DETECTED_KEY);
|
|
241
|
+
(0, storage_1.cookie)().remove(session_1.SESSION_WALLET_IDENTIFIED_KEY);
|
|
242
|
+
};
|
|
243
|
+
/**
|
|
244
|
+
* Clean up resources and event listeners
|
|
245
|
+
* Call this when destroying the analytics instance
|
|
246
|
+
* @returns {void}
|
|
247
|
+
*/
|
|
248
|
+
FormoAnalytics.prototype.cleanup = function () {
|
|
249
|
+
logger_1.logger.info("FormoAnalytics: Cleaning up resources");
|
|
250
|
+
// Clean up Wagmi handler if present
|
|
251
|
+
if (this.wagmiHandler) {
|
|
252
|
+
this.wagmiHandler.cleanup();
|
|
253
|
+
this.wagmiHandler = undefined;
|
|
254
|
+
}
|
|
255
|
+
// Clean up EIP-1193 providers if not in Wagmi mode
|
|
256
|
+
if (!this.isWagmiMode) {
|
|
257
|
+
for (var _i = 0, _a = Array.from(this._trackedProviders); _i < _a.length; _i++) {
|
|
258
|
+
var provider = _a[_i];
|
|
259
|
+
this.untrackProvider(provider);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
logger_1.logger.info("FormoAnalytics: Cleanup complete");
|
|
228
263
|
};
|
|
229
264
|
/**
|
|
230
265
|
* Emits a connect wallet event.
|
|
@@ -243,17 +278,17 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
243
278
|
switch (_c.label) {
|
|
244
279
|
case 0:
|
|
245
280
|
if (chainId === null || chainId === undefined) {
|
|
246
|
-
|
|
281
|
+
logger_1.logger.warn("Connect: Chain ID cannot be null or undefined");
|
|
247
282
|
return [2 /*return*/];
|
|
248
283
|
}
|
|
249
284
|
if (!address) {
|
|
250
|
-
|
|
285
|
+
logger_1.logger.warn("Connect: Address cannot be empty");
|
|
251
286
|
return [2 /*return*/];
|
|
252
287
|
}
|
|
253
288
|
this.currentChainId = chainId;
|
|
254
289
|
checksummedAddress = this.validateAndChecksumAddress(address);
|
|
255
290
|
if (!checksummedAddress) {
|
|
256
|
-
|
|
291
|
+
logger_1.logger.warn("Connect: Invalid address provided (\"".concat(address, "\"). Please provide a valid Ethereum address in checksum format."));
|
|
257
292
|
return [2 /*return*/];
|
|
258
293
|
}
|
|
259
294
|
this.currentAddress = checksummedAddress;
|
|
@@ -288,7 +323,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
288
323
|
providerInfo = this._provider
|
|
289
324
|
? this.getProviderInfo(this._provider)
|
|
290
325
|
: null;
|
|
291
|
-
|
|
326
|
+
logger_1.logger.info("Disconnect: Emitting disconnect event with:", {
|
|
292
327
|
chainId: chainId,
|
|
293
328
|
address: address,
|
|
294
329
|
providerName: providerInfo === null || providerInfo === void 0 ? void 0 : providerInfo.name,
|
|
@@ -304,7 +339,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
304
339
|
this.currentAddress = undefined;
|
|
305
340
|
this.currentChainId = undefined;
|
|
306
341
|
this.clearActiveProvider();
|
|
307
|
-
|
|
342
|
+
logger_1.logger.info("Wallet disconnected: Cleared currentAddress, currentChainId, and provider");
|
|
308
343
|
return [2 /*return*/];
|
|
309
344
|
}
|
|
310
345
|
});
|
|
@@ -326,15 +361,15 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
326
361
|
switch (_c.label) {
|
|
327
362
|
case 0:
|
|
328
363
|
if (!chainId || Number(chainId) === 0) {
|
|
329
|
-
|
|
364
|
+
logger_1.logger.warn("FormoAnalytics::chain: chainId cannot be empty or 0");
|
|
330
365
|
return [2 /*return*/];
|
|
331
366
|
}
|
|
332
367
|
if (isNaN(Number(chainId))) {
|
|
333
|
-
|
|
368
|
+
logger_1.logger.warn("FormoAnalytics::chain: chainId must be a valid decimal number");
|
|
334
369
|
return [2 /*return*/];
|
|
335
370
|
}
|
|
336
371
|
if (!address && !this.currentAddress) {
|
|
337
|
-
|
|
372
|
+
logger_1.logger.warn("FormoAnalytics::chain: address was empty and no previous address has been recorded");
|
|
338
373
|
return [2 /*return*/];
|
|
339
374
|
}
|
|
340
375
|
this.currentChainId = chainId;
|
|
@@ -422,7 +457,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
422
457
|
_c.trys.push([0, 12, , 13]);
|
|
423
458
|
if (!!params) return [3 /*break*/, 10];
|
|
424
459
|
// If no params provided, auto-identify
|
|
425
|
-
|
|
460
|
+
logger_1.logger.info("Auto-identifying with providers:", this._providers.map(function (p) { return p.info.name; }));
|
|
426
461
|
_i = 0, _a = this._providers;
|
|
427
462
|
_c.label = 1;
|
|
428
463
|
case 1:
|
|
@@ -439,7 +474,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
439
474
|
address_2 = _c.sent();
|
|
440
475
|
if (!address_2) return [3 /*break*/, 6];
|
|
441
476
|
validAddress_1 = this.validateAndChecksumAddress(address_2);
|
|
442
|
-
|
|
477
|
+
logger_1.logger.info("Auto-identify: Checking deduplication", {
|
|
443
478
|
validAddress: validAddress_1,
|
|
444
479
|
rdns: providerDetail.info.rdns,
|
|
445
480
|
providerName: providerDetail.info.name,
|
|
@@ -449,7 +484,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
449
484
|
});
|
|
450
485
|
if (!(validAddress_1 &&
|
|
451
486
|
!this.session.isWalletIdentified(validAddress_1, providerDetail.info.rdns))) return [3 /*break*/, 5];
|
|
452
|
-
|
|
487
|
+
logger_1.logger.info("Auto-identifying", validAddress_1, providerDetail.info.name, providerDetail.info.rdns);
|
|
453
488
|
// NOTE: do not set this.currentAddress without explicit connect or identify
|
|
454
489
|
return [4 /*yield*/, this.identify({
|
|
455
490
|
address: validAddress_1,
|
|
@@ -462,13 +497,13 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
462
497
|
return [3 /*break*/, 6];
|
|
463
498
|
case 5:
|
|
464
499
|
if (validAddress_1) {
|
|
465
|
-
|
|
500
|
+
logger_1.logger.info("Auto-identify: Skipping already identified wallet", validAddress_1, providerDetail.info.name, providerDetail.info.rdns);
|
|
466
501
|
}
|
|
467
502
|
_c.label = 6;
|
|
468
503
|
case 6: return [3 /*break*/, 8];
|
|
469
504
|
case 7:
|
|
470
505
|
err_1 = _c.sent();
|
|
471
|
-
|
|
506
|
+
logger_1.logger.error("Failed to identify provider ".concat(providerDetail.info.name, ":"), err_1);
|
|
472
507
|
return [3 /*break*/, 8];
|
|
473
508
|
case 8:
|
|
474
509
|
_i++;
|
|
@@ -476,13 +511,13 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
476
511
|
case 9: return [2 /*return*/];
|
|
477
512
|
case 10:
|
|
478
513
|
userId = params.userId, address = params.address, providerName = params.providerName, rdns = params.rdns;
|
|
479
|
-
|
|
514
|
+
logger_1.logger.info("Identify", address, userId, providerName, rdns);
|
|
480
515
|
validAddress = undefined;
|
|
481
516
|
if (address) {
|
|
482
517
|
validAddress = this.validateAndChecksumAddress(address);
|
|
483
518
|
this.currentAddress = validAddress || undefined;
|
|
484
519
|
if (!validAddress) {
|
|
485
|
-
(_b =
|
|
520
|
+
(_b = logger_1.logger.warn) === null || _b === void 0 ? void 0 : _b.call(logger_1.logger, "Invalid address provided to identify:", address);
|
|
486
521
|
}
|
|
487
522
|
}
|
|
488
523
|
else {
|
|
@@ -490,12 +525,12 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
490
525
|
}
|
|
491
526
|
if (userId) {
|
|
492
527
|
this.currentUserId = userId;
|
|
493
|
-
(0,
|
|
528
|
+
(0, storage_1.cookie)().set(constants_1.SESSION_USER_ID_KEY, userId);
|
|
494
529
|
}
|
|
495
530
|
isAlreadyIdentified = validAddress
|
|
496
531
|
? this.session.isWalletIdentified(validAddress, rdns || "")
|
|
497
532
|
: false;
|
|
498
|
-
|
|
533
|
+
logger_1.logger.debug("Identify: Checking deduplication", {
|
|
499
534
|
validAddress: validAddress,
|
|
500
535
|
rdns: rdns,
|
|
501
536
|
providerName: providerName,
|
|
@@ -504,7 +539,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
504
539
|
isAlreadyIdentified: isAlreadyIdentified,
|
|
505
540
|
});
|
|
506
541
|
if (isAlreadyIdentified) {
|
|
507
|
-
|
|
542
|
+
logger_1.logger.info("Identify: Wallet ".concat(providerName || "Unknown", " with address ").concat(validAddress, " already identified in this session (rdns: ").concat(rdns || "empty", ")"));
|
|
508
543
|
return [2 /*return*/];
|
|
509
544
|
}
|
|
510
545
|
// Mark as identified before emitting the event
|
|
@@ -523,7 +558,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
523
558
|
return [3 /*break*/, 13];
|
|
524
559
|
case 12:
|
|
525
560
|
e_1 = _c.sent();
|
|
526
|
-
|
|
561
|
+
logger_1.logger.log("identify error", e_1);
|
|
527
562
|
return [3 /*break*/, 13];
|
|
528
563
|
case 13: return [2 /*return*/];
|
|
529
564
|
}
|
|
@@ -546,7 +581,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
546
581
|
switch (_c.label) {
|
|
547
582
|
case 0:
|
|
548
583
|
if (this.session.isWalletDetected(rdns))
|
|
549
|
-
return [2 /*return*/,
|
|
584
|
+
return [2 /*return*/, logger_1.logger.warn("Detect: Wallet ".concat(providerName, " already detected in this session"))];
|
|
550
585
|
this.session.markWalletDetected(rdns);
|
|
551
586
|
return [4 /*yield*/, this.trackEvent(constants_1.EventType.DETECT, {
|
|
552
587
|
providerName: providerName,
|
|
@@ -587,12 +622,12 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
587
622
|
* @returns {void}
|
|
588
623
|
*/
|
|
589
624
|
FormoAnalytics.prototype.optOutTracking = function () {
|
|
590
|
-
|
|
625
|
+
logger_1.logger.info("Opting out of tracking");
|
|
591
626
|
// Set opt-out flag in persistent storage using direct cookie access
|
|
592
627
|
// This must be done before switching storage to ensure persistence
|
|
593
|
-
(0,
|
|
628
|
+
(0, consent_1.setConsentFlag)(this.writeKey, constants_1.CONSENT_OPT_OUT_KEY, "true");
|
|
594
629
|
this.reset();
|
|
595
|
-
|
|
630
|
+
logger_1.logger.info("Successfully opted out of tracking");
|
|
596
631
|
};
|
|
597
632
|
/**
|
|
598
633
|
* Opt back into tracking after previously opting out. This will re-enable analytics tracking
|
|
@@ -600,28 +635,44 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
600
635
|
* @returns {void}
|
|
601
636
|
*/
|
|
602
637
|
FormoAnalytics.prototype.optInTracking = function () {
|
|
603
|
-
|
|
638
|
+
logger_1.logger.info("Opting back into tracking");
|
|
604
639
|
// Remove opt-out flag
|
|
605
|
-
(0,
|
|
606
|
-
|
|
640
|
+
(0, consent_1.removeConsentFlag)(this.writeKey, constants_1.CONSENT_OPT_OUT_KEY);
|
|
641
|
+
logger_1.logger.info("Successfully opted back into tracking");
|
|
607
642
|
};
|
|
608
643
|
/**
|
|
609
644
|
* Check if the user has opted out of tracking.
|
|
610
645
|
* @returns {boolean} True if the user has opted out
|
|
611
646
|
*/
|
|
612
647
|
FormoAnalytics.prototype.hasOptedOutTracking = function () {
|
|
613
|
-
return (0,
|
|
648
|
+
return (0, consent_1.getConsentFlag)(this.writeKey, constants_1.CONSENT_OPT_OUT_KEY) === "true";
|
|
614
649
|
};
|
|
615
650
|
/*
|
|
616
651
|
SDK tracking and event listener functions
|
|
617
652
|
*/
|
|
618
|
-
|
|
619
|
-
|
|
653
|
+
/**
|
|
654
|
+
* Track an EIP-1193 provider by wrapping its request method and adding event listeners
|
|
655
|
+
* Note: This is only used in non-Wagmi mode. When Wagmi is enabled, all tracking
|
|
656
|
+
* happens through Wagmi's connector system instead of EIP-1193/EIP-6963.
|
|
657
|
+
* @param provider The EIP-1193 provider to track
|
|
658
|
+
*/
|
|
659
|
+
FormoAnalytics.prototype.trackEIP1193Provider = function (provider) {
|
|
660
|
+
logger_1.logger.info("trackEIP1193Provider", provider);
|
|
661
|
+
// Defensive check: Skip provider tracking in Wagmi mode
|
|
662
|
+
// This should never be called in Wagmi mode due to guards in init(),
|
|
663
|
+
// but we check here for safety in case of future code changes
|
|
664
|
+
if (this.isWagmiMode) {
|
|
665
|
+
logger_1.logger.debug("trackEIP1193Provider: Skipping EIP-1193 provider tracking (Wagmi mode - using connector system instead)");
|
|
666
|
+
return;
|
|
667
|
+
}
|
|
620
668
|
try {
|
|
621
|
-
|
|
669
|
+
// Validate provider exists and has required methods
|
|
670
|
+
if (!(0, provider_1.isValidProvider)(provider)) {
|
|
671
|
+
logger_1.logger.warn("trackEIP1193Provider: Invalid provider - missing required methods");
|
|
622
672
|
return;
|
|
673
|
+
}
|
|
623
674
|
if (this._trackedProviders.has(provider)) {
|
|
624
|
-
|
|
675
|
+
logger_1.logger.warn("trackEIP1193Provider: Provider already tracked");
|
|
625
676
|
return;
|
|
626
677
|
}
|
|
627
678
|
// CRITICAL: Always register accountsChanged for state management
|
|
@@ -639,7 +690,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
639
690
|
this.registerRequestListeners(provider);
|
|
640
691
|
}
|
|
641
692
|
else {
|
|
642
|
-
|
|
693
|
+
logger_1.logger.debug("TrackProvider: Skipping request wrapping (both signature and transaction autocapture disabled)");
|
|
643
694
|
}
|
|
644
695
|
if (this.isAutocaptureEnabled("disconnect")) {
|
|
645
696
|
this.registerDisconnectListener(provider);
|
|
@@ -648,7 +699,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
648
699
|
this._trackedProviders.add(provider);
|
|
649
700
|
}
|
|
650
701
|
catch (error) {
|
|
651
|
-
|
|
702
|
+
logger_1.logger.error("Error tracking provider:", error);
|
|
652
703
|
}
|
|
653
704
|
};
|
|
654
705
|
FormoAnalytics.prototype.trackProviders = function (providers) {
|
|
@@ -657,12 +708,12 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
657
708
|
var eip6963ProviderDetail = providers_1[_i];
|
|
658
709
|
var provider = eip6963ProviderDetail === null || eip6963ProviderDetail === void 0 ? void 0 : eip6963ProviderDetail.provider;
|
|
659
710
|
if (provider && !this._trackedProviders.has(provider)) {
|
|
660
|
-
this.
|
|
711
|
+
this.trackEIP1193Provider(provider);
|
|
661
712
|
}
|
|
662
713
|
}
|
|
663
714
|
}
|
|
664
715
|
catch (error) {
|
|
665
|
-
|
|
716
|
+
logger_1.logger.error("Failed to track EIP-6963 providers during initialization:", error);
|
|
666
717
|
}
|
|
667
718
|
};
|
|
668
719
|
FormoAnalytics.prototype.addProviderListener = function (provider, event, listener) {
|
|
@@ -672,7 +723,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
672
723
|
};
|
|
673
724
|
FormoAnalytics.prototype.registerAccountsChangedListener = function (provider) {
|
|
674
725
|
var _this = this;
|
|
675
|
-
|
|
726
|
+
logger_1.logger.info("registerAccountsChangedListener");
|
|
676
727
|
var listener = function () {
|
|
677
728
|
var args = [];
|
|
678
729
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
@@ -688,10 +739,10 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
688
739
|
return __generator(this, function (_a) {
|
|
689
740
|
switch (_a.label) {
|
|
690
741
|
case 0:
|
|
691
|
-
|
|
742
|
+
logger_1.logger.info("onAccountsChanged", accounts);
|
|
692
743
|
// Prevent concurrent processing of accountsChanged events to avoid race conditions
|
|
693
744
|
if (this._processingAccountsChanged) {
|
|
694
|
-
|
|
745
|
+
logger_1.logger.debug("OnAccountsChanged: Already processing accountsChanged, skipping", {
|
|
695
746
|
provider: this.getProviderInfo(provider).name,
|
|
696
747
|
});
|
|
697
748
|
return [2 /*return*/];
|
|
@@ -730,7 +781,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
730
781
|
case 0:
|
|
731
782
|
if (!(accounts.length === 0)) return [3 /*break*/, 9];
|
|
732
783
|
if (!(this._provider === provider)) return [3 /*break*/, 7];
|
|
733
|
-
|
|
784
|
+
logger_1.logger.info("OnAccountsChanged: Detecting disconnect, current state:", {
|
|
734
785
|
currentAddress: this.currentAddress,
|
|
735
786
|
currentChainId: this.currentChainId,
|
|
736
787
|
providerMatch: this._provider === provider,
|
|
@@ -750,11 +801,11 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
750
801
|
return [3 /*break*/, 4];
|
|
751
802
|
case 3:
|
|
752
803
|
error_1 = _a.sent();
|
|
753
|
-
|
|
804
|
+
logger_1.logger.error("Failed to disconnect provider on accountsChanged", error_1);
|
|
754
805
|
return [3 /*break*/, 4];
|
|
755
806
|
case 4: return [3 /*break*/, 6];
|
|
756
807
|
case 5:
|
|
757
|
-
|
|
808
|
+
logger_1.logger.debug("OnAccountsChanged: Disconnect event skipped (autocapture.disconnect: false)");
|
|
758
809
|
// Still clear state even if not tracking the event
|
|
759
810
|
this.currentAddress = undefined;
|
|
760
811
|
this.currentChainId = undefined;
|
|
@@ -762,19 +813,19 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
762
813
|
_a.label = 6;
|
|
763
814
|
case 6: return [3 /*break*/, 8];
|
|
764
815
|
case 7:
|
|
765
|
-
|
|
816
|
+
logger_1.logger.info("OnAccountsChanged: Ignoring disconnect for non-active provider");
|
|
766
817
|
_a.label = 8;
|
|
767
818
|
case 8: return [2 /*return*/];
|
|
768
819
|
case 9:
|
|
769
820
|
address = this.validateAndChecksumAddress(accounts[0]);
|
|
770
821
|
if (!address) {
|
|
771
|
-
|
|
822
|
+
logger_1.logger.warn("onAccountsChanged: Invalid address received", accounts[0]);
|
|
772
823
|
return [2 /*return*/];
|
|
773
824
|
}
|
|
774
825
|
if (!(this._provider && this._provider !== provider)) return [3 /*break*/, 26];
|
|
775
826
|
currentStoredAddress = this.currentAddress;
|
|
776
827
|
newProviderAddress = this.validateAndChecksumAddress(address);
|
|
777
|
-
|
|
828
|
+
logger_1.logger.info("OnAccountsChanged: Different provider attempting to connect", {
|
|
778
829
|
activeProvider: this.getProviderInfo(this._provider).name,
|
|
779
830
|
eventProvider: this.getProviderInfo(provider).name,
|
|
780
831
|
currentStoredAddress: currentStoredAddress,
|
|
@@ -786,7 +837,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
786
837
|
return [4 /*yield*/, this.getAccounts(this._provider)];
|
|
787
838
|
case 11:
|
|
788
839
|
activeProviderAccounts = _a.sent();
|
|
789
|
-
|
|
840
|
+
logger_1.logger.info("OnAccountsChanged: Checking current provider accounts", {
|
|
790
841
|
activeProvider: this.getProviderInfo(this._provider).name,
|
|
791
842
|
accountsLength: activeProviderAccounts
|
|
792
843
|
? activeProviderAccounts.length
|
|
@@ -797,7 +848,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
797
848
|
if (!(newProviderAddress &&
|
|
798
849
|
currentStoredAddress &&
|
|
799
850
|
newProviderAddress !== currentStoredAddress)) return [3 /*break*/, 15];
|
|
800
|
-
|
|
851
|
+
logger_1.logger.info("OnAccountsChanged: Different address detected, switching providers despite current provider having accounts", {
|
|
801
852
|
activeProvider: this.getProviderInfo(this._provider).name,
|
|
802
853
|
eventProvider: this.getProviderInfo(provider).name,
|
|
803
854
|
currentAddress: currentStoredAddress,
|
|
@@ -813,7 +864,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
813
864
|
_a.sent();
|
|
814
865
|
return [3 /*break*/, 14];
|
|
815
866
|
case 13:
|
|
816
|
-
|
|
867
|
+
logger_1.logger.debug("OnAccountsChanged: Disconnect event skipped during provider switch (autocapture.disconnect: false)");
|
|
817
868
|
// Still clear state even if not tracking the event
|
|
818
869
|
this.currentAddress = undefined;
|
|
819
870
|
this.currentChainId = undefined;
|
|
@@ -823,7 +874,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
823
874
|
this.clearActiveProvider();
|
|
824
875
|
return [3 /*break*/, 16];
|
|
825
876
|
case 15:
|
|
826
|
-
|
|
877
|
+
logger_1.logger.info("OnAccountsChanged: Current provider still has accounts and same address, ignoring new provider", {
|
|
827
878
|
activeProvider: this.getProviderInfo(this._provider).name,
|
|
828
879
|
eventProvider: this.getProviderInfo(provider).name,
|
|
829
880
|
activeProviderAccountsCount: activeProviderAccounts.length,
|
|
@@ -833,7 +884,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
833
884
|
return [2 /*return*/];
|
|
834
885
|
case 16: return [3 /*break*/, 21];
|
|
835
886
|
case 17:
|
|
836
|
-
|
|
887
|
+
logger_1.logger.info("OnAccountsChanged: Current provider has no accounts, switching to new provider", {
|
|
837
888
|
oldProvider: this.getProviderInfo(this._provider).name,
|
|
838
889
|
newProvider: this.getProviderInfo(provider).name,
|
|
839
890
|
reason: PROVIDER_SWITCH_REASONS.NO_ACCOUNTS,
|
|
@@ -847,7 +898,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
847
898
|
_a.sent();
|
|
848
899
|
return [3 /*break*/, 20];
|
|
849
900
|
case 19:
|
|
850
|
-
|
|
901
|
+
logger_1.logger.debug("OnAccountsChanged: Disconnect event skipped for old provider (autocapture.disconnect: false)");
|
|
851
902
|
// Still clear state even if not tracking the event
|
|
852
903
|
this.currentAddress = undefined;
|
|
853
904
|
this.currentChainId = undefined;
|
|
@@ -859,7 +910,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
859
910
|
case 21: return [3 /*break*/, 26];
|
|
860
911
|
case 22:
|
|
861
912
|
error_2 = _a.sent();
|
|
862
|
-
|
|
913
|
+
logger_1.logger.warn("OnAccountsChanged: Could not check current provider accounts, switching to new provider", {
|
|
863
914
|
error: error_2 instanceof Error ? error_2.message : String(error_2),
|
|
864
915
|
errorType: error_2 instanceof Error ? error_2.constructor.name : typeof error_2,
|
|
865
916
|
oldProvider: this._provider
|
|
@@ -877,7 +928,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
877
928
|
_a.sent();
|
|
878
929
|
return [3 /*break*/, 25];
|
|
879
930
|
case 24:
|
|
880
|
-
|
|
931
|
+
logger_1.logger.debug("OnAccountsChanged: Disconnect event skipped for failed provider check (autocapture.disconnect: false)");
|
|
881
932
|
// Still clear state even if not tracking the event
|
|
882
933
|
this.currentAddress = undefined;
|
|
883
934
|
this.currentChainId = undefined;
|
|
@@ -905,7 +956,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
905
956
|
providerInfo = this.getProviderInfo(provider);
|
|
906
957
|
effectiveChainId = nextChainId || 0;
|
|
907
958
|
if (this.isAutocaptureEnabled("connect")) {
|
|
908
|
-
|
|
959
|
+
logger_1.logger.info("OnAccountsChanged: Detected wallet connection, emitting connect event", {
|
|
909
960
|
chainId: nextChainId,
|
|
910
961
|
address: address,
|
|
911
962
|
wasDisconnected: wasDisconnected,
|
|
@@ -914,7 +965,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
914
965
|
hasChainId: !!nextChainId,
|
|
915
966
|
});
|
|
916
967
|
if (effectiveChainId === 0) {
|
|
917
|
-
|
|
968
|
+
logger_1.logger.info("OnAccountsChanged: Using fallback chainId 0 for connect event");
|
|
918
969
|
}
|
|
919
970
|
this.connect({
|
|
920
971
|
chainId: effectiveChainId,
|
|
@@ -923,11 +974,11 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
923
974
|
providerName: providerInfo.name,
|
|
924
975
|
rdns: providerInfo.rdns,
|
|
925
976
|
}).catch(function (error) {
|
|
926
|
-
|
|
977
|
+
logger_1.logger.error("Failed to track connect event during account change:", error);
|
|
927
978
|
});
|
|
928
979
|
}
|
|
929
980
|
else {
|
|
930
|
-
|
|
981
|
+
logger_1.logger.debug("OnAccountsChanged: Connect event skipped (autocapture.connect: false)", {
|
|
931
982
|
chainId: nextChainId,
|
|
932
983
|
address: address,
|
|
933
984
|
providerName: providerInfo.name,
|
|
@@ -940,7 +991,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
940
991
|
};
|
|
941
992
|
FormoAnalytics.prototype.registerChainChangedListener = function (provider) {
|
|
942
993
|
var _this = this;
|
|
943
|
-
|
|
994
|
+
logger_1.logger.info("registerChainChangedListener");
|
|
944
995
|
var listener = function () {
|
|
945
996
|
var args = [];
|
|
946
997
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
@@ -955,7 +1006,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
955
1006
|
return __awaiter(this, void 0, void 0, function () {
|
|
956
1007
|
var nextChainId;
|
|
957
1008
|
return __generator(this, function (_a) {
|
|
958
|
-
|
|
1009
|
+
logger_1.logger.info("onChainChanged", chainIdHex);
|
|
959
1010
|
nextChainId = (0, chain_1.parseChainId)(chainIdHex);
|
|
960
1011
|
// Only handle chain changes for the active provider (or if none is set yet)
|
|
961
1012
|
if (this.isProviderMismatch(provider)) {
|
|
@@ -963,7 +1014,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
963
1014
|
}
|
|
964
1015
|
// Chain changes only matter for connected users
|
|
965
1016
|
if (!this.currentAddress) {
|
|
966
|
-
|
|
1017
|
+
logger_1.logger.info("OnChainChanged: No current address, user appears disconnected");
|
|
967
1018
|
return [2 /*return*/, Promise.resolve()];
|
|
968
1019
|
}
|
|
969
1020
|
// Set provider if none exists
|
|
@@ -980,14 +1031,14 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
980
1031
|
})];
|
|
981
1032
|
}
|
|
982
1033
|
else {
|
|
983
|
-
|
|
1034
|
+
logger_1.logger.debug("OnChainChanged: Chain event skipped (autocapture.chain: false)", {
|
|
984
1035
|
chainId: this.currentChainId,
|
|
985
1036
|
address: this.currentAddress,
|
|
986
1037
|
});
|
|
987
1038
|
}
|
|
988
1039
|
}
|
|
989
1040
|
catch (error) {
|
|
990
|
-
|
|
1041
|
+
logger_1.logger.error("OnChainChanged: Failed to emit chain event:", error);
|
|
991
1042
|
}
|
|
992
1043
|
return [2 /*return*/];
|
|
993
1044
|
});
|
|
@@ -995,7 +1046,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
995
1046
|
};
|
|
996
1047
|
FormoAnalytics.prototype.registerConnectListener = function (provider) {
|
|
997
1048
|
var _this = this;
|
|
998
|
-
|
|
1049
|
+
logger_1.logger.info("registerConnectListener");
|
|
999
1050
|
var listener = function () {
|
|
1000
1051
|
var args = [];
|
|
1001
1052
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
@@ -1009,7 +1060,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1009
1060
|
};
|
|
1010
1061
|
FormoAnalytics.prototype.registerDisconnectListener = function (provider) {
|
|
1011
1062
|
var _this = this;
|
|
1012
|
-
|
|
1063
|
+
logger_1.logger.info("registerDisconnectListener");
|
|
1013
1064
|
var listener = function (_error) { return __awaiter(_this, void 0, void 0, function () {
|
|
1014
1065
|
var e_2;
|
|
1015
1066
|
return __generator(this, function (_a) {
|
|
@@ -1017,7 +1068,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1017
1068
|
case 0:
|
|
1018
1069
|
if (this._provider !== provider)
|
|
1019
1070
|
return [2 /*return*/];
|
|
1020
|
-
|
|
1071
|
+
logger_1.logger.info("OnDisconnect: Wallet disconnect event received, current state:", {
|
|
1021
1072
|
currentAddress: this.currentAddress,
|
|
1022
1073
|
currentChainId: this.currentChainId,
|
|
1023
1074
|
});
|
|
@@ -1036,11 +1087,11 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1036
1087
|
return [3 /*break*/, 4];
|
|
1037
1088
|
case 3:
|
|
1038
1089
|
e_2 = _a.sent();
|
|
1039
|
-
|
|
1090
|
+
logger_1.logger.error("Error during disconnect in disconnect listener", e_2);
|
|
1040
1091
|
return [3 /*break*/, 4];
|
|
1041
1092
|
case 4: return [3 /*break*/, 6];
|
|
1042
1093
|
case 5:
|
|
1043
|
-
|
|
1094
|
+
logger_1.logger.debug("OnDisconnect: Disconnect event skipped (autocapture.disconnect: false)");
|
|
1044
1095
|
// Still clear state even if not tracking the event
|
|
1045
1096
|
this.currentAddress = undefined;
|
|
1046
1097
|
this.currentChainId = undefined;
|
|
@@ -1059,7 +1110,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1059
1110
|
return __generator(this, function (_a) {
|
|
1060
1111
|
switch (_a.label) {
|
|
1061
1112
|
case 0:
|
|
1062
|
-
|
|
1113
|
+
logger_1.logger.info("onConnected", connection);
|
|
1063
1114
|
_a.label = 1;
|
|
1064
1115
|
case 1:
|
|
1065
1116
|
_a.trys.push([1, 3, , 4]);
|
|
@@ -1088,7 +1139,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1088
1139
|
providerInfo = this.getProviderInfo(provider);
|
|
1089
1140
|
effectiveChainId = chainId || 0;
|
|
1090
1141
|
if (this.isAutocaptureEnabled("connect")) {
|
|
1091
|
-
|
|
1142
|
+
logger_1.logger.info("OnConnected: Detected wallet connection, emitting connect event", {
|
|
1092
1143
|
chainId: chainId,
|
|
1093
1144
|
wasDisconnected: wasDisconnected,
|
|
1094
1145
|
providerName: providerInfo.name,
|
|
@@ -1097,7 +1148,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1097
1148
|
isActiveProvider: isActiveProvider,
|
|
1098
1149
|
});
|
|
1099
1150
|
if (effectiveChainId === 0) {
|
|
1100
|
-
|
|
1151
|
+
logger_1.logger.info("OnConnected: Using fallback chainId 0 for connect event");
|
|
1101
1152
|
}
|
|
1102
1153
|
this.connect({
|
|
1103
1154
|
chainId: effectiveChainId,
|
|
@@ -1106,11 +1157,11 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1106
1157
|
providerName: providerInfo.name,
|
|
1107
1158
|
rdns: providerInfo.rdns,
|
|
1108
1159
|
}).catch(function (error) {
|
|
1109
|
-
|
|
1160
|
+
logger_1.logger.error("Failed to track connect event during provider connection:", error);
|
|
1110
1161
|
});
|
|
1111
1162
|
}
|
|
1112
1163
|
else {
|
|
1113
|
-
|
|
1164
|
+
logger_1.logger.debug("OnConnected: Connect event skipped (autocapture.connect: false)", {
|
|
1114
1165
|
chainId: chainId,
|
|
1115
1166
|
address: address,
|
|
1116
1167
|
providerName: providerInfo.name,
|
|
@@ -1119,7 +1170,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1119
1170
|
}
|
|
1120
1171
|
else if (address && !isActiveProvider) {
|
|
1121
1172
|
providerInfo = this.getProviderInfo(provider);
|
|
1122
|
-
|
|
1173
|
+
logger_1.logger.debug("OnConnected: Skipping connect event for non-active provider", {
|
|
1123
1174
|
chainId: chainId,
|
|
1124
1175
|
providerName: providerInfo.name,
|
|
1125
1176
|
rdns: providerInfo.rdns,
|
|
@@ -1133,7 +1184,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1133
1184
|
return [3 /*break*/, 4];
|
|
1134
1185
|
case 3:
|
|
1135
1186
|
e_3 = _a.sent();
|
|
1136
|
-
|
|
1187
|
+
logger_1.logger.error("Error handling connect event", e_3);
|
|
1137
1188
|
return [3 /*break*/, 4];
|
|
1138
1189
|
case 4: return [2 /*return*/];
|
|
1139
1190
|
}
|
|
@@ -1142,15 +1193,15 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1142
1193
|
};
|
|
1143
1194
|
FormoAnalytics.prototype.registerRequestListeners = function (provider) {
|
|
1144
1195
|
var _this = this;
|
|
1145
|
-
|
|
1196
|
+
logger_1.logger.info("registerRequestListeners");
|
|
1146
1197
|
if (!provider) {
|
|
1147
|
-
|
|
1198
|
+
logger_1.logger.error("Provider not found for request (signature, transaction) tracking");
|
|
1148
1199
|
return;
|
|
1149
1200
|
}
|
|
1150
1201
|
// Check if the provider is already wrapped with our SDK's wrapper
|
|
1151
1202
|
var currentRequest = provider.request;
|
|
1152
1203
|
if (this.isProviderAlreadyWrapped(provider, currentRequest)) {
|
|
1153
|
-
|
|
1204
|
+
logger_1.logger.info("Provider already wrapped with our SDK; skipping request wrapping.");
|
|
1154
1205
|
return;
|
|
1155
1206
|
}
|
|
1156
1207
|
var request = provider.request.bind(provider);
|
|
@@ -1164,7 +1215,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1164
1215
|
if (!(Array.isArray(params) &&
|
|
1165
1216
|
["eth_signTypedData_v4", "personal_sign"].includes(method))) return [3 /*break*/, 6];
|
|
1166
1217
|
if (!this.isAutocaptureEnabled("signature")) {
|
|
1167
|
-
|
|
1218
|
+
logger_1.logger.debug("Signature event skipped (autocapture.signature: false)", { method: method });
|
|
1168
1219
|
return [2 /*return*/, request({ method: method, params: params })];
|
|
1169
1220
|
}
|
|
1170
1221
|
_c = this.currentChainId;
|
|
@@ -1182,7 +1233,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1182
1233
|
this.signature(__assign({ status: types_1.SignatureStatus.REQUESTED }, this.buildSignatureEventPayload(method, params, undefined, capturedChainId_1)));
|
|
1183
1234
|
}
|
|
1184
1235
|
catch (e) {
|
|
1185
|
-
|
|
1236
|
+
logger_1.logger.error("Formo: Failed to track signature request", e);
|
|
1186
1237
|
}
|
|
1187
1238
|
return [2 /*return*/];
|
|
1188
1239
|
});
|
|
@@ -1201,7 +1252,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1201
1252
|
this.signature(__assign({ status: types_1.SignatureStatus.CONFIRMED }, this.buildSignatureEventPayload(method, params, response_1, capturedChainId_1)));
|
|
1202
1253
|
}
|
|
1203
1254
|
catch (e) {
|
|
1204
|
-
|
|
1255
|
+
logger_1.logger.error("Formo: Failed to track signature confirmation", e);
|
|
1205
1256
|
}
|
|
1206
1257
|
return [2 /*return*/];
|
|
1207
1258
|
});
|
|
@@ -1219,7 +1270,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1219
1270
|
this.signature(__assign({ status: types_1.SignatureStatus.REJECTED }, this.buildSignatureEventPayload(method, params, undefined, capturedChainId_1)));
|
|
1220
1271
|
}
|
|
1221
1272
|
catch (e) {
|
|
1222
|
-
|
|
1273
|
+
logger_1.logger.error("Formo: Failed to track signature rejection", e);
|
|
1223
1274
|
}
|
|
1224
1275
|
return [2 /*return*/];
|
|
1225
1276
|
});
|
|
@@ -1231,7 +1282,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1231
1282
|
method === "eth_sendTransaction" &&
|
|
1232
1283
|
params[0])) return [3 /*break*/, 10];
|
|
1233
1284
|
if (!this.isAutocaptureEnabled("transaction")) {
|
|
1234
|
-
|
|
1285
|
+
logger_1.logger.debug("Transaction event skipped (autocapture.transaction: false)", { method: method });
|
|
1235
1286
|
return [2 /*return*/, request({ method: method, params: params })];
|
|
1236
1287
|
}
|
|
1237
1288
|
(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
@@ -1247,7 +1298,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1247
1298
|
return [3 /*break*/, 3];
|
|
1248
1299
|
case 2:
|
|
1249
1300
|
e_4 = _a.sent();
|
|
1250
|
-
|
|
1301
|
+
logger_1.logger.error("Formo: Failed to track transaction start", e_4);
|
|
1251
1302
|
return [3 /*break*/, 3];
|
|
1252
1303
|
case 3: return [2 /*return*/];
|
|
1253
1304
|
}
|
|
@@ -1277,7 +1328,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1277
1328
|
return [3 /*break*/, 3];
|
|
1278
1329
|
case 2:
|
|
1279
1330
|
e_5 = _a.sent();
|
|
1280
|
-
|
|
1331
|
+
logger_1.logger.error("Formo: Failed to track transaction broadcast", e_5);
|
|
1281
1332
|
return [3 /*break*/, 3];
|
|
1282
1333
|
case 3: return [2 /*return*/];
|
|
1283
1334
|
}
|
|
@@ -1302,7 +1353,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1302
1353
|
return [3 /*break*/, 3];
|
|
1303
1354
|
case 2:
|
|
1304
1355
|
e_6 = _a.sent();
|
|
1305
|
-
|
|
1356
|
+
logger_1.logger.error("Formo: Failed to track transaction rejection", e_6);
|
|
1306
1357
|
return [3 /*break*/, 3];
|
|
1307
1358
|
case 3: return [2 /*return*/];
|
|
1308
1359
|
}
|
|
@@ -1323,16 +1374,16 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1323
1374
|
provider.request = wrappedRequest;
|
|
1324
1375
|
}
|
|
1325
1376
|
catch (e) {
|
|
1326
|
-
|
|
1377
|
+
logger_1.logger.warn("Failed to wrap provider.request; skipping", e);
|
|
1327
1378
|
}
|
|
1328
1379
|
};
|
|
1329
1380
|
FormoAnalytics.prototype.onLocationChange = function () {
|
|
1330
1381
|
return __awaiter(this, void 0, void 0, function () {
|
|
1331
1382
|
var currentUrl;
|
|
1332
1383
|
return __generator(this, function (_a) {
|
|
1333
|
-
currentUrl = (0,
|
|
1384
|
+
currentUrl = (0, storage_1.cookie)().get(constants_1.SESSION_CURRENT_URL_KEY);
|
|
1334
1385
|
if (currentUrl !== window.location.href) {
|
|
1335
|
-
(0,
|
|
1386
|
+
(0, storage_1.cookie)().set(constants_1.SESSION_CURRENT_URL_KEY, window.location.href);
|
|
1336
1387
|
this.trackPageHit();
|
|
1337
1388
|
}
|
|
1338
1389
|
return [2 /*return*/];
|
|
@@ -1375,7 +1426,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1375
1426
|
var _this = this;
|
|
1376
1427
|
return __generator(this, function (_a) {
|
|
1377
1428
|
if (!this.shouldTrack()) {
|
|
1378
|
-
|
|
1429
|
+
logger_1.logger.info("Track page hit: Skipping event due to tracking configuration");
|
|
1379
1430
|
return [2 /*return*/];
|
|
1380
1431
|
}
|
|
1381
1432
|
setTimeout(function () {
|
|
@@ -1394,7 +1445,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1394
1445
|
return [3 /*break*/, 3];
|
|
1395
1446
|
case 2:
|
|
1396
1447
|
e_7 = _a.sent();
|
|
1397
|
-
|
|
1448
|
+
logger_1.logger.error("Formo: Failed to track page hit", e_7);
|
|
1398
1449
|
return [3 /*break*/, 3];
|
|
1399
1450
|
case 3: return [2 /*return*/];
|
|
1400
1451
|
}
|
|
@@ -1413,7 +1464,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1413
1464
|
case 0:
|
|
1414
1465
|
_a.trys.push([0, 2, , 3]);
|
|
1415
1466
|
if (!this.shouldTrack()) {
|
|
1416
|
-
|
|
1467
|
+
logger_1.logger.info("Skipping ".concat(type, " event due to tracking configuration"));
|
|
1417
1468
|
return [2 /*return*/];
|
|
1418
1469
|
}
|
|
1419
1470
|
return [4 /*yield*/, this.eventManager.addEvent(__assign(__assign({ type: type }, payload), { properties: properties, context: context, callback: callback }), this.currentAddress, this.currentUserId)];
|
|
@@ -1422,7 +1473,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1422
1473
|
return [3 /*break*/, 3];
|
|
1423
1474
|
case 2:
|
|
1424
1475
|
error_5 = _a.sent();
|
|
1425
|
-
|
|
1476
|
+
logger_1.logger.error("Error tracking event:", error_5);
|
|
1426
1477
|
return [3 /*break*/, 3];
|
|
1427
1478
|
case 3: return [2 /*return*/];
|
|
1428
1479
|
}
|
|
@@ -1515,60 +1566,12 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1515
1566
|
};
|
|
1516
1567
|
}
|
|
1517
1568
|
// Fallback to injected provider detection
|
|
1518
|
-
var injectedInfo =
|
|
1569
|
+
var injectedInfo = (0, provider_1.detectInjectedProviderInfo)(provider);
|
|
1519
1570
|
return {
|
|
1520
1571
|
name: injectedInfo.name,
|
|
1521
1572
|
rdns: injectedInfo.rdns,
|
|
1522
1573
|
};
|
|
1523
1574
|
};
|
|
1524
|
-
/**
|
|
1525
|
-
* Attempts to detect information about an injected provider
|
|
1526
|
-
* @param provider The injected provider to analyze
|
|
1527
|
-
* @returns Provider information with fallback values
|
|
1528
|
-
*/
|
|
1529
|
-
FormoAnalytics.prototype.detectInjectedProviderInfo = function (provider) {
|
|
1530
|
-
// Try to detect provider type from common properties
|
|
1531
|
-
var name = "Injected Provider";
|
|
1532
|
-
var rdns = "io.injected.provider";
|
|
1533
|
-
// Use WalletProviderFlags interface for type safety
|
|
1534
|
-
var flags = provider;
|
|
1535
|
-
// Check if it's MetaMask
|
|
1536
|
-
if (flags.isMetaMask) {
|
|
1537
|
-
name = "MetaMask";
|
|
1538
|
-
rdns = "io.metamask";
|
|
1539
|
-
}
|
|
1540
|
-
// Check if it's Coinbase Wallet
|
|
1541
|
-
else if (flags.isCoinbaseWallet) {
|
|
1542
|
-
name = "Coinbase Wallet";
|
|
1543
|
-
rdns = "com.coinbase.wallet";
|
|
1544
|
-
}
|
|
1545
|
-
// Check if it's WalletConnect
|
|
1546
|
-
else if (flags.isWalletConnect) {
|
|
1547
|
-
name = "WalletConnect";
|
|
1548
|
-
rdns = "com.walletconnect";
|
|
1549
|
-
}
|
|
1550
|
-
// Check if it's Trust Wallet
|
|
1551
|
-
else if (flags.isTrust) {
|
|
1552
|
-
name = "Trust Wallet";
|
|
1553
|
-
rdns = "com.trustwallet";
|
|
1554
|
-
}
|
|
1555
|
-
// Check if it's Brave Wallet
|
|
1556
|
-
else if (flags.isBraveWallet) {
|
|
1557
|
-
name = "Brave Wallet";
|
|
1558
|
-
rdns = "com.brave.wallet";
|
|
1559
|
-
}
|
|
1560
|
-
// Check if it's Phantom
|
|
1561
|
-
else if (flags.isPhantom) {
|
|
1562
|
-
name = "Phantom";
|
|
1563
|
-
rdns = "app.phantom";
|
|
1564
|
-
}
|
|
1565
|
-
return {
|
|
1566
|
-
name: name,
|
|
1567
|
-
rdns: rdns,
|
|
1568
|
-
uuid: "injected-".concat(rdns.replace(/[^a-zA-Z0-9]/g, "-")),
|
|
1569
|
-
icon: constants_1.DEFAULT_PROVIDER_ICON,
|
|
1570
|
-
};
|
|
1571
|
-
};
|
|
1572
1575
|
FormoAnalytics.prototype.getProviders = function () {
|
|
1573
1576
|
return __awaiter(this, void 0, void 0, function () {
|
|
1574
1577
|
var store, providers, injected_1, injectedProviderInfo, injectedDetail, uniqueProviders, _i, uniqueProviders_1, detail;
|
|
@@ -1608,7 +1611,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1608
1611
|
return [3 /*break*/, 3];
|
|
1609
1612
|
case 2:
|
|
1610
1613
|
e_8 = _a.sent();
|
|
1611
|
-
|
|
1614
|
+
logger_1.logger.error("Formo: Failed to detect wallets", e_8);
|
|
1612
1615
|
return [3 /*break*/, 3];
|
|
1613
1616
|
case 3: return [2 /*return*/];
|
|
1614
1617
|
}
|
|
@@ -1627,7 +1630,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1627
1630
|
this._injectedProviderDetail.provider === injected_1) {
|
|
1628
1631
|
// Ensure it's tracked
|
|
1629
1632
|
if (!this._trackedProviders.has(injected_1)) {
|
|
1630
|
-
this.
|
|
1633
|
+
this.trackEIP1193Provider(injected_1);
|
|
1631
1634
|
}
|
|
1632
1635
|
// Merge with existing providers instead of overwriting
|
|
1633
1636
|
if (!this._providers.some(function (existing) { return existing.provider === injected_1; })) {
|
|
@@ -1639,9 +1642,9 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1639
1642
|
}
|
|
1640
1643
|
// Re-check if the injected provider is already tracked just before tracking
|
|
1641
1644
|
if (!this._trackedProviders.has(injected_1)) {
|
|
1642
|
-
this.
|
|
1645
|
+
this.trackEIP1193Provider(injected_1);
|
|
1643
1646
|
}
|
|
1644
|
-
injectedProviderInfo =
|
|
1647
|
+
injectedProviderInfo = (0, provider_1.detectInjectedProviderInfo)(injected_1);
|
|
1645
1648
|
injectedDetail = {
|
|
1646
1649
|
provider: injected_1,
|
|
1647
1650
|
info: injectedProviderInfo,
|
|
@@ -1698,7 +1701,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1698
1701
|
case 4: return [3 /*break*/, 6];
|
|
1699
1702
|
case 5:
|
|
1700
1703
|
err_2 = _a.sent();
|
|
1701
|
-
|
|
1704
|
+
logger_1.logger.error("Error detect all wallets:", err_2);
|
|
1702
1705
|
return [3 /*break*/, 6];
|
|
1703
1706
|
case 6: return [2 /*return*/];
|
|
1704
1707
|
}
|
|
@@ -1722,7 +1725,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1722
1725
|
return [2 /*return*/, this.currentAddress];
|
|
1723
1726
|
p = provider || this.provider;
|
|
1724
1727
|
if (!p) {
|
|
1725
|
-
|
|
1728
|
+
logger_1.logger.info("The provider is not set");
|
|
1726
1729
|
return [2 /*return*/, null];
|
|
1727
1730
|
}
|
|
1728
1731
|
_a.label = 1;
|
|
@@ -1739,7 +1742,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1739
1742
|
err_3 = _a.sent();
|
|
1740
1743
|
code = err_3 === null || err_3 === void 0 ? void 0 : err_3.code;
|
|
1741
1744
|
if (code !== 4001) {
|
|
1742
|
-
|
|
1745
|
+
logger_1.logger.error("FormoAnalytics::getAccounts: eth_accounts threw an error", err_3);
|
|
1743
1746
|
}
|
|
1744
1747
|
return [2 /*return*/, null];
|
|
1745
1748
|
case 4: return [2 /*return*/, null];
|
|
@@ -1772,7 +1775,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1772
1775
|
err_4 = _a.sent();
|
|
1773
1776
|
code = err_4 === null || err_4 === void 0 ? void 0 : err_4.code;
|
|
1774
1777
|
if (code !== 4001) {
|
|
1775
|
-
|
|
1778
|
+
logger_1.logger.error("FormoAnalytics::getAccounts: eth_accounts threw an error", err_4);
|
|
1776
1779
|
}
|
|
1777
1780
|
return [2 /*return*/, null];
|
|
1778
1781
|
case 4: return [2 /*return*/];
|
|
@@ -1788,7 +1791,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1788
1791
|
case 0:
|
|
1789
1792
|
p = provider || this.provider;
|
|
1790
1793
|
if (!p) {
|
|
1791
|
-
|
|
1794
|
+
logger_1.logger.error("Provider not set for chain ID");
|
|
1792
1795
|
return [2 /*return*/, 0];
|
|
1793
1796
|
}
|
|
1794
1797
|
_a.label = 1;
|
|
@@ -1800,13 +1803,13 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1800
1803
|
case 2:
|
|
1801
1804
|
chainIdHex = _a.sent();
|
|
1802
1805
|
if (!chainIdHex) {
|
|
1803
|
-
|
|
1806
|
+
logger_1.logger.info("Chain id not found");
|
|
1804
1807
|
return [2 /*return*/, 0];
|
|
1805
1808
|
}
|
|
1806
1809
|
return [2 /*return*/, (0, chain_1.parseChainId)(chainIdHex)];
|
|
1807
1810
|
case 3:
|
|
1808
1811
|
err_5 = _a.sent();
|
|
1809
|
-
|
|
1812
|
+
logger_1.logger.error("eth_chainId threw an error:", err_5);
|
|
1810
1813
|
return [2 /*return*/, 0];
|
|
1811
1814
|
case 4: return [2 /*return*/];
|
|
1812
1815
|
}
|
|
@@ -1864,7 +1867,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1864
1867
|
/**
|
|
1865
1868
|
* Polls for transaction receipt and emits tx.status = CONFIRMED or REVERTED.
|
|
1866
1869
|
*/
|
|
1867
|
-
FormoAnalytics.prototype.pollTransactionReceipt = function (
|
|
1870
|
+
FormoAnalytics.prototype.pollTransactionReceipt = function (provider_2, transactionHash_2, payload_1) {
|
|
1868
1871
|
return __awaiter(this, arguments, void 0, function (provider, transactionHash, payload, maxAttempts, intervalMs) {
|
|
1869
1872
|
var attempts, poll;
|
|
1870
1873
|
var _this = this;
|
|
@@ -1900,7 +1903,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1900
1903
|
return [3 /*break*/, 3];
|
|
1901
1904
|
case 2:
|
|
1902
1905
|
e_9 = _a.sent();
|
|
1903
|
-
|
|
1906
|
+
logger_1.logger.error("Error polling transaction receipt", e_9);
|
|
1904
1907
|
return [3 /*break*/, 3];
|
|
1905
1908
|
case 3:
|
|
1906
1909
|
attempts++;
|
|
@@ -1921,12 +1924,12 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1921
1924
|
if (!listeners)
|
|
1922
1925
|
return;
|
|
1923
1926
|
for (var _i = 0, _a = Object.entries(listeners); _i < _a.length; _i++) {
|
|
1924
|
-
var _b = _a[_i],
|
|
1927
|
+
var _b = _a[_i], event_2 = _b[0], fn = _b[1];
|
|
1925
1928
|
try {
|
|
1926
|
-
provider.removeListener(
|
|
1929
|
+
provider.removeListener(event_2, fn);
|
|
1927
1930
|
}
|
|
1928
1931
|
catch (e) {
|
|
1929
|
-
|
|
1932
|
+
logger_1.logger.warn("Failed to remove listener for ".concat(String(event_2)), e);
|
|
1930
1933
|
}
|
|
1931
1934
|
}
|
|
1932
1935
|
this._providerListenersMap.delete(provider);
|
|
@@ -1941,7 +1944,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1941
1944
|
}
|
|
1942
1945
|
}
|
|
1943
1946
|
catch (e) {
|
|
1944
|
-
|
|
1947
|
+
logger_1.logger.warn("Failed to untrack provider", e);
|
|
1945
1948
|
}
|
|
1946
1949
|
};
|
|
1947
1950
|
// Debug/monitoring helpers
|
|
@@ -1970,7 +1973,7 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
1970
1973
|
for (var _i = 0, _a = Array.from(this._trackedProviders); _i < _a.length; _i++) {
|
|
1971
1974
|
var provider = _a[_i];
|
|
1972
1975
|
if (!currentProviderInstances.has(provider)) {
|
|
1973
|
-
|
|
1976
|
+
logger_1.logger.info("Cleaning up unavailable provider: ".concat(provider.constructor.name));
|
|
1974
1977
|
this.untrackProvider(provider);
|
|
1975
1978
|
}
|
|
1976
1979
|
}
|
|
@@ -2043,67 +2046,4 @@ var FormoAnalytics = /** @class */ (function () {
|
|
|
2043
2046
|
return FormoAnalytics;
|
|
2044
2047
|
}());
|
|
2045
2048
|
exports.FormoAnalytics = FormoAnalytics;
|
|
2046
|
-
var FormoAnalyticsSession = /** @class */ (function () {
|
|
2047
|
-
function FormoAnalyticsSession() {
|
|
2048
|
-
}
|
|
2049
|
-
FormoAnalyticsSession.prototype.generateIdentificationKey = function (address, rdns) {
|
|
2050
|
-
// If rdns is missing, use address-only key as fallback for empty identifies
|
|
2051
|
-
return rdns ? "".concat(address, ":").concat(rdns) : address;
|
|
2052
|
-
};
|
|
2053
|
-
FormoAnalyticsSession.prototype.isWalletDetected = function (rdns) {
|
|
2054
|
-
var _a;
|
|
2055
|
-
var rdnses = ((_a = (0, lib_1.cookie)().get(constants_1.SESSION_WALLET_DETECTED_KEY)) === null || _a === void 0 ? void 0 : _a.split(",")) || [];
|
|
2056
|
-
return rdnses.includes(rdns);
|
|
2057
|
-
};
|
|
2058
|
-
FormoAnalyticsSession.prototype.markWalletDetected = function (rdns) {
|
|
2059
|
-
var _a;
|
|
2060
|
-
var rdnses = ((_a = (0, lib_1.cookie)().get(constants_1.SESSION_WALLET_DETECTED_KEY)) === null || _a === void 0 ? void 0 : _a.split(",")) || [];
|
|
2061
|
-
if (!rdnses.includes(rdns)) {
|
|
2062
|
-
rdnses.push(rdns);
|
|
2063
|
-
(0, lib_1.cookie)().set(constants_1.SESSION_WALLET_DETECTED_KEY, rdnses.join(","), {
|
|
2064
|
-
// by the end of the day
|
|
2065
|
-
expires: new Date(Date.now() + 86400 * 1000).toUTCString(),
|
|
2066
|
-
path: "/",
|
|
2067
|
-
});
|
|
2068
|
-
}
|
|
2069
|
-
};
|
|
2070
|
-
FormoAnalyticsSession.prototype.isWalletIdentified = function (address, rdns) {
|
|
2071
|
-
var identifiedKey = this.generateIdentificationKey(address, rdns);
|
|
2072
|
-
var cookieValue = (0, lib_1.cookie)().get(constants_1.SESSION_WALLET_IDENTIFIED_KEY);
|
|
2073
|
-
var identifiedWallets = (cookieValue === null || cookieValue === void 0 ? void 0 : cookieValue.split(",")) || [];
|
|
2074
|
-
var isIdentified = identifiedWallets.includes(identifiedKey);
|
|
2075
|
-
lib_1.logger.debug("Session: Checking wallet identification", {
|
|
2076
|
-
identifiedKey: identifiedKey,
|
|
2077
|
-
isIdentified: isIdentified,
|
|
2078
|
-
hasRdns: !!rdns,
|
|
2079
|
-
});
|
|
2080
|
-
return isIdentified;
|
|
2081
|
-
};
|
|
2082
|
-
FormoAnalyticsSession.prototype.markWalletIdentified = function (address, rdns) {
|
|
2083
|
-
var _a;
|
|
2084
|
-
var identifiedKey = this.generateIdentificationKey(address, rdns);
|
|
2085
|
-
var identifiedWallets = ((_a = (0, lib_1.cookie)().get(constants_1.SESSION_WALLET_IDENTIFIED_KEY)) === null || _a === void 0 ? void 0 : _a.split(",")) || [];
|
|
2086
|
-
if (!identifiedWallets.includes(identifiedKey)) {
|
|
2087
|
-
identifiedWallets.push(identifiedKey);
|
|
2088
|
-
var newValue = identifiedWallets.join(",");
|
|
2089
|
-
(0, lib_1.cookie)().set(constants_1.SESSION_WALLET_IDENTIFIED_KEY, newValue, {
|
|
2090
|
-
// by the end of the day
|
|
2091
|
-
expires: new Date(Date.now() + 86400 * 1000).toUTCString(),
|
|
2092
|
-
path: "/",
|
|
2093
|
-
});
|
|
2094
|
-
lib_1.logger.debug("Session: Marked wallet as identified", {
|
|
2095
|
-
identifiedKey: identifiedKey,
|
|
2096
|
-
hasRdns: !!rdns,
|
|
2097
|
-
});
|
|
2098
|
-
}
|
|
2099
|
-
else {
|
|
2100
|
-
lib_1.logger.info("Session: Wallet already marked as identified", {
|
|
2101
|
-
identifiedKey: identifiedKey,
|
|
2102
|
-
existingWallets: identifiedWallets,
|
|
2103
|
-
hasRdns: !!rdns,
|
|
2104
|
-
});
|
|
2105
|
-
}
|
|
2106
|
-
};
|
|
2107
|
-
return FormoAnalyticsSession;
|
|
2108
|
-
}());
|
|
2109
2049
|
//# sourceMappingURL=FormoAnalytics.js.map
|