@formo/analytics 1.26.0 → 1.28.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 (87) hide show
  1. package/README.md +6 -4
  2. package/dist/cjs/src/FormoAnalytics.d.ts +71 -12
  3. package/dist/cjs/src/FormoAnalytics.js +274 -147
  4. package/dist/cjs/src/event/EventFactory.d.ts +10 -2
  5. package/dist/cjs/src/event/EventFactory.js +32 -21
  6. package/dist/cjs/src/fetch/index.d.ts +10 -2
  7. package/dist/cjs/src/fetch/index.js +122 -4
  8. package/dist/cjs/src/index.d.ts +4 -0
  9. package/dist/cjs/src/index.js +6 -0
  10. package/dist/cjs/src/privy/index.d.ts +9 -0
  11. package/dist/cjs/src/privy/index.js +12 -0
  12. package/dist/cjs/src/privy/types.d.ts +175 -0
  13. package/dist/cjs/src/privy/types.js +12 -0
  14. package/dist/cjs/src/privy/utils.d.ts +32 -0
  15. package/dist/cjs/src/privy/utils.js +188 -0
  16. package/dist/cjs/src/queue/EventQueue.d.ts +24 -2
  17. package/dist/cjs/src/queue/EventQueue.js +158 -49
  18. package/dist/cjs/src/session/index.js +2 -1
  19. package/dist/cjs/src/solana/SolanaAdapter.d.ts +211 -0
  20. package/dist/cjs/src/solana/SolanaAdapter.js +975 -0
  21. package/dist/cjs/src/solana/SolanaManager.d.ts +24 -0
  22. package/dist/cjs/src/solana/SolanaManager.js +80 -0
  23. package/dist/cjs/src/solana/address.d.ts +72 -0
  24. package/dist/cjs/src/solana/address.js +176 -0
  25. package/dist/cjs/src/solana/index.d.ts +13 -0
  26. package/dist/cjs/src/solana/index.js +32 -0
  27. package/dist/cjs/src/solana/types.d.ts +206 -0
  28. package/dist/cjs/src/solana/types.js +80 -0
  29. package/dist/cjs/src/types/base.d.ts +25 -0
  30. package/dist/cjs/src/types/events.d.ts +9 -6
  31. package/dist/cjs/src/utils/address.d.ts +21 -0
  32. package/dist/cjs/src/utils/address.js +48 -1
  33. package/dist/cjs/src/utils/builderCode.d.ts +30 -0
  34. package/dist/cjs/src/utils/builderCode.js +143 -0
  35. package/dist/cjs/src/utils/index.d.ts +1 -0
  36. package/dist/cjs/src/utils/index.js +1 -0
  37. package/dist/cjs/src/version.d.ts +1 -1
  38. package/dist/cjs/src/version.js +1 -1
  39. package/dist/cjs/src/wagmi/WagmiEventHandler.d.ts +24 -0
  40. package/dist/cjs/src/wagmi/WagmiEventHandler.js +242 -24
  41. package/dist/cjs/src/wagmi/types.d.ts +31 -0
  42. package/dist/cjs/src/wagmi/utils.d.ts +79 -0
  43. package/dist/cjs/src/wagmi/utils.js +218 -0
  44. package/dist/esm/src/FormoAnalytics.d.ts +71 -12
  45. package/dist/esm/src/FormoAnalytics.js +275 -148
  46. package/dist/esm/src/event/EventFactory.d.ts +10 -2
  47. package/dist/esm/src/event/EventFactory.js +34 -23
  48. package/dist/esm/src/fetch/index.d.ts +10 -2
  49. package/dist/esm/src/fetch/index.js +123 -2
  50. package/dist/esm/src/index.d.ts +4 -0
  51. package/dist/esm/src/index.js +3 -0
  52. package/dist/esm/src/privy/index.d.ts +9 -0
  53. package/dist/esm/src/privy/index.js +8 -0
  54. package/dist/esm/src/privy/types.d.ts +175 -0
  55. package/dist/esm/src/privy/types.js +11 -0
  56. package/dist/esm/src/privy/utils.d.ts +32 -0
  57. package/dist/esm/src/privy/utils.js +185 -0
  58. package/dist/esm/src/queue/EventQueue.d.ts +24 -2
  59. package/dist/esm/src/queue/EventQueue.js +158 -49
  60. package/dist/esm/src/session/index.js +2 -1
  61. package/dist/esm/src/solana/SolanaAdapter.d.ts +211 -0
  62. package/dist/esm/src/solana/SolanaAdapter.js +972 -0
  63. package/dist/esm/src/solana/SolanaManager.d.ts +24 -0
  64. package/dist/esm/src/solana/SolanaManager.js +77 -0
  65. package/dist/esm/src/solana/address.d.ts +72 -0
  66. package/dist/esm/src/solana/address.js +167 -0
  67. package/dist/esm/src/solana/index.d.ts +13 -0
  68. package/dist/esm/src/solana/index.js +13 -0
  69. package/dist/esm/src/solana/types.d.ts +206 -0
  70. package/dist/esm/src/solana/types.js +74 -0
  71. package/dist/esm/src/types/base.d.ts +25 -0
  72. package/dist/esm/src/types/events.d.ts +9 -6
  73. package/dist/esm/src/utils/address.d.ts +21 -0
  74. package/dist/esm/src/utils/address.js +45 -0
  75. package/dist/esm/src/utils/builderCode.d.ts +30 -0
  76. package/dist/esm/src/utils/builderCode.js +140 -0
  77. package/dist/esm/src/utils/index.d.ts +1 -0
  78. package/dist/esm/src/utils/index.js +1 -0
  79. package/dist/esm/src/version.d.ts +1 -1
  80. package/dist/esm/src/version.js +1 -1
  81. package/dist/esm/src/wagmi/WagmiEventHandler.d.ts +24 -0
  82. package/dist/esm/src/wagmi/WagmiEventHandler.js +242 -24
  83. package/dist/esm/src/wagmi/types.d.ts +31 -0
  84. package/dist/esm/src/wagmi/utils.d.ts +79 -0
  85. package/dist/esm/src/wagmi/utils.js +211 -0
  86. package/dist/index.umd.min.js +1 -1
  87. package/package.json +20 -4
