ccxt 4.5.49 → 4.5.51
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 +5 -4
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/abstract/aftermath.js +1 -1
- package/dist/cjs/src/abstract/alpaca.js +1 -1
- package/dist/cjs/src/abstract/apex.js +1 -1
- package/dist/cjs/src/abstract/arkham.js +1 -1
- package/dist/cjs/src/abstract/ascendex.js +1 -1
- package/dist/cjs/src/abstract/aster.js +1 -1
- package/dist/cjs/src/abstract/backpack.js +1 -1
- package/dist/cjs/src/abstract/bigone.js +1 -1
- package/dist/cjs/src/abstract/binance.js +1 -1
- package/dist/cjs/src/abstract/bingx.js +1 -1
- package/dist/cjs/src/abstract/bit2c.js +1 -1
- package/dist/cjs/src/abstract/bitbank.js +1 -1
- package/dist/cjs/src/abstract/bitbns.js +1 -1
- package/dist/cjs/src/abstract/bitfinex.js +1 -1
- package/dist/cjs/src/abstract/bitflyer.js +1 -1
- package/dist/cjs/src/abstract/bitget.js +1 -1
- package/dist/cjs/src/abstract/bithumb.js +1 -1
- package/dist/cjs/src/abstract/bitmart.js +1 -1
- package/dist/cjs/src/abstract/bitmex.js +1 -1
- package/dist/cjs/src/abstract/bitopro.js +1 -1
- package/dist/cjs/src/abstract/bitrue.js +1 -1
- package/dist/cjs/src/abstract/bitso.js +1 -1
- package/dist/cjs/src/abstract/bitstamp.js +1 -1
- package/dist/cjs/src/abstract/bitteam.js +1 -1
- package/dist/cjs/src/abstract/bittrade.js +1 -1
- package/dist/cjs/src/abstract/bitvavo.js +1 -1
- package/dist/cjs/src/abstract/blockchaincom.js +1 -1
- package/dist/cjs/src/abstract/blofin.js +1 -1
- package/dist/cjs/src/abstract/btcbox.js +1 -1
- package/dist/cjs/src/abstract/btcmarkets.js +1 -1
- package/dist/cjs/src/abstract/btcturk.js +1 -1
- package/dist/cjs/src/abstract/bullish.js +1 -1
- package/dist/cjs/src/abstract/bybit.js +1 -1
- package/dist/cjs/src/abstract/bydfi.js +1 -1
- package/dist/cjs/src/abstract/cex.js +1 -1
- package/dist/cjs/src/abstract/coinbase.js +1 -1
- package/dist/cjs/src/abstract/coinbaseexchange.js +1 -1
- package/dist/cjs/src/abstract/coinbaseinternational.js +1 -1
- package/dist/cjs/src/abstract/coincheck.js +1 -1
- package/dist/cjs/src/abstract/coinex.js +1 -1
- package/dist/cjs/src/abstract/coinmate.js +1 -1
- package/dist/cjs/src/abstract/coinmetro.js +1 -1
- package/dist/cjs/src/abstract/coinone.js +1 -1
- package/dist/cjs/src/abstract/coinsph.js +1 -1
- package/dist/cjs/src/abstract/coinspot.js +1 -1
- package/dist/cjs/src/abstract/cryptocom.js +1 -1
- package/dist/cjs/src/abstract/cryptomus.js +1 -1
- package/dist/cjs/src/abstract/deepcoin.js +1 -1
- package/dist/cjs/src/abstract/delta.js +1 -1
- package/dist/cjs/src/abstract/deribit.js +1 -1
- package/dist/cjs/src/abstract/derive.js +1 -1
- package/dist/cjs/src/abstract/digifinex.js +1 -1
- package/dist/cjs/src/abstract/dydx.js +1 -1
- package/dist/cjs/src/abstract/exmo.js +1 -1
- package/dist/cjs/src/abstract/foxbit.js +1 -1
- package/dist/cjs/src/abstract/gate.js +1 -1
- package/dist/cjs/src/abstract/gemini.js +1 -1
- package/dist/cjs/src/abstract/grvt.js +1 -1
- package/dist/cjs/src/abstract/hashkey.js +1 -1
- package/dist/cjs/src/abstract/hibachi.js +1 -1
- package/dist/cjs/src/abstract/hitbtc.js +1 -1
- package/dist/cjs/src/abstract/hollaex.js +1 -1
- package/dist/cjs/src/abstract/htx.js +1 -1
- package/dist/cjs/src/abstract/hyperliquid.js +1 -1
- package/dist/cjs/src/abstract/independentreserve.js +1 -1
- package/dist/cjs/src/abstract/indodax.js +1 -1
- package/dist/cjs/src/abstract/kraken.js +1 -1
- package/dist/cjs/src/abstract/krakenfutures.js +1 -1
- package/dist/cjs/src/abstract/kucoin.js +1 -1
- package/dist/cjs/src/abstract/latoken.js +1 -1
- package/dist/cjs/src/abstract/lbank.js +1 -1
- package/dist/cjs/src/abstract/lighter.js +1 -1
- package/dist/cjs/src/abstract/luno.js +1 -1
- package/dist/cjs/src/abstract/mercado.js +1 -1
- package/dist/cjs/src/abstract/mexc.js +1 -1
- package/dist/cjs/src/abstract/modetrade.js +1 -1
- package/dist/cjs/src/abstract/ndax.js +1 -1
- package/dist/cjs/src/abstract/novadax.js +1 -1
- package/dist/cjs/src/abstract/okx.js +1 -1
- package/dist/cjs/src/abstract/onetrading.js +1 -1
- package/dist/cjs/src/abstract/oxfun.js +1 -1
- package/dist/cjs/src/abstract/p2b.js +1 -1
- package/dist/cjs/src/abstract/pacifica.js +1 -1
- package/dist/cjs/src/abstract/paradex.js +1 -1
- package/dist/cjs/src/abstract/paymium.js +1 -1
- package/dist/cjs/src/abstract/phemex.js +1 -1
- package/dist/cjs/src/abstract/poloniex.js +1 -1
- package/dist/cjs/src/abstract/tokocrypto.js +1 -1
- package/dist/cjs/src/abstract/toobit.js +1 -1
- package/dist/cjs/src/abstract/upbit.js +1 -1
- package/dist/cjs/src/abstract/wavesexchange.js +1 -1
- package/dist/cjs/src/abstract/weex.js +1 -1
- package/dist/cjs/src/abstract/whitebit.js +1 -1
- package/dist/cjs/src/abstract/woo.js +1 -1
- package/dist/cjs/src/abstract/woofipro.js +1 -1
- package/dist/cjs/src/abstract/xt.js +1 -1
- package/dist/cjs/src/abstract/yobit.js +1 -1
- package/dist/cjs/src/abstract/zaif.js +1 -1
- package/dist/cjs/src/abstract/zebpay.js +1 -1
- package/dist/cjs/src/abstract/zonda.js +1 -1
- package/dist/cjs/src/aftermath.js +0 -1
- package/dist/cjs/src/alpaca.js +1 -1
- package/dist/cjs/src/apex.js +1 -1
- package/dist/cjs/src/arkham.js +1 -1
- package/dist/cjs/src/ascendex.js +1 -1
- package/dist/cjs/src/aster.js +1 -1
- package/dist/cjs/src/backpack.js +1 -1
- package/dist/cjs/src/base/Exchange.js +51 -13
- package/dist/cjs/src/base/Precise.js +0 -6
- package/dist/cjs/src/base/errors.js +0 -6
- package/dist/cjs/src/base/functions/crypto.js +1 -1
- package/dist/cjs/src/base/functions/encode.js +1 -1
- package/dist/cjs/src/base/functions/io.js +1 -1
- package/dist/cjs/src/base/functions/misc.js +0 -1
- package/dist/cjs/src/base/functions/number.js +0 -6
- package/dist/cjs/src/base/functions/platform.js +0 -6
- package/dist/cjs/src/base/functions/rsa.js +0 -1
- package/dist/cjs/src/base/functions/string.js +0 -6
- package/dist/cjs/src/base/functions/throttle.js +1 -1
- package/dist/cjs/src/base/functions/time.js +0 -6
- package/dist/cjs/src/base/functions/totp.js +0 -1
- package/dist/cjs/src/base/functions/type.js +0 -6
- package/dist/cjs/src/base/functions.js +1 -1
- package/dist/cjs/src/base/ws/Cache.js +0 -6
- package/dist/cjs/src/base/ws/Client.js +0 -1
- package/dist/cjs/src/base/ws/Future.js +1 -1
- package/dist/cjs/src/base/ws/OrderBook.js +1 -1
- package/dist/cjs/src/base/ws/OrderBookSide.js +0 -6
- package/dist/cjs/src/base/ws/WsClient.js +1 -1
- package/dist/cjs/src/bequant.js +1 -1
- package/dist/cjs/src/bigone.js +1 -1
- package/dist/cjs/src/binance.js +23 -11
- package/dist/cjs/src/binancecoinm.js +1 -1
- package/dist/cjs/src/binanceus.js +1 -1
- package/dist/cjs/src/binanceusdm.js +1 -1
- package/dist/cjs/src/bingx.js +1 -1
- package/dist/cjs/src/bit2c.js +1 -1
- package/dist/cjs/src/bitbank.js +1 -1
- package/dist/cjs/src/bitbns.js +1 -1
- package/dist/cjs/src/bitfinex.js +1 -1
- package/dist/cjs/src/bitflyer.js +1 -1
- package/dist/cjs/src/bitget.js +7 -4
- package/dist/cjs/src/bithumb.js +1 -1
- package/dist/cjs/src/bitmart.js +1 -1
- package/dist/cjs/src/bitmex.js +1 -1
- package/dist/cjs/src/bitopro.js +1 -1
- package/dist/cjs/src/bitrue.js +1 -1
- package/dist/cjs/src/bitso.js +1 -1
- package/dist/cjs/src/bitstamp.js +1 -1
- package/dist/cjs/src/bitteam.js +1 -1
- package/dist/cjs/src/bittrade.js +1 -1
- package/dist/cjs/src/blockchaincom.js +1 -1
- package/dist/cjs/src/blofin.js +26 -31
- package/dist/cjs/src/btcbox.js +1 -1
- package/dist/cjs/src/btcmarkets.js +1 -1
- package/dist/cjs/src/btcturk.js +1 -1
- package/dist/cjs/src/bullish.js +1 -1
- package/dist/cjs/src/bybit.js +1 -1
- package/dist/cjs/src/bydfi.js +2 -3
- package/dist/cjs/src/cex.js +1 -1
- package/dist/cjs/src/coinbaseadvanced.js +1 -1
- package/dist/cjs/src/coincheck.js +1 -1
- package/dist/cjs/src/coinex.js +1 -1
- package/dist/cjs/src/coinmate.js +1 -1
- package/dist/cjs/src/coinmetro.js +1 -1
- package/dist/cjs/src/coinone.js +1 -1
- package/dist/cjs/src/coinsph.js +0 -1
- package/dist/cjs/src/coinspot.js +1 -1
- package/dist/cjs/src/cryptocom.js +1 -1
- package/dist/cjs/src/cryptomus.js +1 -1
- package/dist/cjs/src/deepcoin.js +1 -2
- package/dist/cjs/src/delta.js +1 -1
- package/dist/cjs/src/deribit.js +1 -1
- package/dist/cjs/src/derive.js +1 -1
- package/dist/cjs/src/digifinex.js +1 -1
- package/dist/cjs/src/dydx.js +1 -1
- package/dist/cjs/src/exmo.js +1 -1
- package/dist/cjs/src/fmfwio.js +1 -1
- package/dist/cjs/src/foxbit.js +1 -1
- package/dist/cjs/src/gate.js +1 -2
- package/dist/cjs/src/gateio.js +1 -1
- package/dist/cjs/src/gemini.js +1 -1
- package/dist/cjs/src/grvt.js +15 -15
- package/dist/cjs/src/hashkey.js +1 -1
- package/dist/cjs/src/hibachi.js +2 -2
- package/dist/cjs/src/hitbtc.js +0 -1
- package/dist/cjs/src/hollaex.js +1 -1
- package/dist/cjs/src/htx.js +1 -1
- package/dist/cjs/src/huobi.js +1 -1
- package/dist/cjs/src/hyperliquid.js +1 -1
- package/dist/cjs/src/independentreserve.js +1 -1
- package/dist/cjs/src/indodax.js +1 -1
- package/dist/cjs/src/kraken.js +1 -1
- package/dist/cjs/src/krakenfutures.js +1 -1
- package/dist/cjs/src/kucoin.js +246 -111
- package/dist/cjs/src/kucoinfutures.js +1 -2
- package/dist/cjs/src/latoken.js +1 -1
- package/dist/cjs/src/lbank.js +1 -1
- package/dist/cjs/src/lighter.js +313 -142
- package/dist/cjs/src/luno.js +1 -1
- package/dist/cjs/src/mercado.js +1 -1
- package/dist/cjs/src/mexc.js +1 -1
- package/dist/cjs/src/modetrade.js +1 -1
- package/dist/cjs/src/myokx.js +1 -1
- package/dist/cjs/src/ndax.js +1 -1
- package/dist/cjs/src/novadax.js +1 -1
- package/dist/cjs/src/okx.js +47 -2
- package/dist/cjs/src/okxus.js +1 -1
- package/dist/cjs/src/onetrading.js +1 -1
- package/dist/cjs/src/oxfun.js +1 -1
- package/dist/cjs/src/p2b.js +1 -1
- package/dist/cjs/src/pacifica.js +1 -1
- package/dist/cjs/src/paradex.js +1 -1
- package/dist/cjs/src/paymium.js +1 -1
- package/dist/cjs/src/poloniex.js +1 -1
- package/dist/cjs/src/pro/alpaca.js +1 -1
- package/dist/cjs/src/pro/apex.js +1 -1
- package/dist/cjs/src/pro/arkham.js +1 -1
- package/dist/cjs/src/pro/ascendex.js +1 -1
- package/dist/cjs/src/pro/aster.js +24 -43
- package/dist/cjs/src/pro/backpack.js +1 -1
- package/dist/cjs/src/pro/bequant.js +1 -1
- package/dist/cjs/src/pro/binance.js +1 -1
- package/dist/cjs/src/pro/binancecoinm.js +1 -1
- package/dist/cjs/src/pro/binanceus.js +1 -1
- package/dist/cjs/src/pro/binanceusdm.js +1 -1
- package/dist/cjs/src/pro/bingx.js +1 -1
- package/dist/cjs/src/pro/bitfinex.js +1 -1
- package/dist/cjs/src/pro/bitget.js +1 -1
- package/dist/cjs/src/pro/bithumb.js +1 -1
- package/dist/cjs/src/pro/bitmart.js +1 -1
- package/dist/cjs/src/pro/bitmex.js +1 -1
- package/dist/cjs/src/pro/bitrue.js +1 -1
- package/dist/cjs/src/pro/bitstamp.js +1 -1
- package/dist/cjs/src/pro/bitvavo.js +1 -1
- package/dist/cjs/src/pro/blockchaincom.js +1 -1
- package/dist/cjs/src/pro/blofin.js +1 -1
- package/dist/cjs/src/pro/bullish.js +1 -1
- package/dist/cjs/src/pro/bybit.js +1 -1
- package/dist/cjs/src/pro/bydfi.js +1 -1
- package/dist/cjs/src/pro/cex.js +1 -1
- package/dist/cjs/src/pro/coinbase.js +1 -1
- package/dist/cjs/src/pro/coinbaseadvanced.js +1 -1
- package/dist/cjs/src/pro/coinbaseexchange.js +1 -1
- package/dist/cjs/src/pro/coinbaseinternational.js +1 -1
- package/dist/cjs/src/pro/coincheck.js +1 -1
- package/dist/cjs/src/pro/coinex.js +1 -1
- package/dist/cjs/src/pro/coinone.js +1 -1
- package/dist/cjs/src/pro/cryptocom.js +1 -1
- package/dist/cjs/src/pro/deepcoin.js +1 -1
- package/dist/cjs/src/pro/deribit.js +1 -1
- package/dist/cjs/src/pro/dydx.js +1 -1
- package/dist/cjs/src/pro/exmo.js +1 -1
- package/dist/cjs/src/pro/gate.js +78 -7
- package/dist/cjs/src/pro/gateio.js +1 -1
- package/dist/cjs/src/pro/gemini.js +1 -1
- package/dist/cjs/src/pro/grvt.js +5 -6
- package/dist/cjs/src/pro/hashkey.js +1 -1
- package/dist/cjs/src/pro/hitbtc.js +1 -1
- package/dist/cjs/src/pro/hollaex.js +1 -1
- package/dist/cjs/src/pro/htx.js +1 -1
- package/dist/cjs/src/pro/huobi.js +1 -1
- package/dist/cjs/src/pro/hyperliquid.js +362 -2
- package/dist/cjs/src/pro/independentreserve.js +1 -1
- package/dist/cjs/src/pro/kraken.js +1 -1
- package/dist/cjs/src/pro/krakenfutures.js +1 -1
- package/dist/cjs/src/pro/kucoin.js +1191 -104
- package/dist/cjs/src/pro/kucoinfutures.js +1 -2
- package/dist/cjs/src/pro/lbank.js +0 -1
- package/dist/cjs/src/pro/lighter.js +2 -1
- package/dist/cjs/src/pro/luno.js +1 -1
- package/dist/cjs/src/pro/mexc.js +1 -1
- package/dist/cjs/src/pro/myokx.js +1 -1
- package/dist/cjs/src/pro/ndax.js +1 -1
- package/dist/cjs/src/pro/okx.js +1 -1
- package/dist/cjs/src/pro/okxus.js +1 -1
- package/dist/cjs/src/pro/onetrading.js +1 -1
- package/dist/cjs/src/pro/oxfun.js +1 -1
- package/dist/cjs/src/pro/p2b.js +1 -1
- package/dist/cjs/src/pro/pacifica.js +1 -1
- package/dist/cjs/src/pro/paradex.js +1 -1
- package/dist/cjs/src/pro/phemex.js +1 -1
- package/dist/cjs/src/pro/poloniex.js +1 -1
- package/dist/cjs/src/pro/toobit.js +1 -1
- package/dist/cjs/src/pro/upbit.js +1 -1
- package/dist/cjs/src/pro/weex.js +1 -1
- package/dist/cjs/src/pro/whitebit.js +1 -1
- package/dist/cjs/src/pro/xt.js +1 -1
- package/dist/cjs/src/protobuf/mexc/compiled.cjs.js +1 -0
- package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/base/v1beta1/coin.js +0 -1
- package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/v1beta1/multisig.js +0 -1
- package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/crypto/secp256k1/keys.js +0 -1
- package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/tx/signing/v1beta1/signing.js +0 -1
- package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/tx/v1beta1/tx.js +0 -1
- package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/accountplus/tx.js +0 -1
- package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/clob_pair.js +0 -1
- package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order.js +0 -1
- package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order_removals.js +0 -1
- package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/tx.js +0 -1
- package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/transfer.js +0 -1
- package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/tx.js +0 -1
- package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/subaccount.js +0 -1
- package/dist/cjs/src/static_dependencies/dydx-v4-client/google/protobuf/any.js +0 -1
- package/dist/cjs/src/static_dependencies/dydx-v4-client/helpers.js +0 -6
- package/dist/cjs/src/static_dependencies/dydx-v4-client/onboarding.js +0 -1
- package/dist/cjs/src/static_dependencies/dydx-v4-client/registry.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/coders/address.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/array.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/null.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/number.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/string.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/fragments.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/index.js +10 -1
- package/dist/cjs/src/static_dependencies/ethers/interface.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/typed.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +13 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/data.js +6 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +9 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/events.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/utils/index.js +7 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +5 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +8 -1
- package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
- package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-curves/_shortw_utils.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/curve.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/edwards.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/modular.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/montgomery.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/ed25519.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/p256.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/secp256k1.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/_assert.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/pbkdf2.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/ripemd160.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
- package/dist/cjs/src/static_dependencies/node-fetch/body.js +5 -1
- package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +0 -1
- package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +0 -6
- package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -1
- package/dist/cjs/src/static_dependencies/node-fetch/headers.js +5 -1
- package/dist/cjs/src/static_dependencies/node-fetch/index.js +7 -1
- package/dist/cjs/src/static_dependencies/node-fetch/request.js +7 -1
- package/dist/cjs/src/static_dependencies/node-fetch/response.js +5 -1
- package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
- package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
- package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +0 -6
- package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +0 -1
- package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +0 -1
- package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -1
- package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -1
- package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
- package/dist/cjs/src/static_dependencies/qs/formats.js +0 -6
- package/dist/cjs/src/static_dependencies/qs/index.js +0 -1
- package/dist/cjs/src/static_dependencies/qs/parse.js +0 -1
- package/dist/cjs/src/static_dependencies/qs/stringify.js +0 -1
- package/dist/cjs/src/static_dependencies/qs/utils.js +0 -6
- package/dist/cjs/src/static_dependencies/scure-base/index.js +0 -6
- package/dist/cjs/src/static_dependencies/scure-bip32/index.js +19 -1
- package/dist/cjs/src/static_dependencies/scure-bip39/index.js +1 -1
- package/dist/cjs/src/static_dependencies/scure-bip39/wordlists/english.js +0 -6
- package/dist/cjs/src/static_dependencies/scure-starknet/index.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/constants.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +4 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +3 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/num.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +1 -1
- package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +0 -6
- package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
- package/dist/cjs/src/tokocrypto.js +1 -1
- package/dist/cjs/src/toobit.js +1 -1
- package/dist/cjs/src/upbit.js +1 -1
- package/dist/cjs/src/wavesexchange.js +1 -1
- package/dist/cjs/src/weex.js +2 -2
- package/dist/cjs/src/whitebit.js +3 -1
- package/dist/cjs/src/woo.js +1 -1
- package/dist/cjs/src/woofipro.js +1 -1
- package/dist/cjs/src/xt.js +1 -1
- package/dist/cjs/src/yobit.js +1 -1
- package/dist/cjs/src/zaif.js +1 -1
- package/dist/cjs/src/zebpay.js +1 -1
- package/dist/cjs/src/zonda.js +1 -1
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -7
- package/js/src/abstract/aftermath.js +0 -6
- package/js/src/abstract/alpaca.js +0 -6
- package/js/src/abstract/apex.js +0 -6
- package/js/src/abstract/arkham.js +0 -6
- package/js/src/abstract/ascendex.js +0 -6
- package/js/src/abstract/aster.js +0 -6
- package/js/src/abstract/backpack.js +0 -6
- package/js/src/abstract/bequant.js +0 -6
- package/js/src/abstract/bigone.js +0 -6
- package/js/src/abstract/binance.js +0 -6
- package/js/src/abstract/binancecoinm.js +0 -6
- package/js/src/abstract/binanceus.js +0 -6
- package/js/src/abstract/binanceusdm.js +0 -6
- package/js/src/abstract/bingx.js +0 -6
- package/js/src/abstract/bit2c.js +0 -6
- package/js/src/abstract/bitbank.js +0 -6
- package/js/src/abstract/bitbns.js +0 -6
- package/js/src/abstract/bitfinex.js +0 -6
- package/js/src/abstract/bitflyer.js +0 -6
- package/js/src/abstract/bitget.js +0 -6
- package/js/src/abstract/bithumb.js +0 -6
- package/js/src/abstract/bitmart.js +0 -6
- package/js/src/abstract/bitmex.js +0 -6
- package/js/src/abstract/bitopro.js +0 -6
- package/js/src/abstract/bitrue.js +0 -6
- package/js/src/abstract/bitso.js +0 -6
- package/js/src/abstract/bitstamp.js +0 -6
- package/js/src/abstract/bitteam.js +0 -6
- package/js/src/abstract/bittrade.js +0 -6
- package/js/src/abstract/bitvavo.js +0 -6
- package/js/src/abstract/blockchaincom.js +0 -6
- package/js/src/abstract/blofin.js +0 -6
- package/js/src/abstract/btcbox.js +0 -6
- package/js/src/abstract/btcmarkets.js +0 -6
- package/js/src/abstract/btcturk.js +0 -6
- package/js/src/abstract/bullish.js +0 -6
- package/js/src/abstract/bybit.js +0 -6
- package/js/src/abstract/bydfi.js +0 -6
- package/js/src/abstract/cex.js +0 -6
- package/js/src/abstract/coinbase.js +0 -6
- package/js/src/abstract/coinbaseadvanced.js +0 -6
- package/js/src/abstract/coinbaseexchange.js +0 -6
- package/js/src/abstract/coinbaseinternational.js +0 -6
- package/js/src/abstract/coincheck.js +0 -6
- package/js/src/abstract/coinex.js +0 -6
- package/js/src/abstract/coinmate.js +0 -6
- package/js/src/abstract/coinmetro.js +0 -6
- package/js/src/abstract/coinone.js +0 -6
- package/js/src/abstract/coinsph.js +0 -6
- package/js/src/abstract/coinspot.js +0 -6
- package/js/src/abstract/cryptocom.js +0 -6
- package/js/src/abstract/cryptomus.js +0 -6
- package/js/src/abstract/deepcoin.js +0 -6
- package/js/src/abstract/delta.js +0 -6
- package/js/src/abstract/deribit.js +0 -6
- package/js/src/abstract/derive.js +0 -6
- package/js/src/abstract/digifinex.js +0 -6
- package/js/src/abstract/dydx.js +0 -6
- package/js/src/abstract/exmo.js +0 -6
- package/js/src/abstract/fmfwio.js +0 -6
- package/js/src/abstract/foxbit.js +0 -6
- package/js/src/abstract/gate.js +0 -6
- package/js/src/abstract/gateio.js +0 -6
- package/js/src/abstract/gemini.js +0 -6
- package/js/src/abstract/grvt.js +0 -6
- package/js/src/abstract/hashkey.js +0 -6
- package/js/src/abstract/hibachi.js +0 -6
- package/js/src/abstract/hitbtc.js +0 -6
- package/js/src/abstract/hollaex.js +0 -6
- package/js/src/abstract/htx.js +0 -6
- package/js/src/abstract/huobi.js +0 -6
- package/js/src/abstract/hyperliquid.js +0 -6
- package/js/src/abstract/independentreserve.js +0 -6
- package/js/src/abstract/indodax.js +0 -6
- package/js/src/abstract/kraken.js +0 -6
- package/js/src/abstract/krakenfutures.js +0 -6
- package/js/src/abstract/kucoin.d.ts +5 -0
- package/js/src/abstract/kucoin.js +0 -6
- package/js/src/abstract/kucoinfutures.d.ts +5 -0
- package/js/src/abstract/kucoinfutures.js +0 -6
- package/js/src/abstract/latoken.js +0 -6
- package/js/src/abstract/lbank.js +0 -6
- package/js/src/abstract/lighter.js +0 -6
- package/js/src/abstract/luno.js +0 -6
- package/js/src/abstract/mercado.js +0 -6
- package/js/src/abstract/mexc.js +0 -6
- package/js/src/abstract/modetrade.js +0 -6
- package/js/src/abstract/myokx.d.ts +34 -0
- package/js/src/abstract/myokx.js +0 -6
- package/js/src/abstract/ndax.js +0 -6
- package/js/src/abstract/novadax.js +0 -6
- package/js/src/abstract/okx.d.ts +34 -0
- package/js/src/abstract/okx.js +0 -6
- package/js/src/abstract/okxus.d.ts +34 -0
- package/js/src/abstract/okxus.js +0 -6
- package/js/src/abstract/onetrading.js +0 -6
- package/js/src/abstract/oxfun.js +0 -6
- package/js/src/abstract/p2b.js +0 -6
- package/js/src/abstract/pacifica.js +0 -6
- package/js/src/abstract/paradex.js +0 -6
- package/js/src/abstract/paymium.js +0 -6
- package/js/src/abstract/phemex.js +0 -6
- package/js/src/abstract/poloniex.js +0 -6
- package/js/src/abstract/tokocrypto.js +0 -6
- package/js/src/abstract/toobit.js +0 -6
- package/js/src/abstract/upbit.js +0 -6
- package/js/src/abstract/wavesexchange.js +0 -6
- package/js/src/abstract/weex.js +0 -6
- package/js/src/abstract/whitebit.js +0 -6
- package/js/src/abstract/woo.js +0 -6
- package/js/src/abstract/woofipro.js +0 -6
- package/js/src/abstract/xt.js +0 -6
- package/js/src/abstract/yobit.js +0 -6
- package/js/src/abstract/zaif.js +0 -6
- package/js/src/abstract/zebpay.js +0 -6
- package/js/src/abstract/zonda.js +0 -6
- package/js/src/aftermath.js +0 -6
- package/js/src/alpaca.js +0 -6
- package/js/src/apex.js +0 -6
- package/js/src/arkham.js +0 -6
- package/js/src/ascendex.js +0 -6
- package/js/src/aster.js +0 -6
- package/js/src/backpack.js +0 -6
- package/js/src/base/Exchange.d.ts +6 -1
- package/js/src/base/Exchange.js +51 -19
- package/js/src/base/Precise.js +0 -6
- package/js/src/base/errorHierarchy.js +0 -6
- package/js/src/base/errors.js +0 -6
- package/js/src/base/functions/crypto.js +0 -6
- package/js/src/base/functions/encode.js +0 -6
- package/js/src/base/functions/generic.js +0 -6
- package/js/src/base/functions/io.js +0 -6
- package/js/src/base/functions/misc.js +0 -6
- package/js/src/base/functions/number.js +0 -6
- package/js/src/base/functions/platform.js +0 -6
- package/js/src/base/functions/rsa.js +0 -6
- package/js/src/base/functions/string.js +0 -6
- package/js/src/base/functions/throttle.js +0 -6
- package/js/src/base/functions/time.js +0 -6
- package/js/src/base/functions/totp.js +0 -6
- package/js/src/base/functions/type.js +0 -6
- package/js/src/base/functions.js +0 -6
- package/js/src/base/types.js +0 -6
- package/js/src/base/ws/Cache.js +0 -6
- package/js/src/base/ws/Client.js +0 -6
- package/js/src/base/ws/Future.js +0 -6
- package/js/src/base/ws/OrderBook.js +0 -6
- package/js/src/base/ws/OrderBookSide.js +0 -6
- package/js/src/base/ws/WsClient.js +0 -6
- package/js/src/base/ws/functions.js +0 -6
- package/js/src/bequant.js +0 -6
- package/js/src/bigone.js +0 -6
- package/js/src/binance.d.ts +1 -1
- package/js/src/binance.js +22 -16
- package/js/src/binancecoinm.js +0 -6
- package/js/src/binanceus.js +0 -6
- package/js/src/binanceusdm.js +0 -6
- package/js/src/bingx.js +0 -6
- package/js/src/bit2c.js +0 -6
- package/js/src/bitbank.js +0 -6
- package/js/src/bitbns.js +0 -6
- package/js/src/bitfinex.js +0 -6
- package/js/src/bitflyer.js +0 -6
- package/js/src/bitget.js +6 -9
- package/js/src/bithumb.js +0 -6
- package/js/src/bitmart.js +0 -6
- package/js/src/bitmex.js +0 -6
- package/js/src/bitopro.js +0 -6
- package/js/src/bitrue.js +0 -6
- package/js/src/bitso.js +0 -6
- package/js/src/bitstamp.js +0 -6
- package/js/src/bitteam.js +0 -6
- package/js/src/bittrade.js +0 -6
- package/js/src/bitvavo.js +0 -6
- package/js/src/blockchaincom.js +0 -6
- package/js/src/blofin.js +25 -36
- package/js/src/btcbox.js +0 -6
- package/js/src/btcmarkets.js +0 -6
- package/js/src/btcturk.js +0 -6
- package/js/src/bullish.js +0 -6
- package/js/src/bybit.js +0 -6
- package/js/src/bydfi.js +1 -7
- package/js/src/cex.js +0 -6
- package/js/src/coinbase.js +0 -6
- package/js/src/coinbaseadvanced.js +0 -6
- package/js/src/coinbaseexchange.js +0 -6
- package/js/src/coinbaseinternational.js +0 -6
- package/js/src/coincheck.js +0 -6
- package/js/src/coinex.js +0 -6
- package/js/src/coinmate.js +0 -6
- package/js/src/coinmetro.js +0 -6
- package/js/src/coinone.js +0 -6
- package/js/src/coinsph.js +0 -6
- package/js/src/coinspot.js +0 -6
- package/js/src/cryptocom.js +0 -6
- package/js/src/cryptomus.js +0 -6
- package/js/src/deepcoin.js +1 -7
- package/js/src/delta.js +0 -6
- package/js/src/deribit.js +0 -6
- package/js/src/derive.js +0 -6
- package/js/src/digifinex.js +0 -6
- package/js/src/dydx.js +0 -6
- package/js/src/exmo.js +0 -6
- package/js/src/fmfwio.js +0 -6
- package/js/src/foxbit.js +0 -6
- package/js/src/gate.js +0 -7
- package/js/src/gateio.js +0 -6
- package/js/src/gemini.js +0 -6
- package/js/src/grvt.js +14 -20
- package/js/src/hashkey.js +0 -6
- package/js/src/hibachi.js +1 -7
- package/js/src/hitbtc.js +0 -6
- package/js/src/hollaex.js +0 -6
- package/js/src/htx.js +0 -6
- package/js/src/huobi.js +0 -6
- package/js/src/hyperliquid.js +0 -6
- package/js/src/independentreserve.js +0 -6
- package/js/src/indodax.js +0 -6
- package/js/src/kraken.js +0 -6
- package/js/src/krakenfutures.js +0 -6
- package/js/src/kucoin.d.ts +27 -11
- package/js/src/kucoin.js +245 -116
- package/js/src/kucoinfutures.js +0 -7
- package/js/src/latoken.js +0 -6
- package/js/src/lbank.js +0 -6
- package/js/src/lighter.d.ts +11 -2
- package/js/src/lighter.js +313 -148
- package/js/src/luno.js +0 -6
- package/js/src/mercado.js +0 -6
- package/js/src/mexc.js +0 -6
- package/js/src/modetrade.js +0 -6
- package/js/src/myokx.js +0 -6
- package/js/src/ndax.js +0 -6
- package/js/src/novadax.js +0 -6
- package/js/src/okx.js +46 -7
- package/js/src/okxus.js +0 -6
- package/js/src/onetrading.js +0 -6
- package/js/src/oxfun.js +0 -6
- package/js/src/p2b.js +0 -6
- package/js/src/pacifica.js +0 -6
- package/js/src/paradex.js +0 -6
- package/js/src/paymium.js +0 -6
- package/js/src/phemex.js +0 -6
- package/js/src/poloniex.js +0 -6
- package/js/src/pro/aftermath.js +0 -6
- package/js/src/pro/alpaca.js +0 -6
- package/js/src/pro/apex.js +0 -6
- package/js/src/pro/arkham.js +0 -6
- package/js/src/pro/ascendex.js +0 -6
- package/js/src/pro/aster.d.ts +1 -1
- package/js/src/pro/aster.js +23 -48
- package/js/src/pro/backpack.js +0 -6
- package/js/src/pro/bequant.js +0 -6
- package/js/src/pro/binance.js +1 -7
- package/js/src/pro/binancecoinm.js +0 -6
- package/js/src/pro/binanceus.js +0 -6
- package/js/src/pro/binanceusdm.js +0 -6
- package/js/src/pro/bingx.js +0 -6
- package/js/src/pro/bitfinex.js +0 -6
- package/js/src/pro/bitget.js +0 -6
- package/js/src/pro/bithumb.js +0 -6
- package/js/src/pro/bitmart.js +0 -6
- package/js/src/pro/bitmex.js +0 -6
- package/js/src/pro/bitopro.js +0 -6
- package/js/src/pro/bitrue.js +0 -6
- package/js/src/pro/bitstamp.js +0 -6
- package/js/src/pro/bittrade.js +0 -6
- package/js/src/pro/bitvavo.js +0 -6
- package/js/src/pro/blockchaincom.js +0 -6
- package/js/src/pro/blofin.js +0 -6
- package/js/src/pro/bullish.js +0 -6
- package/js/src/pro/bybit.js +0 -6
- package/js/src/pro/bydfi.js +0 -6
- package/js/src/pro/cex.js +0 -6
- package/js/src/pro/coinbase.js +0 -6
- package/js/src/pro/coinbaseadvanced.js +0 -6
- package/js/src/pro/coinbaseexchange.js +0 -6
- package/js/src/pro/coinbaseinternational.js +0 -6
- package/js/src/pro/coincheck.js +0 -6
- package/js/src/pro/coinex.js +0 -6
- package/js/src/pro/coinone.js +0 -6
- package/js/src/pro/cryptocom.js +0 -6
- package/js/src/pro/deepcoin.js +0 -6
- package/js/src/pro/deribit.js +0 -6
- package/js/src/pro/derive.js +0 -6
- package/js/src/pro/dydx.js +0 -6
- package/js/src/pro/exmo.js +0 -6
- package/js/src/pro/gate.d.ts +1 -0
- package/js/src/pro/gate.js +77 -12
- package/js/src/pro/gateio.js +0 -6
- package/js/src/pro/gemini.js +0 -6
- package/js/src/pro/grvt.js +4 -11
- package/js/src/pro/hashkey.js +0 -6
- package/js/src/pro/hitbtc.js +0 -6
- package/js/src/pro/hollaex.js +0 -6
- package/js/src/pro/htx.js +0 -6
- package/js/src/pro/huobi.js +0 -6
- package/js/src/pro/hyperliquid.d.ts +48 -1
- package/js/src/pro/hyperliquid.js +362 -8
- package/js/src/pro/independentreserve.js +0 -6
- package/js/src/pro/kraken.js +0 -6
- package/js/src/pro/krakenfutures.js +0 -6
- package/js/src/pro/kucoin.d.ts +65 -6
- package/js/src/pro/kucoin.js +1190 -109
- package/js/src/pro/kucoinfutures.js +0 -7
- package/js/src/pro/lbank.js +0 -6
- package/js/src/pro/lighter.js +1 -6
- package/js/src/pro/luno.js +0 -6
- package/js/src/pro/mexc.js +0 -6
- package/js/src/pro/modetrade.js +0 -6
- package/js/src/pro/myokx.js +0 -6
- package/js/src/pro/ndax.js +0 -6
- package/js/src/pro/okx.js +0 -6
- package/js/src/pro/okxus.js +0 -6
- package/js/src/pro/onetrading.js +0 -6
- package/js/src/pro/oxfun.js +0 -6
- package/js/src/pro/p2b.js +0 -6
- package/js/src/pro/pacifica.js +0 -6
- package/js/src/pro/paradex.js +0 -6
- package/js/src/pro/phemex.js +0 -6
- package/js/src/pro/poloniex.js +0 -6
- package/js/src/pro/toobit.js +0 -6
- package/js/src/pro/upbit.js +0 -6
- package/js/src/pro/weex.js +0 -6
- package/js/src/pro/whitebit.js +0 -6
- package/js/src/pro/woo.js +0 -6
- package/js/src/pro/woofipro.js +0 -6
- package/js/src/pro/xt.js +0 -6
- package/js/src/protobuf/mexc/compiled.cjs +0 -6
- package/js/src/static_dependencies/dydx-v4-client/cosmos/base/v1beta1/coin.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/keys.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/v1beta1/multisig.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/secp256k1/keys.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/signing/v1beta1/signing.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/v1beta1/tx.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/accountplus/tx.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/block_rate_limit_config.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/clob_pair.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/equity_tier_limit_config.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/finalize_block.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations_config.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/matches.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order_removals.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/tx.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/transfer.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/tx.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/asset_position.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/perpetual_position.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/subaccount.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/google/protobuf/any.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/helpers.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/long/index.cjs +0 -6
- package/js/src/static_dependencies/dydx-v4-client/onboarding.js +0 -6
- package/js/src/static_dependencies/dydx-v4-client/registry.js +0 -6
- package/js/src/static_dependencies/ethers/abi-coder.js +0 -6
- package/js/src/static_dependencies/ethers/address/address.js +0 -6
- package/js/src/static_dependencies/ethers/address/checks.js +0 -6
- package/js/src/static_dependencies/ethers/address/contract-address.js +0 -6
- package/js/src/static_dependencies/ethers/address/index.js +0 -6
- package/js/src/static_dependencies/ethers/bytes32.js +0 -6
- package/js/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
- package/js/src/static_dependencies/ethers/coders/address.js +0 -6
- package/js/src/static_dependencies/ethers/coders/anonymous.js +0 -6
- package/js/src/static_dependencies/ethers/coders/array.js +0 -6
- package/js/src/static_dependencies/ethers/coders/boolean.js +0 -6
- package/js/src/static_dependencies/ethers/coders/bytes.js +0 -6
- package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -6
- package/js/src/static_dependencies/ethers/coders/null.js +0 -6
- package/js/src/static_dependencies/ethers/coders/number.js +0 -6
- package/js/src/static_dependencies/ethers/coders/string.js +0 -6
- package/js/src/static_dependencies/ethers/coders/tuple.js +0 -6
- package/js/src/static_dependencies/ethers/fragments.js +0 -6
- package/js/src/static_dependencies/ethers/hash/index.js +0 -6
- package/js/src/static_dependencies/ethers/hash/solidity.js +0 -6
- package/js/src/static_dependencies/ethers/hash/typed-data.js +0 -6
- package/js/src/static_dependencies/ethers/index.js +0 -6
- package/js/src/static_dependencies/ethers/interface.js +0 -6
- package/js/src/static_dependencies/ethers/typed.js +0 -6
- package/js/src/static_dependencies/ethers/utils/base58.js +0 -6
- package/js/src/static_dependencies/ethers/utils/base64-browser.js +0 -6
- package/js/src/static_dependencies/ethers/utils/base64.js +0 -6
- package/js/src/static_dependencies/ethers/utils/data.js +0 -6
- package/js/src/static_dependencies/ethers/utils/errors.js +0 -6
- package/js/src/static_dependencies/ethers/utils/events.js +0 -6
- package/js/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
- package/js/src/static_dependencies/ethers/utils/index.js +0 -6
- package/js/src/static_dependencies/ethers/utils/maths.js +0 -6
- package/js/src/static_dependencies/ethers/utils/properties.js +0 -6
- package/js/src/static_dependencies/ethers/utils/rlp-decode.js +0 -6
- package/js/src/static_dependencies/ethers/utils/rlp-encode.js +0 -6
- package/js/src/static_dependencies/ethers/utils/rlp.js +0 -6
- package/js/src/static_dependencies/ethers/utils/units.js +0 -6
- package/js/src/static_dependencies/ethers/utils/utf8.js +0 -6
- package/js/src/static_dependencies/ethers/utils/uuid.js +0 -6
- package/js/src/static_dependencies/fflake/browser.js +0 -6
- package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -6
- package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -6
- package/js/src/static_dependencies/jsencrypt/index.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
- package/js/src/static_dependencies/messagepack/msgpack.js +0 -6
- package/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -6
- package/js/src/static_dependencies/noble-curves/bn.js +0 -6
- package/js/src/static_dependencies/noble-curves/ed25519.js +0 -6
- package/js/src/static_dependencies/noble-curves/ed448.js +0 -6
- package/js/src/static_dependencies/noble-curves/index.js +0 -6
- package/js/src/static_dependencies/noble-curves/jubjub.js +0 -6
- package/js/src/static_dependencies/noble-curves/p256.js +0 -6
- package/js/src/static_dependencies/noble-curves/p384.js +0 -6
- package/js/src/static_dependencies/noble-curves/p521.js +0 -6
- package/js/src/static_dependencies/noble-curves/pasta.js +0 -6
- package/js/src/static_dependencies/noble-curves/secp256k1.js +0 -6
- package/js/src/static_dependencies/noble-hashes/_assert.js +0 -6
- package/js/src/static_dependencies/noble-hashes/_blake2.js +0 -6
- package/js/src/static_dependencies/noble-hashes/_sha2.js +0 -6
- package/js/src/static_dependencies/noble-hashes/_u64.js +0 -6
- package/js/src/static_dependencies/noble-hashes/argon2.js +0 -6
- package/js/src/static_dependencies/noble-hashes/blake2b.js +0 -6
- package/js/src/static_dependencies/noble-hashes/blake2s.js +0 -6
- package/js/src/static_dependencies/noble-hashes/blake3.js +0 -6
- package/js/src/static_dependencies/noble-hashes/crypto.js +0 -6
- package/js/src/static_dependencies/noble-hashes/cryptoNode.js +0 -6
- package/js/src/static_dependencies/noble-hashes/eskdf.js +0 -6
- package/js/src/static_dependencies/noble-hashes/hkdf.js +0 -6
- package/js/src/static_dependencies/noble-hashes/hmac.js +0 -6
- package/js/src/static_dependencies/noble-hashes/index.js +0 -6
- package/js/src/static_dependencies/noble-hashes/md5.js +0 -6
- package/js/src/static_dependencies/noble-hashes/pbkdf2.js +0 -6
- package/js/src/static_dependencies/noble-hashes/ripemd160.js +0 -6
- package/js/src/static_dependencies/noble-hashes/scrypt.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha1.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha256.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha3-addons.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha3.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha512.js +0 -6
- package/js/src/static_dependencies/noble-hashes/utils.js +0 -6
- package/js/src/static_dependencies/node-fetch/body.js +0 -6
- package/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -6
- package/js/src/static_dependencies/node-fetch/errors/base.js +0 -6
- package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -6
- package/js/src/static_dependencies/node-fetch/headers.js +0 -6
- package/js/src/static_dependencies/node-fetch/index.js +0 -6
- package/js/src/static_dependencies/node-fetch/request.js +0 -6
- package/js/src/static_dependencies/node-fetch/response.js +0 -6
- package/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
- package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
- package/js/src/static_dependencies/node-fetch/utils/is.js +0 -6
- package/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -6
- package/js/src/static_dependencies/proxies/agent-base/helpers.js +0 -6
- package/js/src/static_dependencies/proxies/agent-base/index.js +0 -6
- package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -6
- package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -6
- package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
- package/js/src/static_dependencies/qs/formats.js +0 -6
- package/js/src/static_dependencies/qs/index.js +0 -6
- package/js/src/static_dependencies/qs/parse.js +0 -6
- package/js/src/static_dependencies/qs/stringify.js +0 -6
- package/js/src/static_dependencies/qs/utils.js +0 -6
- package/js/src/static_dependencies/scure-base/index.js +0 -6
- package/js/src/static_dependencies/scure-bip32/index.js +0 -6
- package/js/src/static_dependencies/scure-bip39/index.js +0 -6
- package/js/src/static_dependencies/scure-bip39/wordlists/english.js +0 -6
- package/js/src/static_dependencies/scure-starknet/index.js +0 -6
- package/js/src/static_dependencies/starknet/constants.js +0 -6
- package/js/src/static_dependencies/starknet/index.js +0 -6
- package/js/src/static_dependencies/starknet/types/cairoEnum.js +0 -6
- package/js/src/static_dependencies/starknet/types/calldata.js +0 -6
- package/js/src/static_dependencies/starknet/types/index.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/index.js +0 -6
- package/js/src/static_dependencies/starknet/types/typedData.js +0 -6
- package/js/src/static_dependencies/starknet/utils/address.js +0 -6
- package/js/src/static_dependencies/starknet/utils/assert.js +0 -6
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +0 -6
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +0 -6
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/index.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/validate.js +0 -6
- package/js/src/static_dependencies/starknet/utils/encode.js +0 -6
- package/js/src/static_dependencies/starknet/utils/hash/classHash.js +0 -6
- package/js/src/static_dependencies/starknet/utils/hash/index.js +0 -6
- package/js/src/static_dependencies/starknet/utils/merkle.js +0 -6
- package/js/src/static_dependencies/starknet/utils/num.js +0 -6
- package/js/src/static_dependencies/starknet/utils/selector.js +0 -6
- package/js/src/static_dependencies/starknet/utils/shortString.js +0 -6
- package/js/src/static_dependencies/starknet/utils/starknetId.js +0 -6
- package/js/src/static_dependencies/starknet/utils/typedData.js +0 -6
- package/js/src/static_dependencies/starknet/utils/uint256.js +0 -6
- package/js/src/static_dependencies/starknet/utils/url.js +0 -6
- package/js/src/static_dependencies/watchable/src/index.js +0 -6
- package/js/src/static_dependencies/watchable/src/types.js +0 -6
- package/js/src/static_dependencies/watchable/src/unpromise.js +0 -6
- package/js/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
- package/js/src/tokocrypto.js +0 -6
- package/js/src/toobit.js +0 -6
- package/js/src/upbit.js +0 -6
- package/js/src/wavesexchange.js +0 -6
- package/js/src/weex.js +1 -7
- package/js/src/whitebit.js +2 -6
- package/js/src/woo.js +0 -6
- package/js/src/woofipro.js +0 -6
- package/js/src/xt.js +0 -6
- package/js/src/yobit.js +0 -6
- package/js/src/zaif.js +0 -6
- package/js/src/zebpay.js +0 -6
- package/js/src/zonda.js +0 -6
- package/package.json +1 -1
|
@@ -7,7 +7,7 @@ var errors = require('../base/errors.js');
|
|
|
7
7
|
var Precise = require('../base/Precise.js');
|
|
8
8
|
var Cache = require('../base/ws/Cache.js');
|
|
9
9
|
|
|
10
|
-
//
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
11
|
// ---------------------------------------------------------------------------
|
|
12
12
|
class kucoin extends kucoin$1["default"] {
|
|
13
13
|
describe() {
|
|
@@ -40,7 +40,20 @@ class kucoin extends kucoin$1["default"] {
|
|
|
40
40
|
'unWatchTrades': true,
|
|
41
41
|
'unWatchhTradesForSymbols': true,
|
|
42
42
|
},
|
|
43
|
+
'urls': {
|
|
44
|
+
// only for pro (uta) accounts
|
|
45
|
+
'api': {
|
|
46
|
+
'ws': {
|
|
47
|
+
'spot': 'wss://x-push-spot.kucoin.com',
|
|
48
|
+
'futures': 'wss://x-push-futures.kucoin.com',
|
|
49
|
+
'private': 'wss://wsapi-push.kucoin.com',
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
},
|
|
43
53
|
'options': {
|
|
54
|
+
'utaToken': undefined,
|
|
55
|
+
'utaTokenLastUpdate': 0,
|
|
56
|
+
'utaTokenRefreshInterval': 1000 * 60 * 60 * 24,
|
|
44
57
|
'tradesLimit': 1000,
|
|
45
58
|
'watchTicker': {
|
|
46
59
|
'spotMethod': '/market/snapshot', // '/market/ticker'
|
|
@@ -48,6 +61,7 @@ class kucoin extends kucoin$1["default"] {
|
|
|
48
61
|
'watchOrderBook': {
|
|
49
62
|
'snapshotDelay': 5,
|
|
50
63
|
'snapshotMaxRetries': 3,
|
|
64
|
+
'utaDepth': 'increment',
|
|
51
65
|
'spotMethod': '/market/level2',
|
|
52
66
|
'contractMethod': '/contractMarket/level2', // '/contractMarket/level2Depth5' or '/contractMarket/level2Depth20'
|
|
53
67
|
},
|
|
@@ -62,6 +76,10 @@ class kucoin extends kucoin$1["default"] {
|
|
|
62
76
|
'fetchPositionSnapshot': true,
|
|
63
77
|
'awaitPositionSnapshot': true, // whether to wait for the position snapshot before providing updates
|
|
64
78
|
},
|
|
79
|
+
'watchPositions': {
|
|
80
|
+
'fetchPositionsSnapshot': true,
|
|
81
|
+
'awaitPositionsSnapshot': true, // whether to wait for the positions snapshot before providing updates
|
|
82
|
+
},
|
|
65
83
|
},
|
|
66
84
|
'streaming': {
|
|
67
85
|
// kucoin does not support built-in ws protocol-level ping-pong
|
|
@@ -165,6 +183,95 @@ class kucoin extends kucoin$1["default"] {
|
|
|
165
183
|
}
|
|
166
184
|
return await this.watch(url, messageHash, message, subscriptionHash, subscription);
|
|
167
185
|
}
|
|
186
|
+
async subscribePublicUta(messageHash, channel, symbol, params = {}, subscription = undefined) {
|
|
187
|
+
const requestId = this.requestId().toString();
|
|
188
|
+
const market = this.market(symbol);
|
|
189
|
+
const urlType = market['contract'] ? 'futures' : 'spot';
|
|
190
|
+
const tradeType = urlType.toUpperCase();
|
|
191
|
+
let action = 'subscribe';
|
|
192
|
+
if (subscription !== undefined) {
|
|
193
|
+
const unsubscribe = this.safeBool(subscription, 'unsubscribe', false);
|
|
194
|
+
action = unsubscribe ? 'unsubscribe' : action;
|
|
195
|
+
}
|
|
196
|
+
const request = {
|
|
197
|
+
'id': requestId,
|
|
198
|
+
'action': action,
|
|
199
|
+
'channel': channel,
|
|
200
|
+
'tradeType': tradeType,
|
|
201
|
+
'symbol': market['id'],
|
|
202
|
+
};
|
|
203
|
+
const message = this.extend(request, params);
|
|
204
|
+
const url = this.safeString(this.urls['api']['ws'], urlType);
|
|
205
|
+
const client = this.client(url);
|
|
206
|
+
if (!(messageHash in client.subscriptions)) {
|
|
207
|
+
client.subscriptions[requestId] = messageHash;
|
|
208
|
+
}
|
|
209
|
+
return await this.watch(url, messageHash, message, messageHash, subscription);
|
|
210
|
+
}
|
|
211
|
+
async subscribePrivateUta(messageHashes, subscribeHash, channel, symbol = undefined, params = {}, subscription = undefined) {
|
|
212
|
+
this.checkRequiredCredentials();
|
|
213
|
+
const requestId = this.requestId().toString();
|
|
214
|
+
let action = 'subscribe';
|
|
215
|
+
if (subscription !== undefined) {
|
|
216
|
+
const unsubscribe = this.safeBool(subscription, 'unsubscribe', false);
|
|
217
|
+
action = unsubscribe ? 'unsubscribe' : action;
|
|
218
|
+
}
|
|
219
|
+
const request = {
|
|
220
|
+
'id': requestId,
|
|
221
|
+
'action': action,
|
|
222
|
+
'channel': channel,
|
|
223
|
+
};
|
|
224
|
+
if (symbol !== undefined) {
|
|
225
|
+
const market = this.market(symbol);
|
|
226
|
+
request['symbol'] = market['id'];
|
|
227
|
+
}
|
|
228
|
+
const message = this.extend(request, params);
|
|
229
|
+
const url = await this.getUtaUrl();
|
|
230
|
+
const client = this.client(url);
|
|
231
|
+
if (!(subscribeHash in client.subscriptions)) {
|
|
232
|
+
client.subscriptions[requestId] = subscribeHash;
|
|
233
|
+
}
|
|
234
|
+
return await this.watchMultiple(url, messageHashes, message, [subscribeHash], subscription);
|
|
235
|
+
}
|
|
236
|
+
async getUtaUrl() {
|
|
237
|
+
const utaToken = await this.authenticateUta();
|
|
238
|
+
return this.urls['api']['ws']['private'] + '?token=' + utaToken;
|
|
239
|
+
}
|
|
240
|
+
async authenticateUta() {
|
|
241
|
+
this.checkRequiredCredentials();
|
|
242
|
+
const utaToken = this.safeValue(this.options, 'utaToken');
|
|
243
|
+
const lastUpdate = this.safeInteger(this.options, 'utaTokenLastUpdate', 0);
|
|
244
|
+
let refreshInterval = 1000 * 60 * 60 * 24; // 24 hours
|
|
245
|
+
refreshInterval = this.safeInteger(this.options, 'utaTokenRefreshInterval', refreshInterval);
|
|
246
|
+
const now = this.milliseconds();
|
|
247
|
+
const expired = (now - lastUpdate) >= refreshInterval;
|
|
248
|
+
const messageHash = 'utaToken';
|
|
249
|
+
const url = this.urls['api']['ws']['private'];
|
|
250
|
+
const client = this.client(url);
|
|
251
|
+
if ((utaToken === undefined) || expired) {
|
|
252
|
+
if (messageHash in client.futures) {
|
|
253
|
+
// wait the existing future if it's already being fetched by another call
|
|
254
|
+
await client.future(messageHash);
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
// fetch new token and store the future to the .futures to prevent concurrent fetches
|
|
258
|
+
client.future(messageHash);
|
|
259
|
+
try {
|
|
260
|
+
const response = await this.privatePostBulletPrivate({ 'version': 'v2' });
|
|
261
|
+
const data = this.safeDict(response, 'data', {});
|
|
262
|
+
const utaTokenString = this.safeString(data, 'token');
|
|
263
|
+
this.options['utaTokenLastUpdate'] = now;
|
|
264
|
+
this.options['utaToken'] = utaTokenString;
|
|
265
|
+
client.resolve(utaTokenString, messageHash);
|
|
266
|
+
}
|
|
267
|
+
catch (e) {
|
|
268
|
+
this.options['utaToken'] = undefined;
|
|
269
|
+
client.reject(e, messageHash);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return this.safeString(this.options, 'utaToken');
|
|
274
|
+
}
|
|
168
275
|
async unSubscribe(url, messageHash, topic, subscriptionHash, params = {}, subscription = undefined) {
|
|
169
276
|
return await this.unSubscribeMultiple(url, [messageHash], topic, [subscriptionHash], params, subscription);
|
|
170
277
|
}
|
|
@@ -213,14 +320,24 @@ class kucoin extends kucoin$1["default"] {
|
|
|
213
320
|
* @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
214
321
|
* @see https://www.kucoin.com/docs-new/3470063w0
|
|
215
322
|
* @see https://www.kucoin.com/docs-new/3470081w0
|
|
323
|
+
* @see https://www.kucoin.com/docs-new/3470222w0
|
|
216
324
|
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
217
325
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
326
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
218
327
|
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/?id=ticker-structure}
|
|
219
328
|
*/
|
|
220
329
|
async watchTicker(symbol, params = {}) {
|
|
221
330
|
await this.loadMarkets();
|
|
222
331
|
const market = this.market(symbol);
|
|
223
332
|
symbol = market['symbol'];
|
|
333
|
+
let messageHash = 'ticker:' + symbol;
|
|
334
|
+
let uta = false;
|
|
335
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchTicker', 'uta', uta);
|
|
336
|
+
if (uta) {
|
|
337
|
+
messageHash = 'uta:' + messageHash;
|
|
338
|
+
const channel = 'ticker';
|
|
339
|
+
return await this.subscribePublicUta(messageHash, channel, symbol, params);
|
|
340
|
+
}
|
|
224
341
|
const isFuturesMethod = market['contract'];
|
|
225
342
|
const url = await this.negotiate(false, isFuturesMethod);
|
|
226
343
|
let method = '/market/snapshot';
|
|
@@ -231,7 +348,6 @@ class kucoin extends kucoin$1["default"] {
|
|
|
231
348
|
[method, params] = this.handleOptionAndParams(params, 'watchTicker', 'spotMethod', method);
|
|
232
349
|
}
|
|
233
350
|
const topic = method + ':' + market['id'];
|
|
234
|
-
const messageHash = 'ticker:' + symbol;
|
|
235
351
|
return await this.subscribe(url, messageHash, topic, params);
|
|
236
352
|
}
|
|
237
353
|
/**
|
|
@@ -240,8 +356,10 @@ class kucoin extends kucoin$1["default"] {
|
|
|
240
356
|
* @description unWatches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
241
357
|
* @see https://www.kucoin.com/docs-new/3470063w0
|
|
242
358
|
* @see https://www.kucoin.com/docs-new/3470081w0
|
|
359
|
+
* @see https://www.kucoin.com/docs-new/3470222w0
|
|
243
360
|
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
244
361
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
362
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
245
363
|
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/?id=ticker-structure}
|
|
246
364
|
*/
|
|
247
365
|
async unWatchTicker(symbol, params = {}) {
|
|
@@ -249,28 +367,39 @@ class kucoin extends kucoin$1["default"] {
|
|
|
249
367
|
const market = this.market(symbol);
|
|
250
368
|
symbol = market['symbol'];
|
|
251
369
|
const isFuturesMethod = market['contract'];
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
370
|
+
let uta = false;
|
|
371
|
+
[uta, params] = this.handleOptionAndParams(params, 'unWatchTicker', 'uta', uta);
|
|
372
|
+
const subscription = {
|
|
373
|
+
'symbols': [symbol],
|
|
374
|
+
'topic': 'ticker',
|
|
375
|
+
'unsubscribe': true,
|
|
376
|
+
};
|
|
377
|
+
let subMessageHash = 'ticker:' + symbol;
|
|
378
|
+
if (uta) {
|
|
379
|
+
subMessageHash = 'uta:' + subMessageHash;
|
|
380
|
+
subscription['subMessageHashes'] = [subMessageHash];
|
|
381
|
+
const utaMessageHash = 'unsubscribe:' + subMessageHash;
|
|
382
|
+
subscription['messageHashes'] = [utaMessageHash];
|
|
383
|
+
return await this.subscribePublicUta(utaMessageHash, 'ticker', symbol, params, subscription);
|
|
256
384
|
}
|
|
257
385
|
else {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
386
|
+
const url = await this.negotiate(false, isFuturesMethod);
|
|
387
|
+
let method = '/market/snapshot';
|
|
388
|
+
if (isFuturesMethod) {
|
|
389
|
+
method = '/contractMarket/ticker';
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
[method, params] = this.handleOptionAndParams(params, 'watchTicker', 'spotMethod', method);
|
|
393
|
+
}
|
|
394
|
+
const topic = method + ':' + market['id'];
|
|
395
|
+
const messageHash = 'unsubscribe:' + subMessageHash;
|
|
264
396
|
// we have to add the topic to the messageHashes and subMessageHashes
|
|
265
397
|
// because handleSubscriptionStatus needs them to remove the subscription from the client
|
|
266
398
|
// without them subscription would never be removed and re-subscribe would fail because of duplicate subscriptionHash
|
|
267
|
-
'messageHashes'
|
|
268
|
-
'subMessageHashes'
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
'symbols': [symbol],
|
|
272
|
-
};
|
|
273
|
-
return await this.unSubscribe(url, messageHash, topic, subMessageHash, params, subscription);
|
|
399
|
+
subscription['messageHashes'] = [messageHash, topic];
|
|
400
|
+
subscription['subMessageHashes'] = [subMessageHash, topic];
|
|
401
|
+
return await this.unSubscribe(url, messageHash, topic, subMessageHash, params, subscription);
|
|
402
|
+
}
|
|
274
403
|
}
|
|
275
404
|
/**
|
|
276
405
|
* @method
|
|
@@ -278,10 +407,12 @@ class kucoin extends kucoin$1["default"] {
|
|
|
278
407
|
* @see https://www.kucoin.com/docs-new/3470063w0
|
|
279
408
|
* @see https://www.kucoin.com/docs-new/3470064w0
|
|
280
409
|
* @see https://www.kucoin.com/docs-new/3470081w0
|
|
410
|
+
* @see https://www.kucoin.com/docs-new/3470222w0
|
|
281
411
|
* @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
|
282
412
|
* @param {string[]} symbols unified symbol of the market to fetch the ticker for
|
|
283
413
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
284
414
|
* @param {string} [params.method] *spot markets only* either '/market/snapshot' or '/market/ticker' default is '/market/ticker'
|
|
415
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
285
416
|
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/?id=ticker-structure}
|
|
286
417
|
*/
|
|
287
418
|
async watchTickers(symbols = undefined, params = {}) {
|
|
@@ -290,9 +421,11 @@ class kucoin extends kucoin$1["default"] {
|
|
|
290
421
|
const firstMarket = this.getMarketFromSymbols(symbols);
|
|
291
422
|
let marketType = undefined;
|
|
292
423
|
[marketType, params] = this.handleMarketTypeAndParams('watchTickers', firstMarket, params);
|
|
424
|
+
let uta = false;
|
|
425
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchTickers', 'uta', uta);
|
|
293
426
|
const isFuturesMethod = (marketType !== 'spot') && (marketType !== 'margin');
|
|
294
|
-
if (isFuturesMethod && symbols === undefined) {
|
|
295
|
-
throw new errors.ArgumentsRequired(this.id + ' watchTickers() requires a list of symbols for ' + marketType + ' markets');
|
|
427
|
+
if ((isFuturesMethod || uta) && symbols === undefined) {
|
|
428
|
+
throw new errors.ArgumentsRequired(this.id + ' watchTickers() requires a list of symbols for ' + marketType + ' markets and unified trading account (uta)');
|
|
296
429
|
}
|
|
297
430
|
const messageHash = 'tickers';
|
|
298
431
|
let method = '/market/ticker';
|
|
@@ -333,6 +466,49 @@ class kucoin extends kucoin$1["default"] {
|
|
|
333
466
|
}
|
|
334
467
|
return this.filterByArray(this.tickers, 'symbol', symbols);
|
|
335
468
|
}
|
|
469
|
+
async subscribePublicMultipleUta(messageHashes, channel, symbols, params = {}, subscription = undefined) {
|
|
470
|
+
const requestId = this.requestId().toString();
|
|
471
|
+
const market = this.getMarketFromSymbols(symbols);
|
|
472
|
+
const urlType = market['contract'] ? 'futures' : 'spot';
|
|
473
|
+
const tradeType = urlType.toUpperCase();
|
|
474
|
+
let action = 'subscribe';
|
|
475
|
+
if (subscription !== undefined) {
|
|
476
|
+
const unsubscribe = this.safeBool(subscription, 'unsubscribe', false);
|
|
477
|
+
action = unsubscribe ? 'unsubscribe' : action;
|
|
478
|
+
}
|
|
479
|
+
const request = {
|
|
480
|
+
'id': requestId,
|
|
481
|
+
'action': action,
|
|
482
|
+
'channel': channel,
|
|
483
|
+
'tradeType': tradeType,
|
|
484
|
+
'symbols': this.marketIds(symbols),
|
|
485
|
+
};
|
|
486
|
+
const message = this.extend(request, params);
|
|
487
|
+
const url = this.safeString(this.urls['api']['ws'], urlType);
|
|
488
|
+
const client = this.client(url);
|
|
489
|
+
const messageHashWithSymbols = channel + ':' + symbols.join(',');
|
|
490
|
+
if (!(messageHashWithSymbols in client.subscriptions)) {
|
|
491
|
+
client.subscriptions[requestId] = messageHashWithSymbols;
|
|
492
|
+
}
|
|
493
|
+
return await this.watchMultiple(url, messageHashes, message, messageHashes, subscription);
|
|
494
|
+
}
|
|
495
|
+
async watchUtaTickers(symbols = undefined, params = {}) {
|
|
496
|
+
await this.loadMarkets();
|
|
497
|
+
symbols = this.marketSymbols(symbols, undefined, false, true);
|
|
498
|
+
const messageHash = 'uta:ticker';
|
|
499
|
+
const messageHashes = [];
|
|
500
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
501
|
+
const symbol = this.safeString(symbols, i);
|
|
502
|
+
const market = this.market(symbol);
|
|
503
|
+
const subMessageHash = messageHash + ':' + market['symbol'];
|
|
504
|
+
messageHashes.push(subMessageHash);
|
|
505
|
+
}
|
|
506
|
+
const tickers = await this.subscribePublicMultipleUta(messageHashes, 'ticker', symbols, params);
|
|
507
|
+
if (this.newUpdates) {
|
|
508
|
+
return tickers;
|
|
509
|
+
}
|
|
510
|
+
return this.filterByArray(this.tickers, 'symbol', symbols);
|
|
511
|
+
}
|
|
336
512
|
handleTicker(client, message) {
|
|
337
513
|
//
|
|
338
514
|
// market/snapshot
|
|
@@ -424,7 +600,7 @@ class kucoin extends kucoin$1["default"] {
|
|
|
424
600
|
}
|
|
425
601
|
const data = this.safeDict(message, 'data', {});
|
|
426
602
|
const rawTicker = this.safeDict(data, 'data', data);
|
|
427
|
-
const ticker = this.
|
|
603
|
+
const ticker = this.parseSpotOrUtaTicker(rawTicker, market);
|
|
428
604
|
const symbol = ticker['symbol'];
|
|
429
605
|
this.tickers[symbol] = ticker;
|
|
430
606
|
const messageHash = 'ticker:' + symbol;
|
|
@@ -468,6 +644,61 @@ class kucoin extends kucoin$1["default"] {
|
|
|
468
644
|
const messageHash = 'ticker:' + market['symbol'];
|
|
469
645
|
client.resolve(ticker, messageHash);
|
|
470
646
|
}
|
|
647
|
+
handleUtaTicker(client, message) {
|
|
648
|
+
//
|
|
649
|
+
// {
|
|
650
|
+
// "T": "ticker.SPOT",
|
|
651
|
+
// "P": "1774100940787520626",
|
|
652
|
+
// "d": {
|
|
653
|
+
// "A": "0.5972689",
|
|
654
|
+
// "B": "23.3114947",
|
|
655
|
+
// "E": 20310552932,
|
|
656
|
+
// "M": "1774100940780000000",
|
|
657
|
+
// "S": "SELL",
|
|
658
|
+
// "a": "2155.55",
|
|
659
|
+
// "b": "2155.54",
|
|
660
|
+
// "l": "2155.54",
|
|
661
|
+
// "q": "0.0001529",
|
|
662
|
+
// "s": "ETH-USDT"
|
|
663
|
+
// }
|
|
664
|
+
// }
|
|
665
|
+
//
|
|
666
|
+
const data = this.safeDict(message, 'd', {});
|
|
667
|
+
const marketId = this.safeString(data, 's');
|
|
668
|
+
const market = this.safeMarket(marketId);
|
|
669
|
+
const ticker = this.parseWsUtaTicker(data, market);
|
|
670
|
+
this.tickers[market['symbol']] = ticker;
|
|
671
|
+
const messageHash = 'uta:ticker:' + market['symbol'];
|
|
672
|
+
client.resolve(ticker, messageHash);
|
|
673
|
+
}
|
|
674
|
+
parseWsUtaTicker(ticker, market = undefined) {
|
|
675
|
+
const symbol = this.safeString(market, 'symbol');
|
|
676
|
+
market = this.safeMarket(symbol, market);
|
|
677
|
+
const timestamp = this.safeIntegerProduct(ticker, 'M', 0.000001);
|
|
678
|
+
return this.safeTicker({
|
|
679
|
+
'symbol': symbol,
|
|
680
|
+
'timestamp': timestamp,
|
|
681
|
+
'datetime': this.iso8601(timestamp),
|
|
682
|
+
'high': undefined,
|
|
683
|
+
'low': undefined,
|
|
684
|
+
'bid': this.safeString(ticker, 'a'),
|
|
685
|
+
'bidVolume': this.safeString(ticker, 'A'),
|
|
686
|
+
'ask': this.safeString(ticker, 'b'),
|
|
687
|
+
'askVolume': this.safeString(ticker, 'B'),
|
|
688
|
+
'vwap': undefined,
|
|
689
|
+
'open': undefined,
|
|
690
|
+
'close': undefined,
|
|
691
|
+
'last': this.safeString(ticker, 'l'),
|
|
692
|
+
'previousClose': undefined,
|
|
693
|
+
'change': undefined,
|
|
694
|
+
'percentage': undefined,
|
|
695
|
+
'average': undefined,
|
|
696
|
+
'baseVolume': undefined,
|
|
697
|
+
'quoteVolume': undefined,
|
|
698
|
+
'markPrice': undefined,
|
|
699
|
+
'info': ticker,
|
|
700
|
+
}, market);
|
|
701
|
+
}
|
|
471
702
|
/**
|
|
472
703
|
* @method
|
|
473
704
|
* @name kucoin#watchBidsAsks
|
|
@@ -603,27 +834,43 @@ class kucoin extends kucoin$1["default"] {
|
|
|
603
834
|
* @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
604
835
|
* @see https://www.kucoin.com/docs-new/3470071w0
|
|
605
836
|
* @see https://www.kucoin.com/docs-new/3470086w0
|
|
837
|
+
* @see https://www.kucoin.com/docs-new/3470223w0
|
|
606
838
|
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
|
607
839
|
* @param {string} timeframe the length of time each candle represents
|
|
608
840
|
* @param {int} [since] timestamp in ms of the earliest candle to fetch
|
|
609
841
|
* @param {int} [limit] the maximum amount of candles to fetch
|
|
610
842
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
843
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
611
844
|
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
612
845
|
*/
|
|
613
846
|
async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
|
|
614
847
|
await this.loadMarkets();
|
|
615
848
|
const market = this.market(symbol);
|
|
616
849
|
symbol = market['symbol'];
|
|
617
|
-
const isFuturesMethod = market['contract'];
|
|
618
|
-
const url = await this.negotiate(false, isFuturesMethod);
|
|
619
850
|
const period = this.safeString(this.timeframes, timeframe, timeframe);
|
|
620
|
-
let
|
|
621
|
-
|
|
622
|
-
|
|
851
|
+
let messageHash = 'candles:' + symbol + ':' + timeframe;
|
|
852
|
+
let uta = false;
|
|
853
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchOHLCV', 'uta', uta);
|
|
854
|
+
let ohlcv = undefined;
|
|
855
|
+
if (uta) {
|
|
856
|
+
const channel = 'kline';
|
|
857
|
+
messageHash = 'uta:' + messageHash;
|
|
858
|
+
const extendedParams = {
|
|
859
|
+
'interval': period,
|
|
860
|
+
};
|
|
861
|
+
params = this.extend(extendedParams, params);
|
|
862
|
+
ohlcv = await this.subscribePublicUta(messageHash, channel, symbol, this.extend(extendedParams, params));
|
|
863
|
+
}
|
|
864
|
+
else {
|
|
865
|
+
const isFuturesMethod = market['contract'];
|
|
866
|
+
const url = await this.negotiate(false, isFuturesMethod);
|
|
867
|
+
let channelName = '/market/candles:';
|
|
868
|
+
if (isFuturesMethod) {
|
|
869
|
+
channelName = '/contractMarket/limitCandle:';
|
|
870
|
+
}
|
|
871
|
+
const topic = channelName + market['id'] + '_' + period;
|
|
872
|
+
ohlcv = await this.subscribe(url, messageHash, topic, params);
|
|
623
873
|
}
|
|
624
|
-
const topic = channelName + market['id'] + '_' + period;
|
|
625
|
-
const messageHash = 'candles:' + symbol + ':' + timeframe;
|
|
626
|
-
const ohlcv = await this.subscribe(url, messageHash, topic, params);
|
|
627
874
|
if (this.newUpdates) {
|
|
628
875
|
limit = ohlcv.getLimit(symbol, limit);
|
|
629
876
|
}
|
|
@@ -635,38 +882,54 @@ class kucoin extends kucoin$1["default"] {
|
|
|
635
882
|
* @description unWatches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
636
883
|
* @see https://www.kucoin.com/docs-new/3470071w0
|
|
637
884
|
* @see https://www.kucoin.com/docs-new/3470086w0
|
|
885
|
+
* @see https://www.kucoin.com/docs-new/3470223w0
|
|
638
886
|
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
|
639
887
|
* @param {string} timeframe the length of time each candle represents
|
|
640
888
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
889
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
641
890
|
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
642
891
|
*/
|
|
643
892
|
async unWatchOHLCV(symbol, timeframe = '1m', params = {}) {
|
|
644
893
|
await this.loadMarkets();
|
|
645
894
|
const market = this.market(symbol);
|
|
646
895
|
symbol = market['symbol'];
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
let channelName = '/market/candles:';
|
|
650
|
-
if (isFuturesMethod) {
|
|
651
|
-
channelName = '/contractMarket/limitCandle:';
|
|
652
|
-
}
|
|
896
|
+
let uta = false;
|
|
897
|
+
[uta, params] = this.handleOptionAndParams(params, 'unWatchOHLCV', 'uta', uta);
|
|
653
898
|
const period = this.safeString(this.timeframes, timeframe, timeframe);
|
|
654
|
-
const topic = channelName + market['id'] + '_' + period;
|
|
655
|
-
const messageHash = 'unsubscribe:candles:' + symbol + ':' + timeframe;
|
|
656
|
-
const subMessageHash = 'candles:' + symbol + ':' + timeframe;
|
|
657
899
|
const symbolAndTimeframe = [symbol, timeframe];
|
|
658
900
|
const subscription = {
|
|
659
|
-
// we have to add the topic to the messageHashes and subMessageHashes
|
|
660
|
-
// because handleSubscriptionStatus needs them to remove the subscription from the client
|
|
661
|
-
// without them subscription would never be removed and re-subscribe would fail because of duplicate subscriptionHash
|
|
662
|
-
'messageHashes': [messageHash, topic],
|
|
663
|
-
'subMessageHashes': [subMessageHash, topic],
|
|
664
|
-
'topic': 'ohlcv',
|
|
665
|
-
'unsubscribe': true,
|
|
666
901
|
'symbols': [symbol],
|
|
667
902
|
'symbolsAndTimeframes': [symbolAndTimeframe],
|
|
903
|
+
'topic': 'ohlcv',
|
|
904
|
+
'unsubscribe': true,
|
|
668
905
|
};
|
|
669
|
-
|
|
906
|
+
let subMessageHash = 'candles:' + symbol + ':' + timeframe;
|
|
907
|
+
if (uta) {
|
|
908
|
+
subMessageHash = 'uta:' + subMessageHash;
|
|
909
|
+
subscription['subMessageHashes'] = [subMessageHash];
|
|
910
|
+
const utaMessageHash = 'unsubscribe:' + subMessageHash;
|
|
911
|
+
subscription['messageHashes'] = [utaMessageHash];
|
|
912
|
+
const extendedParams = {
|
|
913
|
+
'interval': period,
|
|
914
|
+
};
|
|
915
|
+
return await this.subscribePublicUta(utaMessageHash, 'kline', symbol, this.extend(extendedParams, params), subscription);
|
|
916
|
+
}
|
|
917
|
+
else {
|
|
918
|
+
const isFuturesMethod = market['contract'];
|
|
919
|
+
const url = await this.negotiate(false, isFuturesMethod);
|
|
920
|
+
let channelName = '/market/candles:';
|
|
921
|
+
if (isFuturesMethod) {
|
|
922
|
+
channelName = '/contractMarket/limitCandle:';
|
|
923
|
+
}
|
|
924
|
+
const messageHash = 'unsubscribe:' + subMessageHash;
|
|
925
|
+
const topic = channelName + market['id'] + '_' + period;
|
|
926
|
+
// we have to add the topic to the messageHashes and subMessageHashes
|
|
927
|
+
// because handleSubscriptionStatus needs them to remove the subscription from the client
|
|
928
|
+
// without them subscription would never be removed and re-subscribe would fail because of duplicate subscriptionHash
|
|
929
|
+
subscription['messageHashes'] = [messageHash, topic];
|
|
930
|
+
subscription['subMessageHashes'] = [subMessageHash, topic];
|
|
931
|
+
return await this.unSubscribe(url, messageHash, topic, messageHash, params, subscription);
|
|
932
|
+
}
|
|
670
933
|
}
|
|
671
934
|
handleOHLCV(client, message) {
|
|
672
935
|
//
|
|
@@ -740,19 +1003,82 @@ class kucoin extends kucoin$1["default"] {
|
|
|
740
1003
|
stored.append(parsed);
|
|
741
1004
|
client.resolve(stored, messageHash);
|
|
742
1005
|
}
|
|
1006
|
+
handleUtaOHLCV(client, message) {
|
|
1007
|
+
//
|
|
1008
|
+
// {
|
|
1009
|
+
// "T": "kline.SPOT",
|
|
1010
|
+
// "P": "1774621652314890314",
|
|
1011
|
+
// "d": {
|
|
1012
|
+
// "a": "195333.419819132",
|
|
1013
|
+
// "s": "ETH-USDT",
|
|
1014
|
+
// "C": 1774621680,
|
|
1015
|
+
// "c": "1973.4",
|
|
1016
|
+
// "S": false,
|
|
1017
|
+
// "v": "98.941095",
|
|
1018
|
+
// "h": "1974.97",
|
|
1019
|
+
// "i": "1min",
|
|
1020
|
+
// "l": "1973.4",
|
|
1021
|
+
// "O": 1774621620,
|
|
1022
|
+
// "o": "1974.34"
|
|
1023
|
+
// }
|
|
1024
|
+
// }
|
|
1025
|
+
//
|
|
1026
|
+
const data = this.safeDict(message, 'd', {});
|
|
1027
|
+
const marketId = this.safeString(data, 's');
|
|
1028
|
+
const market = this.safeMarket(marketId);
|
|
1029
|
+
const symbol = market['symbol'];
|
|
1030
|
+
const interval = this.safeString(data, 'i');
|
|
1031
|
+
const timeframe = this.findTimeframe(interval);
|
|
1032
|
+
const messageHash = 'uta:candles:' + symbol + ':' + timeframe;
|
|
1033
|
+
this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
|
|
1034
|
+
let stored = this.safeValue(this.ohlcvs[symbol], timeframe);
|
|
1035
|
+
if (stored === undefined) {
|
|
1036
|
+
const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
|
|
1037
|
+
stored = new Cache.ArrayCacheByTimestamp(limit);
|
|
1038
|
+
this.ohlcvs[symbol][timeframe] = stored;
|
|
1039
|
+
}
|
|
1040
|
+
const parsed = [
|
|
1041
|
+
this.safeIntegerProduct(data, 'O', 1000),
|
|
1042
|
+
this.safeNumber(data, 'o'),
|
|
1043
|
+
this.safeNumber(data, 'h'),
|
|
1044
|
+
this.safeNumber(data, 'l'),
|
|
1045
|
+
this.safeNumber(data, 'c'),
|
|
1046
|
+
this.safeNumber(data, 'v'),
|
|
1047
|
+
];
|
|
1048
|
+
stored.append(parsed);
|
|
1049
|
+
client.resolve(stored, messageHash);
|
|
1050
|
+
}
|
|
743
1051
|
/**
|
|
744
1052
|
* @method
|
|
745
1053
|
* @name kucoin#watchTrades
|
|
746
1054
|
* @description get the list of most recent trades for a particular symbol
|
|
747
1055
|
* @see https://www.kucoin.com/docs-new/3470072w0
|
|
748
1056
|
* @see https://www.kucoin.com/docs-new/3470084w0
|
|
1057
|
+
* @see https://www.kucoin.com/docs-new/3470224w0
|
|
749
1058
|
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
750
1059
|
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
751
1060
|
* @param {int} [limit] the maximum amount of trades to fetch
|
|
752
1061
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1062
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
753
1063
|
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=public-trades}
|
|
754
1064
|
*/
|
|
755
1065
|
async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
1066
|
+
let uta = false;
|
|
1067
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchTrades', 'uta', uta);
|
|
1068
|
+
if (uta) {
|
|
1069
|
+
await this.loadMarkets();
|
|
1070
|
+
const market = this.market(symbol);
|
|
1071
|
+
symbol = market['symbol'];
|
|
1072
|
+
const messageHash = 'uta:trades:' + symbol;
|
|
1073
|
+
const channel = 'trade';
|
|
1074
|
+
const trades = await this.subscribePublicUta(messageHash, channel, symbol, params);
|
|
1075
|
+
if (this.newUpdates) {
|
|
1076
|
+
const first = this.safeValue(trades, 0);
|
|
1077
|
+
const tradeSymbol = this.safeString(first, 'symbol');
|
|
1078
|
+
limit = trades.getLimit(tradeSymbol, limit);
|
|
1079
|
+
}
|
|
1080
|
+
return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
|
|
1081
|
+
}
|
|
756
1082
|
return await this.watchTradesForSymbols([symbol], since, limit, params);
|
|
757
1083
|
}
|
|
758
1084
|
/**
|
|
@@ -848,11 +1174,31 @@ class kucoin extends kucoin$1["default"] {
|
|
|
848
1174
|
* @description unWatches trades stream
|
|
849
1175
|
* @see https://www.kucoin.com/docs-new/3470072w0
|
|
850
1176
|
* @see https://www.kucoin.com/docs-new/3470084w0
|
|
1177
|
+
* @see https://www.kucoin.com/docs-new/3470224w0
|
|
851
1178
|
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
852
1179
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1180
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
853
1181
|
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=public-trades}
|
|
854
1182
|
*/
|
|
855
1183
|
async unWatchTrades(symbol, params = {}) {
|
|
1184
|
+
let uta = false;
|
|
1185
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchTrades', 'uta', uta);
|
|
1186
|
+
if (uta) {
|
|
1187
|
+
await this.loadMarkets();
|
|
1188
|
+
const market = this.market(symbol);
|
|
1189
|
+
symbol = market['symbol'];
|
|
1190
|
+
const subMessageHash = 'uta:trades:' + symbol;
|
|
1191
|
+
const messageHash = 'unsubscribe:' + subMessageHash;
|
|
1192
|
+
const channel = 'trade';
|
|
1193
|
+
const subscription = {
|
|
1194
|
+
'messageHashes': [messageHash],
|
|
1195
|
+
'subMessageHashes': [subMessageHash],
|
|
1196
|
+
'topic': 'trades',
|
|
1197
|
+
'unsubscribe': true,
|
|
1198
|
+
'symbols': [symbol],
|
|
1199
|
+
};
|
|
1200
|
+
return await this.subscribePublicUta(messageHash, channel, symbol, params, subscription);
|
|
1201
|
+
}
|
|
856
1202
|
return await this.unWatchTradesForSymbols([symbol], params);
|
|
857
1203
|
}
|
|
858
1204
|
handleTrade(client, message) {
|
|
@@ -890,17 +1236,106 @@ class kucoin extends kucoin$1["default"] {
|
|
|
890
1236
|
cache.append(trade);
|
|
891
1237
|
client.resolve(cache, messageHash);
|
|
892
1238
|
}
|
|
1239
|
+
handleUtaTrade(client, message) {
|
|
1240
|
+
//
|
|
1241
|
+
// {
|
|
1242
|
+
// "T": "trade.SPOT",
|
|
1243
|
+
// "P": "1774618231151398133",
|
|
1244
|
+
// "d": {
|
|
1245
|
+
// "E": "20745928670070784",
|
|
1246
|
+
// "M": "1774618231141000000",
|
|
1247
|
+
// "S": "buy",
|
|
1248
|
+
// "p": "1995.49",
|
|
1249
|
+
// "q": "0.3142324",
|
|
1250
|
+
// "s": "ETH-USDT",
|
|
1251
|
+
// "ti": "20745928670070784"
|
|
1252
|
+
// }
|
|
1253
|
+
// }
|
|
1254
|
+
//
|
|
1255
|
+
const data = this.safeDict(message, 'd', {});
|
|
1256
|
+
const marketId = this.safeString(data, 'symbol');
|
|
1257
|
+
const market = this.safeMarket(marketId);
|
|
1258
|
+
const trade = this.parseWsUtaTrade(data, market);
|
|
1259
|
+
const symbol = trade['symbol'];
|
|
1260
|
+
const messageHash = 'uta:trades:' + symbol;
|
|
1261
|
+
if (!(symbol in this.trades)) {
|
|
1262
|
+
const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
|
|
1263
|
+
const stored = new Cache.ArrayCache(limit);
|
|
1264
|
+
this.trades[symbol] = stored;
|
|
1265
|
+
}
|
|
1266
|
+
const cache = this.trades[symbol];
|
|
1267
|
+
cache.append(trade);
|
|
1268
|
+
client.resolve(cache, messageHash);
|
|
1269
|
+
}
|
|
1270
|
+
parseWsUtaTrade(trade, market = undefined) {
|
|
1271
|
+
// trades
|
|
1272
|
+
// {
|
|
1273
|
+
// "E": "20745928670070784",
|
|
1274
|
+
// "M": "1774618231141000000",
|
|
1275
|
+
// "S": "buy",
|
|
1276
|
+
// "p": "1995.49",
|
|
1277
|
+
// "q": "0.3142324",
|
|
1278
|
+
// "s": "ETH-USDT",
|
|
1279
|
+
// "ti": "20745928670070784"
|
|
1280
|
+
// }
|
|
1281
|
+
//
|
|
1282
|
+
// myTrades
|
|
1283
|
+
// {
|
|
1284
|
+
// "E": "1774977429843000000",
|
|
1285
|
+
// "S": "SELL",
|
|
1286
|
+
// "p": "0.09211",
|
|
1287
|
+
// "q": "10",
|
|
1288
|
+
// "s": "DOGE-USDT",
|
|
1289
|
+
// "lR": "TAKER",
|
|
1290
|
+
// "oT": "MARKET",
|
|
1291
|
+
// "oi": "428507829452754944",
|
|
1292
|
+
// "ti": 20801647764195330
|
|
1293
|
+
// }
|
|
1294
|
+
//
|
|
1295
|
+
const marketId = this.safeString(trade, 's');
|
|
1296
|
+
market = this.safeMarket(marketId, market);
|
|
1297
|
+
const timestamp = this.safeIntegerProduct2(trade, 'M', 'E', 0.000001);
|
|
1298
|
+
let fee = undefined;
|
|
1299
|
+
const feeCost = this.safeString(trade, 'f');
|
|
1300
|
+
if (feeCost !== undefined) {
|
|
1301
|
+
const feeCurrencyId = this.safeString(trade, 'fC');
|
|
1302
|
+
const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
|
|
1303
|
+
fee = {
|
|
1304
|
+
'cost': feeCost,
|
|
1305
|
+
'currency': feeCurrencyCode,
|
|
1306
|
+
};
|
|
1307
|
+
}
|
|
1308
|
+
return this.safeTrade({
|
|
1309
|
+
'info': trade,
|
|
1310
|
+
'id': this.safeString(trade, 'ti'),
|
|
1311
|
+
'order': this.safeString(trade, 'oi'),
|
|
1312
|
+
'timestamp': timestamp,
|
|
1313
|
+
'datetime': this.iso8601(timestamp),
|
|
1314
|
+
'symbol': market['symbol'],
|
|
1315
|
+
'type': this.safeStringLower(trade, 'oT'),
|
|
1316
|
+
'side': this.safeStringLower(trade, 'S'),
|
|
1317
|
+
'takerOrMaker': this.safeStringLower(trade, 'lR'),
|
|
1318
|
+
'price': this.safeString(trade, 'p'),
|
|
1319
|
+
'amount': this.safeString(trade, 'q'),
|
|
1320
|
+
'cost': undefined,
|
|
1321
|
+
'fee': fee,
|
|
1322
|
+
}, market);
|
|
1323
|
+
}
|
|
893
1324
|
/**
|
|
894
1325
|
* @method
|
|
895
1326
|
* @name kucoin#watchOrderBook
|
|
896
|
-
* @see https://www.kucoin.com/docs/
|
|
897
|
-
* @see https://www.kucoin.com/docs/
|
|
898
|
-
* @see https://www.kucoin.com/docs/
|
|
899
|
-
* @see https://www.kucoin.com/docs
|
|
1327
|
+
* @see https://www.kucoin.com/docs-new/3470069w0 // spot level 5
|
|
1328
|
+
* @see https://www.kucoin.com/docs-new/3470070w0 // spot level 50
|
|
1329
|
+
* @see https://www.kucoin.com/docs-new/3470068w0 // spot incremental
|
|
1330
|
+
* @see https://www.kucoin.com/docs-new/3470083w0 // futures level 5
|
|
1331
|
+
* @see https://www.kucoin.com/docs-new/3470097w0 // futures level 50
|
|
1332
|
+
* @see https://www.kucoin.com/docs-new/3470082w0 // futures incremental
|
|
1333
|
+
* @see https://www.kucoin.com/docs-new/3470221w0 // uta
|
|
900
1334
|
* @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
901
1335
|
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
902
1336
|
* @param {int} [limit] the maximum amount of order book entries to return
|
|
903
1337
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1338
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
904
1339
|
* @param {string} [params.method] either '/market/level2' or '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50' default is '/market/level2'
|
|
905
1340
|
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/?id=order-book-structure} indexed by market symbols
|
|
906
1341
|
*/
|
|
@@ -920,6 +1355,30 @@ class kucoin extends kucoin$1["default"] {
|
|
|
920
1355
|
// If the size=0, update the sequence and remove the price of which the
|
|
921
1356
|
// size is 0 out of level 2. Fr other cases, please update the price.
|
|
922
1357
|
//
|
|
1358
|
+
let uta = false;
|
|
1359
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'uta', uta);
|
|
1360
|
+
if (uta) {
|
|
1361
|
+
await this.loadMarkets();
|
|
1362
|
+
const market = this.market(symbol);
|
|
1363
|
+
symbol = market['symbol'];
|
|
1364
|
+
let depth = 'increment'; // '1', '5', '50' or 'increment'
|
|
1365
|
+
[depth, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'utaDepth', depth);
|
|
1366
|
+
const messageHash = 'uta:orderbook:' + symbol + ':depth:' + depth;
|
|
1367
|
+
const channel = 'obu';
|
|
1368
|
+
let subscription = {};
|
|
1369
|
+
if ((depth === 'increment')) { // other streams return the entire orderbook, so we don't need to fetch the snapshot through REST
|
|
1370
|
+
subscription = {
|
|
1371
|
+
'method': this.handleOrderBookSubscription,
|
|
1372
|
+
'symbols': [symbol],
|
|
1373
|
+
'limit': limit,
|
|
1374
|
+
};
|
|
1375
|
+
}
|
|
1376
|
+
params = this.extend(params, {
|
|
1377
|
+
'depth': depth,
|
|
1378
|
+
});
|
|
1379
|
+
const orderbook = await this.subscribePublicUta(messageHash, channel, symbol, params, subscription);
|
|
1380
|
+
return orderbook.limit();
|
|
1381
|
+
}
|
|
923
1382
|
return await this.watchOrderBookForSymbols([symbol], limit, params);
|
|
924
1383
|
}
|
|
925
1384
|
/**
|
|
@@ -932,10 +1391,34 @@ class kucoin extends kucoin$1["default"] {
|
|
|
932
1391
|
* @description unWatches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
933
1392
|
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
934
1393
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1394
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
935
1395
|
* @param {string} [params.method] either '/market/level2' or '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50' default is '/market/level2'
|
|
936
1396
|
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/?id=order-book-structure} indexed by market symbols
|
|
937
1397
|
*/
|
|
938
1398
|
async unWatchOrderBook(symbol, params = {}) {
|
|
1399
|
+
let uta = false;
|
|
1400
|
+
[uta, params] = this.handleOptionAndParams(params, 'unWatchOrderBook', 'uta', uta);
|
|
1401
|
+
if (uta) {
|
|
1402
|
+
await this.loadMarkets();
|
|
1403
|
+
const market = this.market(symbol);
|
|
1404
|
+
symbol = market['symbol'];
|
|
1405
|
+
let depth = 'increment'; // '1', '5', '50' or 'increment'
|
|
1406
|
+
[depth, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'utaDepth', depth);
|
|
1407
|
+
params = this.extend(params, {
|
|
1408
|
+
'depth': depth,
|
|
1409
|
+
});
|
|
1410
|
+
const subMessageHash = 'uta:orderbook:' + symbol + ':depth:' + depth;
|
|
1411
|
+
const messageHash = 'unsubscribe:' + subMessageHash;
|
|
1412
|
+
const channel = 'obu';
|
|
1413
|
+
const subscription = {
|
|
1414
|
+
'messageHashes': [messageHash],
|
|
1415
|
+
'subMessageHashes': [subMessageHash],
|
|
1416
|
+
'topic': 'orderbook',
|
|
1417
|
+
'unsubscribe': true,
|
|
1418
|
+
'symbols': [symbol],
|
|
1419
|
+
};
|
|
1420
|
+
return await this.subscribePublicUta(messageHash, channel, symbol, params, subscription);
|
|
1421
|
+
}
|
|
939
1422
|
return await this.unWatchOrderBookForSymbols([symbol], params);
|
|
940
1423
|
}
|
|
941
1424
|
/**
|
|
@@ -947,6 +1430,7 @@ class kucoin extends kucoin$1["default"] {
|
|
|
947
1430
|
* @see https://www.kucoin.com/docs-new/3470083w0 // futures level 5
|
|
948
1431
|
* @see https://www.kucoin.com/docs-new/3470097w0 // futures level 50
|
|
949
1432
|
* @see https://www.kucoin.com/docs-new/3470082w0 // futures incremental
|
|
1433
|
+
* @see https://www.kucoin.com/docs-new/3470221w0 // uta
|
|
950
1434
|
* @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
951
1435
|
* @param {string[]} symbols unified array of symbols
|
|
952
1436
|
* @param {int} [limit] the maximum amount of order book entries to return
|
|
@@ -1150,6 +1634,66 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1150
1634
|
this.handleDelta(this.orderbooks[symbol], data);
|
|
1151
1635
|
client.resolve(this.orderbooks[symbol], messageHash);
|
|
1152
1636
|
}
|
|
1637
|
+
handleUtaOrderBook(client, message) {
|
|
1638
|
+
//
|
|
1639
|
+
// snapshot
|
|
1640
|
+
// {
|
|
1641
|
+
// "T": "obu.SPOT",
|
|
1642
|
+
// "dp": "50",
|
|
1643
|
+
// "t": "snapshot",
|
|
1644
|
+
// "P": "1774624848680504909",
|
|
1645
|
+
// "d": {
|
|
1646
|
+
// "C": 20452522782,
|
|
1647
|
+
// "M": "1774624848673000000",
|
|
1648
|
+
// "O": 20452522782,
|
|
1649
|
+
// "a": [ [ "66532.5", "0.46243848" ] ],
|
|
1650
|
+
// "b": [ [ "66532.4", "0.09489" ] ],
|
|
1651
|
+
// "s": "ETH-USDT"
|
|
1652
|
+
// }
|
|
1653
|
+
// }
|
|
1654
|
+
//
|
|
1655
|
+
const type = this.safeString(message, 't');
|
|
1656
|
+
const data = this.safeDict(message, 'd', {});
|
|
1657
|
+
const marketId = this.safeString(data, 's');
|
|
1658
|
+
const market = this.safeMarket(marketId);
|
|
1659
|
+
const symbol = market['symbol'];
|
|
1660
|
+
const timestamp = this.safeIntegerProduct(data, 'M', 0.000001);
|
|
1661
|
+
if (!(symbol in this.orderbooks)) {
|
|
1662
|
+
this.orderbooks[symbol] = this.orderBook();
|
|
1663
|
+
}
|
|
1664
|
+
const orderbook = this.orderbooks[symbol];
|
|
1665
|
+
const depth = this.safeString(message, 'dp');
|
|
1666
|
+
const messageHash = 'uta:orderbook:' + symbol + ':depth:' + depth;
|
|
1667
|
+
if (type === 'snapshot') {
|
|
1668
|
+
const parsed = this.parseOrderBook(data, symbol, timestamp, 'b', 'a', 0, 1);
|
|
1669
|
+
parsed['nonce'] = this.safeInteger(data, 'O');
|
|
1670
|
+
orderbook.reset(parsed);
|
|
1671
|
+
this.orderbooks[symbol] = orderbook;
|
|
1672
|
+
}
|
|
1673
|
+
else {
|
|
1674
|
+
const nonce = this.safeInteger(orderbook, 'nonce');
|
|
1675
|
+
const deltaEnd = this.safeInteger(data, 'C');
|
|
1676
|
+
if (nonce === undefined) {
|
|
1677
|
+
const cacheLength = orderbook.cache.length;
|
|
1678
|
+
const subscription = this.safeValue(client.subscriptions, messageHash, {});
|
|
1679
|
+
const limit = this.safeInteger(subscription, 'limit');
|
|
1680
|
+
const snapshotDelay = this.handleOption('watchOrderBook', 'snapshotDelay', 5);
|
|
1681
|
+
const utaParams = {
|
|
1682
|
+
'uta': true,
|
|
1683
|
+
};
|
|
1684
|
+
if (cacheLength === snapshotDelay) {
|
|
1685
|
+
this.spawn(this.loadOrderBook, client, messageHash, symbol, limit, utaParams);
|
|
1686
|
+
}
|
|
1687
|
+
orderbook.cache.push(data);
|
|
1688
|
+
return;
|
|
1689
|
+
}
|
|
1690
|
+
else if (nonce >= deltaEnd) {
|
|
1691
|
+
return;
|
|
1692
|
+
}
|
|
1693
|
+
}
|
|
1694
|
+
this.handleDelta(this.orderbooks[symbol], data);
|
|
1695
|
+
client.resolve(this.orderbooks[symbol], messageHash);
|
|
1696
|
+
}
|
|
1153
1697
|
getCacheIndex(orderbook, cache) {
|
|
1154
1698
|
const firstDelta = this.safeValue(cache, 0);
|
|
1155
1699
|
const nonce = this.safeInteger(orderbook, 'nonce');
|
|
@@ -1168,11 +1712,15 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1168
1712
|
return cache.length;
|
|
1169
1713
|
}
|
|
1170
1714
|
handleDelta(orderbook, delta) {
|
|
1171
|
-
|
|
1172
|
-
|
|
1715
|
+
let timestamp = this.safeIntegerProduct(delta, 'M', 0.000001);
|
|
1716
|
+
if (timestamp === undefined) {
|
|
1717
|
+
timestamp = this.safeInteger2(delta, 'time', 'timestamp');
|
|
1718
|
+
}
|
|
1719
|
+
orderbook['nonce'] = this.safeIntegerN(delta, ['sequenceEnd', 'sequence', 'C'], timestamp);
|
|
1173
1720
|
orderbook['timestamp'] = timestamp;
|
|
1174
1721
|
orderbook['datetime'] = this.iso8601(timestamp);
|
|
1175
1722
|
const change = this.safeString(delta, 'change');
|
|
1723
|
+
const changes = this.safeDict(delta, 'changes', delta);
|
|
1176
1724
|
const storedBids = orderbook['bids'];
|
|
1177
1725
|
const storedAsks = orderbook['asks'];
|
|
1178
1726
|
if (change !== undefined) {
|
|
@@ -1190,13 +1738,18 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1190
1738
|
storedAsks.storeArray(value);
|
|
1191
1739
|
}
|
|
1192
1740
|
}
|
|
1193
|
-
else {
|
|
1194
|
-
const changes = this.safeDict(delta, 'changes', delta);
|
|
1741
|
+
else if (changes !== undefined) {
|
|
1195
1742
|
const bids = this.safeList(changes, 'bids', []);
|
|
1196
1743
|
const asks = this.safeList(changes, 'asks', []);
|
|
1197
1744
|
this.handleBidAsks(storedBids, bids);
|
|
1198
1745
|
this.handleBidAsks(storedAsks, asks);
|
|
1199
1746
|
}
|
|
1747
|
+
else {
|
|
1748
|
+
const bids = this.safeList2(delta, 'bids', 'b', []);
|
|
1749
|
+
const asks = this.safeList2(delta, 'asks', 'a', []);
|
|
1750
|
+
this.handleBidAsks(storedBids, bids);
|
|
1751
|
+
this.handleBidAsks(storedAsks, asks);
|
|
1752
|
+
}
|
|
1200
1753
|
}
|
|
1201
1754
|
handleBidAsks(bookSide, bidAsks) {
|
|
1202
1755
|
for (let i = 0; i < bidAsks.length; i++) {
|
|
@@ -1224,11 +1777,18 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1224
1777
|
}
|
|
1225
1778
|
handleSubscriptionStatus(client, message) {
|
|
1226
1779
|
//
|
|
1780
|
+
// classic
|
|
1227
1781
|
// {
|
|
1228
1782
|
// "id": "1578090438322",
|
|
1229
1783
|
// "type": "ack"
|
|
1230
1784
|
// }
|
|
1231
1785
|
//
|
|
1786
|
+
// uta
|
|
1787
|
+
// {
|
|
1788
|
+
// "id": "1",
|
|
1789
|
+
// "result": true
|
|
1790
|
+
// }
|
|
1791
|
+
//
|
|
1232
1792
|
const id = this.safeString(message, 'id');
|
|
1233
1793
|
if (!(id in client.subscriptions)) {
|
|
1234
1794
|
return;
|
|
@@ -1263,6 +1823,17 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1263
1823
|
// "type": "welcome",
|
|
1264
1824
|
// }
|
|
1265
1825
|
//
|
|
1826
|
+
// uta
|
|
1827
|
+
// {
|
|
1828
|
+
// "sessionId": "ddfb0cbd-f7a7-40c2-9129-445bbb830c54",
|
|
1829
|
+
// "message": "welcome",
|
|
1830
|
+
// "pingInterval": 18000
|
|
1831
|
+
// }
|
|
1832
|
+
//
|
|
1833
|
+
const pingInterval = this.safeInteger(message, 'pingInterval');
|
|
1834
|
+
if (pingInterval !== undefined) {
|
|
1835
|
+
client.keepAlive = pingInterval;
|
|
1836
|
+
}
|
|
1266
1837
|
return message;
|
|
1267
1838
|
}
|
|
1268
1839
|
/**
|
|
@@ -1273,18 +1844,20 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1273
1844
|
* @see https://www.kucoin.com/docs-new/3470139w0 // spot trigger orders
|
|
1274
1845
|
* @see https://www.kucoin.com/docs-new/3470090w0 // contract regular orders
|
|
1275
1846
|
* @see https://www.kucoin.com/docs-new/3470091w0 // contract trigger orders
|
|
1847
|
+
* @see https://www.kucoin.com/docs-new/3470228w0 // uta orders
|
|
1276
1848
|
* @param {string} symbol unified market symbol of the market orders were made in
|
|
1277
1849
|
* @param {int} [since] the earliest time in ms to fetch orders for
|
|
1278
1850
|
* @param {int} [limit] the maximum number of order structures to retrieve
|
|
1279
1851
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1852
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta)
|
|
1280
1853
|
* @param {boolean} [params.trigger] trigger orders are watched if true
|
|
1281
1854
|
* @param {string} [params.type] 'spot' or 'swap' (default is 'spot' if symbol is not provided)
|
|
1282
1855
|
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/?id=order-structure}
|
|
1283
1856
|
*/
|
|
1284
1857
|
async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1285
1858
|
await this.loadMarkets();
|
|
1286
|
-
|
|
1287
|
-
params = this.
|
|
1859
|
+
let uta = await this.isUTAEnabled();
|
|
1860
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchOrders', 'uta', uta);
|
|
1288
1861
|
let market = undefined;
|
|
1289
1862
|
let messageHash = 'orders';
|
|
1290
1863
|
if (symbol !== undefined) {
|
|
@@ -1292,22 +1865,38 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1292
1865
|
symbol = market['symbol'];
|
|
1293
1866
|
messageHash = messageHash + ':' + symbol;
|
|
1294
1867
|
}
|
|
1295
|
-
let
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1868
|
+
let orders = undefined;
|
|
1869
|
+
if (uta) {
|
|
1870
|
+
params = this.extend(params, {
|
|
1871
|
+
'tradeType': 'UNIFIED',
|
|
1872
|
+
});
|
|
1873
|
+
messageHash = 'uta:' + messageHash;
|
|
1874
|
+
let channel = 'order';
|
|
1875
|
+
if (symbol === undefined) {
|
|
1876
|
+
channel += 'All';
|
|
1877
|
+
}
|
|
1878
|
+
orders = await this.subscribePrivateUta([messageHash], messageHash, channel, symbol, params);
|
|
1302
1879
|
}
|
|
1303
|
-
|
|
1304
|
-
const
|
|
1305
|
-
|
|
1880
|
+
else {
|
|
1881
|
+
const trigger = this.safeBool2(params, 'stop', 'trigger');
|
|
1882
|
+
params = this.omit(params, ['stop', 'trigger']);
|
|
1883
|
+
let marketType = undefined;
|
|
1884
|
+
[marketType, params] = this.handleMarketTypeAndParams('watchOrders', market, params);
|
|
1885
|
+
const isFuturesMethod = ((marketType !== 'spot') && (marketType !== 'margin'));
|
|
1886
|
+
const url = await this.negotiate(true, isFuturesMethod);
|
|
1887
|
+
let topic = trigger ? '/spotMarket/advancedOrders' : '/spotMarket/tradeOrders';
|
|
1888
|
+
if (isFuturesMethod) {
|
|
1889
|
+
topic = trigger ? '/contractMarket/advancedOrders' : '/contractMarket/tradeOrders';
|
|
1890
|
+
}
|
|
1891
|
+
if (symbol === undefined) {
|
|
1892
|
+
const suffix = this.getOrdersMessageHashSuffix(topic);
|
|
1893
|
+
messageHash += suffix;
|
|
1894
|
+
}
|
|
1895
|
+
const request = {
|
|
1896
|
+
'privateChannel': true,
|
|
1897
|
+
};
|
|
1898
|
+
orders = await this.subscribe(url, messageHash, topic, this.extend(request, params));
|
|
1306
1899
|
}
|
|
1307
|
-
const request = {
|
|
1308
|
-
'privateChannel': true,
|
|
1309
|
-
};
|
|
1310
|
-
const orders = await this.subscribe(url, messageHash, topic, this.extend(request, params));
|
|
1311
1900
|
if (this.newUpdates) {
|
|
1312
1901
|
limit = orders.getLimit(symbol, limit);
|
|
1313
1902
|
}
|
|
@@ -1441,6 +2030,90 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1441
2030
|
'trades': undefined,
|
|
1442
2031
|
}, market);
|
|
1443
2032
|
}
|
|
2033
|
+
parseWsUtaOrder(order, market = undefined) {
|
|
2034
|
+
//
|
|
2035
|
+
// {
|
|
2036
|
+
// "tT": "FUTURES",
|
|
2037
|
+
// "oi": "427737326394129559",
|
|
2038
|
+
// "ci": "",
|
|
2039
|
+
// "os": 5,
|
|
2040
|
+
// "eT": "CANCEL",
|
|
2041
|
+
// "s": "DOGEUSDTM",
|
|
2042
|
+
// "S": "SELL",
|
|
2043
|
+
// "oT": "MARKET",
|
|
2044
|
+
// "lR": "",
|
|
2045
|
+
// "oS": "USER",
|
|
2046
|
+
// "p": "",
|
|
2047
|
+
// "ti": "",
|
|
2048
|
+
// "q": "1",
|
|
2049
|
+
// "qU": "UNIT",
|
|
2050
|
+
// "fS": "0",
|
|
2051
|
+
// "lS": "0",
|
|
2052
|
+
// "ls": "0",
|
|
2053
|
+
// "aP": "0",
|
|
2054
|
+
// "f": "0",
|
|
2055
|
+
// "fC": "USDT",
|
|
2056
|
+
// "t": "0",
|
|
2057
|
+
// "cR": "USER",
|
|
2058
|
+
// "cS": "1",
|
|
2059
|
+
// "rS": "0",
|
|
2060
|
+
// "tD": "DOWN",
|
|
2061
|
+
// "tP": "0.01",
|
|
2062
|
+
// "tPT": "MP",
|
|
2063
|
+
// "pP": "",
|
|
2064
|
+
// "pPT": "",
|
|
2065
|
+
// "lP": "",
|
|
2066
|
+
// "lPT": "",
|
|
2067
|
+
// "toi": "427737326102335488",
|
|
2068
|
+
// "stp": "",
|
|
2069
|
+
// "rO": true,
|
|
2070
|
+
// "tIF": "GTC",
|
|
2071
|
+
// "pO": false,
|
|
2072
|
+
// "O": "1774793727626043888",
|
|
2073
|
+
// "U": 1774794309608959200
|
|
2074
|
+
// }
|
|
2075
|
+
//
|
|
2076
|
+
const timestamp = this.safeIntegerProduct(order, 'O', 0.000001);
|
|
2077
|
+
const rawStatus = this.safeString(order, 'os');
|
|
2078
|
+
const marketId = this.safeString(order, 's');
|
|
2079
|
+
const rawTimeInForce = this.safeString(order, 'tIF');
|
|
2080
|
+
const remainSize = this.safeString(order, 'rS');
|
|
2081
|
+
const canceledSize = this.safeString(order, 'cS');
|
|
2082
|
+
const remaining = Precise["default"].stringAdd(remainSize, canceledSize);
|
|
2083
|
+
market = this.safeMarket(marketId, market);
|
|
2084
|
+
const fee = {
|
|
2085
|
+
'cost': this.safeString(order, 'f'),
|
|
2086
|
+
'currency': this.safeCurrencyCode(this.safeString(order, 'fC')),
|
|
2087
|
+
};
|
|
2088
|
+
// todo check amount for other qU values
|
|
2089
|
+
return this.safeOrder({
|
|
2090
|
+
'info': order,
|
|
2091
|
+
'id': this.safeString(order, 'oi'),
|
|
2092
|
+
'clientOrderId': this.safeString(order, 'ci'),
|
|
2093
|
+
'datetime': this.iso8601(timestamp),
|
|
2094
|
+
'timestamp': timestamp,
|
|
2095
|
+
'lastTradeTimestamp': undefined,
|
|
2096
|
+
'lastUpdateTimestamp': this.safeIntegerProduct(order, 'U', 0.000001),
|
|
2097
|
+
'status': this.parseOrderStatus(rawStatus),
|
|
2098
|
+
'symbol': market['symbol'],
|
|
2099
|
+
'type': this.safeStringLower(order, 'oT'),
|
|
2100
|
+
'timeInForce': this.parseOrderTimeInForce(rawTimeInForce),
|
|
2101
|
+
'side': this.safeStringLower(order, 'S'),
|
|
2102
|
+
'price': this.safeString(order, 'p'),
|
|
2103
|
+
'average': this.safeString(order, 'aP'),
|
|
2104
|
+
'amount': this.safeString(order, 'q'),
|
|
2105
|
+
'filled': this.safeString(order, 'fS'),
|
|
2106
|
+
'remaining': remaining,
|
|
2107
|
+
'triggerPrice': this.safeString(order, 'tP'),
|
|
2108
|
+
'takeProfitPrice': this.safeString(order, 'pP'),
|
|
2109
|
+
'stopLossPrice': this.safeString(order, 'lP'),
|
|
2110
|
+
'cost': this.safeString(order, 'c'),
|
|
2111
|
+
'trades': undefined,
|
|
2112
|
+
'fee': fee,
|
|
2113
|
+
'reduceOnly': this.safeBool(order, 'rO'),
|
|
2114
|
+
'postOnly': this.safeBool(order, 'pO'),
|
|
2115
|
+
}, market);
|
|
2116
|
+
}
|
|
1444
2117
|
handleOrder(client, message) {
|
|
1445
2118
|
//
|
|
1446
2119
|
// Trigger Orders
|
|
@@ -1495,17 +2168,80 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1495
2168
|
const symbolSpecificMessageHash = messageHash + ':' + symbol;
|
|
1496
2169
|
client.resolve(cachedOrders, symbolSpecificMessageHash);
|
|
1497
2170
|
}
|
|
2171
|
+
handleUtaOrder(client, message) {
|
|
2172
|
+
//
|
|
2173
|
+
// {
|
|
2174
|
+
// "T": "orderAll.UNIFIED",
|
|
2175
|
+
// "P": "1774794309609274499",
|
|
2176
|
+
// "d": {
|
|
2177
|
+
// "tT": "FUTURES",
|
|
2178
|
+
// "oi": "427737326394129559",
|
|
2179
|
+
// "ci": "",
|
|
2180
|
+
// "os": 5,
|
|
2181
|
+
// "eT": "CANCEL",
|
|
2182
|
+
// "s": "DOGEUSDTM",
|
|
2183
|
+
// "S": "SELL",
|
|
2184
|
+
// "oT": "MARKET",
|
|
2185
|
+
// "lR": "",
|
|
2186
|
+
// "oS": "USER",
|
|
2187
|
+
// "p": "",
|
|
2188
|
+
// "ti": "",
|
|
2189
|
+
// "q": "1",
|
|
2190
|
+
// "qU": "UNIT",
|
|
2191
|
+
// "fS": "0",
|
|
2192
|
+
// "lS": "0",
|
|
2193
|
+
// "ls": "0",
|
|
2194
|
+
// "aP": "0",
|
|
2195
|
+
// "f": "0",
|
|
2196
|
+
// "fC": "USDT",
|
|
2197
|
+
// "t": "0",
|
|
2198
|
+
// "cR": "USER",
|
|
2199
|
+
// "cS": "1",
|
|
2200
|
+
// "rS": "0",
|
|
2201
|
+
// "tD": "DOWN",
|
|
2202
|
+
// "tP": "0.01",
|
|
2203
|
+
// "tPT": "MP",
|
|
2204
|
+
// "pP": "",
|
|
2205
|
+
// "pPT": "",
|
|
2206
|
+
// "lP": "",
|
|
2207
|
+
// "lPT": "",
|
|
2208
|
+
// "toi": "427737326102335488",
|
|
2209
|
+
// "stp": "",
|
|
2210
|
+
// "rO": true,
|
|
2211
|
+
// "tIF": "GTC",
|
|
2212
|
+
// "pO": false,
|
|
2213
|
+
// "O": "1774793727626043888",
|
|
2214
|
+
// "U": 1774794309608959200
|
|
2215
|
+
// }
|
|
2216
|
+
// }
|
|
2217
|
+
//
|
|
2218
|
+
const data = this.safeDict(message, 'd', {});
|
|
2219
|
+
const parsed = this.parseWsUtaOrder(data);
|
|
2220
|
+
const symbol = this.safeString(parsed, 'symbol');
|
|
2221
|
+
if (this.orders === undefined) {
|
|
2222
|
+
const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
|
|
2223
|
+
this.orders = new Cache.ArrayCacheBySymbolById(limit);
|
|
2224
|
+
}
|
|
2225
|
+
const cachedOrders = this.orders;
|
|
2226
|
+
cachedOrders.append(parsed);
|
|
2227
|
+
const messageHash = 'uta:orders';
|
|
2228
|
+
const symbolSpecificMessageHash = messageHash + ':' + symbol;
|
|
2229
|
+
client.resolve(cachedOrders, symbolSpecificMessageHash);
|
|
2230
|
+
client.resolve(cachedOrders, messageHash);
|
|
2231
|
+
}
|
|
1498
2232
|
/**
|
|
1499
2233
|
* @method
|
|
1500
2234
|
* @name kucoin#watchMyTrades
|
|
1501
2235
|
* @description watches information on multiple trades made by the user on spot
|
|
1502
2236
|
* @see https://www.kucoin.com/docs-new/3470074w0
|
|
1503
2237
|
* @see https://www.kucoin.com/docs-new/3470090w0
|
|
2238
|
+
* @see https://www.kucoin.com/docs-new/3470264w0
|
|
1504
2239
|
* @param {string} symbol unified market symbol of the market trades were made in
|
|
1505
2240
|
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
1506
2241
|
* @param {int} [limit] the maximum number of trade structures to retrieve
|
|
1507
2242
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1508
|
-
* @param {
|
|
2243
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta)
|
|
2244
|
+
* @param {string} [params.method] *classic (non-uta) account only* '/spotMarket/tradeOrders' or '/spot/tradeFills' or '/contractMarket/tradeOrders', default is '/spotMarket/tradeOrders'
|
|
1509
2245
|
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=trade-structure}
|
|
1510
2246
|
*/
|
|
1511
2247
|
async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
@@ -1520,18 +2256,31 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1520
2256
|
let marketType = undefined;
|
|
1521
2257
|
[marketType, params] = this.handleMarketTypeAndParams('watchMyTrades', market, params);
|
|
1522
2258
|
const isFuturesMethod = ((marketType !== 'spot') && (marketType !== 'margin'));
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
const
|
|
1532
|
-
messageHash
|
|
2259
|
+
let uta = await this.isUTAEnabled();
|
|
2260
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchMyTrades', 'uta', uta);
|
|
2261
|
+
let trades = undefined;
|
|
2262
|
+
if (uta) {
|
|
2263
|
+
params = this.extend(params, {
|
|
2264
|
+
'tradeType': 'UNIFIED',
|
|
2265
|
+
});
|
|
2266
|
+
messageHash = 'uta:' + messageHash;
|
|
2267
|
+
const channel = 'execution.lite';
|
|
2268
|
+
trades = await this.subscribePrivateUta([messageHash], channel, channel, undefined, params);
|
|
2269
|
+
}
|
|
2270
|
+
else {
|
|
2271
|
+
const url = await this.negotiate(true, isFuturesMethod);
|
|
2272
|
+
let topic = isFuturesMethod ? '/contractMarket/tradeOrders' : '/spotMarket/tradeOrders';
|
|
2273
|
+
const optionName = isFuturesMethod ? 'contractMethod' : 'spotMethod';
|
|
2274
|
+
[topic, params] = this.handleOptionAndParams2(params, 'watchMyTrades', optionName, 'method', topic);
|
|
2275
|
+
const request = {
|
|
2276
|
+
'privateChannel': true,
|
|
2277
|
+
};
|
|
2278
|
+
if (symbol === undefined) {
|
|
2279
|
+
const suffix = this.getMyTradesMessageHashSuffix(topic);
|
|
2280
|
+
messageHash += suffix;
|
|
2281
|
+
}
|
|
2282
|
+
trades = await this.subscribe(url, messageHash, topic, this.extend(request, params));
|
|
1533
2283
|
}
|
|
1534
|
-
const trades = await this.subscribe(url, messageHash, topic, this.extend(request, params));
|
|
1535
2284
|
if (this.newUpdates) {
|
|
1536
2285
|
limit = trades.getLimit(symbol, limit);
|
|
1537
2286
|
}
|
|
@@ -1589,6 +2338,40 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1589
2338
|
const symbolSpecificMessageHash = messageHash + ':' + parsed['symbol'];
|
|
1590
2339
|
client.resolve(this.myTrades, symbolSpecificMessageHash);
|
|
1591
2340
|
}
|
|
2341
|
+
handleUtaMyTrade(client, message) {
|
|
2342
|
+
//
|
|
2343
|
+
// {
|
|
2344
|
+
// "T": "execution.lite.UNIFIED",
|
|
2345
|
+
// "P": "1774977429844510434",
|
|
2346
|
+
// "d": {
|
|
2347
|
+
// "E": "1774977429843000000",
|
|
2348
|
+
// "S": "SELL",
|
|
2349
|
+
// "p": "0.09211",
|
|
2350
|
+
// "q": "10",
|
|
2351
|
+
// "s": "DOGE-USDT",
|
|
2352
|
+
// "lR": "TAKER",
|
|
2353
|
+
// "oT": "MARKET",
|
|
2354
|
+
// "oi": "428507829452754944",
|
|
2355
|
+
// "ti": 20801647764195330
|
|
2356
|
+
// }
|
|
2357
|
+
// }
|
|
2358
|
+
//
|
|
2359
|
+
const data = this.safeDict(message, 'd', {});
|
|
2360
|
+
const marketId = this.safeString(data, 's');
|
|
2361
|
+
const market = this.safeMarket(marketId);
|
|
2362
|
+
const trade = this.parseWsUtaTrade(data, market);
|
|
2363
|
+
const symbol = trade['symbol'];
|
|
2364
|
+
if (this.myTrades === undefined) {
|
|
2365
|
+
const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
|
|
2366
|
+
this.myTrades = new Cache.ArrayCacheBySymbolById(limit);
|
|
2367
|
+
}
|
|
2368
|
+
const cache = this.myTrades;
|
|
2369
|
+
cache.append(trade);
|
|
2370
|
+
const messageHash = 'uta:myTrades';
|
|
2371
|
+
const symbolMessageHash = messageHash + ':' + symbol;
|
|
2372
|
+
client.resolve(this.myTrades, messageHash);
|
|
2373
|
+
client.resolve(cache, symbolMessageHash);
|
|
2374
|
+
}
|
|
1592
2375
|
parseWsTrade(trade, market = undefined) {
|
|
1593
2376
|
//
|
|
1594
2377
|
// /spotMarket/tradeOrders
|
|
@@ -1674,19 +2457,35 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1674
2457
|
* @description watch balance and get the amount of funds available for trading or funds locked in orders
|
|
1675
2458
|
* @see https://www.kucoin.com/docs-new/3470075w0 // spot balance
|
|
1676
2459
|
* @see https://www.kucoin.com/docs-new/3470092w0 // contract balance
|
|
2460
|
+
* @see https://www.kucoin.com/docs-new/3470231w0 // uta balance
|
|
1677
2461
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1678
|
-
* @param {
|
|
2462
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta)
|
|
2463
|
+
* @param {string} [params.type] *classic (non-uta) account only* 'spot' or 'swap' (default is 'spot')
|
|
1679
2464
|
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/?id=balance-structure}
|
|
1680
2465
|
*/
|
|
1681
2466
|
async watchBalance(params = {}) {
|
|
1682
2467
|
await this.loadMarkets();
|
|
1683
|
-
|
|
1684
|
-
|
|
2468
|
+
let uta = await this.isUTAEnabled();
|
|
2469
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchBalance', 'uta', uta);
|
|
2470
|
+
let defaultType = uta ? 'unified' : 'spot';
|
|
2471
|
+
let type = defaultType;
|
|
2472
|
+
if (!uta) {
|
|
2473
|
+
defaultType = this.safeString(this.options, 'defaultType', defaultType);
|
|
2474
|
+
type = this.safeString(params, 'type', defaultType);
|
|
2475
|
+
}
|
|
1685
2476
|
params = this.omit(params, 'type');
|
|
1686
2477
|
const accountsByType = this.safeDict(this.options, 'accountsByType', {});
|
|
1687
2478
|
const uniformType = this.safeString(accountsByType, type, type);
|
|
1688
|
-
const
|
|
1689
|
-
|
|
2479
|
+
const isClassicFuturesMethod = (uniformType === 'contract');
|
|
2480
|
+
let subscriptionHash = isClassicFuturesMethod ? '/contractAccount/wallet' : '/account/balance';
|
|
2481
|
+
let url = undefined;
|
|
2482
|
+
if (uta) {
|
|
2483
|
+
url = await this.getUtaUrl();
|
|
2484
|
+
subscriptionHash = uniformType;
|
|
2485
|
+
}
|
|
2486
|
+
else {
|
|
2487
|
+
url = await this.negotiate(true, isClassicFuturesMethod);
|
|
2488
|
+
}
|
|
1690
2489
|
const client = this.client(url);
|
|
1691
2490
|
this.setBalanceCache(client, uniformType);
|
|
1692
2491
|
const options = this.safeDict(this.options, 'watchBalance');
|
|
@@ -1696,20 +2495,28 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1696
2495
|
await client.future(uniformType + ':fetchBalanceSnapshot');
|
|
1697
2496
|
}
|
|
1698
2497
|
const messageHash = uniformType + ':balance';
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
2498
|
+
if (uta) {
|
|
2499
|
+
const extendedParams = {
|
|
2500
|
+
'accountType': uniformType,
|
|
2501
|
+
};
|
|
2502
|
+
const channel = 'balance';
|
|
2503
|
+
return await this.subscribePrivateUta([messageHash], subscriptionHash, channel, undefined, this.extend(extendedParams, params));
|
|
2504
|
+
}
|
|
2505
|
+
else {
|
|
2506
|
+
const requestId = this.requestId().toString();
|
|
2507
|
+
const request = {
|
|
2508
|
+
'id': requestId,
|
|
2509
|
+
'type': 'subscribe',
|
|
2510
|
+
'topic': subscriptionHash,
|
|
2511
|
+
'response': true,
|
|
2512
|
+
'privateChannel': true,
|
|
2513
|
+
};
|
|
2514
|
+
const message = this.extend(request, params);
|
|
2515
|
+
if (!(subscriptionHash in client.subscriptions)) {
|
|
2516
|
+
client.subscriptions[requestId] = subscriptionHash;
|
|
2517
|
+
}
|
|
2518
|
+
return await this.watch(url, messageHash, message, uniformType);
|
|
1711
2519
|
}
|
|
1712
|
-
return await this.watch(url, messageHash, message, type);
|
|
1713
2520
|
}
|
|
1714
2521
|
setBalanceCache(client, type) {
|
|
1715
2522
|
if ((type in client.subscriptions) && (type in this.balance)) {
|
|
@@ -1729,8 +2536,10 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1729
2536
|
}
|
|
1730
2537
|
}
|
|
1731
2538
|
async loadBalanceSnapshot(client, messageHash, type) {
|
|
2539
|
+
const uta = (type === 'unified');
|
|
1732
2540
|
const params = {
|
|
1733
2541
|
'type': type,
|
|
2542
|
+
'uta': uta,
|
|
1734
2543
|
};
|
|
1735
2544
|
const response = await this.fetchBalance(params);
|
|
1736
2545
|
this.balance[type] = this.extend(response, this.safeValue(this.balance, type, {}));
|
|
@@ -1845,6 +2654,42 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1845
2654
|
const messageHash = uniformType + ':balance';
|
|
1846
2655
|
client.resolve(this.balance[uniformType], messageHash);
|
|
1847
2656
|
}
|
|
2657
|
+
handleUtaBalance(client, message) {
|
|
2658
|
+
//
|
|
2659
|
+
// {
|
|
2660
|
+
// "T": "balance.UNIFIED",
|
|
2661
|
+
// "P": "1774982552507478380",
|
|
2662
|
+
// "d": {
|
|
2663
|
+
// "c": "USDT",
|
|
2664
|
+
// "e": "100.0030439507",
|
|
2665
|
+
// "b": "100.0030439507",
|
|
2666
|
+
// "a": "89.9930439507",
|
|
2667
|
+
// "h": "10.0100000000",
|
|
2668
|
+
// "U": "1774982552505000000",
|
|
2669
|
+
// "l": "0.0000000000"
|
|
2670
|
+
// }
|
|
2671
|
+
// }
|
|
2672
|
+
//
|
|
2673
|
+
const type = 'unified';
|
|
2674
|
+
const data = this.safeDict(message, 'd', {});
|
|
2675
|
+
const currencyId = this.safeString(data, 'c');
|
|
2676
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
2677
|
+
if (!(type in this.balance)) {
|
|
2678
|
+
this.balance[type] = {};
|
|
2679
|
+
}
|
|
2680
|
+
this.balance[type]['info'] = data;
|
|
2681
|
+
const timestamp = this.safeIntegerProduct(data, 'U', 0.000001);
|
|
2682
|
+
this.balance[type]['timestamp'] = timestamp;
|
|
2683
|
+
this.balance[type]['datetime'] = this.iso8601(timestamp);
|
|
2684
|
+
const account = this.account();
|
|
2685
|
+
account['free'] = this.safeString(data, 'a');
|
|
2686
|
+
account['used'] = this.safeString(data, 'h');
|
|
2687
|
+
account['total'] = this.safeString(data, 'b');
|
|
2688
|
+
this.balance[type][code] = account;
|
|
2689
|
+
this.balance[type] = this.safeBalance(this.balance[type]);
|
|
2690
|
+
const messageHash = type + ':balance';
|
|
2691
|
+
client.resolve(this.balance[type], messageHash);
|
|
2692
|
+
}
|
|
1848
2693
|
/**
|
|
1849
2694
|
* @method
|
|
1850
2695
|
* @name kucoin#watchPosition
|
|
@@ -1877,6 +2722,55 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1877
2722
|
}
|
|
1878
2723
|
return await this.subscribe(url, messageHash, topic, this.extend(request, params));
|
|
1879
2724
|
}
|
|
2725
|
+
/**
|
|
2726
|
+
* @method
|
|
2727
|
+
* @name kucoin#watchPositions
|
|
2728
|
+
* @see https://www.kucoin.com/docs-new/3470233w0
|
|
2729
|
+
* @description watch all open positions
|
|
2730
|
+
* @param {string[]} [symbols] list of unified market symbols
|
|
2731
|
+
* @param {int} [since] the earliest time in ms to fetch positions for
|
|
2732
|
+
* @param {int} [limit] the maximum number of positions to retrieve
|
|
2733
|
+
* @param {object} params extra parameters specific to the exchange API endpoint
|
|
2734
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta)
|
|
2735
|
+
* @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/en/latest/manual.html#position-structure}
|
|
2736
|
+
*/
|
|
2737
|
+
async watchPositions(symbols = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2738
|
+
await this.loadMarkets();
|
|
2739
|
+
let uta = await this.isUTAEnabled();
|
|
2740
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchPositions', 'uta', uta);
|
|
2741
|
+
const tradeType = uta ? 'UNIFIED' : 'TRADE';
|
|
2742
|
+
const messageHash = 'positions';
|
|
2743
|
+
const messageHashes = [];
|
|
2744
|
+
symbols = this.marketSymbols(symbols);
|
|
2745
|
+
if (symbols === undefined) {
|
|
2746
|
+
messageHashes.push(messageHash);
|
|
2747
|
+
}
|
|
2748
|
+
else {
|
|
2749
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
2750
|
+
const symbol = symbols[i];
|
|
2751
|
+
messageHashes.push(messageHash + ':' + symbol);
|
|
2752
|
+
}
|
|
2753
|
+
}
|
|
2754
|
+
const url = await this.getUtaUrl();
|
|
2755
|
+
const client = this.client(url);
|
|
2756
|
+
this.setPositionsCache(client, uta);
|
|
2757
|
+
const fetchPositionSnapshot = this.handleOption('watchPositions', 'fetchPositionsSnapshot', true);
|
|
2758
|
+
const awaitPositionSnapshot = this.handleOption('watchPositions', 'awaitPositionsSnapshot', true);
|
|
2759
|
+
const cache = this.positions;
|
|
2760
|
+
if (fetchPositionSnapshot && awaitPositionSnapshot && cache === undefined) {
|
|
2761
|
+
const snapshot = await client.future('fetchPositionsSnapshot');
|
|
2762
|
+
return this.filterBySymbolsSinceLimit(snapshot, symbols, since, limit, true);
|
|
2763
|
+
}
|
|
2764
|
+
const channel = 'positionAll';
|
|
2765
|
+
params = this.extend(params, {
|
|
2766
|
+
'tradeType': tradeType,
|
|
2767
|
+
});
|
|
2768
|
+
const newPositions = await this.subscribePrivateUta(messageHashes, channel, channel, undefined, params);
|
|
2769
|
+
if (this.newUpdates) {
|
|
2770
|
+
return newPositions;
|
|
2771
|
+
}
|
|
2772
|
+
return this.filterBySymbolsSinceLimit(cache, symbols, since, limit, true);
|
|
2773
|
+
}
|
|
1880
2774
|
getCurrentPosition(symbol) {
|
|
1881
2775
|
if (this.positions === undefined) {
|
|
1882
2776
|
return undefined;
|
|
@@ -1886,6 +2780,40 @@ class kucoin extends kucoin$1["default"] {
|
|
|
1886
2780
|
const values = Object.values(symbolCache);
|
|
1887
2781
|
return this.safeValue(values, 0);
|
|
1888
2782
|
}
|
|
2783
|
+
setPositionsCache(client, uta) {
|
|
2784
|
+
if (!(this.isEmpty(this.positions))) {
|
|
2785
|
+
return;
|
|
2786
|
+
}
|
|
2787
|
+
const fetchPositionsSnapshot = this.handleOption('watchPositions', 'fetchPositionsSnapshot', false);
|
|
2788
|
+
if (fetchPositionsSnapshot) {
|
|
2789
|
+
const messageHash = 'fetchPositionsSnapshot';
|
|
2790
|
+
if (!(messageHash in client.futures)) {
|
|
2791
|
+
client.future(messageHash);
|
|
2792
|
+
this.spawn(this.loadPositionsSnapshot, client, messageHash, uta);
|
|
2793
|
+
}
|
|
2794
|
+
}
|
|
2795
|
+
else {
|
|
2796
|
+
this.positions = new Cache.ArrayCacheBySymbolById();
|
|
2797
|
+
}
|
|
2798
|
+
}
|
|
2799
|
+
async loadPositionsSnapshot(client, messageHash, uta) {
|
|
2800
|
+
const positions = await this.fetchPositions(undefined, { 'uta': uta });
|
|
2801
|
+
this.positions = new Cache.ArrayCacheBySymbolById();
|
|
2802
|
+
const cache = this.positions;
|
|
2803
|
+
for (let i = 0; i < positions.length; i++) {
|
|
2804
|
+
const position = positions[i];
|
|
2805
|
+
const contracts = this.safeNumber(position, 'contracts', 0);
|
|
2806
|
+
if (contracts > 0) {
|
|
2807
|
+
cache.append(position);
|
|
2808
|
+
}
|
|
2809
|
+
}
|
|
2810
|
+
// don't remove the future from the .futures cache
|
|
2811
|
+
if (messageHash in client.futures) {
|
|
2812
|
+
const future = client.futures[messageHash];
|
|
2813
|
+
future.resolve(cache);
|
|
2814
|
+
client.resolve(cache, 'positions');
|
|
2815
|
+
}
|
|
2816
|
+
}
|
|
1889
2817
|
setPositionCache(client, symbol) {
|
|
1890
2818
|
const fetchPositionSnapshot = this.handleOption('watchPosition', 'fetchPositionSnapshot', false);
|
|
1891
2819
|
if (fetchPositionSnapshot) {
|
|
@@ -2021,6 +2949,114 @@ class kucoin extends kucoin$1["default"] {
|
|
|
2021
2949
|
cache.append(position);
|
|
2022
2950
|
client.resolve(position, messageHash);
|
|
2023
2951
|
}
|
|
2952
|
+
handleUtaPosition(client, message) {
|
|
2953
|
+
//
|
|
2954
|
+
// {
|
|
2955
|
+
// "T": "positionAll.UNIFIED",
|
|
2956
|
+
// "P": "1774805155993190995",
|
|
2957
|
+
// "d": {
|
|
2958
|
+
// "pi": "30000000000084845",
|
|
2959
|
+
// "s": "DOGEUSDTM",
|
|
2960
|
+
// "mM": "CROSS",
|
|
2961
|
+
// "q": "3",
|
|
2962
|
+
// "eP": "0.09038666666666666666",
|
|
2963
|
+
// "pV": "27.021",
|
|
2964
|
+
// "mP": "0.09007",
|
|
2965
|
+
// "lP": "0.00001",
|
|
2966
|
+
// "bP": "0.00001",
|
|
2967
|
+
// "l": "4.5",
|
|
2968
|
+
// "uPL": "-0.095",
|
|
2969
|
+
// "rPL": "-0.01473705",
|
|
2970
|
+
// "iM": "6.0046666666666666666",
|
|
2971
|
+
// "mmr": "0.007",
|
|
2972
|
+
// "mtM": "0.189147",
|
|
2973
|
+
// "U": "1774805155988000000",
|
|
2974
|
+
// "O": 1774793727585000000
|
|
2975
|
+
// }
|
|
2976
|
+
// }
|
|
2977
|
+
//
|
|
2978
|
+
if (this.positions === undefined) {
|
|
2979
|
+
this.positions = new Cache.ArrayCacheBySymbolById();
|
|
2980
|
+
}
|
|
2981
|
+
const data = this.safeDict(message, 'd', {});
|
|
2982
|
+
const marketId = this.safeString(data, 's');
|
|
2983
|
+
const symbol = this.safeSymbol(marketId);
|
|
2984
|
+
const cache = this.positions;
|
|
2985
|
+
const currentPosition = this.getCurrentPosition(symbol);
|
|
2986
|
+
const newPosition = this.parseWsUtaPosition(data);
|
|
2987
|
+
const keys = Object.keys(newPosition);
|
|
2988
|
+
for (let i = 0; i < keys.length; i++) {
|
|
2989
|
+
const key = keys[i];
|
|
2990
|
+
if (newPosition[key] === undefined) {
|
|
2991
|
+
delete newPosition[key];
|
|
2992
|
+
}
|
|
2993
|
+
}
|
|
2994
|
+
const position = this.extend(currentPosition, newPosition);
|
|
2995
|
+
cache.append(position);
|
|
2996
|
+
const messageHash = 'positions';
|
|
2997
|
+
const symbolMessageHash = messageHash + ':' + symbol;
|
|
2998
|
+
client.resolve(this.positions, messageHash);
|
|
2999
|
+
client.resolve(this.positions, symbolMessageHash);
|
|
3000
|
+
}
|
|
3001
|
+
parseWsUtaPosition(position, market = undefined) {
|
|
3002
|
+
//
|
|
3003
|
+
// {
|
|
3004
|
+
// "pi": "30000000000084845",
|
|
3005
|
+
// "s": "DOGEUSDTM",
|
|
3006
|
+
// "mM": "CROSS",
|
|
3007
|
+
// "q": "3",
|
|
3008
|
+
// "eP": "0.09038666666666666666",
|
|
3009
|
+
// "pV": "27.021",
|
|
3010
|
+
// "mP": "0.09007",
|
|
3011
|
+
// "lP": "0.00001",
|
|
3012
|
+
// "bP": "0.00001",
|
|
3013
|
+
// "l": "4.5",
|
|
3014
|
+
// "uPL": "-0.095",
|
|
3015
|
+
// "rPL": "-0.01473705",
|
|
3016
|
+
// "iM": "6.0046666666666666666",
|
|
3017
|
+
// "mmr": "0.007",
|
|
3018
|
+
// "mtM": "0.189147",
|
|
3019
|
+
// "U": "1774805155988000000",
|
|
3020
|
+
// "O": 1774793727585000000
|
|
3021
|
+
// }
|
|
3022
|
+
//
|
|
3023
|
+
const marketId = this.safeString(position, 's');
|
|
3024
|
+
market = this.safeMarket(marketId, market);
|
|
3025
|
+
const symbol = market['symbol'];
|
|
3026
|
+
const timestamp = this.safeIntegerProduct(position, 'O', 0.000001);
|
|
3027
|
+
const amountString = this.safeString(position, 'q');
|
|
3028
|
+
const size = Precise["default"].stringAbs(amountString);
|
|
3029
|
+
const side = Precise["default"].stringGt(amountString, '0') ? 'long' : 'short';
|
|
3030
|
+
return this.safePosition({
|
|
3031
|
+
'info': position,
|
|
3032
|
+
'id': this.safeString(position, 'pi'),
|
|
3033
|
+
'symbol': symbol,
|
|
3034
|
+
'timestamp': timestamp,
|
|
3035
|
+
'datetime': this.iso8601(timestamp),
|
|
3036
|
+
'lastUpdateTimestamp': this.safeIntegerProduct(position, 'U', 0.000001),
|
|
3037
|
+
'initialMargin': this.safeNumber(position, 'iM'),
|
|
3038
|
+
'initialMarginPercentage': undefined,
|
|
3039
|
+
'maintenanceMargin': this.safeNumber(position, 'mtM'),
|
|
3040
|
+
'maintenanceMarginPercentage': this.safeNumber(position, 'mmr'),
|
|
3041
|
+
'entryPrice': this.safeNumber(position, 'eP'),
|
|
3042
|
+
'notional': this.safeNumber(position, 'pV'),
|
|
3043
|
+
'leverage': this.safeNumber(position, 'l'),
|
|
3044
|
+
'unrealizedPnl': this.safeNumber(position, 'uPL'),
|
|
3045
|
+
'contracts': this.parseNumber(size),
|
|
3046
|
+
'contractSize': this.safeNumber(market, 'contractSize'),
|
|
3047
|
+
'realizedPnl': this.safeNumber(position, 'rPL'),
|
|
3048
|
+
'marginRatio': undefined,
|
|
3049
|
+
'liquidationPrice': this.safeNumber(position, 'lP'),
|
|
3050
|
+
'markPrice': this.safeNumber(position, 'mP'),
|
|
3051
|
+
'lastPrice': undefined,
|
|
3052
|
+
'collateral': undefined,
|
|
3053
|
+
'marginMode': this.safeStringLower(position, 'mM'),
|
|
3054
|
+
'side': side,
|
|
3055
|
+
'percentage': undefined,
|
|
3056
|
+
'stopLossPrice': undefined,
|
|
3057
|
+
'takeProfitPrice': undefined,
|
|
3058
|
+
});
|
|
3059
|
+
}
|
|
2024
3060
|
handleSubject(client, message) {
|
|
2025
3061
|
//
|
|
2026
3062
|
// {
|
|
@@ -2043,7 +3079,7 @@ class kucoin extends kucoin$1["default"] {
|
|
|
2043
3079
|
this.handleTicker(client, message);
|
|
2044
3080
|
return;
|
|
2045
3081
|
}
|
|
2046
|
-
const subject = this.
|
|
3082
|
+
const subject = this.safeString2(message, 'subject', 'T');
|
|
2047
3083
|
const methods = {
|
|
2048
3084
|
'level1': this.handleBidAsk,
|
|
2049
3085
|
'level2': this.handleOrderBook,
|
|
@@ -2068,6 +3104,40 @@ class kucoin extends kucoin$1["default"] {
|
|
|
2068
3104
|
'position.change': this.handlePosition,
|
|
2069
3105
|
'position.settlement': this.handlePosition,
|
|
2070
3106
|
'position.adjustRiskLimit': this.handlePosition,
|
|
3107
|
+
// uta messages
|
|
3108
|
+
'ticker.SPOT': this.handleUtaTicker,
|
|
3109
|
+
'ticker.FUTURES': this.handleUtaTicker,
|
|
3110
|
+
'trade.SPOT': this.handleUtaTrade,
|
|
3111
|
+
'trade.FUTURES': this.handleUtaTrade,
|
|
3112
|
+
'kline.SPOT': this.handleUtaOHLCV,
|
|
3113
|
+
'kline.FUTURES': this.handleUtaOHLCV,
|
|
3114
|
+
'obu.SPOT': this.handleUtaOrderBook,
|
|
3115
|
+
'obu.FUTURES': this.handleUtaOrderBook,
|
|
3116
|
+
'order.UNIFIED': this.handleUtaOrder,
|
|
3117
|
+
'order.SPOT': this.handleUtaOrder,
|
|
3118
|
+
'order.FUTURES': this.handleUtaOrder,
|
|
3119
|
+
'order.CROSS': this.handleUtaOrder,
|
|
3120
|
+
'order.ISOLATED': this.handleUtaOrder,
|
|
3121
|
+
'orderAll.UNIFIED': this.handleUtaOrder,
|
|
3122
|
+
'orderAll.SPOT': this.handleUtaOrder,
|
|
3123
|
+
'orderAll.FUTURES': this.handleUtaOrder,
|
|
3124
|
+
'orderAll.CROSS': this.handleUtaOrder,
|
|
3125
|
+
'orderAll.ISOLATED': this.handleUtaOrder,
|
|
3126
|
+
'execution.UNIFIED': this.handleUtaMyTrade,
|
|
3127
|
+
'execution.SPOT': this.handleUtaMyTrade,
|
|
3128
|
+
'execution.FUTURES': this.handleUtaMyTrade,
|
|
3129
|
+
'execution.CROSS': this.handleUtaMyTrade,
|
|
3130
|
+
'execution.ISOLATED': this.handleUtaMyTrade,
|
|
3131
|
+
'execution.lite.UNIFIED': this.handleUtaMyTrade,
|
|
3132
|
+
'execution.lite.SPOT': this.handleUtaMyTrade,
|
|
3133
|
+
'execution.lite.FUTURES': this.handleUtaMyTrade,
|
|
3134
|
+
'execution.lite.CROSS': this.handleUtaMyTrade,
|
|
3135
|
+
'execution.lite.ISOLATED': this.handleUtaMyTrade,
|
|
3136
|
+
'position.UNIFIED': this.handleUtaPosition,
|
|
3137
|
+
'position.FUTURES': this.handleUtaPosition,
|
|
3138
|
+
'positionAll.UNIFIED': this.handleUtaPosition,
|
|
3139
|
+
'positionAll.FUTURES': this.handleUtaPosition,
|
|
3140
|
+
'balance.UNIFIED': this.handleUtaBalance,
|
|
2071
3141
|
};
|
|
2072
3142
|
const method = this.safeValue(methods, subject);
|
|
2073
3143
|
if (method !== undefined) {
|
|
@@ -2097,7 +3167,14 @@ class kucoin extends kucoin$1["default"] {
|
|
|
2097
3167
|
// "data": "type is not supported"
|
|
2098
3168
|
// }
|
|
2099
3169
|
//
|
|
2100
|
-
|
|
3170
|
+
// uta
|
|
3171
|
+
// {
|
|
3172
|
+
// "id": "1",
|
|
3173
|
+
// "result": false,
|
|
3174
|
+
// "reason": "missing `symbol` for topic: Position"
|
|
3175
|
+
// }
|
|
3176
|
+
//
|
|
3177
|
+
const data = this.safeString2(message, 'data', 'reason', '');
|
|
2101
3178
|
if (data === 'token is expired') {
|
|
2102
3179
|
let type = 'public';
|
|
2103
3180
|
if (client.url.indexOf('connectId=private') >= 0) {
|
|
@@ -2109,7 +3186,7 @@ class kucoin extends kucoin$1["default"] {
|
|
|
2109
3186
|
return false;
|
|
2110
3187
|
}
|
|
2111
3188
|
handleMessage(client, message) {
|
|
2112
|
-
const type = this.
|
|
3189
|
+
const type = this.safeString2(message, 'type', 'message');
|
|
2113
3190
|
const methods = {
|
|
2114
3191
|
// 'heartbeat': this.handleHeartbeat,
|
|
2115
3192
|
'welcome': this.handleSystemStatus,
|
|
@@ -2122,6 +3199,16 @@ class kucoin extends kucoin$1["default"] {
|
|
|
2122
3199
|
if (method !== undefined) {
|
|
2123
3200
|
method.call(this, client, message);
|
|
2124
3201
|
}
|
|
3202
|
+
else if ('T' in message) { // uta messages
|
|
3203
|
+
this.handleSubject(client, message);
|
|
3204
|
+
}
|
|
3205
|
+
else if ('result' in message) { // subscription uta messages
|
|
3206
|
+
const result = this.safeBool(message, 'result', true);
|
|
3207
|
+
if (!result) {
|
|
3208
|
+
this.handleErrorMessage(client, message);
|
|
3209
|
+
}
|
|
3210
|
+
this.handleSubscriptionStatus(client, message);
|
|
3211
|
+
}
|
|
2125
3212
|
}
|
|
2126
3213
|
getMessageHash(elementName, symbol = undefined) {
|
|
2127
3214
|
// method from kucoinfutures
|