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