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,17 @@
1
1
  import { upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, BookPriceLevel, DerivativeTicker, Trade } from '../types.ts'
3
3
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
4
5
 
5
- export class DydxTradesMapper implements Mapper<'dydx', Trade> {
6
+ export const dydxMappers = exchangeMappers({
7
+ dydx: {
8
+ trades: () => new DydxTradesMapper(),
9
+ bookChanges: () => new DydxBookChangeMapper(),
10
+ derivativeTickers: () => new DydxDerivativeTickerMapper()
11
+ }
12
+ })
13
+
14
+ class DydxTradesMapper implements Mapper<'dydx', Trade> {
6
15
  canHandle(message: DyDxTrade) {
7
16
  return message.channel === 'v3_trades' && message.type === 'channel_data'
8
17
  }
@@ -35,7 +44,7 @@ export class DydxTradesMapper implements Mapper<'dydx', Trade> {
35
44
  }
36
45
  }
37
46
 
38
- export class DydxBookChangeMapper implements Mapper<'dydx', BookChange> {
47
+ class DydxBookChangeMapper implements Mapper<'dydx', BookChange> {
39
48
  private _bidsOffsets: { [key: string]: { [key: string]: number | undefined } } = {}
40
49
  private _asksOffsets: { [key: string]: { [key: string]: number | undefined } } = {}
41
50
 
@@ -148,7 +157,7 @@ export class DydxBookChangeMapper implements Mapper<'dydx', BookChange> {
148
157
  }
149
158
  }
150
159
 
151
- export class DydxDerivativeTickerMapper implements Mapper<'dydx', DerivativeTicker> {
160
+ class DydxDerivativeTickerMapper implements Mapper<'dydx', DerivativeTicker> {
152
161
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
153
162
 
154
163
  canHandle(message: DydxMarketsSnapshot | DyDxMarketsUpdate | DyDxTrade) {
@@ -1,8 +1,18 @@
1
1
  import { upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, DerivativeTicker, Liquidation, Trade } from '../types.ts'
3
3
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
5
+
6
+ export const dydxV4Mappers = exchangeMappers({
7
+ 'dydx-v4': {
8
+ trades: () => new DydxV4TradesMapper(),
9
+ bookChanges: () => new DydxV4BookChangeMapper(),
10
+ derivativeTickers: () => new DydxV4DerivativeTickerMapper(),
11
+ liquidations: () => new DydxV4LiquidationsMapper()
12
+ }
13
+ })
4
14
 
5
- export class DydxV4TradesMapper implements Mapper<'dydx-v4', Trade> {
15
+ class DydxV4TradesMapper implements Mapper<'dydx-v4', Trade> {
6
16
  canHandle(message: DyDxTrade) {
7
17
  return message.channel === 'v4_trades' && message.type === 'channel_data'
8
18
  }
@@ -48,7 +58,7 @@ function mapUpdatePriceLevel(level: [string, string]) {
48
58
  amount: Number(level[1])
49
59
  }
50
60
  }
51
- export class DydxV4BookChangeMapper implements Mapper<'dydx-v4', BookChange> {
61
+ class DydxV4BookChangeMapper implements Mapper<'dydx-v4', BookChange> {
52
62
  canHandle(message: DyDxOrderbookSnapshot | DyDxOrderBookUpdate) {
53
63
  return message.channel === 'v4_orderbook'
54
64
  }
@@ -99,7 +109,7 @@ export class DydxV4BookChangeMapper implements Mapper<'dydx-v4', BookChange> {
99
109
  }
100
110
  }
101
111
 
102
- export class DydxV4DerivativeTickerMapper implements Mapper<'dydx-v4', DerivativeTicker> {
112
+ class DydxV4DerivativeTickerMapper implements Mapper<'dydx-v4', DerivativeTicker> {
103
113
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
104
114
 
105
115
  canHandle(message: DydxMarketsSnapshot | DyDxMarketsUpdate | DyDxTrade) {
@@ -171,7 +181,7 @@ export class DydxV4DerivativeTickerMapper implements Mapper<'dydx-v4', Derivativ
171
181
  }
172
182
  }
173
183
 
174
- export class DydxV4LiquidationsMapper implements Mapper<'dydx-v4', Liquidation> {
184
+ class DydxV4LiquidationsMapper implements Mapper<'dydx-v4', Liquidation> {
175
185
  canHandle(message: DyDxTrade) {
176
186
  return message.channel === 'v4_trades' && message.type === 'channel_data'
177
187
  }
@@ -1,10 +1,26 @@
1
1
  import { asNonZeroNumberOrUndefined, parseμs, 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 } from './registry.ts'
4
5
 
5
6
  // https://docs.ftx.com/#websocket-api
6
7
 
7
- export class FTXTradesMapper implements Mapper<'ftx' | 'ftx-us', Trade> {
8
+ export const ftxMappers = exchangeMappers({
9
+ ftx: {
10
+ trades: () => new FTXTradesMapper('ftx'),
11
+ bookChanges: () => new FTXBookChangeMapper('ftx'),
12
+ derivativeTickers: () => new FTXDerivativeTickerMapper('ftx'),
13
+ liquidations: () => new FTXLiquidationsMapper(),
14
+ bookTickers: () => new FTXBookTickerMapper('ftx')
15
+ },
16
+ 'ftx-us': {
17
+ trades: () => new FTXTradesMapper('ftx-us'),
18
+ bookChanges: () => new FTXBookChangeMapper('ftx-us'),
19
+ bookTickers: () => new FTXBookTickerMapper('ftx-us')
20
+ }
21
+ })
22
+
23
+ class FTXTradesMapper implements Mapper<'ftx' | 'ftx-us', Trade> {
8
24
  constructor(private readonly _exchange: Exchange) {}
9
25
 
10
26
  canHandle(message: FtxTrades | FtxOrderBook) {
@@ -46,14 +62,14 @@ export class FTXTradesMapper implements Mapper<'ftx' | 'ftx-us', Trade> {
46
62
  }
47
63
  }
48
64
 
49
- export const mapBookLevel = (level: FtxBookLevel) => {
65
+ const mapBookLevel = (level: FtxBookLevel) => {
50
66
  const price = level[0]
51
67
  const amount = level[1]
52
68
 
53
69
  return { price, amount }
54
70
  }
55
71
 
56
- export class FTXBookChangeMapper implements Mapper<'ftx' | 'ftx-us', BookChange> {
72
+ class FTXBookChangeMapper implements Mapper<'ftx' | 'ftx-us', BookChange> {
57
73
  constructor(private readonly _exchange: Exchange) {}
58
74
 
59
75
  canHandle(message: FtxTrades | FtxOrderBook) {
@@ -97,7 +113,7 @@ export class FTXBookChangeMapper implements Mapper<'ftx' | 'ftx-us', BookChange>
97
113
  }
98
114
  }
99
115
 
100
- export class FTXDerivativeTickerMapper implements Mapper<'ftx', DerivativeTicker> {
116
+ class FTXDerivativeTickerMapper implements Mapper<'ftx', DerivativeTicker> {
101
117
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
102
118
 
103
119
  constructor(private readonly _exchange: Exchange) {}
@@ -156,7 +172,7 @@ export class FTXDerivativeTickerMapper implements Mapper<'ftx', DerivativeTicker
156
172
  }
157
173
  }
158
174
 
159
- export class FTXLiquidationsMapper implements Mapper<'ftx', Liquidation> {
175
+ class FTXLiquidationsMapper implements Mapper<'ftx', Liquidation> {
160
176
  canHandle(message: FtxTrades | FtxOrderBook) {
161
177
  if (message.data == undefined) {
162
178
  return false
@@ -198,7 +214,7 @@ export class FTXLiquidationsMapper implements Mapper<'ftx', Liquidation> {
198
214
  }
199
215
  }
200
216
 
201
- export class FTXBookTickerMapper implements Mapper<'ftx' | 'ftx-us', BookTicker> {
217
+ class FTXBookTickerMapper implements Mapper<'ftx' | 'ftx-us', BookTicker> {
202
218
  constructor(private readonly _exchange: Exchange) {}
203
219
 
204
220
  canHandle(message: FTXTicker) {
@@ -2,8 +2,30 @@ import { debug } from '../debug.ts'
2
2
  import { CircularBuffer, fromMicroSecondsToDate, upperCaseSymbols } from '../handy.ts'
3
3
  import { BookChange, BookTicker, Exchange, Trade } from '../types.ts'
4
4
  import { Mapper } from './mapper.ts'
5
+ import { exchangeMappers, mapper } from './registry.ts'
6
+
7
+ const GATE_IO_V4_API_SWITCH_DATE = new Date('2023-04-29T00:00:00.000Z')
8
+ const GATE_IO_V4_ORDER_BOOK_V2_SWITCH_DATE = new Date('2025-08-01T00:00:00.000Z')
9
+
10
+ export const gateIOMappers = exchangeMappers({
11
+ 'gate-io': {
12
+ trades: mapper([
13
+ { until: GATE_IO_V4_API_SWITCH_DATE, use: () => new GateIOTradesMapper('gate-io') },
14
+ { use: () => new GateIOV4TradesMapper('gate-io') }
15
+ ]),
16
+ bookChanges: mapper([
17
+ { until: GATE_IO_V4_API_SWITCH_DATE, use: () => new GateIOBookChangeMapper('gate-io') },
18
+ {
19
+ until: GATE_IO_V4_ORDER_BOOK_V2_SWITCH_DATE,
20
+ use: () => new GateIOV4BookChangeMapper('gate-io', { ignoreBookSnapshotOverlapError: true })
21
+ },
22
+ { use: () => new GateIOV4OrderBookV2ChangeMapper('gate-io') }
23
+ ]),
24
+ bookTickers: () => new GateIOV4BookTickerMapper('gate-io')
25
+ }
26
+ })
5
27
 
6
- export class GateIOV4OrderBookV2ChangeMapper implements Mapper<'gate-io', BookChange> {
28
+ class GateIOV4OrderBookV2ChangeMapper implements Mapper<'gate-io', BookChange> {
7
29
  constructor(protected readonly exchange: Exchange) {}
8
30
 
9
31
  canHandle(message: GateV4OrderBookV2Message) {
@@ -55,15 +77,19 @@ export class GateIOV4OrderBookV2ChangeMapper implements Mapper<'gate-io', BookCh
55
77
  }
56
78
  //v4
57
79
 
58
- export class GateIOV4BookChangeMapper implements Mapper<'gate-io', BookChange> {
80
+ class GateIOV4BookChangeMapper implements Mapper<'gate-io', BookChange> {
59
81
  protected readonly symbolToDepthInfoMapping: {
60
82
  [key: string]: LocalDepthInfo
61
83
  } = {}
62
84
 
63
85
  constructor(
64
86
  protected readonly exchange: Exchange,
65
- protected readonly ignoreBookSnapshotOverlapError: boolean
66
- ) {}
87
+ { ignoreBookSnapshotOverlapError }: { ignoreBookSnapshotOverlapError: boolean }
88
+ ) {
89
+ this.ignoreBookSnapshotOverlapError = ignoreBookSnapshotOverlapError
90
+ }
91
+
92
+ protected readonly ignoreBookSnapshotOverlapError: boolean
67
93
 
68
94
  canHandle(message: GateV4OrderBookUpdate | Gatev4OrderBookSnapshot) {
69
95
  if (message.channel === undefined) {
@@ -216,7 +242,7 @@ export class GateIOV4BookChangeMapper implements Mapper<'gate-io', BookChange> {
216
242
  }
217
243
  }
218
244
 
219
- export class GateIOV4BookTickerMapper implements Mapper<'gate-io', BookTicker> {
245
+ class GateIOV4BookTickerMapper implements Mapper<'gate-io', BookTicker> {
220
246
  constructor(private readonly _exchange: Exchange) {}
221
247
 
222
248
  canHandle(message: GateV4BookTicker) {
@@ -260,7 +286,7 @@ export class GateIOV4BookTickerMapper implements Mapper<'gate-io', BookTicker> {
260
286
  }
261
287
  }
262
288
 
263
- export class GateIOV4TradesMapper implements Mapper<'gate-io', Trade> {
289
+ class GateIOV4TradesMapper implements Mapper<'gate-io', Trade> {
264
290
  constructor(private readonly _exchange: Exchange) {}
265
291
 
266
292
  canHandle(message: GateV4Trade) {
@@ -302,7 +328,7 @@ export class GateIOV4TradesMapper implements Mapper<'gate-io', Trade> {
302
328
 
303
329
  // v3 https://www.gate.io/docs/websocket/index.html
304
330
 
305
- export class GateIOTradesMapper implements Mapper<'gate-io', Trade> {
331
+ class GateIOTradesMapper implements Mapper<'gate-io', Trade> {
306
332
  private readonly _seenSymbols = new Set<string>()
307
333
 
308
334
  constructor(private readonly _exchange: Exchange) {}
@@ -361,7 +387,7 @@ const mapBookLevel = (level: GateIODepthLevel) => {
361
387
  return { price, amount }
362
388
  }
363
389
 
364
- export class GateIOBookChangeMapper implements Mapper<'gate-io', BookChange> {
390
+ class GateIOBookChangeMapper implements Mapper<'gate-io', BookChange> {
365
391
  constructor(private readonly _exchange: Exchange) {}
366
392
 
367
393
  canHandle(message: any) {
@@ -1,10 +1,20 @@
1
1
  import { upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, DerivativeTicker, Exchange, Trade, BookTicker } from '../types.ts'
3
3
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
4
5
 
5
6
  // https://www.gate.io/docs/futures/ws/index.html
6
7
 
7
- export class GateIOFuturesTradesMapper implements Mapper<'gate-io-futures', Trade> {
8
+ export const gateIOFuturesMappers = exchangeMappers({
9
+ 'gate-io-futures': {
10
+ trades: () => new GateIOFuturesTradesMapper('gate-io-futures'),
11
+ bookChanges: () => new GateIOFuturesBookChangeMapper('gate-io-futures'),
12
+ derivativeTickers: () => new GateIOFuturesDerivativeTickerMapper(),
13
+ bookTickers: () => new GateIOFuturesBookTickerMapper('gate-io-futures')
14
+ }
15
+ })
16
+
17
+ class GateIOFuturesTradesMapper implements Mapper<'gate-io-futures', Trade> {
8
18
  constructor(private readonly _exchange: Exchange) {}
9
19
 
10
20
  canHandle(message: any) {
@@ -49,7 +59,7 @@ const mapBookLevel = (level: GateIOFuturesSnapshotLevel) => {
49
59
  return { price, amount: Math.abs(size) }
50
60
  }
51
61
 
52
- export class GateIOFuturesBookChangeMapper implements Mapper<'gate-io-futures', BookChange> {
62
+ class GateIOFuturesBookChangeMapper implements Mapper<'gate-io-futures', BookChange> {
53
63
  constructor(private readonly _exchange: Exchange) {}
54
64
 
55
65
  canHandle(message: GateIOFuturesOrderBookSnapshot | GateIOFuturesOrderBookUpdate) {
@@ -108,7 +118,7 @@ export class GateIOFuturesBookChangeMapper implements Mapper<'gate-io-futures',
108
118
  }
109
119
  }
110
120
 
111
- export class GateIOFuturesDerivativeTickerMapper implements Mapper<'gate-io-futures', DerivativeTicker> {
121
+ class GateIOFuturesDerivativeTickerMapper implements Mapper<'gate-io-futures', DerivativeTicker> {
112
122
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
113
123
 
114
124
  canHandle(message: GateIOFuturesTicker) {
@@ -155,7 +165,7 @@ export class GateIOFuturesDerivativeTickerMapper implements Mapper<'gate-io-futu
155
165
  }
156
166
  }
157
167
 
158
- export class GateIOFuturesBookTickerMapper implements Mapper<'gate-io-futures', BookTicker> {
168
+ class GateIOFuturesBookTickerMapper implements Mapper<'gate-io-futures', BookTicker> {
159
169
  constructor(private readonly _exchange: Exchange) {}
160
170
 
161
171
  canHandle(message: any) {
@@ -1,10 +1,18 @@
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
6
  // https://docs.gemini.com/websocket-api/#market-data-version-2
6
7
 
7
- export const geminiTradesMapper: Mapper<'gemini', Trade> = {
8
+ export const geminiMappers = exchangeMappers({
9
+ gemini: {
10
+ trades: () => geminiTradesMapper,
11
+ bookChanges: () => geminiBookChangeMapper
12
+ }
13
+ })
14
+
15
+ const geminiTradesMapper: Mapper<'gemini', Trade> = {
8
16
  canHandle(message: GeminiL2Updates | GeminiTrade) {
9
17
  return message.type === 'trade'
10
18
  },
@@ -42,7 +50,7 @@ const mapBookLevel = (level: GeminiBookLevel) => {
42
50
  return { price, amount }
43
51
  }
44
52
 
45
- export const geminiBookChangeMapper: Mapper<'gemini', BookChange> = {
53
+ const geminiBookChangeMapper: Mapper<'gemini', BookChange> = {
46
54
  canHandle(message: GeminiL2Updates | GeminiTrade) {
47
55
  return message.type === 'l2_updates'
48
56
  },
@@ -1,10 +1,18 @@
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
6
  // https://api.hitbtc.com/#socket-market-data
6
7
 
7
- export const hitBtcTradesMapper: Mapper<'hitbtc', Trade> = {
8
+ export const hitBtcMappers = exchangeMappers({
9
+ hitbtc: {
10
+ trades: () => hitBtcTradesMapper,
11
+ bookChanges: () => hitBtcBookChangeMapper
12
+ }
13
+ })
14
+
15
+ const hitBtcTradesMapper: Mapper<'hitbtc', Trade> = {
8
16
  canHandle(message: HitBtcTradesMessage) {
9
17
  return message.method !== undefined && message.method === 'updateTrades'
10
18
  },
@@ -43,7 +51,7 @@ const mapBookLevel = (level: HitBtcBookLevel) => {
43
51
  return { price, amount }
44
52
  }
45
53
 
46
- export const hitBtcBookChangeMapper: Mapper<'hitbtc', BookChange> = {
54
+ const hitBtcBookChangeMapper: Mapper<'hitbtc', BookChange> = {
47
55
  canHandle(message: HitBtcBookMessage) {
48
56
  if (message.method === undefined) {
49
57
  return false
@@ -1,14 +1,51 @@
1
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
+ import { exchangeMappers, mapper } from './registry.ts'
4
5
 
5
6
  // https://huobiapi.github.io/docs/spot/v1/en/#websocket-market-data
6
7
  // https://github.com/huobiapi/API_Docs_en/wiki/WS_api_reference_en
7
8
 
8
- export class HuobiTradesMapper implements Mapper<
9
- 'huobi' | 'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap' | 'huobi-dm-options',
10
- Trade
11
- > {
9
+ const HUOBI_MBP_BOOK_CHANGE_SWITCH_DATE = new Date('2020-07-03T00:00:00.000Z')
10
+
11
+ export const huobiMappers = exchangeMappers({
12
+ huobi: {
13
+ trades: () => new HuobiTradesMapper('huobi'),
14
+ bookChanges: mapper([
15
+ { until: HUOBI_MBP_BOOK_CHANGE_SWITCH_DATE, use: () => new HuobiBookChangeMapper('huobi') },
16
+ { use: () => new HuobiMBPBookChangeMapper('huobi') }
17
+ ]),
18
+ bookTickers: () => new HuobiBookTickerMapper('huobi')
19
+ },
20
+ 'huobi-dm': {
21
+ trades: () => new HuobiTradesMapper('huobi-dm'),
22
+ bookChanges: () => new HuobiBookChangeMapper('huobi-dm'),
23
+ derivativeTickers: () => new HuobiDerivativeTickerMapper('huobi-dm'),
24
+ liquidations: () => new HuobiLiquidationsMapper('huobi-dm'),
25
+ bookTickers: () => new HuobiBookTickerMapper('huobi-dm')
26
+ },
27
+ 'huobi-dm-swap': {
28
+ trades: () => new HuobiTradesMapper('huobi-dm-swap'),
29
+ bookChanges: () => new HuobiBookChangeMapper('huobi-dm-swap'),
30
+ derivativeTickers: () => new HuobiDerivativeTickerMapper('huobi-dm-swap'),
31
+ liquidations: () => new HuobiLiquidationsMapper('huobi-dm-swap'),
32
+ bookTickers: () => new HuobiBookTickerMapper('huobi-dm-swap')
33
+ },
34
+ 'huobi-dm-linear-swap': {
35
+ trades: () => new HuobiTradesMapper('huobi-dm-linear-swap'),
36
+ bookChanges: () => new HuobiBookChangeMapper('huobi-dm-linear-swap'),
37
+ derivativeTickers: () => new HuobiDerivativeTickerMapper('huobi-dm-linear-swap'),
38
+ liquidations: () => new HuobiLiquidationsMapper('huobi-dm-linear-swap'),
39
+ bookTickers: () => new HuobiBookTickerMapper('huobi-dm-linear-swap')
40
+ },
41
+ 'huobi-dm-options': {
42
+ trades: () => new HuobiTradesMapper('huobi-dm-options'),
43
+ bookChanges: () => new HuobiBookChangeMapper('huobi-dm-options'),
44
+ optionsSummary: () => new HuobiOptionsSummaryMapper()
45
+ }
46
+ })
47
+
48
+ class HuobiTradesMapper implements Mapper<'huobi' | 'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap' | 'huobi-dm-options', Trade> {
12
49
  constructor(private readonly _exchange: Exchange) {}
13
50
  canHandle(message: HuobiDataMessage) {
14
51
  if (message.ch === undefined) {
@@ -47,7 +84,7 @@ export class HuobiTradesMapper implements Mapper<
47
84
  }
48
85
  }
49
86
 
50
- export class HuobiBookChangeMapper implements Mapper<
87
+ class HuobiBookChangeMapper implements Mapper<
51
88
  'huobi' | 'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap' | 'huobi-dm-options',
52
89
  BookChange
53
90
  > {
@@ -103,7 +140,7 @@ function isSnapshot(message: HuobiMBPDataMessage | HuobiMBPSnapshot): message is
103
140
  return 'rep' in message
104
141
  }
105
142
 
106
- export class HuobiMBPBookChangeMapper implements Mapper<'huobi', BookChange> {
143
+ class HuobiMBPBookChangeMapper implements Mapper<'huobi', BookChange> {
107
144
  protected readonly symbolToMBPInfoMapping: {
108
145
  [key: string]: MBPInfo
109
146
  } = {}
@@ -243,7 +280,7 @@ function normalizeSymbols(symbols?: string[]) {
243
280
  return
244
281
  }
245
282
 
246
- export class HuobiDerivativeTickerMapper implements Mapper<'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap', DerivativeTicker> {
283
+ class HuobiDerivativeTickerMapper implements Mapper<'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap', DerivativeTicker> {
247
284
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
248
285
 
249
286
  constructor(private readonly _exchange: Exchange) {}
@@ -324,7 +361,7 @@ export class HuobiDerivativeTickerMapper implements Mapper<'huobi-dm' | 'huobi-d
324
361
  }
325
362
  }
326
363
 
327
- export class HuobiLiquidationsMapper implements Mapper<'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap', Liquidation> {
364
+ class HuobiLiquidationsMapper implements Mapper<'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap', Liquidation> {
328
365
  private readonly _contractCodeToSymbolMap: Map<string, string> = new Map()
329
366
  private readonly _contractTypesSuffixes = { this_week: 'CW', next_week: 'NW', quarter: 'CQ', next_quarter: 'NQ' }
330
367
 
@@ -412,7 +449,7 @@ export class HuobiLiquidationsMapper implements Mapper<'huobi-dm' | 'huobi-dm-sw
412
449
  }
413
450
  }
414
451
 
415
- export class HuobiOptionsSummaryMapper implements Mapper<'huobi-dm-options', OptionSummary> {
452
+ class HuobiOptionsSummaryMapper implements Mapper<'huobi-dm-options', OptionSummary> {
416
453
  private readonly _indexPrices = new Map<string, number>()
417
454
  private readonly _openInterest = new Map<string, number>()
418
455
 
@@ -522,7 +559,7 @@ export class HuobiOptionsSummaryMapper implements Mapper<'huobi-dm-options', Opt
522
559
  }
523
560
  }
524
561
 
525
- export class HuobiBookTickerMapper implements Mapper<'huobi' | 'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap', BookTicker> {
562
+ class HuobiBookTickerMapper implements Mapper<'huobi' | 'huobi-dm' | 'huobi-dm-swap' | 'huobi-dm-linear-swap', BookTicker> {
526
563
  constructor(private readonly _exchange: Exchange) {}
527
564
 
528
565
  canHandle(message: HuobiDataMessage) {
@@ -1,5 +1,15 @@
1
1
  import { BookChange, BookTicker, DerivativeTicker, Trade } from '../types.ts'
2
2
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
3
+ import { exchangeMappers } from './registry.ts'
4
+
5
+ export const hyperliquidMappers = exchangeMappers({
6
+ hyperliquid: {
7
+ trades: () => new HyperliquidTradesMapper(),
8
+ bookChanges: () => new HyperliquidBookChangeMapper(),
9
+ derivativeTickers: () => new HyperliquidDerivativeTickerMapper(),
10
+ bookTickers: () => new HyperliquidBookTickerMapper()
11
+ }
12
+ })
3
13
 
4
14
  const KILO_SYMBOLS = ['kPEPE', 'kSHIB', 'kBONK', 'kFLOKI', 'kLUNC', 'kDOGS', 'kNEIRO']
5
15
 
@@ -22,7 +32,7 @@ function getSymbols(symbols?: string[]) {
22
32
  }
23
33
  return
24
34
  }
25
- export class HyperliquidTradesMapper implements Mapper<'hyperliquid', Trade> {
35
+ class HyperliquidTradesMapper implements Mapper<'hyperliquid', Trade> {
26
36
  private readonly _seenSymbols = new Set<string>()
27
37
 
28
38
  canHandle(message: HyperliquidTradeMessage) {
@@ -67,7 +77,7 @@ function mapHyperliquidLevel(level: HyperliquidWsLevel) {
67
77
  amount: Number(level.sz)
68
78
  }
69
79
  }
70
- export class HyperliquidBookChangeMapper implements Mapper<'hyperliquid', BookChange> {
80
+ class HyperliquidBookChangeMapper implements Mapper<'hyperliquid', BookChange> {
71
81
  canHandle(message: HyperliquidWsBookMessage) {
72
82
  return message.channel === 'l2Book'
73
83
  }
@@ -97,7 +107,7 @@ export class HyperliquidBookChangeMapper implements Mapper<'hyperliquid', BookCh
97
107
  }
98
108
  }
99
109
 
100
- export class HyperliquidBookTickerMapper implements Mapper<'hyperliquid', BookTicker> {
110
+ class HyperliquidBookTickerMapper implements Mapper<'hyperliquid', BookTicker> {
101
111
  canHandle(message: HyperliquidBboMessage) {
102
112
  return message.channel === 'bbo'
103
113
  }
@@ -134,7 +144,7 @@ export class HyperliquidBookTickerMapper implements Mapper<'hyperliquid', BookTi
134
144
  }
135
145
  }
136
146
 
137
- export class HyperliquidDerivativeTickerMapper implements Mapper<'hyperliquid', DerivativeTicker> {
147
+ class HyperliquidDerivativeTickerMapper implements Mapper<'hyperliquid', DerivativeTicker> {
138
148
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
139
149
 
140
150
  canHandle(message: HyperliquidContextMessage) {