tardis-machine 18.1.0 → 18.2.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 (93) hide show
  1. package/dist/ws/subscriptionsmappers.d.ts.map +1 -1
  2. package/dist/ws/subscriptionsmappers.js +3 -1
  3. package/dist/ws/subscriptionsmappers.js.map +1 -1
  4. package/node_modules/tardis-dev/dist/consts.d.ts +3 -1
  5. package/node_modules/tardis-dev/dist/consts.d.ts.map +1 -1
  6. package/node_modules/tardis-dev/dist/consts.js +17 -0
  7. package/node_modules/tardis-dev/dist/consts.js.map +1 -1
  8. package/node_modules/tardis-dev/dist/handy.d.ts +13 -0
  9. package/node_modules/tardis-dev/dist/handy.d.ts.map +1 -1
  10. package/node_modules/tardis-dev/dist/handy.js +5 -1
  11. package/node_modules/tardis-dev/dist/handy.js.map +1 -1
  12. package/node_modules/tardis-dev/dist/mappers/ascendex.d.ts +4 -4
  13. package/node_modules/tardis-dev/dist/mappers/aster.d.ts +16 -0
  14. package/node_modules/tardis-dev/dist/mappers/aster.d.ts.map +1 -0
  15. package/node_modules/tardis-dev/dist/mappers/aster.js +294 -0
  16. package/node_modules/tardis-dev/dist/mappers/aster.js.map +1 -0
  17. package/node_modules/tardis-dev/dist/mappers/binance.d.ts +18 -18
  18. package/node_modules/tardis-dev/dist/mappers/binance.js +22 -22
  19. package/node_modules/tardis-dev/dist/mappers/binance.js.map +1 -1
  20. package/node_modules/tardis-dev/dist/mappers/binanceeuropeanoptions.d.ts +1 -1
  21. package/node_modules/tardis-dev/dist/mappers/bitfinex.d.ts +8 -8
  22. package/node_modules/tardis-dev/dist/mappers/bitflyer.d.ts +1 -1
  23. package/node_modules/tardis-dev/dist/mappers/bitget.d.ts +1 -1
  24. package/node_modules/tardis-dev/dist/mappers/bitmex.d.ts +2 -2
  25. package/node_modules/tardis-dev/dist/mappers/bitnomial.d.ts +1 -1
  26. package/node_modules/tardis-dev/dist/mappers/bitstamp.d.ts +1 -1
  27. package/node_modules/tardis-dev/dist/mappers/blockchaincom.d.ts +2 -2
  28. package/node_modules/tardis-dev/dist/mappers/bullish.d.ts +5 -5
  29. package/node_modules/tardis-dev/dist/mappers/bybit.d.ts +7 -7
  30. package/node_modules/tardis-dev/dist/mappers/bybitspot.d.ts +1 -1
  31. package/node_modules/tardis-dev/dist/mappers/coinbase.d.ts +1 -1
  32. package/node_modules/tardis-dev/dist/mappers/coinbaseinternational.d.ts +2 -2
  33. package/node_modules/tardis-dev/dist/mappers/coinflex.d.ts +1 -1
  34. package/node_modules/tardis-dev/dist/mappers/cryptocom.d.ts +5 -5
  35. package/node_modules/tardis-dev/dist/mappers/delta.d.ts +1 -1
  36. package/node_modules/tardis-dev/dist/mappers/deribit.d.ts +2 -2
  37. package/node_modules/tardis-dev/dist/mappers/dydx.d.ts +3 -3
  38. package/node_modules/tardis-dev/dist/mappers/dydxv4.d.ts +4 -4
  39. package/node_modules/tardis-dev/dist/mappers/ftx.d.ts +8 -8
  40. package/node_modules/tardis-dev/dist/mappers/gateio.d.ts +1 -1
  41. package/node_modules/tardis-dev/dist/mappers/gateiofutures.d.ts +4 -4
  42. package/node_modules/tardis-dev/dist/mappers/gemini.d.ts +1 -1
  43. package/node_modules/tardis-dev/dist/mappers/huobi.d.ts +26 -26
  44. package/node_modules/tardis-dev/dist/mappers/hyperliquid.d.ts +3 -3
  45. package/node_modules/tardis-dev/dist/mappers/index.d.ts +179 -161
  46. package/node_modules/tardis-dev/dist/mappers/index.d.ts.map +1 -1
  47. package/node_modules/tardis-dev/dist/mappers/index.js +2 -1
  48. package/node_modules/tardis-dev/dist/mappers/index.js.map +1 -1
  49. package/node_modules/tardis-dev/dist/mappers/kucoin.d.ts +3 -3
  50. package/node_modules/tardis-dev/dist/mappers/kucoinfutures.d.ts +4 -4
  51. package/node_modules/tardis-dev/dist/mappers/lighter.d.ts +5 -5
  52. package/node_modules/tardis-dev/dist/mappers/mexc.d.ts +3 -3
  53. package/node_modules/tardis-dev/dist/mappers/mexcfutures.d.ts +3 -3
  54. package/node_modules/tardis-dev/dist/mappers/okex.d.ts +15 -15
  55. package/node_modules/tardis-dev/dist/mappers/phemex.d.ts +1 -1
  56. package/node_modules/tardis-dev/dist/mappers/polymarket.d.ts +3 -3
  57. package/node_modules/tardis-dev/dist/mappers/registry.d.ts.map +1 -1
  58. package/node_modules/tardis-dev/dist/mappers/registry.js.map +1 -1
  59. package/node_modules/tardis-dev/dist/mappers/serum.d.ts +9 -9
  60. package/node_modules/tardis-dev/dist/mappers/upbit.d.ts +2 -2
  61. package/node_modules/tardis-dev/dist/realtimefeeds/aster.d.ts +53 -0
  62. package/node_modules/tardis-dev/dist/realtimefeeds/aster.d.ts.map +1 -0
  63. package/node_modules/tardis-dev/dist/realtimefeeds/aster.js +271 -0
  64. package/node_modules/tardis-dev/dist/realtimefeeds/aster.js.map +1 -0
  65. package/node_modules/tardis-dev/dist/realtimefeeds/binance.d.ts +1 -4
  66. package/node_modules/tardis-dev/dist/realtimefeeds/binance.d.ts.map +1 -1
  67. package/node_modules/tardis-dev/dist/realtimefeeds/binance.js +36 -95
  68. package/node_modules/tardis-dev/dist/realtimefeeds/binance.js.map +1 -1
  69. package/node_modules/tardis-dev/dist/realtimefeeds/index.d.ts.map +1 -1
  70. package/node_modules/tardis-dev/dist/realtimefeeds/index.js +3 -0
  71. package/node_modules/tardis-dev/dist/realtimefeeds/index.js.map +1 -1
  72. package/node_modules/tardis-dev/dist/realtimefeeds/realtimefeed.d.ts.map +1 -1
  73. package/node_modules/tardis-dev/dist/realtimefeeds/realtimefeed.js +12 -3
  74. package/node_modules/tardis-dev/dist/realtimefeeds/realtimefeed.js.map +1 -1
  75. package/node_modules/tardis-dev/dist/realtimefeeds/requestweight.d.ts +14 -0
  76. package/node_modules/tardis-dev/dist/realtimefeeds/requestweight.d.ts.map +1 -0
  77. package/node_modules/tardis-dev/dist/realtimefeeds/requestweight.js +72 -0
  78. package/node_modules/tardis-dev/dist/realtimefeeds/requestweight.js.map +1 -0
  79. package/node_modules/tardis-dev/package.json +2 -2
  80. package/node_modules/tardis-dev/src/consts.ts +18 -0
  81. package/node_modules/tardis-dev/src/handy.ts +6 -1
  82. package/node_modules/tardis-dev/src/mappers/aster.ts +438 -0
  83. package/node_modules/tardis-dev/src/mappers/binance.ts +23 -21
  84. package/node_modules/tardis-dev/src/mappers/bitfinex.ts +1 -2
  85. package/node_modules/tardis-dev/src/mappers/index.ts +2 -0
  86. package/node_modules/tardis-dev/src/mappers/registry.ts +1 -2
  87. package/node_modules/tardis-dev/src/realtimefeeds/aster.ts +388 -0
  88. package/node_modules/tardis-dev/src/realtimefeeds/binance.ts +59 -145
  89. package/node_modules/tardis-dev/src/realtimefeeds/index.ts +3 -0
  90. package/node_modules/tardis-dev/src/realtimefeeds/realtimefeed.ts +12 -3
  91. package/node_modules/tardis-dev/src/realtimefeeds/requestweight.ts +91 -0
  92. package/package.json +3 -3
  93. package/src/ws/subscriptionsmappers.ts +3 -1
