@formo/analytics-react-native 0.1.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 (247) hide show
  1. package/README.md +302 -0
  2. package/lib/commonjs/FormoAnalytics.js +526 -0
  3. package/lib/commonjs/FormoAnalytics.js.map +1 -0
  4. package/lib/commonjs/FormoAnalyticsProvider.js +265 -0
  5. package/lib/commonjs/FormoAnalyticsProvider.js.map +1 -0
  6. package/lib/commonjs/constants/config.js +69 -0
  7. package/lib/commonjs/constants/config.js.map +1 -0
  8. package/lib/commonjs/constants/events.js +30 -0
  9. package/lib/commonjs/constants/events.js.map +1 -0
  10. package/lib/commonjs/constants/index.js +39 -0
  11. package/lib/commonjs/constants/index.js.map +1 -0
  12. package/lib/commonjs/constants/storage.js +23 -0
  13. package/lib/commonjs/constants/storage.js.map +1 -0
  14. package/lib/commonjs/index.js +65 -0
  15. package/lib/commonjs/index.js.map +1 -0
  16. package/lib/commonjs/lib/consent/index.js +56 -0
  17. package/lib/commonjs/lib/consent/index.js.map +1 -0
  18. package/lib/commonjs/lib/event/EventFactory.js +493 -0
  19. package/lib/commonjs/lib/event/EventFactory.js.map +1 -0
  20. package/lib/commonjs/lib/event/EventManager.js +46 -0
  21. package/lib/commonjs/lib/event/EventManager.js.map +1 -0
  22. package/lib/commonjs/lib/event/EventQueue.js +290 -0
  23. package/lib/commonjs/lib/event/EventQueue.js.map +1 -0
  24. package/lib/commonjs/lib/event/index.js +50 -0
  25. package/lib/commonjs/lib/event/index.js.map +1 -0
  26. package/lib/commonjs/lib/event/types.js +6 -0
  27. package/lib/commonjs/lib/event/types.js.map +1 -0
  28. package/lib/commonjs/lib/lifecycle/index.js +196 -0
  29. package/lib/commonjs/lib/lifecycle/index.js.map +1 -0
  30. package/lib/commonjs/lib/logger/index.js +48 -0
  31. package/lib/commonjs/lib/logger/index.js.map +1 -0
  32. package/lib/commonjs/lib/session/index.js +109 -0
  33. package/lib/commonjs/lib/session/index.js.map +1 -0
  34. package/lib/commonjs/lib/storage/AsyncStorageAdapter.js +164 -0
  35. package/lib/commonjs/lib/storage/AsyncStorageAdapter.js.map +1 -0
  36. package/lib/commonjs/lib/storage/MemoryStorage.js +41 -0
  37. package/lib/commonjs/lib/storage/MemoryStorage.js.map +1 -0
  38. package/lib/commonjs/lib/storage/StorageBlueprint.js +24 -0
  39. package/lib/commonjs/lib/storage/StorageBlueprint.js.map +1 -0
  40. package/lib/commonjs/lib/storage/StorageManager.js +126 -0
  41. package/lib/commonjs/lib/storage/StorageManager.js.map +1 -0
  42. package/lib/commonjs/lib/storage/index.js +49 -0
  43. package/lib/commonjs/lib/storage/index.js.map +1 -0
  44. package/lib/commonjs/lib/storage/types.js +2 -0
  45. package/lib/commonjs/lib/storage/types.js.map +1 -0
  46. package/lib/commonjs/lib/wagmi/WagmiEventHandler.js +445 -0
  47. package/lib/commonjs/lib/wagmi/WagmiEventHandler.js.map +1 -0
  48. package/lib/commonjs/lib/wagmi/index.js +28 -0
  49. package/lib/commonjs/lib/wagmi/index.js.map +1 -0
  50. package/lib/commonjs/lib/wagmi/types.js +2 -0
  51. package/lib/commonjs/lib/wagmi/types.js.map +1 -0
  52. package/lib/commonjs/types/base.js +6 -0
  53. package/lib/commonjs/types/base.js.map +1 -0
  54. package/lib/commonjs/types/events.js +22 -0
  55. package/lib/commonjs/types/events.js.map +1 -0
  56. package/lib/commonjs/types/index.js +28 -0
  57. package/lib/commonjs/types/index.js.map +1 -0
  58. package/lib/commonjs/utils/address.js +82 -0
  59. package/lib/commonjs/utils/address.js.map +1 -0
  60. package/lib/commonjs/utils/hash.js +30 -0
  61. package/lib/commonjs/utils/hash.js.map +1 -0
  62. package/lib/commonjs/utils/helpers.js +116 -0
  63. package/lib/commonjs/utils/helpers.js.map +1 -0
  64. package/lib/commonjs/utils/index.js +61 -0
  65. package/lib/commonjs/utils/index.js.map +1 -0
  66. package/lib/commonjs/utils/timestamp.js +34 -0
  67. package/lib/commonjs/utils/timestamp.js.map +1 -0
  68. package/lib/commonjs/utils/trafficSource.js +147 -0
  69. package/lib/commonjs/utils/trafficSource.js.map +1 -0
  70. package/lib/commonjs/version.js +10 -0
  71. package/lib/commonjs/version.js.map +1 -0
  72. package/lib/module/FormoAnalytics.js +519 -0
  73. package/lib/module/FormoAnalytics.js.map +1 -0
  74. package/lib/module/FormoAnalyticsProvider.js +256 -0
  75. package/lib/module/FormoAnalyticsProvider.js.map +1 -0
  76. package/lib/module/constants/config.js +62 -0
  77. package/lib/module/constants/config.js.map +1 -0
  78. package/lib/module/constants/events.js +24 -0
  79. package/lib/module/constants/events.js.map +1 -0
  80. package/lib/module/constants/index.js +4 -0
  81. package/lib/module/constants/index.js.map +1 -0
  82. package/lib/module/constants/storage.js +17 -0
  83. package/lib/module/constants/storage.js.map +1 -0
  84. package/lib/module/index.js +51 -0
  85. package/lib/module/index.js.map +1 -0
  86. package/lib/module/lib/consent/index.js +49 -0
  87. package/lib/module/lib/consent/index.js.map +1 -0
  88. package/lib/module/lib/event/EventFactory.js +488 -0
  89. package/lib/module/lib/event/EventFactory.js.map +1 -0
  90. package/lib/module/lib/event/EventManager.js +41 -0
  91. package/lib/module/lib/event/EventManager.js.map +1 -0
  92. package/lib/module/lib/event/EventQueue.js +283 -0
  93. package/lib/module/lib/event/EventQueue.js.map +1 -0
  94. package/lib/module/lib/event/index.js +5 -0
  95. package/lib/module/lib/event/index.js.map +1 -0
  96. package/lib/module/lib/event/types.js +2 -0
  97. package/lib/module/lib/event/types.js.map +1 -0
  98. package/lib/module/lib/lifecycle/index.js +190 -0
  99. package/lib/module/lib/lifecycle/index.js.map +1 -0
  100. package/lib/module/lib/logger/index.js +42 -0
  101. package/lib/module/lib/logger/index.js.map +1 -0
  102. package/lib/module/lib/session/index.js +92 -0
  103. package/lib/module/lib/session/index.js.map +1 -0
  104. package/lib/module/lib/storage/AsyncStorageAdapter.js +158 -0
  105. package/lib/module/lib/storage/AsyncStorageAdapter.js.map +1 -0
  106. package/lib/module/lib/storage/MemoryStorage.js +35 -0
  107. package/lib/module/lib/storage/MemoryStorage.js.map +1 -0
  108. package/lib/module/lib/storage/StorageBlueprint.js +18 -0
  109. package/lib/module/lib/storage/StorageBlueprint.js.map +1 -0
  110. package/lib/module/lib/storage/StorageManager.js +115 -0
  111. package/lib/module/lib/storage/StorageManager.js.map +1 -0
  112. package/lib/module/lib/storage/index.js +5 -0
  113. package/lib/module/lib/storage/index.js.map +1 -0
  114. package/lib/module/lib/storage/types.js +2 -0
  115. package/lib/module/lib/storage/types.js.map +1 -0
  116. package/lib/module/lib/wagmi/WagmiEventHandler.js +439 -0
  117. package/lib/module/lib/wagmi/WagmiEventHandler.js.map +1 -0
  118. package/lib/module/lib/wagmi/index.js +3 -0
  119. package/lib/module/lib/wagmi/index.js.map +1 -0
  120. package/lib/module/lib/wagmi/types.js +2 -0
  121. package/lib/module/lib/wagmi/types.js.map +1 -0
  122. package/lib/module/types/base.js +2 -0
  123. package/lib/module/types/base.js.map +1 -0
  124. package/lib/module/types/events.js +17 -0
  125. package/lib/module/types/events.js.map +1 -0
  126. package/lib/module/types/index.js +3 -0
  127. package/lib/module/types/index.js.map +1 -0
  128. package/lib/module/utils/address.js +74 -0
  129. package/lib/module/utils/address.js.map +1 -0
  130. package/lib/module/utils/hash.js +24 -0
  131. package/lib/module/utils/hash.js.map +1 -0
  132. package/lib/module/utils/helpers.js +105 -0
  133. package/lib/module/utils/helpers.js.map +1 -0
  134. package/lib/module/utils/index.js +6 -0
  135. package/lib/module/utils/index.js.map +1 -0
  136. package/lib/module/utils/timestamp.js +26 -0
  137. package/lib/module/utils/timestamp.js.map +1 -0
  138. package/lib/module/utils/trafficSource.js +137 -0
  139. package/lib/module/utils/trafficSource.js.map +1 -0
  140. package/lib/module/version.js +4 -0
  141. package/lib/module/version.js.map +1 -0
  142. package/lib/typescript/FormoAnalytics.d.ts +163 -0
  143. package/lib/typescript/FormoAnalytics.d.ts.map +1 -0
  144. package/lib/typescript/FormoAnalyticsProvider.d.ts +29 -0
  145. package/lib/typescript/FormoAnalyticsProvider.d.ts.map +1 -0
  146. package/lib/typescript/constants/config.d.ts +8 -0
  147. package/lib/typescript/constants/config.d.ts.map +1 -0
  148. package/lib/typescript/constants/events.d.ts +23 -0
  149. package/lib/typescript/constants/events.d.ts.map +1 -0
  150. package/lib/typescript/constants/index.d.ts +4 -0
  151. package/lib/typescript/constants/index.d.ts.map +1 -0
  152. package/lib/typescript/constants/storage.d.ts +10 -0
  153. package/lib/typescript/constants/storage.d.ts.map +1 -0
  154. package/lib/typescript/index.d.ts +44 -0
  155. package/lib/typescript/index.d.ts.map +1 -0
  156. package/lib/typescript/lib/consent/index.d.ts +13 -0
  157. package/lib/typescript/lib/consent/index.d.ts.map +1 -0
  158. package/lib/typescript/lib/event/EventFactory.d.ts +61 -0
  159. package/lib/typescript/lib/event/EventFactory.d.ts.map +1 -0
  160. package/lib/typescript/lib/event/EventManager.d.ts +17 -0
  161. package/lib/typescript/lib/event/EventManager.d.ts.map +1 -0
  162. package/lib/typescript/lib/event/EventQueue.d.ts +74 -0
  163. package/lib/typescript/lib/event/EventQueue.d.ts.map +1 -0
  164. package/lib/typescript/lib/event/index.d.ts +5 -0
  165. package/lib/typescript/lib/event/index.d.ts.map +1 -0
  166. package/lib/typescript/lib/event/types.d.ts +23 -0
  167. package/lib/typescript/lib/event/types.d.ts.map +1 -0
  168. package/lib/typescript/lib/lifecycle/index.d.ts +46 -0
  169. package/lib/typescript/lib/lifecycle/index.d.ts.map +1 -0
  170. package/lib/typescript/lib/logger/index.d.ts +19 -0
  171. package/lib/typescript/lib/logger/index.d.ts.map +1 -0
  172. package/lib/typescript/lib/session/index.d.ts +41 -0
  173. package/lib/typescript/lib/session/index.d.ts.map +1 -0
  174. package/lib/typescript/lib/storage/AsyncStorageAdapter.d.ts +48 -0
  175. package/lib/typescript/lib/storage/AsyncStorageAdapter.d.ts.map +1 -0
  176. package/lib/typescript/lib/storage/MemoryStorage.d.ts +18 -0
  177. package/lib/typescript/lib/storage/MemoryStorage.d.ts.map +1 -0
  178. package/lib/typescript/lib/storage/StorageBlueprint.d.ts +21 -0
  179. package/lib/typescript/lib/storage/StorageBlueprint.d.ts.map +1 -0
  180. package/lib/typescript/lib/storage/StorageManager.d.ts +45 -0
  181. package/lib/typescript/lib/storage/StorageManager.d.ts.map +1 -0
  182. package/lib/typescript/lib/storage/index.d.ts +5 -0
  183. package/lib/typescript/lib/storage/index.d.ts.map +1 -0
  184. package/lib/typescript/lib/storage/types.d.ts +22 -0
  185. package/lib/typescript/lib/storage/types.d.ts.map +1 -0
  186. package/lib/typescript/lib/wagmi/WagmiEventHandler.d.ts +104 -0
  187. package/lib/typescript/lib/wagmi/WagmiEventHandler.d.ts.map +1 -0
  188. package/lib/typescript/lib/wagmi/index.d.ts +3 -0
  189. package/lib/typescript/lib/wagmi/index.d.ts.map +1 -0
  190. package/lib/typescript/lib/wagmi/types.d.ts +54 -0
  191. package/lib/typescript/lib/wagmi/types.d.ts.map +1 -0
  192. package/lib/typescript/types/base.d.ts +219 -0
  193. package/lib/typescript/types/base.d.ts.map +1 -0
  194. package/lib/typescript/types/events.d.ts +111 -0
  195. package/lib/typescript/types/events.d.ts.map +1 -0
  196. package/lib/typescript/types/index.d.ts +3 -0
  197. package/lib/typescript/types/index.d.ts.map +1 -0
  198. package/lib/typescript/utils/address.d.ts +25 -0
  199. package/lib/typescript/utils/address.d.ts.map +1 -0
  200. package/lib/typescript/utils/hash.d.ts +10 -0
  201. package/lib/typescript/utils/hash.d.ts.map +1 -0
  202. package/lib/typescript/utils/helpers.d.ts +26 -0
  203. package/lib/typescript/utils/helpers.d.ts.map +1 -0
  204. package/lib/typescript/utils/index.d.ts +6 -0
  205. package/lib/typescript/utils/index.d.ts.map +1 -0
  206. package/lib/typescript/utils/timestamp.d.ts +13 -0
  207. package/lib/typescript/utils/timestamp.d.ts.map +1 -0
  208. package/lib/typescript/utils/trafficSource.d.ts +30 -0
  209. package/lib/typescript/utils/trafficSource.d.ts.map +1 -0
  210. package/lib/typescript/version.d.ts +2 -0
  211. package/lib/typescript/version.d.ts.map +1 -0
  212. package/package.json +143 -0
  213. package/src/FormoAnalytics.ts +685 -0
  214. package/src/FormoAnalyticsProvider.tsx +296 -0
  215. package/src/constants/config.ts +62 -0
  216. package/src/constants/events.ts +26 -0
  217. package/src/constants/index.ts +3 -0
  218. package/src/constants/storage.ts +16 -0
  219. package/src/index.ts +55 -0
  220. package/src/lib/consent/index.ts +52 -0
  221. package/src/lib/event/EventFactory.ts +682 -0
  222. package/src/lib/event/EventManager.ts +50 -0
  223. package/src/lib/event/EventQueue.ts +371 -0
  224. package/src/lib/event/index.ts +4 -0
  225. package/src/lib/event/types.ts +107 -0
  226. package/src/lib/lifecycle/index.ts +215 -0
  227. package/src/lib/logger/index.ts +56 -0
  228. package/src/lib/session/index.ts +103 -0
  229. package/src/lib/storage/AsyncStorageAdapter.ts +173 -0
  230. package/src/lib/storage/MemoryStorage.ts +43 -0
  231. package/src/lib/storage/StorageBlueprint.ts +30 -0
  232. package/src/lib/storage/StorageManager.ts +121 -0
  233. package/src/lib/storage/index.ts +4 -0
  234. package/src/lib/storage/types.ts +23 -0
  235. package/src/lib/wagmi/WagmiEventHandler.ts +574 -0
  236. package/src/lib/wagmi/index.ts +2 -0
  237. package/src/lib/wagmi/types.ts +71 -0
  238. package/src/types/base.ts +287 -0
  239. package/src/types/events.ts +140 -0
  240. package/src/types/index.ts +2 -0
  241. package/src/utils/address.ts +84 -0
  242. package/src/utils/hash.ts +23 -0
  243. package/src/utils/helpers.ts +139 -0
  244. package/src/utils/index.ts +5 -0
  245. package/src/utils/timestamp.ts +25 -0
  246. package/src/utils/trafficSource.ts +153 -0
  247. package/src/version.ts +3 -0
