UNPKG

@reservoir0x/relay-kit-ui

Version:

Relay is the Fastest and Cheapest Way to Bridge and Transact Across Chains.

234 lines 9.24 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const viem_1 = require("viem"); const wagmi_1 = require("wagmi"); const viem_2 = require("viem"); const useDuneBalances_js_1 = tslib_1.__importDefault(require("./useDuneBalances.js")); const useBitcoinBalance_js_1 = tslib_1.__importDefault(require("./useBitcoinBalance.js")); const useSuiBalance_js_1 = tslib_1.__importDefault(require("./useSuiBalance.js")); const useAdaptedWalletBalance_js_1 = tslib_1.__importDefault(require("./useAdaptedWalletBalance.js")); const address_js_1 = require("../utils/address.js"); const useRelayClient_js_1 = tslib_1.__importDefault(require("./useRelayClient.js")); const useEclipseBalance_js_1 = tslib_1.__importDefault(require("../hooks/useEclipseBalance.js")); const solana_js_1 = require("../utils/solana.js"); const useHyperliquidUsdcBalance_js_1 = tslib_1.__importDefault(require("./useHyperliquidUsdcBalance.js")); const useCurrencyBalance = ({ chain, address, currency, enabled = true, refreshInterval = 60000, wallet }) => { const isErc20Currency = currency && currency !== viem_1.zeroAddress; const isValidEvmAddress = address && (0, viem_1.isAddress)(address); const relayClient = (0, useRelayClient_js_1.default)(); const adaptedWalletBalanceIsEnabled = wallet?.getBalance !== undefined && wallet.vmType === chain?.vmType; const adaptedWalletBalance = (0, useAdaptedWalletBalance_js_1.default)({ wallet, chain, address, currency, enabled: enabled && adaptedWalletBalanceIsEnabled, refreshInterval }); const { data: ethBalance, queryKey: ethBalanceQueryKey, isLoading: ethBalanceIsLoading, isError: ethError, error: isEthError } = (0, wagmi_1.useBalance)({ chainId: chain?.id, address: address, query: { enabled: Boolean(!adaptedWalletBalanceIsEnabled && !isErc20Currency && chain && chain.vmType === 'evm' && isValidEvmAddress && enabled), refetchInterval: refreshInterval } }); const { data: erc20Balance, queryKey: erc20BalanceQueryKey, isLoading: erc20BalanceIsLoading, isError: isErc20Error, error: erc20Error } = (0, wagmi_1.useReadContract)({ chainId: chain?.id, address: currency, abi: viem_2.erc20Abi, functionName: 'balanceOf', args: address ? [address] : undefined, query: { enabled: Boolean(!adaptedWalletBalanceIsEnabled && isErc20Currency && chain && chain.vmType === 'evm' && isValidEvmAddress && enabled), refetchInterval: refreshInterval } }); const _isValidAddress = (0, address_js_1.isValidAddress)(chain?.vmType, address, chain?.id); const duneBalances = (0, useDuneBalances_js_1.default)(address, relayClient?.baseApiUrl?.includes('testnet') ? 'testnet' : 'mainnet', { enabled: Boolean(!adaptedWalletBalanceIsEnabled && chain && chain.vmType === 'svm' && chain.id !== solana_js_1.eclipse.id && address && _isValidAddress && enabled), staleTime: refreshInterval, gcTime: refreshInterval }); const bitcoinBalances = (0, useBitcoinBalance_js_1.default)(address, { enabled: Boolean(!adaptedWalletBalanceIsEnabled && chain && chain.vmType === 'bvm' && address && _isValidAddress && enabled), gcTime: refreshInterval, staleTime: refreshInterval }); const suiBalances = (0, useSuiBalance_js_1.default)(address, currency, { enabled: Boolean(!adaptedWalletBalanceIsEnabled && chain && chain.vmType === 'suivm' && address && _isValidAddress && enabled), gcTime: refreshInterval, staleTime: refreshInterval }); const eclipseBalances = (0, useEclipseBalance_js_1.default)(address, { enabled: Boolean(!adaptedWalletBalanceIsEnabled && chain && chain.vmType === 'svm' && chain.id === solana_js_1.eclipse.id && address && _isValidAddress && enabled) }); const hyperliquidUsdcBalance = (0, useHyperliquidUsdcBalance_js_1.default)(address, { enabled: Boolean(!adaptedWalletBalanceIsEnabled && chain && chain.vmType === 'hypevm' && address && _isValidAddress && enabled), gcTime: refreshInterval, staleTime: refreshInterval }); if (adaptedWalletBalanceIsEnabled) { return { value: adaptedWalletBalance.data, queryKey: adaptedWalletBalance.queryKey, isLoading: adaptedWalletBalance.isLoading, isError: adaptedWalletBalance.isError, error: adaptedWalletBalance.error, isDuneBalance: false }; } else if (chain?.vmType === 'evm') { const value = isErc20Currency ? erc20Balance : ethBalance?.value; const error = isErc20Currency ? erc20Error : ethError; const isError = isErc20Currency ? isErc20Error : isEthError; const queryKey = isErc20Currency ? erc20BalanceQueryKey : ethBalanceQueryKey; const isLoading = isErc20Currency ? erc20BalanceIsLoading : ethBalanceIsLoading; return { value, queryKey, isLoading, isError, error, isDuneBalance: false }; } else if (chain?.vmType === 'svm') { let value = undefined; let isDuneBalance = true; let isError = false; let error = null; if (chain.id === solana_js_1.eclipse.id) { value = eclipseBalances.data?.balance; isDuneBalance = true; isError = eclipseBalances.isError; error = eclipseBalances.error; } else { value = currency && duneBalances.balanceMap && duneBalances.balanceMap[`${chain.id}:${currency}`] && duneBalances.balanceMap[`${chain.id}:${currency}`].amount ? BigInt(duneBalances.balanceMap[`${chain.id}:${currency}`].amount ?? 0) : undefined; isDuneBalance = false; isError = duneBalances.isError; error = duneBalances.error; } if (_isValidAddress) { return { value, queryKey: duneBalances.queryKey, isLoading: duneBalances.isLoading, isError, error, isDuneBalance }; } else { return { value: undefined, queryKey: duneBalances.queryKey, isLoading: duneBalances.isLoading, isError, error, isDuneBalance }; } } else if (chain?.vmType === 'bvm') { if (_isValidAddress) { return { value: currency && bitcoinBalances.balance ? bitcoinBalances.balance : undefined, queryKey: bitcoinBalances.queryKey, isLoading: bitcoinBalances.isLoading, isError: bitcoinBalances.isError, error: bitcoinBalances.error, isDuneBalance: false, hasPendingBalance: bitcoinBalances.data?.pendingBalance && bitcoinBalances.data?.pendingBalance > 0n ? true : false }; } else { return { value: undefined, queryKey: bitcoinBalances.queryKey, isLoading: bitcoinBalances.isLoading, isError: bitcoinBalances.isError, error: bitcoinBalances.error, isDuneBalance: false, hasPendingBalance: false }; } } else if (chain?.vmType === 'suivm') { return { value: suiBalances.balance, queryKey: suiBalances.queryKey, isLoading: suiBalances.isLoading, isError: suiBalances.isError, error: suiBalances.error, isDuneBalance: false }; } else if (chain?.vmType === 'hypevm') { return { value: hyperliquidUsdcBalance.balance, queryKey: hyperliquidUsdcBalance.queryKey, isLoading: hyperliquidUsdcBalance.isLoading, isError: hyperliquidUsdcBalance.isError, error: hyperliquidUsdcBalance.error, isDuneBalance: false }; } else { return { value: undefined, queryKey: duneBalances.queryKey, isLoading: duneBalances.isLoading, isError: duneBalances.isError, error: duneBalances.error, isDuneBalance: false }; } }; exports.default = useCurrencyBalance; //# sourceMappingURL=useCurrencyBalance.js.map