@@ -1,19 +1,19 @@
1
1
  import { BookChange, BookTicker, Trade } from '../types.ts';
2
2
  export declare const serumMappers: {
3
3
  serum: {
4
- trades: import("./registry.ts").MapperCreator<"bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", Trade>;
5
- bookChanges: import("./registry.ts").MapperCreator<"bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", BookChange>;
6
- bookTickers: import("./registry.ts").MapperCreator<"bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", BookTicker>;
4
+ trades: import("./registry.ts").MapperCreator<"aster" | "aster-futures" | "bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", Trade>;
5
+ bookChanges: import("./registry.ts").MapperCreator<"aster" | "aster-futures" | "bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", BookChange>;
6
+ bookTickers: import("./registry.ts").MapperCreator<"aster" | "aster-futures" | "bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", BookTicker>;
7
7
  };
8
8
  'star-atlas': {
9
- trades: import("./registry.ts").MapperCreator<"bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", Trade>;
10
- bookChanges: import("./registry.ts").MapperCreator<"bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", BookChange>;
11
- bookTickers: import("./registry.ts").MapperCreator<"bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", BookTicker>;
9
+ trades: import("./registry.ts").MapperCreator<"aster" | "aster-futures" | "bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", Trade>;
10
+ bookChanges: import("./registry.ts").MapperCreator<"aster" | "aster-futures" | "bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", BookChange>;
11
+ bookTickers: import("./registry.ts").MapperCreator<"aster" | "aster-futures" | "bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", BookTicker>;
12
12
  };
13
13
  mango: {
14
- trades: import("./registry.ts").MapperCreator<"bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", Trade>;
15
- bookChanges: import("./registry.ts").MapperCreator<"bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", BookChange>;
16
- bookTickers: import("./registry.ts").MapperCreator<"bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", BookTicker>;
14
+ trades: import("./registry.ts").MapperCreator<"aster" | "aster-futures" | "bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", Trade>;
15
+ bookChanges: import("./registry.ts").MapperCreator<"aster" | "aster-futures" | "bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", BookChange>;
16
+ bookTickers: import("./registry.ts").MapperCreator<"aster" | "aster-futures" | "bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", BookTicker>;
17
17
  };
18
18
  };
