import { AxiosRequestConfig } from 'axios';
import { BaseRestClient, RestClientType } from './lib/BaseRestClient.js';
import { RestClientOptions } from './lib/requestUtils.js';
import { FuturesAccountHistoricOrderRequest, FuturesAccountOpenOrdersRequest, FuturesAccountOrderRequest, FuturesAccountPlanOrdersRequest, FuturesAccountTradesRequest, FuturesAccountTransfersRequest, FuturesAffiliateRebatesRequest, FuturesAffiliateTradesRequest, FuturesKlinesRequest, FuturesSubTransfersRequest, FuturesSubWalletRequest, SetFuturesLeverageRequest, SubmitFuturesOrderRequest, SubmitFuturesPlanOrderRequest, SubmitFuturesSubToMainSubFromSubRequest, SubmitFuturesTransferRequest, TransferFuturesAssetsRequest } from './types/request/futures.types.js';
import { AccountSubTransfersV1Request, CancelOrdersV3Request, CancelSpotBatchOrdersV4Request, DepositWithdrawHistoryV2Request, MarginBorrowRecordsV1Request, MarginBorrowRepayV1Request, MarginRepayRecordsV1Request, SpotBrokerRebateRequest, SpotKlinesV1Request, SpotKlineV3Request, SpotOpenOrdersV4Request, SpotOrderBookDepthV1Request, SpotOrderByClientOrderIdV4Request, SpotOrderByIdV4Request, SpotOrderTradeHistoryV4Request, SubmitMainTransferSubToSubV1Request, SubmitMarginTransferV1Request, SubmitSpotBatchOrdersV4Request, SubmitSpotOrderV2Request, SubmitSubTransferSubToMainV1Request, SubmitSubTransferV1Request, SubmitWithdrawalV1Request, SubSpotWalletBalancesV1Request, SubTransfersV1Request } from './types/request/spot.types.js';
import { FuturesAccountAsset, FuturesAccountHistoricOrder, FuturesAccountOpenOrder, FuturesAccountOrder, FuturesAccountPlanOrders, FuturesAccountPosition, FuturesAccountSetLeverageResult, FuturesAccountSubTransfer, FuturesAccountTrade, FuturesAccountTransfer, FuturesContractDepth, FuturesContractDetails, FuturesFundingRate, FuturesKline, FuturesOpenInterest, FuturesOrderSubmitResult, FuturesTransferSubmitResult, PositionRisk } from './types/response/futures.types.js';
import { AccountCurrencyBalanceV1, APIResponse, OrderSide } from './types/response/shared.types.js';
import { AccountCurrencyV1, AccountDepositAddressV1, AccountDepositWithdrawHistoryV2, AccountWithdrawQuotaV1, ActualFeeRateV1, ArrayFormSpotKlineV3, ArrayFormSpotRecentTrade, ArrayFormSpotTickerV3, BasicFeeRateV1, CancelSpotBatchOrdersV4Response, MarginBorrowingRateV1, MarginBorrowRecordV1, MarginRepayRecordV1, ServiceStatus, SpotAccountTradeV4, SpotBrokerRebateResult, SpotCurrencyV1, SpotKlineV1, SpotOrderBookDepthResultV1, SpotOrderBookDepthResultV3, SpotOrderV4, SpotTickerV1, SpotTickerV3, SpotTradingPairDetailsV1, SpotWalletBalanceV1, SubAccountV1, SubmittedSpotBatchOrderResponseV2, SubTransferRow, SymbolMarginAccountDetailsV1, WithdrawAddressListItem } from './types/response/spot.types.js';
/**
 * Unified REST API client for all of Bitmart's REST APIs
 *
 * Note: for futures V2 APIs, use the `FuturesClientV2` class instead (which maps to a different base URL)
 */
