import { request } from '../../utils/request.js'; import type { Token, TokenAmount } from '../../types/token.js'; import { TON_NATIVE_ADDRESS } from '../../utils/constants.js'; export const getTONBalance = async ( walletAddress: string, tokens: Token[], ): Promise => { if (tokens.length === 0) { return []; } const tokenBalances: TokenAmount[] = []; const jettons = await request( `https://tonapi.io/v2/accounts/${walletAddress}/jettons?currencies=ton,usd`, { skipTrackingHeaders: true, retries: 1, }, ); const nativeBalance = await request( `https://tonapi.io/v2/accounts/${walletAddress}`, { skipTrackingHeaders: true, retries: 1, }, ); tokens.forEach((token) => { const jetton = jettons.balances?.find( (j: any) => j.jetton.address === token.address, ); const nativeToken = token.address === TON_NATIVE_ADDRESS; if (jetton) { tokenBalances.push({ ...token, amount: BigInt(jetton.balance || 0), }); } else if (nativeToken) { tokenBalances.push({ ...token, amount: BigInt(nativeBalance.balance || 0), featured: true, }); } else { tokenBalances.push({ ...token, amount: BigInt(0), }); } }); return tokenBalances; };