ccxt 4.3.84 → 4.3.86

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 (71) hide show
  1. package/README.md +7 -5
  2. package/dist/ccxt.browser.min.js +15 -15
  3. package/dist/cjs/ccxt.js +7 -1
  4. package/dist/cjs/src/abstract/hashkey.js +9 -0
  5. package/dist/cjs/src/base/Exchange.js +1 -1
  6. package/dist/cjs/src/base/errors.js +8 -1
  7. package/dist/cjs/src/binance.js +4 -2
  8. package/dist/cjs/src/bitfinex.js +2 -2
  9. package/dist/cjs/src/bitmex.js +4 -0
  10. package/dist/cjs/src/bybit.js +15 -14
  11. package/dist/cjs/src/cryptocom.js +117 -2
  12. package/dist/cjs/src/hashkey.js +4328 -0
  13. package/dist/cjs/src/hyperliquid.js +85 -65
  14. package/dist/cjs/src/indodax.js +37 -9
  15. package/dist/cjs/src/kraken.js +29 -1
  16. package/dist/cjs/src/krakenfutures.js +12 -10
  17. package/dist/cjs/src/kucoinfutures.js +5 -0
  18. package/dist/cjs/src/mexc.js +2 -2
  19. package/dist/cjs/src/pro/ascendex.js +45 -5
  20. package/dist/cjs/src/pro/binance.js +1 -1
  21. package/dist/cjs/src/pro/bingx.js +13 -12
  22. package/dist/cjs/src/pro/bitget.js +113 -4
  23. package/dist/cjs/src/pro/hashkey.js +839 -0
  24. package/dist/cjs/src/pro/hyperliquid.js +123 -0
  25. package/dist/cjs/src/pro/mexc.js +13 -7
  26. package/dist/cjs/src/pro/okx.js +25 -4
  27. package/dist/cjs/src/pro/woo.js +1 -0
  28. package/dist/cjs/src/pro/woofipro.js +1 -0
  29. package/dist/cjs/src/pro/xt.js +1 -0
  30. package/js/ccxt.d.ts +9 -3
  31. package/js/ccxt.js +7 -3
  32. package/js/src/abstract/cryptocom.d.ts +2 -0
  33. package/js/src/abstract/hashkey.d.ts +70 -0
  34. package/js/src/abstract/hashkey.js +11 -0
  35. package/js/src/abstract/kucoinfutures.d.ts +2 -0
  36. package/js/src/base/Exchange.js +1 -1
  37. package/js/src/base/errorHierarchy.d.ts +1 -0
  38. package/js/src/base/errorHierarchy.js +1 -0
  39. package/js/src/base/errors.d.ts +5 -1
  40. package/js/src/base/errors.js +8 -2
  41. package/js/src/binance.js +4 -2
  42. package/js/src/bitfinex.js +2 -2
  43. package/js/src/bitmex.js +4 -0
  44. package/js/src/bybit.js +16 -15
  45. package/js/src/cryptocom.d.ts +5 -1
  46. package/js/src/cryptocom.js +117 -2
  47. package/js/src/hashkey.d.ts +178 -0
  48. package/js/src/hashkey.js +4329 -0
  49. package/js/src/hyperliquid.d.ts +3 -0
  50. package/js/src/hyperliquid.js +85 -65
  51. package/js/src/indodax.js +37 -9
  52. package/js/src/kraken.js +29 -1
  53. package/js/src/krakenfutures.js +12 -10
  54. package/js/src/kucoinfutures.js +5 -0
  55. package/js/src/mexc.js +2 -2
  56. package/js/src/pro/ascendex.d.ts +2 -0
  57. package/js/src/pro/ascendex.js +45 -5
  58. package/js/src/pro/binance.js +1 -1
  59. package/js/src/pro/bingx.js +13 -12
  60. package/js/src/pro/bitget.d.ts +4 -0
  61. package/js/src/pro/bitget.js +113 -4
  62. package/js/src/pro/hashkey.d.ts +34 -0
  63. package/js/src/pro/hashkey.js +840 -0
  64. package/js/src/pro/hyperliquid.d.ts +7 -1
  65. package/js/src/pro/hyperliquid.js +123 -0
  66. package/js/src/pro/mexc.js +13 -7
  67. package/js/src/pro/okx.js +25 -4
  68. package/js/src/pro/woo.js +1 -0
  69. package/js/src/pro/woofipro.js +1 -0
  70. package/js/src/pro/xt.js +1 -0
  71. package/package.json +1 -1
@@ -442,6 +442,35 @@ export default class bitget extends bitgetRest {
442
442
  */
443
443
  return await this.watchOrderBookForSymbols([symbol], limit, params);
444
444
  }