19
19
  //# sourceMappingURL=serum.d.ts.map
@@ -1,8 +1,8 @@
1
1
  import { BookChange, Trade } from '../types.ts';
2
2
  export declare const upbitMappers: {
3
3
  upbit: {
4
- trades: import("./registry.ts").MapperCreator<"bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", Trade>;
5
- bookChanges: import("./registry.ts").MapperCreator<"bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", BookChange>;
4
+ trades: import("./registry.ts").MapperCreator<"aster" | "aster-futures" | "bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", Trade>;
5
+ bookChanges: import("./registry.ts").MapperCreator<"aster" | "aster-futures" | "bitmex" | "deribit" | "binance-futures" | "binance-delivery" | "binance-european-options" | "binance" | "ftx" | "okex-futures" | "okex-options" | "okex-swap" | "okex" | "okex-spreads" | "huobi-dm" | "huobi-dm-swap" | "huobi-dm-linear-swap" | "huobi" | "bitfinex-derivatives" | "bitfinex" | "coinbase" | "coinbase-international" | "cryptofacilities" | "kraken" | "bitstamp" | "gemini" | "poloniex" | "bybit" | "bybit-spot" | "bybit-options" | "phemex" | "delta" | "ftx-us" | "binance-us" | "gate-io-futures" | "mexc-futures" | "gate-io" | "okcoin" | "bitflyer" | "hitbtc" | "coinflex" | "binance-jersey" | "binance-dex" | "upbit" | "ascendex" | "dydx" | "dydx-v4" | "serum" | "mango" | "huobi-dm-options" | "star-atlas" | "crypto-com" | "kucoin" | "kucoin-futures" | "bitnomial" | "woo-x" | "blockchain-com" | "bitget" | "bitget-futures" | "hyperliquid" | "lighter" | "bullish" | "mexc" | "polymarket", BookChange>;
6
6
  };
7
7
  };
8
8
  //# sourceMappingURL=upbit.d.ts.map
