ccxt 4.1.58 → 4.1.60

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 (73) hide show
  1. package/README.md +5 -5
  2. package/build.sh +2 -2
  3. package/dist/ccxt.browser.js +1017 -1031
  4. package/dist/ccxt.browser.min.js +2 -2
  5. package/dist/cjs/ccxt.js +1 -19
  6. package/dist/cjs/src/base/Exchange.js +45 -24
  7. package/dist/cjs/src/base/ws/Client.js +1 -1
  8. package/dist/cjs/src/binance.js +71 -22
  9. package/dist/cjs/src/bitget.js +74 -52
  10. package/dist/cjs/src/bitmart.js +10 -18
  11. package/dist/cjs/src/bitrue.js +1 -1
  12. package/dist/cjs/src/bybit.js +36 -33
  13. package/dist/cjs/src/coinbasepro.js +15 -0
  14. package/dist/cjs/src/coinex.js +25 -30
  15. package/dist/cjs/src/htx.js +82 -39
  16. package/dist/cjs/src/kucoin.js +209 -163
  17. package/dist/cjs/src/mexc.js +21 -118
  18. package/dist/cjs/src/okx.js +23 -17
  19. package/dist/cjs/src/pro/bitget.js +7 -0
  20. package/dist/cjs/src/pro/bitmart.js +7 -0
  21. package/dist/cjs/src/pro/bitvavo.js +9 -0
  22. package/dist/cjs/src/pro/bybit.js +9 -0
  23. package/dist/cjs/src/pro/htx.js +86 -61
  24. package/dist/cjs/src/pro/kucoin.js +7 -0
  25. package/dist/cjs/src/pro/mexc.js +9 -0
  26. package/js/ccxt.d.ts +2 -23
  27. package/js/ccxt.js +2 -16
  28. package/js/src/abstract/binance.d.ts +1 -0
  29. package/js/src/abstract/binancecoinm.d.ts +1 -0
  30. package/js/src/abstract/binanceus.d.ts +1 -0
  31. package/js/src/abstract/binanceusdm.d.ts +1 -0
  32. package/js/src/abstract/mexc.d.ts +0 -4
  33. package/js/src/base/Exchange.d.ts +9 -2
  34. package/js/src/base/Exchange.js +45 -24
  35. package/js/src/base/ws/Client.js +1 -1
  36. package/js/src/binance.d.ts +20 -2
  37. package/js/src/binance.js +71 -22
  38. package/js/src/bitget.d.ts +20 -2
  39. package/js/src/bitget.js +74 -52
  40. package/js/src/bitmart.d.ts +2 -2
  41. package/js/src/bitmart.js +10 -18
  42. package/js/src/bitrue.js +1 -1
  43. package/js/src/bybit.d.ts +2 -2
  44. package/js/src/bybit.js +36 -33
  45. package/js/src/coinbasepro.js +15 -0
  46. package/js/src/coinex.d.ts +2 -2
  47. package/js/src/coinex.js +25 -30
  48. package/js/src/htx.d.ts +5 -3
  49. package/js/src/htx.js +82 -39
  50. package/js/src/kucoin.d.ts +20 -2
  51. package/js/src/kucoin.js +209 -163
  52. package/js/src/mexc.d.ts +0 -11
  53. package/js/src/mexc.js +21 -118
  54. package/js/src/okx.d.ts +19 -2
  55. package/js/src/okx.js +23 -17
  56. package/js/src/pro/bitget.js +7 -0
  57. package/js/src/pro/bitmart.js +7 -0
  58. package/js/src/pro/bitvavo.js +9 -0
  59. package/js/src/pro/bybit.js +9 -0
  60. package/js/src/pro/htx.d.ts +2 -2
  61. package/js/src/pro/htx.js +86 -61
  62. package/js/src/pro/kucoin.js +7 -0
  63. package/js/src/pro/mexc.js +9 -0
  64. package/package.json +1 -1
  65. package/skip-tests.json +5 -1
  66. package/js/src/abstract/huobipro.d.ts +0 -547
  67. package/js/src/abstract/huobipro.js +0 -11
  68. package/js/src/abstract/mexc3.d.ts +0 -180
  69. package/js/src/abstract/mexc3.js +0 -11
  70. package/js/src/abstract/okex.d.ts +0 -280
  71. package/js/src/abstract/okex.js +0 -11
  72. package/js/src/abstract/okex5.d.ts +0 -280
  73. package/js/src/abstract/okex5.js +0 -11
