import { TokenDetailResponse, TokenHoldersResponse, TopHolder, AthPrice, DeployerTokensResponse, SearchParams, SearchResponse, TokenOverview, PriceData, PriceHistoryData, PriceTimestampData, PriceRangeData, MultiPriceResponse, WalletBasicResponse, TradesResponse, WalletResponse, ChartResponse, HoldersChartResponse, PnLResponse, TokenPnLResponse, FirstBuyerData, TopTradersResponse, TokenStats } from './interfaces';
export declare class DataApiError extends Error {
    status?: number | undefined;
    code?: string | undefined;
    constructor(message: string, status?: number | undefined, code?: string | undefined);
}
export declare class RateLimitError extends DataApiError {
    retryAfter?: number | undefined;
    constructor(message: string, retryAfter?: number | undefined);
}
export declare class ValidationError extends DataApiError {
    constructor(message: string);
}
/**
 * Config options for the Solana Tracker Data API
 */
export interface DataApiConfig {
    /** Your API key from solanatracker.io */
    apiKey: string;
    /** Optional base URL override */
    baseUrl?: string;
}
export interface RequestOptions {
    method: string;
    body: any;
    /** Optional headers to include in the request */
    headers?: Record<string, string>;
    /** Disable logs for rate limit warnings */
    disableLogs?: boolean;
}
/**
 * Solana Tracker Data API client
 */
