@formo/analytics 1.27.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.
- package/dist/cjs/src/FormoAnalytics.d.ts +69 -12
- package/dist/cjs/src/FormoAnalytics.js +273 -147
- package/dist/cjs/src/event/EventFactory.d.ts +10 -2
- package/dist/cjs/src/event/EventFactory.js +32 -21
- package/dist/cjs/src/index.d.ts +4 -0
- package/dist/cjs/src/index.js +6 -0
- package/dist/cjs/src/privy/index.d.ts +9 -0
- package/dist/cjs/src/privy/index.js +12 -0
- package/dist/cjs/src/privy/types.d.ts +175 -0
- package/dist/cjs/src/privy/types.js +12 -0
- package/dist/cjs/src/privy/utils.d.ts +32 -0
- package/dist/cjs/src/privy/utils.js +188 -0
- package/dist/cjs/src/session/index.js +2 -1
- package/dist/cjs/src/solana/SolanaAdapter.d.ts +211 -0
- package/dist/cjs/src/solana/SolanaAdapter.js +975 -0
- package/dist/cjs/src/solana/SolanaManager.d.ts +24 -0
- package/dist/cjs/src/solana/SolanaManager.js +80 -0
- package/dist/cjs/src/solana/address.d.ts +72 -0
- package/dist/cjs/src/solana/address.js +176 -0
- package/dist/cjs/src/solana/index.d.ts +13 -0
- package/dist/cjs/src/solana/index.js +32 -0
- package/dist/cjs/src/solana/types.d.ts +206 -0
- package/dist/cjs/src/solana/types.js +80 -0
- package/dist/cjs/src/types/base.d.ts +17 -0
- package/dist/cjs/src/types/events.d.ts +4 -3
- package/dist/cjs/src/utils/address.d.ts +21 -0
- package/dist/cjs/src/utils/address.js +48 -1
- package/dist/cjs/src/utils/builderCode.d.ts +30 -0
- package/dist/cjs/src/utils/builderCode.js +143 -0
- package/dist/cjs/src/utils/index.d.ts +1 -0
- package/dist/cjs/src/utils/index.js +1 -0
- package/dist/cjs/src/version.d.ts +1 -1
- package/dist/cjs/src/version.js +1 -1
- package/dist/cjs/src/wagmi/WagmiEventHandler.js +13 -15
- package/dist/cjs/src/wagmi/utils.d.ts +5 -0
- package/dist/cjs/src/wagmi/utils.js +20 -0
- package/dist/esm/src/FormoAnalytics.d.ts +69 -12
- package/dist/esm/src/FormoAnalytics.js +274 -148
- package/dist/esm/src/event/EventFactory.d.ts +10 -2
- package/dist/esm/src/event/EventFactory.js +34 -23
- package/dist/esm/src/index.d.ts +4 -0
- package/dist/esm/src/index.js +3 -0
- package/dist/esm/src/privy/index.d.ts +9 -0
- package/dist/esm/src/privy/index.js +8 -0
- package/dist/esm/src/privy/types.d.ts +175 -0
- package/dist/esm/src/privy/types.js +11 -0
- package/dist/esm/src/privy/utils.d.ts +32 -0
- package/dist/esm/src/privy/utils.js +185 -0
- package/dist/esm/src/session/index.js +2 -1
- package/dist/esm/src/solana/SolanaAdapter.d.ts +211 -0
- package/dist/esm/src/solana/SolanaAdapter.js +972 -0
- package/dist/esm/src/solana/SolanaManager.d.ts +24 -0
- package/dist/esm/src/solana/SolanaManager.js +77 -0
- package/dist/esm/src/solana/address.d.ts +72 -0
- package/dist/esm/src/solana/address.js +167 -0
- package/dist/esm/src/solana/index.d.ts +13 -0
- package/dist/esm/src/solana/index.js +13 -0
- package/dist/esm/src/solana/types.d.ts +206 -0
- package/dist/esm/src/solana/types.js +74 -0
- package/dist/esm/src/types/base.d.ts +17 -0
- package/dist/esm/src/types/events.d.ts +4 -3
- package/dist/esm/src/utils/address.d.ts +21 -0
- package/dist/esm/src/utils/address.js +45 -0
- package/dist/esm/src/utils/builderCode.d.ts +30 -0
- package/dist/esm/src/utils/builderCode.js +140 -0
- package/dist/esm/src/utils/index.d.ts +1 -0
- package/dist/esm/src/utils/index.js +1 -0
- package/dist/esm/src/version.d.ts +1 -1
- package/dist/esm/src/version.js +1 -1
- package/dist/esm/src/wagmi/WagmiEventHandler.js +14 -16
- package/dist/esm/src/wagmi/utils.d.ts +5 -0
- package/dist/esm/src/wagmi/utils.js +19 -0
- package/dist/index.umd.min.js +1 -1
- package/package.json +15 -3
|
@@ -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
|