UNPKG

@moonwell-fi/moonwell-sdk

Version:

TypeScript Interface for Moonwell

57 lines 2.36 kB
"use strict"; 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