diff --git a/drift-common b/drift-common index 006397d..e91ef8b 160000 --- a/drift-common +++ b/drift-common @@ -1 +1 @@ -Subproject commit 006397d9c8f1b0aaf4d42186534bcf3252d1abcd +Subproject commit e91ef8b3ea8ca61bba760e4b8804cd9d12c1f26d diff --git a/src/index.ts b/src/index.ts index a092bb1..0732a00 100644 --- a/src/index.ts +++ b/src/index.ts @@ -546,10 +546,34 @@ const main = async (): Promise => { selectMostRecentBySlot ); const depthToUse = Math.min(parseInt(adjustedDepth as string) ?? 1, 100); - redisL2['bids'] = redisL2['bids']?.slice(0, depthToUse); - redisL2['asks'] = redisL2['asks']?.slice(0, depthToUse); if (redisL2) { + redisL2['bids'] = redisL2['bids']?.slice(0, depthToUse); + redisL2['asks'] = redisL2['asks']?.slice(0, depthToUse); l2Formatted = JSON.stringify(redisL2); + } else { + const oracleData = isSpot + ? driftClient.getOracleDataForSpotMarket(normedMarketIndex) + : driftClient.getOracleDataForPerpMarket(normedMarketIndex); + const response = { + bids: [], + asks: [], + marketType: normedMarketType, + marketIndex: normedMarketIndex, + marketName: undefined, + slot: dlobProvider.getSlot(), + oracle: oracleData.price.toNumber(), + oracleData: { + price: oracleData.price.toNumber(), + slot: oracleData.slot.toNumber(), + confidence: oracleData.confidence.toNumber(), + hasSufficientNumberOfDataPoints: true, + twap: oracleData.twap.toNumber(), + twapConfidence: oracleData.twapConfidence.toNumber(), + }, + ts: Date.now(), + marketSlot: dlobProvider.getSlot(), + }; + l2Formatted = JSON.stringify(response); } if (l2Formatted) { @@ -636,10 +660,34 @@ const main = async (): Promise => { selectMostRecentBySlot ); const depth = Math.min(parseInt(adjustedDepth as string) ?? 1, 100); - redisL2['bids'] = redisL2['bids']?.slice(0, depth); - redisL2['asks'] = redisL2['asks']?.slice(0, depth); if (redisL2) { + redisL2['bids'] = redisL2['bids']?.slice(0, depth); + redisL2['asks'] = redisL2['asks']?.slice(0, depth); l2Formatted = redisL2; + } else { + const oracleData = isSpot + ? driftClient.getOracleDataForSpotMarket(normedMarketIndex) + : driftClient.getOracleDataForPerpMarket(normedMarketIndex); + const response = { + bids: [], + asks: [], + marketType: normedMarketType, + marketIndex: normedMarketIndex, + marketName: undefined, + slot: dlobProvider.getSlot(), + oracle: oracleData.price.toNumber(), + oracleData: { + price: oracleData.price.toNumber(), + slot: oracleData.slot.toNumber(), + confidence: oracleData.confidence.toNumber(), + hasSufficientNumberOfDataPoints: true, + twap: oracleData.twap.toNumber(), + twapConfidence: oracleData.twapConfidence.toNumber(), + }, + ts: Date.now(), + marketSlot: dlobProvider.getSlot(), + }; + l2Formatted = JSON.stringify(response); } if (l2Formatted) {