/// <reference types="bn.js" />
import { AddressLookupTableAccount, Connection, PublicKey, TransactionInstruction, TransactionMessage, VersionedTransaction } from '@solana/web3.js';
import { BN } from '@coral-xyz/anchor';
export type SwapMode = 'ExactIn' | 'ExactOut';
export interface MarketInfo {
    id: string;
    inAmount: number;
    inputMint: string;
    label: string;
    lpFee: Fee;
    notEnoughLiquidity: boolean;
    outAmount: number;
    outputMint: string;
    platformFee: Fee;
    priceImpactPct: number;
}
export interface Fee {
    amount: number;
    mint: string;
    pct: number;
}
export interface Route {
    amount: number;
    inAmount: number;
    marketInfos: MarketInfo[];
    otherAmountThreshold: number;
    outAmount: number;
    priceImpactPct: number;
    slippageBps: number;
    swapMode: SwapMode;
}
/**
 *
 * @export
 * @interface RoutePlanStep
 */
export interface RoutePlanStep {
    /**
     *
     * @type {SwapInfo}
     * @memberof RoutePlanStep
     */
    swapInfo: SwapInfo;
    /**
     *
     * @type {number}
     * @memberof RoutePlanStep
     */
    percent: number;
}
export interface SwapInfo {
    /**
     *
     * @type {string}
     * @memberof SwapInfo
     */
    ammKey: string;
    /**
     *
     * @type {string}
     * @memberof SwapInfo
     */
    label?: string;
    /**
     *
     * @type {string}
     * @memberof SwapInfo
     */
    inputMint: string;
    /**
     *
     * @type {string}
     * @memberof SwapInfo
     */
    outputMint: string;
    /**
     *
     * @type {string}
     * @memberof SwapInfo
     */
    inAmount: string;
    /**
     *
     * @type {string}
     * @memberof SwapInfo
     */
    outAmount: string;
    /**
     *
     * @type {string}
     * @memberof SwapInfo
     */
    feeAmount: string;
    /**
     *
     * @type {string}
     * @memberof SwapInfo
     */
    feeMint: string;
}
/**
 *
 * @export
 * @interface PlatformFee
 */
export interface PlatformFee {
    /**
     *
     * @type {string}
     * @memberof PlatformFee
     */
    amount?: string;
    /**
     *
     * @type {number}
     * @memberof PlatformFee
     */
    feeBps?: number;
}
/**
 *
 * @export
 * @interface QuoteResponse
 */
