UNPKG

@jmparsons/ccxt

Version:

A JavaScript / Python / PHP cryptocurrency trading library with support for 100+ exchanges

156 lines (145 loc) 5.5 kB
'use strict'; // --------------------------------------------------------------------------- const liqui = require ('./liqui.js'); // --------------------------------------------------------------------------- module.exports = class dsx extends liqui { describe () { return this.deepExtend (super.describe (), { 'id': 'dsx', 'name': 'DSX', 'countries': 'UK', 'rateLimit': 1500, 'has': { 'CORS': false, 'fetchOrder': true, 'fetchOrders': true, 'fetchOpenOrders': true, 'fetchClosedOrders': true, 'fetchTickers': true, 'fetchMyTrades': true, }, 'urls': { 'logo': 'https://user-images.githubusercontent.com/1294454/27990275-1413158a-645a-11e7-931c-94717f7510e3.jpg', 'api': { 'public': 'https://dsx.uk/mapi', // market data 'private': 'https://dsx.uk/tapi', // trading 'dwapi': 'https://dsx.uk/dwapi', // deposit/withdraw }, 'www': 'https://dsx.uk', 'doc': [ 'https://api.dsx.uk', 'https://dsx.uk/api_docs/public', 'https://dsx.uk/api_docs/private', '', ], }, 'api': { // market data (public) 'public': { 'get': [ 'barsFromMoment/{id}/{period}/{start}', // empty reply :\ 'depth/{pair}', 'info', 'lastBars/{id}/{period}/{amount}', // period is (m, h or d) 'periodBars/{id}/{period}/{start}/{end}', 'ticker/{pair}', 'trades/{pair}', ], }, // trading (private) 'private': { 'post': [ 'getInfo', 'TransHistory', 'TradeHistory', 'OrderHistory', 'ActiveOrders', 'Trade', 'CancelOrder', ], }, // deposit / withdraw (private) 'dwapi': { 'post': [ 'getCryptoDepositAddress', 'cryptoWithdraw', 'fiatWithdraw', 'getTransactionStatus', 'getTransactions', ], }, }, }); } getBaseQuoteFromMarketId (id) { let uppercase = id.toUpperCase (); let base = uppercase.slice (0, 3); let quote = uppercase.slice (3, 6); base = this.commonCurrencyCode (base); quote = this.commonCurrencyCode (quote); return [ base, quote ]; } async fetchBalance (params = {}) { await this.loadMarkets (); let response = await this.privatePostGetInfo (); let balances = response['return']; let result = { 'info': balances }; let funds = balances['funds']; let currencies = Object.keys (funds); for (let c = 0; c < currencies.length; c++) { let currency = currencies[c]; let uppercase = currency.toUpperCase (); uppercase = this.commonCurrencyCode (uppercase); let account = { 'free': funds[currency], 'used': 0.0, 'total': balances['total'][currency], }; account['used'] = account['total'] - account['free']; result[uppercase] = account; } return this.parseBalance (result); } parseTicker (ticker, market = undefined) { let timestamp = ticker['updated'] * 1000; let symbol = undefined; if (market) symbol = market['symbol']; let average = this.safeFloat (ticker, 'avg'); if (typeof average !== 'undefined') if (average > 0) average = 1 / average; let last = this.safeFloat (ticker, 'last'); return { 'symbol': symbol, 'timestamp': timestamp, 'datetime': this.iso8601 (timestamp), 'high': this.safeFloat (ticker, 'high'), 'low': this.safeFloat (ticker, 'low'), 'bid': this.safeFloat (ticker, 'buy'), 'bidVolume': undefined, 'ask': this.safeFloat (ticker, 'sell'), 'askVolume': undefined, 'vwap': undefined, 'open': undefined, 'close': last, 'last': last, 'previousClose': undefined, 'change': undefined, 'percentage': undefined, 'average': average, 'baseVolume': this.safeFloat (ticker, 'vol'), 'quoteVolume': this.safeFloat (ticker, 'vol_cur'), 'info': ticker, }; } getOrderIdKey () { return 'orderId'; } signBodyWithSecret (body) { return this.decode (this.hmac (this.encode (body), this.encode (this.secret), 'sha512', 'base64')); } getVersionString () { return ''; // they don't prepend version number to public URLs as other BTC-e clones do } };