@binance/connector-typescript
Version:
This is a lightweight library that works as a connector to the Binance public API.
1,211 lines (1,189 loc) • 280 kB
JavaScript
// src/modules/restful/convert/types.ts
var types_exports = {};
// src/modules/restful/dualInvestment/types.ts
var types_exports2 = {};
// src/modules/restful/margin/types.ts
var types_exports3 = {};
// src/modules/restful/market/types.ts
var types_exports4 = {};
// src/modules/restful/portfolioMargin/types.ts
var types_exports5 = {};
// src/modules/restful/simpleEarn/types.ts
var types_exports6 = {};
// src/modules/restful/stream/types.ts
var types_exports7 = {};
// src/modules/restful/subAccount/types.ts
var types_exports8 = {};
// src/modules/restful/trade/types.ts
var types_exports9 = {};
// src/modules/restful/wallet/types.ts
var types_exports10 = {};
// src/modules/websocket/websocketAPI/account/types.ts
var types_exports11 = {};
// src/modules/websocket/websocketAPI/market/types.ts
var types_exports12 = {};
// src/modules/websocket/websocketAPI/trade/types.ts
var types_exports13 = {};
// src/modules/websocket/websocketAPI/userData/methods.ts
var methods_exports = {};
// src/modules/websocket/websocketStream/methods.ts
var methods_exports2 = {};
// src/helpers/utils.ts
import axios from "axios";
// package.json
var package_default = {
name: "@binance/connector-typescript",
version: "0.3.16",
description: "This is a lightweight library that works as a connector to the Binance public API.",
main: "./dist/index.js",
module: "./dist/index.mjs",
types: "./dist/index.d.ts",
scripts: {
test: "npx jest --runInBand",
build: "tsup",
dev: "ts-node ./examples/restful/market.ts",
lint: "eslint --config .eslintrc.json --ext ts . --fix"
},
keywords: [
"Binance",
"API"
],
author: "Binance",
license: "MIT",
files: [
"dist"
],
devDependencies: {
"@types/jest": "^29.5.4",
"@types/node": "22.9.0",
"@types/ws": "^8.5.5",
"@typescript-eslint/eslint-plugin": "7.17.0",
"@typescript-eslint/parser": "7.17.0",
dotenv: "^16.3.1",
eslint: "8.57.0",
jest: "^29.6.4",
"ts-jest": "^29.1.1",
"ts-node": "^10.9.1",
tsup: "^7.2.0",
typescript: "^5.7.2"
},
dependencies: {
axios: "^1.7.4",
ws: "^8.17.1"
}
};
// src/helpers/constants.ts
var appName = package_default.name;
var appVersion = package_default.version;
// src/helpers/utils.ts
import * as crypto from "crypto";
async function httpRequest(config) {
try {
const { baseURL, apiKey, method, url, timeout, proxy, httpsAgent } = config;
const options = {
baseURL,
timeout,
proxy,
httpsAgent,
method,
url,
headers: {
"Content-Type": "application/json",
"X-MBX-APIKEY": apiKey,
"User-Agent": `${appName}/${appVersion}`
}
};
const { data } = await axios.request(options);
return data;
} catch (error) {
if (axios.isAxiosError(error) && error.response) {
throw error.response.data.msg;
} else {
throw new Error("Http request error");
}
}
}
function removeEmptyValue(obj) {
if (!(obj instanceof Object))
return {};
return Object.fromEntries(
Object.entries(obj).filter(([, value]) => value !== null && value !== void 0 && value !== "")
);
}
function buildQueryString(params) {
if (!params)
return "";
return Object.entries(params).map(stringifyKeyValuePair).join("&");
}
function stringifyKeyValuePair([key, value]) {
const valueString = Array.isArray(value) ? `["${value.join('","')}"]` : value;
return `${key}=${encodeURIComponent(valueString)}`;
}
function validateRequiredParameters(paramObject) {
if (!paramObject || isEmptyValue(paramObject)) {
throw new Error("Missing Parameters");
}
const emptyParams = [];
Object.keys(paramObject).forEach((param) => {
if (isEmptyValue(paramObject[param])) {
emptyParams.push(param);
}
});
if (emptyParams.length) {
throw new Error("Missing Parameters");
}
}
function isEmptyValue(input) {
return !input && input !== false && input !== 0 || typeof input === "string" && /^\s+$/.test(input) || input instanceof Object && !Object.keys(input).length || Array.isArray(input) && !input.length;
}
function randomString() {
return crypto.randomBytes(16).toString("hex");
}
function sortObject(obj) {
return Object.keys(obj).sort().reduce((res, key) => {
res[key] = obj[key];
return res;
}, {});
}
// src/setters/mixinBase.ts
import * as crypto2 from "crypto";
// src/modules/restful/convert/convert.ts
function mixinConvert(base) {
return class extends base {
/**
* List All Convert Pairs (USER_DATA) {@link https://developers.binance.com/docs/convert/market-data/List-all-convert-pairs}
*
* @param {object} [options]
* @param {string} [options.fromAsset] - User spends coin
* @param {string} [options.toAsset] - User receives coin
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async listAllConvertPairs(options) {
const url = this.prepareSignedPath(
"/sapi/v1/convert/exchangeInfo",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Query order quantity precision per asset (USER_DATA) {@link https://developers.binance.com/docs/convert/market-data/Query-order-quantity-precision-per-asset}
*
* @param {object} [options]
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getOrderQuantityPrecisionPerAsset(options) {
const url = this.prepareSignedPath(
"/sapi/v1/convert/assetInfo",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Send quote request (USER_DATA) {@link https://developers.binance.com/docs/convert/trade/Send-quote-request}
*
* @param {string} fromAsset
* @param {string} toAsset
* @param {object} [options]
* @param {number} [options.fromAmount] - When specified, it is the amount you will be debited after the conversion
* @param {number} [options.toAmount] - When specified, it is the amount you will be debited after the conversion
* @param {WalletType} [options.walletType] - SPOT or FUNDING. Default is SPOT
* @param {ValidTime} [options.validTime] - 10s, 30s, 1m, 2m, default 10s
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async sendQuoteRequest(fromAsset, toAsset, options) {
validateRequiredParameters({ fromAsset, toAsset });
const url = this.prepareSignedPath(
"/sapi/v1/convert/getQuote",
Object.assign(
options ? options : {},
{
fromAsset,
toAsset
}
)
);
return await this.makeRequest("POST", url);
}
/**
* Accept Quote (TRADE) {@link https://developers.binance.com/docs/convert/trade/Accept-Quote}
*
* @param {string} quoteId
* @param {object} [options]
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async acceptQuote(quoteId, options) {
validateRequiredParameters({ quoteId });
const url = this.prepareSignedPath(
"/sapi/v1/convert/acceptQuote",
Object.assign(
options ? options : {},
{
quoteId
}
)
);
return await this.makeRequest("POST", url);
}
/**
* Order status (USER_DATA) {@link https://developers.binance.com/docs/convert/trade/Order-Status}
*
* @param {object} [options]
* @param {string} [options.orderId] - Either orderId or quoteId is required
* @param {string} [options.quoteId] - Either orderId or quoteId is required
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async orderStatus(options) {
const url = this.prepareSignedPath(
"/sapi/v1/convert/orderStatus",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Place limit order (USER_DATA) {@link https://developers.binance.com/docs/convert/trade/Place-Order}
*
* @param {string} baseAsset - base asset (use the response fromIsBase from GET /sapi/v1/convert/exchangeInfo api to check which one is baseAsset)
* @param {string} quoteAsset - quote asset
* @param {number} limitPrice - Symbol limit price (from baseAsset to quoteAsset)
* @param {ConvertSide} side - BUY or SELL
* @param {ConvertExpiredType} expiredType - 1_D, 3_D, 7_D, 30_D (D means day)
* @param {object} [options]
* @param {number} [options.baseAmount] - Base asset amount. (One of baseAmount or quoteAmount is required)
* @param {number} [options.quoteAmount] - Quote asset amount. (One of baseAmount or quoteAmount is required)
* @param {WalletType} [options.walletType] - SPOT or FUNDING or SPOT_FUNDING. It is to use which type of assets. Default is SPOT.
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async placeLimitOrder(baseAsset, quoteAsset, limitPrice, side, expiredType, options) {
validateRequiredParameters({ baseAsset, quoteAsset, limitPrice, side, expiredType });
const url = this.prepareSignedPath(
"/sapi/v1/convert/limit/placeOrder",
Object.assign(
options ? options : {},
{
baseAsset,
quoteAsset,
limitPrice,
side,
expiredType
}
)
);
return await this.makeRequest("POST", url);
}
/**
* Cancel limit order (USER_DATA) {@link https://developers.binance.com/docs/convert/trade/Cancel-Order}
*
* @param {number} orderId - The orderId from placeOrder api
* @param {object} [options]
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async cancelLimitOrder(orderId, options) {
validateRequiredParameters({ orderId });
const url = this.prepareSignedPath(
"/sapi/v1/convert/limit/cancelOrder",
Object.assign(
options ? options : {},
{
orderId
}
)
);
return await this.makeRequest("POST", url);
}
/**
* Query limit open orders (USER_DATA) {@link https://developers.binance.com/docs/convert/trade/Query-Order}
*
* @param {object} [options]
* @param {number} [options.recvWindow] - default 100, max 1000
*/
async queryLimitOpenOrders(options) {
const url = this.prepareSignedPath(
"/sapi/v1/convert/limit/queryOpenOrders",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Get Convert Trade History (USER_DATA) {@link https://developers.binance.com/docs/convert/trade/Get-Convert-Trade-History}
*
* @param {number} startTime - UTC timestamp in ms
* @param {number} endTime - UTC timestamp in ms
* @param {object} [options]
* @param {number} [options.limit] - default 100, max 1000
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getConvertTradeHistory(startTime, endTime, options) {
validateRequiredParameters({ startTime, endTime });
const url = this.prepareSignedPath(
"/sapi/v1/convert/tradeFlow",
Object.assign(
options ? options : {},
{
startTime,
endTime
}
)
);
return await this.makeRequest("GET", url);
}
};
}
// src/modules/restful/dualInvestment/dualInvestment.ts
function mixinDualInvestment(base) {
return class extends base {
/**
* Get Dual Investment product list {@link https://developers.binance.com/docs/dual_investment/market-data}
*
* @param {OptionType} optionType - Input CALL or PUT
* @param {string} exercisedCoin - Target exercised asset, e.g.: If you subscribe to a high sell product (call option), you should input: optionType: CALL, exercisedCoin: USDT, investCoin: BNB; If you subscribe to a low buy product (put option), you should input: optionType: PUT, exercisedCoin: BNB, investCoin: USDT;
* @param {string} investCoin - Asset used for subscribing, e.g.: If you subscribe to a high sell product (call option), you should input: optionType: CALL, exercisedCoin: USDT, investCoin: BNB; If you subscribe to a low buy product (put option), you should input: optionType: PUT, exercisedCoin: BNB, investCoin: USDT;
* @param {object} [options]
* @param {number} [options.pageSize] - MIN 1, MAX 100; Default 100
* @param {number} [options.pageIndex] - Page number, default is first page, start form 1
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getDualInvestmentProductList(optionType, exercisedCoin, investCoin, options) {
validateRequiredParameters({ optionType, exercisedCoin, investCoin });
const url = this.prepareSignedPath(
"/sapi/v1/dci/product/list",
Object.assign(
options ? options : {},
{
optionType,
exercisedCoin: exercisedCoin.toUpperCase(),
investCoin: investCoin.toUpperCase()
}
)
);
return await this.makeRequest("GET", url);
}
/**
* Subscribe Dual Investment products (USER_DATA) {@link https://developers.binance.com/docs/dual_investment/trade}
*
* @param {string} id - get id from /sapi/v1/dci/product/list
* @param {string} orderId - get orderId from /sapi/v1/dci/product/list
* @param {number} depositAmount
* @param {AutoCompoundPlan} autoCompoundPlan - NONE: switch off the plan, STANDARD: standard plan, ADVANCED: advanced plan;
* @param {object} [options]
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async subscribeDualInvestmentProducts(id, orderId, depositAmount, autoCompoundPlan, options) {
validateRequiredParameters({ id, orderId, depositAmount, autoCompoundPlan });
const url = this.prepareSignedPath(
"/sapi/v1/dci/product/subscribe",
Object.assign(
options ? options : {},
{
id,
orderId,
depositAmount,
autoCompoundPlan
}
)
);
return await this.makeRequest("POST", url);
}
/**
* Get Dual Investment positions (USER_DATA) {@link https://developers.binance.com/docs/dual_investment/trade/Get-Dual-Investment-positions}
*
* @param {object} [options]
* @param {Status} [options.status] - - PENDING: Products are purchasing, will give results later;, - PURCHASE_SUCCESS: purchase successfully;, - SETTLED: Products are finish settling;, - PURCHASE_FAIL: fail to purchase;, - REFUNDING: refund ongoing;, - REFUND_SUCCESS: refund to spot account successfully;, - SETTLING: Products are settling. , If don't fill this field, will response all the position status.
* @param {number} [options.pageSize] - MIN 1, MAX 100; Default 100
* @param {number} [options.pageIndex] - Page number, default is first page, start form 1
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getDualInvestmentPositions(options) {
const url = this.prepareSignedPath(
"/sapi/v1/dci/product/positions",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Check Dual Investment accounts (USER_DATA) {@link https://developers.binance.com/docs/dual_investment/trade/Check-Dual-Investment-accounts}
*
* @param {object} [options]
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async checkDualInvestmentAccounts(options) {
const url = this.prepareSignedPath(
"/sapi/v1/dci/product/accounts",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Change Auto-Compound status (USER_DATA) {@link https://developers.binance.com/docs/dual_investment/trade/Change-Auto-Compound-status}
*
* @param {string} positionId - Get positionId from /sapi/v1/dci/product/positions
* @param {AutoCompoundPlan} autoCompoundPlan - NONE: switch off the plan, STANDARD: standard plan, ADVANCED: advanced plan;
* @param {object} [options]
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async changeAutoCompoundStatus(positionId, autoCompoundPlan, options) {
validateRequiredParameters({ positionId, autoCompoundPlan });
const url = this.prepareSignedPath(
"/sapi/v1/dci/product/auto_compound/edit-status",
Object.assign(
options ? options : {},
{
positionId,
autoCompoundPlan
}
)
);
return await this.makeRequest("POST", url);
}
};
}
// src/modules/restful/margin/margin.ts
function mixinMargin(base) {
return class extends base {
/**
* Get All Margin Assets (MARKET_DATA) {@link https://developers.binance.com/docs/margin_trading/market-data/Get-All-Margin-Assets}
*
* @param {object} [options]
* @param {string} [options.asset]
*/
async getAllMarginAssets(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/allAssets",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Get All Cross Margin Pairs (MARKET_DATA) {@link https://developers.binance.com/docs/margin_trading/market-data/Get-All-Cross-Margin-Pairs}
*
* @param {object} [options]
* @param {string} [options.symbol]
*/
async getAllCrossMarginPairs(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/allPairs",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Query Margin PriceIndex (MARKET_DATA) {@link https://developers.binance.com/docs/margin_trading/market-data/Query-Margin-PriceIndex}
*
* @param {string} symbol - Trading symbol, e.g. BNBUSDT
*/
async getMarginPriceIndex(symbol) {
validateRequiredParameters({ symbol });
const url = this.preparePath(
"/sapi/v1/margin/priceIndex",
{
symbol: symbol.toUpperCase()
}
);
return await this.makeRequest("GET", url);
}
/**
* Margin Account New Order (TRADE) {@link https://developers.binance.com/docs/margin_trading/trade/Margin-Account-New-Order}
*
* @param {string} symbol - Trading symbol, e.g. BNBUSDT
* @param {Side} side
* @param {OrderType} type - Order type
* @param {object} [options]
* @param {IsIsolatedMargin} [options.isIsolated] - * `TRUE` - For isolated margin, * `FALSE` - Default, not for isolated margin
* @param {number} [options.quantity]
* @param {number} [options.quoteOrderQty] - Quote quantity
* @param {number} [options.price] - Order price
* @param {number} [options.stopPrice] - Used with STOP_LOSS, STOP_LOSS_LIMIT, TAKE_PROFIT, and TAKE_PROFIT_LIMIT orders.
* @param {string} [options.newClientOrderId] - Used to uniquely identify this cancel. Automatically generated by default
* @param {number} [options.icebergQty] - Used with LIMIT, STOP_LOSS_LIMIT, and TAKE_PROFIT_LIMIT to create an iceberg order.
* @param {NewOrderRespType} [options.newOrderRespType] - Set the response JSON.
* @param {SideEffectType} [options.sideEffectType] - Default `NO_SIDE_EFFECT`
* @param {TimeInForce} [options.timeInForce] - Order time in force
* @param {SelfTradePreventionMode} [options.selfTradePreventionMode] - The allowed enums is dependent on what is configured on the symbol. The possible supported values are EXPIRE_TAKER, EXPIRE_MAKER, EXPIRE_BOTH, NONE
* @param {Boolean} [options.autoRepayAtCancel] - Only when MARGIN_BUY or AUTO_BORROW_REPAY order takes effect, true means that the debt generated by the order needs to be repay after the order is cancelled. The default is true
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async marginAccountNewOrder(symbol, side, type, options) {
validateRequiredParameters({ symbol, side, type });
const url = this.prepareSignedPath(
"/sapi/v1/margin/order",
Object.assign(
options ? options : {},
{
symbol: symbol.toUpperCase(),
side,
type
}
)
);
return await this.makeRequest("POST", url);
}
/**
* Margin Account Cancel Order (TRADE) {@link https://developers.binance.com/docs/margin_trading/trade/Margin-Account-Cancel-Order}
*
* @param {string} symbol - Trading symbol, e.g. BNBUSDT
* @param {object} [options]
* @param {IsIsolatedMargin} [options.isIsolated] - * `TRUE` - For isolated margin, * `FALSE` - Default, not for isolated margin
* @param {number} [options.orderId] - Order id
* @param {string} [options.origClientOrderId] - Order id from client
* @param {string} [options.newClientOrderId] - Used to uniquely identify this cancel. Automatically generated by default
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async marginAccountCancelOrder(symbol, options) {
validateRequiredParameters({ symbol });
const url = this.prepareSignedPath(
"/sapi/v1/margin/order",
Object.assign(
options ? options : {},
{
symbol: symbol.toUpperCase()
}
)
);
return await this.makeRequest("DELETE", url);
}
/**
* Margin Account Cancel all Open Orders on a Symbol (TRADE) {@link https://developers.binance.com/docs/margin_trading/trade/Margin-Account-Cancel-All-Open-Orders}
*
* @param {string} symbol - Trading symbol, e.g. BNBUSDT
* @param {object} [options]
* @param {IsIsolatedMargin} [options.isIsolated] - * `TRUE` - For isolated margin, * `FALSE` - Default, not for isolated margin
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async marginAccountCancelAllOpenOrdersOnASymbol(symbol, options) {
validateRequiredParameters({ symbol });
const url = this.prepareSignedPath(
"/sapi/v1/margin/openOrders",
Object.assign(
options ? options : {},
{
symbol: symbol.toUpperCase()
}
)
);
return await this.makeRequest("DELETE", url);
}
/**
* Adjust cross margin max leverage (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/account/Adjust-Cross-Margin-Max-Leverage}
*
* @param {number} maxLeverage - Can only adjust 3 , 5 or 10,Example: maxLeverage=10 for Cross Margin Pro ,maxLeverage = 5 or 3 for Cross Margin Classic
*/
async adjustCrossMarginMaxLeverage(maxLeverage) {
validateRequiredParameters({ maxLeverage });
const url = this.prepareSignedPath(
"/sapi/v1/margin/max-leverage",
{
maxLeverage
}
);
return await this.makeRequest("POST", url);
}
/**
* Get Cross Margin Transfer History (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/transfer/Get-Cross-Margin-Transfer-History}
*
* @param {object} [options]
* @param {string} [options.asset]
* @param {GetCrossMargingTransferHistoryType} [options.type] - Transfer Type
* @param {number} [options.startTime] - UTC timestamp in ms
* @param {number} [options.endTime] - UTC timestamp in ms
* @param {number} [options.current] - Current querying page. Start from 1. Default:1
* @param {number} [options.size] - Default:10 Max:100
* @param {string} [options.isolatedSymbol] - Symbol in Isolated Margin
* @param {string} [options.archived] - Default: false. Set to true for archived data from 6 months ago
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getCrossMarginTransferHistory(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/transfer",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Get Interest History (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/borrow-and-repay/Get-Interest-History}
*
* @param {object} [options]
* @param {string} [options.asset]
* @param {string} [options.isolatedSymbol] - Isolated symbol
* @param {number} [options.startTime] - UTC timestamp in ms
* @param {number} [options.endTime] - UTC timestamp in ms
* @param {number} [options.current] - Current querying page. Start from 1. Default:1
* @param {number} [options.size] - Default:10 Max:100
* @param {string} [options.archived] - Default: false. Set to true for archived data from 6 months ago
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getInterestHistory(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/interestHistory",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Get Force Liquidation Record (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/trade/Get-Force-Liquidation-Record}
*
* @param {object} [options]
* @param {number} [options.startTime] - UTC timestamp in ms
* @param {number} [options.endTime] - UTC timestamp in ms
* @param {string} [options.isolatedSymbol] - Isolated symbol
* @param {number} [options.current] - Current querying page. Start from 1. Default:1
* @param {number} [options.size] - Default:10 Max:100
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getForceLiquidationRecord(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/forceLiquidationRec",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Query Cross Margin Account Details (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/account/Query-Cross-Margin-Account-Details}
*
* @param {object} [options]
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getCrossMarginAccountDetails(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/account",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Query Margin Account's Order (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/trade/Query-Margin-Account-Order}
*
* @param {string} symbol - Trading symbol, e.g. BNBUSDT
* @param {object} [options]
* @param {IsIsolatedMargin} [options.isIsolated] - * `TRUE` - For isolated margin, * `FALSE` - Default, not for isolated margin
* @param {number} [options.orderId] - Order id
* @param {string} [options.origClientOrderId] - Order id from client
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getMarginAccountOrder(symbol, options) {
validateRequiredParameters({ symbol });
const url = this.prepareSignedPath(
"/sapi/v1/margin/order",
Object.assign(
options ? options : {},
{
symbol: symbol.toUpperCase()
}
)
);
return await this.makeRequest("GET", url);
}
/**
* Query Margin Account's Open Orders (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/trade/Query-Margin-Account-Open-Orders}
*
* @param {object} [options]
* @param {string} [options.symbol] - Trading symbol, e.g. BNBUSDT
* @param {IsIsolatedMargin} [options.isIsolated] - * `TRUE` - For isolated margin, * `FALSE` - Default, not for isolated margin
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getMarginAccountOpenOrders(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/openOrders",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Query Margin Account's All Orders (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/trade/Query-Margin-Account-All-Orders}
*
* @param {string} symbol - Trading symbol, e.g. BNBUSDT
* @param {object} [options]
* @param {IsIsolatedMargin} [options.isIsolated] - * `TRUE` - For isolated margin, * `FALSE` - Default, not for isolated margin
* @param {number} [options.orderId] - Order id
* @param {number} [options.startTime] - UTC timestamp in ms
* @param {number} [options.endTime] - UTC timestamp in ms
* @param {number} [options.limit] - Default 500; max 1000.
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getMarginAccountAllOrders(symbol, options) {
validateRequiredParameters({ symbol });
const url = this.prepareSignedPath(
"/sapi/v1/margin/allOrders",
Object.assign(
options ? options : {},
{
symbol: symbol.toUpperCase()
}
)
);
return await this.makeRequest("GET", url);
}
/**
* Margin Account New OCO (TRADE) {@link https://developers.binance.com/docs/margin_trading/trade/Margin-Account-New-OCO}
*
* @param {string} symbol - Trading symbol, e.g. BNBUSDT
* @param {Side} side
* @param {number} quantity
* @param {number} price - Order price
* @param {number} stopPrice
* @param {object} [options]
* @param {IsIsolatedMargin} [options.isIsolated] - * `TRUE` - For isolated margin, * `FALSE` - Default, not for isolated margin
* @param {string} [options.listClientOrderId] - A unique Id for the entire orderList
* @param {string} [options.limitClientOrderId] - A unique Id for the limit order
* @param {number} [options.limitIcebergQty]
* @param {string} [options.stopClientOrderId] - A unique Id for the stop loss/stop loss limit leg
* @param {number} [options.stopLimitPrice] - If provided, stopLimitTimeInForce is required.
* @param {number} [options.stopIcebergQty]
* @param {StopLimitTimeInForce} [options.stopLimitTimeInForce]
* @param {NewOrderRespType} [options.newOrderRespType] - Set the response JSON.
* @param {SideEffectType} [options.sideEffectType] - Default `NO_SIDE_EFFECT`
* @param {SelfTradePreventionMode} [options.selfTradePreventionMode] - The allowed enums is dependent on what is configured on the symbol. The possible supported values are EXPIRE_TAKER, EXPIRE_MAKER, EXPIRE_BOTH, NONE
* @param {Boolean} [options.autoRepayAtCancel] - Only when MARGIN_BUY or AUTO_BORROW_REPAY order takes effect, true means that the debt generated by the order needs to be repay after the order is cancelled. The default is true
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async marginAccountNewOco(symbol, side, quantity, price, stopPrice, options) {
validateRequiredParameters({ symbol, side, quantity, price, stopPrice });
const url = this.prepareSignedPath(
"/sapi/v1/margin/order/oco",
Object.assign(
options ? options : {},
{
symbol: symbol.toUpperCase(),
side,
quantity,
price,
stopPrice
}
)
);
return await this.makeRequest("POST", url);
}
/**
* Margin Account Cancel OCO (TRADE) {@link https://developers.binance.com/docs/margin_trading/trade/Margin-Account-Cancel-OCO}
*
* @param {string} symbol - Trading symbol, e.g. BNBUSDT
* @param {object} [options]
* @param {IsIsolatedMargin} [options.isIsolated] - * `TRUE` - For isolated margin, * `FALSE` - Default, not for isolated margin
* @param {number} [options.orderListId] - Order list id
* @param {string} [options.listClientOrderId] - A unique Id for the entire orderList
* @param {string} [options.newClientOrderId] - Used to uniquely identify this cancel. Automatically generated by default
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async marginAccountCancelOco(symbol, options) {
validateRequiredParameters({ symbol });
const url = this.prepareSignedPath(
"/sapi/v1/margin/orderList",
Object.assign(
options ? options : {},
{
symbol: symbol.toUpperCase()
}
)
);
return await this.makeRequest("DELETE", url);
}
/**
* Query Margin Account's OCO (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/trade/Query-Margin-Account-OCO}
*
* @param {object} [options]
* @param {IsIsolatedMargin} [options.isIsolated] - * `TRUE` - For isolated margin, * `FALSE` - Default, not for isolated margin
* @param {string} [options.symbol] - Mandatory for isolated margin, not supported for cross margin
* @param {number} [options.orderListId] - Order list id
* @param {string} [options.origClientOrderId] - Order id from client
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getMarginAccountOco(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/orderList",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Query Margin Account's all OCO (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/trade/Query-Margin-Account-All-OCO}
*
* @param {object} [options]
* @param {IsIsolatedMargin} [options.isIsolated] - * `TRUE` - For isolated margin, * `FALSE` - Default, not for isolated margin
* @param {string} [options.symbol] - Mandatory for isolated margin, not supported for cross margin
* @param {string} [options.fromId] - If supplied, neither `startTime` or `endTime` can be provided
* @param {number} [options.startTime] - UTC timestamp in ms
* @param {number} [options.endTime] - UTC timestamp in ms
* @param {number} [options.limit] - Default Value: 500; Max Value: 1000
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getMarginAccountAllOco(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/allOrderList",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Query Margin Account's Open OCO (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/trade/Query-Margin-Account-Open-OCO}
*
* @param {object} [options]
* @param {IsIsolatedMargin} [options.isIsolated] - * `TRUE` - For isolated margin, * `FALSE` - Default, not for isolated margin
* @param {string} [options.symbol] - Mandatory for isolated margin, not supported for cross margin
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getMarginAccountOpenOco(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/openOrderList",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Query Margin Account's Trade List (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/trade/Query-Margin-Account-Trade-List}
*
* @param {string} symbol - Trading symbol, e.g. BNBUSDT
* @param {object} [options]
* @param {IsIsolatedMargin} [options.isIsolated] - * `TRUE` - For isolated margin, * `FALSE` - Default, not for isolated margin
* @param {number} [options.orderId]
* @param {number} [options.startTime] - UTC timestamp in ms
* @param {number} [options.endTime] - UTC timestamp in ms
* @param {number} [options.fromId] - Trade id to fetch from. Default gets most recent trades.
* @param {number} [options.limit] - Default 500; max 1000.
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getMarginAccountTradeList(symbol, options) {
validateRequiredParameters({ symbol });
const url = this.prepareSignedPath(
"/sapi/v1/margin/myTrades",
Object.assign(
options ? options : {},
{
symbol: symbol.toUpperCase()
}
)
);
return await this.makeRequest("GET", url);
}
/**
* Query Max Borrow (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/borrow-and-repay/Query-Max-Borrow}
*
* @param {string} asset
* @param {object} [options]
* @param {string} [options.isolatedSymbol] - Isolated symbol
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getMaxBorrow(asset, options) {
validateRequiredParameters({ asset });
const url = this.prepareSignedPath(
"/sapi/v1/margin/maxBorrowable",
Object.assign(
options ? options : {},
{
asset: asset.toUpperCase()
}
)
);
return await this.makeRequest("GET", url);
}
/**
* Query Max Transfer-Out Amount (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/transfer/Query-Max-Transfer-Out-Amount}
*
* @param {string} asset
* @param {object} [options]
* @param {string} [options.isolatedSymbol] - Isolated symbol
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getMaxTransferoutAmount(asset, options) {
validateRequiredParameters({ asset });
const url = this.prepareSignedPath(
"/sapi/v1/margin/maxTransferable",
Object.assign(
options ? options : {},
{
asset: asset.toUpperCase()
}
)
);
return await this.makeRequest("GET", url);
}
/**
* Get Summary of Margin account (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/account/Get-Summary-Of-Margin-Account}
*
* @param {object} [options]
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getSummaryOfMarginAccount(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/tradeCoeff",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Query Isolated Margin Account Info (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/account/Query-Isolated-Margin-Account-Info}
*
* @param {object} [options]
* @param {string} [options.symbols] - Max 5 symbols can be sent; separated by ','
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getIsolatedMarginAccountInfo(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/isolated/account",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Disable Isolated Margin Account (TRADE) {@link https://developers.binance.com/docs/margin_trading/account/Disable-Isolated-Margin-Account}
*
* @param {string} symbol - Trading symbol, e.g. BNBUSDT
* @param {object} [options]
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async disableIsolatedMarginAccount(symbol, options) {
validateRequiredParameters({ symbol });
const url = this.prepareSignedPath(
"/sapi/v1/margin/isolated/account",
Object.assign(
options ? options : {},
{
symbol: symbol.toUpperCase()
}
)
);
return await this.makeRequest("DELETE", url);
}
/**
* Enable Isolated Margin Account (TRADE) {@link https://developers.binance.com/docs/margin_trading/account/Enable-Isolated-Margin-Account}
*
* @param {string} symbol - Trading symbol, e.g. BNBUSDT
* @param {object} [options]
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async enableIsolatedMarginAccount(symbol, options) {
validateRequiredParameters({ symbol });
const url = this.prepareSignedPath(
"/sapi/v1/margin/isolated/account",
Object.assign(
options ? options : {},
{
symbol: symbol.toUpperCase()
}
)
);
return await this.makeRequest("POST", url);
}
/**
* Query Enabled Isolated Margin Account Limit (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/account/Query-Enabled-Isolated-Margin-Account-Limit}
*
* @param {object} [options]
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getEnabledIsolatedMarginAccountLimit(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/isolated/accountLimit",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Get All Isolated Margin Symbol (MARKET_DATA) {@link https://developers.binance.com/docs/margin_trading/market-data/Get-All-Isolated-Margin-Symbol}
*
* @param {object} [options]
* @param {string} [options.symbol]
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getAllIsolatedMarginSymbol(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/isolated/allPairs",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Toggle BNB Burn On Spot Trade And Margin Interest (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/account/Toggle-BNB-Burn-On-Spot-Trade-And-Margin-Interest}
*
* @param {object} [options]
* @param {SpotBNBBurn} [options.spotBNBBurn] - Determines whether to use BNB to pay for trading fees on SPOT
* @param {InterestBNBBurn} [options.interestBNBBurn] - Determines whether to use BNB to pay for margin loan interest
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async toggleBnbBurnOnSpotTradeAndMarginInterest(options) {
const url = this.prepareSignedPath(
"/sapi/v1/bnbBurn",
options ? options : {}
);
return await this.makeRequest("POST", url);
}
/**
* Get BNB Burn Status (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/account/Get-BNB-Burn-Status}
*
* @param {object} [options]
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getBnbBurnStatus(options) {
const url = this.prepareSignedPath(
"/sapi/v1/bnbBurn",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Query Margin Interest Rate History (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/borrow-and-repay/Query-Margin-Interest-Rate-History}
*
* @param {string} asset
* @param {object} [options]
* @param {number} [options.vipLevel] - Defaults to user vip level
* @param {number} [options.startTime] - UTC timestamp in ms
* @param {number} [options.endTime] - UTC timestamp in ms
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async marginInterestRateHistory(asset, options) {
validateRequiredParameters({ asset });
const url = this.prepareSignedPath(
"/sapi/v1/margin/interestRateHistory",
Object.assign(
options ? options : {},
{
asset: asset.toUpperCase()
}
)
);
return await this.makeRequest("GET", url);
}
/**
* Query Cross Margin Fee Data (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/account/Query-Cross-Margin-Fee-Data}
*
* @param {object} [options]
* @param {number} [options.vipLevel] - Defaults to user vip level
* @param {string} [options.coin] - Coin name
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getCrossMarginFeeData(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/crossMarginData",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Query Isolated Margin Fee Data (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/account/Query-Isolated-Margin-Fee-Data}
*
* @param {object} [options]
* @param {number} [options.vipLevel] - Defaults to user vip level
* @param {string} [options.symbol] - Trading symbol, e.g. BNBUSDT
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getIsolatedMarginFeeData(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/isolatedMarginData",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Query Isolated Margin Tier Data (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/market-data/Query-Isolated-Margin-Tier-Data}
*
* @param {string} symbol - Trading symbol, e.g. BNBUSDT
* @param {object} [options]
* @param {string} [options.tier] - All margin tier data will be returned if tier is omitted
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getIsolatedMarginTierData(symbol, options) {
validateRequiredParameters({ symbol });
const url = this.prepareSignedPath(
"/sapi/v1/margin/isolatedMarginTier",
Object.assign(
options ? options : {},
{
symbol: symbol.toUpperCase()
}
)
);
return await this.makeRequest("GET", url);
}
/**
* Query Current Margin Order Count Usage (TRADE) {@link https://developers.binance.com/docs/margin_trading/trade/Query-Current-Margin-Order-Count-Usage}
*
* @param {object} [options]
* @param {string} [options.isIsolated] - * `TRUE` - For isolated margin, * `FALSE` - Default, not for isolated margin
* @param {string} [options.symbol] - isolated symbol, mandatory for isolated margin
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getCurrentMarginOrderCountUsage(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/rateLimit/order",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Cross margin collateral ratio (MARKET_DATA) {@link https://developers.binance.com/docs/margin_trading/market-data/Cross-margin-collateral-ratio}
*
*/
async crossMarginCollateralRatio() {
return await this.makeRequest("GET", "/sapi/v1/margin/crossMarginCollateralRatio");
}
/**
* Get Small Liability Exchange Coin List (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/trade/Get-Small-Liability-Exchange-Coin-List}
*
* @param {object} [options]
* @param {number} [options.startTime] - UTC timestamp in ms
* @param {number} [options.endTime] - UTC timestamp in ms
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getSmallLiabilityExchangeCoinList(options) {
const url = this.prepareSignedPath(
"/sapi/v1/margin/exchange-small-liability",
options ? options : {}
);
return await this.makeRequest("GET", url);
}
/**
* Small Liability Exchange (MARGIN) {@link https://developers.binance.com/docs/margin_trading/trade/Small-Liability-Exchange}
*
* @param {string[]} assetNames - The assets list of small liability exchange, Example: assetNames = BTC,ETH
* @param {object} [options]
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async smallLiabilityExchange(assetNames, options) {
validateRequiredParameters({ assetNames });
const url = this.prepareSignedPath(
"/sapi/v1/margin/exchange-small-liability ",
Object.assign(
options ? options : {},
{
assetNames
}
)
);
return await this.makeRequest("POST", url);
}
/**
* Get Small Liability Exchange History (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/trade/Get-Small-Liability-Exchange-History}
*
* @param {object} [options]
* @param {number} [options.startTime] - UTC timestamp in ms
* @param {number} [options.endTime] - UTC timestamp in ms
* @param {number} [options.recvWindow] - The value cannot be greater than 60000
*/
async getSmallLiabilityExchangeHistory(current, size, options) {
validateRequiredParameters({ current, size });
const url = this.prepareSignedPath(
"/sapi/v1/margin/exchange-small-liability-history",
Object.assign(
options ? options : {},
{
current,
size
}
)
);
return await this.makeRequest("GET", url);
}
/**
* Get a future hourly interest rate (USER_DATA) {@link https://developers.binance.com/docs/margin_trading/borrow-and-repay/Get-a-future-hourly-interest-rate}
*
* @param {string} assets - List of assets, separated by commas, up to 20
* @param {IsIsolatedMargin} isIsolated - * `TRUE` - For isolated margin, * `FALSE` - Default, not for isolated margin
*/
async getFutureHoulyInterestRate(assets, isIsolated) {
validateRequiredParameters({ assets, isIsolated });
const url = this.prepareSignedPath(
"/sapi/v1/margin/next-hourly-interest-rate",
{
assets,
isIsolated
}
);
return await this.makeRequest("GET", url);
}
/**