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/dist/cjs/src/pro/mexc.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
3
5
|
var mexc$1 = require('../mexc.js');
|
|
4
6
|
var errors = require('../base/errors.js');
|
|
5
7
|
var Cache = require('../base/ws/Cache.js');
|
|
@@ -7,7 +9,7 @@ var sha256 = require('../static_dependencies/noble-hashes/sha256.js');
|
|
|
7
9
|
|
|
8
10
|
// ---------------------------------------------------------------------------
|
|
9
11
|
// ---------------------------------------------------------------------------
|
|
10
|
-
class mexc extends mexc$1 {
|
|
12
|
+
class mexc extends mexc$1["default"] {
|
|
11
13
|
describe() {
|
|
12
14
|
return this.deepExtend(super.describe(), {
|
|
13
15
|
'has': {
|
|
@@ -41,13 +43,14 @@ class mexc extends mexc$1 {
|
|
|
41
43
|
'urls': {
|
|
42
44
|
'api': {
|
|
43
45
|
'ws': {
|
|
44
|
-
'spot': 'wss://wbs.mexc.com/ws',
|
|
46
|
+
'spot': 'wss://wbs-api.mexc.com/ws',
|
|
45
47
|
'swap': 'wss://contract.mexc.com/edge',
|
|
46
48
|
},
|
|
47
49
|
},
|
|
48
50
|
},
|
|
49
51
|
'options': {
|
|
50
52
|
'listenKeyRefreshRate': 1200000,
|
|
53
|
+
'decompressBinary': false,
|
|
51
54
|
// TODO add reset connection after #16754 is merged
|
|
52
55
|
'timeframes': {
|
|
53
56
|
'1m': 'Min1',
|
|
@@ -91,15 +94,7 @@ class mexc extends mexc$1 {
|
|
|
91
94
|
const market = this.market(symbol);
|
|
92
95
|
const messageHash = 'ticker:' + market['symbol'];
|
|
93
96
|
if (market['spot']) {
|
|
94
|
-
|
|
95
|
-
[miniTicker, params] = this.handleOptionAndParams(params, 'watchTicker', 'miniTicker');
|
|
96
|
-
let channel = undefined;
|
|
97
|
-
if (miniTicker) {
|
|
98
|
-
channel = 'spot@public.miniTicker.v3.api@' + market['id'] + '@UTC+8';
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
channel = 'spot@public.bookTicker.v3.api@' + market['id'];
|
|
102
|
-
}
|
|
97
|
+
const channel = 'spot@public.aggre.bookTicker.v3.api.pb@100ms@' + market['id'];
|
|
103
98
|
return await this.watchSpotPublic(channel, messageHash, params);
|
|
104
99
|
}
|
|
105
100
|
else {
|
|
@@ -179,9 +174,9 @@ class mexc extends mexc$1 {
|
|
|
179
174
|
// }
|
|
180
175
|
//
|
|
181
176
|
this.handleBidAsk(client, message);
|
|
182
|
-
const rawTicker = this.
|
|
177
|
+
const rawTicker = this.safeDictN(message, ['d', 'data', 'publicAggreBookTicker']);
|
|
183
178
|
const marketId = this.safeString2(message, 's', 'symbol');
|
|
184
|
-
const timestamp = this.
|
|
179
|
+
const timestamp = this.safeInteger2(message, 't', 'sendtime');
|
|
185
180
|
const market = this.safeMarket(marketId);
|
|
186
181
|
const symbol = market['symbol'];
|
|
187
182
|
let ticker = undefined;
|
|
@@ -224,34 +219,33 @@ class mexc extends mexc$1 {
|
|
|
224
219
|
const url = (isSpot) ? this.urls['api']['ws']['spot'] : this.urls['api']['ws']['swap'];
|
|
225
220
|
const request = {};
|
|
226
221
|
if (isSpot) {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
}
|
|
242
|
-
else {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
request['
|
|
254
|
-
request['params'] = topics;
|
|
222
|
+
throw new errors.NotSupported(this.id + ' watchTickers does not support spot markets');
|
|
223
|
+
// let miniTicker = false;
|
|
224
|
+
// [ miniTicker, params ] = this.handleOptionAndParams (params, 'watchTickers', 'miniTicker');
|
|
225
|
+
// const topics = [];
|
|
226
|
+
// if (!miniTicker) {
|
|
227
|
+
// if (symbols === undefined) {
|
|
228
|
+
// throw new ArgumentsRequired (this.id + ' watchTickers required symbols argument for the bookTicker channel');
|
|
229
|
+
// }
|
|
230
|
+
// const marketIds = this.marketIds (symbols);
|
|
231
|
+
// for (let i = 0; i < marketIds.length; i++) {
|
|
232
|
+
// const marketId = marketIds[i];
|
|
233
|
+
// messageHashes.push ('ticker:' + symbols[i]);
|
|
234
|
+
// const channel = 'spot@public.bookTicker.v3.api@' + marketId;
|
|
235
|
+
// topics.push (channel);
|
|
236
|
+
// }
|
|
237
|
+
// } else {
|
|
238
|
+
// topics.push ('spot@public.miniTickers.v3.api@UTC+8');
|
|
239
|
+
// if (symbols === undefined) {
|
|
240
|
+
// messageHashes.push ('spot:ticker');
|
|
241
|
+
// } else {
|
|
242
|
+
// for (let i = 0; i < symbols.length; i++) {
|
|
243
|
+
// messageHashes.push ('ticker:' + symbols[i]);
|
|
244
|
+
// }
|
|
245
|
+
// }
|
|
246
|
+
// }
|
|
247
|
+
// request['method'] = 'SUBSCRIPTION';
|
|
248
|
+
// request['params'] = topics;
|
|
255
249
|
}
|
|
256
250
|
else {
|
|
257
251
|
request['method'] = 'sub.tickers';
|
|
@@ -356,6 +350,11 @@ class mexc extends mexc$1 {
|
|
|
356
350
|
client.resolve(result, topic);
|
|
357
351
|
}
|
|
358
352
|
parseWsTicker(ticker, market = undefined) {
|
|
353
|
+
// protobuf ticker
|
|
354
|
+
// "bidprice": "93387.28", // Best bid price
|
|
355
|
+
// "bidquantity": "3.73485", // Best bid quantity
|
|
356
|
+
// "askprice": "93387.29", // Best ask price
|
|
357
|
+
// "askquantity": "7.669875" // Best ask quantity
|
|
359
358
|
//
|
|
360
359
|
// spot
|
|
361
360
|
//
|
|
@@ -370,7 +369,7 @@ class mexc extends mexc$1 {
|
|
|
370
369
|
//
|
|
371
370
|
// {
|
|
372
371
|
// "s": "BTCUSDT",
|
|
373
|
-
// "p": "
|
|
372
|
+
// "p": "76521",
|
|
374
373
|
// "r": "0.0012",
|
|
375
374
|
// "tr": "0.0012",
|
|
376
375
|
// "h": "77196.3",
|
|
@@ -396,10 +395,10 @@ class mexc extends mexc$1 {
|
|
|
396
395
|
'low': this.safeNumber(ticker, 'l'),
|
|
397
396
|
'close': price,
|
|
398
397
|
'last': price,
|
|
399
|
-
'bid': this.
|
|
400
|
-
'bidVolume': this.
|
|
401
|
-
'ask': this.
|
|
402
|
-
'askVolume': this.
|
|
398
|
+
'bid': this.safeNumber2(ticker, 'b', 'bidPrice'),
|
|
399
|
+
'bidVolume': this.safeNumber2(ticker, 'B', 'bidQuantity'),
|
|
400
|
+
'ask': this.safeNumber2(ticker, 'a', 'askPrice'),
|
|
401
|
+
'askVolume': this.safeNumber2(ticker, 'A', 'askQuantity'),
|
|
403
402
|
'vwap': undefined,
|
|
404
403
|
'previousClose': undefined,
|
|
405
404
|
'change': undefined,
|
|
@@ -436,7 +435,7 @@ class mexc extends mexc$1 {
|
|
|
436
435
|
for (let i = 0; i < symbols.length; i++) {
|
|
437
436
|
if (isSpot) {
|
|
438
437
|
const market = this.market(symbols[i]);
|
|
439
|
-
topics.push('spot@public.bookTicker.v3.api@' + market['id']);
|
|
438
|
+
topics.push('spot@public.aggre.bookTicker.v3.api.pb@100ms@' + market['id']);
|
|
440
439
|
}
|
|
441
440
|
messageHashes.push('bidask:' + symbols[i]);
|
|
442
441
|
}
|
|
@@ -544,7 +543,7 @@ class mexc extends mexc$1 {
|
|
|
544
543
|
/**
|
|
545
544
|
* @method
|
|
546
545
|
* @name mexc#watchOHLCV
|
|
547
|
-
* @see https://
|
|
546
|
+
* @see https://www.mexc.com/api-docs/spot-v3/websocket-market-streams#trade-streams
|
|
548
547
|
* @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
549
548
|
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
|
550
549
|
* @param {string} timeframe the length of time each candle represents
|
|
@@ -562,7 +561,7 @@ class mexc extends mexc$1 {
|
|
|
562
561
|
const messageHash = 'candles:' + symbol + ':' + timeframe;
|
|
563
562
|
let ohlcv = undefined;
|
|
564
563
|
if (market['spot']) {
|
|
565
|
-
const channel = 'spot@public.kline.v3.api@' + market['id'] + '@' + timeframeId;
|
|
564
|
+
const channel = 'spot@public.kline.v3.api.pb@' + market['id'] + '@' + timeframeId;
|
|
566
565
|
ohlcv = await this.watchSpotPublic(channel, messageHash, params);
|
|
567
566
|
}
|
|
568
567
|
else {
|
|
@@ -624,17 +623,47 @@ class mexc extends mexc$1 {
|
|
|
624
623
|
// "symbol": "BTC_USDT",
|
|
625
624
|
// "ts": 1651230713067
|
|
626
625
|
// }
|
|
626
|
+
// protobuf
|
|
627
|
+
// {
|
|
628
|
+
// "channel":"spot@public.kline.v3.api.pb@BTCUSDT@Min1",
|
|
629
|
+
// "symbol":"BTCUSDT",
|
|
630
|
+
// "symbolId":"2fb942154ef44a4ab2ef98c8afb6a4a7",
|
|
631
|
+
// "createTime":"1754737941062",
|
|
632
|
+
// "publicSpotKline":{
|
|
633
|
+
// "interval":"Min1",
|
|
634
|
+
// "windowStart":"1754737920",
|
|
635
|
+
// "openingPrice":"117317.31",
|
|
636
|
+
// "closingPrice":"117325.26",
|
|
637
|
+
// "highestPrice":"117341",
|
|
638
|
+
// "lowestPrice":"117317.3",
|
|
639
|
+
// "volume":"3.12599854",
|
|
640
|
+
// "amount":"366804.43",
|
|
641
|
+
// "windowEnd":"1754737980"
|
|
642
|
+
// }
|
|
643
|
+
// }
|
|
627
644
|
//
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
645
|
+
let parsed = undefined;
|
|
646
|
+
let symbol = undefined;
|
|
647
|
+
let timeframe = undefined;
|
|
648
|
+
if ('publicSpotKline' in message) {
|
|
649
|
+
symbol = this.symbol(this.safeString(message, 'symbol'));
|
|
650
|
+
const data = this.safeDict(message, 'publicSpotKline', {});
|
|
651
|
+
const timeframeId = this.safeString(data, 'interval');
|
|
652
|
+
timeframe = this.findTimeframe(timeframeId, this.options['timeframes']);
|
|
653
|
+
parsed = this.parseWsOHLCV(data, this.safeMarket(symbol));
|
|
654
|
+
}
|
|
655
|
+
else {
|
|
656
|
+
const d = this.safeValue2(message, 'd', 'data', {});
|
|
657
|
+
const rawOhlcv = this.safeValue(d, 'k', d);
|
|
658
|
+
const timeframeId = this.safeString2(rawOhlcv, 'i', 'interval');
|
|
659
|
+
const timeframes = this.safeValue(this.options, 'timeframes', {});
|
|
660
|
+
timeframe = this.findTimeframe(timeframeId, timeframes);
|
|
661
|
+
const marketId = this.safeString2(message, 's', 'symbol');
|
|
662
|
+
const market = this.safeMarket(marketId);
|
|
663
|
+
symbol = market['symbol'];
|
|
664
|
+
parsed = this.parseWsOHLCV(rawOhlcv, market);
|
|
665
|
+
}
|
|
636
666
|
const messageHash = 'candles:' + symbol + ':' + timeframe;
|
|
637
|
-
const parsed = this.parseWsOHLCV(rawOhlcv, market);
|
|
638
667
|
this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
|
|
639
668
|
let stored = this.safeValue(this.ohlcvs[symbol], timeframe);
|
|
640
669
|
if (stored === undefined) {
|
|
@@ -677,25 +706,37 @@ class mexc extends mexc$1 {
|
|
|
677
706
|
// "rh": 27301.8,
|
|
678
707
|
// "rl": 27301.8
|
|
679
708
|
// }
|
|
709
|
+
// protobuf
|
|
710
|
+
//
|
|
711
|
+
// "interval":"Min1",
|
|
712
|
+
// "windowStart":"1754737920",
|
|
713
|
+
// "openingPrice":"117317.31",
|
|
714
|
+
// "closingPrice":"117325.26",
|
|
715
|
+
// "highestPrice":"117341",
|
|
716
|
+
// "lowestPrice":"117317.3",
|
|
717
|
+
// "volume":"3.12599854",
|
|
718
|
+
// "amount":"366804.43",
|
|
719
|
+
// "windowEnd":"1754737980"
|
|
680
720
|
//
|
|
681
721
|
return [
|
|
682
|
-
this.
|
|
683
|
-
this.
|
|
684
|
-
this.
|
|
685
|
-
this.
|
|
686
|
-
this.
|
|
687
|
-
this.safeNumber2(ohlcv, 'v', '
|
|
722
|
+
this.safeTimestamp2(ohlcv, 't', 'windowStart'),
|
|
723
|
+
this.safeNumber2(ohlcv, 'o', 'openingPrice'),
|
|
724
|
+
this.safeNumber2(ohlcv, 'h', 'highestPrice'),
|
|
725
|
+
this.safeNumber2(ohlcv, 'l', 'lowestPrice'),
|
|
726
|
+
this.safeNumber2(ohlcv, 'c', 'closingPrice'),
|
|
727
|
+
this.safeNumber2(ohlcv, 'v', 'volume'),
|
|
688
728
|
];
|
|
689
729
|
}
|
|
690
730
|
/**
|
|
691
731
|
* @method
|
|
692
732
|
* @name mexc#watchOrderBook
|
|
693
|
-
* @see https://
|
|
733
|
+
* @see https://www.mexc.com/api-docs/spot-v3/websocket-market-streams#trade-streams
|
|
694
734
|
* @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#public-channels
|
|
695
735
|
* @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
696
736
|
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
697
737
|
* @param {int} [limit] the maximum amount of order book entries to return
|
|
698
738
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
739
|
+
* @param {string} [params.frequency] the frequency of the order book updates, default is '10ms', can be '100ms' or '10ms
|
|
699
740
|
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
700
741
|
*/
|
|
701
742
|
async watchOrderBook(symbol, limit = undefined, params = {}) {
|
|
@@ -705,7 +746,9 @@ class mexc extends mexc$1 {
|
|
|
705
746
|
const messageHash = 'orderbook:' + symbol;
|
|
706
747
|
let orderbook = undefined;
|
|
707
748
|
if (market['spot']) {
|
|
708
|
-
|
|
749
|
+
let frequency = undefined;
|
|
750
|
+
[frequency, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'frequency', '100ms');
|
|
751
|
+
const channel = 'spot@public.aggre.depth.v3.api.pb@' + frequency + '@' + market['id'];
|
|
709
752
|
orderbook = await this.watchSpotPublic(channel, messageHash, params);
|
|
710
753
|
}
|
|
711
754
|
else {
|
|
@@ -731,13 +774,13 @@ class mexc extends mexc$1 {
|
|
|
731
774
|
// return the first index of the cache that can be applied to the orderbook or -1 if not possible
|
|
732
775
|
const nonce = this.safeInteger(orderbook, 'nonce');
|
|
733
776
|
const firstDelta = this.safeValue(cache, 0);
|
|
734
|
-
const firstDeltaNonce = this.
|
|
777
|
+
const firstDeltaNonce = this.safeIntegerN(firstDelta, ['r', 'version', 'fromVersion']);
|
|
735
778
|
if (nonce < firstDeltaNonce - 1) {
|
|
736
779
|
return -1;
|
|
737
780
|
}
|
|
738
781
|
for (let i = 0; i < cache.length; i++) {
|
|
739
782
|
const delta = cache[i];
|
|
740
|
-
const deltaNonce = this.
|
|
783
|
+
const deltaNonce = this.safeIntegerN(delta, ['r', 'version', 'fromVersion']);
|
|
741
784
|
if (deltaNonce >= nonce) {
|
|
742
785
|
return i;
|
|
743
786
|
}
|
|
@@ -787,8 +830,31 @@ class mexc extends mexc$1 {
|
|
|
787
830
|
// "symbol":"BTC_USDT",
|
|
788
831
|
// "ts":1651239652372
|
|
789
832
|
// }
|
|
833
|
+
// protofbuf
|
|
834
|
+
// {
|
|
835
|
+
// "channel":"spot@public.aggre.depth.v3.api.pb@100ms@BTCUSDT",
|
|
836
|
+
// "symbol":"BTCUSDT",
|
|
837
|
+
// "sendTime":"1754741322152",
|
|
838
|
+
// "publicAggreDepths":{
|
|
839
|
+
// "asks":[
|
|
840
|
+
// {
|
|
841
|
+
// "price":"117145.49",
|
|
842
|
+
// "quantity":"0"
|
|
843
|
+
// }
|
|
844
|
+
// ],
|
|
845
|
+
// "bids":[
|
|
846
|
+
// {
|
|
847
|
+
// "price":"117053.41",
|
|
848
|
+
// "quantity":"1.86837271"
|
|
849
|
+
// }
|
|
850
|
+
// ],
|
|
851
|
+
// "eventType":"spot@public.aggre.depth.v3.api.pb@100ms",
|
|
852
|
+
// "fromVersion":"43296363236",
|
|
853
|
+
// "toVersion":"43296363255"
|
|
854
|
+
// }
|
|
855
|
+
// }
|
|
790
856
|
//
|
|
791
|
-
const data = this.
|
|
857
|
+
const data = this.safeDictN(message, ['d', 'data', 'publicAggreDepths']);
|
|
792
858
|
const marketId = this.safeString2(message, 's', 'symbol');
|
|
793
859
|
const symbol = this.safeSymbol(marketId);
|
|
794
860
|
const messageHash = 'orderbook:' + symbol;
|
|
@@ -810,9 +876,10 @@ class mexc extends mexc$1 {
|
|
|
810
876
|
}
|
|
811
877
|
try {
|
|
812
878
|
this.handleDelta(storedOrderBook, data);
|
|
813
|
-
const timestamp = this.
|
|
879
|
+
const timestamp = this.safeIntegerN(message, ['t', 'ts', 'sendTime']);
|
|
814
880
|
storedOrderBook['timestamp'] = timestamp;
|
|
815
881
|
storedOrderBook['datetime'] = this.iso8601(timestamp);
|
|
882
|
+
storedOrderBook['nonce'] = this.safeInteger(data, 'fromVersion');
|
|
816
883
|
}
|
|
817
884
|
catch (e) {
|
|
818
885
|
delete client.subscriptions[messageHash];
|
|
@@ -833,15 +900,15 @@ class mexc extends mexc$1 {
|
|
|
833
900
|
bookside.storeArray(bidask);
|
|
834
901
|
}
|
|
835
902
|
else {
|
|
836
|
-
const price = this.
|
|
837
|
-
const amount = this.
|
|
903
|
+
const price = this.safeFloat2(bidask, 'p', 'price');
|
|
904
|
+
const amount = this.safeFloat2(bidask, 'v', 'quantity');
|
|
838
905
|
bookside.store(price, amount);
|
|
839
906
|
}
|
|
840
907
|
}
|
|
841
908
|
}
|
|
842
909
|
handleDelta(orderbook, delta) {
|
|
843
910
|
const existingNonce = this.safeInteger(orderbook, 'nonce');
|
|
844
|
-
const deltaNonce = this.
|
|
911
|
+
const deltaNonce = this.safeIntegerN(delta, ['r', 'version', 'fromVersion']);
|
|
845
912
|
if (deltaNonce < existingNonce) {
|
|
846
913
|
// even when doing < comparison, this happens: https://app.travis-ci.com/github/ccxt/ccxt/builds/269234741#L1809
|
|
847
914
|
// so, we just skip old updates
|
|
@@ -858,7 +925,7 @@ class mexc extends mexc$1 {
|
|
|
858
925
|
/**
|
|
859
926
|
* @method
|
|
860
927
|
* @name mexc#watchTrades
|
|
861
|
-
* @see https://
|
|
928
|
+
* @see https://www.mexc.com/api-docs/spot-v3/websocket-market-streams#trade-streams
|
|
862
929
|
* @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#public-channels
|
|
863
930
|
* @description get the list of most recent trades for a particular symbol
|
|
864
931
|
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
@@ -874,7 +941,7 @@ class mexc extends mexc$1 {
|
|
|
874
941
|
const messageHash = 'trades:' + symbol;
|
|
875
942
|
let trades = undefined;
|
|
876
943
|
if (market['spot']) {
|
|
877
|
-
const channel = 'spot@public.deals.v3.api@' + market['id'];
|
|
944
|
+
const channel = 'spot@public.aggre.deals.v3.api.pb@100ms@' + market['id'];
|
|
878
945
|
trades = await this.watchSpotPublic(channel, messageHash, params);
|
|
879
946
|
}
|
|
880
947
|
else {
|
|
@@ -890,6 +957,23 @@ class mexc extends mexc$1 {
|
|
|
890
957
|
return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
|
|
891
958
|
}
|
|
892
959
|
handleTrades(client, message) {
|
|
960
|
+
// protobuf
|
|
961
|
+
// {
|
|
962
|
+
// "channel": "spot@public.aggre.deals.v3.api.pb@100ms@BTCUSDT",
|
|
963
|
+
// "publicdeals": {
|
|
964
|
+
// "dealsList": [
|
|
965
|
+
// {
|
|
966
|
+
// "price": "93220.00", // Trade price
|
|
967
|
+
// "quantity": "0.04438243", // Trade quantity
|
|
968
|
+
// "tradetype": 2, // Trade type (1: Buy, 2: Sell)
|
|
969
|
+
// "time": 1736409765051 // Trade time
|
|
970
|
+
// }
|
|
971
|
+
// ],
|
|
972
|
+
// "eventtype": "spot@public.aggre.deals.v3.api.pb@100ms" // Event type
|
|
973
|
+
// },
|
|
974
|
+
// "symbol": "BTCUSDT", // Trading pair
|
|
975
|
+
// "sendtime": 1736409765052 // Event time
|
|
976
|
+
// }
|
|
893
977
|
//
|
|
894
978
|
// {
|
|
895
979
|
// "c": "spot@public.deals.v3.api@BTCUSDT",
|
|
@@ -931,8 +1015,8 @@ class mexc extends mexc$1 {
|
|
|
931
1015
|
stored = new Cache.ArrayCache(limit);
|
|
932
1016
|
this.trades[symbol] = stored;
|
|
933
1017
|
}
|
|
934
|
-
const d = this.
|
|
935
|
-
const trades = this.
|
|
1018
|
+
const d = this.safeDictN(message, ['d', 'data', 'publicAggreDeals']);
|
|
1019
|
+
const trades = this.safeList2(d, 'deals', 'dealsList', [d]);
|
|
936
1020
|
for (let j = 0; j < trades.length; j++) {
|
|
937
1021
|
let parsedTrade = undefined;
|
|
938
1022
|
if (market['spot']) {
|
|
@@ -948,7 +1032,7 @@ class mexc extends mexc$1 {
|
|
|
948
1032
|
/**
|
|
949
1033
|
* @method
|
|
950
1034
|
* @name mexc#watchMyTrades
|
|
951
|
-
* @see https://
|
|
1035
|
+
* @see https://www.mexc.com/api-docs/spot-v3/websocket-user-data-streams#spot-account-deals
|
|
952
1036
|
* @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#private-channels
|
|
953
1037
|
* @description watches information on multiple trades made by the user
|
|
954
1038
|
* @param {string} symbol unified market symbol of the market trades were made in
|
|
@@ -970,7 +1054,7 @@ class mexc extends mexc$1 {
|
|
|
970
1054
|
[type, params] = this.handleMarketTypeAndParams('watchMyTrades', market, params);
|
|
971
1055
|
let trades = undefined;
|
|
972
1056
|
if (type === 'spot') {
|
|
973
|
-
const channel = 'spot@private.deals.v3.api';
|
|
1057
|
+
const channel = 'spot@private.deals.v3.api.pb';
|
|
974
1058
|
trades = await this.watchSpotPrivate(channel, messageHash, params);
|
|
975
1059
|
}
|
|
976
1060
|
else {
|
|
@@ -999,11 +1083,27 @@ class mexc extends mexc$1 {
|
|
|
999
1083
|
// "s": "BTCUSDT",
|
|
1000
1084
|
// "t": 1678670940700
|
|
1001
1085
|
// }
|
|
1086
|
+
// {
|
|
1087
|
+
// channel: "spot@private.deals.v3.api.pb",
|
|
1088
|
+
// symbol: "MXUSDT",
|
|
1089
|
+
// sendTime: 1736417034332,
|
|
1090
|
+
// privateDeals {
|
|
1091
|
+
// price: "3.6962",
|
|
1092
|
+
// quantity: "1",
|
|
1093
|
+
// amount: "3.6962",
|
|
1094
|
+
// tradeType: 2,
|
|
1095
|
+
// tradeId: "505979017439002624X1",
|
|
1096
|
+
// orderId: "C02__505979017439002624115",
|
|
1097
|
+
// feeAmount: "0.0003998377369698171",
|
|
1098
|
+
// feeCurrency: "MX",
|
|
1099
|
+
// time: 1736417034280
|
|
1100
|
+
// }
|
|
1101
|
+
// }
|
|
1002
1102
|
//
|
|
1003
1103
|
const messageHash = 'myTrades';
|
|
1004
|
-
const data = this.
|
|
1104
|
+
const data = this.safeDictN(message, ['d', 'data', 'privateDeals']);
|
|
1005
1105
|
const futuresMarketId = this.safeString(data, 'symbol');
|
|
1006
|
-
const marketId = this.
|
|
1106
|
+
const marketId = this.safeString2(message, 's', 'symbol', futuresMarketId);
|
|
1007
1107
|
const market = this.safeMarket(marketId);
|
|
1008
1108
|
const symbol = market['symbol'];
|
|
1009
1109
|
let trade = undefined;
|
|
@@ -1026,7 +1126,7 @@ class mexc extends mexc$1 {
|
|
|
1026
1126
|
}
|
|
1027
1127
|
parseWsTrade(trade, market = undefined) {
|
|
1028
1128
|
//
|
|
1029
|
-
// public trade
|
|
1129
|
+
// public trade (protobuf)
|
|
1030
1130
|
// {
|
|
1031
1131
|
// "p": "20382.70",
|
|
1032
1132
|
// "v": "0.043800",
|
|
@@ -1046,7 +1146,6 @@ class mexc extends mexc$1 {
|
|
|
1046
1146
|
// "v": "5"
|
|
1047
1147
|
// }
|
|
1048
1148
|
//
|
|
1049
|
-
//
|
|
1050
1149
|
// d: {
|
|
1051
1150
|
// p: '1.0005',
|
|
1052
1151
|
// v: '5.71',
|
|
@@ -1061,23 +1160,37 @@ class mexc extends mexc$1 {
|
|
|
1061
1160
|
// n: '0.005712855',
|
|
1062
1161
|
// N: 'USDT'
|
|
1063
1162
|
// }
|
|
1064
|
-
|
|
1065
|
-
|
|
1163
|
+
// protobuf
|
|
1164
|
+
//
|
|
1165
|
+
// {
|
|
1166
|
+
// price: "3.6962",
|
|
1167
|
+
// quantity: "1",
|
|
1168
|
+
// amount: "3.6962",
|
|
1169
|
+
// tradeType: 2,
|
|
1170
|
+
// tradeId: "505979017439002624X1",
|
|
1171
|
+
// orderId: "C02__505979017439002624115",
|
|
1172
|
+
// feeAmount: "0.0003998377369698171",
|
|
1173
|
+
// feeCurrency: "MX",
|
|
1174
|
+
// time: 1736417034280
|
|
1175
|
+
// }
|
|
1176
|
+
//
|
|
1177
|
+
let timestamp = this.safeInteger2(trade, 'T', 'time');
|
|
1178
|
+
let tradeId = this.safeString2(trade, 't', 'tradeId');
|
|
1066
1179
|
if (timestamp === undefined) {
|
|
1067
1180
|
timestamp = this.safeInteger(trade, 't');
|
|
1068
1181
|
tradeId = undefined;
|
|
1069
1182
|
}
|
|
1070
|
-
const priceString = this.
|
|
1071
|
-
const amountString = this.
|
|
1072
|
-
const rawSide = this.
|
|
1183
|
+
const priceString = this.safeString2(trade, 'p', 'price');
|
|
1184
|
+
const amountString = this.safeString2(trade, 'v', 'quantity');
|
|
1185
|
+
const rawSide = this.safeString2(trade, 'S', 'tradeType');
|
|
1073
1186
|
const side = (rawSide === '1') ? 'buy' : 'sell';
|
|
1074
1187
|
const isMaker = this.safeInteger(trade, 'm');
|
|
1075
|
-
const feeAmount = this.
|
|
1076
|
-
const feeCurrencyId = this.
|
|
1188
|
+
const feeAmount = this.safeString2(trade, 'n', 'feeAmount');
|
|
1189
|
+
const feeCurrencyId = this.safeString2(trade, 'N', 'feeCurrency');
|
|
1077
1190
|
return this.safeTrade({
|
|
1078
1191
|
'info': trade,
|
|
1079
1192
|
'id': tradeId,
|
|
1080
|
-
'order': this.
|
|
1193
|
+
'order': this.safeString2(trade, 'i', 'orderId'),
|
|
1081
1194
|
'timestamp': timestamp,
|
|
1082
1195
|
'datetime': this.iso8601(timestamp),
|
|
1083
1196
|
'symbol': this.safeSymbol(undefined, market),
|
|
@@ -1086,7 +1199,7 @@ class mexc extends mexc$1 {
|
|
|
1086
1199
|
'takerOrMaker': (isMaker) ? 'maker' : 'taker',
|
|
1087
1200
|
'price': priceString,
|
|
1088
1201
|
'amount': amountString,
|
|
1089
|
-
'cost':
|
|
1202
|
+
'cost': this.safeString(trade, 'amount'),
|
|
1090
1203
|
'fee': {
|
|
1091
1204
|
'cost': feeAmount,
|
|
1092
1205
|
'currency': this.safeCurrencyCode(feeCurrencyId),
|
|
@@ -1096,7 +1209,7 @@ class mexc extends mexc$1 {
|
|
|
1096
1209
|
/**
|
|
1097
1210
|
* @method
|
|
1098
1211
|
* @name mexc#watchOrders
|
|
1099
|
-
* @see https://
|
|
1212
|
+
* @see https://www.mexc.com/api-docs/spot-v3/websocket-user-data-streams#spot-account-orders
|
|
1100
1213
|
* @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#margin-account-orders
|
|
1101
1214
|
* @description watches information on multiple orders made by the user
|
|
1102
1215
|
* @param {string} symbol unified market symbol of the market orders were made in
|
|
@@ -1119,7 +1232,7 @@ class mexc extends mexc$1 {
|
|
|
1119
1232
|
[type, params] = this.handleMarketTypeAndParams('watchOrders', market, params);
|
|
1120
1233
|
let orders = undefined;
|
|
1121
1234
|
if (type === 'spot') {
|
|
1122
|
-
const channel =
|
|
1235
|
+
const channel = 'spot@private.orders.v3.api.pb';
|
|
1123
1236
|
orders = await this.watchSpotPrivate(channel, messageHash, params);
|
|
1124
1237
|
}
|
|
1125
1238
|
else {
|
|
@@ -1195,11 +1308,18 @@ class mexc extends mexc$1 {
|
|
|
1195
1308
|
// "s": "MXUSDT",
|
|
1196
1309
|
// "t":1661938138193
|
|
1197
1310
|
// }
|
|
1311
|
+
// protobuf
|
|
1312
|
+
// {
|
|
1313
|
+
// channel: "spot@private.orders.v3.api.pb",
|
|
1314
|
+
// symbol: "MXUSDT",
|
|
1315
|
+
// sendTime: 1736417034281,
|
|
1316
|
+
// privateOrders {}
|
|
1317
|
+
// }
|
|
1198
1318
|
//
|
|
1199
1319
|
const messageHash = 'orders';
|
|
1200
|
-
const data = this.
|
|
1320
|
+
const data = this.safeDictN(message, ['d', 'data', 'privateOrders']);
|
|
1201
1321
|
const futuresMarketId = this.safeString(data, 'symbol');
|
|
1202
|
-
const marketId = this.
|
|
1322
|
+
const marketId = this.safeString2(message, 's', 'symbol', futuresMarketId);
|
|
1203
1323
|
const market = this.safeMarket(marketId);
|
|
1204
1324
|
const symbol = market['symbol'];
|
|
1205
1325
|
let parsed = undefined;
|
|
@@ -1270,11 +1390,28 @@ class mexc extends mexc$1 {
|
|
|
1270
1390
|
// "s":1,
|
|
1271
1391
|
// "i":"e03a5c7441e44ed899466a7140b71391",
|
|
1272
1392
|
// }
|
|
1393
|
+
// protofbuf spot order
|
|
1394
|
+
// {
|
|
1395
|
+
// "id":"C02__583905164440776704043",
|
|
1396
|
+
// "price":"0.001053",
|
|
1397
|
+
// "quantity":"2000",
|
|
1398
|
+
// "amount":"0",
|
|
1399
|
+
// "avgPrice":"0.001007",
|
|
1400
|
+
// "orderType":5,
|
|
1401
|
+
// "tradeType":1,
|
|
1402
|
+
// "remainAmount":"0.092",
|
|
1403
|
+
// "remainQuantity":"0",
|
|
1404
|
+
// "lastDealQuantity":"2000",
|
|
1405
|
+
// "cumulativeQuantity":"2000",
|
|
1406
|
+
// "cumulativeAmount":"2.014",
|
|
1407
|
+
// "status":2,
|
|
1408
|
+
// "createTime":"1754996075502"
|
|
1409
|
+
// }
|
|
1273
1410
|
//
|
|
1274
|
-
const timestamp = this.safeInteger(order, '
|
|
1275
|
-
const side = this.safeString(order, '
|
|
1276
|
-
const status = this.safeString(order, '
|
|
1277
|
-
const type = this.safeString(order, '
|
|
1411
|
+
const timestamp = this.safeInteger(order, 'createTime');
|
|
1412
|
+
const side = this.safeString(order, 'tradeType');
|
|
1413
|
+
const status = this.safeString(order, 'status');
|
|
1414
|
+
const type = this.safeString(order, 'orderType');
|
|
1278
1415
|
let fee = undefined;
|
|
1279
1416
|
const feeCurrency = this.safeString(order, 'N');
|
|
1280
1417
|
if (feeCurrency !== undefined) {
|
|
@@ -1284,8 +1421,8 @@ class mexc extends mexc$1 {
|
|
|
1284
1421
|
};
|
|
1285
1422
|
}
|
|
1286
1423
|
return this.safeOrder({
|
|
1287
|
-
'id': this.safeString(order, '
|
|
1288
|
-
'clientOrderId': this.safeString(order, '
|
|
1424
|
+
'id': this.safeString(order, 'id'),
|
|
1425
|
+
'clientOrderId': this.safeString(order, 'clientOrderId'),
|
|
1289
1426
|
'timestamp': timestamp,
|
|
1290
1427
|
'datetime': this.iso8601(timestamp),
|
|
1291
1428
|
'lastTradeTimestamp': undefined,
|
|
@@ -1294,14 +1431,14 @@ class mexc extends mexc$1 {
|
|
|
1294
1431
|
'type': this.parseWsOrderType(type),
|
|
1295
1432
|
'timeInForce': this.parseWsTimeInForce(type),
|
|
1296
1433
|
'side': (side === '1') ? 'buy' : 'sell',
|
|
1297
|
-
'price': this.safeString(order, '
|
|
1434
|
+
'price': this.safeString(order, 'price'),
|
|
1298
1435
|
'stopPrice': undefined,
|
|
1299
|
-
'triggerPrice':
|
|
1300
|
-
'average': this.safeString(order, '
|
|
1301
|
-
'amount': this.safeString(order, '
|
|
1302
|
-
'cost': this.safeString(order, '
|
|
1303
|
-
'filled': this.safeString(order, '
|
|
1304
|
-
'remaining': this.safeString(order, '
|
|
1436
|
+
'triggerPrice': undefined,
|
|
1437
|
+
'average': this.safeString(order, 'avgPrice'),
|
|
1438
|
+
'amount': this.safeString(order, 'quantity'),
|
|
1439
|
+
'cost': this.safeString(order, 'amount'),
|
|
1440
|
+
'filled': this.safeString(order, 'cumulativeQuantity'),
|
|
1441
|
+
'remaining': this.safeString(order, 'remainQuantity'),
|
|
1305
1442
|
'fee': fee,
|
|
1306
1443
|
'trades': undefined,
|
|
1307
1444
|
'info': order,
|
|
@@ -1324,7 +1461,7 @@ class mexc extends mexc$1 {
|
|
|
1324
1461
|
parseWsOrderType(type) {
|
|
1325
1462
|
const types = {
|
|
1326
1463
|
'1': 'limit',
|
|
1327
|
-
'2':
|
|
1464
|
+
'2': 'limit',
|
|
1328
1465
|
'3': undefined,
|
|
1329
1466
|
'4': undefined,
|
|
1330
1467
|
'5': 'market',
|
|
@@ -1346,7 +1483,7 @@ class mexc extends mexc$1 {
|
|
|
1346
1483
|
/**
|
|
1347
1484
|
* @method
|
|
1348
1485
|
* @name mexc#watchBalance
|
|
1349
|
-
* @see https://
|
|
1486
|
+
* @see https://www.mexc.com/api-docs/spot-v3/websocket-user-data-streams#spot-account-update
|
|
1350
1487
|
* @description watch balance and get the amount of funds available for trading or funds locked in orders
|
|
1351
1488
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1352
1489
|
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
|
@@ -1357,7 +1494,7 @@ class mexc extends mexc$1 {
|
|
|
1357
1494
|
[type, params] = this.handleMarketTypeAndParams('watchBalance', undefined, params);
|
|
1358
1495
|
const messageHash = 'balance:' + type;
|
|
1359
1496
|
if (type === 'spot') {
|
|
1360
|
-
const channel = 'spot@private.account.v3.api';
|
|
1497
|
+
const channel = 'spot@private.account.v3.api.pb';
|
|
1361
1498
|
return await this.watchSpotPrivate(channel, messageHash, params);
|
|
1362
1499
|
}
|
|
1363
1500
|
else {
|
|
@@ -1396,23 +1533,23 @@ class mexc extends mexc$1 {
|
|
|
1396
1533
|
// "ts": 1680059188190
|
|
1397
1534
|
// }
|
|
1398
1535
|
//
|
|
1399
|
-
const c = this.
|
|
1536
|
+
const c = this.safeString2(message, 'c', 'channel');
|
|
1400
1537
|
const type = (c === undefined) ? 'swap' : 'spot';
|
|
1401
1538
|
const messageHash = 'balance:' + type;
|
|
1402
|
-
const data = this.
|
|
1539
|
+
const data = this.safeDictN(message, ['d', 'data', 'privateAccount']);
|
|
1403
1540
|
const futuresTimestamp = this.safeInteger(message, 'ts');
|
|
1404
|
-
const timestamp = this.
|
|
1541
|
+
const timestamp = this.safeInteger2(data, 'c', 'time', futuresTimestamp);
|
|
1405
1542
|
if (!(type in this.balance)) {
|
|
1406
1543
|
this.balance[type] = {};
|
|
1407
1544
|
}
|
|
1408
1545
|
this.balance[type]['info'] = data;
|
|
1409
1546
|
this.balance[type]['timestamp'] = timestamp;
|
|
1410
1547
|
this.balance[type]['datetime'] = this.iso8601(timestamp);
|
|
1411
|
-
const currencyId = this.
|
|
1548
|
+
const currencyId = this.safeStringN(data, ['a', 'currency', 'vcoinName']);
|
|
1412
1549
|
const code = this.safeCurrencyCode(currencyId);
|
|
1413
1550
|
const account = this.account();
|
|
1414
|
-
account['
|
|
1415
|
-
account['used'] = this.
|
|
1551
|
+
account['total'] = this.safeStringN(data, ['f', 'availableBalance', 'balanceAmount']);
|
|
1552
|
+
account['used'] = this.safeStringN(data, ['l', 'frozenBalance', 'frozenAmount']);
|
|
1416
1553
|
this.balance[type][code] = account;
|
|
1417
1554
|
this.balance[type] = this.safeBalance(this.balance[type]);
|
|
1418
1555
|
client.resolve(this.balance[type], messageHash);
|
|
@@ -1432,14 +1569,7 @@ class mexc extends mexc$1 {
|
|
|
1432
1569
|
let url = undefined;
|
|
1433
1570
|
let channel = undefined;
|
|
1434
1571
|
if (market['spot']) {
|
|
1435
|
-
|
|
1436
|
-
[miniTicker, params] = this.handleOptionAndParams(params, 'watchTicker', 'miniTicker');
|
|
1437
|
-
if (miniTicker) {
|
|
1438
|
-
channel = 'spot@public.miniTicker.v3.api@' + market['id'] + '@UTC+8';
|
|
1439
|
-
}
|
|
1440
|
-
else {
|
|
1441
|
-
channel = 'spot@public.bookTicker.v3.api@' + market['id'];
|
|
1442
|
-
}
|
|
1572
|
+
channel = 'spot@public.aggre.bookTicker.v3.api.pb@100ms@' + market['id'];
|
|
1443
1573
|
url = this.urls['api']['ws']['spot'];
|
|
1444
1574
|
params['unsubscribed'] = true;
|
|
1445
1575
|
await this.watchSpotPublic(channel, messageHash, params);
|
|
@@ -1479,34 +1609,33 @@ class mexc extends mexc$1 {
|
|
|
1479
1609
|
const url = (isSpot) ? this.urls['api']['ws']['spot'] : this.urls['api']['ws']['swap'];
|
|
1480
1610
|
const request = {};
|
|
1481
1611
|
if (isSpot) {
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
}
|
|
1497
|
-
else {
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
request['
|
|
1509
|
-
request['params'] = topics;
|
|
1612
|
+
throw new errors.NotSupported(this.id + ' watchTickers does not support spot markets');
|
|
1613
|
+
// let miniTicker = false;
|
|
1614
|
+
// [ miniTicker, params ] = this.handleOptionAndParams (params, 'watchTickers', 'miniTicker');
|
|
1615
|
+
// const topics = [];
|
|
1616
|
+
// if (!miniTicker) {
|
|
1617
|
+
// if (symbols === undefined) {
|
|
1618
|
+
// throw new ArgumentsRequired (this.id + ' watchTickers required symbols argument for the bookTicker channel');
|
|
1619
|
+
// }
|
|
1620
|
+
// const marketIds = this.marketIds (symbols);
|
|
1621
|
+
// for (let i = 0; i < marketIds.length; i++) {
|
|
1622
|
+
// const marketId = marketIds[i];
|
|
1623
|
+
// messageHashes.push ('unsubscribe:ticker:' + symbols[i]);
|
|
1624
|
+
// const channel = 'spot@public.bookTicker.v3.api@' + marketId;
|
|
1625
|
+
// topics.push (channel);
|
|
1626
|
+
// }
|
|
1627
|
+
// } else {
|
|
1628
|
+
// topics.push ('spot@public.miniTickers.v3.api@UTC+8');
|
|
1629
|
+
// if (symbols === undefined) {
|
|
1630
|
+
// messageHashes.push ('unsubscribe:spot:ticker');
|
|
1631
|
+
// } else {
|
|
1632
|
+
// for (let i = 0; i < symbols.length; i++) {
|
|
1633
|
+
// messageHashes.push ('unsubscribe:ticker:' + symbols[i]);
|
|
1634
|
+
// }
|
|
1635
|
+
// }
|
|
1636
|
+
// }
|
|
1637
|
+
// request['method'] = 'UNSUBSCRIPTION';
|
|
1638
|
+
// request['params'] = topics;
|
|
1510
1639
|
}
|
|
1511
1640
|
else {
|
|
1512
1641
|
request['method'] = 'unsub.tickers';
|
|
@@ -1544,7 +1673,7 @@ class mexc extends mexc$1 {
|
|
|
1544
1673
|
for (let i = 0; i < symbols.length; i++) {
|
|
1545
1674
|
if (isSpot) {
|
|
1546
1675
|
const market = this.market(symbols[i]);
|
|
1547
|
-
topics.push('spot@public.bookTicker.v3.api@' + market['id']);
|
|
1676
|
+
topics.push('spot@public.aggre.bookTicker.v3.api.pb@100ms@' + market['id']);
|
|
1548
1677
|
}
|
|
1549
1678
|
messageHashes.push('unsubscribe:bidask:' + symbols[i]);
|
|
1550
1679
|
}
|
|
@@ -1578,7 +1707,7 @@ class mexc extends mexc$1 {
|
|
|
1578
1707
|
let url = undefined;
|
|
1579
1708
|
if (market['spot']) {
|
|
1580
1709
|
url = this.urls['api']['ws']['spot'];
|
|
1581
|
-
const channel = 'spot@public.kline.v3.api@' + market['id'] + '@' + timeframeId;
|
|
1710
|
+
const channel = 'spot@public.kline.v3.api.pb@' + market['id'] + '@' + timeframeId;
|
|
1582
1711
|
params['unsubscribed'] = true;
|
|
1583
1712
|
await this.watchSpotPublic(channel, messageHash, params);
|
|
1584
1713
|
}
|
|
@@ -1601,6 +1730,7 @@ class mexc extends mexc$1 {
|
|
|
1601
1730
|
* @description unWatches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
1602
1731
|
* @param {string} symbol unified array of symbols
|
|
1603
1732
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1733
|
+
* @param {string} [params.frequency] the frequency of the order book updates, default is '10ms', can be '100ms' or '10ms
|
|
1604
1734
|
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
1605
1735
|
*/
|
|
1606
1736
|
async unWatchOrderBook(symbol, params = {}) {
|
|
@@ -1611,7 +1741,9 @@ class mexc extends mexc$1 {
|
|
|
1611
1741
|
let url = undefined;
|
|
1612
1742
|
if (market['spot']) {
|
|
1613
1743
|
url = this.urls['api']['ws']['spot'];
|
|
1614
|
-
|
|
1744
|
+
let frequency = undefined;
|
|
1745
|
+
[frequency, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'frequency', '100ms');
|
|
1746
|
+
const channel = 'spot@public.aggre.depth.v3.api.pb@' + frequency + '@' + market['id'];
|
|
1615
1747
|
params['unsubscribed'] = true;
|
|
1616
1748
|
await this.watchSpotPublic(channel, messageHash, params);
|
|
1617
1749
|
}
|
|
@@ -1644,7 +1776,7 @@ class mexc extends mexc$1 {
|
|
|
1644
1776
|
let url = undefined;
|
|
1645
1777
|
if (market['spot']) {
|
|
1646
1778
|
url = this.urls['api']['ws']['spot'];
|
|
1647
|
-
const channel = 'spot@public.deals.v3.api@' + market['id'];
|
|
1779
|
+
const channel = 'spot@public.aggre.deals.v3.api.pb@100ms@' + market['id'];
|
|
1648
1780
|
params['unsubscribed'] = true;
|
|
1649
1781
|
await this.watchSpotPublic(channel, messageHash, params);
|
|
1650
1782
|
}
|
|
@@ -1767,6 +1899,7 @@ class mexc extends mexc$1 {
|
|
|
1767
1899
|
const channel = this.safeString(parts, 1);
|
|
1768
1900
|
const methods = {
|
|
1769
1901
|
'public.increase.depth.v3.api': this.handleOrderBookSubscription,
|
|
1902
|
+
'public.aggre.depth.v3.api.pb': this.handleOrderBookSubscription,
|
|
1770
1903
|
};
|
|
1771
1904
|
const method = this.safeValue(methods, channel);
|
|
1772
1905
|
if (method !== undefined) {
|
|
@@ -1774,12 +1907,62 @@ class mexc extends mexc$1 {
|
|
|
1774
1907
|
}
|
|
1775
1908
|
}
|
|
1776
1909
|
}
|
|
1910
|
+
handleProtobufMessage(client, message) {
|
|
1911
|
+
// protobuf message decoded
|
|
1912
|
+
// {
|
|
1913
|
+
// "channel":"spot@public.kline.v3.api.pb@BTCUSDT@Min1",
|
|
1914
|
+
// "symbol":"BTCUSDT",
|
|
1915
|
+
// "symbolId":"2fb942154ef44a4ab2ef98c8afb6a4a7",
|
|
1916
|
+
// "createTime":"1754737941062",
|
|
1917
|
+
// "publicSpotKline":{
|
|
1918
|
+
// "interval":"Min1",
|
|
1919
|
+
// "windowStart":"1754737920",
|
|
1920
|
+
// "openingPrice":"117317.31",
|
|
1921
|
+
// "closingPrice":"117325.26",
|
|
1922
|
+
// "highestPrice":"117341",
|
|
1923
|
+
// "lowestPrice":"117317.3",
|
|
1924
|
+
// "volume":"3.12599854",
|
|
1925
|
+
// "amount":"366804.43",
|
|
1926
|
+
// "windowEnd":"1754737980"
|
|
1927
|
+
// }
|
|
1928
|
+
// }
|
|
1929
|
+
const channel = this.safeString(message, 'channel');
|
|
1930
|
+
const channelParts = channel.split('@');
|
|
1931
|
+
const channelId = this.safeString(channelParts, 1);
|
|
1932
|
+
if (channelId === 'public.kline.v3.api.pb') {
|
|
1933
|
+
this.handleOHLCV(client, message);
|
|
1934
|
+
}
|
|
1935
|
+
else if (channelId === 'public.aggre.deals.v3.api.pb') {
|
|
1936
|
+
this.handleTrades(client, message);
|
|
1937
|
+
}
|
|
1938
|
+
else if (channelId === 'public.aggre.bookTicker.v3.api.pb') {
|
|
1939
|
+
this.handleTicker(client, message);
|
|
1940
|
+
}
|
|
1941
|
+
else if (channelId === 'public.aggre.depth.v3.api.pb') {
|
|
1942
|
+
this.handleOrderBook(client, message);
|
|
1943
|
+
}
|
|
1944
|
+
else if (channelId === 'private.account.v3.api.pb') {
|
|
1945
|
+
this.handleBalance(client, message);
|
|
1946
|
+
}
|
|
1947
|
+
else if (channelId === 'private.deals.v3.api.pb') {
|
|
1948
|
+
this.handleMyTrade(client, message);
|
|
1949
|
+
}
|
|
1950
|
+
else if (channelId === 'private.orders.v3.api.pb') {
|
|
1951
|
+
this.handleOrder(client, message);
|
|
1952
|
+
}
|
|
1953
|
+
return true;
|
|
1954
|
+
}
|
|
1777
1955
|
handleMessage(client, message) {
|
|
1778
1956
|
if (typeof message === 'string') {
|
|
1779
1957
|
if (message === 'Invalid listen key') {
|
|
1780
1958
|
const error = new errors.AuthenticationError(this.id + ' invalid listen key');
|
|
1781
1959
|
client.reject(error);
|
|
1960
|
+
return;
|
|
1782
1961
|
}
|
|
1962
|
+
}
|
|
1963
|
+
if (this.isBinaryMessage(message)) {
|
|
1964
|
+
message = this.decodeProtoMsg(message);
|
|
1965
|
+
this.handleProtobufMessage(client, message);
|
|
1783
1966
|
return;
|
|
1784
1967
|
}
|
|
1785
1968
|
if ('msg' in message) {
|
|
@@ -1825,4 +2008,4 @@ class mexc extends mexc$1 {
|
|
|
1825
2008
|
}
|
|
1826
2009
|
}
|
|
1827
2010
|
|
|
1828
|
-
|
|
2011
|
+
exports["default"] = mexc;
|