UNPKG

hamal-bter

Version:
180 lines (152 loc) 5.83 kB
'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 = 'http://data.bter.com'; var _class = function () { function _class(_ref) { var _this = this; var key = _ref.key, secret = _ref.secret, _ref$version = _ref.version, version = _ref$version === undefined ? '1' : _ref$version; _classCallCheck(this, _class); this._key = key; this._version = version; this._secret = secret; // public api ['pairs', 'marketInfo', 'marketList', 'tickers', 'orderBooks'].forEach(function (item) { _this[item] = function () { var api = _this._makeApi(item.toLowerCase()); return _this._get(api); }; }); ['ticker', 'orderBook', 'tradeHistory'].forEach(function (item) { _this[item] = function (pair) { pair = pair || _this._pair; var api = _this._makeApi(item.toLowerCase() + '/' + pair); return _this._get(api); }; }); // private api ['balances', 'openOrders'].forEach(function (item) { _this[item] = function () { var api = _this._privateApi(item.toLowerCase()); return _this._post(api); }; }); } _createClass(_class, [{ key: 'setupDefaultPair', value: function setupDefaultPair(currency, asset) { this._pair = asset.toLowerCase() + '_' + currency.toLowerCase(); } // PRIVATE api }, { key: 'depositAddress', value: function depositAddress(currency) { var api = this._privateApi('depositeAddress'); return this._post(api, { currency: currency }); } }, { key: 'depositsWithdrawals', value: function depositsWithdrawals(start, end) { var api = this._privateApi('depositsWithdrawals'); return this._post(api, { start: start, end: end }); } }, { key: 'buy', value: function buy(rate, amount, pair) { pair = pair || this._pair; var api = this._privateApi('buy'); return this._post(api, { currencyPair: pair, rate: rate, amount: amount }); } }, { key: 'sell', value: function sell(rate, amount, pair) { pair = pair || this._pair; var api = this._privateApi('sell'); return this._post(api, { currencyPair: pair, rate: rate, amount: amount }); } }, { key: 'getOrder', value: function getOrder(order, pair) { pair = pair || this._pair; var api = this._privateApi('getOrder'); return this._post(api, { orderNumber: order, currencyPair: pair }); } }, { key: 'cancelOrder', value: function cancelOrder(order, pair) { pair = pair || this._pair; var api = this._privateApi('cancelOrder'); return this._post(api, { orderNumber: order, currencyPair: pair }); } }, { key: 'cancelAllOrders', value: function cancelAllOrders(type, pair) { pair = pair || this._pair; var api = this._privateApi('cancelAllOrders'); return this._post(api, { type: type, currencyPair: pair }); } }, { key: 'tradeHistory', value: function tradeHistory(pair) { var order = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; pair = pair || this._pair; var api = this._privateApi('tradeHistory'); return this._post(api, { orderNumber: order, currencyPair: pair }); } }, { key: 'withdraw', value: function withdraw(currency, amount, address) { var api = this._privateApi('withdraw'); return this._post(api, { currency: currency, amount: amount, address: address }); } // Utils }, { key: '_makeApi', value: function _makeApi(name) { return '/api2/' + this._version + '/' + name; } }, { key: '_privateApi', value: function _privateApi(name) { return this._makeApi('private/' + name); } }, { key: '_signature', value: function _signature() { var form = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; form.nonce = new Date().getTime(); var temp = _querystring2.default.stringify(form); return _crypto2.default.createHmac('sha512', this._secret).update(temp).digest('hex'); } }, { key: '_get', value: function _get(api, qs) { var uri = DOMAIN + api; return _request2.default.get({ uri: uri, qs: qs }); } }, { key: '_post', value: function _post(api) { var form = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var uri = DOMAIN + api; var SIGN = this._signature(form); var headers = { KEY: this._key, SIGN: SIGN }; return _request2.default.post({ uri: uri, form: form, headers: headers }); } }]); return _class; }(); exports.default = _class;