UNPKG

binance-api-lightweight

Version:

A super-speedy lightweight wrapper for Binance API

140 lines 5.04 kB
// 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 }); } }