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 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/realtimefeeds/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,EAC5B,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAC3G,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,6BAA6B,EAC7B,0BAA0B,EAC3B,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAEzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,kCAAkC,EAAE,MAAM,6BAA6B,CAAA;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC3E,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAExD,cAAc,mBAAmB,CAAA;AAEjC,MAAM,gBAAgB,GAElB;IACF,MAAM,EAAE,kBAAkB;IAC1B,OAAO,EAAE,mBAAmB;IAC5B,gBAAgB,EAAE,yBAAyB;IAC3C,YAAY,EAAE,qBAAqB;IACnC,aAAa,EAAE,sBAAsB;IACrC,iBAAiB,EAAE,0BAA0B;IAC7C,kBAAkB,EAAE,2BAA2B;IAC/C,QAAQ,EAAE,oBAAoB;IAC9B,sBAAsB,EAAE,oBAAoB;IAC5C,QAAQ,EAAE,oBAAoB;IAC9B,QAAQ,EAAE,oBAAoB;IAC9B,QAAQ,EAAE,oBAAoB;IAC9B,gBAAgB,EAAE,4BAA4B;IAC9C,OAAO,EAAE,uBAAuB;IAChC,GAAG,EAAE,eAAe;IACpB,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE,kBAAkB;IAC1B,MAAM,EAAE,kBAAkB;IAC1B,IAAI,EAAE,gBAAgB;IACtB,cAAc,EAAE,gBAAgB;IAChC,WAAW,EAAE,gBAAgB;IAC7B,cAAc,EAAE,uBAAuB;IACvC,UAAU,EAAE,mBAAmB;IAC/B,eAAe,EAAE,uBAAuB;IACxC,sBAAsB,EAAE,6BAA6B;IACrD,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,qBAAqB;IAC5B,MAAM,EAAE,kBAAkB;IAC1B,MAAM,EAAE,kBAAkB;IAC1B,MAAM,EAAE,kBAAkB;IAC1B,KAAK,EAAE,iBAAiB;IACxB,SAAS,EAAE,kBAAkB;IAC7B,iBAAiB,EAAE,yBAAyB;IAC5C,QAAQ,EAAE,oBAAoB;IAC9B,QAAQ,EAAE,oBAAoB;IAC9B,KAAK,EAAE,iBAAiB;IACxB,QAAQ,EAAE,oBAAoB;IAC9B,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE,iBAAiB;IACxB,YAAY,EAAE,qBAAqB;IACnC,kBAAkB,EAAE,0BAA0B;IAC9C,KAAK,EAAE,iBAAiB;IACxB,YAAY,EAAE,yBAAyB;IACvC,eAAe,EAAE,4BAA4B;IAC7C,YAAY,EAAE,qBAAqB;IACnC,MAAM,EAAE,kBAAkB;IAC1B,SAAS,EAAE,qBAAqB;IAChC,OAAO,EAAE,gBAAgB;IACzB,gBAAgB,EAAE,yBAAyB;IAC3C,0BAA0B,EAAE,kCAAkC;IAC9D,cAAc,EAAE,uBAAuB;IACvC,gBAAgB,EAAE,yBAAyB;IAC3C,SAAS,EAAE,kBAAkB;IAC7B,MAAM,EAAE,kBAAkB;IAC1B,gBAAgB,EAAE,yBAAyB;IAC3C,wBAAwB,EAAE,iCAAiC;IAC3D,WAAW,EAAE,uBAAuB;IACpC,OAAO,EAAE,mBAAmB;IAC5B,OAAO,EAAE,mBAAmB;IAC5B,UAAU,EAAE,sBAAsB;CACnC,CAAA;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAkB;IACvD,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,OAAO,gBAAgB,CAAC,QAAQ,CAAE,CAAA;IACpC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAA;AACvD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,QAAkB,EAClB,OAAyB,EACzB,iBAAqC,EACrC,OAAgC;IAEhC,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAA;IAE5D,OAAO,IAAI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAA;AAC/E,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAkB,EAAE,YAA0B;IACnF,gBAAgB,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAA;AAC3C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/realtimefeeds/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { Filter } from '../types.ts';
2
+ import { RealTimeFeedBase } from './realtimefeed.ts';
3
+ export declare class MexcRealTimeFeed extends RealTimeFeedBase {
4
+ private static readonly depthChannel;
5
+ private static readonly depthSnapshotChannel;
6
+ private static readonly jsonObjectStart;
7
+ private static pushDataV3ApiWrapper;
8
+ /**
9
+ * MEXC protobuf docs at @see https://www.mexc.com/api-docs/spot-v3/websocket-market-streams/protocol-buffers-integration
10
+ * and schemas from @see https://github.com/mexcdevelop/websocket-proto, mirrored in tardis-recorder/datafeeds/src/mexc/proto.
11
+ */
12
+ private static readonly pushDataV3ApiWrapperSchema;
13
+ private readonly pendingDepthSnapshotSymbols;
14
+ private readonly bufferedDepthUpdates;
15
+ protected readonly wssURL = "wss://wbs-api.mexc.com/ws";
16
+ protected readonly httpURL: string;
17
+ private readonly channels;
18
+ protected mapToSubscribeMessages(filters: Filter<string>[]): any[];
19
+ protected parseMessage(message: Buffer<ArrayBufferLike>): any;
20
+ protected messageIsError(message: any): boolean;
21
+ protected messageIsHeartbeat(message: any): boolean;
22
+ protected onMessage(message: any): void;
23
+ protected provideManualSnapshots(filters: Filter<string>[], shouldCancel: () => boolean): Promise<void>;
24
+ protected sendCustomPing: () => void;
25
+ private getPushDataV3ApiWrapper;
26
+ private resetDepthSnapshotTracking;
27
+ private validateDepthSnapshotFilters;
28
+ private provideManualSnapshot;
29
+ private waitForSnapshotOverlap;
30
+ private validateSnapshotOverlap;
31
+ private trimBufferedUpdates;
32
+ private snapshotResponseIsValid;
33
+ private createManualSnapshot;
34
+ }
35
+ //# sourceMappingURL=mexc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mexc.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/mexc.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,qBAAa,gBAAiB,SAAQ,gBAAgB;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAA2C;IAC/E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAAoD;IAChG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAoB;IAC3D,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAA2B;IAC9D;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAoDjD;IAED,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAoB;IAChE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAyD;IAC9F,SAAS,CAAC,QAAQ,CAAC,MAAM,+BAA8B;IACvD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAyB;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAKvB;cAEiB,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE;cA6BxD,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,eAAe,CAAC,GAAG,GAAG;cAcnD,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO;cAIrC,kBAAkB,CAAC,OAAO,EAAE,GAAG;cAI/B,SAAS,CAAC,OAAO,EAAE,GAAG;cAoBhB,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,OAAO;IAetG,SAAS,CAAC,cAAc,aAEvB;IAED,OAAO,CAAC,uBAAuB;IAQ/B,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,4BAA4B;YAsBtB,qBAAqB;YA4CrB,sBAAsB;IAcpC,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,uBAAuB;IAI/B,OAAO,CAAC,oBAAoB;CAa7B"}
@@ -0,0 +1,261 @@
1
+ import protobuf from 'protobufjs';
2
+ import { CircularBuffer, getJSON, wait } from "../handy.js";
3
+ import { RealTimeFeedBase } from "./realtimefeed.js";
4
+ export class MexcRealTimeFeed extends RealTimeFeedBase {
5
+ static depthChannel = 'spot@public.aggre.depth.v3.api.pb@10ms';
6
+ static depthSnapshotChannel = 'spot@public.aggre.depth.snapshot.v3.api.pb@10ms';
7
+ static jsonObjectStart = '{'.charCodeAt(0);
8
+ static pushDataV3ApiWrapper;
9
+ /**
10
+ * MEXC protobuf docs at @see https://www.mexc.com/api-docs/spot-v3/websocket-market-streams/protocol-buffers-integration
11
+ * and schemas from @see https://github.com/mexcdevelop/websocket-proto, mirrored in tardis-recorder/datafeeds/src/mexc/proto.
12
+ */
13
+ static pushDataV3ApiWrapperSchema = `
14
+ syntax = "proto3";
15
+
16
+ message PushDataV3ApiWrapper {
17
+ string channel = 1;
18
+ oneof body {
19
+ PublicAggreDepthsV3Api publicAggreDepths = 313;
20
+ PublicAggreDealsV3Api publicAggreDeals = 314;
21
+ PublicAggreBookTickerV3Api publicAggreBookTicker = 315;
22
+ }
23
+
24
+ optional string symbol = 3;
25
+ optional string symbolId = 4;
26
+ optional int64 createTime = 5;
27
+ optional int64 sendTime = 6;
28
+ }
29
+
30
+ message PublicAggreDealsV3Api {
31
+ repeated PublicAggreDealsV3ApiItem deals = 1;
32
+ string eventType = 2;
33
+ }
34
+
35
+ message PublicAggreDealsV3ApiItem {
36
+ string price = 1;
37
+ string quantity = 2;
38
+ int32 tradeType = 3;
39
+ int64 time = 4;
40
+ string tradeId = 5;
41
+ }
42
+
43
+ message PublicAggreDepthsV3Api {
44
+ repeated PublicAggreDepthV3ApiItem asks = 1;
45
+ repeated PublicAggreDepthV3ApiItem bids = 2;
46
+ string eventType = 3;
47
+ string fromVersion = 4;
48
+ string toVersion = 5;
49
+ int64 lastOrderCreateTime = 6;
50
+ }
51
+
52
+ message PublicAggreDepthV3ApiItem {
53
+ string price = 1;
54
+ string quantity = 2;
55
+ }
56
+
57
+ message PublicAggreBookTickerV3Api {
58
+ string bidPrice = 1;
59
+ string bidQuantity = 2;
60
+ string askPrice = 3;
61
+ string askQuantity = 4;
62
+ string version = 5;
63
+ int64 lastOrderCreateTime = 6;
64
+ }
65
+ `;
66
+ pendingDepthSnapshotSymbols = new Set();
67
+ bufferedDepthUpdates = new Map();
68
+ wssURL = 'wss://wbs-api.mexc.com/ws';
69
+ httpURL = 'https://api.mexc.com';
70
+ channels = new Set([
71
+ 'spot@public.aggre.deals.v3.api.pb@10ms',
72
+ MexcRealTimeFeed.depthChannel,
73
+ MexcRealTimeFeed.depthSnapshotChannel,
74
+ 'spot@public.aggre.bookTicker.v3.api.pb@10ms'
75
+ ]);
76
+ mapToSubscribeMessages(filters) {
77
+ const filtersWithSymbols = filters.map((filter) => {
78
+ if (!this.channels.has(filter.channel)) {
79
+ throw new Error(`MexcRealTimeFeed unsupported channel ${filter.channel}`);
80
+ }
81
+ if (!filter.symbols || filter.symbols.length === 0) {
82
+ throw new Error('MexcRealTimeFeed requires explicitly specified symbols when subscribing to live feed');
83
+ }
84
+ return filter;
85
+ });
86
+ const depthSnapshotFilters = filtersWithSymbols.filter((filter) => filter.channel === MexcRealTimeFeed.depthSnapshotChannel);
87
+ this.validateDepthSnapshotFilters(filtersWithSymbols, depthSnapshotFilters);
88
+ this.resetDepthSnapshotTracking(depthSnapshotFilters);
89
+ return [
90
+ {
91
+ method: 'SUBSCRIPTION',
92
+ params: filtersWithSymbols.flatMap((filter) => filter.channel === MexcRealTimeFeed.depthSnapshotChannel
93
+ ? []
94
+ : filter.symbols.map((symbol) => `${filter.channel}@${symbol.toUpperCase()}`))
95
+ }
96
+ ];
97
+ }
98
+ parseMessage(message) {
99
+ const buffer = Buffer.isBuffer(message) ? message : Buffer.from(message);
100
+ if (buffer.length > 0 && buffer[0] === MexcRealTimeFeed.jsonObjectStart) {
101
+ return JSON.parse(buffer.toString());
102
+ }
103
+ const pushDataV3ApiWrapper = this.getPushDataV3ApiWrapper();
104
+ return pushDataV3ApiWrapper.toObject(pushDataV3ApiWrapper.decode(buffer), {
105
+ longs: String,
106
+ arrays: true
107
+ });
108
+ }
109
+ messageIsError(message) {
110
+ return message.code !== undefined && message.code !== 0;
111
+ }
112
+ messageIsHeartbeat(message) {
113
+ return message.msg === 'PONG';
114
+ }
115
+ onMessage(message) {
116
+ if (message.channel?.startsWith(MexcRealTimeFeed.depthChannel) !== true ||
117
+ message.symbol === undefined ||
118
+ this.pendingDepthSnapshotSymbols.has(message.symbol) === false) {
119
+ return;
120
+ }
121
+ const firstVersion = Number(message.publicAggreDepths?.fromVersion);
122
+ const lastVersion = Number(message.publicAggreDepths?.toVersion);
123
+ if (Number.isFinite(firstVersion) === false || Number.isFinite(lastVersion) === false) {
124
+ return;
125
+ }
126
+ const bufferedUpdates = this.bufferedDepthUpdates.get(message.symbol) ?? new CircularBuffer(2000);
127
+ bufferedUpdates.append({ firstVersion, lastVersion });
128
+ this.bufferedDepthUpdates.set(message.symbol, bufferedUpdates);
129
+ }
130
+ async provideManualSnapshots(filters, shouldCancel) {
131
+ const depthFilter = filters.find((filter) => filter.channel === MexcRealTimeFeed.depthSnapshotChannel);
132
+ if (depthFilter === undefined) {
133
+ return;
134
+ }
135
+ this.debug('requesting manual snapshots for: %s', depthFilter.symbols);
136
+ for (const symbol of depthFilter.symbols) {
137
+ await this.provideManualSnapshot(symbol.toUpperCase(), shouldCancel);
138
+ }
139
+ this.debug('requested manual snapshots successfully for: %s ', depthFilter.symbols);
140
+ }
141
+ sendCustomPing = () => {
142
+ this.send({ method: 'PING' });
143
+ };
144
+ getPushDataV3ApiWrapper() {
145
+ MexcRealTimeFeed.pushDataV3ApiWrapper ??= protobuf
146
+ .parse(MexcRealTimeFeed.pushDataV3ApiWrapperSchema)
147
+ .root.lookupType('PushDataV3ApiWrapper');
148
+ return MexcRealTimeFeed.pushDataV3ApiWrapper;
149
+ }
150
+ resetDepthSnapshotTracking(filters) {
151
+ this.pendingDepthSnapshotSymbols.clear();
152
+ this.bufferedDepthUpdates.clear();
153
+ for (const filter of filters) {
154
+ for (const symbol of filter.symbols) {
155
+ const upperCaseSymbol = symbol.toUpperCase();
156
+ this.pendingDepthSnapshotSymbols.add(upperCaseSymbol);
157
+ this.bufferedDepthUpdates.set(upperCaseSymbol, new CircularBuffer(2000));
158
+ }
159
+ }
160
+ }
161
+ validateDepthSnapshotFilters(filters, depthSnapshotFilters) {
162
+ if (depthSnapshotFilters.length === 0) {
163
+ return;
164
+ }
165
+ const depthSymbols = new Set(filters
166
+ .filter((filter) => filter.channel === MexcRealTimeFeed.depthChannel)
167
+ .flatMap((filter) => filter.symbols.map((symbol) => symbol.toUpperCase())));
168
+ for (const filter of depthSnapshotFilters) {
169
+ for (const symbol of filter.symbols) {
170
+ if (depthSymbols.has(symbol.toUpperCase()) === false) {
171
+ throw new Error(`MexcRealTimeFeed requires ${MexcRealTimeFeed.depthChannel} for every ${MexcRealTimeFeed.depthSnapshotChannel} symbol`);
172
+ }
173
+ }
174
+ }
175
+ }
176
+ async provideManualSnapshot(symbol, shouldCancel) {
177
+ const maxSnapshotRounds = 4;
178
+ const maxSnapshotAttemptsPerRound = 3;
179
+ for (let round = 0; round < maxSnapshotRounds; round++) {
180
+ for (let attempt = 1; attempt <= maxSnapshotAttemptsPerRound; attempt++) {
181
+ if (shouldCancel()) {
182
+ return;
183
+ }
184
+ const { data } = await getJSON(`${this.httpURL}/api/v3/depth?symbol=${symbol}&limit=5000`);
185
+ if (this.snapshotResponseIsValid(data) === false) {
186
+ if (attempt < maxSnapshotAttemptsPerRound) {
187
+ await wait(attempt * 1000);
188
+ }
189
+ continue;
190
+ }
191
+ const hasOverlap = await this.waitForSnapshotOverlap(symbol, data.lastUpdateId);
192
+ if (shouldCancel()) {
193
+ return;
194
+ }
195
+ if (hasOverlap === false) {
196
+ this.trimBufferedUpdates(symbol);
197
+ if (attempt < maxSnapshotAttemptsPerRound) {
198
+ await wait(attempt * 1000);
199
+ }
200
+ continue;
201
+ }
202
+ if (hasOverlap === true || attempt === maxSnapshotAttemptsPerRound) {
203
+ this.manualSnapshotsBuffer.push(this.createManualSnapshot(symbol, data));
204
+ this.pendingDepthSnapshotSymbols.delete(symbol);
205
+ this.bufferedDepthUpdates.delete(symbol);
206
+ return;
207
+ }
208
+ }
209
+ }
210
+ throw new Error(`MexcRealTimeFeed could not align depth snapshot for ${symbol}`);
211
+ }
212
+ async waitForSnapshotOverlap(symbol, lastUpdateId) {
213
+ let hasOverlap = this.validateSnapshotOverlap(symbol, lastUpdateId);
214
+ for (let attempt = 0; attempt < 60; attempt++) {
215
+ if (hasOverlap !== undefined) {
216
+ return hasOverlap;
217
+ }
218
+ await wait(100);
219
+ hasOverlap = this.validateSnapshotOverlap(symbol, lastUpdateId);
220
+ }
221
+ return hasOverlap;
222
+ }
223
+ validateSnapshotOverlap(symbol, lastUpdateId) {
224
+ const bufferedUpdates = this.bufferedDepthUpdates.get(symbol);
225
+ for (const update of bufferedUpdates?.items() ?? []) {
226
+ if (update.lastVersion <= lastUpdateId) {
227
+ continue;
228
+ }
229
+ return update.firstVersion <= lastUpdateId + 1 && update.lastVersion >= lastUpdateId + 1;
230
+ }
231
+ return undefined;
232
+ }
233
+ trimBufferedUpdates(symbol) {
234
+ const bufferedUpdates = this.bufferedDepthUpdates.get(symbol);
235
+ if (bufferedUpdates === undefined || bufferedUpdates.count <= 100) {
236
+ return;
237
+ }
238
+ const trimmed = new CircularBuffer(2000);
239
+ for (const update of [...bufferedUpdates.items()].slice(-100)) {
240
+ trimmed.append(update);
241
+ }
242
+ this.bufferedDepthUpdates.set(symbol, trimmed);
243
+ }
244
+ snapshotResponseIsValid(data) {
245
+ return Number.isFinite(data.lastUpdateId) && Array.isArray(data.asks) && Array.isArray(data.bids);
246
+ }
247
+ createManualSnapshot(symbol, data) {
248
+ return {
249
+ channel: `${MexcRealTimeFeed.depthSnapshotChannel}@${symbol}`,
250
+ symbol,
251
+ generated: true,
252
+ publicAggreDepthsSnapshot: {
253
+ lastUpdateId: data.lastUpdateId,
254
+ asks: data.asks,
255
+ bids: data.bids,
256
+ timestamp: data.timestamp
257
+ }
258
+ };
259
+ }
260
+ }
261
+ //# sourceMappingURL=mexc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mexc.js","sourceRoot":"","sources":["../../src/realtimefeeds/mexc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { Filter } from '../types.ts';
2
+ import { RealTimeFeedBase } from './realtimefeed.ts';
3
+ export declare class MexcFuturesRealTimeFeed extends RealTimeFeedBase {
4
+ private readonly pendingDepthSnapshotSymbols;
5
+ private readonly bufferedDepthUpdates;
6
+ protected readonly wssURL = "wss://contract.mexc.com";
7
+ protected readonly httpURL: string;
8
+ protected readonly channelToSubscriptionMethod: Map<string, string>;
9
+ protected sendCustomPing: () => void;
10
+ protected getWebSocketUrl(): Promise<string>;
11
+ protected mapToSubscribeMessages(filters: Filter<string>[]): any[];
12
+ private resetDepthSnapshotTracking;
13
+ private validateDepthSnapshotFilters;
14
+ protected onMessage(message: any): void;
15
+ protected provideManualSnapshots(filters: Filter<string>[], shouldCancel: () => boolean): Promise<void>;
16
+ protected messageIsError(message: any): boolean;
17
+ protected messageIsHeartbeat(message: any): boolean;
18
+ private provideManualSnapshot;
19
+ private waitForSnapshotOverlap;
20
+ private validateSnapshotOverlap;
21
+ private trimBufferedUpdates;
22
+ private snapshotResponseIsValid;
23
+ private createManualSnapshot;
24
+ }
25
+ //# sourceMappingURL=mexcfutures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mexcfutures.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/mexcfutures.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,qBAAa,uBAAwB,SAAQ,gBAAgB;IAC3D,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAoB;IAChE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAgE;IACrG,SAAS,CAAC,QAAQ,CAAC,MAAM,6BAA4B;IACrD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAA8B;IAChE,SAAS,CAAC,QAAQ,CAAC,2BAA2B,sBAQ5C;IAEF,UAAmB,cAAc,aAEhC;cAEwB,eAAe;cAIrB,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE;IAsC3E,OAAO,CAAC,0BAA0B;IAalC,OAAO,CAAC,4BAA4B;cAkBjB,SAAS,CAAC,OAAO,EAAE,GAAG;cA0BhB,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,OAAO;cAenF,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO;cAIrC,kBAAkB,CAAC,OAAO,EAAE,GAAG;YAIpC,qBAAqB;YA4CrB,sBAAsB;IAcpC,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,oBAAoB;CAc7B"}
@@ -0,0 +1,203 @@
1
+ import { CircularBuffer, getJSON, wait } from "../handy.js";
2
+ import { RealTimeFeedBase } from "./realtimefeed.js";
3
+ export class MexcFuturesRealTimeFeed extends RealTimeFeedBase {
4
+ pendingDepthSnapshotSymbols = new Set();
5
+ bufferedDepthUpdates = new Map();
6
+ wssURL = 'wss://contract.mexc.com';
7
+ httpURL = 'https://contract.mexc.com';
8
+ channelToSubscriptionMethod = new Map([
9
+ ['push.deal', 'sub.deal'],
10
+ ['push.depth', 'sub.depth'],
11
+ ['push.ticker', 'sub.ticker'],
12
+ ['push.index.price', 'sub.index.price'],
13
+ ['push.fair.price', 'sub.fair.price'],
14
+ ['push.funding.rate', 'sub.funding.rate'],
15
+ ['push.contract', 'sub.contract']
16
+ ]);
17
+ sendCustomPing = () => {
18
+ this.send({ method: 'ping' });
19
+ };
20
+ async getWebSocketUrl() {
21
+ return 'wss://contract.mexc.com/edge';
22
+ }
23
+ mapToSubscribeMessages(filters) {
24
+ const filtersWithSymbols = filters.map((filter) => {
25
+ if (filter.channel === 'push.contract') {
26
+ return { ...filter, symbols: [] };
27
+ }
28
+ if (filter.channel !== 'push.depth.snapshot' && this.channelToSubscriptionMethod.has(filter.channel) === false) {
29
+ throw new Error(`Unsupported MEXC futures channel ${filter.channel}`);
30
+ }
31
+ if (!filter.symbols || filter.symbols.length === 0) {
32
+ throw new Error('MexcFuturesRealTimeFeed requires explicitly specified symbols when subscribing to live feed');
33
+ }
34
+ return filter;
35
+ });
36
+ const depthSnapshotFilters = filtersWithSymbols.filter((filter) => filter.channel === 'push.depth.snapshot');
37
+ this.validateDepthSnapshotFilters(filtersWithSymbols, depthSnapshotFilters);
38
+ this.resetDepthSnapshotTracking(depthSnapshotFilters);
39
+ return filtersWithSymbols.flatMap((filter) => {
40
+ if (filter.channel === 'push.depth.snapshot') {
41
+ return [];
42
+ }
43
+ if (filter.channel === 'push.contract') {
44
+ return [{ method: this.channelToSubscriptionMethod.get(filter.channel) }];
45
+ }
46
+ return filter.symbols.map((symbol) => ({
47
+ method: this.channelToSubscriptionMethod.get(filter.channel),
48
+ param: { symbol },
49
+ gzip: false
50
+ }));
51
+ });
52
+ }
53
+ resetDepthSnapshotTracking(filters) {
54
+ this.pendingDepthSnapshotSymbols.clear();
55
+ this.bufferedDepthUpdates.clear();
56
+ for (const filter of filters) {
57
+ for (const symbol of filter.symbols) {
58
+ const upperCaseSymbol = symbol.toUpperCase();
59
+ this.pendingDepthSnapshotSymbols.add(upperCaseSymbol);
60
+ this.bufferedDepthUpdates.set(upperCaseSymbol, new CircularBuffer(2000));
61
+ }
62
+ }
63
+ }
64
+ validateDepthSnapshotFilters(filters, depthSnapshotFilters) {
65
+ if (depthSnapshotFilters.length === 0) {
66
+ return;
67
+ }
68
+ const depthSymbols = new Set(filters.filter((filter) => filter.channel === 'push.depth').flatMap((filter) => filter.symbols.map((symbol) => symbol.toUpperCase())));
69
+ for (const filter of depthSnapshotFilters) {
70
+ for (const symbol of filter.symbols) {
71
+ if (depthSymbols.has(symbol.toUpperCase()) === false) {
72
+ throw new Error('MexcFuturesRealTimeFeed requires push.depth for every push.depth.snapshot symbol');
73
+ }
74
+ }
75
+ }
76
+ }
77
+ onMessage(message) {
78
+ if (message.channel !== 'push.depth' ||
79
+ message.symbol === undefined ||
80
+ this.pendingDepthSnapshotSymbols.has(message.symbol) === false) {
81
+ return;
82
+ }
83
+ const firstVersion = Number(message.data?.begin !== undefined && message.data.begin !== null && message.data.begin !== 0
84
+ ? message.data.begin
85
+ : message.data?.version);
86
+ const lastVersion = Number(message.data?.end !== undefined && message.data.end !== null && message.data.end !== 0 ? message.data.end : message.data?.version);
87
+ if (Number.isFinite(firstVersion) === false || Number.isFinite(lastVersion) === false) {
88
+ return;
89
+ }
90
+ const bufferedUpdates = this.bufferedDepthUpdates.get(message.symbol) ?? new CircularBuffer(2000);
91
+ bufferedUpdates.append({ firstVersion, lastVersion });
92
+ this.bufferedDepthUpdates.set(message.symbol, bufferedUpdates);
93
+ }
94
+ async provideManualSnapshots(filters, shouldCancel) {
95
+ const depthFilter = filters.find((filter) => filter.channel === 'push.depth.snapshot');
96
+ if (depthFilter === undefined) {
97
+ return;
98
+ }
99
+ this.debug('requesting manual snapshots for: %s', depthFilter.symbols);
100
+ for (const symbol of depthFilter.symbols) {
101
+ await this.provideManualSnapshot(symbol.toUpperCase(), shouldCancel);
102
+ }
103
+ this.debug('requested manual snapshots successfully for: %s ', depthFilter.symbols);
104
+ }
105
+ messageIsError(message) {
106
+ return message.channel === 'rs.error' || message.success === false || message.error !== undefined;
107
+ }
108
+ messageIsHeartbeat(message) {
109
+ return message.channel === 'pong';
110
+ }
111
+ async provideManualSnapshot(symbol, shouldCancel) {
112
+ const maxSnapshotRounds = 4;
113
+ const maxSnapshotAttemptsPerRound = 3;
114
+ for (let round = 0; round < maxSnapshotRounds; round++) {
115
+ for (let attempt = 1; attempt <= maxSnapshotAttemptsPerRound; attempt++) {
116
+ if (shouldCancel()) {
117
+ return;
118
+ }
119
+ const { data } = await getJSON(`${this.httpURL}/api/v1/contract/depth/${symbol}?limit=5000`);
120
+ if (this.snapshotResponseIsValid(data) === false) {
121
+ if (attempt < maxSnapshotAttemptsPerRound) {
122
+ await wait(attempt * 1000);
123
+ }
124
+ continue;
125
+ }
126
+ const hasOverlap = await this.waitForSnapshotOverlap(symbol, data.data.version);
127
+ if (shouldCancel()) {
128
+ return;
129
+ }
130
+ if (hasOverlap === false) {
131
+ this.trimBufferedUpdates(symbol);
132
+ if (attempt < maxSnapshotAttemptsPerRound) {
133
+ await wait(attempt * 1000);
134
+ }
135
+ continue;
136
+ }
137
+ if (hasOverlap === true || attempt === maxSnapshotAttemptsPerRound) {
138
+ this.manualSnapshotsBuffer.push(this.createManualSnapshot(symbol, data.data));
139
+ this.pendingDepthSnapshotSymbols.delete(symbol);
140
+ this.bufferedDepthUpdates.delete(symbol);
141
+ return;
142
+ }
143
+ }
144
+ }
145
+ throw new Error(`MexcFuturesRealTimeFeed could not align depth snapshot for ${symbol}`);
146
+ }
147
+ async waitForSnapshotOverlap(symbol, snapshotVersion) {
148
+ let hasOverlap = this.validateSnapshotOverlap(symbol, snapshotVersion);
149
+ for (let attempt = 0; attempt < 60; attempt++) {
150
+ if (hasOverlap !== undefined) {
151
+ return hasOverlap;
152
+ }
153
+ await wait(100);
154
+ hasOverlap = this.validateSnapshotOverlap(symbol, snapshotVersion);
155
+ }
156
+ return hasOverlap;
157
+ }
158
+ validateSnapshotOverlap(symbol, snapshotVersion) {
159
+ const bufferedUpdates = this.bufferedDepthUpdates.get(symbol);
160
+ for (const update of bufferedUpdates?.items() ?? []) {
161
+ if (update.lastVersion <= snapshotVersion) {
162
+ continue;
163
+ }
164
+ return update.firstVersion <= snapshotVersion + 1 && update.lastVersion >= snapshotVersion + 1;
165
+ }
166
+ return undefined;
167
+ }
168
+ trimBufferedUpdates(symbol) {
169
+ const bufferedUpdates = this.bufferedDepthUpdates.get(symbol);
170
+ if (bufferedUpdates === undefined || bufferedUpdates.count <= 100) {
171
+ return;
172
+ }
173
+ const trimmed = new CircularBuffer(2000);
174
+ for (const update of [...bufferedUpdates.items()].slice(-100)) {
175
+ trimmed.append(update);
176
+ }
177
+ this.bufferedDepthUpdates.set(symbol, trimmed);
178
+ }
179
+ snapshotResponseIsValid(response) {
180
+ return (response.success === true &&
181
+ response.code === 0 &&
182
+ response.data !== undefined &&
183
+ Number.isFinite(response.data.version) &&
184
+ response.data.version >= 0 &&
185
+ Array.isArray(response.data.asks) &&
186
+ Array.isArray(response.data.bids));
187
+ }
188
+ createManualSnapshot(symbol, data) {
189
+ return {
190
+ channel: 'push.depth.snapshot',
191
+ symbol,
192
+ generated: true,
193
+ data: {
194
+ cts: data.cts,
195
+ asks: data.asks,
196
+ bids: data.bids,
197
+ timestamp: data.timestamp,
198
+ version: data.version
199
+ }
200
+ };
201
+ }
202
+ }
203
+ //# sourceMappingURL=mexcfutures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mexcfutures.js","sourceRoot":"","sources":["../../src/realtimefeeds/mexcfutures.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,7 @@ declare class OkexOptionsSingleRealTimeFeed extends OkexSingleRealTimeFeed {
23
23
  protected wssURL: string;
