Adjustments to support multi exchange
This commit is contained in:
1 parent
2dda1e3e37
commit
047a43530d
5 files changed
+156
-240
No files matched your search
@@ -0,0 +1,137 @@
|
||||
function newExchangeAPI() {
|
||||
|
||||
const INFO_LOG = true;
|
||||
const LOG_FILE_CONTENT = true;
|
||||
|
||||
const MODULE_NAME = "CloudVM -> Poloniex Client API";
|
||||
|
||||
let thisObject = {
|
||||
API: {
|
||||
analizeResponse: analizeResponse,
|
||||
returnOpenOrders: returnOpenOrders,
|
||||
returnOrderTrades: returnOrderTrades,
|
||||
buy: buy,
|
||||
sell: sell,
|
||||
moveOrder: moveOrder,
|
||||
returnTicker: returnTicker
|
||||
}
|
||||
};
|
||||
|
||||
return thisObject;
|
||||
|
||||
function returnOpenOrders(pMarketAssetA, pMarketAssetB, callBackFunction) {
|
||||
|
||||
let path = "ExchangeAPI" + "/"
|
||||
+ "returnOpenOrders" + "/"
|
||||
+ window.SESSION_TOKEN + "/"
|
||||
+ pMarketAssetA + "/"
|
||||
+ pMarketAssetB
|
||||
;
|
||||
|
||||
callServer(undefined, path + "/NO-LOG", onServerResponse);
|
||||
|
||||
function onServerResponse(pServerResponse) {
|
||||
|
||||
let response = JSON.parse(pServerResponse);
|
||||
callBackFunction(response.err, response.exchangeResponse);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function returnOrderTrades(pPositionId, callBackFunction) {
|
||||
|
||||
let path = "ExchangeAPI" + "/"
|
||||
+ "returnOrderTrades" + "/"
|
||||
+ window.SESSION_TOKEN + "/"
|
||||
+ pPositionId
|
||||
;
|
||||
|
||||
callServer(undefined, path + "/NO-LOG", onServerResponse);
|
||||
|
||||
function onServerResponse(pServerResponse) {
|
||||
|
||||
let response = JSON.parse(pServerResponse);
|
||||
callBackFunction(response.err, response.exchangeResponse);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function buy(pMarketAssetA, pMarketAssetB, pRate, pAmountB, callBackFunction) {
|
||||
|
||||
let path = "ExchangeAPI" + "/"
|
||||
+ "buy" + "/"
|
||||
+ window.SESSION_TOKEN + "/"
|
||||
+ pMarketAssetA + "/"
|
||||
+ pMarketAssetB + "/"
|
||||
+ pRate + "/"
|
||||
+ pAmountB
|
||||
;
|
||||
|
||||
callServer(undefined, path + "/NO-LOG", onServerResponse);
|
||||
|
||||
function onServerResponse(pServerResponse) {
|
||||
|
||||
let response = JSON.parse(pServerResponse);
|
||||
callBackFunction(response.err, response.exchangeResponse);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function sell(pMarketAssetA, pMarketAssetB, pRate, pAmountB, callBackFunction) {
|
||||
|
||||
let path = "ExchangeAPI" + "/"
|
||||
+ "sell" + "/"
|
||||
+ window.SESSION_TOKEN + "/"
|
||||
+ pMarketAssetA + "/"
|
||||
+ pMarketAssetB + "/"
|
||||
+ pRate + "/"
|
||||
+ pAmountB
|
||||
;
|
||||
|
||||
callServer(undefined, path + "/NO-LOG", onServerResponse);
|
||||
|
||||
function onServerResponse(pServerResponse) {
|
||||
|
||||
let response = JSON.parse(pServerResponse);
|
||||
callBackFunction(response.err, response.exchangeResponse);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function moveOrder(pPositionId, pNewRate, pPositionAmountB, callBackFunction) {
|
||||
|
||||
let path = "ExchangeAPI" + "/"
|
||||
+ "moveOrder" + "/"
|
||||
+ window.SESSION_TOKEN + "/"
|
||||
+ pPositionId + "/"
|
||||
+ pNewRate + "/"
|
||||
+ pPositionAmountB
|
||||
;
|
||||
|
||||
callServer(undefined, path + "/NO-LOG", onServerResponse);
|
||||
|
||||
function onServerResponse(pServerResponse) {
|
||||
|
||||
let response = JSON.parse(pServerResponse);
|
||||
callBackFunction(response.err, response.exchangeResponse);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function returnTicker(callBackFunction) {
|
||||
|
||||
let path = "ExchangeAPI" + "/"
|
||||
+ "returnTicker" + "/"
|
||||
+ window.SESSION_TOKEN
|
||||
;
|
||||
|
||||
callServer(undefined, path + "/NO-LOG", onServerResponse);
|
||||
|
||||
function onServerResponse(pServerResponse) {
|
||||
|
||||
let response = JSON.parse(pServerResponse);
|
||||
callBackFunction(response.err, response.exchangeResponse);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,228 +0,0 @@
|
||||
function newPoloniexAPIClient() {
|
||||
|
||||
const INFO_LOG = true;
|
||||
const LOG_FILE_CONTENT = true;
|
||||
|
||||
const MODULE_NAME = "CloudVM -> Poloniex Client API";
|
||||
|
||||
let thisObject = {
|
||||
API: {
|
||||
analizeResponse: analizeResponse,
|
||||
returnOpenOrders: returnOpenOrders,
|
||||
returnOrderTrades: returnOrderTrades,
|
||||
buy: buy,
|
||||
sell: sell,
|
||||
moveOrder: moveOrder,
|
||||
returnTicker: returnTicker
|
||||
}
|
||||
};
|
||||
|
||||
return thisObject;
|
||||
|
||||
function analizeResponse(logger, exchangeErr, exchangeResponse, notOkCallBack, okCallBack) {
|
||||
|
||||
/* IMPORTANT> This function is an exact copy of the one running at the cloud, with a browsery applied. In this case it means the world global -> window. */
|
||||
|
||||
/* 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);
|
||||
|
||||
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 (stringExchangeResponse === undefined) {
|
||||
|
||||
logger.write(MODULE_NAME, "[WARN] analizeResponse -> No response received from the exchange. Retrying Later.");
|
||||
|
||||
notOkCallBack(global.DEFAULT_RETRY_RESPONSE);
|
||||
return;
|
||||
}
|
||||
|
||||
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("Nonce must be greater than") > 0 ||
|
||||
stringExchangeResponse.indexOf("Internal error. Please try again") > 0))) {
|
||||
|
||||
logger.write(MODULE_NAME, "[ERROR] analizeResponse -> Somethng bad happened while trying to access the Exchange API. Requesting new execution later.");
|
||||
logger.write(MODULE_NAME, "[ERROR] analizeResponse -> stringExchangeErr = " + stringExchangeErr);
|
||||
|
||||
notOkCallBack(window.DEFAULT_RETRY_RESPONSE);
|
||||
return;
|
||||
|
||||
} else {
|
||||
|
||||
if (JSON.stringify(exchangeResponse).indexOf("error") > 0) {
|
||||
|
||||
logger.write(MODULE_NAME, "[ERROR] analizeResponse -> Unexpected response from the Exchange.");
|
||||
logger.write(MODULE_NAME, "[ERROR] analizeResponse -> JSON.stringify(exchangeErr) = " + JSON.stringify(exchangeErr));
|
||||
logger.write(MODULE_NAME, "[ERROR] analizeResponse -> exchangeErr = " + exchangeErr);
|
||||
logger.write(MODULE_NAME, "[ERROR] analizeResponse -> exchangeResponse = " + exchangeResponse);
|
||||
|
||||
/* {"error":"Not enough USDT.","success":0}*/
|
||||
|
||||
if (JSON.stringify(exchangeResponse).indexOf("Not enough") > 0) {
|
||||
|
||||
let err = {
|
||||
resutl: window.CUSTOM_FAIL_RESPONSE.result,
|
||||
message: exchangeResponse.error
|
||||
};
|
||||
|
||||
notOkCallBack(err);
|
||||
|
||||
} else {
|
||||
|
||||
notOkCallBack(window.DEFAULT_FAIL_RESPONSE);
|
||||
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (exchangeErr) {
|
||||
|
||||
logger.write(MODULE_NAME, "[ERROR] analizeResponse -> Unexpected error trying to contact the Exchange.");
|
||||
logger.write(MODULE_NAME, "[ERROR] analizeResponse -> exchangeErr = " + exchangeErr);
|
||||
|
||||
notOkCallBack(window.DEFAULT_FAIL_RESPONSE);
|
||||
return;
|
||||
|
||||
} else {
|
||||
|
||||
logger.write(MODULE_NAME, "[INFO] analizeResponse -> No problem found.");
|
||||
okCallBack();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
} catch (err) {
|
||||
logger.write(MODULE_NAME, "[ERROR] analizeResponse -> err.message = " + err.message);
|
||||
notOkCallBack(window.DEFAULT_FAIL_RESPONSE);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
function returnOpenOrders(pMarketAssetA, pMarketAssetB, callBackFunction) {
|
||||
|
||||
let path = "PoloniexAPIClient" + "/"
|
||||
+ "returnOpenOrders" + "/"
|
||||
+ window.SESSION_TOKEN + "/"
|
||||
+ pMarketAssetA + "/"
|
||||
+ pMarketAssetB
|
||||
;
|
||||
|
||||
callServer(undefined, path + "/NO-LOG", onServerResponse);
|
||||
|
||||
function onServerResponse(pServerResponse) {
|
||||
|
||||
let response = JSON.parse(pServerResponse);
|
||||
callBackFunction(response.err, response.exchangeResponse);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function returnOrderTrades(pPositionId, callBackFunction) {
|
||||
|
||||
let path = "PoloniexAPIClient" + "/"
|
||||
+ "returnOrderTrades" + "/"
|
||||
+ window.SESSION_TOKEN + "/"
|
||||
+ pPositionId
|
||||
;
|
||||
|
||||
callServer(undefined, path + "/NO-LOG", onServerResponse);
|
||||
|
||||
function onServerResponse(pServerResponse) {
|
||||
|
||||
let response = JSON.parse(pServerResponse);
|
||||
callBackFunction(response.err, response.exchangeResponse);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function buy(pMarketAssetA, pMarketAssetB, pRate, pAmountB, callBackFunction) {
|
||||
|
||||
let path = "PoloniexAPIClient" + "/"
|
||||
+ "buy" + "/"
|
||||
+ window.SESSION_TOKEN + "/"
|
||||
+ pMarketAssetA + "/"
|
||||
+ pMarketAssetB + "/"
|
||||
+ pRate + "/"
|
||||
+ pAmountB
|
||||
;
|
||||
|
||||
callServer(undefined, path + "/NO-LOG", onServerResponse);
|
||||
|
||||
function onServerResponse(pServerResponse) {
|
||||
|
||||
let response = JSON.parse(pServerResponse);
|
||||
callBackFunction(response.err, response.exchangeResponse);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function sell(pMarketAssetA, pMarketAssetB, pRate, pAmountB, callBackFunction) {
|
||||
|
||||
let path = "PoloniexAPIClient" + "/"
|
||||
+ "sell" + "/"
|
||||
+ window.SESSION_TOKEN + "/"
|
||||
+ pMarketAssetA + "/"
|
||||
+ pMarketAssetB + "/"
|
||||
+ pRate + "/"
|
||||
+ pAmountB
|
||||
;
|
||||
|
||||
callServer(undefined, path + "/NO-LOG", onServerResponse);
|
||||
|
||||
function onServerResponse(pServerResponse) {
|
||||
|
||||
let response = JSON.parse(pServerResponse);
|
||||
callBackFunction(response.err, response.exchangeResponse);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function moveOrder(pPositionId, pNewRate, pPositionAmountB, callBackFunction) {
|
||||
|
||||
let path = "PoloniexAPIClient" + "/"
|
||||
+ "moveOrder" + "/"
|
||||
+ window.SESSION_TOKEN + "/"
|
||||
+ pPositionId + "/"
|
||||
+ pNewRate + "/"
|
||||
+ pPositionAmountB
|
||||
;
|
||||
|
||||
callServer(undefined, path + "/NO-LOG", onServerResponse);
|
||||
|
||||
function onServerResponse(pServerResponse) {
|
||||
|
||||
let response = JSON.parse(pServerResponse);
|
||||
callBackFunction(response.err, response.exchangeResponse);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function returnTicker(callBackFunction) {
|
||||
|
||||
let path = "PoloniexAPIClient" + "/"
|
||||
+ "returnTicker" + "/"
|
||||
+ window.SESSION_TOKEN
|
||||
;
|
||||
|
||||
callServer(undefined, path + "/NO-LOG", onServerResponse);
|
||||
|
||||
function onServerResponse(pServerResponse) {
|
||||
|
||||
let response = JSON.parse(pServerResponse);
|
||||
callBackFunction(response.err, response.exchangeResponse);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -55,10 +55,9 @@
|
||||
<Compile Include="CloudVM\CloudVM.js">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="CloudVM\PoloniexAPIClient.js" />
|
||||
<Compile Include="CloudVM\Exchange\ExchangeAPI.js" />
|
||||
<Compile Include="Server\Exchange\ExchangeAPI.js" />
|
||||
<Compile Include="Server\Exchange\exchangeUtils.js" />
|
||||
<Compile Include="Server\Exchange\PoloniexAPIClient.js" />
|
||||
<Compile Include="Globals.js">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
@@ -230,6 +229,7 @@
|
||||
<ItemGroup>
|
||||
<Folder Include="Azure\" />
|
||||
<Folder Include="CloudVM\" />
|
||||
<Folder Include="CloudVM\Exchange\" />
|
||||
<Folder Include="Server\Exchange\" />
|
||||
<Folder Include="Files\" />
|
||||
<Folder Include="FloatingSpace\" />
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
"FloatingSpace/FloatingObject.js",
|
||||
"FloatingSpace/FloatingLayer.js",
|
||||
|
||||
"CloudVM/PoloniexAPIClient.js",
|
||||
"CloudVM/Exchange/ExchangeAPI.js",
|
||||
"CloudVM/CloudSupport.js",
|
||||
"CloudVM/CloudRequire.js",
|
||||
"CloudVM/WebFS.js",
|
||||
|
||||
@@ -697,7 +697,7 @@ function onBrowserRequest(request, response) {
|
||||
}
|
||||
break;
|
||||
|
||||
case "PoloniexAPIClient": // This is trying to access this library functionality from the broser.
|
||||
case "ExchangeAPI": // This is trying to access this library functionality from the broser.
|
||||
{
|
||||
|
||||
/* We are going to let access the exchange only to authenticated users, that measn that we need the a valid session token. */
|
||||
@@ -711,38 +711,45 @@ function onBrowserRequest(request, response) {
|
||||
let exchangeKey = session.exchangeKeys[0].key; // 0 because we only deal with one exchange for now.
|
||||
let exchangeSecret = session.exchangeKeys[0].secret;
|
||||
|
||||
const POLONIEX_CLIENT_MODULE = require('./Server/Exchange/' + 'ExchangeAPI');
|
||||
let poloniexApiClient = POLONIEX_CLIENT_MODULE.newPoloniexAPIClient(exchangeKey, exchangeSecret);
|
||||
global.EXCHANGE_KEYS = {
|
||||
"Poloniex": {
|
||||
"Key": exchangeKey,
|
||||
"Secret": exchangeSecret
|
||||
}
|
||||
}
|
||||
|
||||
const EXCHANGE_API = require('./Server/Exchange/' + 'ExchangeAPI');
|
||||
let exchangeAPI = EXCHANGE_API.newExchangeAPI();
|
||||
|
||||
switch (requestParameters[2]) {
|
||||
|
||||
case "returnOpenOrders": {
|
||||
poloniexApiClient.API.returnOpenOrders(requestParameters[4], requestParameters[5], onExchangeResponse);
|
||||
exchangeAPI.returnOpenOrders(requestParameters[4], requestParameters[5], onExchangeResponse);
|
||||
break;
|
||||
}
|
||||
|
||||
case "returnOrderTrades": {
|
||||
poloniexApiClient.API.returnOrderTrades(requestParameters[4], onExchangeResponse);
|
||||
exchangeAPI.returnOrderTrades(requestParameters[4], onExchangeResponse);
|
||||
break;
|
||||
}
|
||||
|
||||
case "buy": {
|
||||
poloniexApiClient.API.buy(requestParameters[4], requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse);
|
||||
exchangeAPI.buy(requestParameters[4], requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse);
|
||||
break;
|
||||
}
|
||||
|
||||
case "sell": {
|
||||
poloniexApiClient.API.sell(requestParameters[4], requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse);
|
||||
exchangeAPI.sell(requestParameters[4], requestParameters[5], requestParameters[6], requestParameters[7], onExchangeResponse);
|
||||
break;
|
||||
}
|
||||
|
||||
case "moveOrder": {
|
||||
poloniexApiClient.API.moveOrder(requestParameters[4], requestParameters[5], requestParameters[6], onExchangeResponse);
|
||||
exchangeAPI.moveOrder(requestParameters[4], requestParameters[5], requestParameters[6], onExchangeResponse);
|
||||
break;
|
||||
}
|
||||
|
||||
case "returnTicker": {
|
||||
poloniexApiClient.API.returnTicker(onExchangeResponse);
|
||||
exchangeAPI.returnTicker(onExchangeResponse);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user