445
+ async unWatchOrderBook(symbol, params = {}) {
446
+ /**
447
+ * @method
448
+ * @name bitget#unWatchOrderBook
449
+ * @description unsubscribe from the orderbook channel
450
+ * @see https://www.bitget.com/api-doc/spot/websocket/public/Depth-Channel
451
+ * @see https://www.bitget.com/api-doc/contract/websocket/public/Order-Book-Channel
452
+ * @param {string} symbol unified symbol of the market to fetch the order book for
453
+ * @param {int} [params.limit] orderbook limit, default is undefined
454
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
455
+ */
456
+ await this.loadMarkets();
457
+ const market = this.market(symbol);
458
+ const messageHash = 'unsubscribe:orderbook:' + market['symbol'];
459
+ let channel = 'books';
460
+ const limit = this.safeInteger(params, 'limit');
461
+ if ((limit === 1) || (limit === 5) || (limit === 15)) {
462
+ params = this.omit(params, 'limit');
463
+ channel += limit.toString();
464
+ }
465
+ let instType = undefined;
466
+ [instType, params] = this.getInstType(market, params);
467
+ const args = {
468
+ 'instType': instType,
469
+ 'channel': channel,
470
+ 'instId': market['id'],
471
+ };
472
+ return await this.unWatchPublic(messageHash, args, params);
473
+ }
445
474
  async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
