diff --git a/CloudVM/PoloniexAPIClient.js b/CloudVM/PoloniexAPIClient.js
index 4267f0eb6..2a1aecfc3 100644
--- a/CloudVM/PoloniexAPIClient.js
+++ b/CloudVM/PoloniexAPIClient.js
@@ -82,8 +82,14 @@
+ pMarketAssetA + "/"
+ pMarketAssetB
;
- callServer(callBackFunction);
+ callServer(path, onServerResponse);
+
+ function onServerResponse(pServerResponse) {
+
+ callBackFunction(pServerResponse.err, pServerResponse.exchangeResponse);
+
+ }
}
function returnOrderTrades(pPositionId, callBackFunction) {
@@ -94,8 +100,14 @@
+ global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret + "/"
+ pPositionId
;
- callServer(callBackFunction);
+ callServer(path, onServerResponse);
+
+ function onServerResponse(pServerResponse) {
+
+ callBackFunction(pServerResponse.err, pServerResponse.exchangeResponse);
+
+ }
}
function buy(pMarketAssetA, pMarketAssetB, pRate, pAmountB, callBackFunction) {
@@ -108,8 +120,14 @@
+ pRate + "/"
+ pAmountB
;
- callServer(callBackFunction);
+ callServer(path, onServerResponse);
+
+ function onServerResponse(pServerResponse) {
+
+ callBackFunction(pServerResponse.err, pServerResponse.exchangeResponse);
+
+ }
}
function sell(pMarketAssetA, pMarketAssetB, pRate, pAmountB, callBackFunction) {
@@ -122,8 +140,14 @@
+ pRate + "/"
+ pAmountB
;
- callServer(callBackFunction);
+ callServer(path, onServerResponse);
+
+ function onServerResponse(pServerResponse) {
+
+ callBackFunction(pServerResponse.err, pServerResponse.exchangeResponse);
+
+ }
}
function moveOrder(pPositionId, pNewRate, pPositionAmountB, callBackFunction) {
@@ -136,8 +160,14 @@
+ pNewRate + "/"
+ pPositionAmountB
;
- callServer(callBackFunction);
+ callServer(path, onServerResponse);
+
+ function onServerResponse(pServerResponse) {
+
+ callBackFunction(pServerResponse.err, pServerResponse.exchangeResponse);
+
+ }
}
function returnTicker(callBackFunction) {
@@ -147,8 +177,13 @@
+ global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Key + "/"
+ global.EXCHANGE_KEYS[global.EXCHANGE_NAME].Secret
;
- callServer(callBackFunction);
+ callServer(path, onServerResponse);
+
+ function onServerResponse(pServerResponse) {
+
+ callBackFunction(pServerResponse.err, pServerResponse.exchangeResponse);
+
+ }
}
-
}
diff --git a/Exchanges/PoloniexAPIClient.js b/Exchanges/PoloniexAPIClient.js
new file mode 100644
index 000000000..bae3cc1df
--- /dev/null
+++ b/Exchanges/PoloniexAPIClient.js
@@ -0,0 +1,480 @@
+exports.newPoloniexAPIClient = function newPoloniexAPIClient(pKey, pSecret) {
+
+ /*
+ /* ATENTION: This Library is used both a the cloud (AACloud) and also at the AAWeb on the server side without any modifications.
+ /* There is a second version, stripped of all the inner functionality that runs at AAWeb browser side, which channels the requests to the server side one.
+ */
+
+ let newFunction = new API(pKey, pSecret);
+
+ let thisObject = {
+ API: newFunction.prototype
+ };
+
+ return thisObject;
+
+ function API () {
+ 'use strict';
+
+ // Module dependencies
+ var crypto = require('crypto'),
+ request = require('request'),
+ nonce = require('nonce')();
+
+ // Constants
+ var version = '0.0.8',
+ 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(key, secret) {
+ // Generate headers signed by this user's key and secret.
+ // The secret is encapsulated and never exposed
+ this._getPrivateHeaders = function (parameters) {
+ var paramString, signature;
+
+ if (!key || !secret) {
+ throw 'Poloniex: Error. API key and secret required';
+ }
+
+ // Convert to `arg1=foo&arg2=bar`
+ paramString = Object.keys(parameters).map(function (param) {
+ return encodeURIComponent(param) + '=' + encodeURIComponent(parameters[param]);
+ }).join('&');
+
+ signature = crypto.createHmac('sha512', secret).update(paramString).digest('hex');
+
+ return {
+ Key: key,
+ Sign: signature
+ };
+ };
+ }
+
+ // 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;
+
+ 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,
+ headers: this._getPrivateHeaders(parameters)
+ };
+
+ return this._request(options, callback);
+ },
+
+ /////
+ // PUBLIC METHODS
+
+ returnTicker: function (callback) {
+ return this._public('returnTicker', callback);
+ },
+
+ return24hVolume: function (callback) {
+ return this._public('return24hVolume', callback);
+ },
+
+ returnOrderBook: function (currencyA, currencyB, depth, callback) {
+ var parameters = {
+ currencyPair: joinCurrencies(currencyA, currencyB),
+ depth: depth
+ };
+
+ return this._public('returnOrderBook', parameters, callback);
+ },
+
+ returnOrderBooks: function (depth, callback) {
+ var parameters = {
+ currencyPair: 'all',
+ depth: depth
+ };
+
+ return this._public('returnOrderBook', parameters, callback);
+ },
+
+ returnPublicTradeHistory: function (currencyA, currencyB, start, end, callback) {
+ var parameters = {
+ currencyPair: joinCurrencies(currencyA, currencyB),
+ start: start,
+ end: end
+ };
+
+ return this._public('returnTradeHistory', 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);
+ },
+
+ /////
+ // PRIVATE METHODS
+
+ returnBalances: function (callback) {
+ return this._private('returnBalances', {}, callback);
+ },
+
+ returnCompleteBalances: function (callback) {
+ return this._private('returnCompleteBalances', {}, callback);
+ },
+
+ returnDepositAddresses: function (callback) {
+ return this._private('returnDepositAddresses', {}, callback);
+ },
+
+ generateNewAddress: function (currency, callback) {
+ return this._private('returnDepositsWithdrawals', { currency: currency }, callback);
+ },
+
+ returnDepositsWithdrawals: function (start, end, callback) {
+ return this._private('returnDepositsWithdrawals', { start: start, end: end }, callback);
+ },
+
+ returnOpenOrders: function (currencyA, currencyB, callback) {
+ var parameters = {
+ currencyPair: joinCurrencies(currencyA, currencyB)
+ };
+
+ return this._private('returnOpenOrders', parameters, callback);
+ },
+
+ returnTradeHistory: function (currencyA, currencyB, callback) {
+ var parameters = {
+ currencyPair: joinCurrencies(currencyA, currencyB)
+ };
+
+ return this._private('returnTradeHistory', 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 options = {};
+ if (account) {
+ options.account = account;
+ }
+ return this._private('returnAvailableAccountBalances', options, 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);
+ },
+
+ analizeResponse: function (logger, exchangeErr, exchangeResponse, notOkCallBack, okCallBack) {
+
+ /* This function analizes the different situations we might encounter trying to access Poloniex and returns appropiate standard errors. */
+
+ try {
+
+ let stringExchangeResponse = JSON.stringify(exchangeResponse);
+ let stringExchangeErr = JSON.stringify(exchangeErr);
+
+ logger.write("[INFO] analizeResponse -> exchangeErr = " + stringExchangeErr);
+ logger.write("[INFO] analizeResponse -> exchangeResponse = " + stringExchangeResponse);
+
+ if (stringExchangeErr.indexOf("ETIMEDOUT") > 0 ||
+ stringExchangeErr.indexOf("ENOTFOUND") > 0 ||
+ stringExchangeErr.indexOf("ECONNREFUSED") > 0 ||
+ stringExchangeErr.indexOf("ESOCKETTIMEDOUT") > 0 ||
+ stringExchangeErr.indexOf("ECONNRESET") > 0 ||
+ (stringExchangeResponse !== undefined && (
+ stringExchangeResponse.indexOf("Connection timed out") > 0 ||
+ stringExchangeResponse.indexOf("Connection Error") > 0 ||
+ stringExchangeResponse.indexOf("Bad gateway") > 0 ||
+ stringExchangeResponse.indexOf("Internal error. Please try again") > 0))) {
+
+ logger.write("[WARN] analizeResponse -> Timeout reached or connection problem while trying to access the Exchange API. Requesting new execution later.");
+ notOkCallBack(global.DEFAULT_RETRY_RESPONSE);
+ return;
+
+ } else {
+
+ if (JSON.stringify(exchangeResponse).indexOf("error") > 0) {
+
+ logger.write("[ERROR] analizeResponse -> Unexpected response from the Exchange.");
+ notOkCallBack(global.DEFAULT_FAIL_RESPONSE);
+ return;
+ }
+
+ if (exchangeErr) {
+
+ logger.write("[ERROR] analizeResponse -> Unexpected error trying to contact the Exchange.");
+ notOkCallBack(global.DEFAULT_FAIL_RESPONSE);
+ return;
+
+ } else {
+
+ logger.write("[INFO] analizeResponse -> No problem found.");
+ okCallBack();
+ return;
+ }
+ }
+
+ } catch (err) {
+ logger.write("[ERROR] analizeResponse -> err.message = " + err.message);
+ notOkCallBack(global.DEFAULT_FAIL_RESPONSE);
+ return;
+ }
+ }
+ };
+
+ // 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/Project.njsproj b/Project.njsproj
index a2e6eef4f..d64639f83 100644
--- a/Project.njsproj
+++ b/Project.njsproj
@@ -36,6 +36,7 @@
Code
+
Code
@@ -160,6 +161,7 @@
+
diff --git a/package-lock.json b/package-lock.json
index b523a6286..a8cf7b442 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -17,16 +17,141 @@
"url-template": "2.0.8"
}
},
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y="
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
"atob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz",
"integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio="
},
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
+ },
+ "aws4": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
+ "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w=="
+ },
+ "azure-storage": {
+ "version": "2.8.2",
+ "resolved": "https://registry.npmjs.org/azure-storage/-/azure-storage-2.8.2.tgz",
+ "integrity": "sha1-GctjKx5WMK6uVEUaZNrBYLFlyEg=",
+ "requires": {
+ "browserify-mime": "1.2.9",
+ "extend": "1.2.1",
+ "json-edm-parser": "0.1.2",
+ "md5.js": "1.3.4",
+ "readable-stream": "2.0.6",
+ "request": "2.83.0",
+ "underscore": "1.8.3",
+ "uuid": "3.2.1",
+ "validator": "9.4.1",
+ "xml2js": "0.2.8",
+ "xmlbuilder": "0.4.3"
+ }
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
"before-after-hook": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.1.0.tgz",
"integrity": "sha512-VOMDtYPwLbIncTxNoSzRyvaMxtXmLWLUqr8k5AfC1BzLk34HvBXaQX8snOwQZ4c0aX8aSERqtJSiI9/m2u5kuA=="
},
+ "boom": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
+ "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
+ "requires": {
+ "hoek": "4.2.1"
+ }
+ },
+ "browserify-mime": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/browserify-mime/-/browserify-mime-1.2.9.tgz",
+ "integrity": "sha1-rrGvKN5sDXpqLOQK22j/GEIq8x8="
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+ },
+ "combined-stream": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "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="
+ },
+ "cryptiles": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
+ "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
+ "requires": {
+ "boom": "5.2.0"
+ },
+ "dependencies": {
+ "boom": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
+ "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
+ "requires": {
+ "hoek": "4.2.1"
+ }
+ }
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "requires": {
+ "assert-plus": "1.0.0"
+ }
+ },
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
@@ -35,6 +160,117 @@
"ms": "2.0.0"
}
},
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "extend": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-1.2.1.tgz",
+ "integrity": "sha1-oPX9bPyDpf5J72mNYOyKYk3UV2w="
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ },
+ "form-data": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
+ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "2.1.18"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "requires": {
+ "assert-plus": "1.0.0"
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+ },
+ "har-validator": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
+ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
+ "requires": {
+ "ajv": "5.5.2",
+ "har-schema": "2.0.0"
+ }
+ },
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "hawk": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
+ "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
+ "requires": {
+ "boom": "4.3.1",
+ "cryptiles": "3.1.2",
+ "hoek": "4.2.1",
+ "sntp": "2.1.0"
+ }
+ },
+ "hoek": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
+ "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.14.1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ },
"is-array-buffer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-1.0.0.tgz",
@@ -45,20 +281,284 @@
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
},
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "optional": true
+ },
+ "json-edm-parser": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/json-edm-parser/-/json-edm-parser-0.1.2.tgz",
+ "integrity": "sha1-HmCw/vG8CvZ7wNFG393lSGzWFbQ=",
+ "requires": {
+ "jsonparse": "1.2.0"
+ }
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A="
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ },
+ "jsonparse": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.2.0.tgz",
+ "integrity": "sha1-XAxWhRBxYOcv50ib3eoLRMK8Z70="
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
"lodash": {
"version": "4.17.5",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz",
"integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw=="
},
+ "md5.js": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "requires": {
+ "hash-base": "3.0.4",
+ "inherits": "2.0.3"
+ }
+ },
+ "mime-db": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
+ "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="
+ },
+ "mime-types": {
+ "version": "2.1.18",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
+ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
+ "requires": {
+ "mime-db": "1.33.0"
+ }
+ },
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM="
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+ },
+ "readable-stream": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "string_decoder": "0.10.31",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "request": {
+ "version": "2.83.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz",
+ "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==",
+ "requires": {
+ "aws-sign2": "0.7.0",
+ "aws4": "1.7.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.6",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.3.2",
+ "har-validator": "5.0.3",
+ "hawk": "6.0.2",
+ "http-signature": "1.2.0",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.18",
+ "oauth-sign": "0.8.2",
+ "performance-now": "2.1.0",
+ "qs": "6.5.2",
+ "safe-buffer": "5.1.2",
+ "stringstream": "0.0.6",
+ "tough-cookie": "2.3.4",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.2.1"
+ },
+ "dependencies": {
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "sax": {
+ "version": "0.5.8",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
+ "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE="
+ },
+ "sntp": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz",
+ "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
+ "requires": {
+ "hoek": "4.2.1"
+ }
+ },
+ "sshpk": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz",
+ "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ },
+ "stringstream": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
+ "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA=="
+ },
+ "tough-cookie": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
+ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "optional": true
+ },
+ "underscore": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
+ "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
+ },
"url-template": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz",
"integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "uuid": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
+ "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA=="
+ },
+ "validator": {
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz",
+ "integrity": "sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA=="
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "1.3.0"
+ }
+ },
+ "xml2js": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.2.8.tgz",
+ "integrity": "sha1-m4FpCTFjH/CdGVdUn69U9PmAs8I=",
+ "requires": {
+ "sax": "0.5.8"
+ }
+ },
+ "xmlbuilder": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-0.4.3.tgz",
+ "integrity": "sha1-xGFLp04K0ZbmCcknLNnh3bKKilg="
}
}
}
diff --git a/package.json b/package.json
index f86e5979b..5ada2673c 100644
--- a/package.json
+++ b/package.json
@@ -7,8 +7,8 @@
"name": "Luis-Fernando-Molina"
},
"dependencies": {
- "azure-storage": "^2.8.2",
- "@octokit/rest": "^14.0.9",
+ "azure-storage": "^2.8.2",
+ "@octokit/rest": "^14.0.9",
"atob": "^2.1.1"
}
}
diff --git a/server.js b/server.js
index 4fa543eec..f216c30b8 100644
--- a/server.js
+++ b/server.js
@@ -374,6 +374,56 @@ function onBrowserRequest(request, response) {
}
break;
+ case "PoloniexAPIClient": // This is trying to access this library functionality from the broser.
+ {
+ const POLONIEX_CLIENT_MODULE = require('./Exchanges/' + 'PoloniexAPIClient');
+ let poloniexApiClient = POLONIEX_CLIENT_MODULE.newPoloniexAPIClient(requestParameters[3], requestParameters[4]);
+
+ switch (requestParameters[2]) {
+
+ case "returnOpenOrders": {
+ poloniexApiClient.returnOpenOrders(requestParameters[5], requestParameters[6], onExchangeResponse)
+ break;
+ }
+
+ case "returnOrderTrades": {
+ poloniexApiClient.returnOrderTrades(requestParameters[5], onExchangeResponse)
+ break;
+ }
+
+ case "buy": {
+ poloniexApiClient.buy(requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse)
+ break;
+ }
+
+ case "sell": {
+ poloniexApiClient.buy(requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse)
+ break;
+ }
+
+ case "moveOrder": {
+ poloniexApiClient.buy(requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse)
+ break;
+ }
+
+ case "returnTicker": {
+ poloniexApiClient.returnTicker(onExchangeResponse)
+ break;
+ }
+ }
+
+ function onExchangeResponse(err, exchangeResponse) {
+
+ let serverResponse = {
+ err: err,
+ exchangeResponse: exchangeResponse
+ }
+
+ respondWithContent(serverResponse, response);
+ }
+ }
+ break;
+
case "Cloud": // This means the cloud folder.
{