UNPKG

@openocean.finance/widget-sdk

Version:

OpenOcean Any-to-Any Cross-Chain-Swap SDK

60 lines 2.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTokenBalancesByChain = exports.getTokenBalances = exports.getTokenBalance = void 0; const widget_types_1 = require("@openocean.finance/widget-types"); const config_js_1 = require("../config.js"); const errors_js_1 = require("../errors/errors.js"); const typeguards_js_1 = require("../typeguards.js"); const getTokenBalance = async (walletAddress, token) => { const tokenAmounts = await (0, exports.getTokenBalances)(walletAddress, [token]); return tokenAmounts.length ? tokenAmounts[0] : null; }; exports.getTokenBalance = getTokenBalance; const getTokenBalances = async (walletAddress, tokens) => { const tokensByChain = tokens.reduce((tokens, token) => { if (!tokens[token.chainId]) { tokens[token.chainId] = []; } tokens[token.chainId].push(token); return tokens; }, {}); const tokenAmountsByChain = await (0, exports.getTokenBalancesByChain)(walletAddress, tokensByChain); return Object.values(tokenAmountsByChain).flat(); }; exports.getTokenBalances = getTokenBalances; const getTokenBalancesByChain = async (walletAddress, tokensByChain) => { if (!walletAddress) { throw new errors_js_1.ValidationError('Missing walletAddress.'); } const tokenList = Object.values(tokensByChain).flat(); const invalidTokens = tokenList.filter((token) => !(0, typeguards_js_1.isToken)(token)); if (invalidTokens.length) { throw new errors_js_1.ValidationError('Invalid tokens passed.'); } const tokenAmountsByChain = {}; const tokenAmountsSettled = await Promise.allSettled(Object.keys(tokensByChain).map(async (chainIdStr) => { const chainId = Number.parseInt(chainIdStr); const chain = await config_js_1.config.getChainById(chainId); const tokenAddress = tokensByChain[chainId][0].address; const provider = config_js_1.config .get() .providers.find((provider) => chain.chainType === widget_types_1.ChainType.UTXO ? provider.isAddress(walletAddress) : provider.isAddress(tokenAddress)); if (!provider) { throw new Error(`SDK Token Provider for ${chain.chainType} is not found.`); } const tokenAmounts = await provider.getBalance(walletAddress, tokensByChain[chainId]); tokenAmountsByChain[chainId] = tokenAmounts; })); if (config_js_1.config.get().debug) { for (const result of tokenAmountsSettled) { if (result.status === 'rejected') { console.warn("Couldn't fetch token balance.", result.reason); } } } return tokenAmountsByChain; }; exports.getTokenBalancesByChain = getTokenBalancesByChain; //# sourceMappingURL=balance.js.map