import { useContext, useCallback, useState } from 'react' import { ConnectionContext } from '../providers/ConnectionProvider' import type { UseSignSolanaTransactionReturn, WalletError } from '@meshconnect/uwc-types' export function useSignSolanaTransaction(): UseSignSolanaTransactionReturn { const context = useContext(ConnectionContext) if (!context) { throw new Error( 'useSignSolanaTransaction must be used within a ConnectionProvider' ) } const { connector, session } = context const [isLoading, setIsLoading] = useState(false) const [error, setError] = useState() const signSolanaTransaction = useCallback( async (serializedTx: Uint8Array): Promise => { if (!session.activeAddress) { throw new Error('No wallet connected') } if (!serializedTx?.length) { throw new Error('Transaction bytes are required') } setIsLoading(true) setError(undefined) try { return await connector.signSolanaTransaction(serializedTx) } catch (err) { const walletError = err as WalletError setError(walletError) throw err } finally { setIsLoading(false) } }, [connector, session.activeAddress] ) return { signSolanaTransaction, isLoading, error } }