UNPKG

@samudai_xyz/web3-sdk

Version:

## All in one web3 integrations for Samudai

68 lines (67 loc) 2.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.UserTokenBalance = void 0; /* eslint-disable prefer-const */ const alchemy_sdk_1 = require("alchemy-sdk"); const networks_1 = require("../utils/networks"); class UserTokenBalance { constructor() { this.getBalance = async (chainId, address) => { try { const network = networks_1.Networks.find((network) => network.chainId === chainId); if (!network) { throw new Error('Invalid chainId'); } const config = { apiKey: network.config.apiKey, network: network.config.network, }; const alchemy = new alchemy_sdk_1.Alchemy(config); const tokenBalances = []; const balances = await alchemy.core.getTokenBalances(address); const nonZeroBalances = balances.tokenBalances.filter((token) => { return (token.tokenBalance !== '0x0000000000000000000000000000000000000000000000000000000000000000'); }); for (let token of nonZeroBalances) { let balance = token.tokenBalance; const metadata = await alchemy.core.getTokenMetadata(token.contractAddress); const balanceNum = parseInt(balance) / Math.pow(10, metadata.decimals); balance = balanceNum.toFixed(2); tokenBalances.push({ name: metadata.name, symbol: metadata.symbol, balance: balance, contractAddress: token.contractAddress, }); } return tokenBalances; } catch (err) { return { message: 'Error while getting token balances', error: `Error: ${err}`, }; } }; this.getTokenMetadata = async (chainId, tokenAddress) => { try { const network = networks_1.Networks.find((network) => network.chainId === chainId); if (!network) { throw new Error('Invalid chainId'); } const config = { apiKey: network.config.apiKey, network: network.config.network, }; const alchemy = new alchemy_sdk_1.Alchemy(config); const metadata = await alchemy.core.getTokenMetadata(tokenAddress); return metadata; } catch (err) { throw new Error(`Error while getting token metadata: ${err}`); } }; } } exports.UserTokenBalance = UserTokenBalance;