@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
@@ -55,13 +55,20 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
55
55
  return to.concat(ar || Array.prototype.slice.call(from));
56
56
  };
57
57
  import { createStore } from "mipd";
58
- import { EVENTS_API_HOST, EventType, LOCAL_ANONYMOUS_ID_KEY, SESSION_CURRENT_URL_KEY, SESSION_USER_ID_KEY, SESSION_WALLET_DETECTED_KEY, SESSION_WALLET_IDENTIFIED_KEY, DEFAULT_PROVIDER_ICON, CONSENT_OPT_OUT_KEY, } from "./constants";
59
- import { cookie, EventManager, EventQueue, initStorageManager, logger, Logger, setConsentFlag, getConsentFlag, removeConsentFlag, } from "./lib";
58
+ import { EVENTS_API_HOST, EventType, LOCAL_ANONYMOUS_ID_KEY, SESSION_CURRENT_URL_KEY, SESSION_USER_ID_KEY, CONSENT_OPT_OUT_KEY, } from "./constants";
59
+ import { cookie, initStorageManager } from "./storage";
60
+ import { EventManager } from "./event";
61
+ import { EventQueue } from "./queue";
62
+ import { logger, Logger } from "./logger";
63
+ import { setConsentFlag, getConsentFlag, removeConsentFlag, } from "./consent";
64
+ import { detectInjectedProviderInfo, isValidProvider } from "./provider";
65
+ import { FormoAnalyticsSession, SESSION_WALLET_DETECTED_KEY, SESSION_WALLET_IDENTIFIED_KEY, } from "./session";
60
66
  import { SignatureStatus, TransactionStatus, WRAPPED_REQUEST_SYMBOL, WRAPPED_REQUEST_REF_SYMBOL, } from "./types";
61
67
  import { toChecksumAddress } from "./utils";
62
68
  import { getValidAddress } from "./utils/address";
63
69
  import { isLocalhost } from "./validators";
64
70
  import { parseChainId } from "./utils/chain";
71
+ import { WagmiEventHandler } from "./wagmi";
65
72
  /**
66
73
  * Constants for provider switching reasons
67
74
  */
