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.
- package/dist/ws/subscriptionsmappers.d.ts.map +1 -1
- package/dist/ws/subscriptionsmappers.js +3 -1
- package/dist/ws/subscriptionsmappers.js.map +1 -1
- package/node_modules/tardis-dev/dist/consts.d.ts +3 -1
- package/node_modules/tardis-dev/dist/consts.d.ts.map +1 -1
- package/node_modules/tardis-dev/dist/consts.js +17 -0
- package/node_modules/tardis-dev/dist/consts.js.map +1 -1
- package/node_modules/tardis-dev/dist/handy.d.ts +13 -0
- package/node_modules/tardis-dev/dist/handy.d.ts.map +1 -1
- package/node_modules/tardis-dev/dist/handy.js +5 -1
- package/node_modules/tardis-dev/dist/handy.js.map +1 -1
- package/node_modules/tardis-dev/dist/mappers/ascendex.d.ts +4 -4
- package/node_modules/tardis-dev/dist/mappers/aster.d.ts +16 -0
- package/node_modules/tardis-dev/dist/mappers/aster.d.ts.map +1 -0
- package/node_modules/tardis-dev/dist/mappers/aster.js +294 -0
- package/node_modules/tardis-dev/dist/mappers/aster.js.map +1 -0
- package/node_modules/tardis-dev/dist/mappers/binance.d.ts +18 -18
- package/node_modules/tardis-dev/dist/mappers/binance.js +22 -22
- package/node_modules/tardis-dev/dist/mappers/binance.js.map +1 -1
- package/node_modules/tardis-dev/dist/mappers/binanceeuropeanoptions.d.ts +1 -1
- package/node_modules/tardis-dev/dist/mappers/bitfinex.d.ts +8 -8
- package/node_modules/tardis-dev/dist/mappers/bitflyer.d.ts +1 -1
- package/node_modules/tardis-dev/dist/mappers/bitget.d.ts +1 -1
- package/node_modules/tardis-dev/dist/mappers/bitmex.d.ts +2 -2
- package/node_modules/tardis-dev/dist/mappers/bitnomial.d.ts +1 -1
- package/node_modules/tardis-dev/dist/mappers/bitstamp.d.ts +1 -1
- package/node_modules/tardis-dev/dist/mappers/blockchaincom.d.ts +2 -2
- package/node_modules/tardis-dev/dist/mappers/bullish.d.ts +5 -5
- package/node_modules/tardis-dev/dist/mappers/bybit.d.ts +7 -7
- package/node_modules/tardis-dev/dist/mappers/bybitspot.d.ts +1 -1
- package/node_modules/tardis-dev/dist/mappers/coinbase.d.ts +1 -1
- package/node_modules/tardis-dev/dist/mappers/coinbaseinternational.d.ts +2 -2
- package/node_modules/tardis-dev/dist/mappers/coinflex.d.ts +1 -1
- package/node_modules/tardis-dev/dist/mappers/cryptocom.d.ts +5 -5
- package/node_modules/tardis-dev/dist/mappers/delta.d.ts +1 -1
- package/node_modules/tardis-dev/dist/mappers/deribit.d.ts +2 -2
- package/node_modules/tardis-dev/dist/mappers/dydx.d.ts +3 -3
- package/node_modules/tardis-dev/dist/mappers/dydxv4.d.ts +4 -4
- package/node_modules/tardis-dev/dist/mappers/ftx.d.ts +8 -8
- package/node_modules/tardis-dev/dist/mappers/gateio.d.ts +1 -1
- package/node_modules/tardis-dev/dist/mappers/gateiofutures.d.ts +4 -4
- package/node_modules/tardis-dev/dist/mappers/gemini.d.ts +1 -1
- package/node_modules/tardis-dev/dist/mappers/huobi.d.ts +26 -26
- package/node_modules/tardis-dev/dist/mappers/hyperliquid.d.ts +3 -3
- package/node_modules/tardis-dev/dist/mappers/index.d.ts +179 -161
- package/node_modules/tardis-dev/dist/mappers/index.d.ts.map +1 -1
- package/node_modules/tardis-dev/dist/mappers/index.js +2 -1
- package/node_modules/tardis-dev/dist/mappers/index.js.map +1 -1
- package/node_modules/tardis-dev/dist/mappers/kucoin.d.ts +3 -3
- package/node_modules/tardis-dev/dist/mappers/kucoinfutures.d.ts +4 -4
- package/node_modules/tardis-dev/dist/mappers/lighter.d.ts +5 -5
- package/node_modules/tardis-dev/dist/mappers/mexc.d.ts +3 -3
- package/node_modules/tardis-dev/dist/mappers/mexcfutures.d.ts +3 -3
- package/node_modules/tardis-dev/dist/mappers/okex.d.ts +15 -15
- package/node_modules/tardis-dev/dist/mappers/phemex.d.ts +1 -1
- package/node_modules/tardis-dev/dist/mappers/polymarket.d.ts +3 -3
- package/node_modules/tardis-dev/dist/mappers/registry.d.ts.map +1 -1
- package/node_modules/tardis-dev/dist/mappers/registry.js.map +1 -1
- package/node_modules/tardis-dev/dist/mappers/serum.d.ts +9 -9
- package/node_modules/tardis-dev/dist/mappers/upbit.d.ts +2 -2
- package/node_modules/tardis-dev/dist/realtimefeeds/aster.d.ts +53 -0
- package/node_modules/tardis-dev/dist/realtimefeeds/aster.d.ts.map +1 -0
- package/node_modules/tardis-dev/dist/realtimefeeds/aster.js +271 -0
- package/node_modules/tardis-dev/dist/realtimefeeds/aster.js.map +1 -0
- package/node_modules/tardis-dev/dist/realtimefeeds/binance.d.ts +1 -4
- package/node_modules/tardis-dev/dist/realtimefeeds/binance.d.ts.map +1 -1
- package/node_modules/tardis-dev/dist/realtimefeeds/binance.js +36 -95
- package/node_modules/tardis-dev/dist/realtimefeeds/binance.js.map +1 -1
- package/node_modules/tardis-dev/dist/realtimefeeds/index.d.ts.map +1 -1
- package/node_modules/tardis-dev/dist/realtimefeeds/index.js +3 -0
- package/node_modules/tardis-dev/dist/realtimefeeds/index.js.map +1 -1
- package/node_modules/tardis-dev/dist/realtimefeeds/realtimefeed.d.ts.map +1 -1
- package/node_modules/tardis-dev/dist/realtimefeeds/realtimefeed.js +12 -3
- package/node_modules/tardis-dev/dist/realtimefeeds/realtimefeed.js.map +1 -1
- package/node_modules/tardis-dev/dist/realtimefeeds/requestweight.d.ts +14 -0
- package/node_modules/tardis-dev/dist/realtimefeeds/requestweight.d.ts.map +1 -0
- package/node_modules/tardis-dev/dist/realtimefeeds/requestweight.js +72 -0
- package/node_modules/tardis-dev/dist/realtimefeeds/requestweight.js.map +1 -0
- package/node_modules/tardis-dev/package.json +2 -2
- package/node_modules/tardis-dev/src/consts.ts +18 -0
- package/node_modules/tardis-dev/src/handy.ts +6 -1
- package/node_modules/tardis-dev/src/mappers/aster.ts +438 -0
- package/node_modules/tardis-dev/src/mappers/binance.ts +23 -21
- package/node_modules/tardis-dev/src/mappers/bitfinex.ts +1 -2
- package/node_modules/tardis-dev/src/mappers/index.ts +2 -0
- package/node_modules/tardis-dev/src/mappers/registry.ts +1 -2
- package/node_modules/tardis-dev/src/realtimefeeds/aster.ts +388 -0
- package/node_modules/tardis-dev/src/realtimefeeds/binance.ts +59 -145
- package/node_modules/tardis-dev/src/realtimefeeds/index.ts +3 -0
- package/node_modules/tardis-dev/src/realtimefeeds/realtimefeed.ts +12 -3
- package/node_modules/tardis-dev/src/realtimefeeds/requestweight.ts +91 -0
- package/package.json +3 -3
- 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
|
|
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":"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;
|
|
1
|
+
{"version":3,"file":"binance.d.ts","sourceRoot":"","sources":["../../src/realtimefeeds/binance.ts"],"names":[],"mappings":"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"}
|