@moonwell-fi/moonwell-sdk
Version:
TypeScript Interface for Moonwell
57 lines • 2.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getMorphoVaultUserPositionSnapshots = getMorphoVaultUserPositionSnapshots;
const index_js_1 = require("../../../common/index.js");
const lunar_indexer_client_js_1 = require("../../lunar-indexer-client.js");
async function getMorphoVaultUserPositionSnapshots(client, args) {
const environment = (0, index_js_1.getEnvironmentFromArgs)(client, args);
if (!environment) {
return [];
}
const { vaultAddress: rawVaultAddress, vault } = args;
const vaultAddress = rawVaultAddress ?? (vault ? environment.vaults[vault].address : undefined);
const lunarIndexerUrl = environment.lunarIndexerUrl;
if (!lunarIndexerUrl) {
return [];
}
try {
return await fetchUserPositionSnapshotsFromLunar(args.userAddress, vaultAddress, lunarIndexerUrl, environment);
}
catch (error) {
console.warn(`[getMorphoVaultUserPositionSnapshots] Lunar Indexer failed for chain ${environment.chainId}:`, error);
environment.onError?.(error, {
source: "morpho-vault-user-position-snapshots",
chainId: environment.chainId,
});
return [];
}
}
async function fetchUserPositionSnapshotsFromLunar(userAddress, vaultAddress, lunarIndexerUrl, environment) {
const lunarClient = (0, lunar_indexer_client_js_1.createLunarIndexerClient)({
baseUrl: lunarIndexerUrl,
timeout: lunar_indexer_client_js_1.DEFAULT_LUNAR_TIMEOUT_MS,
});
const endTime = Math.floor(Date.now() / 1000);
const startTime = endTime - 3 * 365 * 24 * 60 * 60;
const portfolio = await lunarClient.getVaultAccountPortfolio(userAddress, {
startTime,
endTime,
granularity: "1d",
chainId: environment.chainId,
...(vaultAddress ? { vault: vaultAddress } : {}),
});
const snapshots = [];
for (const position of portfolio.positions) {
for (const v of position.vaults) {
snapshots.push({
chainId: v.chainId,
account: userAddress,
vaultAddress: v.vaultAddress,
suppliedUsd: v.shareBalanceUsd,
timestamp: position.timestamp * 1000,
});
}
}
return snapshots;
}
//# sourceMappingURL=getMorphoVaultUserPositionSnapshots.js.map