tardis-dev 16.4.0 → 16.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/README.md +1 -1
  2. package/dist/exchangedetails.d.ts +1 -1
  3. package/dist/exchangedetails.d.ts.map +1 -1
  4. package/dist/handy.d.ts +9 -4
  5. package/dist/handy.d.ts.map +1 -1
  6. package/dist/handy.js +17 -12
  7. package/dist/handy.js.map +1 -1
  8. package/dist/mappers/binanceeuropeanoptions.d.ts.map +1 -1
  9. package/dist/mappers/binanceeuropeanoptions.js +30 -70
  10. package/dist/mappers/binanceeuropeanoptions.js.map +1 -1
  11. package/dist/mappers/bitget.js +5 -5
  12. package/dist/mappers/bitget.js.map +1 -1
  13. package/dist/mappers/bitmex.js +5 -5
  14. package/dist/mappers/bitmex.js.map +1 -1
  15. package/dist/mappers/bullish.js +15 -15
  16. package/dist/mappers/bullish.js.map +1 -1
  17. package/dist/mappers/bybit.js +16 -16
  18. package/dist/mappers/bybit.js.map +1 -1
  19. package/dist/mappers/deribit.js +12 -12
  20. package/dist/mappers/deribit.js.map +1 -1
  21. package/dist/mappers/ftx.js +5 -5
  22. package/dist/mappers/ftx.js.map +1 -1
  23. package/dist/mappers/huobi.d.ts.map +1 -1
  24. package/dist/mappers/huobi.js +20 -20
  25. package/dist/mappers/huobi.js.map +1 -1
  26. package/dist/mappers/index.d.ts.map +1 -1
  27. package/dist/mappers/index.js +4 -2
  28. package/dist/mappers/index.js.map +1 -1
  29. package/dist/mappers/kraken.js +5 -5
  30. package/dist/mappers/kraken.js.map +1 -1
  31. package/dist/mappers/kucoinfutures.d.ts.map +1 -1
  32. package/dist/mappers/kucoinfutures.js +2 -2
  33. package/dist/mappers/kucoinfutures.js.map +1 -1
  34. package/dist/mappers/lighter.js +5 -5
  35. package/dist/mappers/lighter.js.map +1 -1
  36. package/dist/mappers/okex.js +38 -38
  37. package/dist/mappers/okex.js.map +1 -1
  38. package/dist/mappers/phemex.d.ts.map +1 -1
  39. package/dist/mappers/phemex.js +15 -1
  40. package/dist/mappers/phemex.js.map +1 -1
  41. package/dist/mappers/serum.js +5 -5
  42. package/dist/mappers/serum.js.map +1 -1
  43. package/package.json +1 -1
  44. package/src/exchangedetails.ts +1 -1
  45. package/src/handy.ts +18 -14
  46. package/src/mappers/binanceeuropeanoptions.ts +30 -79
  47. package/src/mappers/bitget.ts +5 -5
  48. package/src/mappers/bitmex.ts +5 -5
  49. package/src/mappers/bullish.ts +15 -15
  50. package/src/mappers/bybit.ts +16 -16
  51. package/src/mappers/deribit.ts +12 -12
  52. package/src/mappers/ftx.ts +5 -5
  53. package/src/mappers/huobi.ts +20 -20
  54. package/src/mappers/index.ts +4 -2
  55. package/src/mappers/kraken.ts +5 -5
  56. package/src/mappers/kucoinfutures.ts +2 -2
  57. package/src/mappers/lighter.ts +5 -5
  58. package/src/mappers/okex.ts +38 -38
  59. package/src/mappers/phemex.ts +15 -1
  60. package/src/mappers/serum.ts +5 -5
@@ -1,4 +1,4 @@
1
- import { asNumberIfValid, CircularBuffer, upperCaseSymbols } from '../handy.ts'
1
+ import { asNonZeroNumberOrUndefined, CircularBuffer, upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, BookTicker, DerivativeTicker, Exchange, FilterForExchange, Liquidation, OptionSummary, Trade } from '../types.ts'
3
3
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
4
4
 
@@ -489,26 +489,26 @@ export class HuobiOptionsSummaryMapper implements Mapper<'huobi-dm-options', Opt
489
489
  strikePrice: Number(symbolParts[4]),
490
490
  expirationDate,
491
491
 
492
- bestBidPrice: asNumberIfValid(marketIndexMessage.data.bid_one),
492
+ bestBidPrice: asNonZeroNumberOrUndefined(marketIndexMessage.data.bid_one),
493
493
 
