tardis-dev 16.5.0 → 16.6.0

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 (273) hide show
  1. package/dist/consts.d.ts +3 -1
  2. package/dist/consts.d.ts.map +1 -1
  3. package/dist/consts.js +21 -1
  4. package/dist/consts.js.map +1 -1
  5. package/dist/handy.d.ts.map +1 -1
  6. package/dist/handy.js +6 -3
  7. package/dist/handy.js.map +1 -1
  8. package/dist/mappers/ascendex.d.ts +6 -99
  9. package/dist/mappers/ascendex.d.ts.map +1 -1
  10. package/dist/mappers/ascendex.js +13 -4
  11. package/dist/mappers/ascendex.js.map +1 -1
  12. package/dist/mappers/binance.d.ts +27 -154
  13. package/dist/mappers/binance.d.ts.map +1 -1
  14. package/dist/mappers/binance.js +49 -15
  15. package/dist/mappers/binance.js.map +1 -1
  16. package/dist/mappers/binancedex.d.ts +7 -4
  17. package/dist/mappers/binancedex.d.ts.map +1 -1
  18. package/dist/mappers/binancedex.js +11 -3
  19. package/dist/mappers/binancedex.js.map +1 -1
  20. package/dist/mappers/binanceeuropeanoptions.d.ts +6 -216
  21. package/dist/mappers/binanceeuropeanoptions.d.ts.map +1 -1
  22. package/dist/mappers/binanceeuropeanoptions.js +26 -7
  23. package/dist/mappers/binanceeuropeanoptions.js.map +1 -1
  24. package/dist/mappers/bitfinex.d.ts +15 -100
  25. package/dist/mappers/bitfinex.d.ts.map +1 -1
  26. package/dist/mappers/bitfinex.js +20 -5
  27. package/dist/mappers/bitfinex.js.map +1 -1
  28. package/dist/mappers/bitflyer.d.ts +5 -41
  29. package/dist/mappers/bitflyer.d.ts.map +1 -1
  30. package/dist/mappers/bitflyer.js +11 -3
  31. package/dist/mappers/bitflyer.js.map +1 -1
  32. package/dist/mappers/bitget.d.ts +12 -269
  33. package/dist/mappers/bitget.d.ts.map +1 -1
  34. package/dist/mappers/bitget.js +46 -9
  35. package/dist/mappers/bitget.js.map +1 -1
  36. package/dist/mappers/bitmex.d.ts +8 -56
  37. package/dist/mappers/bitmex.d.ts.map +1 -1
  38. package/dist/mappers/bitmex.js +15 -5
  39. package/dist/mappers/bitmex.js.map +1 -1
  40. package/dist/mappers/bitnomial.d.ts +4 -44
  41. package/dist/mappers/bitnomial.d.ts.map +1 -1
  42. package/dist/mappers/bitnomial.js +9 -2
  43. package/dist/mappers/bitnomial.js.map +1 -1
  44. package/dist/mappers/bitstamp.d.ts +4 -44
  45. package/dist/mappers/bitstamp.d.ts.map +1 -1
  46. package/dist/mappers/bitstamp.js +9 -2
  47. package/dist/mappers/bitstamp.js.map +1 -1
  48. package/dist/mappers/blockchaincom.d.ts +4 -63
  49. package/dist/mappers/blockchaincom.d.ts.map +1 -1
  50. package/dist/mappers/blockchaincom.js +9 -2
  51. package/dist/mappers/blockchaincom.js.map +1 -1
  52. package/dist/mappers/bullish.d.ts +8 -158
  53. package/dist/mappers/bullish.d.ts.map +1 -1
  54. package/dist/mappers/bullish.js +19 -7
  55. package/dist/mappers/bullish.js.map +1 -1
  56. package/dist/mappers/bybit.d.ts +61 -407
  57. package/dist/mappers/bybit.d.ts.map +1 -1
  58. package/dist/mappers/bybit.js +60 -15
  59. package/dist/mappers/bybit.js.map +1 -1
  60. package/dist/mappers/bybitspot.d.ts +1 -1
  61. package/dist/mappers/coinbase.d.ts +6 -39
  62. package/dist/mappers/coinbase.d.ts.map +1 -1
  63. package/dist/mappers/coinbase.js +11 -3
  64. package/dist/mappers/coinbase.js.map +1 -1
  65. package/dist/mappers/coinbaseinternational.d.ts +7 -78
  66. package/dist/mappers/coinbaseinternational.d.ts.map +1 -1
  67. package/dist/mappers/coinbaseinternational.js +13 -4
  68. package/dist/mappers/coinbaseinternational.js.map +1 -1
  69. package/dist/mappers/coinflex.d.ts +6 -24
  70. package/dist/mappers/coinflex.d.ts.map +1 -1
  71. package/dist/mappers/coinflex.js +11 -3
  72. package/dist/mappers/coinflex.js.map +1 -1
  73. package/dist/mappers/cryptocom.d.ts +22 -328
  74. package/dist/mappers/cryptocom.d.ts.map +1 -1
  75. package/dist/mappers/cryptocom.js +13 -4
  76. package/dist/mappers/cryptocom.js.map +1 -1
  77. package/dist/mappers/cryptofacilities.d.ts +8 -96
  78. package/dist/mappers/cryptofacilities.d.ts.map +1 -1
  79. package/dist/mappers/cryptofacilities.js +24 -7
  80. package/dist/mappers/cryptofacilities.js.map +1 -1
  81. package/dist/mappers/delta.d.ts +7 -114
  82. package/dist/mappers/delta.d.ts.map +1 -1
  83. package/dist/mappers/delta.js +30 -10
  84. package/dist/mappers/delta.js.map +1 -1
  85. package/dist/mappers/deribit.d.ts +8 -66
  86. package/dist/mappers/deribit.d.ts.map +1 -1
  87. package/dist/mappers/deribit.js +17 -6
  88. package/dist/mappers/deribit.js.map +1 -1
  89. package/dist/mappers/dydx.d.ts +5 -146
  90. package/dist/mappers/dydx.d.ts.map +1 -1
  91. package/dist/mappers/dydx.js +11 -3
  92. package/dist/mappers/dydx.js.map +1 -1
  93. package/dist/mappers/dydxv4.d.ts +6 -173
  94. package/dist/mappers/dydxv4.d.ts.map +1 -1
  95. package/dist/mappers/dydxv4.js +13 -4
  96. package/dist/mappers/dydxv4.js.map +1 -1
  97. package/dist/mappers/ftx.d.ts +12 -107
  98. package/dist/mappers/ftx.d.ts.map +1 -1
  99. package/dist/mappers/ftx.js +21 -6
  100. package/dist/mappers/ftx.js.map +1 -1
  101. package/dist/mappers/gateio.d.ts +6 -191
  102. package/dist/mappers/gateio.d.ts.map +1 -1
  103. package/dist/mappers/gateio.js +28 -8
  104. package/dist/mappers/gateio.js.map +1 -1
  105. package/dist/mappers/gateiofutures.d.ts +7 -122
  106. package/dist/mappers/gateiofutures.d.ts.map +1 -1
  107. package/dist/mappers/gateiofutures.js +13 -4
  108. package/dist/mappers/gateiofutures.js.map +1 -1
  109. package/dist/mappers/gemini.d.ts +6 -3
  110. package/dist/mappers/gemini.d.ts.map +1 -1
  111. package/dist/mappers/gemini.js +9 -2
  112. package/dist/mappers/gemini.js.map +1 -1
  113. package/dist/mappers/hitbtc.d.ts +6 -3
  114. package/dist/mappers/hitbtc.d.ts.map +1 -1
  115. package/dist/mappers/hitbtc.js +9 -2
  116. package/dist/mappers/hitbtc.js.map +1 -1
  117. package/dist/mappers/huobi.d.ts +118 -289
  118. package/dist/mappers/huobi.d.ts.map +1 -1
  119. package/dist/mappers/huobi.js +45 -7
  120. package/dist/mappers/huobi.js.map +1 -1
  121. package/dist/mappers/hyperliquid.d.ts +6 -86
  122. package/dist/mappers/hyperliquid.d.ts.map +1 -1
  123. package/dist/mappers/hyperliquid.js +13 -4
  124. package/dist/mappers/hyperliquid.js.map +1 -1
  125. package/dist/mappers/index.d.ts +784 -272
  126. package/dist/mappers/index.d.ts.map +1 -1
  127. package/dist/mappers/index.js +64 -432
  128. package/dist/mappers/index.js.map +1 -1
  129. package/dist/mappers/kraken.d.ts +7 -4
  130. package/dist/mappers/kraken.d.ts.map +1 -1
  131. package/dist/mappers/kraken.js +11 -3
  132. package/dist/mappers/kraken.js.map +1 -1
  133. package/dist/mappers/kucoin.d.ts +6 -122
  134. package/dist/mappers/kucoin.d.ts.map +1 -1
  135. package/dist/mappers/kucoin.js +13 -5
  136. package/dist/mappers/kucoin.js.map +1 -1
  137. package/dist/mappers/kucoinfutures.d.ts +6 -207
  138. package/dist/mappers/kucoinfutures.d.ts.map +1 -1
  139. package/dist/mappers/kucoinfutures.js +15 -6
  140. package/dist/mappers/kucoinfutures.js.map +1 -1
  141. package/dist/mappers/lighter.d.ts +8 -156
  142. package/dist/mappers/lighter.d.ts.map +1 -1
  143. package/dist/mappers/lighter.js +15 -5
  144. package/dist/mappers/lighter.js.map +1 -1
  145. package/dist/mappers/mapper.d.ts +3 -1
  146. package/dist/mappers/mapper.d.ts.map +1 -1
  147. package/dist/mappers/mapper.js.map +1 -1
  148. package/dist/mappers/mexc.d.ts +122 -0
  149. package/dist/mappers/mexc.d.ts.map +1 -0
  150. package/dist/mappers/mexc.js +205 -0
  151. package/dist/mappers/mexc.js.map +1 -0
  152. package/dist/mappers/mexcfutures.d.ts +137 -0
  153. package/dist/mappers/mexcfutures.d.ts.map +1 -0
  154. package/dist/mappers/mexcfutures.js +225 -0
  155. package/dist/mappers/mexcfutures.js.map +1 -0
  156. package/dist/mappers/okex.d.ts +36 -473
  157. package/dist/mappers/okex.d.ts.map +1 -1
  158. package/dist/mappers/okex.js +143 -37
  159. package/dist/mappers/okex.js.map +1 -1
  160. package/dist/mappers/phemex.d.ts +5 -82
  161. package/dist/mappers/phemex.d.ts.map +1 -1
  162. package/dist/mappers/phemex.js +22 -4
  163. package/dist/mappers/phemex.js.map +1 -1
  164. package/dist/mappers/poloniex.d.ts +5 -90
  165. package/dist/mappers/poloniex.d.ts.map +1 -1
  166. package/dist/mappers/poloniex.js +18 -4
  167. package/dist/mappers/poloniex.js.map +1 -1
  168. package/dist/mappers/polymarket.d.ts +7 -31
  169. package/dist/mappers/polymarket.d.ts.map +1 -1
  170. package/dist/mappers/polymarket.js +11 -3
  171. package/dist/mappers/polymarket.js.map +1 -1
  172. package/dist/mappers/registry.d.ts +41 -0
  173. package/dist/mappers/registry.d.ts.map +1 -0
  174. package/dist/mappers/registry.js +111 -0
  175. package/dist/mappers/registry.js.map +1 -0
  176. package/dist/mappers/serum.d.ts +16 -89
  177. package/dist/mappers/serum.d.ts.map +1 -1
  178. package/dist/mappers/serum.js +21 -3
  179. package/dist/mappers/serum.js.map +1 -1
  180. package/dist/mappers/upbit.d.ts +5 -47
  181. package/dist/mappers/upbit.d.ts.map +1 -1
  182. package/dist/mappers/upbit.js +9 -2
  183. package/dist/mappers/upbit.js.map +1 -1
  184. package/dist/mappers/woox.d.ts +6 -107
  185. package/dist/mappers/woox.d.ts.map +1 -1
  186. package/dist/mappers/woox.js +13 -4
  187. package/dist/mappers/woox.js.map +1 -1
  188. package/dist/okexsymbols.d.ts +3 -0
  189. package/dist/okexsymbols.d.ts.map +1 -0
  190. package/dist/okexsymbols.js +10 -0
  191. package/dist/okexsymbols.js.map +1 -0
  192. package/dist/realtimefeeds/hyperliquid.d.ts.map +1 -1
  193. package/dist/realtimefeeds/hyperliquid.js +3 -1
  194. package/dist/realtimefeeds/hyperliquid.js.map +1 -1
  195. package/dist/realtimefeeds/index.d.ts.map +1 -1
  196. package/dist/realtimefeeds/index.js +4 -0
  197. package/dist/realtimefeeds/index.js.map +1 -1
  198. package/dist/realtimefeeds/mexc.d.ts +35 -0
  199. package/dist/realtimefeeds/mexc.d.ts.map +1 -0
  200. package/dist/realtimefeeds/mexc.js +261 -0
  201. package/dist/realtimefeeds/mexc.js.map +1 -0
  202. package/dist/realtimefeeds/mexcfutures.d.ts +25 -0
  203. package/dist/realtimefeeds/mexcfutures.d.ts.map +1 -0
  204. package/dist/realtimefeeds/mexcfutures.js +203 -0
  205. package/dist/realtimefeeds/mexcfutures.js.map +1 -0
  206. package/dist/realtimefeeds/okex.d.ts +1 -0
  207. package/dist/realtimefeeds/okex.d.ts.map +1 -1
  208. package/dist/realtimefeeds/okex.js +7 -5
  209. package/dist/realtimefeeds/okex.js.map +1 -1
  210. package/dist/realtimefeeds/realtimefeed.d.ts +1 -0
  211. package/dist/realtimefeeds/realtimefeed.d.ts.map +1 -1
  212. package/dist/realtimefeeds/realtimefeed.js +4 -1
  213. package/dist/realtimefeeds/realtimefeed.js.map +1 -1
  214. package/dist/replay.d.ts.map +1 -1
  215. package/dist/replay.js +62 -13
  216. package/dist/replay.js.map +1 -1
  217. package/example.js +133 -31
  218. package/package.json +2 -1
  219. package/src/consts.ts +22 -1
  220. package/src/handy.ts +6 -3
  221. package/src/mappers/ascendex.ts +14 -4
  222. package/src/mappers/binance.ts +61 -21
  223. package/src/mappers/binancedex.ts +12 -3
  224. package/src/mappers/binanceeuropeanoptions.ts +28 -7
  225. package/src/mappers/bitfinex.ts +21 -5
  226. package/src/mappers/bitflyer.ts +12 -3
  227. package/src/mappers/bitget.ts +48 -9
  228. package/src/mappers/bitmex.ts +16 -5
  229. package/src/mappers/bitnomial.ts +10 -2
  230. package/src/mappers/bitstamp.ts +10 -2
  231. package/src/mappers/blockchaincom.ts +10 -2
  232. package/src/mappers/bullish.ts +21 -8
  233. package/src/mappers/bybit.ts +70 -15
  234. package/src/mappers/coinbase.ts +12 -3
  235. package/src/mappers/coinbaseinternational.ts +14 -4
  236. package/src/mappers/coinflex.ts +12 -3
  237. package/src/mappers/cryptocom.ts +14 -4
  238. package/src/mappers/cryptofacilities.ts +30 -6
  239. package/src/mappers/delta.ts +41 -7
  240. package/src/mappers/deribit.ts +18 -6
  241. package/src/mappers/dydx.ts +12 -3
  242. package/src/mappers/dydxv4.ts +14 -4
  243. package/src/mappers/ftx.ts +22 -6
  244. package/src/mappers/gateio.ts +34 -8
  245. package/src/mappers/gateiofutures.ts +14 -4
  246. package/src/mappers/gemini.ts +10 -2
  247. package/src/mappers/hitbtc.ts +10 -2
  248. package/src/mappers/huobi.ts +47 -10
  249. package/src/mappers/hyperliquid.ts +14 -4
  250. package/src/mappers/index.ts +133 -679
  251. package/src/mappers/kraken.ts +12 -3
  252. package/src/mappers/kucoin.ts +19 -5
  253. package/src/mappers/kucoinfutures.ts +20 -5
  254. package/src/mappers/lighter.ts +16 -5
  255. package/src/mappers/mapper.ts +3 -1
  256. package/src/mappers/mexc.ts +324 -0
  257. package/src/mappers/mexcfutures.ts +352 -0
  258. package/src/mappers/okex.ts +178 -37
  259. package/src/mappers/phemex.ts +25 -4
  260. package/src/mappers/poloniex.ts +20 -4
  261. package/src/mappers/polymarket.ts +12 -3
  262. package/src/mappers/registry.ts +203 -0
  263. package/src/mappers/serum.ts +22 -3
  264. package/src/mappers/upbit.ts +10 -2
  265. package/src/mappers/woox.ts +14 -4
  266. package/src/okexsymbols.ts +10 -0
  267. package/src/realtimefeeds/hyperliquid.ts +4 -1
  268. package/src/realtimefeeds/index.ts +4 -0
  269. package/src/realtimefeeds/mexc.ts +327 -0
  270. package/src/realtimefeeds/mexcfutures.ts +269 -0
  271. package/src/realtimefeeds/okex.ts +7 -5
  272. package/src/realtimefeeds/realtimefeed.ts +5 -1
  273. package/src/replay.ts +73 -15
