fix isSpot check
This commit is contained in:
217
src/index.ts
217
src/index.ts
@@ -27,8 +27,9 @@ import {
|
|||||||
SpotMarketConfig,
|
SpotMarketConfig,
|
||||||
PhoenixSubscriber,
|
PhoenixSubscriber,
|
||||||
SerumSubscriber,
|
SerumSubscriber,
|
||||||
DLOBNode,
|
DLOBNode,
|
||||||
} from "@drift-labs/sdk";
|
isVariant,
|
||||||
|
} from '@drift-labs/sdk';
|
||||||
|
|
||||||
import { Mutex } from 'async-mutex';
|
import { Mutex } from 'async-mutex';
|
||||||
|
|
||||||
@@ -498,7 +499,7 @@ const main = async () => {
|
|||||||
const userAccount = user.getUserAccount();
|
const userAccount = user.getUserAccount();
|
||||||
|
|
||||||
for (const order of userAccount.orders) {
|
for (const order of userAccount.orders) {
|
||||||
if (getVariant(order.status) === 'init') {
|
if (isVariant(order.status, 'init')) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -553,7 +554,7 @@ const main = async () => {
|
|||||||
const userAccount = user.getUserAccount();
|
const userAccount = user.getUserAccount();
|
||||||
|
|
||||||
for (const order of userAccount.orders) {
|
for (const order of userAccount.orders) {
|
||||||
if (getVariant(order.status) === 'init') {
|
if (isVariant(order.status, 'init')) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -617,7 +618,7 @@ const main = async () => {
|
|||||||
const userAccount = user.getUserAccount();
|
const userAccount = user.getUserAccount();
|
||||||
|
|
||||||
for (const order of userAccount.orders) {
|
for (const order of userAccount.orders) {
|
||||||
if (getVariant(order.status) === 'init') {
|
if (isVariant(order.status, 'init')) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -665,7 +666,7 @@ const main = async () => {
|
|||||||
const userAccount = user.getUserAccount();
|
const userAccount = user.getUserAccount();
|
||||||
|
|
||||||
for (const order of userAccount.orders) {
|
for (const order of userAccount.orders) {
|
||||||
if (getVariant(order.status) === 'init') {
|
if (isVariant(order.status, 'init')) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -769,107 +770,15 @@ const main = async () => {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
app.get("/topMakers", handleResponseTime, async (req, res, next) => {
|
app.get('/topMakers', handleResponseTime, async (req, res, next) => {
|
||||||
try {
|
try {
|
||||||
const {
|
const {
|
||||||
marketName,
|
marketName,
|
||||||
marketIndex,
|
marketIndex,
|
||||||
marketType,
|
marketType,
|
||||||
side, // bid or ask
|
side, // bid or ask
|
||||||
limit, // number of unique makers to return, if undefined will return all
|
limit, // number of unique makers to return, if undefined will return all
|
||||||
} = req.query;
|
} = 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;
|
|
||||||
|
|
||||||
const { normedMarketType, normedMarketIndex, error } = validateDlobQuery(
|
const { normedMarketType, normedMarketIndex, error } = validateDlobQuery(
|
||||||
marketType as string,
|
marketType as string,
|
||||||
@@ -881,7 +790,99 @@ const main = async () => {
|
|||||||
return;
|
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({
|
const l2 = await dlobSubscriber.getL2({
|
||||||
marketIndex: normedMarketIndex,
|
marketIndex: normedMarketIndex,
|
||||||
|
|||||||
Reference in New Issue
Block a user