@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,526 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.FormoAnalytics = void 0;
7
+ var _constants = require("./constants");
8
+ var _storage = require("./lib/storage");
9
+ var _event = require("./lib/event");
10
+ var _logger = require("./lib/logger");
11
+ var _consent = require("./lib/consent");
12
+ var _session = require("./lib/session");
13
+ var _wagmi = require("./lib/wagmi");
14
+ var _lifecycle = require("./lib/lifecycle");
15
+ var _utils = require("./utils");
16
+ var _trafficSource = require("./utils/trafficSource");
17
+ /**
18
+ * FormoAnalytics for React Native
19
+ *
20
+ * Main SDK class for tracking wallet events and user analytics in mobile dApps
21
+ */
22
+
23
+ class FormoAnalytics {
24
+ currentUserId = "";
25
+ constructor(writeKey, options = {}) {
26
+ this.writeKey = writeKey;
27
+ this.options = options;
28
+ this.config = {
29
+ writeKey
30
+ };
31
+ this.session = new _session.FormoAnalyticsSession();
32
+ this.currentUserId = (0, _storage.storage)().get(_constants.SESSION_USER_ID_KEY) || undefined;
33
+
34
+ // Bind methods
35
+ this.identify = this.identify.bind(this);
36
+ this.connect = this.connect.bind(this);
37
+ this.disconnect = this.disconnect.bind(this);
38
+ this.chain = this.chain.bind(this);
39
+ this.signature = this.signature.bind(this);
40
+ this.transaction = this.transaction.bind(this);
41
+ this.detect = this.detect.bind(this);
42
+ this.track = this.track.bind(this);
43
+ this.screen = this.screen.bind(this);
44
+ this.isAutocaptureEnabled = this.isAutocaptureEnabled.bind(this);
45
+
46
+ // Initialize logger
47
+ _logger.Logger.init({
48
+ enabled: options.logger?.enabled || false,
49
+ enabledLevels: options.logger?.levels || []
50
+ });
51
+
52
+ // Initialize event queue
53
+ this.eventQueue = new _event.EventQueue(this.config.writeKey, {
54
+ apiHost: options.apiHost || _constants.EVENTS_API_HOST,
55
+ flushAt: options.flushAt,
56
+ retryCount: options.retryCount,
57
+ maxQueueSize: options.maxQueueSize,
58
+ flushInterval: options.flushInterval
59
+ });
60
+
61
+ // Initialize event manager
62
+ this.eventManager = new _event.EventManager(this.eventQueue, options);
63
+
64
+ // Check consent status
65
+ if (this.hasOptedOutTracking()) {
66
+ _logger.logger.info("User has previously opted out of tracking");
67
+ }
68
+
69
+ // Initialize Wagmi handler if provided and config is valid
70
+ if (options.wagmi?.config) {
71
+ _logger.logger.info("FormoAnalytics: Initializing in Wagmi mode");
72
+ this.wagmiHandler = new _wagmi.WagmiEventHandler(this, options.wagmi.config, options.wagmi.queryClient);
73
+ } else if (options.wagmi) {
74
+ _logger.logger.warn("FormoAnalytics: wagmi option provided but config is missing");
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Initialize the SDK
80
+ * @param writeKey - Your Formo write key
81
+ * @param options - Configuration options
82
+ * @param asyncStorage - AsyncStorage instance from @react-native-async-storage/async-storage
83
+ */
84
+ static async init(writeKey, options, asyncStorage) {
85
+ const storageManager = (0, _storage.initStorageManager)(writeKey);
86
+
87
+ // Initialize storage with AsyncStorage if provided
88
+ if (asyncStorage) {
89
+ await storageManager.initialize(asyncStorage);
90
+ }
91
+ const analytics = new FormoAnalytics(writeKey, options);
92
+
93
+ // Initialize lifecycle tracking if enabled
94
+ // Wrapped in try-catch so a transient storage failure doesn't prevent SDK init
95
+ if (analytics.isAutocaptureEnabled("lifecycle")) {
96
+ try {
97
+ analytics.lifecycleManager = new _lifecycle.AppLifecycleManager(analytics);
98
+ await analytics.lifecycleManager.start(options?.app);
99
+ } catch (error) {
100
+ _logger.logger.error("FormoAnalytics: Failed to initialize lifecycle tracking", error);
101
+ }
102
+ }
103
+
104
+ // Call ready callback
105
+ if (options?.ready) {
106
+ options.ready(analytics);
107
+ }
108
+ return analytics;
109
+ }
110
+
111
+ /**
112
+ * Track a screen view (mobile equivalent of page view)
113
+ */
114
+ async screen(name, category, properties, context, callback) {
115
+ // Note: shouldTrack() is called in trackEvent() - no need to check here
116
+ await this.trackEvent(_constants.EventType.SCREEN, {
117
+ name,
118
+ ...(category && {
119
+ category
120
+ })
121
+ }, properties, context, callback);
122
+ }
123
+
124
+ /**
125
+ * Set traffic source from deep link URL
126
+ * Parses UTM parameters and referrer information from URL
127
+ * This is automatically persisted for the session
128
+ *
129
+ * @param url - Deep link URL (e.g., "myapp://product?utm_source=facebook&ref=friend123")
130
+ *
131
+ * @example
132
+ * ```tsx
133
+ * import { Linking } from 'react-native';
134
+ *
135
+ * // Listen for deep links
136
+ * Linking.addEventListener('url', (event) => {
137
+ * formo.setTrafficSourceFromUrl(event.url);
138
+ * });
139
+ *
140
+ * // Or get initial URL
141
+ * Linking.getInitialURL().then((url) => {
142
+ * if (url) formo.setTrafficSourceFromUrl(url);
143
+ * });
144
+ * ```
145
+ */
146
+ setTrafficSourceFromUrl(url) {
147
+ const trafficSource = (0, _trafficSource.parseTrafficSource)(url, this.options.referral?.queryParams, this.options.referral?.pathPattern);
148
+ (0, _trafficSource.storeTrafficSource)(trafficSource);
149
+ _logger.logger.debug("Traffic source set from URL:", trafficSource);
150
+ }
151
+
152
+ /**
153
+ * Reset the current user session
154
+ */
155
+ reset() {
156
+ this.currentUserId = undefined;
157
+ (0, _storage.storage)().remove(_constants.LOCAL_ANONYMOUS_ID_KEY);
158
+ (0, _storage.storage)().remove(_constants.SESSION_USER_ID_KEY);
159
+ this.session.clear();
160
+ }
161
+
162
+ /**
163
+ * Clean up resources
164
+ */
165
+ async cleanup() {
166
+ _logger.logger.info("FormoAnalytics: Cleaning up resources");
167
+ if (this.lifecycleManager) {
168
+ this.lifecycleManager.cleanup();
169
+ this.lifecycleManager = undefined;
170
+ }
171
+ if (this.wagmiHandler) {
172
+ this.wagmiHandler.cleanup();
173
+ this.wagmiHandler = undefined;
174
+ }
175
+ if (this.eventQueue) {
176
+ await this.eventQueue.cleanup();
177
+ }
178
+ _logger.logger.info("FormoAnalytics: Cleanup complete");
179
+ }
180
+
181
+ /**
182
+ * Track wallet connect event
183
+ */
184
+ async connect({
185
+ chainId,
186
+ address
187
+ }, properties, context, callback) {
188
+ if (chainId === null || chainId === undefined || Number(chainId) === 0) {
189
+ _logger.logger.warn("Connect: Chain ID cannot be null, undefined, or 0");
190
+ return;
191
+ }
192
+ if (!address) {
193
+ _logger.logger.warn("Connect: Address cannot be empty");
194
+ return;
195
+ }
196
+ const checksummedAddress = this.validateAndChecksumAddress(address);
197
+ if (!checksummedAddress) {
198
+ _logger.logger.warn(`Connect: Invalid address provided ("${address}")`);
199
+ return;
200
+ }
201
+
202
+ // Track event before updating state so connect events TO excluded chains are tracked
203
+ await this.trackEvent(_constants.EventType.CONNECT, {
204
+ chainId,
205
+ address: checksummedAddress
206
+ }, properties, context, callback);
207
+ this.currentChainId = chainId;
208
+ this.currentAddress = checksummedAddress;
209
+ }
210
+
211
+ /**
212
+ * Track wallet disconnect event
213
+ */
214
+ async disconnect(params, properties, context, callback) {
215
+ const chainId = params?.chainId || this.currentChainId;
216
+ const address = params?.address || this.currentAddress;
217
+ _logger.logger.info("Disconnect: Emitting disconnect event with:", {
218
+ chainId,
219
+ address
220
+ });
221
+ await this.trackEvent(_constants.EventType.DISCONNECT, {
222
+ ...(chainId && {
223
+ chainId
224
+ }),
225
+ ...(address && {
226
+ address
227
+ })
228
+ }, properties, context, callback);
229
+ this.currentAddress = undefined;
230
+ this.currentChainId = undefined;
231
+ }
232
+
233
+ /**
234
+ * Track chain change event
235
+ */
236
+ async chain({
237
+ chainId,
238
+ address
239
+ }, properties, context, callback) {
240
+ if (!chainId || Number(chainId) === 0) {
241
+ _logger.logger.warn("FormoAnalytics::chain: chainId cannot be empty or 0");
242
+ return;
243
+ }
244
+ if (isNaN(Number(chainId))) {
245
+ _logger.logger.warn("FormoAnalytics::chain: chainId must be a valid number");
246
+ return;
247
+ }
248
+ if (!address && !this.currentAddress) {
249
+ _logger.logger.warn("FormoAnalytics::chain: address was empty and no previous address recorded");
250
+ return;
251
+ }
252
+
253
+ // Track event before updating currentChainId so shouldTrack uses the previous chain
254
+ // This ensures chain change events TO excluded chains are still tracked
255
+ await this.trackEvent(_constants.EventType.CHAIN, {
256
+ chainId,
257
+ address: address || this.currentAddress
258
+ }, properties, context, callback);
259
+ this.currentChainId = chainId;
260
+ }
261
+
262
+ /**
263
+ * Track signature event
264
+ */
265
+ async signature({
266
+ status,
267
+ chainId,
268
+ address,
269
+ message,
270
+ signatureHash
271
+ }, properties, context, callback) {
272
+ if (!address) {
273
+ _logger.logger.warn("Signature: Address cannot be empty");
274
+ return;
275
+ }
276
+ await this.trackEvent(_constants.EventType.SIGNATURE, {
277
+ status,
278
+ ...(chainId !== undefined && chainId !== null && {
279
+ chainId
280
+ }),
281
+ address,
282
+ message,
283
+ ...(signatureHash && {
284
+ signatureHash
285
+ })
286
+ }, properties, context, callback);
287
+ }
288
+
289
+ /**
290
+ * Track transaction event
291
+ */
292
+ async transaction({
293
+ status,
294
+ chainId,
295
+ address,
296
+ data,
297
+ to,
298
+ value,
299
+ transactionHash,
300
+ function_name,
301
+ function_args
302
+ }, properties, context, callback) {
303
+ if (chainId === null || chainId === undefined || Number(chainId) === 0) {
304
+ _logger.logger.warn("Transaction: Chain ID cannot be null, undefined, or 0");
305
+ return;
306
+ }
307
+ if (!address) {
308
+ _logger.logger.warn("Transaction: Address cannot be empty");
309
+ return;
310
+ }
311
+ await this.trackEvent(_constants.EventType.TRANSACTION, {
312
+ status,
313
+ chainId,
314
+ address,
315
+ data,
316
+ to,
317
+ value,
318
+ ...(transactionHash && {
319
+ transactionHash
320
+ }),
321
+ ...(function_name && {
322
+ function_name
323
+ }),
324
+ ...(function_args && {
325
+ function_args
326
+ })
327
+ }, properties, context, callback);
328
+ }
329
+
330
+ /**
331
+ * Track identify event
332
+ */
333
+ async identify(params, properties, context, callback) {
334
+ try {
335
+ const {
336
+ userId,
337
+ address,
338
+ providerName,
339
+ rdns
340
+ } = params;
341
+ _logger.logger.info("Identify", address, userId, providerName, rdns);
342
+ let validAddress = undefined;
343
+ if (address) {
344
+ validAddress = this.validateAndChecksumAddress(address);
345
+ if (!validAddress) {
346
+ _logger.logger.warn(`Identify: Invalid address provided ("${address}")`);
347
+ return;
348
+ }
349
+ this.currentAddress = validAddress;
350
+ } else {
351
+ this.currentAddress = undefined;
352
+ }
353
+ if (userId) {
354
+ this.currentUserId = userId;
355
+ (0, _storage.storage)().set(_constants.SESSION_USER_ID_KEY, userId);
356
+ }
357
+
358
+ // Check for duplicate identify
359
+ const isAlreadyIdentified = validAddress ? this.session.isWalletIdentified(validAddress, rdns || "") : false;
360
+ if (isAlreadyIdentified) {
361
+ _logger.logger.info(`Identify: Wallet ${providerName || "Unknown"} with address ${validAddress} already identified`);
362
+ return;
363
+ }
364
+
365
+ // Mark as identified
366
+ if (validAddress) {
367
+ this.session.markWalletIdentified(validAddress, rdns || "");
368
+ }
369
+ await this.trackEvent(_constants.EventType.IDENTIFY, {
370
+ address: validAddress,
371
+ providerName,
372
+ userId,
373
+ rdns
374
+ }, properties, context, callback);
375
+ } catch (e) {
376
+ _logger.logger.log("identify error", e);
377
+ }
378
+ }
379
+
380
+ /**
381
+ * Track detect wallet event
382
+ */
383
+ async detect({
384
+ providerName,
385
+ rdns
386
+ }, properties, context, callback) {
387
+ if (this.session.isWalletDetected(rdns)) {
388
+ _logger.logger.warn(`Detect: Wallet ${providerName} already detected in this session`);
389
+ return;
390
+ }
391
+ this.session.markWalletDetected(rdns);
392
+ await this.trackEvent(_constants.EventType.DETECT, {
393
+ providerName,
394
+ rdns
395
+ }, properties, context, callback);
396
+ }
397
+
398
+ /**
399
+ * Track custom event
400
+ */
401
+ async track(event, properties, context, callback) {
402
+ await this.trackEvent(_constants.EventType.TRACK, {
403
+ event
404
+ }, properties, context, callback);
405
+ }
406
+
407
+ /**
408
+ * Opt out of tracking
409
+ */
410
+ optOutTracking() {
411
+ _logger.logger.info("Opting out of tracking");
412
+ (0, _consent.setConsentFlag)(this.writeKey, _constants.CONSENT_OPT_OUT_KEY, "true");
413
+ this.eventQueue.clear();
414
+ this.reset();
415
+ _logger.logger.info("Successfully opted out of tracking");
416
+ }
417
+
418
+ /**
419
+ * Opt back into tracking
420
+ */
421
+ optInTracking() {
422
+ _logger.logger.info("Opting back into tracking");
423
+ (0, _consent.removeConsentFlag)(this.writeKey, _constants.CONSENT_OPT_OUT_KEY);
424
+ _logger.logger.info("Successfully opted back into tracking");
425
+ }
426
+
427
+ /**
428
+ * Check if user has opted out
429
+ */
430
+ hasOptedOutTracking() {
431
+ return (0, _consent.getConsentFlag)(this.writeKey, _constants.CONSENT_OPT_OUT_KEY) === "true";
432
+ }
433
+
434
+ /**
435
+ * Check if autocapture is enabled for event type
436
+ */
437
+ isAutocaptureEnabled(eventType) {
438
+ if (this.options.autocapture === undefined) {
439
+ return true;
440
+ }
441
+ if (typeof this.options.autocapture === "boolean") {
442
+ return this.options.autocapture;
443
+ }
444
+ if (this.options.autocapture !== null && typeof this.options.autocapture === "object") {
445
+ const eventConfig = this.options.autocapture[eventType];
446
+ return eventConfig !== false;
447
+ }
448
+ return true;
449
+ }
450
+
451
+ /**
452
+ * Internal method to track events
453
+ * This is the single enforcement point for shouldTrack() - all public tracking
454
+ * methods (track, screen, connect, etc.) route through here
455
+ */
456
+ async trackEvent(type, payload, properties, context, callback) {
457
+ try {
458
+ if (!this.shouldTrack()) {
459
+ _logger.logger.info(`Skipping ${type} event due to tracking configuration`);
460
+ return;
461
+ }
462
+ await this.eventManager.addEvent({
463
+ type,
464
+ ...payload,
465
+ properties,
466
+ context,
467
+ callback
468
+ }, this.currentAddress, this.currentUserId);
469
+ } catch (error) {
470
+ _logger.logger.error("Error tracking event:", error);
471
+ if (this.options.errorHandler) {
472
+ try {
473
+ this.options.errorHandler(error instanceof Error ? error : new Error(String(error)));
474
+ } catch (handlerError) {
475
+ _logger.logger.error("Error in errorHandler callback:", handlerError);
476
+ }
477
+ }
478
+ }
479
+ }
480
+
481
+ /**
482
+ * Check if tracking should be enabled
483
+ */
484
+ shouldTrack() {
485
+ // Check consent
486
+ if (this.hasOptedOutTracking()) {
487
+ return false;
488
+ }
489
+
490
+ // Check tracking option
491
+ if (typeof this.options.tracking === "boolean") {
492
+ return this.options.tracking;
493
+ }
494
+
495
+ // Handle object configuration
496
+ if (this.options.tracking !== null && typeof this.options.tracking === "object" && !Array.isArray(this.options.tracking)) {
497
+ const {
498
+ excludeChains = []
499
+ } = this.options.tracking;
500
+ if (excludeChains.length > 0 && this.currentChainId && excludeChains.includes(this.currentChainId)) {
501
+ return false;
502
+ }
503
+ return true;
504
+ }
505
+
506
+ // Default: track
507
+ return true;
508
+ }
509
+
510
+ /**
511
+ * Validate and checksum address
512
+ */
513
+ validateAndChecksumAddress(address) {
514
+ const validAddress = (0, _utils.getValidAddress)(address);
515
+ return validAddress ? (0, _utils.toChecksumAddress)(validAddress) : undefined;
516
+ }
517
+
518
+ /**
519
+ * Flush pending events
520
+ */
521
+ async flush() {
522
+ await this.eventQueue.flush();
523
+ }
524
+ }
525
+ exports.FormoAnalytics = FormoAnalytics;
526
+ //# sourceMappingURL=FormoAnalytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_constants","require","_storage","_event","_logger","_consent","_session","_wagmi","_lifecycle","_utils","_trafficSource","FormoAnalytics","currentUserId","constructor","writeKey","options","config","session","FormoAnalyticsSession","storage","get","SESSION_USER_ID_KEY","undefined","identify","bind","connect","disconnect","chain","signature","transaction","detect","track","screen","isAutocaptureEnabled","Logger","init","enabled","logger","enabledLevels","levels","eventQueue","EventQueue","apiHost","EVENTS_API_HOST","flushAt","retryCount","maxQueueSize","flushInterval","eventManager","EventManager","hasOptedOutTracking","info","wagmi","wagmiHandler","WagmiEventHandler","queryClient","warn","asyncStorage","storageManager","initStorageManager","initialize","analytics","lifecycleManager","AppLifecycleManager","start","app","error","ready","name","category","properties","context","callback","trackEvent","EventType","SCREEN","setTrafficSourceFromUrl","url","trafficSource","parseTrafficSource","referral","queryParams","pathPattern","storeTrafficSource","debug","reset","remove","LOCAL_ANONYMOUS_ID_KEY","clear","cleanup","chainId","address","Number","checksummedAddress","validateAndChecksumAddress","CONNECT","currentChainId","currentAddress","params","DISCONNECT","isNaN","CHAIN","status","message","signatureHash","SIGNATURE","data","to","value","transactionHash","function_name","function_args","TRANSACTION","userId","providerName","rdns","validAddress","set","isAlreadyIdentified","isWalletIdentified","markWalletIdentified","IDENTIFY","e","log","isWalletDetected","markWalletDetected","DETECT","event","TRACK","optOutTracking","setConsentFlag","CONSENT_OPT_OUT_KEY","optInTracking","removeConsentFlag","getConsentFlag","eventType","autocapture","eventConfig","type","payload","shouldTrack","addEvent","errorHandler","Error","String","handlerError","tracking","Array","isArray","excludeChains","length","includes","getValidAddress","toChecksumAddress","flush","exports"],"sourceRoot":"../../src","sources":["FormoAnalytics.ts"],"mappings":"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","ignoreList":[]}