UNPKG

@broxus/js-bridge-essentials

Version:

Bridge JavaScript Essentials library

46 lines (45 loc) 2.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SolanaTokenUtils = void 0; const services_1 = require("../../services"); const utils_1 = require("../../utils"); 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((0, utils_1.resolveSolanaAddress)(ownerAddress), _filter); return parsed.value; } static async getFirstParsedTokenAccountByOwner(connection, filter, ownerAddress) { const result = await SolanaTokenUtils.getParsedTokenAccountsByOwner(connection, filter, (0, utils_1.resolveSolanaAddress)(ownerAddress)); return result?.pop()?.account.data; } static async balance(connection, address, ownerAddress) { const parsedAccountData = await SolanaTokenUtils.getFirstParsedTokenAccountByOwner(connection, { mint: (0, utils_1.resolveSolanaAddress)(address) }, ownerAddress); return parsedAccountData?.parsed.info.tokenAmount.amount ?? '0'; } static async getDetails(address) { const tokens = await services_1.SolanaTokenListProvider.resolve(services_1.SolanaTokenListResolutionStrategy.Solana); const filtered = tokens.filterByClusterSlug('mainnet-beta').filterByChainId(services_1.SolanaChains.MainnetBeta).getList(); const token = filtered.find(e => e.address === (0, utils_1.resolveSolanaAddress)(address).toBase58()); if (!token) { return undefined; } return { address: (0, utils_1.resolveSolanaAddress)(address), chainId: Number(token.chainId), decimals: token.decimals, name: token.name, symbol: token.symbol, }; } } exports.SolanaTokenUtils = SolanaTokenUtils;