/**
 * 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