494
494
  bestBidAmount: undefined,
495
- bestBidIV: asNumberIfValid(marketIndexMessage.data.iv_bid_one),
495
+ bestBidIV: asNonZeroNumberOrUndefined(marketIndexMessage.data.iv_bid_one),
496
496
 
497
- bestAskPrice: asNumberIfValid(marketIndexMessage.data.ask_one),
497
+ bestAskPrice: asNonZeroNumberOrUndefined(marketIndexMessage.data.ask_one),
498
498
  bestAskAmount: undefined,
499
- bestAskIV: asNumberIfValid(marketIndexMessage.data.iv_ask_one),
499
+ bestAskIV: asNonZeroNumberOrUndefined(marketIndexMessage.data.iv_ask_one),
500
500
 
501
- lastPrice: asNumberIfValid(marketIndexMessage.data.last_price),
501
+ lastPrice: asNonZeroNumberOrUndefined(marketIndexMessage.data.last_price),
502
502
 
503
503
  openInterest,
504
504
 
505
- markPrice: marketIndexMessage.data.mark_price > 0 ? asNumberIfValid(marketIndexMessage.data.mark_price) : undefined,
506
- markIV: asNumberIfValid(marketIndexMessage.data.iv_mark_price),
505
+ markPrice: marketIndexMessage.data.mark_price > 0 ? asNonZeroNumberOrUndefined(marketIndexMessage.data.mark_price) : undefined,
506
+ markIV: asNonZeroNumberOrUndefined(marketIndexMessage.data.iv_mark_price),
507
507
 
508
- delta: asNumberIfValid(marketIndexMessage.data.delta),
509
- gamma: asNumberIfValid(marketIndexMessage.data.gamma),
510
- vega: asNumberIfValid(marketIndexMessage.data.vega),
511
- theta: asNumberIfValid(marketIndexMessage.data.theta),
508
+ delta: asNonZeroNumberOrUndefined(marketIndexMessage.data.delta),
509
+ gamma: asNonZeroNumberOrUndefined(marketIndexMessage.data.gamma),
510
+ vega: asNonZeroNumberOrUndefined(marketIndexMessage.data.vega),
511
+ theta: asNonZeroNumberOrUndefined(marketIndexMessage.data.theta),
512
512
  rho: undefined,
513
513
 
514
514
  underlyingPrice: lastUnderlyingPrice,
@@ -555,11 +555,11 @@ export class HuobiBookTickerMapper implements Mapper<'huobi' | 'huobi-dm' | 'huo
555
555
  symbol,
556
556
  exchange: this._exchange,
557
557
 
558
- askAmount: asNumberIfValid(message.tick.askSize),
559
- askPrice: asNumberIfValid(message.tick.ask),
558
+ askAmount: asNonZeroNumberOrUndefined(message.tick.askSize),
559
+ askPrice: asNonZeroNumberOrUndefined(message.tick.ask),
560
560
 
561
- bidPrice: asNumberIfValid(message.tick.bid),
562
- bidAmount: asNumberIfValid(message.tick.bidSize),
561
+ bidPrice: asNonZeroNumberOrUndefined(message.tick.bid),
562
+ bidAmount: asNonZeroNumberOrUndefined(message.tick.bidSize),
563
563
  timestamp: new Date(message.tick.quoteTime),
564
564
  localTimestamp: localTimestamp
565
565
  }
@@ -569,11 +569,11 @@ export class HuobiBookTickerMapper implements Mapper<'huobi' | 'huobi-dm' | 'huo
569
569
  symbol,
570
570
  exchange: this._exchange,
571
571
 
572
- askAmount: message.tick.ask !== undefined && message.tick.ask !== null ? asNumberIfValid(message.tick.ask[1]) : undefined,
573
- askPrice: message.tick.ask !== undefined && message.tick.ask !== null ? asNumberIfValid(message.tick.ask[0]) : undefined,
572
+ askAmount: asNonZeroNumberOrUndefined(message.tick.ask?.[1]),
573
+ askPrice: asNonZeroNumberOrUndefined(message.tick.ask?.[0]),
574
574
 
