error logging + patching spot market names for URL friendliness
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
parent
9a7004025b
commit
e41ffe8fec
|
@ -8,6 +8,11 @@ import Controller from "controller.interface";
|
|||
import { RequestErrorCustom } from "dtos";
|
||||
import { NextFunction, Request, Response, Router } from "express";
|
||||
import MangoSimpleClient from "mango.simple.client";
|
||||
import {
|
||||
logger,
|
||||
patchExternalMarketName,
|
||||
patchInternalMarketName,
|
||||
} from "./utils";
|
||||
|
||||
class AccountController implements Controller {
|
||||
public path = "/api/positions";
|
||||
|
@ -32,6 +37,7 @@ class AccountController implements Controller {
|
|||
response.send({ success: true, result: postionDtos } as PositionsDto);
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error(`message - ${error.message}, ${error.stack}`);
|
||||
return response.status(500).send({
|
||||
errors: [{ msg: error.message } as RequestErrorCustom],
|
||||
});
|
||||
|
@ -127,7 +133,7 @@ class AccountController implements Controller {
|
|||
cumulativeSellSize: undefined,
|
||||
entryPrice,
|
||||
estimatedLiquidationPrice: undefined,
|
||||
future: marketConfig.name,
|
||||
future: patchInternalMarketName(marketConfig.name),
|
||||
initialMarginRequirement: undefined,
|
||||
longOrderSize: undefined,
|
||||
maintenanceMarginRequirement: undefined,
|
||||
|
@ -194,7 +200,7 @@ interface PositionDto {
|
|||
cumulativeSellSize: number;
|
||||
entryPrice: number;
|
||||
estimatedLiquidationPrice: number;
|
||||
future: "ETH-PERP";
|
||||
future: string;
|
||||
initialMarginRequirement: number;
|
||||
longOrderSize: number;
|
||||
maintenanceMarginRequirement: number;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import bodyParser from "body-parser";
|
||||
import Controller from "controller.interface";
|
||||
import express from "express";
|
||||
import { logger } from "./utils";
|
||||
import AccountController from "./account.controller";
|
||||
import CoinController from "./coin.controller";
|
||||
import MangoSimpleClient from "./mango.simple.client";
|
||||
|
@ -36,7 +37,9 @@ class App {
|
|||
}
|
||||
|
||||
public listen() {
|
||||
this.app.listen(process.env.PORT || 3000);
|
||||
const port = process.env.PORT || 3000;
|
||||
this.app.listen(port);
|
||||
logger.info(`App listening on port ${port}`);
|
||||
}
|
||||
|
||||
public getServer() {
|
||||
|
|
|
@ -14,7 +14,12 @@ import fetch from "node-fetch";
|
|||
import { OrderInfo } from "types";
|
||||
import Controller from "./controller.interface";
|
||||
import MangoSimpleClient from "./mango.simple.client";
|
||||
import { isValidMarket } from "./utils";
|
||||
import {
|
||||
isValidMarket,
|
||||
logger,
|
||||
patchExternalMarketName,
|
||||
patchInternalMarketName,
|
||||
} from "./utils";
|
||||
|
||||
class MarketsController implements Controller {
|
||||
public path = "/api/markets";
|
||||
|
@ -73,6 +78,7 @@ class MarketsController implements Controller {
|
|||
} as MarketsDto);
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error(`message - ${error.message}, ${error.stack}`);
|
||||
return response.status(500).send({
|
||||
errors: [{ msg: error.message } as RequestErrorCustom],
|
||||
});
|
||||
|
@ -91,7 +97,7 @@ class MarketsController implements Controller {
|
|||
.json({ errors: errors.array() as BadRequestError[] });
|
||||
}
|
||||
|
||||
const marketName = request.params.market_name;
|
||||
const marketName = patchExternalMarketName(request.params.market_name);
|
||||
|
||||
this.fetchMarketsInternal(marketName)
|
||||
.then((marketsDto) => {
|
||||
|
@ -101,6 +107,7 @@ class MarketsController implements Controller {
|
|||
} as MarketsDto);
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error(`message - ${error.message}, ${error.stack}`);
|
||||
return response.status(500).send({
|
||||
errors: [{ msg: error.message } as RequestErrorCustom],
|
||||
});
|
||||
|
@ -209,7 +216,7 @@ class MarketsController implements Controller {
|
|||
}
|
||||
|
||||
return {
|
||||
name: marketConfig.name,
|
||||
name: patchInternalMarketName(marketConfig.name),
|
||||
baseCurrency: marketConfig.baseSymbol,
|
||||
quoteCurrency: "USDC",
|
||||
quoteVolume24h: volume,
|
||||
|
@ -245,7 +252,7 @@ class MarketsController implements Controller {
|
|||
.json({ errors: errors.array() as BadRequestError[] });
|
||||
}
|
||||
|
||||
const marketName = request.params.market_name;
|
||||
const marketName = patchExternalMarketName(request.params.market_name);
|
||||
const depth = Number(request.query.depth) || 20;
|
||||
|
||||
this.getOrderBookInternal(marketName, depth)
|
||||
|
@ -259,6 +266,7 @@ class MarketsController implements Controller {
|
|||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error(`message - ${error.message}, ${error.stack}`);
|
||||
return response.status(500).send({
|
||||
errors: [{ msg: error.message } as RequestErrorCustom],
|
||||
});
|
||||
|
@ -304,7 +312,7 @@ class MarketsController implements Controller {
|
|||
const allMarketConfigs = getAllMarkets(
|
||||
this.mangoSimpleClient.mangoGroupConfig
|
||||
);
|
||||
const marketName = request.params.market_name;
|
||||
const marketName = patchExternalMarketName(request.params.market_name);
|
||||
const marketPk = allMarketConfigs.filter(
|
||||
(marketConfig) => marketConfig.name === marketName
|
||||
)[0].publicKey;
|
||||
|
@ -317,6 +325,7 @@ class MarketsController implements Controller {
|
|||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error(`message - ${error.message}, ${error.stack}`);
|
||||
return response.status(500).send({
|
||||
errors: [{ msg: error.message } as RequestErrorCustom],
|
||||
});
|
||||
|
@ -355,7 +364,7 @@ class MarketsController implements Controller {
|
|||
.json({ errors: errors.array() as BadRequestError[] });
|
||||
}
|
||||
|
||||
const marketName = request.params.market_name;
|
||||
const marketName = patchExternalMarketName(request.params.market_name);
|
||||
const resolution = String(request.query.resolution);
|
||||
const fromEpochS = Number(request.query.start_time);
|
||||
const toEpochS = Number(request.query.end_time);
|
||||
|
@ -379,6 +388,7 @@ class MarketsController implements Controller {
|
|||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error(`message - ${error.message}, ${error.stack}`);
|
||||
return response.status(500).send({
|
||||
errors: [{ msg: error.message } as RequestErrorCustom],
|
||||
});
|
||||
|
|
|
@ -6,7 +6,12 @@ import { body, query, validationResult } from "express-validator";
|
|||
import Controller from "./controller.interface";
|
||||
import MangoSimpleClient from "./mango.simple.client";
|
||||
import { OrderInfo } from "./types";
|
||||
import { isValidMarket, logger } from "./utils";
|
||||
import {
|
||||
isValidMarket,
|
||||
logger,
|
||||
patchExternalMarketName,
|
||||
patchInternalMarketName,
|
||||
} from "./utils";
|
||||
|
||||
class OrdersController implements Controller {
|
||||
public path = "/api/orders";
|
||||
|
@ -68,7 +73,7 @@ class OrdersController implements Controller {
|
|||
}
|
||||
|
||||
const marketName = request.query.market
|
||||
? String(request.query.market)
|
||||
? patchExternalMarketName(String(request.query.market))
|
||||
: undefined;
|
||||
|
||||
this.getOpenOrdersInternal(marketName)
|
||||
|
@ -76,6 +81,7 @@ class OrdersController implements Controller {
|
|||
return response.send({ success: true, result: orderDtos } as OrdersDto);
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error(`message - ${error.message}, ${error.stack}`);
|
||||
return response.status(500).send({
|
||||
errors: [{ msg: error.message } as RequestErrorCustom],
|
||||
});
|
||||
|
@ -99,7 +105,7 @@ class OrdersController implements Controller {
|
|||
|
||||
this.mangoSimpleClient
|
||||
.placeOrder(
|
||||
placeOrderDto.market,
|
||||
patchExternalMarketName(placeOrderDto.market),
|
||||
placeOrderDto.type,
|
||||
placeOrderDto.side,
|
||||
placeOrderDto.size,
|
||||
|
@ -115,6 +121,7 @@ class OrdersController implements Controller {
|
|||
return response.status(200).send();
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error(`message - ${error.message}, ${error.stack}`);
|
||||
return response.status(500).send({
|
||||
errors: [{ msg: error.message } as RequestErrorCustom],
|
||||
});
|
||||
|
@ -133,6 +140,7 @@ class OrdersController implements Controller {
|
|||
return response.status(200).send();
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error(`message - ${error.message}, ${error.stack}`);
|
||||
return response.status(500).send({
|
||||
errors: [{ msg: error.message } as RequestErrorCustom],
|
||||
});
|
||||
|
@ -157,16 +165,16 @@ class OrdersController implements Controller {
|
|||
this.mangoSimpleClient
|
||||
.cancelOrder(orderInfos[0])
|
||||
.then(() => response.send())
|
||||
.catch(() => {
|
||||
.catch((error) => {
|
||||
logger.error(`message - ${error.message}, ${error.stack}`);
|
||||
return response
|
||||
.status(500)
|
||||
.json({ errors: [{ msg: "Unexpected error occured!" }] });
|
||||
.json({ errors: [{ msg: error.message }] });
|
||||
});
|
||||
})
|
||||
.catch(() => {
|
||||
return response
|
||||
.status(500)
|
||||
.json({ errors: [{ msg: "Unexpected error occured!" }] });
|
||||
.catch((error) => {
|
||||
logger.error(`message - ${error.message}, ${error.stack}`);
|
||||
return response.status(500).json({ errors: [{ msg: error.message }] });
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -188,16 +196,16 @@ class OrdersController implements Controller {
|
|||
this.mangoSimpleClient
|
||||
.cancelOrder(orderInfos[0])
|
||||
.then(() => response.send())
|
||||
.catch(() => {
|
||||
.catch((error) => {
|
||||
logger.error(`message - ${error.message}, ${error.stack}`);
|
||||
return response
|
||||
.status(500)
|
||||
.json({ errors: [{ msg: "Unexpected error occured!" }] });
|
||||
.json({ errors: [{ msg: error.message }] });
|
||||
});
|
||||
})
|
||||
.catch(() => {
|
||||
return response
|
||||
.status(500)
|
||||
.json({ errors: [{ msg: "Unexpected error occured!" }] });
|
||||
.catch((error) => {
|
||||
logger.error(`message - ${error.message}, ${error.stack}`);
|
||||
return response.status(500).json({ errors: [{ msg: error.message }] });
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -213,9 +221,9 @@ class OrdersController implements Controller {
|
|||
return {
|
||||
createdAt: new Date(perpOrder.timestamp.toNumber() * 1000),
|
||||
filledSize: undefined,
|
||||
future: orderInfo.market.config.name,
|
||||
future: patchInternalMarketName(orderInfo.market.config.name),
|
||||
id: perpOrder.orderId.toString(),
|
||||
market: orderInfo.market.config.name,
|
||||
market: patchInternalMarketName(orderInfo.market.config.name),
|
||||
price: perpOrder.price,
|
||||
avgFillPrice: undefined,
|
||||
remainingSize: undefined,
|
||||
|
@ -237,9 +245,9 @@ class OrdersController implements Controller {
|
|||
return {
|
||||
createdAt: undefined,
|
||||
filledSize: undefined,
|
||||
future: orderInfo.market.config.name,
|
||||
future: patchInternalMarketName(orderInfo.market.config.name),
|
||||
id: spotOrder.orderId.toString(),
|
||||
market: orderInfo.market.config.name,
|
||||
market: patchInternalMarketName(orderInfo.market.config.name),
|
||||
price: spotOrder.price,
|
||||
avgFillPrice: undefined,
|
||||
remainingSize: undefined,
|
||||
|
|
|
@ -30,7 +30,7 @@ const mangoGroupConfig: GroupConfig = Config.ids().groups.filter(
|
|||
)[0];
|
||||
|
||||
const allMarketNames = mangoGroupConfig.spotMarkets
|
||||
.map((spotMarketConfig) => spotMarketConfig.name)
|
||||
.map((spotMarketConfig) => spotMarketConfig.baseSymbol + "-SPOT")
|
||||
.concat(
|
||||
mangoGroupConfig.perpMarkets.map(
|
||||
(perpMarketConfig) => perpMarketConfig.name
|
||||
|
@ -41,6 +41,20 @@ const allCoins = mangoGroupConfig.tokens.map(
|
|||
(tokenConfig) => tokenConfig.symbol
|
||||
);
|
||||
|
||||
export function patchExternalMarketName(marketName: string) {
|
||||
if (marketName.includes("-SPOT")) {
|
||||
marketName = marketName.replace("-SPOT", "/USDC");
|
||||
}
|
||||
return marketName;
|
||||
}
|
||||
|
||||
export function patchInternalMarketName(marketName: string) {
|
||||
if (marketName.includes("/USDC")) {
|
||||
marketName = marketName.replace("/USDC", "-SPOT");
|
||||
}
|
||||
return marketName;
|
||||
}
|
||||
|
||||
/// general
|
||||
|
||||
export function zipDict<K extends string | number | symbol, V>(
|
||||
|
|
|
@ -13,7 +13,12 @@ import { body } from "express-validator";
|
|||
import { sumBy } from "lodash";
|
||||
import MangoSimpleClient from "mango.simple.client";
|
||||
import { Balances } from "./types";
|
||||
import { i80f48ToPercent, isValidCoin } from "./utils";
|
||||
import {
|
||||
i80f48ToPercent,
|
||||
isValidCoin,
|
||||
logger,
|
||||
patchInternalMarketName,
|
||||
} from "./utils";
|
||||
|
||||
class WalletController implements Controller {
|
||||
public path = "/api/wallet";
|
||||
|
@ -49,6 +54,7 @@ class WalletController implements Controller {
|
|||
} as BalancesDto);
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error(`message - ${error.message}, ${error.stack}`);
|
||||
return response.status(500).send({
|
||||
errors: [{ msg: error.message } as RequestErrorCustom],
|
||||
});
|
||||
|
@ -216,7 +222,7 @@ class WalletController implements Controller {
|
|||
// append balances for base symbols
|
||||
const balanceDtos = baseBalances.map((baseBalance) => {
|
||||
return {
|
||||
coin: baseBalance.key,
|
||||
coin: patchInternalMarketName(baseBalance.key),
|
||||
free: baseBalance.deposits.toNumber(),
|
||||
spotBorrow: baseBalance.borrows.toNumber(),
|
||||
total: baseBalance.net.toNumber(),
|
||||
|
@ -229,7 +235,9 @@ class WalletController implements Controller {
|
|||
|
||||
// append balance for quote symbol
|
||||
balanceDtos.push({
|
||||
coin: this.mangoSimpleClient.mangoGroupConfig.quoteSymbol,
|
||||
coin: patchInternalMarketName(
|
||||
this.mangoSimpleClient.mangoGroupConfig.quoteSymbol
|
||||
),
|
||||
free: quoteMeta.deposits.toNumber(),
|
||||
spotBorrow: quoteMeta.borrows.toNumber(),
|
||||
total: net.toNumber(),
|
||||
|
@ -251,6 +259,7 @@ class WalletController implements Controller {
|
|||
response.status(200);
|
||||
})
|
||||
.catch((error) => {
|
||||
logger.error(`message - ${error.message}, ${error.stack}`);
|
||||
return response.status(500).send({
|
||||
errors: [{ msg: error.message } as RequestErrorCustom],
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue