@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
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Session management for Formo Analytics
3
+ *
4
+ * Handles tracking of detected wallets and identified wallet-address pairs
5
+ * using cookies to maintain state across page loads within a session.
6
+ */
7
+ /**
8
+ * Cookie keys for session tracking
9
+ * NOTE: These values must match the original constants in constants/base.ts
10
+ * to maintain backward compatibility with existing user sessions
11
+ */
12
+ export declare const SESSION_WALLET_DETECTED_KEY = "wallet-detected";
13
+ export declare const SESSION_WALLET_IDENTIFIED_KEY = "wallet-identified";
14
+ /**
15
+ * Interface for session management operations
16
+ */
17
+ export interface IFormoAnalyticsSession {
18
+ /**
19
+ * Check if a wallet has been detected in this session
20
+ * @param rdns The reverse domain name (RDNS) of the wallet provider
21
+ */
22
+ isWalletDetected(rdns: string): boolean;
23
+ /**
24
+ * Mark a wallet as detected in this session
25
+ * @param rdns The reverse domain name (RDNS) of the wallet provider
26
+ */
27
+ markWalletDetected(rdns: string): void;
28
+ /**
29
+ * Check if a wallet-address pair has been identified in this session
30
+ * @param address The wallet address
31
+ * @param rdns The reverse domain name (RDNS) of the wallet provider
32
+ */
33
+ isWalletIdentified(address: string, rdns: string): boolean;
34
+ /**
35
+ * Mark a wallet-address pair as identified in this session
36
+ * @param address The wallet address
37
+ * @param rdns The reverse domain name (RDNS) of the wallet provider
38
+ */
39
+ markWalletIdentified(address: string, rdns: string): void;
40
+ }
41
+ /**
42
+ * Implementation of session management using cookies
43
+ *
44
+ * Tracks:
45
+ * - Detected wallets (by RDNS) - to prevent duplicate detection events
46
+ * - Identified wallet-address pairs - to prevent duplicate identification events
47
+ *
48
+ * Session data expires at end of day (86400 seconds).
49
+ */
50
+ export declare class FormoAnalyticsSession implements IFormoAnalyticsSession {
51
+ /**
52
+ * Generate a unique key for wallet identification tracking
53
+ * Combines address and RDNS to track specific wallet-address combinations
54
+ *
55
+ * @param address The wallet address
56
+ * @param rdns The reverse domain name of the wallet provider
57
+ * @returns A unique identification key
58
+ */
59
+ private generateIdentificationKey;
60
+ /**
61
+ * Check if a wallet provider has been detected in this session
62
+ *
63
+ * @param rdns The reverse domain name of the wallet provider
64
+ * @returns true if the wallet has been detected
65
+ */
66
+ isWalletDetected(rdns: string): boolean;
67
+ /**
68
+ * Mark a wallet provider as detected in this session
69
+ * Prevents duplicate detection events from being emitted
70
+ *
71
+ * @param rdns The reverse domain name of the wallet provider
72
+ */
73
+ markWalletDetected(rdns: string): void;
74
+ /**
75
+ * Check if a specific wallet-address combination has been identified
76
+ *
77
+ * @param address The wallet address
78
+ * @param rdns The reverse domain name of the wallet provider
79
+ * @returns true if this wallet-address pair has been identified
80
+ */
81
+ isWalletIdentified(address: string, rdns: string): boolean;
82
+ /**
83
+ * Mark a wallet-address combination as identified in this session
84
+ * Prevents duplicate identification events from being emitted
85
+ *
86
+ * @param address The wallet address
87
+ * @param rdns The reverse domain name of the wallet provider
88
+ */
89
+ markWalletIdentified(address: string, rdns: string): void;
90
+ }
91
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Session management for Formo Analytics
3
+ *
4
+ * Handles tracking of detected wallets and identified wallet-address pairs
5
+ * using cookies to maintain state across page loads within a session.
6
+ */
7
+ import { cookie } from "../storage";
8
+ import { logger } from "../logger";
9
+ /**
10
+ * Cookie keys for session tracking
11
+ * NOTE: These values must match the original constants in constants/base.ts
12
+ * to maintain backward compatibility with existing user sessions
13
+ */
14
+ export var SESSION_WALLET_DETECTED_KEY = "wallet-detected";
15
+ export var SESSION_WALLET_IDENTIFIED_KEY = "wallet-identified";
16
+ /**
17
+ * Implementation of session management using cookies
18
+ *
19
+ * Tracks:
20
+ * - Detected wallets (by RDNS) - to prevent duplicate detection events
21
+ * - Identified wallet-address pairs - to prevent duplicate identification events
22
+ *
23
+ * Session data expires at end of day (86400 seconds).
24
+ */
25
+ var FormoAnalyticsSession = /** @class */ (function () {
26
+ function FormoAnalyticsSession() {
27
+ }
28
+ /**
29
+ * Generate a unique key for wallet identification tracking
30
+ * Combines address and RDNS to track specific wallet-address combinations
31
+ *
32
+ * @param address The wallet address
33
+ * @param rdns The reverse domain name of the wallet provider
34
+ * @returns A unique identification key
35
+ */
36
+ FormoAnalyticsSession.prototype.generateIdentificationKey = function (address, rdns) {
37
+ // If rdns is missing, use address-only key as fallback for empty identifies
38
+ return rdns ? "".concat(address, ":").concat(rdns) : address;
39
+ };
40
+ /**
41
+ * Check if a wallet provider has been detected in this session
42
+ *
43
+ * @param rdns The reverse domain name of the wallet provider
44
+ * @returns true if the wallet has been detected
45
+ */
46
+ FormoAnalyticsSession.prototype.isWalletDetected = function (rdns) {
47
+ var _a;
48
+ var rdnses = ((_a = cookie().get(SESSION_WALLET_DETECTED_KEY)) === null || _a === void 0 ? void 0 : _a.split(",")) || [];
49
+ return rdnses.includes(rdns);
50
+ };
51
+ /**
52
+ * Mark a wallet provider as detected in this session
53
+ * Prevents duplicate detection events from being emitted
54
+ *
55
+ * @param rdns The reverse domain name of the wallet provider
56
+ */
57
+ FormoAnalyticsSession.prototype.markWalletDetected = function (rdns) {
58
+ var _a;
59
+ var rdnses = ((_a = cookie().get(SESSION_WALLET_DETECTED_KEY)) === null || _a === void 0 ? void 0 : _a.split(",")) || [];
60
+ if (!rdnses.includes(rdns)) {
61
+ rdnses.push(rdns);
62
+ cookie().set(SESSION_WALLET_DETECTED_KEY, rdnses.join(","), {
63
+ // Expires by the end of the day
64
+ expires: new Date(Date.now() + 86400 * 1000).toUTCString(),
65
+ path: "/",
66
+ });
67
+ }
68
+ };
69
+ /**
70
+ * Check if a specific wallet-address combination has been identified
71
+ *
72
+ * @param address The wallet address
73
+ * @param rdns The reverse domain name of the wallet provider
74
+ * @returns true if this wallet-address pair has been identified
75
+ */
76
+ FormoAnalyticsSession.prototype.isWalletIdentified = function (address, rdns) {
77
+ var identifiedKey = this.generateIdentificationKey(address, rdns);
78
+ var cookieValue = cookie().get(SESSION_WALLET_IDENTIFIED_KEY);
79
+ var identifiedWallets = (cookieValue === null || cookieValue === void 0 ? void 0 : cookieValue.split(",")) || [];
80
+ var isIdentified = identifiedWallets.includes(identifiedKey);
81
+ logger.debug("Session: Checking wallet identification", {
82
+ identifiedKey: identifiedKey,
83
+ isIdentified: isIdentified,
84
+ hasRdns: !!rdns,
85
+ });
86
+ return isIdentified;
87
+ };
88
+ /**
89
+ * Mark a wallet-address combination as identified in this session
90
+ * Prevents duplicate identification events from being emitted
91
+ *
92
+ * @param address The wallet address
93
+ * @param rdns The reverse domain name of the wallet provider
94
+ */
95
+ FormoAnalyticsSession.prototype.markWalletIdentified = function (address, rdns) {
96
+ var _a;
97
+ var identifiedKey = this.generateIdentificationKey(address, rdns);
98
+ var identifiedWallets = ((_a = cookie().get(SESSION_WALLET_IDENTIFIED_KEY)) === null || _a === void 0 ? void 0 : _a.split(",")) || [];
99
+ if (!identifiedWallets.includes(identifiedKey)) {
100
+ identifiedWallets.push(identifiedKey);
101
+ var newValue = identifiedWallets.join(",");
102
+ cookie().set(SESSION_WALLET_IDENTIFIED_KEY, newValue, {
103
+ // Expires by the end of the day
104
+ expires: new Date(Date.now() + 86400 * 1000).toUTCString(),
105
+ path: "/",
106
+ });
107
+ logger.debug("Session: Marked wallet as identified", {
108
+ identifiedKey: identifiedKey,
109
+ hasRdns: !!rdns,
110
+ });
111
+ }
112
+ else {
113
+ logger.info("Session: Wallet already marked as identified", {
114
+ identifiedKey: identifiedKey,
115
+ existingWallets: identifiedWallets,
116
+ hasRdns: !!rdns,
117
+ });
118
+ }
119
+ };
120
+ return FormoAnalyticsSession;
121
+ }());
122
+ export { FormoAnalyticsSession };
123
+ //# sourceMappingURL=index.js.map
@@ -1,5 +1,5 @@
1
1
  import { KEY_PREFIX } from "../constant";
