import { AddliquidityPosition, EstimateAddLP, EstimateAddSaver, EstimateWithdrawLP, EstimateWithdrawSaver, LoanCloseParams, LoanCloseQuote, LoanOpenParams, LoanOpenQuote, QuoteSwapParams, RegisterTHORName, SaversPosition, SaversWithdraw, ThorchainQuery, TxDetails, UpdateTHORName, WithdrawLiquidityPosition, getSaver } from '@xchainjs/xchain-thorchain-query';
import { Asset, CryptoAmount, TokenAsset } from '@xchainjs/xchain-util';
import { Wallet } from '@xchainjs/xchain-wallet';
import { AddToTradeAccount, AddToTradeAccountParams, ApproveParams, DepositToRunePoolParams, EstimateDepositToRunePool, EstimateWithdrawFromRunePool, IsApprovedParams, QuoteTHORName, TxSubmitted, WithdrawFromRunePoolParams, WithdrawFromTradeAccount, WithdrawFromTradeAccountParams } from './types';
/**
 * THORChain Class for interacting with THORChain.
 * Recommended main class to use for swapping with THORChain
 * Has access to Midgard and THORNode data
 */
export declare class ThorchainAMM {
    private thorchainQuery;
    private wallet;
    /**
     * Constructor to create a ThorchainAMM instance
     *
     * @param thorchainQuery - an instance of the ThorchainQuery
     * @returns ThorchainAMM
     */
    constructor(thorchainQuery?: ThorchainQuery, wallet?: Wallet);
    /**
     * * Provides an estimate for a swap based on the given swap details.
     * Checks the parameters for errors before attempting to retrieve the estimate.
     * Utilizes current pool data to calculate inbound and outbound fees, affiliate fees,
     * and the expected wait time for the swap (inbound and outbound).
     * @param params Parameters for the swap, including the amount to swap.
  
     * @returns The estimated swap details.
     */
    estimateSwap({ fromAddress, fromAsset, amount, destinationAsset, destinationAddress, affiliateAddress, affiliateBps, toleranceBps, liquidityToleranceBps, streamingInterval, streamingQuantity, }: QuoteSwapParams): Promise<TxDetails>;
    /**
     * Validate swap params
     * @param {QuoteSwapParams} quoteSwapParams Swap params
     * @returns {string[]} the reasons the swap can not be done. If it is empty there are no reason to avoid the swap
     */
    validateSwap({ fromAsset, fromAddress, destinationAsset, destinationAddress, amount, affiliateAddress, affiliateBps, streamingInterval, streamingQuantity, }: QuoteSwapParams): Promise<string[]>;
    /**
     * Conducts a swap with the given inputs. This method should be called after estimateSwap() to ensure the swap is valid.
     *
     * @param wallet - The wallet to use for the swap.
     * @param params - The swap parameters.
     * @returns {SwapSubmitted} - The transaction hash, URL of BlockExplorer, and expected wait time.
     */
    doSwap({ fromAsset, fromAddress, amount, destinationAsset, destinationAddress, affiliateAddress, affiliateBps, toleranceBps, streamingInterval, streamingQuantity, }: QuoteSwapParams): Promise<TxSubmitted>;
    /**
     * Approve the Thorchain router to spend a certain amount in the asset chain.
     * @param {ApproveParams} approveParams Parameters for approving the router to spend
     * @returns {Promise<TxSubmitted>} Transaction hash and URL
     */
    approveRouterToSpend({ asset, amount }: ApproveParams): Promise<TxSubmitted>;
    /**
     * Validate if the asset router is allowed to spend the asset amount in name of the address
     * @param {IsApprovedParams} isApprovedParams contains the asset and the amount the router is supposed to spend
     * int name of address
     * @returns {string[]} the reasons the router of the asset is not allowed to spend the amount. If it is empty, the asset router is allowed to spend the amount
     */
    isRouterApprovedToSpend({ asset, amount, address }: IsApprovedParams): Promise<string[]>;
    /**
     * Wraps the estimate from ThorchainQuery for adding liquidity.
     * @param params - The parameters for estimating adding liquidity.
     * @returns - The estimated liquidity addition object.
     */
    estimateAddLiquidity(params: AddliquidityPosition): Promise<EstimateAddLP>;
    /**
     * Wraps the estimate from ThorchainQuery for withdrawing liquidity.
     * @param params - The parameters for estimating withdrawing liquidity.
     * @returns - The estimated liquidity withdrawal object.
     */
    estimateWithdrawLiquidity(params: WithdrawLiquidityPosition): Promise<EstimateWithdrawLP>;
    /**
     * If there is no existing liquidity position, it is created automatically.
     * @param wallet - Wallet class
     * @param params - Liquidity parameter
     * @returns
     */
    addLiquidityPosition(params: AddliquidityPosition): Promise<TxSubmitted[]>;
    /**
     * Withdraws liquidity from a position.
     * @param params - The wallet to perform the transaction.
     * @return - The array of transaction submissions.
     */
    withdrawLiquidityPosition(params: WithdrawLiquidityPosition): Promise<TxSubmitted[]>;
    /**
     * Estimates adding to a saver.
     * @param addAssetAmount The amount to add to the saver.
     * @returns The estimated addition to the saver object.
     */
    estimateAddSaver(addAssetAmount: CryptoAmount<Asset | TokenAsset>): Promise<EstimateAddSaver>;
    /**
     * Estimates withdrawing from a saver.
     * @param withdrawParams The parameters for withdrawing from the saver.
     * @returns The estimated withdrawal from the saver object.
     */
    estimateWithdrawSaver(withdrawParams: SaversWithdraw): Promise<EstimateWithdrawSaver>;
    /**
     * Retrieves the position of a saver.
     * @param getsaver The parameters to retrieve the saver position.
     * @returns The saver position object.
     */
    getSaverPosition(getsaver: getSaver): Promise<SaversPosition>;
    /**
     * Adds assets to a saver.
     * @param wallet - wallet needed to execute tx
     * @param addAssetAmount - The amount to add to the saver.
     * @returns - The submitted transaction.
     */
    addSaver(addAssetAmount: CryptoAmount<Asset | TokenAsset>): Promise<TxSubmitted>;
    /**
     * Withdraws assets from a saver.
     * @param withdrawParams - The parameters for withdrawing from the saver.
     * @returns The submitted transaction.
     */
    withdrawSaver(withdrawParams: SaversWithdraw): Promise<TxSubmitted>;
    /**
     * Retrieves a quote for opening a loan.
     * @param loanOpenParams The parameters for opening the loan.
     * @returns The quote for opening the loan.
     */
    getLoanQuoteOpen(loanOpenParams: LoanOpenParams): Promise<LoanOpenQuote>;
    /**
     * Retrieves a quote for closing a loan.
     * @param loanCloseParams The parameters for closing the loan.
     * @returns The quote for closing the loan.
     */
    getLoanQuoteClose(loanCloseParams: LoanCloseParams): Promise<LoanCloseQuote>;
    /**
     * Opens a loan.
     * @param loanOpenParams - The parameters for opening the loan.
     * @returns - The submitted transaction.
     */
    addLoan(loanOpenParams: LoanOpenParams): Promise<TxSubmitted>;
    /**
     * Withdraws assets from a loan.
     * @param loanCloseParams - The parameters for withdrawing from the loan.
     * @returns The submitted transaction.
     */
    withdrawLoan(loanCloseParams: LoanCloseParams): Promise<TxSubmitted>;
    /**
     * Retrieves all Thornames and their associated data owned by an address.
     * @param address - The address to retrieve Thornames for.
     * @returns The Thornames data.
     */
    getThornamesByAddress(address: string): Promise<import("@xchainjs/xchain-midgard/lib").ReverseTHORNames | undefined>;
    /**
     * Estimate the cost of a THORName registration
     * @param {RegisterTHORName} params Params to make the registration
     * @returns {QuoteTHORName} Memo to make the registration and the estimation of the operation
     */
    estimateTHORNameRegistration(params: RegisterTHORName): Promise<QuoteTHORName>;
    /**
     * Estimate the cost of an update of a THORName
     * @param {QuoteTHORNameParams} params Params to make the update
     * @returns {QuoteTHORName} Memo to make the update and the estimation of the operation
     */
    estimateTHORNameUpdate(params: UpdateTHORName): Promise<QuoteTHORName>;
    /**
     * Register a THORName
     * @param {RegisterTHORName} params Params to make the registration
     * @returns {TxSubmitted} Transaction made to register the THORName
     */
    registerTHORName(params: RegisterTHORName): Promise<TxSubmitted>;
    /**
     * Update a THORName
     * @param {UpdateTHORName} params Params to make the update
     * @returns {TxSubmitted} Transaction made to update the THORName
     */
    updateTHORName(params: UpdateTHORName): Promise<TxSubmitted>;
    /**
     * Estimate adding trade amount to account
     * @param {AddToTradeAccountParams} param Add to trade account params
     * @returns {AddToTradeAccount} Estimation to add amount to trade account
     */
    estimateAddToTradeAccount({ amount, address }: AddToTradeAccountParams): Promise<AddToTradeAccount>;
    /**
     * Add trade amount to account
     * @param {AddToTradeAccountParams} param Add to trade account params
     * @returns {TxSubmitted} Transaction made to add the trade amount
     */
    addToTradeAccount({ amount, address }: AddToTradeAccountParams): Promise<TxSubmitted>;
    /**
     * Estimate withdrawing trade amount from account
     * @param {WithdrawFromTradeAccountParams} param Withdraw from trade account params
     * @returns {WithdrawFromTradeAccount} Estimation to withdraw amount from trade account
     */
    estimateWithdrawFromTradeAccount({ amount, address, }: WithdrawFromTradeAccountParams): Promise<WithdrawFromTradeAccount>;
    /**
     * Withdraw trade amount from account
     * @param {WithdrawFromTradeAccountParams} param Withdraw from trade account params
     * @returns {TxSubmitted} Estimation to withdraw amount from trade account
     */
    withdrawFromTradeAccount({ amount, address }: WithdrawFromTradeAccountParams): Promise<TxSubmitted>;
    /**
     * Estimate Rune pool deposit
     * @param {DepositToRunePoolParams} params Deposit to Rune pool params
     * @returns {EstimateDepositToRunePool} Estimation to make the deposit
     */
    estimateDepositToRunePool({ amount }: DepositToRunePoolParams): Promise<EstimateDepositToRunePool>;
    /**
     * Deposit amount to Rune pool
     * @param {DepositToRunePoolParams} amount Amount to deposit to Rune pool
     * @returns {TxSubmitted} Transaction made to deposit to Rune pool
     */
    depositToRunePool(params: DepositToRunePoolParams): Promise<TxSubmitted>;
    /**
     * Estimate Rune pool withdraw
     * @param {WithdrawFromRunePoolParams} params Withdraw from Rune pool params
     * @returns {EstimateWithdrawFromRunePool} Estimation to make a withdraw from Rune pool
     */
    estimateWithdrawFromRunePool({ withdrawBps, affiliate, feeBps, }: WithdrawFromRunePoolParams): Promise<EstimateWithdrawFromRunePool>;
    /**
     * Withdraw amount from Rune pool
     * @param {WithdrawFromRunePoolParams} params Withdraw from Rune pool params
     * @returns {TxSubmitted} Transaction made to withdraw from Rune pool
     */
    withdrawFromRunePool(params: WithdrawFromRunePoolParams): Promise<TxSubmitted>;
    private isTHORName;
}
