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,59 +1,59 @@
|
|
|
1
|
-
import { Exchange, Filter } from '../types'
|
|
1
|
+
import { Exchange, Filter } from '../types.ts'
|
|
2
2
|
import {
|
|
3
3
|
BinanceFuturesRealTimeFeed,
|
|
4
4
|
BinanceJerseyRealTimeFeed,
|
|
5
5
|
BinanceRealTimeFeed,
|
|
6
6
|
BinanceUSRealTimeFeed,
|
|
7
7
|
BinanceDeliveryRealTimeFeed
|
|
8
|
-
} from './binance'
|
|
9
|
-
import { BinanceDexRealTimeFeed } from './binancedex'
|
|
10
|
-
import { BitfinexRealTimeFeed } from './bitfinex'
|
|
11
|
-
import { BitflyerRealTimeFeed } from './bitflyer'
|
|
12
|
-
import { BitmexRealTimeFeed } from './bitmex'
|
|
13
|
-
import { BitstampRealTimeFeed } from './bitstamp'
|
|
14
|
-
import { BybitOptionsRealTimeDataFeed, BybitRealTimeDataFeed, BybitSpotRealTimeDataFeed } from './bybit'
|
|
15
|
-
import { CoinbaseRealTimeFeed } from './coinbase'
|
|
16
|
-
import { CryptofacilitiesRealTimeFeed } from './cryptofacilities'
|
|
17
|
-
import { DeribitRealTimeDataFeed } from './deribit'
|
|
18
|
-
import { FtxRealTimeFeed, FtxUSRealTimeFeed } from './ftx'
|
|
19
|
-
import { GeminiRealTimeFeed } from './gemini'
|
|
20
|
-
import { HitBtcRealTimeFeed } from './hitbtc'
|
|
8
|
+
} from './binance.ts'
|
|
9
|
+
import { BinanceDexRealTimeFeed } from './binancedex.ts'
|
|
10
|
+
import { BitfinexRealTimeFeed } from './bitfinex.ts'
|
|
11
|
+
import { BitflyerRealTimeFeed } from './bitflyer.ts'
|
|
12
|
+
import { BitmexRealTimeFeed } from './bitmex.ts'
|
|
13
|
+
import { BitstampRealTimeFeed } from './bitstamp.ts'
|
|
14
|
+
import { BybitOptionsRealTimeDataFeed, BybitRealTimeDataFeed, BybitSpotRealTimeDataFeed } from './bybit.ts'
|
|
15
|
+
import { CoinbaseRealTimeFeed } from './coinbase.ts'
|
|
16
|
+
import { CryptofacilitiesRealTimeFeed } from './cryptofacilities.ts'
|
|
17
|
+
import { DeribitRealTimeDataFeed } from './deribit.ts'
|
|
18
|
+
import { FtxRealTimeFeed, FtxUSRealTimeFeed } from './ftx.ts'
|
|
19
|
+
import { GeminiRealTimeFeed } from './gemini.ts'
|
|
20
|
+
import { HitBtcRealTimeFeed } from './hitbtc.ts'
|
|
21
21
|
import {
|
|
22
22
|
HuobiDMRealTimeFeed,
|
|
23
23
|
HuobiRealTimeFeed,
|
|
24
24
|
HuobiDMSwapRealTimeFeed,
|
|
25
25
|
HuobiDMLinearSwapRealTimeFeed,
|
|
26
26
|
HuobiDMOptionsRealTimeFeed
|
|
27
|
-
} from './huobi'
|
|
28
|
-
import { KrakenRealTimeFeed } from './kraken'
|
|
29
|
-
import { OKCoinRealTimeFeed, OkexOptionsRealTimeFeed, OkexRealTimeFeed } from './okex'
|
|
30
|
-
import { RealTimeFeed } from './realtimefeed'
|
|
31
|
-
import { PhemexRealTimeFeed } from './phemex'
|
|
32
|
-
import { DeltaRealTimeFeed } from './delta'
|
|
33
|
-
import { GateIORealTimeFeed } from './gateio'
|
|
34
|
-
import { GateIOFuturesRealTimeFeed } from './gateiofutures'
|
|
35
|
-
import { PoloniexRealTimeFeed } from './poloniex'
|
|
36
|
-
import { CoinflexRealTimeFeed } from './coinflex'
|
|
37
|
-
import { UpbitRealTimeFeed } from './upbit'
|
|
38
|
-
import { AscendexRealTimeFeed } from './ascendex'
|
|
39
|
-
import { DydxRealTimeFeed } from './dydx'
|
|
40
|
-
import { SerumRealTimeFeed } from './serum'
|
|
41
|
-
import { StarAtlasRealTimeFeed } from './staratlas'
|
|
42
|
-
import { MangoRealTimeFeed } from './mango'
|
|
43
|
-
import { CryptoComRealTimeFeed } from './cryptocom'
|
|
44
|
-
import { KucoinRealTimeFeed } from './kucoin'
|
|
45
|
-
import { BitnomialRealTimeFeed } from './bitnomial'
|
|
46
|
-
import { WooxRealTimeFeed } from './woox'
|
|
47
|
-
import { BlockchainComRealTimeFeed } from './blockchaincom'
|
|
48
|
-
import { BinanceEuropeanOptionsRealTimeFeed } from './binanceeuropeanoptions'
|
|
49
|
-
import { OkexSpreadsRealTimeFeed } from './okexspreads'
|
|
50
|
-
import { KucoinFuturesRealTimeFeed } from './kucoinfutures'
|
|
51
|
-
import { DydxV4RealTimeFeed } from './dydx_v4'
|
|
52
|
-
import { BitgetFuturesRealTimeFeed, BitgetRealTimeFeed } from './bitget'
|
|
53
|
-
import { CoinbaseInternationalRealTimeFeed } from './coinbaseinternational'
|
|
54
|
-
import { HyperliquidRealTimeFeed } from './hyperliquid'
|
|
27
|
+
} from './huobi.ts'
|
|
28
|
+
import { KrakenRealTimeFeed } from './kraken.ts'
|
|
29
|
+
import { OKCoinRealTimeFeed, OkexOptionsRealTimeFeed, OkexRealTimeFeed } from './okex.ts'
|
|
30
|
+
import { RealTimeFeed } from './realtimefeed.ts'
|
|
31
|
+
import { PhemexRealTimeFeed } from './phemex.ts'
|
|
32
|
+
import { DeltaRealTimeFeed } from './delta.ts'
|
|
33
|
+
import { GateIORealTimeFeed } from './gateio.ts'
|
|
34
|
+
import { GateIOFuturesRealTimeFeed } from './gateiofutures.ts'
|
|
35
|
+
import { PoloniexRealTimeFeed } from './poloniex.ts'
|
|
36
|
+
import { CoinflexRealTimeFeed } from './coinflex.ts'
|
|
37
|
+
import { UpbitRealTimeFeed } from './upbit.ts'
|
|
38
|
+
import { AscendexRealTimeFeed } from './ascendex.ts'
|
|
39
|
+
import { DydxRealTimeFeed } from './dydx.ts'
|
|
40
|
+
import { SerumRealTimeFeed } from './serum.ts'
|
|
41
|
+
import { StarAtlasRealTimeFeed } from './staratlas.ts'
|
|
42
|
+
import { MangoRealTimeFeed } from './mango.ts'
|
|
43
|
+
import { CryptoComRealTimeFeed } from './cryptocom.ts'
|
|
44
|
+
import { KucoinRealTimeFeed } from './kucoin.ts'
|
|
45
|
+
import { BitnomialRealTimeFeed } from './bitnomial.ts'
|
|
46
|
+
import { WooxRealTimeFeed } from './woox.ts'
|
|
47
|
+
import { BlockchainComRealTimeFeed } from './blockchaincom.ts'
|
|
48
|
+
import { BinanceEuropeanOptionsRealTimeFeed } from './binanceeuropeanoptions.ts'
|
|
49
|
+
import { OkexSpreadsRealTimeFeed } from './okexspreads.ts'
|
|
50
|
+
import { KucoinFuturesRealTimeFeed } from './kucoinfutures.ts'
|
|
51
|
+
import { DydxV4RealTimeFeed } from './dydx_v4.ts'
|
|
52
|
+
import { BitgetFuturesRealTimeFeed, BitgetRealTimeFeed } from './bitget.ts'
|
|
53
|
+
import { CoinbaseInternationalRealTimeFeed } from './coinbaseinternational.ts'
|
|
54
|
+
import { HyperliquidRealTimeFeed } from './hyperliquid.ts'
|
|
55
55
|
|
|
56
|
-
export * from './realtimefeed'
|
|
56
|
+
export * from './realtimefeed.ts'
|
|
57
57
|
|
|
58
58
|
const realTimeFeedsMap: {
|
|
59
59
|
[key in Exchange]?: RealTimeFeed
|
|
@@ -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 KrakenRealTimeFeed extends RealTimeFeedBase {
|
|
5
5
|
protected wssURL = 'wss://ws.kraken.com'
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Filter } from '../types'
|
|
3
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
1
|
+
import { getRandomString, getJSON, postJSON, wait } from '../handy.ts'
|
|
2
|
+
import { Filter } from '../types.ts'
|
|
3
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
4
4
|
|
|
5
5
|
export class KucoinRealTimeFeed extends RealTimeFeedBase {
|
|
6
6
|
protected wssURL = ''
|
|
7
7
|
private _httpURL = 'https://api.kucoin.com/api'
|
|
8
8
|
|
|
9
9
|
protected async getWebSocketUrl() {
|
|
10
|
-
const
|
|
10
|
+
const { data: body } = await postJSON<any>(`${this._httpURL}/v1/bullet-public`, { retry: 3, timeout: 10000 })
|
|
11
11
|
|
|
12
|
-
return `${
|
|
12
|
+
return `${body.data.instanceServers[0].endpoint}?token=${body.data.token}&connectId=${getRandomString()}`
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
protected mapToSubscribeMessages(filters: Filter<string>[]): any[] {
|
|
@@ -42,16 +42,16 @@ export class KucoinRealTimeFeed extends RealTimeFeedBase {
|
|
|
42
42
|
return
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
const { data } = await getJSON<any>(`${this._httpURL}/v1/market/orderbook/level2_100?symbol=${symbol}`, {
|
|
46
|
+
timeout: 10000
|
|
47
|
+
})
|
|
48
48
|
|
|
49
49
|
const snapshot = {
|
|
50
50
|
type: 'message',
|
|
51
51
|
generated: true,
|
|
52
52
|
topic: `/market/level2Snapshot:${symbol}`,
|
|
53
53
|
subject: 'trade.l2Snapshot',
|
|
54
|
-
...
|
|
54
|
+
...data
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
this.manualSnapshotsBuffer.push(snapshot)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Writable } from 'stream'
|
|
2
|
-
import {
|
|
3
|
-
import { Filter } from '../types'
|
|
4
|
-
import { MultiConnectionRealTimeFeedBase, PoolingClientBase, RealTimeFeedBase } from './realtimefeed'
|
|
2
|
+
import { getJSON, getRandomString, postJSON } from '../handy.ts'
|
|
3
|
+
import { Filter } from '../types.ts'
|
|
4
|
+
import { MultiConnectionRealTimeFeedBase, PoolingClientBase, RealTimeFeedBase } from './realtimefeed.ts'
|
|
5
5
|
|
|
6
6
|
const kucoinHttpOptions = {
|
|
7
7
|
timeout: 10 * 1000,
|
|
@@ -42,9 +42,9 @@ export class KucoinFuturesSingleConnectionRealTimeFeed extends RealTimeFeedBase
|
|
|
42
42
|
protected wssURL = ''
|
|
43
43
|
|
|
44
44
|
protected async getWebSocketUrl() {
|
|
45
|
-
const
|
|
45
|
+
const { data: body } = await postJSON<any>(`${this._httpURL}/v1/bullet-public`, { retry: 3, timeout: 10000 })
|
|
46
46
|
|
|
47
|
-
return `${
|
|
47
|
+
return `${body.data.instanceServers[0].endpoint}?token=${body.data.token}&connectId=${getRandomString()}`
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
protected mapToSubscribeMessages(filters: Filter<string>[]): any[] {
|
|
@@ -76,16 +76,14 @@ export class KucoinFuturesSingleConnectionRealTimeFeed extends RealTimeFeedBase
|
|
|
76
76
|
return
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
const
|
|
80
|
-
.get(`${this._httpURL}/v1/level2/snapshot?symbol=${symbol}`, kucoinHttpOptions)
|
|
81
|
-
.json()) as any
|
|
79
|
+
const { data } = await getJSON<any>(`${this._httpURL}/v1/level2/snapshot?symbol=${symbol}`, kucoinHttpOptions)
|
|
82
80
|
|
|
83
81
|
const snapshot = {
|
|
84
82
|
type: 'message',
|
|
85
83
|
generated: true,
|
|
86
84
|
topic: `/contractMarket/level2Snapshot:${symbol}`,
|
|
87
85
|
subject: 'level2Snapshot',
|
|
88
|
-
...
|
|
86
|
+
...data
|
|
89
87
|
}
|
|
90
88
|
|
|
91
89
|
this.manualSnapshotsBuffer.push(snapshot)
|
|
@@ -116,9 +114,9 @@ class KucoinFuturesContractDetailsClient extends PoolingClientBase {
|
|
|
116
114
|
}
|
|
117
115
|
|
|
118
116
|
protected async poolDataToStream(outputStream: Writable) {
|
|
119
|
-
const
|
|
117
|
+
const { data: body } = await getJSON<any>(`${this._httpURL}/v1/contracts/active`, kucoinHttpOptions)
|
|
120
118
|
|
|
121
|
-
for (const instrument of
|
|
119
|
+
for (const instrument of body.data) {
|
|
122
120
|
const openInterestMessage = {
|
|
123
121
|
topic: `/contract/details:${instrument.symbol}`,
|
|
124
122
|
type: 'message',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import crypto from 'crypto'
|
|
2
|
-
import { wait } from '../handy'
|
|
3
|
-
import { Filter } from '../types'
|
|
4
|
-
import { MultiConnectionRealTimeFeedBase, RealTimeFeedBase } from './realtimefeed'
|
|
2
|
+
import { wait } from '../handy.ts'
|
|
3
|
+
import { Filter } from '../types.ts'
|
|
4
|
+
import { MultiConnectionRealTimeFeedBase, RealTimeFeedBase } from './realtimefeed.ts'
|
|
5
5
|
|
|
6
6
|
export class OkexRealTimeFeed extends MultiConnectionRealTimeFeedBase {
|
|
7
7
|
protected *_getRealTimeFeeds(exchange: string, filters: Filter<string>[], timeoutIntervalMS?: number, onError?: (error: Error) => void) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import crypto from 'crypto'
|
|
2
|
-
import { wait } from '../handy'
|
|
3
|
-
import { Filter } from '../types'
|
|
4
|
-
import { RealTimeFeedBase } from './realtimefeed'
|
|
2
|
+
import { wait } from '../handy.ts'
|
|
3
|
+
import { Filter } from '../types.ts'
|
|
4
|
+
import { RealTimeFeedBase } from './realtimefeed.ts'
|
|
5
5
|
|
|
6
6
|
export class OkexSpreadsRealTimeFeed extends RealTimeFeedBase {
|
|
7
7
|
protected wssURL = 'wss://ws.okx.com:8443/ws/v5/business'
|
|
@@ -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 PhemexRealTimeFeed extends RealTimeFeedBase {
|
|
5
5
|
protected readonly wssURL = 'wss://ws.phemex.com/'
|
|
@@ -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 PoloniexRealTimeFeed extends RealTimeFeedBase {
|
|
5
5
|
protected readonly wssURL = 'wss://ws.poloniex.com/ws/public'
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import dbg from 'debug'
|
|
2
2
|
import WebSocket from 'ws'
|
|
3
|
-
import { ClientRequestArgs } from 'http'
|
|
3
|
+
import type { ClientRequestArgs } from 'http'
|
|
4
4
|
import { PassThrough, Writable } from 'stream'
|
|
5
5
|
import { once } from 'events'
|
|
6
|
-
import { httpsProxyAgent, ONE_SEC_IN_MS, optimizeFilters, wait } from '../handy'
|
|
7
|
-
import { Exchange, Filter } from '../types'
|
|
6
|
+
import { httpsProxyAgent, ONE_SEC_IN_MS, optimizeFilters, wait } from '../handy.ts'
|
|
7
|
+
import { Exchange, Filter } from '../types.ts'
|
|
8
8
|
|
|
9
9
|
export type RealTimeFeed = {
|
|
10
10
|
new (
|
|
@@ -34,6 +34,7 @@ export abstract class RealTimeFeedBase implements RealTimeFeedIterable {
|
|
|
34
34
|
private _connectionId = -1
|
|
35
35
|
private _wsClientOptions: WebSocket.ClientOptions | ClientRequestArgs
|
|
36
36
|
protected readonly originHeader: string | undefined = undefined
|
|
37
|
+
protected readonly extraHeaders: Record<string, string> | undefined = undefined
|
|
37
38
|
|
|
38
39
|
constructor(
|
|
39
40
|
protected readonly _exchange: string,
|
|
@@ -90,6 +91,10 @@ export abstract class RealTimeFeedBase implements RealTimeFeedIterable {
|
|
|
90
91
|
;(this._wsClientOptions as any).headers['origin'] = this.originHeader
|
|
91
92
|
}
|
|
92
93
|
|
|
94
|
+
if (this.extraHeaders !== undefined) {
|
|
95
|
+
Object.assign((this._wsClientOptions as any).headers, this.extraHeaders)
|
|
96
|
+
}
|
|
97
|
+
|
|
93
98
|
this._ws = new WebSocket(finalWssUrl, this._wsClientOptions)
|
|
94
99
|
this._ws.onopen = this._onConnectionEstabilished
|
|
95
100
|
this._ws.onclose = this._onConnectionClosed
|
|
@@ -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 SerumRealTimeFeed extends RealTimeFeedBase {
|
|
5
5
|
protected wssURL = 'wss://api.serum-vial.dev/v1/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 UpbitRealTimeFeed extends RealTimeFeedBase {
|
|
5
5
|
protected readonly wssURL = 'wss://api.upbit.com/websocket/v1'
|
|
@@ -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 WooxRealTimeFeed extends RealTimeFeedBase {
|
|
6
6
|
protected wssURL = 'wss://wss.woo.org/ws/stream/OqdphuyCtYWxwzhxyLLjOWNdFP7sQt8RPWzmb5xY'
|
package/src/replay.ts
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
|
-
import { createReadStream
|
|
2
|
-
import
|
|
3
|
-
import { EventEmitter } from '
|
|
1
|
+
import { createReadStream } from 'node:fs'
|
|
2
|
+
import { rm } from 'node:fs/promises'
|
|
3
|
+
import { EventEmitter } from 'events'
|
|
4
4
|
import { Worker } from 'worker_threads'
|
|
5
5
|
import { constants, createGunzip } from 'zlib'
|
|
6
|
-
import { BinarySplitStream } from './binarysplit'
|
|
7
|
-
import { clearCacheSync } from './clearcache'
|
|
8
|
-
import { EXCHANGES, EXCHANGE_CHANNELS_INFO } from './consts'
|
|
9
|
-
import { debug } from './debug'
|
|
10
|
-
import { addDays, getFilters, normalizeMessages, parseAsUTCDate,
|
|
11
|
-
import { MapperFactory, normalizeBookChanges } from './mappers'
|
|
12
|
-
import { getOptions } from './options'
|
|
13
|
-
import { Disconnect, Exchange, FilterForExchange } from './types'
|
|
14
|
-
import { WorkerJobPayload, WorkerMessage, WorkerSignal } from './worker'
|
|
6
|
+
import { BinarySplitStream } from './binarysplit.ts'
|
|
7
|
+
import { clearCacheSync } from './clearcache.ts'
|
|
8
|
+
import { EXCHANGES, EXCHANGE_CHANNELS_INFO } from './consts.ts'
|
|
9
|
+
import { debug } from './debug.ts'
|
|
10
|
+
import { addDays, getFilters, normalizeMessages, parseAsUTCDate, wait } from './handy.ts'
|
|
11
|
+
import { MapperFactory, normalizeBookChanges } from './mappers/index.ts'
|
|
12
|
+
import { getOptions } from './options.ts'
|
|
13
|
+
import { Disconnect, Exchange, FilterForExchange } from './types.ts'
|
|
14
|
+
import { WorkerJobPayload, WorkerMessage, WorkerSignal } from './worker.ts'
|
|
15
|
+
|
|
16
|
+
type MapperOutput<T> = T extends MapperFactory<any, infer U> ? U : never
|
|
17
|
+
type ReplayNormalizedMessage<U extends readonly MapperFactory<any, any>[], Z extends boolean> = Z extends true
|
|
18
|
+
? MapperOutput<U[number]> | Disconnect
|
|
19
|
+
: MapperOutput<U[number]>
|
|
15
20
|
|
|
16
21
|
export async function* replay<T extends Exchange, U extends boolean = false, Z extends boolean = false>({
|
|
17
22
|
exchange,
|
|
@@ -77,7 +82,7 @@ export async function* replay<T extends Exchange, U extends boolean = false, Z e
|
|
|
77
82
|
// see https://github.com/request/request/pull/2492 and https://github.com/node-fetch/node-fetch/pull/239
|
|
78
83
|
|
|
79
84
|
const ZLIB_OPTIONS = {
|
|
80
|
-
chunkSize:
|
|
85
|
+
chunkSize: 256 * 1024,
|
|
81
86
|
flush: constants.Z_SYNC_FLUSH,
|
|
82
87
|
finishFlush: constants.Z_SYNC_FLUSH
|
|
83
88
|
}
|
|
@@ -110,7 +115,7 @@ export async function* replay<T extends Exchange, U extends boolean = false, Z e
|
|
|
110
115
|
}
|
|
111
116
|
|
|
112
117
|
// response is a path to file on disk let' read it as stream
|
|
113
|
-
const linesStream = createReadStream(cachedSlicePath, { highWaterMark:
|
|
118
|
+
const linesStream = createReadStream(cachedSlicePath, { highWaterMark: 256 * 1024 })
|
|
114
119
|
// unzip it
|
|
115
120
|
.pipe(createGunzip(ZLIB_OPTIONS))
|
|
116
121
|
.on('error', function onGunzipError(err) {
|
|
@@ -130,16 +135,14 @@ export async function* replay<T extends Exchange, U extends boolean = false, Z e
|
|
|
130
135
|
linesCount++
|
|
131
136
|
if (bufferLine.length > 0) {
|
|
132
137
|
lastMessageWasUndefined = false
|
|
133
|
-
const localTimestampBuffer = bufferLine.slice(0, DATE_MESSAGE_SPLIT_INDEX)
|
|
134
|
-
const messageBuffer = bufferLine.slice(DATE_MESSAGE_SPLIT_INDEX + 1)
|
|
135
138
|
// as any due to https://github.com/Microsoft/TypeScript/issues/24929
|
|
136
139
|
if (skipDecoding === true) {
|
|
137
140
|
yield {
|
|
138
|
-
localTimestamp:
|
|
139
|
-
message:
|
|
141
|
+
localTimestamp: bufferLine.slice(0, DATE_MESSAGE_SPLIT_INDEX),
|
|
142
|
+
message: bufferLine.slice(DATE_MESSAGE_SPLIT_INDEX + 1)
|
|
140
143
|
} as any
|
|
141
144
|
} else {
|
|
142
|
-
let messageString =
|
|
145
|
+
let messageString = bufferLine.toString('utf8', DATE_MESSAGE_SPLIT_INDEX + 1)
|
|
143
146
|
|
|
144
147
|
// hack to handle huobi long numeric id for trades
|
|
145
148
|
if (exchange.startsWith('huobi-') && messageString.includes('.trade.detail')) {
|
|
@@ -152,12 +155,9 @@ export async function* replay<T extends Exchange, U extends boolean = false, Z e
|
|
|
152
155
|
|
|
153
156
|
const message = JSON.parse(messageString)
|
|
154
157
|
|
|
155
|
-
const
|
|
156
|
-
const localTimestamp = new Date(localTimestampString)
|
|
158
|
+
const localTimestamp = new Date(bufferLine.toString('utf8', 0, DATE_MESSAGE_SPLIT_INDEX))
|
|
157
159
|
if (withMicroseconds) {
|
|
158
|
-
|
|
159
|
-
// local timestamp always has format like this 2019-06-01T00:03:03.1238784Z
|
|
160
|
-
localTimestamp.μs = parseμs(localTimestampString)
|
|
160
|
+
localTimestamp.μs = parseReplayMicroseconds(bufferLine)
|
|
161
161
|
}
|
|
162
162
|
|
|
163
163
|
yield {
|
|
@@ -227,12 +227,16 @@ export async function* replay<T extends Exchange, U extends boolean = false, Z e
|
|
|
227
227
|
|
|
228
228
|
async function cleanupSlice(slicePath: string) {
|
|
229
229
|
try {
|
|
230
|
-
await
|
|
230
|
+
await rm(slicePath, { force: true })
|
|
231
231
|
} catch (e) {
|
|
232
232
|
debug('cleanupSlice error %s %o', slicePath, e)
|
|
233
233
|
}
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
+
function parseReplayMicroseconds(bufferLine: Buffer) {
|
|
237
|
+
return (bufferLine[23] - 48) * 100 + (bufferLine[24] - 48) * 10 + (bufferLine[25] - 48)
|
|
238
|
+
}
|
|
239
|
+
|
|
236
240
|
// gracefully terminate worker
|
|
237
241
|
async function terminateWorker(worker: Worker, waitTimeout: number) {
|
|
238
242
|
let cancelWait = () => {}
|
|
@@ -262,15 +266,7 @@ export function replayNormalized<T extends Exchange, U extends MapperFactory<T,
|
|
|
262
266
|
waitWhenDataNotYetAvailable = undefined
|
|
263
267
|
}: ReplayNormalizedOptions<T, Z>,
|
|
264
268
|
...normalizers: U
|
|
265
|
-
): AsyncIterableIterator<
|
|
266
|
-
Z extends true
|
|
267
|
-
? U extends MapperFactory<infer _, infer X>[]
|
|
268
|
-
? X | Disconnect
|
|
269
|
-
: never
|
|
270
|
-
: U extends MapperFactory<infer _, infer X>[]
|
|
271
|
-
? X
|
|
272
|
-
: never
|
|
273
|
-
> {
|
|
269
|
+
): AsyncIterableIterator<ReplayNormalizedMessage<U, Z>> {
|
|
274
270
|
const fromDate = parseAsUTCDate(from)
|
|
275
271
|
|
|
276
272
|
validateReplayNormalizedOptions(fromDate, normalizers)
|
|
@@ -359,7 +355,7 @@ class ReliableWorker extends EventEmitter {
|
|
|
359
355
|
}
|
|
360
356
|
|
|
361
357
|
private _initWorker() {
|
|
362
|
-
this._worker = new Worker(
|
|
358
|
+
this._worker = new Worker(new URL('./worker.js', import.meta.url), {
|
|
363
359
|
workerData: this._payload
|
|
364
360
|
})
|
|
365
361
|
|
package/src/stream.ts
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import { debug } from './debug'
|
|
2
|
-
import { getFilters, normalizeMessages } from './handy'
|
|
3
|
-
import { MapperFactory } from './mappers'
|
|
4
|
-
import { createRealTimeFeed } from './realtimefeeds'
|
|
5
|
-
import { Disconnect, Exchange, Filter, FilterForExchange } from './types'
|
|
1
|
+
import { debug } from './debug.ts'
|
|
2
|
+
import { getFilters, normalizeMessages } from './handy.ts'
|
|
3
|
+
import { MapperFactory } from './mappers/index.ts'
|
|
4
|
+
import { createRealTimeFeed } from './realtimefeeds/index.ts'
|
|
5
|
+
import { Disconnect, Exchange, Filter, FilterForExchange } from './types.ts'
|
|
6
|
+
|
|
7
|
+
type MapperOutput<T> = T extends MapperFactory<any, infer U> ? U : never
|
|
8
|
+
type StreamNormalizedMessage<U extends readonly MapperFactory<any, any>[], Z extends boolean> = Z extends true
|
|
9
|
+
? MapperOutput<U[number]> | Disconnect
|
|
10
|
+
: MapperOutput<U[number]>
|
|
6
11
|
|
|
7
12
|
async function* _stream<T extends Exchange, U extends boolean = false>({
|
|
8
13
|
exchange,
|
|
@@ -52,15 +57,7 @@ export function stream<T extends Exchange, U extends boolean = false>({
|
|
|
52
57
|
async function* _streamNormalized<T extends Exchange, U extends MapperFactory<T, any>[], Z extends boolean = false>(
|
|
53
58
|
{ exchange, symbols, timeoutIntervalMS = 10000, withDisconnectMessages = undefined, onError = undefined }: StreamNormalizedOptions<T, Z>,
|
|
54
59
|
...normalizers: U
|
|
55
|
-
): AsyncIterableIterator<
|
|
56
|
-
Z extends true
|
|
57
|
-
? U extends MapperFactory<infer _, infer X>[]
|
|
58
|
-
? X | Disconnect
|
|
59
|
-
: never
|
|
60
|
-
: U extends MapperFactory<infer _, infer X>[]
|
|
61
|
-
? X
|
|
62
|
-
: never
|
|
63
|
-
> {
|
|
60
|
+
): AsyncIterableIterator<StreamNormalizedMessage<U, Z>> {
|
|
64
61
|
while (true) {
|
|
65
62
|
try {
|
|
66
63
|
const createMappers = (localTimestamp: Date) => normalizers.map((m) => m(exchange, localTimestamp))
|
|
@@ -150,15 +147,7 @@ export type StreamNormalizedOptions<T extends Exchange, U extends boolean = fals
|
|
|
150
147
|
export function streamNormalized<T extends Exchange, U extends MapperFactory<T, any>[], Z extends boolean = false>(
|
|
151
148
|
{ exchange, symbols, timeoutIntervalMS = 10000, withDisconnectMessages = undefined, onError = undefined }: StreamNormalizedOptions<T, Z>,
|
|
152
149
|
...normalizers: U
|
|
153
|
-
): AsyncIterableIterator<
|
|
154
|
-
Z extends true
|
|
155
|
-
? U extends MapperFactory<infer _, infer X>[]
|
|
156
|
-
? X | Disconnect
|
|
157
|
-
: never
|
|
158
|
-
: U extends MapperFactory<infer _, infer X>[]
|
|
159
|
-
? X
|
|
160
|
-
: never
|
|
161
|
-
> {
|
|
150
|
+
): AsyncIterableIterator<StreamNormalizedMessage<U, Z>> {
|
|
162
151
|
let _iterator = _streamNormalized({ exchange, symbols, timeoutIntervalMS, withDisconnectMessages, onError }, ...normalizers)
|
|
163
152
|
|
|
164
153
|
;(_iterator as any).__realtime__ = true
|
package/src/types.ts
CHANGED
package/src/worker.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import dbg from 'debug'
|
|
2
|
-
import { existsSync } from 'fs
|
|
2
|
+
import { existsSync } from 'node:fs'
|
|
3
3
|
import pMap from 'p-map'
|
|
4
4
|
import { isMainThread, parentPort, workerData } from 'worker_threads'
|
|
5
|
-
import { addMinutes, download, formatDateToPath, optimizeFilters, sequence, sha256, wait, cleanTempFiles } from './handy'
|
|
6
|
-
import { Exchange, Filter } from './types'
|
|
7
|
-
|
|
5
|
+
import { addMinutes, download, formatDateToPath, optimizeFilters, sequence, sha256, wait, cleanTempFiles } from './handy.ts'
|
|
6
|
+
import { Exchange, Filter } from './types.ts'
|
|
8
7
|
const debug = dbg('tardis-dev')
|
|
9
8
|
|
|
10
9
|
if (isMainThread) {
|