@formo/analytics 1.24.0 → 1.26.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 (184) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -74
  3. package/dist/cjs/src/FormoAnalytics.d.ts +24 -14
  4. package/dist/cjs/src/FormoAnalytics.js +195 -255
  5. package/dist/cjs/src/FormoAnalyticsProvider.js +71 -13
  6. package/dist/cjs/src/{lib/consent.d.ts → 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 +1 -1
  12. package/dist/cjs/src/{lib/event → event}/EventFactory.js +30 -13
  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/event/constants.d.ts +11 -0
  16. package/dist/cjs/src/event/constants.js +34 -0
  17. package/dist/cjs/src/{lib/event → event}/type.d.ts +1 -1
  18. package/dist/cjs/src/{lib/event → event}/utils.d.ts +1 -1
  19. package/dist/cjs/src/{lib/event → event}/utils.js +1 -1
  20. package/dist/cjs/src/{lib/fetch.d.ts → fetch/index.d.ts} +1 -1
  21. package/dist/cjs/src/{lib/fetch.js → fetch/index.js} +1 -1
  22. package/dist/cjs/src/provider/detection.d.ts +58 -0
  23. package/dist/cjs/src/provider/detection.js +103 -0
  24. package/dist/cjs/src/provider/index.d.ts +6 -0
  25. package/dist/cjs/src/provider/index.js +11 -0
  26. package/dist/{esm/src/lib → cjs/src}/queue/EventQueue.d.ts +1 -1
  27. package/dist/cjs/src/{lib/queue → queue}/EventQueue.js +3 -3
  28. package/dist/{esm/src/lib → cjs/src}/queue/type.d.ts +1 -1
  29. package/dist/cjs/src/session/index.d.ts +91 -0
  30. package/dist/cjs/src/session/index.js +126 -0
  31. package/dist/cjs/src/{lib/storage → storage}/built-in/blueprint.js +1 -1
  32. package/dist/cjs/src/types/base.d.ts +27 -1
  33. package/dist/cjs/src/validators/object.js +0 -2
  34. package/dist/cjs/src/version.d.ts +1 -1
  35. package/dist/cjs/src/version.js +1 -1
  36. package/dist/cjs/src/wagmi/WagmiEventHandler.d.ts +69 -0
  37. package/dist/cjs/src/wagmi/WagmiEventHandler.js +449 -0
  38. package/dist/cjs/src/wagmi/index.d.ts +9 -0
  39. package/dist/cjs/src/wagmi/index.js +12 -0
  40. package/dist/cjs/src/wagmi/types.d.ts +115 -0
  41. package/dist/cjs/src/wagmi/types.js +10 -0
  42. package/dist/esm/src/FormoAnalytics.d.ts +24 -14
  43. package/dist/esm/src/FormoAnalytics.js +85 -145
  44. package/dist/esm/src/FormoAnalyticsProvider.js +68 -10
  45. package/dist/esm/src/{lib/consent.d.ts → consent/index.d.ts} +1 -1
  46. package/dist/esm/src/{lib/consent.js → consent/index.js} +1 -1
  47. package/dist/esm/src/constants/base.d.ts +0 -2
  48. package/dist/esm/src/constants/base.js +2 -2
  49. package/dist/esm/src/constants/config.js +1 -1
  50. package/dist/esm/src/{lib/event → event}/EventFactory.d.ts +1 -1
  51. package/dist/esm/src/{lib/event → event}/EventFactory.js +31 -14
  52. package/dist/esm/src/{lib/event → event}/EventManager.d.ts +1 -1
  53. package/dist/esm/src/{lib/event → event}/EventManager.js +1 -1
  54. package/dist/esm/src/event/constants.d.ts +11 -0
  55. package/dist/esm/src/event/constants.js +29 -0
  56. package/dist/esm/src/{lib/event → event}/type.d.ts +1 -1
  57. package/dist/esm/src/{lib/event → event}/utils.d.ts +1 -1
  58. package/dist/esm/src/{lib/event → event}/utils.js +1 -1
  59. package/dist/esm/src/{lib/fetch.d.ts → fetch/index.d.ts} +1 -1
  60. package/dist/esm/src/{lib/fetch.js → fetch/index.js} +1 -1
  61. package/dist/esm/src/provider/detection.d.ts +58 -0
  62. package/dist/esm/src/provider/detection.js +98 -0
  63. package/dist/esm/src/provider/index.d.ts +6 -0
  64. package/dist/esm/src/provider/index.js +5 -0
  65. package/dist/{cjs/src/lib → esm/src}/queue/EventQueue.d.ts +1 -1
  66. package/dist/esm/src/{lib/queue → queue}/EventQueue.js +3 -3
  67. package/dist/{cjs/src/lib → esm/src}/queue/type.d.ts +1 -1
  68. package/dist/esm/src/session/index.d.ts +91 -0
  69. package/dist/esm/src/session/index.js +123 -0
  70. package/dist/esm/src/{lib/storage → storage}/built-in/blueprint.js +1 -1
  71. package/dist/esm/src/types/base.d.ts +27 -1
  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 +69 -0
  76. package/dist/esm/src/wagmi/WagmiEventHandler.js +446 -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 +115 -0
  80. package/dist/esm/src/wagmi/types.js +9 -0
  81. package/dist/index.umd.min.js +1 -1
  82. package/package.json +19 -4
  83. package/dist/cjs/src/lib/event/constants.d.ts +0 -4
  84. package/dist/cjs/src/lib/event/constants.js +0 -8
  85. package/dist/cjs/src/lib/index.d.ts +0 -7
  86. package/dist/cjs/src/lib/index.js +0 -28
  87. package/dist/esm/src/lib/event/constants.d.ts +0 -4
  88. package/dist/esm/src/lib/event/constants.js +0 -4
  89. package/dist/esm/src/lib/index.d.ts +0 -7
  90. package/dist/esm/src/lib/index.js +0 -7
  91. /package/dist/cjs/src/{lib/browser → browser}/browsers.d.ts +0 -0
  92. /package/dist/cjs/src/{lib/browser → browser}/browsers.js +0 -0
  93. /package/dist/cjs/src/{lib/event → event}/index.d.ts +0 -0
  94. /package/dist/cjs/src/{lib/event → event}/index.js +0 -0
  95. /package/dist/cjs/src/{lib/event → event}/type.js +0 -0
  96. /package/dist/cjs/src/{lib/logger → logger}/Logger.d.ts +0 -0
  97. /package/dist/cjs/src/{lib/logger → logger}/Logger.js +0 -0
  98. /package/dist/cjs/src/{lib/logger → logger}/index.d.ts +0 -0
  99. /package/dist/cjs/src/{lib/logger → logger}/index.js +0 -0
  100. /package/dist/cjs/src/{lib/logger → logger}/type.d.ts +0 -0
  101. /package/dist/cjs/src/{lib/logger → logger}/type.js +0 -0
  102. /package/dist/cjs/src/{lib/queue → queue}/index.d.ts +0 -0
  103. /package/dist/cjs/src/{lib/queue → queue}/index.js +0 -0
  104. /package/dist/cjs/src/{lib/queue → queue}/type.js +0 -0
  105. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry1.d.ts +0 -0
  106. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry1.js +0 -0
  107. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry2.d.ts +0 -0
  108. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry2.js +0 -0
  109. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry3.d.ts +0 -0
  110. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_curry3.js +0 -0
  111. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_has.d.ts +0 -0
  112. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_has.js +0 -0
  113. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isObject.d.ts +0 -0
  114. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isObject.js +0 -0
  115. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isPlaceholder.d.ts +0 -0
  116. /package/dist/cjs/src/{lib/ramda → ramda}/internal/_isPlaceholder.js +0 -0
  117. /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepRight.d.ts +0 -0
  118. /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepRight.js +0 -0
  119. /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepWithKey.d.ts +0 -0
  120. /package/dist/cjs/src/{lib/ramda → ramda}/mergeDeepWithKey.js +0 -0
  121. /package/dist/cjs/src/{lib/ramda → ramda}/mergeWithKey.d.ts +0 -0
  122. /package/dist/cjs/src/{lib/ramda → ramda}/mergeWithKey.js +0 -0
  123. /package/dist/cjs/src/{lib/storage → storage}/StorageManager.d.ts +0 -0
  124. /package/dist/cjs/src/{lib/storage → storage}/StorageManager.js +0 -0
  125. /package/dist/cjs/src/{lib/storage → storage}/built-in/blueprint.d.ts +0 -0
  126. /package/dist/cjs/src/{lib/storage → storage}/built-in/cookie.d.ts +0 -0
  127. /package/dist/cjs/src/{lib/storage → storage}/built-in/cookie.js +0 -0
  128. /package/dist/cjs/src/{lib/storage → storage}/built-in/memory.d.ts +0 -0
  129. /package/dist/cjs/src/{lib/storage → storage}/built-in/memory.js +0 -0
  130. /package/dist/cjs/src/{lib/storage → storage}/built-in/web.d.ts +0 -0
  131. /package/dist/cjs/src/{lib/storage → storage}/built-in/web.js +0 -0
  132. /package/dist/cjs/src/{lib/storage → storage}/constant.d.ts +0 -0
  133. /package/dist/cjs/src/{lib/storage → storage}/constant.js +0 -0
  134. /package/dist/cjs/src/{lib/storage → storage}/index.d.ts +0 -0
  135. /package/dist/cjs/src/{lib/storage → storage}/index.js +0 -0
  136. /package/dist/cjs/src/{lib/storage → storage}/type.d.ts +0 -0
  137. /package/dist/cjs/src/{lib/storage → storage}/type.js +0 -0
  138. /package/dist/esm/src/{lib/browser → browser}/browsers.d.ts +0 -0
  139. /package/dist/esm/src/{lib/browser → browser}/browsers.js +0 -0
  140. /package/dist/esm/src/{lib/event → event}/index.d.ts +0 -0
  141. /package/dist/esm/src/{lib/event → event}/index.js +0 -0
  142. /package/dist/esm/src/{lib/event → event}/type.js +0 -0
  143. /package/dist/esm/src/{lib/logger → logger}/Logger.d.ts +0 -0
  144. /package/dist/esm/src/{lib/logger → logger}/Logger.js +0 -0
  145. /package/dist/esm/src/{lib/logger → logger}/index.d.ts +0 -0
  146. /package/dist/esm/src/{lib/logger → logger}/index.js +0 -0
  147. /package/dist/esm/src/{lib/logger → logger}/type.d.ts +0 -0
  148. /package/dist/esm/src/{lib/logger → logger}/type.js +0 -0
  149. /package/dist/esm/src/{lib/queue → queue}/index.d.ts +0 -0
  150. /package/dist/esm/src/{lib/queue → queue}/index.js +0 -0
  151. /package/dist/esm/src/{lib/queue → queue}/type.js +0 -0
  152. /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry1.d.ts +0 -0
  153. /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry1.js +0 -0
  154. /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry2.d.ts +0 -0
  155. /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry2.js +0 -0
  156. /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry3.d.ts +0 -0
  157. /package/dist/esm/src/{lib/ramda → ramda}/internal/_curry3.js +0 -0
  158. /package/dist/esm/src/{lib/ramda → ramda}/internal/_has.d.ts +0 -0
  159. /package/dist/esm/src/{lib/ramda → ramda}/internal/_has.js +0 -0
  160. /package/dist/esm/src/{lib/ramda → ramda}/internal/_isObject.d.ts +0 -0
  161. /package/dist/esm/src/{lib/ramda → ramda}/internal/_isObject.js +0 -0
  162. /package/dist/esm/src/{lib/ramda → ramda}/internal/_isPlaceholder.d.ts +0 -0
  163. /package/dist/esm/src/{lib/ramda → ramda}/internal/_isPlaceholder.js +0 -0
  164. /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepRight.d.ts +0 -0
  165. /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepRight.js +0 -0
  166. /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepWithKey.d.ts +0 -0
  167. /package/dist/esm/src/{lib/ramda → ramda}/mergeDeepWithKey.js +0 -0
  168. /package/dist/esm/src/{lib/ramda → ramda}/mergeWithKey.d.ts +0 -0
  169. /package/dist/esm/src/{lib/ramda → ramda}/mergeWithKey.js +0 -0
  170. /package/dist/esm/src/{lib/storage → storage}/StorageManager.d.ts +0 -0
  171. /package/dist/esm/src/{lib/storage → storage}/StorageManager.js +0 -0
  172. /package/dist/esm/src/{lib/storage → storage}/built-in/blueprint.d.ts +0 -0
  173. /package/dist/esm/src/{lib/storage → storage}/built-in/cookie.d.ts +0 -0
  174. /package/dist/esm/src/{lib/storage → storage}/built-in/cookie.js +0 -0
  175. /package/dist/esm/src/{lib/storage → storage}/built-in/memory.d.ts +0 -0
  176. /package/dist/esm/src/{lib/storage → storage}/built-in/memory.js +0 -0
  177. /package/dist/esm/src/{lib/storage → storage}/built-in/web.d.ts +0 -0
  178. /package/dist/esm/src/{lib/storage → storage}/built-in/web.js +0 -0
  179. /package/dist/esm/src/{lib/storage → storage}/constant.d.ts +0 -0
  180. /package/dist/esm/src/{lib/storage → storage}/constant.js +0 -0
  181. /package/dist/esm/src/{lib/storage → storage}/index.d.ts +0 -0
  182. /package/dist/esm/src/{lib/storage → storage}/index.js +0 -0
  183. /package/dist/esm/src/{lib/storage → storage}/type.d.ts +0 -0
  184. /package/dist/esm/src/{lib/storage → storage}/type.js +0 -0
@@ -1,4 +1,4 @@
1
- import { Address, APIEvent, IFormoEvent } from "../../types";
1
+ import { Address, APIEvent, IFormoEvent } from "../types";
2
2
  export interface IEventManager {
3
3
  addEvent(event: APIEvent, address?: Address, userId?: string): Promise<void>;
4
4
  }
@@ -1,4 +1,4 @@
1
- import { AnonymousID } from "../../types";
1
+ import { AnonymousID } from "../types";
2
2
  declare const generateAnonymousId: (key: string) => AnonymousID;
3
3
  declare function getCookieDomain(hostname?: string): string;
4
4
  export { generateAnonymousId, getCookieDomain };
@@ -1,4 +1,4 @@
1
- import { generateNativeUUID } from "../../utils";
1
+ import { generateNativeUUID } from "../utils";
2
2
  import { cookie } from "../storage";
3
3
  var generateAnonymousId = function (key) {
4
4
  var storedAnonymousId = cookie().get(key);
@@ -1,3 +1,3 @@
1
1
  declare const _default: (input: string | URL | Request, init?: (RequestInit & import("fetch-retry").RequestInitRetryParams<typeof globalThis.fetch>) | undefined) => Promise<Response>;
2
2
  export default _default;
3
- //# sourceMappingURL=fetch.d.ts.map
3
+ //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,3 @@
1
1
  import fetch from "fetch-retry";
2
2
  export default fetch(global.fetch);
3
- //# sourceMappingURL=fetch.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Provider detection utilities for identifying wallet providers
3
+ */
4
+ import { EIP1193Provider } from "../types";
5
+ /**
6
+ * Default icon for providers without custom icons
7
+ */
8
+ export declare const DEFAULT_PROVIDER_ICON: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBmaWxsPSIjRkZGIi8+CjxwYXRoIGQ9Ik0xNiA4TDggMjRoMTZMMTYgOHoiIGZpbGw9IiMzMzMiLz4KPC9zdmc+Cg==";
9
+ /**
10
+ * Common wallet provider flags used for detection
11
+ */
12
+ export interface WalletProviderFlags {
13
+ isMetaMask?: boolean;
14
+ isCoinbaseWallet?: boolean;
15
+ isWalletConnect?: boolean;
16
+ isTrust?: boolean;
17
+ isBraveWallet?: boolean;
18
+ isPhantom?: boolean;
19
+ }
20
+ /**
21
+ * Provider information returned by detection
22
+ */
23
+ export interface ProviderInfo {
24
+ name: string;
25
+ rdns: string;
26
+ uuid: string;
27
+ icon: `data:image/${string}`;
28
+ }
29
+ /**
30
+ * Attempts to detect information about an injected provider by examining
31
+ * common wallet-specific flags and properties.
32
+ *
33
+ * @param provider The injected provider to analyze
34
+ * @returns Provider information with fallback values if detection fails
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * const provider = window.ethereum;
39
+ * const info = detectInjectedProviderInfo(provider);
40
+ * console.log(info.name); // "MetaMask" or "Injected Provider"
41
+ * ```
42
+ */
43
+ export declare function detectInjectedProviderInfo(provider: EIP1193Provider): ProviderInfo;
44
+ /**
45
+ * Validates that a provider implements the required EIP-1193 interface
46
+ *
47
+ * @param provider The provider to validate
48
+ * @returns true if the provider has all required methods
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * if (isValidProvider(window.ethereum)) {
53
+ * // Safe to use provider
54
+ * }
55
+ * ```
56
+ */
57
+ export declare function isValidProvider(provider: EIP1193Provider | undefined | null): provider is EIP1193Provider;
58
+ //# sourceMappingURL=detection.d.ts.map
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Provider detection utilities for identifying wallet providers
3
+ */
4
+ /**
5
+ * Default icon for providers without custom icons
6
+ */
7
+ export var DEFAULT_PROVIDER_ICON = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiBmaWxsPSIjRkZGIi8+CjxwYXRoIGQ9Ik0xNiA4TDggMjRoMTZMMTYgOHoiIGZpbGw9IiMzMzMiLz4KPC9zdmc+Cg==";
8
+ /**
9
+ * Known wallet providers with their identifying flags and metadata
10
+ */
11
+ var KNOWN_PROVIDERS = [
12
+ {
13
+ flag: 'isMetaMask',
14
+ name: 'MetaMask',
15
+ rdns: 'io.metamask',
16
+ },
17
+ {
18
+ flag: 'isCoinbaseWallet',
19
+ name: 'Coinbase Wallet',
20
+ rdns: 'com.coinbase.wallet',
21
+ },
22
+ {
23
+ flag: 'isWalletConnect',
24
+ name: 'WalletConnect',
25
+ rdns: 'com.walletconnect',
26
+ },
27
+ {
28
+ flag: 'isTrust',
29
+ name: 'Trust Wallet',
30
+ rdns: 'com.trustwallet',
31
+ },
32
+ {
33
+ flag: 'isBraveWallet',
34
+ name: 'Brave Wallet',
35
+ rdns: 'com.brave.wallet',
36
+ },
37
+ {
38
+ flag: 'isPhantom',
39
+ name: 'Phantom',
40
+ rdns: 'app.phantom',
41
+ },
42
+ ];
43
+ /**
44
+ * Attempts to detect information about an injected provider by examining
45
+ * common wallet-specific flags and properties.
46
+ *
47
+ * @param provider The injected provider to analyze
48
+ * @returns Provider information with fallback values if detection fails
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * const provider = window.ethereum;
53
+ * const info = detectInjectedProviderInfo(provider);
54
+ * console.log(info.name); // "MetaMask" or "Injected Provider"
55
+ * ```
56
+ */
57
+ export function detectInjectedProviderInfo(provider) {
58
+ // Default values for unknown providers
59
+ var name = "Injected Provider";
60
+ var rdns = "io.injected.provider";
61
+ // Cast to check for wallet-specific flags
62
+ var flags = provider;
63
+ // Check known providers in order of precedence
64
+ for (var _i = 0, KNOWN_PROVIDERS_1 = KNOWN_PROVIDERS; _i < KNOWN_PROVIDERS_1.length; _i++) {
65
+ var knownProvider = KNOWN_PROVIDERS_1[_i];
66
+ if (flags[knownProvider.flag]) {
67
+ name = knownProvider.name;
68
+ rdns = knownProvider.rdns;
69
+ break;
70
+ }
71
+ }
72
+ return {
73
+ name: name,
74
+ rdns: rdns,
75
+ uuid: "injected-".concat(rdns.replace(/[^a-zA-Z0-9]/g, "-")),
76
+ icon: DEFAULT_PROVIDER_ICON,
77
+ };
78
+ }
79
+ /**
80
+ * Validates that a provider implements the required EIP-1193 interface
81
+ *
82
+ * @param provider The provider to validate
83
+ * @returns true if the provider has all required methods
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * if (isValidProvider(window.ethereum)) {
88
+ * // Safe to use provider
89
+ * }
90
+ * ```
91
+ */
92
+ export function isValidProvider(provider) {
93
+ return (!!provider &&
94
+ typeof provider.request === "function" &&
95
+ typeof provider.on === "function" &&
96
+ typeof provider.removeListener === "function");
97
+ }
98
+ //# sourceMappingURL=detection.js.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Provider-related exports
3
+ */
4
+ export { detectInjectedProviderInfo, isValidProvider, DEFAULT_PROVIDER_ICON, } from './detection';
5
+ export type { WalletProviderFlags, ProviderInfo, } from './detection';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Provider-related exports
3
+ */
4
+ export { detectInjectedProviderInfo, isValidProvider, DEFAULT_PROVIDER_ICON, } from './detection';
5
+ //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- import { IFormoEvent } from "../../types";
1
+ import { IFormoEvent } from "../types";
2
2
  import { IEventQueue } from "./type";
3
3
  type Options = {
4
4
  apiHost: string;
@@ -45,10 +45,10 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
45
45
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
46
  }
47
47
  };
48
- import { isNetworkError } from "../../validators";
49
- import { clampNumber, getActionDescriptor, hash, millisecondsToSecond, toDateHourMinute, } from "../../utils";
48
+ import { isNetworkError } from "../validators";
49
+ import { clampNumber, getActionDescriptor, hash, millisecondsToSecond, toDateHourMinute, } from "../utils";
50
50
  import { logger } from "../logger";
51
- import { EVENTS_API_REQUEST_HEADER } from "../../constants";
51
+ import { EVENTS_API_REQUEST_HEADER } from "../constants";
52
52
  import fetch from "../fetch";
53
53
  var noop = function () { };
54
54
  var DEFAULT_RETRY = 3;
@@ -1,4 +1,4 @@
1
- import { IFormoEvent } from "../../types";
1
+ import { IFormoEvent } from "../types";
2
2
  export interface IEventQueue {
3
3
  enqueue(event: IFormoEvent, callback?: (...args: any) => void): Promise<void>;
4
4
  flush(callback?: (...args: any) => void): Promise<any>;
@@ -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;
@@ -112,6 +113,23 @@ export interface ReferralOptions {
112
113
  */
113
114
  pathPattern?: string;
114
115
  }
116
+ /**
117
+ * Configuration options for Wagmi integration
118
+ * Allows the SDK to hook into Wagmi v2 wallet events instead of wrapping EIP-1193 providers
119
+ */
120
+ export interface WagmiOptions {
121
+ /**
122
+ * Wagmi config instance from createConfig()
123
+ * The SDK will subscribe to this config's state changes to track wallet events
124
+ */
125
+ config: any;
126
+ /**
127
+ * Optional QueryClient instance from @tanstack/react-query
128
+ * Required for tracking signature and transaction events via mutation cache
129
+ * If not provided, only connection/disconnection/chain events will be tracked
130
+ */
131
+ queryClient?: any;
132
+ }
115
133
  export interface Options {
116
134
  provider?: EIP1193Provider;
117
135
  tracking?: boolean | TrackingOptions;
@@ -123,6 +141,14 @@ export interface Options {
123
141
  * @default true
124
142
  */
125
143
  autocapture?: boolean | AutocaptureOptions;
144
+ /**
145
+ * Wagmi integration configuration
146
+ * When provided, the SDK will hook into Wagmi's event system instead of wrapping EIP-1193 providers
147
+ * This replaces the default provider tracking with Wagmi's config.subscribe() and MutationCache
148
+ * @requires wagmi@>=2.0.0
149
+ * @requires @tanstack/react-query@>=5.0.0 (for mutation tracking)
150
+ */
151
+ wagmi?: WagmiOptions;
126
152
  /**
127
153
  * Custom API host for sending events through your own domain to bypass ad blockers
128
154
  * - If not provided, events are sent directly to events.formo.so
@@ -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.24.0";
1
+ export declare const version = "1.26.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.24.0';
3
+ export var version = '1.26.0';
4
4
  //# sourceMappingURL=version.js.map
@@ -0,0 +1,69 @@
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
+ constructor(formoAnalytics: FormoAnalytics, wagmiConfig: WagmiConfig, queryClient?: QueryClient);
22
+ /**
23
+ * Set up listeners for wallet connection, disconnection, and chain changes
24
+ */
25
+ private setupConnectionListeners;
26
+ /**
27
+ * Handle status changes (connect/disconnect)
28
+ */
29
+ private handleStatusChange;
30
+ /**
31
+ * Handle chain ID changes
32
+ */
33
+ private handleChainChange;
34
+ /**
35
+ * Set up mutation tracking for signatures and transactions
36
+ */
37
+ private setupMutationTracking;
38
+ /**
39
+ * Handle mutation cache events (signatures, transactions)
40
+ */
41
+ private handleMutationEvent;
42
+ /**
43
+ * Handle signature mutations (signMessage, signTypedData)
44
+ */
45
+ private handleSignatureMutation;
46
+ /**
47
+ * Handle transaction mutations (sendTransaction, writeContract)
48
+ */
49
+ private handleTransactionMutation;
50
+ /**
51
+ * Get the current Wagmi state
52
+ * Supports both getState() method and direct state property access
53
+ * for compatibility with different Wagmi wrappers (RainbowKit, etc.)
54
+ */
55
+ private getState;
56
+ /**
57
+ * Get the currently connected address from Wagmi state
58
+ */
59
+ private getConnectedAddress;
60
+ /**
61
+ * Get the connector name from Wagmi state
62
+ */
63
+ private getConnectorName;
64
+ /**
65
+ * Clean up all subscriptions
66
+ */
67
+ cleanup(): void;
68
+ }
69
+ //# sourceMappingURL=WagmiEventHandler.d.ts.map