@reservoir0x/relay-kit-ui
Version:
Relay is the Fastest and Cheapest Way to Bridge and Transact Across Chains.
99 lines • 4.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const viem_1 = require("viem");
const RelayKitProvider_js_1 = require("../providers/RelayKitProvider.js");
const react_1 = require("react");
const react_query_1 = require("@tanstack/react-query");
const solana_js_1 = require("../utils/solana.js");
exports.default = (address, evmChainIds = 'mainnet', queryOptions) => {
const providerOptions = (0, react_1.useContext)(RelayKitProvider_js_1.ProviderOptionsContext);
const queryKey = ['useDuneBalances', address];
const isEvmAddress = (0, viem_1.isAddress)(address ?? '');
const isSvmAddress = (0, solana_js_1.isSolanaAddress)(address ?? '');
const response = react_query_1.useQuery({
queryKey: ['useDuneBalances', address],
queryFn: () => {
let url = `${providerOptions.duneConfig?.apiBaseUrl ?? 'https://api.sim.dune.com'}/v1/evm/balances/${address?.toLowerCase()}?chain_ids=${evmChainIds}&exclude_spam_tokens=true`;
if (isSvmAddress) {
url = `${providerOptions.duneConfig?.apiBaseUrl ?? 'https://api.sim.dune.com'}/beta/svm/balances/${address}?chain_ids=all&exclude_spam_tokens=true`;
}
if (!isSvmAddress && !isEvmAddress) {
return null;
}
return fetch(url, {
headers: providerOptions.duneConfig?.apiKey
? {
'X-Sim-Api-Key': providerOptions.duneConfig?.apiKey
}
: {}
})
.then((response) => response.json())
.then((response) => {
if (response.balances) {
const balances = response.balances;
if (balances) {
balances
.filter((balance) => {
try {
BigInt(balance.amount);
return true;
}
catch (e) {
return false;
}
})
.sort((a, b) => {
if (a.value_usd !== undefined && b.value_usd !== undefined) {
return a.value_usd - b.value_usd;
}
else if (a.value_usd !== undefined) {
return -1;
}
else if (b.value_usd !== undefined) {
return 1;
}
else {
const amountA = parseFloat((0, viem_1.formatUnits)(BigInt(a.amount), a.decimals));
const amountB = parseFloat((0, viem_1.formatUnits)(BigInt(b.amount), b.decimals));
return amountA - amountB;
}
});
}
}
return response;
});
},
...queryOptions,
enabled: address !== undefined &&
providerOptions.duneConfig?.apiKey !== undefined &&
queryOptions?.enabled &&
(isSvmAddress || isEvmAddress)
});
response?.data?.balances?.forEach((balance) => {
if (!balance.chain_id && balance.chain === 'solana') {
balance.chain_id = solana_js_1.solana.id;
}
if (!balance.chain_id && balance.chain === 'eclipse') {
balance.chain_id = solana_js_1.eclipse.id;
}
});
const balanceMap = response?.data?.balances?.reduce((balanceMap, balance) => {
if (balance.address === 'native') {
balance.address =
balance.chain === 'solana' || balance.chain === 'eclipse'
? '11111111111111111111111111111111'
: viem_1.zeroAddress;
}
let chainId = balance.chain_id;
if (!chainId && balance.chain === 'solana') {
chainId = solana_js_1.solana.id;
}
if (!chainId && balance.chain === 'eclipse') {
chainId = solana_js_1.eclipse.id;
}
balanceMap[`${chainId}:${balance.address}`] = balance;
return balanceMap;
}, {});
return { ...response, balanceMap, queryKey };
};
//# sourceMappingURL=useDuneBalances.js.map