diff --git a/Exchange/ExchangeAPI.js b/Exchange/ExchangeAPI.js deleted file mode 100644 index d95e8c2a1..000000000 --- a/Exchange/ExchangeAPI.js +++ /dev/null @@ -1,314 +0,0 @@ -exports.newExchangeAPI = function newExchangeAPI(logger, exchangeName) { - - /* - - This module allows trading bots to connect to the exchange and do trading operations on it. So far it can only work with Poloniex. - - */ - const _ = require('lodash') - const isValidOrder = require('./exchangeUtils').isValidOrder - const axios = require('axios') - let MODULE_NAME = "Exchange API"; - - let thisObject = { - initialize: initialize, - getTicker: getTicker, - getOpenPositions: getOpenPositions, - getExecutedTrades: getExecutedTrades, - putPosition: putPosition, - movePosition: movePosition, - getPublicTradeHistory: getPublicTradeHistory, - getExchangeProperties: getExchangeProperties, - getMaxDecimalPositions: getMaxDecimalPositions - }; - - let apiClient; - - return thisObject; - - async function initialize(callBackFunction) { - try { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] initialize -> Entering function."); } - - let botExchange - if (exchangeName === undefined) { - botExchange = 'Poloniex'; // Default Value - } else { - botExchange = exchangeName; - } - - let exchange = botExchange.toLowerCase() + 'Client.js'; - let api = require('./wrappers/' + exchange); - - let accessToken - let keyId - let cloneId - if (global.CURRENT_EXECUTION_AT === "Node") { - keyId = process.env.KEY_ID - cloneId = process.env.CLONE_ID - - let auth = require('../utils/auth') - let authTokenCloud = await auth.authenticate() - accessToken = 'Bearer ' + authTokenCloud - } - - let keyVaultAPI = createKeyVaultAPIClient(accessToken, keyId, cloneId) - apiClient = api.newAPIClient(keyVaultAPI, logger); - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - - function createKeyVaultAPIClient(accessToken, keyId, cloneId) { - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] createKeyVaultAPIClient -> Entering function."); } - - const keyVaultAPI = {} - keyVaultAPI.signTransaction = function (transaction, next) { - axios({ - url: global.GATEWAY_ENDPOINT, - method: 'post', - data: { - query: ` - mutation keyVault_SignTransaction($transaction: String!, $keyId: String, $cloneId: String){ - keyVault_SignTransaction(transaction: $transaction, keyId: $keyId, cloneId: $cloneId){ - key, - signature, - date - } - } - `, - variables: { - transaction: transaction, - keyId: keyId, - cloneId: cloneId - } - }, - headers: { - authorization: accessToken - } - - }).then(res => { - if (res.errors) { - next(undefined, 'Error from graphql: ' + res.errors); - } else { - let signature = { - Key: res.data.data.keyVault_SignTransaction.key, - Sign: res.data.data.keyVault_SignTransaction.signature - } - next(signature) - } - }).catch(error => { - next(undefined, 'Error signing the message on the key vault: ' + error.message); - }); - } - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] createKeyVaultAPIClient -> Returning graphql client."); } - - return keyVaultAPI; - } - - /* - * Position Object = { - * id, String - * type, String - * rate, Number - * amountA, Number - * amountB, Number - * fee, Number - * datetime Date - * }; - */ - function truncDecimals(pFloatValue) { - let decimals = getMaxDecimalPositions(); - return parseFloat(parseFloat(pFloatValue).toFixed(decimals)); - } - - /* - * Return number of decimals for the current market - */ - function getMaxDecimalPositions() { - return getMarketConfig().maxDecimals; - } - - /* - * Return number of decimals for the current market - */ - function getMarketConfig() { - return _.find(getExchangeProperties().markets, (p) => { - return _.first(p.pair) === global.MARKET.assetA.toUpperCase() && - _.last(p.pair) === global.MARKET.assetB.toUpperCase(); - }); - } - - /* - * Return number of decimals for the current market - */ - function getExchangeProperties() { - try { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] getExchangeProperties -> Entering function."); } - - return apiClient.getExchangeProperties(); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] getExchangeProperties -> err = " + err.message); - callBack(global.DEFAULT_FAIL_RESPONSE); - } - } - - /* - * Returns the price for a given pair of assets. - * The object returned is an array of trades: - * ticker = { - * bid, Number - * ask, Number - * last Number - * }; - */ - function getTicker(pMarket, callBack) { - try { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] getTicker -> Entering function."); } - - apiClient.getTicker(pMarket, callBack); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] getTicker -> err = " + err.message); - callBack(global.DEFAULT_FAIL_RESPONSE); - } - } - - /* - * Returns the open positions ath the exchange for a given market and user account. - * The object returned is an array of positions - * - */ - function getOpenPositions(pMarket, callBack) { - try { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] getOpenPositions -> Entering function."); } - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] getOpenPositions -> pMarket = " + JSON.stringify(pMarket)); } - - apiClient.getOpenPositions(pMarket, callBack); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] getOpenPositions -> Error = " + err.message); - callBack(global.DEFAULT_FAIL_RESPONSE); - } - } - - /* - * Returns the trades for a given order number. - * The object returned is an array of positions - */ - function getExecutedTrades(pPositionId, callBack) { - try { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] getExecutedTrades -> Entering function."); } - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] getExecutedTrades -> pPositionId = " + pPositionId); } - - apiClient.getExecutedTrades(pPositionId, callBack); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] getExecutedTrades -> Error = " + err.message); - callBack(global.DEFAULT_FAIL_RESPONSE); - } - } - - /* - * Creates a new buy or sell order. - * The orderNumber is returned. String - */ - function putPosition(pMarket, pType, pRate, pAmountA, pAmountB, callBack) { - try { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] putPosition -> Entering function."); } - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] putPosition -> pMarket = " + JSON.stringify(pMarket)); } - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] putPosition -> pType = " + pType); } - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] putPosition -> pRate = " + truncDecimals(pRate)); } - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] putPosition -> pAmountA = " + truncDecimals(pAmountA)); } - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] putPosition -> pAmountB = " + truncDecimals(pAmountB)); } - - let check = isValidOrder({ - market: getMarketConfig(), - api: apiClient, - amount: truncDecimals(pAmountB), - price: truncDecimals(pRate) - }); - - if (check.valid) { - if (pType === "buy") { - apiClient.buy(pMarket.assetA, pMarket.assetB, truncDecimals(pRate), truncDecimals(pAmountB), callBack); - return; - } - - if (pType === "sell") { - apiClient.sell(pMarket.assetA, pMarket.assetB, truncDecimals(pRate), truncDecimals(pAmountB), callBack); - return; - } - - logger.write(MODULE_NAME, "[ERROR] putPosition -> pType must be either 'buy' or 'sell'."); - callBack(global.DEFAULT_FAIL_RESPONSE); - - } else { - logger.write(MODULE_NAME, "[ERROR] putPosition -> The order is invalid: " + check.reason); - callBack(global.DEFAULT_FAIL_RESPONSE); - } - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] putPosition -> err = " + err.message); - callBack(global.DEFAULT_FAIL_RESPONSE); - } - } - - /* - * Move an existing position to the new rate. - * The new orderNumber is returned. - */ - function movePosition(pPosition, pNewRate, pNewAmountB, callBack) { - try { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] movePosition -> Entering function."); } - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] movePosition -> pPosition = " + JSON.stringify(pPosition)); } - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] movePosition -> pNewRate = " + truncDecimals(pNewRate)); } - - apiClient.movePosition(pPosition, truncDecimals(pNewRate), truncDecimals(pNewAmountB), callBack); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] movePosition -> err = " + err.message); - callBack(global.DEFAULT_FAIL_RESPONSE); - } - } - - /* - * Returns all the trade history from the Exchange since startTime to endTime orderd by tradeId. - * It's possible that the exchange doesn't support this method. - * The object returned is an array of trades: - * trade = { - * tradeID, String - * globalTradeID, String - * type, String - * rate, Number - * amountA, Number - * amountB, Number - * date Date - * }; - */ - function getPublicTradeHistory(assetA, assetB, startTime, endTime, callBack) { - try { - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] getTradeHistory -> Entering function."); } - - apiClient.getPublicTradeHistory(assetA, assetB, startTime, endTime, callBack); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] getTradeHistory -> err = " + err.message); - callBack(global.DEFAULT_FAIL_RESPONSE); - } - } -}; diff --git a/Exchange/exchangeUtils.js b/Exchange/exchangeUtils.js deleted file mode 100644 index 853d6d825..000000000 --- a/Exchange/exchangeUtils.js +++ /dev/null @@ -1,100 +0,0 @@ -// generic low level reusuable utils for interacting with exchanges. - -const retry = require('retry'); -const _ = require('lodash'); - -const retryInstance = (options, checkFn, callback) => { - if(!options) { - options = { - retries: 100, - factor: 1.2, - minTimeout: 1 * 1000, - maxTimeout: 4 * 1000 - }; - } - - let attempt = 0; - - const operation = retry.operation(options); - operation.attempt(function(currentAttempt) { - checkFn((err, result) => { - if (!err) { - return callback(global.DEFAULT_OK_RESPONSE, result); - } else { - if (err.result === global.CUSTOM_OK_RESPONSE.result) { - return callback(err, result); - } - } - - let maxAttempts = err.retry; - if(maxAttempts === true) - maxAttempts = 10; - - if(err.retry && attempt++ < maxAttempts) { - return operation.retry(err); - } - - if(err.notFatal) { - if(err.backoffDelay) { - return setTimeout(() => operation.retry(err), err.backoffDelay); - } - - return operation.retry(err); - } - - callback(err, result); - }); - }); -} - -const isValidOrder = ({api, market, amount, price}) => { - let reason = false; - - // Check amount - if(amount < market.minimalOrder.amount) { - reason = 'Amount is too small'; - } - - // Some exchanges have restrictions on prices - if( - _.isFunction(api.isValidPrice) && - !api.isValidPrice(price) - ) { - reason = 'Price is not valid'; - } - - if( - _.isFunction(api.isValidLot) && - !api.isValidLot(price, amount) - ) { - reason = 'Lot size is too small'; - } - - return { - reason, - valid: !reason - } -} - -const includes = function(str, list) { - if (!_.isString(str)) - return false; - - return _.some(list, item => str.includes(item)); -} - - -const getMarketConfig = function(exchangeProperties) { - return _.find(exchangeProperties.markets, (p) => { - return _.first(p.pair) === global.MARKET.assetA.toUpperCase() && - _.last(p.pair) === global.MARKET.assetB.toUpperCase(); - }); -} - -module.exports = { - retry: retryInstance, - includes: includes, - isValidOrder, - getMarketConfig - -} \ No newline at end of file diff --git a/Exchange/wrappers/beautifier.js b/Exchange/wrappers/beautifier.js deleted file mode 100644 index 5e5e6a051..000000000 --- a/Exchange/wrappers/beautifier.js +++ /dev/null @@ -1,183 +0,0 @@ -const _ = require('underscore'); - -class Beautifier { - - constructor() { - this._beautifications = { - aggTrades: { - a: 'aggTradeId', - p: 'price', - q: 'quantity', - f: 'firstTradeId', - l: 'lastTradeId', - T: 'timestamp', - m: 'maker', - M: 'bestPriceMatch' - }, - klines: { - 0: 'openTime', - 1: 'open', - 2: 'high', - 3: 'low', - 4: 'close', - 5: 'volume', - 6: 'closeTime', - 7: 'quoteAssetVolume', - 8: 'trades', - 9: 'takerBaseAssetVolume', - 10: 'takerQuoteAssetVolume', - 11: 'ignored' - }, - bids: [ - { - 0: 'price', - 1: 'quantity', - 2: 'ignored' - } - ], - asks: [ - { - 0: 'price', - 1: 'quantity', - 2: 'ignored' - } - ], - depthUpdateEvent: { - e: 'eventType', - E: 'eventTime', - s: 'symbol', - u: 'updateId', - b: 'bidDepthDelta', - a: 'askDepthDelta' - }, - bidDepthDelta: [ - { - 0: 'price', - 1: 'quantity', - 2: 'ignored' - } - ], - askDepthDelta: [ - { - 0: 'price', - 1: 'quantity', - 2: 'ignored' - } - ], - klineEvent: { - e: 'eventType', - E: 'eventTime', - s: 'symbol', - k: 'kline' - }, - kline: { - t: 'startTime', - T: 'endTime', - s: 'symbol', - i: 'interval', - f: 'firstTradeId', - L: 'lastTradeId', - o: 'open', - c: 'close', - h: 'high', - l: 'low', - v: 'volume', - n: 'trades', - x: 'final', - q: 'quoteVolume', - V: 'volumeActive', - Q: 'quoteVolumeActive', - B: 'ignored' - }, - aggTradeEvent: { - e: 'eventType', - E: 'eventTime', - s: 'symbol', - a: 'tradeId', - p: 'price', - q: 'quantity', - f: 'firstTradeId', - l: 'lastTradeId', - T: 'time', - m: 'maker', - M: 'ignored' - }, - outboundAccountInfoEvent: { - e: 'eventType', - E: 'eventTime', - m: 'makerCommission', - t: 'takerCommission', - b: 'buyerCommission', - s: 'sellerCommission', - T: 'canTrade', - W: 'canWithdraw', - D: 'canDeposit', - B: 'balances' - }, - balances: [ - { - a: 'asset', - f: 'availableBalance', - l: 'onOrderBalance' - } - ], - executionReportEvent: { - e: 'eventType', - E: 'eventTime', - s: 'symbol', - c: 'newClientOrderId', - S: 'side', - o: 'orderType', - f: 'cancelType', // GTC 'Good till Cancel', IOC: 'Immediate or Cancel' - q: 'quantity', - p: 'price', - x: 'executionType', - X: 'orderStatus', - r: 'rejectReason', - i: 'orderId', - l: 'lastTradeQuantity', - z: 'accumulatedQuantity', - L: 'lastTradePrice', - n: 'commission', - N: 'commissionAsset', - m: 'maker', - T: 'tradeTime', - t: 'tradeId' - } - } - } - - beautify(object, type) { - const beautifications = _.isObject(type) ? type : this._beautifications[type]; - if (!beautifications) { - return object; - } - let newItem = {}; - _.each(object, (value, key) => { - if (_.isArray(value)) { - const newArray = []; - if (_.isArray(this._beautifications[beautifications[key]])) { - _.each(value, arrayValue => { - newArray.push(this.beautify(arrayValue, this._beautifications[beautifications[key]][0])); - }); - } else { - _.each(value, (value, key) => { - newItem.push(this.beautify(value, beautifications[key])) - }); - } - const newKey = beautifications[key] || key; - newItem[newKey] = newArray; - } else if (_.isObject(value)) { - const newKey = beautifications[key] || key; - newItem[newKey] = this.beautify(value, beautifications[key]); - } else { - const newKey = beautifications[key] || key; - newItem[newKey] = value; - } - }); - return newItem; - } - -} - -module.exports = Beautifier; \ No newline at end of file diff --git a/Exchange/wrappers/binance.js b/Exchange/wrappers/binance.js deleted file mode 100644 index 624c0fc06..000000000 --- a/Exchange/wrappers/binance.js +++ /dev/null @@ -1,368 +0,0 @@ -// Source: https://github.com/zoeyg/binance/blob/master/lib/rest.js - -const request = require('request'); -const qs = require('querystring'); -const _ = require('underscore'); -const crypto = require('crypto'); -const Beautifier = require('./beautifier.js'); -const assert = require('assert'); - -class BinanceRest { - - constructor({ - key, - secret, - recvWindow = false, - timeout = 15000, - disableBeautification = false, - handleDrift = false - }) { - this.key = key; - this.secret = secret; - this.recvWindow = recvWindow; - this.timeout = timeout; - this.disableBeautification = disableBeautification; - this.handleDrift = handleDrift; - - this._beautifier = new Beautifier(); - this._baseUrl = 'https://api.binance.com/'; - this._drift = 0; - this._syncInterval = 0; - } - - _makeRequest(query, callback, route, security, method, attempt = 0) { - assert(_.isUndefined(callback) || _.isFunction(callback), 'callback must be a function or undefined'); - assert(_.isObject(query), 'query must be an object'); - - let queryString; - const type = _.last(route.split('/')), - options = { - url: `${this._baseUrl}${route}`, - timeout: this.timeout - }; - - if (security === 'SIGNED') { - if (this.recvWindow) { - query.recvWindow = this.recvWindow; - } - queryString = qs.stringify(query); - options.url += '?' + queryString; - if (options.url.substr(options.url.length - 1) !== '?') { - options.url += '&'; - } - options.url += `signature=${this._sign(queryString)}`; - } else { - queryString = qs.stringify(query); - if (queryString) { - options.url += '?' + queryString; - } - } - if (security === 'API-KEY' || security === 'SIGNED') { - options.headers = { 'X-MBX-APIKEY': this.key }; - } - if (method) { - options.method = method; - } - - const action = cb => { - request(options, (err, response, body) => { - let payload; - try { - payload = JSON.parse(body); - } catch (e) { - payload = body; - } - if (err) { - cb(err, payload); - } else if (response.statusCode < 200 || response.statusCode > 299) { - /* - * If we get a response that the timestamp is ahead of the server, - * calculate the drift and then attempt the request again - */ - if (response.statusCode === 400 && payload.code === -1021 && - this.handleDrift && attempt === 0) { - - this.calculateDrift() - .then(() => { - query.timestamp = this._getTime() + this._drift; - return this._makeRequest(query, cb, route, security, method, - ++attempt); - }); - } else { - cb(new Error(`Response code ${response.statusCode}`), payload); - } - } else { - if (_.isArray(payload)) { - payload = _.map(payload, (item) => { - return this._doBeautifications(item, type); - }); - } else { - payload = this._doBeautifications(payload); - } - cb(err, payload); - } - }); - }; - if (callback) { - action(callback); - } else { - return new Promise((resolve, reject) => action((err, payload) => { - if (err) { - if (payload === undefined) { - reject(err); - } else { - reject(payload); - } - } else { - resolve(payload); - } - })); - } - } - - _doBeautifications(response, route) { - if (this.disableBeautification) { - return response; - } - return this._beautifier.beautify(response, route); - } - - _sign(queryString) { - return crypto.createHmac('sha256', this.secret) - .update(queryString) - .digest('hex'); - } - - _setTimestamp(query) { - if (!query.timestamp) { - query.timestamp = this._getTime() + this._drift; - } - } - - _getTime() { - return new Date().getTime(); - } - - calculateDrift() { - const systemTime = this._getTime(); - return this.time() - .then((response) => { - // Calculate the approximate trip time from here to binance - const transitTime = parseInt((this._getTime() - systemTime) / 2); - this._drift = response.serverTime - (systemTime + transitTime); - }); - } - - startTimeSync(interval = 300000, onRecalculateDriftCb) { - return new Promise((resolve, reject) => { - // If there's already an interval running, clear it and reset values - if (this._syncInterval !== 0) { - this.endTimeSync(); - return resolve(); - } - - // Calculate initial drift value and setup interval to periodically update it - this.calculateDrift() - .then(resolve) - .catch(reject); - - this._syncInterval = setInterval(() => { - const promise = this.calculateDrift(); - - if (_.isFunction(onRecalculateDriftCb)) { - onRecalculateDriftCb(promise); - } - }, interval); - }); - } - - endTimeSync() { - clearInterval(this._syncInterval); - this._drift = 0; - this._syncInterval = 0; - } - - // Public APIs - ping(callback) { - return this._makeRequest({}, callback, 'api/v1/ping'); - } - - time(callback) { - return this._makeRequest({}, callback, 'api/v1/time'); - } - - depth(query = {}, callback) { - if (_.isString(query)) { - query = { symbol: query }; - } - - return this._makeRequest(query, callback, 'api/v1/depth'); - } - - trades(query = {}, callback) { - if (_.isString(query)) { - query = { symbol: query }; - } - - return this._makeRequest(query, callback, 'api/v1/trades'); - } - - historicalTrades(query = {}, callback) { - if (_.isString(query)) { - query = { symbol: query }; - } - - return this._makeRequest(query, callback, 'api/v1/historicalTrades', 'API-KEY'); - } - - aggTrades(query = {}, callback) { - if (_.isString(query)) { - query = { symbol: query }; - } - - return this._makeRequest(query, callback, 'api/v1/aggTrades'); - } - - exchangeInfo(callback) { - return this._makeRequest({}, callback, 'api/v1/exchangeInfo'); - } - - klines(query = {}, callback) { - return this._makeRequest(query, callback, 'api/v1/klines'); - } - - ticker24hr(query = {}, callback) { - if (_.isString(query)) { - query = { symbol: query }; - } - - return this._makeRequest(query, callback, 'api/v1/ticker/24hr'); - } - - tickerPrice(query = {}, callback) { - if (_.isString(query)) { - query = { symbol: query }; - } - - return this._makeRequest(query, callback, 'api/v3/ticker/price'); - } - - bookTicker(query = {}, callback) { - if (_.isString(query)) { - query = { symbol: query }; - } - - return this._makeRequest(query, callback, 'api/v3/ticker/bookTicker'); - } - - allBookTickers(callback) { - return this._makeRequest({}, callback, 'api/v1/ticker/allBookTickers'); - } - - allPrices(callback) { - return this._makeRequest({}, callback, 'api/v1/ticker/allPrices'); - } - - // Private APIs - newOrder(query = {}, callback) { - this._setTimestamp(query); - return this._makeRequest(query, callback, 'api/v3/order', 'SIGNED', 'POST'); - } - - testOrder(query = {}, callback) { - this._setTimestamp(query); - return this._makeRequest(query, callback, 'api/v3/order/test', 'SIGNED', 'POST'); - } - - queryOrder(query = {}, callback) { - this._setTimestamp(query); - return this._makeRequest(query, callback, 'api/v3/order', 'SIGNED'); - } - - cancelOrder(query = {}, callback) { - this._setTimestamp(query); - return this._makeRequest(query, callback, 'api/v3/order', 'SIGNED', 'DELETE'); - } - - openOrders(query = {}, callback) { - if (_.isString(query)) { - query = { symbol: query }; - } - this._setTimestamp(query); - return this._makeRequest(query, callback, 'api/v3/openOrders', 'SIGNED'); - } - - allOrders(query = {}, callback) { - if (_.isString(query)) { - query = { symbol: query }; - } - this._setTimestamp(query); - return this._makeRequest(query, callback, 'api/v3/allOrders', 'SIGNED'); - } - - account(query = {}, callback) { - if (_.isFunction(query)) { - callback = query; - query = {}; - } - this._setTimestamp(query); - return this._makeRequest(query, callback, 'api/v3/account', 'SIGNED'); - } - - myTrades(query = {}, callback) { - if (_.isString(query)) { - query = { symbol: query }; - } - this._setTimestamp(query); - return this._makeRequest(query, callback, 'api/v3/myTrades', 'SIGNED'); - } - - withdraw(query = {}, callback) { - this._setTimestamp(query); - return this._makeRequest(query, callback, 'wapi/v3/withdraw.html', 'SIGNED', 'POST'); - } - - depositHistory(query = {}, callback) { - if (_.isString(query)) { - query = { asset: query }; - } - this._setTimestamp(query); - return this._makeRequest(query, callback, 'wapi/v3/depositHistory.html', 'SIGNED'); - } - - withdrawHistory(query = {}, callback) { - if (_.isString(query)) { - query = { asset: query }; - } - this._setTimestamp(query); - return this._makeRequest(query, callback, 'wapi/v3/withdrawHistory.html', 'SIGNED'); - } - - depositAddress(query = {}, callback) { - if (_.isString(query)) { - query = { asset: query }; - } - this._setTimestamp(query); - return this._makeRequest(query, callback, 'wapi/v3/depositAddress.html', 'SIGNED'); - } - - accountStatus(callback) { - const query = {}; - this._setTimestamp(query); - return this._makeRequest(query, callback, 'wapi/v3/accountStatus.html', 'SIGNED'); - } - - startUserDataStream(callback) { - return this._makeRequest({}, callback, 'api/v1/userDataStream', 'API-KEY', 'POST'); - } - - keepAliveUserDataStream(query = {}, callback) { - return this._makeRequest(query, callback, 'api/v1/userDataStream', 'API-KEY', 'PUT'); - } - - closeUserDataStream(query = {}, callback) { - return this._makeRequest(query, callback, 'api/v1/userDataStream', 'API-KEY', 'DELETE'); - } -} - -module.exports = BinanceRest; \ No newline at end of file diff --git a/Exchange/wrappers/binanceClient.js b/Exchange/wrappers/binanceClient.js deleted file mode 100644 index 3b00f3469..000000000 --- a/Exchange/wrappers/binanceClient.js +++ /dev/null @@ -1,355 +0,0 @@ -exports.newAPIClient = function newAPIClient(pKey, pSecret, logger) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = true; - const MODULE_NAME = "binanceClient"; - - const retry = require('../exchangeUtils').retry; - const includes = require('../exchangeUtils').includes; - const _ = require('lodash'); - const Binance = require("./binance"); - const exchangeProperties = require('./poloniexProperties.json'); - - const recoverableErrors = [ - 'SOCKETTIMEDOUT', - 'TIMEDOUT', - 'CONNRESET', - 'CONNREFUSED', - 'NOTFOUND', - 'Error -1021', - 'Response code 429', - 'Response code 5', - 'ETIMEDOUT' - ]; - - let API = new Binance({ - key: pKey, - secret: pSecret, - timeout: 15000, - recvWindow: 60000, - disableBeautification: false, - handleDrift: true, - }); - - let thisObject = { - getTicker: getTicker, - getOpenPositions: getOpenPositions, - getExecutedTrades: getExecutedTrades, - buy: buy, - sell: sell, - movePosition: movePosition, - getPublicTradeHistory: getPublicTradeHistory, - getExchangeProperties: getExchangeProperties, - isValidPrice: isValidPrice, - isValidLot: isValidLot - }; - - return thisObject; - - function joinCurrencies(currencyA, currencyB) { - // If only one arg, then return the first - if (typeof currencyB !== 'string') { - return currencyA; - } - - return currencyB + '' + currencyA; - } - - /* - * Returns the properties for this exchange - */ - function getExchangeProperties() { - return exchangeProperties; - } - - function truncDecimals(pFloatValue) { - - let decimals = 6; - - return parseFloat(parseFloat(pFloatValue).toFixed(decimals)); - - } - - /* - * Returns the price for a given pair of assets. - * The object returned is an array of trades: - * ticker = { - * bid, Number - * ask, Number - * last Number - * }; - */ - function getTicker(pMarket, callBack) { - - let market = joinCurrencies(pMarket.assetA, pMarket.assetB); - const handle = (err, response) => { - let ticker; - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - ticker = { - bid: Number(response.bidPrice), - ask: Number(response.askPrice), - last: Number(response.lastPrice) - }; - } - callBack(err, ticker); - }; - - const fetch = next => API.ticker24hr(market, analizeResponse(next)); - - retry(null, fetch, handle); - } - - /* - * Returns the open positions ath the exchange for a given market and user account. - * The object returned is an array of positions: - * position = { - * id, - * type, - * rate, Number - * amountA, Number - * amountB, Number - * fee, (not required) Number - * datetime - * }; - */ - function getOpenPositions(pMarket, callBack) { - - let market = joinCurrencies(pMarket.assetA, pMarket.assetB); - const handle = (err, response) => { - let exchangePositions = []; - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - for (let i = 0; i < response.length; i++) { - let openPosition = { - id: response[i].orderId, - type: response[i].side.toLowerCase(), - rate: Number(response[i].price), - amountA: truncDecimals(response[i].origQty * response[i].price), - amountB: Number(response[i].origQty), - date: (new Date(response[i].time)).valueOf() - }; - exchangePositions.push(openPosition); - } - } - callBack(err, exchangePositions); - }; - - const fetch = next => API.openOrders(market, analizeResponse(next)); - - retry(null, fetch, handle); - } - - /* - * Returns the trades for a given order number. - * The object returned is an array of positions: - * position = { - * id, - * type, - * rate, Number - * amountA, Number - * amountB, Number - * fee, Number - * datetime - * }; - */ - function getExecutedTrades(pPositionId, callBack) { - - let market = joinCurrencies(global.MARKET.assetA, global.MARKET.assetB); - const handle = (err, response) => { - let exchangeTrades = []; - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - for (let i = 0; i < response.length; i++) { - if (response[i].orderId === pPositionId) { - let type = "sell" - if (response[i].isBuyer === true) { - type = "buy"; - } - let trade = { - id: response[i].orderId, - type: type, - rate: Number(response[i].price), - amountA: truncDecimals(response[i].qty * response[i].price), - amountB: Number(response[i].qty), - fee: Number(response[i].commission), - date: (new Date(response[i].time)).valueOf() - }; - exchangeTrades.push(trade); - break; - } - } - } - callBack(err, exchangeTrades); - }; - - const fetch = next => API.myTrades(market, analizeResponse(next)); - - retry(null, fetch, handle); - } - - /* - * Creates a new buy order. - * The orderNumber is returned. - */ - function buy(pCurrencyA, pCurrencyB, pRate, pAmount, callBack) { - - var parameters = { - symbol: joinCurrencies(pCurrencyA, pCurrencyB), - side: 'BUY', - type: 'LIMIT', - quantity: pAmount, - price: pRate, - timeInForce: 'GTC' - }; - const handle = (err, response) => { - let orderNumber; - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - orderNumber = response.orderId; - } - callBack(err, orderNumber); - }; - - const fetch = next => API.newOrder(parameters, analizeResponse(next)); - - retry(null, fetch, handle); - - } - - /* - * Creates a new sell order. - * The orderNumber is returned. String - */ - function sell(pCurrencyA, pCurrencyB, pRate, pAmount, callBack) { - - var parameters = { - symbol: joinCurrencies(pCurrencyA, pCurrencyB), - side: 'SELL', - type: 'LIMIT', - quantity: pAmount, - price: pRate, - timeInForce: 'GTC' - }; - const handle = (err, response) => { - let orderNumber; - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - orderNumber = response.orderId; - } - callBack(err, orderNumber); - }; - - const fetch = next => API.newOrder(parameters, analizeResponse(next)); - - retry(null, fetch, handle); - } - - /* //TODO Complete partial orders - * Move an existing position to the new rate. - * The new orderNumber is returned. String - */ - function movePosition(pPosition, pNewRate, pNewAmountB, callBack) { - - var parameters = { - symbol: joinCurrencies(global.MARKET.assetA, global.MARKET.assetB), - orderId: pPosition.id - }; - - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] moveOrder -> Step1 - Cancelling Position: " + JSON.stringify(pPosition)); } - - const handle = (err, response) => { - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] moveOrder -> Step1 Complete - Position Cancelled. Proceeding to put the new position."); } - - if (position.type === "buy") - thisObject.buy(global.MARKET.assetA, global.MARKET.assetB, pNewRate, pNewAmountB, callBack); - else - thisObject.sell(global.MARKET.assetA, global.MARKET.assetB, pNewRate, pNewAmountB, callBack); - } else { - callBack(err); - } - }; - - const fetch = next => API.cancelOrder(parameters, analizeResponse(next)); - - retry(null, fetch, handle); - } - - /* //TODO Pending Review - * Returns all the trade history from the Exchange since startTime to endTime orderd by tradeId. - * It's possible that the exchange doesn't support this method. - * The object returned is an array of trades: - * trade = { - * tradeIdAtExchange, - * marketIdAtExchange, - * type, - * rate, Number - * amountA, Number - * amountB, Number - * datetime - * }; - */ - function getPublicTradeHistory(assetA, assetB, startTime, endTime, callBack) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] getPublicTradeHistory -> Not implemented yet."); } - callBack(global.DEFAULT_FAIL_RESPONSE); - } - - function isValidPrice(price) { - return price >= market.minimalOrder.price; - } - - function isValidLot(price, amount) { - return amount * price >= market.minimalOrder.order; - } - - function analizeResponse(callBack) { - - return (exchangeErr, exchangeResponse) => { - let error; - - /* This function analizes the different situations we might encounter trying to access Binance and returns appropiate standard errors. */ - - let stringExchangeErr = JSON.stringify(exchangeErr); - let stringExchangeResponse = JSON.stringify(exchangeResponse); - - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] analizeResponse -> exchangeErr = " + stringExchangeErr); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] analizeResponse -> exchangeResponse = " + stringExchangeResponse); } - - if (exchangeErr) { - error = global.DEFAULT_FAIL_RESPONSE; - } else if (!exchangeResponse) { - error = { - result: global.DEFAULT_FAIL_RESPONSE.result, - message: 'Empty response' - }; - } else if (includes(exchangeResponse.error, [''])) { - error = { - result: global.DEFAULT_FAIL_RESPONSE.result, - message: exchangeResponse - }; - } else if (includes(exchangeResponse.error, ['Order does not exist.'])) { - error = { - result: global.CUSTOM_OK_RESPONSE.result, - message: exchangeResponse.error - }; - } else if (exchangeResponse.error) { - error = { - result: global.DEFAULT_FAIL_RESPONSE.result, - message: exchangeResponse.error - }; - } - - if (error) { - if (includes(error.message, recoverableErrors)) { - error.notFatal = true; - } - } - - return callBack(error, exchangeResponse); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] analizeResponse -> err.message = " + err.message); - return callBack(global.DEFAULT_FAIL_RESPONSE, exchangeResponse); - } - } - } - -} diff --git a/Exchange/wrappers/binanceProperties.json b/Exchange/wrappers/binanceProperties.json deleted file mode 100644 index ad4438de0..000000000 --- a/Exchange/wrappers/binanceProperties.json +++ /dev/null @@ -1,4594 +0,0 @@ -{ - "assets": [ - "NULS", - "VEN", - "BNB", - "NEO", - "LINK", - "SALT", - "IOTA", - "ETC", - "AST", - "KNC", - "WTC", - "SNGLS", - "EOS", - "SNT", - "MCO", - "BTC", - "OAX", - "OMG", - "GAS", - "BQX", - "QTUM", - "BNT", - "DNT", - "ICN", - "SNM", - "STRAT", - "ZRX", - "FUN", - "LTC", - "ETH", - "XVG", - "BCC", - "ADA", - "ADX", - "AE", - "AGI", - "AION", - "AMB", - "APPC", - "ARK", - "ARN", - "BAT", - "BCD", - "BCN", - "BCPT", - "BLZ", - "BRD", - "BTG", - "BTS", - "CDT", - "CHAT", - "CLOAK", - "CMT", - "CND", - "CVC", - "DASH", - "DATA", - "DENT", - "DGD", - "DLT", - "EDO", - "ELF", - "ENG", - "ENJ", - "EVX", - "FUEL", - "GNT", - "GRS", - "GTO", - "GVT", - "GXS", - "HSR", - "ICX", - "INS", - "IOST", - "IOTX", - "KEY", - "KMD", - "LEND", - "LOOM", - "LRC", - "LSK", - "LUN", - "MANA", - "MDA", - "MFT", - "MOD", - "MTH", - "MTL", - "NANO", - "NAS", - "NAV", - "NCASH", - "NEBL", - "NPXS", - "NXS", - "ONT", - "OST", - "PIVX", - "POA", - "POE", - "POWR", - "PPT", - "QKC", - "QLC", - "QSP", - "RCN", - "RDN", - "REP", - "REQ", - "RLC", - "RPX", - "SC", - "SKY", - "STEEM", - "STORJ", - "STORM", - "SUB", - "SYS", - "THETA", - "TNB", - "TNT", - "TRIG", - "TRX", - "TUSD", - "VIA", - "VIB", - "VIBE", - "WABI", - "WAN", - "WAVES", - "WINGS", - "WPR", - "XEM", - "XLM", - "XMR", - "XRP", - "XZC", - "YOYO", - "ZEC", - "ZEN", - "ZIL" - ], - "currencies": [ - "BNB", - "BTC", - "ETH", - "USDT" - ], - "markets": [ - { - "pair": [ - "BNB", - "NULS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BNB", - "VEN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "BNB" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "BTC", - "NULS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "BTC", - "NEO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "NULS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "LINK" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "BTC", - "SALT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "BTC", - "IOTA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "BTC", - "ETC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "AST" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-7, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "KNC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "BTC", - "WTC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "BTC", - "SNGLS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "EOS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "ETH", - "SNT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "ETH", - "MCO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "USDT", - "BTC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.000001, - "price": 0.01, - "order": 10 - } - }, - { - "pair": [ - "ETH", - "OAX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-7, - "order": 0.01 - } - }, - { - "pair": [ - "ETH", - "OMG" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "GAS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "BQX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-7, - "order": 0.01 - } - }, - { - "pair": [ - "ETH", - "WTC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "ETH", - "QTUM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "ETH", - "BNT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "ETH", - "DNT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "ETH", - "ICN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-7, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "SNM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "SNM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "ETH", - "SNGLS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "BQX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "NEO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "ETH", - "KNC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-7, - "order": 0.01 - } - }, - { - "pair": [ - "ETH", - "STRAT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "ETH", - "ZRX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "QTUM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "FUN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "LTC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "LINK" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "ETH" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "XVG" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "STRAT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "BTC", - "ZRX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "IOTA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "BCC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "BTC", - "OMG" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "BTC", - "MCO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "SALT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "ADA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "ADA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "ADA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "USDT", - "ADA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.1, - "price": 0.00001, - "order": 10 - } - }, - { - "pair": [ - "BNB", - "ADX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "ADX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "ADX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-7, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "AE" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "AE" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "AE" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "AGI" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "AGI" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "AGI" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "AION" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "AION" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "AION" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "AMB" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "AMB" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "AMB" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "APPC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "APPC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "APPC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-7, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "ARK" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "ARK" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "ARN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "ARN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "AST" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "BNB", - "BAT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "BAT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "BAT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "BCC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.00001, - "price": 0.01, - "order": 1 - } - }, - { - "pair": [ - "ETH", - "BCC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.00001, - "order": 0.01 - } - }, - { - "pair": [ - "USDT", - "BCC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.00001, - "price": 0.01, - "order": 10 - } - }, - { - "pair": [ - "BTC", - "BCD" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "BCD" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.00001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "BCN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 0.000001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "BCN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "BCN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "BCPT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "BCPT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "BCPT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "BLZ" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "BLZ" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "BLZ" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "ETH", - "BNB" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "BNT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "BNB", - "BRD" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "BRD" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "BRD" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-7, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "BTG" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "BTG" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "BTS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "BTS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "BTS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "CDT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "CDT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "CHAT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "CHAT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "CLOAK" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "CLOAK" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "CMT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "CMT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "CMT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "CND" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 0.000001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "CND" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "CND" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "CVC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "CVC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "CVC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "DASH" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "DASH" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.00001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "DATA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "DATA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "DENT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "DENT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "DGD" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "DGD" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.00001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "DLT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "DLT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "DLT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "DNT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "BTC", - "EDO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "EDO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "ELF" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "ELF" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "ENG" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "ENG" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-7, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "ENJ" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 0.000001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "ENJ" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "ENJ" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "EOS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "EOS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "USDT", - "EOS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 10 - } - }, - { - "pair": [ - "BNB", - "ETC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 1 - } - }, - { - "pair": [ - "ETH", - "ETC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "USDT", - "ETC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 10 - } - }, - { - "pair": [ - "BTC", - "EVX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "EVX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-7, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "FUEL" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "FUEL" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "FUN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "BNB", - "GNT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "GNT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "GNT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "GRS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "GRS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "GTO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "GTO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "GTO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "GVT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "GVT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "GXS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "GXS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "HSR" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "HSR" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "ICN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "BNB", - "ICX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "ICX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "ICX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "USDT", - "ICX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 10 - } - }, - { - "pair": [ - "BTC", - "INS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "INS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "IOST" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "IOST" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "IOTA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "USDT", - "IOTA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 10 - } - }, - { - "pair": [ - "BTC", - "IOTX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "IOTX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "KEY" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "KEY" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "KMD" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "KMD" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "LEND" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "LEND" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "LOOM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "LOOM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "LOOM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "LRC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "LRC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "LSK" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "LSK" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "LSK" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "LTC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.00001, - "price": 0.01, - "order": 1 - } - }, - { - "pair": [ - "ETH", - "LTC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.00001, - "order": 0.01 - } - }, - { - "pair": [ - "USDT", - "LTC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.00001, - "price": 0.01, - "order": 10 - } - }, - { - "pair": [ - "BTC", - "LUN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "LUN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "MANA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "MANA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "MCO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "MDA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "MDA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-7, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "MFT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 0.000001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "MFT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "MFT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "MOD" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "MOD" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "MTH" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "MTH" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "MTL" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "MTL" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "NANO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "NANO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "NANO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "NAS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "NAS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "NAS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "NAV" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "NAV" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "NAV" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "NCASH" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 0.000001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "NCASH" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "NCASH" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "NEBL" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "NEBL" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "NEBL" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "NEO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.001, - "order": 1 - } - }, - { - "pair": [ - "USDT", - "NEO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.001, - "order": 10 - } - }, - { - "pair": [ - "BTC", - "NPXS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "NPXS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "NXS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "NXS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "NXS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "OAX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "BNB", - "ONT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "ONT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "ONT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "USDT", - "ONT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.001, - "order": 10 - } - }, - { - "pair": [ - "BNB", - "OST" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 0.000001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "OST" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "OST" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "PIVX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "PIVX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "PIVX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "POA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "POA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "POA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "POE" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "POE" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "POWR" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "POWR" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "POWR" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "PPT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "PPT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "QKC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "QKC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "QLC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 0.000001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "QLC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "QLC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "QSP" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 0.000001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "QSP" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "QSP" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "QTUM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "USDT", - "QTUM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.001, - "order": 10 - } - }, - { - "pair": [ - "BNB", - "RCN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 0.000001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "RCN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "RCN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "RDN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "RDN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "RDN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-7, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "REP" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "REP" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "REP" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.00001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "REQ" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "REQ" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "RLC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "RLC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "RLC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "RPX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 0.000001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "RPX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "RPX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "SC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 0.000001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "SC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "SC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "SKY" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "SKY" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "SKY" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.00001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "SNT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "BNB", - "STEEM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "STEEM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "STEEM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "STORJ" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "STORJ" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-7, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "STORM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 0.000001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "STORM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "STORM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "SUB" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "SUB" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "SYS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "SYS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "SYS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "THETA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "THETA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "THETA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "TNB" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "TNB" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "TNT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "TNT" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "TRIG" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "TRIG" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "TRIG" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "TRX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "TRX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "USDT", - "TRX" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.1, - "price": 0.00001, - "order": 10 - } - }, - { - "pair": [ - "BNB", - "TUSD" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "TUSD" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "TUSD" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "USDT", - "TUSD" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 10 - } - }, - { - "pair": [ - "BTC", - "VEN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "VEN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "USDT", - "VEN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 10 - } - }, - { - "pair": [ - "BNB", - "VIA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "VIA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "VIA" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "VIB" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "BTC", - "VIBE" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "VIBE" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-7, - "order": 0.01 - } - }, - { - "pair": [ - "ETH", - "VIB" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "WABI" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "WABI" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "WABI" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "WAN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "WAN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "WAN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "WAVES" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "WAVES" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 1e-7, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "WAVES" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "WINGS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "WINGS" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-7, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "WPR" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "WPR" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "WTC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 1 - } - }, - { - "pair": [ - "BNB", - "XEM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "XEM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "XEM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "XLM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "XLM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "XLM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "USDT", - "XLM" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 10 - } - }, - { - "pair": [ - "BTC", - "XMR" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "XMR" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.00001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "XRP" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.00001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "XRP" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "XRP" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "USDT", - "XRP" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.1, - "price": 0.00001, - "order": 10 - } - }, - { - "pair": [ - "BTC", - "XVG" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "BNB", - "XZC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "XZC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "XZC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.000001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "YOYO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 0.000001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "YOYO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "YOYO" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "BTC", - "ZEC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "ZEC" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.00001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "ZEN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "ZEN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.000001, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "ZEN" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.001, - "price": 0.00001, - "order": 0.01 - } - }, - { - "pair": [ - "BNB", - "ZIL" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 0.000001, - "order": 1 - } - }, - { - "pair": [ - "BTC", - "ZIL" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.001 - } - }, - { - "pair": [ - "ETH", - "ZIL" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 1, - "price": 1e-8, - "order": 0.01 - } - }, - { - "pair": [ - "USDT", - "BNB" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.01, - "price": 0.0001, - "order": 10 - } - }, - { - "pair": [ - "USDT", - "ETH" - ], - "maxDecimals": 6, - "minimalOrder": { - "amount": 0.00001, - "price": 0.01, - "order": 10 - } - } - ] -} \ No newline at end of file diff --git a/Exchange/wrappers/coss.js b/Exchange/wrappers/coss.js deleted file mode 100644 index 346655af5..000000000 --- a/Exchange/wrappers/coss.js +++ /dev/null @@ -1,340 +0,0 @@ -// Source: https://github.com/coss-exchange/trading-api-wrapper-node-js/blob/master/index.js -// Documentation: https://api.coss.io/v1/spec - -const request = require('superagent'); -const querystring = require('querystring'); -const HttpMethod = { POST: 1, GET: 2, DELETE: 3 }; -const util = require('util'); - -const HOST_URL = "https://trade.coss.io/c/api/v1"; -const HOST_URL2 = "https://engine.coss.io/api/v1"; -const EXCHANGE_HOST = "https://exchange.coss.io/api"; - - -//WRAPPER STARTS HERE (Commenting out stuff that coss wrote which should be part of bot.js (the actual trading bot) rather than index.js (the wrapper core functionality)) -let Coss = (keyVaultAPI) => { - - //HTTPS Private Request - async function transmit_encrypted_request(method, url, payload) { - var payload_json_str = method == HttpMethod.GET ? querystring.stringify(payload) : JSON.stringify(payload) - var sign = await transmit_payload_signature_get(payload_json_str) - var req_headers = transmit_signed_header_get(sign) - - console.log(`sending ${payload_json_str} to ${url}`) - - if (method == HttpMethod.POST) { - let response = await request.post(url).set(req_headers).send(payload_json_str) - return (response.body); - - } else if (method == HttpMethod.DELETE) { - let response = await request.delete(url).set(req_headers).send(payload_json_str) - return (response.body); - - } else if (method == HttpMethod.GET) { - let response = await request.get(url).set(req_headers).query(payload_json_str) - return (response.body); - } - - } - - function transmit_signed_header_get(sign) { - var req_headers = { - 'Content-Type': 'application/json', - 'X-Requested-With': 'XMLHttpRequest', - 'Authorization': sign.Key, - 'Signature': sign.Sign, - } - return req_headers - } - - //AUTHBUILDER - async function transmit_payload_signature_get(payload_json_str) { - const signTransaction = util.promisify(keyVaultAPI.signTransaction) - return await signTransaction(payload_json_str) - } - - //HTTPS Public Request - async function publicRequest(url) { - let response = await request.get(url) - return response.body; - } - - - return { - //PLACE LIMIT ORDER - placeLimitOrder: async (params = {}) => { - if (!params.Symbol) { - return Promise.reject("placeLimitOrder(), You must supply a valid trading pair Symbol, e.g. 'COSS_ETH'!"); - } else if (params.Symbol && typeof params.Symbol !== 'string') { - return Promise.reject("placeLimitOrder(), You must supply a valid trading pair Symbol as a string, e.g. 'COSS_ETH'!"); - } else if (!params.Side) { - return Promise.reject("placeLimitOrder(), You must supply a valid Side, e.g. 'BUY' or 'SELL'!"); - } else if (params.Side && params.Side !== 'Buy' && params.Side !== 'Sell') { - return Promise.reject("placeLimitOrder(), You must supply a valid Side, e.g. 'BUY' or 'SELL'!"); - } else if (!params.Price || !params.Amount) { - return Promise.reject("placeLimitOrder(), You must supply a valid Price and Amount, e.g. Price: '0.00000034' or Amount: '123.00000000'!"); - //} else if (typeof params.Price !== 'number' || typeof params.Amount !== 'number') { - //return Promise.reject("placeLimitOrder(), You must supply a valid Price and Amount as a number, e.g. Price: '0.00000034' or Amount: '123.00000000'!"); - } - var now = new Date().getTime() - var query_params = { - 'order_symbol': params.Symbol, - 'order_price': params.Price.toString(), - 'order_side': params.Side, - 'order_size': params.Amount.toString(), - 'type': 'limit', - 'timestamp': now, - 'recvWindow': 5000 - } - let url = HOST_URL + "/order/add"; - return transmit_encrypted_request(HttpMethod.POST, url, query_params) - }, - - //PLACE MARKET ORDER - placeMarketOrder: async (params = {}) => { - if (!params.Symbol) { - return Promise.reject("placeMarketOrder(), You must supply a valid trading pair Symbol, e.g. 'COSS_ETH'!"); - } else if (params.Symbol && typeof params.Symbol !== 'string') { - return Promise.reject("placeMarketOrder(), You must supply a valid trading pair Symbol as a string, e.g. 'COSS_ETH'!"); - } else if (!params.Side) { - return Promise.reject("placeMarketOrder(), You must supply a valid Side, e.g. 'BUY' or 'SELL'!"); - } else if (params.Side && params.Side !== 'Buy' && params.Side !== 'Sell') { - return Promise.reject("placeMarketOrder(), You must supply a valid Side, e.g. 'BUY' or 'SELL'!"); - } else if (!params.Amount) { - return Promise.reject("placeMarketOrder(), You must supply a valid Amount, e.g. Amount: '123.00000000'!"); - } else if (typeof params.Amount !== 'number') { - return Promise.reject("placeMarketOrder(), You must supply a valid Amount as a number, e.g. Amount: '123.00000000'!"); - } - var now = new Date().getTime() - var query_params = { - 'order_symbol': params.Symbol, - 'order_side': params.Side, - 'order_size': params.Amount.toString(), - 'type': 'market', - 'timestamp': now, - 'recvWindow': 5000 - } - let url = HOST_URL + "/order/add"; - return transmit_encrypted_request(HttpMethod.POST, url, query_params) - }, - - //Get Account Balances - getAccountBalances: async (params = {}) => { - var now = new Date().getTime() - var query_params = { - 'recvWindow': 5000, - 'timestamp': now - } - let url = HOST_URL + "/account/balances"; - return transmit_encrypted_request(HttpMethod.GET, url, query_params) - }, - - //Get Account Details - getAccountDetails: async (params = {}) => { - var now = new Date().getTime() - var query_params = { - 'recvWindow': 5000, - 'timestamp': now - } - let url = HOST_URL + "/account/details"; - return transmit_encrypted_request(HttpMethod.GET, url, query_params) - }, - - //CANCEL ORDER BY ID # - cancelOrder: async (params = {}) => { - if (!params.ID) { - return Promise.reject("cancelOrder(), You must supply a valid order_ID to cancel, e.g. '9e5ae4dd-3369-401d-81f5-dff985e1c4e7'!"); - } else if (params.ID && typeof params.ID !== 'string') { - return Promise.reject("cancelOrder(), You must supply a valid order_ID to cancel as a string, e.g. '9e5ae4dd-3369-401d-81f5-dff985e1c4e7'!"); - } else if (!params.Symbol) { - return Promise.reject("cancelOrder(), You must supply a valid trading pair Symbol, e.g. 'COSS_ETH'!"); - } else if (params.Symbol && typeof params.Symbol !== 'string') { - return Promise.reject("cancelOrder(), You must supply a valid trading pair Symbol as a string, e.g. 'COSS_ETH'!"); - } - - var now = new Date().getTime() - var query_params = { - 'order_id': params.ID, - 'order_symbol': params.Symbol, - 'timestamp': now, - 'recvWindow': 5000 - } - let url = HOST_URL + "/order/cancel"; - return transmit_encrypted_request(HttpMethod.DELETE, url, query_params) - }, - - //GET ORDER DETAILS - getOrderDetails: async (params = {}) => { - if (!params.ID) { - return Promise.reject("getOrderDetails(), You must supply a valid order_ID to cancel, e.g. '9e5ae4dd-3369-401d-81f5-dff985e1c4e7'!"); - } else if (params.ID && typeof params.ID !== 'string') { - return Promise.reject("getOrderDetails(), You must supply a valid order_ID to cancel as a string, e.g. '9e5ae4dd-3369-401d-81f5-dff985e1c4e7'!"); - } - - var now = new Date().getTime() - var query_params = { - 'order_id': params.ID, - 'timestamp': now, - 'recvWindow': 5000 - } - let url = HOST_URL + "/order/details"; - return transmit_encrypted_request(HttpMethod.POST, url, query_params) - }, - - //GET OPEN ORDERS - getOpenOrders: async (params = {}) => { - if (!params.Limit) { - return Promise.reject("getOpenOrders(), You must supply a valid Limit for your open orders, e.g. '10'!"); - } else if (params.Limit && typeof params.Limit !== 'number') { - return Promise.reject("getOpenOrders(), You must supply a valid Limit as a number for your open orders, e.g. '10'!"); - } else if (!params.Symbol) { - return Promise.reject("getOpenOrders(), You must supply a valid trading pair Symbol, e.g. 'COSS_ETH'!"); - } else if (params.Symbol && typeof params.Symbol !== 'string') { - return Promise.reject("getOpenOrders(), You must supply a valid trading pair Symbol as a string, e.g. 'COSS_ETH'!"); - } - - var now = new Date().getTime() - var query_params = { - 'limit': params.Limit.toString(), - 'page': 0, - 'symbol': params.Symbol, - 'timestamp': now, - 'recvWindow': 5000 - } - let url = HOST_URL + "/order/list/open"; - return transmit_encrypted_request(HttpMethod.POST, url, query_params) - }, - - //GET COMPLETED ORDERS - getCompletedOrders: async (params = {}) => { - if (!params.Limit) { - return Promise.reject("getCompletedOrders(), You must supply a valid Limit for your open orders, e.g. '10'!"); - } else if (params.Limit && typeof params.Limit !== 'number') { - return Promise.reject("getCompletedOrders(), You must supply a valid Limit as a number for your open orders, e.g. '10'!"); - } else if (!params.Symbol) { - return Promise.reject("getCompletedOrders(), You must supply a valid trading pair Symbol, e.g. 'COSS_ETH'!"); - } else if (params.Symbol && typeof params.Symbol !== 'string') { - return Promise.reject("getCompletedOrders(), You must supply a valid trading pair Symbol as a string, e.g. 'COSS_ETH'!"); - } - - var now = new Date().getTime() - var query_params = { - 'limit': params.Limit.toString(), - 'page': 0, - 'symbol': params.Symbol, - 'timestamp': now, - 'recvWindow': 5000 - } - let url = HOST_URL + "/order/list/completed"; - return transmit_encrypted_request(HttpMethod.POST, url, query_params) - }, - - //GET ALL USER ORDERS - getAllOrders: async (params = {}) => { - if (!params.Limit) { - return Promise.reject("getAllOrders(), You must supply a valid Limit for your open orders, e.g. '10'!"); - } else if (params.Limit && typeof params.Limit !== 'number') { - return Promise.reject("getAllOrders(), You must supply a valid Limit as a number for your open orders, e.g. '10'!"); - } else if (!params.Symbol) { - return Promise.reject("getAllOrders(), You must supply a valid trading pair Symbol, e.g. 'COSS_ETH'!"); - } else if (params.Symbol && typeof params.Symbol !== 'string') { - return Promise.reject("getAllOrders(), You must supply a valid trading pair Symbol as a string, e.g. 'COSS_ETH'!"); - } else if (!params.ID) { - return Promise.reject("getAllOrders(), You must supply a valid account ID"); - } else if (params.ID && typeof params.ID !== 'string') { - return Promise.reject("getAllOrders(), You must supply a valid account ID as a string"); - } - - var now = new Date().getTime() - var query_params = { - 'symbol': params.Symbol, - 'from_id': params.ACCT_ID, - 'limit': params.Limit, - 'timestamp': now, - 'recvWindow': 5000 - } - let url = HOST_URL + "/order/list/all"; - return transmit_encrypted_request(HttpMethod.POST, url, query_params) - }, - - - //Public API Calls (don't need to be signed) - //get Market Price - getMarketPrice: async (params = {}) => { - if (!params.Symbol) { - return Promise.reject("getMarketPrice(), You must supply a valid trading pair Symbol, e.g. 'COSS_ETH'!"); - } else if (params.Symbol && typeof params.Symbol !== 'string') { - return Promise.reject("getMarketPrice(), You must supply a valid trading pair Symbol as a string, e.g. 'COSS_ETH'!"); - } - - let url = HOST_URL + "/market-price/" + '?symbol=' + params.Symbol; - - - return publicRequest(url); - }, - - //get Market Price - getPairDepth: async (params = {}) => { - if (!params.Symbol) { - return Promise.reject("getPairDepth(), You must supply a valid trading pair Symbol, e.g. 'COSS_ETH'!"); - } else if (params.Symbol && typeof params.Symbol !== 'string') { - return Promise.reject("getPairDepth(), You must supply a valid trading pair Symbol as a string, e.g. 'COSS_ETH'!"); - } - console.log(HOST_URL2 + "/dp" + '?symbol=' + params.Symbol); - let url = HOST_URL2 + "/dp" + '?symbol=' + params.Symbol; - - - return publicRequest(url); - }, - - //get Market Price - getMarketSides: async (params = {}) => { - if (!params.Symbol) { - return Promise.reject("getMarketSides(), You must supply a valid trading pair Symbol, e.g. 'COSS_ETH'!"); - } else if (params.Symbol && typeof params.Symbol !== 'string') { - return Promise.reject("getMarketSides(), You must supply a valid trading pair Symbol as a string, e.g. 'COSS_ETH'!"); - } - console.log(HOST_URL2 + "/dp" + '?symbol=' + params.Symbol); - let url = HOST_URL2 + "/dp" + '?symbol=' + params.Symbol; - - let pairDepth = await publicRequest(url); - let marketSides = [[pairDepth.bids[0][0], pairDepth.bids[0][1]], [pairDepth.asks[0][0], pairDepth.asks[0][1]]]; - - return (marketSides) - }, - - //get Exchange Info - getExchangeInfo: async () => { - console.log(HOST_URL + "/exchange-info"); - let url = HOST_URL + "/exchange-info"; - - return publicRequest(url); - }, - - //get Market Summary (NOT WORKING ATM) - getMarketSummary: async (params = {}) => { - if (!params.Symbol) { - return Promise.reject("getMarketSummary(), You must supply a valid trading pair Symbol, e.g. 'COSS_ETH'!"); - } else if (params.Symbol && typeof params.Symbol !== 'string') { - return Promise.reject("getMarketSummary(), You must supply a valid trading pair Symbol as a string, e.g. 'COSS_ETH'!"); - } - console.log(EXCHANGE_HOST + "/getmarketsummaries/" + '?symbol=' + params.Symbol); - let url = EXCHANGE_HOST + "/getmarketsummaries/" + '?symbol=' + params.Symbol; - - return publicRequest(url); - }, - - getTradeHistory: async (params = {}) => { - if (!params.Symbol) { - return Promise.reject("getTradeHistory(), You must supply a valid trading pair Symbol, e.g. 'COSS_ETH'!"); - } else if (params.Symbol && typeof params.Symbol !== 'string') { - return Promise.reject("getTradeHistory(), You must supply a valid trading pair Symbol as a string, e.g. 'COSS_ETH'!"); - } - console.log(HOST_URL2 + "/ht" + '?symbol=' + params.Symbol); - let url = HOST_URL2 + "/ht" + '?symbol=' + params.Symbol; - - return publicRequest(url); - } - } -}; -module.exports = exports = Coss; diff --git a/Exchange/wrappers/cossClient.js b/Exchange/wrappers/cossClient.js deleted file mode 100644 index 36a068946..000000000 --- a/Exchange/wrappers/cossClient.js +++ /dev/null @@ -1,178 +0,0 @@ -exports.newAPIClient = function newAPIClient(keyVaultAPI, logger) { - const Coss = require("./coss"); - const exchangeProperties = require('./cossProperties.json'); - let API = Coss(keyVaultAPI); - - let thisObject = { - getTicker: getTicker, - getOpenPositions: getOpenPositions, - getExecutedTrades: getExecutedTrades, - buy: buy, - sell: sell, - movePosition: movePosition, - getPublicTradeHistory: getPublicTradeHistory, - getExchangeProperties: getExchangeProperties, - isValidLot: isValidLot - }; - - return thisObject; - - function joinCurrencies(currencyA, currencyB) { - // If only one arg, then return the first - if (typeof currencyB !== 'string') { - return currencyA; - } - - return currencyA + '_' + currencyB; - } - - - /* - * Returns the properties for this exchange - */ - function getExchangeProperties() { - return exchangeProperties; - } - - /* - * Returns the price for a given pair of assets. - * The object returned is an array of trades: - * ticker = { - * bid, Number - * ask, Number - * last Number - * }; - */ - async function getTicker(pMarket, callBack) { - - let params = {} - params.Symbol = joinCurrencies(pMarket.assetB, pMarket.assetA) - try { - var response = await API.getPairDepth(params) - let ticker = { - bid: Number(response.bids[0][0]), - ask: Number(response.asks[0][0]), - last: Number((response.bids[0][0] + response.asks[0][0]) / 2) // TODO Pending review - }; - - callBack(global.DEFAULT_OK_RESPONSE.result, ticker) - } catch (error) { - callBack(global.DEFAULT_FAIL_RESPONSE.result) - } - } - - /* - * Returns the open positions ath the exchange for a given market and user account. - * The object returned is an array of positions: - * position = { - * id, - * type, - * rate, Number - * amountA, Number - * amountB, Number - * fee, (not required) Number - * datetime - * }; - */ - function getOpenPositions(pMarket, callBack) { - // Not implemented yet - callBack(global.DEFAULT_OK_RESPONSE) - } - - /* - * Returns the trades for a given order number. - * The object returned is an array of positions: - * position = { - * id, - * type, - * rate, Number - * amountA, Number - * amountB, Number - * fee, Number - * datetime - * }; - */ - function getExecutedTrades(pPositionId, callBack) { - // Not implemented yet - callBack(global.DEFAULT_OK_RESPONSE) - } - - /* - * Creates a new buy order. - * The orderNumber is returned. String - */ - function buy(pCurrencyA, pCurrencyB, pRate, pAmount, callBack) { - // Not implemented yet - callBack(global.DEFAULT_OK_RESPONSE) - } - - /* - * Creates a new sell order. - * The orderNumber is returned. String - */ - function sell(pCurrencyA, pCurrencyB, pRate, pAmount, callBack) { - // Not implemented yet - callBack(global.DEFAULT_OK_RESPONSE) - } - - /* - * Move an existing position to the new rate. - * The orderNumber is returned. String - */ - function movePosition(pPosition, pNewRate, pNewAmountB, callBack) { - // Not implemented yet - callBack(global.DEFAULT_OK_RESPONSE) - } - - /* - * Returns all the trade history from the Exchange since startTime to endTime orderd by tradeId. - * It's possible that the exchange doesn't support this method. - * The object returned is an array of trades: - * trade = { - * tradeID, String - * globalTradeID, String - * type, String - * rate, Number - * amountA, Number - * amountB, Number - * date Date - * }; - */ - async function getPublicTradeHistory(assetA, assetB, startTime, endTime, callBack) { - - let params = {} - params.Symbol = joinCurrencies(assetB, assetA) - try { - let trades = [] - var response = await API.getTradeHistory(params); - for (let i = 0; i < response.history.length; i++) { - let record = response.history[i] - let type - if (record.isBuyerMaker) { - type = "sell" - } else { - type = "buy" - } - - let trade = { - tradeID: record.id, - globalTradeID: record.id, - type: type, - rate: Number(record.price), - amount: Number(record.qty), - total: Number(record.price) * Number(record.qty), - date: new Date(record.time) - } - trades.push(trade); - } - trades.sort((a, b) => b.tradeID - a.tradeID); - callBack(global.DEFAULT_OK_RESPONSE, trades); - } catch (error) { - callBack(global.DEFAULT_FAIL_RESPONSE); - } - } - - function isValidLot(price, amount) { - return amount * price >= 0.0001; - } -} diff --git a/Exchange/wrappers/cossProperties.json b/Exchange/wrappers/cossProperties.json deleted file mode 100644 index 310e7b119..000000000 --- a/Exchange/wrappers/cossProperties.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "currencies": [ - "BTC", - "USDT" - ], - "assets": [ - "BTC", - "USDT" - ], - "markets": [ - { - "pair": [ - "BTC", - "USDT" - ], - "maxDecimals": 5, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - } - ] -} diff --git a/Exchange/wrappers/poloniex.js b/Exchange/wrappers/poloniex.js deleted file mode 100644 index 9a1a32b41..000000000 --- a/Exchange/wrappers/poloniex.js +++ /dev/null @@ -1,440 +0,0 @@ -// Source: https://github.com/premasagar/poloniex.js -// Documentation: https://poloniex.com/support/api/ - -module.exports = (function () { - 'use strict'; - - // Module dependencies - var request = require('request'), - nonce = require('nonce')(); - - // Constants - var version = '0.0.9', - PUBLIC_API_URL = 'https://poloniex.com/public', - PRIVATE_API_URL = 'https://poloniex.com/tradingApi', - USER_AGENT = 'poloniex.js ' + version; - //USER_AGENT = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0' - - // Helper methods - function joinCurrencies(currencyA, currencyB) { - // If only one arg, then return the first - if (typeof currencyB !== 'string') { - return currencyA; - } - - return currencyA + '_' + currencyB; - } - - // Constructor - function Poloniex(keyVaultAPI) { - // Generate headers signed by this user's key and secret. - // The secret is encapsulated and never exposed - this._getPrivateHeaders = function (parameters, next) { - var paramString, signature; - - // Convert to `arg1=foo&arg2=bar` - paramString = Object.keys(parameters).map(function (param) { - return encodeURIComponent(param) + '=' + encodeURIComponent(parameters[param]); - }).join('&'); - - keyVaultAPI.signTransaction(paramString, next); - }; - } - - // Currently, this fails with `Error: CERT_UNTRUSTED` - // Poloniex.STRICT_SSL can be set to `false` to avoid this. Use with caution. - // Will be removed in future, once this is resolved. - Poloniex.STRICT_SSL = true; - - // Customisable user agent string - Poloniex.USER_AGENT = USER_AGENT; - - // Prototype - Poloniex.prototype = { - constructor: Poloniex, - - // Make an API request - _request: function (options, callback) { - if (!('headers' in options)) { - options.headers = {}; - } - - options.json = true; - options.headers['User-Agent'] = Poloniex.USER_AGENT; - options.strictSSL = Poloniex.STRICT_SSL; - options.timeout = 60 * 1000; - - request(options, function (err, response, body) { - // Empty response - if (!err && (typeof body === 'undefined' || body === null)) { - err = 'Empty response'; - } - - callback(err, body); - }); - - return this; - }, - - // Make a public API request - _public: function (command, parameters, callback) { - var options; - - if (typeof parameters === 'function') { - callback = parameters; - parameters = {}; - } - - parameters || (parameters = {}); - parameters.command = command; - options = { - method: 'GET', - url: PUBLIC_API_URL, - qs: parameters - }; - - options.qs.command = command; - return this._request(options, callback); - }, - - // Make a private API request - _private: function (command, parameters, callback) { - var options; - - if (typeof parameters === 'function') { - callback = parameters; - parameters = {}; - } - - parameters || (parameters = {}); - parameters.command = command; - parameters.nonce = nonce(); - - options = { - method: 'POST', - url: PRIVATE_API_URL, - form: parameters - }; - - let headers = this._getPrivateHeaders(parameters, next) - - let thisObject = this - - function next(pHeaders, error) { - if (!error) { - options.headers = pHeaders; - return thisObject._request(options, callback); - } else { - callback(error); - } - - } - }, - - ///// - // PUBLIC METHODS - - returnTicker: function (callback) { - return this._public('returnTicker', callback); - }, - - return24hVolume: function (callback) { - return this._public('return24hVolume', callback); - }, - - returnOrderBook: function (currencyA, currencyB, callback) { - var currencyPair; - - if (typeof currencyB === 'function') { - currencyPair = currencyA; - callback = currencyB; - currencyB = null; - } - - else { - currencyPair = joinCurrencies(currencyA, currencyB); - } - - var parameters = { - currencyPair: currencyPair - }; - - return this._public('returnOrderBook', parameters, callback); - }, - - returnChartData: function (currencyA, currencyB, period, start, end, callback) { - var parameters = { - currencyPair: joinCurrencies(currencyA, currencyB), - period: period, - start: start, - end: end - }; - - return this._public('returnChartData', parameters, callback); - }, - - returnCurrencies: function (callback) { - return this._public('returnCurrencies', callback); - }, - - returnLoanOrders: function (currency, callback) { - return this._public('returnLoanOrders', { currency: currency }, callback); - }, - - returnTradeHistory: function (currencyA, currencyB, start, end, callback) { - if (arguments.length < 5) { - callback = start; - start = Date.now() / 1000 - 60 * 60; - end = Date.now() / 1000 + 60 * 60; // Some buffer in case of client/server time out of sync. - } - - var parameters = { - currencyPair: joinCurrencies(currencyA, currencyB), - start: start, - end: end - }; - - return this._public('returnTradeHistory', parameters, callback); - }, - - ///// - // PRIVATE METHODS - - returnBalances: function (callback) { - return this._private('returnBalances', {}, callback); - }, - - returnCompleteBalances: function (account, callback) { - var parameters = {}; - - if (typeof account === 'function') { - callback = account; - } - - else if (typeof account === 'string' && !!account) { - parameters.account = account; - } - - return this._private('returnCompleteBalances', parameters, callback); - }, - - returnDepositAddresses: function (callback) { - return this._private('returnDepositAddresses', {}, callback); - }, - - generateNewAddress: function (currency, callback) { - return this._private('generateNewAddress', { currency: currency }, callback); - }, - - returnDepositsWithdrawals: function (start, end, callback) { - return this._private('returnDepositsWithdrawals', { start: start, end: end }, callback); - }, - - // can be called with `returnOpenOrders('all', callback)` - returnOpenOrders: function (currencyA, currencyB, callback) { - var currencyPair; - - if (typeof currencyB === 'function') { - currencyPair = currencyA; - callback = currencyB; - currencyB = null; - } - - else { - currencyPair = joinCurrencies(currencyA, currencyB); - } - - var parameters = { - currencyPair: currencyPair - }; - - return this._private('returnOpenOrders', parameters, callback); - }, - - returnOrderTrades: function (orderNumber, callback) { - var parameters = { - orderNumber: orderNumber - }; - - return this._private('returnOrderTrades', parameters, callback); - }, - - buy: function (currencyA, currencyB, rate, amount, callback) { - var parameters = { - currencyPair: joinCurrencies(currencyA, currencyB), - rate: rate, - amount: amount - }; - - return this._private('buy', parameters, callback); - }, - - sell: function (currencyA, currencyB, rate, amount, callback) { - var parameters = { - currencyPair: joinCurrencies(currencyA, currencyB), - rate: rate, - amount: amount - }; - - return this._private('sell', parameters, callback); - }, - - cancelOrder: function (currencyA, currencyB, orderNumber, callback) { - var parameters = { - currencyPair: joinCurrencies(currencyA, currencyB), - orderNumber: orderNumber - }; - - return this._private('cancelOrder', parameters, callback); - }, - - moveOrder: function (orderNumber, rate, amount, callback) { - var parameters = { - orderNumber: orderNumber, - rate: rate, - amount: amount ? amount : null - }; - - return this._private('moveOrder', parameters, callback); - }, - - withdraw: function (currency, amount, address, callback) { - var parameters = { - currency: currency, - amount: amount, - address: address - }; - - return this._private('withdraw', parameters, callback); - }, - - returnFeeInfo: function (callback) { - return this._private('returnFeeInfo', {}, callback); - }, - - returnAvailableAccountBalances: function (account, callback) { - var parameters = {}; - - if (typeof account === 'function') { - callback = account; - } - - else if (typeof account === 'string' && !!account) { - parameters.account = account; - } - - return this._private('returnAvailableAccountBalances', parameters, callback); - }, - - returnTradableBalances: function (callback) { - return this._private('returnTradableBalances', {}, callback); - }, - - transferBalance: function (currency, amount, fromAccount, toAccount, callback) { - var parameters = { - currency: currency, - amount: amount, - fromAccount: fromAccount, - toAccount: toAccount - }; - - return this._private('transferBalance', parameters, callback); - }, - - returnMarginAccountSummary: function (callback) { - return this._private('returnMarginAccountSummary', {}, callback); - }, - - marginBuy: function (currencyA, currencyB, rate, amount, lendingRate, callback) { - var parameters = { - currencyPair: joinCurrencies(currencyA, currencyB), - rate: rate, - amount: amount, - lendingRate: lendingRate ? lendingRate : null - }; - - return this._private('marginBuy', parameters, callback); - }, - - marginSell: function (currencyA, currencyB, rate, amount, lendingRate, callback) { - var parameters = { - currencyPair: joinCurrencies(currencyA, currencyB), - rate: rate, - amount: amount, - lendingRate: lendingRate ? lendingRate : null - }; - - return this._private('marginSell', parameters, callback); - }, - - getMarginPosition: function (currencyA, currencyB, callback) { - var parameters = { - currencyPair: joinCurrencies(currencyA, currencyB) - }; - - return this._private('getMarginPosition', parameters, callback); - }, - - closeMarginPosition: function (currencyA, currencyB, callback) { - var parameters = { - currencyPair: joinCurrencies(currencyA, currencyB) - }; - - return this._private('closeMarginPosition', parameters, callback); - }, - - createLoanOffer: function (currency, amount, duration, autoRenew, lendingRate, callback) { - var parameters = { - currency: currency, - amount: amount, - duration: duration, - autoRenew: autoRenew, - lendingRate: lendingRate - }; - - return this._private('createLoanOffer', parameters, callback); - }, - - cancelLoanOffer: function (orderNumber, callback) { - var parameters = { - orderNumber: orderNumber - }; - - return this._private('cancelLoanOffer', parameters, callback); - }, - - returnOpenLoanOffers: function (callback) { - return this._private('returnOpenLoanOffers', {}, callback); - }, - - returnActiveLoans: function (callback) { - return this._private('returnActiveLoans', {}, callback); - }, - - returnLendingHistory: function (start, end, limit, callback) { - var parameters = { - start: start, - end: end, - limit: limit - }; - - return this._private('returnLendingHistory', parameters, callback); - }, - - toggleAutoRenew: function (orderNumber, callback) { - return this._private('toggleAutoRenew', { orderNumber: orderNumber }, callback); - } - - }; - - // Backwards Compatibility - Poloniex.prototype.getTicker = Poloniex.prototype.returnTicker; - Poloniex.prototype.get24hVolume = Poloniex.prototype.return24hVolume; - Poloniex.prototype.getOrderBook = Poloniex.prototype.returnOrderBook; - Poloniex.prototype.getTradeHistory = Poloniex.prototype.returnChartData; - Poloniex.prototype.myBalances = Poloniex.prototype.returnBalances; - Poloniex.prototype.myOpenOrders = Poloniex.prototype.returnOpenOrders; - Poloniex.prototype.myTradeHistory = Poloniex.prototype.returnTradeHistory; - - return Poloniex; -})(); diff --git a/Exchange/wrappers/poloniexClient.js b/Exchange/wrappers/poloniexClient.js deleted file mode 100644 index 34bc7a00f..000000000 --- a/Exchange/wrappers/poloniexClient.js +++ /dev/null @@ -1,348 +0,0 @@ -exports.newAPIClient = function newAPIClient(keyVaultAPI, logger) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - const MODULE_NAME = "poloniexClient"; - - const retry = require('../exchangeUtils').retry; - const includes = require('../exchangeUtils').includes; - const _ = require('lodash'); - const Poloniex = require("./poloniex"); - const exchangeProperties = require('./poloniexProperties.json'); - - const recoverableErrors = [ - 'SOCKETTIMEDOUT', - 'TIMEDOUT', - 'CONNRESET', - 'CONNREFUSED', - 'NOTFOUND', - '429', - '522', - '504', - '503', - '500', - '502', - 'Empty response', - 'Please try again in a few minutes.', - 'Nonce must be greater than', - 'Internal error. Please try again.', - 'Connection timed out. Please try again.', - 'ENOTFOUND', - 'ECONNREFUSED', - 'CONNREFUSED', - 'NOTFOUND', - 'ESOCKETTIMEDOUT', - 'ECONNRESET', - 'Connection timed out', - 'Connection Error', - 'Order not found, or you are not the person who placed it.', - 'ETIMEDOUT' - ]; - - let API = new Poloniex(keyVaultAPI); - - let thisObject = { - getTicker: getTicker, - getOpenPositions: getOpenPositions, - getExecutedTrades: getExecutedTrades, - buy: buy, - sell: sell, - movePosition: movePosition, - getPublicTradeHistory: getPublicTradeHistory, - getExchangeProperties: getExchangeProperties, - isValidLot: isValidLot - }; - - return thisObject; - - function joinCurrencies(currencyA, currencyB) { - // If only one arg, then return the first - if (typeof currencyB !== 'string') { - return currencyA; - } - - return currencyA + '_' + currencyB; - } - - - /* - * Returns the properties for this exchange - */ - function getExchangeProperties() { - return exchangeProperties; - } - - /* - * Returns the price for a given pair of assets. - * The object returned is an array of trades: - * ticker = { - * bid, Number - * ask, Number - * last Number - * }; - */ - function getTicker(pMarket, callBack) { - - const handle = (err, response) => { - let ticker; - let market = joinCurrencies(pMarket.assetA, pMarket.assetB); - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - ticker = { - bid: Number(response[market].highestBid), - ask: Number(response[market].lowestAsk), - last: Number(response[market].last) - }; - } - callBack(err, ticker); - }; - - const fetch = next => API.getTicker(analizeResponse(next)); - - retry(null, fetch, handle); - } - - /* - * Returns the open positions ath the exchange for a given market and user account. - * The object returned is an array of positions: - * position = { - * id, - * type, - * rate, Number - * amountA, Number - * amountB, Number - * fee, (not required) Number - * datetime - * }; - */ - function getOpenPositions(pMarket, callBack) { - - const handle = (err, response) => { - let exchangePositions = []; - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - for (let i = 0; i < response.length; i++) { - let openPosition = { - id: response[i].orderNumber, - type: response[i].type, - rate: Number(response[i].rate), - amountA: Number(response[i].total), - amountB: Number(response[i].amount), - date: (new Date(response[i].time)).valueOf() - }; - exchangePositions.push(openPosition); - } - } - callBack(err, exchangePositions); - }; - - const fetch = next => API.returnOpenOrders(pMarket.assetA, pMarket.assetB, analizeResponse(next)); - - retry(null, fetch, handle); - } - - /* - * Returns the trades for a given order number. - * The object returned is an array of positions: - * position = { - * id, - * type, - * rate, Number - * amountA, Number - * amountB, Number - * fee, Number - * datetime - * }; - */ - function getExecutedTrades(pPositionId, callBack) { - - const handle = (err, response) => { - let trades = []; - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - for (let i = 0; i < response.length; i++) { - let trade = { - id: response[i].tradeID, - type: response[i].type, - rate: Number(response[i].rate), - amountA: Number(response[i].total), - amountB: Number(response[i].amount), - fee: Number(response[i].fee), - date: (new Date(response[i].date)).valueOf() - } - trades.push(trade); - } - } else if (err.result === global.CUSTOM_OK_RESPONSE.result) { - // No trades found at the exchange for the position, but returning empy trades object. - err = global.DEFAULT_OK_RESPONSE; - } - callBack(err, trades); - }; - - const fetch = next => API.returnOrderTrades(pPositionId, analizeResponse(next)); - - retry(null, fetch, handle); - } - - /* - * Creates a new buy order. - * The orderNumber is returned. String - */ - function buy(pCurrencyA, pCurrencyB, pRate, pAmount, callBack) { - - const handle = (err, response) => { - let orderNumber; - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - orderNumber = response.orderNumber; - } - callBack(err, orderNumber); - }; - - const fetch = next => API.buy(pCurrencyA, pCurrencyB, pRate, pAmount, analizeResponse(next)); - - retry(null, fetch, handle); - - } - - /* - * Creates a new sell order. - * The orderNumber is returned. String - */ - function sell(pCurrencyA, pCurrencyB, pRate, pAmount, callBack) { - - const handle = (err, response) => { - let orderNumber; - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - orderNumber = response.orderNumber; - } - callBack(err, orderNumber); - }; - - const fetch = next => API.sell(pCurrencyA, pCurrencyB, pRate, pAmount, analizeResponse(next)); - - retry(null, fetch, handle); - } - - /* - * Move an existing position to the new rate. - * The orderNumber is returned. String - */ - function movePosition(pPosition, pNewRate, pNewAmountB, callBack) { - - const handle = (err, response) => { - let orderNumber; - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - orderNumber = response.orderNumber; - } - callBack(err, orderNumber); - }; - - const fetch = next => API.moveOrder(pPosition.id, pNewRate, pNewAmountB, analizeResponse(next)); - - retry(null, fetch, handle); - } - - /* - * Returns all the trade history from the Exchange since startTime to endTime orderd by tradeId. - * It's possible that the exchange doesn't support this method. - * The object returned is an array of trades: - * trade = { - * tradeID, String - * globalTradeID, String - * type, String - * rate, Number - * amountA, Number - * amountB, Number - * date Date - * }; - */ - function getPublicTradeHistory(assetA, assetB, startTime, endTime, callBack) { - - const handle = (err, response) => { - let trades = []; - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - for (let i = 0; i < response.length; i++) { - let trade = { - tradeID: response[i].tradeID, - globalTradeID: response[i].globalTradeID, - type: response[i].type, - rate: Number(response[i].rate), - total: Number(response[i].total), - amount: Number(response[i].amount), - date: new Date(response[i].date) - } - trades.push(trade); - } - } - callBack(err, trades); - }; - - const fetch = next => API.returnTradeHistory(assetA, assetB, startTime, endTime, analizeResponse(next)); - - retry(null, fetch, handle); - } - - function isValidLot(price, amount) { - return amount * price >= 0.0001; - } - - function analizeResponse(callBack) { - - return (exchangeErr, exchangeResponse) => { - let error; - - /* This function analizes the different situations we might encounter trying to access Poloniex and returns appropiate standard errors. */ - - let stringExchangeErr = JSON.stringify(exchangeErr); - let stringExchangeResponse = JSON.stringify(exchangeResponse); - - try { - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] analizeResponse -> exchangeErr = " + stringExchangeErr); } - if (LOG_FILE_CONTENT === true) { logger.write(MODULE_NAME, "[INFO] analizeResponse -> exchangeResponse = " + stringExchangeResponse); } - - if (exchangeErr) { - error = global.DEFAULT_FAIL_RESPONSE; - - if (includes(exchangeErr.code, recoverableErrors)) { - error.notFatal = true; - } - } else if (!exchangeResponse || exchangeResponse === undefined) { - error = { - result: global.DEFAULT_FAIL_RESPONSE.result, - message: 'Empty response', - notFatal: true - }; - } else if (includes(exchangeResponse.error, ['Please complete the security check to proceed.'])) { - error = { - result: global.DEFAULT_FAIL_RESPONSE.result, - message: 'The IP has been flagged by CloudFlare.' - }; - } else if (includes(exchangeResponse.error, [''])) { - error = { - result: global.DEFAULT_FAIL_RESPONSE.result, - message: exchangeResponse - }; - } else if (includes(exchangeResponse.error, ['Not enough'])) { - error = { - result: global.DEFAULT_RETRY_RESPONSE.result, - message: exchangeResponse.error - }; - } else if (includes(exchangeResponse.error, ['Order not found, or you are not the person who placed it.'])) { - error = { - result: global.CUSTOM_OK_RESPONSE.result, - message: exchangeResponse.error - }; - } else if (exchangeResponse.error) { - error = { - result: global.DEFAULT_FAIL_RESPONSE.result, - message: exchangeResponse.error - }; - } - - return callBack(error, exchangeResponse); - - } catch (err) { - logger.write(MODULE_NAME, "[ERROR] analizeResponse -> err.message = " + err.message); - return callBack(global.DEFAULT_FAIL_RESPONSE, exchangeResponse); - } - } - } - -} diff --git a/Exchange/wrappers/poloniexProperties.json b/Exchange/wrappers/poloniexProperties.json deleted file mode 100644 index a5716ba3b..000000000 --- a/Exchange/wrappers/poloniexProperties.json +++ /dev/null @@ -1,3513 +0,0 @@ -{ - "currencies": ["BTC", "ETH", "XMR", "USDT"], - "assets": [ - "1CR", "ABY", "AC", "ACH", "ADN", "AEON", "AERO", "AIR", "AMP", "APH", - "ARCH", "AUR", "AXIS", "BALLS", "BANK", "BBL", "BBR", "BCC", "BCH", "BCN", - "BCY", "BDC", "BDG", "BELA", "BITCNY", "BITS", "BITUSD", "BLK", "BLOCK", - "BLU", "BNS", "BONES", "BOST", "BTC", "BTCD", "BTCS", "BTM", "BTS", - "BURN", "BURST", "C2", "CACH", "CAI", "CC", "CCN", "CGA", "CHA", "CINNI", - "CLAM", "CNL", "CNMT", "CNOTE", "COMM", "CON", "CORG", "CRYPT", "CURE", - "CVC", "CYC", "DAO", "DASH", "DCR", "DGB", "DICE", "DIEM", "DIME", "DIS", "DNS", - "DOGE", "DRKC", "DRM", "DSH", "DVK", "EAC", "EBT", "ECC", "EFL", "EMC2", - "EMO", "ENC", "ETC", "ETH", "eTOK", "EXE", "EXP", "FAC", "FCN", "FCT", - "FIBRE", "FLAP", "FLDC", "FLO", "FLT", "FOX", "FRAC", "FRK", "FRQ", "GNO", - "FVZ", "FZ", "FZN", "GAME", "GAP", "GAS", "GDN", "GEMZ", "GEO", "GIAR", "GLB", - "GML", "GNS", "GNT", "GOLD", "GPC", "GPUC", "GRC", "GRCX", "GRS", "GUE", "H2O", - "HIRO", "HOT", "HUC", "HUGE", "HVC", "HYP", "HZ", "IFC", "INDEX", "IOC", - "ITC", "IXC", "JLH", "JPC", "JUG", "KDC", "KEY", "LBC", "LC", "LCL", - "LEAF", "LGC", "LOL", "LOVE", "LQD", "LSK", "LTBC", "LTC", "LTCX", - "MAID", "MAST", "MAX", "MCN", "MEC", "METH", "MIL", "MIN", "MINT", "MMC", - "MMNXT", "MMXIV", "MNTA", "MON", "MRC", "MRS", "MTS", "MUN", "MYR", - "MZC", "N5X", "NAS", "NAUT", "NAV", "NBT", "NEOS", "NL", "NMC", "NOBL", - "NOTE", "NOXT", "NRS", "NSR", "NTX", "NXT", "NXTI", "OMG", "OMNI", "OPAL", - "PAND", "PASC", "PAWN", "PIGGY", "PINK", "PLX", "PMC", "POT", "PPC", "PRC", - "PRT", "PTS", "Q2C", "QBK", "QCN", "QORA", "QTL", "RADS", "RBY", "RDD", "REP", - "RIC", "RZR", "SBD", "SC", "SDC", "SHIBE", "SHOPX", "SILK", "SJCX", - "SLR", "SMC", "SOC", "SPA", "SQL", "SRCC", "SRG", "SSD", "STEEM", "STR", - "SUM", "SUN", "SWARM", "SXC", "SYNC", "SYS", "TAC", "TOR", "TRUST", - "TWE", "UIS", "ULTC", "UNITY", "URO", "USDE", "USDT", "UTC", "UTIL", - "UVC", "VIA", "VOOT", "VOX", "VRC", "VTC", "WC", "WDC", "WIKI", "WOLF", - "X13", "XAI", "XAP", "XBC", "XC", "XCH", "XCN", "XCP", "XCR", "XDN", - "XDP", "XEM", "XHC", "XLB", "XMG", "XMR", "XPB", "XPM", "XRP", "XSI", - "XST", "XSV", "XUSD", "XVC", "XXC", "BCH", "YACC", "YANG", "YC", "YIN", "ZEC", - "ZRX" - ], - "markets": [ - { - "pair": [ - "BTC", - "1CR" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "ABY" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "AC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "ACH" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "ADN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "AEON" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "AERO" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "AIR" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "AMP" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "APH" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "ARCH" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "AUR" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "AXIS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BALLS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BANK" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BBL" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BBR" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BCC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BCN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BCH" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BCY" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BDC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BDG" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BELA" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BITCNY" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BITS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BITUSD" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BLK" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BLOCK" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BLU" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BNS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BONES" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BOST" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BTCD" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BTCS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BTM" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BTS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BURN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "BURST" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "C2" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CACH" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CAI" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CCN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CGA" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CHA" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CINNI" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CLAM" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CNL" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CNMT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CNOTE" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "COMM" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CON" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CORG" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CRYPT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CURE" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CVC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "CYC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "DAO" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "DASH" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "DCR" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "DGB" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "DICE" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "DIEM" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "DIME" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "DIS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "DNS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "DOGE" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "DRKC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "DRM" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "DSH" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "DVK" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "EAC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "EBT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "ECC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "EFL" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "EMC2" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "EMO" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "ENC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "ETC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "ETH" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "eTOK" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "EXE" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "EXP" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "FAC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "FCN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "FCT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "FIBRE" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "FLAP" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "FLDC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "FLO" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "FLT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "FOX" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "FRAC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "FRK" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "FRQ" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "FVZ" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "FZ" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "FZN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GAME" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GAP" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GAS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GDN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GEMZ" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GEO" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GIAR" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GLB" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GML" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GNS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GOLD" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GPC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GPUC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GRC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GRCX" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GRS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "GUE" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "H2O" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "HIRO" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "HOT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "HUC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "HUGE" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "HVC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "HYP" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "HZ" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "IFC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "INDEX" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "IOC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "ITC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "IXC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "JLH" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "JPC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "JUG" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "KDC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "KEY" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "LBC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "LC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "LCL" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "LEAF" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "LGC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "LOL" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "LOVE" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "LQD" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "LSK" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "LTBC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "LTC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "LTCX" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MAID" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MAST" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MAX" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MCN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MEC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "METH" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MIL" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MIN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MINT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MMC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MMNXT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MMXIV" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MNTA" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MON" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MRC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MRS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MTS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MUN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MYR" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "MZC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "N5X" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "NAS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "NAUT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "NAV" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "NBT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "NEOS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "NL" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "NMC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "NOBL" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "NOTE" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "NOXT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "NRS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "NSR" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "NTX" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "NXT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "NXTI" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "OMG" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "OMNI" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "OPAL" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "PAND" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "PASC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "PAWN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "PIGGY" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "PINK" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "PLX" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "PMC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "POT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "PPC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "PRC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "PRT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "PTS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "Q2C" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "QBK" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "QCN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "QORA" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "QTL" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "RADS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "RBY" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "RDD" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "REP" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "RIC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "RZR" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SBD" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SDC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SHIBE" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SHOPX" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SILK" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SJCX" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SLR" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SMC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SOC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SPA" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SQL" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SRCC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SRG" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SSD" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "STEEM" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "STR" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SUM" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SUN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SWARM" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SXC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SYNC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "SYS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "TAC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "TOR" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "TRUST" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "TWE" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "UIS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "ULTC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "UNITY" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "URO" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "USDE" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "USDT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "UTC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "UTIL" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "UVC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "VIA" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "VOOT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "VOX" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "VRC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "VTC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "WC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "WDC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "WIKI" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "WOLF" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "X13" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XAI" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XAP" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XBC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XCH" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XCN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XCP" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XCR" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XDN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XDP" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XEM" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XHC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XLB" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XMG" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XMR" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XPB" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XPM" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XRP" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XSI" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XST" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XSV" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XUSD" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XVC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "XXC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "YACC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "YANG" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "YC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "YIN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "ZEC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "BTC", - "ZRX" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "USDT", - "BTC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "USDT", - "BCH" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "USDT", - "DASH" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "USDT", - "ETC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "USDT", - "ETH" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "USDT", - "LTC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "USDT", - "NXT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "USDT", - "REP" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "USDT", - "STR" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "USDT", - "XMR" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "USDT", - "XRP" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "USDT", - "ZEC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "ETH", - "CVC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "ETH", - "ETC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "ETH", - "BCH" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "ETH", - "GAS" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "ETH", - "GNO" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "ETH", - "GNT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "ETH", - "LSK" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "ETH", - "OMG" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "ETH", - "REP" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "ETH", - "STEEM" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "ETH", - "ZEC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "ETH", - "ZRX" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "XMR", - "BCN" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "XMR", - "BLK" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "XMR", - "BTCD" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "XMR", - "DASH" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "XMR", - "LTC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "XMR", - "MAID" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "XMR", - "NXT" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - }, - { - "pair": [ - "XMR", - "ZEC" - ], - "maxDecimals": 8, - "minimalOrder": { - "amount": 0.0001, - "unit": "asset" - } - } - ] -} \ No newline at end of file diff --git a/Project.njsproj b/Project.njsproj index 79b200eb5..74198b26c 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -53,7 +53,6 @@ Code - diff --git a/SensorBotProcessMainLoop.js b/SensorBotProcessMainLoop.js index 7ce23337c..e8de93346 100644 --- a/SensorBotProcessMainLoop.js +++ b/SensorBotProcessMainLoop.js @@ -144,7 +144,7 @@ const UTILITIES = require(ROOT_DIR + 'CloudUtilities'); const STATUS_REPORT = require(ROOT_DIR + 'StatusReport'); - const EXCHANGE_API = require(ROOT_DIR + 'Exchange/ExchangeAPI'); + const EXCHANGE_API = require('@superalgos/exchangegateway.js'); const STATUS_DEPENDENCIES = require(ROOT_DIR + 'StatusDependencies'); /* We define the datetime for the process that we are running now. This will be the official processing time for both the infraestructure and the bot. */ diff --git a/TradingBotProcessMainLoop.js b/TradingBotProcessMainLoop.js index 610635efb..277874228 100644 --- a/TradingBotProcessMainLoop.js +++ b/TradingBotProcessMainLoop.js @@ -163,7 +163,7 @@ /* We define here all the modules that the rest of the infraestructure, including the bots themselves can consume. */ const UTILITIES = require(ROOT_DIR + 'CloudUtilities'); - const EXCHANGE_API = require(ROOT_DIR + 'Exchange/ExchangeAPI'); + const EXCHANGE_API = require('@superalgos/exchangegateway.js'); const CONTEXT = require(ROOT_DIR + 'Context'); const ASSISTANT = require(ROOT_DIR + 'Assistant'); const STATUS_REPORT = require(ROOT_DIR + 'StatusReport'); diff --git a/package-lock.json b/package-lock.json index e8e2796f6..8a9b5bfc4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,39 @@ { - "name": "CloneExecutor", + "name": "@superalgos/clone-executor", "version": "1.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { + "@superalgos/exchangegateway.js": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@superalgos/exchangegateway.js/-/exchangegateway.js-0.0.1.tgz", + "integrity": "sha512-RgMtDIPayDu2B7+9z/F/FwFcULVmoWGCrXmx63vJFzePmzsaVhtUisZC/qc2b6tbj88VCW1qLiwGh3D55Q7rAA==", + "requires": { + "apollo-boost": "0.1.16", + "assert": "1.4.1", + "axios": "0.18.0", + "azure-storage": "2.10.2", + "dotenv": "6.2.0", + "graphql": "14.0.2", + "jsonwebtoken": "8.4.0", + "lodash": "4.17.11", + "nodemailer": "4.6.8", + "nonce": "1.0.4", + "querystring": "0.2.0", + "retry": "0.12.0", + "superagent": "5.0.2", + "underscore": "1.9.1", + "winston": "3.1.0" + } + }, "@superalgos/mqservice": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/@superalgos/mqservice/-/mqservice-0.0.9.tgz", - "integrity": "sha512-YH4BrDAE1+WmxBLu2JeVXzp/QiZwaKLLe6M+bh6ErliNGvGSOoB36/P5Vgmw6MDU81y6OU+hn5LqoRzESBW/CQ==" + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@superalgos/mqservice/-/mqservice-0.0.12.tgz", + "integrity": "sha1-XOfm592AbBFLemFzkO10plDcwos=", + "requires": { + "chai": "4.2.0", + "mocha": "6.0.2" + } }, "@types/async": { "version": "2.0.49", @@ -31,6 +57,24 @@ "json-schema-traverse": "0.3.1" } }, + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha1-V9NbhoboUeLMBMQD8cACA5dqGBM=" + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "requires": { + "color-convert": "1.9.3" + } + }, "apollo-boost": { "version": "0.1.16", "resolved": "https://registry.npmjs.org/apollo-boost/-/apollo-boost-0.1.16.tgz", @@ -139,6 +183,34 @@ "fclone": "1.0.11" } }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "requires": { + "sprintf-js": "1.0.3" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -160,6 +232,16 @@ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha1-5gtrDo8wG9l+U3UhW9pAbIURjAs=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, "async": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", @@ -173,6 +255,11 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=" + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -217,6 +304,61 @@ } } }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } + } + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -226,6 +368,47 @@ "tweetnacl": "0.14.5" } }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=", + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=" + }, "browserify-mime": { "version": "1.2.9", "resolved": "https://registry.npmjs.org/browserify-mime/-/browserify-mime-1.2.9.tgz", @@ -236,16 +419,120 @@ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=" + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha1-dgqnLPION5XoSxKHfODoNzeqKeU=", + "requires": { + "assertion-error": "1.1.0", + "check-error": "1.0.2", + "deep-eql": "3.0.1", + "get-func-name": "2.0.0", + "pathval": "1.1.0", + "type-detect": "4.0.8" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha1-NIQi2+gtgAswIu709qwQvy5NG0k=", + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + } + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, "color": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", @@ -309,16 +596,45 @@ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, "cookiejar": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=", + "requires": { + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.7.0", + "shebang-command": "1.2.0", + "which": "1.3.1" + }, + "dependencies": { + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha1-eQp89v6lRZuslhELKbYEEtyP+Ws=" + } + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -335,11 +651,79 @@ "ms": "2.0.0" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha1-38lARACtHI/gI+faHfHBR8S0RN8=", + "requires": { + "type-detect": "4.0.8" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", + "requires": { + "object-keys": "1.1.0" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" + }, "diagnostics": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", @@ -350,6 +734,11 @@ "kuler": "1.0.1" } }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=" + }, "dotenv": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", @@ -381,16 +770,197 @@ "env-variable": "0.0.5" } }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=", + "requires": { + "once": "1.4.0" + } + }, "env-variable": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" }, + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha1-rIYUX91QmdjdSVWMy6Lq+biOJOk=", + "requires": { + "es-to-primitive": "1.2.0", + "function-bind": "1.1.1", + "has": "1.0.3", + "is-callable": "1.1.4", + "is-regex": "1.0.4", + "object-keys": "1.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha1-7fckeAM0VujdqO8J4ArZZQcH83c=", + "requires": { + "is-callable": "1.1.4", + "is-date-object": "1.0.1", + "is-symbol": "1.0.2" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=" + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=", + "requires": { + "cross-spawn": "6.0.5", + "get-stream": "4.1.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "requires": { + "homedir-polyfill": "1.0.3" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } + } + }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -421,6 +991,61 @@ "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "requires": { + "locate-path": "3.0.0" + } + }, + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "requires": { + "detect-file": "1.0.0", + "is-glob": "3.1.0", + "micromatch": "3.1.10", + "resolve-dir": "1.0.1" + } + }, + "flat": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", + "integrity": "sha1-CQvsiwXjnLowl0fx1YjwTbr5jbI=", + "requires": { + "is-buffer": "2.0.3" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha1-Ts8/z3ScvR5HJonhCaxmJhol5yU=" + } + } + }, "follow-redirects": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz", @@ -429,6 +1054,11 @@ "debug": "3.1.0" } }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -459,6 +1089,47 @@ "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==" }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "requires": { + "map-cache": "0.2.2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=" + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=" + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=", + "requires": { + "pump": "3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -467,6 +1138,41 @@ "assert-plus": "1.0.0" } }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.1", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=", + "requires": { + "global-prefix": "1.0.2", + "is-windows": "1.0.2", + "resolve-dir": "1.0.1" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "requires": { + "expand-tilde": "2.0.2", + "homedir-polyfill": "1.0.3", + "ini": "1.3.5", + "is-windows": "1.0.2", + "which": "1.3.1" + } + }, "graphql": { "version": "14.0.2", "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.0.2.tgz", @@ -488,6 +1194,11 @@ "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.0.tgz", "integrity": "sha512-9FD6cw976TLLf9WYIUPCaaTpniawIjHWZSwIRZSjrfufJamcXbVVYfN2TWvJYbw0Xf2JjYbl1/f2+wDnBVw3/w==" }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4=" + }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -502,6 +1213,53 @@ "har-schema": "2.0.0" } }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "requires": { + "function-bind": "1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, "hash-base": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", @@ -511,6 +1269,19 @@ "safe-buffer": "5.1.2" } }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=" + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha1-dDKYzvTlrz4ZQWH7rcwhUdOgWOg=", + "requires": { + "parse-passwd": "1.0.0" + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -521,11 +1292,48 @@ "sshpk": "1.14.2" } }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, "inherits": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=" + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI=" + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, "is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", @@ -536,21 +1344,146 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha1-HhrfIZ4e62hNaR+dagX/DTCiTXU=" + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=", + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=" + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "requires": { + "isobject": "3.0.1" + } + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "1.0.3" + } + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha1-oFX2rlcZLK7jKeeoYBGLSXqVDzg=", + "requires": { + "has-symbols": "1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=" + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -561,6 +1494,15 @@ "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==" }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha1-6u1lbsg0TxD1J8a/obbiJE3hZ9E=", + "requires": { + "argparse": "1.0.10", + "esprima": "4.0.1" + } + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -648,6 +1590,11 @@ "safe-buffer": "5.1.2" } }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" + }, "kuler": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", @@ -656,6 +1603,23 @@ "colornames": "1.1.1" } }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha1-bvXS32DlL4LrIopMNz6NHzlyU88=", + "requires": { + "invert-kv": "2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "requires": { + "p-locate": "3.0.0", + "path-exists": "3.0.0" + } + }, "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", @@ -696,6 +1660,14 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=", + "requires": { + "chalk": "2.4.2" + } + }, "logform": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/logform/-/logform-1.10.0.tgz", @@ -715,6 +1687,27 @@ } } }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha1-fVg6cwZDTAVf5HSw9FB45uG0uSo=", + "requires": { + "p-defer": "1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "1.0.1" + } + }, "md5.js": { "version": "1.3.4", "resolved": "http://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", @@ -724,11 +1717,41 @@ "inherits": "2.0.1" } }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha1-Rhr0l7xK4JYIzbLmDu+2m/90QXg=", + "requires": { + "map-age-cleaner": "0.1.3", + "mimic-fn": "2.1.0", + "p-is-promise": "2.0.0" + } + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=", + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, "mime": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", @@ -747,11 +1770,132 @@ "mime-db": "1.36.0" } }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.0.2.tgz", + "integrity": "sha1-zcGm/fZkcsB5tWBbrFnSmAdwLSw=", + "requires": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "findup-sync": "2.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.12.0", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "ms": "2.1.1", + "node-environment-flags": "1.0.4", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "12.0.5", + "yargs-parser": "11.1.1", + "yargs-unparser": "1.5.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=", + "requires": { + "ms": "2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=" + } + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=", + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=" + }, + "node-environment-flags": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.4.tgz", + "integrity": "sha1-C3hKZVFCa/wW07IghCTcvCsv8Dg=", + "requires": { + "object.getownpropertydescriptors": "2.0.3" + } + }, "nodemailer": { "version": "4.6.8", "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.6.8.tgz", @@ -762,21 +1906,192 @@ "resolved": "https://registry.npmjs.org/nonce/-/nonce-1.0.4.tgz", "integrity": "sha1-7nMCrejBvvR28wG4yR9cxRpIdhI=" }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "requires": { + "path-key": "2.0.1" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "object-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha1-Eb0iNI3S4JagRasG9shbzDQPoDI=" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "3.0.1" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=", + "requires": { + "define-properties": "1.1.3", + "function-bind": "1.1.1", + "has-symbols": "1.0.0", + "object-keys": "1.1.0" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.13.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, "one-time": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha1-qAKm7hfyTBBIOrmTVxnO9O0Wvxo=", + "requires": { + "execa": "1.0.0", + "lcid": "2.0.0", + "mem": "4.3.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-is-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha1-dVTj1XIQmofh8/U/an2F0bGU9MU=" + }, + "p-limit": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha1-QXyZQeYCepq8ulCS3SkE4lW1+8I=", + "requires": { + "p-try": "2.2.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "requires": { + "p-limit": "2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=" + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", @@ -787,6 +2102,15 @@ "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=", + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -815,6 +2139,25 @@ "util-deprecate": "1.0.2" } }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha1-eC4NglwMWjuzlzH4Tv7mt0Lmsc4=" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, "request": { "version": "2.88.0", "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", @@ -842,6 +2185,35 @@ "uuid": "3.3.2" } }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "requires": { + "expand-tilde": "2.0.2", + "global-modules": "1.0.0" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=" + }, "retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", @@ -852,6 +2224,14 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "0.1.15" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -867,6 +2247,50 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==" }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -875,6 +2299,146 @@ "is-arrayish": "0.3.2" } }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha1-ZJIufFZbDhQgS6GqfWlkJ40lGC0=", + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.1.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=", + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha1-cuLMNAlVQ+Q7LGKyxMENSpBU8lk=", + "requires": { + "atob": "2.1.2", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "requires": { + "extend-shallow": "3.0.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, "sshpk": { "version": "1.14.2", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", @@ -896,11 +2460,57 @@ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, "superagent": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.0.2.tgz", @@ -971,6 +2581,14 @@ } } }, + "supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha1-ds/nQs8fQbubHCmtAwaMBbTA5Ao=", + "requires": { + "has-flag": "3.0.0" + } + }, "symbol-observable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", @@ -981,6 +2599,44 @@ "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", @@ -1009,11 +2665,94 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "optional": true }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=" + }, "underscore": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=" + }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", @@ -1047,6 +2786,27 @@ "extsprintf": "1.3.0" } }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=", + "requires": { + "string-width": "2.1.1" + } + }, "winston": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/winston/-/winston-3.1.0.tgz", @@ -1140,6 +2900,53 @@ } } }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, "xml2js": { "version": "0.2.8", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.2.8.tgz", @@ -1153,6 +2960,49 @@ "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=" + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha1-BfWZe2CWR7ZPZrgeO0sQo2jnrRM=", + "requires": { + "cliui": "4.1.0", + "decamelize": "1.2.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.3", + "os-locale": "3.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "4.0.0", + "yargs-parser": "11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha1-h5oIZZc7yp9rq1y987HGfsfTvPQ=", + "requires": { + "camelcase": "5.3.1", + "decamelize": "1.2.0" + } + }, + "yargs-unparser": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz", + "integrity": "sha1-8rsqfoPLyHu5XI5XKCigbJrdbg0=", + "requires": { + "flat": "4.1.0", + "lodash": "4.17.11", + "yargs": "12.0.5" + } + }, "zen-observable": { "version": "0.8.9", "resolved": "https://registry.npmjs.org/zen-observable/-/zen-observable-0.8.9.tgz", diff --git a/package.json b/package.json index 2495394c9..89732fff0 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "author": "Luis-Fernando-Molina", "license": "ISC", "dependencies": { - "@superalgos/mqservice": "0.0.9", + "@superalgos/exchangegateway.js": "0.0.2", + "@superalgos/mqservice": "0.0.12", "apollo-boost": "^0.1.16", "assert": "^1.4.1", "axios": "^0.18.0",