import { getGasRecommendation } from '@lifi/sdk'; import { useQuery } from '@tanstack/react-query'; import { useAvailableChains } from './useAvailableChains.js'; import { ChainId } from '../types/base.js'; const MOCK_RESPONSE = { data: { available: true, recommended: { token: { address: '0x0000000000000000000000000000000000000000', chainId: 1, symbol: 'ETH', decimals: 18, name: 'ETH', coinKey: 'ETH', logoURI: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png', priceUSD: '3182.45', }, amount: '4168748842481140', amountUsd: '13.27', }, limit: { token: { address: '0x0000000000000000000000000000000000000000', chainId: 1, symbol: 'ETH', decimals: 18, name: 'ETH', coinKey: 'ETH', logoURI: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png', priceUSD: '3182.45', }, amount: '37706798221496017', amountUsd: '120.00', }, serviceFee: { token: { address: '0x0000000000000000000000000000000000000000', chainId: 1, symbol: 'ETH', decimals: 18, name: 'ETH', coinKey: 'ETH', logoURI: 'https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2/logo.png', priceUSD: '3182.45', }, amount: '115884211931250', amountUsd: '0.37', }, }, }; const refetchInterval = 60_000; export const useGasRecommendation = ( toChainId?: ChainId, fromChain?: ChainId, fromToken?: string, ) => { const { chains } = useAvailableChains(); const checkRecommendationLiFuel = Boolean(toChainId) && Boolean(fromChain) && Boolean(fromToken) && Boolean(chains?.length); const checkRecommendationMaxButton = Boolean(toChainId) && !fromChain && !fromToken && Boolean(chains?.length); const gasRecommendation = useQuery({ queryKey: ['gas-recommendation', toChainId, fromChain, fromToken], queryFn: async ({ queryKey: [_, toChainId, fromChain, fromToken], signal, }) => { if (!chains?.some((chain) => chain.id === toChainId)) { return null; } const gasRecommendation = await getGasRecommendation( { chainId: toChainId as any, fromChain: fromChain as any, fromToken: fromToken as string, }, { signal }, ); return gasRecommendation; }, enabled: toChainId !== ChainId.TON && toChainId !== ChainId.MOVE && toChainId !== ChainId.ECLIPSE && (checkRecommendationLiFuel || checkRecommendationMaxButton), refetchInterval, staleTime: refetchInterval, }); // TODO: remove this mock response if ( toChainId === ChainId.TON || toChainId === ChainId.MOVE || toChainId === ChainId.ECLIPSE ) { return MOCK_RESPONSE; } return gasRecommendation; };