tardis-dev 16.5.1 → 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 +15 -5
  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 +16 -5
  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,19 @@
1
1
  import { asNonZeroNumberOrUndefined, asNumberOrUndefined } from '../handy.ts'
2
2
  import { BookChange, BookPriceLevel, BookTicker, DerivativeTicker, OptionSummary, Trade } from '../types.ts'
3
3
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
5
+
6
+ export const bullishMappers = exchangeMappers({
7
+ bullish: {
8
+ trades: () => new BullishTradesMapper(),
9
+ bookChanges: () => new BullishBookChangeMapper(),
10
+ derivativeTickers: () => new BullishDerivativeTickerMapper(),
11
+ optionsSummary: () => new BullishOptionSummaryMapper(),
12
+ bookTickers: () => new BullishBookTickerMapper()
13
+ }
14
+ })
4
15
 
5
- export class BullishTradesMapper implements Mapper<'bullish', Trade> {
16
+ class BullishTradesMapper implements Mapper<'bullish', Trade> {
6
17
  canHandle(message: BullishMessage): message is BullishAnonymousTradeUpdateMessage {
7
18
  return message.dataType === 'V1TAAnonymousTradeUpdate' && message.type === 'update'
8
19
  }
@@ -43,7 +54,7 @@ export class BullishTradesMapper implements Mapper<'bullish', Trade> {
43
54
  }
44
55
  }
45
56
 
46
- export class BullishBookChangeMapper implements Mapper<'bullish', BookChange> {
57
+ class BullishBookChangeMapper implements Mapper<'bullish', BookChange> {
47
58
  canHandle(message: BullishMessage): message is BullishLevel2Message {
48
59
  return message.dataType === 'V1TALevel2'
49
60
  }
@@ -83,7 +94,7 @@ export class BullishBookChangeMapper implements Mapper<'bullish', BookChange> {
83
94
  }
84
95
  }
85
96
 
86
- export class BullishBookTickerMapper implements Mapper<'bullish', BookTicker> {
97
+ class BullishBookTickerMapper implements Mapper<'bullish', BookTicker> {
87
98
  canHandle(message: BullishMessage): message is BullishLevel1Message {
88
99
  return message.dataType === 'V1TALevel1' && (message.type === 'snapshot' || message.type === 'update')
89
100
  }
@@ -112,7 +123,7 @@ export class BullishBookTickerMapper implements Mapper<'bullish', BookTicker> {
112
123
  }
113
124
  }
114
125
 
115
- export class BullishDerivativeTickerMapper implements Mapper<'bullish', DerivativeTicker> {
126
+ class BullishDerivativeTickerMapper implements Mapper<'bullish', DerivativeTicker> {
116
127
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
117
128
  private readonly indexPrices = new Map<string, { price: number; timestamp: Date }>()
118
129
 
@@ -174,7 +185,7 @@ export class BullishDerivativeTickerMapper implements Mapper<'bullish', Derivati
174
185
  }
175
186
  }
176
187
 
177
- export class BullishOptionSummaryMapper implements Mapper<'bullish', OptionSummary> {
188
+ class BullishOptionSummaryMapper implements Mapper<'bullish', OptionSummary> {
178
189
  private readonly indexPrices = new Map<string, { price: number; timestamp: Date }>()
179
190
 
180
191
  canHandle(message: BullishMessage): message is BullishOptionTickerMessage | BullishIndexPriceMessage {
@@ -1,10 +1,57 @@
1
1
  import { asNonZeroNumberOrUndefined, upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, BookTicker, DerivativeTicker, Exchange, Liquidation, OptionSummary, Trade } from '../types.ts'
3
+ import { BybitSpotBookChangeMapper, BybitSpotBookTickerMapper, BybitSpotTradesMapper } from './bybitspot.ts'
3
4
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
5
+ import { exchangeMappers, mapper } from './registry.ts'
6
+
7
+ const BYBIT_V5_API_SWITCH_DATE = new Date('2023-04-05T00:00:00.000Z')
8
+ const BYBIT_V5_API_ALL_LIQUIDATION_SUPPORT_DATE = new Date('2025-02-26T00:00:00.000Z')
9
+
10
+ export const bybitMappers = exchangeMappers({
11
+ bybit: {
12
+ trades: mapper([
13
+ { until: BYBIT_V5_API_SWITCH_DATE, use: () => new BybitTradesMapper('bybit') },
14
+ { use: () => new BybitV5TradesMapper('bybit') }
15
+ ]),
16
+ bookChanges: mapper([
17
+ { until: BYBIT_V5_API_SWITCH_DATE, use: () => new BybitBookChangeMapper('bybit', { useBook200Channel: false }) },
18
+ { use: () => new BybitV5BookChangeMapper('bybit', { depth: 50 }) }
19
+ ]),
20
+ derivativeTickers: mapper([
21
+ { until: BYBIT_V5_API_SWITCH_DATE, use: () => new BybitDerivativeTickerMapper() },
22
+ { use: () => new BybitV5DerivativeTickerMapper() }
23
+ ]),
24
+ liquidations: mapper([
25
+ { until: BYBIT_V5_API_SWITCH_DATE, use: () => new BybitLiquidationsMapper('bybit') },
26
+ { until: BYBIT_V5_API_ALL_LIQUIDATION_SUPPORT_DATE, use: () => new BybitV5LiquidationsMapper('bybit') },
27
+ { use: () => new BybitV5AllLiquidationsMapper('bybit') }
28
+ ]),
29
+ bookTickers: () => new BybitV5BookTickerMapper('bybit')
30
+ },
31
+ 'bybit-spot': {
32
+ trades: mapper([
33
+ { until: BYBIT_V5_API_SWITCH_DATE, use: () => new BybitSpotTradesMapper('bybit-spot') },
34
+ { use: () => new BybitV5TradesMapper('bybit-spot') }
35
+ ]),
36
+ bookChanges: mapper([
37
+ { until: BYBIT_V5_API_SWITCH_DATE, use: () => new BybitSpotBookChangeMapper('bybit-spot') },
38
+ { use: () => new BybitV5BookChangeMapper('bybit-spot', { depth: 50 }) }
39
+ ]),
40
+ bookTickers: mapper([
41
+ { until: BYBIT_V5_API_SWITCH_DATE, use: () => new BybitSpotBookTickerMapper('bybit-spot') },
42
+ { use: () => new BybitV5BookTickerMapper('bybit-spot') }
43
+ ])
44
+ },
45
+ 'bybit-options': {
46
+ trades: () => new BybitV5TradesMapper('bybit-options'),
47
+ bookChanges: () => new BybitV5BookChangeMapper('bybit-options', { depth: 25 }),
48
+ optionsSummary: () => new BybitV5OptionSummaryMapper()
49
+ }
50
+ })
4
51
 
5
52
  // v5 https://bybit-exchange.github.io/docs/v5/ws/connect
6
53
 
7
- export class BybitV5TradesMapper implements Mapper<'bybit' | 'bybit-spot' | 'bybit-options', Trade> {
54
+ class BybitV5TradesMapper implements Mapper<'bybit' | 'bybit-spot' | 'bybit-options', Trade> {
8
55
  constructor(private readonly _exchange: Exchange) {}
9
56
 
10
57
  canHandle(message: BybitV5Trade) {
@@ -43,11 +90,15 @@ export class BybitV5TradesMapper implements Mapper<'bybit' | 'bybit-spot' | 'byb
43
90
  }
44
91
  }
45
92
 
46
- export class BybitV5BookChangeMapper implements Mapper<'bybit' | 'bybit-spot' | 'bybit-options', BookChange> {
93
+ class BybitV5BookChangeMapper implements Mapper<'bybit' | 'bybit-spot' | 'bybit-options', BookChange> {
94
+ private readonly _depth: number
95
+
47
96
  constructor(
48
97
  protected readonly _exchange: Exchange,
49
- private readonly _depth: number
50
- ) {}
98
+ { depth }: { depth: number }
99
+ ) {
100
+ this._depth = depth
101
+ }
51
102
 
52
103
  canHandle(message: BybitV5OrderBookMessage) {
53
104
  if (message.topic === undefined) {
@@ -84,7 +135,7 @@ export class BybitV5BookChangeMapper implements Mapper<'bybit' | 'bybit-spot' |
84
135
  }
85
136
  }
86
137
 
87
- export class BybitV5BookTickerMapper implements Mapper<'bybit' | 'bybit-spot', BookTicker> {
138
+ class BybitV5BookTickerMapper implements Mapper<'bybit' | 'bybit-spot', BookTicker> {
88
139
  private _snapshots: {
89
140
  [key: string]: {
90
141
  askAmount: number | undefined
@@ -154,7 +205,7 @@ export class BybitV5BookTickerMapper implements Mapper<'bybit' | 'bybit-spot', B
154
205
  }
155
206
  }
156
207
 
157
- export class BybitV5DerivativeTickerMapper implements Mapper<'bybit', DerivativeTicker> {
208
+ class BybitV5DerivativeTickerMapper implements Mapper<'bybit', DerivativeTicker> {
158
209
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
159
210
 
160
211
  canHandle(message: BybitV5DerivTickerMessage) {
@@ -213,7 +264,7 @@ export class BybitV5DerivativeTickerMapper implements Mapper<'bybit', Derivative
213
264
  }
214
265
  }
215
266
 
216
- export class BybitV5LiquidationsMapper implements Mapper<'bybit', Liquidation> {
267
+ class BybitV5LiquidationsMapper implements Mapper<'bybit', Liquidation> {
217
268
  constructor(private readonly _exchange: Exchange) {}
218
269
  canHandle(message: BybitV5LiquidationMessage) {
219
270
  if (message.topic === undefined) {
@@ -254,7 +305,7 @@ export class BybitV5LiquidationsMapper implements Mapper<'bybit', Liquidation> {
254
305
  }
255
306
  }
256
307
 
257
- export class BybitV5AllLiquidationsMapper implements Mapper<'bybit', Liquidation> {
308
+ class BybitV5AllLiquidationsMapper implements Mapper<'bybit', Liquidation> {
258
309
  constructor(private readonly _exchange: Exchange) {}
259
310
  canHandle(message: BybitV5AllLiquidationMessage) {
260
311
  if (message.topic === undefined) {
@@ -294,7 +345,7 @@ export class BybitV5AllLiquidationsMapper implements Mapper<'bybit', Liquidation
294
345
  }
295
346
  }
296
347
  }
297
- export class BybitV5OptionSummaryMapper implements Mapper<'bybit-options', OptionSummary> {
348
+ class BybitV5OptionSummaryMapper implements Mapper<'bybit-options', OptionSummary> {
298
349
  canHandle(message: BybitV5OptionTickerMessage) {
299
350
  if (message.topic === undefined) {
300
351
  return false
@@ -364,7 +415,7 @@ export class BybitV5OptionSummaryMapper implements Mapper<'bybit-options', Optio
364
415
 
365
416
  // https://github.com/bybit-exchange/bybit-official-api-docs/blob/master/en/websocket.md
366
417
 
367
- export class BybitTradesMapper implements Mapper<'bybit', Trade> {
418
+ class BybitTradesMapper implements Mapper<'bybit', Trade> {
368
419
  constructor(private readonly _exchange: Exchange) {}
369
420
  canHandle(message: BybitDataMessage) {
370
421
  if (message.topic === undefined) {
@@ -409,11 +460,15 @@ export class BybitTradesMapper implements Mapper<'bybit', Trade> {
409
460
  }
410
461
  }
411
462
 
412
- export class BybitBookChangeMapper implements Mapper<'bybit', BookChange> {
463
+ class BybitBookChangeMapper implements Mapper<'bybit', BookChange> {
464
+ private readonly _canUseBook200Channel: boolean
465
+
413
466
  constructor(
414
467
  protected readonly _exchange: Exchange,
415
- private readonly _canUseBook200Channel: boolean
416
- ) {}
468
+ { useBook200Channel }: { useBook200Channel: boolean }
469
+ ) {
470
+ this._canUseBook200Channel = useBook200Channel
471
+ }
417
472
 
418
473
  canHandle(message: BybitDataMessage) {
419
474
  if (message.topic === undefined) {
@@ -480,7 +535,7 @@ export class BybitBookChangeMapper implements Mapper<'bybit', BookChange> {
480
535
  }
481
536
  }
482
537
 
483
- export class BybitDerivativeTickerMapper implements Mapper<'bybit', DerivativeTicker> {
538
+ class BybitDerivativeTickerMapper implements Mapper<'bybit', DerivativeTicker> {
484
539
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
485
540
 
486
541
  canHandle(message: BybitDataMessage) {
@@ -578,7 +633,7 @@ export class BybitDerivativeTickerMapper implements Mapper<'bybit', DerivativeTi
578
633
  }
579
634
  }
580
635
 
581
- export class BybitLiquidationsMapper implements Mapper<'bybit', Liquidation> {
636
+ class BybitLiquidationsMapper implements Mapper<'bybit', Liquidation> {
582
637
  constructor(private readonly _exchange: Exchange) {}
583
638
  canHandle(message: BybitDataMessage) {
584
639
  if (message.topic === undefined) {
@@ -1,10 +1,19 @@
1
1
  import { parseμs, upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, BookPriceLevel, BookTicker, Trade } from '../types.ts'
3
3
  import { Mapper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
4
5
 
5
6
  // https://docs.pro.coinbase.com/#websocket-feed
6
7
 
7
- export const coinbaseTradesMapper: Mapper<'coinbase', Trade> = {
8
+ export const coinbaseMappers = exchangeMappers({
9
+ coinbase: {
10
+ trades: () => coinbaseTradesMapper,
11
+ bookChanges: () => new CoinbaseBookChangMapper(),
12
+ bookTickers: () => coinbaseBookTickerMapper
13
+ }
14
+ })
15
+
16
+ const coinbaseTradesMapper: Mapper<'coinbase', Trade> = {
8
17
  canHandle(message: CoinbaseTrade | CoinbaseLevel2Snapshot | CoinbaseLevel2Update) {
9
18
  return message.type === 'match'
10
19
  },
@@ -63,7 +72,7 @@ const validAmountsOnly = (level: BookPriceLevel) => {
63
72
  return true
64
73
  }
65
74
 
66
- export class CoinbaseBookChangMapper implements Mapper<'coinbase', BookChange> {
75
+ class CoinbaseBookChangMapper implements Mapper<'coinbase', BookChange> {
67
76
  private readonly _symbolLastTimestampMap = new Map<string, Date>()
68
77
 
69
78
  canHandle(message: CoinbaseTrade | CoinbaseLevel2Snapshot | CoinbaseLevel2Update) {
@@ -138,7 +147,7 @@ export class CoinbaseBookChangMapper implements Mapper<'coinbase', BookChange> {
138
147
  }
139
148
  }
140
149
 
141
- export const coinbaseBookTickerMapper: Mapper<'coinbase', BookTicker> = {
150
+ const coinbaseBookTickerMapper: Mapper<'coinbase', BookTicker> = {
142
151
  canHandle(message: CoinbaseTicker) {
143
152
  return message.type === 'ticker'
144
153
  },
@@ -1,8 +1,18 @@
1
1
  import { addMinutes, upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, BookPriceLevel, BookTicker, DerivativeTicker, Trade } from '../types.ts'
3
3
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
5
+
6
+ export const coinbaseInternationalMappers = exchangeMappers({
7
+ 'coinbase-international': {
8
+ trades: () => coinbaseInternationalTradesMapper,
9
+ bookChanges: () => new CoinbaseInternationalBookChangMapper(),
10
+ derivativeTickers: () => new CoinbaseInternationalDerivativeTickerMapper(),
11
+ bookTickers: () => coinbaseInternationalBookTickerMapper
12
+ }
13
+ })
4
14
 
5
- export const coinbaseInternationalTradesMapper: Mapper<'coinbase-international', Trade> = {
15
+ const coinbaseInternationalTradesMapper: Mapper<'coinbase-international', Trade> = {
6
16
  canHandle(message: CoinbaseInternationalTradeMessage) {
7
17
  return message.channel === 'MATCH' && message.type === 'UPDATE'
8
18
  },
@@ -58,7 +68,7 @@ const validAmountsOnly = (level: BookPriceLevel) => {
58
68
  return true
59
69
  }
60
70
 
61
- export class CoinbaseInternationalBookChangMapper implements Mapper<'coinbase-international', BookChange> {
71
+ class CoinbaseInternationalBookChangMapper implements Mapper<'coinbase-international', BookChange> {
62
72
  canHandle(message: CoinbaseInternationalLevel2Snapshot | CoinbaseInternationalLevel2Update) {
63
73
  return message.channel === 'LEVEL2' && (message.type === 'SNAPSHOT' || message.type === 'UPDATE')
64
74
  }
@@ -116,7 +126,7 @@ export class CoinbaseInternationalBookChangMapper implements Mapper<'coinbase-in
116
126
  }
117
127
  }
118
128
 
119
- export const coinbaseInternationalBookTickerMapper: Mapper<'coinbase-international', BookTicker> = {
129
+ const coinbaseInternationalBookTickerMapper: Mapper<'coinbase-international', BookTicker> = {
120
130
  canHandle(message: CoinbaseInternationalLevel1Message) {
121
131
  return message.channel === 'LEVEL1' && (message.type === 'SNAPSHOT' || message.type === 'UPDATE')
122
132
  },
@@ -153,7 +163,7 @@ export const coinbaseInternationalBookTickerMapper: Mapper<'coinbase-internation
153
163
  }
154
164
  }
155
165
 
156
- export class CoinbaseInternationalDerivativeTickerMapper implements Mapper<'coinbase-international', DerivativeTicker> {
166
+ class CoinbaseInternationalDerivativeTickerMapper implements Mapper<'coinbase-international', DerivativeTicker> {
157
167
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
158
168
 
159
169
  canHandle(message: CoinbaseInternationalTradeMessage | CoinbaseInternationalRiskMessage | CoinbaseInternationalFundingMessage) {
@@ -1,10 +1,19 @@
1
1
  import { upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, DerivativeTicker, Trade } from '../types.ts'
3
3
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
4
5
 
5
6
  // https://docs.coinflex.com/v2/#websocket-api-subscriptions-public
6
7
 
7
- export const coinflexTradesMapper: Mapper<'coinflex', Trade> = {
8
+ export const coinflexMappers = exchangeMappers({
9
+ coinflex: {
10
+ trades: () => coinflexTradesMapper,
11
+ bookChanges: () => coinflexBookChangeMapper,
12
+ derivativeTickers: () => new CoinflexDerivativeTickerMapper()
13
+ }
14
+ })
15
+
16
+ const coinflexTradesMapper: Mapper<'coinflex', Trade> = {
8
17
  canHandle(message: CoinflexTrades) {
9
18
  return message.table === 'trade'
10
19
  },
@@ -44,7 +53,7 @@ const mapBookLevel = (level: CoinflexBookLevel) => {
44
53
  return { price, amount }
45
54
  }
46
55
 
47
- export const coinflexBookChangeMapper: Mapper<'coinflex', BookChange> = {
56
+ const coinflexBookChangeMapper: Mapper<'coinflex', BookChange> = {
48
57
  canHandle(message: CoinflexBookDepthMessage) {
49
58
  return message.table === 'futures/depth'
50
59
  },
@@ -76,7 +85,7 @@ export const coinflexBookChangeMapper: Mapper<'coinflex', BookChange> = {
76
85
  }
77
86
  }
78
87
 
79
- export class CoinflexDerivativeTickerMapper implements Mapper<'coinflex', DerivativeTicker> {
88
+ class CoinflexDerivativeTickerMapper implements Mapper<'coinflex', DerivativeTicker> {
80
89
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
81
90
 
82
91
  canHandle(message: CoinflexTickerMessage) {
@@ -1,8 +1,18 @@
1
1
  import { upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, Exchange, BookTicker, Trade, DerivativeTicker } from '../types.ts'
3
3
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
5
+
6
+ export const cryptoComMappers = exchangeMappers({
7
+ 'crypto-com': {
8
+ trades: () => new CryptoComTradesMapper('crypto-com'),
9
+ bookChanges: () => new CryptoComBookChangeMapper('crypto-com'),
10
+ derivativeTickers: () => new CryptoComDerivativeTickerMapper('crypto-com'),
11
+ bookTickers: () => new CryptoComBookTickerMapper('crypto-com')
12
+ }
13
+ })
4
14
 
5
- export class CryptoComTradesMapper implements Mapper<'crypto-com', Trade> {
15
+ class CryptoComTradesMapper implements Mapper<'crypto-com', Trade> {
6
16
  constructor(private readonly _exchange: Exchange) {}
7
17
  canHandle(message: CryptoComTradeMessage) {
8
18
  return message.result !== undefined && message.result.channel === 'trade'
@@ -40,7 +50,7 @@ export class CryptoComTradesMapper implements Mapper<'crypto-com', Trade> {
40
50
  }
41
51
  }
42
52
 
43
- export class CryptoComBookChangeMapper implements Mapper<'crypto-com', BookChange> {
53
+ class CryptoComBookChangeMapper implements Mapper<'crypto-com', BookChange> {
44
54
  constructor(protected readonly _exchange: Exchange) {}
45
55
 
46
56
  canHandle(message: CryptoComBookMessage) {
@@ -82,7 +92,7 @@ export class CryptoComBookChangeMapper implements Mapper<'crypto-com', BookChang
82
92
  }
83
93
  }
84
94
 
85
- export class CryptoComBookTickerMapper implements Mapper<'crypto-com', BookTicker> {
95
+ class CryptoComBookTickerMapper implements Mapper<'crypto-com', BookTicker> {
86
96
  constructor(protected readonly _exchange: Exchange) {}
87
97
 
88
98
  canHandle(message: CryptoComTickerMessage) {
@@ -119,7 +129,7 @@ export class CryptoComBookTickerMapper implements Mapper<'crypto-com', BookTicke
119
129
  }
120
130
  }
121
131
 
122
- export class CryptoComDerivativeTickerMapper implements Mapper<'crypto-com', DerivativeTicker> {
132
+ class CryptoComDerivativeTickerMapper implements Mapper<'crypto-com', DerivativeTicker> {
123
133
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
124
134
  private readonly _indexPrices = new Map<string, number>()
125
135
 
@@ -1,10 +1,29 @@
1
1
  import { upperCaseSymbols } from '../handy.ts'
2
2
  import { BookChange, BookTicker, DerivativeTicker, Liquidation, Trade } from '../types.ts'
3
3
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
4
+ import { exchangeMappers, mapper } from './registry.ts'
4
5
 
5
6
  // https://www.cryptofacilities.com/resources/hc/en-us/categories/115000132213-API
6
7
 
7
- export const cryptofacilitiesTradesMapper: Mapper<'cryptofacilities', Trade> = {
8
+ const CRYPTOFACILITIES_RELATIVE_FUNDING_SWITCH_DATE = new Date('2022-09-29T00:00:00.000Z')
9
+
10
+ export const cryptofacilitiesMappers = exchangeMappers({
11
+ cryptofacilities: {
12
+ trades: () => cryptofacilitiesTradesMapper,
13
+ bookChanges: () => cryptofacilitiesBookChangeMapper,
14
+ derivativeTickers: mapper([
15
+ {
16
+ until: CRYPTOFACILITIES_RELATIVE_FUNDING_SWITCH_DATE,
17
+ use: () => new CryptofacilitiesDerivativeTickerMapper({ useRelativeFundingRate: false })
18
+ },
19
+ { use: () => new CryptofacilitiesDerivativeTickerMapper({ useRelativeFundingRate: true }) }
20
+ ]),
21
+ liquidations: () => cryptofacilitiesLiquidationsMapper,
22
+ bookTickers: () => cryptofacilitiesBookTickerMapper
23
+ }
24
+ })
25
+
26
+ const cryptofacilitiesTradesMapper: Mapper<'cryptofacilities', Trade> = {
8
27
  canHandle(message: CryptofacilitiesTrade | CryptofacilitiesTicker | CryptofacilitiesBookSnapshot | CryptofacilitiesBookUpdate) {
9
28
  return message.feed === 'trade' && message.event === undefined
10
29
  },
@@ -39,7 +58,7 @@ const mapBookLevel = ({ price, qty }: CryptofacilitiesBookLevel) => {
39
58
  return { price, amount: qty < 0 ? 0 : qty }
40
59
  }
41
60
 
42
- export const cryptofacilitiesBookChangeMapper: Mapper<'cryptofacilities', BookChange> = {
61
+ const cryptofacilitiesBookChangeMapper: Mapper<'cryptofacilities', BookChange> = {
43
62
  canHandle(message: CryptofacilitiesTrade | CryptofacilitiesTicker | CryptofacilitiesBookSnapshot | CryptofacilitiesBookUpdate) {
44
63
  return message.event === undefined && (message.feed === 'book' || message.feed === 'book_snapshot')
45
64
  },
@@ -94,8 +113,13 @@ export const cryptofacilitiesBookChangeMapper: Mapper<'cryptofacilities', BookCh
94
113
  }
95
114
  }
96
115
 
97
- export class CryptofacilitiesDerivativeTickerMapper implements Mapper<'cryptofacilities', DerivativeTicker> {
98
- constructor(private readonly _useRelativeFundingRate: boolean) {}
116
+ class CryptofacilitiesDerivativeTickerMapper implements Mapper<'cryptofacilities', DerivativeTicker> {
117
+ private readonly _useRelativeFundingRate: boolean
118
+
119
+ constructor({ useRelativeFundingRate }: { useRelativeFundingRate: boolean }) {
120
+ this._useRelativeFundingRate = useRelativeFundingRate
121
+ }
122
+
99
123
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
100
124
  canHandle(message: CryptofacilitiesTrade | CryptofacilitiesTicker | CryptofacilitiesBookSnapshot | CryptofacilitiesBookUpdate) {
101
125
  return message.feed === 'ticker' && message.event === undefined
@@ -141,7 +165,7 @@ export class CryptofacilitiesDerivativeTickerMapper implements Mapper<'cryptofac
141
165
  }
142
166
  }
143
167
 
144
- export const cryptofacilitiesLiquidationsMapper: Mapper<'cryptofacilities', Liquidation> = {
168
+ const cryptofacilitiesLiquidationsMapper: Mapper<'cryptofacilities', Liquidation> = {
145
169
  canHandle(message: CryptofacilitiesTrade | CryptofacilitiesTicker | CryptofacilitiesBookSnapshot | CryptofacilitiesBookUpdate) {
146
170
  return message.feed === 'trade' && message.event === undefined && message.type === 'liquidation'
147
171
  },
@@ -172,7 +196,7 @@ export const cryptofacilitiesLiquidationsMapper: Mapper<'cryptofacilities', Liqu
172
196
  }
173
197
  }
174
198
 
175
- export const cryptofacilitiesBookTickerMapper: Mapper<'cryptofacilities', BookTicker> = {
199
+ const cryptofacilitiesBookTickerMapper: Mapper<'cryptofacilities', BookTicker> = {
176
200
  canHandle(message: CryptofacilitiesTicker) {
177
201
  return message.feed === 'ticker' && message.event === undefined
178
202
  },
@@ -1,9 +1,35 @@
1
1
  import { fromMicroSecondsToDate, 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, mapper } from './registry.ts'
5
+
6
+ const DELTA_V2_API_SWITCH_DATE = new Date('2020-10-14T00:00:00.000Z')
7
+ const DELTA_BOOK_CHANGE_SWITCH_DATE = new Date('2023-04-01T00:00:00.000Z')
8
+
9
+ export const deltaMappers = exchangeMappers({
10
+ delta: {
11
+ trades: mapper([
12
+ { until: DELTA_V2_API_SWITCH_DATE, use: () => new DeltaTradesMapper({ useV2Channels: false }) },
13
+ { use: () => new DeltaTradesMapper({ useV2Channels: true }) }
14
+ ]),
15
+ bookChanges: mapper([
16
+ { until: DELTA_BOOK_CHANGE_SWITCH_DATE, use: () => new DeltaBookChangeMapper({ useL2UpdatesChannel: false }) },
17
+ { use: () => new DeltaBookChangeMapper({ useL2UpdatesChannel: true }) }
18
+ ]),
19
+ derivativeTickers: mapper([
20
+ { until: DELTA_V2_API_SWITCH_DATE, use: () => new DeltaDerivativeTickerMapper({ useV2Channels: false }) },
21
+ { use: () => new DeltaDerivativeTickerMapper({ useV2Channels: true }) }
22
+ ]),
23
+ bookTickers: () => new DeltaBookTickerMapper()
24
+ }
25
+ })
26
+
27
+ class DeltaTradesMapper implements Mapper<'delta', Trade> {
28
+ private readonly _useV2Channels: boolean
4
29
 
5
- export class DeltaTradesMapper implements Mapper<'delta', Trade> {
6
- constructor(private _useV2Channels: boolean) {}
30
+ constructor({ useV2Channels }: { useV2Channels: boolean }) {
31
+ this._useV2Channels = useV2Channels
32
+ }
7
33
 
8
34
  canHandle(message: DeltaTrade) {
9
35
  return message.type === (this._useV2Channels ? 'all_trades' : 'recent_trade')
@@ -49,8 +75,12 @@ const mapL2Level = (level: DeltaL2Level) => {
49
75
  }
50
76
  }
51
77
 
52
- export class DeltaBookChangeMapper implements Mapper<'delta', BookChange> {
53
- constructor(private readonly _useL2UpdatesChannel: boolean) {}
78
+ class DeltaBookChangeMapper implements Mapper<'delta', BookChange> {
79
+ private readonly _useL2UpdatesChannel: boolean
80
+
81
+ constructor({ useL2UpdatesChannel }: { useL2UpdatesChannel: boolean }) {
82
+ this._useL2UpdatesChannel = useL2UpdatesChannel
83
+ }
54
84
 
55
85
  canHandle(message: DeltaL2OrderBook | DeltaL2UpdateMessage) {
56
86
  if (this._useL2UpdatesChannel) {
@@ -109,8 +139,12 @@ export class DeltaBookChangeMapper implements Mapper<'delta', BookChange> {
109
139
  }
110
140
  }
111
141
 
112
- export class DeltaDerivativeTickerMapper implements Mapper<'delta', DerivativeTicker> {
113
- constructor(private _useV2Channels: boolean) {}
142
+ class DeltaDerivativeTickerMapper implements Mapper<'delta', DerivativeTicker> {
143
+ private readonly _useV2Channels: boolean
144
+
145
+ constructor({ useV2Channels }: { useV2Channels: boolean }) {
146
+ this._useV2Channels = useV2Channels
147
+ }
114
148
 
115
149
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
116
150
 
@@ -173,7 +207,7 @@ export class DeltaDerivativeTickerMapper implements Mapper<'delta', DerivativeTi
173
207
  }
174
208
  }
175
209
 
176
- export class DeltaBookTickerMapper implements Mapper<'delta', BookTicker> {
210
+ class DeltaBookTickerMapper implements Mapper<'delta', BookTicker> {
177
211
  canHandle(message: DeltaL1Message) {
178
212
  return message.type === 'l1_orderbook'
179
213
  }
@@ -1,9 +1,21 @@
1
1
  import { asNonZeroNumberOrUndefined } from '../handy.ts'
2
2
  import { BookChange, BookTicker, DerivativeTicker, Liquidation, OptionSummary, Trade } from '../types.ts'
3
3
  import { Mapper, PendingTickerInfoHelper } from './mapper.ts'
4
+ import { exchangeMappers } from './registry.ts'
4
5
 
5
6
  // https://docs.deribit.com/v2/#subscriptions
6
7
 
8
+ export const deribitMappers = exchangeMappers({
9
+ deribit: {
10
+ trades: () => deribitTradesMapper,
11
+ bookChanges: () => deribitBookChangeMapper,
12
+ derivativeTickers: () => new DeribitDerivativeTickerMapper(),
13
+ optionsSummary: () => new DeribitOptionSummaryMapper(),
14
+ liquidations: () => deribitLiquidationsMapper,
15
+ bookTickers: () => deribitBookTickerMapper
16
+ }
17
+ })
18
+
7
19
  function deribitCasing(symbols?: string[]) {
8
20
  if (symbols !== undefined) {
9
21
  return symbols.map((symbol) => {
@@ -24,7 +36,7 @@ function deribitCasing(symbols?: string[]) {
24
36
  return
25
37
  }
26
38
 
27
- export const deribitTradesMapper: Mapper<'deribit', Trade> = {
39
+ const deribitTradesMapper: Mapper<'deribit', Trade> = {
28
40
  canHandle(message: any) {
29
41
  const channel = message.params !== undefined ? (message.params.channel as string | undefined) : undefined
30
42
  if (channel === undefined) {
@@ -69,7 +81,7 @@ const mapBookLevel = (level: DeribitBookLevel) => {
69
81
  return { price, amount }
70
82
  }
71
83
 
72
- export const deribitBookChangeMapper: Mapper<'deribit', BookChange> = {
84
+ const deribitBookChangeMapper: Mapper<'deribit', BookChange> = {
73
85
  canHandle(message: any) {
74
86
  const channel = message.params && (message.params.channel as string | undefined)
75
87
  if (channel === undefined) {
@@ -111,7 +123,7 @@ export const deribitBookChangeMapper: Mapper<'deribit', BookChange> = {
111
123
  }
112
124
  }
113
125
 
114
- export class DeribitDerivativeTickerMapper implements Mapper<'deribit', DerivativeTicker> {
126
+ class DeribitDerivativeTickerMapper implements Mapper<'deribit', DerivativeTicker> {
115
127
  private readonly pendingTickerInfoHelper = new PendingTickerInfoHelper()
116
128
 
117
129
  canHandle(message: any) {
@@ -151,7 +163,7 @@ export class DeribitDerivativeTickerMapper implements Mapper<'deribit', Derivati
151
163
  }
152
164
  }
153
165
 
154
- export class DeribitOptionSummaryMapper implements Mapper<'deribit', OptionSummary> {
166
+ class DeribitOptionSummaryMapper implements Mapper<'deribit', OptionSummary> {
155
167
  getFilters(symbols?: string[]) {
156
168
  symbols = deribitCasing(symbols)
157
169
 
@@ -231,7 +243,7 @@ export class DeribitOptionSummaryMapper implements Mapper<'deribit', OptionSumma
231
243
  }
232
244
  }
233
245
 
234
- export const deribitLiquidationsMapper: Mapper<'deribit', Liquidation> = {
246
+ const deribitLiquidationsMapper: Mapper<'deribit', Liquidation> = {
235
247
  canHandle(message: any) {
236
248
  const channel = message.params !== undefined ? (message.params.channel as string | undefined) : undefined
237
249
  if (channel === undefined) {
@@ -279,7 +291,7 @@ export const deribitLiquidationsMapper: Mapper<'deribit', Liquidation> = {
279
291
  }
280
292
  }
281
293
 
282
- export const deribitBookTickerMapper: Mapper<'deribit', BookTicker> = {
294
+ const deribitBookTickerMapper: Mapper<'deribit', BookTicker> = {
283
295
  canHandle(message: any) {
284
296
  const channel = message.params !== undefined ? (message.params.channel as string | undefined) : undefined
285
297
  if (channel === undefined) {
@@ -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) {