binance-api-lightweight
Version:
A super-speedy lightweight wrapper for Binance API
140 lines • 5.04 kB
JavaScript
// ES6 module using ES2015 Javascript
export default class BinanceAPI {
constructor(key, secret) {
const BASE_URL = "https://www.binance.com/api/v1";
const BASE_URL_V3 = "https://api.binance.com/api/v3";
const PUBLIC_URL = "https://www.binance.com/exchange/public/product";
this.key = key;
this.secret = secret;
}
history(market, limit = 50) {
let path = this.BASE_URL + "/historicalTrades";
let params = { "symbol": market, "limit": limit };
return this._noSign(path, params);
}
trades(market, limit = 50) {
let path = BASE_URL + "/trades";
let params = { "symbol": market, "limit": limit };
return this._noSign(path, params);
}
kline(market) {
let path = BASE_URL + "/klines";
let params = { "symbol": market };
return this._noSign(path, params);
}
ticker(market) {
let path = BASE_URL + "/ticker/24hr";
let params = { "symbol": market };
return this._noSign(path, params);
}
order_books(market, limit = 50) {
let path = BASE_URL + "/depth";
let params = { symbol: market, "limit": limit };
return this._noSign(path, params);
}
account() {
let path = BASE_URL_V3 + "/account";
return this._get(path, {});
}
products() {
return JSON.stringify({ PUBLIC_URL, timeout: 30, verify: true });
}
exchangeInfo() {
let path = BASE_URL + "/exchangeInfo";
return JSON.stringify({ path, timeout: 30, verify: true });
}
openOrders(market, limit = 100) {
let path = BASE_URL_V3 + "/openOrders";
let params = { "symbol": market };
return this._get(path, params);
}
myTrades(market, limit = 50) {
let path = BASE_URL_V3 + "/myTrades";
let params = { "symbol": market, "limit": limit };
return this._get(path, params);
}
buyLimit(market, quantity, rate) {
let path = BASE_URL_V3 + "/order";
let params = this._order(market, quantity, "BUY", rate);
return this._post(path, params);
}
sellLimit(market, quantity, rate) {
let path = BASE_URL_V3 + "/order";
let params = this._order(market, quantity, "SELL", rate);
return this._post(path, params);
}
buyMarket(market, quantity) {
let path = BASE_URL_V3 + "/order";
let params = this._order(market, quantity, "BUY");
return this._post(path, params);
}
sellMarket(market, quantity) {
let path = BASE_URL_V3 + "/order";
let params = this._order(market, quantity, "SELL");
return this._post(path, params);
}
queryOrder(market, orderId) {
let path = BASE_URL_V3 + "/order";
let params = { "symbol": market, "orderId": orderId };
return this._get(path, params);
}
cancel(market, order_id) {
let path = BASE_URL_V3 + "/order";
let params = { "symbol": market, "orderId": order_id };
return this._delete(path, params);
}
_noSign(path, params = {}) {
let query = encodeURI(params);
let url = path + "?" + query;
return JSON.stringify({ url, timeout: 30, verify: true });
}
// TODO: implement SHA256 encryption
_sign(params = {}) {
let data = params;
data.timestamp = Date.now().toString();
let h = encodeURI(data);
let b = bytearray();
b.extend(this.secret.encode());
data.signature = hmac.new(b, msg = h.encode('utf-8'), digestmod = hashlib.sha256).hexdigest();
return data;
}
_get(path, params = {}) {
params["recvWindow"] = 120000;
let query = encodeURI(this._sign(params));
let url = path + "?" + query;
let header = { "X-MBX-APIKEY": this.key };
return JSON.stringify({ url, headers: header, timeout: 30, verify: true });
}
_post(path, params = {}) {
params["recvWindow"] = 120000;
let query = encodeURI(this._sign(params));
let url = path + "?" + query;
let header = { "X-MBX-APIKEY": this.key };
return JSON.stringify({ url, headers: header, timeout: 30, verify: true });
}
_order(market, quantity, side, rate = null) {
let params = {};
if (rate != null) {
params.type = "LIMIT";
params.price = this._format(rate);
params.timeInForce = "GTC";
}
else {
params.type = "MARKET";
}
params.symbol = market;
params.side = side;
params.quantity = this._format(quantity);
return params;
}
_format(price) {
return price.toFixed(8);
}
_delete(path, params = {}) {
params.update({ "recvWindow": 120000 });
let query = encodeURI(this._sign(params));
let url = BASE_URL + "?" + query;
let header = { "X-MBX-APIKEY": this.key };
return JSON.stringify({ url, headers: header, timeout: 30, verify: true });
}
}