@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.
Files changed (192) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +6 -4
  3. package/dist/cjs/src/FormoAnalytics.d.ts +27 -15
  4. package/dist/cjs/src/FormoAnalytics.js +198 -257
  5. package/dist/cjs/src/FormoAnalyticsProvider.js +71 -13
  6. package/dist/{esm/src/lib/consent.d.ts → cjs/src/consent/index.d.ts} +1 -1
  7. package/dist/cjs/src/{lib/consent.js → consent/index.js} +1 -1
  8. package/dist/cjs/src/constants/base.d.ts +0 -2
  9. package/dist/cjs/src/constants/base.js +3 -3
  10. package/dist/cjs/src/constants/config.js +1 -1
  11. package/dist/cjs/src/{lib/event → event}/EventFactory.d.ts +2 -2
  12. package/dist/cjs/src/{lib/event → event}/EventFactory.js +9 -9
  13. package/dist/cjs/src/{lib/event → event}/EventManager.d.ts +1 -1
  14. package/dist/cjs/src/{lib/event → event}/EventManager.js +1 -1
  15. package/dist/cjs/src/{lib/event → event}/type.d.ts +1 -1
  16. package/dist/cjs/src/{lib/event → event}/utils.d.ts +1 -1
  17. package/dist/cjs/src/{lib/event → event}/utils.js +1 -1
  18. package/dist/cjs/src/fetch/index.d.ts +11 -0
  19. package/dist/cjs/src/fetch/index.js +126 -0
  20. package/dist/cjs/src/provider/detection.d.ts +58 -0
  21. package/dist/cjs/src/provider/detection.js +103 -0
  22. package/dist/cjs/src/provider/index.d.ts +6 -0
  23. package/dist/cjs/src/provider/index.js +11 -0
  24. package/dist/cjs/src/queue/EventQueue.d.ts +56 -0
  25. package/dist/cjs/src/{lib/queue → queue}/EventQueue.js +161 -52
  26. package/dist/{esm/src/lib → cjs/src}/queue/type.d.ts +1 -1
  27. package/dist/cjs/src/session/index.d.ts +91 -0
  28. package/dist/cjs/src/session/index.js +126 -0
  29. package/dist/cjs/src/{lib/storage → storage}/built-in/blueprint.js +1 -1
  30. package/dist/cjs/src/types/base.d.ts +35 -1
  31. package/dist/cjs/src/types/events.d.ts +5 -3
  32. package/dist/cjs/src/validators/object.js +0 -2
  33. package/dist/cjs/src/version.d.ts +1 -1
  34. package/dist/cjs/src/version.js +1 -1
  35. package/dist/cjs/src/wagmi/WagmiEventHandler.d.ts +93 -0
  36. package/dist/cjs/src/wagmi/WagmiEventHandler.js +669 -0
  37. package/dist/cjs/src/wagmi/index.d.ts +9 -0
  38. package/dist/cjs/src/wagmi/index.js +12 -0
  39. package/dist/cjs/src/wagmi/types.d.ts +146 -0
  40. package/dist/cjs/src/wagmi/types.js +10 -0
  41. package/dist/cjs/src/wagmi/utils.d.ts +74 -0
  42. package/dist/cjs/src/wagmi/utils.js +198 -0
  43. package/dist/esm/src/FormoAnalytics.d.ts +27 -15
  44. package/dist/esm/src/FormoAnalytics.js +88 -147
  45. package/dist/esm/src/FormoAnalyticsProvider.js +68 -10
  46. package/dist/{cjs/src/lib/consent.d.ts → esm/src/consent/index.d.ts} +1 -1
  47. package/dist/esm/src/{lib/consent.js → consent/index.js} +1 -1
  48. package/dist/esm/src/constants/base.d.ts +0 -2
  49. package/dist/esm/src/constants/base.js +2 -2
  50. package/dist/esm/src/constants/config.js +1 -1
  51. package/dist/esm/src/{lib/event → event}/EventFactory.d.ts +2 -2
  52. package/dist/esm/src/{lib/event → event}/EventFactory.js +9 -9
  53. package/dist/esm/src/{lib/event → event}/EventManager.d.ts +1 -1
  54. package/dist/esm/src/{lib/event → event}/EventManager.js +1 -1
  55. package/dist/esm/src/{lib/event → event}/type.d.ts +1 -1
  56. package/dist/esm/src/{lib/event → event}/utils.d.ts +1 -1
  57. package/dist/esm/src/{lib/event → event}/utils.js +1 -1
  58. package/dist/esm/src/fetch/index.d.ts +11 -0
  59. package/dist/esm/src/fetch/index.js +124 -0
  60. package/dist/esm/src/provider/detection.d.ts +58 -0
  61. package/dist/esm/src/provider/detection.js +98 -0
  62. package/dist/esm/src/provider/index.d.ts +6 -0
  63. package/dist/esm/src/provider/index.js +5 -0
  64. package/dist/esm/src/queue/EventQueue.d.ts +56 -0
  65. package/dist/esm/src/{lib/queue → queue}/EventQueue.js +161 -52
  66. package/dist/{cjs/src/lib → esm/src}/queue/type.d.ts +1 -1
  67. package/dist/esm/src/session/index.d.ts +91 -0
  68. package/dist/esm/src/session/index.js +123 -0
  69. package/dist/esm/src/{lib/storage → storage}/built-in/blueprint.js +1 -1
  70. package/dist/esm/src/types/base.d.ts +35 -1
  71. package/dist/esm/src/types/events.d.ts +5 -3
  72. package/dist/esm/src/validators/object.js +0 -2
  73. package/dist/esm/src/version.d.ts +1 -1
  74. package/dist/esm/src/version.js +1 -1
  75. package/dist/esm/src/wagmi/WagmiEventHandler.d.ts +93 -0
  76. package/dist/esm/src/wagmi/WagmiEventHandler.js +666 -0
  77. package/dist/esm/src/wagmi/index.d.ts +9 -0
  78. package/dist/esm/src/wagmi/index.js +8 -0
  79. package/dist/esm/src/wagmi/types.d.ts +146 -0
  80. package/dist/esm/src/wagmi/types.js +9 -0
  81. package/dist/esm/src/wagmi/utils.d.ts +74 -0
  82. package/dist/esm/src/wagmi/utils.js +192 -0
  83. package/dist/index.umd.min.js +1 -1
  84. package/package.json +23 -4
  85. package/dist/cjs/src/lib/fetch.d.ts +0 -3
  86. package/dist/cjs/src/lib/fetch.js +0 -8
  87. package/dist/cjs/src/lib/index.d.ts +0 -7
  88. package/dist/cjs/src/lib/index.js +0 -28
  89. package/dist/cjs/src/lib/queue/EventQueue.d.ts +0 -34
  90. package/dist/esm/src/lib/fetch.d.ts +0 -3
  91. package/dist/esm/src/lib/fetch.js +0 -3
  92. package/dist/esm/src/lib/index.d.ts +0 -7
  93. package/dist/esm/src/lib/index.js +0 -7
  94. package/dist/esm/src/lib/queue/EventQueue.d.ts +0 -34
  95. /package/dist/cjs/src/{lib/browser → browser}/browsers.d.ts +0 -0
  96. /package/dist/cjs/src/{lib/browser → browser}/browsers.js +0 -0
  97. /package/dist/cjs/src/{lib/event → event}/constants.d.ts +0 -0
  98. /package/dist/cjs/src/{lib/event → event}/constants.js +0 -0
  99. /package/dist/cjs/src/{lib/event → event}/index.d.ts +0 -0
  100. /package/dist/cjs/src/{lib/event → event}/index.js +0 -0
  101. /package/dist/cjs/src/{lib/event → event}/type.js +0 -0
  102. /package/dist/cjs/src/{lib/logger → logger}/Logger.d.ts +0 -0
  103. /package/dist/cjs/src/{lib/logger → logger}/Logger.js +0 -0
  104. /package/dist/cjs/src/{lib/logger → logger}/index.d.ts +0 -0
  105. /package/dist/cjs/src/{lib/logger → logger}/index.js +0 -0
  106. /package/dist/cjs/src/{lib/logger → logger}/type.d.ts +0 -0
  107. /package/dist/cjs/src/{lib/logger → logger}/type.js +0 -0
  108. /package/dist/cjs/src/{lib/queue → queue}/index.d.ts +0 -0
  109. /package/dist/cjs/src/{lib/queue → queue}/index.js +0 -0
  110. /package/dist/cjs/src/{lib/queue → queue}/type.js +0 -0
  111. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry1.d.ts +0 -0
  112. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry1.js +0 -0
  113. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry2.d.ts +0 -0
  114. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry2.js +0 -0
  115. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry3.d.ts +0 -0
  116. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry3.js +0 -0
  117. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_has.d.ts +0 -0
  118. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_has.js +0 -0
  119. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isObject.d.ts +0 -0
  120. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isObject.js +0 -0
  121. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isPlaceholder.d.ts +0 -0
  122. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isPlaceholder.js +0 -0
  123. /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepRight.d.ts +0 -0
  124. /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepRight.js +0 -0
  125. /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepWithKey.d.ts +0 -0
  126. /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepWithKey.js +0 -0
  127. /package/dist/cjs/src/{lib/ramda → ramda}/mergeWithKey.d.ts +0 -0
  128. /package/dist/cjs/src/{lib/ramda → ramda}/mergeWithKey.js +0 -0
  129. /package/dist/cjs/src/{lib/storage → storage}/StorageManager.d.ts +0 -0
  130. /package/dist/cjs/src/{lib/storage → storage}/StorageManager.js +0 -0
  131. /package/dist/cjs/src/{lib/storage → storage}/built-in/blueprint.d.ts +0 -0
  132. /package/dist/cjs/src/{lib/storage → storage}/built-in/cookie.d.ts +0 -0
  133. /package/dist/cjs/src/{lib/storage → storage}/built-in/cookie.js +0 -0
  134. /package/dist/cjs/src/{lib/storage → storage}/built-in/memory.d.ts +0 -0
  135. /package/dist/cjs/src/{lib/storage → storage}/built-in/memory.js +0 -0
  136. /package/dist/cjs/src/{lib/storage → storage}/built-in/web.d.ts +0 -0
  137. /package/dist/cjs/src/{lib/storage → storage}/built-in/web.js +0 -0
  138. /package/dist/cjs/src/{lib/storage → storage}/constant.d.ts +0 -0
  139. /package/dist/cjs/src/{lib/storage → storage}/constant.js +0 -0
  140. /package/dist/cjs/src/{lib/storage → storage}/index.d.ts +0 -0
  141. /package/dist/cjs/src/{lib/storage → storage}/index.js +0 -0
  142. /package/dist/cjs/src/{lib/storage → storage}/type.d.ts +0 -0
  143. /package/dist/cjs/src/{lib/storage → storage}/type.js +0 -0
  144. /package/dist/esm/src/{lib/browser → browser}/browsers.d.ts +0 -0
  145. /package/dist/esm/src/{lib/browser → browser}/browsers.js +0 -0
  146. /package/dist/esm/src/{lib/event → event}/constants.d.ts +0 -0
  147. /package/dist/esm/src/{lib/event → event}/constants.js +0 -0
  148. /package/dist/esm/src/{lib/event → event}/index.d.ts +0 -0
  149. /package/dist/esm/src/{lib/event → event}/index.js +0 -0
  150. /package/dist/esm/src/{lib/event → event}/type.js +0 -0
  151. /package/dist/esm/src/{lib/logger → logger}/Logger.d.ts +0 -0
  152. /package/dist/esm/src/{lib/logger → logger}/Logger.js +0 -0
  153. /package/dist/esm/src/{lib/logger → logger}/index.d.ts +0 -0
  154. /package/dist/esm/src/{lib/logger → logger}/index.js +0 -0
  155. /package/dist/esm/src/{lib/logger → logger}/type.d.ts +0 -0
  156. /package/dist/esm/src/{lib/logger → logger}/type.js +0 -0
  157. /package/dist/esm/src/{lib/queue → queue}/index.d.ts +0 -0
  158. /package/dist/esm/src/{lib/queue → queue}/index.js +0 -0
  159. /package/dist/esm/src/{lib/queue → queue}/type.js +0 -0
  160. /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry1.d.ts +0 -0
  161. /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry1.js +0 -0
  162. /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry2.d.ts +0 -0
  163. /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry2.js +0 -0
  164. /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry3.d.ts +0 -0
  165. /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry3.js +0 -0
  166. /package/dist/esm/src/{lib/ramda → ramda}/internal/_has.d.ts +0 -0
  167. /package/dist/esm/src/{lib/ramda → ramda}/internal/_has.js +0 -0
  168. /package/dist/esm/src/{lib/ramda → ramda}/internal/_isObject.d.ts +0 -0
  169. /package/dist/esm/src/{lib/ramda → ramda}/internal/_isObject.js +0 -0
  170. /package/dist/esm/src/{lib/ramda → ramda}/internal/_isPlaceholder.d.ts +0 -0
  171. /package/dist/esm/src/{lib/ramda → ramda}/internal/_isPlaceholder.js +0 -0
  172. /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepRight.d.ts +0 -0
  173. /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepRight.js +0 -0
  174. /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepWithKey.d.ts +0 -0
  175. /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepWithKey.js +0 -0
  176. /package/dist/esm/src/{lib/ramda → ramda}/mergeWithKey.d.ts +0 -0
  177. /package/dist/esm/src/{lib/ramda → ramda}/mergeWithKey.js +0 -0
  178. /package/dist/esm/src/{lib/storage → storage}/StorageManager.d.ts +0 -0
  179. /package/dist/esm/src/{lib/storage → storage}/StorageManager.js +0 -0
  180. /package/dist/esm/src/{lib/storage → storage}/built-in/blueprint.d.ts +0 -0
  181. /package/dist/esm/src/{lib/storage → storage}/built-in/cookie.d.ts +0 -0
  182. /package/dist/esm/src/{lib/storage → storage}/built-in/cookie.js +0 -0
  183. /package/dist/esm/src/{lib/storage → storage}/built-in/memory.d.ts +0 -0
  184. /package/dist/esm/src/{lib/storage → storage}/built-in/memory.js +0 -0
  185. /package/dist/esm/src/{lib/storage → storage}/built-in/web.d.ts +0 -0
  186. /package/dist/esm/src/{lib/storage → storage}/built-in/web.js +0 -0
  187. /package/dist/esm/src/{lib/storage → storage}/constant.d.ts +0 -0
  188. /package/dist/esm/src/{lib/storage → storage}/constant.js +0 -0
  189. /package/dist/esm/src/{lib/storage → storage}/index.d.ts +0 -0
  190. /package/dist/esm/src/{lib/storage → storage}/index.js +0 -0
  191. /package/dist/esm/src/{lib/storage → storage}/type.d.ts +0 -0
  192. /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 lib_1 = require("./lib");
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
- this.session = new FormoAnalyticsSession();
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, lib_1.cookie)().get(constants_1.SESSION_USER_ID_KEY) || undefined;
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
- lib_1.Logger.init({
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 lib_1.EventManager(new lib_1.EventQueue(this.config.writeKey, {
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
- lib_1.logger.info("User has previously opted out of tracking");
147
+ logger_1.logger.info("User has previously opted out of tracking");
133
148
  }
134
- // Handle initial provider (injected) as fallback; listeners for EIP-6963 are added later
135
- var provider = undefined;
136
- var optProvider = options.provider;
137
- if (optProvider) {
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 if (typeof window !== "undefined" && window.ethereum) {
141
- provider = window.ethereum;
142
- }
143
- if (provider) {
144
- this.trackProvider(provider);
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, lib_1.initStorageManager)(writeKey);
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 [2 /*return*/, analytics];
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, lib_1.cookie)().remove(constants_1.LOCAL_ANONYMOUS_ID_KEY);
225
- (0, lib_1.cookie)().remove(constants_1.SESSION_USER_ID_KEY);
226
- (0, lib_1.cookie)().remove(constants_1.SESSION_WALLET_DETECTED_KEY);
227
- (0, lib_1.cookie)().remove(constants_1.SESSION_WALLET_IDENTIFIED_KEY);
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
- lib_1.logger.warn("Connect: Chain ID cannot be null or undefined");
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
- lib_1.logger.warn("Connect: Address cannot be empty");
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
- lib_1.logger.warn("Connect: Invalid address provided (\"".concat(address, "\"). Please provide a valid Ethereum address in checksum format."));
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
- lib_1.logger.info("Disconnect: Emitting disconnect event with:", {
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
- lib_1.logger.info("Wallet disconnected: Cleared currentAddress, currentChainId, and provider");
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
- lib_1.logger.warn("FormoAnalytics::chain: chainId cannot be empty or 0");
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
- lib_1.logger.warn("FormoAnalytics::chain: chainId must be a valid decimal number");
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
- lib_1.logger.warn("FormoAnalytics::chain: address was empty and no previous address has been recorded");
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
- lib_1.logger.info("Auto-identifying with providers:", this._providers.map(function (p) { return p.info.name; }));
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
- lib_1.logger.info("Auto-identify: Checking deduplication", {
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
- lib_1.logger.info("Auto-identifying", validAddress_1, providerDetail.info.name, providerDetail.info.rdns);
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
- lib_1.logger.info("Auto-identify: Skipping already identified wallet", validAddress_1, providerDetail.info.name, providerDetail.info.rdns);
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
- lib_1.logger.error("Failed to identify provider ".concat(providerDetail.info.name, ":"), err_1);
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
- lib_1.logger.info("Identify", address, userId, providerName, rdns);
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 = lib_1.logger.warn) === null || _b === void 0 ? void 0 : _b.call(lib_1.logger, "Invalid address provided to identify:", address);
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, lib_1.cookie)().set(constants_1.SESSION_USER_ID_KEY, userId);
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
- lib_1.logger.debug("Identify: Checking deduplication", {
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
- lib_1.logger.info("Identify: Wallet ".concat(providerName || "Unknown", " with address ").concat(validAddress, " already identified in this session (rdns: ").concat(rdns || "empty", ")"));
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
- lib_1.logger.log("identify error", e_1);
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*/, lib_1.logger.warn("Detect: Wallet ".concat(providerName, " already detected in this session"))];
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
- lib_1.logger.info("Opting out of tracking");
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, lib_1.setConsentFlag)(this.writeKey, constants_1.CONSENT_OPT_OUT_KEY, "true");
629
+ (0, consent_1.setConsentFlag)(this.writeKey, constants_1.CONSENT_OPT_OUT_KEY, "true");
594
630
  this.reset();
595
- lib_1.logger.info("Successfully opted out of tracking");
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
- lib_1.logger.info("Opting back into tracking");
639
+ logger_1.logger.info("Opting back into tracking");
604
640
  // Remove opt-out flag
605
- (0, lib_1.removeConsentFlag)(this.writeKey, constants_1.CONSENT_OPT_OUT_KEY);
606
- lib_1.logger.info("Successfully opted back into tracking");
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, lib_1.getConsentFlag)(this.writeKey, constants_1.CONSENT_OPT_OUT_KEY) === "true";
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
- FormoAnalytics.prototype.trackProvider = function (provider) {
619
- lib_1.logger.info("trackProvider", provider);
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
- if (!provider)
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
- lib_1.logger.warn("TrackProvider: Provider already tracked.");
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
- lib_1.logger.debug("TrackProvider: Skipping request wrapping (both signature and transaction autocapture disabled)");
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
- lib_1.logger.error("Error tracking provider:", error);
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.trackProvider(provider);
712
+ this.trackEIP1193Provider(provider);
661
713
  }
662
714
  }
663
715
  }
664
716
  catch (error) {
665
- lib_1.logger.error("Failed to track EIP-6963 providers during initialization:", error);
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
- lib_1.logger.info("registerAccountsChangedListener");
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
- lib_1.logger.info("onAccountsChanged", accounts);
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
- lib_1.logger.debug("OnAccountsChanged: Already processing accountsChanged, skipping", {
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
- lib_1.logger.info("OnAccountsChanged: Detecting disconnect, current state:", {
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
- lib_1.logger.error("Failed to disconnect provider on accountsChanged", error_1);
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
- lib_1.logger.debug("OnAccountsChanged: Disconnect event skipped (autocapture.disconnect: false)");
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
- lib_1.logger.info("OnAccountsChanged: Ignoring disconnect for non-active provider");
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
- lib_1.logger.warn("onAccountsChanged: Invalid address received", accounts[0]);
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
- lib_1.logger.info("OnAccountsChanged: Different provider attempting to connect", {
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
- lib_1.logger.info("OnAccountsChanged: Checking current provider accounts", {
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
- lib_1.logger.info("OnAccountsChanged: Different address detected, switching providers despite current provider having accounts", {
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
- lib_1.logger.debug("OnAccountsChanged: Disconnect event skipped during provider switch (autocapture.disconnect: false)");
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
- lib_1.logger.info("OnAccountsChanged: Current provider still has accounts and same address, ignoring new provider", {
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
- lib_1.logger.info("OnAccountsChanged: Current provider has no accounts, switching to new provider", {
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
- lib_1.logger.debug("OnAccountsChanged: Disconnect event skipped for old provider (autocapture.disconnect: false)");
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
- lib_1.logger.warn("OnAccountsChanged: Could not check current provider accounts, switching to new provider", {
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
- lib_1.logger.debug("OnAccountsChanged: Disconnect event skipped for failed provider check (autocapture.disconnect: false)");
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
- lib_1.logger.info("OnAccountsChanged: Detected wallet connection, emitting connect event", {
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
- lib_1.logger.info("OnAccountsChanged: Using fallback chainId 0 for connect event");
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
- lib_1.logger.error("Failed to track connect event during account change:", error);
978
+ logger_1.logger.error("Failed to track connect event during account change:", error);
927
979
  });
928
980
  }
929
981
  else {
930
- lib_1.logger.debug("OnAccountsChanged: Connect event skipped (autocapture.connect: false)", {
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
- lib_1.logger.info("registerChainChangedListener");
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
- lib_1.logger.info("onChainChanged", chainIdHex);
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
- lib_1.logger.info("OnChainChanged: No current address, user appears disconnected");
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
- lib_1.logger.debug("OnChainChanged: Chain event skipped (autocapture.chain: false)", {
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
- lib_1.logger.error("OnChainChanged: Failed to emit chain event:", error);
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
- lib_1.logger.info("registerConnectListener");
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
- lib_1.logger.info("registerDisconnectListener");
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
- lib_1.logger.info("OnDisconnect: Wallet disconnect event received, current state:", {
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
- lib_1.logger.error("Error during disconnect in disconnect listener", e_2);
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
- lib_1.logger.debug("OnDisconnect: Disconnect event skipped (autocapture.disconnect: false)");
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
- lib_1.logger.info("onConnected", connection);
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
- lib_1.logger.info("OnConnected: Detected wallet connection, emitting connect event", {
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
- lib_1.logger.info("OnConnected: Using fallback chainId 0 for connect event");
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
- lib_1.logger.error("Failed to track connect event during provider connection:", error);
1161
+ logger_1.logger.error("Failed to track connect event during provider connection:", error);
1110
1162
  });
1111
1163
  }
1112
1164
  else {
1113
- lib_1.logger.debug("OnConnected: Connect event skipped (autocapture.connect: false)", {
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
- lib_1.logger.debug("OnConnected: Skipping connect event for non-active provider", {
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
- lib_1.logger.error("Error handling connect event", e_3);
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
- lib_1.logger.info("registerRequestListeners");
1197
+ logger_1.logger.info("registerRequestListeners");
1146
1198
  if (!provider) {
1147
- lib_1.logger.error("Provider not found for request (signature, transaction) tracking");
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
- lib_1.logger.info("Provider already wrapped with our SDK; skipping request wrapping.");
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
- lib_1.logger.debug("Signature event skipped (autocapture.signature: false)", { method: method });
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
- lib_1.logger.error("Formo: Failed to track signature request", e);
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
- lib_1.logger.error("Formo: Failed to track signature confirmation", e);
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
- lib_1.logger.error("Formo: Failed to track signature rejection", e);
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
- lib_1.logger.debug("Transaction event skipped (autocapture.transaction: false)", { method: method });
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
- lib_1.logger.error("Formo: Failed to track transaction start", e_4);
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
- lib_1.logger.error("Formo: Failed to track transaction broadcast", e_5);
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
- lib_1.logger.error("Formo: Failed to track transaction rejection", e_6);
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
- lib_1.logger.warn("Failed to wrap provider.request; skipping", e);
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, lib_1.cookie)().get(constants_1.SESSION_CURRENT_URL_KEY);
1385
+ currentUrl = (0, storage_1.cookie)().get(constants_1.SESSION_CURRENT_URL_KEY);
1334
1386
  if (currentUrl !== window.location.href) {
1335
- (0, lib_1.cookie)().set(constants_1.SESSION_CURRENT_URL_KEY, window.location.href);
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
- lib_1.logger.info("Track page hit: Skipping event due to tracking configuration");
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
- lib_1.logger.error("Formo: Failed to track page hit", e_7);
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
- lib_1.logger.info("Skipping ".concat(type, " event due to tracking configuration"));
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
- lib_1.logger.error("Error tracking event:", error_5);
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 = this.detectInjectedProviderInfo(provider);
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
- lib_1.logger.error("Formo: Failed to detect wallets", e_8);
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.trackProvider(injected_1);
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.trackProvider(injected_1);
1646
+ this.trackEIP1193Provider(injected_1);
1643
1647
  }
1644
- injectedProviderInfo = this.detectInjectedProviderInfo(injected_1);
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
- lib_1.logger.error("Error detect all wallets:", err_2);
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
- lib_1.logger.info("The provider is not set");
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
- lib_1.logger.error("FormoAnalytics::getAccounts: eth_accounts threw an error", err_3);
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
- lib_1.logger.error("FormoAnalytics::getAccounts: eth_accounts threw an error", err_4);
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
- lib_1.logger.error("Provider not set for chain ID");
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
- lib_1.logger.info("Chain id not found");
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
- lib_1.logger.error("eth_chainId threw an error:", err_5);
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 (provider_1, transactionHash_2, payload_1) {
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
- lib_1.logger.error("Error polling transaction receipt", e_9);
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], event_1 = _b[0], fn = _b[1];
1928
+ var _b = _a[_i], event_2 = _b[0], fn = _b[1];
1925
1929
  try {
1926
- provider.removeListener(event_1, fn);
1930
+ provider.removeListener(event_2, fn);
1927
1931
  }
1928
1932
  catch (e) {
1929
- lib_1.logger.warn("Failed to remove listener for ".concat(String(event_1)), e);
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
- lib_1.logger.warn("Failed to untrack provider", e);
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
- lib_1.logger.info("Cleaning up unavailable provider: ".concat(provider.constructor.name));
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