@@ -0,0 +1,53 @@
1
+ import { Writable } from 'stream';
2
+ import { Filter } from '../types.ts';
3
+ import { MultiConnectionRealTimeFeedBase, PoolingClientBase, RealTimeFeedBase } from './realtimefeed.ts';
4
+ export declare class AsterRealTimeFeed extends RealTimeFeedBase {
5
+ protected static readonly depthChannel = "depth";
6
+ protected static readonly depthSnapshotChannel = "depthSnapshot";
7
+ protected readonly depthStream: string;
8
+ protected readonly depthRequestRequestWeight = 20;
9
+ protected readonly wssURL: string;
10
+ protected readonly httpURL: string;
11
+ protected readonly channels: Set<string>;
12
+ protected readonly channelMappings: {
13
+ [key: string]: string | undefined;
14
+ };
15
+ protected mapToSubscribeMessages(filters: Filter<string>[]): any[];
16
+ protected messageIsError(message: any): boolean;
17
+ protected provideManualSnapshots(filters: Filter<string>[], shouldCancel: () => boolean): Promise<void>;
18
+ private validateDepthSnapshotFilters;
19
+ }
20
+ export declare class AsterFuturesRealTimeFeed extends MultiConnectionRealTimeFeedBase {
21
+ protected _getRealTimeFeeds(exchange: string, filters: Filter<string>[], timeoutIntervalMS?: number, onError?: (error: Error) => void): Generator<AsterFuturesWebSocketRealTimeFeed | AsterFuturesOpenInterestClient, void, unknown>;
22
+ }
23
+ export declare class AsterFuturesWebSocketRealTimeFeed extends AsterRealTimeFeed {
24
+ protected readonly wssURL: string;
25
+ protected readonly httpURL: string;
26
+ protected readonly channels: Set<string>;
27
+ protected readonly channelMappings: {
28
+ [key: string]: string | undefined;
29
+ };
30
+ }
31
+ declare class AsterFuturesOpenInterestClient extends PoolingClientBase {
32
+ private readonly _exchange;
33
+ private readonly _httpURL;
34
+ private readonly _instruments;
35
+ private readonly _minPollingIntervalMS;
36
+ private readonly _minAvailableWeightBuffer;
37
+ private readonly _maxPollingIntervalMS;
38
+ private _currentPollingIntervalMS;
39
+ private _requestWeightLimiter;
40
+ constructor(_exchange: string, _httpURL: string, _instruments: string[], onError?: (error: Error) => void);
41
+ protected getPoolingDelayMS(): number;
42
+ protected poolDataToStream(outputStream: Writable): Promise<void>;
43
+ private _waitForAvailableWeight;
44
+ private _initializeRateLimitInfo;
45
+ private _notifyError;
46
+ }
47
+ export type AsterFuturesOpenInterestData = {
48
+ symbol: string;
49
+ openInterest: string;
50
+ time: number;
51
+ };
52
+ export {};
53
+ //# sourceMappingURL=aster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aster.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/aster.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,+BAA+B,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAmBxG,qBAAa,iBAAkB,SAAQ,gBAAgB;IACrD,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,WAAU;IAChD,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,mBAAkB;IAChE,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAc;IACpD,SAAS,CAAC,QAAQ,CAAC,yBAAyB,MAAK;IACjD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAsC;IACvE,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAqC;IACvE,SAAS,CAAC,QAAQ,CAAC,QAAQ,cAOzB;IACF,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAExE;IAED,SAAS,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE;IA2BlE,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO;cAgB/B,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,OAAO;IAuF7F,OAAO,CAAC,4BAA4B;CAqBrC;AAED,qBAAa,wBAAyB,SAAQ,+BAA+B;IAC3E,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;CAsBvI;AAED,qBAAa,iCAAkC,SAAQ,iBAAiB;IACtE,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAsC;IACvE,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAsC;IACxE,SAAS,CAAC,QAAQ,CAAC,QAAQ,cAUzB;IACF,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAGxE;CACF;AAED,cAAM,8BAA+B,SAAQ,iBAAiB;IAQ1D,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAT/B,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAQ;IAC9C,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAQ;IAClD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAQ;IAC9C,OAAO,CAAC,yBAAyB,CAAQ;IACzC,OAAO,CAAC,qBAAqB,CAAkC;gBAG5C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EAAE,EACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;IAuBlC,SAAS,CAAC,iBAAiB;cAIX,gBAAgB,CAAC,YAAY,EAAE,QAAQ;YAwEzC,uBAAuB;YAYvB,wBAAwB;IAWtC,OAAO,CAAC,YAAY;CASrB;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA"}
@@ -0,0 +1,271 @@
1
+ import { batch, getJSON, wait } from "../handy.js";
2
+ import { MultiConnectionRealTimeFeedBase, PoolingClientBase, RealTimeFeedBase } from "./realtimefeed.js";
3
+ import { getExchangeScopedNumberEnv, getRequestWeightLimit, parseRequestWeightHeader, RequestWeightLimiter } from "./requestweight.js";
4
+ const asterHttpOptions = {
5
+ timeout: 10 * 1000,
6
+ retry: {
7
+ limit: 10,
8
+ statusCodes: [429, 500, 403],
9
+ maxRetryAfter: 120 * 1000
10
+ }
11
+ };
12
+ const DEFAULT_OPEN_INTEREST_MIN_AVAILABLE_WEIGHT_BUFFER = 100;
13
+ const DEFAULT_OPEN_INTEREST_POLLING_INTERVAL_MS = 30 * 1000;
14
+ const OPEN_INTEREST_BATCH_SIZE = 10;
15
+ const OPEN_INTEREST_REQUEST_WEIGHT = 1;
16
+ const OPEN_INTEREST_POLLING_RECOVERY_MS = 1000;
17
+ const OPEN_INTEREST_MAX_POLLING_INTERVAL_MS = 60 * 1000;
18
+ export class AsterRealTimeFeed extends RealTimeFeedBase {
19
+ static depthChannel = 'depth';
20
+ static depthSnapshotChannel = 'depthSnapshot';
21
+ depthStream = 'depth@0ms';
22
+ depthRequestRequestWeight = 20;
23
+ wssURL = 'wss://sstream.asterdex.com/stream';
24
+ httpURL = 'https://sapi.asterdex.com/api/v3';
25
+ channels = new Set([
26
+ 'trade',
27
+ 'aggTrade',
28
+ 'ticker',
29
+ AsterRealTimeFeed.depthChannel,
30
+ AsterRealTimeFeed.depthSnapshotChannel,
31
+ 'bookTicker'
32
+ ]);
33
+ channelMappings = {
34
+ [AsterRealTimeFeed.depthChannel]: this.depthStream
35
+ };
36
+ mapToSubscribeMessages(filters) {
37
+ const filtersWithSymbols = filters.map((filter) => {
38
+ if (!this.channels.has(filter.channel)) {
39
+ throw new Error(`AsterRealTimeFeed unsupported channel ${filter.channel}`);
40
+ }
41
+ if (!filter.symbols || filter.symbols.length === 0) {
42
+ throw new Error('AsterRealTimeFeed requires explicitly specified symbols when subscribing to live feed');
43
+ }
44
+ return filter;
45
+ });
46
+ const depthSnapshotFilters = filtersWithSymbols.filter((filter) => filter.channel === AsterRealTimeFeed.depthSnapshotChannel);
47
+ this.validateDepthSnapshotFilters(filtersWithSymbols, depthSnapshotFilters);
48
+ return filtersWithSymbols
49
+ .filter((f) => f.channel !== AsterRealTimeFeed.depthSnapshotChannel)
50
+ .map((filter, index) => {
51
+ return {
52
+ method: 'SUBSCRIBE',
53
+ params: filter.symbols.map((symbol) => `${symbol.toLowerCase()}@${this.channelMappings[filter.channel] ?? filter.channel}`),
54
+ id: index + 1
55
+ };
56
+ });
57
+ }
58
+ messageIsError(message) {
59
+ if (message.result === null) {
60
+ return false;
61
+ }
62
+ if (message.stream !== undefined) {
63
+ return false;
64
+ }
65
+ if (message.code !== undefined || message.error !== undefined) {
66
+ return true;
67
+ }
68
+ return false;
69
+ }
70
+ async provideManualSnapshots(filters, shouldCancel) {
71
+ const depthSnapshotFilter = filters.find((f) => f.channel === AsterRealTimeFeed.depthSnapshotChannel);
72
+ if (!depthSnapshotFilter) {
73
+ return;
74
+ }
75
+ const exchangeInfoResponse = await getJSON(`${this.httpURL}/exchangeInfo`, asterHttpOptions);
76
+ if (shouldCancel()) {
77
+ return;
78
+ }
79
+ const exchangeInfo = exchangeInfoResponse.data;
80
+ const DELAY_ENV = `${this._exchange.toUpperCase().replace(/-/g, '_')}_SNAPSHOTS_DELAY_MS`;
81
+ const currentWeightLimit = getRequestWeightLimit(this._exchange, exchangeInfo);
82
+ const usedWeight = parseRequestWeightHeader(exchangeInfoResponse.headers['x-mbx-used-weight-1m']) ?? 0;
83
+ this.debug('current x-mbx-used-weight-1m limit: %s, already used weight: %s', currentWeightLimit, usedWeight);
84
+ const concurrencyLimit = Math.max(getExchangeScopedNumberEnv(this._exchange, 'CONCURRENCY_LIMIT', 4), 1);
85
+ this.debug('current snapshots requests concurrency limit: %s', concurrencyLimit);
86
+ const minWeightBuffer = Math.max(getExchangeScopedNumberEnv(this._exchange, 'MIN_AVAILABLE_WEIGHT_BUFFER', 2 * concurrencyLimit * this.depthRequestRequestWeight), 0);
87
+ const requestWeightLimiter = new RequestWeightLimiter(currentWeightLimit, minWeightBuffer, usedWeight);
88
+ for (const symbolsBatch of batch(depthSnapshotFilter.symbols, concurrencyLimit)) {
89
+ if (shouldCancel()) {
90
+ return;
91
+ }
92
+ this.debug('requesting manual snapshots for: %s', symbolsBatch);
93
+ await requestWeightLimiter.waitForAvailableWeight(symbolsBatch.length * this.depthRequestRequestWeight, (delayMS) => {
94
+ this.debug('reached rate limit (x-mbx-used-weight-1m limit: %s, used weight: %s, minimum available weight buffer: %s), waiting: %s seconds', currentWeightLimit, requestWeightLimiter.usedWeight, minWeightBuffer, Math.ceil(delayMS / 1000));
95
+ });
96
+ const usedWeights = await Promise.all(symbolsBatch.map(async (symbol) => {
97
+ if (shouldCancel()) {
98
+ return 0;
99
+ }
100
+ const depthSnapshotResponse = await getJSON(`${this.httpURL}/depth?symbol=${symbol.toUpperCase()}&limit=1000`, asterHttpOptions);
101
+ if (shouldCancel()) {
102
+ return 0;
103
+ }
104
+ const snapshot = {
105
+ stream: `${symbol.toLowerCase()}@${AsterRealTimeFeed.depthSnapshotChannel}`,
106
+ generated: true,
107
+ data: depthSnapshotResponse.data
108
+ };
109
+ this.manualSnapshotsBuffer.push(snapshot);
110
+ if (process.env[DELAY_ENV] !== undefined) {
111
+ const msToWait = Number.parseInt(process.env[DELAY_ENV]);
112
+ await wait(msToWait);
113
+ }
114
+ return parseRequestWeightHeader(depthSnapshotResponse.headers['x-mbx-used-weight-1m']);
115
+ }));
116
+ const maxUsedWeight = Math.max(...usedWeights.map((weight) => weight ?? 0));
117
+ requestWeightLimiter.updateUsedWeight(maxUsedWeight || undefined, symbolsBatch.length * this.depthRequestRequestWeight);
118
+ this.debug('requested manual snapshots successfully for: %s, used weight: %s', symbolsBatch, requestWeightLimiter.usedWeight);
119
+ }
120
+ this.debug('requested all manual snapshots successfully');
121
+ }
122
+ validateDepthSnapshotFilters(filters, depthSnapshotFilters) {
123
+ if (depthSnapshotFilters.length === 0) {
124
+ return;
125
+ }
126
+ const depthSymbols = new Set(filters
127
+ .filter((filter) => filter.channel === AsterRealTimeFeed.depthChannel)
128
+ .flatMap((filter) => filter.symbols.map((symbol) => symbol.toUpperCase())));
129
+ for (const filter of depthSnapshotFilters) {
130
+ for (const symbol of filter.symbols) {
131
+ if (depthSymbols.has(symbol.toUpperCase()) === false) {
132
+ throw new Error(`AsterRealTimeFeed requires ${AsterRealTimeFeed.depthChannel} for every ${AsterRealTimeFeed.depthSnapshotChannel} symbol`);
133
+ }
134
+ }
135
+ }
136
+ }
137
+ }
138
+ export class AsterFuturesRealTimeFeed extends MultiConnectionRealTimeFeedBase {
139
+ *_getRealTimeFeeds(exchange, filters, timeoutIntervalMS, onError) {
140
+ const webSocketFilters = filters.filter((filter) => filter.channel !== 'openInterest');
141
+ if (webSocketFilters.length > 0) {
142
+ yield new AsterFuturesWebSocketRealTimeFeed(exchange, webSocketFilters, timeoutIntervalMS, onError);
143
+ }
144
+ const openInterestFilters = filters.filter((filter) => filter.channel === 'openInterest');
145
+ if (openInterestFilters.length > 0) {
146
+ for (const filter of openInterestFilters) {
147
+ if (!filter.symbols || filter.symbols.length === 0) {
148
+ throw new Error('AsterFuturesRealTimeFeed requires explicitly specified symbols when subscribing to live feed');
149
+ }
150
+ }
151
+ yield new AsterFuturesOpenInterestClient(exchange, 'https://fapi.asterdex.com/fapi/v3', openInterestFilters.flatMap((filter) => filter.symbols), onError);
152
+ }
153
+ }
154
+ }
155
+ export class AsterFuturesWebSocketRealTimeFeed extends AsterRealTimeFeed {
156
+ wssURL = 'wss://fstream.asterdex.com/stream';
157
+ httpURL = 'https://fapi.asterdex.com/fapi/v3';
158
+ channels = new Set([
159
+ 'trade',
160
+ 'aggTrade',
161
+ 'ticker',
162
+ AsterRealTimeFeed.depthChannel,
163
+ AsterRealTimeFeed.depthSnapshotChannel,
164
+ 'markPrice',
165
+ 'forceOrder',
166
+ 'bookTicker',
167
+ 'assetIndex'
168
+ ]);
169
+ channelMappings = {
170
+ [AsterRealTimeFeed.depthChannel]: this.depthStream,
171
+ markPrice: 'markPrice@1s'
172
+ };
173
+ }
174
+ class AsterFuturesOpenInterestClient extends PoolingClientBase {
175
+ _exchange;
176
+ _httpURL;
177
+ _instruments;
178
+ _minPollingIntervalMS;
179
+ _minAvailableWeightBuffer;
180
+ _maxPollingIntervalMS;
181
+ _currentPollingIntervalMS;
182
+ _requestWeightLimiter;
183
+ constructor(_exchange, _httpURL, _instruments, onError) {
184
+ const minPollingIntervalMS = Math.max(getExchangeScopedNumberEnv(_exchange, 'OPEN_INTEREST_POLLING_INTERVAL_MS', DEFAULT_OPEN_INTEREST_POLLING_INTERVAL_MS), 1000);
185
+ super(_exchange, minPollingIntervalMS / 1000, onError);
186
+ this._exchange = _exchange;
187
+ this._httpURL = _httpURL;
188
+ this._instruments = _instruments;
189
+ this._minPollingIntervalMS = minPollingIntervalMS;
190
+ this._maxPollingIntervalMS = Math.max(this._minPollingIntervalMS, OPEN_INTEREST_MAX_POLLING_INTERVAL_MS);
191
+ this._currentPollingIntervalMS = minPollingIntervalMS;
192
+ this._minAvailableWeightBuffer = Math.max(getExchangeScopedNumberEnv(_exchange, 'MIN_AVAILABLE_WEIGHT_BUFFER', DEFAULT_OPEN_INTEREST_MIN_AVAILABLE_WEIGHT_BUFFER), 0);
193
+ const configuredRequestWeightLimit = getExchangeScopedNumberEnv(_exchange, 'REQUEST_WEIGHT_LIMIT', 0);
194
+ if (configuredRequestWeightLimit > 0) {
195
+ this._requestWeightLimiter = new RequestWeightLimiter(configuredRequestWeightLimit, this._minAvailableWeightBuffer);
196
+ }
197
+ }
198
+ getPoolingDelayMS() {
199
+ return this._currentPollingIntervalMS;
200
+ }
201
+ async poolDataToStream(outputStream) {
202
+ let waitedForRateLimit = false;
203
+ if (this._requestWeightLimiter === undefined) {
204
+ await this._initializeRateLimitInfo();
205
+ }
206
+ for (let index = 0; index < this._instruments.length;) {
207
+ if (outputStream.destroyed) {
208
+ return;
209
+ }
210
+ if (await this._waitForAvailableWeight()) {
211
+ waitedForRateLimit = true;
212
+ }
213
+ if (outputStream.destroyed) {
214
+ return;
215
+ }
216
+ const batchSize = Math.min(OPEN_INTEREST_BATCH_SIZE, Math.floor(this._requestWeightLimiter.availableWeight));
217
+ const instrumentsBatch = this._instruments.slice(index, index + batchSize);
218
+ index += instrumentsBatch.length;
219
+ const results = await Promise.allSettled(instrumentsBatch.map(async (instrument) => {
220
+ const openInterestResponse = await getJSON(`${this._httpURL}/openInterest?symbol=${instrument.toUpperCase()}`, asterHttpOptions);
221
+ return {
222
+ instrument,
223
+ usedWeight: parseRequestWeightHeader(openInterestResponse.headers['x-mbx-used-weight-1m']),
224
+ data: openInterestResponse.data
225
+ };
226
+ }));
227
+ let maxUsedWeight;
228
+ for (const result of results) {
229
+ if (result.status === 'rejected') {
230
+ this._notifyError(result.reason);
231
+ continue;
232
+ }
233
+ if (result.value.usedWeight !== undefined) {
234
+ maxUsedWeight = Math.max(maxUsedWeight ?? 0, result.value.usedWeight);
235
+ }
236
+ if (outputStream.writable) {
237
+ outputStream.write({
238
+ stream: `${result.value.instrument.toLowerCase()}@openInterest`,
239
+ generated: true,
240
+ data: result.value.data
241
+ });
242
+ }
243
+ }
244
+ this._requestWeightLimiter.updateUsedWeight(maxUsedWeight, instrumentsBatch.length * OPEN_INTEREST_REQUEST_WEIGHT);
245
+ }
246
+ if (waitedForRateLimit) {
247
+ this._currentPollingIntervalMS = Math.min(this._currentPollingIntervalMS + this._minPollingIntervalMS, this._maxPollingIntervalMS);
248
+ }
249
+ else {
250
+ this._currentPollingIntervalMS = Math.max(this._minPollingIntervalMS, this._currentPollingIntervalMS - OPEN_INTEREST_POLLING_RECOVERY_MS);
251
+ }
252
+ }
253
+ async _waitForAvailableWeight() {
254
+ return this._requestWeightLimiter.waitForAvailableWeight(OPEN_INTEREST_REQUEST_WEIGHT, (delayMS) => {
255
+ this.debug('open interest reached rate limit (limit: %s, used: %s, minimum available buffer: %s), waiting %s ms', this._requestWeightLimiter.limit, this._requestWeightLimiter.usedWeight, this._requestWeightLimiter.minAvailableWeightBuffer, delayMS);
256
+ });
257
+ }
258
+ async _initializeRateLimitInfo() {
259
+ const exchangeInfoResponse = await getJSON(`${this._httpURL}/exchangeInfo`, asterHttpOptions);
260
+ const exchangeInfo = exchangeInfoResponse.data;
261
+ this._requestWeightLimiter = new RequestWeightLimiter(getRequestWeightLimit(this._exchange, exchangeInfo), this._minAvailableWeightBuffer, parseRequestWeightHeader(exchangeInfoResponse.headers['x-mbx-used-weight-1m']));
262
+ }
263
+ _notifyError(error) {
264
+ const normalizedError = error instanceof Error ? error : new Error(String(error));
265
+ this.debug('open interest request error %o', normalizedError);
266
+ if (this.onError !== undefined) {
267
+ this.onError(normalizedError);
268
+ }
269
+ }
270
+ }
271
+ //# sourceMappingURL=aster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aster.js","sourceRoot":"","sources":["../../src/realtimefeeds/aster.ts"],"names":[],"mappings":"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"}
@@ -21,16 +21,13 @@ declare class BinanceFuturesOpenInterestClient extends PoolingClientBase {
21
21
  private readonly _minAvailableWeightBuffer;
22
22
  private readonly _maxPollingIntervalMS;
23
23
  private _currentPollingIntervalMS;
24
- private _requestWeightLimit;
25
- private _usedWeight;
24
+ private _requestWeightLimiter;
26
25
  constructor(_exchange: string, _httpURL: string, _instruments: string[], onError?: (error: Error) => void);
27
26
  protected getPoolingDelayMS(): number;
28
27
  protected poolDataToStream(outputStream: Writable): Promise<void>;
29
28
  private _waitForAvailableWeight;
30
29
  private _initializeRateLimitInfo;
31
- private _getBatchSize;
32
30
  private _notifyError;
33
- private _updateUsedWeight;
34
31
  }
