ccxt 4.5.18 → 4.5.20

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.
Files changed (152) hide show
  1. package/README.md +7 -6
  2. package/dist/ccxt.browser.min.js +40 -16
  3. package/dist/cjs/_virtual/index.cjs.js +1459 -9
  4. package/dist/cjs/ccxt.js +8 -2
  5. package/dist/cjs/src/abstract/dydx.js +11 -0
  6. package/dist/cjs/src/base/Exchange.js +164 -10
  7. package/dist/cjs/src/base/ws/Client.js +3 -1
  8. package/dist/cjs/src/binance.js +8 -1
  9. package/dist/cjs/src/bingx.js +20 -0
  10. package/dist/cjs/src/bitget.js +43 -41
  11. package/dist/cjs/src/bybit.js +21 -23
  12. package/dist/cjs/src/deribit.js +6 -0
  13. package/dist/cjs/src/dydx.js +2454 -0
  14. package/dist/cjs/src/gate.js +4 -4
  15. package/dist/cjs/src/hibachi.js +1 -1
  16. package/dist/cjs/src/hyperliquid.js +207 -9
  17. package/dist/cjs/src/kucoin.js +711 -109
  18. package/dist/cjs/src/mexc.js +2 -3
  19. package/dist/cjs/src/pro/binance.js +59 -144
  20. package/dist/cjs/src/pro/dydx.js +418 -0
  21. package/dist/cjs/src/pro/kraken.js +4 -3
  22. package/dist/cjs/src/pro/xt.js +218 -4
  23. package/dist/cjs/src/protobuf/mexc/compiled.cjs.js +1 -0
  24. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/base/v1beta1/coin.js +56 -0
  25. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/v1beta1/multisig.js +56 -0
  26. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/crypto/secp256k1/keys.js +48 -0
  27. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/tx/signing/v1beta1/signing.js +343 -0
  28. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/tx/v1beta1/tx.js +717 -0
  29. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/accountplus/tx.js +60 -0
  30. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/clob_pair.js +45 -0
  31. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order.js +380 -0
  32. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order_removals.js +72 -0
  33. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/tx.js +211 -0
  34. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/transfer.js +195 -0
  35. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/tx.js +49 -0
  36. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/subaccount.js +57 -0
  37. package/dist/cjs/src/static_dependencies/dydx-v4-client/google/protobuf/any.js +56 -0
  38. package/dist/cjs/src/static_dependencies/dydx-v4-client/helpers.js +79 -0
  39. package/dist/cjs/src/static_dependencies/dydx-v4-client/long/index.cjs.js +9 -0
  40. package/dist/cjs/src/static_dependencies/dydx-v4-client/onboarding.js +59 -0
  41. package/dist/cjs/src/static_dependencies/dydx-v4-client/registry.js +39 -0
  42. package/dist/cjs/src/static_dependencies/noble-hashes/pbkdf2.js +69 -0
  43. package/dist/cjs/src/static_dependencies/noble-hashes/ripemd160.js +108 -0
  44. package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +50 -1
  45. package/dist/cjs/src/static_dependencies/scure-base/index.js +29 -0
  46. package/dist/cjs/src/static_dependencies/scure-bip32/index.js +278 -0
  47. package/dist/cjs/src/static_dependencies/scure-bip39/index.js +97 -0
  48. package/dist/cjs/src/static_dependencies/scure-bip39/wordlists/english.js +2060 -0
  49. package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +2 -0
  50. package/dist/cjs/src/toobit.js +2 -1
  51. package/js/ccxt.d.ts +8 -2
  52. package/js/ccxt.js +6 -2
  53. package/js/src/abstract/binance.d.ts +7 -0
  54. package/js/src/abstract/binancecoinm.d.ts +7 -0
  55. package/js/src/abstract/binanceus.d.ts +7 -0
  56. package/js/src/abstract/binanceusdm.d.ts +7 -0
  57. package/js/src/abstract/bitget.d.ts +1 -0
  58. package/js/src/abstract/dydx.d.ts +61 -0
  59. package/js/src/abstract/dydx.js +11 -0
  60. package/js/src/abstract/kucoin.d.ts +1 -1
  61. package/js/src/abstract/kucoinfutures.d.ts +1 -1
  62. package/js/src/base/Exchange.d.ts +7 -0
  63. package/js/src/base/Exchange.js +163 -10
  64. package/js/src/base/ws/Client.js +3 -1
  65. package/js/src/binance.js +8 -1
  66. package/js/src/bingx.js +20 -0
  67. package/js/src/bitget.d.ts +3 -3
  68. package/js/src/bitget.js +43 -41
  69. package/js/src/bybit.d.ts +3 -3
  70. package/js/src/bybit.js +21 -23
  71. package/js/src/deribit.js +6 -0
  72. package/js/src/dydx.d.ts +364 -0
  73. package/js/src/dydx.js +2453 -0
  74. package/js/src/gate.d.ts +2 -2
  75. package/js/src/gate.js +4 -4
  76. package/js/src/hibachi.js +1 -1
  77. package/js/src/hyperliquid.d.ts +17 -0
  78. package/js/src/hyperliquid.js +207 -9
  79. package/js/src/kucoin.d.ts +48 -1
  80. package/js/src/kucoin.js +711 -109
  81. package/js/src/mexc.js +2 -3
  82. package/js/src/pro/binance.d.ts +2 -2
  83. package/js/src/pro/binance.js +59 -144
  84. package/js/src/pro/dydx.d.ts +81 -0
  85. package/js/src/pro/dydx.js +417 -0
  86. package/js/src/pro/kraken.js +4 -3
  87. package/js/src/pro/xt.d.ts +85 -2
  88. package/js/src/pro/xt.js +218 -4
  89. package/js/src/static_dependencies/dydx-v4-client/cosmos/base/v1beta1/coin.d.ts +90 -0
  90. package/js/src/static_dependencies/dydx-v4-client/cosmos/base/v1beta1/coin.js +163 -0
  91. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/keys.d.ts +26 -0
  92. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/keys.js +51 -0
  93. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/v1beta1/multisig.d.ts +48 -0
  94. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/v1beta1/multisig.js +85 -0
  95. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/secp256k1/keys.d.ts +40 -0
  96. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/secp256k1/keys.js +77 -0
  97. package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/signing/v1beta1/signing.d.ts +162 -0
  98. package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/signing/v1beta1/signing.js +329 -0
  99. package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/v1beta1/tx.d.ts +460 -0
  100. package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/v1beta1/tx.js +698 -0
  101. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/accountplus/tx.d.ts +127 -0
  102. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/accountplus/tx.js +286 -0
  103. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/block_rate_limit_config.d.ts +66 -0
  104. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/block_rate_limit_config.js +109 -0
  105. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/clob_pair.d.ts +127 -0
  106. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/clob_pair.js +257 -0
  107. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/equity_tier_limit_config.d.ts +48 -0
  108. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/equity_tier_limit_config.js +93 -0
  109. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/finalize_block.d.ts +23 -0
  110. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/finalize_block.js +43 -0
  111. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations.d.ts +92 -0
  112. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations.js +164 -0
  113. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations_config.d.ts +124 -0
  114. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations_config.js +196 -0
  115. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/matches.d.ts +159 -0
  116. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/matches.js +324 -0
  117. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order.d.ts +546 -0
  118. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order.js +872 -0
  119. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order_removals.d.ts +84 -0
  120. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order_removals.js +181 -0
  121. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/tx.d.ts +397 -0
  122. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/tx.js +757 -0
  123. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/transfer.d.ts +120 -0
  124. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/transfer.js +246 -0
  125. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/tx.d.ts +79 -0
  126. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/tx.js +147 -0
  127. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/asset_position.d.ts +32 -0
  128. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/asset_position.js +59 -0
  129. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/perpetual_position.d.ts +34 -0
  130. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/perpetual_position.js +66 -0
  131. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/subaccount.d.ts +62 -0
  132. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/subaccount.js +111 -0
  133. package/js/src/static_dependencies/dydx-v4-client/google/protobuf/any.d.ts +207 -0
  134. package/js/src/static_dependencies/dydx-v4-client/google/protobuf/any.js +50 -0
  135. package/js/src/static_dependencies/dydx-v4-client/helpers.d.ts +82 -0
  136. package/js/src/static_dependencies/dydx-v4-client/helpers.js +172 -0
  137. package/js/src/static_dependencies/dydx-v4-client/long/index.cjs +1473 -0
  138. package/js/src/static_dependencies/dydx-v4-client/long/index.d.cts +2 -0
  139. package/js/src/static_dependencies/dydx-v4-client/onboarding.d.ts +35 -0
  140. package/js/src/static_dependencies/dydx-v4-client/onboarding.js +56 -0
  141. package/js/src/static_dependencies/dydx-v4-client/registry.d.ts +7 -0
  142. package/js/src/static_dependencies/dydx-v4-client/registry.js +36 -0
  143. package/js/src/static_dependencies/noble-hashes/utils.d.ts +1 -0
  144. package/js/src/static_dependencies/noble-hashes/utils.js +4 -0
  145. package/js/src/static_dependencies/scure-bip32/index.d.ts +49 -0
  146. package/js/src/static_dependencies/scure-bip32/index.js +295 -0
  147. package/js/src/static_dependencies/scure-bip39/index.d.ts +54 -0
  148. package/js/src/static_dependencies/scure-bip39/index.js +140 -0
  149. package/js/src/static_dependencies/scure-bip39/wordlists/english.d.ts +1 -0
  150. package/js/src/static_dependencies/scure-bip39/wordlists/english.js +2054 -0
  151. package/js/src/toobit.js +2 -1
  152. package/package.json +9 -3
