@samudai_xyz/web3-sdk
Version:
## All in one web3 integrations for Samudai
68 lines (67 loc) • 2.88 kB
JavaScript
;
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;