fix isSpot check

This commit is contained in:
wphan
2023-05-31 17:18:59 -07:00
parent e80ec8bcdd
commit 0b50e4894a

View File

@@ -27,8 +27,9 @@ import {
SpotMarketConfig,
PhoenixSubscriber,
SerumSubscriber,
DLOBNode,
} from "@drift-labs/sdk";
DLOBNode,
isVariant,
} from '@drift-labs/sdk';
import { Mutex } from 'async-mutex';
@@ -498,7 +499,7 @@ const main = async () => {
const userAccount = user.getUserAccount();
for (const order of userAccount.orders) {
if (getVariant(order.status) === 'init') {
if (isVariant(order.status, 'init')) {
continue;
}
@@ -553,7 +554,7 @@ const main = async () => {
const userAccount = user.getUserAccount();
for (const order of userAccount.orders) {
if (getVariant(order.status) === 'init') {
if (isVariant(order.status, 'init')) {
continue;
}
@@ -617,7 +618,7 @@ const main = async () => {
const userAccount = user.getUserAccount();
for (const order of userAccount.orders) {
if (getVariant(order.status) === 'init') {
if (isVariant(order.status, 'init')) {
continue;
}
@@ -665,7 +666,7 @@ const main = async () => {
const userAccount = user.getUserAccount();
for (const order of userAccount.orders) {
if (getVariant(order.status) === 'init') {
if (isVariant(order.status, 'init')) {
continue;
}
@@ -769,107 +770,15 @@ const main = async () => {
};
};
app.get("/topMakers", handleResponseTime, async (req, res, next) => {
try {
const {
marketName,
marketIndex,
marketType,
side, // bid or ask
limit, // number of unique makers to return, if undefined will return all
} = req.query;
const { normedMarketType, normedMarketIndex, error } = validateDlobQuery(
marketType as string,
marketIndex as string,
marketName as string
);
if (error) {
res.status(400).send(error);
return;
}
if (side !== "bid" && side !== "ask") {
res.status(400).send("Bad Request: side must be either bid or ask");
return;
}
const normedSide = (side as string).toLowerCase();
const oracle = driftClient.getOracleDataForPerpMarket(normedMarketIndex);
let normedLimit = undefined;
if (limit) {
if (isNaN(parseInt(limit as string))) {
res
.status(400)
.send("Bad Request: limit must be a number if supplied");
return;
}
normedLimit = parseInt(limit as string);
}
const topMakers: Set<string> = new Set();
let foundMakers = 0;
const findMakers = (sideGenerator: Generator<DLOBNode>) => {
for (const side of sideGenerator) {
if (limit && foundMakers >= normedLimit) {
break;
}
if (side.userAccount) {
const maker = side.userAccount.toBase58();
if (topMakers.has(maker)) {
continue;
} else {
topMakers.add(side.userAccount.toBase58());
foundMakers++;
}
} else {
continue;
}
}
};
if (normedSide === "bid") {
findMakers(
dlobSubscriber
.getDLOB()
.getRestingLimitBids(
normedMarketIndex,
slotSubscriber.getSlot(),
normedMarketType,
oracle
)
);
} else {
findMakers(
dlobSubscriber
.getDLOB()
.getRestingLimitAsks(
normedMarketIndex,
slotSubscriber.getSlot(),
normedMarketType,
oracle
)
);
}
res.writeHead(200);
res.end(JSON.stringify([...topMakers]));
} catch (err) {
next(err);
}
});
app.get("/l2", handleResponseTime, async (req, res, next) => {
try {
const {
marketName,
marketIndex,
marketType,
depth,
includeVamm,
includePhoenix,
includeSerum,
} = req.query;
app.get('/topMakers', handleResponseTime, async (req, res, next) => {
try {
const {
marketName,
marketIndex,
marketType,
side, // bid or ask
limit, // number of unique makers to return, if undefined will return all
} = req.query;
const { normedMarketType, normedMarketIndex, error } = validateDlobQuery(
marketType as string,
@@ -881,7 +790,99 @@ const main = async () => {
return;
}
const isSpot = getVariant(normedMarketType);
if (side !== 'bid' && side !== 'ask') {
res.status(400).send('Bad Request: side must be either bid or ask');
return;
}
const normedSide = (side as string).toLowerCase();
const oracle = driftClient.getOracleDataForPerpMarket(normedMarketIndex);
let normedLimit = undefined;
if (limit) {
if (isNaN(parseInt(limit as string))) {
res
.status(400)
.send('Bad Request: limit must be a number if supplied');
return;
}
normedLimit = parseInt(limit as string);
}
const topMakers: Set<string> = new Set();
let foundMakers = 0;
const findMakers = (sideGenerator: Generator<DLOBNode>) => {
for (const side of sideGenerator) {
if (limit && foundMakers >= normedLimit) {
break;
}
if (side.userAccount) {
const maker = side.userAccount.toBase58();
if (topMakers.has(maker)) {
continue;
} else {
topMakers.add(side.userAccount.toBase58());
foundMakers++;
}
} else {
continue;
}
}
};
if (normedSide === 'bid') {
findMakers(
dlobSubscriber
.getDLOB()
.getRestingLimitBids(
normedMarketIndex,
slotSubscriber.getSlot(),
normedMarketType,
oracle
)
);
} else {
findMakers(
dlobSubscriber
.getDLOB()
.getRestingLimitAsks(
normedMarketIndex,
slotSubscriber.getSlot(),
normedMarketType,
oracle
)
);
}
res.writeHead(200);
res.end(JSON.stringify([...topMakers]));
} catch (err) {
next(err);
}
});
app.get('/l2', handleResponseTime, async (req, res, next) => {
try {
const {
marketName,
marketIndex,
marketType,
depth,
includeVamm,
includePhoenix,
includeSerum,
} = req.query;
const { normedMarketType, normedMarketIndex, error } = validateDlobQuery(
marketType as string,
marketIndex as string,
marketName as string
);
if (error) {
res.status(400).send(error);
return;
}
const isSpot = isVariant(normedMarketType, 'spot');
const l2 = await dlobSubscriber.getL2({
marketIndex: normedMarketIndex,