@@ -4,6 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var xt$1 = require('../xt.js');
6
6
  var Cache = require('../base/ws/Cache.js');
7
+ var errors = require('../base/errors.js');
7
8
 
8
9
  // ----------------------------------------------------------------------------
9
10
  // ---------------------------------------------------------------------------
@@ -13,10 +14,15 @@ class xt extends xt$1["default"] {
13
14
  'has': {
14
15
  'ws': true,
15
16
  'watchOHLCV': true,
17
+ 'unWatchOHLCV': true,
16
18
  'watchOrderBook': true,
19
+ 'unWatchOrderBook': true,
17
20
  'watchTicker': true,
21
+ 'unWatchTicker': true,
18
22
  'watchTickers': true,
23
+ 'unWatchTickers': true,
19
24
  'watchTrades': true,
25
+ 'unWatchTrades': true,
20
26
  'watchTradesForSymbols': false,
21
27
  'watchBalance': true,
22
28
  'watchOrders': true,
@@ -161,9 +167,10 @@ class xt extends xt$1["default"] {
161
167
  let type = undefined;
162
168
  [type, params] = this.handleMarketTypeAndParams(methodName, market, params);
163
169
  const isContract = (type !== 'spot');
170
+ const id = this.numberToString(this.milliseconds()) + name; // call back ID
164
171
  const subscribe = {
165
172
  'method': isContract ? 'SUBSCRIBE' : 'subscribe',
166
- 'id': this.numberToString(this.milliseconds()) + name, // call back ID
173
+ 'id': id,
167
174
  };
168
175
  if (privateAccess) {
169
176
  if (!isContract) {
@@ -189,8 +196,73 @@ class xt extends xt$1["default"] {
189
196
  if (isContract) {
190
197
  tail = privateAccess ? 'user' : 'market';
191
198
  }
199
+ const subscription = {
200
+ 'id': id,
201
+ };
202
+ const url = this.urls['api']['ws'][tradeType] + '/' + tail;
203
+ return await this.watch(url, messageHash, request, messageHash, subscription);
204
+ }
205
+ /**
206
+ * @ignore
207
+ * @method
208
+ * @description Connects to a websocket channel
209
+ * @see https://doc.xt.com/#websocket_privaterequestFormat
210
+ * @see https://doc.xt.com/#futures_market_websocket_v2base
211
+ * @param {string} messageHash the message hash of the subscription
212
+ * @param {string} name name of the channel
213
+ * @param {string} access public or private
214
+ * @param {string} methodName the name of the CCXT class method
215
+ * @param {string} topic topic of the subscription
216
+ * @param {object} [market] CCXT market
217
+ * @param {string[]} [symbols] unified market symbols
218
+ * @param {object} params extra parameters specific to the xt api
219
+ * @param {object} subscriptionParams extra parameters specific to the subscription
220
+ * @returns {object} data from the websocket stream
221
+ */
222
+ async unSubscribe(messageHash, name, access, methodName, topic, market = undefined, symbols = undefined, params = {}, subscriptionParams = {}) {
223
+ const privateAccess = access === 'private';
224
+ let type = undefined;
225
+ [type, params] = this.handleMarketTypeAndParams(methodName, market, params);
226
+ const isContract = (type !== 'spot');
227
+ const id = this.numberToString(this.milliseconds()) + name; // call back ID
228
+ const unsubscribe = {
229
+ 'method': isContract ? 'UNSUBSCRIBE' : 'unsubscribe',
230
+ 'id': id,
231
+ };
232
+ if (privateAccess) {
233
+ if (!isContract) {
234
+ unsubscribe['params'] = [name];
235
+ unsubscribe['listenKey'] = await this.getListenKey(isContract);
236
+ }
237
+ else {
238
+ const listenKey = await this.getListenKey(isContract);
239
+ const param = name + '@' + listenKey;
240
+ unsubscribe['params'] = [param];
241
+ }
242
+ }
243
+ else {
244
+ unsubscribe['params'] = [name];
245
+ }
246
+ const tradeType = isContract ? 'contract' : 'spot';
247
+ let subMessageHash = name + '::' + tradeType;
248
+ if (symbols !== undefined) {
249
+ subMessageHash = subMessageHash + '::' + symbols.join(',');
250
+ }
251
+ const request = this.extend(unsubscribe, params);
252
+ let tail = access;
253
+ if (isContract) {
254
+ tail = privateAccess ? 'user' : 'market';
255
+ }
192
256
  const url = this.urls['api']['ws'][tradeType] + '/' + tail;
193
- return await this.watch(url, messageHash, request, messageHash);
257
+ const subscription = {
258
+ 'unsubscribe': true,
259
+ 'id': id,
260
+ 'subMessageHashes': [subMessageHash],
261
+ 'messageHashes': [messageHash],
262
+ 'symbols': symbols,
263
+ 'topic': topic,
264
+ };
265
+ return await this.watch(url, messageHash, this.extend(request, params), messageHash, this.extend(subscription, subscriptionParams));
194
266
  }
195
267
  /**
196
268
  * @method
@@ -215,7 +287,29 @@ class xt extends xt$1["default"] {
215
287
  }
216
288
  /**
217
289
  * @method
218
- * @name xt#watchTicker
290
+ * @name xt#unWatchTicker
291
+ * @description stops watching a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
292
+ * @see https://doc.xt.com/#websocket_publictickerRealTime
293
+ * @see https://doc.xt.com/#futures_market_websocket_v2tickerRealTime
294
+ * @see https://doc.xt.com/#futures_market_websocket_v2aggTickerRealTime
295
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
296
+ * @param {object} params extra parameters specific to the xt api endpoint
297
+ * @param {string} [params.method] 'agg_ticker' (contract only) or 'ticker', default = 'ticker' - the endpoint that will be streamed
298
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/en/latest/manual.html#ticker-structure}
299
+ */
300
+ async unWatchTicker(symbol, params = {}) {
301
+ await this.loadMarkets();
302
+ const market = this.market(symbol);
303
+ const options = this.safeDict(this.options, 'unWatchTicker');
304
+ const defaultMethod = this.safeString(options, 'method', 'ticker');
305
+ const method = this.safeString(params, 'method', defaultMethod);
306
+ const name = method + '@' + market['id'];
307
+ const messageHash = 'unsubscribe::' + name;
308
+ return await this.unSubscribe(messageHash, name, 'public', 'unWatchTicker', defaultMethod, market, undefined, params);
309
+ }
310
+ /**
311
+ * @method
312
+ * @name xt#watchTickers
219
313
  * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
220
314
  * @see https://doc.xt.com/#websocket_publicallTicker
221
315
  * @see https://doc.xt.com/#futures_market_websocket_v2allTicker
@@ -230,6 +324,7 @@ class xt extends xt$1["default"] {
230
324
  const options = this.safeDict(this.options, 'watchTickers');
231
325
  const defaultMethod = this.safeString(options, 'method', 'tickers');
232
326
  const name = this.safeString(params, 'method', defaultMethod);
327
+ symbols = this.marketSymbols(symbols);
233
328
  let market = undefined;
234
329
  if (symbols !== undefined) {
235
330
  market = this.market(symbols[0]);
@@ -242,7 +337,34 @@ class xt extends xt$1["default"] {
242
337
  }
243
338
  /**
244
339
  * @method
245
- * @name hitbtc#watchOHLCV
340
+ * @name xt#unWatchTickers
341
+ * @description stops watching a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
342
+ * @see https://doc.xt.com/#websocket_publicallTicker
343
+ * @see https://doc.xt.com/#futures_market_websocket_v2allTicker
344
+ * @see https://doc.xt.com/#futures_market_websocket_v2allAggTicker
345
+ * @param {string} [symbols] unified market symbols
346
+ * @param {object} params extra parameters specific to the xt api endpoint
347
+ * @param {string} [params.method] 'agg_tickers' (contract only) or 'tickers', default = 'tickers' - the endpoint that will be streamed
348
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/en/latest/manual.html#ticker-structure}
349
+ */
350
+ async unWatchTickers(symbols = undefined, params = {}) {
351
+ await this.loadMarkets();
352
+ const options = this.safeDict(this.options, 'unWatchTickers');
353
+ const defaultMethod = this.safeString(options, 'method', 'tickers');
354
+ const name = this.safeString(params, 'method', defaultMethod);
355
+ if (symbols !== undefined) {
356
+ throw new errors.NotSupported(this.id + ' unWatchTickers() does not support symbols argument, unsubscribtion is for all tickers at once only');
357
+ }
358
+ const messageHash = 'unsubscribe::' + name;
359
+ const tickers = await this.unSubscribe(messageHash, name, 'public', 'unWatchTickers', 'ticker', undefined, symbols, params);
360
+ if (this.newUpdates) {
361
+ return tickers;
362
+ }
363
+ return this.filterByArray(this.tickers, 'symbol', symbols);
364
+ }
365
+ /**
366
+ * @method
367
+ * @name xt#watchOHLCV
246
368
  * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
247
369
  * @see https://doc.xt.com/#websocket_publicsymbolKline
248
370
  * @see https://doc.xt.com/#futures_market_websocket_v2symbolKline
@@ -263,6 +385,25 @@ class xt extends xt$1["default"] {
263
385
  }
264
386
  return this.filterBySinceLimit(ohlcv, since, limit, 0, true);
265
387
  }
388
+ /**
389
+ * @method
390
+ * @name xt#unWatchOHLCV
391
+ * @description stops watching historical candlestick data containing the open, high, low, and close price, and the volume of a market
392
+ * @see https://doc.xt.com/#websocket_publicsymbolKline
393
+ * @see https://doc.xt.com/#futures_market_websocket_v2symbolKline
394
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
395
+ * @param {string} timeframe 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d, 3d, 1w, or 1M
396
+ * @param {object} params extra parameters specific to the xt api endpoint
397
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
398
+ */
399
+ async unWatchOHLCV(symbol, timeframe = '1m', params = {}) {
400
+ await this.loadMarkets();
401
+ const market = this.market(symbol);
402
+ const name = 'kline@' + market['id'] + ',' + timeframe;
403
+ const messageHash = 'unsubscribe::' + name;
404
+ params['symbolsAndTimeframes'] = [[market['symbol'], timeframe]];
405
+ return await this.unSubscribe(messageHash, name, 'public', 'unWatchOHLCV', 'kline', market, undefined, params);
406
+ }
266
407
  /**
267
408
  * @method
268
409
  * @name xt#watchTrades
@@ -285,6 +426,23 @@ class xt extends xt$1["default"] {
285
426
  }
286
427
  return this.filterBySinceLimit(trades, since, limit, 'timestamp');
287
428
  }
429
+ /**
430
+ * @method
431
+ * @name xt#unWatchTrades
432
+ * @description stops watching the list of most recent trades for a particular symbol
433
+ * @see https://doc.xt.com/#websocket_publicdealRecord
434
+ * @see https://doc.xt.com/#futures_market_websocket_v2dealRecord
435
+ * @param {string} symbol unified symbol of the market to fetch trades for
436
+ * @param {object} params extra parameters specific to the xt api endpoint
437
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/en/latest/manual.html?#public-trades}
438
+ */
439
+ async unWatchTrades(symbol, params = {}) {
440
+ await this.loadMarkets();
441
+ const market = this.market(symbol);
442
+ const name = 'trade@' + market['id'];
443
+ const messageHash = 'unsubscribe::' + name;
444
+ return await this.unSubscribe(messageHash, name, 'public', 'unWatchTrades', 'trade', market, undefined, params);
445
+ }
288
446
  /**
289
447
  * @method
290
448
  * @name xt#watchOrderBook
@@ -311,6 +469,31 @@ class xt extends xt$1["default"] {
311
469
  const orderbook = await this.subscribe(name, 'public', 'watchOrderBook', market, undefined, params);
312
470
  return orderbook.limit();
313
471
  }
472
+ /**
473
+ * @method
474
+ * @name xt#unWatchOrderBook
475
+ * @description stops watching information on open orders with bid (buy) and ask (sell) prices, volumes and other data
476
+ * @see https://doc.xt.com/#websocket_publiclimitDepth
477
+ * @see https://doc.xt.com/#websocket_publicincreDepth
478
+ * @see https://doc.xt.com/#futures_market_websocket_v2limitDepth
479
+ * @see https://doc.xt.com/#futures_market_websocket_v2increDepth
480
+ * @param {string} symbol unified symbol of the market to fetch the order book for
481
+ * @param {object} params extra parameters specific to the xt api endpoint
482
+ * @param {int} [params.levels] 5, 10, 20, or 50
483
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/en/latest/manual.html#order-book-structure} indexed by market symbols
484
+ */
485
+ async unWatchOrderBook(symbol, params = {}) {
486
+ await this.loadMarkets();
487
+ const market = this.market(symbol);
488
+ const levels = this.safeString(params, 'levels');
489
+ params = this.omit(params, 'levels');
490
+ let name = 'depth_update@' + market['id'];
491
+ if (levels !== undefined) {
492
+ name = 'depth@' + market['id'] + ',' + levels;
493
+ }
494
+ const messageHash = 'unsubscribe::' + name;
495
+ return await this.unSubscribe(messageHash, name, 'public', 'unWatchOrderBook', 'depth', market, undefined, params);
496
+ }
314
497
  /**
315
498
  * @method
316
499
  * @name xt#watchOrders
@@ -1205,11 +1388,42 @@ class xt extends xt$1["default"] {
1205
1388
  method.call(this, client, message);
1206
1389
  }
1207
1390
  }
1391
+ else {
1392
+ this.handleSubscriptionStatus(client, message);
1393
+ }
1208
1394
  }
1209
1395
  ping(client) {
1210
1396
  client.lastPong = this.milliseconds();
1211
1397
  return 'ping';
1212
1398
  }
1399
+ handleSubscriptionStatus(client, message) {
1400
+ //
1401
+ // {
1402
+ // id: '1763045665228ticker@eth_usdt',
1403
+ // code: 0,
1404
+ // msg: 'SUCCESS',
1405
+ // method: 'unsubscribe'
1406
+ // }
1407
+ //
1408
+ const method = this.safeStringLower(message, 'method');
1409
+ if (method === 'unsubscribe') {
1410
+ const id = this.safeString(message, 'id');
1411
+ const subscriptionsById = this.indexBy(client.subscriptions, 'id');
1412
+ const subscription = this.safeValue(subscriptionsById, id, {});
1413
+ this.handleUnSubscription(client, subscription);
1414
+ }
1415
+ return message;
1416
+ }
1417
+ handleUnSubscription(client, subscription) {
1418
+ const messageHashes = this.safeList(subscription, 'messageHashes', []);
1419
+ const subMessageHashes = this.safeList(subscription, 'subMessageHashes', []);
1420
+ for (let j = 0; j < messageHashes.length; j++) {
1421
+ const unsubHash = messageHashes[j];
1422
+ const subHash = subMessageHashes[j];
1423
+ this.cleanUnsubscription(client, subHash, unsubHash);
1424
+ }
1425
+ this.cleanCache(subscription);
1426
+ }
1213
1427
  handleErrorMessage(client, message) {
1214
1428
  //
1215
1429
  // {
@@ -2,6 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ require('../../../_virtual/_commonjsHelpers.js');
5
6
  var require$$0 = require('protobufjs/minimal');
6
7
 
7
8
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _m0 = require('protobufjs/minimal.js');
6
+
7
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
+
9
+ var _m0__default = /*#__PURE__*/_interopDefaultLegacy(_m0);
10
+
11
+ // ----------------------------------------------------------------------------
12
+ function createBaseCoin() {
13
+ return {
14
+ denom: "",
15
+ amount: ""
16
+ };
17
+ }
18
+ const Coin = {
19
+ encode(message, writer = _m0__default["default"].Writer.create()) {
20
+ if (message.denom !== "") {
21
+ writer.uint32(10).string(message.denom);
22
+ }
23
+ if (message.amount !== "") {
24
+ writer.uint32(18).string(message.amount);
25
+ }
26
+ return writer;
27
+ },
28
+ decode(input, length) {
29
+ const reader = input instanceof _m0__default["default"].Reader ? input : new _m0__default["default"].Reader(input);
30
+ let end = length === undefined ? reader.len : reader.pos + length;
31
+ const message = createBaseCoin();
32
+ while (reader.pos < end) {
33
+ const tag = reader.uint32();
34
+ switch (tag >>> 3) {
35
+ case 1:
36
+ message.denom = reader.string();
37
+ break;
38
+ case 2:
39
+ message.amount = reader.string();
40
+ break;
41
+ default:
42
+ reader.skipType(tag & 7);
43
+ break;
44
+ }
45
+ }
46
+ return message;
47
+ },
48
+ fromPartial(object) {
49
+ const message = createBaseCoin();
50
+ message.denom = object.denom ?? "";
51
+ message.amount = object.amount ?? "";
52
+ return message;
53
+ }
54
+ };
55
+
56
+ exports.Coin = Coin;
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _m0 = require('protobufjs/minimal.js');
6
+
7
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
+
9
+ var _m0__default = /*#__PURE__*/_interopDefaultLegacy(_m0);
10
+
11
+ // ----------------------------------------------------------------------------
12
+ function createBaseCompactBitArray() {
13
+ return {
14
+ extraBitsStored: 0,
15
+ elems: new Uint8Array()
16
+ };
17
+ }
18
+ const CompactBitArray = {
19
+ encode(message, writer = _m0__default["default"].Writer.create()) {
20
+ if (message.extraBitsStored !== 0) {
21
+ writer.uint32(8).uint32(message.extraBitsStored);
22
+ }
23
+ if (message.elems.length !== 0) {
24
+ writer.uint32(18).bytes(message.elems);
25
+ }
26
+ return writer;
27
+ },
28
+ decode(input, length) {
29
+ const reader = input instanceof _m0__default["default"].Reader ? input : new _m0__default["default"].Reader(input);
30
+ let end = length === undefined ? reader.len : reader.pos + length;
31
+ const message = createBaseCompactBitArray();
32
+ while (reader.pos < end) {
33
+ const tag = reader.uint32();
34
+ switch (tag >>> 3) {
35
+ case 1:
36
+ message.extraBitsStored = reader.uint32();
37
+ break;
38
+ case 2:
39
+ message.elems = reader.bytes();
40
+ break;
41
+ default:
42
+ reader.skipType(tag & 7);
43
+ break;
44
+ }
45
+ }
46
+ return message;
47
+ },
48
+ fromPartial(object) {
49
+ const message = createBaseCompactBitArray();
50
+ message.extraBitsStored = object.extraBitsStored ?? 0;
51
+ message.elems = object.elems ?? new Uint8Array();
52
+ return message;
53
+ }
54
+ };
55
+
56
+ exports.CompactBitArray = CompactBitArray;
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _m0 = require('protobufjs/minimal.js');
6
+
7
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
+
9
+ var _m0__default = /*#__PURE__*/_interopDefaultLegacy(_m0);
10
+
11
+ // ----------------------------------------------------------------------------
12
+ function createBasePubKey() {
13
+ return {
14
+ key: new Uint8Array()
15
+ };
16
+ }
17
+ const PubKey = {
18
+ encode(message, writer = _m0__default["default"].Writer.create()) {
19
+ if (message.key.length !== 0) {
20
+ writer.uint32(10).bytes(message.key);
21
+ }
22
+ return writer;
23
+ },
24
+ decode(input, length) {
25
+ const reader = input instanceof _m0__default["default"].Reader ? input : new _m0__default["default"].Reader(input);
26
+ let end = length === undefined ? reader.len : reader.pos + length;
27
+ const message = createBasePubKey();
28
+ while (reader.pos < end) {
29
+ const tag = reader.uint32();
30
+ switch (tag >>> 3) {
31
+ case 1:
32
+ message.key = reader.bytes();
33
+ break;
34
+ default:
35
+ reader.skipType(tag & 7);
36
+ break;
37
+ }
38
+ }
39
+ return message;
40
+ },
41
+ fromPartial(object) {
42
+ const message = createBasePubKey();
43
+ message.key = object.key ?? new Uint8Array();
44
+ return message;
45
+ }
46
+ };
47
+
48
+ exports.PubKey = PubKey;