@broxus/js-bridge-essentials
Version:
Bridge JavaScript Essentials library
46 lines (45 loc) • 2.12 kB
JavaScript
;
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;