@moonwell-fi/moonwell-sdk
Version:
TypeScript Interface for Moonwell
70 lines • 3.27 kB
JavaScript
;
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