ccxt 4.5.50 → 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 +3 -3
- 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 +15 -12
- 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 +6 -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 -1
- 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 +1 -1
- 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 +9 -3
- 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 +1 -1
- 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 +1 -1
- 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 +1 -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 +1 -1
- 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.js +0 -6
- package/js/src/abstract/ndax.js +0 -6
- package/js/src/abstract/novadax.js +0 -6
- package/js/src/abstract/okx.js +0 -6
- 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 +1 -0
- package/js/src/base/Exchange.js +15 -18
- 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 +5 -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 -6
- 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 +0 -6
- 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.js +8 -8
- 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 +0 -6
- 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.js +0 -6
- 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 +0 -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 +0 -6
- 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
package/js/src/pro/kucoin.js
CHANGED
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
// ----------------------------------------------------------------------------
|
|
2
|
-
|
|
3
|
-
// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
|
|
4
|
-
// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
|
5
|
-
// EDIT THE CORRESPONDENT .ts FILE INSTEAD
|
|
6
|
-
|
|
7
1
|
// ---------------------------------------------------------------------------
|
|
8
2
|
import kucoinRest from '../kucoin.js';
|
|
9
3
|
import { ArgumentsRequired, ExchangeError } from '../base/errors.js';
|
|
@@ -41,7 +35,20 @@ export default class kucoin extends kucoinRest {
|
|
|
41
35
|
'unWatchTrades': true,
|
|
42
36
|
'unWatchhTradesForSymbols': true,
|
|
43
37
|
},
|
|
38
|
+
'urls': {
|
|
39
|
+
// only for pro (uta) accounts
|
|
40
|
+
'api': {
|
|
41
|
+
'ws': {
|
|
42
|
+
'spot': 'wss://x-push-spot.kucoin.com',
|
|
43
|
+
'futures': 'wss://x-push-futures.kucoin.com',
|
|
44
|
+
'private': 'wss://wsapi-push.kucoin.com',
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
},
|
|
44
48
|
'options': {
|
|
49
|
+
'utaToken': undefined,
|
|
50
|
+
'utaTokenLastUpdate': 0,
|
|
51
|
+
'utaTokenRefreshInterval': 1000 * 60 * 60 * 24,
|
|
45
52
|
'tradesLimit': 1000,
|
|
46
53
|
'watchTicker': {
|
|
47
54
|
'spotMethod': '/market/snapshot', // '/market/ticker'
|
|
@@ -49,6 +56,7 @@ export default class kucoin extends kucoinRest {
|
|
|
49
56
|
'watchOrderBook': {
|
|
50
57
|
'snapshotDelay': 5,
|
|
51
58
|
'snapshotMaxRetries': 3,
|
|
59
|
+
'utaDepth': 'increment',
|
|
52
60
|
'spotMethod': '/market/level2',
|
|
53
61
|
'contractMethod': '/contractMarket/level2', // '/contractMarket/level2Depth5' or '/contractMarket/level2Depth20'
|
|
54
62
|
},
|
|
@@ -63,6 +71,10 @@ export default class kucoin extends kucoinRest {
|
|
|
63
71
|
'fetchPositionSnapshot': true,
|
|
64
72
|
'awaitPositionSnapshot': true, // whether to wait for the position snapshot before providing updates
|
|
65
73
|
},
|
|
74
|
+
'watchPositions': {
|
|
75
|
+
'fetchPositionsSnapshot': true,
|
|
76
|
+
'awaitPositionsSnapshot': true, // whether to wait for the positions snapshot before providing updates
|
|
77
|
+
},
|
|
66
78
|
},
|
|
67
79
|
'streaming': {
|
|
68
80
|
// kucoin does not support built-in ws protocol-level ping-pong
|
|
@@ -166,6 +178,95 @@ export default class kucoin extends kucoinRest {
|
|
|
166
178
|
}
|
|
167
179
|
return await this.watch(url, messageHash, message, subscriptionHash, subscription);
|
|
168
180
|
}
|
|
181
|
+
async subscribePublicUta(messageHash, channel, symbol, params = {}, subscription = undefined) {
|
|
182
|
+
const requestId = this.requestId().toString();
|
|
183
|
+
const market = this.market(symbol);
|
|
184
|
+
const urlType = market['contract'] ? 'futures' : 'spot';
|
|
185
|
+
const tradeType = urlType.toUpperCase();
|
|
186
|
+
let action = 'subscribe';
|
|
187
|
+
if (subscription !== undefined) {
|
|
188
|
+
const unsubscribe = this.safeBool(subscription, 'unsubscribe', false);
|
|
189
|
+
action = unsubscribe ? 'unsubscribe' : action;
|
|
190
|
+
}
|
|
191
|
+
const request = {
|
|
192
|
+
'id': requestId,
|
|
193
|
+
'action': action,
|
|
194
|
+
'channel': channel,
|
|
195
|
+
'tradeType': tradeType,
|
|
196
|
+
'symbol': market['id'],
|
|
197
|
+
};
|
|
198
|
+
const message = this.extend(request, params);
|
|
199
|
+
const url = this.safeString(this.urls['api']['ws'], urlType);
|
|
200
|
+
const client = this.client(url);
|
|
201
|
+
if (!(messageHash in client.subscriptions)) {
|
|
202
|
+
client.subscriptions[requestId] = messageHash;
|
|
203
|
+
}
|
|
204
|
+
return await this.watch(url, messageHash, message, messageHash, subscription);
|
|
205
|
+
}
|
|
206
|
+
async subscribePrivateUta(messageHashes, subscribeHash, channel, symbol = undefined, params = {}, subscription = undefined) {
|
|
207
|
+
this.checkRequiredCredentials();
|
|
208
|
+
const requestId = this.requestId().toString();
|
|
209
|
+
let action = 'subscribe';
|
|
210
|
+
if (subscription !== undefined) {
|
|
211
|
+
const unsubscribe = this.safeBool(subscription, 'unsubscribe', false);
|
|
212
|
+
action = unsubscribe ? 'unsubscribe' : action;
|
|
213
|
+
}
|
|
214
|
+
const request = {
|
|
215
|
+
'id': requestId,
|
|
216
|
+
'action': action,
|
|
217
|
+
'channel': channel,
|
|
218
|
+
};
|
|
219
|
+
if (symbol !== undefined) {
|
|
220
|
+
const market = this.market(symbol);
|
|
221
|
+
request['symbol'] = market['id'];
|
|
222
|
+
}
|
|
223
|
+
const message = this.extend(request, params);
|
|
224
|
+
const url = await this.getUtaUrl();
|
|
225
|
+
const client = this.client(url);
|
|
226
|
+
if (!(subscribeHash in client.subscriptions)) {
|
|
227
|
+
client.subscriptions[requestId] = subscribeHash;
|
|
228
|
+
}
|
|
229
|
+
return await this.watchMultiple(url, messageHashes, message, [subscribeHash], subscription);
|
|
230
|
+
}
|
|
231
|
+
async getUtaUrl() {
|
|
232
|
+
const utaToken = await this.authenticateUta();
|
|
233
|
+
return this.urls['api']['ws']['private'] + '?token=' + utaToken;
|
|
234
|
+
}
|
|
235
|
+
async authenticateUta() {
|
|
236
|
+
this.checkRequiredCredentials();
|
|
237
|
+
const utaToken = this.safeValue(this.options, 'utaToken');
|
|
238
|
+
const lastUpdate = this.safeInteger(this.options, 'utaTokenLastUpdate', 0);
|
|
239
|
+
let refreshInterval = 1000 * 60 * 60 * 24; // 24 hours
|
|
240
|
+
refreshInterval = this.safeInteger(this.options, 'utaTokenRefreshInterval', refreshInterval);
|
|
241
|
+
const now = this.milliseconds();
|
|
242
|
+
const expired = (now - lastUpdate) >= refreshInterval;
|
|
243
|
+
const messageHash = 'utaToken';
|
|
244
|
+
const url = this.urls['api']['ws']['private'];
|
|
245
|
+
const client = this.client(url);
|
|
246
|
+
if ((utaToken === undefined) || expired) {
|
|
247
|
+
if (messageHash in client.futures) {
|
|
248
|
+
// wait the existing future if it's already being fetched by another call
|
|
249
|
+
await client.future(messageHash);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
// fetch new token and store the future to the .futures to prevent concurrent fetches
|
|
253
|
+
client.future(messageHash);
|
|
254
|
+
try {
|
|
255
|
+
const response = await this.privatePostBulletPrivate({ 'version': 'v2' });
|
|
256
|
+
const data = this.safeDict(response, 'data', {});
|
|
257
|
+
const utaTokenString = this.safeString(data, 'token');
|
|
258
|
+
this.options['utaTokenLastUpdate'] = now;
|
|
259
|
+
this.options['utaToken'] = utaTokenString;
|
|
260
|
+
client.resolve(utaTokenString, messageHash);
|
|
261
|
+
}
|
|
262
|
+
catch (e) {
|
|
263
|
+
this.options['utaToken'] = undefined;
|
|
264
|
+
client.reject(e, messageHash);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return this.safeString(this.options, 'utaToken');
|
|
269
|
+
}
|
|
169
270
|
async unSubscribe(url, messageHash, topic, subscriptionHash, params = {}, subscription = undefined) {
|
|
170
271
|
return await this.unSubscribeMultiple(url, [messageHash], topic, [subscriptionHash], params, subscription);
|
|
171
272
|
}
|
|
@@ -214,14 +315,24 @@ export default class kucoin extends kucoinRest {
|
|
|
214
315
|
* @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
215
316
|
* @see https://www.kucoin.com/docs-new/3470063w0
|
|
216
317
|
* @see https://www.kucoin.com/docs-new/3470081w0
|
|
318
|
+
* @see https://www.kucoin.com/docs-new/3470222w0
|
|
217
319
|
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
218
320
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
321
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
219
322
|
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/?id=ticker-structure}
|
|
220
323
|
*/
|
|
221
324
|
async watchTicker(symbol, params = {}) {
|
|
222
325
|
await this.loadMarkets();
|
|
223
326
|
const market = this.market(symbol);
|
|
224
327
|
symbol = market['symbol'];
|
|
328
|
+
let messageHash = 'ticker:' + symbol;
|
|
329
|
+
let uta = false;
|
|
330
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchTicker', 'uta', uta);
|
|
331
|
+
if (uta) {
|
|
332
|
+
messageHash = 'uta:' + messageHash;
|
|
333
|
+
const channel = 'ticker';
|
|
334
|
+
return await this.subscribePublicUta(messageHash, channel, symbol, params);
|
|
335
|
+
}
|
|
225
336
|
const isFuturesMethod = market['contract'];
|
|
226
337
|
const url = await this.negotiate(false, isFuturesMethod);
|
|
227
338
|
let method = '/market/snapshot';
|
|
@@ -232,7 +343,6 @@ export default class kucoin extends kucoinRest {
|
|
|
232
343
|
[method, params] = this.handleOptionAndParams(params, 'watchTicker', 'spotMethod', method);
|
|
233
344
|
}
|
|
234
345
|
const topic = method + ':' + market['id'];
|
|
235
|
-
const messageHash = 'ticker:' + symbol;
|
|
236
346
|
return await this.subscribe(url, messageHash, topic, params);
|
|
237
347
|
}
|
|
238
348
|
/**
|
|
@@ -241,8 +351,10 @@ export default class kucoin extends kucoinRest {
|
|
|
241
351
|
* @description unWatches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
242
352
|
* @see https://www.kucoin.com/docs-new/3470063w0
|
|
243
353
|
* @see https://www.kucoin.com/docs-new/3470081w0
|
|
354
|
+
* @see https://www.kucoin.com/docs-new/3470222w0
|
|
244
355
|
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
245
356
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
357
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
246
358
|
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/?id=ticker-structure}
|
|
247
359
|
*/
|
|
248
360
|
async unWatchTicker(symbol, params = {}) {
|
|
@@ -250,28 +362,39 @@ export default class kucoin extends kucoinRest {
|
|
|
250
362
|
const market = this.market(symbol);
|
|
251
363
|
symbol = market['symbol'];
|
|
252
364
|
const isFuturesMethod = market['contract'];
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
365
|
+
let uta = false;
|
|
366
|
+
[uta, params] = this.handleOptionAndParams(params, 'unWatchTicker', 'uta', uta);
|
|
367
|
+
const subscription = {
|
|
368
|
+
'symbols': [symbol],
|
|
369
|
+
'topic': 'ticker',
|
|
370
|
+
'unsubscribe': true,
|
|
371
|
+
};
|
|
372
|
+
let subMessageHash = 'ticker:' + symbol;
|
|
373
|
+
if (uta) {
|
|
374
|
+
subMessageHash = 'uta:' + subMessageHash;
|
|
375
|
+
subscription['subMessageHashes'] = [subMessageHash];
|
|
376
|
+
const utaMessageHash = 'unsubscribe:' + subMessageHash;
|
|
377
|
+
subscription['messageHashes'] = [utaMessageHash];
|
|
378
|
+
return await this.subscribePublicUta(utaMessageHash, 'ticker', symbol, params, subscription);
|
|
257
379
|
}
|
|
258
380
|
else {
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
381
|
+
const url = await this.negotiate(false, isFuturesMethod);
|
|
382
|
+
let method = '/market/snapshot';
|
|
383
|
+
if (isFuturesMethod) {
|
|
384
|
+
method = '/contractMarket/ticker';
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
[method, params] = this.handleOptionAndParams(params, 'watchTicker', 'spotMethod', method);
|
|
388
|
+
}
|
|
389
|
+
const topic = method + ':' + market['id'];
|
|
390
|
+
const messageHash = 'unsubscribe:' + subMessageHash;
|
|
265
391
|
// we have to add the topic to the messageHashes and subMessageHashes
|
|
266
392
|
// because handleSubscriptionStatus needs them to remove the subscription from the client
|
|
267
393
|
// without them subscription would never be removed and re-subscribe would fail because of duplicate subscriptionHash
|
|
268
|
-
'messageHashes'
|
|
269
|
-
'subMessageHashes'
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
'symbols': [symbol],
|
|
273
|
-
};
|
|
274
|
-
return await this.unSubscribe(url, messageHash, topic, subMessageHash, params, subscription);
|
|
394
|
+
subscription['messageHashes'] = [messageHash, topic];
|
|
395
|
+
subscription['subMessageHashes'] = [subMessageHash, topic];
|
|
396
|
+
return await this.unSubscribe(url, messageHash, topic, subMessageHash, params, subscription);
|
|
397
|
+
}
|
|
275
398
|
}
|
|
276
399
|
/**
|
|
277
400
|
* @method
|
|
@@ -279,10 +402,12 @@ export default class kucoin extends kucoinRest {
|
|
|
279
402
|
* @see https://www.kucoin.com/docs-new/3470063w0
|
|
280
403
|
* @see https://www.kucoin.com/docs-new/3470064w0
|
|
281
404
|
* @see https://www.kucoin.com/docs-new/3470081w0
|
|
405
|
+
* @see https://www.kucoin.com/docs-new/3470222w0
|
|
282
406
|
* @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
|
283
407
|
* @param {string[]} symbols unified symbol of the market to fetch the ticker for
|
|
284
408
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
285
409
|
* @param {string} [params.method] *spot markets only* either '/market/snapshot' or '/market/ticker' default is '/market/ticker'
|
|
410
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
286
411
|
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/?id=ticker-structure}
|
|
287
412
|
*/
|
|
288
413
|
async watchTickers(symbols = undefined, params = {}) {
|
|
@@ -291,9 +416,11 @@ export default class kucoin extends kucoinRest {
|
|
|
291
416
|
const firstMarket = this.getMarketFromSymbols(symbols);
|
|
292
417
|
let marketType = undefined;
|
|
293
418
|
[marketType, params] = this.handleMarketTypeAndParams('watchTickers', firstMarket, params);
|
|
419
|
+
let uta = false;
|
|
420
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchTickers', 'uta', uta);
|
|
294
421
|
const isFuturesMethod = (marketType !== 'spot') && (marketType !== 'margin');
|
|
295
|
-
if (isFuturesMethod && symbols === undefined) {
|
|
296
|
-
throw new ArgumentsRequired(this.id + ' watchTickers() requires a list of symbols for ' + marketType + ' markets');
|
|
422
|
+
if ((isFuturesMethod || uta) && symbols === undefined) {
|
|
423
|
+
throw new ArgumentsRequired(this.id + ' watchTickers() requires a list of symbols for ' + marketType + ' markets and unified trading account (uta)');
|
|
297
424
|
}
|
|
298
425
|
const messageHash = 'tickers';
|
|
299
426
|
let method = '/market/ticker';
|
|
@@ -334,6 +461,49 @@ export default class kucoin extends kucoinRest {
|
|
|
334
461
|
}
|
|
335
462
|
return this.filterByArray(this.tickers, 'symbol', symbols);
|
|
336
463
|
}
|
|
464
|
+
async subscribePublicMultipleUta(messageHashes, channel, symbols, params = {}, subscription = undefined) {
|
|
465
|
+
const requestId = this.requestId().toString();
|
|
466
|
+
const market = this.getMarketFromSymbols(symbols);
|
|
467
|
+
const urlType = market['contract'] ? 'futures' : 'spot';
|
|
468
|
+
const tradeType = urlType.toUpperCase();
|
|
469
|
+
let action = 'subscribe';
|
|
470
|
+
if (subscription !== undefined) {
|
|
471
|
+
const unsubscribe = this.safeBool(subscription, 'unsubscribe', false);
|
|
472
|
+
action = unsubscribe ? 'unsubscribe' : action;
|
|
473
|
+
}
|
|
474
|
+
const request = {
|
|
475
|
+
'id': requestId,
|
|
476
|
+
'action': action,
|
|
477
|
+
'channel': channel,
|
|
478
|
+
'tradeType': tradeType,
|
|
479
|
+
'symbols': this.marketIds(symbols),
|
|
480
|
+
};
|
|
481
|
+
const message = this.extend(request, params);
|
|
482
|
+
const url = this.safeString(this.urls['api']['ws'], urlType);
|
|
483
|
+
const client = this.client(url);
|
|
484
|
+
const messageHashWithSymbols = channel + ':' + symbols.join(',');
|
|
485
|
+
if (!(messageHashWithSymbols in client.subscriptions)) {
|
|
486
|
+
client.subscriptions[requestId] = messageHashWithSymbols;
|
|
487
|
+
}
|
|
488
|
+
return await this.watchMultiple(url, messageHashes, message, messageHashes, subscription);
|
|
489
|
+
}
|
|
490
|
+
async watchUtaTickers(symbols = undefined, params = {}) {
|
|
491
|
+
await this.loadMarkets();
|
|
492
|
+
symbols = this.marketSymbols(symbols, undefined, false, true);
|
|
493
|
+
const messageHash = 'uta:ticker';
|
|
494
|
+
const messageHashes = [];
|
|
495
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
496
|
+
const symbol = this.safeString(symbols, i);
|
|
497
|
+
const market = this.market(symbol);
|
|
498
|
+
const subMessageHash = messageHash + ':' + market['symbol'];
|
|
499
|
+
messageHashes.push(subMessageHash);
|
|
500
|
+
}
|
|
501
|
+
const tickers = await this.subscribePublicMultipleUta(messageHashes, 'ticker', symbols, params);
|
|
502
|
+
if (this.newUpdates) {
|
|
503
|
+
return tickers;
|
|
504
|
+
}
|
|
505
|
+
return this.filterByArray(this.tickers, 'symbol', symbols);
|
|
506
|
+
}
|
|
337
507
|
handleTicker(client, message) {
|
|
338
508
|
//
|
|
339
509
|
// market/snapshot
|
|
@@ -425,7 +595,7 @@ export default class kucoin extends kucoinRest {
|
|
|
425
595
|
}
|
|
426
596
|
const data = this.safeDict(message, 'data', {});
|
|
427
597
|
const rawTicker = this.safeDict(data, 'data', data);
|
|
428
|
-
const ticker = this.
|
|
598
|
+
const ticker = this.parseSpotOrUtaTicker(rawTicker, market);
|
|
429
599
|
const symbol = ticker['symbol'];
|
|
430
600
|
this.tickers[symbol] = ticker;
|
|
431
601
|
const messageHash = 'ticker:' + symbol;
|
|
@@ -469,6 +639,61 @@ export default class kucoin extends kucoinRest {
|
|
|
469
639
|
const messageHash = 'ticker:' + market['symbol'];
|
|
470
640
|
client.resolve(ticker, messageHash);
|
|
471
641
|
}
|
|
642
|
+
handleUtaTicker(client, message) {
|
|
643
|
+
//
|
|
644
|
+
// {
|
|
645
|
+
// "T": "ticker.SPOT",
|
|
646
|
+
// "P": "1774100940787520626",
|
|
647
|
+
// "d": {
|
|
648
|
+
// "A": "0.5972689",
|
|
649
|
+
// "B": "23.3114947",
|
|
650
|
+
// "E": 20310552932,
|
|
651
|
+
// "M": "1774100940780000000",
|
|
652
|
+
// "S": "SELL",
|
|
653
|
+
// "a": "2155.55",
|
|
654
|
+
// "b": "2155.54",
|
|
655
|
+
// "l": "2155.54",
|
|
656
|
+
// "q": "0.0001529",
|
|
657
|
+
// "s": "ETH-USDT"
|
|
658
|
+
// }
|
|
659
|
+
// }
|
|
660
|
+
//
|
|
661
|
+
const data = this.safeDict(message, 'd', {});
|
|
662
|
+
const marketId = this.safeString(data, 's');
|
|
663
|
+
const market = this.safeMarket(marketId);
|
|
664
|
+
const ticker = this.parseWsUtaTicker(data, market);
|
|
665
|
+
this.tickers[market['symbol']] = ticker;
|
|
666
|
+
const messageHash = 'uta:ticker:' + market['symbol'];
|
|
667
|
+
client.resolve(ticker, messageHash);
|
|
668
|
+
}
|
|
669
|
+
parseWsUtaTicker(ticker, market = undefined) {
|
|
670
|
+
const symbol = this.safeString(market, 'symbol');
|
|
671
|
+
market = this.safeMarket(symbol, market);
|
|
672
|
+
const timestamp = this.safeIntegerProduct(ticker, 'M', 0.000001);
|
|
673
|
+
return this.safeTicker({
|
|
674
|
+
'symbol': symbol,
|
|
675
|
+
'timestamp': timestamp,
|
|
676
|
+
'datetime': this.iso8601(timestamp),
|
|
677
|
+
'high': undefined,
|
|
678
|
+
'low': undefined,
|
|
679
|
+
'bid': this.safeString(ticker, 'a'),
|
|
680
|
+
'bidVolume': this.safeString(ticker, 'A'),
|
|
681
|
+
'ask': this.safeString(ticker, 'b'),
|
|
682
|
+
'askVolume': this.safeString(ticker, 'B'),
|
|
683
|
+
'vwap': undefined,
|
|
684
|
+
'open': undefined,
|
|
685
|
+
'close': undefined,
|
|
686
|
+
'last': this.safeString(ticker, 'l'),
|
|
687
|
+
'previousClose': undefined,
|
|
688
|
+
'change': undefined,
|
|
689
|
+
'percentage': undefined,
|
|
690
|
+
'average': undefined,
|
|
691
|
+
'baseVolume': undefined,
|
|
692
|
+
'quoteVolume': undefined,
|
|
693
|
+
'markPrice': undefined,
|
|
694
|
+
'info': ticker,
|
|
695
|
+
}, market);
|
|
696
|
+
}
|
|
472
697
|
/**
|
|
473
698
|
* @method
|
|
474
699
|
* @name kucoin#watchBidsAsks
|
|
@@ -604,27 +829,43 @@ export default class kucoin extends kucoinRest {
|
|
|
604
829
|
* @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
605
830
|
* @see https://www.kucoin.com/docs-new/3470071w0
|
|
606
831
|
* @see https://www.kucoin.com/docs-new/3470086w0
|
|
832
|
+
* @see https://www.kucoin.com/docs-new/3470223w0
|
|
607
833
|
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
|
608
834
|
* @param {string} timeframe the length of time each candle represents
|
|
609
835
|
* @param {int} [since] timestamp in ms of the earliest candle to fetch
|
|
610
836
|
* @param {int} [limit] the maximum amount of candles to fetch
|
|
611
837
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
838
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
612
839
|
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
613
840
|
*/
|
|
614
841
|
async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
|
|
615
842
|
await this.loadMarkets();
|
|
616
843
|
const market = this.market(symbol);
|
|
617
844
|
symbol = market['symbol'];
|
|
618
|
-
const isFuturesMethod = market['contract'];
|
|
619
|
-
const url = await this.negotiate(false, isFuturesMethod);
|
|
620
845
|
const period = this.safeString(this.timeframes, timeframe, timeframe);
|
|
621
|
-
let
|
|
622
|
-
|
|
623
|
-
|
|
846
|
+
let messageHash = 'candles:' + symbol + ':' + timeframe;
|
|
847
|
+
let uta = false;
|
|
848
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchOHLCV', 'uta', uta);
|
|
849
|
+
let ohlcv = undefined;
|
|
850
|
+
if (uta) {
|
|
851
|
+
const channel = 'kline';
|
|
852
|
+
messageHash = 'uta:' + messageHash;
|
|
853
|
+
const extendedParams = {
|
|
854
|
+
'interval': period,
|
|
855
|
+
};
|
|
856
|
+
params = this.extend(extendedParams, params);
|
|
857
|
+
ohlcv = await this.subscribePublicUta(messageHash, channel, symbol, this.extend(extendedParams, params));
|
|
858
|
+
}
|
|
859
|
+
else {
|
|
860
|
+
const isFuturesMethod = market['contract'];
|
|
861
|
+
const url = await this.negotiate(false, isFuturesMethod);
|
|
862
|
+
let channelName = '/market/candles:';
|
|
863
|
+
if (isFuturesMethod) {
|
|
864
|
+
channelName = '/contractMarket/limitCandle:';
|
|
865
|
+
}
|
|
866
|
+
const topic = channelName + market['id'] + '_' + period;
|
|
867
|
+
ohlcv = await this.subscribe(url, messageHash, topic, params);
|
|
624
868
|
}
|
|
625
|
-
const topic = channelName + market['id'] + '_' + period;
|
|
626
|
-
const messageHash = 'candles:' + symbol + ':' + timeframe;
|
|
627
|
-
const ohlcv = await this.subscribe(url, messageHash, topic, params);
|
|
628
869
|
if (this.newUpdates) {
|
|
629
870
|
limit = ohlcv.getLimit(symbol, limit);
|
|
630
871
|
}
|
|
@@ -636,38 +877,54 @@ export default class kucoin extends kucoinRest {
|
|
|
636
877
|
* @description unWatches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
637
878
|
* @see https://www.kucoin.com/docs-new/3470071w0
|
|
638
879
|
* @see https://www.kucoin.com/docs-new/3470086w0
|
|
880
|
+
* @see https://www.kucoin.com/docs-new/3470223w0
|
|
639
881
|
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
|
640
882
|
* @param {string} timeframe the length of time each candle represents
|
|
641
883
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
884
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
642
885
|
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
643
886
|
*/
|
|
644
887
|
async unWatchOHLCV(symbol, timeframe = '1m', params = {}) {
|
|
645
888
|
await this.loadMarkets();
|
|
646
889
|
const market = this.market(symbol);
|
|
647
890
|
symbol = market['symbol'];
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
let channelName = '/market/candles:';
|
|
651
|
-
if (isFuturesMethod) {
|
|
652
|
-
channelName = '/contractMarket/limitCandle:';
|
|
653
|
-
}
|
|
891
|
+
let uta = false;
|
|
892
|
+
[uta, params] = this.handleOptionAndParams(params, 'unWatchOHLCV', 'uta', uta);
|
|
654
893
|
const period = this.safeString(this.timeframes, timeframe, timeframe);
|
|
655
|
-
const topic = channelName + market['id'] + '_' + period;
|
|
656
|
-
const messageHash = 'unsubscribe:candles:' + symbol + ':' + timeframe;
|
|
657
|
-
const subMessageHash = 'candles:' + symbol + ':' + timeframe;
|
|
658
894
|
const symbolAndTimeframe = [symbol, timeframe];
|
|
659
895
|
const subscription = {
|
|
660
|
-
// we have to add the topic to the messageHashes and subMessageHashes
|
|
661
|
-
// because handleSubscriptionStatus needs them to remove the subscription from the client
|
|
662
|
-
// without them subscription would never be removed and re-subscribe would fail because of duplicate subscriptionHash
|
|
663
|
-
'messageHashes': [messageHash, topic],
|
|
664
|
-
'subMessageHashes': [subMessageHash, topic],
|
|
665
|
-
'topic': 'ohlcv',
|
|
666
|
-
'unsubscribe': true,
|
|
667
896
|
'symbols': [symbol],
|
|
668
897
|
'symbolsAndTimeframes': [symbolAndTimeframe],
|
|
898
|
+
'topic': 'ohlcv',
|
|
899
|
+
'unsubscribe': true,
|
|
669
900
|
};
|
|
670
|
-
|
|
901
|
+
let subMessageHash = 'candles:' + symbol + ':' + timeframe;
|
|
902
|
+
if (uta) {
|
|
903
|
+
subMessageHash = 'uta:' + subMessageHash;
|
|
904
|
+
subscription['subMessageHashes'] = [subMessageHash];
|
|
905
|
+
const utaMessageHash = 'unsubscribe:' + subMessageHash;
|
|
906
|
+
subscription['messageHashes'] = [utaMessageHash];
|
|
907
|
+
const extendedParams = {
|
|
908
|
+
'interval': period,
|
|
909
|
+
};
|
|
910
|
+
return await this.subscribePublicUta(utaMessageHash, 'kline', symbol, this.extend(extendedParams, params), subscription);
|
|
911
|
+
}
|
|
912
|
+
else {
|
|
913
|
+
const isFuturesMethod = market['contract'];
|
|
914
|
+
const url = await this.negotiate(false, isFuturesMethod);
|
|
915
|
+
let channelName = '/market/candles:';
|
|
916
|
+
if (isFuturesMethod) {
|
|
917
|
+
channelName = '/contractMarket/limitCandle:';
|
|
918
|
+
}
|
|
919
|
+
const messageHash = 'unsubscribe:' + subMessageHash;
|
|
920
|
+
const topic = channelName + market['id'] + '_' + period;
|
|
921
|
+
// we have to add the topic to the messageHashes and subMessageHashes
|
|
922
|
+
// because handleSubscriptionStatus needs them to remove the subscription from the client
|
|
923
|
+
// without them subscription would never be removed and re-subscribe would fail because of duplicate subscriptionHash
|
|
924
|
+
subscription['messageHashes'] = [messageHash, topic];
|
|
925
|
+
subscription['subMessageHashes'] = [subMessageHash, topic];
|
|
926
|
+
return await this.unSubscribe(url, messageHash, topic, messageHash, params, subscription);
|
|
927
|
+
}
|
|
671
928
|
}
|
|
672
929
|
handleOHLCV(client, message) {
|
|
673
930
|
//
|
|
@@ -741,19 +998,82 @@ export default class kucoin extends kucoinRest {
|
|
|
741
998
|
stored.append(parsed);
|
|
742
999
|
client.resolve(stored, messageHash);
|
|
743
1000
|
}
|
|
1001
|
+
handleUtaOHLCV(client, message) {
|
|
1002
|
+
//
|
|
1003
|
+
// {
|
|
1004
|
+
// "T": "kline.SPOT",
|
|
1005
|
+
// "P": "1774621652314890314",
|
|
1006
|
+
// "d": {
|
|
1007
|
+
// "a": "195333.419819132",
|
|
1008
|
+
// "s": "ETH-USDT",
|
|
1009
|
+
// "C": 1774621680,
|
|
1010
|
+
// "c": "1973.4",
|
|
1011
|
+
// "S": false,
|
|
1012
|
+
// "v": "98.941095",
|
|
1013
|
+
// "h": "1974.97",
|
|
1014
|
+
// "i": "1min",
|
|
1015
|
+
// "l": "1973.4",
|
|
1016
|
+
// "O": 1774621620,
|
|
1017
|
+
// "o": "1974.34"
|
|
1018
|
+
// }
|
|
1019
|
+
// }
|
|
1020
|
+
//
|
|
1021
|
+
const data = this.safeDict(message, 'd', {});
|
|
1022
|
+
const marketId = this.safeString(data, 's');
|
|
1023
|
+
const market = this.safeMarket(marketId);
|
|
1024
|
+
const symbol = market['symbol'];
|
|
1025
|
+
const interval = this.safeString(data, 'i');
|
|
1026
|
+
const timeframe = this.findTimeframe(interval);
|
|
1027
|
+
const messageHash = 'uta:candles:' + symbol + ':' + timeframe;
|
|
1028
|
+
this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
|
|
1029
|
+
let stored = this.safeValue(this.ohlcvs[symbol], timeframe);
|
|
1030
|
+
if (stored === undefined) {
|
|
1031
|
+
const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
|
|
1032
|
+
stored = new ArrayCacheByTimestamp(limit);
|
|
1033
|
+
this.ohlcvs[symbol][timeframe] = stored;
|
|
1034
|
+
}
|
|
1035
|
+
const parsed = [
|
|
1036
|
+
this.safeIntegerProduct(data, 'O', 1000),
|
|
1037
|
+
this.safeNumber(data, 'o'),
|
|
1038
|
+
this.safeNumber(data, 'h'),
|
|
1039
|
+
this.safeNumber(data, 'l'),
|
|
1040
|
+
this.safeNumber(data, 'c'),
|
|
1041
|
+
this.safeNumber(data, 'v'),
|
|
1042
|
+
];
|
|
1043
|
+
stored.append(parsed);
|
|
1044
|
+
client.resolve(stored, messageHash);
|
|
1045
|
+
}
|
|
744
1046
|
/**
|
|
745
1047
|
* @method
|
|
746
1048
|
* @name kucoin#watchTrades
|
|
747
1049
|
* @description get the list of most recent trades for a particular symbol
|
|
748
1050
|
* @see https://www.kucoin.com/docs-new/3470072w0
|
|
749
1051
|
* @see https://www.kucoin.com/docs-new/3470084w0
|
|
1052
|
+
* @see https://www.kucoin.com/docs-new/3470224w0
|
|
750
1053
|
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
751
1054
|
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
752
1055
|
* @param {int} [limit] the maximum amount of trades to fetch
|
|
753
1056
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1057
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
754
1058
|
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=public-trades}
|
|
755
1059
|
*/
|
|
756
1060
|
async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
1061
|
+
let uta = false;
|
|
1062
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchTrades', 'uta', uta);
|
|
1063
|
+
if (uta) {
|
|
1064
|
+
await this.loadMarkets();
|
|
1065
|
+
const market = this.market(symbol);
|
|
1066
|
+
symbol = market['symbol'];
|
|
1067
|
+
const messageHash = 'uta:trades:' + symbol;
|
|
1068
|
+
const channel = 'trade';
|
|
1069
|
+
const trades = await this.subscribePublicUta(messageHash, channel, symbol, params);
|
|
1070
|
+
if (this.newUpdates) {
|
|
1071
|
+
const first = this.safeValue(trades, 0);
|
|
1072
|
+
const tradeSymbol = this.safeString(first, 'symbol');
|
|
1073
|
+
limit = trades.getLimit(tradeSymbol, limit);
|
|
1074
|
+
}
|
|
1075
|
+
return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
|
|
1076
|
+
}
|
|
757
1077
|
return await this.watchTradesForSymbols([symbol], since, limit, params);
|
|
758
1078
|
}
|
|
759
1079
|
/**
|
|
@@ -849,11 +1169,31 @@ export default class kucoin extends kucoinRest {
|
|
|
849
1169
|
* @description unWatches trades stream
|
|
850
1170
|
* @see https://www.kucoin.com/docs-new/3470072w0
|
|
851
1171
|
* @see https://www.kucoin.com/docs-new/3470084w0
|
|
1172
|
+
* @see https://www.kucoin.com/docs-new/3470224w0
|
|
852
1173
|
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
853
1174
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1175
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
854
1176
|
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=public-trades}
|
|
855
1177
|
*/
|
|
856
1178
|
async unWatchTrades(symbol, params = {}) {
|
|
1179
|
+
let uta = false;
|
|
1180
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchTrades', 'uta', uta);
|
|
1181
|
+
if (uta) {
|
|
1182
|
+
await this.loadMarkets();
|
|
1183
|
+
const market = this.market(symbol);
|
|
1184
|
+
symbol = market['symbol'];
|
|
1185
|
+
const subMessageHash = 'uta:trades:' + symbol;
|
|
1186
|
+
const messageHash = 'unsubscribe:' + subMessageHash;
|
|
1187
|
+
const channel = 'trade';
|
|
1188
|
+
const subscription = {
|
|
1189
|
+
'messageHashes': [messageHash],
|
|
1190
|
+
'subMessageHashes': [subMessageHash],
|
|
1191
|
+
'topic': 'trades',
|
|
1192
|
+
'unsubscribe': true,
|
|
1193
|
+
'symbols': [symbol],
|
|
1194
|
+
};
|
|
1195
|
+
return await this.subscribePublicUta(messageHash, channel, symbol, params, subscription);
|
|
1196
|
+
}
|
|
857
1197
|
return await this.unWatchTradesForSymbols([symbol], params);
|
|
858
1198
|
}
|
|
859
1199
|
handleTrade(client, message) {
|
|
@@ -891,17 +1231,106 @@ export default class kucoin extends kucoinRest {
|
|
|
891
1231
|
cache.append(trade);
|
|
892
1232
|
client.resolve(cache, messageHash);
|
|
893
1233
|
}
|
|
1234
|
+
handleUtaTrade(client, message) {
|
|
1235
|
+
//
|
|
1236
|
+
// {
|
|
1237
|
+
// "T": "trade.SPOT",
|
|
1238
|
+
// "P": "1774618231151398133",
|
|
1239
|
+
// "d": {
|
|
1240
|
+
// "E": "20745928670070784",
|
|
1241
|
+
// "M": "1774618231141000000",
|
|
1242
|
+
// "S": "buy",
|
|
1243
|
+
// "p": "1995.49",
|
|
1244
|
+
// "q": "0.3142324",
|
|
1245
|
+
// "s": "ETH-USDT",
|
|
1246
|
+
// "ti": "20745928670070784"
|
|
1247
|
+
// }
|
|
1248
|
+
// }
|
|
1249
|
+
//
|
|
1250
|
+
const data = this.safeDict(message, 'd', {});
|
|
1251
|
+
const marketId = this.safeString(data, 'symbol');
|
|
1252
|
+
const market = this.safeMarket(marketId);
|
|
1253
|
+
const trade = this.parseWsUtaTrade(data, market);
|
|
1254
|
+
const symbol = trade['symbol'];
|
|
1255
|
+
const messageHash = 'uta:trades:' + symbol;
|
|
1256
|
+
if (!(symbol in this.trades)) {
|
|
1257
|
+
const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
|
|
1258
|
+
const stored = new ArrayCache(limit);
|
|
1259
|
+
this.trades[symbol] = stored;
|
|
1260
|
+
}
|
|
1261
|
+
const cache = this.trades[symbol];
|
|
1262
|
+
cache.append(trade);
|
|
1263
|
+
client.resolve(cache, messageHash);
|
|
1264
|
+
}
|
|
1265
|
+
parseWsUtaTrade(trade, market = undefined) {
|
|
1266
|
+
// trades
|
|
1267
|
+
// {
|
|
1268
|
+
// "E": "20745928670070784",
|
|
1269
|
+
// "M": "1774618231141000000",
|
|
1270
|
+
// "S": "buy",
|
|
1271
|
+
// "p": "1995.49",
|
|
1272
|
+
// "q": "0.3142324",
|
|
1273
|
+
// "s": "ETH-USDT",
|
|
1274
|
+
// "ti": "20745928670070784"
|
|
1275
|
+
// }
|
|
1276
|
+
//
|
|
1277
|
+
// myTrades
|
|
1278
|
+
// {
|
|
1279
|
+
// "E": "1774977429843000000",
|
|
1280
|
+
// "S": "SELL",
|
|
1281
|
+
// "p": "0.09211",
|
|
1282
|
+
// "q": "10",
|
|
1283
|
+
// "s": "DOGE-USDT",
|
|
1284
|
+
// "lR": "TAKER",
|
|
1285
|
+
// "oT": "MARKET",
|
|
1286
|
+
// "oi": "428507829452754944",
|
|
1287
|
+
// "ti": 20801647764195330
|
|
1288
|
+
// }
|
|
1289
|
+
//
|
|
1290
|
+
const marketId = this.safeString(trade, 's');
|
|
1291
|
+
market = this.safeMarket(marketId, market);
|
|
1292
|
+
const timestamp = this.safeIntegerProduct2(trade, 'M', 'E', 0.000001);
|
|
1293
|
+
let fee = undefined;
|
|
1294
|
+
const feeCost = this.safeString(trade, 'f');
|
|
1295
|
+
if (feeCost !== undefined) {
|
|
1296
|
+
const feeCurrencyId = this.safeString(trade, 'fC');
|
|
1297
|
+
const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
|
|
1298
|
+
fee = {
|
|
1299
|
+
'cost': feeCost,
|
|
1300
|
+
'currency': feeCurrencyCode,
|
|
1301
|
+
};
|
|
1302
|
+
}
|
|
1303
|
+
return this.safeTrade({
|
|
1304
|
+
'info': trade,
|
|
1305
|
+
'id': this.safeString(trade, 'ti'),
|
|
1306
|
+
'order': this.safeString(trade, 'oi'),
|
|
1307
|
+
'timestamp': timestamp,
|
|
1308
|
+
'datetime': this.iso8601(timestamp),
|
|
1309
|
+
'symbol': market['symbol'],
|
|
1310
|
+
'type': this.safeStringLower(trade, 'oT'),
|
|
1311
|
+
'side': this.safeStringLower(trade, 'S'),
|
|
1312
|
+
'takerOrMaker': this.safeStringLower(trade, 'lR'),
|
|
1313
|
+
'price': this.safeString(trade, 'p'),
|
|
1314
|
+
'amount': this.safeString(trade, 'q'),
|
|
1315
|
+
'cost': undefined,
|
|
1316
|
+
'fee': fee,
|
|
1317
|
+
}, market);
|
|
1318
|
+
}
|
|
894
1319
|
/**
|
|
895
1320
|
* @method
|
|
896
1321
|
* @name kucoin#watchOrderBook
|
|
897
|
-
* @see https://www.kucoin.com/docs/
|
|
898
|
-
* @see https://www.kucoin.com/docs/
|
|
899
|
-
* @see https://www.kucoin.com/docs/
|
|
900
|
-
* @see https://www.kucoin.com/docs
|
|
1322
|
+
* @see https://www.kucoin.com/docs-new/3470069w0 // spot level 5
|
|
1323
|
+
* @see https://www.kucoin.com/docs-new/3470070w0 // spot level 50
|
|
1324
|
+
* @see https://www.kucoin.com/docs-new/3470068w0 // spot incremental
|
|
1325
|
+
* @see https://www.kucoin.com/docs-new/3470083w0 // futures level 5
|
|
1326
|
+
* @see https://www.kucoin.com/docs-new/3470097w0 // futures level 50
|
|
1327
|
+
* @see https://www.kucoin.com/docs-new/3470082w0 // futures incremental
|
|
1328
|
+
* @see https://www.kucoin.com/docs-new/3470221w0 // uta
|
|
901
1329
|
* @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
902
1330
|
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
903
1331
|
* @param {int} [limit] the maximum amount of order book entries to return
|
|
904
1332
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1333
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
905
1334
|
* @param {string} [params.method] either '/market/level2' or '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50' default is '/market/level2'
|
|
906
1335
|
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/?id=order-book-structure} indexed by market symbols
|
|
907
1336
|
*/
|
|
@@ -921,6 +1350,30 @@ export default class kucoin extends kucoinRest {
|
|
|
921
1350
|
// If the size=0, update the sequence and remove the price of which the
|
|
922
1351
|
// size is 0 out of level 2. Fr other cases, please update the price.
|
|
923
1352
|
//
|
|
1353
|
+
let uta = false;
|
|
1354
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'uta', uta);
|
|
1355
|
+
if (uta) {
|
|
1356
|
+
await this.loadMarkets();
|
|
1357
|
+
const market = this.market(symbol);
|
|
1358
|
+
symbol = market['symbol'];
|
|
1359
|
+
let depth = 'increment'; // '1', '5', '50' or 'increment'
|
|
1360
|
+
[depth, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'utaDepth', depth);
|
|
1361
|
+
const messageHash = 'uta:orderbook:' + symbol + ':depth:' + depth;
|
|
1362
|
+
const channel = 'obu';
|
|
1363
|
+
let subscription = {};
|
|
1364
|
+
if ((depth === 'increment')) { // other streams return the entire orderbook, so we don't need to fetch the snapshot through REST
|
|
1365
|
+
subscription = {
|
|
1366
|
+
'method': this.handleOrderBookSubscription,
|
|
1367
|
+
'symbols': [symbol],
|
|
1368
|
+
'limit': limit,
|
|
1369
|
+
};
|
|
1370
|
+
}
|
|
1371
|
+
params = this.extend(params, {
|
|
1372
|
+
'depth': depth,
|
|
1373
|
+
});
|
|
1374
|
+
const orderbook = await this.subscribePublicUta(messageHash, channel, symbol, params, subscription);
|
|
1375
|
+
return orderbook.limit();
|
|
1376
|
+
}
|
|
924
1377
|
return await this.watchOrderBookForSymbols([symbol], limit, params);
|
|
925
1378
|
}
|
|
926
1379
|
/**
|
|
@@ -933,10 +1386,34 @@ export default class kucoin extends kucoinRest {
|
|
|
933
1386
|
* @description unWatches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
934
1387
|
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
935
1388
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1389
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
|
|
936
1390
|
* @param {string} [params.method] either '/market/level2' or '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50' default is '/market/level2'
|
|
937
1391
|
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/?id=order-book-structure} indexed by market symbols
|
|
938
1392
|
*/
|
|
939
1393
|
async unWatchOrderBook(symbol, params = {}) {
|
|
1394
|
+
let uta = false;
|
|
1395
|
+
[uta, params] = this.handleOptionAndParams(params, 'unWatchOrderBook', 'uta', uta);
|
|
1396
|
+
if (uta) {
|
|
1397
|
+
await this.loadMarkets();
|
|
1398
|
+
const market = this.market(symbol);
|
|
1399
|
+
symbol = market['symbol'];
|
|
1400
|
+
let depth = 'increment'; // '1', '5', '50' or 'increment'
|
|
1401
|
+
[depth, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'utaDepth', depth);
|
|
1402
|
+
params = this.extend(params, {
|
|
1403
|
+
'depth': depth,
|
|
1404
|
+
});
|
|
1405
|
+
const subMessageHash = 'uta:orderbook:' + symbol + ':depth:' + depth;
|
|
1406
|
+
const messageHash = 'unsubscribe:' + subMessageHash;
|
|
1407
|
+
const channel = 'obu';
|
|
1408
|
+
const subscription = {
|
|
1409
|
+
'messageHashes': [messageHash],
|
|
1410
|
+
'subMessageHashes': [subMessageHash],
|
|
1411
|
+
'topic': 'orderbook',
|
|
1412
|
+
'unsubscribe': true,
|
|
1413
|
+
'symbols': [symbol],
|
|
1414
|
+
};
|
|
1415
|
+
return await this.subscribePublicUta(messageHash, channel, symbol, params, subscription);
|
|
1416
|
+
}
|
|
940
1417
|
return await this.unWatchOrderBookForSymbols([symbol], params);
|
|
941
1418
|
}
|
|
942
1419
|
/**
|
|
@@ -948,6 +1425,7 @@ export default class kucoin extends kucoinRest {
|
|
|
948
1425
|
* @see https://www.kucoin.com/docs-new/3470083w0 // futures level 5
|
|
949
1426
|
* @see https://www.kucoin.com/docs-new/3470097w0 // futures level 50
|
|
950
1427
|
* @see https://www.kucoin.com/docs-new/3470082w0 // futures incremental
|
|
1428
|
+
* @see https://www.kucoin.com/docs-new/3470221w0 // uta
|
|
951
1429
|
* @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
952
1430
|
* @param {string[]} symbols unified array of symbols
|
|
953
1431
|
* @param {int} [limit] the maximum amount of order book entries to return
|
|
@@ -1151,6 +1629,66 @@ export default class kucoin extends kucoinRest {
|
|
|
1151
1629
|
this.handleDelta(this.orderbooks[symbol], data);
|
|
1152
1630
|
client.resolve(this.orderbooks[symbol], messageHash);
|
|
1153
1631
|
}
|
|
1632
|
+
handleUtaOrderBook(client, message) {
|
|
1633
|
+
//
|
|
1634
|
+
// snapshot
|
|
1635
|
+
// {
|
|
1636
|
+
// "T": "obu.SPOT",
|
|
1637
|
+
// "dp": "50",
|
|
1638
|
+
// "t": "snapshot",
|
|
1639
|
+
// "P": "1774624848680504909",
|
|
1640
|
+
// "d": {
|
|
1641
|
+
// "C": 20452522782,
|
|
1642
|
+
// "M": "1774624848673000000",
|
|
1643
|
+
// "O": 20452522782,
|
|
1644
|
+
// "a": [ [ "66532.5", "0.46243848" ] ],
|
|
1645
|
+
// "b": [ [ "66532.4", "0.09489" ] ],
|
|
1646
|
+
// "s": "ETH-USDT"
|
|
1647
|
+
// }
|
|
1648
|
+
// }
|
|
1649
|
+
//
|
|
1650
|
+
const type = this.safeString(message, 't');
|
|
1651
|
+
const data = this.safeDict(message, 'd', {});
|
|
1652
|
+
const marketId = this.safeString(data, 's');
|
|
1653
|
+
const market = this.safeMarket(marketId);
|
|
1654
|
+
const symbol = market['symbol'];
|
|
1655
|
+
const timestamp = this.safeIntegerProduct(data, 'M', 0.000001);
|
|
1656
|
+
if (!(symbol in this.orderbooks)) {
|
|
1657
|
+
this.orderbooks[symbol] = this.orderBook();
|
|
1658
|
+
}
|
|
1659
|
+
const orderbook = this.orderbooks[symbol];
|
|
1660
|
+
const depth = this.safeString(message, 'dp');
|
|
1661
|
+
const messageHash = 'uta:orderbook:' + symbol + ':depth:' + depth;
|
|
1662
|
+
if (type === 'snapshot') {
|
|
1663
|
+
const parsed = this.parseOrderBook(data, symbol, timestamp, 'b', 'a', 0, 1);
|
|
1664
|
+
parsed['nonce'] = this.safeInteger(data, 'O');
|
|
1665
|
+
orderbook.reset(parsed);
|
|
1666
|
+
this.orderbooks[symbol] = orderbook;
|
|
1667
|
+
}
|
|
1668
|
+
else {
|
|
1669
|
+
const nonce = this.safeInteger(orderbook, 'nonce');
|
|
1670
|
+
const deltaEnd = this.safeInteger(data, 'C');
|
|
1671
|
+
if (nonce === undefined) {
|
|
1672
|
+
const cacheLength = orderbook.cache.length;
|
|
1673
|
+
const subscription = this.safeValue(client.subscriptions, messageHash, {});
|
|
1674
|
+
const limit = this.safeInteger(subscription, 'limit');
|
|
1675
|
+
const snapshotDelay = this.handleOption('watchOrderBook', 'snapshotDelay', 5);
|
|
1676
|
+
const utaParams = {
|
|
1677
|
+
'uta': true,
|
|
1678
|
+
};
|
|
1679
|
+
if (cacheLength === snapshotDelay) {
|
|
1680
|
+
this.spawn(this.loadOrderBook, client, messageHash, symbol, limit, utaParams);
|
|
1681
|
+
}
|
|
1682
|
+
orderbook.cache.push(data);
|
|
1683
|
+
return;
|
|
1684
|
+
}
|
|
1685
|
+
else if (nonce >= deltaEnd) {
|
|
1686
|
+
return;
|
|
1687
|
+
}
|
|
1688
|
+
}
|
|
1689
|
+
this.handleDelta(this.orderbooks[symbol], data);
|
|
1690
|
+
client.resolve(this.orderbooks[symbol], messageHash);
|
|
1691
|
+
}
|
|
1154
1692
|
getCacheIndex(orderbook, cache) {
|
|
1155
1693
|
const firstDelta = this.safeValue(cache, 0);
|
|
1156
1694
|
const nonce = this.safeInteger(orderbook, 'nonce');
|
|
@@ -1169,11 +1707,15 @@ export default class kucoin extends kucoinRest {
|
|
|
1169
1707
|
return cache.length;
|
|
1170
1708
|
}
|
|
1171
1709
|
handleDelta(orderbook, delta) {
|
|
1172
|
-
|
|
1173
|
-
|
|
1710
|
+
let timestamp = this.safeIntegerProduct(delta, 'M', 0.000001);
|
|
1711
|
+
if (timestamp === undefined) {
|
|
1712
|
+
timestamp = this.safeInteger2(delta, 'time', 'timestamp');
|
|
1713
|
+
}
|
|
1714
|
+
orderbook['nonce'] = this.safeIntegerN(delta, ['sequenceEnd', 'sequence', 'C'], timestamp);
|
|
1174
1715
|
orderbook['timestamp'] = timestamp;
|
|
1175
1716
|
orderbook['datetime'] = this.iso8601(timestamp);
|
|
1176
1717
|
const change = this.safeString(delta, 'change');
|
|
1718
|
+
const changes = this.safeDict(delta, 'changes', delta);
|
|
1177
1719
|
const storedBids = orderbook['bids'];
|
|
1178
1720
|
const storedAsks = orderbook['asks'];
|
|
1179
1721
|
if (change !== undefined) {
|
|
@@ -1191,13 +1733,18 @@ export default class kucoin extends kucoinRest {
|
|
|
1191
1733
|
storedAsks.storeArray(value);
|
|
1192
1734
|
}
|
|
1193
1735
|
}
|
|
1194
|
-
else {
|
|
1195
|
-
const changes = this.safeDict(delta, 'changes', delta);
|
|
1736
|
+
else if (changes !== undefined) {
|
|
1196
1737
|
const bids = this.safeList(changes, 'bids', []);
|
|
1197
1738
|
const asks = this.safeList(changes, 'asks', []);
|
|
1198
1739
|
this.handleBidAsks(storedBids, bids);
|
|
1199
1740
|
this.handleBidAsks(storedAsks, asks);
|
|
1200
1741
|
}
|
|
1742
|
+
else {
|
|
1743
|
+
const bids = this.safeList2(delta, 'bids', 'b', []);
|
|
1744
|
+
const asks = this.safeList2(delta, 'asks', 'a', []);
|
|
1745
|
+
this.handleBidAsks(storedBids, bids);
|
|
1746
|
+
this.handleBidAsks(storedAsks, asks);
|
|
1747
|
+
}
|
|
1201
1748
|
}
|
|
1202
1749
|
handleBidAsks(bookSide, bidAsks) {
|
|
1203
1750
|
for (let i = 0; i < bidAsks.length; i++) {
|
|
@@ -1225,11 +1772,18 @@ export default class kucoin extends kucoinRest {
|
|
|
1225
1772
|
}
|
|
1226
1773
|
handleSubscriptionStatus(client, message) {
|
|
1227
1774
|
//
|
|
1775
|
+
// classic
|
|
1228
1776
|
// {
|
|
1229
1777
|
// "id": "1578090438322",
|
|
1230
1778
|
// "type": "ack"
|
|
1231
1779
|
// }
|
|
1232
1780
|
//
|
|
1781
|
+
// uta
|
|
1782
|
+
// {
|
|
1783
|
+
// "id": "1",
|
|
1784
|
+
// "result": true
|
|
1785
|
+
// }
|
|
1786
|
+
//
|
|
1233
1787
|
const id = this.safeString(message, 'id');
|
|
1234
1788
|
if (!(id in client.subscriptions)) {
|
|
1235
1789
|
return;
|
|
@@ -1264,6 +1818,17 @@ export default class kucoin extends kucoinRest {
|
|
|
1264
1818
|
// "type": "welcome",
|
|
1265
1819
|
// }
|
|
1266
1820
|
//
|
|
1821
|
+
// uta
|
|
1822
|
+
// {
|
|
1823
|
+
// "sessionId": "ddfb0cbd-f7a7-40c2-9129-445bbb830c54",
|
|
1824
|
+
// "message": "welcome",
|
|
1825
|
+
// "pingInterval": 18000
|
|
1826
|
+
// }
|
|
1827
|
+
//
|
|
1828
|
+
const pingInterval = this.safeInteger(message, 'pingInterval');
|
|
1829
|
+
if (pingInterval !== undefined) {
|
|
1830
|
+
client.keepAlive = pingInterval;
|
|
1831
|
+
}
|
|
1267
1832
|
return message;
|
|
1268
1833
|
}
|
|
1269
1834
|
/**
|
|
@@ -1274,18 +1839,20 @@ export default class kucoin extends kucoinRest {
|
|
|
1274
1839
|
* @see https://www.kucoin.com/docs-new/3470139w0 // spot trigger orders
|
|
1275
1840
|
* @see https://www.kucoin.com/docs-new/3470090w0 // contract regular orders
|
|
1276
1841
|
* @see https://www.kucoin.com/docs-new/3470091w0 // contract trigger orders
|
|
1842
|
+
* @see https://www.kucoin.com/docs-new/3470228w0 // uta orders
|
|
1277
1843
|
* @param {string} symbol unified market symbol of the market orders were made in
|
|
1278
1844
|
* @param {int} [since] the earliest time in ms to fetch orders for
|
|
1279
1845
|
* @param {int} [limit] the maximum number of order structures to retrieve
|
|
1280
1846
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1847
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta)
|
|
1281
1848
|
* @param {boolean} [params.trigger] trigger orders are watched if true
|
|
1282
1849
|
* @param {string} [params.type] 'spot' or 'swap' (default is 'spot' if symbol is not provided)
|
|
1283
1850
|
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/?id=order-structure}
|
|
1284
1851
|
*/
|
|
1285
1852
|
async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1286
1853
|
await this.loadMarkets();
|
|
1287
|
-
|
|
1288
|
-
params = this.
|
|
1854
|
+
let uta = await this.isUTAEnabled();
|
|
1855
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchOrders', 'uta', uta);
|
|
1289
1856
|
let market = undefined;
|
|
1290
1857
|
let messageHash = 'orders';
|
|
1291
1858
|
if (symbol !== undefined) {
|
|
@@ -1293,22 +1860,38 @@ export default class kucoin extends kucoinRest {
|
|
|
1293
1860
|
symbol = market['symbol'];
|
|
1294
1861
|
messageHash = messageHash + ':' + symbol;
|
|
1295
1862
|
}
|
|
1296
|
-
let
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1863
|
+
let orders = undefined;
|
|
1864
|
+
if (uta) {
|
|
1865
|
+
params = this.extend(params, {
|
|
1866
|
+
'tradeType': 'UNIFIED',
|
|
1867
|
+
});
|
|
1868
|
+
messageHash = 'uta:' + messageHash;
|
|
1869
|
+
let channel = 'order';
|
|
1870
|
+
if (symbol === undefined) {
|
|
1871
|
+
channel += 'All';
|
|
1872
|
+
}
|
|
1873
|
+
orders = await this.subscribePrivateUta([messageHash], messageHash, channel, symbol, params);
|
|
1303
1874
|
}
|
|
1304
|
-
|
|
1305
|
-
const
|
|
1306
|
-
|
|
1875
|
+
else {
|
|
1876
|
+
const trigger = this.safeBool2(params, 'stop', 'trigger');
|
|
1877
|
+
params = this.omit(params, ['stop', 'trigger']);
|
|
1878
|
+
let marketType = undefined;
|
|
1879
|
+
[marketType, params] = this.handleMarketTypeAndParams('watchOrders', market, params);
|
|
1880
|
+
const isFuturesMethod = ((marketType !== 'spot') && (marketType !== 'margin'));
|
|
1881
|
+
const url = await this.negotiate(true, isFuturesMethod);
|
|
1882
|
+
let topic = trigger ? '/spotMarket/advancedOrders' : '/spotMarket/tradeOrders';
|
|
1883
|
+
if (isFuturesMethod) {
|
|
1884
|
+
topic = trigger ? '/contractMarket/advancedOrders' : '/contractMarket/tradeOrders';
|
|
1885
|
+
}
|
|
1886
|
+
if (symbol === undefined) {
|
|
1887
|
+
const suffix = this.getOrdersMessageHashSuffix(topic);
|
|
1888
|
+
messageHash += suffix;
|
|
1889
|
+
}
|
|
1890
|
+
const request = {
|
|
1891
|
+
'privateChannel': true,
|
|
1892
|
+
};
|
|
1893
|
+
orders = await this.subscribe(url, messageHash, topic, this.extend(request, params));
|
|
1307
1894
|
}
|
|
1308
|
-
const request = {
|
|
1309
|
-
'privateChannel': true,
|
|
1310
|
-
};
|
|
1311
|
-
const orders = await this.subscribe(url, messageHash, topic, this.extend(request, params));
|
|
1312
1895
|
if (this.newUpdates) {
|
|
1313
1896
|
limit = orders.getLimit(symbol, limit);
|
|
1314
1897
|
}
|
|
@@ -1442,6 +2025,90 @@ export default class kucoin extends kucoinRest {
|
|
|
1442
2025
|
'trades': undefined,
|
|
1443
2026
|
}, market);
|
|
1444
2027
|
}
|
|
2028
|
+
parseWsUtaOrder(order, market = undefined) {
|
|
2029
|
+
//
|
|
2030
|
+
// {
|
|
2031
|
+
// "tT": "FUTURES",
|
|
2032
|
+
// "oi": "427737326394129559",
|
|
2033
|
+
// "ci": "",
|
|
2034
|
+
// "os": 5,
|
|
2035
|
+
// "eT": "CANCEL",
|
|
2036
|
+
// "s": "DOGEUSDTM",
|
|
2037
|
+
// "S": "SELL",
|
|
2038
|
+
// "oT": "MARKET",
|
|
2039
|
+
// "lR": "",
|
|
2040
|
+
// "oS": "USER",
|
|
2041
|
+
// "p": "",
|
|
2042
|
+
// "ti": "",
|
|
2043
|
+
// "q": "1",
|
|
2044
|
+
// "qU": "UNIT",
|
|
2045
|
+
// "fS": "0",
|
|
2046
|
+
// "lS": "0",
|
|
2047
|
+
// "ls": "0",
|
|
2048
|
+
// "aP": "0",
|
|
2049
|
+
// "f": "0",
|
|
2050
|
+
// "fC": "USDT",
|
|
2051
|
+
// "t": "0",
|
|
2052
|
+
// "cR": "USER",
|
|
2053
|
+
// "cS": "1",
|
|
2054
|
+
// "rS": "0",
|
|
2055
|
+
// "tD": "DOWN",
|
|
2056
|
+
// "tP": "0.01",
|
|
2057
|
+
// "tPT": "MP",
|
|
2058
|
+
// "pP": "",
|
|
2059
|
+
// "pPT": "",
|
|
2060
|
+
// "lP": "",
|
|
2061
|
+
// "lPT": "",
|
|
2062
|
+
// "toi": "427737326102335488",
|
|
2063
|
+
// "stp": "",
|
|
2064
|
+
// "rO": true,
|
|
2065
|
+
// "tIF": "GTC",
|
|
2066
|
+
// "pO": false,
|
|
2067
|
+
// "O": "1774793727626043888",
|
|
2068
|
+
// "U": 1774794309608959200
|
|
2069
|
+
// }
|
|
2070
|
+
//
|
|
2071
|
+
const timestamp = this.safeIntegerProduct(order, 'O', 0.000001);
|
|
2072
|
+
const rawStatus = this.safeString(order, 'os');
|
|
2073
|
+
const marketId = this.safeString(order, 's');
|
|
2074
|
+
const rawTimeInForce = this.safeString(order, 'tIF');
|
|
2075
|
+
const remainSize = this.safeString(order, 'rS');
|
|
2076
|
+
const canceledSize = this.safeString(order, 'cS');
|
|
2077
|
+
const remaining = Precise.stringAdd(remainSize, canceledSize);
|
|
2078
|
+
market = this.safeMarket(marketId, market);
|
|
2079
|
+
const fee = {
|
|
2080
|
+
'cost': this.safeString(order, 'f'),
|
|
2081
|
+
'currency': this.safeCurrencyCode(this.safeString(order, 'fC')),
|
|
2082
|
+
};
|
|
2083
|
+
// todo check amount for other qU values
|
|
2084
|
+
return this.safeOrder({
|
|
2085
|
+
'info': order,
|
|
2086
|
+
'id': this.safeString(order, 'oi'),
|
|
2087
|
+
'clientOrderId': this.safeString(order, 'ci'),
|
|
2088
|
+
'datetime': this.iso8601(timestamp),
|
|
2089
|
+
'timestamp': timestamp,
|
|
2090
|
+
'lastTradeTimestamp': undefined,
|
|
2091
|
+
'lastUpdateTimestamp': this.safeIntegerProduct(order, 'U', 0.000001),
|
|
2092
|
+
'status': this.parseOrderStatus(rawStatus),
|
|
2093
|
+
'symbol': market['symbol'],
|
|
2094
|
+
'type': this.safeStringLower(order, 'oT'),
|
|
2095
|
+
'timeInForce': this.parseOrderTimeInForce(rawTimeInForce),
|
|
2096
|
+
'side': this.safeStringLower(order, 'S'),
|
|
2097
|
+
'price': this.safeString(order, 'p'),
|
|
2098
|
+
'average': this.safeString(order, 'aP'),
|
|
2099
|
+
'amount': this.safeString(order, 'q'),
|
|
2100
|
+
'filled': this.safeString(order, 'fS'),
|
|
2101
|
+
'remaining': remaining,
|
|
2102
|
+
'triggerPrice': this.safeString(order, 'tP'),
|
|
2103
|
+
'takeProfitPrice': this.safeString(order, 'pP'),
|
|
2104
|
+
'stopLossPrice': this.safeString(order, 'lP'),
|
|
2105
|
+
'cost': this.safeString(order, 'c'),
|
|
2106
|
+
'trades': undefined,
|
|
2107
|
+
'fee': fee,
|
|
2108
|
+
'reduceOnly': this.safeBool(order, 'rO'),
|
|
2109
|
+
'postOnly': this.safeBool(order, 'pO'),
|
|
2110
|
+
}, market);
|
|
2111
|
+
}
|
|
1445
2112
|
handleOrder(client, message) {
|
|
1446
2113
|
//
|
|
1447
2114
|
// Trigger Orders
|
|
@@ -1496,17 +2163,80 @@ export default class kucoin extends kucoinRest {
|
|
|
1496
2163
|
const symbolSpecificMessageHash = messageHash + ':' + symbol;
|
|
1497
2164
|
client.resolve(cachedOrders, symbolSpecificMessageHash);
|
|
1498
2165
|
}
|
|
2166
|
+
handleUtaOrder(client, message) {
|
|
2167
|
+
//
|
|
2168
|
+
// {
|
|
2169
|
+
// "T": "orderAll.UNIFIED",
|
|
2170
|
+
// "P": "1774794309609274499",
|
|
2171
|
+
// "d": {
|
|
2172
|
+
// "tT": "FUTURES",
|
|
2173
|
+
// "oi": "427737326394129559",
|
|
2174
|
+
// "ci": "",
|
|
2175
|
+
// "os": 5,
|
|
2176
|
+
// "eT": "CANCEL",
|
|
2177
|
+
// "s": "DOGEUSDTM",
|
|
2178
|
+
// "S": "SELL",
|
|
2179
|
+
// "oT": "MARKET",
|
|
2180
|
+
// "lR": "",
|
|
2181
|
+
// "oS": "USER",
|
|
2182
|
+
// "p": "",
|
|
2183
|
+
// "ti": "",
|
|
2184
|
+
// "q": "1",
|
|
2185
|
+
// "qU": "UNIT",
|
|
2186
|
+
// "fS": "0",
|
|
2187
|
+
// "lS": "0",
|
|
2188
|
+
// "ls": "0",
|
|
2189
|
+
// "aP": "0",
|
|
2190
|
+
// "f": "0",
|
|
2191
|
+
// "fC": "USDT",
|
|
2192
|
+
// "t": "0",
|
|
2193
|
+
// "cR": "USER",
|
|
2194
|
+
// "cS": "1",
|
|
2195
|
+
// "rS": "0",
|
|
2196
|
+
// "tD": "DOWN",
|
|
2197
|
+
// "tP": "0.01",
|
|
2198
|
+
// "tPT": "MP",
|
|
2199
|
+
// "pP": "",
|
|
2200
|
+
// "pPT": "",
|
|
2201
|
+
// "lP": "",
|
|
2202
|
+
// "lPT": "",
|
|
2203
|
+
// "toi": "427737326102335488",
|
|
2204
|
+
// "stp": "",
|
|
2205
|
+
// "rO": true,
|
|
2206
|
+
// "tIF": "GTC",
|
|
2207
|
+
// "pO": false,
|
|
2208
|
+
// "O": "1774793727626043888",
|
|
2209
|
+
// "U": 1774794309608959200
|
|
2210
|
+
// }
|
|
2211
|
+
// }
|
|
2212
|
+
//
|
|
2213
|
+
const data = this.safeDict(message, 'd', {});
|
|
2214
|
+
const parsed = this.parseWsUtaOrder(data);
|
|
2215
|
+
const symbol = this.safeString(parsed, 'symbol');
|
|
2216
|
+
if (this.orders === undefined) {
|
|
2217
|
+
const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
|
|
2218
|
+
this.orders = new ArrayCacheBySymbolById(limit);
|
|
2219
|
+
}
|
|
2220
|
+
const cachedOrders = this.orders;
|
|
2221
|
+
cachedOrders.append(parsed);
|
|
2222
|
+
const messageHash = 'uta:orders';
|
|
2223
|
+
const symbolSpecificMessageHash = messageHash + ':' + symbol;
|
|
2224
|
+
client.resolve(cachedOrders, symbolSpecificMessageHash);
|
|
2225
|
+
client.resolve(cachedOrders, messageHash);
|
|
2226
|
+
}
|
|
1499
2227
|
/**
|
|
1500
2228
|
* @method
|
|
1501
2229
|
* @name kucoin#watchMyTrades
|
|
1502
2230
|
* @description watches information on multiple trades made by the user on spot
|
|
1503
2231
|
* @see https://www.kucoin.com/docs-new/3470074w0
|
|
1504
2232
|
* @see https://www.kucoin.com/docs-new/3470090w0
|
|
2233
|
+
* @see https://www.kucoin.com/docs-new/3470264w0
|
|
1505
2234
|
* @param {string} symbol unified market symbol of the market trades were made in
|
|
1506
2235
|
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
1507
2236
|
* @param {int} [limit] the maximum number of trade structures to retrieve
|
|
1508
2237
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1509
|
-
* @param {
|
|
2238
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta)
|
|
2239
|
+
* @param {string} [params.method] *classic (non-uta) account only* '/spotMarket/tradeOrders' or '/spot/tradeFills' or '/contractMarket/tradeOrders', default is '/spotMarket/tradeOrders'
|
|
1510
2240
|
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=trade-structure}
|
|
1511
2241
|
*/
|
|
1512
2242
|
async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
@@ -1521,18 +2251,31 @@ export default class kucoin extends kucoinRest {
|
|
|
1521
2251
|
let marketType = undefined;
|
|
1522
2252
|
[marketType, params] = this.handleMarketTypeAndParams('watchMyTrades', market, params);
|
|
1523
2253
|
const isFuturesMethod = ((marketType !== 'spot') && (marketType !== 'margin'));
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
const
|
|
1533
|
-
messageHash
|
|
2254
|
+
let uta = await this.isUTAEnabled();
|
|
2255
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchMyTrades', 'uta', uta);
|
|
2256
|
+
let trades = undefined;
|
|
2257
|
+
if (uta) {
|
|
2258
|
+
params = this.extend(params, {
|
|
2259
|
+
'tradeType': 'UNIFIED',
|
|
2260
|
+
});
|
|
2261
|
+
messageHash = 'uta:' + messageHash;
|
|
2262
|
+
const channel = 'execution.lite';
|
|
2263
|
+
trades = await this.subscribePrivateUta([messageHash], channel, channel, undefined, params);
|
|
2264
|
+
}
|
|
2265
|
+
else {
|
|
2266
|
+
const url = await this.negotiate(true, isFuturesMethod);
|
|
2267
|
+
let topic = isFuturesMethod ? '/contractMarket/tradeOrders' : '/spotMarket/tradeOrders';
|
|
2268
|
+
const optionName = isFuturesMethod ? 'contractMethod' : 'spotMethod';
|
|
2269
|
+
[topic, params] = this.handleOptionAndParams2(params, 'watchMyTrades', optionName, 'method', topic);
|
|
2270
|
+
const request = {
|
|
2271
|
+
'privateChannel': true,
|
|
2272
|
+
};
|
|
2273
|
+
if (symbol === undefined) {
|
|
2274
|
+
const suffix = this.getMyTradesMessageHashSuffix(topic);
|
|
2275
|
+
messageHash += suffix;
|
|
2276
|
+
}
|
|
2277
|
+
trades = await this.subscribe(url, messageHash, topic, this.extend(request, params));
|
|
1534
2278
|
}
|
|
1535
|
-
const trades = await this.subscribe(url, messageHash, topic, this.extend(request, params));
|
|
1536
2279
|
if (this.newUpdates) {
|
|
1537
2280
|
limit = trades.getLimit(symbol, limit);
|
|
1538
2281
|
}
|
|
@@ -1590,6 +2333,40 @@ export default class kucoin extends kucoinRest {
|
|
|
1590
2333
|
const symbolSpecificMessageHash = messageHash + ':' + parsed['symbol'];
|
|
1591
2334
|
client.resolve(this.myTrades, symbolSpecificMessageHash);
|
|
1592
2335
|
}
|
|
2336
|
+
handleUtaMyTrade(client, message) {
|
|
2337
|
+
//
|
|
2338
|
+
// {
|
|
2339
|
+
// "T": "execution.lite.UNIFIED",
|
|
2340
|
+
// "P": "1774977429844510434",
|
|
2341
|
+
// "d": {
|
|
2342
|
+
// "E": "1774977429843000000",
|
|
2343
|
+
// "S": "SELL",
|
|
2344
|
+
// "p": "0.09211",
|
|
2345
|
+
// "q": "10",
|
|
2346
|
+
// "s": "DOGE-USDT",
|
|
2347
|
+
// "lR": "TAKER",
|
|
2348
|
+
// "oT": "MARKET",
|
|
2349
|
+
// "oi": "428507829452754944",
|
|
2350
|
+
// "ti": 20801647764195330
|
|
2351
|
+
// }
|
|
2352
|
+
// }
|
|
2353
|
+
//
|
|
2354
|
+
const data = this.safeDict(message, 'd', {});
|
|
2355
|
+
const marketId = this.safeString(data, 's');
|
|
2356
|
+
const market = this.safeMarket(marketId);
|
|
2357
|
+
const trade = this.parseWsUtaTrade(data, market);
|
|
2358
|
+
const symbol = trade['symbol'];
|
|
2359
|
+
if (this.myTrades === undefined) {
|
|
2360
|
+
const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
|
|
2361
|
+
this.myTrades = new ArrayCacheBySymbolById(limit);
|
|
2362
|
+
}
|
|
2363
|
+
const cache = this.myTrades;
|
|
2364
|
+
cache.append(trade);
|
|
2365
|
+
const messageHash = 'uta:myTrades';
|
|
2366
|
+
const symbolMessageHash = messageHash + ':' + symbol;
|
|
2367
|
+
client.resolve(this.myTrades, messageHash);
|
|
2368
|
+
client.resolve(cache, symbolMessageHash);
|
|
2369
|
+
}
|
|
1593
2370
|
parseWsTrade(trade, market = undefined) {
|
|
1594
2371
|
//
|
|
1595
2372
|
// /spotMarket/tradeOrders
|
|
@@ -1675,19 +2452,35 @@ export default class kucoin extends kucoinRest {
|
|
|
1675
2452
|
* @description watch balance and get the amount of funds available for trading or funds locked in orders
|
|
1676
2453
|
* @see https://www.kucoin.com/docs-new/3470075w0 // spot balance
|
|
1677
2454
|
* @see https://www.kucoin.com/docs-new/3470092w0 // contract balance
|
|
2455
|
+
* @see https://www.kucoin.com/docs-new/3470231w0 // uta balance
|
|
1678
2456
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1679
|
-
* @param {
|
|
2457
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta)
|
|
2458
|
+
* @param {string} [params.type] *classic (non-uta) account only* 'spot' or 'swap' (default is 'spot')
|
|
1680
2459
|
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/?id=balance-structure}
|
|
1681
2460
|
*/
|
|
1682
2461
|
async watchBalance(params = {}) {
|
|
1683
2462
|
await this.loadMarkets();
|
|
1684
|
-
|
|
1685
|
-
|
|
2463
|
+
let uta = await this.isUTAEnabled();
|
|
2464
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchBalance', 'uta', uta);
|
|
2465
|
+
let defaultType = uta ? 'unified' : 'spot';
|
|
2466
|
+
let type = defaultType;
|
|
2467
|
+
if (!uta) {
|
|
2468
|
+
defaultType = this.safeString(this.options, 'defaultType', defaultType);
|
|
2469
|
+
type = this.safeString(params, 'type', defaultType);
|
|
2470
|
+
}
|
|
1686
2471
|
params = this.omit(params, 'type');
|
|
1687
2472
|
const accountsByType = this.safeDict(this.options, 'accountsByType', {});
|
|
1688
2473
|
const uniformType = this.safeString(accountsByType, type, type);
|
|
1689
|
-
const
|
|
1690
|
-
|
|
2474
|
+
const isClassicFuturesMethod = (uniformType === 'contract');
|
|
2475
|
+
let subscriptionHash = isClassicFuturesMethod ? '/contractAccount/wallet' : '/account/balance';
|
|
2476
|
+
let url = undefined;
|
|
2477
|
+
if (uta) {
|
|
2478
|
+
url = await this.getUtaUrl();
|
|
2479
|
+
subscriptionHash = uniformType;
|
|
2480
|
+
}
|
|
2481
|
+
else {
|
|
2482
|
+
url = await this.negotiate(true, isClassicFuturesMethod);
|
|
2483
|
+
}
|
|
1691
2484
|
const client = this.client(url);
|
|
1692
2485
|
this.setBalanceCache(client, uniformType);
|
|
1693
2486
|
const options = this.safeDict(this.options, 'watchBalance');
|
|
@@ -1697,20 +2490,28 @@ export default class kucoin extends kucoinRest {
|
|
|
1697
2490
|
await client.future(uniformType + ':fetchBalanceSnapshot');
|
|
1698
2491
|
}
|
|
1699
2492
|
const messageHash = uniformType + ':balance';
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
2493
|
+
if (uta) {
|
|
2494
|
+
const extendedParams = {
|
|
2495
|
+
'accountType': uniformType,
|
|
2496
|
+
};
|
|
2497
|
+
const channel = 'balance';
|
|
2498
|
+
return await this.subscribePrivateUta([messageHash], subscriptionHash, channel, undefined, this.extend(extendedParams, params));
|
|
2499
|
+
}
|
|
2500
|
+
else {
|
|
2501
|
+
const requestId = this.requestId().toString();
|
|
2502
|
+
const request = {
|
|
2503
|
+
'id': requestId,
|
|
2504
|
+
'type': 'subscribe',
|
|
2505
|
+
'topic': subscriptionHash,
|
|
2506
|
+
'response': true,
|
|
2507
|
+
'privateChannel': true,
|
|
2508
|
+
};
|
|
2509
|
+
const message = this.extend(request, params);
|
|
2510
|
+
if (!(subscriptionHash in client.subscriptions)) {
|
|
2511
|
+
client.subscriptions[requestId] = subscriptionHash;
|
|
2512
|
+
}
|
|
2513
|
+
return await this.watch(url, messageHash, message, uniformType);
|
|
1712
2514
|
}
|
|
1713
|
-
return await this.watch(url, messageHash, message, type);
|
|
1714
2515
|
}
|
|
1715
2516
|
setBalanceCache(client, type) {
|
|
1716
2517
|
if ((type in client.subscriptions) && (type in this.balance)) {
|
|
@@ -1730,8 +2531,10 @@ export default class kucoin extends kucoinRest {
|
|
|
1730
2531
|
}
|
|
1731
2532
|
}
|
|
1732
2533
|
async loadBalanceSnapshot(client, messageHash, type) {
|
|
2534
|
+
const uta = (type === 'unified');
|
|
1733
2535
|
const params = {
|
|
1734
2536
|
'type': type,
|
|
2537
|
+
'uta': uta,
|
|
1735
2538
|
};
|
|
1736
2539
|
const response = await this.fetchBalance(params);
|
|
1737
2540
|
this.balance[type] = this.extend(response, this.safeValue(this.balance, type, {}));
|
|
@@ -1846,6 +2649,42 @@ export default class kucoin extends kucoinRest {
|
|
|
1846
2649
|
const messageHash = uniformType + ':balance';
|
|
1847
2650
|
client.resolve(this.balance[uniformType], messageHash);
|
|
1848
2651
|
}
|
|
2652
|
+
handleUtaBalance(client, message) {
|
|
2653
|
+
//
|
|
2654
|
+
// {
|
|
2655
|
+
// "T": "balance.UNIFIED",
|
|
2656
|
+
// "P": "1774982552507478380",
|
|
2657
|
+
// "d": {
|
|
2658
|
+
// "c": "USDT",
|
|
2659
|
+
// "e": "100.0030439507",
|
|
2660
|
+
// "b": "100.0030439507",
|
|
2661
|
+
// "a": "89.9930439507",
|
|
2662
|
+
// "h": "10.0100000000",
|
|
2663
|
+
// "U": "1774982552505000000",
|
|
2664
|
+
// "l": "0.0000000000"
|
|
2665
|
+
// }
|
|
2666
|
+
// }
|
|
2667
|
+
//
|
|
2668
|
+
const type = 'unified';
|
|
2669
|
+
const data = this.safeDict(message, 'd', {});
|
|
2670
|
+
const currencyId = this.safeString(data, 'c');
|
|
2671
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
2672
|
+
if (!(type in this.balance)) {
|
|
2673
|
+
this.balance[type] = {};
|
|
2674
|
+
}
|
|
2675
|
+
this.balance[type]['info'] = data;
|
|
2676
|
+
const timestamp = this.safeIntegerProduct(data, 'U', 0.000001);
|
|
2677
|
+
this.balance[type]['timestamp'] = timestamp;
|
|
2678
|
+
this.balance[type]['datetime'] = this.iso8601(timestamp);
|
|
2679
|
+
const account = this.account();
|
|
2680
|
+
account['free'] = this.safeString(data, 'a');
|
|
2681
|
+
account['used'] = this.safeString(data, 'h');
|
|
2682
|
+
account['total'] = this.safeString(data, 'b');
|
|
2683
|
+
this.balance[type][code] = account;
|
|
2684
|
+
this.balance[type] = this.safeBalance(this.balance[type]);
|
|
2685
|
+
const messageHash = type + ':balance';
|
|
2686
|
+
client.resolve(this.balance[type], messageHash);
|
|
2687
|
+
}
|
|
1849
2688
|
/**
|
|
1850
2689
|
* @method
|
|
1851
2690
|
* @name kucoin#watchPosition
|
|
@@ -1878,6 +2717,55 @@ export default class kucoin extends kucoinRest {
|
|
|
1878
2717
|
}
|
|
1879
2718
|
return await this.subscribe(url, messageHash, topic, this.extend(request, params));
|
|
1880
2719
|
}
|
|
2720
|
+
/**
|
|
2721
|
+
* @method
|
|
2722
|
+
* @name kucoin#watchPositions
|
|
2723
|
+
* @see https://www.kucoin.com/docs-new/3470233w0
|
|
2724
|
+
* @description watch all open positions
|
|
2725
|
+
* @param {string[]} [symbols] list of unified market symbols
|
|
2726
|
+
* @param {int} [since] the earliest time in ms to fetch positions for
|
|
2727
|
+
* @param {int} [limit] the maximum number of positions to retrieve
|
|
2728
|
+
* @param {object} params extra parameters specific to the exchange API endpoint
|
|
2729
|
+
* @param {boolean} [params.uta] set to true for the unified trading account (uta)
|
|
2730
|
+
* @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/en/latest/manual.html#position-structure}
|
|
2731
|
+
*/
|
|
2732
|
+
async watchPositions(symbols = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2733
|
+
await this.loadMarkets();
|
|
2734
|
+
let uta = await this.isUTAEnabled();
|
|
2735
|
+
[uta, params] = this.handleOptionAndParams(params, 'watchPositions', 'uta', uta);
|
|
2736
|
+
const tradeType = uta ? 'UNIFIED' : 'TRADE';
|
|
2737
|
+
const messageHash = 'positions';
|
|
2738
|
+
const messageHashes = [];
|
|
2739
|
+
symbols = this.marketSymbols(symbols);
|
|
2740
|
+
if (symbols === undefined) {
|
|
2741
|
+
messageHashes.push(messageHash);
|
|
2742
|
+
}
|
|
2743
|
+
else {
|
|
2744
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
2745
|
+
const symbol = symbols[i];
|
|
2746
|
+
messageHashes.push(messageHash + ':' + symbol);
|
|
2747
|
+
}
|
|
2748
|
+
}
|
|
2749
|
+
const url = await this.getUtaUrl();
|
|
2750
|
+
const client = this.client(url);
|
|
2751
|
+
this.setPositionsCache(client, uta);
|
|
2752
|
+
const fetchPositionSnapshot = this.handleOption('watchPositions', 'fetchPositionsSnapshot', true);
|
|
2753
|
+
const awaitPositionSnapshot = this.handleOption('watchPositions', 'awaitPositionsSnapshot', true);
|
|
2754
|
+
const cache = this.positions;
|
|
2755
|
+
if (fetchPositionSnapshot && awaitPositionSnapshot && cache === undefined) {
|
|
2756
|
+
const snapshot = await client.future('fetchPositionsSnapshot');
|
|
2757
|
+
return this.filterBySymbolsSinceLimit(snapshot, symbols, since, limit, true);
|
|
2758
|
+
}
|
|
2759
|
+
const channel = 'positionAll';
|
|
2760
|
+
params = this.extend(params, {
|
|
2761
|
+
'tradeType': tradeType,
|
|
2762
|
+
});
|
|
2763
|
+
const newPositions = await this.subscribePrivateUta(messageHashes, channel, channel, undefined, params);
|
|
2764
|
+
if (this.newUpdates) {
|
|
2765
|
+
return newPositions;
|
|
2766
|
+
}
|
|
2767
|
+
return this.filterBySymbolsSinceLimit(cache, symbols, since, limit, true);
|
|
2768
|
+
}
|
|
1881
2769
|
getCurrentPosition(symbol) {
|
|
1882
2770
|
if (this.positions === undefined) {
|
|
1883
2771
|
return undefined;
|
|
@@ -1887,6 +2775,40 @@ export default class kucoin extends kucoinRest {
|
|
|
1887
2775
|
const values = Object.values(symbolCache);
|
|
1888
2776
|
return this.safeValue(values, 0);
|
|
1889
2777
|
}
|
|
2778
|
+
setPositionsCache(client, uta) {
|
|
2779
|
+
if (!(this.isEmpty(this.positions))) {
|
|
2780
|
+
return;
|
|
2781
|
+
}
|
|
2782
|
+
const fetchPositionsSnapshot = this.handleOption('watchPositions', 'fetchPositionsSnapshot', false);
|
|
2783
|
+
if (fetchPositionsSnapshot) {
|
|
2784
|
+
const messageHash = 'fetchPositionsSnapshot';
|
|
2785
|
+
if (!(messageHash in client.futures)) {
|
|
2786
|
+
client.future(messageHash);
|
|
2787
|
+
this.spawn(this.loadPositionsSnapshot, client, messageHash, uta);
|
|
2788
|
+
}
|
|
2789
|
+
}
|
|
2790
|
+
else {
|
|
2791
|
+
this.positions = new ArrayCacheBySymbolById();
|
|
2792
|
+
}
|
|
2793
|
+
}
|
|
2794
|
+
async loadPositionsSnapshot(client, messageHash, uta) {
|
|
2795
|
+
const positions = await this.fetchPositions(undefined, { 'uta': uta });
|
|
2796
|
+
this.positions = new ArrayCacheBySymbolById();
|
|
2797
|
+
const cache = this.positions;
|
|
2798
|
+
for (let i = 0; i < positions.length; i++) {
|
|
2799
|
+
const position = positions[i];
|
|
2800
|
+
const contracts = this.safeNumber(position, 'contracts', 0);
|
|
2801
|
+
if (contracts > 0) {
|
|
2802
|
+
cache.append(position);
|
|
2803
|
+
}
|
|
2804
|
+
}
|
|
2805
|
+
// don't remove the future from the .futures cache
|
|
2806
|
+
if (messageHash in client.futures) {
|
|
2807
|
+
const future = client.futures[messageHash];
|
|
2808
|
+
future.resolve(cache);
|
|
2809
|
+
client.resolve(cache, 'positions');
|
|
2810
|
+
}
|
|
2811
|
+
}
|
|
1890
2812
|
setPositionCache(client, symbol) {
|
|
1891
2813
|
const fetchPositionSnapshot = this.handleOption('watchPosition', 'fetchPositionSnapshot', false);
|
|
1892
2814
|
if (fetchPositionSnapshot) {
|
|
@@ -2022,6 +2944,114 @@ export default class kucoin extends kucoinRest {
|
|
|
2022
2944
|
cache.append(position);
|
|
2023
2945
|
client.resolve(position, messageHash);
|
|
2024
2946
|
}
|
|
2947
|
+
handleUtaPosition(client, message) {
|
|
2948
|
+
//
|
|
2949
|
+
// {
|
|
2950
|
+
// "T": "positionAll.UNIFIED",
|
|
2951
|
+
// "P": "1774805155993190995",
|
|
2952
|
+
// "d": {
|
|
2953
|
+
// "pi": "30000000000084845",
|
|
2954
|
+
// "s": "DOGEUSDTM",
|
|
2955
|
+
// "mM": "CROSS",
|
|
2956
|
+
// "q": "3",
|
|
2957
|
+
// "eP": "0.09038666666666666666",
|
|
2958
|
+
// "pV": "27.021",
|
|
2959
|
+
// "mP": "0.09007",
|
|
2960
|
+
// "lP": "0.00001",
|
|
2961
|
+
// "bP": "0.00001",
|
|
2962
|
+
// "l": "4.5",
|
|
2963
|
+
// "uPL": "-0.095",
|
|
2964
|
+
// "rPL": "-0.01473705",
|
|
2965
|
+
// "iM": "6.0046666666666666666",
|
|
2966
|
+
// "mmr": "0.007",
|
|
2967
|
+
// "mtM": "0.189147",
|
|
2968
|
+
// "U": "1774805155988000000",
|
|
2969
|
+
// "O": 1774793727585000000
|
|
2970
|
+
// }
|
|
2971
|
+
// }
|
|
2972
|
+
//
|
|
2973
|
+
if (this.positions === undefined) {
|
|
2974
|
+
this.positions = new ArrayCacheBySymbolById();
|
|
2975
|
+
}
|
|
2976
|
+
const data = this.safeDict(message, 'd', {});
|
|
2977
|
+
const marketId = this.safeString(data, 's');
|
|
2978
|
+
const symbol = this.safeSymbol(marketId);
|
|
2979
|
+
const cache = this.positions;
|
|
2980
|
+
const currentPosition = this.getCurrentPosition(symbol);
|
|
2981
|
+
const newPosition = this.parseWsUtaPosition(data);
|
|
2982
|
+
const keys = Object.keys(newPosition);
|
|
2983
|
+
for (let i = 0; i < keys.length; i++) {
|
|
2984
|
+
const key = keys[i];
|
|
2985
|
+
if (newPosition[key] === undefined) {
|
|
2986
|
+
delete newPosition[key];
|
|
2987
|
+
}
|
|
2988
|
+
}
|
|
2989
|
+
const position = this.extend(currentPosition, newPosition);
|
|
2990
|
+
cache.append(position);
|
|
2991
|
+
const messageHash = 'positions';
|
|
2992
|
+
const symbolMessageHash = messageHash + ':' + symbol;
|
|
2993
|
+
client.resolve(this.positions, messageHash);
|
|
2994
|
+
client.resolve(this.positions, symbolMessageHash);
|
|
2995
|
+
}
|
|
2996
|
+
parseWsUtaPosition(position, market = undefined) {
|
|
2997
|
+
//
|
|
2998
|
+
// {
|
|
2999
|
+
// "pi": "30000000000084845",
|
|
3000
|
+
// "s": "DOGEUSDTM",
|
|
3001
|
+
// "mM": "CROSS",
|
|
3002
|
+
// "q": "3",
|
|
3003
|
+
// "eP": "0.09038666666666666666",
|
|
3004
|
+
// "pV": "27.021",
|
|
3005
|
+
// "mP": "0.09007",
|
|
3006
|
+
// "lP": "0.00001",
|
|
3007
|
+
// "bP": "0.00001",
|
|
3008
|
+
// "l": "4.5",
|
|
3009
|
+
// "uPL": "-0.095",
|
|
3010
|
+
// "rPL": "-0.01473705",
|
|
3011
|
+
// "iM": "6.0046666666666666666",
|
|
3012
|
+
// "mmr": "0.007",
|
|
3013
|
+
// "mtM": "0.189147",
|
|
3014
|
+
// "U": "1774805155988000000",
|
|
3015
|
+
// "O": 1774793727585000000
|
|
3016
|
+
// }
|
|
3017
|
+
//
|
|
3018
|
+
const marketId = this.safeString(position, 's');
|
|
3019
|
+
market = this.safeMarket(marketId, market);
|
|
3020
|
+
const symbol = market['symbol'];
|
|
3021
|
+
const timestamp = this.safeIntegerProduct(position, 'O', 0.000001);
|
|
3022
|
+
const amountString = this.safeString(position, 'q');
|
|
3023
|
+
const size = Precise.stringAbs(amountString);
|
|
3024
|
+
const side = Precise.stringGt(amountString, '0') ? 'long' : 'short';
|
|
3025
|
+
return this.safePosition({
|
|
3026
|
+
'info': position,
|
|
3027
|
+
'id': this.safeString(position, 'pi'),
|
|
3028
|
+
'symbol': symbol,
|
|
3029
|
+
'timestamp': timestamp,
|
|
3030
|
+
'datetime': this.iso8601(timestamp),
|
|
3031
|
+
'lastUpdateTimestamp': this.safeIntegerProduct(position, 'U', 0.000001),
|
|
3032
|
+
'initialMargin': this.safeNumber(position, 'iM'),
|
|
3033
|
+
'initialMarginPercentage': undefined,
|
|
3034
|
+
'maintenanceMargin': this.safeNumber(position, 'mtM'),
|
|
3035
|
+
'maintenanceMarginPercentage': this.safeNumber(position, 'mmr'),
|
|
3036
|
+
'entryPrice': this.safeNumber(position, 'eP'),
|
|
3037
|
+
'notional': this.safeNumber(position, 'pV'),
|
|
3038
|
+
'leverage': this.safeNumber(position, 'l'),
|
|
3039
|
+
'unrealizedPnl': this.safeNumber(position, 'uPL'),
|
|
3040
|
+
'contracts': this.parseNumber(size),
|
|
3041
|
+
'contractSize': this.safeNumber(market, 'contractSize'),
|
|
3042
|
+
'realizedPnl': this.safeNumber(position, 'rPL'),
|
|
3043
|
+
'marginRatio': undefined,
|
|
3044
|
+
'liquidationPrice': this.safeNumber(position, 'lP'),
|
|
3045
|
+
'markPrice': this.safeNumber(position, 'mP'),
|
|
3046
|
+
'lastPrice': undefined,
|
|
3047
|
+
'collateral': undefined,
|
|
3048
|
+
'marginMode': this.safeStringLower(position, 'mM'),
|
|
3049
|
+
'side': side,
|
|
3050
|
+
'percentage': undefined,
|
|
3051
|
+
'stopLossPrice': undefined,
|
|
3052
|
+
'takeProfitPrice': undefined,
|
|
3053
|
+
});
|
|
3054
|
+
}
|
|
2025
3055
|
handleSubject(client, message) {
|
|
2026
3056
|
//
|
|
2027
3057
|
// {
|
|
@@ -2044,7 +3074,7 @@ export default class kucoin extends kucoinRest {
|
|
|
2044
3074
|
this.handleTicker(client, message);
|
|
2045
3075
|
return;
|
|
2046
3076
|
}
|
|
2047
|
-
const subject = this.
|
|
3077
|
+
const subject = this.safeString2(message, 'subject', 'T');
|
|
2048
3078
|
const methods = {
|
|
2049
3079
|
'level1': this.handleBidAsk,
|
|
2050
3080
|
'level2': this.handleOrderBook,
|
|
@@ -2069,6 +3099,40 @@ export default class kucoin extends kucoinRest {
|
|
|
2069
3099
|
'position.change': this.handlePosition,
|
|
2070
3100
|
'position.settlement': this.handlePosition,
|
|
2071
3101
|
'position.adjustRiskLimit': this.handlePosition,
|
|
3102
|
+
// uta messages
|
|
3103
|
+
'ticker.SPOT': this.handleUtaTicker,
|
|
3104
|
+
'ticker.FUTURES': this.handleUtaTicker,
|
|
3105
|
+
'trade.SPOT': this.handleUtaTrade,
|
|
3106
|
+
'trade.FUTURES': this.handleUtaTrade,
|
|
3107
|
+
'kline.SPOT': this.handleUtaOHLCV,
|
|
3108
|
+
'kline.FUTURES': this.handleUtaOHLCV,
|
|
3109
|
+
'obu.SPOT': this.handleUtaOrderBook,
|
|
3110
|
+
'obu.FUTURES': this.handleUtaOrderBook,
|
|
3111
|
+
'order.UNIFIED': this.handleUtaOrder,
|
|
3112
|
+
'order.SPOT': this.handleUtaOrder,
|
|
3113
|
+
'order.FUTURES': this.handleUtaOrder,
|
|
3114
|
+
'order.CROSS': this.handleUtaOrder,
|
|
3115
|
+
'order.ISOLATED': this.handleUtaOrder,
|
|
3116
|
+
'orderAll.UNIFIED': this.handleUtaOrder,
|
|
3117
|
+
'orderAll.SPOT': this.handleUtaOrder,
|
|
3118
|
+
'orderAll.FUTURES': this.handleUtaOrder,
|
|
3119
|
+
'orderAll.CROSS': this.handleUtaOrder,
|
|
3120
|
+
'orderAll.ISOLATED': this.handleUtaOrder,
|
|
3121
|
+
'execution.UNIFIED': this.handleUtaMyTrade,
|
|
3122
|
+
'execution.SPOT': this.handleUtaMyTrade,
|
|
3123
|
+
'execution.FUTURES': this.handleUtaMyTrade,
|
|
3124
|
+
'execution.CROSS': this.handleUtaMyTrade,
|
|
3125
|
+
'execution.ISOLATED': this.handleUtaMyTrade,
|
|
3126
|
+
'execution.lite.UNIFIED': this.handleUtaMyTrade,
|
|
3127
|
+
'execution.lite.SPOT': this.handleUtaMyTrade,
|
|
3128
|
+
'execution.lite.FUTURES': this.handleUtaMyTrade,
|
|
3129
|
+
'execution.lite.CROSS': this.handleUtaMyTrade,
|
|
3130
|
+
'execution.lite.ISOLATED': this.handleUtaMyTrade,
|
|
3131
|
+
'position.UNIFIED': this.handleUtaPosition,
|
|
3132
|
+
'position.FUTURES': this.handleUtaPosition,
|
|
3133
|
+
'positionAll.UNIFIED': this.handleUtaPosition,
|
|
3134
|
+
'positionAll.FUTURES': this.handleUtaPosition,
|
|
3135
|
+
'balance.UNIFIED': this.handleUtaBalance,
|
|
2072
3136
|
};
|
|
2073
3137
|
const method = this.safeValue(methods, subject);
|
|
2074
3138
|
if (method !== undefined) {
|
|
@@ -2098,7 +3162,14 @@ export default class kucoin extends kucoinRest {
|
|
|
2098
3162
|
// "data": "type is not supported"
|
|
2099
3163
|
// }
|
|
2100
3164
|
//
|
|
2101
|
-
|
|
3165
|
+
// uta
|
|
3166
|
+
// {
|
|
3167
|
+
// "id": "1",
|
|
3168
|
+
// "result": false,
|
|
3169
|
+
// "reason": "missing `symbol` for topic: Position"
|
|
3170
|
+
// }
|
|
3171
|
+
//
|
|
3172
|
+
const data = this.safeString2(message, 'data', 'reason', '');
|
|
2102
3173
|
if (data === 'token is expired') {
|
|
2103
3174
|
let type = 'public';
|
|
2104
3175
|
if (client.url.indexOf('connectId=private') >= 0) {
|
|
@@ -2110,7 +3181,7 @@ export default class kucoin extends kucoinRest {
|
|
|
2110
3181
|
return false;
|
|
2111
3182
|
}
|
|
2112
3183
|
handleMessage(client, message) {
|
|
2113
|
-
const type = this.
|
|
3184
|
+
const type = this.safeString2(message, 'type', 'message');
|
|
2114
3185
|
const methods = {
|
|
2115
3186
|
// 'heartbeat': this.handleHeartbeat,
|
|
2116
3187
|
'welcome': this.handleSystemStatus,
|
|
@@ -2123,6 +3194,16 @@ export default class kucoin extends kucoinRest {
|
|
|
2123
3194
|
if (method !== undefined) {
|
|
2124
3195
|
method.call(this, client, message);
|
|
2125
3196
|
}
|
|
3197
|
+
else if ('T' in message) { // uta messages
|
|
3198
|
+
this.handleSubject(client, message);
|
|
3199
|
+
}
|
|
3200
|
+
else if ('result' in message) { // subscription uta messages
|
|
3201
|
+
const result = this.safeBool(message, 'result', true);
|
|
3202
|
+
if (!result) {
|
|
3203
|
+
this.handleErrorMessage(client, message);
|
|
3204
|
+
}
|
|
3205
|
+
this.handleSubscriptionStatus(client, message);
|
|
3206
|
+
}
|
|
2126
3207
|
}
|
|
2127
3208
|
getMessageHash(elementName, symbol = undefined) {
|
|
2128
3209
|
// method from kucoinfutures
|