import { Address } from "@project-serum/anchor";
import { Connection } from "@solana/web3.js";
import Decimal from "decimal.js";
import { OrcaNetwork } from "./constants/public/network";
import { PoolData } from "./types";
import { OrcaAdmin } from "./admin/orca-admin";
import { OrcaDAL } from "./dal/orca-dal";
import { OrcaPool } from "./pool/orca-pool";
import { OrcaPosition } from "./position/orca-position";
import { TokenUSDPrices } from "./utils/token-price";
import { UserPositionData } from "./types";
import { OrcaZooplankton } from "./offchain/orca-zp";
export declare type OrcaWhirlpoolClientConfig = {
    network?: OrcaNetwork;
    connection?: Connection;
    whirlpoolConfig?: Address;
    programId?: Address;
    offchainDataURI?: string;
};
export declare class OrcaWhirlpoolClient {
    readonly data: OrcaDAL;
    readonly admin: OrcaAdmin;
    readonly pool: OrcaPool;
    readonly position: OrcaPosition;
    readonly offchain: OrcaZooplankton;
    constructor(config?: OrcaWhirlpoolClientConfig);
    /**
     * Use on-chain dex data to derive usd prices for tokens.
     *
     * @param poolAddresses pools to be used for price discovery
     * @param baseTokenMint a token mint with known stable usd price (e.g. USDC)
     * @param baseTokenUSDPrice baseTokenMint's usd price. defaults to 1, assuming `baseTokenMint` is a USD stable coin
     * @param otherBaseTokenMints optional list of token mints to prioritize as base
     * @param refresh defaults to refreshing the cache
     */
    getTokenPrices(poolAddresses: Address[], baseTokenMint: Address, baseTokenUSDPrice?: Decimal, otherBaseTokenMints?: Address[], refresh?: boolean): Promise<TokenUSDPrices>;
    /**
     * Fetch position data owned by the wallet address.
     *
     * @param walletAddress wallet address
     * @param refresh defaults to refreshing the cache
     * @returns positions owned by the wallet address
     */
    getUserPositions(walletAddress: Address, refresh?: boolean): Promise<Record<string, UserPositionData>>;
    /**
     * Fetch list of pool data.
     *
     * @param poolAddresses list of pools to retrieve
     * @param refresh defaults to refreshing the cache
     * @returns list of pool data
     */
    getPools(poolAddresses: Address[], refresh?: boolean): Promise<Record<string, PoolData>>;
    /**
     * Fetch pool data.
     *
     * @param poolAddress pool address
     * @param refresh defaults to refreshing the cache
     * @returns pool data
     */
    getPool(poolAddress: Address, refresh?: boolean): Promise<PoolData | null>;
}
