UNPKG

@web3auth/no-modal

Version:
55 lines (52 loc) 2.41 kB
import { toValue } from 'vue'; import { CHAIN_NAMESPACES } from '@toruslabs/base-controllers'; import { useWeb3Auth } from '../vue/composables/useWeb3Auth.js'; import { createSolanaX402Fetch, getEvmAddress, createProviderBackedEvmSigner, createEvmX402Fetch } from './index.js'; /** * Web3Auth-integrated x402 fetch composable. * * 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 { isConnected, chainNamespace, connection } = useWeb3Auth(); const fetchWithPayment = async ({ url, options }) => { if (!isConnected.value) throw new Error("Wallet not connected"); if (chainNamespace.value === CHAIN_NAMESPACES.SOLANA) { var _solanaWallet$account; const { solanaWallet } = connection.value; 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 createSolanaX402Fetch(solanaWallet, account.address)(url, options); } if (chainNamespace.value === CHAIN_NAMESPACES.EIP155) { var _connection$value, _toValue; const provider = (_connection$value = connection.value) === null || _connection$value === void 0 ? void 0 : _connection$value.ethereumProvider; if (!provider) throw new Error("EVM provider not available"); const evmAddress = (_toValue = toValue(address)) !== null && _toValue !== void 0 ? _toValue : await getEvmAddress(provider); if (!evmAddress) throw new Error("EVM address not available"); const signer = createProviderBackedEvmSigner(provider, evmAddress); return createEvmX402Fetch(signer)(url, options); } throw new Error("Unsupported chain namespace"); }; return { fetchWithPayment }; }; export { createEvmX402Fetch, createSolanaX402Fetch, useX402Fetch };