hamal-yunbi
Version:
A sdk with nodejs for Yunbi's API
225 lines (197 loc) • 6.88 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _request = require('./request');
var _request2 = _interopRequireDefault(_request);
var _querystring = require('querystring');
var _querystring2 = _interopRequireDefault(_querystring);
var _crypto = require('crypto');
var _crypto2 = _interopRequireDefault(_crypto);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var DOMAIN = 'https://yunbi.com';
var _class = function () {
/**
* constructor
* @param key
* @param secret
*/
function _class(_ref) {
var key = _ref.key,
secret = _ref.secret,
_ref$format = _ref.format,
format = _ref$format === undefined ? 'json' : _ref$format,
_ref$version = _ref.version,
version = _ref$version === undefined ? 'v2' : _ref$version;
_classCallCheck(this, _class);
this.key = key;
this.secret = secret;
this.format = format;
this.version = version;
}
_createClass(_class, [{
key: 'setupMarket',
value: function setupMarket(_ref2) {
var currency = _ref2.currency,
assets = _ref2.assets;
this.market = assets.toLowerCase() + currency.toLowerCase();
}
}, {
key: '_makeApi',
value: function _makeApi(name) {
return '/api/' + this.version + '/' + name + '.json';
}
}, {
key: '_makeQuery',
value: function _makeQuery(verb, api) {
var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var query = {};
params.tonce = new Date().getTime();
params.access_key = this.key;
/* eslint-disable */
Object.keys(params).sort().map(function (key) {
query[key] = params[key];
});
/* eslint-enable */
var queryString = _querystring2.default.stringify(query);
var payload = verb.toUpperCase() + '|' + api + '|' + queryString;
query.signature = _crypto2.default.createHmac('sha256', this.secret).update(payload).digest('hex');
return query;
}
}, {
key: '_get',
value: function _get(api, qs) {
return _request2.default.get({ uri: DOMAIN + api, qs: qs });
}
}, {
key: '_sget',
value: function _sget(api, params) {
var query = this._makeQuery('get', api, params);
return this._get(api, query);
}
}, {
key: '_post',
value: function _post(api, params) {
var qs = this._makeQuery('get', api, params);
return _request2.default.post({ uri: DOMAIN + api, qs: qs });
}
// PUBLIC api
}, {
key: 'markets',
value: function markets() {
var api = this._makeApi('markets');
return this._get(api);
}
}, {
key: 'tickers',
value: function tickers() {
var api = this._makeApi('tickers');
return this._get(api);
}
}, {
key: 'ticker',
value: function ticker(market) {
market = market || this.market;
var api = this._makeApi('tickers/' + market);
return this._get(api);
}
}, {
key: 'depth',
value: function depth(market, limit) {
market = market || this.market;
var api = this._makeApi('depth');
return this._get(api, { market: market, limit: limit });
}
}, {
key: 'trades',
value: function trades(market, _ref3) {
var limit = _ref3.limit,
timestamp = _ref3.timestamp,
from = _ref3.from,
to = _ref3.to,
orderBy = _ref3.orderBy;
var api = this._makeApi('trades');
market = market || this.market;
return this._get(api, { market: market, limit: limit, timestamp: timestamp, from: from, to: to, order_by: orderBy });
}
}, {
key: 'orderBook',
value: function orderBook(market, _ref4) {
var asksLimit = _ref4.asksLimit,
bidsLimit = _ref4.bidsLimit;
market = market || this.market;
var api = this._makeApi('order_book');
return this._get(api, { market: market, asks_limit: asksLimit, bids_limit: bidsLimit });
}
}, {
key: 'crowdsales',
value: function crowdsales(key) {
var api = this._makeApi('crowdsales/' + key);
return this._get(api);
}
}, {
key: 'kData',
value: function kData(market, tradeId, _ref5) {
var limit = _ref5.limit,
period = _ref5.period,
timestamp = _ref5.timestamp;
var api = this._makeApi('k_with_pending_trades');
return this._get(api, { market: market, trade_id: tradeId, limit: limit, period: period, timestamp: timestamp });
}
// PRIVATE api
}, {
key: 'accounts',
value: function accounts() {
var api = this._makeApi('members/me');
return this._sget(api);
}
}, {
key: 'deposits',
value: function deposits(_ref6) {
var currency = _ref6.currency,
limit = _ref6.limit,
state = _ref6.state;
var api = this._makeApi('deposits');
return this._sget(api, { currency: currency, limit: limit, state: state });
}
}, {
key: 'depositAddress',
value: function depositAddress(currency) {
var api = this._makeApi('deposit_address');
return this._sget(api, { currency: currency });
}
}, {
key: 'myTrades',
value: function myTrades(market, _ref7) {
var limit = _ref7.limit,
timestamp = _ref7.timestamp,
from = _ref7.from,
to = _ref7.to,
orderBy = _ref7.orderBy;
var api = this._makeApi('trades/my');
return this._sget(api, { market: market, limit: limit, timestamp: timestamp, from: from, to: to, order_by: orderBy });
}
}, {
key: 'order',
value: function order(id) {
var api = this._makeApi('order');
return this._sget(api, { id: id });
}
}, {
key: 'deleteOrder',
value: function deleteOrder(id) {
var api = this._makeApi('order/delete');
return this._post(api, { id: id });
}
}, {
key: 'withdraw',
value: function withdraw(id, amount, memo) {
var api = this._makeApi('withdraw');
return this._post(api, { id: id, amount: amount, memo: memo });
}
}]);
return _class;
}();
exports.default = _class;