UNPKG

@web3auth/no-modal

Version:
65 lines (61 loc) 2.71 kB
'use strict'; var react = require('react'); var baseControllers = require('@toruslabs/base-controllers'); var useChain = require('../react/hooks/useChain.js'); var useWeb3Auth = require('../react/hooks/useWeb3Auth.js'); var index = require('./index.js'); /** * Web3Auth-integrated x402 fetch hook. * * Automatically selects the correct payment path based on the currently connected * chain namespace: * - **Solana** - uses `createSolanaX402Fetch` backed by the web3auth Solana wallet. * - **EVM** - uses `createEvmX402Fetch` backed by the web3auth EIP-1193 provider. * * Callers do not need to pass a signer manually; it is sourced internally. * When `address` is provided, it takes precedence over the provider's active account. */ const useX402Fetch = address => { const { chainNamespace } = useChain.useChain(); const { web3Auth, isConnected, connection } = useWeb3Auth.useWeb3Auth(); // const { solanaWallet, accounts } = useSolanaWallet(); const fetchWithPayment = react.useCallback(async ({ url, options }) => { if (!isConnected) throw new Error("Wallet not connected"); if (chainNamespace === baseControllers.CHAIN_NAMESPACES.SOLANA) { var _solanaWallet$account; const { solanaWallet } = connection; if (!solanaWallet || !((_solanaWallet$account = solanaWallet.accounts) !== null && _solanaWallet$account !== void 0 && _solanaWallet$account[0])) throw new Error("Solana wallet not available"); const account = solanaWallet.accounts[0]; if (!account) throw new Error("Solana account not available"); return index.createSolanaX402Fetch(solanaWallet, account.address)(url, options); } if (chainNamespace === baseControllers.CHAIN_NAMESPACES.EIP155) { const provider = connection === null || connection === void 0 ? void 0 : connection.ethereumProvider; if (!provider) throw new Error("EVM provider not available"); const evmAddress = address !== null && address !== void 0 ? address : await index.getEvmAddress(provider); if (!evmAddress) throw new Error("EVM address not available"); const signer = index.createProviderBackedEvmSigner(provider, evmAddress); return index.createEvmX402Fetch(signer)(url, options); } throw new Error("Unsupported chain namespace"); }, [web3Auth, isConnected, chainNamespace, address, connection]); return { fetchWithPayment }; }; exports.createEvmX402Fetch = index.createEvmX402Fetch; exports.createProviderBackedEvmSigner = index.createProviderBackedEvmSigner; exports.createSolanaX402Fetch = index.createSolanaX402Fetch; exports.getEvmAddress = index.getEvmAddress; exports.useX402Fetch = useX402Fetch;