add idlWithSlot market filter

This commit is contained in:
wphan
2023-05-23 09:55:14 -07:00
parent 74554249e4
commit 3589467d17

View File

@@ -24,6 +24,7 @@ import {
PerpMarkets, PerpMarkets,
DLOBSubscriber, DLOBSubscriber,
MarketType, MarketType,
isVariant,
} from "@drift-labs/sdk"; } from "@drift-labs/sdk";
import { Mutex } from "async-mutex"; import { Mutex } from "async-mutex";
@@ -549,40 +550,66 @@ const main = async () => {
} }
}); });
app.get( app.get("/orders/idlWithSlot", handleResponseTime, async (req, res, next) => {
"/orders/idlWithSlot", try {
handleResponseTime, const { marketName, marketIndex, marketType } = req.query;
async (_req, res, next) => { const { normedMarketType, normedMarketIndex, error } = validateDlobQuery(
try { marketType as string,
const dlobOrders: DLOBOrders = []; marketIndex as string,
marketName as string
);
const useFilter =
marketName !== undefined ||
marketIndex !== undefined ||
marketType !== undefined;
for (const user of userMap.values()) { if (useFilter) {
const userAccount = user.getUserAccount(); if (
error ||
normedMarketType === undefined ||
normedMarketIndex === undefined
) {
res.status(400).send(error);
return;
}
}
for (const order of userAccount.orders) { const dlobOrders: DLOBOrders = [];
if (getVariant(order.status) === "init") {
for (const user of userMap.values()) {
const userAccount = user.getUserAccount();
for (const order of userAccount.orders) {
if (getVariant(order.status) === "init") {
continue;
}
if (useFilter) {
if (
getVariant(order.marketType) !== getVariant(normedMarketType) ||
order.marketIndex !== normedMarketIndex
) {
continue; continue;
} }
dlobOrders.push({
user: user.getUserAccountPublicKey(),
order,
} as DLOBOrder);
} }
}
res.writeHead(200); dlobOrders.push({
res.end( user: user.getUserAccountPublicKey(),
JSON.stringify({ order,
slot: bulkAccountLoader.mostRecentSlot, } as DLOBOrder);
data: dlobCoder.encode(dlobOrders).toString("base64"), }
})
);
} catch (err) {
next(err);
} }
res.end(
JSON.stringify({
slot: bulkAccountLoader.mostRecentSlot,
data: dlobCoder.encode(dlobOrders).toString("base64"),
})
);
} catch (err) {
next(err);
} }
); });
const validateDlobQuery = ( const validateDlobQuery = (
marketType?: string, marketType?: string,