UNPKG

zaif

Version:

Zaif API wrapper for Node.js

226 lines (197 loc) 6.91 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 _crypto = require('crypto'); var _crypto2 = _interopRequireDefault(_crypto); var _requestPromise = require('request-promise'); var _requestPromise2 = _interopRequireDefault(_requestPromise); var _qs = require('qs'); var _qs2 = _interopRequireDefault(_qs); var _rx = require('rx'); var _websocket = require('websocket'); var _config = require('./config'); var _config2 = _interopRequireDefault(_config); 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 Zaif = function () { function Zaif(key, secret) { _classCallCheck(this, Zaif); this.key = key; this.secret = secret; } _createClass(Zaif, [{ key: '_createNonce', value: function _createNonce() { return Math.floor(new Date().getTime() / 1000); } }, { key: '_createSignature', value: function _createSignature(canonicalString) { return _crypto2.default.createHmac('sha512', this.secret).update(canonicalString).digest('hex'); } }, { key: '_createHeader', value: function _createHeader(params) { var canonicalString = _qs2.default.stringify(params); var signature = this._createSignature(canonicalString); return { 'Content-Type': 'application/x-www-form-urlencoded', Key: this.key, Sign: signature }; } }, { key: '_privateRequest', value: function _privateRequest(method) { var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (this.key !== undefined && this.secret !== undefined) { params.method = method; params.nonce = this._createNonce(); return (0, _requestPromise2.default)({ headers: this._createHeader(params), url: _config2.default.baseUrl.private, method: 'POST', form: params, json: true }); } else { throw new Error('Private API requires secret token and key.'); } } }, { key: '_publicRequest', value: function _publicRequest(path) { return (0, _requestPromise2.default)({ url: '' + _config2.default.baseUrl.public + path, method: 'GET', json: true }); } }, { key: 'lastPrice', value: function lastPrice(currencyPair) { return this._publicRequest('/last_price/' + currencyPair); } }, { key: 'ticker', value: function ticker(currencyPair) { return this._publicRequest('/ticker/' + currencyPair); } }, { key: 'trades', value: function trades(currencyPair) { return this._publicRequest('/trades/' + currencyPair); } }, { key: 'depth', value: function depth(currencyPair) { return this._publicRequest('/depth/' + currencyPair); } }, { key: 'getInfo', value: function getInfo() { return this._privateRequest('get_info'); } }, { key: 'getInfo2', value: function getInfo2() { return this._privateRequest('get_info2'); } }, { key: 'getPersonalInfo', value: function getPersonalInfo() { return this._privateRequest('get_personal_info'); } }, { key: 'tradeHistory', value: function tradeHistory(params) { return this._privateRequest('trade_history', params); } }, { key: 'activeOrders', value: function activeOrders() { var currencyPair = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; return this._privateRequest('active_orders', { currency_pair: currencyPair }); } }, { key: 'trade', value: function trade(currencyPair, action, price, amount) { var limit = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null; return this._privateRequest('trade', { currency_pair: currencyPair, action: action, price: price, amount: amount, limit: limit }); } }, { key: 'cancelOrder', value: function cancelOrder(orderId) { return this._privateRequest('cancel_order', { order_id: orderId }); } }, { key: 'withdraw', value: function withdraw(currency, address, amount) { var params = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; return this._privateRequest('withdraw', Object.assign({ currency: currency, address: address, amount: amount }, params)); } }, { key: 'dopositHistory', value: function dopositHistory(currency) { var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; params.currency = currency; return this._privateRequest('depositHistory', params); } }, { key: 'withdrawHistory', value: function withdrawHistory(currency) { var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; params.currency = currency; return this._privateRequest('withdrawHistory', params); } }, { key: 'stream', value: function stream(currencyPair) { var subject = new _rx.AsyncSubject(); var client = new _websocket.client(); client.connect(_config2.default.baseUrl.stream + '?currency_pair=' + currencyPair); client.on('connectFailed', function (error) { subject.onError(error); }); client.on('connect', function (connection) { console.log('WebSocket Client Connected'); var receiver = _rx.Observable.create(function (observer) { connection.on('error', function (error) { observer.onError(error); }); connection.on('close', function () { observer.onCompleted(); }); connection.on('message', function (msg) { if (msg.type === 'utf8') { observer.onNext(msg.utf8Data); } }); }); subject.onNext(receiver); subject.onCompleted(); }); return subject.asObservable().selectMany(function (receiver) { return receiver; }); } }]); return Zaif; }(); exports.default = Zaif;