fix some todods
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
parent
ed174fb95b
commit
87a64b8843
|
@ -23,7 +23,7 @@ class CoinController implements Controller {
|
|||
const coinDtos = this.mangoSimpleClient.mangoGroupConfig.tokens.map(
|
||||
(tokenConfig) => {
|
||||
return {
|
||||
name: tokenConfig.symbol, // todo add full name to tokencofig
|
||||
name: tokenConfig.symbol,
|
||||
id: tokenConfig.symbol,
|
||||
} as CoinDto;
|
||||
}
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
export interface BadParamError {
|
||||
export interface BadRequestError {
|
||||
value: string;
|
||||
msg: string;
|
||||
param: string;
|
||||
location: string;
|
||||
}
|
||||
|
||||
export interface BadRequestError {
|
||||
export interface BadRequestErrorCustom {
|
||||
msg: string;
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ import {
|
|||
} from "@blockworks-foundation/mango-client";
|
||||
import { Market } from "@project-serum/serum";
|
||||
import Big from "big.js";
|
||||
import { BadParamError } from "dtos";
|
||||
import { BadRequestError } from "dtos";
|
||||
import { NextFunction, Request, Response, Router } from "express";
|
||||
import { param, query, validationResult } from "express-validator";
|
||||
import fetch from "node-fetch";
|
||||
|
@ -25,11 +25,9 @@ class MarketsController implements Controller {
|
|||
|
||||
private initializeRoutes() {
|
||||
// GET /markets
|
||||
// todo fetch vs get naming
|
||||
this.router.get(this.path, this.fetchMarkets);
|
||||
|
||||
// GET /markets/{market_name}
|
||||
// todo fetch or get as prefix for methods?
|
||||
this.router.get(
|
||||
`${this.path}/:market_name`,
|
||||
param("market_name").custom(isValidMarket),
|
||||
|
@ -79,7 +77,7 @@ class MarketsController implements Controller {
|
|||
) => {
|
||||
const errors = validationResult(request);
|
||||
if (!errors.isEmpty()) {
|
||||
return response.status(400).json({ errors: errors.array() as BadParamError[] });
|
||||
return response.status(400).json({ errors: errors.array() as BadRequestError[] });
|
||||
}
|
||||
|
||||
const marketName = request.params.market_name;
|
||||
|
@ -134,7 +132,6 @@ class MarketsController implements Controller {
|
|||
marketConfig.name
|
||||
)) as OrderInfo[][],
|
||||
fetch(
|
||||
// todo: replace toBase58 with toString() everywhere
|
||||
`https://serum-history.herokuapp.com/trades/address/${marketConfig.publicKey.toBase58()}`
|
||||
),
|
||||
]);
|
||||
|
@ -225,7 +222,7 @@ class MarketsController implements Controller {
|
|||
) => {
|
||||
const errors = validationResult(request);
|
||||
if (!errors.isEmpty()) {
|
||||
return response.status(400).json({ errors: errors.array() as BadParamError[] });
|
||||
return response.status(400).json({ errors: errors.array() as BadRequestError[] });
|
||||
}
|
||||
|
||||
const marketName = request.params.market_name;
|
||||
|
@ -264,7 +261,7 @@ class MarketsController implements Controller {
|
|||
) => {
|
||||
const errors = validationResult(request);
|
||||
if (!errors.isEmpty()) {
|
||||
return response.status(400).json({ errors: errors.array() as BadParamError[] });
|
||||
return response.status(400).json({ errors: errors.array() as BadRequestError[] });
|
||||
}
|
||||
|
||||
const allMarketConfigs = getAllMarkets(
|
||||
|
@ -304,7 +301,7 @@ class MarketsController implements Controller {
|
|||
) => {
|
||||
const errors = validationResult(request);
|
||||
if (!errors.isEmpty()) {
|
||||
return response.status(400).json({ errors: errors.array() as BadParamError[] }); }
|
||||
return response.status(400).json({ errors: errors.array() as BadRequestError[] }); }
|
||||
|
||||
const marketName = request.params.market_name;
|
||||
const resolution = String(request.query.resolution);
|
||||
|
@ -397,7 +394,7 @@ export async function getVolumeForMarket(
|
|||
marketConfig: MarketConfig
|
||||
): Promise<Number> {
|
||||
const perpVolume = await fetch(
|
||||
`https://event-history-api.herokuapp.com/stats/perps/${marketConfig.publicKey.toString()}`
|
||||
`https://event-history-api.herokuapp.com/stats/perps/${marketConfig.publicKey.toBase58()}`
|
||||
);
|
||||
const parsedPerpVolume = await perpVolume.json();
|
||||
return Number(parsedPerpVolume?.data?.volume);
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
import { PerpOrder } from "@blockworks-foundation/mango-client";
|
||||
import { Order } from "@project-serum/serum/lib/market";
|
||||
import { BadRequestError, BadRequestErrorCustom } from "dtos";
|
||||
import { NextFunction, Request, Response, Router } from "express";
|
||||
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 { PerpOrder } from "@blockworks-foundation/mango-client";
|
||||
import { Order } from "@project-serum/serum/lib/market";
|
||||
import { NextFunction, Request, Response, Router } from "express";
|
||||
import { param, query, validationResult } from "express-validator";
|
||||
import { BadParamError, BadRequestError } from "dtos";
|
||||
|
||||
class OrdersController implements Controller {
|
||||
public path = "/api/orders";
|
||||
|
@ -25,7 +25,19 @@ class OrdersController implements Controller {
|
|||
);
|
||||
|
||||
// POST /orders
|
||||
this.router.post(this.path, this.placeOrder);
|
||||
this.router.post(
|
||||
this.path,
|
||||
body("market").not().isEmpty().custom(isValidMarket),
|
||||
body("side").not().isEmpty().isIn(["sell", "buy"]),
|
||||
body("type").not().isEmpty().isIn(["limit", "market"]),
|
||||
body("price").isNumeric(),
|
||||
body("size").not().isEmpty().isNumeric(),
|
||||
body("reduceOnly").isBoolean(),
|
||||
body("ioc").isBoolean(),
|
||||
body("postOnly").isBoolean(),
|
||||
body("clientId").isNumeric(),
|
||||
this.placeOrder
|
||||
);
|
||||
|
||||
// // POST /orders/{order_id}/modify todo
|
||||
// this.router.post(this.path, this.modifyOrder);
|
||||
|
@ -50,7 +62,9 @@ class OrdersController implements Controller {
|
|||
) => {
|
||||
const errors = validationResult(request);
|
||||
if (!errors.isEmpty()) {
|
||||
return response.status(400).json({ errors: errors.array() as BadParamError[] });
|
||||
return response
|
||||
.status(400)
|
||||
.json({ errors: errors.array() as BadRequestError[] });
|
||||
}
|
||||
|
||||
const openOrders = await this.mangoSimpleClient.fetchAllBidsAndAsks(
|
||||
|
@ -73,7 +87,7 @@ class OrdersController implements Controller {
|
|||
side: perpOrder.side,
|
||||
size: perpOrder.size,
|
||||
status: "open",
|
||||
type: undefined, // todo should this always be limit?
|
||||
type: "limit",
|
||||
reduceOnly: undefined,
|
||||
ioc: undefined,
|
||||
postOnly: undefined,
|
||||
|
@ -115,10 +129,16 @@ class OrdersController implements Controller {
|
|||
response: Response,
|
||||
next: NextFunction
|
||||
) => {
|
||||
const errors = validationResult(request);
|
||||
if (!errors.isEmpty()) {
|
||||
return response
|
||||
.status(400)
|
||||
.json({ errors: errors.array() as BadRequestError[] });
|
||||
}
|
||||
|
||||
const placeOrderDto = request.body as PlaceOrderDto;
|
||||
logger.info("placing order...")
|
||||
// todo validation on placeOrderDto
|
||||
// todo validation of marketname
|
||||
logger.info(`placing order`);
|
||||
|
||||
try {
|
||||
await this.mangoSimpleClient.placeOrder(
|
||||
placeOrderDto.market,
|
||||
|
@ -135,7 +155,7 @@ class OrdersController implements Controller {
|
|||
);
|
||||
} catch (error) {
|
||||
return response.status(400).send({
|
||||
errors: [{ msg: error.message } as BadRequestError],
|
||||
errors: [{ msg: error.message } as BadRequestErrorCustom],
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -168,7 +188,7 @@ class OrdersController implements Controller {
|
|||
response: Response,
|
||||
next: NextFunction
|
||||
) => {
|
||||
// todo log info
|
||||
logger.info(`cancelling all orders...`);
|
||||
// todo: leads to 429 if too many orders exist, needs optimization
|
||||
await this.mangoSimpleClient.cancelAllOrders();
|
||||
response.send();
|
||||
|
@ -179,8 +199,8 @@ class OrdersController implements Controller {
|
|||
response: Response,
|
||||
next: NextFunction
|
||||
) => {
|
||||
// todo log info
|
||||
const orderId = request.params.order_id;
|
||||
logger.info(`cancelling order with orderId ${orderId}...`);
|
||||
this.mangoSimpleClient
|
||||
.getOrderByOrderId(orderId)
|
||||
.then((orderInfos) => {
|
||||
|
@ -210,8 +230,8 @@ class OrdersController implements Controller {
|
|||
response: Response,
|
||||
next: NextFunction
|
||||
) => {
|
||||
// todo log info
|
||||
const clientId = request.params.client_id;
|
||||
logger.info(`cancelling order with clientId ${clientId}...`);
|
||||
this.mangoSimpleClient
|
||||
.getOrderByClientId(clientId)
|
||||
.then((orderInfos) => {
|
||||
|
@ -312,7 +332,7 @@ interface PlaceOrderDto {
|
|||
reduceOnly: boolean;
|
||||
ioc: boolean;
|
||||
postOnly: boolean;
|
||||
clientId: number; // todo: ftx uses string
|
||||
clientId: number;
|
||||
}
|
||||
|
||||
interface PlaceOrderResponseDto {
|
||||
|
|
|
@ -1,17 +1,15 @@
|
|||
import { Balances } from "./types";
|
||||
import { i80f48ToPercent } from "./utils";
|
||||
import {
|
||||
I80F48,
|
||||
getTokenBySymbol,
|
||||
nativeI80F48ToUi,
|
||||
getTokenBySymbol, I80F48, nativeI80F48ToUi,
|
||||
nativeToUi,
|
||||
QUOTE_INDEX,
|
||||
QUOTE_INDEX
|
||||
} from "@blockworks-foundation/mango-client";
|
||||
import { Market, OpenOrders } from "@project-serum/serum";
|
||||
import { OpenOrders } from "@project-serum/serum";
|
||||
import Controller from "controller.interface";
|
||||
import { NextFunction, Request, Response, Router } from "express";
|
||||
import { sumBy } from "lodash";
|
||||
import MangoSimpleClient from "mango.simple.client";
|
||||
import { Balances } from "./types";
|
||||
import { i80f48ToPercent } from "./utils";
|
||||
|
||||
class WalletController implements Controller {
|
||||
public path = "/api/wallet";
|
||||
|
@ -22,10 +20,10 @@ class WalletController implements Controller {
|
|||
}
|
||||
|
||||
private initializeRoutes() {
|
||||
this.router.get(`${this.path}/balances`, this.getBalances);
|
||||
this.router.get(`${this.path}/balances`, this.fetchBalances);
|
||||
}
|
||||
|
||||
private getBalances = async (
|
||||
private fetchBalances = async (
|
||||
request: Request,
|
||||
response: Response,
|
||||
next: NextFunction
|
||||
|
|
Loading…
Reference in New Issue