24
24
  constructor(wssURL: string, exchange: string, filters: Filter<string>[], timeoutIntervalMS: number | undefined, onError?: (error: Error) => void);
25
25
  private _defaultIndexes;
26
+ private _defaultOptionSummaryInstrumentFamilies;
26
27
  private _channelRequiresIndexNotSymbol;
27
28
  protected mapToSubscribeMessages(filters: Filter<string>[]): any[];
28
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"okex.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/okex.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,+BAA+B,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAErF,qBAAa,gBAAiB,SAAQ,+BAA+B;IACnE,SAAS,CAAE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;CAavI;AAED,cAAM,sBAAuB,SAAQ,gBAAgB;IAEjD,SAAS,CAAC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EACzB,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;IAKlC,OAAO,CAAC,eAAe,CAAwC;IAE/D,OAAO,CAAC,iBAAiB;cAIT,WAAW;IAqB3B,SAAS,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE;IA+BlE,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO;IAI/C,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG;CAOtC;AAED,qBAAa,kBAAmB,SAAQ,sBAAsB;gBAChD,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,iBAAiB,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;CAGjI;AAED,qBAAa,uBAAwB,SAAQ,+BAA+B;IAC1E,SAAS,CAAE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;CAmBvI;AAED,cAAM,6BAA8B,SAAQ,sBAAsB;IAE9D,SAAS,CAAC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EACzB,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;IAKlC,OAAO,CAAC,eAAe,CAAyB;IAEhD,OAAO,CAAC,8BAA8B;IAMtC,SAAS,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE;CAoCnE"}
1
+ {"version":3,"file":"okex.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/okex.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,+BAA+B,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAErF,qBAAa,gBAAiB,SAAQ,+BAA+B;IACnE,SAAS,CAAE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;CAavI;AAED,cAAM,sBAAuB,SAAQ,gBAAgB;IAEjD,SAAS,CAAC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EACzB,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;IAKlC,OAAO,CAAC,eAAe,CAAwC;IAE/D,OAAO,CAAC,iBAAiB;cAIT,WAAW;IAqB3B,SAAS,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE;IA+BlE,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO;IAI/C,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG;CAOtC;AAED,qBAAa,kBAAmB,SAAQ,sBAAsB;gBAChD,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,iBAAiB,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;CAGjI;AAED,qBAAa,uBAAwB,SAAQ,+BAA+B;IAC1E,SAAS,CAAE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;CAmBvI;AAED,cAAM,6BAA8B,SAAQ,sBAAsB;IAE9D,SAAS,CAAC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EACxB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EACzB,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;IAKlC,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,uCAAuC,CAAmE;IAElH,OAAO,CAAC,8BAA8B;IAMtC,SAAS,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE;CAoCnE"}