2
- import { secureHash } from "../../../utils/hash";
2
+ import { secureHash } from "../../utils/hash";
3
3
  var StorageBlueprint = /** @class */ (function () {
4
4
  function StorageBlueprint(writeKey) {
5
5
  this.writeKey = writeKey;
@@ -1,4 +1,4 @@
1
- import { LogLevel } from "../lib";
1
+ import { LogLevel } from "../logger";
2
2
  import { IFormoEventContext, IFormoEventProperties, SignatureStatus, TransactionStatus } from "./events";
3
3
  import { EIP1193Provider } from "./provider";
4
4
  import { ReactNode } from "react";
@@ -9,6 +9,7 @@ export type ValidInputTypes = Uint8Array | bigint | string | number | boolean;
9
9
  export interface IFormoAnalytics {
10
10
  page(category?: string, name?: string, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
11
11
  reset(): void;
12
+ cleanup(): void;
12
13
  detect(params: {
13
14
  rdns: string;
14
15
  providerName: string;
@@ -40,6 +41,8 @@ export interface IFormoAnalytics {
40
41
  to?: string;
41
42
  value?: string;
42
43
  transactionHash?: string;
44
+ function_name?: string;
45
+ function_args?: Record<string, unknown>;
43
46
  }, properties?: IFormoEventProperties, context?: IFormoEventContext, callback?: (...args: unknown[]) => void): Promise<void>;
44
47
  identify(params: {
45
48
  address: Address;
@@ -112,6 +115,23 @@ export interface ReferralOptions {
112
115
  */
113
116
  pathPattern?: string;
114
117
  }
118
+ /**
119
+ * Configuration options for Wagmi integration
120
+ * Allows the SDK to hook into Wagmi v2 wallet events instead of wrapping EIP-1193 providers
121
+ */
122
+ export interface WagmiOptions {
123
+ /**
124
+ * Wagmi config instance from createConfig()
125
+ * The SDK will subscribe to this config's state changes to track wallet events
126
+ */
127
+ config: any;
128
+ /**
129
+ * Optional QueryClient instance from @tanstack/react-query
130
+ * Required for tracking signature and transaction events via mutation cache
131
+ * If not provided, only connection/disconnection/chain events will be tracked
132
+ */
133
+ queryClient?: any;
134
+ }
115
135
  export interface Options {
116
136
  provider?: EIP1193Provider;
117
137
  tracking?: boolean | TrackingOptions;
@@ -123,6 +143,14 @@ export interface Options {
123
143
  * @default true
124
144
  */
125
145
  autocapture?: boolean | AutocaptureOptions;
146
+ /**
147
+ * Wagmi integration configuration
148
+ * When provided, the SDK will hook into Wagmi's event system instead of wrapping EIP-1193 providers
149
+ * This replaces the default provider tracking with Wagmi's config.subscribe() and MutationCache
150
+ * @requires wagmi@>=2.0.0
151
+ * @requires @tanstack/react-query@>=5.0.0 (for mutation tracking)
152
+ */
153
+ wagmi?: WagmiOptions;
126
154
  /**
127
155
  * Custom API host for sending events through your own domain to bypass ad blockers
128
156
  * - If not provided, events are sent directly to events.formo.so
@@ -146,6 +174,12 @@ export interface Options {
146
174
  * @example { queryParams: ["via"], pathPattern: "/r/([^/]+)" }
147
175
  */
148
176
  referral?: ReferralOptions;
177
+ /**
178
+ * Optional error handler for analytics network failures.
179
+ * Called when event flush fails after all retries.
180
+ * If not provided, errors are silently swallowed.
181
+ */
182
+ errorHandler?: (err: Error) => void;
149
183
  ready?: (formo: IFormoAnalytics) => void;
150
184
  }
151
185
  export interface FormoAnalyticsProviderProps {
@@ -59,10 +59,12 @@ export interface TransactionAPIEvent {
59
59
  status: TransactionStatus;
60
60
  chainId: ChainID;
61
61
  address: Address;
62
- data: string;
63
- to: string;
64
- value: string;
62
+ data?: string;
63
+ to?: string;
64
+ value?: string;
65
65
  transactionHash?: string;
66
+ function_name?: string;
67
+ function_args?: Record<string, unknown>;
66
68
  }
67
69
  export interface SignatureAPIEvent {
68
70
  type: "signature";
@@ -1,6 +1,4 @@
1
1
  export var isNullish = function (item) {
2
- // Using "null" value intentionally for validation
3
- // eslint-disable-next-line no-null/no-null
4
2
  return item === undefined || item === null;
5
3
  };
6
4
  //# sourceMappingURL=object.js.map
@@ -1,2 +1,2 @@
1
- export declare const version = "1.25.0";
1
+ export declare const version = "1.27.0";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // This file is auto-generated by scripts/update-version.js during npm version
2
2
  // Do not edit manually - it will be overwritten
3
- export var version = '1.25.0';
3
+ export var version = '1.27.0';
4
4
  //# sourceMappingURL=version.js.map
@@ -0,0 +1,93 @@
1
+ /**
2
+ * WagmiEventHandler
3
+ *
4
+ * Handles wallet event tracking by hooking into Wagmi v2's config.subscribe()
5
+ * and TanStack Query's MutationCache. This replaces the EIP-1193 provider
6
+ * wrapping approach when Wagmi mode is enabled.
7
+ */
8
+ import { FormoAnalytics } from "../FormoAnalytics";
9
+ import { WagmiConfig, QueryClient } from "./types";
10
+ export declare class WagmiEventHandler {
11
+ private formo;
12
+ private wagmiConfig;
13
+ private queryClient?;
14
+ private unsubscribers;
15
+ private trackingState;
16
+ /**
17
+ * Track processed mutation states to prevent duplicate event emissions
18
+ * Key format: `${mutationId}:${status}`
19
+ */
20
+ private processedMutations;
21
+ /**
22
+ * Track processed query states to prevent duplicate event emissions
23
+ * Key format: `${queryHash}:${status}`
24
+ */
25
+ private processedQueries;
26
+ /**
27
+ * Store transaction details from BROADCASTED events for use in CONFIRMED/REVERTED
28
+ * Key: transactionHash, Value: transaction details including the original sender address
29
+ */
30
+ private pendingTransactions;
31
+ constructor(formoAnalytics: FormoAnalytics, wagmiConfig: WagmiConfig, queryClient?: QueryClient);
32
+ /**
33
+ * Set up listeners for wallet connection, disconnection, and chain changes
34
+ */
35
+ private setupConnectionListeners;
36
+ /**
37
+ * Handle status changes (connect/disconnect)
38
+ */
39
+ private handleStatusChange;
40
+ /**
41
+ * Handle chain ID changes
42
+ */
43
+ private handleChainChange;
44
+ /**
45
+ * Set up mutation tracking for signatures and transactions
46
+ */
47
+ private setupMutationTracking;
48
+ /**
49
+ * Set up query tracking for transaction confirmations
50
+ * Listens for waitForTransactionReceipt queries to detect CONFIRMED status
51
+ */
52
+ private setupQueryTracking;
53
+ /**
54
+ * Handle query cache events (transaction confirmations)
55
+ */
56
+ private handleQueryEvent;
57
+ /**
58
+ * Handle waitForTransactionReceipt query completion
59
+ * Emits CONFIRMED or REVERTED transaction status
60
+ */
61
+ private handleTransactionReceiptQuery;
62
+ /**
63
+ * Handle mutation cache events (signatures, transactions)
64
+ */
65
+ private handleMutationEvent;
66
+ /**
67
+ * Handle signature mutations (signMessage, signTypedData)
68
+ */
69
+ private handleSignatureMutation;
70
+ /**
71
+ * Handle transaction mutations (sendTransaction, writeContract)
72
+ */
73
+ private handleTransactionMutation;
74
+ /**
75
+ * Get the current Wagmi state
76
+ * Supports both getState() method and direct state property access
77
+ * for compatibility with different Wagmi wrappers (RainbowKit, etc.)
78
+ */
79
+ private getState;
80
+ /**
81
+ * Get the currently connected address from Wagmi state
82
+ */
83
+ private getConnectedAddress;
84
+ /**
85
+ * Get the connector name from Wagmi state
86
+ */
87
+ private getConnectorName;
88
+ /**
89
+ * Clean up all subscriptions
90
+ */
91
+ cleanup(): void;
92
+ }
93
+ //# sourceMappingURL=WagmiEventHandler.d.ts.map