hamal-bter
Version:
A sdk with nodejs for Bter's API
180 lines (152 loc) • 5.83 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 = '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;