tardis-dev 14.2.3 → 15.0.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/README.md +42 -54
- package/dist/apikeyaccessinfo.d.ts +1 -1
- package/dist/apikeyaccessinfo.d.ts.map +1 -1
- package/dist/apikeyaccessinfo.js +7 -12
- package/dist/apikeyaccessinfo.js.map +1 -1
- package/dist/binarysplit.d.ts +2 -1
- package/dist/binarysplit.d.ts.map +1 -1
- package/dist/binarysplit.js +2 -6
- package/dist/binarysplit.js.map +1 -1
- package/dist/clearcache.d.ts +1 -1
- package/dist/clearcache.d.ts.map +1 -1
- package/dist/clearcache.js +19 -22
- package/dist/clearcache.js.map +1 -1
- package/dist/combine.js +5 -8
- package/dist/combine.js.map +1 -1
- package/dist/computable/booksnapshot.d.ts +3 -3
- package/dist/computable/booksnapshot.d.ts.map +1 -1
- package/dist/computable/booksnapshot.js +5 -9
- package/dist/computable/booksnapshot.js.map +1 -1
- package/dist/computable/computable.d.ts +1 -1
- package/dist/computable/computable.d.ts.map +1 -1
- package/dist/computable/computable.js +1 -4
- package/dist/computable/computable.js.map +1 -1
- package/dist/computable/index.d.ts +3 -3
- package/dist/computable/index.d.ts.map +1 -1
- package/dist/computable/index.js +3 -19
- package/dist/computable/index.js.map +1 -1
- package/dist/computable/tradebar.d.ts +2 -2
- package/dist/computable/tradebar.d.ts.map +1 -1
- package/dist/computable/tradebar.js +1 -5
- package/dist/computable/tradebar.js.map +1 -1
- package/dist/consts.js +2 -5
- package/dist/consts.js.map +1 -1
- package/dist/debug.js +2 -8
- package/dist/debug.js.map +1 -1
- package/dist/downloaddatasets.d.ts +2 -2
- package/dist/downloaddatasets.d.ts.map +1 -1
- package/dist/downloaddatasets.js +21 -28
- package/dist/downloaddatasets.js.map +1 -1
- package/dist/exchangedetails.d.ts +1 -1
- package/dist/exchangedetails.d.ts.map +1 -1
- package/dist/exchangedetails.js +6 -9
- package/dist/exchangedetails.js.map +1 -1
- package/dist/filter.d.ts +1 -1
- package/dist/filter.d.ts.map +1 -1
- package/dist/filter.js +4 -8
- package/dist/filter.js.map +1 -1
- package/dist/handy.d.ts +22 -4
- package/dist/handy.d.ts.map +1 -1
- package/dist/handy.js +257 -130
- package/dist/handy.js.map +1 -1
- package/dist/index.d.ts +16 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -34
- package/dist/index.js.map +1 -1
- package/dist/instrumentinfo.d.ts +2 -2
- package/dist/instrumentinfo.d.ts.map +1 -1
- package/dist/instrumentinfo.js +7 -11
- package/dist/instrumentinfo.js.map +1 -1
- package/dist/mappers/ascendex.d.ts +2 -2
- package/dist/mappers/ascendex.d.ts.map +1 -1
- package/dist/mappers/ascendex.js +11 -18
- package/dist/mappers/ascendex.js.map +1 -1
- package/dist/mappers/binance.d.ts +3 -3
- package/dist/mappers/binance.d.ts.map +1 -1
- package/dist/mappers/binance.js +26 -35
- package/dist/mappers/binance.js.map +1 -1
- package/dist/mappers/binancedex.d.ts +2 -2
- package/dist/mappers/binancedex.d.ts.map +1 -1
- package/dist/mappers/binancedex.js +7 -10
- package/dist/mappers/binancedex.js.map +1 -1
- package/dist/mappers/binanceeuropeanoptions.d.ts +2 -2
- package/dist/mappers/binanceeuropeanoptions.d.ts.map +1 -1
- package/dist/mappers/binanceeuropeanoptions.js +40 -50
- package/dist/mappers/binanceeuropeanoptions.js.map +1 -1
- package/dist/mappers/bitfinex.d.ts +2 -2
- package/dist/mappers/bitfinex.d.ts.map +1 -1
- package/dist/mappers/bitfinex.js +12 -20
- package/dist/mappers/bitfinex.js.map +1 -1
- package/dist/mappers/bitflyer.d.ts +2 -2
- package/dist/mappers/bitflyer.d.ts.map +1 -1
- package/dist/mappers/bitflyer.js +9 -13
- package/dist/mappers/bitflyer.js.map +1 -1
- package/dist/mappers/bitget.d.ts +2 -2
- package/dist/mappers/bitget.d.ts.map +1 -1
- package/dist/mappers/bitget.js +10 -17
- package/dist/mappers/bitget.js.map +1 -1
- package/dist/mappers/bitmex.d.ts +2 -2
- package/dist/mappers/bitmex.d.ts.map +1 -1
- package/dist/mappers/bitmex.js +17 -22
- package/dist/mappers/bitmex.js.map +1 -1
- package/dist/mappers/bitnomial.d.ts +2 -2
- package/dist/mappers/bitnomial.d.ts.map +1 -1
- package/dist/mappers/bitnomial.js +7 -11
- package/dist/mappers/bitnomial.js.map +1 -1
- package/dist/mappers/bitstamp.d.ts +2 -2
- package/dist/mappers/bitstamp.d.ts.map +1 -1
- package/dist/mappers/bitstamp.js +5 -9
- package/dist/mappers/bitstamp.js.map +1 -1
- package/dist/mappers/blockchaincom.d.ts +2 -2
- package/dist/mappers/blockchaincom.d.ts.map +1 -1
- package/dist/mappers/blockchaincom.js +5 -10
- package/dist/mappers/blockchaincom.js.map +1 -1
- package/dist/mappers/bybit.d.ts +2 -2
- package/dist/mappers/bybit.d.ts.map +1 -1
- package/dist/mappers/bybit.js +41 -55
- package/dist/mappers/bybit.js.map +1 -1
- package/dist/mappers/bybitspot.d.ts +2 -2
- package/dist/mappers/bybitspot.d.ts.map +1 -1
- package/dist/mappers/bybitspot.js +7 -13
- package/dist/mappers/bybitspot.js.map +1 -1
- package/dist/mappers/coinbase.d.ts +2 -2
- package/dist/mappers/coinbase.d.ts.map +1 -1
- package/dist/mappers/coinbase.js +11 -15
- package/dist/mappers/coinbase.js.map +1 -1
- package/dist/mappers/coinbaseinternational.d.ts +2 -2
- package/dist/mappers/coinbaseinternational.d.ts.map +1 -1
- package/dist/mappers/coinbaseinternational.js +12 -17
- package/dist/mappers/coinbaseinternational.js.map +1 -1
- package/dist/mappers/coinflex.d.ts +2 -2
- package/dist/mappers/coinflex.d.ts.map +1 -1
- package/dist/mappers/coinflex.js +9 -13
- package/dist/mappers/coinflex.js.map +1 -1
- package/dist/mappers/cryptocom.d.ts +2 -2
- package/dist/mappers/cryptocom.d.ts.map +1 -1
- package/dist/mappers/cryptocom.js +11 -18
- package/dist/mappers/cryptocom.js.map +1 -1
- package/dist/mappers/cryptofacilities.d.ts +2 -2
- package/dist/mappers/cryptofacilities.d.ts.map +1 -1
- package/dist/mappers/cryptofacilities.js +13 -17
- package/dist/mappers/cryptofacilities.js.map +1 -1
- package/dist/mappers/delta.d.ts +2 -2
- package/dist/mappers/delta.d.ts.map +1 -1
- package/dist/mappers/delta.js +17 -24
- package/dist/mappers/delta.js.map +1 -1
- package/dist/mappers/deribit.d.ts +2 -2
- package/dist/mappers/deribit.d.ts.map +1 -1
- package/dist/mappers/deribit.js +20 -25
- package/dist/mappers/deribit.js.map +1 -1
- package/dist/mappers/dydx.d.ts +2 -2
- package/dist/mappers/dydx.d.ts.map +1 -1
- package/dist/mappers/dydx.js +9 -15
- package/dist/mappers/dydx.js.map +1 -1
- package/dist/mappers/dydxv4.d.ts +2 -2
- package/dist/mappers/dydxv4.d.ts.map +1 -1
- package/dist/mappers/dydxv4.js +11 -18
- package/dist/mappers/dydxv4.js.map +1 -1
- package/dist/mappers/ftx.d.ts +2 -2
- package/dist/mappers/ftx.d.ts.map +1 -1
- package/dist/mappers/ftx.js +22 -31
- package/dist/mappers/ftx.js.map +1 -1
- package/dist/mappers/gateio.d.ts +3 -3
- package/dist/mappers/gateio.d.ts.map +1 -1
- package/dist/mappers/gateio.js +17 -26
- package/dist/mappers/gateio.js.map +1 -1
- package/dist/mappers/gateiofutures.d.ts +7 -7
- package/dist/mappers/gateiofutures.d.ts.map +1 -1
- package/dist/mappers/gateiofutures.js +22 -25
- package/dist/mappers/gateiofutures.js.map +1 -1
- package/dist/mappers/gemini.d.ts +2 -2
- package/dist/mappers/gemini.d.ts.map +1 -1
- package/dist/mappers/gemini.js +5 -8
- package/dist/mappers/gemini.js.map +1 -1
- package/dist/mappers/hitbtc.d.ts +2 -2
- package/dist/mappers/hitbtc.d.ts.map +1 -1
- package/dist/mappers/hitbtc.js +5 -8
- package/dist/mappers/hitbtc.js.map +1 -1
- package/dist/mappers/huobi.d.ts +4 -4
- package/dist/mappers/huobi.d.ts.map +1 -1
- package/dist/mappers/huobi.js +32 -42
- package/dist/mappers/huobi.js.map +1 -1
- package/dist/mappers/hyperliquid.d.ts +2 -2
- package/dist/mappers/hyperliquid.d.ts.map +1 -1
- package/dist/mappers/hyperliquid.js +6 -13
- package/dist/mappers/hyperliquid.js.map +1 -1
- package/dist/mappers/index.d.ts +38 -38
- package/dist/mappers/index.d.ts.map +1 -1
- package/dist/mappers/index.js +273 -296
- package/dist/mappers/index.js.map +1 -1
- package/dist/mappers/kraken.d.ts +2 -2
- package/dist/mappers/kraken.d.ts.map +1 -1
- package/dist/mappers/kraken.js +11 -14
- package/dist/mappers/kraken.js.map +1 -1
- package/dist/mappers/kucoin.d.ts +3 -3
- package/dist/mappers/kucoin.d.ts.map +1 -1
- package/dist/mappers/kucoin.js +10 -16
- package/dist/mappers/kucoin.js.map +1 -1
- package/dist/mappers/kucoinfutures.d.ts +3 -3
- package/dist/mappers/kucoinfutures.d.ts.map +1 -1
- package/dist/mappers/kucoinfutures.js +15 -22
- package/dist/mappers/kucoinfutures.js.map +1 -1
- package/dist/mappers/mapper.d.ts +1 -1
- package/dist/mappers/mapper.d.ts.map +1 -1
- package/dist/mappers/mapper.js +1 -5
- package/dist/mappers/mapper.js.map +1 -1
- package/dist/mappers/okex.d.ts +2 -2
- package/dist/mappers/okex.d.ts.map +1 -1
- package/dist/mappers/okex.js +65 -80
- package/dist/mappers/okex.js.map +1 -1
- package/dist/mappers/okexspreads.d.ts +2 -2
- package/dist/mappers/okexspreads.d.ts.map +1 -1
- package/dist/mappers/okexspreads.js +7 -13
- package/dist/mappers/okexspreads.js.map +1 -1
- package/dist/mappers/phemex.d.ts +2 -2
- package/dist/mappers/phemex.d.ts.map +1 -1
- package/dist/mappers/phemex.js +5 -9
- package/dist/mappers/phemex.js.map +1 -1
- package/dist/mappers/poloniex.d.ts +2 -2
- package/dist/mappers/poloniex.d.ts.map +1 -1
- package/dist/mappers/poloniex.js +9 -16
- package/dist/mappers/poloniex.js.map +1 -1
- package/dist/mappers/serum.d.ts +2 -2
- package/dist/mappers/serum.d.ts.map +1 -1
- package/dist/mappers/serum.js +11 -17
- package/dist/mappers/serum.js.map +1 -1
- package/dist/mappers/upbit.d.ts +2 -2
- package/dist/mappers/upbit.d.ts.map +1 -1
- package/dist/mappers/upbit.js +7 -12
- package/dist/mappers/upbit.js.map +1 -1
- package/dist/mappers/woox.d.ts +2 -2
- package/dist/mappers/woox.d.ts.map +1 -1
- package/dist/mappers/woox.js +11 -17
- package/dist/mappers/woox.js.map +1 -1
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +9 -14
- package/dist/options.js.map +1 -1
- package/dist/orderbook.d.ts +1 -1
- package/dist/orderbook.d.ts.map +1 -1
- package/dist/orderbook.js +4 -8
- package/dist/orderbook.js.map +1 -1
- package/dist/realtimefeeds/ascendex.d.ts +2 -2
- package/dist/realtimefeeds/ascendex.d.ts.map +1 -1
- package/dist/realtimefeeds/ascendex.js +5 -9
- package/dist/realtimefeeds/ascendex.js.map +1 -1
- package/dist/realtimefeeds/binance.d.ts +13 -2
- package/dist/realtimefeeds/binance.d.ts.map +1 -1
- package/dist/realtimefeeds/binance.js +69 -33
- package/dist/realtimefeeds/binance.js.map +1 -1
- package/dist/realtimefeeds/binancedex.d.ts +2 -2
- package/dist/realtimefeeds/binancedex.d.ts.map +1 -1
- package/dist/realtimefeeds/binancedex.js +5 -9
- package/dist/realtimefeeds/binancedex.js.map +1 -1
- package/dist/realtimefeeds/binanceeuropeanoptions.d.ts +2 -2
- package/dist/realtimefeeds/binanceeuropeanoptions.d.ts.map +1 -1
- package/dist/realtimefeeds/binanceeuropeanoptions.js +5 -9
- package/dist/realtimefeeds/binanceeuropeanoptions.js.map +1 -1
- package/dist/realtimefeeds/bitfinex.d.ts +2 -2
- package/dist/realtimefeeds/bitfinex.d.ts.map +1 -1
- package/dist/realtimefeeds/bitfinex.js +2 -6
- package/dist/realtimefeeds/bitfinex.js.map +1 -1
- package/dist/realtimefeeds/bitflyer.d.ts +2 -2
- package/dist/realtimefeeds/bitflyer.d.ts.map +1 -1
- package/dist/realtimefeeds/bitflyer.js +2 -6
- package/dist/realtimefeeds/bitflyer.js.map +1 -1
- package/dist/realtimefeeds/bitget.d.ts +2 -2
- package/dist/realtimefeeds/bitget.d.ts.map +1 -1
- package/dist/realtimefeeds/bitget.js +6 -11
- package/dist/realtimefeeds/bitget.js.map +1 -1
- package/dist/realtimefeeds/bitmex.d.ts +2 -2
- package/dist/realtimefeeds/bitmex.d.ts.map +1 -1
- package/dist/realtimefeeds/bitmex.js +4 -8
- package/dist/realtimefeeds/bitmex.js.map +1 -1
- package/dist/realtimefeeds/bitnomial.d.ts +2 -2
- package/dist/realtimefeeds/bitnomial.d.ts.map +1 -1
- package/dist/realtimefeeds/bitnomial.js +2 -6
- package/dist/realtimefeeds/bitnomial.js.map +1 -1
- package/dist/realtimefeeds/bitstamp.d.ts +2 -2
- package/dist/realtimefeeds/bitstamp.d.ts.map +1 -1
- package/dist/realtimefeeds/bitstamp.js +5 -9
- package/dist/realtimefeeds/bitstamp.js.map +1 -1
- package/dist/realtimefeeds/blockchaincom.d.ts +2 -2
- package/dist/realtimefeeds/blockchaincom.d.ts.map +1 -1
- package/dist/realtimefeeds/blockchaincom.js +4 -8
- package/dist/realtimefeeds/blockchaincom.js.map +1 -1
- package/dist/realtimefeeds/bybit.d.ts +2 -2
- package/dist/realtimefeeds/bybit.d.ts.map +1 -1
- package/dist/realtimefeeds/bybit.js +8 -14
- package/dist/realtimefeeds/bybit.js.map +1 -1
- package/dist/realtimefeeds/coinbase.d.ts +2 -2
- package/dist/realtimefeeds/coinbase.d.ts.map +1 -1
- package/dist/realtimefeeds/coinbase.js +4 -11
- package/dist/realtimefeeds/coinbase.js.map +1 -1
- package/dist/realtimefeeds/coinbaseinternational.d.ts +2 -2
- package/dist/realtimefeeds/coinbaseinternational.d.ts.map +1 -1
- package/dist/realtimefeeds/coinbaseinternational.js +4 -11
- package/dist/realtimefeeds/coinbaseinternational.js.map +1 -1
- package/dist/realtimefeeds/coinflex.d.ts +2 -2
- package/dist/realtimefeeds/coinflex.d.ts.map +1 -1
- package/dist/realtimefeeds/coinflex.js +2 -6
- package/dist/realtimefeeds/coinflex.js.map +1 -1
- package/dist/realtimefeeds/cryptocom.d.ts +2 -2
- package/dist/realtimefeeds/cryptocom.d.ts.map +1 -1
- package/dist/realtimefeeds/cryptocom.js +2 -6
- package/dist/realtimefeeds/cryptocom.js.map +1 -1
- package/dist/realtimefeeds/cryptofacilities.d.ts +2 -2
- package/dist/realtimefeeds/cryptofacilities.d.ts.map +1 -1
- package/dist/realtimefeeds/cryptofacilities.js +2 -6
- package/dist/realtimefeeds/cryptofacilities.js.map +1 -1
- package/dist/realtimefeeds/delta.d.ts +2 -2
- package/dist/realtimefeeds/delta.d.ts.map +1 -1
- package/dist/realtimefeeds/delta.js +2 -6
- package/dist/realtimefeeds/delta.js.map +1 -1
- package/dist/realtimefeeds/deribit.d.ts +2 -2
- package/dist/realtimefeeds/deribit.d.ts.map +1 -1
- package/dist/realtimefeeds/deribit.js +4 -8
- package/dist/realtimefeeds/deribit.js.map +1 -1
- package/dist/realtimefeeds/dydx.d.ts +2 -2
- package/dist/realtimefeeds/dydx.d.ts.map +1 -1
- package/dist/realtimefeeds/dydx.js +2 -6
- package/dist/realtimefeeds/dydx.js.map +1 -1
- package/dist/realtimefeeds/dydx_v4.d.ts +2 -2
- package/dist/realtimefeeds/dydx_v4.d.ts.map +1 -1
- package/dist/realtimefeeds/dydx_v4.js +2 -6
- package/dist/realtimefeeds/dydx_v4.js.map +1 -1
- package/dist/realtimefeeds/ftx.d.ts +2 -2
- package/dist/realtimefeeds/ftx.d.ts.map +1 -1
- package/dist/realtimefeeds/ftx.js +13 -18
- package/dist/realtimefeeds/ftx.js.map +1 -1
- package/dist/realtimefeeds/gateio.d.ts +2 -2
- package/dist/realtimefeeds/gateio.d.ts.map +1 -1
- package/dist/realtimefeeds/gateio.js +2 -6
- package/dist/realtimefeeds/gateio.js.map +1 -1
- package/dist/realtimefeeds/gateiofutures.d.ts +5 -2
- package/dist/realtimefeeds/gateiofutures.d.ts.map +1 -1
- package/dist/realtimefeeds/gateiofutures.js +4 -7
- package/dist/realtimefeeds/gateiofutures.js.map +1 -1
- package/dist/realtimefeeds/gemini.d.ts +2 -2
- package/dist/realtimefeeds/gemini.d.ts.map +1 -1
- package/dist/realtimefeeds/gemini.js +2 -6
- package/dist/realtimefeeds/gemini.js.map +1 -1
- package/dist/realtimefeeds/hitbtc.d.ts +2 -2
- package/dist/realtimefeeds/hitbtc.d.ts.map +1 -1
- package/dist/realtimefeeds/hitbtc.js +2 -6
- package/dist/realtimefeeds/hitbtc.js.map +1 -1
- package/dist/realtimefeeds/huobi.d.ts +2 -2
- package/dist/realtimefeeds/huobi.d.ts.map +1 -1
- package/dist/realtimefeeds/huobi.js +36 -44
- package/dist/realtimefeeds/huobi.js.map +1 -1
- package/dist/realtimefeeds/hyperliquid.d.ts +2 -2
- package/dist/realtimefeeds/hyperliquid.d.ts.map +1 -1
- package/dist/realtimefeeds/hyperliquid.js +2 -6
- package/dist/realtimefeeds/hyperliquid.js.map +1 -1
- package/dist/realtimefeeds/index.d.ts +4 -4
- package/dist/realtimefeeds/index.d.ts.map +1 -1
- package/dist/realtimefeeds/index.js +101 -120
- package/dist/realtimefeeds/index.js.map +1 -1
- package/dist/realtimefeeds/kraken.d.ts +2 -2
- package/dist/realtimefeeds/kraken.d.ts.map +1 -1
- package/dist/realtimefeeds/kraken.js +2 -6
- package/dist/realtimefeeds/kraken.js.map +1 -1
- package/dist/realtimefeeds/kucoin.d.ts +2 -2
- package/dist/realtimefeeds/kucoin.d.ts.map +1 -1
- package/dist/realtimefeeds/kucoin.js +10 -14
- package/dist/realtimefeeds/kucoin.js.map +1 -1
- package/dist/realtimefeeds/kucoinfutures.d.ts +2 -2
- package/dist/realtimefeeds/kucoinfutures.d.ts.map +1 -1
- package/dist/realtimefeeds/kucoinfutures.js +12 -19
- package/dist/realtimefeeds/kucoinfutures.js.map +1 -1
- package/dist/realtimefeeds/mango.d.ts +1 -1
- package/dist/realtimefeeds/mango.d.ts.map +1 -1
- package/dist/realtimefeeds/mango.js +2 -6
- package/dist/realtimefeeds/mango.js.map +1 -1
- package/dist/realtimefeeds/okex.d.ts +2 -2
- package/dist/realtimefeeds/okex.d.ts.map +1 -1
- package/dist/realtimefeeds/okex.js +9 -18
- package/dist/realtimefeeds/okex.js.map +1 -1
- package/dist/realtimefeeds/okexspreads.d.ts +2 -2
- package/dist/realtimefeeds/okexspreads.d.ts.map +1 -1
- package/dist/realtimefeeds/okexspreads.js +6 -13
- package/dist/realtimefeeds/okexspreads.js.map +1 -1
- package/dist/realtimefeeds/phemex.d.ts +2 -2
- package/dist/realtimefeeds/phemex.d.ts.map +1 -1
- package/dist/realtimefeeds/phemex.js +2 -6
- package/dist/realtimefeeds/phemex.js.map +1 -1
- package/dist/realtimefeeds/poloniex.d.ts +2 -2
- package/dist/realtimefeeds/poloniex.d.ts.map +1 -1
- package/dist/realtimefeeds/poloniex.js +2 -6
- package/dist/realtimefeeds/poloniex.js.map +1 -1
- package/dist/realtimefeeds/realtimefeed.d.ts +2 -1
- package/dist/realtimefeeds/realtimefeed.d.ts.map +1 -1
- package/dist/realtimefeeds/realtimefeed.js +33 -38
- package/dist/realtimefeeds/realtimefeed.js.map +1 -1
- package/dist/realtimefeeds/serum.d.ts +2 -2
- package/dist/realtimefeeds/serum.d.ts.map +1 -1
- package/dist/realtimefeeds/serum.js +2 -6
- package/dist/realtimefeeds/serum.js.map +1 -1
- package/dist/realtimefeeds/staratlas.d.ts +1 -1
- package/dist/realtimefeeds/staratlas.d.ts.map +1 -1
- package/dist/realtimefeeds/staratlas.js +2 -6
- package/dist/realtimefeeds/staratlas.js.map +1 -1
- package/dist/realtimefeeds/upbit.d.ts +2 -2
- package/dist/realtimefeeds/upbit.d.ts.map +1 -1
- package/dist/realtimefeeds/upbit.js +2 -6
- package/dist/realtimefeeds/upbit.js.map +1 -1
- package/dist/realtimefeeds/woox.d.ts +2 -2
- package/dist/realtimefeeds/woox.d.ts.map +1 -1
- package/dist/realtimefeeds/woox.js +5 -9
- package/dist/realtimefeeds/woox.js.map +1 -1
- package/dist/replay.d.ts +6 -3
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +62 -71
- package/dist/replay.js.map +1 -1
- package/dist/stream.d.ts +6 -3
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +9 -13
- package/dist/stream.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -2
- package/dist/worker.d.ts +1 -1
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +22 -27
- package/dist/worker.js.map +1 -1
- package/example.js +9 -9
- package/package.json +30 -15
- package/src/apikeyaccessinfo.ts +9 -11
- package/src/binarysplit.ts +2 -1
- package/src/clearcache.ts +8 -7
- package/src/computable/booksnapshot.ts +4 -4
- package/src/computable/computable.ts +1 -1
- package/src/computable/index.ts +3 -3
- package/src/computable/tradebar.ts +2 -2
- package/src/downloaddatasets.ts +7 -7
- package/src/exchangedetails.ts +5 -5
- package/src/filter.ts +2 -2
- package/src/handy.ts +286 -23
- package/src/index.ts +16 -16
- package/src/instrumentinfo.ts +9 -9
- package/src/mappers/ascendex.ts +3 -3
- package/src/mappers/binance.ts +4 -4
- package/src/mappers/binancedex.ts +3 -3
- package/src/mappers/binanceeuropeanoptions.ts +3 -3
- package/src/mappers/bitfinex.ts +3 -3
- package/src/mappers/bitflyer.ts +3 -3
- package/src/mappers/bitget.ts +3 -3
- package/src/mappers/bitmex.ts +3 -3
- package/src/mappers/bitnomial.ts +3 -3
- package/src/mappers/bitstamp.ts +3 -3
- package/src/mappers/blockchaincom.ts +3 -3
- package/src/mappers/bybit.ts +3 -3
- package/src/mappers/bybitspot.ts +3 -3
- package/src/mappers/coinbase.ts +3 -3
- package/src/mappers/coinbaseinternational.ts +3 -3
- package/src/mappers/coinflex.ts +3 -3
- package/src/mappers/cryptocom.ts +3 -3
- package/src/mappers/cryptofacilities.ts +3 -3
- package/src/mappers/delta.ts +3 -3
- package/src/mappers/deribit.ts +3 -3
- package/src/mappers/dydx.ts +3 -3
- package/src/mappers/dydxv4.ts +3 -3
- package/src/mappers/ftx.ts +3 -3
- package/src/mappers/gateio.ts +4 -4
- package/src/mappers/gateiofutures.ts +18 -14
- package/src/mappers/gemini.ts +3 -3
- package/src/mappers/hitbtc.ts +3 -3
- package/src/mappers/huobi.ts +3 -3
- package/src/mappers/hyperliquid.ts +2 -2
- package/src/mappers/index.ts +49 -44
- package/src/mappers/kraken.ts +3 -3
- package/src/mappers/kucoin.ts +4 -4
- package/src/mappers/kucoinfutures.ts +4 -4
- package/src/mappers/mapper.ts +1 -1
- package/src/mappers/okex.ts +3 -3
- package/src/mappers/okexspreads.ts +3 -3
- package/src/mappers/phemex.ts +2 -2
- package/src/mappers/poloniex.ts +3 -3
- package/src/mappers/serum.ts +3 -3
- package/src/mappers/upbit.ts +3 -3
- package/src/mappers/woox.ts +3 -3
- package/src/options.ts +5 -2
- package/src/orderbook.ts +3 -2
- package/src/realtimefeeds/ascendex.ts +3 -3
- package/src/realtimefeeds/binance.ts +111 -20
- package/src/realtimefeeds/binancedex.ts +5 -5
- package/src/realtimefeeds/binanceeuropeanoptions.ts +3 -3
- package/src/realtimefeeds/bitfinex.ts +2 -2
- package/src/realtimefeeds/bitflyer.ts +2 -2
- package/src/realtimefeeds/bitget.ts +3 -3
- package/src/realtimefeeds/bitmex.ts +3 -3
- package/src/realtimefeeds/bitnomial.ts +2 -2
- package/src/realtimefeeds/bitstamp.ts +5 -5
- package/src/realtimefeeds/blockchaincom.ts +3 -3
- package/src/realtimefeeds/bybit.ts +3 -3
- package/src/realtimefeeds/coinbase.ts +2 -2
- package/src/realtimefeeds/coinbaseinternational.ts +2 -2
- package/src/realtimefeeds/coinflex.ts +2 -2
- package/src/realtimefeeds/cryptocom.ts +2 -2
- package/src/realtimefeeds/cryptofacilities.ts +2 -2
- package/src/realtimefeeds/delta.ts +2 -2
- package/src/realtimefeeds/deribit.ts +3 -3
- package/src/realtimefeeds/dydx.ts +2 -2
- package/src/realtimefeeds/dydx_v4.ts +2 -2
- package/src/realtimefeeds/ftx.ts +8 -8
- package/src/realtimefeeds/gateio.ts +2 -3
- package/src/realtimefeeds/gateiofutures.ts +3 -2
- package/src/realtimefeeds/gemini.ts +2 -2
- package/src/realtimefeeds/hitbtc.ts +2 -2
- package/src/realtimefeeds/huobi.ts +18 -18
- package/src/realtimefeeds/hyperliquid.ts +2 -2
- package/src/realtimefeeds/index.ts +43 -43
- package/src/realtimefeeds/kraken.ts +2 -2
- package/src/realtimefeeds/kucoin.ts +9 -9
- package/src/realtimefeeds/kucoinfutures.ts +9 -11
- package/src/realtimefeeds/mango.ts +1 -1
- package/src/realtimefeeds/okex.ts +3 -3
- package/src/realtimefeeds/okexspreads.ts +3 -3
- package/src/realtimefeeds/phemex.ts +2 -2
- package/src/realtimefeeds/poloniex.ts +2 -2
- package/src/realtimefeeds/realtimefeed.ts +8 -3
- package/src/realtimefeeds/serum.ts +2 -2
- package/src/realtimefeeds/staratlas.ts +1 -1
- package/src/realtimefeeds/upbit.ts +2 -2
- package/src/realtimefeeds/woox.ts +3 -3
- package/src/replay.ts +31 -35
- package/src/stream.ts +12 -23
- package/src/types.ts +1 -1
- package/src/worker.ts +3 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Writable } from 'stream'
|
|
2
|
-
import { batch,
|
|
3
|
-
import { Filter } from '../types'
|
|
4
|
-
import { MultiConnectionRealTimeFeedBase, PoolingClientBase, RealTimeFeedBase } from './realtimefeed'
|
|
2
|
+
import { batch, getJSON, wait } from '../handy.ts'
|
|
3
|
+
import { Filter } from '../types.ts'
|
|
4
|
+
import { MultiConnectionRealTimeFeedBase, PoolingClientBase, RealTimeFeedBase } from './realtimefeed.ts'
|
|
5
5
|
|
|
6
6
|
const binanceHttpOptions = {
|
|
7
7
|
timeout: 10 * 1000,
|
|
@@ -18,14 +18,19 @@ const OPEN_INTEREST_BATCH_SIZE = 10
|
|
|
18
18
|
const OPEN_INTEREST_REQUEST_WEIGHT = 1
|
|
19
19
|
const OPEN_INTEREST_POLLING_RECOVERY_MS = 1000
|
|
20
20
|
const OPEN_INTEREST_MAX_POLLING_INTERVAL_MS = 60 * 1000
|
|
21
|
+
const BINANCE_FUTURES_PUBLIC_CHANNELS = new Set(['bookTicker', 'depth', 'depthSnapshot', 'trade'])
|
|
22
|
+
const BINANCE_FUTURES_DEFAULT_WS_BASE_URL = 'wss://fstream.binance.com'
|
|
23
|
+
const BINANCE_FUTURES_PUBLIC_STREAM_PATH = '/public/stream'
|
|
24
|
+
const BINANCE_FUTURES_MARKET_STREAM_PATH = '/market/stream'
|
|
21
25
|
|
|
22
|
-
|
|
26
|
+
type BinanceFuturesStreamPath = typeof BINANCE_FUTURES_PUBLIC_STREAM_PATH | typeof BINANCE_FUTURES_MARKET_STREAM_PATH
|
|
27
|
+
|
|
28
|
+
function parseBinanceWeightHeader(headerValue: string | undefined) {
|
|
23
29
|
if (headerValue === undefined) {
|
|
24
30
|
return undefined
|
|
25
31
|
}
|
|
26
32
|
|
|
27
|
-
const
|
|
28
|
-
const parsed = Number.parseInt(header, 10)
|
|
33
|
+
const parsed = Number.parseInt(headerValue, 10)
|
|
29
34
|
|
|
30
35
|
return Number.isFinite(parsed) ? parsed : undefined
|
|
31
36
|
}
|
|
@@ -43,6 +48,26 @@ function getExchangeScopedNumberEnv(exchange: string, suffix: string, fallback:
|
|
|
43
48
|
return Number.isFinite(parsed) ? parsed : fallback
|
|
44
49
|
}
|
|
45
50
|
|
|
51
|
+
function getExchangeScopedWssUrlEnv(exchange: string) {
|
|
52
|
+
const envName = `WSS_URL_${exchange.toUpperCase().replace(/-/g, '_')}`
|
|
53
|
+
|
|
54
|
+
return process.env[envName]
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function normalizeBinanceSplitWsBaseUrl(wssUrl: string) {
|
|
58
|
+
return wssUrl
|
|
59
|
+
.replace(/\/(public|market|private)\/stream$/u, '')
|
|
60
|
+
.replace(/\/stream$/u, '')
|
|
61
|
+
.replace(/\/(public|market|private)$/u, '')
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function getBinanceFuturesWebSocketUrl(exchange: string, streamPath: BinanceFuturesStreamPath) {
|
|
65
|
+
const configuredWssUrl = getExchangeScopedWssUrlEnv(exchange) ?? BINANCE_FUTURES_DEFAULT_WS_BASE_URL
|
|
66
|
+
const normalizedBaseUrl = normalizeBinanceSplitWsBaseUrl(configuredWssUrl)
|
|
67
|
+
|
|
68
|
+
return `${normalizedBaseUrl}${streamPath}`
|
|
69
|
+
}
|
|
70
|
+
|
|
46
71
|
function getBinanceRequestWeightLimit(exchange: string, exchangeInfo: any) {
|
|
47
72
|
const configuredLimit = getExchangeScopedNumberEnv(exchange, 'REQUEST_WEIGHT_LIMIT', 0)
|
|
48
73
|
if (configuredLimit > 0) {
|
|
@@ -161,15 +186,15 @@ class BinanceFuturesOpenInterestClient extends PoolingClientBase {
|
|
|
161
186
|
|
|
162
187
|
const results = await Promise.allSettled(
|
|
163
188
|
instrumentsBatch.map(async (instrument) => {
|
|
164
|
-
const openInterestResponse = await
|
|
189
|
+
const openInterestResponse = await getJSON<any>(
|
|
165
190
|
`${this._httpURL}/openInterest?symbol=${instrument.toUpperCase()}`,
|
|
166
191
|
binanceHttpOptions
|
|
167
192
|
)
|
|
168
193
|
|
|
169
194
|
return {
|
|
170
195
|
instrument,
|
|
171
|
-
usedWeight: parseBinanceWeightHeader(openInterestResponse.headers['x-mbx-used-weight-1m']
|
|
172
|
-
data:
|
|
196
|
+
usedWeight: parseBinanceWeightHeader(openInterestResponse.headers['x-mbx-used-weight-1m']),
|
|
197
|
+
data: openInterestResponse.data
|
|
173
198
|
}
|
|
174
199
|
})
|
|
175
200
|
)
|
|
@@ -234,15 +259,12 @@ class BinanceFuturesOpenInterestClient extends PoolingClientBase {
|
|
|
234
259
|
}
|
|
235
260
|
|
|
236
261
|
private async _initializeRateLimitInfo() {
|
|
237
|
-
const exchangeInfoResponse = await
|
|
238
|
-
const exchangeInfo =
|
|
262
|
+
const exchangeInfoResponse = await getJSON<any>(`${this._httpURL}/exchangeInfo`, binanceHttpOptions)
|
|
263
|
+
const exchangeInfo = exchangeInfoResponse.data
|
|
239
264
|
|
|
240
265
|
this._requestWeightLimit = getBinanceRequestWeightLimit(this._exchange, exchangeInfo)
|
|
241
266
|
|
|
242
|
-
this._updateUsedWeight(
|
|
243
|
-
parseBinanceWeightHeader(exchangeInfoResponse.headers['x-mbx-used-weight-1m'] as string | string[] | undefined),
|
|
244
|
-
OPEN_INTEREST_REQUEST_WEIGHT
|
|
245
|
-
)
|
|
267
|
+
this._updateUsedWeight(parseBinanceWeightHeader(exchangeInfoResponse.headers['x-mbx-used-weight-1m']), OPEN_INTEREST_REQUEST_WEIGHT)
|
|
246
268
|
}
|
|
247
269
|
|
|
248
270
|
private _getBatchSize() {
|
|
@@ -332,8 +354,8 @@ class BinanceSingleConnectionRealTimeFeed extends RealTimeFeedBase {
|
|
|
332
354
|
return
|
|
333
355
|
}
|
|
334
356
|
|
|
335
|
-
const exchangeInfoResponse = await
|
|
336
|
-
const exchangeInfo =
|
|
357
|
+
const exchangeInfoResponse = await getJSON<any>(`${this._httpURL}/exchangeInfo`, binanceHttpOptions)
|
|
358
|
+
const exchangeInfo = exchangeInfoResponse.data
|
|
337
359
|
|
|
338
360
|
const DELAY_ENV = `${this._exchange.toUpperCase().replace(/-/g, '_')}_SNAPSHOTS_DELAY_MS`
|
|
339
361
|
const currentWeightLimit = getBinanceRequestWeightLimit(this._exchange, exchangeInfo)
|
|
@@ -386,7 +408,7 @@ class BinanceSingleConnectionRealTimeFeed extends RealTimeFeedBase {
|
|
|
386
408
|
await wait(delayMS)
|
|
387
409
|
}
|
|
388
410
|
|
|
389
|
-
const depthSnapshotResponse = await
|
|
411
|
+
const depthSnapshotResponse = await getJSON<any>(
|
|
390
412
|
`${this._httpURL}/depth?symbol=${symbol.toUpperCase()}&limit=1000`,
|
|
391
413
|
binanceHttpOptions
|
|
392
414
|
)
|
|
@@ -394,7 +416,7 @@ class BinanceSingleConnectionRealTimeFeed extends RealTimeFeedBase {
|
|
|
394
416
|
const snapshot = {
|
|
395
417
|
stream: `${symbol}@depthSnapshot`,
|
|
396
418
|
generated: true,
|
|
397
|
-
data:
|
|
419
|
+
data: depthSnapshotResponse.data
|
|
398
420
|
}
|
|
399
421
|
|
|
400
422
|
this.manualSnapshotsBuffer.push(snapshot)
|
|
@@ -417,6 +439,34 @@ class BinanceSingleConnectionRealTimeFeed extends RealTimeFeedBase {
|
|
|
417
439
|
}
|
|
418
440
|
}
|
|
419
441
|
|
|
442
|
+
class BinanceFuturesSingleConnectionRealTimeFeed extends BinanceSingleConnectionRealTimeFeed {
|
|
443
|
+
constructor(
|
|
444
|
+
exchange: string,
|
|
445
|
+
filters: Filter<string>[],
|
|
446
|
+
private readonly _streamPath: BinanceFuturesStreamPath,
|
|
447
|
+
httpURL: string,
|
|
448
|
+
suffixes: { [key: string]: string },
|
|
449
|
+
depthRequestRequestWeight: number,
|
|
450
|
+
timeoutIntervalMS: number | undefined,
|
|
451
|
+
onError?: (error: Error) => void
|
|
452
|
+
) {
|
|
453
|
+
super(
|
|
454
|
+
exchange,
|
|
455
|
+
filters,
|
|
456
|
+
getBinanceFuturesWebSocketUrl(exchange, _streamPath),
|
|
457
|
+
httpURL,
|
|
458
|
+
suffixes,
|
|
459
|
+
depthRequestRequestWeight,
|
|
460
|
+
timeoutIntervalMS,
|
|
461
|
+
onError
|
|
462
|
+
)
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
protected async getWebSocketUrl() {
|
|
466
|
+
return getBinanceFuturesWebSocketUrl(this._exchange, this._streamPath)
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
420
470
|
export class BinanceRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
421
471
|
protected wssURL = 'wss://stream.binance.com/stream?timeUnit=microsecond'
|
|
422
472
|
protected httpURL = 'https://api.binance.com/api/v1'
|
|
@@ -451,7 +501,7 @@ export class BinanceUSRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
451
501
|
}
|
|
452
502
|
|
|
453
503
|
export class BinanceFuturesRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
454
|
-
protected wssURL =
|
|
504
|
+
protected wssURL = `${BINANCE_FUTURES_DEFAULT_WS_BASE_URL}${BINANCE_FUTURES_PUBLIC_STREAM_PATH}`
|
|
455
505
|
protected httpURL = 'https://fapi.binance.com/fapi/v1'
|
|
456
506
|
|
|
457
507
|
protected suffixes = {
|
|
@@ -460,6 +510,47 @@ export class BinanceFuturesRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
|
460
510
|
}
|
|
461
511
|
|
|
462
512
|
protected depthRequestRequestWeight = 20
|
|
513
|
+
|
|
514
|
+
protected *_getRealTimeFeeds(exchange: string, filters: Filter<string>[], timeoutIntervalMS?: number, onError?: (error: Error) => void) {
|
|
515
|
+
const wsFilters = filters.filter(
|
|
516
|
+
(f) => f.channel !== 'openInterest' && f.channel !== 'recentTrades' && f.channel !== 'fundingInfo' && f.channel !== 'insuranceBalance'
|
|
517
|
+
)
|
|
518
|
+
|
|
519
|
+
const publicWsFilters = wsFilters.filter((f) => BINANCE_FUTURES_PUBLIC_CHANNELS.has(f.channel))
|
|
520
|
+
if (publicWsFilters.length > 0) {
|
|
521
|
+
yield new BinanceFuturesSingleConnectionRealTimeFeed(
|
|
522
|
+
exchange,
|
|
523
|
+
publicWsFilters,
|
|
524
|
+
BINANCE_FUTURES_PUBLIC_STREAM_PATH,
|
|
525
|
+
this.httpURL,
|
|
526
|
+
this.suffixes,
|
|
527
|
+
this.depthRequestRequestWeight,
|
|
528
|
+
timeoutIntervalMS,
|
|
529
|
+
onError
|
|
530
|
+
)
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
const marketWsFilters = wsFilters.filter((f) => BINANCE_FUTURES_PUBLIC_CHANNELS.has(f.channel) === false)
|
|
534
|
+
if (marketWsFilters.length > 0) {
|
|
535
|
+
yield new BinanceFuturesSingleConnectionRealTimeFeed(
|
|
536
|
+
exchange,
|
|
537
|
+
marketWsFilters,
|
|
538
|
+
BINANCE_FUTURES_MARKET_STREAM_PATH,
|
|
539
|
+
this.httpURL,
|
|
540
|
+
this.suffixes,
|
|
541
|
+
this.depthRequestRequestWeight,
|
|
542
|
+
timeoutIntervalMS,
|
|
543
|
+
onError
|
|
544
|
+
)
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
const openInterestFilters = filters.filter((f) => f.channel === 'openInterest')
|
|
548
|
+
if (openInterestFilters.length > 0) {
|
|
549
|
+
const instruments = openInterestFilters.flatMap((s) => s.symbols!)
|
|
550
|
+
|
|
551
|
+
yield new BinanceFuturesOpenInterestClient(exchange, this.httpURL, instruments, onError)
|
|
552
|
+
}
|
|
553
|
+
}
|
|
463
554
|
}
|
|
464
555
|
|
|
465
556
|
export class BinanceDeliveryRealTimeFeed extends BinanceRealTimeFeedBase {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Filter } from '../types'
|
|
3
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { getJSON } from '../handy.ts'
|
|
2
|
+
import { Filter } from '../types.ts'
|
|
3
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
4
4
|
|
|
5
5
|
export class BinanceDexRealTimeFeed extends RealTimeFeedBase {
|
|
6
6
|
protected wssURL = 'wss://dex.binance.org/api/ws'
|
|
@@ -42,14 +42,14 @@ export class BinanceDexRealTimeFeed extends RealTimeFeedBase {
|
|
|
42
42
|
return
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
const
|
|
45
|
+
const { data } = await getJSON<any>(`${this.httpURL}/depth?symbol=${symbol}&limit=1000`)
|
|
46
46
|
|
|
47
47
|
const snapshot = {
|
|
48
48
|
stream: `depthSnapshot`,
|
|
49
49
|
generated: true,
|
|
50
50
|
data: {
|
|
51
51
|
symbol,
|
|
52
|
-
...
|
|
52
|
+
...data
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { onlyUnique } from '../handy'
|
|
2
|
-
import { Filter } from '../types'
|
|
3
|
-
import { MultiConnectionRealTimeFeedBase, RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { onlyUnique } from '../handy.ts'
|
|
2
|
+
import { Filter } from '../types.ts'
|
|
3
|
+
import { MultiConnectionRealTimeFeedBase, RealTimeFeedBase } from './realtimefeed.ts'
|
|
4
4
|
|
|
5
5
|
export class BinanceEuropeanOptionsRealTimeFeed extends MultiConnectionRealTimeFeedBase {
|
|
6
6
|
protected *_getRealTimeFeeds(exchange: string, filters: Filter<string>[], timeoutIntervalMS?: number, onError?: (error: Error) => void) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Filter } from '../types'
|
|
2
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { Filter } from '../types.ts'
|
|
2
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
3
3
|
|
|
4
4
|
export class BitflyerRealTimeFeed extends RealTimeFeedBase {
|
|
5
5
|
protected wssURL = 'wss://ws.lightstream.bitflyer.com/json-rpc'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { batchObjects } from '../handy'
|
|
2
|
-
import { Filter } from '../types'
|
|
3
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { batchObjects } from '../handy.ts'
|
|
2
|
+
import { Filter } from '../types.ts'
|
|
3
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
4
4
|
|
|
5
5
|
abstract class BitgetRealTimeFeedBase extends RealTimeFeedBase {
|
|
6
6
|
protected throttleSubscribeMS = 100
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { batch } from '../handy'
|
|
2
|
-
import { Filter } from '../types'
|
|
3
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { batch } from '../handy.ts'
|
|
2
|
+
import { Filter } from '../types.ts'
|
|
3
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
4
4
|
|
|
5
5
|
export class BitmexRealTimeFeed extends RealTimeFeedBase {
|
|
6
6
|
protected readonly wssURL = 'wss://ws.bitmex.com/realtime'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Filter } from '../types'
|
|
2
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { Filter } from '../types.ts'
|
|
2
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
3
3
|
|
|
4
4
|
export class BitnomialRealTimeFeed extends RealTimeFeedBase {
|
|
5
5
|
protected wssURL = 'wss://bitnomial.com/exchange/ws'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Filter } from '../types'
|
|
3
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { getJSON } from '../handy.ts'
|
|
2
|
+
import { Filter } from '../types.ts'
|
|
3
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
4
4
|
|
|
5
5
|
export class BitstampRealTimeFeed extends RealTimeFeedBase {
|
|
6
6
|
protected wssURL = 'wss://ws.bitstamp.net'
|
|
@@ -50,10 +50,10 @@ export class BitstampRealTimeFeed extends RealTimeFeedBase {
|
|
|
50
50
|
return
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
const
|
|
53
|
+
const { data } = await getJSON(`${this.httpURL}/order_book/${symbol}?group=1`)
|
|
54
54
|
|
|
55
55
|
const snapshot = {
|
|
56
|
-
data
|
|
56
|
+
data,
|
|
57
57
|
event: 'snapshot',
|
|
58
58
|
channel: `diff_order_book_${symbol}`,
|
|
59
59
|
generated: true
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { wait } from '../handy'
|
|
2
|
-
import { Filter } from '../types'
|
|
3
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { wait } from '../handy.ts'
|
|
2
|
+
import { Filter } from '../types.ts'
|
|
3
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
4
4
|
|
|
5
5
|
export class BlockchainComRealTimeFeed extends RealTimeFeedBase {
|
|
6
6
|
protected readonly wssURL = 'wss://ws.blockchain.info/mercury-gateway/v1/ws'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { batch } from '../handy'
|
|
2
|
-
import { Filter } from '../types'
|
|
3
|
-
import { RealTimeFeedBase, MultiConnectionRealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { batch } from '../handy.ts'
|
|
2
|
+
import { Filter } from '../types.ts'
|
|
3
|
+
import { RealTimeFeedBase, MultiConnectionRealTimeFeedBase } from './realtimefeed.ts'
|
|
4
4
|
|
|
5
5
|
export class BybitRealTimeDataFeed extends MultiConnectionRealTimeFeedBase {
|
|
6
6
|
protected *_getRealTimeFeeds(exchange: string, filters: Filter<string>[], timeoutIntervalMS?: number, onError?: (error: Error) => void) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import crypto from 'crypto'
|
|
2
|
-
import { Filter } from '../types'
|
|
3
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
2
|
+
import { Filter } from '../types.ts'
|
|
3
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
4
4
|
|
|
5
5
|
export class CoinbaseRealTimeFeed extends RealTimeFeedBase {
|
|
6
6
|
private _hasCredentials =
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import crypto from 'crypto'
|
|
2
|
-
import { Filter } from '../types'
|
|
3
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
2
|
+
import { Filter } from '../types.ts'
|
|
3
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
4
4
|
|
|
5
5
|
export class CoinbaseInternationalRealTimeFeed extends RealTimeFeedBase {
|
|
6
6
|
private _hasCredentials =
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Filter } from '../types'
|
|
2
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { Filter } from '../types.ts'
|
|
2
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
3
3
|
|
|
4
4
|
export class CoinflexRealTimeFeed extends RealTimeFeedBase {
|
|
5
5
|
protected readonly wssURL = 'wss://v2api.coinflex.com/v2/websocket'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Filter } from '../types'
|
|
2
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { Filter } from '../types.ts'
|
|
2
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
3
3
|
|
|
4
4
|
export class CryptoComRealTimeFeed extends RealTimeFeedBase {
|
|
5
5
|
protected wssURL = 'wss://stream.crypto.com/exchange/v1/market'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Filter } from '../types'
|
|
2
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { Filter } from '../types.ts'
|
|
2
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
3
3
|
|
|
4
4
|
export class CryptofacilitiesRealTimeFeed extends RealTimeFeedBase {
|
|
5
5
|
protected wssURL = 'wss://futures.kraken.com/ws/v1'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Filter } from '../types'
|
|
2
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { Filter } from '../types.ts'
|
|
2
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
3
3
|
|
|
4
4
|
export class DeltaRealTimeFeed extends RealTimeFeedBase {
|
|
5
5
|
protected readonly wssURL = 'wss://socket.delta.exchange'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { wait } from '../handy'
|
|
2
|
-
import { Filter, FilterForExchange } from '../types'
|
|
3
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { wait } from '../handy.ts'
|
|
2
|
+
import { Filter, FilterForExchange } from '../types.ts'
|
|
3
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
4
4
|
|
|
5
5
|
export class DeribitRealTimeDataFeed extends RealTimeFeedBase {
|
|
6
6
|
protected get wssURL() {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Filter } from '../types'
|
|
2
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { Filter } from '../types.ts'
|
|
2
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
3
3
|
|
|
4
4
|
export class DydxRealTimeFeed extends RealTimeFeedBase {
|
|
5
5
|
protected readonly wssURL = 'wss://api.dydx.exchange/v3/ws'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Filter } from '../types'
|
|
2
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { Filter } from '../types.ts'
|
|
2
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
3
3
|
|
|
4
4
|
export class DydxV4RealTimeFeed extends RealTimeFeedBase {
|
|
5
5
|
protected readonly wssURL = 'wss://indexer.dydx.trade/v4/ws'
|
package/src/realtimefeeds/ftx.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Writable } from 'stream'
|
|
2
2
|
|
|
3
|
-
import { Filter } from '../types'
|
|
4
|
-
import { RealTimeFeedBase, PoolingClientBase, MultiConnectionRealTimeFeedBase } from './realtimefeed'
|
|
5
|
-
import { batch,
|
|
3
|
+
import { Filter } from '../types.ts'
|
|
4
|
+
import { RealTimeFeedBase, PoolingClientBase, MultiConnectionRealTimeFeedBase } from './realtimefeed.ts'
|
|
5
|
+
import { batch, getJSON } from '../handy.ts'
|
|
6
6
|
|
|
7
7
|
abstract class FTXRealTimeFeedBase extends MultiConnectionRealTimeFeedBase {
|
|
8
8
|
protected abstract wssURL: string
|
|
@@ -93,11 +93,11 @@ class FTXInstrumentInfoClient extends PoolingClientBase {
|
|
|
93
93
|
|
|
94
94
|
try {
|
|
95
95
|
const responses = await Promise.all([
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
getJSON<any>(`${this._httpURL}/futures/${instrument}/stats`, { timeout: 10000 }),
|
|
97
|
+
getJSON<any>(`${this._httpURL}/futures/${instrument}`, { timeout: 10000 })
|
|
98
98
|
])
|
|
99
99
|
|
|
100
|
-
if (responses.some((
|
|
100
|
+
if (responses.some((response) => response.data.success === false)) {
|
|
101
101
|
return
|
|
102
102
|
}
|
|
103
103
|
|
|
@@ -107,8 +107,8 @@ class FTXInstrumentInfoClient extends PoolingClientBase {
|
|
|
107
107
|
market: instrument,
|
|
108
108
|
type: 'update',
|
|
109
109
|
data: {
|
|
110
|
-
stats: responses[0].result,
|
|
111
|
-
info: responses[1].result
|
|
110
|
+
stats: responses[0].data.result,
|
|
111
|
+
info: responses[1].data.result
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { Filter } from '../types.ts'
|
|
2
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
4
3
|
|
|
5
4
|
export class GateIORealTimeFeed extends RealTimeFeedBase {
|
|
6
5
|
protected readonly wssURL = 'wss://api.gateio.ws/ws/v4/'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Filter } from '../types'
|
|
2
|
-
import { RealTimeFeedBase, MultiConnectionRealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { Filter } from '../types.ts'
|
|
2
|
+
import { RealTimeFeedBase, MultiConnectionRealTimeFeedBase } from './realtimefeed.ts'
|
|
3
3
|
|
|
4
4
|
export class GateIOFuturesRealTimeFeed extends MultiConnectionRealTimeFeedBase {
|
|
5
5
|
protected *_getRealTimeFeeds(exchange: string, filters: Filter<string>[], timeoutIntervalMS?: number, onError?: (error: Error) => void) {
|
|
@@ -42,6 +42,7 @@ export class GateIOFuturesRealTimeFeed extends MultiConnectionRealTimeFeedBase {
|
|
|
42
42
|
|
|
43
43
|
class GateIOFuturesSingleConnectionRealTimeFeed extends RealTimeFeedBase {
|
|
44
44
|
protected readonly wssURL: string
|
|
45
|
+
protected readonly extraHeaders = { 'X-Gate-Size-Decimal': '1' }
|
|
45
46
|
|
|
46
47
|
constructor(
|
|
47
48
|
wsURLSuffix: string,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Filter } from '../types'
|
|
2
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { Filter } from '../types.ts'
|
|
2
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
3
3
|
|
|
4
4
|
export class GeminiRealTimeFeed extends RealTimeFeedBase {
|
|
5
5
|
protected wssURL = 'wss://api.gemini.com/v2/marketdata'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Filter } from '../types'
|
|
2
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { Filter } from '../types.ts'
|
|
2
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
3
3
|
|
|
4
4
|
export class HitBtcRealTimeFeed extends RealTimeFeedBase {
|
|
5
5
|
protected wssURL = 'wss://api.hitbtc.com/api/2/ws'
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { unzipSync } from 'zlib'
|
|
2
|
-
import { Filter } from '../types'
|
|
3
|
-
import { RealTimeFeedBase, MultiConnectionRealTimeFeedBase, PoolingClientBase } from './realtimefeed'
|
|
4
|
-
import { wait, ONE_SEC_IN_MS, batch,
|
|
2
|
+
import { Filter } from '../types.ts'
|
|
3
|
+
import { RealTimeFeedBase, MultiConnectionRealTimeFeedBase, PoolingClientBase } from './realtimefeed.ts'
|
|
4
|
+
import { wait, ONE_SEC_IN_MS, batch, getJSON } from '../handy.ts'
|
|
5
5
|
import { Writable } from 'stream'
|
|
6
6
|
|
|
7
7
|
abstract class HuobiRealTimeFeedBase extends MultiConnectionRealTimeFeedBase {
|
|
@@ -248,17 +248,17 @@ class HuobiOpenInterestClient extends PoolingClientBase {
|
|
|
248
248
|
return
|
|
249
249
|
}
|
|
250
250
|
const url = `${this._httpURL}/${this._getURLPath(instrument)}`
|
|
251
|
-
const
|
|
251
|
+
const { data: body } = await getJSON<any>(url, { timeout: 10000 })
|
|
252
252
|
|
|
253
|
-
if (
|
|
254
|
-
throw new Error(`open interest response error:${JSON.stringify(
|
|
253
|
+
if (body.status !== 'ok') {
|
|
254
|
+
throw new Error(`open interest response error:${JSON.stringify(body)}, url:${url}`)
|
|
255
255
|
}
|
|
256
256
|
|
|
257
257
|
const openInterestMessage = {
|
|
258
258
|
ch: `market.${instrument}.open_interest`,
|
|
259
259
|
generated: true,
|
|
260
|
-
data:
|
|
261
|
-
ts:
|
|
260
|
+
data: body.data,
|
|
261
|
+
ts: body.ts
|
|
262
262
|
}
|
|
263
263
|
|
|
264
264
|
if (outputStream.writable) {
|
|
@@ -283,17 +283,17 @@ class HuobiOptionsMarketIndexClient extends PoolingClientBase {
|
|
|
283
283
|
return
|
|
284
284
|
}
|
|
285
285
|
const url = `${this._httpURL}/option_market_index?contract_code=${instrument}`
|
|
286
|
-
const
|
|
286
|
+
const { data: body } = await getJSON<any>(url, { timeout: 10000 })
|
|
287
287
|
|
|
288
|
-
if (
|
|
289
|
-
throw new Error(`open interest response error:${JSON.stringify(
|
|
288
|
+
if (body.status !== 'ok') {
|
|
289
|
+
throw new Error(`open interest response error:${JSON.stringify(body)}, url:${url}`)
|
|
290
290
|
}
|
|
291
291
|
|
|
292
292
|
const marketIndexMessage = {
|
|
293
293
|
ch: `market.${instrument}.option_market_index`,
|
|
294
294
|
generated: true,
|
|
295
|
-
data:
|
|
296
|
-
ts:
|
|
295
|
+
data: body.data[0],
|
|
296
|
+
ts: body.ts
|
|
297
297
|
}
|
|
298
298
|
|
|
299
299
|
if (outputStream.writable) {
|
|
@@ -318,17 +318,17 @@ class HuobiOptionsIndexClient extends PoolingClientBase {
|
|
|
318
318
|
return
|
|
319
319
|
}
|
|
320
320
|
const url = `${this._httpURL}/option_index?symbol=${instrument}`
|
|
321
|
-
const
|
|
321
|
+
const { data: body } = await getJSON<any>(url, { timeout: 10000 })
|
|
322
322
|
|
|
323
|
-
if (
|
|
324
|
-
throw new Error(`open interest response error:${JSON.stringify(
|
|
323
|
+
if (body.status !== 'ok') {
|
|
324
|
+
throw new Error(`open interest response error:${JSON.stringify(body)}, url:${url}`)
|
|
325
325
|
}
|
|
326
326
|
|
|
327
327
|
const optionIndexMessage = {
|
|
328
328
|
ch: `market.${instrument}.option_index`,
|
|
329
329
|
generated: true,
|
|
330
|
-
data:
|
|
331
|
-
ts:
|
|
330
|
+
data: body.data[0],
|
|
331
|
+
ts: body.ts
|
|
332
332
|
}
|
|
333
333
|
|
|
334
334
|
if (outputStream.writable) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Filter } from '../types'
|
|
2
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { Filter } from '../types.ts'
|
|
2
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
3
3
|
|
|
4
4
|
export class HyperliquidRealTimeFeed extends RealTimeFeedBase {
|
|
5
5
|
protected wssURL = 'wss://api.hyperliquid.xyz/ws'
|