@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,8 @@
1
+ /**
2
+ * Wagmi integration module
3
+ *
4
+ * Provides integration with Wagmi v2 for wallet event tracking.
5
+ * This module exports the WagmiEventHandler and related types.
6
+ */
7
+ export { WagmiEventHandler } from "./WagmiEventHandler";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Wagmi-specific type definitions for wallet event tracking
3
+ *
4
+ * These types provide TypeScript interfaces for Wagmi v2 integration,
5
+ * allowing the SDK to hook into Wagmi's config.subscribe() and MutationCache
6
+ * to track wallet events without wrapping EIP-1193 providers.
7
+ */
8
+ /**
9
+ * Wagmi config state structure
10
+ * Based on Wagmi v2 internal state
11
+ */
12
+ export interface WagmiState {
13
+ chainId?: number;
14
+ connections: Map<string, WagmiConnection>;
15
+ current?: string;
16
+ status: 'connected' | 'disconnected' | 'connecting' | 'reconnecting';
17
+ }
18
+ /**
19
+ * Wagmi connection information
20
+ */
21
+ export interface WagmiConnection {
22
+ accounts: readonly string[];
23
+ chainId: number;
24
+ connector: WagmiConnector;
25
+ }
26
+ /**
27
+ * Wagmi connector interface
28
+ */
29
+ export interface WagmiConnector {
30
+ id: string;
31
+ name: string;
32
+ type: string;
33
+ uid: string;
34
+ }
35
+ /**
36
+ * Wagmi config interface
37
+ * This is the config object returned by createConfig() or getDefaultConfig() (RainbowKit)
38
+ *
39
+ * Note: Different Wagmi wrappers (RainbowKit, etc.) may expose state differently:
40
+ * - Some use getState() method
41
+ * - Some expose state as a direct property
42
+ * We support both patterns for maximum compatibility.
43
+ */
44
+ export interface WagmiConfig {
45
+ subscribe<TData>(selector: (state: WagmiState) => TData, listener: (selectedState: TData, previousSelectedState: TData) => void, options?: {
46
+ equalityFn?: (a: TData, b: TData) => boolean;
47
+ fireImmediately?: boolean;
48
+ }): () => void;
49
+ /**
50
+ * Get state method - available in some Wagmi versions
51
+ */
52
+ getState?(): WagmiState;
53
+ /**
54
+ * Direct state property - available in RainbowKit and some Wagmi setups
55
+ */
56
+ state?: WagmiState;
57
+ }
58
+ /**
59
+ * React Query (TanStack Query) mutation state
60
+ */
61
+ export interface MutationState {
62
+ status: 'idle' | 'pending' | 'success' | 'error';
63
+ data?: any;
64
+ error?: Error | null;
65
+ variables?: any;
66
+ context?: any;
67
+ }
68
+ /**
69
+ * React Query mutation object
70
+ */
71
+ export interface Mutation {
72
+ state: MutationState;
73
+ options: {
74
+ mutationKey?: readonly unknown[];
75
+ [key: string]: any;
76
+ };
77
+ mutationId: number;
78
+ }
79
+ /**
80
+ * React Query mutation cache event
81
+ */
82
+ export interface MutationCacheEvent {
83
+ type: 'added' | 'removed' | 'updated';
84
+ mutation: Mutation;
85
+ }
86
+ /**
87
+ * React Query MutationCache interface
88
+ */
89
+ export interface MutationCache {
90
+ subscribe(listener: (event: MutationCacheEvent) => void): () => void;
91
+ }
92
+ /**
93
+ * React Query query state
94
+ */
95
+ export interface QueryState {
96
+ status: 'pending' | 'success' | 'error';
97
+ data?: any;
98
+ error?: Error | null;
99
+ fetchStatus: 'fetching' | 'paused' | 'idle';
100
+ }
101
+ /**
102
+ * React Query query object
103
+ */
104
+ export interface Query {
105
+ state: QueryState;
106
+ queryKey: readonly unknown[];
107
+ queryHash: string;
108
+ }
109
+ /**
110
+ * React Query query cache event
111
+ */
112
+ export interface QueryCacheEvent {
113
+ type: 'added' | 'removed' | 'updated';
114
+ query: Query;
115
+ }
116
+ /**
117
+ * React Query QueryCache interface
118
+ */
119
+ export interface QueryCache {
120
+ subscribe(listener: (event: QueryCacheEvent) => void): () => void;
121
+ }
122
+ /**
123
+ * React Query QueryClient interface
124
+ */
125
+ export interface QueryClient {
126
+ getMutationCache(): MutationCache;
127
+ getQueryCache(): QueryCache;
128
+ }
129
+ /**
130
+ * Unsubscribe function returned by subscriptions
131
+ */
132
+ export type UnsubscribeFn = () => void;
133
+ /**
134
+ * Wagmi mutation key types for identifying wallet operations
135
+ */
136
+ export type WagmiMutationKey = 'signMessage' | 'signTypedData' | 'sendTransaction' | 'writeContract';
137
+ /**
138
+ * Internal tracking state for Wagmi event handler
139
+ */
140
+ export interface WagmiTrackingState {
141
+ lastChainId?: number;
142
+ lastAddress?: string;
143
+ lastStatus?: WagmiState['status'];
144
+ isProcessing: boolean;
145
+ }
146
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Wagmi-specific type definitions for wallet event tracking
3
+ *
4
+ * These types provide TypeScript interfaces for Wagmi v2 integration,
5
+ * allowing the SDK to hook into Wagmi's config.subscribe() and MutationCache
6
+ * to track wallet events without wrapping EIP-1193 providers.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Utility functions for Wagmi event handling
3
+ *
4
+ * Provides ABI encoding utilities for extracting transaction data from
5
+ * writeContract mutations without requiring viem as a direct dependency.
6
+ */
7
+ /**
8
+ * Flatten a nested object into a flat object with underscore-separated keys.
9
+ * Only leaf values (primitives) are included; intermediate objects are not.
10
+ *
11
+ * Example:
12
+ * Input: { o: { x: "100", inner: { a: "42", b: "0xRecipient" } } }
13
+ * Output: { o_x: "100", o_inner_a: "42", o_inner_b: "0xRecipient" }
14
+ *
15
+ * @param obj - The object to flatten
16
+ * @param prefix - Optional prefix for keys (used in recursion)
17
+ * @returns A flat object with underscore-separated keys
18
+ */
19
+ export declare function flattenObject(obj: Record<string, unknown>, prefix?: string): Record<string, unknown>;
20
+ /**
21
+ * ABI function item type
22
+ */
23
+ export interface AbiItem {
24
+ type: string;
25
+ name?: string;
26
+ inputs?: AbiInput[];
27
+ outputs?: AbiOutput[];
28
+ stateMutability?: string;
29
+ }
30
+ export interface AbiInput {
31
+ name: string;
32
+ type: string;
33
+ indexed?: boolean;
34
+ components?: AbiInput[];
35
+ internalType?: string;
36
+ }
37
+ export interface AbiOutput {
38
+ name: string;
39
+ type: string;
40
+ components?: AbiOutput[];
41
+ internalType?: string;
42
+ }
43
+ /**
44
+ * Encode writeContract data using viem's encodeFunctionData
45
+ *
46
+ * @param abi - The contract ABI
47
+ * @param functionName - The function name to encode
48
+ * @param args - The function arguments
49
+ * @returns The encoded calldata or undefined if encoding fails
50
+ */
51
+ export declare function encodeWriteContractData(abi: AbiItem[], functionName: string, args?: unknown[]): string | undefined;
52
+ /**
53
+ * Extract function arguments as a name-value map from ABI and args array
54
+ *
55
+ * @param abi - The contract ABI
56
+ * @param functionName - The function name
57
+ * @param args - The function arguments array
58
+ * @returns A map of argument names to values, or undefined if extraction fails
59
+ */
60
+ export declare function extractFunctionArgs(abi: AbiItem[], functionName: string, args?: unknown[]): Record<string, unknown> | undefined;
61
+ /**
62
+ * Build safe function args with collision handling and struct flattening.
63
+ *
64
+ * This function:
65
+ * 1. Prefixes top-level args that collide with reserved fields (e.g., 'to' -> 'arg_to')
66
+ * 2. Flattens nested struct values for easier querying (e.g., order.maker -> order_maker)
67
+ * 3. Skips flattened keys that would collide with existing top-level args
68
+ *
69
+ * @param functionArgs - The extracted function arguments
70
+ * @param reservedFields - Set of reserved field names that need prefixing
71
+ * @returns Safe function args object, or undefined if input is undefined
72
+ */
73
+ export declare function buildSafeFunctionArgs(functionArgs: Record<string, unknown> | undefined, reservedFields: Set<string>): Record<string, unknown> | undefined;
74
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Utility functions for Wagmi event handling
3
+ *
4
+ * Provides ABI encoding utilities for extracting transaction data from
5
+ * writeContract mutations without requiring viem as a direct dependency.
6
+ */
7
+ import { logger } from "../logger";
8
+ /**
9
+ * Flatten a nested object into a flat object with underscore-separated keys.
10
+ * Only leaf values (primitives) are included; intermediate objects are not.
11
+ *
12
+ * Example:
13
+ * Input: { o: { x: "100", inner: { a: "42", b: "0xRecipient" } } }
14
+ * Output: { o_x: "100", o_inner_a: "42", o_inner_b: "0xRecipient" }
15
+ *
16
+ * @param obj - The object to flatten
17
+ * @param prefix - Optional prefix for keys (used in recursion)
18
+ * @returns A flat object with underscore-separated keys
19
+ */
20
+ export function flattenObject(obj, prefix) {
21
+ if (prefix === void 0) { prefix = ""; }
22
+ var result = {};
23
+ for (var _i = 0, _a = Object.entries(obj); _i < _a.length; _i++) {
24
+ var _b = _a[_i], key = _b[0], value = _b[1];
25
+ var newKey = prefix ? "".concat(prefix, "_").concat(key) : key;
26
+ if (value !== null && typeof value === "object" && !Array.isArray(value)) {
27
+ // Recursively flatten nested objects
28
+ var nested = flattenObject(value, newKey);
29
+ Object.assign(result, nested);
30
+ }
31
+ else {
32
+ // Leaf value (primitive or array) - add directly
33
+ result[newKey] = value;
34
+ }
35
+ }
36
+ return result;
37
+ }
38
+ /**
39
+ * Recursively convert all BigInt values to strings for JSON serialization
40
+ * Handles nested objects, arrays, and deeply nested structures (e.g., Solidity structs)
41
+ *
42
+ * @param value - The value to convert
43
+ * @returns The value with all BigInt converted to strings
44
+ */
45
+ function convertBigIntToString(value) {
46
+ if (typeof value === "bigint") {
47
+ return value.toString();
48
+ }
49
+ if (Array.isArray(value)) {
50
+ return value.map(convertBigIntToString);
51
+ }
52
+ if (value !== null && typeof value === "object") {
53
+ var result = {};
54
+ for (var _i = 0, _a = Object.entries(value); _i < _a.length; _i++) {
55
+ var _b = _a[_i], key = _b[0], val = _b[1];
56
+ result[key] = convertBigIntToString(val);
57
+ }
58
+ return result;
59
+ }
60
+ return value;
61
+ }
62
+ // Cached viem module reference
63
+ var viemModule;
64
+ /**
65
+ * Try to load viem synchronously via require
66
+ * Returns null if viem is not available
67
+ */
68
+ function tryLoadViem() {
69
+ if (viemModule !== undefined) {
70
+ return viemModule;
71
+ }
72
+ try {
73
+ // Use require to load viem synchronously
74
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
75
+ var viem = require("viem");
76
+ if (viem === null || viem === void 0 ? void 0 : viem.encodeFunctionData) {
77
+ viemModule = {
78
+ encodeFunctionData: viem.encodeFunctionData,
79
+ };
80
+ return viemModule;
81
+ }
82
+ }
83
+ catch (_a) {
84
+ // viem is not available
85
+ }
86
+ viemModule = null;
87
+ return null;
88
+ }
89
+ /**
90
+ * Encode writeContract data using viem's encodeFunctionData
91
+ *
92
+ * @param abi - The contract ABI
93
+ * @param functionName - The function name to encode
94
+ * @param args - The function arguments
95
+ * @returns The encoded calldata or undefined if encoding fails
96
+ */
97
+ export function encodeWriteContractData(abi, functionName, args) {
98
+ try {
99
+ var viem = tryLoadViem();
100
+ if (!viem) {
101
+ logger.debug("WagmiEventHandler: viem not available, cannot encode function data");
102
+ return undefined;
103
+ }
104
+ var data = viem.encodeFunctionData({
105
+ abi: abi,
106
+ functionName: functionName,
107
+ args: args || [],
108
+ });
109
+ return data;
110
+ }
111
+ catch (error) {
112
+ logger.warn("WagmiEventHandler: Failed to encode function data", error);
113
+ return undefined;
114
+ }
115
+ }
116
+ /**
117
+ * Extract function arguments as a name-value map from ABI and args array
118
+ *
119
+ * @param abi - The contract ABI
120
+ * @param functionName - The function name
121
+ * @param args - The function arguments array
122
+ * @returns A map of argument names to values, or undefined if extraction fails
123
+ */
124
+ export function extractFunctionArgs(abi, functionName, args) {
125
+ if (!abi || !functionName || !args || !Array.isArray(args)) {
126
+ return undefined;
127
+ }
128
+ try {
129
+ // Find the function in the ABI
130
+ var abiItem = abi.find(function (item) { return item.type === "function" && item.name === functionName; });
131
+ if (!(abiItem === null || abiItem === void 0 ? void 0 : abiItem.inputs) || !Array.isArray(abiItem.inputs)) {
132
+ return undefined;
133
+ }
134
+ var result_1 = {};
135
+ abiItem.inputs.forEach(function (input, index) {
136
+ if (index < args.length) {
137
+ var argValue = args[index];
138
+ var argName = input.name || "arg".concat(index);
139
+ // Recursively convert BigInt to string for JSON serialization
140
+ // Handles: direct BigInt, arrays with BigInt, nested objects/structs with BigInt
141
+ result_1[argName] = convertBigIntToString(argValue);
142
+ }
143
+ });
144
+ return result_1;
145
+ }
146
+ catch (error) {
147
+ logger.warn("WagmiEventHandler: Failed to extract function args", error);
148
+ return undefined;
149
+ }
150
+ }
151
+ /**
152
+ * Build safe function args with collision handling and struct flattening.
153
+ *
154
+ * This function:
155
+ * 1. Prefixes top-level args that collide with reserved fields (e.g., 'to' -> 'arg_to')
156
+ * 2. Flattens nested struct values for easier querying (e.g., order.maker -> order_maker)
157
+ * 3. Skips flattened keys that would collide with existing top-level args
158
+ *
159
+ * @param functionArgs - The extracted function arguments
160
+ * @param reservedFields - Set of reserved field names that need prefixing
161
+ * @returns Safe function args object, or undefined if input is undefined
162
+ */
163
+ export function buildSafeFunctionArgs(functionArgs, reservedFields) {
164
+ if (!functionArgs) {
165
+ return undefined;
166
+ }
167
+ var result = {};
168
+ for (var _i = 0, _a = Object.entries(functionArgs); _i < _a.length; _i++) {
169
+ var _b = _a[_i], key = _b[0], val = _b[1];
170
+ var safeKey = reservedFields.has(key) ? "arg_".concat(key) : key;
171
+ result[safeKey] = val;
172
+ // If the value is a nested object (struct), flatten it
173
+ // Skip flattened keys that would overwrite existing top-level args
174
+ if (val !== null && typeof val === "object" && !Array.isArray(val)) {
175
+ var flattened = flattenObject(val, safeKey);
176
+ for (var _c = 0, _d = Object.entries(flattened); _c < _d.length; _c++) {
177
+ var _e = _d[_c], flatKey = _e[0], flatVal = _e[1];
178
+ if (!(flatKey in result)) {
179
+ result[flatKey] = flatVal;
180
+ }
181
+ else {
182
+ logger.debug("WagmiEventHandler: Skipping flattened key collision", {
183
+ flatKey: flatKey,
184
+ existingValue: result[flatKey],
185
+ });
186
+ }
187
+ }
188
+ }
189
+ }
190
+ return result;
191
+ }
192
+ //# sourceMappingURL=utils.js.map