UNPKG

@moonwell-fi/moonwell-sdk

Version:

TypeScript Interface for Moonwell

264 lines 7.92 kB
/** * Lunar Indexer API Client * * Client for interacting with the Lunar Indexer REST API endpoints. * Provides functions for fetching comptroller, market, token, and portfolio data. */ export interface LunarIndexerConfig { baseUrl: string; timeout?: number; } export interface LunarPaginatedResponse<T> { results: T[]; nextCursor: string | null; } export interface LunarSnapshotOptions { limit?: number; cursor?: string; granularity?: "15m" | "1h" | "6h" | "1d"; startTime?: number; endTime?: number; } export interface LunarStakingSnapshotOptions { limit?: number; cursor?: string; granularity?: "1h" | "6h" | "1d"; startTime?: number; endTime?: number; } export interface LunarVaultStakingSnapshotOptions extends LunarStakingSnapshotOptions { vaultAddress?: string; } export interface LunarStakingSnapshot { id: string; chainId: number; stakingTokenAddress: string; timestamp: number; blockNumber: string; totalStaked: string; totalStakedUSD: string; wellPrice: string; timeInterval: number; } export interface LunarVaultStakingSnapshot { id: string; chainId: number; vaultAddress: string; timestamp: number; blockNumber: string; totalStaked: string; totalStakedUSD: string; underlyingPrice: string; timeInterval: number; } export interface LunarPortfolioOptions { startTime: number; endTime: number; granularity?: "1h" | "6h" | "1d"; chainId?: number; market?: string; } export interface LunarVaultPortfolioOptions { startTime: number; endTime: number; granularity?: "1h" | "6h" | "1d"; chainId?: number; vault?: string; } export interface LunarVaultPosition { chainId: number; vaultAddress: string; shareBalance: string; shareBalanceUsd: number; assetsValue: number; } export interface LunarVaultPortfolio { account: string; positions: Array<{ timestamp: number; vaults: LunarVaultPosition[]; }>; } export interface LunarComptroller { id: string; chainId: number; address: string; priceOracleAddress: string; } export interface LunarMarket { id: string; chainId: number; address: string; underlyingTokenAddress: string; collateralFactor: number; interestRateModelAddress: string; priceFeedAddress: string; reserveFactor: string; blockNumber: string; timestamp: number; } /** * Full market data with all real-time fields from Lunar Indexer * Based on actual API responses from /markets/:chainId and /market/:marketId */ export interface LunarMarketFull { id: string; chainId: number; address: string; underlyingTokenAddress: string; comptrollerAddress: string; totalBorrows: number; totalBorrowsUsd: number; totalSupply: number; totalSupplyUsd: number; totalReserves: number; totalReservesUsd: number; cash: number; cashUsd: number; badDebt: number; badDebtUsd: number; exchangeRate: number; priceUsd: number; baseSupplyApy: number; baseBorrowApy: number; mintPaused: boolean; borrowPaused: boolean; seizePaused: boolean; transferPaused: boolean; borrowCap: number; supplyCap: number; collateralFactor: number; reserveFactor: string; incentives: Array<{ token: string; supplyIncentivesPerSec: string | number; borrowIncentivesPerSec: string | number; priceUsd: number | null; supplyApr: number | null; borrowApr: number | null; }>; underlyingToken: { id: string; chainId: number; address: string; name: string; symbol: string; decimals: number; }; blockNumber: string; timestamp: number; } export interface LunarMarketWithToken extends LunarMarket { underlyingToken: LunarToken; } export interface LunarToken { id: string; chainId: number; address: string; name: string; symbol: string; decimals: number; } export interface LunarMarketSnapshot { id: string; chainId: number; marketAddress: string; timestamp: number; blockNumber: string; totalBorrows: number; totalBorrowsUSD: number; totalSupplies: number; totalSuppliesUSD: number; totalLiquidity: number; totalLiquidityUSD: number; totalReserves: number; totalReservesUSD: number; baseSupplyApy: number; baseBorrowApy: number; timeInterval: number; } export interface LunarPortfolio { account: string; positions: Array<{ timestamp: number; markets: Array<{ chainId: number; marketAddress: string; supplyBalance: string; supplyBalanceUsd: string; borrowBalance: string; borrowBalanceUsd: string; }>; }>; } export declare class LunarIndexerError extends Error { readonly statusCode?: number | undefined; readonly endpoint?: string | undefined; readonly originalError?: Error | undefined; constructor(message: string, statusCode?: number | undefined, endpoint?: string | undefined, originalError?: Error | undefined); } /** * Determine if an error should trigger fallback to Ponder/on-chain */ export declare function shouldFallback(error: unknown): boolean; export declare const DEFAULT_LUNAR_TIMEOUT_MS = 10000; export declare class LunarIndexerClient { private client; private stakingClient; private vaultsClient; constructor(config: LunarIndexerConfig); /** * Get comptroller data for a specific chain */ getComptroller(chainId: number): Promise<LunarComptroller>; /** * List all markets for a specific chain with pagination * Returns full market data with real-time values, APYs, and incentives */ listMarkets(chainId: number, options?: { limit?: number; cursor?: string; }): Promise<LunarPaginatedResponse<LunarMarketFull>>; /** * Get a single market by marketId (format: chainId-marketAddress) * Returns full market data with real-time values, APYs, and incentives */ getMarket(marketId: string): Promise<LunarMarketFull>; /** * Get market snapshots with optional time range and granularity */ getMarketSnapshots(marketId: string, options?: LunarSnapshotOptions): Promise<LunarPaginatedResponse<LunarMarketSnapshot>>; /** * List all tokens for a specific chain with pagination */ listTokens(chainId: number, options?: { limit?: number; cursor?: string; }): Promise<LunarPaginatedResponse<LunarToken>>; /** * Get a single token by tokenId (format: chainId-tokenAddress) */ getToken(tokenId: string): Promise<LunarToken>; /** * Get account portfolio with historical positions * NOTE: USD fields (supplyBalanceUsd, borrowBalanceUsd) are being added by Lunar team */ getAccountPortfolio(accountAddress: string, options: LunarPortfolioOptions): Promise<LunarPortfolio>; /** * Get staking snapshots for a specific chain (stkWELL staking) */ getStakingSnapshots(chainId: number, options?: LunarStakingSnapshotOptions): Promise<LunarPaginatedResponse<LunarStakingSnapshot>>; /** * Get vault account portfolio with historical positions */ getVaultAccountPortfolio(accountAddress: string, options: LunarVaultPortfolioOptions): Promise<LunarVaultPortfolio>; /** * Get vault staking snapshots for a specific chain (MetaMorpho vault staking) */ getVaultStakingSnapshots(chainId: number, options?: LunarVaultStakingSnapshotOptions): Promise<LunarPaginatedResponse<LunarVaultStakingSnapshot>>; } /** * Create a new Lunar Indexer client instance */ export declare function createLunarIndexerClient(config: LunarIndexerConfig): LunarIndexerClient; //# sourceMappingURL=lunar-indexer-client.d.ts.map