@moonwell-fi/moonwell-sdk
Version:
TypeScript Interface for Moonwell
55 lines • 2.48 kB
JavaScript
import { Amount, getEnvironmentsFromArgs } from "../../common/index.js";
import { findTokenByAddress } from "../../environments/utils/index.js";
export async function getMorphoUserBalances(client, args) {
const environments = getEnvironmentsFromArgs(client, args);
const environmentsTokensBalancesSettled = await Promise.allSettled(environments.map(async (environment) => {
const viewsRead = environment.contracts.views?.read;
if (!viewsRead || !viewsRead?.getTokensBalances) {
return Promise.reject(new Error("No views read contract"));
}
const uniqueTokenAddresses = [
...new Set([
...Object.values(environment.config.vaults).map((vault) => environment.config.tokens[vault.underlyingToken].address),
...Object.values(environment.config.vaults).map((vault) => environment.config.tokens[vault.vaultToken].address),
...Object.values(environment.config.morphoMarkets).map((market) => environment.config.tokens[market.collateralToken].address),
...Object.values(environment.config.morphoMarkets).map((market) => environment.config.tokens[market.loanToken].address),
]),
];
try {
return await viewsRead.getTokensBalances([
[...uniqueTokenAddresses],
args.userAddress,
]);
}
catch (error) {
return Promise.reject(error);
}
}));
const environmentsTokensBalances = environmentsTokensBalancesSettled.map((s) => (s.status === "fulfilled" ? [...s.value] : []));
const tokensBalances = environments.flatMap((curr, index) => {
const balances = environmentsTokensBalances[index];
if (!balances) {
return [];
}
const userBalances = balances
.map((balance) => {
const token = findTokenByAddress(curr, balance.token);
if (token) {
const result = {
chainId: curr.chainId,
account: args.userAddress,
token,
tokenBalance: new Amount(balance.amount, token.decimals),
};
return result;
}
else {
return;
}
})
.filter((item) => item !== undefined);
return userBalances;
});
return tokensBalances;
}
//# sourceMappingURL=getMorphoUserBalances.js.map