575
- bidPrice: message.tick.bid !== undefined && message.tick.bid !== null ? asNumberIfValid(message.tick.bid[0]) : undefined,
576
- bidAmount: message.tick.bid !== undefined && message.tick.bid !== null ? asNumberIfValid(message.tick.bid[1]) : undefined,
575
+ bidPrice: asNonZeroNumberOrUndefined(message.tick.bid?.[0]),
576
+ bidAmount: asNonZeroNumberOrUndefined(message.tick.bid?.[1]),
577
577
  timestamp: new Date(message.tick.ts),
578
578
  localTimestamp: localTimestamp
579
579
  }
@@ -183,6 +183,7 @@ const isRealTime = (date: Date) => {
183
183
 
184
184
  const OKEX_V5_API_SWITCH_DATE = new Date('2021-12-23T00:00:00.000Z')
185
185
  const OKEX_V5_TBT_BOOK_TICKER_RELEASE_DATE = new Date('2022-05-06T00:00:00.000Z')
186
+ const OKEX_PUBLIC_BOOKS_SWITCH_DATE = new Date('2026-05-21T00:00:00.000Z')
186
187
  const shouldUseOkexV5Mappers = (localTimestamp: Date) => {
187
188
  return isRealTime(localTimestamp) || localTimestamp.valueOf() >= OKEX_V5_API_SWITCH_DATE.valueOf()
188
189
  }
@@ -200,8 +201,9 @@ const shouldUsePoloniexV2Mappers = (localTimestamp: Date) => {
200
201
  // see https://status.tardis.dev/incidents/ryjyv8tgdgkj
201
202
  const shouldUseOKXPublicBooksChannel = (localTimestamp: Date) => {
202
203
  return (
203
- localTimestamp.valueOf() >= new Date('2023-02-25T00:00:00.000Z').valueOf() &&
204
- localTimestamp.valueOf() < new Date('2023-03-09T00:00:00.000Z').valueOf()
204
+ (localTimestamp.valueOf() >= new Date('2023-02-25T00:00:00.000Z').valueOf() &&
205
+ localTimestamp.valueOf() < new Date('2023-03-09T00:00:00.000Z').valueOf()) ||
206
+ localTimestamp.valueOf() >= OKEX_PUBLIC_BOOKS_SWITCH_DATE.valueOf()
205
207
  )
206
208
  }
207
209
 
@@ -1,4 +1,4 @@
1
- import { asNumberIfValid, upperCaseSymbols } from '../handy.ts'
1
+ import { asNonZeroNumberOrUndefined, upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, BookTicker, Trade } from '../types.ts'
3
3
  import { Mapper } from './mapper.ts'
4
4
 
@@ -158,11 +158,11 @@ export const krakenBookTickerMapper: Mapper<'kraken', BookTicker> = {
158
158
  symbol: message[3],
159
159
  exchange: 'kraken',
160
160
 
161
- askAmount: asNumberIfValid(askVolume),
162
- askPrice: asNumberIfValid(ask),
161
+ askAmount: asNonZeroNumberOrUndefined(askVolume),
162
+ askPrice: asNonZeroNumberOrUndefined(ask),
163
163
 
164
- bidPrice: asNumberIfValid(bid),
165
- bidAmount: asNumberIfValid(bidVolume),
164
+ bidPrice: asNonZeroNumberOrUndefined(bid),
165
+ bidAmount: asNonZeroNumberOrUndefined(bidVolume),
166
166
  timestamp,
167
167
  localTimestamp: localTimestamp
168
168
  }
@@ -1,5 +1,5 @@
1
1
  import { debug } from '../debug.ts'
2
- import { asNumberIfValid, CircularBuffer, upperCaseSymbols } from '../handy.ts'
2
+ import { asNonZeroNumberOrUndefined, CircularBuffer, upperCaseSymbols } from '../handy.ts'
3
3
  import { BookChange, BookTicker, DerivativeTicker, Trade } from '../types.ts'
4
4
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
5
5
 
@@ -310,7 +310,7 @@ export class KucoinFuturesDerivativeTickerMapper implements Mapper<'kucoin-futur
310
310
  }
311
311
 
312
312
  if (message.subject === 'contractDetails') {
313
- const openInterestValue = asNumberIfValid(message.data.openInterest)
313
+ const openInterestValue = asNonZeroNumberOrUndefined(message.data.openInterest)
314
314
  if (openInterestValue === undefined) {
315
315
  return
316
316
  }
@@ -1,4 +1,4 @@
1
- import { asNumberIfValid } from '../handy.ts'
1
+ import { asNonZeroNumberOrUndefined } from '../handy.ts'
2
2
  import { BookChange, BookTicker, DerivativeTicker, Liquidation, Trade } from '../types.ts'
3
3
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
4
4
 
@@ -144,10 +144,10 @@ export class LighterBookTickerMapper implements Mapper<'lighter', BookTicker> {
144
144
  type: 'book_ticker',
145
145
  symbol,
146
146
  exchange: 'lighter',
147
- askAmount: asNumberIfValid(message.ticker?.a?.size),
148
- askPrice: asNumberIfValid(message.ticker?.a?.price),
149
- bidPrice: asNumberIfValid(message.ticker?.b?.price),
150
- bidAmount: asNumberIfValid(message.ticker?.b?.size),
147
+ askAmount: asNonZeroNumberOrUndefined(message.ticker?.a?.size),
148
+ askPrice: asNonZeroNumberOrUndefined(message.ticker?.a?.price),
149
+ bidPrice: asNonZeroNumberOrUndefined(message.ticker?.b?.price),
150
+ bidAmount: asNonZeroNumberOrUndefined(message.ticker?.b?.size),
151
151
  timestamp: new Date(message.timestamp),
152
152
  localTimestamp
153
153
  }
@@ -1,4 +1,4 @@
1
- import { asNumberIfValid, upperCaseSymbols } from '../handy.ts'
1
+ import { asNonZeroNumberOrUndefined, upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, BookTicker, DerivativeTicker, Exchange, Liquidation, OptionSummary, Trade } from '../types.ts'
3
3
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
4
4
 
@@ -221,11 +221,11 @@ export class OkexV5BookTickerMapper implements Mapper<OKEX_EXCHANGES, BookTicker
221
221
  symbol: okexTicker.instId,
222
222
  exchange: this._exchange,
223
223
 
224
- askAmount: asNumberIfValid(okexTicker.askSz),
225
- askPrice: asNumberIfValid(okexTicker.askPx),
224
+ askAmount: asNonZeroNumberOrUndefined(okexTicker.askSz),
225
+ askPrice: asNonZeroNumberOrUndefined(okexTicker.askPx),
226
226
 
227
- bidPrice: asNumberIfValid(okexTicker.bidPx),
228
- bidAmount: asNumberIfValid(okexTicker.bidSz),
227
+ bidPrice: asNonZeroNumberOrUndefined(okexTicker.bidPx),
228
+ bidAmount: asNonZeroNumberOrUndefined(okexTicker.bidSz),
229
229
  timestamp: new Date(Number(okexTicker.ts)),
230
230
  localTimestamp: localTimestamp
231
231
  }
@@ -501,7 +501,7 @@ export class OkexV5OptionSummaryMapper implements Mapper<'okex-options', OptionS
501
501
  for (const dataMessage of message.data) {
502
502
  const indexTickerMessage = dataMessage as OkexV5IndexTickerMessage['data'][0]
503
503
 
504
- const lastIndexPrice = asNumberIfValid(indexTickerMessage.idxPx)
504
+ const lastIndexPrice = asNonZeroNumberOrUndefined(indexTickerMessage.idxPx)
505
505
  if (lastIndexPrice !== undefined) {
506
506
  this._indexPrices.set(indexTickerMessage.instId, lastIndexPrice)
507
507
  }
@@ -513,7 +513,7 @@ export class OkexV5OptionSummaryMapper implements Mapper<'okex-options', OptionS
513
513
  for (const dataMessage of message.data) {
514
514
  const openInterestMessage = dataMessage as OkexV5OpenInterestMessage['data'][0]
515
515
 
516
- const openInterestValue = asNumberIfValid(openInterestMessage.oi)
516
+ const openInterestValue = asNonZeroNumberOrUndefined(openInterestMessage.oi)
517
517
  if (openInterestValue !== undefined) {
518
518
  this._openInterests.set(openInterestMessage.instId, openInterestValue)
519
519
  }
@@ -525,7 +525,7 @@ export class OkexV5OptionSummaryMapper implements Mapper<'okex-options', OptionS
525
525
  for (const dataMessage of message.data) {
526
526
  const markPriceMessage = dataMessage as OkexV5MarkPriceMessage['data'][0]
527
527
 
528
- const markPrice = asNumberIfValid(markPriceMessage.markPx)
528
+ const markPrice = asNonZeroNumberOrUndefined(markPriceMessage.markPx)
529
529
  if (markPrice !== undefined) {
530
530
  this._markPrices.set(markPriceMessage.instId, markPrice)
531
531
  }
@@ -569,24 +569,24 @@ export class OkexV5OptionSummaryMapper implements Mapper<'okex-options', OptionS
569
569
  strikePrice,
570
570
  expirationDate,
571
571
 
572
- bestBidPrice: lastTickerInfo !== undefined ? asNumberIfValid(lastTickerInfo.bidPx) : undefined,
573
- bestBidAmount: lastTickerInfo !== undefined ? asNumberIfValid(lastTickerInfo.bidSz) : undefined,
574
- bestBidIV: asNumberIfValid(summary.bidVol),
572
+ bestBidPrice: asNonZeroNumberOrUndefined(lastTickerInfo?.bidPx),
573
+ bestBidAmount: asNonZeroNumberOrUndefined(lastTickerInfo?.bidSz),
574
+ bestBidIV: asNonZeroNumberOrUndefined(summary.bidVol),
575
575
 
576
- bestAskPrice: lastTickerInfo !== undefined ? asNumberIfValid(lastTickerInfo.askPx) : undefined,
577
- bestAskAmount: lastTickerInfo !== undefined ? asNumberIfValid(lastTickerInfo.askSz) : undefined,
578
- bestAskIV: asNumberIfValid(summary.askVol),
576
+ bestAskPrice: asNonZeroNumberOrUndefined(lastTickerInfo?.askPx),
577
+ bestAskAmount: asNonZeroNumberOrUndefined(lastTickerInfo?.askSz),
578
+ bestAskIV: asNonZeroNumberOrUndefined(summary.askVol),
579
579
 
580
- lastPrice: lastTickerInfo !== undefined ? asNumberIfValid(lastTickerInfo.last) : undefined,
580
+ lastPrice: asNonZeroNumberOrUndefined(lastTickerInfo?.last),
581
581
  openInterest: lastOpenInterest,
582
582
 
583
583
  markPrice: lastMarkPrice,
584
- markIV: asNumberIfValid(summary.markVol),
584
+ markIV: asNonZeroNumberOrUndefined(summary.markVol),
585
585
 
586
- delta: asNumberIfValid(summary.delta),
587
- gamma: asNumberIfValid(summary.gamma),
588
- vega: asNumberIfValid(summary.vega),
589
- theta: asNumberIfValid(summary.theta),
586
+ delta: asNonZeroNumberOrUndefined(summary.delta),
587
+ gamma: asNonZeroNumberOrUndefined(summary.gamma),
588
+ vega: asNonZeroNumberOrUndefined(summary.vega),
589
+ theta: asNonZeroNumberOrUndefined(summary.theta),
590
590
  rho: undefined,
591
591
 
592
592
  underlyingPrice: lastUnderlyingPrice,
@@ -970,24 +970,24 @@ export class OkexOptionSummaryMapper implements Mapper<'okex-options', OptionSum
970
970
  strikePrice,
971
971
  expirationDate,
972
972
 
973
- bestBidPrice: asNumberIfValid(summary.best_bid),
974
- bestBidAmount: asNumberIfValid(summary.best_bid_size),
975
- bestBidIV: asNumberIfValid(summary.bid_vol),
973
+ bestBidPrice: asNonZeroNumberOrUndefined(summary.best_bid),
974
+ bestBidAmount: asNonZeroNumberOrUndefined(summary.best_bid_size),
975
+ bestBidIV: asNonZeroNumberOrUndefined(summary.bid_vol),
976
976
 
977
- bestAskPrice: asNumberIfValid(summary.best_ask),
978
- bestAskAmount: asNumberIfValid(summary.best_ask_size),
979
- bestAskIV: asNumberIfValid(summary.ask_vol),
977
+ bestAskPrice: asNonZeroNumberOrUndefined(summary.best_ask),
978
+ bestAskAmount: asNonZeroNumberOrUndefined(summary.best_ask_size),
979
+ bestAskIV: asNonZeroNumberOrUndefined(summary.ask_vol),
980
980
 
981
- lastPrice: asNumberIfValid(summary.last),
982
- openInterest: asNumberIfValid(summary.open_interest),
981
+ lastPrice: asNonZeroNumberOrUndefined(summary.last),
982
+ openInterest: asNonZeroNumberOrUndefined(summary.open_interest),
983
983
 
984
- markPrice: asNumberIfValid(summary.mark_price),
985
- markIV: asNumberIfValid(summary.mark_vol),
984
+ markPrice: asNonZeroNumberOrUndefined(summary.mark_price),
985
+ markIV: asNonZeroNumberOrUndefined(summary.mark_vol),
986
986
 
987
- delta: asNumberIfValid(summary.delta),
988
- gamma: asNumberIfValid(summary.gamma),
989
- vega: asNumberIfValid(summary.vega),
990
- theta: asNumberIfValid(summary.theta),
987
+ delta: asNonZeroNumberOrUndefined(summary.delta),
988
+ gamma: asNonZeroNumberOrUndefined(summary.gamma),
989
+ vega: asNonZeroNumberOrUndefined(summary.vega),
990
+ theta: asNonZeroNumberOrUndefined(summary.theta),
991
991
  rho: undefined,
992
992
 
993
993
  underlyingPrice: lastUnderlyingPrice,
@@ -1069,11 +1069,11 @@ export class OkexBookTickerMapper implements Mapper<OKEX_EXCHANGES, BookTicker>
1069
1069
  symbol: okexTicker.instrument_id,
1070
1070
  exchange: this._exchange,
1071
1071
 
1072
- askAmount: asNumberIfValid(okexTicker.best_ask_size),
1073
- askPrice: asNumberIfValid(okexTicker.best_ask),
1072
+ askAmount: asNonZeroNumberOrUndefined(okexTicker.best_ask_size),
1073
+ askPrice: asNonZeroNumberOrUndefined(okexTicker.best_ask),
1074
1074
 
1075
- bidPrice: asNumberIfValid(okexTicker.best_bid),
1076
- bidAmount: asNumberIfValid(okexTicker.best_bid_size),
1075
+ bidPrice: asNonZeroNumberOrUndefined(okexTicker.best_bid),
1076
+ bidAmount: asNonZeroNumberOrUndefined(okexTicker.best_bid_size),
1077
1077
  timestamp: new Date(okexTicker.timestamp),
1078
1078
  localTimestamp: localTimestamp
1079
1079
  }
@@ -90,7 +90,21 @@ const COINS_STARTING_WITH_S = [
90
90
  'STRKUSD',
91
91
  'SOLVUSD',
92
92
  'SPKUSDT',
93
- 'SAHARAUSDT'
93
+ 'SAHARAUSDT',
94
+ 'SOLAMIUSDT',
95
+ 'SAPIENUSDT',
96
+ 'SOMIUSDT',
97
+ 'SKYUSDT',
98
+ 'STBLUSDT',
99
+ 'STABLEUSDT',
100
+ 'SENTUSDT',
101
+ 'SPORTFUNUSDT',
102
+ 'SKRUSDT',
103
+ 'SPACEUSDT',
104
+ 'SPX500USDT',
105
+ 'SPYXUSDT',
106
+ 'SP500USDT',
107
+ 'SNDKUSDT'
94
108
  ]
95
109
  function getInstrumentType(symbol: string) {
96
110
  if (/\d+$/.test(symbol)) {
@@ -1,4 +1,4 @@
1
- import { asNumberIfValid, upperCaseSymbols } from '../handy.ts'
1
+ import { asNonZeroNumberOrUndefined, upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, BookTicker, Exchange, Trade } from '../types.ts'
3
3
  import { Mapper } from './mapper.ts'
4
4
 
@@ -107,11 +107,11 @@ export class SerumBookTickerMapper implements Mapper<'serum' | 'star-atlas', Boo
107
107
  symbol: message.market.toUpperCase(),
108
108
  exchange: this._exchange,
109
109
 
110
- askAmount: message.bestAsk !== undefined ? asNumberIfValid(message.bestAsk[1]) : undefined,
111
- askPrice: message.bestAsk !== undefined ? asNumberIfValid(message.bestAsk[0]) : undefined,
110
+ askAmount: asNonZeroNumberOrUndefined(message.bestAsk?.[1]),
111
+ askPrice: asNonZeroNumberOrUndefined(message.bestAsk?.[0]),
112
112
 
113
- bidPrice: message.bestBid !== undefined ? asNumberIfValid(message.bestBid[0]) : undefined,
114
- bidAmount: message.bestBid !== undefined ? asNumberIfValid(message.bestBid[1]) : undefined,
113
+ bidPrice: asNonZeroNumberOrUndefined(message.bestBid?.[0]),
114
+ bidAmount: asNonZeroNumberOrUndefined(message.bestBid?.[1]),
115
115
  timestamp: new Date(message.timestamp),
116
116
  localTimestamp: localTimestamp
117
117
  }