UNPKG

@moonwell-fi/moonwell-sdk

Version:

TypeScript Interface for Moonwell

70 lines 3.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getMorphoVaultSnapshots = getMorphoVaultSnapshots; const index_js_1 = require("../../../common/index.js"); const lunarIndexerTransform_js_1 = require("./lunarIndexerTransform.js"); async function getMorphoVaultSnapshots(client, args) { const environment = (0, index_js_1.getEnvironmentFromArgs)(client, args); if (!environment) { return []; } const { vaultAddress: requestedVaultAddress, period, startTime: customStartTime, endTime: customEndTime, } = args; let fetchAddress = requestedVaultAddress; const matchedEntry = Object.entries(environment.config.vaults).find(([, vaultConfig]) => environment.config.tokens[vaultConfig.vaultToken]?.address?.toLowerCase() === requestedVaultAddress.toLowerCase()); if (matchedEntry !== undefined) { const [matchedVaultKey] = matchedEntry; const v1VaultKey = (0, lunarIndexerTransform_js_1.getV1VaultKey)(environment, matchedVaultKey); if (v1VaultKey) { const v1Token = environment.config.tokens[v1VaultKey]; if (v1Token?.address) { fetchAddress = v1Token.address; } } } const lunarIndexerUrl = environment.lunarIndexerUrl; if (!lunarIndexerUrl) { return []; } try { const snapshots = await fetchVaultSnapshotsFromLunarIndexer(fetchAddress, environment.chainId, lunarIndexerUrl, period, customStartTime, customEndTime); if (fetchAddress.toLowerCase() !== requestedVaultAddress.toLowerCase()) { return snapshots.map((s) => ({ ...s, vaultAddress: requestedVaultAddress.toLowerCase(), })); } return snapshots; } catch (error) { console.warn(`[getMorphoVaultSnapshots] Lunar Indexer failed for chain ${environment.chainId}:`, error); environment.onError?.(error, { source: "morpho-vault-snapshots", chainId: environment.chainId, }); return []; } } async function fetchVaultSnapshotsFromLunarIndexer(vaultAddress, chainId, lunarIndexerUrl, period, customStartTime, customEndTime) { const vaultId = `${chainId}-${vaultAddress.toLowerCase()}`; const allSnapshots = []; let cursor = null; const MAX_PAGES = 100; let page = 0; const { startTime, endTime, granularity } = (0, index_js_1.calculateTimeRange)(period, customStartTime, customEndTime); do { const response = await (0, lunarIndexerTransform_js_1.fetchVaultSnapshotsFromIndexer)(lunarIndexerUrl, vaultId, { limit: 1000, granularity: (0, index_js_1.toApiGranularity)(granularity), startTime, endTime, ...(cursor && { cursor }), }); const transformed = (0, lunarIndexerTransform_js_1.transformVaultSnapshotsFromIndexer)(response.results, chainId); allSnapshots.push(...transformed); cursor = response.nextCursor; page++; } while (cursor !== null && page < MAX_PAGES); allSnapshots.sort((a, b) => a.timestamp - b.timestamp); return (0, index_js_1.applyGranularity)(allSnapshots, granularity); } //# sourceMappingURL=getMorphoVaultSnapshots.js.map