UNPKG

@broxus/js-bridge-essentials

Version:

Bridge JavaScript Essentials library

42 lines (41 loc) 1.95 kB
import { SolanaChains, SolanaTokenListProvider, SolanaTokenListResolutionStrategy } from '../../services'; import { resolveSolanaAddress } from '../../utils'; export class SolanaTokenUtils { static async getParsedTokenAccountsByOwner(connection, filter, ownerAddress) { const _filter = {}; if ('mint' in filter) { _filter.mint = filter.mint; } if ('programId' in filter) { _filter.programId = filter.programId; } if (!_filter) { throw new Error('Filter is not provided'); } const parsed = await connection.getParsedTokenAccountsByOwner(resolveSolanaAddress(ownerAddress), _filter); return parsed.value; } static async getFirstParsedTokenAccountByOwner(connection, filter, ownerAddress) { const result = await SolanaTokenUtils.getParsedTokenAccountsByOwner(connection, filter, resolveSolanaAddress(ownerAddress)); return result?.pop()?.account.data; } static async balance(connection, address, ownerAddress) { const parsedAccountData = await SolanaTokenUtils.getFirstParsedTokenAccountByOwner(connection, { mint: resolveSolanaAddress(address) }, ownerAddress); return parsedAccountData?.parsed.info.tokenAmount.amount ?? '0'; } static async getDetails(address) { const tokens = await SolanaTokenListProvider.resolve(SolanaTokenListResolutionStrategy.Solana); const filtered = tokens.filterByClusterSlug('mainnet-beta').filterByChainId(SolanaChains.MainnetBeta).getList(); const token = filtered.find(e => e.address === resolveSolanaAddress(address).toBase58()); if (!token) { return undefined; } return { address: resolveSolanaAddress(address), chainId: Number(token.chainId), decimals: token.decimals, name: token.name, symbol: token.symbol, }; } }