@@ -0,0 +1,439 @@
1
+ /**
2
+ * WagmiEventHandler for React Native
3
+ *
4
+ * Handles wallet event tracking by hooking into Wagmi v2's config.subscribe()
5
+ * and TanStack Query's MutationCache.
6
+ */
7
+
8
+ import { SignatureStatus, TransactionStatus } from "../../types/events";
9
+ import { logger } from "../logger";
10
+
11
+ // Interface for FormoAnalytics to avoid circular dependency
12
+
13
+ export class WagmiEventHandler {
14
+ unsubscribers = [];
15
+ trackingState = {
16
+ isProcessing: false
17
+ };
18
+ processedMutations = new Set();
19
+ pendingStatusChanges = [];
20
+ constructor(formoAnalytics, wagmiConfig, queryClient) {
21
+ this.formo = formoAnalytics;
22
+ this.wagmiConfig = wagmiConfig;
23
+ this.queryClient = queryClient;
24
+ logger.info("WagmiEventHandler: Initializing Wagmi integration");
25
+ this.setupConnectionListeners();
26
+ if (this.queryClient) {
27
+ this.setupMutationTracking();
28
+ } else {
29
+ logger.warn("WagmiEventHandler: QueryClient not provided, signature and transaction events will not be tracked");
30
+ }
31
+ }
32
+
33
+ /**
34
+ * Set up listeners for wallet connection, disconnection, and chain changes
35
+ */
36
+ setupConnectionListeners() {
37
+ logger.info("WagmiEventHandler: Setting up connection listeners");
38
+
39
+ // Subscribe to status changes
40
+ const statusUnsubscribe = this.wagmiConfig.subscribe(state => state.status, (status, prevStatus) => {
41
+ this.handleStatusChange(status, prevStatus);
42
+ });
43
+ this.unsubscribers.push(statusUnsubscribe);
44
+
45
+ // Subscribe to chain ID changes
46
+ const chainIdUnsubscribe = this.wagmiConfig.subscribe(state => state.chainId, (chainId, prevChainId) => {
47
+ this.handleChainChange(chainId, prevChainId);
48
+ });
49
+ this.unsubscribers.push(chainIdUnsubscribe);
50
+ logger.info("WagmiEventHandler: Connection listeners set up successfully");
51
+ }
52
+
53
+ // Maximum pending status changes to prevent unbounded queue growth
54
+ static MAX_PENDING_STATUS_CHANGES = 10;
55
+
56
+ /**
57
+ * Handle status changes (connect/disconnect)
58
+ */
59
+ async handleStatusChange(status, prevStatus) {
60
+ if (this.trackingState.isProcessing) {
61
+ // Limit queue size to prevent unbounded growth during rapid status changes
62
+ if (this.pendingStatusChanges.length >= WagmiEventHandler.MAX_PENDING_STATUS_CHANGES) {
63
+ logger.warn("WagmiEventHandler: Pending status change queue full, dropping oldest");
64
+ this.pendingStatusChanges.shift();
65
+ }
66
+ // Queue status change to process after current one completes
67
+ this.pendingStatusChanges.push({
68
+ status,
69
+ prevStatus
70
+ });
71
+ logger.debug("WagmiEventHandler: Queuing status change for later processing");
72
+ return;
73
+ }
74
+ this.trackingState.isProcessing = true;
75
+ try {
76
+ // Process current status change
77
+ await this.processStatusChange(status, prevStatus);
78
+
79
+ // Process pending status changes iteratively (inline, no recursion)
80
+ while (this.pendingStatusChanges.length > 0) {
81
+ const pending = this.pendingStatusChanges.shift();
82
+ await this.processStatusChange(pending.status, pending.prevStatus);
83
+ }
84
+ } finally {
85
+ this.trackingState.isProcessing = false;
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Process a single status change (extracted for iterative processing)
91
+ */
92
+ async processStatusChange(status, prevStatus) {
93
+ try {
94
+ const state = this.getState();
95
+ const address = this.getConnectedAddress(state);
96
+ const chainId = state.chainId;
97
+ logger.info("WagmiEventHandler: Status changed", {
98
+ status,
99
+ prevStatus,
100
+ address,
101
+ chainId
102
+ });
103
+
104
+ // Handle disconnect
105
+ if (status === "disconnected" && prevStatus === "connected") {
106
+ if (this.formo.isAutocaptureEnabled("disconnect")) {
107
+ await this.formo.disconnect({
108
+ chainId: this.trackingState.lastChainId,
109
+ address: this.trackingState.lastAddress
110
+ });
111
+ }
112
+ this.trackingState.lastAddress = undefined;
113
+ this.trackingState.lastChainId = undefined;
114
+ }
115
+
116
+ // Handle connect
117
+ if (status === "connected" && prevStatus !== "connected") {
118
+ if (address && chainId !== undefined) {
119
+ this.trackingState.lastAddress = address;
120
+ this.trackingState.lastChainId = chainId;
121
+ if (this.formo.isAutocaptureEnabled("connect")) {
122
+ const connectorName = this.getConnectorName(state);
123
+ const connectorId = this.getConnectorId(state);
124
+ await this.formo.connect({
125
+ chainId,
126
+ address
127
+ }, {
128
+ ...(connectorName && {
129
+ providerName: connectorName
130
+ }),
131
+ // Connector ID is typically the rdns for EIP-6963 wallets
132
+ ...(connectorId && {
133
+ rdns: connectorId
134
+ })
135
+ });
136
+ }
137
+ }
138
+ }
139
+ this.trackingState.lastStatus = status;
140
+ } catch (error) {
141
+ logger.error("WagmiEventHandler: Error handling status change:", error);
142
+ }
143
+ }
144
+
145
+ /**
146
+ * Handle chain ID changes
147
+ */
148
+ async handleChainChange(chainId, prevChainId) {
149
+ // Skip if no change, chainId is undefined, or this is initial connection (prevChainId undefined)
150
+ if (chainId === prevChainId || chainId === undefined || prevChainId === undefined) {
151
+ return;
152
+ }
153
+ const state = this.getState();
154
+ if (state.status !== "connected") {
155
+ return;
156
+ }
157
+ const address = this.getConnectedAddress(state);
158
+ if (!address) {
159
+ logger.warn("WagmiEventHandler: Chain changed but no address found");
160
+ return;
161
+ }
162
+ logger.info("WagmiEventHandler: Chain changed", {
163
+ chainId,
164
+ prevChainId,
165
+ address
166
+ });
167
+ this.trackingState.lastChainId = chainId;
168
+ if (this.formo.isAutocaptureEnabled("chain")) {
169
+ try {
170
+ await this.formo.chain({
171
+ chainId,
172
+ address
173
+ });
174
+ } catch (error) {
175
+ logger.error("WagmiEventHandler: Error tracking chain change:", error);
176
+ }
177
+ }
178
+ }
179
+
180
+ /**
181
+ * Set up mutation tracking for signatures and transactions
182
+ */
183
+ setupMutationTracking() {
184
+ if (!this.queryClient) {
185
+ return;
186
+ }
187
+ logger.info("WagmiEventHandler: Setting up mutation tracking");
188
+ const mutationCache = this.queryClient.getMutationCache();
189
+ const unsubscribe = mutationCache.subscribe(event => {
190
+ this.handleMutationEvent(event);
191
+ });
192
+ this.unsubscribers.push(unsubscribe);
193
+ logger.info("WagmiEventHandler: Mutation tracking set up successfully");
194
+ }
195
+
196
+ /**
197
+ * Handle mutation cache events
198
+ */
199
+ handleMutationEvent(event) {
200
+ if (event.type !== "updated") {
201
+ return;
202
+ }
203
+ const mutation = event.mutation;
204
+ const mutationKey = mutation.options.mutationKey;
205
+ if (!mutationKey || mutationKey.length === 0) {
206
+ return;
207
+ }
208
+ const mutationType = mutationKey[0];
209
+ const state = mutation.state;
210
+ const mutationStateKey = `${mutation.mutationId}:${state.status}`;
211
+ if (this.processedMutations.has(mutationStateKey)) {
212
+ return;
213
+ }
214
+ this.processedMutations.add(mutationStateKey);
215
+ logger.debug("WagmiEventHandler: Mutation event", {
216
+ mutationType,
217
+ mutationId: mutation.mutationId,
218
+ status: state.status
219
+ });
220
+ if (mutationType === "signMessage" || mutationType === "signTypedData") {
221
+ this.handleSignatureMutation(mutationType, mutation);
222
+ }
223
+ if (mutationType === "sendTransaction" || mutationType === "writeContract") {
224
+ this.handleTransactionMutation(mutationType, mutation);
225
+ }
226
+
227
+ // Cleanup old mutations
228
+ if (this.processedMutations.size > 1000) {
229
+ const entries = Array.from(this.processedMutations);
230
+ for (let i = 0; i < 500; i++) {
231
+ const entry = entries[i];
232
+ if (entry) {
233
+ this.processedMutations.delete(entry);
234
+ }
235
+ }
236
+ }
237
+ }
238
+
239
+ /**
240
+ * Handle signature mutations
241
+ */
242
+ handleSignatureMutation(mutationType, mutation) {
243
+ if (!this.formo.isAutocaptureEnabled("signature")) {
244
+ return;
245
+ }
246
+ const state = mutation.state;
247
+ const variables = state.variables || {};
248
+ const chainId = this.trackingState.lastChainId;
249
+ const address = this.trackingState.lastAddress;
250
+ if (!address) {
251
+ logger.warn("WagmiEventHandler: Signature event but no address available");
252
+ return;
253
+ }
254
+ if (!chainId || chainId === 0) {
255
+ logger.warn("WagmiEventHandler: Signature event but no valid chainId available");
256
+ return;
257
+ }
258
+ try {
259
+ let status;
260
+ let signatureHash;
261
+ if (state.status === "pending") {
262
+ status = SignatureStatus.REQUESTED;
263
+ } else if (state.status === "success") {
264
+ status = SignatureStatus.CONFIRMED;
265
+ signatureHash = state.data;
266
+ } else if (state.status === "error") {
267
+ status = SignatureStatus.REJECTED;
268
+ } else {
269
+ return;
270
+ }
271
+ let message;
272
+ if (mutationType === "signMessage") {
273
+ message = variables.message || "";
274
+ } else {
275
+ message = JSON.stringify(variables.message || variables.types || {});
276
+ }
277
+ logger.info("WagmiEventHandler: Tracking signature event", {
278
+ status,
279
+ mutationType,
280
+ address,
281
+ chainId
282
+ });
283
+ this.formo.signature({
284
+ status,
285
+ chainId,
286
+ address,
287
+ message,
288
+ ...(signatureHash && {
289
+ signatureHash
290
+ })
291
+ }).catch(error => {
292
+ logger.error("WagmiEventHandler: Error tracking signature:", error);
293
+ });
294
+ } catch (error) {
295
+ logger.error("WagmiEventHandler: Error handling signature mutation:", error);
296
+ }
297
+ }
298
+
299
+ /**
300
+ * Handle transaction mutations
301
+ */
302
+ handleTransactionMutation(mutationType, mutation) {
303
+ if (!this.formo.isAutocaptureEnabled("transaction")) {
304
+ return;
305
+ }
306
+ const state = mutation.state;
307
+ const variables = state.variables || {};
308
+ const chainId = this.trackingState.lastChainId || variables.chainId;
309
+ // Only use variables.account as fallback, not variables.address which is the contract address
310
+ const address = this.trackingState.lastAddress || variables.account;
311
+ if (!address) {
312
+ logger.warn("WagmiEventHandler: Transaction event but no address available");
313
+ return;
314
+ }
315
+ if (!chainId || chainId === 0) {
316
+ logger.warn("WagmiEventHandler: Transaction event but no valid chainId available");
317
+ return;
318
+ }
319
+ try {
320
+ let status;
321
+ let transactionHash;
322
+ if (state.status === "pending") {
323
+ status = TransactionStatus.STARTED;
324
+ } else if (state.status === "success") {
325
+ status = TransactionStatus.BROADCASTED;
326
+ transactionHash = state.data;
327
+ } else if (state.status === "error") {
328
+ status = TransactionStatus.REJECTED;
329
+ } else {
330
+ return;
331
+ }
332
+ const data = variables.data;
333
+ const to = variables.to || variables.address;
334
+ const value = variables.value?.toString();
335
+ logger.info("WagmiEventHandler: Tracking transaction event", {
336
+ status,
337
+ mutationType,
338
+ address,
339
+ chainId,
340
+ transactionHash
341
+ });
342
+ this.formo.transaction({
343
+ status,
344
+ chainId,
345
+ address,
346
+ ...(data && {
347
+ data
348
+ }),
349
+ ...(to && {
350
+ to
351
+ }),
352
+ ...(value && {
353
+ value
354
+ }),
355
+ ...(transactionHash && {
356
+ transactionHash
357
+ })
358
+ }).catch(error => {
359
+ logger.error("WagmiEventHandler: Error tracking transaction:", error);
360
+ });
361
+ } catch (error) {
362
+ logger.error("WagmiEventHandler: Error handling transaction mutation:", error);
363
+ }
364
+ }
365
+
366
+ /**
367
+ * Get current Wagmi state
368
+ */
369
+ getState() {
370
+ if (typeof this.wagmiConfig.getState === "function") {
371
+ return this.wagmiConfig.getState();
372
+ }
373
+ if (this.wagmiConfig.state) {
374
+ return this.wagmiConfig.state;
375
+ }
376
+ logger.warn("WagmiEventHandler: Unable to get state from config, returning default state");
377
+ return {
378
+ status: "disconnected",
379
+ connections: new Map(),
380
+ current: undefined,
381
+ chainId: undefined
382
+ };
383
+ }
384
+
385
+ /**
386
+ * Get connected address from state
387
+ */
388
+ getConnectedAddress(state) {
389
+ if (!state.current) {
390
+ return undefined;
391
+ }
392
+ const connection = state.connections.get(state.current);
393
+ if (!connection || connection.accounts.length === 0) {
394
+ return undefined;
395
+ }
396
+ return connection.accounts[0];
397
+ }
398
+
399
+ /**
400
+ * Get connector name from state
401
+ */
402
+ getConnectorName(state) {
403
+ if (!state.current) {
404
+ return undefined;
405
+ }
406
+ const connection = state.connections.get(state.current);
407
+ return connection?.connector.name;
408
+ }
409
+
410
+ /**
411
+ * Get connector ID from state (typically the rdns for EIP-6963 wallets)
412
+ */
413
+ getConnectorId(state) {
414
+ if (!state.current) {
415
+ return undefined;
416
+ }
417
+ const connection = state.connections.get(state.current);
418
+ return connection?.connector.id;
419
+ }
420
+
421
+ /**
422
+ * Clean up subscriptions
423
+ */
424
+ cleanup() {
425
+ logger.info("WagmiEventHandler: Cleaning up subscriptions");
426
+ for (const unsubscribe of this.unsubscribers) {
427
+ try {
428
+ unsubscribe();
429
+ } catch (error) {
430
+ logger.error("WagmiEventHandler: Error during cleanup:", error);
431
+ }
432
+ }
433
+ this.unsubscribers = [];
434
+ this.processedMutations.clear();
435
+ this.pendingStatusChanges = [];
436
+ logger.info("WagmiEventHandler: Cleanup complete");
437
+ }
438
+ }
439
+ //# sourceMappingURL=WagmiEventHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SignatureStatus","TransactionStatus","logger","WagmiEventHandler","unsubscribers","trackingState","isProcessing","processedMutations","Set","pendingStatusChanges","constructor","formoAnalytics","wagmiConfig","queryClient","formo","info","setupConnectionListeners","setupMutationTracking","warn","statusUnsubscribe","subscribe","state","status","prevStatus","handleStatusChange","push","chainIdUnsubscribe","chainId","prevChainId","handleChainChange","MAX_PENDING_STATUS_CHANGES","length","shift","debug","processStatusChange","pending","getState","address","getConnectedAddress","isAutocaptureEnabled","disconnect","lastChainId","lastAddress","undefined","connectorName","getConnectorName","connectorId","getConnectorId","connect","providerName","rdns","lastStatus","error","chain","mutationCache","getMutationCache","unsubscribe","event","handleMutationEvent","type","mutation","mutationKey","options","mutationType","mutationStateKey","mutationId","has","add","handleSignatureMutation","handleTransactionMutation","size","entries","Array","from","i","entry","delete","variables","signatureHash","REQUESTED","CONFIRMED","data","REJECTED","message","JSON","stringify","types","signature","catch","account","transactionHash","STARTED","BROADCASTED","to","value","toString","transaction","connections","Map","current","connection","get","accounts","connector","name","id","cleanup","clear"],"sourceRoot":"../../../../src","sources":["lib/wagmi/WagmiEventHandler.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ export * from "./WagmiEventHandler";
2
+ export * from "./types";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../../src","sources":["lib/wagmi/index.ts"],"mappings":"AAAA,cAAc,qBAAqB;AACnC,cAAc,SAAS","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../../src","sources":["lib/wagmi/types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/base.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ //#region Specific Event Types
2
+
3
+ export let SignatureStatus = /*#__PURE__*/function (SignatureStatus) {
4
+ SignatureStatus["REQUESTED"] = "requested";
5
+ SignatureStatus["REJECTED"] = "rejected";
6
+ SignatureStatus["CONFIRMED"] = "confirmed";
7
+ return SignatureStatus;
8
+ }({});
9
+ export let TransactionStatus = /*#__PURE__*/function (TransactionStatus) {
10
+ TransactionStatus["STARTED"] = "started";
11
+ TransactionStatus["REJECTED"] = "rejected";
12
+ TransactionStatus["BROADCASTED"] = "broadcasted";
13
+ TransactionStatus["CONFIRMED"] = "confirmed";
14
+ TransactionStatus["REVERTED"] = "reverted";
15
+ return TransactionStatus;
16
+ }({});
17
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SignatureStatus","TransactionStatus"],"sourceRoot":"../../../src","sources":["types/events.ts"],"mappings":"AAyCA;;AAsFA,WAAYA,eAAe,0BAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAfA,eAAe;EAAA,OAAfA,eAAe;AAAA;AAM3B,WAAYC,iBAAiB,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ export * from "./base";
2
+ export * from "./events";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["types/index.ts"],"mappings":"AAAA,cAAc,QAAQ;AACtB,cAAc,UAAU","ignoreList":[]}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Address validation and checksum utilities
3
+ *
4
+ * Uses ethereum-cryptography for proper EIP-55 checksum computation
5
+ */
6
+
7
+ import { keccak256 } from "ethereum-cryptography/keccak.js";
8
+ import { utf8ToBytes } from "ethereum-cryptography/utils.js";
9
+
10
+ /**
11
+ * Convert Uint8Array to hex string
12
+ */
13
+ function toHex(bytes) {
14
+ return Array.from(bytes).map(b => b.toString(16).padStart(2, "0")).join("");
15
+ }
16
+
17
+ /**
18
+ * Check if a string is a valid Ethereum address
19
+ */
20
+ export function isValidAddress(address) {
21
+ if (!address) return false;
22
+ if (typeof address !== "string") return false;
23
+
24
+ // Check if it matches basic hex address format
25
+ return /^0x[a-fA-F0-9]{40}$/.test(address);
26
+ }
27
+
28
+ /**
29
+ * Convert address to EIP-55 checksum format
30
+ *
31
+ * Uses keccak256 from ethereum-cryptography for correct checksumming
32
+ * See: https://eips.ethereum.org/EIPS/eip-55
33
+ */
34
+ export function toChecksumAddress(address) {
35
+ if (!isValidAddress(address)) {
36
+ return address;
37
+ }
38
+ const lowercaseAddress = address.toLowerCase().replace("0x", "");
39
+ const hash = toHex(keccak256(utf8ToBytes(lowercaseAddress)));
40
+ let checksumAddress = "0x";
41
+ for (let i = 0; i < lowercaseAddress.length; i++) {
42
+ const char = lowercaseAddress[i];
43
+ if (char && parseInt(hash[i] || "0", 16) >= 8) {
44
+ checksumAddress += char.toUpperCase();
45
+ } else {
46
+ checksumAddress += char;
47
+ }
48
+ }
49
+ return checksumAddress;
50
+ }
51
+
52
+ /**
53
+ * Get valid address or null
54
+ */
55
+ export function getValidAddress(address) {
56
+ if (!address) return null;
57
+ const trimmed = typeof address === "string" ? address.trim() : address;
58
+ if (!isValidAddress(trimmed)) return null;
59
+ return trimmed;
60
+ }
61
+
62
+ /**
63
+ * Blocked addresses that should not emit events
64
+ * (zero address, dead address)
65
+ */
66
+ const BLOCKED_ADDRESSES = new Set(["0x0000000000000000000000000000000000000000", "0x000000000000000000000000000000000000dead"]);
67
+
68
+ /**
69
+ * Check if address is in blocked list
70
+ */
71
+ export function isBlockedAddress(address) {
72
+ return BLOCKED_ADDRESSES.has(address.toLowerCase());
73
+ }
74
+ //# sourceMappingURL=address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["keccak256","utf8ToBytes","toHex","bytes","Array","from","map","b","toString","padStart","join","isValidAddress","address","test","toChecksumAddress","lowercaseAddress","toLowerCase","replace","hash","checksumAddress","i","length","char","parseInt","toUpperCase","getValidAddress","trimmed","trim","BLOCKED_ADDRESSES","Set","isBlockedAddress","has"],"sourceRoot":"../../../src","sources":["utils/address.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA,SAASA,SAAS,QAAQ,iCAAiC;AAC3D,SAASC,WAAW,QAAQ,gCAAgC;;AAE5D;AACA;AACA;AACA,SAASC,KAAKA,CAACC,KAAiB,EAAU;EACxC,OAAOC,KAAK,CAACC,IAAI,CAACF,KAAK,CAAC,CACrBG,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAC3CC,IAAI,CAAC,EAAE,CAAC;AACb;;AAEA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAACC,OAAe,EAAW;EACvD,IAAI,CAACA,OAAO,EAAE,OAAO,KAAK;EAC1B,IAAI,OAAOA,OAAO,KAAK,QAAQ,EAAE,OAAO,KAAK;;EAE7C;EACA,OAAO,qBAAqB,CAACC,IAAI,CAACD,OAAO,CAAC;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,iBAAiBA,CAACF,OAAe,EAAU;EACzD,IAAI,CAACD,cAAc,CAACC,OAAO,CAAC,EAAE;IAC5B,OAAOA,OAAO;EAChB;EAEA,MAAMG,gBAAgB,GAAGH,OAAO,CAACI,WAAW,CAAC,CAAC,CAACC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;EAChE,MAAMC,IAAI,GAAGhB,KAAK,CAACF,SAAS,CAACC,WAAW,CAACc,gBAAgB,CAAC,CAAC,CAAC;EAE5D,IAAII,eAAe,GAAG,IAAI;EAE1B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,gBAAgB,CAACM,MAAM,EAAED,CAAC,EAAE,EAAE;IAChD,MAAME,IAAI,GAAGP,gBAAgB,CAACK,CAAC,CAAC;IAChC,IAAIE,IAAI,IAAIC,QAAQ,CAACL,IAAI,CAACE,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;MAC7CD,eAAe,IAAIG,IAAI,CAACE,WAAW,CAAC,CAAC;IACvC,CAAC,MAAM;MACLL,eAAe,IAAIG,IAAI;IACzB;EACF;EAEA,OAAOH,eAAe;AACxB;;AAEA;AACA;AACA;AACA,OAAO,SAASM,eAAeA,CAC7Bb,OAAkC,EACnB;EACf,IAAI,CAACA,OAAO,EAAE,OAAO,IAAI;EACzB,MAAMc,OAAO,GAAG,OAAOd,OAAO,KAAK,QAAQ,GAAGA,OAAO,CAACe,IAAI,CAAC,CAAC,GAAGf,OAAO;EACtE,IAAI,CAACD,cAAc,CAACe,OAAO,CAAC,EAAE,OAAO,IAAI;EACzC,OAAOA,OAAO;AAChB;;AAEA;AACA;AACA;AACA;AACA,MAAME,iBAAiB,GAAG,IAAIC,GAAG,CAAS,CACxC,4CAA4C,EAC5C,4CAA4C,CAC7C,CAAC;;AAEF;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAAClB,OAAe,EAAW;EACzD,OAAOgB,iBAAiB,CAACG,GAAG,CAACnB,OAAO,CAACI,WAAW,CAAC,CAAC,CAAC;AACrD","ignoreList":[]}
@@ -0,0 +1,24 @@
1
+ import { sha256 } from "ethereum-cryptography/sha256";
2
+ import { utf8ToBytes, bytesToHex } from "ethereum-cryptography/utils";
3
+
4
+ /**
5
+ * Generate a SHA-256 hash for event deduplication
6
+ * Returns full 64 hex chars to match web SDK format
7
+ */
8
+ export async function hash(input) {
9
+ const bytes = utf8ToBytes(input);
10
+ const hashBytes = sha256(bytes);
11
+ return bytesToHex(hashBytes);
12
+ }
13
+
14
+ /**
15
+ * Generate a UUID v4
16
+ */
17
+ export function generateUUID() {
18
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, c => {
19
+ const r = Math.random() * 16 | 0;
20
+ const v = c === "x" ? r : r & 0x3 | 0x8;
21
+ return v.toString(16);
22
+ });
23
+ }
24
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["sha256","utf8ToBytes","bytesToHex","hash","input","bytes","hashBytes","generateUUID","replace","c","r","Math","random","v","toString"],"sourceRoot":"../../../src","sources":["utils/hash.ts"],"mappings":"AAAA,SAASA,MAAM,QAAQ,8BAA8B;AACrD,SAASC,WAAW,EAAEC,UAAU,QAAQ,6BAA6B;;AAErE;AACA;AACA;AACA;AACA,OAAO,eAAeC,IAAIA,CAACC,KAAa,EAAmB;EACzD,MAAMC,KAAK,GAAGJ,WAAW,CAACG,KAAK,CAAC;EAChC,MAAME,SAAS,GAAGN,MAAM,CAACK,KAAK,CAAC;EAC/B,OAAOH,UAAU,CAACI,SAAS,CAAC;AAC9B;;AAEA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAAA,EAAW;EACrC,OAAO,sCAAsC,CAACC,OAAO,CAAC,OAAO,EAAGC,CAAC,IAAK;IACpE,MAAMC,CAAC,GAAIC,IAAI,CAACC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAI,CAAC;IAClC,MAAMC,CAAC,GAAGJ,CAAC,KAAK,GAAG,GAAGC,CAAC,GAAIA,CAAC,GAAG,GAAG,GAAI,GAAG;IACzC,OAAOG,CAAC,CAACC,QAAQ,CAAC,EAAE,CAAC;EACvB,CAAC,CAAC;AACJ","ignoreList":[]}