@@ -0,0 +1,211 @@
1
+ /**
2
+ * SolanaAdapter
3
+ *
4
+ * Handles wallet event tracking by hooking into Solana Wallet Adapter events.
5
+ * This provides integration with the @solana/wallet-adapter ecosystem.
6
+ *
7
+ * @see https://github.com/anza-xyz/wallet-adapter
8
+ */
9
+ import { FormoAnalytics } from "../FormoAnalytics";
10
+ import { ISolanaAdapter, SolanaWalletContext, SolanaConnection, SolanaCluster } from "./types";
11
+ export declare class SolanaAdapter {
12
+ private formo;
13
+ private wallet;
14
+ private connection;
15
+ private cluster;
16
+ private chainId;
17
+ private unsubscribers;
18
+ private connectionState;
19
+ /**
20
+ * Track processed signatures to prevent duplicate event emissions
21
+ */
22
+ private processedSignatures;
23
+ /**
24
+ * Store pending transaction details for confirmation tracking
25
+ * Key: transaction signature, Value: transaction details
26
+ */
27
+ private pendingTransactions;
28
+ /**
29
+ * Original adapter methods that we wrap for tracking
30
+ */
31
+ private originalAdapterSendTransaction?;
32
+ private originalAdapterSignMessage?;
33
+ private originalAdapterSignTransaction?;
34
+ /**
35
+ * Bound wrapper references — used to detect when external code (e.g. StandardWalletAdapter._reset())
36
+ * overwrites our wraps so we can re-apply them.
37
+ */
38
+ private boundWrappedSendTransaction?;
39
+ private boundWrappedSignMessage?;
40
+ private boundWrappedSignTransaction?;
41
+ /**
42
+ * Reference to the wrapped adapter (to restore methods on cleanup)
43
+ */
44
+ private wrappedAdapter?;
45
+ /**
46
+ * Reference to the adapter we bound event listeners to (for context wallets).
47
+ * Used to detect when context.wallet changes and rebind listeners.
48
+ */
49
+ private currentBoundAdapter?;
50
+ /**
51
+ * Track active polling timeout IDs for cleanup
52
+ */
53
+ private pollingTimeouts;
54
+ /**
55
+ * Flag to prevent new polls after cleanup is initiated
56
+ */
57
+ private isCleanedUp;
58
+ constructor(formoAnalytics: FormoAnalytics, options: {
59
+ wallet?: ISolanaAdapter | SolanaWalletContext;
60
+ connection?: SolanaConnection;
61
+ cluster?: SolanaCluster;
62
+ });
63
+ /**
64
+ * Restore original methods on the wrapped adapter
65
+ */
66
+ private restoreOriginalMethods;
67
+ /**
68
+ * Update the wallet instance (useful for React context updates)
69
+ */
70
+ setWallet(wallet: ISolanaAdapter | SolanaWalletContext | null): void;
71
+ /**
72
+ * Check if the wallet adapter has changed (for context-based wallets) and rebind if needed.
73
+ * Call this in React effects when you know the wallet context may have changed but the
74
+ * context object reference stayed the same (e.g., user switched wallets in the wallet selector).
75
+ *
76
+ * This ensures connect/disconnect events from the new wallet are properly tracked without
77
+ * waiting for the next transaction or signature call.
78
+ *
79
+ * @example
80
+ * ```tsx
81
+ * const wallet = useWallet();
82
+ * useEffect(() => {
83
+ * formo.solana.syncWalletState();
84
+ * }, [wallet.wallet]); // Trigger when inner wallet changes
85
+ * ```
86
+ */
87
+ syncWalletState(): void;
88
+ /**
89
+ * Update the connection instance
90
+ */
91
+ setConnection(connection: SolanaConnection | null): void;
92
+ /**
93
+ * Update the cluster/network
94
+ */
95
+ setCluster(cluster: SolanaCluster): void;
96
+ /**
97
+ * Get the current chain ID
98
+ */
99
+ getChainId(): number;
100
+ /**
101
+ * Set up listeners for wallet events
102
+ */
103
+ private setupWalletListeners;
104
+ /**
105
+ * Set up listeners for a wallet context (useWallet)
106
+ */
107
+ private setupContextListeners;
108
+ /**
109
+ * Check if the adapter inside a wallet context has changed (e.g., user switched wallets).
110
+ * If so, rebind event listeners and rewrap methods on the new adapter.
111
+ * This handles the case where context.wallet changes but the context object reference stays the same.
112
+ */
113
+ private checkAndRebindContextAdapter;
114
+ /**
115
+ * Clean up only adapter event listeners (not the full cleanup)
116
+ */
117
+ private cleanupAdapterListenersOnly;
118
+ /**
119
+ * Register a listener on an adapter and track its unsubscriber
120
+ */
121
+ private registerAdapterListener;
122
+ /**
123
+ * Set up event listeners on an adapter (connect/disconnect events)
124
+ */
125
+ private setupAdapterEventListenersOnly;
126
+ /**
127
+ * Set up listeners for a direct wallet adapter
128
+ */
129
+ private setupAdapterListeners;
130
+ /**
131
+ * Wrap wallet adapter methods for transaction/signature tracking
132
+ */
133
+ private wrapAdapterMethods;
134
+ /**
135
+ * Re-wrap methods that were overwritten by external code.
136
+ *
137
+ * StandardWalletAdapter._reset() overwrites signMessage and signTransaction
138
+ * as own properties on every connect/disconnect/
139
+ * feature-change event. This method detects which wraps were overwritten
140
+ * and re-applies them, capturing the new original methods.
141
+ */
142
+ private rewrapOverwrittenMethods;
143
+ /**
144
+ * Wrapped sendTransaction method for direct adapter
145
+ */
146
+ private wrappedSendTransaction;
147
+ /**
148
+ * Wrapped signMessage method for direct adapter
149
+ */
150
+ private wrappedSignMessage;
151
+ /**
152
+ * Wrapped signTransaction method for direct adapter
153
+ */
154
+ private wrappedSignTransaction;
155
+ /**
156
+ * Check initial connection state
157
+ */
158
+ private checkInitialConnection;
159
+ /**
160
+ * Handle wallet connect event
161
+ */
162
+ private handleConnect;
163
+ /**
164
+ * Handle wallet disconnect event
165
+ */
166
+ private handleDisconnect;
167
+ /**
168
+ * Poll for transaction confirmation
169
+ */
170
+ private pollTransactionConfirmation;
171
+ /**
172
+ * Get current wallet public key
173
+ */
174
+ private getPublicKey;
175
+ /**
176
+ * Get current address
177
+ */
178
+ private getCurrentAddress;
179
+ /**
180
+ * Emit a transaction event if address is valid and autocapture is enabled
181
+ */
182
+ private emitTransactionEvent;
183
+ /**
184
+ * Emit a signature event if address is valid and autocapture is enabled
185
+ */
186
+ private emitSignatureEvent;
187
+ /**
188
+ * Extract the actual adapter (with .on/.off) from a wallet context.
189
+ * In @solana/wallet-adapter-react, context.wallet is { adapter, readyState },
190
+ * not a direct adapter.
191
+ */
192
+ private getAdapterFromContext;
193
+ /**
194
+ * Get wallet name
195
+ */
196
+ private getWalletName;
197
+ /**
198
+ * Get wallet RDNS (reverse domain name)
199
+ * For Solana wallets, we construct an RDNS-like identifier
200
+ */
201
+ private getWalletRdns;
202
+ /**
203
+ * Clean up wallet listeners
204
+ */
205
+ private cleanupWalletListeners;
206
+ /**
207
+ * Clean up all resources
208
+ */
209
+ cleanup(): void;
210
+ }
211
+ //# sourceMappingURL=SolanaAdapter.d.ts.map