@web3auth/no-modal
Version:
Multi chain wallet aggregator for web3Auth
65 lines (61 loc) • 2.71 kB
JavaScript
;
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;