export declare class RestClient extends BaseRestClient {
    constructor(restClientOptions?: RestClientOptions, requestOptions?: AxiosRequestConfig);
    getClientType(): RestClientType;
    /**
     *
     * Custom SDK functions
     *
     */
    /**
     * This method is used to get the latency and time sync between the client and the server.
     * This is not official API endpoint and is only used for internal testing purposes.
     * Use this method to check the latency and time sync between the client and the server.
     * Final values might vary slightly, but it should be within few ms difference.
     * If you have any suggestions or improvements to this measurement, please create an issue or pull request on GitHub.
     */
    fetchLatencySummary(): Promise<any>;
    /**
     *
     * System Status Endpoints
     *
     **/
    getSystemTime(): Promise<APIResponse<{
        server_time: number;
    }>>;
    getSystemStatus(): Promise<APIResponse<{
        service: ServiceStatus[];
    }>>;
    /**
     *
     * Public Market Data Endpoints
     *
     **/
    getSpotCurrenciesV1(): Promise<APIResponse<{
        currencies: SpotCurrencyV1[];
    }>>;
    getSpotTradingPairsV1(): Promise<APIResponse<{
        symbols: string[];
    }>>;
    getSpotTradingPairDetailsV1(): Promise<APIResponse<{
        symbols: SpotTradingPairDetailsV1[];
    }>>;
    getSpotTickersV3(): Promise<APIResponse<ArrayFormSpotTickerV3[]>>;
    getSpotTickerV3(params?: {
        symbol: string;
    }): Promise<APIResponse<SpotTickerV3>>;
    getSpotLatestKlineV3(params: SpotKlineV3Request): Promise<APIResponse<ArrayFormSpotKlineV3[]>>;
    getSpotHistoryKlineV3(params: SpotKlineV3Request): Promise<APIResponse<ArrayFormSpotKlineV3[]>>;
    getSpotOrderBookDepthV3(params: {
        symbol: string;
        limit?: number;
    }): Promise<APIResponse<SpotOrderBookDepthResultV3>>;
    getSpotRecentTrades(params: {
        symbol: string;
        limit?: number;
    }): Promise<APIResponse<ArrayFormSpotRecentTrade[]>>;
    /**
     *
     * Public Market Data Endpoints (History Version)
     *
     **/
    /**
     * @deprecated , use V3 or V4 instead
     */
    getSpotTickersV2(): Promise<APIResponse<{
        tickers: SpotTickerV1[];
    }>>;
    /**
     * @deprecated , use V3 or V4 instead
     */
    getSpotTickerV1(params: {
        symbol: string;
    }): Promise<APIResponse<SpotTickerV1>>;
    /**
     * @deprecated , use V3 or V4 instead
     */
    getSpotKLineStepsV1(): Promise<APIResponse<{
        steps: number[];
    }>>;
    /**
     * @deprecated , use V3 or V4 instead
     */
    getSpotKlinesV1(params: SpotKlinesV1Request): Promise<APIResponse<{
        klines: SpotKlineV1[];
    }>>;
    /**
     * @deprecated , use V3 or V4 instead
     */
    getSpotOrderBookDepthV1(params: SpotOrderBookDepthV1Request): Promise<APIResponse<SpotOrderBookDepthResultV1>>;
    /**
     *
     * Funding Account Endpoints
     *
     **/
    getAccountBalancesV1(params?: {
        currency?: string;
    }): Promise<APIResponse<{
        wallet: AccountCurrencyBalanceV1[];
    }>>;
    getAccountCurrenciesV1(params?: {
        currencies?: string;
    }): Promise<APIResponse<{
        currencies: AccountCurrencyV1[];
    }>>;
    getSpotWalletBalanceV1(): Promise<APIResponse<{
        wallet: SpotWalletBalanceV1[];
    }>>;
    getAccountDepositAddressV1(params: {
        currency: string;
    }): Promise<APIResponse<AccountDepositAddressV1>>;
    getAccountWithdrawQuotaV1(params: {
        currency: string;
    }): Promise<APIResponse<AccountWithdrawQuotaV1>>;
    submitWithdrawalV1(params: SubmitWithdrawalV1Request): Promise<APIResponse<{
        withdrawal_id: string;
    }>>;
    getWithdrawAddressList(): Promise<APIResponse<{
        list: WithdrawAddressListItem[];
    }>>;
    getDepositWithdrawHistoryV2(params?: DepositWithdrawHistoryV2Request): Promise<APIResponse<{
        records: AccountDepositWithdrawHistoryV2[];
    }>>;
    getDepositWithdrawDetailV1(params: {
        id: string;
    }): Promise<APIResponse<{
        record: AccountDepositWithdrawHistoryV2;
    }>>;
    getMarginAccountDetailsV1(params?: {
        symbol?: string;
    }): Promise<APIResponse<{
        symbols: SymbolMarginAccountDetailsV1[];
    }>>;
    submitMarginAssetTransferV1(params: SubmitMarginTransferV1Request): Promise<APIResponse<{
        transfer_id: string;
    }>>;
    getBasicSpotFeeRateV1(): Promise<APIResponse<BasicFeeRateV1>>;
    getActualSpotTradeFeeRateV1(params: {
        symbol: string;
    }): Promise<APIResponse<ActualFeeRateV1>>;
    /**
     *
     * Spot/Margin Trading Endpoints
     *
     **/
    submitSpotOrderV2(params: SubmitSpotOrderV2Request): Promise<APIResponse<{
        order_id: string;
    }>>;
    submitMarginOrderV1(params: SubmitSpotOrderV2Request): Promise<APIResponse<{
        order_id: number;
    }>>;
    /**
     * @deprecated , use V3 or V4 instead
     */
    submitSpotBatchOrdersV2(params: {
        order_params: SubmitSpotOrderV2Request[];
    }): Promise<APIResponse<{
        responses: SubmittedSpotBatchOrderResponseV2[];
    }>>;
    cancelSpotOrderV3(params: CancelOrdersV3Request): Promise<APIResponse<{
        result: boolean;
    }>>;
    submitSpotBatchOrdersV4(params: SubmitSpotBatchOrdersV4Request): Promise<APIResponse<{
        orderIds: string[];
    }>>;
    /**
     * Cancel batch orders (v4)
     */
    cancelSpotBatchOrdersV4(params: CancelSpotBatchOrdersV4Request): Promise<APIResponse<CancelSpotBatchOrdersV4Response>>;
    cancelAllSpotOrders(params?: {
        symbol?: string;
        side?: OrderSide;
    }): Promise<APIResponse<any>>;
    /**
     * @deprecated , use V3 or V4 instead
     */
    cancelSpotOrdersV1(params?: {
        symbol?: string;
        side?: OrderSide;
    }): Promise<APIResponse<{}>>;
    /**
     * Query a spot order by order ID
     */
    getSpotOrderByIdV4(params: SpotOrderByIdV4Request): Promise<APIResponse<SpotOrderV4>>;
    /**
     * Query a spot order by client order ID
     */
    getSpotOrderByClientOrderIdV4(params: SpotOrderByClientOrderIdV4Request): Promise<APIResponse<SpotOrderV4>>;
    getSpotOpenOrdersV4(params?: SpotOpenOrdersV4Request): Promise<APIResponse<SpotOrderV4[]>>;
    getSpotHistoricOrdersV4(params?: SpotOrderTradeHistoryV4Request): Promise<APIResponse<SpotOrderV4[]>>;
    /**
     * Account Trade List(v4)
     */
    getSpotAccountTradesV4(params?: SpotOrderTradeHistoryV4Request): Promise<APIResponse<SpotAccountTradeV4[]>>;
    /**
     * Get all transaction records for a single order
     */
    getSpotAccountOrderTradesV4(params: {
        orderId: string;
        recvWindow?: number;
    }): Promise<APIResponse<SpotAccountTradeV4[]>>;
    /**
     *
     * Margin Loan Endpoints (History versions)
     *
     **/
    marginBorrowV1(params: MarginBorrowRepayV1Request): Promise<APIResponse<{
        borrow_id: string;
    }>>;
    marginRepayV1(params: MarginBorrowRepayV1Request): Promise<APIResponse<{
        repay_id: string;
    }>>;
    getMarginBorrowRecordV1(params: MarginBorrowRecordsV1Request): Promise<APIResponse<{
        records: MarginBorrowRecordV1[];
    }>>;
    getMarginRepayRecordV1(params: MarginRepayRecordsV1Request): Promise<APIResponse<{
        records: MarginRepayRecordV1[];
    }>>;
    /**
     * Get Trading Pair Borrowing Rate and Amount
     */
    getMarginBorrowingRatesV1(params?: {
        symbol?: string;
    }): Promise<APIResponse<{
        symbols: MarginBorrowingRateV1[];
    }>>;
    /**
     *
     * Subaccount Endpoints
     *
     **/
    /**
     * Sub-Account to Main-Account (For Main Account)
     */
    submitMainTransferSubToMainV1(params: SubmitSubTransferV1Request): Promise<APIResponse<{}>>;
    /**
     * Sub-Account to Main-Account (For Sub-Account)
     */
    submitSubTransferSubToMainV1(params: SubmitSubTransferSubToMainV1Request): Promise<APIResponse<{}>>;
    submitMainTransferMainToSubV1(params: SubmitSubTransferV1Request): Promise<APIResponse<{}>>;
    submitMainTransferSubToSubV1(params: SubmitMainTransferSubToSubV1Request): Promise<APIResponse<{}>>;
    submitSubTransferSubToSubV1(params: SubmitSubTransferV1Request): Promise<APIResponse<{}>>;
    getSubTransfersV1(params: SubTransfersV1Request): Promise<APIResponse<{
        total: number;
        historyList: SubTransferRow[];
    }>>;
    getAccountSubTransfersV1(params: AccountSubTransfersV1Request): Promise<APIResponse<{
        total: number;
        historyList: SubTransferRow[];
    }>>;
    getSubSpotWalletBalancesV1(params: SubSpotWalletBalancesV1Request): Promise<APIResponse<{
        wallet: AccountCurrencyBalanceV1[];
    }>>;
    getSubAccountsV1(): Promise<APIResponse<{
        subAccountList: SubAccountV1[];
    }>>;
    /**
     *
     *****************
     * USD-M Futures *
     *****************
     *
     */
    /**
     *
     * Futures Market Data
     *
     */
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesContractDetails(params?: {
        symbol?: string;
    }): Promise<APIResponse<{
        symbols: FuturesContractDetails[];
    }>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesContractDepth(params: {
        symbol: string;
    }): Promise<APIResponse<FuturesContractDepth>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesOpenInterest(params: {
        symbol: string;
    }): Promise<APIResponse<FuturesOpenInterest>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesFundingRate(params: {
        symbol: string;
    }): Promise<APIResponse<FuturesFundingRate>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesKlines(params: FuturesKlinesRequest): Promise<APIResponse<FuturesKline[]>>;
    /**
     *
     * Futures Account Data
     *
     */
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesAccountAssets(): Promise<APIResponse<FuturesAccountAsset[]>>;
    /**
     *
     * Futures Trading
     *
     */
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesAccountOrder(params: FuturesAccountOrderRequest): Promise<APIResponse<FuturesAccountOrder>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesAccountOrderHistory(params: FuturesAccountHistoricOrderRequest): Promise<APIResponse<FuturesAccountHistoricOrder>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesAccountOpenOrders(params?: FuturesAccountOpenOrdersRequest): Promise<APIResponse<FuturesAccountOpenOrder[]>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesAccountPlanOrders(params?: FuturesAccountPlanOrdersRequest): Promise<APIResponse<FuturesAccountPlanOrders[]>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesAccountPositions(params?: {
        symbol?: string;
    }): Promise<APIResponse<FuturesAccountPosition[]>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getPositionRiskDetails(params?: {
        symbol?: string;
    }): Promise<APIResponse<PositionRisk[]>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesAccountTrades(params: FuturesAccountTradesRequest): Promise<APIResponse<FuturesAccountTrade[]>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesTransfers(params: FuturesAccountTransfersRequest): Promise<APIResponse<{
        records: FuturesAccountTransfer[];
    }>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    submitFuturesOrder(params: SubmitFuturesOrderRequest): Promise<APIResponse<FuturesOrderSubmitResult>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */ cancelFuturesOrder(params: FuturesAccountOrderRequest): Promise<APIResponse<any>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    cancelAllFuturesOrders(params: {
        symbol: string;
    }): Promise<APIResponse<any>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    submitFuturesPlanOrder(params: SubmitFuturesPlanOrderRequest): Promise<APIResponse<{
        order_id: number;
    }>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    cancelFuturesPlanOrder(params: FuturesAccountOrderRequest): Promise<APIResponse<any>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    submitFuturesTransfer(params: SubmitFuturesTransferRequest): Promise<APIResponse<FuturesTransferSubmitResult>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    setFuturesLeverage(params: SetFuturesLeverageRequest): Promise<APIResponse<FuturesAccountSetLeverageResult>>;
    /**
     *
     * Futures Sub-Account Endpoints
     *
     */
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    submitFuturesSubToMainTransferFromMain(params: TransferFuturesAssetsRequest): Promise<APIResponse<any>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    submitFuturesMainToSubTransferFromMain(params: TransferFuturesAssetsRequest): Promise<APIResponse<any>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    submitFuturesSubToMainSubFromSub(params: SubmitFuturesSubToMainSubFromSubRequest): Promise<APIResponse<any>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesSubWallet(params?: FuturesSubWalletRequest): Promise<APIResponse<{
        wallet: AccountCurrencyBalanceV1[];
    }>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesSubTransfers(params: FuturesSubTransfersRequest): Promise<APIResponse<FuturesAccountSubTransfer[]>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesSubTransferHistory(params: {
        limit: number;
    }): Promise<APIResponse<FuturesAccountSubTransfer[]>>;
    /**
     *
     * Futures Affiliate Endpoints
     *
     */
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesAffiliateRebates(params: FuturesAffiliateRebatesRequest): Promise<APIResponse<any>>;
    /**
     * @deprecated Use the FuturesClientV2 instead, it uses the new V2 domain & endpoint
     */
    getFuturesAffiliateTrades(params: FuturesAffiliateTradesRequest): Promise<APIResponse<any>>;
    /**
     *
     * API Broker Endpoints
     *
     **/
    getBrokerRebate(params?: SpotBrokerRebateRequest): Promise<APIResponse<SpotBrokerRebateResult>>;
}
