"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __rest = (this && this.__rest) || function (s, e) {
    var t = {};
    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
        t[p] = s[p];
    if (s != null && typeof Object.getOwnPropertySymbols === "function")
        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
                t[p[i]] = s[p[i]];
        }
    return t;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SpotClient = exports.MainClient = void 0;
const BaseRestClient_1 = __importDefault(require("./util/BaseRestClient"));
const requestUtils_1 = require("./util/requestUtils");
class MainClient extends BaseRestClient_1.default {
    constructor(restClientOptions = {}, requestOptions = {}) {
        super('spot1', restClientOptions, requestOptions);
        return this;
    }
    /**
     * 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() {
        return __awaiter(this, void 0, void 0, function* () {
            const clientTimeReqStart = Date.now();
            const serverTime = yield this.getServerTime();
            const clientTimeReqEnd = Date.now();
            console.log('serverTime', serverTime);
            const serverTimeMs = serverTime;
            const roundTripTime = clientTimeReqEnd - clientTimeReqStart;
            const estimatedOneWayLatency = Math.floor(roundTripTime / 2);
            // Adjust server time by adding estimated one-way latency
            const adjustedServerTime = serverTimeMs + estimatedOneWayLatency;
            // Calculate time difference between adjusted server time and local time
            const timeDifference = adjustedServerTime - clientTimeReqEnd;
            const result = {
                localTime: clientTimeReqEnd,
                serverTime: serverTimeMs,
                roundTripTime,
                estimatedOneWayLatency,
                adjustedServerTime,
                timeDifference,
            };
            console.log('Time synchronization results:');
            console.log(result);
            console.log(`Your approximate latency to exchange server:
    One way: ${estimatedOneWayLatency}ms.
    Round trip: ${roundTripTime}ms.
    `);
            if (timeDifference > 500) {
                console.warn(`WARNING! Time difference between server and client clock is greater than 500ms. It is currently ${timeDifference}ms.
      Consider adjusting your system clock to avoid unwanted clock sync errors!
      Visit https://github.com/tiagosiebler/awesome-crypto-examples/wiki/Timestamp-for-this-request-is-outside-of-the-recvWindow for more information`);
            }
            else {
                console.log(`Time difference between server and client clock is within acceptable range of 500ms. It is currently ${timeDifference}ms.`);
            }
            return result;
        });
    }
    /**
     * Abstraction required by each client to aid with time sync / drift handling
     */
    getServerTime(baseUrlKeyOverride) {
        return __awaiter(this, void 0, void 0, function* () {
            const baseUrlKey = baseUrlKeyOverride || this.getBaseUrlKey();
            const endpoint = (0, requestUtils_1.getServerTimeEndpoint)(baseUrlKey);
            const response = yield this.getForBaseUrl(endpoint, baseUrlKey);
            return response.serverTime;
        });
    }
    /**
     *
     * SPOT TRADING Endpoints - General endpoints
     *
     **/
    testConnectivity() {
        return this.get('api/v3/ping');
    }
    getExchangeInfo(params) {
        const symbols = (params === null || params === void 0 ? void 0 : params.symbols) && JSON.stringify(params.symbols);
        const symbol = params === null || params === void 0 ? void 0 : params.symbol;
        let urlSuffix = '';
        if (symbol) {
            urlSuffix += '?symbol=' + symbol;
        }
        else if (symbols) {
            urlSuffix += '?symbols=' + symbols;
        }
        return this.get('api/v3/exchangeInfo' + urlSuffix);
    }
    /**
     *
     * SPOT TRADING Endpoints - Market endpoints
     *
     **/
    getOrderBook(params) {
        return this.get('api/v3/depth', params);
    }
    getRecentTrades(params) {
        return this.get('api/v3/trades', params);
    }
    getHistoricalTrades(params) {
        return this.get('api/v3/historicalTrades', params);
    }
    getAggregateTrades(params) {
        return this.get('api/v3/aggTrades', params);
    }
    getKlines(params) {
        return this.get('api/v3/klines', params);
    }
    getUIKlines(params) {
        return this.get('api/v3/uiKlines', params);
    }
    getAvgPrice(params) {
        return this.get('api/v3/avgPrice', params);
    }
    get24hrChangeStatististics(params) {
        if (params && typeof params['symbol'] === 'string') {
            return this.get('api/v3/ticker/24hr', params);
        }
        if (params && params['symbols'] && Array.isArray(params['symbols'])) {
            const symbols = params.symbols;
            const symbolsQueryParam = JSON.stringify(symbols);
            return this.get('api/v3/ticker/24hr?symbols=' + symbolsQueryParam);
        }
        return this.get('api/v3/ticker/24hr');
    }
    getTradingDayTicker(params) {
        return this.get('api/v3/ticker/tradingDay', params);
    }
    getSymbolPriceTicker(params) {
        return this.get('api/v3/ticker/price', params);
    }
    getSymbolOrderBookTicker(params) {
        return this.get('api/v3/ticker/bookTicker', params);
    }
    getRollingWindowTicker(params) {
        return this.get('api/v3/ticker', params);
    }
    /**
     *
     * SPOT TRADING Endpoints - Trading endpoints
     *
     **/
    submitNewOrder(params) {
        this.validateOrderId(params, 'newClientOrderId');
        return this.postPrivate('api/v3/order', params);
    }
    testNewOrder(params) {
        this.validateOrderId(params, 'newClientOrderId');
        return this.postPrivate('api/v3/order/test', params);
    }
    getOrder(params) {
        return this.getPrivate('api/v3/order', params);
    }
    cancelOrder(params) {
        return this.deletePrivate('api/v3/order', params);
    }
    cancelAllSymbolOrders(params) {
        return this.deletePrivate('api/v3/openOrders', params);
    }
    replaceOrder(params) {
        return this.postPrivate('api/v3/order/cancelReplace', params);
    }
    getOpenOrders(params) {
        return this.getPrivate('api/v3/openOrders', params);
    }
    getAllOrders(params) {
        return this.getPrivate('api/v3/allOrders', params);
    }
    /**
     * @deprecated
     */
    submitNewOCO(params) {
        this.validateOrderId(params, 'listClientOrderId');
        this.validateOrderId(params, 'limitClientOrderId');
        this.validateOrderId(params, 'stopClientOrderId');
        return this.postPrivate('api/v3/order/oco', params);
    }
    submitNewOrderList(params) {
        this.validateOrderId(params, 'listClientOrderId');
        this.validateOrderId(params, 'aboveClientOrderId');
        this.validateOrderId(params, 'belowClientOrderId');
        return this.postPrivate('api/v3/orderList/oco', params);
    }
    // TO CHECK!!
    submitNewOrderListOTO(params) {
        this.validateOrderId(params, 'listClientOrderId');
        this.validateOrderId(params, 'workingClientOrderId');
        this.validateOrderId(params, 'pendingClientOrderId');
        return this.postPrivate('api/v3/orderList/oto', params);
    }
    // TO CHECK!!
    submitNewOrderListOTOCO(params) {
        this.validateOrderId(params, 'listClientOrderId');
        this.validateOrderId(params, 'workingClientOrderId');
        this.validateOrderId(params, 'pendingAboveClientOrderId');
        this.validateOrderId(params, 'pendingBelowClientOrderId');
        return this.postPrivate('api/v3/orderList/otoco', params);
    }
    cancelOCO(params) {
        this.validateOrderId(params, 'newClientOrderId');
        return this.deletePrivate('api/v3/orderList', params);
    }
    getOCO(params) {
        return this.getPrivate('api/v3/orderList', params);
    }
    getAllOCO(params) {
        return this.getPrivate('api/v3/allOrderList', params);
    }
    /**
     * Query open OCO
     */
    getAllOpenOCO() {
        return this.getPrivate('api/v3/openOrderList');
    }
    /**
     * Places an order using smart order routing (SOR).
     */
    submitNewSOROrder(params) {
        this.validateOrderId(params, 'newClientOrderId');
        return this.postPrivate('api/v3/sor/order', params);
    }
    /**
     * Test new order creation and signature/recvWindow using smart order routing (SOR).
     * Creates and validates a new order but does not send it into the matching engine.
     */
    testNewSOROrder(params) {
        this.validateOrderId(params, 'newClientOrderId');
        return this.postPrivate('api/v3/sor/order/test', params);
    }
    /**
     *
     * SPOT TRADING Endpoints - Account endpoints
     *
     **/
    /**
     * Get current account information
     */
    getAccountInformation() {
        return this.getPrivate('api/v3/account');
    }
    getAccountTradeList(params) {
        return this.getPrivate('api/v3/myTrades', params);
    }
    getOrderRateLimit() {
        return this.getPrivate('api/v3/rateLimit/order');
    }
    getPreventedMatches(params) {
        return this.getPrivate('api/v3/myPreventedMatches', params);
    }
    getAllocations(params) {
        return this.getPrivate('api/v3/myAllocations', params);
    }
    getCommissionRates(params) {
        return this.getPrivate('api/v3/account/commission', params);
    }
    /**
     *
     * MARGIN TRADING Endpoints - Market Data endpoints
     *
     **/
    getCrossMarginCollateralRatio() {
        return this.getPrivate('sapi/v1/margin/crossMarginCollateralRatio');
    }
    getAllCrossMarginPairs() {
        return this.get('sapi/v1/margin/allPairs');
    }
    getIsolatedMarginAllSymbols(params) {
        return this.getPrivate('sapi/v1/margin/isolated/allPairs', params);
    }
    getAllMarginAssets() {
        return this.get('sapi/v1/margin/allAssets');
    }
    getMarginDelistSchedule() {
        return this.getPrivate('sapi/v1/margin/delist-schedule');
    }
    getIsolatedMarginTierData(params) {
        return this.getPrivate('sapi/v1/margin/isolatedMarginTier', params);
    }
    queryMarginPriceIndex(params) {
        return this.get('sapi/v1/margin/priceIndex', params);
    }
    getMarginAvailableInventory(params) {
        return this.getPrivate('sapi/v1/margin/available-inventory', params);
    }
    getLeverageBracket() {
        return this.getPrivate('sapi/v1/margin/leverageBracket');
    }
    /**
     *
     * MARGIN TRADING Endpoints - Borrow and Repay endpoints
     *
     **/
    getNextHourlyInterestRate(params) {
        return this.getPrivate('sapi/v1/margin/next-hourly-interest-rate', params);
    }
    getMarginInterestHistory(params) {
        return this.getPrivate('sapi/v1/margin/interestHistory', params);
    }
    submitMarginAccountBorrowRepay(params) {
        return this.postPrivate('sapi/v1/margin/borrow-repay', params);
    }
    getMarginAccountBorrowRepayRecords(params) {
        return this.getPrivate('sapi/v1/margin/borrow-repay', params);
    }
    getMarginInterestRateHistory(params) {
        return this.getPrivate('sapi/v1/margin/interestRateHistory', params);
    }
    queryMaxBorrow(params) {
        return this.getPrivate('sapi/v1/margin/maxBorrowable', params);
    }
    /**
     *
     * MARGIN TRADING Endpoints - Trade endpoints
     *
     **/
    getMarginForceLiquidationRecord(params) {
        return this.getPrivate('sapi/v1/margin/forceLiquidationRec', params);
    }
    getSmallLiabilityExchangeCoins() {
        return this.getPrivate('sapi/v1/margin/exchange-small-liability');
    }
    getSmallLiabilityExchangeHistory(params) {
        return this.getPrivate('sapi/v1/margin/exchange-small-liability-history', params);
    }
    marginAccountCancelOpenOrders(params) {
        return this.deletePrivate('sapi/v1/margin/openOrders', params);
    }
    marginAccountCancelOCO(params) {
        this.validateOrderId(params, 'newClientOrderId');
        return this.deletePrivate('sapi/v1/margin/orderList', params);
    }
    marginAccountCancelOrder(params) {
        return this.deletePrivate('sapi/v1/margin/order', params);
    }
    marginAccountNewOCO(params) {
        this.validateOrderId(params, 'listClientOrderId');
        this.validateOrderId(params, 'limitClientOrderId');
        this.validateOrderId(params, 'stopClientOrderId');
        return this.postPrivate('sapi/v1/margin/order/oco', params);
    }
    marginAccountNewOrder(params) {
        this.validateOrderId(params, 'newClientOrderId');
        return this.postPrivate('sapi/v1/margin/order', params);
    }
    getMarginOrderCountUsage(params) {
        return this.getPrivate('sapi/v1/margin/rateLimit/order', params);
    }
    queryMarginAccountAllOCO(params) {
        return this.getPrivate('sapi/v1/margin/allOrderList', params);
    }
    queryMarginAccountAllOrders(params) {
        return this.getPrivate('sapi/v1/margin/allOrders', params);
    }
    queryMarginAccountOCO(params) {
        return this.getPrivate('sapi/v1/margin/orderList', params);
    }
    queryMarginAccountOpenOCO(params) {
        return this.getPrivate('sapi/v1/margin/openOrderList', params);
    }
    queryMarginAccountOpenOrders(params) {
        return this.getPrivate('sapi/v1/margin/openOrders', params);
    }
    queryMarginAccountOrder(params) {
        return this.getPrivate('sapi/v1/margin/order', params);
    }
    queryMarginAccountTradeList(params) {
        return this.getPrivate('sapi/v1/margin/myTrades', params);
    }
    submitSmallLiabilityExchange(params) {
        return this.postPrivate('sapi/v1/margin/exchange-small-liability', params);
    }
    submitManualLiquidation(params) {
        return this.postPrivate('sapi/v1/margin/manual-liquidation', params);
    }
    /**
     * Post a new OTO order for margin account
     */
    submitMarginOTOOrder(params) {
        this.validateOrderId(params, 'listClientOrderId');
        this.validateOrderId(params, 'workingClientOrderId');
        this.validateOrderId(params, 'pendingClientOrderId');
        return this.postPrivate('sapi/v1/margin/order/oto', params);
    }
    /**
     * Submit a new OTOCO order for margin account
     */
    submitMarginOTOCOOrder(params) {
        this.validateOrderId(params, 'listClientOrderId');
        this.validateOrderId(params, 'workingClientOrderId');
        this.validateOrderId(params, 'pendingAboveClientOrderId');
        this.validateOrderId(params, 'pendingBelowClientOrderId');
        return this.postPrivate('sapi/v1/margin/order/otoco', params);
    }
    /**
     * Create a special key for low-latency trading (VIP 4+ only)
     */
    createMarginSpecialLowLatencyKey(params) {
        return this.postPrivate('sapi/v1/margin/apiKey', params);
    }
    deleteMarginSpecialLowLatencyKey(params) {
        return this.deletePrivate('sapi/v1/margin/apiKey', params);
    }
    updateMarginIPForSpecialLowLatencyKey(params) {
        return this.putPrivate('sapi/v1/margin/apiKey/ip', params);
    }
    /**
     * Query the list of special keys for low-latency trading
     */
    getMarginSpecialLowLatencyKeys(params) {
        return this.getPrivate('sapi/v1/margin/api-key-list', params);
    }
    /**
     * Query information for a specific special key used in low-latency trading
     */
    getMarginSpecialLowLatencyKey(params) {
        return this.getPrivate('sapi/v1/margin/apiKey', params);
    }
    /**
     *
     * MARGIN TRADING Endpoints - Transfer endpoints
     *
     **/
    getCrossMarginTransferHistory(params) {
        return this.getPrivate('sapi/v1/margin/transfer', params);
    }
    queryMaxTransferOutAmount(params) {
        return this.getPrivate('sapi/v1/margin/maxTransferable', params);
    }
    /**
     *
     * MARGIN TRADING Endpoints - Account endpoints
     *
     **/
    updateCrossMarginMaxLeverage(params) {
        return this.postPrivate('sapi/v1/margin/max-leverage', params);
    }
    disableIsolatedMarginAccount(params) {
        return this.deletePrivate('sapi/v1/margin/isolated/account', params);
    }
    enableIsolatedMarginAccount(params) {
        return this.postPrivate('sapi/v1/margin/isolated/account', params);
    }
    getBNBBurn() {
        return this.getPrivate('sapi/v1/bnbBurn');
    }
    getMarginSummary() {
        return this.getPrivate('sapi/v1/margin/tradeCoeff');
    }
    queryCrossMarginAccountDetails() {
        return this.getPrivate('sapi/v1/margin/account');
    }
    getCrossMarginFeeData(params) {
        return this.getPrivate('sapi/v1/margin/crossMarginData', params);
    }
    getIsolatedMarginAccountLimit() {
        return this.getPrivate('sapi/v1/margin/isolated/accountLimit');
    }
    getIsolatedMarginAccountInfo(params) {
        return this.getPrivate('sapi/v1/margin/isolated/account', { params });
    }
    getIsolatedMarginFeeData(params) {
        return this.getPrivate('sapi/v1/margin/isolatedMarginData', params);
    }
    toggleBNBBurn(params) {
        return this.postPrivate('sapi/v1/bnbBurn', params);
    }
    /**
     * Possibly @deprecated
     * Only existing in old documentation, not in new documentation
     */
    getMarginCapitalFlow(params) {
        return this.getPrivate('sapi/v1/margin/capital-flow', params);
    }
    /**
     * @deprecated on 2024-01-09, use getMarginAccountBorrowRepayRecords() instead
     */
    queryLoanRecord(params) {
        return this.getPrivate('sapi/v1/margin/loan', params);
    }
    /**
     * @deprecated on 2024-01-09, use getMarginAccountBorrowRepayRecords() instead
     */
    queryRepayRecord(params) {
        return this.getPrivate('sapi/v1/margin/repay', params);
    }
    /**
     * @deprecated on 2024-01-09, use submitUniversalTransfer() instead
     */
    isolatedMarginAccountTransfer(params) {
        return this.postPrivate('sapi/v1/margin/isolated/transfer', params);
    }
    /**
     *
     * WALLET Endpoints - Capital endpoints
     *
     **/
    getBalances() {
        return this.getPrivate('sapi/v1/capital/config/getall');
    }
    withdraw(params) {
        return this.postPrivate('sapi/v1/capital/withdraw/apply', params);
    }
    getWithdrawHistory(params) {
        return this.getPrivate('sapi/v1/capital/withdraw/history', params);
    }
    getWithdrawAddresses() {
        return this.getPrivate('sapi/v1/capital/withdraw/address/list');
    }
    getDepositHistory(params) {
        return this.getPrivate('sapi/v1/capital/deposit/hisrec', params);
    }
    getDepositAddress(params) {
        return this.getPrivate('sapi/v1/capital/deposit/address', params);
    }
    getDepositAddresses(params) {
        return this.getPrivate('sapi/v1/capital/deposit/address/list', params);
    }
    submitDepositCredit(params) {
        return this.postPrivate('sapi/v1/capital/deposit/credit-apply', params);
    }
    /**
     * @deprecated - deleted as of 2024-11-21
     */
    getAutoConvertStablecoins() {
        return this.getPrivate('sapi/v1/capital/contract/convertible-coins');
    }
    /**
     * @deprecated - deleted as of 2024-11-21
     */
    setConvertibleCoins(params) {
        return this.postPrivate('sapi/v1/capital/contract/convertible-coins', params);
    }
    /**
     *
     * WALLET Endpoints - Asset endpoints
     *
     **/
    getAssetDetail(params) {
        return this.getPrivate('sapi/v1/asset/assetDetail', params);
    }
    getWalletBalances() {
        return this.getPrivate('sapi/v1/asset/wallet/balance');
    }
    getUserAsset(params) {
        return this.postPrivate('sapi/v3/asset/getUserAsset', params);
    }
    submitUniversalTransfer(params) {
        return this.postPrivate('sapi/v1/asset/transfer', params);
    }
    getUniversalTransferHistory(params) {
        return this.getPrivate('sapi/v1/asset/transfer', params);
    }
    getDust() {
        return this.postPrivate('sapi/v1/asset/dust-btc');
    }
    convertDustToBnb(params) {
        return this.postPrivate('sapi/v1/asset/dust', params);
    }
    getDustLog(params) {
        return this.getPrivate('sapi/v1/asset/dribblet', params);
    }
    getAssetDividendRecord(params) {
        return this.getPrivate('sapi/v1/asset/assetDividend', params);
    }
    getTradeFee(params) {
        return this.getPrivate('sapi/v1/asset/tradeFee', params);
    }
    getFundingAsset(params) {
        return this.postPrivate('sapi/v1/asset/get-funding-asset', params);
    }
    getCloudMiningHistory(params) {
        return this.getPrivate('sapi/v1/asset/ledger-transfer/cloud-mining/queryByPage', params);
    }
    getDelegationHistory(params) {
        return this.getPrivate('sapi/v1/asset/custody/transfer-history', params);
    }
    /**
     *
     * Futures Management Endpoints:
     * https://binance-docs.github.io/apidocs/spot/en/#futures
     *
     * Note: to trade futures use the usdm-client or coinm-client.
     * MainClient only has the futures endpoints listed in the "spot" docs category, primarily used for transfers.
     *
     **/
    /**
     * Execute transfer between spot account and futures account.
     *
     * Type:
     * - 1: transfer from spot account to USDT-Ⓜ futures account.
     * - 2: transfer from USDT-Ⓜ futures account to spot account.
     * - 3: transfer from spot account to COIN-Ⓜ futures account.
     * - 4: transfer from COIN-Ⓜ futures account to spot account.
     */
    /**
     * Possibly @deprecated, found only in old docs only
     * Use sapi/v1/asset/transfer instead
     */
    submitNewFutureAccountTransfer(params) {
        return this.postPrivate('sapi/v1/futures/transfer', params);
    }
    /**
     * Possibly @deprecated, found only in old docs only
     * Use sapi/v1/asset/transfer instead
     */
    getFutureAccountTransferHistory(params) {
        return this.getPrivate('sapi/v1/futures/transfer', params);
    }
    /**
     * @deprecated as of 2023-09-25
     */
    getCrossCollateralBorrowHistory(params) {
        return this.getPrivate('sapi/v1/futures/loan/borrow/history', params);
    }
    /**
     * @deprecated as of 2023-09-25
     */
    getCrossCollateralRepaymentHistory(params) {
        return this.getPrivate('sapi/v1/futures/loan/repay/history', params);
    }
    /**
     * @deprecated as of 2023-09-25
     */
    getCrossCollateralWalletV2() {
        return this.getPrivate('sapi/v2/futures/loan/wallet');
    }
    /**
     * @deprecated as of 2023-09-25
     */
    getAdjustCrossCollateralLTVHistory(params) {
        return this.getPrivate('sapi/v1/futures/loan/adjustCollateral/history', params);
    }
    /**
     * @deprecated as of 2023-09-25
     */
    getCrossCollateralLiquidationHistory(params) {
        return this.getPrivate('sapi/v1/futures/loan/liquidationHistory', params);
    }
    /**
     * @deprecated as of 2023-09-25
     */
    getCrossCollateralInterestHistory(params) {
        return this.getPrivate('sapi/v1/futures/loan/interestHistory', params);
    }
    /**
     *
     * WALLET Endpoints - Account endpoints
     *
     **/
    getAccountInfo() {
        return this.getPrivate('sapi/v1/account/info');
    }
    getDailyAccountSnapshot(params) {
        return this.getPrivate('sapi/v1/accountSnapshot', params);
    }
    disableFastWithdrawSwitch() {
        return this.postPrivate('sapi/v1/account/disableFastWithdrawSwitch');
    }
    enableFastWithdrawSwitch() {
        return this.postPrivate('sapi/v1/account/enableFastWithdrawSwitch');
    }
    getAccountStatus() {
        return this.getPrivate('sapi/v1/account/status');
    }
    getApiTradingStatus() {
        return this.getPrivate('sapi/v1/account/apiTradingStatus');
    }
    getApiKeyPermissions() {
        return this.getPrivate('sapi/v1/account/apiRestrictions');
    }
    /**
     *
     * WALLET Endpoints - Travel Rule endpoints
     *
     **/
    // to be added
    /**
     *
     * WALLET Endpoints - Other endpoints
     *
     **/
    getSystemStatus() {
        return this.get('sapi/v1/system/status');
    }
    getDelistSchedule() {
        return this.getPrivate('sapi/v1/spot/delist-schedule');
    }
    /**
     *
     * SUB ACCOUNT Endpoints - Account management
     *
     **/
    createVirtualSubAccount(params) {
        return this.postPrivate('sapi/v1/sub-account/virtualSubAccount', params);
    }
    getSubAccountList(params) {
        return this.getPrivate('sapi/v1/sub-account/list', params);
    }
    subAccountEnableFutures(email) {
        return this.postPrivate('sapi/v1/sub-account/futures/enable', { email });
    }
    subAccountEnableMargin(email) {
        return this.postPrivate('sapi/v1/sub-account/margin/enable', { email });
    }
    enableOptionsForSubAccount(params) {
        return this.postPrivate('sapi/v1/sub-account/eoptions/enable', params);
    }
    subAccountEnableLeverageToken(params) {
        return this.postPrivate('sapi/v1/sub-account/blvt/enable', params);
    }
    getSubAccountStatusOnMarginOrFutures(params) {
        return this.getPrivate('sapi/v1/sub-account/status', params);
    }
    getSubAccountFuturesPositionRisk(email) {
        return this.getPrivate('sapi/v1/sub-account/futures/positionRisk', {
            email,
        });
    }
    getSubAccountFuturesPositionRiskV2(params) {
        return this.getPrivate('sapi/v2/sub-account/futures/positionRisk', params);
    }
    getSubAccountTransactionStatistics(params) {
        return this.getPrivate('sapi/v1/sub-account/transaction-statistics', params);
    }
    /**
     *
     * SUB ACCOUNT Endpoints - API management
     *
     **/
    getSubAccountIPRestriction(params) {
        return this.getPrivate('sapi/v1/sub-account/subAccountApi/ipRestriction', params);
    }
    subAccountDeleteIPList(params) {
        return this.deletePrivate('sapi/v1/sub-account/subAccountApi/ipRestriction/ipList', params);
    }
    subAccountAddIPRestriction(params) {
        return this.postPrivate('sapi/v2/sub-account/subAccountApi/ipRestriction', params);
    }
    /**
     * @deprecated
     * Use subAccountAddIPRestriction instead
     **/
    subAccountAddIPList(params) {
        return this.postPrivate('sapi/v1/sub-account/subAccountApi/ipRestriction/ipList', params);
    }
    /**
     * @deprecated
     * Use subAccountAddIPRestriction instead, or subAccountDeleteIPList
     **/
    subAccountEnableOrDisableIPRestriction(params) {
        return this.postPrivate('sapi/v1/sub-account/subAccountApi/ipRestriction', params);
    }
    /**
     *
     * SUB ACCOUNT Endpoints - Asset management
     *
     **/
    subAccountFuturesTransfer(params) {
        return this.postPrivate('sapi/v1/sub-account/futures/transfer', params);
    }
    getSubAccountFuturesAccountDetail(email) {
        return this.getPrivate('sapi/v1/sub-account/futures/account', { email });
    }
    getSubAccountDetailOnFuturesAccountV2(params) {
        return this.getPrivate('sapi/v2/sub-account/futures/account', params);
    }
    getSubAccountDetailOnMarginAccount(email) {
        return this.getPrivate('sapi/v1/sub-account/margin/account', { email });
    }
    getSubAccountDepositAddress(params) {
        return this.getPrivate('sapi/v1/capital/deposit/subAddress', params);
    }
    getSubAccountDepositHistory(params) {
        return this.getPrivate('sapi/v1/capital/deposit/subHisrec', params);
    }
    getSubAccountFuturesAccountSummary() {
        return this.getPrivate('sapi/v1/sub-account/futures/accountSummary');
    }
    getSubAccountSummaryOnFuturesAccountV2(params) {
        return this.getPrivate('sapi/v2/sub-account/futures/accountSummary', params);
    }
    getSubAccountsSummaryOfMarginAccount() {
        return this.getPrivate('sapi/v1/sub-account/margin/accountSummary');
    }
    subAccountMarginTransfer(params) {
        return this.postPrivate('sapi/v1/sub-account/margin/transfer', params);
    }
    getSubAccountAssets(params) {
        return this.getPrivate('sapi/v3/sub-account/assets', params);
    }
    getSubAccountAssetsMaster(params) {
        return this.getPrivate('sapi/v4/sub-account/assets', params);
    }
    getSubAccountFuturesAssetTransferHistory(params) {
        return this.getPrivate('sapi/v1/sub-account/futures/internalTransfer', params);
    }
    getSubAccountSpotAssetTransferHistory(params) {
        return this.getPrivate('sapi/v1/sub-account/sub/transfer/history', params);
    }
    getSubAccountSpotAssetsSummary(params) {
        return this.getPrivate('sapi/v1/sub-account/spotSummary', params);
    }
    getSubAccountUniversalTransferHistory(params) {
        return this.getPrivate('sapi/v1/sub-account/universalTransfer', params);
    }
    subAccountFuturesAssetTransfer(params) {
        return this.postPrivate('sapi/v1/sub-account/futures/internalTransfer', params);
    }
    subAccountTransferHistory(params) {
        return this.getPrivate('sapi/v1/sub-account/transfer/subUserHistory', params);
    }
    subAccountTransferToMaster(params) {
        return this.postPrivate('sapi/v1/sub-account/transfer/subToMaster', params);
    }
    subAccountTransferToSameMaster(params) {
        return this.postPrivate('sapi/v1/sub-account/transfer/subToSub', params);
    }
    subAccountUniversalTransfer(params) {
        return this.postPrivate('sapi/v1/sub-account/universalTransfer', params);
    }
    /**
     *
     * SUB ACCOUNT Endpoints - Managed Sub Account
     *
     **/
    depositAssetsIntoManagedSubAccount(params) {
        return this.postPrivate('sapi/v1/managed-subaccount/deposit', params);
    }
    getManagedSubAccountDepositAddress(params) {
        return this.getPrivate('sapi/v1/managed-subaccount/deposit/address', params);
    }
    withdrawAssetsFromManagedSubAccount(params) {
        return this.postPrivate('sapi/v1/managed-subaccount/withdraw', params);
    }
    getManagedSubAccountTransfersParent(params) {
        return this.getPrivate('sapi/v1/managed-subaccount/queryTransLogForTradeParent', params);
    }
    getManagedSubAccountTransferLog(params) {
        return this.getPrivate('sapi/v1/managed-subaccount/query-trans-log', params);
    }
    getManagedSubAccountTransfersInvestor(params) {
        return this.getPrivate('sapi/v1/managed-subaccount/queryTransLogForInvestor', params);
    }
    getManagedSubAccounts(params) {
        return this.getPrivate('sapi/v1/managed-subaccount/info', params);
    }
    getManagedSubAccountSnapshot(params) {
        return this.getPrivate('sapi/v1/managed-subaccount/accountSnapshot', params);
    }
    getManagedSubAccountAssetDetails(email) {
        return this.getPrivate('sapi/v1/managed-subaccount/asset', { email });
    }
    getManagedSubAccountMarginAssets(params) {
        return this.getPrivate('sapi/v1/managed-subaccount/marginAsset', params);
    }
    getManagedSubAccountFuturesAssets(params) {
        return this.getPrivate('sapi/v1/managed-subaccount/fetch-future-asset', params);
    }
    /**
     *
     * AUTO INVEST Endpoints - Market data
     *
     **/
    getAutoInvestAssets() {
        return this.getPrivate('sapi/v1/lending/auto-invest/all/asset');
    }
    getAutoInvestSourceAssets(params) {
        return this.getPrivate('sapi/v1/lending/auto-invest/source-asset/list', params);
    }
    getAutoInvestTargetAssets(params) {
        return this.getPrivate('sapi/v1/lending/auto-invest/target-asset/list', params);
    }
    getAutoInvestTargetAssetsROI(params) {
        return this.getPrivate('sapi/v1/lending/auto-invest/target-asset/roi/list', params);
    }
    getAutoInvestIndex(params) {
        return this.getPrivate('sapi/v1/lending/auto-invest/index/info', params);
    }
    getAutoInvestPlans(params) {
        return this.getPrivate('sapi/v1/lending/auto-invest/plan/list', params);
    }
    /**
     *
     * AUTO INVEST Endpoints - Trade
     *
     **/
    /**
     * https://developers.binance.com/docs/auto_invest/trade/One-Time-Transaction
     *
     * @param params
     * @returns
     */
    submitAutoInvestOneTimeTransaction(params) {
        const { details } = params, allParams = __rest(params, ["details"]);
        const requestParameters = Object.assign({}, allParams);
        for (let i = 0; i < details.length; i++) {
            requestParameters[`details[${i}].targetAsset`] = details[i].targetAsset;
            requestParameters[`details[${i}].percentage`] = details[i].percentage;
        }
        return this.postPrivate('sapi/v1/lending/auto-invest/one-off', requestParameters);
    }
    updateAutoInvestPlanStatus(params) {
        return this.postPrivate('sapi/v1/lending/auto-invest/plan/edit-status', params);
    }
    /**
     *
     * @deprecated , use updateAutoInvestmentPlan instead
     *
     **/
    updateAutoInvestmentPlanOld(params) {
        return this.postPrivate('sapi/v1/lending/auto-invest/plan/edit', params);
    }
    updateAutoInvestmentPlan(params) {
        const { details } = params, allParams = __rest(params, ["details"]);
        const requestParameters = Object.assign({}, allParams);
        for (let i = 0; i < details.length; i++) {
            requestParameters[`details[${i}].targetAsset`] = details[i].targetAsset;
            requestParameters[`details[${i}].percentage`] = details[i].percentage;
        }
        return this.postPrivate('sapi/v1/lending/auto-invest/plan/edit', requestParameters);
    }
    submitAutoInvestRedemption(params) {
        return this.postPrivate('sapi/v1/lending/auto-invest/redeem', params);
    }
    getAutoInvestSubscriptionTransactions(params) {
        return this.getPrivate('sapi/v1/lending/auto-invest/history/list', params);
    }
    getOneTimeTransactionStatus(params) {
        return this.getPrivate('sapi/v1/lending/auto-invest/one-off/status', params);
    }
    /**
     * @deprecated , use submitAutoInvestmentPlan instead
     *
     **/
    submitAutoInvestmentPlanOld(params) {
        return this.postPrivate('sapi/v1/lending/auto-invest/plan/add', params);
    }
    submitAutoInvestmentPlan(params) {
        const { details } = params, allParams = __rest(params, ["details"]);
        const requestParameters = Object.assign({}, allParams);
        for (let i = 0; i < details.length; i++) {
            requestParameters[`details[${i}].targetAsset`] = details[i].targetAsset;
            requestParameters[`details[${i}].percentage`] = details[i].percentage;
        }
        return this.postPrivate('sapi/v1/lending/auto-invest/plan/add', requestParameters);
    }
    getAutoInvestRedemptionHistory(params) {
        return this.getPrivate('sapi/v1/lending/auto-invest/redeem/history', params);
    }
    getAutoInvestPlan(params) {
        return this.getPrivate('sapi/v1/lending/auto-invest/plan/id', params);
    }
    getAutoInvestUserIndex(params) {
        return this.getPrivate('sapi/v1/lending/auto-invest/index/user-summary', params);
    }
    getAutoInvestRebalanceHistory(params) {
        return this.getPrivate('sapi/v1/lending/auto-invest/rebalance/history', params);
    }
    /**
     *
     * CONVERT Endpoints - Market Data
     *
     **/
    getConvertPairs(params) {
        return this.getPrivate('sapi/v1/convert/exchangeInfo', params);
    }
    getConvertAssetInfo() {
        return this.getPrivate('sapi/v1/convert/assetInfo');
    }
    /**
     *
     * CONVERT Endpoints - Trade
     *
     **/
    convertQuoteRequest(params) {
        return this.postPrivate('sapi/v1/convert/getQuote', params);
    }
    acceptQuoteRequest(params) {
        return this.postPrivate('sapi/v1/convert/acceptQuote', params);
    }
    getConvertTradeHistory(params) {
        return this.getPrivate('sapi/v1/convert/tradeFlow', params);
    }
    getOrderStatus(params) {
        return this.getPrivate('sapi/v1/convert/orderStatus', params);
    }
    submitConvertLimitOrder(params) {
        return this.postPrivate('sapi/v1/convert/limit/placeOrder', params);
    }
    cancelConvertLimitOrder(params) {
        return this.postPrivate('sapi/v1/convert/limit/cancelOrder', params);
    }
    getConvertLimitOpenOrders() {
        return this.getPrivate('sapi/v1/convert/limit/queryOpenOrders');
    }
    /**
     *
     * STAKING Endpoints - ETH Staking - Account
     *
     **/
    /**
     * @deprecated use getEthStakingAccountV2 instead
     **/
    getEthStakingAccount() {
        return this.getPrivate('sapi/v1/eth-staking/account');
    }
    getEthStakingAccountV2() {
        return this.getPrivate('sapi/v2/eth-staking/account');
    }
    getEthStakingQuota() {
        return this.getPrivate('sapi/v1/eth-staking/eth/quota');
    }
    /**
     *
     * STAKING Endpoints - ETH Staking- Staking
     *
     **/
    /**
     * @deprecated use subscribeEthStakingV2 instead
     **/
    subscribeEthStakingV1(params) {
        return this.postPrivate('sapi/v1/eth-staking/eth/stake', params);
    }
    subscribeEthStakingV2(params) {
        return this.postPrivate('sapi/v2/eth-staking/eth/stake', params);
    }
    redeemEth(params) {
        return this.postPrivate('sapi/v1/eth-staking/eth/redeem', params);
    }
    wrapBeth(params) {
        return this.postPrivate('sapi/v1/eth-staking/wbeth/wrap', params);
    }
    /**
     *
     * STAKING Endpoints - ETH Staking - History
     *
     **/
    getEthStakingHistory(params) {
        return this.getPrivate('sapi/v1/eth-staking/eth/history/stakingHistory', params);
    }
    getEthRedemptionHistory(params) {
        return this.getPrivate('sapi/v1/eth-staking/eth/history/redemptionHistory', params);
    }
    getBethRewardsHistory(params) {
        return this.getPrivate('sapi/v1/eth-staking/eth/history/rewardsHistory', params);
    }
    getWbethRewardsHistory(params) {
        return this.getPrivate('sapi/v1/eth-staking/eth/history/wbethRewardsHistory', params);
    }
    getEthRateHistory(params) {
        return this.getPrivate('sapi/v1/eth-staking/eth/history/rateHistory', params);
    }
    getBethWrapHistory(params) {
        return this.getPrivate('sapi/v1/eth-staking/wbeth/history/wrapHistory', params);
    }
    getBethUnwrapHistory(params) {
        return this.getPrivate('sapi/v1/eth-staking/wbeth/history/unwrapHistory', params);
    }
    /**
     * @deprecated as of 2024-01-19
     */
    getStakingProducts(params) {
        return this.getPrivate('sapi/v1/staking/productList', params);
    }
    /**
     * @deprecated as of 2024-01-19
     */
    getStakingProductPosition(params) {
        return this.getPrivate('sapi/v1/staking/position', params);
    }
    /**
     * @deprecated as of 2024-01-19
     */
    getStakingHistory(params) {
        return this.getPrivate('sapi/v1/staking/stakingRecord', params);
    }
    /**
     * @deprecated as of 2024-01-19
     */
    getPersonalLeftQuotaOfStakingProduct(params) {
        return this.getPrivate('sapi/v1/staking/personalLeftQuota', params);
    }
    /**
     *
     * STAKING Endpoints - SOL Staking- Account
     *
     **/
    getSolStakingAccount() {
        return this.getPrivate('sapi/v1/sol-staking/account');
    }
    getSolStakingQuota() {
        return this.getPrivate('sapi/v1/sol-staking/sol/quota');
    }
    /**
     *
     * STAKING Endpoints - SOL Staking - Staking
     *
     **/
    subscribeSolStaking(params) {
        return this.postPrivate('sapi/v1/sol-staking/sol/stake', params);
    }
    redeemSol(params) {
        return this.postPrivate('sapi/v1/sol-staking/sol/redeem', params);
    }
    /**
     *
     * STAKING Endpoints - SOL Staking- History
     *
     **/
    getSolStakingHistory(params) {
        return this.getPrivate('sapi/v1/sol-staking/sol/history/stakingHistory', params);
    }
    getSolRedemptionHistory(params) {
        return this.getPrivate('sapi/v1/sol-staking/sol/history/redemptionHistory', params);
    }
    getBnsolRewardsHistory(params) {
        return this.getPrivate('sapi/v1/sol-staking/sol/history/bnsolRewardsHistory', params);
    }
    getBnsolRateHistory(params) {
        return this.getPrivate('sapi/v1/sol-staking/sol/history/rateHistory', params);
    }
    /**
     *
     * COPY TRADING Endpoints - Future copy trading
     *
     **/
    getFuturesLeadTraderStatus() {
        return this.getPrivate('sapi/v1/copyTrading/futures/userStatus');
    }
    getFuturesLeadTradingSymbolWhitelist() {
        return this.getPrivate('sapi/v1/copyTrading/futures/leadSymbol');
    }
    /**
     *
     * MINING Endpoints - rest api
     *
     **/
    getMiningAlgos() {
        return this.get('sapi/v1/mining/pub/algoList');
    }
    getMiningCoins() {
        return this.get('sapi/v1/mining/pub/coinList');
    }
    getHashrateResales(params) {
        return this.getPrivate('sapi/v1/mining/hash-transfer/config/details/list', params);
    }
    getMiners(params) {
        return this.getPrivate('sapi/v1/mining/worker/list', params);
    }
    getMinerDetails(params) {
        return this.getPrivate('sapi/v1/mining/worker/detail', params);
    }
    getExtraBonuses(params) {
        return this.getPrivate('sapi/v1/mining/payment/other', params);
    }
    getMiningEarnings(params) {
        return this.getPrivate('sapi/v1/mining/payment/list', params);
    }
    cancelHashrateResaleConfig(params) {
        return this.postPrivate('sapi/v1/mining/hash-transfer/config/cancel', params);
    }
    getHashrateResale(params) {
        return this.getPrivate('sapi/v1/mining/hash-transfer/profit/details', params);
    }
    getMiningAccountEarnings(params) {
        return this.getPrivate('sapi/v1/mining/payment/uid', params);
    }
    getMiningStatistics(params) {
        return this.getPrivate('sapi/v1/mining/statistics/user/status', params);
    }
    submitHashrateResale(params) {
        return this.postPrivate('sapi/v1/mining/hash-transfer/config', params);
    }
    getMiningAccounts(params) {
        return this.getPrivate('sapi/v1/mining/statistics/user/list', params);
    }
    /**
     *
     * ALGO TRADING Endpoints - Future algo
     *
     **/
    submitVpNewOrder(params) {
        this.validateOrderId(params, 'clientAlgoId');
        return this.postPrivate('sapi/v1/algo/futures/newOrderVp', params);
    }
    submitTwapNewOrder(params) {
        this.validateOrderId(params, 'clientAlgoId');
        return this.postPrivate('sapi/v1/algo/futures/newOrderTwap', params);
    }
    cancelAlgoOrder(params) {
        return this.deletePrivate('sapi/v1/algo/futures/order', params);
    }
    getAlgoSubOrders(params) {
        return this.getPrivate('sapi/v1/algo/futures/subOrders', params);
    }
    getAlgoOpenOrders() {
        return this.getPrivate('sapi/v1/algo/futures/openOrders');
    }
    getAlgoHistoricalOrders(params) {
        return this.getPrivate('sapi/v1/algo/futures/historicalOrders', params);
    }
    /**
     *
     * ALGO TRADING Endpoints - Spot algo
     *
     **/
    submitSpotAlgoTwapOrder(params) {
        this.validateOrderId(params, 'clientAlgoId');
        return this.postPrivate('sapi/v1/algo/spot/newOrderTwap', params);
    }
    cancelSpotAlgoOrder(params) {
        return this.deletePrivate('sapi/v1/algo/spot/order', params);
    }
    getSpotAlgoSubOrders(params) {
        return this.getPrivate('sapi/v1/algo/spot/subOrders', params);
    }
    getSpotAlgoOpenOrders() {
        return this.getPrivate('sapi/v1/algo/spot/openOrders');
    }
    getSpotAlgoHistoricalOrders(params) {
        return this.getPrivate('sapi/v1/algo/spot/historicalOrders', params);
    }
    /**
     *
     * CRYPTO LOAN Endpoints - Flexible rate - Market data
     *
     **/
    getCryptoLoanFlexibleCollateralAssets(params) {
        return this.getPrivate('sapi/v2/loan/flexible/collateral/data', params);
    }
    getCryptoLoanFlexibleAssets(params) {
        return this.getPrivate('sapi/v2/loan/flexible/loanable/data', params);
    }
    /**
     *
     * CRYPTO LOAN Endpoints - Flexible rate - Trade
     *
     **/
    borrowCryptoLoanFlexible(params) {
        return this.postPrivate('sapi/v2/loan/flexible/borrow', params);
    }
    repayCryptoLoanFlexible(params) {
        return this.postPrivate('sapi/v2/loan/flexible/repay', params);
    }
    adjustCryptoLoanFlexibleLTV(params) {
        return this.postPrivate('sapi/v2/loan/flexible/adjust/ltv', params);
    }
    /**
     *
     * CRYPTO LOAN Endpoints - Flexible rate - User info
     *
     **/
    getCryptoLoanFlexibleLTVAdjustmentHistory(params) {
        return this.getPrivate('sapi/v2/loan/flexible/ltv/adjustment/history', params);
    }
    getLoanFlexibleBorrowHistory(params) {
        return this.getPrivate('sapi/v2/loan/flexible/borrow/history', params);
    }
    getCryptoLoanFlexibleOngoingOrders(params) {
        return this.getPrivate('sapi/v2/loan/flexible/ongoing/orders', params);
    }
    getLoanFlexibleRepaymentHistory(params) {
        return this.getPrivate('sapi/v2/loan/flexible/repay/history', params);
    }
    /**
     *
     * CRYPTO LOAN Endpoints - Stable rate - Market data
     *
     **/
    /**
     * @deprecated
     */
    getCryptoLoanLoanableAssets(params) {
        return this.getPrivate('sapi/v1/loan/loanable/data', params);
    }
    getCryptoLoanCollateralRepayRate(params) {
        return this.getPrivate('sapi/v1/loan/repay/collateral/rate', params);
    }
    /**
     * @deprecated
     */
    getCryptoLoanCollateralAssetsData(params) {
        return this.getPrivate('sapi/v1/loan/collateral/data', params);
    }
    getCryptoLoansIncomeHistory(params) {
        return this.getPrivate('sapi/v1/loan/income', params);
    }
    /**
     *
     * CRYPTO LOAN Endpoints - Stable rate - Trade
     *
     **/
    /**
     * @deprecated
     */
    borrowCryptoLoan(params) {
        return this.postPrivate('sapi/v1/loan/borrow', params);
    }
    /**
     * @deprecated
     */
    repayCryptoLoan(params) {
        return this.postPrivate('sapi/v1/loan/repay', params);
    }
    /**
     * @deprecated
     */
    adjustCryptoLoanLTV(params) {
        return this.postPrivate('sapi/v1/loan/adjust/ltv', params);
    }
    /**
     * @deprecated
     */
    customizeCryptoLoanMarginCall(params) {
        return this.postPrivate('sapi/v1/loan/customize/margin_call', params);
    }
    /**
     *
     * CRYPTO LOAN Endpoints - Stable rate - User info
     *
     **/
    /**
     * @deprecated
     */
    getCryptoLoanOngoingOrders(params) {
        return this.getPrivate('sapi/v1/loan/ongoing/orders', params);
    }
    getCryptoLoanBorrowHistory(params) {
        return this.getPrivate('sapi/v1/loan/borrow/history', params);
    }
    getCryptoLoanLTVAdjustmentHistory(params) {
        return this.getPrivate('sapi/v1/loan/ltv/adjustment/history', params);
    }
    getCryptoLoanRepaymentHistory(params) {
        return this.getPrivate('sapi/v1/loan/repay/history', params);
    }
    /**
     *
     * SIMPLE EARN Endpoints - Account
     *
     **/
    getSimpleEarnAccount() {
        return this.getPrivate('sapi/v1/simple-earn/account');
    }
    getFlexibleSavingProducts(params) {
        return this.getPrivate('sapi/v1/simple-earn/flexible/list', params);
    }
    getSimpleEarnLockedProductList(params) {
        return this.getPrivate('sapi/v1/simple-earn/locked/list', params);
    }
    getFlexibleProductPosition(params) {
        return this.getPrivate('sapi/v1/simple-earn/flexible/position', params);
    }
    getLockedProductPosition(params) {
        return this.getPrivate('sapi/v1/simple-earn/locked/position', params);
    }
    getFlexiblePersonalLeftQuota(params) {
        return this.getPrivate('sapi/v1/simple-earn/flexible/personalLeftQuota', params);
    }
    getLockedPersonalLeftQuota(params) {
        return this.getPrivate('sapi/v1/simple-earn/locked/personalLeftQuota', params);
    }
    /**
     *
     * SIMPLE EARN Endpoints - Earn
     *
     **/
    purchaseFlexibleProduct(params) {
        return this.postPrivate('sapi/v1/simple-earn/flexible/subscribe', params);
    }
    subscribeSimpleEarnLockedProduct(params) {
        return this.postPrivate('sapi/v1/simple-earn/locked/subscribe', params);
    }
    redeemFlexibleProduct(params) {
        return this.postPrivate('sapi/v1/simple-earn/flexible/redeem', params);
    }
    redeemLockedProduct(params) {
        return this.postPrivate('sapi/v1/simple-earn/locked/redeem', params);
    }
    setFlexibleAutoSubscribe(params) {
        return this.postPrivate('sapi/v1/simple-earn/flexible/setAutoSubscribe', params);
    }
    setLockedAutoSubscribe(params) {
        return this.postPrivate('sapi/v1/simple-earn/locked/setAutoSubscribe', params);
    }
    getFlexibleSubscriptionPreview(params) {
        return this.getPrivate('sapi/v1/simple-earn/flexible/subscriptionPreview', params);
    }
    getLockedSubscriptionPreview(params) {
        return this.getPrivate('sapi/v1/simple-earn/locked/subscriptionPreview', params);
    }
    setLockedProductRedeemOption(params) {
        return this.postPrivate('sapi/v1/simple-earn/locked/setRedeemOption', params);
    }
    /**
     *
     * SIMPLE EARN Endpoints - History
     *
     **/
    getFlexibleSubscriptionRecord(params) {
        return this.getPrivate('sapi/v1/simple-earn/flexible/history/subscriptionRecord', params);
    }
    getLockedSubscriptionRecord(params) {
        return this.getPrivate('sapi/v1/simple-earn/locked/history/subscriptionRecord', params);
    }
    getFlexibleRedemptionRecord(params) {
        return this.getPrivate('sapi/v1/simple-earn/flexible/history/redemptionRecord', params);
    }
    getLockedRedemptionRecord(params) {
        return this.getPrivate('sapi/v1/simple-earn/locked/history/redemptionRecord', params);
    }
    getFlexibleRewardsHistory(params) {
        return this.getPrivate('sapi/v1/simple-earn/flexible/history/rewardsRecord', params);
    }
    getLockedRewardsHistory(params) {
        return this.getPrivate('sapi/v1/simple-earn/locked/history/rewardsRecord', params);
    }
    getCollateralRecord(params) {
        return this.getPrivate('sapi/v1/simple-earn/flexible/history/collateralRecord', params);
    }
    getRateHistory(params) {
        return this.getPrivate('sapi/v1/simple-earn/flexible/history/rateHistory', params);
    }
    /**
     *
     * VIP LOAN Endpoints - Market Data
     *
     **/
    getVipBorrowInterestRate(params) {
        return this.getPrivate('sapi/v1/loan/vip/request/interestRate', params);
    }
    getVipLoanInterestRateHistory(params) {
        return this.getPrivate('sapi/v1/loan/vip/interestRateHistory', params);
    }
    getVipLoanableAssets(params) {
        return this.getPrivate('sapi/v1/loan/vip/loanable/data', params);
    }
    getVipCollateralAssets(params) {
        return this.getPrivate('sapi/v1/loan/vip/collateral/data', params);
    }
    /**
     *
     * VIP LOAN Endpoints - User Info
     *
     **/
    getVipLoanOpenOrders(params) {
        return this.getPrivate('sapi/v1/loan/vip/ongoing/orders', params);
    }
    getVipLoanRepaymentHistory(params) {
        return this.getPrivate('sapi/v1/loan/vip/repay/history', params);
    }
    checkVipCollateralAccount(params) {
        return this.getPrivate('sapi/v1/loan/vip/collateral/account', params);
    }
    getVipApplicationStatus(params) {
        return this.getPrivate('sapi/v1/loan/vip/request/data', params);
    }
    /**
     *
     * VIP LOAN Endpoints - Trade
     *
     **/
    renewVipLoan(params) {
        return this.postPrivate('sapi/v1/loan/vip/renew', params);
    }
    repayVipLoan(params) {
        return this.postPrivate('sapi/v1/loan/vip/repay', params);
    }
    borrowVipLoan(params) {
        return this.postPrivate('sapi/v1/loan/vip/borrow', params);
    }
    /**
     *
     * DUAL INVESTMENT Endpoints - Market Data
     *
     **/
    getDualInvestmentProducts(params) {
        return this.getPrivate('sapi/v1/dci/product/list', params);
    }
    /**
     *
     * DUAL INVESTMENT Endpoints - Trade
     *
     **/
    subscribeDualInvestmentProduct(params) {
        return this.postPrivate('sapi/v1/dci/product/subscribe', params);
    }
    getDualInvestmentPositions(params) {
        return this.getPrivate('sapi/v1/dci/product/positions', params);
    }
    getDualInvestmentAccounts() {
        return this.getPrivate('sapi/v1/dci/product/accounts');
    }
    getVipLoanAccruedInterest(params) {
        return this.getPrivate('sapi/v1/loan/vip/accruedInterest', params);
    }
    updateAutoCompoundStatus(params) {
        return this.postPrivate('sapi/v1/dci/product/auto_compound/edit-status', params);
    }
    /**
     *
     * GIFT CARD Endpoints - Market Data
     *
     **/
    createGiftCard(params) {
        return this.postPrivate('sapi/v1/giftcard/createCode', params);
    }
    createDualTokenGiftCard(params) {
        return this.postPrivate('sapi/v1/giftcard/buyCode', params);
    }
    redeemGiftCard(params) {
        return this.postPrivate('sapi/v1/giftcard/redeemCode', params);
    }
    verifyGiftCard(params) {
        return this.getPrivate('sapi/v1/giftcard/verify', params);
    }
    getTokenLimit(params) {
        return this.getPrivate('sapi/v1/giftcard/buyCode/token-limit', params);
    }
    getRsaPublicKey() {
        return this.getPrivate('sapi/v1/giftcard/cryptography/rsa-public-key');
    }
    /**
     *
     *  NFT Endpoints - REST api
     *
     **/
    getNftTransactionHistory(params) {
        return this.getPrivate('sapi/v1/nft/history/transactions', params);
    }
    getNftDepositHistory(params) {
        return this.getPrivate('sapi/v1/nft/history/deposit', params);
    }
    getNftWithdrawHistory(params) {
        return this.getPrivate('sapi/v1/nft/history/withdraw', params);
    }
    getNftAsset(params) {
        return this.getPrivate('sapi/v1/nft/user/getAsset', params);
    }
    /**
     *
     * C2C Endpoints
     *
     **/
    getC2CTradeHistory(params) {
        return this.getPrivate('sapi/v1/c2c/orderMatch/listUserOrderHistory', params);
    }
    /**
     *
     *  FIAT Endpoints - REST api
     *
     **/
    getFiatOrderHistory(params) {
        return this.getPrivate('sapi/v1/fiat/orders', params);
    }
    getFiatPaymentsHistory(params) {
        return this.getPrivate('sapi/v1/fiat/payments', params);
    }
    /**
     *
     * Rebate Endpoints
     *
     **/
    getSpotRebateHistoryRecords(params) {
        return this.getPrivate('sapi/v1/rebate/taxQuery', params);
    }
    /**
     *
     * DERIVATIVES - Portfolio Margin Pro - Market Data
     * This is in mainclient because it shares the same base url
     *
     **/
    getPortfolioMarginIndexPrice(params) {
        return this.get('sapi/v1/portfolio/asset-index-price', params);
    }
    getPortfolioMarginAssetLeverage() {
        return this.getPrivate('sapi/v1/portfolio/margin-asset-leverage');
    }
    getPortfolioMarginProCollateralRate() {
        return this.get('sapi/v1/portfolio/collateralRate');
    }
    getPortfolioMarginProTieredCollateralRate() {
        return this.get('sapi/v2/portfolio/collateralRate');
    }
    /**
     *
     * DERIVATIVES - Portfolio Margin Pro - Account
     * This is in mainclient because it shares the same base url
     *
     **/
    getPortfolioMarginProAccountInfo() {
        return this.getPrivate('sapi/v1/portfolio/account');
    }
    bnbTransfer(params) {
        return this.postPrivate('sapi/v1/portfolio/bnb-transfer', params);
    }
    submitPortfolioMarginProFullTransfer() {
        return this.postPrivate('sapi/v1/portfolio/auto-collection');
    }
    submitPortfolioMarginProSpecificTransfer(params) {
        return this.postPrivate('sapi/v1/portfolio/asset-collection', params);
    }
    repayPortfolioMarginProBankruptcyLoan(params) {
        return this.postPrivate('sapi/v1/portfolio/repay', params);
    }
    getPortfolioMarginProBankruptcyLoanAmount() {
        return this.getPrivate('sapi/v1/portfolio/pmLoan');
    }
    repayFuturesNegativeBalance() {
        return this.postPrivate('sapi/v1/portfolio/repay-futures-negative-balance');
    }
    updateAutoRepayFuturesStatus(params) {
        return this.postPrivate('sapi/v1/portfolio/repay-futures-switch', params);
    }
    getAutoRepayFuturesStatus() {
        return this.getPrivate('sapi/v1/portfolio/repay-futures-switch');
    }
    getPortfolioMarginProInterestHistory(params) {
        return this.getPrivate('sapi/v1/portfolio/interest-history', params);
    }
    getPortfolioMarginProSpanAccountInfo() {
        return this.getPrivate('sapi/v2/portfolio/account');
    }
    getPortfolioMarginProAccountBalance(params) {
        return this.getPrivate('sapi/v1/portfolio/balance', params);
    }
    /**
     *
     * DERIVATIVES - Futures Data - Market
     * This is in mainclient because it shares the same base url
     *
     **/
    getFuturesTickLevelOrderbookDataLink(params) {
        return this.getPrivate('sapi/v1/futures/histDataLink', params);
    }
    /**
     *
     * BLVT Endpoints
     * BLVT category is possibly @deprecated, found only in old docs
     **/
    getBlvtInfo(params) {
        return this.get('sapi/v1/blvt/tokenInfo', params);
    }
    subscribeBlvt(params) {
        return this.postPrivate('sapi/v1/blvt/subscribe', params);
    }
    getBlvtSubscriptionRecord(params) {
        return this.getPrivate('sapi/v1/blvt/subscribe/record', params);
    }
    redeemBlvt(params) {
        return this.postPrivate('sapi/v1/blvt/redeem', params);
    }
    getBlvtRedemptionRecord(params) {
        return this.getPrivate('sapi/v1/blvt/redeem/record', params);
    }
    getBlvtUserLimitInfo(params) {
        return this.getPrivate('sapi/v1/blvt/userLimit', params);
    }
    /**
     *
     * Pay endpoints
     * Found only in old docs, possibly @deprecated
     **/
    getPayTransactions(params) {
        return this.getPrivate('sapi/v1/pay/transactions', params);
    }
    /**
     *
     * EXCHANGE LINK - Account Endpoints
     * https://developers.binance.com/docs/binance_link
     */
    createBrokerSubAccount(params) {
        return this.postPrivate('sapi/v1/broker/subAccount', params);
    }
    getBrokerSubAccount(params) {
        return this.getPrivate('sapi/v1/broker/subAccount', params);
    }
    enableMarginBrokerSubAccount(params) {
        return this.postPrivate('sapi/v1/broker/subAccount/futures', params);
    }
    createApiKeyBrokerSubAccount(params) {
        return this.postPrivate('sapi/v1/broker/subAccountApi', params);
    }
    changePermissionApiKeyBrokerSubAccount(params) {
        return this.postPrivate('sapi/v1/broker/subAccountApi/permission', params);
    }
    changeComissionBrokerSubAccount(params) {
        return this.postPrivate('sapi/v1/broker/subAccountApi/permission', params);
    }
    enableUniversalTransferApiKeyBrokerSubAccount(params) {
        return this.postPrivate('sapi/v1/broker/subAccountApi/permission/universalTransfer', params);
    }
    updateIpRestrictionForSubAccountApiKey(params) {
        return this.postPrivate('sapi/v2/broker/subAccountApi/ipRestriction', params);
    }
    deleteIPRestrictionForSubAccountApiKey(params) {
        return this.deletePrivate('sapi/v1/broker/subAccountApi/ipRestriction/ipList', params);
    }
    deleteApiKeyBrokerSubAccount(params) {
        return this.deletePrivate('sapi/v1/broker/subAccountApi', params);
    }
    getSubAccountBrokerIpRestriction(params) {
        return this.getPrivate('sapi/v1/broker/subAccountApi/ipRestriction', params);
    }
    getApiKeyBrokerSubAccount(params) {
        return this.getPrivate('sapi/v1/broker/subAccountApi', params);
    }
    getBrokerInfo() {
        return this.getPrivate('sapi/v1/broker/info');
    }
    updateSubAccountBNBBurn(params) {
        return this.postPrivate('sapi/v1/broker/subAccount/bnbBurn/spot', params);
    }
    updateSubAccountMarginInterestBNBBurn(params) {
        return this.postPrivate('sapi/v1/broker/subAccount/bnbBurn/marginInterest', params);
    }
    getSubAccountBNBBurnStatus(params) {
        return this.getPrivate('sapi/v1/broker/subAccount/bnbBurn/status', params);
    }
    /**
     *
     * EXCHANGE LINK - Account Endpoints
     * https://developers.binance.com/docs/binance_link
     */
    transferBrokerSubAccount(params) {
        return this.postPrivate('sapi/v1/broker/transfer', params);
    }
    getBrokerSubAccountHistory(params) {
        return this.getPrivate('sapi/v1/broker/transfer', params);
    }
    submitBrokerSubFuturesTransfer(params) {
        return this.postPrivate('sapi/v1/broker/transfer/futures', params);
    }
    getSubAccountFuturesTransferHistory(params) {
        return this.getPrivate('sapi/v1/broker/transfer/futures', params);
    }
    getBrokerSubDepositHistory(params) {
        return this.getPrivate('sapi/v1/broker/subAccount/depositHist', params);
    }
    getBrokerSubAccountSpotAssets(params) {
        return this.getPrivate('sapi/v1/broker/subAccount/spotSummary', params);
    }
    getSubAccountMarginAssetInfo(params) {
        return this.getPrivate('sapi/v1/broker/subAccount/marginSummary', params);
    }
    querySubAccountFuturesAssetInfo(params) {
        return this.getPrivate('sapi/v3/broker/subAccount/futuresSummary', params);
    }
    universalTransferBroker(params) {
        return this.postPrivate('sapi/v1/broker/universalTransfer', params);
    }
    getUniversalTransferBroker(params) {
        return this.getPrivate('sapi/v1/broker/universalTransfer', params);
    }
    /**
     *
     * EXCHANGE LINK - Fee Endpoints
     * https://developers.binance.com/docs/binance_link
     */
    updateBrokerSubAccountCommission(params) {
        return this.postPrivate('sapi/v1/broker/subAccountApi/commission', params);
    }
    updateBrokerSubAccountFuturesCommission(params) {
        return this.postPrivate('sapi/v1/broker/subAccountApi/commission/futures', params);
    }
    getBrokerSubAccountFuturesCommission(params) {
        return this.getPrivate('sapi/v1/broker/subAccountApi/commission/futures', params);
    }
    updateBrokerSubAccountCoinFuturesCommission(params) {
        return this.postPrivate('sapi/v1/broker/subAccountApi/commission/coinFutures', params);
    }
    getBrokerSubAccountCoinFuturesCommission(params) {
        return this.getPrivate('sapi/v1/broker/subAccountApi/commission/coinFutures', params);
    }
    getBrokerSpotCommissionRebate(params) {
        return this.getPrivate('sapi/v1/broker/rebate/recentRecord', params);
    }
    getBrokerFuturesCommissionRebate(params) {
        return this.getPrivate('sapi/v1/broker/rebate/futures/recentRecord', params);
    }
    /**
     *
     * @deprecated
     */
    // USD & Coin-M can be found under API getIncome() (find "API rebate" in results)
    getBrokerSpotRebateHistory(days, customerId) {
        if (days === 7) {
            return this.getPrivate('sapi/v1/apiReferral/rebate/recentRecord', {
                customerId,
            });
        }
        if (days === 30) {
            return this.getPrivate('sapi/v1/apiReferral/rebate/historicalRecord', {
                customerId,
            });
        }
    }
    /**
     * Broker Endpoints - only on old docs
     * @deprecated, found only in old docs
     * Use EXCHANGE LINK endpoints instead - https://developers.binance.com/docs/binance_link
     */
    /**
     * @deprecated, found only in old docs
     * Use EXCHANGE LINK endpoints instead
     **/
    getBrokerIfNewSpotUser() {
        return this.getPrivate('sapi/v1/apiReferral/ifNewUser');
    }
    /**
     * @deprecated, found only in old docs
     * Use EXCHANGE LINK endpoints instead
     **/
    getBrokerSubAccountDepositHistory(params) {
        return this.getPrivate('sapi/v1/bv1/apiReferral/ifNewUser', params);
    }
    /**
     * @deprecated, found only in old docs
     * Use EXCHANGE LINK endpoints instead
     **/
    getBrokerUserCustomisedId(market) {
        const prefix = market === 'spot' ? 'sapi' : 'fapi';
        return this.getPrivate(prefix + '/v1/apiReferral/userCustomization');
    }
    /**
     * @deprecated, found only in old docs
     * Use EXCHANGE LINK endpoints instead
     **/
    enableFuturesBrokerSubAccount(params) {
        return this.postPrivate('sapi/v1/broker/subAccount', params);
    }
    /**
     * @deprecated, found only in old docs
     * Use EXCHANGE LINK endpoints instead
     **/
    enableMarginApiKeyBrokerSubAccount(params) {
        return this.postPrivate('sapi/v1/broker/subAccount/margin', params);
    }
    /**
     * Validate syntax meets requirements set by binance. Log warning if not.
     */
    validateOrderId(params, orderIdProperty) {
        const apiCategory = 'spot';
        if (!params[orderIdProperty]) {
            params[orderIdProperty] = (0, requestUtils_1.generateNewOrderId)(apiCategory);
            return;
        }
        const expectedOrderIdPrefix = `x-${(0, requestUtils_1.getOrderIdPrefix)(apiCategory)}`;
        if (!params[orderIdProperty].startsWith(expectedOrderIdPrefix)) {
            (0, requestUtils_1.logInvalidOrderId)(orderIdProperty, expectedOrderIdPrefix, params);
        }
    }
    /**
     *
     * User Data Stream Endpoints
     *
     **/
    // spot
    getSpotUserDataListenKey() {
        return this.post('api/v3/userDataStream');
    }
    keepAliveSpotUserDataListenKey(listenKey) {
        return this.put(`api/v3/userDataStream?listenKey=${listenKey}`);
    }
    closeSpotUserDataListenKey(listenKey) {
        return this.delete(`api/v3/userDataStream?listenKey=${listenKey}`);
    }
    // margin
    getMarginUserDataListenKey() {
        return this.post('sapi/v1/userDataStream');
    }
    keepAliveMarginUserDataListenKey(listenKey) {
        return this.put(`sapi/v1/userDataStream?listenKey=${listenKey}`);
    }
    closeMarginUserDataListenKey(listenKey) {
        return this.delete(`sapi/v1/userDataStream?listenKey=${listenKey}`);
    }
    // isolated margin
    getIsolatedMarginUserDataListenKey(params) {
        return this.post(`sapi/v1/userDataStream/isolated?${(0, requestUtils_1.serialiseParams)(params)}`);
    }
    keepAliveIsolatedMarginUserDataListenKey(params) {
        return this.put(`sapi/v1/userDataStream/isolated?${(0, requestUtils_1.serialiseParams)(params)}`);
    }
    closeIsolatedMarginUserDataListenKey(params) {
        return this.delete(`sapi/v1/userDataStream/isolated?${(0, requestUtils_1.serialiseParams)(params)}`);
    }
    /**
     *
     * DEPRECATED ENDPOINTS
     *
     **/
    /**
     *
     * BSwap Endpoints
     * @deprecated as of 2024-01-19
     **/
    /**
     * @deprecated as of 2024-01-19
     **/
    getBSwapLiquidity(params) {
        return this.getPrivate('sapi/v1/bswap/liquidity', params);
    }
    /**
     * @deprecated as of 2024-01-19
     **/
    addBSwapLiquidity(params) {
        return this.postPrivate('sapi/v1/bswap/liquidityAdd', params);
    }
    /**
     * @deprecated as of 2024-01-19
     **/
    removeBSwapLiquidity(params) {
        return this.postPrivate('sapi/v1/bswap/liquidityRemove', params);
    }
    /**
     * @deprecated as of 2024-01-19
     **/
    getBSwapOperations(params) {
        return this.getPrivate('sapi/v1/bswap/liquidityOps', params);
    }
    /**
     *
     * Savings Endpoints
     * @deprecated as of 2023-06-22, now Simple Earn
     **/
    /**
     * @deprecated as of 2023-06-22, now Simple Earn
     */
    getLeftDailyPurchaseQuotaFlexibleProduct(params) {
        return this.getPrivate('sapi/v1/lending/daily/userLeftQuota', params);
    }
    /**
     * @deprecated as of 2023-06-22, now Simple Earn
     */
    getLeftDailyRedemptionQuotaFlexibleProduct(params) {
        return this.getPrivate('sapi/v1/lending/daily/userRedemptionQuota', params);
    }
    /**
     * @deprecated as of 2023-06-22, now Simple Earn
     */
    purchaseFixedAndActivityProject(params) {
        return this.postPrivate('sapi/v1/lending/customizedFixed/purchase', params);
    }
    /**
     * @deprecated as of 2023-06-22, now Simple Earn
     */
    getFixedAndActivityProjects(params) {
        return this.getPrivate('sapi/v1/lending/project/list', params);
    }
    /**
     * @deprecated as of 2023-06-22, now Simple Earn
     */
    getFixedAndActivityProductPosition(params) {
        return this.getPrivate('sapi/v1/lending/project/position/list', params);
    }
    /**
     * @deprecated as of 2023-06-22, now Simple Earn
     */
    getLendingAccount() {
        return this.getPrivate('sapi/v1/lending/union/account');
    }
    /**
     * @deprecated as of 2023-06-22, now Simple Earn
     */
    getPurchaseRecord(params) {
        return this.getPrivate('sapi/v1/lending/union/purchaseRecord', params);
    }
    /**
     * @deprecated as of 2023-06-22, now Simple Earn
     */
    getRedemptionRecord(params) {
        return this.getPrivate('sapi/v1/lending/union/redemptionRecord', params);
    }
    /**
     * @deprecated as of 2023-06-22, now Simple Earn
     */
    getInterestHistory(params) {
        return this.getPrivate('sapi/v1/lending/union/interestHistory', params);
    }
    /**
     * @deprecated as of 2023-06-22, now Simple Earn
     */
    changeFixedAndActivityPositionToDailyPosition(params) {
        return this.postPrivate('sapi/v1/lending/positionChanged', params);
    }
    /**
     *
     * Wallet Endpoints
     * @deprecated
     **/
    /**
     * @deprecated
     */
    enableConvertSubAccount(params) {
        return this.postPrivate('sapi/v1/broker/subAccount/convert', params);
    }
    /**
     * @deprecated - deleted as of 2024-11-21
     *
     */
    convertBUSD(params) {
        return this.postPrivate('sapi/v1/asset/convert-transfer', params);
    }
    /**
     * @deprecated
     */
    getConvertBUSDHistory(params) {
        return this.getPrivate('sapi/v1/asset/convert-transfer/queryByPage', params);
    }
}
exports.MainClient = MainClient;
/**
 * @deprecated use MainClient instead of SpotClient (it is the same)
 */
exports.SpotClient = MainClient;
//# sourceMappingURL=main-client.js.map