@@ -12,6 +12,15 @@ class htx extends htx$1 {
12
12
  return this.deepExtend(super.describe(), {
13
13
  'has': {
14
14
  'ws': true,
15
+ 'createOrderWs': false,
16
+ 'editOrderWs': false,
17
+ 'fetchOpenOrdersWs': false,
18
+ 'fetchOrderWs': false,
19
+ 'cancelOrderWs': false,
20
+ 'cancelOrdersWs': false,
21
+ 'cancelAllOrdersWs': false,
22
+ 'fetchTradesWs': false,
23
+ 'fetchBalanceWs': false,
15
24
  'watchOrderBook': true,
16
25
  'watchOrders': true,
17
26
  'watchTickers': false,
@@ -28,6 +37,7 @@ class htx extends htx$1 {
28
37
  'spot': {
29
38
  'public': 'wss://{hostname}/ws',
30
39
  'private': 'wss://{hostname}/ws/v2',
40
+ 'feed': 'wss://{hostname}/feed',
31
41
  },
32
42
  'future': {
33
43
  'linear': {
@@ -55,6 +65,7 @@ class htx extends htx$1 {
55
65
  'spot': {
56
66
  'public': 'wss://api-aws.huobi.pro/ws',
57
67
  'private': 'wss://api-aws.huobi.pro/ws/v2',
68
+ 'feed': 'wss://{hostname}/feed',
58
69
  },
59
70
  'future': {
60
71
  'linear': {
@@ -321,13 +332,13 @@ class htx extends htx$1 {
321
332
  await this.loadMarkets();
322
333
  const market = this.market(symbol);
323
334
  symbol = market['symbol'];
324
- const allowedSpotLimits = [150];
325
- const allowedSwapLimits = [20, 150];
326
- limit = (limit === undefined) ? 150 : limit;
327
- if (market['spot'] && !this.inArray(limit, allowedSpotLimits)) {
328
- throw new errors.ExchangeError(this.id + ' watchOrderBook spot market accepts limits of 150 only');
329
- }
330
- if (!market['spot'] && !this.inArray(limit, allowedSwapLimits)) {
335
+ const allowedLimits = [20, 150];
336
+ // 2) 5-level/20-level incremental MBP is a tick by tick feed,
337
+ // which means whenever there is an order book change at that level, it pushes an update;
338
+ // 150-levels/400-level incremental MBP feed is based on the gap
339
+ // between two snapshots at 100ms interval.
340
+ limit = (limit === undefined) ? 20 : limit;
341
+ if (!this.inArray(limit, allowedLimits)) {
331
342
  throw new errors.ExchangeError(this.id + ' watchOrderBook swap market accepts limits of 20 and 150 only');
332
343
  }
333
344
  let messageHash = undefined;
@@ -337,7 +348,7 @@ class htx extends htx$1 {
337
348
  else {
338
349
  messageHash = 'market.' + market['id'] + '.depth.size_' + limit.toString() + '.high_freq';
339
350
  }
340
- const url = this.getUrlByMarketType(market['type'], market['linear']);
351
+ const url = this.getUrlByMarketType(market['type'], market['linear'], false, true);
341
352
  let method = this.handleOrderBookSubscription;
342
353
  if (!market['spot']) {
343
354
  params = this.extend(params);
@@ -372,6 +383,7 @@ class htx extends htx$1 {
372
383
  const symbol = this.safeString(subscription, 'symbol');
373
384
  const messageHash = this.safeString(subscription, 'messageHash');
374
385
  const id = this.safeString(message, 'id');
386
+ const lastTimestamp = this.safeInteger(subscription, 'lastTimestamp');
375
387
  try {
376
388
  const orderbook = this.orderbooks[symbol];
377
389
  const data = this.safeValue(message, 'data');
@@ -379,16 +391,15 @@ class htx extends htx$1 {
379
391
  const firstMessage = this.safeValue(messages, 0, {});
380
392
  const snapshot = this.parseOrderBook(data, symbol);
381
393
  const tick = this.safeValue(firstMessage, 'tick');
382
- const sequence = this.safeInteger(tick, 'seqNum');
394
+ const sequence = this.safeInteger(tick, 'prevSeqNum');
383
395
  const nonce = this.safeInteger(data, 'seqNum');
384
396
  snapshot['nonce'] = nonce;
385
- const timestamp = this.safeInteger(message, 'ts');
386
- snapshot['timestamp'] = timestamp;
387
- snapshot['datetime'] = this.iso8601(timestamp);
397
+ const snapshotTimestamp = this.safeInteger(message, 'ts');
398
+ subscription['lastTimestamp'] = snapshotTimestamp;
388
399
  const snapshotLimit = this.safeInteger(subscription, 'limit');
389
400
  const snapshotOrderBook = this.orderBook(snapshot, snapshotLimit);
390
401
  client.resolve(snapshotOrderBook, id);
391
- if ((sequence !== undefined) && (nonce < sequence)) {
402
+ if ((sequence === undefined) || (nonce < sequence)) {
392
403
  const maxAttempts = this.handleOption('watchOrderBook', 'maxRetries', 3);
393
404
  let numAttempts = this.safeInteger(subscription, 'numAttempts', 0);
394
405
  // retry to synchronize if we have not reached maxAttempts yet
@@ -396,9 +407,10 @@ class htx extends htx$1 {
396
407
  // safety guard
397
408
  if (messageHash in client.subscriptions) {
398
409
  numAttempts = this.sum(numAttempts, 1);
410
+ const delayTime = this.sum(1000, lastTimestamp - snapshotTimestamp);
399
411
  subscription['numAttempts'] = numAttempts;
400
412
  client.subscriptions[messageHash] = subscription;
401
- this.spawn(this.watchOrderBookSnapshot, client, message, subscription);
413
+ this.delay(delayTime, this.watchOrderBookSnapshot, client, message, subscription);
402
414
  }
403
415
  }
404
416
  else {
@@ -410,8 +422,9 @@ class htx extends htx$1 {
410
422
  orderbook.reset(snapshot);
411
423
  // unroll the accumulated deltas
412
424
  for (let i = 0; i < messages.length; i++) {
413
- this.handleOrderBookMessage(client, messages[i], orderbook);
425
+ this.handleOrderBookMessage(client, messages[i]);
414
426
  }
427
+ orderbook.cache = [];
415
428
  this.orderbooks[symbol] = orderbook;
416
429
  client.resolve(orderbook, messageHash);
417
430
  }
@@ -422,29 +435,31 @@ class htx extends htx$1 {
422
435
  }
423
436
  async watchOrderBookSnapshot(client, message, subscription) {
424
437
  const messageHash = this.safeString(subscription, 'messageHash');
438
+ const symbol = this.safeString(subscription, 'symbol');
439
+ const limit = this.safeInteger(subscription, 'limit');
440
+ const timestamp = this.safeInteger(message, 'ts');
441
+ const params = this.safeValue(subscription, 'params');
442
+ const attempts = this.safeInteger(subscription, 'numAttempts', 0);
443
+ const market = this.market(symbol);
444
+ const url = this.getUrlByMarketType(market['type'], market['linear'], false, true);
445
+ const requestId = this.requestId();
446
+ const request = {
447
+ 'req': messageHash,
448
+ 'id': requestId,
449
+ };
450
+ // this is a temporary subscription by a specific requestId
451
+ // it has a very short lifetime until the snapshot is received over ws
452
+ const snapshotSubscription = {
453
+ 'id': requestId,
454
+ 'messageHash': messageHash,
455
+ 'symbol': symbol,
456
+ 'limit': limit,
457
+ 'params': params,
458
+ 'numAttempts': attempts,
459
+ 'lastTimestamp': timestamp,
460
+ 'method': this.handleOrderBookSnapshot,
461
+ };
425
462
  try {
426
- const symbol = this.safeString(subscription, 'symbol');
427
- const limit = this.safeInteger(subscription, 'limit');
428
- const params = this.safeValue(subscription, 'params');
429
- const attempts = this.safeInteger(subscription, 'numAttempts', 0);
430
- const market = this.market(symbol);
431
- const url = this.getUrlByMarketType(market['type'], market['linear']);
432
- const requestId = this.requestId();
433
- const request = {
434
- 'req': messageHash,
435
- 'id': requestId,
436
- };
437
- // this is a temporary subscription by a specific requestId
438
- // it has a very short lifetime until the snapshot is received over ws
439
- const snapshotSubscription = {
440
- 'id': requestId,
441
- 'messageHash': messageHash,
442
- 'symbol': symbol,
443
- 'limit': limit,
444
- 'params': params,
445
- 'numAttempts': attempts,
446
- 'method': this.handleOrderBookSnapshot,
447
- };
448
463
  const orderbook = await this.watch(url, requestId, request, requestId, snapshotSubscription);
449
464
  return orderbook.limit();
450
465
  }
@@ -463,7 +478,7 @@ class htx extends htx$1 {
463
478
  this.handleDelta(bookside, deltas[i]);
464
479
  }
465
480
  }
466
- handleOrderBookMessage(client, message, orderbook) {
481
+ handleOrderBookMessage(client, message) {
467
482
  // spot markets
468
483
  //
469
484
  // {
@@ -533,30 +548,34 @@ class htx extends htx$1 {
533
548
  const ch = this.safeValue(message, 'ch');
534
549
  const parts = ch.split('.');
535
550
  const marketId = this.safeString(parts, 1);
536
- const symbol = this.safeSymbol(marketId);
551
+ const market = this.safeMarket(marketId);
552
+ const symbol = market['symbol'];
553
+ const orderbook = this.orderbooks[symbol];
537
554
  const tick = this.safeValue(message, 'tick', {});
538
- const seqNum = this.safeInteger2(tick, 'seqNum', 'version');
555
+ const seqNum = this.safeInteger(tick, 'seqNum');
539
556
  const prevSeqNum = this.safeInteger(tick, 'prevSeqNum');
540
557
  const event = this.safeString(tick, 'event');
558
+ const version = this.safeInteger(tick, 'version');
541
559
  const timestamp = this.safeInteger(message, 'ts');
542
560
  if (event === 'snapshot') {
543
561
  const snapshot = this.parseOrderBook(tick, symbol, timestamp);
544
562
  orderbook.reset(snapshot);
545
- orderbook['nonce'] = seqNum;
563
+ orderbook['nonce'] = version;
546
564
  }
547
- if (prevSeqNum !== undefined && prevSeqNum > orderbook['nonce']) {
565
+ if ((prevSeqNum !== undefined) && prevSeqNum > orderbook['nonce']) {
548
566
  throw new errors.InvalidNonce(this.id + ' watchOrderBook() received a mesage out of order');
549
567
  }
550
- if ((prevSeqNum === undefined || prevSeqNum <= orderbook['nonce']) && (seqNum > orderbook['nonce'])) {
568
+ const spotConditon = market['spot'] && (prevSeqNum === orderbook['nonce']);
569
+ const nonSpotCondition = market['contract'] && (version - 1 === orderbook['nonce']);
570
+ if (spotConditon || nonSpotCondition) {
551
571
  const asks = this.safeValue(tick, 'asks', []);
552
572
  const bids = this.safeValue(tick, 'bids', []);
553
573
  this.handleDeltas(orderbook['asks'], asks);
554
574
  this.handleDeltas(orderbook['bids'], bids);
555
- orderbook['nonce'] = seqNum;
575
+ orderbook['nonce'] = spotConditon ? seqNum : version;
556
576
  orderbook['timestamp'] = timestamp;
557
577
  orderbook['datetime'] = this.iso8601(timestamp);
558
578
  }
559
- return orderbook;
560
579
  }
561
580
  handleOrderBook(client, message) {
562
581
  //
@@ -604,9 +623,9 @@ class htx extends htx$1 {
604
623
  // "ts":1645023376098
605
624
  // }
606
625
  //
607
- const tick = this.safeValue(message, 'tick', {});
608
- const event = this.safeString(tick, 'event');
609
626
  const messageHash = this.safeString(message, 'ch');
627
+ const tick = this.safeValue(message, 'tick');
628
+ const event = this.safeString(tick, 'event');
610
629
  const ch = this.safeValue(message, 'ch');
611
630
  const parts = ch.split('.');
612
631
  const marketId = this.safeString(parts, 1);
@@ -617,23 +636,22 @@ class htx extends htx$1 {
617
636
  const sizeParts = size.split('_');
618
637
  const limit = this.safeInteger(sizeParts, 1);
619
638
  orderbook = this.orderBook({}, limit);
639
+ this.orderbooks[symbol] = orderbook;
620
640
  }
621
- if (orderbook['nonce'] === undefined) {
641
+ if ((event === undefined) && (orderbook['nonce'] === undefined)) {
622
642
  orderbook.cache.push(message);
623
643
  }
624
- if (event !== undefined || orderbook['nonce'] !== undefined) {
625
- this.orderbooks[symbol] = this.handleOrderBookMessage(client, message, orderbook);
644
+ else {
645
+ this.handleOrderBookMessage(client, message);
626
646
  client.resolve(orderbook, messageHash);
627
647
  }
628
648
  }
629
649
  handleOrderBookSubscription(client, message, subscription) {
630
650
  const symbol = this.safeString(subscription, 'symbol');
651
+ const market = this.market(symbol);
631
652
  const limit = this.safeInteger(subscription, 'limit');
632
- if (symbol in this.orderbooks) {
633
- delete this.orderbooks[symbol];
634
- }
635
653
  this.orderbooks[symbol] = this.orderBook({}, limit);
636
- if (this.markets[symbol]['spot'] === true) {
654
+ if (market['spot']) {
637
655
  this.spawn(this.watchOrderBookSnapshot, client, message, subscription);
638
656
  }
639
657
  }
@@ -701,8 +719,8 @@ class htx extends htx$1 {
701
719
  let orderType = this.safeString(this.options, 'orderType', 'orders'); // orders or matchOrders
702
720
  orderType = this.safeString(params, 'orderType', orderType);
703
721
  params = this.omit(params, 'orderType');
704
- const marketCode = (market !== undefined) ? market['lowercaseId'] : undefined;
705
- const baseId = (market !== undefined) ? market['lowercaseBaseId'] : undefined;
722
+ const marketCode = (market !== undefined) ? market['lowercaseId'].toLowerCase() : undefined;
723
+ const baseId = (market !== undefined) ? market['baseId'] : undefined;
706
724
  const prefix = orderType;
707
725
  messageHash = prefix;
708
726
  if (subType === 'linear') {
@@ -721,7 +739,7 @@ class htx extends htx$1 {
721
739
  else if (type === 'future') {
722
740
  // inverse futures Example: BCH/USD:BCH-220408
723
741
  if (baseId !== undefined) {
724
- channel = prefix + '.' + baseId;
742
+ channel = prefix + '.' + baseId.toLowerCase();
725
743
  messageHash = channel;
726
744
  }
727
745
  else {
@@ -955,7 +973,8 @@ class htx extends htx$1 {
955
973
  // when we make a global subscription (for contracts only) our message hash can't have a symbol/currency attached
956
974
  // so we're removing it here
957
975
  let genericMessageHash = messageHash.replace('.' + market['lowercaseId'], '');
958
- genericMessageHash = genericMessageHash.replace('.' + market['lowercaseBaseId'], '');
976
+ const lowerCaseBaseId = this.safeStringLower(market, 'baseId');
977
+ genericMessageHash = genericMessageHash.replace('.' + lowerCaseBaseId, '');
959
978
  client.resolve(this.orders, genericMessageHash);
960
979
  }
961
980
  parseWsOrder(order, market = undefined) {
@@ -2129,7 +2148,8 @@ class htx extends htx$1 {
2129
2148
  // since this is a global sub, our messageHash does not specify any symbol (ex: orders_cross:trade)
2130
2149
  // so we must remove it
2131
2150
  let genericOrderHash = messageHash.replace('.' + market['lowercaseId'], '');
2132
- genericOrderHash = genericOrderHash.replace('.' + market['lowercaseBaseId'], '');
2151
+ const lowerCaseBaseId = this.safeStringLower(market, 'baseId');
2152
+ genericOrderHash = genericOrderHash.replace('.' + lowerCaseBaseId, '');
2133
2153
  const genericTradesHash = genericOrderHash + ':' + 'trade';
2134
2154
  client.resolve(this.myTrades, genericTradesHash);
2135
2155
  }
@@ -2204,7 +2224,7 @@ class htx extends htx$1 {
2204
2224
  'fee': fee,
2205
2225
  }, market);
2206
2226
  }
2207
- getUrlByMarketType(type, isLinear = true, isPrivate = false) {
2227
+ getUrlByMarketType(type, isLinear = true, isPrivate = false, isFeed = false) {
2208
2228
  const api = this.safeString(this.options, 'api', 'api');
2209
2229
  const hostname = { 'hostname': this.hostname };
2210
2230
  let hostnameURL = undefined;
@@ -2214,7 +2234,12 @@ class htx extends htx$1 {
2214
2234
  hostnameURL = this.urls['api']['ws'][api]['spot']['private'];
2215
2235
  }
2216
2236
  else {
2217
- hostnameURL = this.urls['api']['ws'][api]['spot']['public'];
2237
+ if (isFeed) {
2238
+ hostnameURL = this.urls['api']['ws'][api]['spot']['feed'];
2239
+ }
2240
+ else {
2241
+ hostnameURL = this.urls['api']['ws'][api]['spot']['public'];
2242
+ }
2218
2243
  }
2219
2244
  url = this.implodeParams(hostnameURL, hostname);
2220
2245
  }
@@ -11,6 +11,13 @@ class kucoin extends kucoin$1 {
11
11
  return this.deepExtend(super.describe(), {
12
12
  'has': {
13
13
  'ws': true,
14
+ 'createOrderWs': false,
15
+ 'editOrderWs': false,
16
+ 'fetchOpenOrdersWs': false,
17
+ 'fetchOrderWs': false,
18
+ 'cancelOrderWs': false,
19
+ 'cancelOrdersWs': false,
20
+ 'cancelAllOrdersWs': false,
14
21
  'watchOrderBook': true,
15
22
  'watchOrders': true,
16
23
  'watchMyTrades': true,
@@ -12,6 +12,15 @@ class mexc extends mexc$1 {
12
12
  return this.deepExtend(super.describe(), {
13
13
  'has': {
14
14
  'ws': true,
15
+ 'cancelAllOrdersWs': false,
16
+ 'cancelOrdersWs': false,
17
+ 'cancelOrderWs': false,
18
+ 'createOrderWs': false,
19
+ 'editOrderWs': false,
20
+ 'fetchBalanceWs': false,
21
+ 'fetchOpenOrdersWs': false,
22
+ 'fetchOrderWs': false,
23
+ 'fetchTradesWs': false,
15
24
  'watchBalance': true,
16
25
  'watchMyTrades': true,
17
26
  'watchOHLCV': true,
package/js/ccxt.d.ts CHANGED
@@ -4,7 +4,7 @@ import * as functions from './src/base/functions.js';
4
4
  import * as errors from './src/base/errors.js';
5
5
  import { Market, Trade, Fee, Ticker, OrderBook, Order, Transaction, Tickers, Currency, Balance, DepositAddress, WithdrawalResponse, DepositAddressResponse, OHLCV, Balances, PartialBalances, Dictionary, MinMax, Position, FundingRateHistory, Liquidation, FundingHistory, MarginMode, Greeks } from './src/base/types.js';
6
6
  import { BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending, NoChange } from './src/base/errors.js';
7
- declare const version = "4.1.57";
7
+ declare const version = "4.1.59";
8
8
  import ace from './src/ace.js';
9
9
  import alpaca from './src/alpaca.js';
10
10
  import ascendex from './src/ascendex.js';
@@ -69,7 +69,6 @@ import hollaex from './src/hollaex.js';
69
69
  import htx from './src/htx.js';
70
70
  import huobi from './src/huobi.js';
71
71
  import huobijp from './src/huobijp.js';
72
- import huobipro from './src/huobipro.js';
73
72
  import idex from './src/idex.js';
74
73
  import independentreserve from './src/independentreserve.js';
75
74
  import indodax from './src/indodax.js';
@@ -84,13 +83,10 @@ import luno from './src/luno.js';
84
83
  import lykke from './src/lykke.js';
85
84
  import mercado from './src/mercado.js';
86
85
  import mexc from './src/mexc.js';
87
- import mexc3 from './src/mexc3.js';
88
86
  import ndax from './src/ndax.js';
89
87
  import novadax from './src/novadax.js';
90
88
  import oceanex from './src/oceanex.js';
91
89
  import okcoin from './src/okcoin.js';
92
- import okex from './src/okex.js';
93
- import okex5 from './src/okex5.js';
94
90
  import okx from './src/okx.js';
95
91
  import p2b from './src/p2b.js';
96
92
  import paymium from './src/paymium.js';
@@ -148,7 +144,6 @@ import hollaexPro from './src/pro/hollaex.js';
148
144
  import htxPro from './src/pro/htx.js';
149
145
  import huobiPro from './src/pro/huobi.js';
150
146
  import huobijpPro from './src/pro/huobijp.js';
151
- import huobiproPro from './src/pro/huobipro.js';
152
147
  import idexPro from './src/pro/idex.js';
153
148
  import independentreservePro from './src/pro/independentreserve.js';
154
149
  import krakenPro from './src/pro/kraken.js';
@@ -157,10 +152,8 @@ import kucoinPro from './src/pro/kucoin.js';
157
152
  import kucoinfuturesPro from './src/pro/kucoinfutures.js';
158
153
  import lunoPro from './src/pro/luno.js';
159
154
  import mexcPro from './src/pro/mexc.js';
160
- import mexc3Pro from './src/pro/mexc3.js';
161
155
  import ndaxPro from './src/pro/ndax.js';
162
156
  import okcoinPro from './src/pro/okcoin.js';
163
- import okexPro from './src/pro/okex.js';
164
157
  import okxPro from './src/pro/okx.js';
165
158
  import phemexPro from './src/pro/phemex.js';
166
159
  import poloniexPro from './src/pro/poloniex.js';
@@ -235,7 +228,6 @@ declare const exchanges: {
235
228
  htx: typeof htx;
236
229
  huobi: typeof huobi;
237
230
  huobijp: typeof huobijp;
238
- huobipro: typeof huobipro;
239
231
  idex: typeof idex;
240
232
  independentreserve: typeof independentreserve;
241
233
  indodax: typeof indodax;
@@ -250,13 +242,10 @@ declare const exchanges: {
250
242
  lykke: typeof lykke;
251
243
  mercado: typeof mercado;
252
244
  mexc: typeof mexc;
253
- mexc3: typeof mexc3;
254
245
  ndax: typeof ndax;
255
246
  novadax: typeof novadax;
256
247
  oceanex: typeof oceanex;
257
248
  okcoin: typeof okcoin;
258
- okex: typeof okex;
259
- okex5: typeof okex5;
260
249
  okx: typeof okx;
261
250
  p2b: typeof p2b;
262
251
  paymium: typeof paymium;
@@ -316,7 +305,6 @@ declare const pro: {
316
305
  htx: typeof htxPro;
317
306
  huobi: typeof huobiPro;
318
307
  huobijp: typeof huobijpPro;
319
- huobipro: typeof huobiproPro;
320
308
  idex: typeof idexPro;
321
309
  independentreserve: typeof independentreservePro;
322
310
  kraken: typeof krakenPro;
@@ -325,10 +313,8 @@ declare const pro: {
325
313
  kucoinfutures: typeof kucoinfuturesPro;
326
314
  luno: typeof lunoPro;
327
315
  mexc: typeof mexcPro;
328
- mexc3: typeof mexc3Pro;
329
316
  ndax: typeof ndaxPro;
330
317
  okcoin: typeof okcoinPro;
331
- okex: typeof okexPro;
332
318
  okx: typeof okxPro;
333
319
  phemex: typeof phemexPro;
334
320
  poloniex: typeof poloniexPro;
@@ -384,7 +370,6 @@ declare const ccxt: {
384
370
  htx: typeof htxPro;
385
371
  huobi: typeof huobiPro;
386
372
  huobijp: typeof huobijpPro;
387
- huobipro: typeof huobiproPro;
388
373
  idex: typeof idexPro;
389
374
  independentreserve: typeof independentreservePro;
390
375
  kraken: typeof krakenPro;
@@ -393,10 +378,8 @@ declare const ccxt: {
393
378
  kucoinfutures: typeof kucoinfuturesPro;
394
379
  luno: typeof lunoPro;
395
380
  mexc: typeof mexcPro;
396
- mexc3: typeof mexc3Pro;
397
381
  ndax: typeof ndaxPro;
398
382
  okcoin: typeof okcoinPro;
399
- okex: typeof okexPro;
400
383
  okx: typeof okxPro;
401
384
  phemex: typeof phemexPro;
402
385
  poloniex: typeof poloniexPro;
@@ -472,7 +455,6 @@ declare const ccxt: {
472
455
  htx: typeof htx;
473
456
  huobi: typeof huobi;
474
457
  huobijp: typeof huobijp;
475
- huobipro: typeof huobipro;
476
458
  idex: typeof idex;
477
459
  independentreserve: typeof independentreserve;
478
460
  indodax: typeof indodax;
@@ -487,13 +469,10 @@ declare const ccxt: {
487
469
  lykke: typeof lykke;
488
470
  mercado: typeof mercado;
489
471
  mexc: typeof mexc;
490
- mexc3: typeof mexc3;
491
472
  ndax: typeof ndax;
492
473
  novadax: typeof novadax;
493
474
  oceanex: typeof oceanex;
494
475
  okcoin: typeof okcoin;
495
- okex: typeof okex;
496
- okex5: typeof okex5;
497
476
  okx: typeof okx;
498
477
  p2b: typeof p2b;
499
478
  paymium: typeof paymium;
@@ -513,5 +492,5 @@ declare const ccxt: {
513
492
  zaif: typeof zaif;
514
493
  zonda: typeof zonda;
515
494
  } & typeof functions & typeof errors;
516
- export { version, Exchange, exchanges, pro, Precise, functions, errors, BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending, NoChange, Market, Trade, Fee, Ticker, OrderBook, Order, Transaction, Tickers, Currency, Balance, DepositAddress, WithdrawalResponse, DepositAddressResponse, OHLCV, Balances, PartialBalances, Dictionary, MinMax, Position, FundingRateHistory, Liquidation, FundingHistory, MarginMode, Greeks, ace, alpaca, ascendex, bequant, bigone, binance, binancecoinm, binanceus, binanceusdm, bingx, bit2c, bitbank, bitbay, bitbns, bitcoincom, bitfinex, bitfinex2, bitflyer, bitforex, bitget, bithumb, bitmart, bitmex, bitopro, bitpanda, bitrue, bitso, bitstamp, bittrex, bitvavo, bl3p, blockchaincom, btcalpha, btcbox, btcmarkets, btcturk, bybit, cex, coinbase, coinbaseprime, coinbasepro, coincheck, coinex, coinlist, coinmate, coinone, coinsph, coinspot, cryptocom, currencycom, delta, deribit, digifinex, exmo, fmfwio, gate, gateio, gemini, hitbtc, hitbtc3, hollaex, htx, huobi, huobijp, huobipro, idex, independentreserve, indodax, kraken, krakenfutures, kucoin, kucoinfutures, kuna, latoken, lbank, luno, lykke, mercado, mexc, mexc3, ndax, novadax, oceanex, okcoin, okex, okex5, okx, p2b, paymium, phemex, poloniex, poloniexfutures, probit, tidex, timex, tokocrypto, upbit, wavesexchange, wazirx, whitebit, woo, yobit, zaif, zonda, };
495
+ export { version, Exchange, exchanges, pro, Precise, functions, errors, BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending, NoChange, Market, Trade, Fee, Ticker, OrderBook, Order, Transaction, Tickers, Currency, Balance, DepositAddress, WithdrawalResponse, DepositAddressResponse, OHLCV, Balances, PartialBalances, Dictionary, MinMax, Position, FundingRateHistory, Liquidation, FundingHistory, MarginMode, Greeks, ace, alpaca, ascendex, bequant, bigone, binance, binancecoinm, binanceus, binanceusdm, bingx, bit2c, bitbank, bitbay, bitbns, bitcoincom, bitfinex, bitfinex2, bitflyer, bitforex, bitget, bithumb, bitmart, bitmex, bitopro, bitpanda, bitrue, bitso, bitstamp, bittrex, bitvavo, bl3p, blockchaincom, btcalpha, btcbox, btcmarkets, btcturk, bybit, cex, coinbase, coinbaseprime, coinbasepro, coincheck, coinex, coinlist, coinmate, coinone, coinsph, coinspot, cryptocom, currencycom, delta, deribit, digifinex, exmo, fmfwio, gate, gateio, gemini, hitbtc, hitbtc3, hollaex, htx, huobi, huobijp, idex, independentreserve, indodax, kraken, krakenfutures, kucoin, kucoinfutures, kuna, latoken, lbank, luno, lykke, mercado, mexc, ndax, novadax, oceanex, okcoin, okx, p2b, paymium, phemex, poloniex, poloniexfutures, probit, tidex, timex, tokocrypto, upbit, wavesexchange, wazirx, whitebit, woo, yobit, zaif, zonda, };
517
496
  export default ccxt;
package/js/ccxt.js CHANGED
@@ -38,7 +38,7 @@ import * as errors from './src/base/errors.js';
38
38
  import { BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending, NoChange } from './src/base/errors.js';
39
39
  //-----------------------------------------------------------------------------
40
40
  // this is updated by vss.js when building
41
- const version = '4.1.58';
41
+ const version = '4.1.60';
42
42
  Exchange.ccxtVersion = version;
43
43
  //-----------------------------------------------------------------------------
44
44
  import ace from './src/ace.js';
@@ -105,7 +105,6 @@ import hollaex from './src/hollaex.js';
105
105
  import htx from './src/htx.js';
106
106
  import huobi from './src/huobi.js';
107
107
  import huobijp from './src/huobijp.js';
108
- import huobipro from './src/huobipro.js';
109
108
  import idex from './src/idex.js';
110
109
  import independentreserve from './src/independentreserve.js';
111
110
  import indodax from './src/indodax.js';
@@ -120,13 +119,10 @@ import luno from './src/luno.js';
120
119
  import lykke from './src/lykke.js';
121
120
  import mercado from './src/mercado.js';
122
121
  import mexc from './src/mexc.js';
123
- import mexc3 from './src/mexc3.js';
124
122
  import ndax from './src/ndax.js';
125
123
  import novadax from './src/novadax.js';
126
124
  import oceanex from './src/oceanex.js';
127
125
  import okcoin from './src/okcoin.js';
128
- import okex from './src/okex.js';
129
- import okex5 from './src/okex5.js';
130
126
  import okx from './src/okx.js';
131
127
  import p2b from './src/p2b.js';
132
128
  import paymium from './src/paymium.js';
@@ -185,7 +181,6 @@ import hollaexPro from './src/pro/hollaex.js';
185
181
  import htxPro from './src/pro/htx.js';
186
182
  import huobiPro from './src/pro/huobi.js';
187
183
  import huobijpPro from './src/pro/huobijp.js';
188
- import huobiproPro from './src/pro/huobipro.js';
189
184
  import idexPro from './src/pro/idex.js';
190
185
  import independentreservePro from './src/pro/independentreserve.js';
191
186
  import krakenPro from './src/pro/kraken.js';
@@ -194,10 +189,8 @@ import kucoinPro from './src/pro/kucoin.js';
194
189
  import kucoinfuturesPro from './src/pro/kucoinfutures.js';
195
190
  import lunoPro from './src/pro/luno.js';
196
191
  import mexcPro from './src/pro/mexc.js';
197
- import mexc3Pro from './src/pro/mexc3.js';
198
192
  import ndaxPro from './src/pro/ndax.js';
199
193
  import okcoinPro from './src/pro/okcoin.js';
200
- import okexPro from './src/pro/okex.js';
201
194
  import okxPro from './src/pro/okx.js';
202
195
  import phemexPro from './src/pro/phemex.js';
203
196
  import poloniexPro from './src/pro/poloniex.js';
@@ -272,7 +265,6 @@ const exchanges = {
272
265
  'htx': htx,
273
266
  'huobi': huobi,
274
267
  'huobijp': huobijp,
275
- 'huobipro': huobipro,
276
268
  'idex': idex,
277
269
  'independentreserve': independentreserve,
278
270
  'indodax': indodax,
@@ -287,13 +279,10 @@ const exchanges = {
287
279
  'lykke': lykke,
288
280
  'mercado': mercado,
289
281
  'mexc': mexc,
290
- 'mexc3': mexc3,
291
282
  'ndax': ndax,
292
283
  'novadax': novadax,
293
284
  'oceanex': oceanex,
294
285
  'okcoin': okcoin,
295
- 'okex': okex,
296
- 'okex5': okex5,
297
286
  'okx': okx,
298
287
  'p2b': p2b,
299
288
  'paymium': paymium,
@@ -353,7 +342,6 @@ const pro = {
353
342
  'htx': htxPro,
354
343
  'huobi': huobiPro,
355
344
  'huobijp': huobijpPro,
356
- 'huobipro': huobiproPro,
357
345
  'idex': idexPro,
358
346
  'independentreserve': independentreservePro,
359
347
  'kraken': krakenPro,
@@ -362,10 +350,8 @@ const pro = {
362
350
  'kucoinfutures': kucoinfuturesPro,
363
351
  'luno': lunoPro,
364
352
  'mexc': mexcPro,
365
- 'mexc3': mexc3Pro,
366
353
  'ndax': ndaxPro,
367
354
  'okcoin': okcoinPro,
368
- 'okex': okexPro,
369
355
  'okx': okxPro,
370
356
  'phemex': phemexPro,
371
357
  'poloniex': poloniexPro,
@@ -388,6 +374,6 @@ pro.exchanges = Object.keys(pro);
388
374
  pro['Exchange'] = Exchange; // now the same for rest and ts
389
375
  //-----------------------------------------------------------------------------
390
376
  const ccxt = Object.assign({ version, Exchange, Precise, 'exchanges': Object.keys(exchanges), 'pro': pro }, exchanges, functions, errors);
391
- export { version, Exchange, exchanges, pro, Precise, functions, errors, BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending, NoChange, ace, alpaca, ascendex, bequant, bigone, binance, binancecoinm, binanceus, binanceusdm, bingx, bit2c, bitbank, bitbay, bitbns, bitcoincom, bitfinex, bitfinex2, bitflyer, bitforex, bitget, bithumb, bitmart, bitmex, bitopro, bitpanda, bitrue, bitso, bitstamp, bittrex, bitvavo, bl3p, blockchaincom, btcalpha, btcbox, btcmarkets, btcturk, bybit, cex, coinbase, coinbaseprime, coinbasepro, coincheck, coinex, coinlist, coinmate, coinone, coinsph, coinspot, cryptocom, currencycom, delta, deribit, digifinex, exmo, fmfwio, gate, gateio, gemini, hitbtc, hitbtc3, hollaex, htx, huobi, huobijp, huobipro, idex, independentreserve, indodax, kraken, krakenfutures, kucoin, kucoinfutures, kuna, latoken, lbank, luno, lykke, mercado, mexc, mexc3, ndax, novadax, oceanex, okcoin, okex, okex5, okx, p2b, paymium, phemex, poloniex, poloniexfutures, probit, tidex, timex, tokocrypto, upbit, wavesexchange, wazirx, whitebit, woo, yobit, zaif, zonda, };
377
+ export { version, Exchange, exchanges, pro, Precise, functions, errors, BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending, NoChange, ace, alpaca, ascendex, bequant, bigone, binance, binancecoinm, binanceus, binanceusdm, bingx, bit2c, bitbank, bitbay, bitbns, bitcoincom, bitfinex, bitfinex2, bitflyer, bitforex, bitget, bithumb, bitmart, bitmex, bitopro, bitpanda, bitrue, bitso, bitstamp, bittrex, bitvavo, bl3p, blockchaincom, btcalpha, btcbox, btcmarkets, btcturk, bybit, cex, coinbase, coinbaseprime, coinbasepro, coincheck, coinex, coinlist, coinmate, coinone, coinsph, coinspot, cryptocom, currencycom, delta, deribit, digifinex, exmo, fmfwio, gate, gateio, gemini, hitbtc, hitbtc3, hollaex, htx, huobi, huobijp, idex, independentreserve, indodax, kraken, krakenfutures, kucoin, kucoinfutures, kuna, latoken, lbank, luno, lykke, mercado, mexc, ndax, novadax, oceanex, okcoin, okx, p2b, paymium, phemex, poloniex, poloniexfutures, probit, tidex, timex, tokocrypto, upbit, wavesexchange, wazirx, whitebit, woo, yobit, zaif, zonda, };
392
378
  export default ccxt;
393
379
  //-----------------------------------------------------------------------------
@@ -52,6 +52,7 @@ interface Exchange {
52
52
  sapiGetMarginCapitalFlow(params?: {}): Promise<implicitReturnType>;
53
53
  sapiGetMarginDelistSchedule(params?: {}): Promise<implicitReturnType>;
54
54
  sapiGetMarginAvailableInventory(params?: {}): Promise<implicitReturnType>;
55
+ sapiGetMarginLeverageBracket(params?: {}): Promise<implicitReturnType>;
55
56
  sapiGetLoanVipLoanableData(params?: {}): Promise<implicitReturnType>;
56
57
  sapiGetLoanVipCollateralData(params?: {}): Promise<implicitReturnType>;
57
58
  sapiGetLoanVipRequestData(params?: {}): Promise<implicitReturnType>;
@@ -52,6 +52,7 @@ interface binance {
52
52
  sapiGetMarginCapitalFlow(params?: {}): Promise<implicitReturnType>;
53
53
  sapiGetMarginDelistSchedule(params?: {}): Promise<implicitReturnType>;
54
54
  sapiGetMarginAvailableInventory(params?: {}): Promise<implicitReturnType>;
55
+ sapiGetMarginLeverageBracket(params?: {}): Promise<implicitReturnType>;
55
56
  sapiGetLoanVipLoanableData(params?: {}): Promise<implicitReturnType>;
56
57
  sapiGetLoanVipCollateralData(params?: {}): Promise<implicitReturnType>;
57
58
  sapiGetLoanVipRequestData(params?: {}): Promise<implicitReturnType>;
@@ -52,6 +52,7 @@ interface binance {
52
52
  sapiGetMarginCapitalFlow(params?: {}): Promise<implicitReturnType>;
53
53
  sapiGetMarginDelistSchedule(params?: {}): Promise<implicitReturnType>;
54
54
  sapiGetMarginAvailableInventory(params?: {}): Promise<implicitReturnType>;
55
+ sapiGetMarginLeverageBracket(params?: {}): Promise<implicitReturnType>;
55
56
  sapiGetLoanVipLoanableData(params?: {}): Promise<implicitReturnType>;
56
57
  sapiGetLoanVipCollateralData(params?: {}): Promise<implicitReturnType>;
57
58
  sapiGetLoanVipRequestData(params?: {}): Promise<implicitReturnType>;
@@ -52,6 +52,7 @@ interface binance {
52
52
  sapiGetMarginCapitalFlow(params?: {}): Promise<implicitReturnType>;
53
53
  sapiGetMarginDelistSchedule(params?: {}): Promise<implicitReturnType>;
54
54
  sapiGetMarginAvailableInventory(params?: {}): Promise<implicitReturnType>;
55
+ sapiGetMarginLeverageBracket(params?: {}): Promise<implicitReturnType>;
55
56
  sapiGetLoanVipLoanableData(params?: {}): Promise<implicitReturnType>;
56
57
  sapiGetLoanVipCollateralData(params?: {}): Promise<implicitReturnType>;
57
58
  sapiGetLoanVipRequestData(params?: {}): Promise<implicitReturnType>;
@@ -65,10 +65,6 @@ interface Exchange {
65
65
  spotPrivatePostCapitalDepositAddress(params?: {}): Promise<implicitReturnType>;
66
66
  spotPrivatePostCapitalSubAccountUniversalTransfer(params?: {}): Promise<implicitReturnType>;
67
67
  spotPrivatePostCapitalConvert(params?: {}): Promise<implicitReturnType>;
68
- spotPrivatePostMarginTradeMode(params?: {}): Promise<implicitReturnType>;
69
- spotPrivatePostMarginOrder(params?: {}): Promise<implicitReturnType>;
70
- spotPrivatePostMarginLoan(params?: {}): Promise<implicitReturnType>;
71
- spotPrivatePostMarginRepay(params?: {}): Promise<implicitReturnType>;
72
68
  spotPrivatePostMxDeductEnable(params?: {}): Promise<implicitReturnType>;
73
69
  spotPrivatePostUserDataStream(params?: {}): Promise<implicitReturnType>;
74
70
  spotPrivatePutUserDataStream(params?: {}): Promise<implicitReturnType>;