Skip to content

Commit f60c14c

Browse files
committed
Handle empty Bullish ticker messages
1 parent 32c35b1 commit f60c14c

3 files changed

Lines changed: 21 additions & 3 deletions

File tree

src/mappers/bullish.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,9 @@ export class BullishDerivativeTickerMapper implements Mapper<'bullish', Derivati
123123

124124
if (message.dataType === 'V1TATickerResponse' && (message.type === 'snapshot' || message.type === 'update')) {
125125
const tickerMessage = message as BullishTickerMessage
126+
const symbol = tickerMessage.data?.symbol
126127

127-
return tickerMessage.data.symbol.endsWith('-PERP') || /-\d{8}$/.test(tickerMessage.data.symbol)
128+
return symbol !== undefined && (symbol.endsWith('-PERP') || /-\d{8}$/.test(symbol))
128129
}
129130

130131
return false
@@ -183,8 +184,9 @@ export class BullishOptionSummaryMapper implements Mapper<'bullish', OptionSumma
183184

184185
if (message.dataType === 'V1TATickerResponse' && (message.type === 'snapshot' || message.type === 'update')) {
185186
const tickerMessage = message as BullishTickerMessage
187+
const symbol = tickerMessage.data?.symbol
186188

187-
return tickerMessage.data.symbol.endsWith('-C') || tickerMessage.data.symbol.endsWith('-P')
189+
return symbol !== undefined && (symbol.endsWith('-C') || symbol.endsWith('-P'))
188190
}
189191

190192
return false
@@ -263,7 +265,7 @@ type BullishMessageRole = 'snapshot' | 'update'
263265
type BullishAnonymousTradeUpdateMessage = BullishDataMessage<'V1TAAnonymousTradeUpdate', BullishAnonymousTradeUpdateData>
264266
type BullishLevel2Message = BullishDataMessage<'V1TALevel2', BullishLevel2Data>
265267
type BullishLevel1Message = BullishDataMessage<'V1TALevel1', BullishLevel1Data>
266-
type BullishTickerMessage = BullishDataMessage<'V1TATickerResponse', BullishTickerData>
268+
type BullishTickerMessage = BullishDataMessage<'V1TATickerResponse', BullishTickerData | null>
267269
type BullishDerivativeTickerMessage = BullishDataMessage<'V1TATickerResponse', BullishDerivativeTickerData>
268270
type BullishOptionTickerMessage = BullishDataMessage<'V1TATickerResponse', BullishOptionTickerData>
269271
type BullishIndexPriceMessage = BullishDataMessage<'V1TAIndexPrice', BullishIndexPriceData>

test/__snapshots__/mappers.test.ts.snap

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -979,6 +979,8 @@ exports[`map bullish derivative ticker messages 8`] = `[]`;
979979

980980
exports[`map bullish derivative ticker messages 9`] = `[]`;
981981

982+
exports[`map bullish derivative ticker messages 10`] = `[]`;
983+
982984
exports[`map bullish option summary messages 1`] = `
983985
[
984986
{
@@ -1100,6 +1102,8 @@ exports[`map bullish option summary messages 7`] = `[]`;
11001102

11011103
exports[`map bullish option summary messages 8`] = `[]`;
11021104

1105+
exports[`map bullish option summary messages 9`] = `[]`;
1106+
11031107
exports[`map bullish order book messages 1`] = `
11041108
[
11051109
{

test/mappers.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10334,6 +10334,12 @@ test('map bullish derivative ticker messages', () => {
1033410334
createdAtDatetime: '2026-04-24T14:58:45.522Z',
1033510335
otcBaseVolume: '0.00000000'
1033610336
}
10337+
},
10338+
// Bullish can publish empty ticker updates; they should be ignored by derivative ticker mapper
10339+
{
10340+
type: 'update',
10341+
dataType: 'V1TATickerResponse',
10342+
data: null
1033710343
}
1033810344
]
1033910345

@@ -10536,6 +10542,12 @@ test('map bullish option summary messages', () => {
1053610542
openInterestUSD: '50507926.2656',
1053710543
otcBaseVolume: '92.17200000'
1053810544
}
10545+
},
10546+
// Bullish can publish empty ticker updates; they should be ignored by option summary mapper
10547+
{
10548+
type: 'update',
10549+
dataType: 'V1TATickerResponse',
10550+
data: null
1053910551
}
1054010552
]
1054110553

0 commit comments

Comments
 (0)