add includeOracle query param

This commit is contained in:
wphan
2023-10-10 22:44:59 -07:00
parent 65aa3b78de
commit 8ae9cb4fd2

View File

@@ -887,6 +887,21 @@ const main = async () => {
return l2; return l2;
}; };
const getOracleForMarket = (
marketType: MarketType,
marketIndex: number
): number => {
if (isVariant(marketType, 'spot')) {
return driftClient
.getOracleDataForSpotMarket(marketIndex)
.price.toNumber();
} else if (isVariant(marketType, 'perp')) {
return driftClient
.getOracleDataForPerpMarket(marketIndex)
.price.toNumber();
}
};
app.get('/l2', async (req, res, next) => { app.get('/l2', async (req, res, next) => {
try { try {
const { const {
@@ -899,6 +914,7 @@ const main = async () => {
includePhoenix, includePhoenix,
includeSerum, includeSerum,
grouping, // undefined or PRICE_PRECISION grouping, // undefined or PRICE_PRECISION
includeOracle,
} = req.query; } = req.query;
const { normedMarketType, normedMarketIndex, error } = validateDlobQuery( const { normedMarketType, normedMarketIndex, error } = validateDlobQuery(
@@ -945,14 +961,30 @@ const main = async () => {
return; return;
} }
const groupingBN = new BN(parseInt(grouping as string)); const groupingBN = new BN(parseInt(grouping as string));
res.writeHead(200); const l2Formatted = l2WithBNToStrings(
res.end( groupL2(l2, groupingBN, finalDepth)
JSON.stringify(l2WithBNToStrings(groupL2(l2, groupingBN, finalDepth)))
); );
if (`${includeOracle}`.toLowerCase() === 'true') {
l2Formatted['oracle'] = getOracleForMarket(
normedMarketType,
normedMarketIndex
);
}
res.writeHead(200);
res.end(JSON.stringify(l2Formatted));
} else { } else {
// make the BNs into strings // make the BNs into strings
const l2Formatted = l2WithBNToStrings(l2);
if (`${includeOracle}`.toLowerCase() === 'true') {
l2Formatted['oracle'] = getOracleForMarket(
normedMarketType,
normedMarketIndex
);
}
res.writeHead(200); res.writeHead(200);
res.end(JSON.stringify(l2WithBNToStrings(l2))); res.end(JSON.stringify(l2Formatted));
} }
} catch (err) { } catch (err) {
next(err); next(err);
@@ -1109,10 +1141,26 @@ const main = async () => {
parseInt(normedParam['grouping'] as string) parseInt(normedParam['grouping'] as string)
); );
return l2WithBNToStrings(groupL2(l2, groupingBN, finalDepth)); const l2Formatted = l2WithBNToStrings(
groupL2(l2, groupingBN, finalDepth)
);
if (`${normedParam['includeOracle']}`.toLowerCase() === 'true') {
l2Formatted['oracle'] = getOracleForMarket(
normedMarketType,
normedMarketIndex
);
}
return l2Formatted;
} else { } else {
// make the BNs into strings // make the BNs into strings
return l2WithBNToStrings(l2); const l2Formatted = l2WithBNToStrings(l2);
if (`${normedParam['includeOracle']}`.toLowerCase() === 'true') {
l2Formatted['oracle'] = getOracleForMarket(
normedMarketType,
normedMarketIndex
);
}
return l2Formatted;
} }
}); });
@@ -1125,7 +1173,7 @@ const main = async () => {
app.get('/l3', async (req, res, next) => { app.get('/l3', async (req, res, next) => {
try { try {
const { marketName, marketIndex, marketType } = req.query; const { marketName, marketIndex, marketType, includeOracle } = req.query;
const { normedMarketType, normedMarketIndex, error } = validateDlobQuery( const { normedMarketType, normedMarketIndex, error } = validateDlobQuery(
marketType as string, marketType as string,
@@ -1153,6 +1201,10 @@ const main = async () => {
} }
} }
if (`${includeOracle}`.toLowerCase() === 'true') {
l3['oracle'] = getOracleForMarket(normedMarketType, normedMarketIndex);
}
res.writeHead(200); res.writeHead(200);
res.end(JSON.stringify(l3)); res.end(JSON.stringify(l3));
} catch (err) { } catch (err) {