@moonwell-fi/moonwell-sdk
Version:
TypeScript Interface for Moonwell
55 lines • 2.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getMorphoVaultStakingSnapshots = getMorphoVaultStakingSnapshots;
const index_js_1 = require("../../../common/index.js");
const lunar_indexer_client_js_1 = require("../../lunar-indexer-client.js");
const lunar_indexer_transformers_js_1 = require("../../lunar-indexer-transformers.js");
async function getMorphoVaultStakingSnapshots(client, args) {
const environment = (0, index_js_1.getEnvironmentFromArgs)(client, args);
if (!environment) {
return [];
}
const { vaultAddress, period, startTime: customStartTime, endTime: customEndTime, } = args;
const { lunarIndexerUrl } = environment;
if (!lunarIndexerUrl) {
return [];
}
try {
return await fetchVaultStakingSnapshotsFromLunar(vaultAddress, lunarIndexerUrl, environment.chainId, period, customStartTime, customEndTime);
}
catch (error) {
console.warn(`[getMorphoVaultStakingSnapshots] Lunar Indexer failed for chain ${environment.chainId}:`, error);
environment.onError?.(error, {
source: "morpho-vault-staking-snapshots",
chainId: environment.chainId,
});
return [];
}
}
async function fetchVaultStakingSnapshotsFromLunar(vaultAddress, lunarIndexerUrl, chainId, period, customStartTime, customEndTime) {
const lunarClient = (0, lunar_indexer_client_js_1.createLunarIndexerClient)({
baseUrl: lunarIndexerUrl,
timeout: lunar_indexer_client_js_1.DEFAULT_LUNAR_TIMEOUT_MS,
});
const { startTime, endTime, granularity } = (0, index_js_1.calculateTimeRange)(period, customStartTime, customEndTime);
const allSnapshots = [];
let cursor = null;
const MAX_PAGES = 100;
let page = 0;
do {
const response = await lunarClient.getVaultStakingSnapshots(chainId, {
limit: 1000,
granularity: (0, index_js_1.toApiGranularity)(granularity),
startTime,
endTime,
vaultAddress: vaultAddress.toLowerCase(),
...(cursor && { cursor }),
});
allSnapshots.push(...(0, lunar_indexer_transformers_js_1.transformVaultStakingSnapshots)(response.results));
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=getMorphoVaultStakingSnapshots.js.map