UNPKG

@web3auth/no-modal

Version:
55 lines (51 loc) 2.29 kB
'use strict'; var kit = require('@solana/kit'); var wsEmbed = require('@web3auth/ws-embed'); var react = require('react'); var baseControllers = require('@toruslabs/base-controllers'); var index = require('../../../base/wallet/index.js'); var useChain = require('../../hooks/useChain.js'); var useWeb3Auth = require('../../hooks/useWeb3Auth.js'); const useSolanaWallet = () => { const { connection, web3Auth } = useWeb3Auth.useWeb3Auth(); const { chainNamespace } = useChain.useChain(); const solanaWallet = react.useMemo(() => { var _connection$solanaWal; return (_connection$solanaWal = connection === null || connection === void 0 ? void 0 : connection.solanaWallet) !== null && _connection$solanaWal !== void 0 ? _connection$solanaWal : null; }, [connection]); const accounts = react.useMemo(() => { if (chainNamespace !== baseControllers.CHAIN_NAMESPACES.SOLANA || !solanaWallet) return null; const accts = solanaWallet.accounts.map(a => a.address); return accts.length > 0 ? accts : null; }, [solanaWallet, chainNamespace]); const rpc = react.useMemo(() => { if (!web3Auth || !solanaWallet || chainNamespace !== baseControllers.CHAIN_NAMESPACES.SOLANA) return null; return kit.createSolanaRpc(web3Auth.currentChain.rpcTarget); }, [web3Auth, solanaWallet, chainNamespace]); const getPrivateKey = react.useCallback(async () => { var _web3Auth$primaryConn; if (!web3Auth) throw new Error("Web3Auth not initialized"); if ((connection === null || connection === void 0 ? void 0 : connection.connectorName) !== index.WALLET_CONNECTORS.AUTH) { throw new Error("getPrivateKey is only supported with the Auth connector"); } const provider = (_web3Auth$primaryConn = web3Auth.primaryConnector) === null || _web3Auth$primaryConn === void 0 ? void 0 : _web3Auth$primaryConn.provider; if (!provider) throw new Error("Provider not available"); const privateKey = await provider.request({ method: wsEmbed.SOLANA_METHOD_TYPES.SOLANA_PRIVATE_KEY }); if (!privateKey) throw new Error("Failed to retrieve private key"); return privateKey; }, [web3Auth, connection]); return { solanaWallet, accounts, rpc, getPrivateKey }; }; exports.useSolanaWallet = useSolanaWallet;