@broxus/js-bridge-essentials
Version:
Bridge JavaScript Essentials library
42 lines (41 loc) • 1.95 kB
JavaScript
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,
};
}
}