export interface QuoteResponse {
    /**
     *
     * @type {string}
     * @memberof QuoteResponse
     */
    inputMint: string;
    /**
     *
     * @type {string}
     * @memberof QuoteResponse
     */
    inAmount: string;
    /**
     *
     * @type {string}
     * @memberof QuoteResponse
     */
    outputMint: string;
    /**
     *
     * @type {string}
     * @memberof QuoteResponse
     */
    outAmount: string;
    /**
     *
     * @type {string}
     * @memberof QuoteResponse
     */
    otherAmountThreshold: string;
    /**
     *
     * @type {SwapMode}
     * @memberof QuoteResponse
     */
    swapMode: SwapMode;
    /**
     *
     * @type {number}
     * @memberof QuoteResponse
     */
    slippageBps: number;
    /**
     *
     * @type {PlatformFee}
     * @memberof QuoteResponse
     */
    platformFee?: PlatformFee;
    /**
     *
     * @type {string}
     * @memberof QuoteResponse
     */
    priceImpactPct: string;
    /**
     *
     * @type {Array<RoutePlanStep>}
     * @memberof QuoteResponse
     */
    routePlan: Array<RoutePlanStep>;
    /**
     *
     * @type {number}
     * @memberof QuoteResponse
     */
    contextSlot?: number;
    /**
     *
     * @type {number}
     * @memberof QuoteResponse
     */
    timeTaken?: number;
    /**
     *
     * @type {string}
     * @memberof QuoteResponse
     */
    error?: string;
    /**
     *
     * @type {string}
     * @memberof QuoteResponse
     */
    errorCode?: string;
}
export declare class JupiterClient {
    url: string;
    connection: Connection;
    lookupTableCahce: Map<string, AddressLookupTableAccount>;
    constructor({ connection, url }: {
        connection: Connection;
        url?: string;
    });
    /**
     * ** @deprecated - use getQuote
     * Get routes for a swap
     * @param inputMint the mint of the input token
     * @param outputMint the mint of the output token
     * @param amount the amount of the input token
     * @param slippageBps the slippage tolerance in basis points
     * @param swapMode the swap mode (ExactIn or ExactOut)
     * @param onlyDirectRoutes whether to only return direct routes
     */
    getRoutes({ inputMint, outputMint, amount, slippageBps, swapMode, onlyDirectRoutes, }: {
        inputMint: PublicKey;
        outputMint: PublicKey;
        amount: BN;
        slippageBps?: number;
        swapMode?: SwapMode;
        onlyDirectRoutes?: boolean;
    }): Promise<Route[]>;
    /**
     * Get routes for a swap
     * @param inputMint the mint of the input token
     * @param outputMint the mint of the output token
     * @param amount the amount of the input token
     * @param slippageBps the slippage tolerance in basis points
     * @param swapMode the swap mode (ExactIn or ExactOut)
     * @param onlyDirectRoutes whether to only return direct routes
     */
    getQuote({ inputMint, outputMint, amount, maxAccounts, // 50 is an estimated amount with buffer
    slippageBps, swapMode, onlyDirectRoutes, excludeDexes, autoSlippage, maxAutoSlippageBps, usdEstimate, }: {
        inputMint: PublicKey;
        outputMint: PublicKey;
        amount: BN;
        maxAccounts?: number;
        slippageBps?: number;
        swapMode?: SwapMode;
        onlyDirectRoutes?: boolean;
        excludeDexes?: string[];
        autoSlippage?: boolean;
        maxAutoSlippageBps?: number;
        usdEstimate?: number;
    }): Promise<QuoteResponse>;
    /**
     * Get a swap transaction for quote
     * @param quoteResponse quote to perform swap
     * @param userPublicKey the signer's wallet public key
     * @param slippageBps the slippage tolerance in basis points
     */
    getSwap({ quote, userPublicKey, slippageBps, }: {
        quote: QuoteResponse;
        userPublicKey: PublicKey;
        slippageBps?: number;
    }): Promise<VersionedTransaction>;
    /**
     * ** @deprecated - use getSwap
     * Get a swap transaction for a route
     * @param route the route to perform swap
     * @param userPublicKey the signer's wallet public key
     * @param slippageBps the slippage tolerance in basis points
     */
    getSwapTransaction({ route, userPublicKey, slippageBps, }: {
        route: Route;
        userPublicKey: PublicKey;
        slippageBps?: number;
    }): Promise<VersionedTransaction>;
    /**
     * Get the transaction message and lookup tables for a transaction
     * @param transaction
     */
    getTransactionMessageAndLookupTables({ transaction, }: {
        transaction: VersionedTransaction;
    }): Promise<{
        transactionMessage: TransactionMessage;
        lookupTables: AddressLookupTableAccount[];
    }>;
    getLookupTable(accountKey: PublicKey): Promise<AddressLookupTableAccount>;
    /**
     * Get the jupiter instructions from transaction by filtering out instructions to compute budget and associated token programs
     * @param transactionMessage the transaction message
     * @param inputMint the input mint
     * @param outputMint the output mint
     */
    getJupiterInstructions({ transactionMessage, inputMint, outputMint, }: {
        transactionMessage: TransactionMessage;
        inputMint: PublicKey;
        outputMint: PublicKey;
    }): TransactionInstruction[];
}
//# sourceMappingURL=jupiterClient.d.ts.map