export declare class Client {
    private apiKey;
    private baseUrl;
    /**
     * Creates a new instance of the Solana Tracker Data API client
     * @param config Configuration options including API key
     */
    constructor(config: DataApiConfig);
    /**
     * Makes a request to the API
     * @param endpoint The API endpoint
     * @param options Additional fetch options
     * @returns The API response
     */
    private request;
    /**
     * Validates a Solana public key
     * @param address The address to validate
     * @param paramName The parameter name for error messaging
     * @throws ValidationError if the address is invalid
     */
    private validatePublicKey;
    /**
     * Get comprehensive information about a specific token
     * @param tokenAddress The token's mint address
     * @returns Detailed token information
     */
    getTokenInfo(tokenAddress: string): Promise<TokenDetailResponse>;
    /**
     * Get token information by searching with a pool address
     * @param poolAddress The pool address
     * @returns Detailed token information
     */
    getTokenByPool(poolAddress: string): Promise<TokenDetailResponse>;
    /**
     * Get token holders information
     * @param tokenAddress The token's mint address
     * @returns Information about token holders
     */
    getTokenHolders(tokenAddress: string): Promise<TokenHoldersResponse>;
    /**
     * Get top 20 token holders
     * @param tokenAddress The token's mint address
     * @returns Top holders information
     */
    getTopHolders(tokenAddress: string): Promise<TopHolder[]>;
    /**
     * Get the all-time high price for a token
     * @param tokenAddress The token's mint address
     * @returns All-time high price data
     */
    getAthPrice(tokenAddress: string): Promise<AthPrice>;
    /**
     * Get tokens created by a specific wallet
     * @param wallet The deployer wallet address
     * @returns List of tokens created by the deployer
     */
    getTokensByDeployer(wallet: string): Promise<DeployerTokensResponse>;
    /**
     * Search for tokens with flexible filtering options
     * @param params Search parameters and filters
     * @returns Search results
     */
    searchTokens(params: SearchParams): Promise<SearchResponse>;
    /**
     * Get the latest tokens
     * @param page Page number (1-10)
     * @returns List of latest tokens
     */
    getLatestTokens(page?: number): Promise<TokenDetailResponse[]>;
    /**
     * Get information about multiple tokens
     * @param tokenAddresses Array of token addresses
     * @returns Information about multiple tokens
     */
    getMultipleTokens(tokenAddresses: string[]): Promise<TokenDetailResponse[]>;
    /**
     * Get trending tokens
     * @param timeframe Optional timeframe for trending calculation
     * @returns List of trending tokens
     */
    getTrendingTokens(timeframe?: string): Promise<TokenDetailResponse[]>;
    /**
     * Get tokens sorted by volume
     * @param timeframe Optional timeframe for volume calculation
     * @returns List of tokens sorted by volume
     */
    getTokensByVolume(timeframe?: string): Promise<TokenDetailResponse[]>;
    /**
     * Get an overview of latest, graduating, and graduated tokens
     * @returns Token overview
     */
    getTokenOverview(): Promise<TokenOverview>;
    /**
     * Get graduated tokens
     * @returns List of graduated tokens
     */
    getGraduatedTokens(): Promise<TokenDetailResponse[]>;
    /**
     * Get price information for a token
     * @param tokenAddress The token's mint address
     * @param priceChanges Include price change percentages
     * @returns Price data
     */
    getPrice(tokenAddress: string, priceChanges?: boolean): Promise<PriceData>;
    /**
     * Get historic price information for a token
     * @param tokenAddress The token's mint address
     * @returns Historic price data
     */
    getPriceHistory(tokenAddress: string): Promise<PriceHistoryData>;
    /**
     * Get price at a specific timestamp
     * @param tokenAddress The token's mint address
     * @param timestamp Unix timestamp
     * @returns Price at the specified timestamp
     */
    getPriceAtTimestamp(tokenAddress: string, timestamp: number): Promise<PriceTimestampData>;
    /**
     * Get lowest and highest price in a time range
     * @param tokenAddress The token's mint address
     * @param timeFrom Start time (unix timestamp)
     * @param timeTo End time (unix timestamp)
     * @returns Price range data
     */
    getPriceRange(tokenAddress: string, timeFrom: number, timeTo: number): Promise<PriceRangeData>;
    /**
     * Get price information for a token (POST method)
     * @param tokenAddress The token's mint address
     * @param priceChanges Include price change percentages
     * @returns Price data
     */
    postPrice(tokenAddress: string, priceChanges?: boolean): Promise<PriceData>;
    /**
     * Get price information for multiple tokens
     * @param tokenAddresses Array of token addresses
     * @param priceChanges Include price change percentages
     * @returns Price data for multiple tokens
     */
    getMultiplePrices(tokenAddresses: string[], priceChanges?: boolean): Promise<MultiPriceResponse>;
    /**
     * Get price information for multiple tokens (POST method)
     * @param tokenAddresses Array of token addresses
     * @param priceChanges Include price change percentages
     * @returns Price data for multiple tokens
     */
    postMultiplePrices(tokenAddresses: string[], priceChanges?: boolean): Promise<MultiPriceResponse>;
    /**
     * Get basic wallet information
     * @param owner Wallet address
     * @returns Basic wallet data
     */
    getWalletBasic(owner: string): Promise<WalletBasicResponse>;
    /**
     * Get all tokens in a wallet
     * @param owner Wallet address
     * @returns Detailed wallet data
     */
    getWallet(owner: string): Promise<WalletResponse>;
    /**
     * Get wallet tokens with pagination
     * @param owner Wallet address
     * @param page Page number
     * @returns Paginated wallet data
     */
    getWalletPage(owner: string, page: number): Promise<WalletResponse>;
    /**
     * Get wallet trades
     * @param owner Wallet address
     * @param cursor Pagination cursor
     * @param showMeta Include token metadata
     * @param parseJupiter Parse Jupiter swaps
     * @param hideArb Hide arbitrage transactions
     * @returns Wallet trades data
     */
    getWalletTrades(owner: string, cursor?: number, showMeta?: boolean, parseJupiter?: boolean, hideArb?: boolean): Promise<TradesResponse>;
    /**
     * Get trades for a token
     * @param tokenAddress Token address
     * @param cursor Pagination cursor
     * @param showMeta Include token metadata
     * @param parseJupiter Parse Jupiter swaps
     * @param hideArb Hide arbitrage transactions
     * @returns Token trades data
     */
    getTokenTrades(tokenAddress: string, cursor?: number, showMeta?: boolean, parseJupiter?: boolean, hideArb?: boolean): Promise<TradesResponse>;
    /**
     * Get trades for a specific token and pool
     * @param tokenAddress Token address
     * @param poolAddress Pool address
     * @param cursor Pagination cursor
     * @param showMeta Include token metadata
     * @param parseJupiter Parse Jupiter swaps
     * @param hideArb Hide arbitrage transactions
     * @returns Pool-specific token trades data
     */
    getPoolTrades(tokenAddress: string, poolAddress: string, cursor?: number, showMeta?: boolean, parseJupiter?: boolean, hideArb?: boolean): Promise<TradesResponse>;
    /**
     * Get trades for a specific token, pool, and wallet
     * @param tokenAddress Token address
     * @param poolAddress Pool address
     * @param owner Wallet address
     * @param cursor Pagination cursor
     * @param showMeta Include token metadata
     * @param parseJupiter Parse Jupiter swaps
     * @param hideArb Hide arbitrage transactions
     * @returns User-specific pool trades data
     */
    getUserPoolTrades(tokenAddress: string, poolAddress: string, owner: string, cursor?: number, showMeta?: boolean, parseJupiter?: boolean, hideArb?: boolean): Promise<TradesResponse>;
    /**
     * Get trades for a specific token and wallet
     * @param tokenAddress Token address
     * @param owner Wallet address
     * @param cursor Pagination cursor
     * @param showMeta Include token metadata
     * @param parseJupiter Parse Jupiter swaps
     * @param hideArb Hide arbitrage transactions
     * @returns User-specific token trades data
     */
    getUserTokenTrades(tokenAddress: string, owner: string, cursor?: number, showMeta?: boolean, parseJupiter?: boolean, hideArb?: boolean): Promise<TradesResponse>;
    /**
     * Get OHLCV data for a token
     * @param tokenAddress Token address
     * @param type Time interval (e.g., "1s", "1m", "1h", "1d")
     * @param timeFrom Start time (Unix timestamp in seconds)
     * @param timeTo End time (Unix timestamp in seconds)
     * @param marketCap Return chart for market cap instead of pricing
     * @param removeOutliers Disable outlier removal if set to false (default: true)
     * @returns OHLCV chart data
     */
    getChartData(tokenAddress: string, type?: string, timeFrom?: number, timeTo?: number, marketCap?: boolean, removeOutliers?: boolean): Promise<ChartResponse>;
    /**
     * Get OHLCV data for a specific token and pool
     * @param tokenAddress Token address
     * @param poolAddress Pool address
     * @param type Time interval (e.g., "1s", "1m", "1h", "1d")
     * @param timeFrom Start time (Unix timestamp in seconds)
     * @param timeTo End time (Unix timestamp in seconds)
     * @param marketCap Return chart for market cap instead of pricing
     * @param removeOutliers Disable outlier removal if set to false (default: true)
     * @returns OHLCV chart data for a specific pool
     */
    getPoolChartData(tokenAddress: string, poolAddress: string, type?: string, timeFrom?: number, timeTo?: number, marketCap?: boolean, removeOutliers?: boolean): Promise<ChartResponse>;
    /**
     * Get holder count chart data
     * @param tokenAddress Token address
     * @param type Time interval (e.g., "1s", "1m", "1h", "1d")
     * @param timeFrom Start time (Unix timestamp in seconds)
     * @param timeTo End time (Unix timestamp in seconds)
     * @returns Holder count chart data
     */
    getHoldersChart(tokenAddress: string, type?: string, timeFrom?: number, timeTo?: number): Promise<HoldersChartResponse>;
    /**
     * Get PnL data for all positions of a wallet
     * @param wallet Wallet address
     * @param showHistoricPnL Add PnL data for 1d, 7d and 30d intervals (BETA)
     * @param holdingCheck Additional check for current holding value
     * @param hideDetails Return only summary without data for each token
     * @returns Wallet PnL data
     */
    getWalletPnL(wallet: string, showHistoricPnL?: boolean, holdingCheck?: boolean, hideDetails?: boolean): Promise<PnLResponse>;
    /**
     * Get the first 100 buyers of a token with PnL data
     * @param tokenAddress Token address
     * @returns First buyers data with PnL
     */
    getFirstBuyers(tokenAddress: string): Promise<FirstBuyerData[]>;
    /**
     * Get PnL data for a specific token in a wallet
     * @param wallet Wallet address
     * @param tokenAddress Token address
     * @returns Token-specific PnL data
     */
    getTokenPnL(wallet: string, tokenAddress: string): Promise<TokenPnLResponse>;
    /**
     * Get the most profitable traders across all tokens
     * @param page Page number (optional)
     * @param expandPnL Include detailed PnL data for each token
     * @param sortBy Sort results by metric ("total" or "winPercentage")
     * @returns Top traders data
     */
    getTopTraders(page?: number, expandPnL?: boolean, sortBy?: 'total' | 'winPercentage'): Promise<TopTradersResponse>;
    /**
     * Get top 100 traders by PnL for a token
     * @param tokenAddress Token address
     * @returns Top traders for a specific token
     */
    getTokenTopTraders(tokenAddress: string): Promise<FirstBuyerData[]>;
    /**
     * Get detailed stats for a token over various time intervals
     * @param tokenAddress Token address
     * @returns Detailed token stats
     */
    getTokenStats(tokenAddress: string): Promise<TokenStats>;
    /**
     * Get detailed stats for a specific token and pool
     * @param tokenAddress Token address
     * @param poolAddress Pool address
     * @returns Detailed token-pool stats
     */
    getPoolStats(tokenAddress: string, poolAddress: string): Promise<TokenStats>;
}