446
475
  /**
447
476
  * @method
@@ -565,10 +594,11 @@ export default class bitget extends bitgetRest {
565
594
  const calculatedChecksum = this.crc32(payload, true);
566
595
  const responseChecksum = this.safeInteger(rawOrderBook, 'checksum');
567
596
  if (calculatedChecksum !== responseChecksum) {
568
- delete client.subscriptions[messageHash];
569
- delete this.orderbooks[symbol];
570
- const error = new ChecksumError(this.id + ' ' + this.orderbookChecksumMessage(symbol));
571
- client.reject(error, messageHash);
597
+ // if (messageHash in client.subscriptions) {
598
+ // // delete client.subscriptions[messageHash];
599
+ // // delete this.orderbooks[symbol];
600
+ // }
601
+ this.spawn(this.handleCheckSumError, client, symbol, messageHash);
572
602
  return;
573
603
  }
574
604
  }
@@ -581,6 +611,11 @@ export default class bitget extends bitgetRest {
581
611
  }
582
612
  client.resolve(this.orderbooks[symbol], messageHash);
583
613
  }
614
+ async handleCheckSumError(client, symbol, messageHash) {
615
+ await this.unWatchOrderBook(symbol);
616
+ const error = new ChecksumError(this.id + ' ' + this.orderbookChecksumMessage(symbol));
617
+ client.reject(error, messageHash);
618
+ }
584
619
  handleDelta(bookside, delta) {
585
620
  const bidAsk = this.parseBidAsk(delta, 0, 1);
586
621
  // we store the string representations in the orderbook for checksum calculation
@@ -1627,6 +1662,15 @@ export default class bitget extends bitgetRest {
1627
1662
  const message = this.extend(request, params);
1628
1663
  return await this.watch(url, messageHash, message, messageHash);
1629
1664
  }
1665
+ async unWatchPublic(messageHash, args, params = {}) {
1666
+ const url = this.urls['api']['ws']['public'];
1667
+ const request = {
1668
+ 'op': 'unsubscribe',
1669
+ 'args': [args],
1670
+ };
1671
+ const message = this.extend(request, params);
1672
+ return await this.watch(url, messageHash, message, messageHash);
1673
+ }
1630
1674
  async watchPublicMultiple(messageHashes, argsArray, params = {}) {
1631
1675
  const url = this.urls['api']['ws']['public'];
1632
1676
  const request = {
@@ -1747,6 +1791,17 @@ export default class bitget extends bitgetRest {
1747
1791
  // "event": "subscribe",
1748
1792
  // "arg": { instType: 'SPOT', channel: "account", instId: "default" }
1749
1793
  // }
1794
+ // unsubscribe
1795
+ // {
1796
+ // "op":"unsubscribe",
1797
+ // "args":[
1798
+ // {
1799
+ // "instType":"USDT-FUTURES",
1800
+ // "channel":"ticker",
1801
+ // "instId":"BTCUSDT"
1802
+ // }
1803
+ // ]
1804
+ // }
1750
1805
  //
1751
1806
  if (this.handleErrorMessage(client, message)) {
1752
1807
  return;
@@ -1769,6 +1824,10 @@ export default class bitget extends bitgetRest {
1769
1824
  this.handleSubscriptionStatus(client, message);
1770
1825
  return;
1771
1826
  }
1827
+ if (event === 'unsubscribe') {
1828
+ this.handleUnSubscriptionStatus(client, message);
1829
+ return;
1830
+ }
1772
1831
  const methods = {
1773
1832
  'ticker': this.handleTicker,
1774
1833
  'trade': this.handleTrades,
@@ -1812,4 +1871,54 @@ export default class bitget extends bitgetRest {
1812
1871
  //
1813
1872
  return message;
1814
1873
  }
1874
+ handleUnSubscriptionStatus(client, message) {
1875
+ //
1876
+ // {
1877
+ // "op":"unsubscribe",
1878
+ // "args":[
1879
+ // {
1880
+ // "instType":"USDT-FUTURES",
1881
+ // "channel":"ticker",
1882
+ // "instId":"BTCUSDT"
1883
+ // },
1884
+ // {
1885
+ // "instType":"USDT-FUTURES",
1886
+ // "channel":"candle1m",
1887
+ // "instId":"BTCUSDT"
1888
+ // }
1889
+ // ]
1890
+ // }
1891
+ // or
1892
+ // {"event":"unsubscribe","arg":{"instType":"SPOT","channel":"books","instId":"BTCUSDT"}}
1893
+ //
1894
+ let argsList = this.safeList(message, 'args');
1895
+ if (argsList === undefined) {
1896
+ argsList = [this.safeDict(message, 'arg', {})];
1897
+ }
1898
+ for (let i = 0; i < argsList.length; i++) {
1899
+ const arg = argsList[i];
1900
+ const channel = this.safeString(arg, 'channel');
1901
+ if (channel === 'books') {
1902
+ // for now only unWatchOrderBook is supporteod
1903
+ const instType = this.safeStringLower(arg, 'instType');
1904
+ const type = (instType === 'spot') ? 'spot' : 'contract';
1905
+ const instId = this.safeString(arg, 'instId');
1906
+ const market = this.safeMarket(instId, undefined, undefined, type);
1907
+ const symbol = market['symbol'];
1908
+ const messageHash = 'unsubscribe:orderbook:' + market['symbol'];
1909
+ const subMessageHash = 'orderbook:' + symbol;
1910
+ if (symbol in this.orderbooks) {
1911
+ delete this.orderbooks[symbol];
1912
+ }
1913
+ if (subMessageHash in client.subscriptions) {
1914
+ delete client.subscriptions[subMessageHash];
1915
+ }
1916
+ if (messageHash in client.subscriptions) {
1917
+ delete client.subscriptions[messageHash];
1918
+ }
1919
+ client.resolve(true, messageHash);
1920
+ }
1921
+ }
1922
+ return message;
1923
+ }
1815
1924
  }
@@ -0,0 +1,34 @@
1
+ import hashkeyRest from '../hashkey.js';
2
+ import type { Balances, Dict, Int, Market, OHLCV, Order, OrderBook, Position, Str, Strings, Ticker, Trade } from '../base/types.js';
3
+ import Client from '../base/ws/Client.js';
4
+ export default class hashkey extends hashkeyRest {
5
+ describe(): any;
6
+ wathPublic(market: Market, topic: string, messageHash: string, params?: {}): Promise<any>;
7
+ watchPrivate(messageHash: any): Promise<any>;
8
+ getPrivateUrl(listenKey: any): string;
9
+ watchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
10
+ handleOHLCV(client: Client, message: any): void;
11
+ parseWsOHLCV(ohlcv: any, market?: Market): OHLCV;
12
+ watchTicker(symbol: string, params?: {}): Promise<Ticker>;
13
+ handleTicker(client: Client, message: any): void;
14
+ watchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
15
+ handleTrades(client: Client, message: any): void;
16
+ watchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
17
+ handleOrderBook(client: Client, message: any): void;
18
+ watchOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
19
+ handleOrder(client: Client, message: any): void;
20
+ parseWsOrder(order: Dict, market?: Market): Order;
21
+ watchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
22
+ handleMyTrade(client: Client, message: any, subscription?: {}): void;
23
+ parseWsTrade(trade: any, market?: any): Trade;
24
+ watchPositions(symbols?: Strings, since?: Int, limit?: Int, params?: {}): Promise<Position[]>;
25
+ handlePosition(client: Client, message: any): void;
26
+ parseWsPosition(position: any, market?: Market): Position;
27
+ watchBalance(params?: {}): Promise<Balances>;
28
+ setBalanceCache(client: Client, type: any, subscribeHash: any): void;
29
+ loadBalanceSnapshot(client: any, messageHash: any, type: any): Promise<void>;
30
+ handleBalance(client: Client, message: any): void;
31
+ authenticate(params?: {}): Promise<string>;
32
+ keepAliveListenKey(listenKey: any, params?: {}): Promise<void>;
33
+ handleMessage(client: Client, message: any): void;
34
+ }