ccxt 4.4.99 → 4.4.100
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 +4 -4
- package/dist/373.ccxt.browser.js +7630 -0
- package/dist/373.ccxt.browser.min.js +1 -0
- package/dist/ccxt.browser.min.js +8 -8
- package/dist/cjs/ccxt.js +288 -288
- package/dist/cjs/src/abstract/alpaca.js +3 -1
- package/dist/cjs/src/abstract/apex.js +3 -1
- package/dist/cjs/src/abstract/ascendex.js +3 -1
- package/dist/cjs/src/abstract/bigone.js +3 -1
- package/dist/cjs/src/abstract/binance.js +3 -1
- package/dist/cjs/src/abstract/bingx.js +3 -1
- package/dist/cjs/src/abstract/bit2c.js +3 -1
- package/dist/cjs/src/abstract/bitbank.js +3 -1
- package/dist/cjs/src/abstract/bitbns.js +3 -1
- package/dist/cjs/src/abstract/bitfinex.js +3 -1
- package/dist/cjs/src/abstract/bitflyer.js +3 -1
- package/dist/cjs/src/abstract/bitget.js +3 -1
- package/dist/cjs/src/abstract/bithumb.js +3 -1
- package/dist/cjs/src/abstract/bitmart.js +3 -1
- package/dist/cjs/src/abstract/bitmex.js +3 -1
- package/dist/cjs/src/abstract/bitopro.js +3 -1
- package/dist/cjs/src/abstract/bitrue.js +3 -1
- package/dist/cjs/src/abstract/bitso.js +3 -1
- package/dist/cjs/src/abstract/bitstamp.js +3 -1
- package/dist/cjs/src/abstract/bitteam.js +3 -1
- package/dist/cjs/src/abstract/bittrade.js +3 -1
- package/dist/cjs/src/abstract/bitvavo.js +3 -1
- package/dist/cjs/src/abstract/blockchaincom.js +3 -1
- package/dist/cjs/src/abstract/blofin.js +3 -1
- package/dist/cjs/src/abstract/btcalpha.js +3 -1
- package/dist/cjs/src/abstract/btcbox.js +3 -1
- package/dist/cjs/src/abstract/btcmarkets.js +3 -1
- package/dist/cjs/src/abstract/btcturk.js +3 -1
- package/dist/cjs/src/abstract/bybit.js +3 -1
- package/dist/cjs/src/abstract/cex.js +3 -1
- package/dist/cjs/src/abstract/coinbase.js +3 -1
- package/dist/cjs/src/abstract/coinbaseexchange.js +3 -1
- package/dist/cjs/src/abstract/coinbaseinternational.js +3 -1
- package/dist/cjs/src/abstract/coincatch.js +3 -1
- package/dist/cjs/src/abstract/coincheck.js +3 -1
- package/dist/cjs/src/abstract/coinex.js +3 -1
- package/dist/cjs/src/abstract/coinmate.js +3 -1
- package/dist/cjs/src/abstract/coinmetro.js +3 -1
- package/dist/cjs/src/abstract/coinone.js +3 -1
- package/dist/cjs/src/abstract/coinsph.js +3 -1
- package/dist/cjs/src/abstract/coinspot.js +3 -1
- package/dist/cjs/src/abstract/cryptocom.js +3 -1
- package/dist/cjs/src/abstract/cryptomus.js +3 -1
- package/dist/cjs/src/abstract/defx.js +3 -1
- package/dist/cjs/src/abstract/delta.js +3 -1
- package/dist/cjs/src/abstract/deribit.js +3 -1
- package/dist/cjs/src/abstract/derive.js +3 -1
- package/dist/cjs/src/abstract/digifinex.js +3 -1
- package/dist/cjs/src/abstract/ellipx.js +3 -1
- package/dist/cjs/src/abstract/exmo.js +3 -1
- package/dist/cjs/src/abstract/foxbit.js +3 -1
- package/dist/cjs/src/abstract/gate.js +3 -1
- package/dist/cjs/src/abstract/gemini.js +3 -1
- package/dist/cjs/src/abstract/hashkey.js +3 -1
- package/dist/cjs/src/abstract/hibachi.js +3 -1
- package/dist/cjs/src/abstract/hitbtc.js +3 -1
- package/dist/cjs/src/abstract/hollaex.js +3 -1
- package/dist/cjs/src/abstract/htx.js +3 -1
- package/dist/cjs/src/abstract/hyperliquid.js +3 -1
- package/dist/cjs/src/abstract/independentreserve.js +3 -1
- package/dist/cjs/src/abstract/indodax.js +3 -1
- package/dist/cjs/src/abstract/kraken.js +3 -1
- package/dist/cjs/src/abstract/krakenfutures.js +3 -1
- package/dist/cjs/src/abstract/kucoin.js +3 -1
- package/dist/cjs/src/abstract/kucoinfutures.js +4 -2
- package/dist/cjs/src/abstract/latoken.js +3 -1
- package/dist/cjs/src/abstract/lbank.js +3 -1
- package/dist/cjs/src/abstract/luno.js +3 -1
- package/dist/cjs/src/abstract/mercado.js +3 -1
- package/dist/cjs/src/abstract/mexc.js +3 -1
- package/dist/cjs/src/abstract/modetrade.js +3 -1
- package/dist/cjs/src/abstract/ndax.js +3 -1
- package/dist/cjs/src/abstract/novadax.js +3 -1
- package/dist/cjs/src/abstract/oceanex.js +3 -1
- package/dist/cjs/src/abstract/okcoin.js +3 -1
- package/dist/cjs/src/abstract/okx.js +3 -1
- package/dist/cjs/src/abstract/onetrading.js +3 -1
- package/dist/cjs/src/abstract/oxfun.js +3 -1
- package/dist/cjs/src/abstract/p2b.js +3 -1
- package/dist/cjs/src/abstract/paradex.js +3 -1
- package/dist/cjs/src/abstract/paymium.js +3 -1
- package/dist/cjs/src/abstract/phemex.js +3 -1
- package/dist/cjs/src/abstract/poloniex.js +3 -1
- package/dist/cjs/src/abstract/probit.js +3 -1
- package/dist/cjs/src/abstract/timex.js +3 -1
- package/dist/cjs/src/abstract/tokocrypto.js +3 -1
- package/dist/cjs/src/abstract/tradeogre.js +3 -1
- package/dist/cjs/src/abstract/upbit.js +3 -1
- package/dist/cjs/src/abstract/vertex.js +3 -1
- package/dist/cjs/src/abstract/wavesexchange.js +3 -1
- package/dist/cjs/src/abstract/whitebit.js +3 -1
- package/dist/cjs/src/abstract/woo.js +3 -1
- package/dist/cjs/src/abstract/woofipro.js +3 -1
- package/dist/cjs/src/abstract/xt.js +3 -1
- package/dist/cjs/src/abstract/yobit.js +3 -1
- package/dist/cjs/src/abstract/zaif.js +3 -1
- package/dist/cjs/src/abstract/zonda.js +3 -1
- package/dist/cjs/src/alpaca.js +4 -2
- package/dist/cjs/src/apex.js +4 -2
- package/dist/cjs/src/ascendex.js +4 -2
- package/dist/cjs/src/base/Exchange.js +51 -11
- package/dist/cjs/src/base/functions/encode.js +2 -2
- package/dist/cjs/src/base/ws/Client.js +8 -2
- package/dist/cjs/src/base/ws/WsClient.js +4 -2
- package/dist/cjs/src/bequant.js +4 -2
- package/dist/cjs/src/bigone.js +4 -2
- package/dist/cjs/src/binance.js +5 -2
- package/dist/cjs/src/binancecoinm.js +4 -2
- package/dist/cjs/src/binanceus.js +4 -2
- package/dist/cjs/src/binanceusdm.js +4 -2
- package/dist/cjs/src/bingx.js +36 -4
- package/dist/cjs/src/bit2c.js +4 -2
- package/dist/cjs/src/bitbank.js +4 -2
- package/dist/cjs/src/bitbns.js +4 -2
- package/dist/cjs/src/bitfinex.js +7 -2
- package/dist/cjs/src/bitflyer.js +4 -2
- package/dist/cjs/src/bitget.js +42 -16
- package/dist/cjs/src/bithumb.js +4 -2
- package/dist/cjs/src/bitmart.js +4 -2
- package/dist/cjs/src/bitmex.js +5 -2
- package/dist/cjs/src/bitopro.js +4 -2
- package/dist/cjs/src/bitrue.js +4 -2
- package/dist/cjs/src/bitso.js +4 -2
- package/dist/cjs/src/bitstamp.js +4 -2
- package/dist/cjs/src/bitteam.js +4 -2
- package/dist/cjs/src/bittrade.js +4 -2
- package/dist/cjs/src/bitvavo.js +4 -2
- package/dist/cjs/src/blockchaincom.js +4 -2
- package/dist/cjs/src/blofin.js +4 -2
- package/dist/cjs/src/btcalpha.js +4 -2
- package/dist/cjs/src/btcbox.js +4 -2
- package/dist/cjs/src/btcmarkets.js +4 -2
- package/dist/cjs/src/btcturk.js +4 -2
- package/dist/cjs/src/bybit.js +4 -2
- package/dist/cjs/src/cex.js +4 -2
- package/dist/cjs/src/coinbase.js +4 -2
- package/dist/cjs/src/coinbaseadvanced.js +4 -2
- package/dist/cjs/src/coinbaseexchange.js +4 -2
- package/dist/cjs/src/coinbaseinternational.js +4 -2
- package/dist/cjs/src/coincatch.js +4 -2
- package/dist/cjs/src/coincheck.js +4 -2
- package/dist/cjs/src/coinex.js +5 -3
- package/dist/cjs/src/coinmate.js +4 -2
- package/dist/cjs/src/coinmetro.js +4 -2
- package/dist/cjs/src/coinone.js +4 -2
- package/dist/cjs/src/coinsph.js +4 -2
- package/dist/cjs/src/coinspot.js +4 -2
- package/dist/cjs/src/cryptocom.js +4 -2
- package/dist/cjs/src/cryptomus.js +4 -2
- package/dist/cjs/src/defx.js +4 -2
- package/dist/cjs/src/delta.js +4 -2
- package/dist/cjs/src/deribit.js +4 -2
- package/dist/cjs/src/derive.js +4 -2
- package/dist/cjs/src/digifinex.js +4 -2
- package/dist/cjs/src/ellipx.js +4 -2
- package/dist/cjs/src/exmo.js +4 -2
- package/dist/cjs/src/fmfwio.js +4 -2
- package/dist/cjs/src/foxbit.js +7 -6
- package/dist/cjs/src/gate.js +25 -2
- package/dist/cjs/src/gateio.js +4 -2
- package/dist/cjs/src/gemini.js +4 -2
- package/dist/cjs/src/hashkey.js +4 -2
- package/dist/cjs/src/hibachi.js +4 -2
- package/dist/cjs/src/hitbtc.js +4 -2
- package/dist/cjs/src/hollaex.js +4 -2
- package/dist/cjs/src/htx.js +5 -2
- package/dist/cjs/src/huobi.js +4 -2
- package/dist/cjs/src/hyperliquid.js +83 -30
- package/dist/cjs/src/independentreserve.js +4 -2
- package/dist/cjs/src/indodax.js +4 -2
- package/dist/cjs/src/kraken.js +4 -2
- package/dist/cjs/src/krakenfutures.js +5 -2
- package/dist/cjs/src/kucoin.js +4 -2
- package/dist/cjs/src/kucoinfutures.js +5 -2
- package/dist/cjs/src/latoken.js +4 -2
- package/dist/cjs/src/lbank.js +5 -3
- package/dist/cjs/src/luno.js +4 -2
- package/dist/cjs/src/mercado.js +4 -2
- package/dist/cjs/src/mexc.js +11 -2
- package/dist/cjs/src/modetrade.js +100 -2
- package/dist/cjs/src/myokx.js +4 -2
- package/dist/cjs/src/ndax.js +4 -2
- package/dist/cjs/src/novadax.js +4 -2
- package/dist/cjs/src/oceanex.js +4 -2
- package/dist/cjs/src/okcoin.js +4 -2
- package/dist/cjs/src/okx.js +4 -2
- package/dist/cjs/src/okxus.js +4 -2
- package/dist/cjs/src/onetrading.js +37 -2
- package/dist/cjs/src/oxfun.js +4 -2
- package/dist/cjs/src/p2b.js +36 -2
- package/dist/cjs/src/paradex.js +5 -2
- package/dist/cjs/src/paymium.js +4 -2
- package/dist/cjs/src/phemex.js +4 -2
- package/dist/cjs/src/poloniex.js +4 -2
- package/dist/cjs/src/pro/alpaca.js +4 -2
- package/dist/cjs/src/pro/apex.js +4 -2
- package/dist/cjs/src/pro/ascendex.js +4 -2
- package/dist/cjs/src/pro/bequant.js +5 -3
- package/dist/cjs/src/pro/binance.js +6 -3
- package/dist/cjs/src/pro/binancecoinm.js +5 -3
- package/dist/cjs/src/pro/binanceus.js +5 -3
- package/dist/cjs/src/pro/binanceusdm.js +4 -2
- package/dist/cjs/src/pro/bingx.js +4 -2
- package/dist/cjs/src/pro/bitfinex.js +4 -2
- package/dist/cjs/src/pro/bitget.js +4 -2
- package/dist/cjs/src/pro/bithumb.js +4 -2
- package/dist/cjs/src/pro/bitmart.js +4 -2
- package/dist/cjs/src/pro/bitmex.js +4 -2
- package/dist/cjs/src/pro/bitopro.js +4 -2
- package/dist/cjs/src/pro/bitrue.js +4 -2
- package/dist/cjs/src/pro/bitstamp.js +4 -2
- package/dist/cjs/src/pro/bittrade.js +4 -2
- package/dist/cjs/src/pro/bitvavo.js +5 -3
- package/dist/cjs/src/pro/blockchaincom.js +4 -2
- package/dist/cjs/src/pro/blofin.js +4 -2
- package/dist/cjs/src/pro/bybit.js +5 -2
- package/dist/cjs/src/pro/cex.js +4 -2
- package/dist/cjs/src/pro/coinbase.js +4 -2
- package/dist/cjs/src/pro/coinbaseadvanced.js +4 -2
- package/dist/cjs/src/pro/coinbaseexchange.js +4 -2
- package/dist/cjs/src/pro/coinbaseinternational.js +4 -2
- package/dist/cjs/src/pro/coincatch.js +4 -2
- package/dist/cjs/src/pro/coincheck.js +4 -2
- package/dist/cjs/src/pro/coinex.js +5 -3
- package/dist/cjs/src/pro/coinone.js +4 -2
- package/dist/cjs/src/pro/cryptocom.js +4 -2
- package/dist/cjs/src/pro/defx.js +4 -2
- package/dist/cjs/src/pro/deribit.js +4 -2
- package/dist/cjs/src/pro/derive.js +4 -2
- package/dist/cjs/src/pro/exmo.js +4 -2
- package/dist/cjs/src/pro/gate.js +4 -2
- package/dist/cjs/src/pro/gateio.js +4 -2
- package/dist/cjs/src/pro/gemini.js +4 -2
- package/dist/cjs/src/pro/hashkey.js +4 -2
- package/dist/cjs/src/pro/hitbtc.js +4 -2
- package/dist/cjs/src/pro/hollaex.js +4 -2
- package/dist/cjs/src/pro/htx.js +4 -2
- package/dist/cjs/src/pro/huobi.js +4 -2
- package/dist/cjs/src/pro/hyperliquid.js +107 -14
- package/dist/cjs/src/pro/independentreserve.js +4 -2
- package/dist/cjs/src/pro/kraken.js +4 -2
- package/dist/cjs/src/pro/krakenfutures.js +4 -2
- package/dist/cjs/src/pro/kucoin.js +5 -3
- package/dist/cjs/src/pro/kucoinfutures.js +5 -3
- package/dist/cjs/src/pro/lbank.js +4 -2
- package/dist/cjs/src/pro/luno.js +4 -2
- package/dist/cjs/src/pro/mexc.js +342 -159
- package/dist/cjs/src/pro/modetrade.js +4 -2
- package/dist/cjs/src/pro/myokx.js +4 -2
- package/dist/cjs/src/pro/ndax.js +4 -2
- package/dist/cjs/src/pro/okcoin.js +4 -2
- package/dist/cjs/src/pro/okx.js +6 -3
- package/dist/cjs/src/pro/okxus.js +4 -2
- package/dist/cjs/src/pro/onetrading.js +4 -2
- package/dist/cjs/src/pro/oxfun.js +5 -3
- package/dist/cjs/src/pro/p2b.js +4 -2
- package/dist/cjs/src/pro/paradex.js +4 -2
- package/dist/cjs/src/pro/phemex.js +4 -2
- package/dist/cjs/src/pro/poloniex.js +4 -2
- package/dist/cjs/src/pro/probit.js +4 -2
- package/dist/cjs/src/pro/tradeogre.js +4 -2
- package/dist/cjs/src/pro/upbit.js +4 -2
- package/dist/cjs/src/pro/vertex.js +4 -2
- package/dist/cjs/src/pro/whitebit.js +4 -2
- package/dist/cjs/src/pro/woo.js +4 -2
- package/dist/cjs/src/pro/woofipro.js +4 -2
- package/dist/cjs/src/pro/xt.js +4 -2
- package/dist/cjs/src/probit.js +39 -2
- package/dist/cjs/src/protobuf/mexc/compiled.cjs.js +7180 -0
- package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +1 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +2 -2
- package/dist/cjs/src/static_dependencies/ethers/fragments.js +2 -2
- package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +2 -2
- package/dist/cjs/src/static_dependencies/ethers/interface.js +2 -2
- package/dist/cjs/src/static_dependencies/ethers/typed.js +2 -2
- package/dist/cjs/src/static_dependencies/ethers/utils/events.js +2 -2
- package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +2 -2
- package/dist/cjs/src/static_dependencies/node-fetch/index.js +7 -7
- package/dist/cjs/src/static_dependencies/node-fetch/response.js +3 -1
- package/dist/cjs/src/static_dependencies/qs/index.cjs.js +3 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +3 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +3 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +7 -7
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +4 -2
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +4 -2
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +3 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +28 -26
- package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +2 -2
- package/dist/cjs/src/timex.js +4 -2
- package/dist/cjs/src/tokocrypto.js +4 -2
- package/dist/cjs/src/tradeogre.js +4 -2
- package/dist/cjs/src/upbit.js +4 -2
- package/dist/cjs/src/vertex.js +4 -2
- package/dist/cjs/src/wavesexchange.js +4 -2
- package/dist/cjs/src/whitebit.js +4 -2
- package/dist/cjs/src/woo.js +4 -2
- package/dist/cjs/src/woofipro.js +100 -2
- package/dist/cjs/src/xt.js +4 -2
- package/dist/cjs/src/yobit.js +4 -2
- package/dist/cjs/src/zaif.js +4 -2
- package/dist/cjs/src/zonda.js +4 -2
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/bingx.d.ts +1 -0
- package/js/src/alpaca.d.ts +1 -1
- package/js/src/apex.d.ts +1 -1
- package/js/src/ascendex.d.ts +1 -1
- package/js/src/base/Exchange.d.ts +9 -7
- package/js/src/base/Exchange.js +50 -10
- package/js/src/base/types.d.ts +2 -1
- package/js/src/base/ws/Client.d.ts +1 -0
- package/js/src/base/ws/Client.js +5 -1
- package/js/src/bigone.d.ts +1 -1
- package/js/src/binance.d.ts +2 -2
- package/js/src/binance.js +1 -0
- package/js/src/bingx.d.ts +3 -2
- package/js/src/bingx.js +32 -2
- package/js/src/bitbank.d.ts +1 -1
- package/js/src/bitfinex.d.ts +1 -1
- package/js/src/bitfinex.js +3 -0
- package/js/src/bitflyer.d.ts +1 -1
- package/js/src/bitget.d.ts +4 -2
- package/js/src/bitget.js +38 -14
- package/js/src/bithumb.d.ts +1 -1
- package/js/src/bitmart.d.ts +2 -2
- package/js/src/bitmex.d.ts +2 -2
- package/js/src/bitmex.js +1 -0
- package/js/src/bitopro.d.ts +1 -1
- package/js/src/bitrue.d.ts +2 -2
- package/js/src/bitso.d.ts +1 -1
- package/js/src/bitstamp.d.ts +1 -1
- package/js/src/bittrade.d.ts +1 -1
- package/js/src/bitvavo.d.ts +1 -1
- package/js/src/blockchaincom.d.ts +1 -1
- package/js/src/blofin.d.ts +1 -1
- package/js/src/btcmarkets.d.ts +1 -1
- package/js/src/bybit.d.ts +2 -2
- package/js/src/coinbase.d.ts +1 -1
- package/js/src/coinbaseexchange.d.ts +1 -1
- package/js/src/coinbaseinternational.d.ts +1 -1
- package/js/src/coincatch.d.ts +2 -2
- package/js/src/coinex.d.ts +3 -3
- package/js/src/coinex.js +1 -1
- package/js/src/coinmate.d.ts +1 -1
- package/js/src/coinsph.d.ts +1 -1
- package/js/src/cryptocom.d.ts +1 -1
- package/js/src/defx.d.ts +2 -2
- package/js/src/delta.d.ts +1 -1
- package/js/src/deribit.d.ts +1 -1
- package/js/src/digifinex.d.ts +2 -2
- package/js/src/ellipx.d.ts +1 -1
- package/js/src/exmo.d.ts +1 -1
- package/js/src/foxbit.d.ts +1 -1
- package/js/src/foxbit.js +3 -3
- package/js/src/gate.d.ts +2 -2
- package/js/src/gate.js +21 -0
- package/js/src/gemini.d.ts +1 -1
- package/js/src/hashkey.d.ts +3 -3
- package/js/src/hibachi.d.ts +1 -1
- package/js/src/hitbtc.d.ts +2 -2
- package/js/src/hollaex.d.ts +1 -1
- package/js/src/htx.d.ts +3 -3
- package/js/src/htx.js +1 -0
- package/js/src/hyperliquid.d.ts +12 -2
- package/js/src/hyperliquid.js +79 -28
- package/js/src/independentreserve.d.ts +1 -1
- package/js/src/indodax.d.ts +1 -1
- package/js/src/kraken.d.ts +1 -1
- package/js/src/krakenfutures.d.ts +1 -1
- package/js/src/krakenfutures.js +1 -0
- package/js/src/kucoin.d.ts +2 -2
- package/js/src/kucoinfutures.d.ts +3 -2
- package/js/src/kucoinfutures.js +1 -0
- package/js/src/lbank.d.ts +1 -1
- package/js/src/lbank.js +1 -1
- package/js/src/mercado.d.ts +1 -1
- package/js/src/mexc.d.ts +2 -2
- package/js/src/mexc.js +7 -0
- package/js/src/modetrade.d.ts +26 -3
- package/js/src/modetrade.js +96 -0
- package/js/src/ndax.d.ts +1 -1
- package/js/src/novadax.d.ts +1 -1
- package/js/src/okcoin.d.ts +1 -1
- package/js/src/okx.d.ts +2 -2
- package/js/src/onetrading.js +33 -0
- package/js/src/oxfun.d.ts +1 -1
- package/js/src/p2b.js +32 -0
- package/js/src/paradex.d.ts +1 -1
- package/js/src/paradex.js +1 -0
- package/js/src/phemex.d.ts +2 -2
- package/js/src/poloniex.d.ts +2 -2
- package/js/src/pro/binance.js +2 -1
- package/js/src/pro/bitvavo.js +1 -1
- package/js/src/pro/bybit.js +1 -0
- package/js/src/pro/coinex.js +1 -1
- package/js/src/pro/hyperliquid.d.ts +26 -0
- package/js/src/pro/hyperliquid.js +103 -12
- package/js/src/pro/kucoin.js +1 -1
- package/js/src/pro/kucoinfutures.js +1 -1
- package/js/src/pro/mexc.d.ts +9 -6
- package/js/src/pro/mexc.js +338 -157
- package/js/src/pro/okx.js +2 -1
- package/js/src/pro/oxfun.js +1 -1
- package/js/src/probit.d.ts +1 -1
- package/js/src/probit.js +35 -0
- package/js/src/protobuf/mexc/compiled.cjs +7180 -0
- package/js/src/protobuf/mexc/compiled.d.cts +2 -0
- package/js/src/tokocrypto.d.ts +1 -1
- package/js/src/upbit.d.ts +1 -1
- package/js/src/vertex.d.ts +1 -1
- package/js/src/wavesexchange.d.ts +1 -1
- package/js/src/whitebit.d.ts +2 -2
- package/js/src/woo.d.ts +4 -4
- package/js/src/woofipro.d.ts +26 -3
- package/js/src/woofipro.js +96 -0
- package/js/src/xt.d.ts +3 -3
- package/js/src/yobit.d.ts +1 -1
- package/js/src/zaif.d.ts +1 -1
- package/js/src/zonda.d.ts +1 -1
- package/package.json +4 -3
package/js/src/pro/mexc.js
CHANGED
|
@@ -38,13 +38,14 @@ export default class mexc extends mexcRest {
|
|
|
38
38
|
'urls': {
|
|
39
39
|
'api': {
|
|
40
40
|
'ws': {
|
|
41
|
-
'spot': 'wss://wbs.mexc.com/ws',
|
|
41
|
+
'spot': 'wss://wbs-api.mexc.com/ws',
|
|
42
42
|
'swap': 'wss://contract.mexc.com/edge',
|
|
43
43
|
},
|
|
44
44
|
},
|
|
45
45
|
},
|
|
46
46
|
'options': {
|
|
47
47
|
'listenKeyRefreshRate': 1200000,
|
|
48
|
+
'decompressBinary': false,
|
|
48
49
|
// TODO add reset connection after #16754 is merged
|
|
49
50
|
'timeframes': {
|
|
50
51
|
'1m': 'Min1',
|
|
@@ -88,15 +89,7 @@ export default class mexc extends mexcRest {
|
|
|
88
89
|
const market = this.market(symbol);
|
|
89
90
|
const messageHash = 'ticker:' + market['symbol'];
|
|
90
91
|
if (market['spot']) {
|
|
91
|
-
|
|
92
|
-
[miniTicker, params] = this.handleOptionAndParams(params, 'watchTicker', 'miniTicker');
|
|
93
|
-
let channel = undefined;
|
|
94
|
-
if (miniTicker) {
|
|
95
|
-
channel = 'spot@public.miniTicker.v3.api@' + market['id'] + '@UTC+8';
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
channel = 'spot@public.bookTicker.v3.api@' + market['id'];
|
|
99
|
-
}
|
|
92
|
+
const channel = 'spot@public.aggre.bookTicker.v3.api.pb@100ms@' + market['id'];
|
|
100
93
|
return await this.watchSpotPublic(channel, messageHash, params);
|
|
101
94
|
}
|
|
102
95
|
else {
|
|
@@ -176,9 +169,9 @@ export default class mexc extends mexcRest {
|
|
|
176
169
|
// }
|
|
177
170
|
//
|
|
178
171
|
this.handleBidAsk(client, message);
|
|
179
|
-
const rawTicker = this.
|
|
172
|
+
const rawTicker = this.safeDictN(message, ['d', 'data', 'publicAggreBookTicker']);
|
|
180
173
|
const marketId = this.safeString2(message, 's', 'symbol');
|
|
181
|
-
const timestamp = this.
|
|
174
|
+
const timestamp = this.safeInteger2(message, 't', 'sendtime');
|
|
182
175
|
const market = this.safeMarket(marketId);
|
|
183
176
|
const symbol = market['symbol'];
|
|
184
177
|
let ticker = undefined;
|
|
@@ -221,34 +214,33 @@ export default class mexc extends mexcRest {
|
|
|
221
214
|
const url = (isSpot) ? this.urls['api']['ws']['spot'] : this.urls['api']['ws']['swap'];
|
|
222
215
|
const request = {};
|
|
223
216
|
if (isSpot) {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
request['
|
|
251
|
-
request['params'] = topics;
|
|
217
|
+
throw new NotSupported(this.id + ' watchTickers does not support spot markets');
|
|
218
|
+
// let miniTicker = false;
|
|
219
|
+
// [ miniTicker, params ] = this.handleOptionAndParams (params, 'watchTickers', 'miniTicker');
|
|
220
|
+
// const topics = [];
|
|
221
|
+
// if (!miniTicker) {
|
|
222
|
+
// if (symbols === undefined) {
|
|
223
|
+
// throw new ArgumentsRequired (this.id + ' watchTickers required symbols argument for the bookTicker channel');
|
|
224
|
+
// }
|
|
225
|
+
// const marketIds = this.marketIds (symbols);
|
|
226
|
+
// for (let i = 0; i < marketIds.length; i++) {
|
|
227
|
+
// const marketId = marketIds[i];
|
|
228
|
+
// messageHashes.push ('ticker:' + symbols[i]);
|
|
229
|
+
// const channel = 'spot@public.bookTicker.v3.api@' + marketId;
|
|
230
|
+
// topics.push (channel);
|
|
231
|
+
// }
|
|
232
|
+
// } else {
|
|
233
|
+
// topics.push ('spot@public.miniTickers.v3.api@UTC+8');
|
|
234
|
+
// if (symbols === undefined) {
|
|
235
|
+
// messageHashes.push ('spot:ticker');
|
|
236
|
+
// } else {
|
|
237
|
+
// for (let i = 0; i < symbols.length; i++) {
|
|
238
|
+
// messageHashes.push ('ticker:' + symbols[i]);
|
|
239
|
+
// }
|
|
240
|
+
// }
|
|
241
|
+
// }
|
|
242
|
+
// request['method'] = 'SUBSCRIPTION';
|
|
243
|
+
// request['params'] = topics;
|
|
252
244
|
}
|
|
253
245
|
else {
|
|
254
246
|
request['method'] = 'sub.tickers';
|
|
@@ -353,6 +345,11 @@ export default class mexc extends mexcRest {
|
|
|
353
345
|
client.resolve(result, topic);
|
|
354
346
|
}
|
|
355
347
|
parseWsTicker(ticker, market = undefined) {
|
|
348
|
+
// protobuf ticker
|
|
349
|
+
// "bidprice": "93387.28", // Best bid price
|
|
350
|
+
// "bidquantity": "3.73485", // Best bid quantity
|
|
351
|
+
// "askprice": "93387.29", // Best ask price
|
|
352
|
+
// "askquantity": "7.669875" // Best ask quantity
|
|
356
353
|
//
|
|
357
354
|
// spot
|
|
358
355
|
//
|
|
@@ -367,7 +364,7 @@ export default class mexc extends mexcRest {
|
|
|
367
364
|
//
|
|
368
365
|
// {
|
|
369
366
|
// "s": "BTCUSDT",
|
|
370
|
-
// "p": "
|
|
367
|
+
// "p": "76521",
|
|
371
368
|
// "r": "0.0012",
|
|
372
369
|
// "tr": "0.0012",
|
|
373
370
|
// "h": "77196.3",
|
|
@@ -393,10 +390,10 @@ export default class mexc extends mexcRest {
|
|
|
393
390
|
'low': this.safeNumber(ticker, 'l'),
|
|
394
391
|
'close': price,
|
|
395
392
|
'last': price,
|
|
396
|
-
'bid': this.
|
|
397
|
-
'bidVolume': this.
|
|
398
|
-
'ask': this.
|
|
399
|
-
'askVolume': this.
|
|
393
|
+
'bid': this.safeNumber2(ticker, 'b', 'bidPrice'),
|
|
394
|
+
'bidVolume': this.safeNumber2(ticker, 'B', 'bidQuantity'),
|
|
395
|
+
'ask': this.safeNumber2(ticker, 'a', 'askPrice'),
|
|
396
|
+
'askVolume': this.safeNumber2(ticker, 'A', 'askQuantity'),
|
|
400
397
|
'vwap': undefined,
|
|
401
398
|
'previousClose': undefined,
|
|
402
399
|
'change': undefined,
|
|
@@ -433,7 +430,7 @@ export default class mexc extends mexcRest {
|
|
|
433
430
|
for (let i = 0; i < symbols.length; i++) {
|
|
434
431
|
if (isSpot) {
|
|
435
432
|
const market = this.market(symbols[i]);
|
|
436
|
-
topics.push('spot@public.bookTicker.v3.api@' + market['id']);
|
|
433
|
+
topics.push('spot@public.aggre.bookTicker.v3.api.pb@100ms@' + market['id']);
|
|
437
434
|
}
|
|
438
435
|
messageHashes.push('bidask:' + symbols[i]);
|
|
439
436
|
}
|
|
@@ -541,7 +538,7 @@ export default class mexc extends mexcRest {
|
|
|
541
538
|
/**
|
|
542
539
|
* @method
|
|
543
540
|
* @name mexc#watchOHLCV
|
|
544
|
-
* @see https://
|
|
541
|
+
* @see https://www.mexc.com/api-docs/spot-v3/websocket-market-streams#trade-streams
|
|
545
542
|
* @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
546
543
|
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
|
547
544
|
* @param {string} timeframe the length of time each candle represents
|
|
@@ -559,7 +556,7 @@ export default class mexc extends mexcRest {
|
|
|
559
556
|
const messageHash = 'candles:' + symbol + ':' + timeframe;
|
|
560
557
|
let ohlcv = undefined;
|
|
561
558
|
if (market['spot']) {
|
|
562
|
-
const channel = 'spot@public.kline.v3.api@' + market['id'] + '@' + timeframeId;
|
|
559
|
+
const channel = 'spot@public.kline.v3.api.pb@' + market['id'] + '@' + timeframeId;
|
|
563
560
|
ohlcv = await this.watchSpotPublic(channel, messageHash, params);
|
|
564
561
|
}
|
|
565
562
|
else {
|
|
@@ -621,17 +618,47 @@ export default class mexc extends mexcRest {
|
|
|
621
618
|
// "symbol": "BTC_USDT",
|
|
622
619
|
// "ts": 1651230713067
|
|
623
620
|
// }
|
|
621
|
+
// protobuf
|
|
622
|
+
// {
|
|
623
|
+
// "channel":"spot@public.kline.v3.api.pb@BTCUSDT@Min1",
|
|
624
|
+
// "symbol":"BTCUSDT",
|
|
625
|
+
// "symbolId":"2fb942154ef44a4ab2ef98c8afb6a4a7",
|
|
626
|
+
// "createTime":"1754737941062",
|
|
627
|
+
// "publicSpotKline":{
|
|
628
|
+
// "interval":"Min1",
|
|
629
|
+
// "windowStart":"1754737920",
|
|
630
|
+
// "openingPrice":"117317.31",
|
|
631
|
+
// "closingPrice":"117325.26",
|
|
632
|
+
// "highestPrice":"117341",
|
|
633
|
+
// "lowestPrice":"117317.3",
|
|
634
|
+
// "volume":"3.12599854",
|
|
635
|
+
// "amount":"366804.43",
|
|
636
|
+
// "windowEnd":"1754737980"
|
|
637
|
+
// }
|
|
638
|
+
// }
|
|
624
639
|
//
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
640
|
+
let parsed = undefined;
|
|
641
|
+
let symbol = undefined;
|
|
642
|
+
let timeframe = undefined;
|
|
643
|
+
if ('publicSpotKline' in message) {
|
|
644
|
+
symbol = this.symbol(this.safeString(message, 'symbol'));
|
|
645
|
+
const data = this.safeDict(message, 'publicSpotKline', {});
|
|
646
|
+
const timeframeId = this.safeString(data, 'interval');
|
|
647
|
+
timeframe = this.findTimeframe(timeframeId, this.options['timeframes']);
|
|
648
|
+
parsed = this.parseWsOHLCV(data, this.safeMarket(symbol));
|
|
649
|
+
}
|
|
650
|
+
else {
|
|
651
|
+
const d = this.safeValue2(message, 'd', 'data', {});
|
|
652
|
+
const rawOhlcv = this.safeValue(d, 'k', d);
|
|
653
|
+
const timeframeId = this.safeString2(rawOhlcv, 'i', 'interval');
|
|
654
|
+
const timeframes = this.safeValue(this.options, 'timeframes', {});
|
|
655
|
+
timeframe = this.findTimeframe(timeframeId, timeframes);
|
|
656
|
+
const marketId = this.safeString2(message, 's', 'symbol');
|
|
657
|
+
const market = this.safeMarket(marketId);
|
|
658
|
+
symbol = market['symbol'];
|
|
659
|
+
parsed = this.parseWsOHLCV(rawOhlcv, market);
|
|
660
|
+
}
|
|
633
661
|
const messageHash = 'candles:' + symbol + ':' + timeframe;
|
|
634
|
-
const parsed = this.parseWsOHLCV(rawOhlcv, market);
|
|
635
662
|
this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
|
|
636
663
|
let stored = this.safeValue(this.ohlcvs[symbol], timeframe);
|
|
637
664
|
if (stored === undefined) {
|
|
@@ -674,25 +701,37 @@ export default class mexc extends mexcRest {
|
|
|
674
701
|
// "rh": 27301.8,
|
|
675
702
|
// "rl": 27301.8
|
|
676
703
|
// }
|
|
704
|
+
// protobuf
|
|
705
|
+
//
|
|
706
|
+
// "interval":"Min1",
|
|
707
|
+
// "windowStart":"1754737920",
|
|
708
|
+
// "openingPrice":"117317.31",
|
|
709
|
+
// "closingPrice":"117325.26",
|
|
710
|
+
// "highestPrice":"117341",
|
|
711
|
+
// "lowestPrice":"117317.3",
|
|
712
|
+
// "volume":"3.12599854",
|
|
713
|
+
// "amount":"366804.43",
|
|
714
|
+
// "windowEnd":"1754737980"
|
|
677
715
|
//
|
|
678
716
|
return [
|
|
679
|
-
this.
|
|
680
|
-
this.
|
|
681
|
-
this.
|
|
682
|
-
this.
|
|
683
|
-
this.
|
|
684
|
-
this.safeNumber2(ohlcv, 'v', '
|
|
717
|
+
this.safeTimestamp2(ohlcv, 't', 'windowStart'),
|
|
718
|
+
this.safeNumber2(ohlcv, 'o', 'openingPrice'),
|
|
719
|
+
this.safeNumber2(ohlcv, 'h', 'highestPrice'),
|
|
720
|
+
this.safeNumber2(ohlcv, 'l', 'lowestPrice'),
|
|
721
|
+
this.safeNumber2(ohlcv, 'c', 'closingPrice'),
|
|
722
|
+
this.safeNumber2(ohlcv, 'v', 'volume'),
|
|
685
723
|
];
|
|
686
724
|
}
|
|
687
725
|
/**
|
|
688
726
|
* @method
|
|
689
727
|
* @name mexc#watchOrderBook
|
|
690
|
-
* @see https://
|
|
728
|
+
* @see https://www.mexc.com/api-docs/spot-v3/websocket-market-streams#trade-streams
|
|
691
729
|
* @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#public-channels
|
|
692
730
|
* @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
693
731
|
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
694
732
|
* @param {int} [limit] the maximum amount of order book entries to return
|
|
695
733
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
734
|
+
* @param {string} [params.frequency] the frequency of the order book updates, default is '10ms', can be '100ms' or '10ms
|
|
696
735
|
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
697
736
|
*/
|
|
698
737
|
async watchOrderBook(symbol, limit = undefined, params = {}) {
|
|
@@ -702,7 +741,9 @@ export default class mexc extends mexcRest {
|
|
|
702
741
|
const messageHash = 'orderbook:' + symbol;
|
|
703
742
|
let orderbook = undefined;
|
|
704
743
|
if (market['spot']) {
|
|
705
|
-
|
|
744
|
+
let frequency = undefined;
|
|
745
|
+
[frequency, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'frequency', '100ms');
|
|
746
|
+
const channel = 'spot@public.aggre.depth.v3.api.pb@' + frequency + '@' + market['id'];
|
|
706
747
|
orderbook = await this.watchSpotPublic(channel, messageHash, params);
|
|
707
748
|
}
|
|
708
749
|
else {
|
|
@@ -728,13 +769,13 @@ export default class mexc extends mexcRest {
|
|
|
728
769
|
// return the first index of the cache that can be applied to the orderbook or -1 if not possible
|
|
729
770
|
const nonce = this.safeInteger(orderbook, 'nonce');
|
|
730
771
|
const firstDelta = this.safeValue(cache, 0);
|
|
731
|
-
const firstDeltaNonce = this.
|
|
772
|
+
const firstDeltaNonce = this.safeIntegerN(firstDelta, ['r', 'version', 'fromVersion']);
|
|
732
773
|
if (nonce < firstDeltaNonce - 1) {
|
|
733
774
|
return -1;
|
|
734
775
|
}
|
|
735
776
|
for (let i = 0; i < cache.length; i++) {
|
|
736
777
|
const delta = cache[i];
|
|
737
|
-
const deltaNonce = this.
|
|
778
|
+
const deltaNonce = this.safeIntegerN(delta, ['r', 'version', 'fromVersion']);
|
|
738
779
|
if (deltaNonce >= nonce) {
|
|
739
780
|
return i;
|
|
740
781
|
}
|
|
@@ -784,8 +825,31 @@ export default class mexc extends mexcRest {
|
|
|
784
825
|
// "symbol":"BTC_USDT",
|
|
785
826
|
// "ts":1651239652372
|
|
786
827
|
// }
|
|
828
|
+
// protofbuf
|
|
829
|
+
// {
|
|
830
|
+
// "channel":"spot@public.aggre.depth.v3.api.pb@100ms@BTCUSDT",
|
|
831
|
+
// "symbol":"BTCUSDT",
|
|
832
|
+
// "sendTime":"1754741322152",
|
|
833
|
+
// "publicAggreDepths":{
|
|
834
|
+
// "asks":[
|
|
835
|
+
// {
|
|
836
|
+
// "price":"117145.49",
|
|
837
|
+
// "quantity":"0"
|
|
838
|
+
// }
|
|
839
|
+
// ],
|
|
840
|
+
// "bids":[
|
|
841
|
+
// {
|
|
842
|
+
// "price":"117053.41",
|
|
843
|
+
// "quantity":"1.86837271"
|
|
844
|
+
// }
|
|
845
|
+
// ],
|
|
846
|
+
// "eventType":"spot@public.aggre.depth.v3.api.pb@100ms",
|
|
847
|
+
// "fromVersion":"43296363236",
|
|
848
|
+
// "toVersion":"43296363255"
|
|
849
|
+
// }
|
|
850
|
+
// }
|
|
787
851
|
//
|
|
788
|
-
const data = this.
|
|
852
|
+
const data = this.safeDictN(message, ['d', 'data', 'publicAggreDepths']);
|
|
789
853
|
const marketId = this.safeString2(message, 's', 'symbol');
|
|
790
854
|
const symbol = this.safeSymbol(marketId);
|
|
791
855
|
const messageHash = 'orderbook:' + symbol;
|
|
@@ -807,9 +871,10 @@ export default class mexc extends mexcRest {
|
|
|
807
871
|
}
|
|
808
872
|
try {
|
|
809
873
|
this.handleDelta(storedOrderBook, data);
|
|
810
|
-
const timestamp = this.
|
|
874
|
+
const timestamp = this.safeIntegerN(message, ['t', 'ts', 'sendTime']);
|
|
811
875
|
storedOrderBook['timestamp'] = timestamp;
|
|
812
876
|
storedOrderBook['datetime'] = this.iso8601(timestamp);
|
|
877
|
+
storedOrderBook['nonce'] = this.safeInteger(data, 'fromVersion');
|
|
813
878
|
}
|
|
814
879
|
catch (e) {
|
|
815
880
|
delete client.subscriptions[messageHash];
|
|
@@ -830,15 +895,15 @@ export default class mexc extends mexcRest {
|
|
|
830
895
|
bookside.storeArray(bidask);
|
|
831
896
|
}
|
|
832
897
|
else {
|
|
833
|
-
const price = this.
|
|
834
|
-
const amount = this.
|
|
898
|
+
const price = this.safeFloat2(bidask, 'p', 'price');
|
|
899
|
+
const amount = this.safeFloat2(bidask, 'v', 'quantity');
|
|
835
900
|
bookside.store(price, amount);
|
|
836
901
|
}
|
|
837
902
|
}
|
|
838
903
|
}
|
|
839
904
|
handleDelta(orderbook, delta) {
|
|
840
905
|
const existingNonce = this.safeInteger(orderbook, 'nonce');
|
|
841
|
-
const deltaNonce = this.
|
|
906
|
+
const deltaNonce = this.safeIntegerN(delta, ['r', 'version', 'fromVersion']);
|
|
842
907
|
if (deltaNonce < existingNonce) {
|
|
843
908
|
// even when doing < comparison, this happens: https://app.travis-ci.com/github/ccxt/ccxt/builds/269234741#L1809
|
|
844
909
|
// so, we just skip old updates
|
|
@@ -855,7 +920,7 @@ export default class mexc extends mexcRest {
|
|
|
855
920
|
/**
|
|
856
921
|
* @method
|
|
857
922
|
* @name mexc#watchTrades
|
|
858
|
-
* @see https://
|
|
923
|
+
* @see https://www.mexc.com/api-docs/spot-v3/websocket-market-streams#trade-streams
|
|
859
924
|
* @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#public-channels
|
|
860
925
|
* @description get the list of most recent trades for a particular symbol
|
|
861
926
|
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
@@ -871,7 +936,7 @@ export default class mexc extends mexcRest {
|
|
|
871
936
|
const messageHash = 'trades:' + symbol;
|
|
872
937
|
let trades = undefined;
|
|
873
938
|
if (market['spot']) {
|
|
874
|
-
const channel = 'spot@public.deals.v3.api@' + market['id'];
|
|
939
|
+
const channel = 'spot@public.aggre.deals.v3.api.pb@100ms@' + market['id'];
|
|
875
940
|
trades = await this.watchSpotPublic(channel, messageHash, params);
|
|
876
941
|
}
|
|
877
942
|
else {
|
|
@@ -887,6 +952,23 @@ export default class mexc extends mexcRest {
|
|
|
887
952
|
return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
|
|
888
953
|
}
|
|
889
954
|
handleTrades(client, message) {
|
|
955
|
+
// protobuf
|
|
956
|
+
// {
|
|
957
|
+
// "channel": "spot@public.aggre.deals.v3.api.pb@100ms@BTCUSDT",
|
|
958
|
+
// "publicdeals": {
|
|
959
|
+
// "dealsList": [
|
|
960
|
+
// {
|
|
961
|
+
// "price": "93220.00", // Trade price
|
|
962
|
+
// "quantity": "0.04438243", // Trade quantity
|
|
963
|
+
// "tradetype": 2, // Trade type (1: Buy, 2: Sell)
|
|
964
|
+
// "time": 1736409765051 // Trade time
|
|
965
|
+
// }
|
|
966
|
+
// ],
|
|
967
|
+
// "eventtype": "spot@public.aggre.deals.v3.api.pb@100ms" // Event type
|
|
968
|
+
// },
|
|
969
|
+
// "symbol": "BTCUSDT", // Trading pair
|
|
970
|
+
// "sendtime": 1736409765052 // Event time
|
|
971
|
+
// }
|
|
890
972
|
//
|
|
891
973
|
// {
|
|
892
974
|
// "c": "spot@public.deals.v3.api@BTCUSDT",
|
|
@@ -928,8 +1010,8 @@ export default class mexc extends mexcRest {
|
|
|
928
1010
|
stored = new ArrayCache(limit);
|
|
929
1011
|
this.trades[symbol] = stored;
|
|
930
1012
|
}
|
|
931
|
-
const d = this.
|
|
932
|
-
const trades = this.
|
|
1013
|
+
const d = this.safeDictN(message, ['d', 'data', 'publicAggreDeals']);
|
|
1014
|
+
const trades = this.safeList2(d, 'deals', 'dealsList', [d]);
|
|
933
1015
|
for (let j = 0; j < trades.length; j++) {
|
|
934
1016
|
let parsedTrade = undefined;
|
|
935
1017
|
if (market['spot']) {
|
|
@@ -945,7 +1027,7 @@ export default class mexc extends mexcRest {
|
|
|
945
1027
|
/**
|
|
946
1028
|
* @method
|
|
947
1029
|
* @name mexc#watchMyTrades
|
|
948
|
-
* @see https://
|
|
1030
|
+
* @see https://www.mexc.com/api-docs/spot-v3/websocket-user-data-streams#spot-account-deals
|
|
949
1031
|
* @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#private-channels
|
|
950
1032
|
* @description watches information on multiple trades made by the user
|
|
951
1033
|
* @param {string} symbol unified market symbol of the market trades were made in
|
|
@@ -967,7 +1049,7 @@ export default class mexc extends mexcRest {
|
|
|
967
1049
|
[type, params] = this.handleMarketTypeAndParams('watchMyTrades', market, params);
|
|
968
1050
|
let trades = undefined;
|
|
969
1051
|
if (type === 'spot') {
|
|
970
|
-
const channel = 'spot@private.deals.v3.api';
|
|
1052
|
+
const channel = 'spot@private.deals.v3.api.pb';
|
|
971
1053
|
trades = await this.watchSpotPrivate(channel, messageHash, params);
|
|
972
1054
|
}
|
|
973
1055
|
else {
|
|
@@ -996,11 +1078,27 @@ export default class mexc extends mexcRest {
|
|
|
996
1078
|
// "s": "BTCUSDT",
|
|
997
1079
|
// "t": 1678670940700
|
|
998
1080
|
// }
|
|
1081
|
+
// {
|
|
1082
|
+
// channel: "spot@private.deals.v3.api.pb",
|
|
1083
|
+
// symbol: "MXUSDT",
|
|
1084
|
+
// sendTime: 1736417034332,
|
|
1085
|
+
// privateDeals {
|
|
1086
|
+
// price: "3.6962",
|
|
1087
|
+
// quantity: "1",
|
|
1088
|
+
// amount: "3.6962",
|
|
1089
|
+
// tradeType: 2,
|
|
1090
|
+
// tradeId: "505979017439002624X1",
|
|
1091
|
+
// orderId: "C02__505979017439002624115",
|
|
1092
|
+
// feeAmount: "0.0003998377369698171",
|
|
1093
|
+
// feeCurrency: "MX",
|
|
1094
|
+
// time: 1736417034280
|
|
1095
|
+
// }
|
|
1096
|
+
// }
|
|
999
1097
|
//
|
|
1000
1098
|
const messageHash = 'myTrades';
|
|
1001
|
-
const data = this.
|
|
1099
|
+
const data = this.safeDictN(message, ['d', 'data', 'privateDeals']);
|
|
1002
1100
|
const futuresMarketId = this.safeString(data, 'symbol');
|
|
1003
|
-
const marketId = this.
|
|
1101
|
+
const marketId = this.safeString2(message, 's', 'symbol', futuresMarketId);
|
|
1004
1102
|
const market = this.safeMarket(marketId);
|
|
1005
1103
|
const symbol = market['symbol'];
|
|
1006
1104
|
let trade = undefined;
|
|
@@ -1023,7 +1121,7 @@ export default class mexc extends mexcRest {
|
|
|
1023
1121
|
}
|
|
1024
1122
|
parseWsTrade(trade, market = undefined) {
|
|
1025
1123
|
//
|
|
1026
|
-
// public trade
|
|
1124
|
+
// public trade (protobuf)
|
|
1027
1125
|
// {
|
|
1028
1126
|
// "p": "20382.70",
|
|
1029
1127
|
// "v": "0.043800",
|
|
@@ -1043,7 +1141,6 @@ export default class mexc extends mexcRest {
|
|
|
1043
1141
|
// "v": "5"
|
|
1044
1142
|
// }
|
|
1045
1143
|
//
|
|
1046
|
-
//
|
|
1047
1144
|
// d: {
|
|
1048
1145
|
// p: '1.0005',
|
|
1049
1146
|
// v: '5.71',
|
|
@@ -1058,23 +1155,37 @@ export default class mexc extends mexcRest {
|
|
|
1058
1155
|
// n: '0.005712855',
|
|
1059
1156
|
// N: 'USDT'
|
|
1060
1157
|
// }
|
|
1061
|
-
|
|
1062
|
-
|
|
1158
|
+
// protobuf
|
|
1159
|
+
//
|
|
1160
|
+
// {
|
|
1161
|
+
// price: "3.6962",
|
|
1162
|
+
// quantity: "1",
|
|
1163
|
+
// amount: "3.6962",
|
|
1164
|
+
// tradeType: 2,
|
|
1165
|
+
// tradeId: "505979017439002624X1",
|
|
1166
|
+
// orderId: "C02__505979017439002624115",
|
|
1167
|
+
// feeAmount: "0.0003998377369698171",
|
|
1168
|
+
// feeCurrency: "MX",
|
|
1169
|
+
// time: 1736417034280
|
|
1170
|
+
// }
|
|
1171
|
+
//
|
|
1172
|
+
let timestamp = this.safeInteger2(trade, 'T', 'time');
|
|
1173
|
+
let tradeId = this.safeString2(trade, 't', 'tradeId');
|
|
1063
1174
|
if (timestamp === undefined) {
|
|
1064
1175
|
timestamp = this.safeInteger(trade, 't');
|
|
1065
1176
|
tradeId = undefined;
|
|
1066
1177
|
}
|
|
1067
|
-
const priceString = this.
|
|
1068
|
-
const amountString = this.
|
|
1069
|
-
const rawSide = this.
|
|
1178
|
+
const priceString = this.safeString2(trade, 'p', 'price');
|
|
1179
|
+
const amountString = this.safeString2(trade, 'v', 'quantity');
|
|
1180
|
+
const rawSide = this.safeString2(trade, 'S', 'tradeType');
|
|
1070
1181
|
const side = (rawSide === '1') ? 'buy' : 'sell';
|
|
1071
1182
|
const isMaker = this.safeInteger(trade, 'm');
|
|
1072
|
-
const feeAmount = this.
|
|
1073
|
-
const feeCurrencyId = this.
|
|
1183
|
+
const feeAmount = this.safeString2(trade, 'n', 'feeAmount');
|
|
1184
|
+
const feeCurrencyId = this.safeString2(trade, 'N', 'feeCurrency');
|
|
1074
1185
|
return this.safeTrade({
|
|
1075
1186
|
'info': trade,
|
|
1076
1187
|
'id': tradeId,
|
|
1077
|
-
'order': this.
|
|
1188
|
+
'order': this.safeString2(trade, 'i', 'orderId'),
|
|
1078
1189
|
'timestamp': timestamp,
|
|
1079
1190
|
'datetime': this.iso8601(timestamp),
|
|
1080
1191
|
'symbol': this.safeSymbol(undefined, market),
|
|
@@ -1083,7 +1194,7 @@ export default class mexc extends mexcRest {
|
|
|
1083
1194
|
'takerOrMaker': (isMaker) ? 'maker' : 'taker',
|
|
1084
1195
|
'price': priceString,
|
|
1085
1196
|
'amount': amountString,
|
|
1086
|
-
'cost':
|
|
1197
|
+
'cost': this.safeString(trade, 'amount'),
|
|
1087
1198
|
'fee': {
|
|
1088
1199
|
'cost': feeAmount,
|
|
1089
1200
|
'currency': this.safeCurrencyCode(feeCurrencyId),
|
|
@@ -1093,7 +1204,7 @@ export default class mexc extends mexcRest {
|
|
|
1093
1204
|
/**
|
|
1094
1205
|
* @method
|
|
1095
1206
|
* @name mexc#watchOrders
|
|
1096
|
-
* @see https://
|
|
1207
|
+
* @see https://www.mexc.com/api-docs/spot-v3/websocket-user-data-streams#spot-account-orders
|
|
1097
1208
|
* @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#margin-account-orders
|
|
1098
1209
|
* @description watches information on multiple orders made by the user
|
|
1099
1210
|
* @param {string} symbol unified market symbol of the market orders were made in
|
|
@@ -1116,7 +1227,7 @@ export default class mexc extends mexcRest {
|
|
|
1116
1227
|
[type, params] = this.handleMarketTypeAndParams('watchOrders', market, params);
|
|
1117
1228
|
let orders = undefined;
|
|
1118
1229
|
if (type === 'spot') {
|
|
1119
|
-
const channel =
|
|
1230
|
+
const channel = 'spot@private.orders.v3.api.pb';
|
|
1120
1231
|
orders = await this.watchSpotPrivate(channel, messageHash, params);
|
|
1121
1232
|
}
|
|
1122
1233
|
else {
|
|
@@ -1192,11 +1303,18 @@ export default class mexc extends mexcRest {
|
|
|
1192
1303
|
// "s": "MXUSDT",
|
|
1193
1304
|
// "t":1661938138193
|
|
1194
1305
|
// }
|
|
1306
|
+
// protobuf
|
|
1307
|
+
// {
|
|
1308
|
+
// channel: "spot@private.orders.v3.api.pb",
|
|
1309
|
+
// symbol: "MXUSDT",
|
|
1310
|
+
// sendTime: 1736417034281,
|
|
1311
|
+
// privateOrders {}
|
|
1312
|
+
// }
|
|
1195
1313
|
//
|
|
1196
1314
|
const messageHash = 'orders';
|
|
1197
|
-
const data = this.
|
|
1315
|
+
const data = this.safeDictN(message, ['d', 'data', 'privateOrders']);
|
|
1198
1316
|
const futuresMarketId = this.safeString(data, 'symbol');
|
|
1199
|
-
const marketId = this.
|
|
1317
|
+
const marketId = this.safeString2(message, 's', 'symbol', futuresMarketId);
|
|
1200
1318
|
const market = this.safeMarket(marketId);
|
|
1201
1319
|
const symbol = market['symbol'];
|
|
1202
1320
|
let parsed = undefined;
|
|
@@ -1267,11 +1385,28 @@ export default class mexc extends mexcRest {
|
|
|
1267
1385
|
// "s":1,
|
|
1268
1386
|
// "i":"e03a5c7441e44ed899466a7140b71391",
|
|
1269
1387
|
// }
|
|
1388
|
+
// protofbuf spot order
|
|
1389
|
+
// {
|
|
1390
|
+
// "id":"C02__583905164440776704043",
|
|
1391
|
+
// "price":"0.001053",
|
|
1392
|
+
// "quantity":"2000",
|
|
1393
|
+
// "amount":"0",
|
|
1394
|
+
// "avgPrice":"0.001007",
|
|
1395
|
+
// "orderType":5,
|
|
1396
|
+
// "tradeType":1,
|
|
1397
|
+
// "remainAmount":"0.092",
|
|
1398
|
+
// "remainQuantity":"0",
|
|
1399
|
+
// "lastDealQuantity":"2000",
|
|
1400
|
+
// "cumulativeQuantity":"2000",
|
|
1401
|
+
// "cumulativeAmount":"2.014",
|
|
1402
|
+
// "status":2,
|
|
1403
|
+
// "createTime":"1754996075502"
|
|
1404
|
+
// }
|
|
1270
1405
|
//
|
|
1271
|
-
const timestamp = this.safeInteger(order, '
|
|
1272
|
-
const side = this.safeString(order, '
|
|
1273
|
-
const status = this.safeString(order, '
|
|
1274
|
-
const type = this.safeString(order, '
|
|
1406
|
+
const timestamp = this.safeInteger(order, 'createTime');
|
|
1407
|
+
const side = this.safeString(order, 'tradeType');
|
|
1408
|
+
const status = this.safeString(order, 'status');
|
|
1409
|
+
const type = this.safeString(order, 'orderType');
|
|
1275
1410
|
let fee = undefined;
|
|
1276
1411
|
const feeCurrency = this.safeString(order, 'N');
|
|
1277
1412
|
if (feeCurrency !== undefined) {
|
|
@@ -1281,8 +1416,8 @@ export default class mexc extends mexcRest {
|
|
|
1281
1416
|
};
|
|
1282
1417
|
}
|
|
1283
1418
|
return this.safeOrder({
|
|
1284
|
-
'id': this.safeString(order, '
|
|
1285
|
-
'clientOrderId': this.safeString(order, '
|
|
1419
|
+
'id': this.safeString(order, 'id'),
|
|
1420
|
+
'clientOrderId': this.safeString(order, 'clientOrderId'),
|
|
1286
1421
|
'timestamp': timestamp,
|
|
1287
1422
|
'datetime': this.iso8601(timestamp),
|
|
1288
1423
|
'lastTradeTimestamp': undefined,
|
|
@@ -1291,14 +1426,14 @@ export default class mexc extends mexcRest {
|
|
|
1291
1426
|
'type': this.parseWsOrderType(type),
|
|
1292
1427
|
'timeInForce': this.parseWsTimeInForce(type),
|
|
1293
1428
|
'side': (side === '1') ? 'buy' : 'sell',
|
|
1294
|
-
'price': this.safeString(order, '
|
|
1429
|
+
'price': this.safeString(order, 'price'),
|
|
1295
1430
|
'stopPrice': undefined,
|
|
1296
|
-
'triggerPrice':
|
|
1297
|
-
'average': this.safeString(order, '
|
|
1298
|
-
'amount': this.safeString(order, '
|
|
1299
|
-
'cost': this.safeString(order, '
|
|
1300
|
-
'filled': this.safeString(order, '
|
|
1301
|
-
'remaining': this.safeString(order, '
|
|
1431
|
+
'triggerPrice': undefined,
|
|
1432
|
+
'average': this.safeString(order, 'avgPrice'),
|
|
1433
|
+
'amount': this.safeString(order, 'quantity'),
|
|
1434
|
+
'cost': this.safeString(order, 'amount'),
|
|
1435
|
+
'filled': this.safeString(order, 'cumulativeQuantity'),
|
|
1436
|
+
'remaining': this.safeString(order, 'remainQuantity'),
|
|
1302
1437
|
'fee': fee,
|
|
1303
1438
|
'trades': undefined,
|
|
1304
1439
|
'info': order,
|
|
@@ -1321,7 +1456,7 @@ export default class mexc extends mexcRest {
|
|
|
1321
1456
|
parseWsOrderType(type) {
|
|
1322
1457
|
const types = {
|
|
1323
1458
|
'1': 'limit',
|
|
1324
|
-
'2':
|
|
1459
|
+
'2': 'limit',
|
|
1325
1460
|
'3': undefined,
|
|
1326
1461
|
'4': undefined,
|
|
1327
1462
|
'5': 'market',
|
|
@@ -1343,7 +1478,7 @@ export default class mexc extends mexcRest {
|
|
|
1343
1478
|
/**
|
|
1344
1479
|
* @method
|
|
1345
1480
|
* @name mexc#watchBalance
|
|
1346
|
-
* @see https://
|
|
1481
|
+
* @see https://www.mexc.com/api-docs/spot-v3/websocket-user-data-streams#spot-account-update
|
|
1347
1482
|
* @description watch balance and get the amount of funds available for trading or funds locked in orders
|
|
1348
1483
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1349
1484
|
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
|
@@ -1354,7 +1489,7 @@ export default class mexc extends mexcRest {
|
|
|
1354
1489
|
[type, params] = this.handleMarketTypeAndParams('watchBalance', undefined, params);
|
|
1355
1490
|
const messageHash = 'balance:' + type;
|
|
1356
1491
|
if (type === 'spot') {
|
|
1357
|
-
const channel = 'spot@private.account.v3.api';
|
|
1492
|
+
const channel = 'spot@private.account.v3.api.pb';
|
|
1358
1493
|
return await this.watchSpotPrivate(channel, messageHash, params);
|
|
1359
1494
|
}
|
|
1360
1495
|
else {
|
|
@@ -1393,23 +1528,23 @@ export default class mexc extends mexcRest {
|
|
|
1393
1528
|
// "ts": 1680059188190
|
|
1394
1529
|
// }
|
|
1395
1530
|
//
|
|
1396
|
-
const c = this.
|
|
1531
|
+
const c = this.safeString2(message, 'c', 'channel');
|
|
1397
1532
|
const type = (c === undefined) ? 'swap' : 'spot';
|
|
1398
1533
|
const messageHash = 'balance:' + type;
|
|
1399
|
-
const data = this.
|
|
1534
|
+
const data = this.safeDictN(message, ['d', 'data', 'privateAccount']);
|
|
1400
1535
|
const futuresTimestamp = this.safeInteger(message, 'ts');
|
|
1401
|
-
const timestamp = this.
|
|
1536
|
+
const timestamp = this.safeInteger2(data, 'c', 'time', futuresTimestamp);
|
|
1402
1537
|
if (!(type in this.balance)) {
|
|
1403
1538
|
this.balance[type] = {};
|
|
1404
1539
|
}
|
|
1405
1540
|
this.balance[type]['info'] = data;
|
|
1406
1541
|
this.balance[type]['timestamp'] = timestamp;
|
|
1407
1542
|
this.balance[type]['datetime'] = this.iso8601(timestamp);
|
|
1408
|
-
const currencyId = this.
|
|
1543
|
+
const currencyId = this.safeStringN(data, ['a', 'currency', 'vcoinName']);
|
|
1409
1544
|
const code = this.safeCurrencyCode(currencyId);
|
|
1410
1545
|
const account = this.account();
|
|
1411
|
-
account['
|
|
1412
|
-
account['used'] = this.
|
|
1546
|
+
account['total'] = this.safeStringN(data, ['f', 'availableBalance', 'balanceAmount']);
|
|
1547
|
+
account['used'] = this.safeStringN(data, ['l', 'frozenBalance', 'frozenAmount']);
|
|
1413
1548
|
this.balance[type][code] = account;
|
|
1414
1549
|
this.balance[type] = this.safeBalance(this.balance[type]);
|
|
1415
1550
|
client.resolve(this.balance[type], messageHash);
|
|
@@ -1429,14 +1564,7 @@ export default class mexc extends mexcRest {
|
|
|
1429
1564
|
let url = undefined;
|
|
1430
1565
|
let channel = undefined;
|
|
1431
1566
|
if (market['spot']) {
|
|
1432
|
-
|
|
1433
|
-
[miniTicker, params] = this.handleOptionAndParams(params, 'watchTicker', 'miniTicker');
|
|
1434
|
-
if (miniTicker) {
|
|
1435
|
-
channel = 'spot@public.miniTicker.v3.api@' + market['id'] + '@UTC+8';
|
|
1436
|
-
}
|
|
1437
|
-
else {
|
|
1438
|
-
channel = 'spot@public.bookTicker.v3.api@' + market['id'];
|
|
1439
|
-
}
|
|
1567
|
+
channel = 'spot@public.aggre.bookTicker.v3.api.pb@100ms@' + market['id'];
|
|
1440
1568
|
url = this.urls['api']['ws']['spot'];
|
|
1441
1569
|
params['unsubscribed'] = true;
|
|
1442
1570
|
await this.watchSpotPublic(channel, messageHash, params);
|
|
@@ -1476,34 +1604,33 @@ export default class mexc extends mexcRest {
|
|
|
1476
1604
|
const url = (isSpot) ? this.urls['api']['ws']['spot'] : this.urls['api']['ws']['swap'];
|
|
1477
1605
|
const request = {};
|
|
1478
1606
|
if (isSpot) {
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
}
|
|
1494
|
-
else {
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
request['
|
|
1506
|
-
request['params'] = topics;
|
|
1607
|
+
throw new NotSupported(this.id + ' watchTickers does not support spot markets');
|
|
1608
|
+
// let miniTicker = false;
|
|
1609
|
+
// [ miniTicker, params ] = this.handleOptionAndParams (params, 'watchTickers', 'miniTicker');
|
|
1610
|
+
// const topics = [];
|
|
1611
|
+
// if (!miniTicker) {
|
|
1612
|
+
// if (symbols === undefined) {
|
|
1613
|
+
// throw new ArgumentsRequired (this.id + ' watchTickers required symbols argument for the bookTicker channel');
|
|
1614
|
+
// }
|
|
1615
|
+
// const marketIds = this.marketIds (symbols);
|
|
1616
|
+
// for (let i = 0; i < marketIds.length; i++) {
|
|
1617
|
+
// const marketId = marketIds[i];
|
|
1618
|
+
// messageHashes.push ('unsubscribe:ticker:' + symbols[i]);
|
|
1619
|
+
// const channel = 'spot@public.bookTicker.v3.api@' + marketId;
|
|
1620
|
+
// topics.push (channel);
|
|
1621
|
+
// }
|
|
1622
|
+
// } else {
|
|
1623
|
+
// topics.push ('spot@public.miniTickers.v3.api@UTC+8');
|
|
1624
|
+
// if (symbols === undefined) {
|
|
1625
|
+
// messageHashes.push ('unsubscribe:spot:ticker');
|
|
1626
|
+
// } else {
|
|
1627
|
+
// for (let i = 0; i < symbols.length; i++) {
|
|
1628
|
+
// messageHashes.push ('unsubscribe:ticker:' + symbols[i]);
|
|
1629
|
+
// }
|
|
1630
|
+
// }
|
|
1631
|
+
// }
|
|
1632
|
+
// request['method'] = 'UNSUBSCRIPTION';
|
|
1633
|
+
// request['params'] = topics;
|
|
1507
1634
|
}
|
|
1508
1635
|
else {
|
|
1509
1636
|
request['method'] = 'unsub.tickers';
|
|
@@ -1541,7 +1668,7 @@ export default class mexc extends mexcRest {
|
|
|
1541
1668
|
for (let i = 0; i < symbols.length; i++) {
|
|
1542
1669
|
if (isSpot) {
|
|
1543
1670
|
const market = this.market(symbols[i]);
|
|
1544
|
-
topics.push('spot@public.bookTicker.v3.api@' + market['id']);
|
|
1671
|
+
topics.push('spot@public.aggre.bookTicker.v3.api.pb@100ms@' + market['id']);
|
|
1545
1672
|
}
|
|
1546
1673
|
messageHashes.push('unsubscribe:bidask:' + symbols[i]);
|
|
1547
1674
|
}
|
|
@@ -1575,7 +1702,7 @@ export default class mexc extends mexcRest {
|
|
|
1575
1702
|
let url = undefined;
|
|
1576
1703
|
if (market['spot']) {
|
|
1577
1704
|
url = this.urls['api']['ws']['spot'];
|
|
1578
|
-
const channel = 'spot@public.kline.v3.api@' + market['id'] + '@' + timeframeId;
|
|
1705
|
+
const channel = 'spot@public.kline.v3.api.pb@' + market['id'] + '@' + timeframeId;
|
|
1579
1706
|
params['unsubscribed'] = true;
|
|
1580
1707
|
await this.watchSpotPublic(channel, messageHash, params);
|
|
1581
1708
|
}
|
|
@@ -1598,6 +1725,7 @@ export default class mexc extends mexcRest {
|
|
|
1598
1725
|
* @description unWatches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
1599
1726
|
* @param {string} symbol unified array of symbols
|
|
1600
1727
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1728
|
+
* @param {string} [params.frequency] the frequency of the order book updates, default is '10ms', can be '100ms' or '10ms
|
|
1601
1729
|
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
1602
1730
|
*/
|
|
1603
1731
|
async unWatchOrderBook(symbol, params = {}) {
|
|
@@ -1608,7 +1736,9 @@ export default class mexc extends mexcRest {
|
|
|
1608
1736
|
let url = undefined;
|
|
1609
1737
|
if (market['spot']) {
|
|
1610
1738
|
url = this.urls['api']['ws']['spot'];
|
|
1611
|
-
|
|
1739
|
+
let frequency = undefined;
|
|
1740
|
+
[frequency, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'frequency', '100ms');
|
|
1741
|
+
const channel = 'spot@public.aggre.depth.v3.api.pb@' + frequency + '@' + market['id'];
|
|
1612
1742
|
params['unsubscribed'] = true;
|
|
1613
1743
|
await this.watchSpotPublic(channel, messageHash, params);
|
|
1614
1744
|
}
|
|
@@ -1641,7 +1771,7 @@ export default class mexc extends mexcRest {
|
|
|
1641
1771
|
let url = undefined;
|
|
1642
1772
|
if (market['spot']) {
|
|
1643
1773
|
url = this.urls['api']['ws']['spot'];
|
|
1644
|
-
const channel = 'spot@public.deals.v3.api@' + market['id'];
|
|
1774
|
+
const channel = 'spot@public.aggre.deals.v3.api.pb@100ms@' + market['id'];
|
|
1645
1775
|
params['unsubscribed'] = true;
|
|
1646
1776
|
await this.watchSpotPublic(channel, messageHash, params);
|
|
1647
1777
|
}
|
|
@@ -1764,6 +1894,7 @@ export default class mexc extends mexcRest {
|
|
|
1764
1894
|
const channel = this.safeString(parts, 1);
|
|
1765
1895
|
const methods = {
|
|
1766
1896
|
'public.increase.depth.v3.api': this.handleOrderBookSubscription,
|
|
1897
|
+
'public.aggre.depth.v3.api.pb': this.handleOrderBookSubscription,
|
|
1767
1898
|
};
|
|
1768
1899
|
const method = this.safeValue(methods, channel);
|
|
1769
1900
|
if (method !== undefined) {
|
|
@@ -1771,12 +1902,62 @@ export default class mexc extends mexcRest {
|
|
|
1771
1902
|
}
|
|
1772
1903
|
}
|
|
1773
1904
|
}
|
|
1905
|
+
handleProtobufMessage(client, message) {
|
|
1906
|
+
// protobuf message decoded
|
|
1907
|
+
// {
|
|
1908
|
+
// "channel":"spot@public.kline.v3.api.pb@BTCUSDT@Min1",
|
|
1909
|
+
// "symbol":"BTCUSDT",
|
|
1910
|
+
// "symbolId":"2fb942154ef44a4ab2ef98c8afb6a4a7",
|
|
1911
|
+
// "createTime":"1754737941062",
|
|
1912
|
+
// "publicSpotKline":{
|
|
1913
|
+
// "interval":"Min1",
|
|
1914
|
+
// "windowStart":"1754737920",
|
|
1915
|
+
// "openingPrice":"117317.31",
|
|
1916
|
+
// "closingPrice":"117325.26",
|
|
1917
|
+
// "highestPrice":"117341",
|
|
1918
|
+
// "lowestPrice":"117317.3",
|
|
1919
|
+
// "volume":"3.12599854",
|
|
1920
|
+
// "amount":"366804.43",
|
|
1921
|
+
// "windowEnd":"1754737980"
|
|
1922
|
+
// }
|
|
1923
|
+
// }
|
|
1924
|
+
const channel = this.safeString(message, 'channel');
|
|
1925
|
+
const channelParts = channel.split('@');
|
|
1926
|
+
const channelId = this.safeString(channelParts, 1);
|
|
1927
|
+
if (channelId === 'public.kline.v3.api.pb') {
|
|
1928
|
+
this.handleOHLCV(client, message);
|
|
1929
|
+
}
|
|
1930
|
+
else if (channelId === 'public.aggre.deals.v3.api.pb') {
|
|
1931
|
+
this.handleTrades(client, message);
|
|
1932
|
+
}
|
|
1933
|
+
else if (channelId === 'public.aggre.bookTicker.v3.api.pb') {
|
|
1934
|
+
this.handleTicker(client, message);
|
|
1935
|
+
}
|
|
1936
|
+
else if (channelId === 'public.aggre.depth.v3.api.pb') {
|
|
1937
|
+
this.handleOrderBook(client, message);
|
|
1938
|
+
}
|
|
1939
|
+
else if (channelId === 'private.account.v3.api.pb') {
|
|
1940
|
+
this.handleBalance(client, message);
|
|
1941
|
+
}
|
|
1942
|
+
else if (channelId === 'private.deals.v3.api.pb') {
|
|
1943
|
+
this.handleMyTrade(client, message);
|
|
1944
|
+
}
|
|
1945
|
+
else if (channelId === 'private.orders.v3.api.pb') {
|
|
1946
|
+
this.handleOrder(client, message);
|
|
1947
|
+
}
|
|
1948
|
+
return true;
|
|
1949
|
+
}
|
|
1774
1950
|
handleMessage(client, message) {
|
|
1775
1951
|
if (typeof message === 'string') {
|
|
1776
1952
|
if (message === 'Invalid listen key') {
|
|
1777
1953
|
const error = new AuthenticationError(this.id + ' invalid listen key');
|
|
1778
1954
|
client.reject(error);
|
|
1955
|
+
return;
|
|
1779
1956
|
}
|
|
1957
|
+
}
|
|
1958
|
+
if (this.isBinaryMessage(message)) {
|
|
1959
|
+
message = this.decodeProtoMsg(message);
|
|
1960
|
+
this.handleProtobufMessage(client, message);
|
|
1780
1961
|
return;
|
|
1781
1962
|
}
|
|
1782
1963
|
if ('msg' in message) {
|