@@ -95,11 +102,18 @@ var FormoAnalytics = /** @class */ (function () {
95
102
  this._processingAccountsChanged = false;
96
103
  // Set to efficiently track seen providers for deduplication and O(1) lookup
97
104
  this._seenProviders = new Set();
105
+ /**
106
+ * Flag indicating if Wagmi mode is enabled
107
+ * When true, EIP-1193 provider wrapping is skipped
108
+ */
109
+ this.isWagmiMode = false;
98
110
  this.currentUserId = "";
99
111
  this.config = {
100
112
  writeKey: writeKey,
101
113
  };
102
114
  this.options = options;
115
+ // Check if Wagmi mode is enabled
116
+ this.isWagmiMode = !!options.wagmi;
103
117
  this.session = new FormoAnalyticsSession();
104
118
  this.currentUserId =
105
119
  cookie().get(SESSION_USER_ID_KEY) || undefined;
@@ -123,22 +137,30 @@ var FormoAnalytics = /** @class */ (function () {
123
137
  retryCount: options.retryCount,
124
138
  maxQueueSize: options.maxQueueSize,
125
139
  flushInterval: options.flushInterval,
140
+ errorHandler: options.errorHandler,
126
141
  }), options);
127
142
  // Check consent status on initialization
128
143
  if (this.hasOptedOutTracking()) {
129
144
  logger.info("User has previously opted out of tracking");
130
145
  }
131
- // Handle initial provider (injected) as fallback; listeners for EIP-6963 are added later
132
- var provider = undefined;
133
- var optProvider = options.provider;
134
- if (optProvider) {
135
- provider = optProvider;
146
+ // Initialize Wagmi handler if Wagmi mode is enabled
147
+ if (this.isWagmiMode && options.wagmi) {
148
+ logger.info("FormoAnalytics: Initializing in Wagmi mode");
149
+ this.wagmiHandler = new WagmiEventHandler(this, options.wagmi.config, options.wagmi.queryClient);
136
150
  }
137
- else if (typeof window !== "undefined" && window.ethereum) {
138
- provider = window.ethereum;
139
- }
140
- if (provider) {
141
- this.trackProvider(provider);
151
+ else {
152
+ // Handle initial provider (injected) as fallback; listeners for EIP-6963 are added later
153
+ var provider = undefined;
154
+ var optProvider = options.provider;
155
+ if (optProvider) {
156
+ provider = optProvider;
157
+ }
158
+ else if (typeof window !== "undefined" && window.ethereum) {
159
+ provider = window.ethereum;
160
+ }
161
+ if (provider) {
162
+ this.trackEIP1193Provider(provider);
163
+ }
142
164
  }
143
165
  this.trackPageHit();
144
166
  this.trackPageHits();
@@ -153,18 +175,6 @@ var FormoAnalytics = /** @class */ (function () {
153
175
  // This allows legitimate provider switching while preventing race conditions
154
176
  return this._provider != null && this._provider !== provider;
155
177
  };
156
- /**
157
- * Check if a provider is in a valid state for switching
158
- * @param provider The provider to validate
159
- * @returns true if the provider is in a valid state
160
- */
161
- FormoAnalytics.prototype.isProviderInValidState = function (provider) {
162
- // Basic validation: ensure provider exists and has required methods
163
- return (provider &&
164
- typeof provider.request === "function" &&
165
- typeof provider.on === "function" &&
166
- typeof provider.removeListener === "function");
167
- };
168
178
  FormoAnalytics.init = function (writeKey, options) {
169
179
  return __awaiter(this, void 0, void 0, function () {
170
180
  var analytics, _a;
@@ -173,6 +183,7 @@ var FormoAnalytics = /** @class */ (function () {
173
183
  case 0:
174
184
  initStorageManager(writeKey);
175
185
  analytics = new FormoAnalytics(writeKey, options);
186
+ if (!!analytics.isWagmiMode) return [3 /*break*/, 3];
176
187
  // Auto-detect wallet provider
177
188
  _a = analytics;
178
189
  return [4 /*yield*/, analytics.getProviders()];
@@ -183,7 +194,11 @@ var FormoAnalytics = /** @class */ (function () {
183
194
  case 2:
184
195
  _b.sent();
185
196
  analytics.trackProviders(analytics._providers);
186
- return [2 /*return*/, analytics];
197
+ return [3 /*break*/, 4];
198
+ case 3:
199
+ logger.info("FormoAnalytics: Skipping provider detection (Wagmi mode)");
200
+ _b.label = 4;
201
+ case 4: return [2 /*return*/, analytics];
187
202
  }
188
203
  });
189
204
  });
@@ -223,6 +238,27 @@ var FormoAnalytics = /** @class */ (function () {
223
238
  cookie().remove(SESSION_WALLET_DETECTED_KEY);
224
239
  cookie().remove(SESSION_WALLET_IDENTIFIED_KEY);
225
240
  };
241
+ /**
242
+ * Clean up resources and event listeners
243
+ * Call this when destroying the analytics instance
244
+ * @returns {void}
245
+ */
246
+ FormoAnalytics.prototype.cleanup = function () {
247
+ logger.info("FormoAnalytics: Cleaning up resources");
248
+ // Clean up Wagmi handler if present
249
+ if (this.wagmiHandler) {
250
+ this.wagmiHandler.cleanup();
251
+ this.wagmiHandler = undefined;
252
+ }
253
+ // Clean up EIP-1193 providers if not in Wagmi mode
254
+ if (!this.isWagmiMode) {
255
+ for (var _i = 0, _a = Array.from(this._trackedProviders); _i < _a.length; _i++) {
256
+ var provider = _a[_i];
257
+ this.untrackProvider(provider);
258
+ }
259
+ }
260
+ logger.info("FormoAnalytics: Cleanup complete");
261
+ };
226
262
  /**
227
263
  * Emits a connect wallet event.
228
264
  * @param {ChainID} params.chainId
@@ -387,10 +423,10 @@ var FormoAnalytics = /** @class */ (function () {
387
423
  */
388
424
  FormoAnalytics.prototype.transaction = function (_a, properties_1, context_1, callback_1) {
389
425
  return __awaiter(this, arguments, void 0, function (_b, properties, context, callback) {
390
- var status = _b.status, chainId = _b.chainId, address = _b.address, data = _b.data, to = _b.to, value = _b.value, transactionHash = _b.transactionHash;
426
+ 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;
391
427
  return __generator(this, function (_c) {
392
428
  switch (_c.label) {
393
- case 0: return [4 /*yield*/, this.trackEvent(EventType.TRANSACTION, __assign({ status: status, chainId: chainId, address: address, data: data, to: to, value: value }, (transactionHash && { transactionHash: transactionHash })), properties, context, callback)];
429
+ case 0: return [4 /*yield*/, this.trackEvent(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)];
394
430
  case 1:
395
431
  _c.sent();
396
432
  return [2 /*return*/];
@@ -612,13 +648,29 @@ var FormoAnalytics = /** @class */ (function () {
612
648
  /*
613
649
  SDK tracking and event listener functions
614
650
  */
615
- FormoAnalytics.prototype.trackProvider = function (provider) {
616
- logger.info("trackProvider", provider);
651
+ /**
652
+ * Track an EIP-1193 provider by wrapping its request method and adding event listeners
653
+ * Note: This is only used in non-Wagmi mode. When Wagmi is enabled, all tracking
654
+ * happens through Wagmi's connector system instead of EIP-1193/EIP-6963.
655
+ * @param provider The EIP-1193 provider to track
656
+ */
657
+ FormoAnalytics.prototype.trackEIP1193Provider = function (provider) {
658
+ logger.info("trackEIP1193Provider", provider);
659
+ // Defensive check: Skip provider tracking in Wagmi mode
660
+ // This should never be called in Wagmi mode due to guards in init(),
661
+ // but we check here for safety in case of future code changes
662
+ if (this.isWagmiMode) {
663
+ logger.debug("trackEIP1193Provider: Skipping EIP-1193 provider tracking (Wagmi mode - using connector system instead)");
664
+ return;
665
+ }
617
666
  try {
618
- if (!provider)
667
+ // Validate provider exists and has required methods
668
+ if (!isValidProvider(provider)) {
669
+ logger.warn("trackEIP1193Provider: Invalid provider - missing required methods");
619
670
  return;
671
+ }
620
672
  if (this._trackedProviders.has(provider)) {
621
- logger.warn("TrackProvider: Provider already tracked.");
673
+ logger.warn("trackEIP1193Provider: Provider already tracked");
622
674
  return;
623
675
  }
624
676
  // CRITICAL: Always register accountsChanged for state management
@@ -654,7 +706,7 @@ var FormoAnalytics = /** @class */ (function () {
654
706
  var eip6963ProviderDetail = providers_1[_i];
655
707
  var provider = eip6963ProviderDetail === null || eip6963ProviderDetail === void 0 ? void 0 : eip6963ProviderDetail.provider;
656
708
  if (provider && !this._trackedProviders.has(provider)) {
657
- this.trackProvider(provider);
709
+ this.trackEIP1193Provider(provider);
658
710
  }
659
711
  }
660
712
  }
@@ -1512,60 +1564,12 @@ var FormoAnalytics = /** @class */ (function () {
1512
1564
  };
1513
1565
  }
1514
1566
  // Fallback to injected provider detection
1515
- var injectedInfo = this.detectInjectedProviderInfo(provider);
1567
+ var injectedInfo = detectInjectedProviderInfo(provider);
1516
1568
  return {
1517
1569
  name: injectedInfo.name,
1518
1570
  rdns: injectedInfo.rdns,
1519
1571
  };
1520
1572
  };
1521
- /**
1522
- * Attempts to detect information about an injected provider
1523
- * @param provider The injected provider to analyze
1524
- * @returns Provider information with fallback values
1525
- */
1526
- FormoAnalytics.prototype.detectInjectedProviderInfo = function (provider) {
1527
- // Try to detect provider type from common properties
1528
- var name = "Injected Provider";
1529
- var rdns = "io.injected.provider";
1530
- // Use WalletProviderFlags interface for type safety
1531
- var flags = provider;
1532
- // Check if it's MetaMask
1533
- if (flags.isMetaMask) {
1534
- name = "MetaMask";
1535
- rdns = "io.metamask";
1536
- }
1537
- // Check if it's Coinbase Wallet
1538
- else if (flags.isCoinbaseWallet) {
1539
- name = "Coinbase Wallet";
1540
- rdns = "com.coinbase.wallet";
1541
- }
1542
- // Check if it's WalletConnect
1543
- else if (flags.isWalletConnect) {
1544
- name = "WalletConnect";
1545
- rdns = "com.walletconnect";
1546
- }
1547
- // Check if it's Trust Wallet
1548
- else if (flags.isTrust) {
1549
- name = "Trust Wallet";
1550
- rdns = "com.trustwallet";
1551
- }
1552
- // Check if it's Brave Wallet
1553
- else if (flags.isBraveWallet) {
1554
- name = "Brave Wallet";
1555
- rdns = "com.brave.wallet";
1556
- }
1557
- // Check if it's Phantom
1558
- else if (flags.isPhantom) {
1559
- name = "Phantom";
1560
- rdns = "app.phantom";
1561
- }
1562
- return {
1563
- name: name,
1564
- rdns: rdns,
1565
- uuid: "injected-".concat(rdns.replace(/[^a-zA-Z0-9]/g, "-")),
1566
- icon: DEFAULT_PROVIDER_ICON,
1567
- };
1568
- };
1569
1573
  FormoAnalytics.prototype.getProviders = function () {
1570
1574
  return __awaiter(this, void 0, void 0, function () {
1571
1575
  var store, providers, injected_1, injectedProviderInfo, injectedDetail, uniqueProviders, _i, uniqueProviders_1, detail;
@@ -1624,7 +1628,7 @@ var FormoAnalytics = /** @class */ (function () {
1624
1628
  this._injectedProviderDetail.provider === injected_1) {
1625
1629
  // Ensure it's tracked
1626
1630
  if (!this._trackedProviders.has(injected_1)) {
1627
- this.trackProvider(injected_1);
1631
+ this.trackEIP1193Provider(injected_1);
1628
1632
  }
1629
1633
  // Merge with existing providers instead of overwriting
1630
1634
  if (!this._providers.some(function (existing) { return existing.provider === injected_1; })) {
@@ -1636,9 +1640,9 @@ var FormoAnalytics = /** @class */ (function () {
1636
1640
  }
1637
1641
  // Re-check if the injected provider is already tracked just before tracking
1638
1642
  if (!this._trackedProviders.has(injected_1)) {
1639
- this.trackProvider(injected_1);
1643
+ this.trackEIP1193Provider(injected_1);
1640
1644
  }
1641
- injectedProviderInfo = this.detectInjectedProviderInfo(injected_1);
1645
+ injectedProviderInfo = detectInjectedProviderInfo(injected_1);
1642
1646
  injectedDetail = {
1643
1647
  provider: injected_1,
1644
1648
  info: injectedProviderInfo,
@@ -2040,67 +2044,4 @@ var FormoAnalytics = /** @class */ (function () {
2040
2044
  return FormoAnalytics;
2041
2045
  }());
2042
2046
  export { FormoAnalytics };
2043
- var FormoAnalyticsSession = /** @class */ (function () {
2044
- function FormoAnalyticsSession() {
2045
- }
2046
- FormoAnalyticsSession.prototype.generateIdentificationKey = function (address, rdns) {
2047
- // If rdns is missing, use address-only key as fallback for empty identifies
2048
- return rdns ? "".concat(address, ":").concat(rdns) : address;
2049
- };
2050
- FormoAnalyticsSession.prototype.isWalletDetected = function (rdns) {
2051
- var _a;
2052
- var rdnses = ((_a = cookie().get(SESSION_WALLET_DETECTED_KEY)) === null || _a === void 0 ? void 0 : _a.split(",")) || [];
2053
- return rdnses.includes(rdns);
2054
- };
2055
- FormoAnalyticsSession.prototype.markWalletDetected = function (rdns) {
2056
- var _a;
2057
- var rdnses = ((_a = cookie().get(SESSION_WALLET_DETECTED_KEY)) === null || _a === void 0 ? void 0 : _a.split(",")) || [];
2058
- if (!rdnses.includes(rdns)) {
2059
- rdnses.push(rdns);
2060
- cookie().set(SESSION_WALLET_DETECTED_KEY, rdnses.join(","), {
2061
- // by the end of the day
2062
- expires: new Date(Date.now() + 86400 * 1000).toUTCString(),
2063
- path: "/",
2064
- });
2065
- }
2066
- };
2067
- FormoAnalyticsSession.prototype.isWalletIdentified = function (address, rdns) {
2068
- var identifiedKey = this.generateIdentificationKey(address, rdns);
2069
- var cookieValue = cookie().get(SESSION_WALLET_IDENTIFIED_KEY);
2070
- var identifiedWallets = (cookieValue === null || cookieValue === void 0 ? void 0 : cookieValue.split(",")) || [];
2071
- var isIdentified = identifiedWallets.includes(identifiedKey);
2072
- logger.debug("Session: Checking wallet identification", {
2073
- identifiedKey: identifiedKey,
2074
- isIdentified: isIdentified,
2075
- hasRdns: !!rdns,
2076
- });
2077
- return isIdentified;
2078
- };
2079
- FormoAnalyticsSession.prototype.markWalletIdentified = function (address, rdns) {
2080
- var _a;
2081
- var identifiedKey = this.generateIdentificationKey(address, rdns);
2082
- var identifiedWallets = ((_a = cookie().get(SESSION_WALLET_IDENTIFIED_KEY)) === null || _a === void 0 ? void 0 : _a.split(",")) || [];
2083
- if (!identifiedWallets.includes(identifiedKey)) {
2084
- identifiedWallets.push(identifiedKey);
2085
- var newValue = identifiedWallets.join(",");
2086
- cookie().set(SESSION_WALLET_IDENTIFIED_KEY, newValue, {
2087
- // by the end of the day
2088
- expires: new Date(Date.now() + 86400 * 1000).toUTCString(),
2089
- path: "/",
2090
- });
2091
- logger.debug("Session: Marked wallet as identified", {
2092
- identifiedKey: identifiedKey,
2093
- hasRdns: !!rdns,
2094
- });
2095
- }
2096
- else {
2097
- logger.info("Session: Wallet already marked as identified", {
2098
- identifiedKey: identifiedKey,
2099
- existingWallets: identifiedWallets,
2100
- hasRdns: !!rdns,
2101
- });
2102
- }
2103
- };
2104
- return FormoAnalyticsSession;
2105
- }());
2106
2047
  //# sourceMappingURL=FormoAnalytics.js.map
@@ -46,13 +46,15 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
46
46
  }
47
47
  };
48
48
  import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
49
- import { createContext, useContext, useEffect, useRef, useState } from "react";
49
+ import { createContext, useContext, useEffect, useMemo, useRef, useState } from "react";
50
50
  import { FormoAnalytics } from "./FormoAnalytics";
51
- import { initStorageManager, logger } from "./lib";
51
+ import { initStorageManager } from "./storage";
52
+ import { logger } from "./logger";
52
53
  var defaultContext = {
53
54
  chain: function () { return Promise.resolve(); },
54
55
  page: function () { return Promise.resolve(); },
55
56
  reset: function () { },
57
+ cleanup: function () { },
56
58
  detect: function () { return Promise.resolve(); },
57
59
  connect: function () { return Promise.resolve(); },
58
60
  disconnect: function () { return Promise.resolve(); },
@@ -82,36 +84,92 @@ export var FormoAnalyticsProvider = function (props) {
82
84
  var InitializedAnalytics = function (_a) {
83
85
  var writeKey = _a.writeKey, options = _a.options, children = _a.children;
84
86
  var _b = useState(defaultContext), sdk = _b[0], setSdk = _b[1];
85
- var initializedStartedRef = useRef(false);
87
+ var sdkRef = useRef(defaultContext);
86
88
  initStorageManager(writeKey);
89
+ // Create a stable key from options that ignores complex objects and functions
90
+ // We only care about serializable config values that would affect SDK behavior
91
+ var optionsKey = useMemo(function () {
92
+ if (!options)
93
+ return 'undefined';
94
+ // Extract only the serializable parts of options
95
+ var serializableOptions = {
96
+ tracking: options.tracking,
97
+ autocapture: options.autocapture,
98
+ apiHost: options.apiHost,
99
+ flushAt: options.flushAt,
100
+ flushInterval: options.flushInterval,
101
+ retryCount: options.retryCount,
102
+ maxQueueSize: options.maxQueueSize,
103
+ logger: options.logger,
104
+ referral: options.referral,
105
+ // For complex objects, just track their presence, not their content
106
+ hasProvider: !!options.provider,
107
+ hasWagmi: !!options.wagmi,
108
+ hasReady: !!options.ready,
109
+ };
110
+ try {
111
+ return JSON.stringify(serializableOptions);
112
+ }
113
+ catch (error) {
114
+ // Fallback to timestamp if serialization fails
115
+ logger.warn('Failed to serialize options, using timestamp', error);
116
+ return Date.now().toString();
117
+ }
118
+ }, [options]);
87
119
  useEffect(function () {
120
+ var isCleanedUp = false;
88
121
  var initialize = function () { return __awaiter(void 0, void 0, void 0, function () {
89
122
  var sdkInstance, error_1;
90
123
  return __generator(this, function (_a) {
91
124
  switch (_a.label) {
92
125
  case 0:
93
- if (initializedStartedRef.current)
94
- return [2 /*return*/];
95
- initializedStartedRef.current = true;
126
+ // Clean up existing SDK instance before creating a new one
127
+ if (sdkRef.current && sdkRef.current !== defaultContext) {
128
+ logger.log("Cleaning up existing FormoAnalytics SDK instance before re-initialization");
129
+ sdkRef.current.cleanup();
130
+ sdkRef.current = defaultContext;
131
+ setSdk(defaultContext);
132
+ }
96
133
  _a.label = 1;
97
134
  case 1:
98
135
  _a.trys.push([1, 3, , 4]);
99
136
  return [4 /*yield*/, FormoAnalytics.init(writeKey, options)];
100
137
  case 2:
101
138
  sdkInstance = _a.sent();
102
- setSdk(sdkInstance);
103
- logger.log("Successfully initialized");
139
+ // Only set SDK if the component hasn't been cleaned up during async initialization
140
+ if (!isCleanedUp) {
141
+ setSdk(sdkInstance);
142
+ sdkRef.current = sdkInstance;
143
+ logger.log("Successfully initialized FormoAnalytics SDK");
144
+ }
145
+ else {
146
+ // Component was unmounted during initialization, clean up immediately
147
+ logger.log("Component unmounted during initialization, cleaning up SDK");
148
+ sdkInstance.cleanup();
149
+ }
104
150
  return [3 /*break*/, 4];
105
151
  case 3:
106
152
  error_1 = _a.sent();
107
- logger.error("Failed to initialize", error_1);
153
+ if (!isCleanedUp) {
154
+ logger.error("Failed to initialize FormoAnalytics SDK", error_1);
155
+ }
108
156
  return [3 /*break*/, 4];
109
157
  case 4: return [2 /*return*/];
110
158
  }
111
159
  });
112
160
  }); };
113
161
  initialize();
114
- }, [writeKey, options]);
162
+ // Cleanup function to prevent memory leaks
163
+ // Using ref ensures we clean up the actual SDK instance, not the stale closure value
164
+ return function () {
165
+ isCleanedUp = true;
166
+ if (sdkRef.current && sdkRef.current !== defaultContext) {
167
+ logger.log("Cleaning up FormoAnalytics SDK instance");
168
+ sdkRef.current.cleanup();
169
+ sdkRef.current = defaultContext;
170
+ }
171
+ };
172
+ }, [writeKey, optionsKey]);
115
173
  return (_jsx(FormoAnalyticsContext.Provider, { value: sdk, children: children }));
116
174
  };
117
175
  export var useFormo = function () {
@@ -32,4 +32,4 @@ export declare function getConsentFlag(projectId: string, key: string): string |
32
32
  * @param key - The cookie key
33
33
  */
34
34
  export declare function removeConsentFlag(projectId: string, key: string): void;
35
- //# sourceMappingURL=consent.d.ts.map
35
+ //# sourceMappingURL=index.d.ts.map
@@ -94,4 +94,4 @@ function deleteCookieDirectly(cookieName) {
94
94
  }
95
95
  }
96
96
  }
97
- //# sourceMappingURL=consent.js.map
97
+ //# sourceMappingURL=index.js.map
@@ -1,6 +1,4 @@
1
1
  export declare const SESSION_TRAFFIC_SOURCE_KEY = "traffic-source";
2
- export declare const SESSION_WALLET_DETECTED_KEY = "wallet-detected";
3
- export declare const SESSION_WALLET_IDENTIFIED_KEY = "wallet-identified";
4
2
  export declare const SESSION_CURRENT_URL_KEY = "analytics-current-url";
5
3
  export declare const SESSION_USER_ID_KEY = "user-id";
6
4
  export declare const LOCAL_ANONYMOUS_ID_KEY = "anonymous-id";
@@ -1,6 +1,6 @@
1
1
  export var SESSION_TRAFFIC_SOURCE_KEY = "traffic-source";
2
- export var SESSION_WALLET_DETECTED_KEY = "wallet-detected";
3
- export var SESSION_WALLET_IDENTIFIED_KEY = "wallet-identified";
2
+ // SESSION_WALLET_DETECTED_KEY and SESSION_WALLET_IDENTIFIED_KEY
3
+ // are now defined in src/session/index.ts
4
4
  export var SESSION_CURRENT_URL_KEY = "analytics-current-url";
5
5
  export var SESSION_USER_ID_KEY = "user-id";
6
6
  export var LOCAL_ANONYMOUS_ID_KEY = "anonymous-id";
@@ -2,7 +2,7 @@ export var EVENTS_API_ORIGIN = "https://events.formo.so";
2
2
  export var EVENTS_API_HOST = "".concat(EVENTS_API_ORIGIN, "/v0/raw_events");
3
3
  export var EVENTS_API_REQUEST_HEADER = function (writeKey) { return ({
4
4
  "Content-Type": "application/json",
5
- Authorization: "Basic ".concat(writeKey),
5
+ Authorization: "Bearer ".concat(writeKey),
6
6
  }); };
7
7
  export var COUNTRY_LIST = {
8
8
  // Africa
@@ -1,4 +1,4 @@
1
- import { Address, APIEvent, ChainID, IFormoEvent, IFormoEventContext, IFormoEventProperties, Nullable, Options, SignatureStatus, TransactionStatus } from "../../types";
1
+ import { Address, APIEvent, ChainID, IFormoEvent, IFormoEventContext, IFormoEventProperties, Nullable, Options, SignatureStatus, TransactionStatus } from "../types";
2
2
  import { IEventFactory } from "./type";
3
3
  declare class EventFactory implements IEventFactory {
4
4
  private options?;
@@ -27,7 +27,7 @@ declare class EventFactory implements IEventFactory {
27
27
  generateDisconnectEvent(chainId?: ChainID, address?: Address, properties?: IFormoEventProperties, context?: IFormoEventContext): Promise<IFormoEvent>;
28
28
  generateChainChangedEvent(chainId: ChainID, address: Address, properties?: IFormoEventProperties, context?: IFormoEventContext): Promise<IFormoEvent>;
29
29
  generateSignatureEvent(status: SignatureStatus, chainId: ChainID, address: Address, message: string, signatureHash?: string, properties?: IFormoEventProperties, context?: IFormoEventContext): Promise<IFormoEvent>;
30
- generateTransactionEvent(status: TransactionStatus, chainId: ChainID, address: Address, data: string, to: string, value: string, transactionHash?: string, properties?: IFormoEventProperties, context?: IFormoEventContext): Promise<IFormoEvent>;
30
+ generateTransactionEvent(status: TransactionStatus, chainId: ChainID, address: Address, data?: string, to?: string, value?: string, transactionHash?: string, function_name?: string, function_args?: Record<string, unknown>, properties?: IFormoEventProperties, context?: IFormoEventContext): Promise<IFormoEvent>;
31
31
  generateTrackEvent(event: string, properties?: IFormoEventProperties, context?: IFormoEventContext): Promise<IFormoEvent>;
32
32
  create(event: APIEvent, address?: Address, userId?: string): Promise<IFormoEvent>;
33
33
  }
@@ -45,15 +45,15 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
45
45
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
46
  }
47
47
  };
48
- import { COUNTRY_LIST, LOCAL_ANONYMOUS_ID_KEY, SESSION_TRAFFIC_SOURCE_KEY, } from "../../constants";
49
- import { toChecksumAddress, toSnakeCase } from "../../utils";
50
- import { getValidAddress } from "../../utils/address";
51
- import { getCurrentTimeFormatted } from "../../utils/timestamp";
52
- import { isUndefined } from "../../validators";
48
+ import { COUNTRY_LIST, LOCAL_ANONYMOUS_ID_KEY, SESSION_TRAFFIC_SOURCE_KEY, } from "../constants";
49
+ import { toChecksumAddress, toSnakeCase } from "../utils";
50
+ import { getValidAddress } from "../utils/address";
51
+ import { getCurrentTimeFormatted } from "../utils/timestamp";
52
+ import { isUndefined } from "../validators";
53
53
  import { logger } from "../logger";
54
54
  import mergeDeepRight from "../ramda/mergeDeepRight";
55
55
  import { session } from "../storage";
56
- import { version } from "../../version";
56
+ import { version } from "../version";
57
57
  import { CHANNEL, VERSION, PAGE_PROPERTIES_EXCLUDED_FIELDS } from "./constants";
58
58
  import { generateAnonymousId } from "./utils";
59
59
  import { detectBrowser } from "../browser/browsers";
@@ -403,12 +403,12 @@ var EventFactory = /** @class */ (function () {
403
403
  });
404
404
  });
405
405
  };
406
- EventFactory.prototype.generateTransactionEvent = function (status, chainId, address, data, to, value, transactionHash, properties, context) {
406
+ EventFactory.prototype.generateTransactionEvent = function (status, chainId, address, data, to, value, transactionHash, function_name, function_args, properties, context) {
407
407
  return __awaiter(this, void 0, void 0, function () {
408
408
  var transactionEvent;
409
409
  return __generator(this, function (_a) {
410
410
  transactionEvent = {
411
- properties: __assign(__assign({ status: status, chainId: chainId, data: data, to: to, value: value }, (transactionHash && { transactionHash: transactionHash })), properties),
411
+ properties: __assign(__assign(__assign(__assign(__assign(__assign(__assign({ status: status, chainId: chainId }, (data && { data: data })), (to && { to: to })), (value && { value: value })), (transactionHash && { transactionHash: transactionHash })), (function_name && { function_name: function_name })), (function_args && { function_args: function_args })), properties),
412
412
  address: address,
413
413
  type: "transaction",
414
414
  };
@@ -487,7 +487,7 @@ var EventFactory = /** @class */ (function () {
487
487
  case 14:
488
488
  formoEvent = _b.sent();
489
489
  return [3 /*break*/, 19];
490
- case 15: return [4 /*yield*/, this.generateTransactionEvent(event.status, event.chainId, event.address, event.data, event.to, event.value, event.transactionHash, event.properties, event.context)];
490
+ case 15: return [4 /*yield*/, this.generateTransactionEvent(event.status, event.chainId, event.address, event.data, event.to, event.value, event.transactionHash, event.function_name, event.function_args, event.properties, event.context)];
491
491
  case 16:
492
492
  formoEvent = _b.sent();
493
493
  return [3 /*break*/, 19];
@@ -1,4 +1,4 @@
1
- import { Address, APIEvent, Options } from "../../types";
1
+ import { Address, APIEvent, Options } from "../types";
2
2
  import { IEventQueue } from "../queue";
3
3
  import { IEventFactory, IEventManager } from "./type";
4
4
  /**
@@ -47,7 +47,7 @@ var __rest = (this && this.__rest) || function (s, e) {
47
47
  };
48
48
  import { logger } from "../logger";
49
49
  import { EventFactory } from "./EventFactory";
50
- import { isBlockedAddress } from "../../utils/address";
50
+ import { isBlockedAddress } from "../utils/address";
51
51
  /**
52
52
  * A service to generate valid event payloads and queue them for processing
53
53
  */
@@ -1,4 +1,4 @@
1
- import { Address, APIEvent, IFormoEvent } from "../../types";
1
+ import { Address, APIEvent, IFormoEvent } from "../types";
2
2
  export interface IEventManager {
3
3
  addEvent(event: APIEvent, address?: Address, userId?: string): Promise<void>;
4
4
  }
@@ -1,4 +1,4 @@
1
- import { AnonymousID } from "../../types";
1
+ import { AnonymousID } from "../types";
2
2
  declare const generateAnonymousId: (key: string) => AnonymousID;
3
3
  declare function getCookieDomain(hostname?: string): string;
4
4
  export { generateAnonymousId, getCookieDomain };
@@ -1,4 +1,4 @@
1
- import { generateNativeUUID } from "../../utils";
1
+ import { generateNativeUUID } from "../utils";
2
2
  import { cookie } from "../storage";
3
3
  var generateAnonymousId = function (key) {
4
4
  var storedAnonymousId = cookie().get(key);
@@ -0,0 +1,11 @@
1
+ export interface FetchRetryError extends Error {
2
+ response?: Response;
3
+ }
4
+ type RetryOptions = {
5
+ retries?: number;
6
+ retryDelay?: (attempt: number) => number;
7
+ retryOn?: (attempt: number, error: FetchRetryError | null, response: Response | null) => boolean;
8
+ };
9
+ declare function fetchWithRetry(input: RequestInfo | URL, init?: RequestInit & RetryOptions): Promise<Response>;
10
+ export default fetchWithRetry;
11
+ //# sourceMappingURL=index.d.ts.map