@@ -1,8 +1,18 @@
1
1
  import { upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, BookTicker, DerivativeTicker, Trade } from '../types.ts'
3
3
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
5
+
6
+ export const ascendexMappers = exchangeMappers({
7
+ ascendex: {
8
+ trades: () => new AscendexTradesMapper(),
9
+ bookChanges: () => new AscendexBookChangeMapper(),
10
+ derivativeTickers: () => new AscendexDerivativeTickerMapper(),
11
+ bookTickers: () => new AscendexBookTickerMapper()
12
+ }
13
+ })
4
14
 
5
- export class AscendexTradesMapper implements Mapper<'ascendex', Trade> {
15
+ class AscendexTradesMapper implements Mapper<'ascendex', Trade> {
6
16
  canHandle(message: AscendexTrade) {
7
17
  return message.m === 'trades'
8
18
  }
@@ -34,7 +44,7 @@ export class AscendexTradesMapper implements Mapper<'ascendex', Trade> {
34
44
  }
35
45
  }
36
46
 
37
- export class AscendexBookChangeMapper implements Mapper<'ascendex', BookChange> {
47
+ class AscendexBookChangeMapper implements Mapper<'ascendex', BookChange> {
38
48
  canHandle(message: AscendexDepthRealTime | AscendexDepthRealTimeSnapshot) {
39
49
  return message.m === 'depth-realtime' || message.m === 'depth-snapshot-realtime'
40
50
  }
@@ -77,7 +87,7 @@ export class AscendexBookChangeMapper implements Mapper<'ascendex', BookChange>
77
87
  }
78
88
  }
79
89
 
80
- export class AscendexDerivativeTickerMapper implements Mapper<'ascendex', DerivativeTicker> {
90
+ class AscendexDerivativeTickerMapper implements Mapper<'ascendex', DerivativeTicker> {
81
91
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
82
92
 
83
93
  canHandle(message: AscendexFuturesData | AscendexTrade) {
@@ -122,7 +132,7 @@ export class AscendexDerivativeTickerMapper implements Mapper<'ascendex', Deriva
122
132
  }
123
133
  }
124
134
 
125
- export class AscendexBookTickerMapper implements Mapper<'ascendex', BookTicker> {
135
+ class AscendexBookTickerMapper implements Mapper<'ascendex', BookTicker> {
126
136
  canHandle(message: AscendexTicker) {
127
137
  return message.m === 'bbo'
128
138
  }
@@ -2,13 +2,59 @@ import { debug } from '../debug.ts'
2
2
  import { CircularBuffer, fromMicroSecondsToDate, lowerCaseSymbols } from '../handy.ts'
3
3
  import { BookChange, BookTicker, DerivativeTicker, Exchange, FilterForExchange, Liquidation, Trade } from '../types.ts'
4
4
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
5
+ import { exchangeMappers, isRealTime } from './registry.ts'
5
6
 
6
7
  // https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md
7
8
 
8
- export class BinanceTradesMapper implements Mapper<
9
- 'binance' | 'binance-jersey' | 'binance-us' | 'binance-futures' | 'binance-delivery',
10
- Trade
11
- > {
9
+ export const binanceMappers = exchangeMappers({
10
+ binance: {
11
+ trades: () => new BinanceTradesMapper('binance'),
12
+ bookChanges: (localTimestamp) =>
13
+ new BinanceBookChangeMapper('binance', { ignoreBookSnapshotOverlapError: shouldIgnoreBookSnapshotOverlap(localTimestamp) }),
14
+ bookTickers: () => new BinanceBookTickerMapper('binance')
15
+ },
16
+ 'binance-us': {
17
+ trades: () => new BinanceTradesMapper('binance-us'),
18
+ bookChanges: (localTimestamp) =>
19
+ new BinanceBookChangeMapper('binance-us', { ignoreBookSnapshotOverlapError: shouldIgnoreBookSnapshotOverlap(localTimestamp) }),
20
+ bookTickers: () => new BinanceBookTickerMapper('binance-us')
21
+ },
22
+ 'binance-jersey': {
23
+ trades: () => new BinanceTradesMapper('binance-jersey'),
24
+ bookChanges: (localTimestamp) =>
25
+ new BinanceBookChangeMapper('binance-jersey', { ignoreBookSnapshotOverlapError: shouldIgnoreBookSnapshotOverlap(localTimestamp) })
26
+ },
27
+ 'binance-futures': {
28
+ trades: () => new BinanceTradesMapper('binance-futures'),
29
+ bookChanges: (localTimestamp) =>
30
+ new BinanceFuturesBookChangeMapper('binance-futures', {
31
+ ignoreBookSnapshotOverlapError: shouldIgnoreBookSnapshotOverlap(localTimestamp)
32
+ }),
33
+ derivativeTickers: () => new BinanceFuturesDerivativeTickerMapper('binance-futures'),
34
+ liquidations: () => new BinanceLiquidationsMapper('binance-futures'),
35
+ bookTickers: () => new BinanceBookTickerMapper('binance-futures')
36
+ },
37
+ 'binance-delivery': {
38
+ trades: () => new BinanceTradesMapper('binance-delivery'),
39
+ bookChanges: (localTimestamp) =>
40
+ new BinanceFuturesBookChangeMapper('binance-delivery', {
41
+ ignoreBookSnapshotOverlapError: shouldIgnoreBookSnapshotOverlap(localTimestamp)
42
+ }),
43
+ derivativeTickers: () => new BinanceFuturesDerivativeTickerMapper('binance-delivery'),
44
+ liquidations: () => new BinanceLiquidationsMapper('binance-delivery'),
45
+ bookTickers: () => new BinanceBookTickerMapper('binance-delivery')
46
+ }
47
+ })
48
+
49
+ function shouldIgnoreBookSnapshotOverlap(date?: Date) {
50
+ if (process.env.IGNORE_BOOK_SNAPSHOT_OVERLAP_ERROR) {
51
+ return true
52
+ }
53
+
54
+ return isRealTime(date) === false
55
+ }
56
+
57
+ class BinanceTradesMapper implements Mapper<'binance' | 'binance-jersey' | 'binance-us' | 'binance-futures' | 'binance-delivery', Trade> {
12
58
  constructor(private readonly _exchange: Exchange) {}
13
59
 
14
60
  canHandle(message: BinanceResponse<any>) {
@@ -54,7 +100,7 @@ export class BinanceTradesMapper implements Mapper<
54
100
  }
55
101
  }
56
102
 
57
- export class BinanceBookChangeMapper implements Mapper<
103
+ class BinanceBookChangeMapper implements Mapper<
58
104
  'binance' | 'binance-jersey' | 'binance-us' | 'binance-futures' | 'binance-delivery',
59
105
  BookChange
60
106
  > {
@@ -64,8 +110,12 @@ export class BinanceBookChangeMapper implements Mapper<
64
110
 
65
111
  constructor(
66
112
  protected readonly exchange: Exchange,
67
- protected readonly ignoreBookSnapshotOverlapError: boolean
68
- ) {}
113
+ { ignoreBookSnapshotOverlapError }: { ignoreBookSnapshotOverlapError: boolean }
114
+ ) {
115
+ this.ignoreBookSnapshotOverlapError = ignoreBookSnapshotOverlapError
116
+ }
117
+
118
+ protected readonly ignoreBookSnapshotOverlapError: boolean
69
119
 
70
120
  canHandle(message: BinanceResponse<any>) {
71
121
  if (message.stream === undefined) {
@@ -218,17 +268,7 @@ export class BinanceBookChangeMapper implements Mapper<
218
268
  }
219
269
  }
220
270
 
221
- export class BinanceFuturesBookChangeMapper
222
- extends BinanceBookChangeMapper
223
- implements Mapper<'binance-futures' | 'binance-delivery', BookChange>
224
- {
225
- constructor(
226
- protected readonly exchange: Exchange,
227
- protected readonly ignoreBookSnapshotOverlapError: boolean
228
- ) {
229
- super(exchange, ignoreBookSnapshotOverlapError)
230
- }
231
-
271
+ class BinanceFuturesBookChangeMapper extends BinanceBookChangeMapper implements Mapper<'binance-futures' | 'binance-delivery', BookChange> {
232
272
  protected mapBookDepthUpdate(binanceDepthUpdateData: BinanceFuturesDepthData, localTimestamp: Date): BookChange | undefined {
233
273
  // we can safely assume here that depthContext and lastUpdateId aren't null here as this is method only works
234
274
  // when we've already processed the snapshot
@@ -273,7 +313,7 @@ export class BinanceFuturesBookChangeMapper
273
313
  }
274
314
  }
275
315
 
276
- export class BinanceFuturesDerivativeTickerMapper implements Mapper<'binance-futures' | 'binance-delivery', DerivativeTicker> {
316
+ class BinanceFuturesDerivativeTickerMapper implements Mapper<'binance-futures' | 'binance-delivery', DerivativeTicker> {
277
317
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
278
318
  private readonly _indexPrices = new Map<string, number>()
279
319
 
@@ -369,7 +409,7 @@ export class BinanceFuturesDerivativeTickerMapper implements Mapper<'binance-fut
369
409
  }
370
410
  }
371
411
 
372
- export class BinanceLiquidationsMapper implements Mapper<'binance-futures' | 'binance-delivery', Liquidation> {
412
+ class BinanceLiquidationsMapper implements Mapper<'binance-futures' | 'binance-delivery', Liquidation> {
373
413
  constructor(private readonly _exchange: Exchange) {}
374
414
 
375
415
  canHandle(message: BinanceResponse<any>) {
@@ -414,7 +454,7 @@ export class BinanceLiquidationsMapper implements Mapper<'binance-futures' | 'bi
414
454
  }
415
455
  }
416
456
 
417
- export class BinanceBookTickerMapper implements Mapper<'binance-futures' | 'binance-delivery' | 'binance', BookTicker> {
457
+ class BinanceBookTickerMapper implements Mapper<'binance-futures' | 'binance-delivery' | 'binance', BookTicker> {
418
458
  constructor(private readonly _exchange: Exchange) {}
419
459
 
420
460
  canHandle(message: BinanceResponse<any>) {
@@ -1,10 +1,19 @@
1
1
  import { upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, BookTicker, Trade } from '../types.ts'
3
3
  import { Mapper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
4
5
 
5
6
  // https://docs.binance.org/api-reference/dex-api/ws-streams.html
6
7
 
7
- export const binanceDexTradesMapper: Mapper<'binance-dex', Trade> = {
8
+ export const binanceDexMappers = exchangeMappers({
9
+ 'binance-dex': {
10
+ trades: () => binanceDexTradesMapper,
11
+ bookChanges: () => binanceDexBookChangeMapper,
12
+ bookTickers: () => binanceDexBookTickerMapper
13
+ }
14
+ })
15
+
16
+ const binanceDexTradesMapper: Mapper<'binance-dex', Trade> = {
8
17
  canHandle(message: BinanceDexResponse<any>) {
9
18
  return message.stream === 'trades'
10
19
  },
@@ -43,7 +52,7 @@ const mapBookLevel = (level: BinanceDexBookLevel) => {
43
52
  return { price, amount }
44
53
  }
45
54
 
46
- export const binanceDexBookChangeMapper: Mapper<'binance-dex', BookChange> = {
55
+ const binanceDexBookChangeMapper: Mapper<'binance-dex', BookChange> = {
47
56
  canHandle(message: BinanceDexResponse<any>) {
48
57
  return message.stream === 'marketDiff' || message.stream === 'depthSnapshot'
49
58
  },
@@ -94,7 +103,7 @@ export const binanceDexBookChangeMapper: Mapper<'binance-dex', BookChange> = {
94
103
  }
95
104
  }
96
105
 
97
- export const binanceDexBookTickerMapper: Mapper<'binance-dex', BookTicker> = {
106
+ const binanceDexBookTickerMapper: Mapper<'binance-dex', BookTicker> = {
98
107
  canHandle(message: BinanceDexResponse<any>) {
99
108
  return message.stream === 'ticker'
100
109
  },
@@ -1,10 +1,31 @@
1
1
  import { asNonZeroNumberOrUndefined, lowerCaseSymbols, upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, BookTicker, OptionSummary, Trade } from '../types.ts'
3
3
  import { Mapper } from './mapper.ts'
4
+ import { exchangeMappers, mapper } from './registry.ts'
5
+
6
+ const BINANCE_EUROPEAN_OPTIONS_V2_API_SWITCH_DATE = new Date('2025-12-17T00:00:00.000Z')
4
7
 
5
8
  // https://binance-docs.github.io/apidocs/voptions/en/#websocket-market-streams
6
9
 
7
- export class BinanceEuropeanOptionsTradesMapper implements Mapper<'binance-european-options', Trade> {
10
+ export const binanceEuropeanOptionsMappers = exchangeMappers({
11
+ 'binance-european-options': {
12
+ trades: mapper([
13
+ { until: BINANCE_EUROPEAN_OPTIONS_V2_API_SWITCH_DATE, use: () => new BinanceEuropeanOptionsTradesMapper() },
14
+ { use: () => new BinanceEuropeanOptionsTradesMapperV2() }
15
+ ]),
16
+ bookChanges: mapper([
17
+ { until: BINANCE_EUROPEAN_OPTIONS_V2_API_SWITCH_DATE, use: () => new BinanceEuropeanOptionsBookChangeMapper() },
18
+ { use: () => new BinanceEuropeanOptionsBookChangeMapperV2() }
19
+ ]),
20
+ optionsSummary: mapper([
21
+ { until: BINANCE_EUROPEAN_OPTIONS_V2_API_SWITCH_DATE, use: () => new BinanceEuropeanOptionSummaryMapper() },
22
+ { use: () => new BinanceEuropeanOptionSummaryMapperV2() }
23
+ ]),
24
+ bookTickers: () => new BinanceEuropeanOptionsBookTickerMapper()
25
+ }
26
+ })
27
+
28
+ class BinanceEuropeanOptionsTradesMapper implements Mapper<'binance-european-options', Trade> {
8
29
  canHandle(message: BinanceResponse<any>) {
9
30
  if (message.stream === undefined) {
10
31
  return false
@@ -41,7 +62,7 @@ export class BinanceEuropeanOptionsTradesMapper implements Mapper<'binance-europ
41
62
  }
42
63
  }
43
64
 
44
- export class BinanceEuropeanOptionsTradesMapperV2 implements Mapper<'binance-european-options', Trade> {
65
+ class BinanceEuropeanOptionsTradesMapperV2 implements Mapper<'binance-european-options', Trade> {
45
66
  canHandle(message: BinanceResponse<any>) {
46
67
  if (message.stream === undefined) {
47
68
  return false
@@ -78,7 +99,7 @@ export class BinanceEuropeanOptionsTradesMapperV2 implements Mapper<'binance-eur
78
99
  }
79
100
  }
80
101
 
81
- export class BinanceEuropeanOptionsBookChangeMapper implements Mapper<'binance-european-options', BookChange> {
102
+ class BinanceEuropeanOptionsBookChangeMapper implements Mapper<'binance-european-options', BookChange> {
82
103
  canHandle(message: BinanceResponse<any>) {
83
104
  if (message.stream === undefined) {
84
105
  return false
@@ -120,7 +141,7 @@ export class BinanceEuropeanOptionsBookChangeMapper implements Mapper<'binance-e
120
141
  }
121
142
  }
122
143
 
123
- export class BinanceEuropeanOptionsBookChangeMapperV2 implements Mapper<'binance-european-options', BookChange> {
144
+ class BinanceEuropeanOptionsBookChangeMapperV2 implements Mapper<'binance-european-options', BookChange> {
124
145
  canHandle(message: BinanceResponse<any>) {
125
146
  if (message.stream === undefined) {
126
147
  return false
@@ -162,7 +183,7 @@ export class BinanceEuropeanOptionsBookChangeMapperV2 implements Mapper<'binance
162
183
  }
163
184
  }
164
185
 
165
- export class BinanceEuropeanOptionsBookTickerMapper implements Mapper<'binance-european-options', BookTicker> {
186
+ class BinanceEuropeanOptionsBookTickerMapper implements Mapper<'binance-european-options', BookTicker> {
166
187
  canHandle(message: BinanceResponse<any>) {
167
188
  if (message.stream === undefined) {
168
189
  return false
@@ -204,7 +225,7 @@ export class BinanceEuropeanOptionsBookTickerMapper implements Mapper<'binance-e
204
225
  }
205
226
  }
206
227
 
207
- export class BinanceEuropeanOptionSummaryMapper implements Mapper<'binance-european-options', OptionSummary> {
228
+ class BinanceEuropeanOptionSummaryMapper implements Mapper<'binance-european-options', OptionSummary> {
208
229
  private readonly _indexPrices = new Map<string, number>()
209
230
  private readonly _openInterests = new Map<string, number>()
210
231
 
@@ -330,7 +351,7 @@ export class BinanceEuropeanOptionSummaryMapper implements Mapper<'binance-europ
330
351
  }
331
352
  }
332
353
 
333
- export class BinanceEuropeanOptionSummaryMapperV2 implements Mapper<'binance-european-options', OptionSummary> {
354
+ class BinanceEuropeanOptionSummaryMapperV2 implements Mapper<'binance-european-options', OptionSummary> {
334
355
  private readonly _lastPrices = new Map<string, number>()
335
356
  private readonly _openInterests = new Map<string, number>()
336
357
 
@@ -1,10 +1,26 @@
1
1
  import { upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, BookTicker, DerivativeTicker, Exchange, FilterForExchange, Liquidation, Trade } from '../types.ts'
3
3
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
4
5
 
5
6
  // https://docs.bitfinex.com/v2/docs/ws-general
6
7
 
7
- export class BitfinexTradesMapper implements Mapper<'bitfinex' | 'bitfinex-derivatives', Trade> {
8
+ export const bitfinexMappers = exchangeMappers({
9
+ bitfinex: {
10
+ trades: () => new BitfinexTradesMapper('bitfinex'),
11
+ bookChanges: () => new BitfinexBookChangeMapper('bitfinex'),
12
+ bookTickers: () => new BitfinexBookTickerMapper('bitfinex')
13
+ },
14
+ 'bitfinex-derivatives': {
15
+ trades: () => new BitfinexTradesMapper('bitfinex-derivatives'),
16
+ bookChanges: () => new BitfinexBookChangeMapper('bitfinex-derivatives'),
17
+ derivativeTickers: () => new BitfinexDerivativeTickerMapper(),
18
+ liquidations: () => new BitfinexLiquidationsMapper('bitfinex-derivatives'),
19
+ bookTickers: () => new BitfinexBookTickerMapper('bitfinex-derivatives')
20
+ }
21
+ })
22
+
23
+ class BitfinexTradesMapper implements Mapper<'bitfinex' | 'bitfinex-derivatives', Trade> {
8
24
  private readonly _channelIdToSymbolMap: Map<number, string> = new Map()
9
25
 
10
26
  constructor(private readonly _exchange: Exchange) {}
@@ -80,7 +96,7 @@ export class BitfinexTradesMapper implements Mapper<'bitfinex' | 'bitfinex-deriv
80
96
  }
81
97
  }
82
98
 
83
- export class BitfinexBookChangeMapper implements Mapper<'bitfinex' | 'bitfinex-derivatives', BookChange> {
99
+ class BitfinexBookChangeMapper implements Mapper<'bitfinex' | 'bitfinex-derivatives', BookChange> {
84
100
  private readonly _channelIdToSymbolMap: Map<number, string> = new Map()
85
101
 
86
102
  constructor(private readonly _exchange: Exchange) {}
@@ -162,7 +178,7 @@ export class BitfinexBookChangeMapper implements Mapper<'bitfinex' | 'bitfinex-d
162
178
  }
163
179
  }
164
180
 
165
- export class BitfinexDerivativeTickerMapper implements Mapper<'bitfinex-derivatives', DerivativeTicker> {
181
+ class BitfinexDerivativeTickerMapper implements Mapper<'bitfinex-derivatives', DerivativeTicker> {
166
182
  private readonly _channelIdToSymbolMap: Map<number, string> = new Map()
167
183
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
168
184
 
@@ -245,7 +261,7 @@ export class BitfinexDerivativeTickerMapper implements Mapper<'bitfinex-derivati
245
261
  }
246
262
  }
247
263
 
248
- export class BitfinexLiquidationsMapper implements Mapper<'bitfinex-derivatives', Liquidation> {
264
+ class BitfinexLiquidationsMapper implements Mapper<'bitfinex-derivatives', Liquidation> {
249
265
  private _liquidationsChannelId: number | undefined = undefined
250
266
 
251
267
  constructor(private readonly _exchange: Exchange) {}
@@ -322,7 +338,7 @@ export class BitfinexLiquidationsMapper implements Mapper<'bitfinex-derivatives'
322
338
  }
323
339
  }
324
340
 
325
- export class BitfinexBookTickerMapper implements Mapper<'bitfinex' | 'bitfinex-derivatives', BookTicker> {
341
+ class BitfinexBookTickerMapper implements Mapper<'bitfinex' | 'bitfinex-derivatives', BookTicker> {
326
342
  private readonly _channelIdToSymbolMap: Map<number, string> = new Map()
327
343
 
328
344
  constructor(private readonly _exchange: Exchange) {}
@@ -1,8 +1,17 @@
1
1
  import { parseμs, upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, BookTicker, Trade } from '../types.ts'
3
3
  import { Mapper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
4
5
 
5
- export const bitflyerTradesMapper: Mapper<'bitflyer', Trade> = {
6
+ export const bitflyerMappers = exchangeMappers({
7
+ bitflyer: {
8
+ trades: () => bitflyerTradesMapper,
9
+ bookChanges: () => new BitflyerBookChangeMapper(),
10
+ bookTickers: () => bitflyerBookTickerMapper
11
+ }
12
+ })
13
+
14
+ const bitflyerTradesMapper: Mapper<'bitflyer', Trade> = {
6
15
  canHandle(message: BitflyerExecutions | BitflyerBoard) {
7
16
  return message.params.channel.startsWith('lightning_executions')
8
17
  },
@@ -46,7 +55,7 @@ const mapBookLevel = ({ price, size }: BitflyerBookLevel) => {
46
55
  return { price, amount: size }
47
56
  }
48
57
 
49
- export class BitflyerBookChangeMapper implements Mapper<'bitflyer', BookChange> {
58
+ class BitflyerBookChangeMapper implements Mapper<'bitflyer', BookChange> {
50
59
  private readonly _snapshotsInfo: Map<string, boolean> = new Map()
51
60
 
52
61
  canHandle(message: BitflyerExecutions | BitflyerBoard) {
@@ -95,7 +104,7 @@ export class BitflyerBookChangeMapper implements Mapper<'bitflyer', BookChange>
95
104
  }
96
105
  }
97
106
 
98
- export const bitflyerBookTickerMapper: Mapper<'bitflyer', BookTicker> = {
107
+ const bitflyerBookTickerMapper: Mapper<'bitflyer', BookTicker> = {
99
108
  canHandle(message: BitflyerTicker) {
100
109
  return message.params.channel.startsWith('lightning_ticker')
101
110
  },
@@ -1,8 +1,47 @@
1
1
  import { asNonZeroNumberOrUndefined, upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, BookTicker, DerivativeTicker, Exchange, Liquidation, Trade } from '../types.ts'
3
3
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
4
+ import { exchangeMappers, mapper } from './registry.ts'
5
+
6
+ const BITGET_V3_API_SWITCH_DATE = new Date('2026-04-28T00:00:00.000Z')
7
+
8
+ export const bitgetMappers = exchangeMappers({
9
+ bitget: {
10
+ trades: mapper([
11
+ { until: BITGET_V3_API_SWITCH_DATE, use: () => new BitgetTradesMapper('bitget') },
12
+ { use: () => new BitgetV3TradesMapper('bitget') }
13
+ ]),
14
+ bookChanges: mapper([
15
+ { until: BITGET_V3_API_SWITCH_DATE, use: () => new BitgetBookChangeMapper('bitget') },
16
+ { use: () => new BitgetV3BookChangeMapper('bitget') }
17
+ ]),
18
+ bookTickers: mapper([
19
+ { until: BITGET_V3_API_SWITCH_DATE, use: () => new BitgetBookTickerMapper('bitget') },
20
+ { use: () => new BitgetV3BookTickerMapper('bitget') }
21
+ ])
22
+ },
23
+ 'bitget-futures': {
24
+ trades: mapper([
25
+ { until: BITGET_V3_API_SWITCH_DATE, use: () => new BitgetTradesMapper('bitget-futures') },
26
+ { use: () => new BitgetV3TradesMapper('bitget-futures') }
27
+ ]),
28
+ bookChanges: mapper([
29
+ { until: BITGET_V3_API_SWITCH_DATE, use: () => new BitgetBookChangeMapper('bitget-futures') },
30
+ { use: () => new BitgetV3BookChangeMapper('bitget-futures') }
31
+ ]),
32
+ derivativeTickers: mapper([
33
+ { until: BITGET_V3_API_SWITCH_DATE, use: () => new BitgetDerivativeTickerMapper() },
34
+ { use: () => new BitgetV3DerivativeTickerMapper() }
35
+ ]),
36
+ liquidations: () => new BitgetV3LiquidationsMapper(),
37
+ bookTickers: mapper([
38
+ { until: BITGET_V3_API_SWITCH_DATE, use: () => new BitgetBookTickerMapper('bitget-futures') },
39
+ { use: () => new BitgetV3BookTickerMapper('bitget-futures') }
40
+ ])
41
+ }
42
+ })
4
43
 
5
- export class BitgetTradesMapper implements Mapper<'bitget' | 'bitget-futures', Trade> {
44
+ class BitgetTradesMapper implements Mapper<'bitget' | 'bitget-futures', Trade> {
6
45
  constructor(private readonly _exchange: Exchange) {}
7
46
 
8
47
  canHandle(message: BitgetTradeMessage) {
@@ -43,7 +82,7 @@ function mapPriceLevel(level: [string, string]) {
43
82
  amount: Number(level[1])
44
83
  }
45
84
  }
46
- export class BitgetBookChangeMapper implements Mapper<'bitget' | 'bitget-futures', BookChange> {
85
+ class BitgetBookChangeMapper implements Mapper<'bitget' | 'bitget-futures', BookChange> {
47
86
  constructor(private readonly _exchange: Exchange) {}
48
87
 
49
88
  canHandle(message: BitgetOrderbookMessage) {
@@ -77,7 +116,7 @@ export class BitgetBookChangeMapper implements Mapper<'bitget' | 'bitget-futures
77
116
  }
78
117
  }
79
118
 
80
- export class BitgetBookTickerMapper implements Mapper<'bitget' | 'bitget-futures', BookTicker> {
119
+ class BitgetBookTickerMapper implements Mapper<'bitget' | 'bitget-futures', BookTicker> {
81
120
  constructor(private readonly _exchange: Exchange) {}
82
121
 
83
122
  canHandle(message: BitgetBBoMessage) {
@@ -116,7 +155,7 @@ export class BitgetBookTickerMapper implements Mapper<'bitget' | 'bitget-futures
116
155
  }
117
156
  }
118
157
 
119
- export class BitgetDerivativeTickerMapper implements Mapper<'bitget-futures', DerivativeTicker> {
158
+ class BitgetDerivativeTickerMapper implements Mapper<'bitget-futures', DerivativeTicker> {
120
159
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
121
160
 
122
161
  canHandle(message: BitgetTickerMessage) {
@@ -155,7 +194,7 @@ export class BitgetDerivativeTickerMapper implements Mapper<'bitget-futures', De
155
194
  }
156
195
  }
157
196
 
158
- export class BitgetV3TradesMapper implements Mapper<'bitget' | 'bitget-futures', Trade> {
197
+ class BitgetV3TradesMapper implements Mapper<'bitget' | 'bitget-futures', Trade> {
159
198
  constructor(private readonly _exchange: Exchange) {}
160
199
 
161
200
  canHandle(message: BitgetV3TradeMessage) {
@@ -190,7 +229,7 @@ export class BitgetV3TradesMapper implements Mapper<'bitget' | 'bitget-futures',
190
229
  }
191
230
  }
192
231
 
193
- export class BitgetV3BookChangeMapper implements Mapper<'bitget' | 'bitget-futures', BookChange> {
232
+ class BitgetV3BookChangeMapper implements Mapper<'bitget' | 'bitget-futures', BookChange> {
194
233
  constructor(private readonly _exchange: Exchange) {}
195
234
 
196
235
  canHandle(message: BitgetV3OrderbookMessage) {
@@ -224,7 +263,7 @@ export class BitgetV3BookChangeMapper implements Mapper<'bitget' | 'bitget-futur
224
263
  }
225
264
  }
226
265
 
227
- export class BitgetV3BookTickerMapper implements Mapper<'bitget' | 'bitget-futures', BookTicker> {
266
+ class BitgetV3BookTickerMapper implements Mapper<'bitget' | 'bitget-futures', BookTicker> {
228
267
  constructor(private readonly _exchange: Exchange) {}
229
268
 
230
269
  canHandle(message: BitgetV3BBoMessage) {
@@ -259,7 +298,7 @@ export class BitgetV3BookTickerMapper implements Mapper<'bitget' | 'bitget-futur
259
298
  }
260
299
  }
261
300
 
262
- export class BitgetV3DerivativeTickerMapper implements Mapper<'bitget-futures', DerivativeTicker> {
301
+ class BitgetV3DerivativeTickerMapper implements Mapper<'bitget-futures', DerivativeTicker> {
263
302
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
264
303
 
265
304
  canHandle(message: BitgetV3TickerMessage) {
@@ -299,7 +338,7 @@ export class BitgetV3DerivativeTickerMapper implements Mapper<'bitget-futures',
299
338
  }
300
339
  }
301
340
 
302
- export class BitgetV3LiquidationsMapper implements Mapper<'bitget-futures', Liquidation> {
341
+ class BitgetV3LiquidationsMapper implements Mapper<'bitget-futures', Liquidation> {
303
342
  canHandle(message: BitgetV3LiquidationMessage) {
304
343
  return message.arg.topic === 'liquidation' && message.action === 'update'
305
344
  }
@@ -1,10 +1,21 @@
1
1
  import { asNonZeroNumberOrUndefined, upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, BookPriceLevel, BookTicker, DerivativeTicker, FilterForExchange, Liquidation, Trade } from '../types.ts'
3
3
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
4
5
 
5
6
  // https://www.bitmex.com/app/wsAPI
6
7
 
7
- export const bitmexTradesMapper: Mapper<'bitmex', Trade> = {
8
+ export const bitmexMappers = exchangeMappers({
9
+ bitmex: {
10
+ trades: () => bitmexTradesMapper,
11
+ bookChanges: () => new BitmexBookChangeMapper(),
12
+ derivativeTickers: () => new BitmexDerivativeTickerMapper(),
13
+ liquidations: () => bitmexLiquidationsMapper,
14
+ bookTickers: () => bitmexBookTickerMapper
15
+ }
16
+ })
17
+
18
+ const bitmexTradesMapper: Mapper<'bitmex', Trade> = {
8
19
  canHandle(message: BitmexDataMessage) {
9
20
  return message.table === 'trade' && message.action === 'insert'
10
21
  },
@@ -39,7 +50,7 @@ export const bitmexTradesMapper: Mapper<'bitmex', Trade> = {
39
50
  }
40
51
  }
41
52
 
42
- export class BitmexBookChangeMapper implements Mapper<'bitmex', BookChange> {
53
+ class BitmexBookChangeMapper implements Mapper<'bitmex', BookChange> {
43
54
  private readonly _idToPriceLevelMap: Map<number, number> = new Map()
44
55
 
45
56
  canHandle(message: BitmexDataMessage) {
@@ -158,7 +169,7 @@ export class BitmexBookChangeMapper implements Mapper<'bitmex', BookChange> {
158
169
  }
159
170
  }
160
171
 
161
- export class BitmexDerivativeTickerMapper implements Mapper<'bitmex', DerivativeTicker> {
172
+ class BitmexDerivativeTickerMapper implements Mapper<'bitmex', DerivativeTicker> {
162
173
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
163
174
 
164
175
  canHandle(message: BitmexDataMessage) {
@@ -210,7 +221,7 @@ export class BitmexDerivativeTickerMapper implements Mapper<'bitmex', Derivative
210
221
  }
211
222
  }
212
223
 
213
- export const bitmexLiquidationsMapper: Mapper<'bitmex', Liquidation> = {
224
+ const bitmexLiquidationsMapper: Mapper<'bitmex', Liquidation> = {
214
225
  canHandle(message: BitmexDataMessage) {
215
226
  return message.table === 'liquidation' && message.action === 'insert'
216
227
  },
@@ -245,7 +256,7 @@ export const bitmexLiquidationsMapper: Mapper<'bitmex', Liquidation> = {
245
256
  }
246
257
  }
247
258
 
248
- export const bitmexBookTickerMapper: Mapper<'bitmex', BookTicker> = {
259
+ const bitmexBookTickerMapper: Mapper<'bitmex', BookTicker> = {
249
260
  canHandle(message: BitmexDataMessage) {
250
261
  return message.table === 'quote' && message.action === 'insert'
251
262
  },
@@ -1,8 +1,16 @@
1
1
  import { parseμs, upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, Trade } from '../types.ts'
3
3
  import { Mapper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
4
5
 
5
- export const bitnomialTradesMapper: Mapper<'bitnomial', Trade> = {
6
+ export const bitnomialMappers = exchangeMappers({
7
+ bitnomial: {
8
+ trades: () => bitnomialTradesMapper,
9
+ bookChanges: () => new BitnomialBookChangMapper()
10
+ }
11
+ })
12
+
13
+ const bitnomialTradesMapper: Mapper<'bitnomial', Trade> = {
6
14
  canHandle(message: BitnomialTrade) {
7
15
  return message.type === 'trade'
8
16
  },
@@ -40,7 +48,7 @@ const mapBookLevel = (level: BookLevel) => {
40
48
  return { price: level[0], amount: level[1] }
41
49
  }
42
50
 
43
- export class BitnomialBookChangMapper implements Mapper<'bitnomial', BookChange> {
51
+ class BitnomialBookChangMapper implements Mapper<'bitnomial', BookChange> {
44
52
  canHandle(message: BitnomialBookMessage) {
45
53
  return message.type === 'book' || message.type === 'level'
46
54
  }
@@ -1,10 +1,18 @@
1
1
  import { lowerCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, Trade } from '../types.ts'
3
3
  import { Mapper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
4
5
 
5
6
  // https://www.bitstamp.net/websocket/v2/
6
7
 
7
- export const bitstampTradesMapper: Mapper<'bitstamp', Trade> = {
8
+ export const bitstampMappers = exchangeMappers({
9
+ bitstamp: {
10
+ trades: () => bitstampTradesMapper,
11
+ bookChanges: () => new BitstampBookChangeMapper()
12
+ }
13
+ })
14
+
15
+ const bitstampTradesMapper: Mapper<'bitstamp', Trade> = {
8
16
  canHandle(message: BitstampTrade | BitstampDiffOrderBook | BitstampDiffOrderBookSnapshot) {
9
17
  if (message.data === undefined) {
10
18
  return false
@@ -45,7 +53,7 @@ export const bitstampTradesMapper: Mapper<'bitstamp', Trade> = {
45
53
  }
46
54
  }
47
55
 
48
- export class BitstampBookChangeMapper implements Mapper<'bitstamp', BookChange> {
56
+ class BitstampBookChangeMapper implements Mapper<'bitstamp', BookChange> {
49
57
  private readonly _symbolToDepthInfoMapping: { [key: string]: LocalDepthInfo } = {}
50
58
 
51
59
  canHandle(message: BitstampTrade | BitstampDiffOrderBook | BitstampDiffOrderBookSnapshot) {
@@ -1,8 +1,16 @@
1
1
  import { upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, Trade } from '../types.ts'
3
3
  import { Mapper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
4
5
 
5
- export class BlockchainComTradesMapper implements Mapper<'blockchain-com', Trade> {
6
+ export const blockchainComMappers = exchangeMappers({
7
+ 'blockchain-com': {
8
+ trades: () => new BlockchainComTradesMapper(),
9
+ bookChanges: () => new BlockchainComBookChangeMapper()
10
+ }
11
+ })
12
+
13
+ class BlockchainComTradesMapper implements Mapper<'blockchain-com', Trade> {
6
14
  canHandle(message: BlockchainComTradeMessage) {
7
15
  return message.channel === 'trades' && message.event === 'updated'
8
16
  }
@@ -32,7 +40,7 @@ export class BlockchainComTradesMapper implements Mapper<'blockchain-com', Trade
32
40
  }
33
41
  }
34
42
 
35
- export class BlockchainComBookChangeMapper implements Mapper<'blockchain-com', BookChange> {
43
+ class BlockchainComBookChangeMapper implements Mapper<'blockchain-com', BookChange> {
36
44
  canHandle(message: BlockchainComL2Message) {
37
45
  return message.channel == 'l2' && (message.event === 'snapshot' || message.event === 'updated')
38
46
  }