@reservoir0x/relay-kit-ui
Version:
Relay is the Fastest and Cheapest Way to Bridge and Transact Across Chains.
234 lines • 9.24 kB
JavaScript
;
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