35
32
  declare class BinanceSingleConnectionRealTimeFeed extends RealTimeFeedBase {
36
33
  protected wssURL: string;
@@ -1 +1 @@
1
- {"version":3,"file":"binance.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/binance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"binance.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/binance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,+BAA+B,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAoBxG,QAAA,MAAM,kCAAkC,mBAAmB,CAAA;AAC3D,QAAA,MAAM,kCAAkC,mBAAmB,CAAA;AAE3D,KAAK,wBAAwB,GAAG,OAAO,kCAAkC,GAAG,OAAO,kCAAkC,CAAA;AAsBrH,uBAAe,uBAAwB,SAAQ,+BAA+B;IAC5E,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACjC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAClC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAA;IACtD,SAAS,CAAC,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAA;IAEpD,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;CAyBvI;AAED,cAAM,gCAAiC,SAAQ,iBAAiB;IAQ5D,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAT/B,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAQ;IAC9C,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAQ;IAClD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAQ;IAC9C,OAAO,CAAC,yBAAyB,CAAQ;IACzC,OAAO,CAAC,qBAAqB,CAAkC;gBAG5C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EAAE,EACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;IAuBlC,SAAS,CAAC,iBAAiB;cAIX,gBAAgB,CAAC,YAAY,EAAE,QAAQ;YAwEzC,uBAAuB;YAYvB,wBAAwB;IAWtC,OAAO,CAAC,YAAY;CASrB;AAED,cAAM,mCAAoC,SAAQ,gBAAgB;IAI9D,SAAS,CAAC,MAAM,EAAE,MAAM;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,0BAA0B;gBAL3C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EACf,MAAM,EAAE,MAAM,EACP,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EACpC,0BAA0B,EAAE,MAAM,EACnD,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;IAKlC,SAAS,CAAC,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE;IAqBlE,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO;cAiB/B,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,OAAO;CAsF9F;AAED,cAAM,0CAA2C,SAAQ,mCAAmC;IAIxF,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAF5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EACR,WAAW,EAAE,wBAAwB,EACtD,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EACnC,yBAAyB,EAAE,MAAM,EACjC,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;cAclB,eAAe;CAGhC;AAED,qBAAa,mBAAoB,SAAQ,uBAAuB;IAC9D,SAAS,CAAC,MAAM,SAAyD;IACzE,SAAS,CAAC,OAAO,SAAmC;IAEpD,SAAS,CAAC,QAAQ;;MAEjB;IAED,SAAS,CAAC,yBAAyB,SAAK;CACzC;AAED,qBAAa,yBAA0B,SAAQ,uBAAuB;IACpE,SAAS,CAAC,MAAM,SAAwC;IACxD,SAAS,CAAC,OAAO,SAAkC;IAEnD,SAAS,CAAC,QAAQ;;MAEjB;IAED,SAAS,CAAC,yBAAyB,SAAK;CACzC;AAED,qBAAa,qBAAsB,SAAQ,uBAAuB;IAChE,SAAS,CAAC,MAAM,SAAwC;IACxD,SAAS,CAAC,OAAO,SAAkC;IAEnD,SAAS,CAAC,QAAQ;;MAEjB;IAED,SAAS,CAAC,yBAAyB,SAAK;CACzC;AAED,qBAAa,0BAA2B,SAAQ,uBAAuB;IACrE,SAAS,CAAC,MAAM,SAAgF;IAChG,SAAS,CAAC,OAAO,SAAqC;IAEtD,SAAS,CAAC,QAAQ;;;MAGjB;IAED,SAAS,CAAC,yBAAyB,SAAK;IAExC,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;CAwCvI;AAED,qBAAa,2BAA4B,SAAQ,uBAAuB;IACtE,SAAS,CAAC,MAAM,SAAqC;IACrD,SAAS,CAAC,OAAO,SAAqC;IAEtD,SAAS,CAAC,QAAQ;;;;MAIjB;IAED,SAAS,CAAC,yBAAyB,SAAK;CACzC"}