ccxt 4.3.40 → 4.3.41

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 (76) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.min.js +3 -3
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/binance.js +3 -0
  5. package/dist/cjs/src/bitfinex2.js +1 -1
  6. package/dist/cjs/src/bithumb.js +9 -1
  7. package/dist/cjs/src/bitstamp.js +38 -2
  8. package/dist/cjs/src/coinlist.js +20 -1
  9. package/dist/cjs/src/coinmate.js +19 -3
  10. package/dist/cjs/src/coinone.js +1 -1
  11. package/dist/cjs/src/coinspot.js +13 -2
  12. package/dist/cjs/src/independentreserve.js +33 -1
  13. package/dist/cjs/src/indodax.js +43 -2
  14. package/dist/cjs/src/okx.js +7 -0
  15. package/dist/cjs/src/pro/alpaca.js +5 -5
  16. package/dist/cjs/src/pro/ascendex.js +3 -3
  17. package/dist/cjs/src/pro/bingx.js +293 -47
  18. package/dist/cjs/src/pro/bitget.js +6 -5
  19. package/dist/cjs/src/pro/bitrue.js +3 -4
  20. package/dist/cjs/src/pro/currencycom.js +6 -5
  21. package/dist/cjs/src/pro/exmo.js +5 -6
  22. package/dist/cjs/src/pro/gemini.js +4 -3
  23. package/dist/cjs/src/pro/independentreserve.js +7 -7
  24. package/dist/cjs/src/pro/lbank.js +4 -4
  25. package/dist/cjs/src/pro/phemex.js +5 -5
  26. package/dist/cjs/src/pro/probit.js +4 -4
  27. package/dist/cjs/src/pro/upbit.js +318 -2
  28. package/dist/cjs/src/pro/wazirx.js +12 -12
  29. package/dist/cjs/src/upbit.js +17 -9
  30. package/dist/cjs/src/woo.js +6 -2
  31. package/js/ccxt.d.ts +1 -1
  32. package/js/ccxt.js +1 -1
  33. package/js/src/abstract/binance.d.ts +2 -0
  34. package/js/src/abstract/binancecoinm.d.ts +2 -0
  35. package/js/src/abstract/binanceus.d.ts +2 -0
  36. package/js/src/abstract/binanceusdm.d.ts +2 -0
  37. package/js/src/abstract/okx.d.ts +7 -0
  38. package/js/src/binance.js +3 -0
  39. package/js/src/bitfinex2.js +1 -1
  40. package/js/src/bithumb.d.ts +2 -2
  41. package/js/src/bithumb.js +9 -1
  42. package/js/src/bitstamp.d.ts +2 -2
  43. package/js/src/bitstamp.js +38 -2
  44. package/js/src/coinlist.d.ts +1 -1
  45. package/js/src/coinlist.js +20 -1
  46. package/js/src/coinmate.d.ts +1 -3
  47. package/js/src/coinmate.js +19 -3
  48. package/js/src/coinone.d.ts +1 -1
  49. package/js/src/coinone.js +1 -1
  50. package/js/src/coinspot.d.ts +1 -1
  51. package/js/src/coinspot.js +13 -2
  52. package/js/src/independentreserve.d.ts +1 -1
  53. package/js/src/independentreserve.js +33 -1
  54. package/js/src/indodax.d.ts +1 -1
  55. package/js/src/indodax.js +43 -2
  56. package/js/src/okx.js +7 -0
  57. package/js/src/pro/alpaca.js +5 -5
  58. package/js/src/pro/ascendex.js +3 -3
  59. package/js/src/pro/bingx.d.ts +6 -1
  60. package/js/src/pro/bingx.js +294 -48
  61. package/js/src/pro/bitget.js +6 -5
  62. package/js/src/pro/bitrue.js +3 -4
  63. package/js/src/pro/currencycom.js +6 -5
  64. package/js/src/pro/exmo.js +5 -6
  65. package/js/src/pro/gemini.js +4 -3
  66. package/js/src/pro/independentreserve.js +7 -7
  67. package/js/src/pro/lbank.js +4 -4
  68. package/js/src/pro/phemex.js +5 -5
  69. package/js/src/pro/probit.js +4 -4
  70. package/js/src/pro/upbit.d.ts +13 -1
  71. package/js/src/pro/upbit.js +319 -3
  72. package/js/src/pro/wazirx.js +12 -12
  73. package/js/src/upbit.js +17 -9
  74. package/js/src/woo.d.ts +1 -1
  75. package/js/src/woo.js +6 -2
  76. package/package.json +1 -1
package/dist/cjs/ccxt.js CHANGED
@@ -185,7 +185,7 @@ var woofipro$1 = require('./src/pro/woofipro.js');
185
185
 
186
186
  //-----------------------------------------------------------------------------
187
187
  // this is updated by vss.js when building
188
- const version = '4.3.40';
188
+ const version = '4.3.41';
189
189
  Exchange["default"].ccxtVersion = version;
190
190
  const exchanges = {
191
191
  'ace': ace,
@@ -236,6 +236,9 @@ class binance extends binance$1 {
236
236
  // UID (sapi) request rate limit of 180 000 per minute
237
237
  // 1 UID (sapi) => cost = 0.006667 => (1000 / (50 * 0.006667)) * 60 = 180000
238
238
  'get': {
239
+ // copy trading
240
+ 'copyTrading/futures/userStatus': 2,
241
+ 'copyTrading/futures/leadSymbol': 2,
239
242
  'system/status': 0.1,
240
243
  // these endpoints require this.apiKey
241
244
  'accountSnapshot': 240,
@@ -1721,7 +1721,7 @@ class bitfinex2 extends bitfinex2$1 {
1721
1721
  }
1722
1722
  const orders = this.safeList(response, 4, []);
1723
1723
  const order = this.safeList(orders, 0);
1724
- return this.parseOrder(order, market);
1724
+ return this.parseOrder(this.extend({ 'result': order }), market);
1725
1725
  }
1726
1726
  async createOrders(orders, params = {}) {
1727
1727
  /**
@@ -966,7 +966,15 @@ class bithumb extends bithumb$1 {
966
966
  'order_currency': market['base'],
967
967
  'payment_currency': market['quote'],
968
968
  };
969
- return await this.privatePostTradeCancel(this.extend(request, params));
969
+ const response = await this.privatePostTradeCancel(this.extend(request, params));
970
+ //
971
+ // {
972
+ // 'status': 'string',
973
+ // }
974
+ //
975
+ return this.safeOrder({
976
+ 'info': response,
977
+ });
970
978
  }
971
979
  async cancelUnifiedOrder(order, params = {}) {
972
980
  const request = {
@@ -1443,7 +1443,17 @@ class bitstamp extends bitstamp$1 {
1443
1443
  const request = {
1444
1444
  'id': id,
1445
1445
  };
1446
- return await this.privatePostCancelOrder(this.extend(request, params));
1446
+ const response = await this.privatePostCancelOrder(this.extend(request, params));
1447
+ //
1448
+ // {
1449
+ // "id": 1453282316578816,
1450
+ // "amount": "0.02035278",
1451
+ // "price": "2100.45",
1452
+ // "type": 0,
1453
+ // "market": "BTC/USD"
1454
+ // }
1455
+ //
1456
+ return this.parseOrder(response);
1447
1457
  }
1448
1458
  async cancelAllOrders(symbol = undefined, params = {}) {
1449
1459
  /**
@@ -1468,7 +1478,23 @@ class bitstamp extends bitstamp$1 {
1468
1478
  else {
1469
1479
  response = await this.privatePostCancelAllOrders(this.extend(request, params));
1470
1480
  }
1471
- return response;
1481
+ //
1482
+ // {
1483
+ // "canceled": [
1484
+ // {
1485
+ // "id": 1453282316578816,
1486
+ // "amount": "0.02035278",
1487
+ // "price": "2100.45",
1488
+ // "type": 0,
1489
+ // "currency_pair": "BTC/USD",
1490
+ // "market": "BTC/USD"
1491
+ // }
1492
+ // ],
1493
+ // "success": true
1494
+ // }
1495
+ //
1496
+ const canceled = this.safeList(response, 'canceled');
1497
+ return this.parseOrders(canceled);
1472
1498
  }
1473
1499
  parseOrderStatus(status) {
1474
1500
  const statuses = {
@@ -1845,6 +1871,16 @@ class bitstamp extends bitstamp$1 {
1845
1871
  // "id": "2814205012"
1846
1872
  // }
1847
1873
  //
1874
+ // cancelOrder
1875
+ //
1876
+ // {
1877
+ // "id": 1453282316578816,
1878
+ // "amount": "0.02035278",
1879
+ // "price": "2100.45",
1880
+ // "type": 0,
1881
+ // "market": "BTC/USD"
1882
+ // }
1883
+ //
1848
1884
  const id = this.safeString(order, 'id');
1849
1885
  const clientOrderId = this.safeString(order, 'client_order_id');
1850
1886
  let side = this.safeString(order, 'type');
@@ -1455,7 +1455,26 @@ class coinlist extends coinlist$1 {
1455
1455
  await this.loadMarkets();
1456
1456
  params = ids;
1457
1457
  const response = await this.privateDeleteV1OrdersBulk(params);
1458
- return response;
1458
+ //
1459
+ // {
1460
+ // "message": "Cancel order requests received.",
1461
+ // "order_ids": [
1462
+ // "ff132955-43bc-4fe5-9d9c-5ba226cc89a0"
1463
+ // ],
1464
+ // "timestamp": "2024-06-01T02:32:30.305Z"
1465
+ // }
1466
+ //
1467
+ const orderIds = this.safeList(response, 'order_ids', []);
1468
+ const orders = [];
1469
+ const datetime = this.safeString(response, 'timestamp');
1470
+ for (let i = 0; i < orderIds.length; i++) {
1471
+ orders.push(this.safeOrder({
1472
+ 'info': orderIds[i],
1473
+ 'id': orderIds[i],
1474
+ 'lastUpdateTimestamp': this.parse8601(datetime),
1475
+ }));
1476
+ }
1477
+ return orders;
1459
1478
  }
1460
1479
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1461
1480
  /**
@@ -926,6 +926,13 @@ class coinmate extends coinmate$1 {
926
926
  // "trailing": false,
927
927
  // }
928
928
  //
929
+ // cancelOrder
930
+ //
931
+ // {
932
+ // "success": true,
933
+ // "remainingAmount": 0.1
934
+ // }
935
+ //
929
936
  const id = this.safeString(order, 'id');
930
937
  const timestamp = this.safeInteger(order, 'timestamp');
931
938
  const side = this.safeStringLower(order, 'type');
@@ -1045,9 +1052,18 @@ class coinmate extends coinmate$1 {
1045
1052
  // {"error":false,"errorMessage":null,"data":{"success":true,"remainingAmount":0.01}}
1046
1053
  const request = { 'orderId': id };
1047
1054
  const response = await this.privatePostCancelOrderWithInfo(this.extend(request, params));
1048
- return {
1049
- 'info': response,
1050
- };
1055
+ //
1056
+ // {
1057
+ // "error": false,
1058
+ // "errorMessage": null,
1059
+ // "data": {
1060
+ // "success": true,
1061
+ // "remainingAmount": 0.1
1062
+ // }
1063
+ // }
1064
+ //
1065
+ const data = this.safeDict(response, 'data');
1066
+ return this.parseOrder(data);
1051
1067
  }
1052
1068
  nonce() {
1053
1069
  return this.milliseconds();
@@ -1061,7 +1061,7 @@ class coinone extends coinone$1 {
1061
1061
  // "errorCode": "0"
1062
1062
  // }
1063
1063
  //
1064
- return response;
1064
+ return this.safeOrder(response);
1065
1065
  }
1066
1066
  async fetchDepositAddresses(codes = undefined, params = {}) {
1067
1067
  /**
@@ -533,11 +533,22 @@ class coinspot extends coinspot$1 {
533
533
  throw new errors.ArgumentsRequired(this.id + ' cancelOrder() requires a side parameter, "buy" or "sell"');
534
534
  }
535
535
  params = this.omit(params, 'side');
536
- const method = 'privatePostMy' + this.capitalize(side) + 'Cancel';
537
536
  const request = {
538
537
  'id': id,
539
538
  };
540
- return await this[method](this.extend(request, params));
539
+ let response = undefined;
540
+ if (side === 'buy') {
541
+ response = await this.privatePostMyBuyCancel(this.extend(request, params));
542
+ }
543
+ else {
544
+ response = await this.privatePostMySellCancel(this.extend(request, params));
545
+ }
546
+ //
547
+ // status - ok, error
548
+ //
549
+ return this.safeOrder({
550
+ 'info': response,
551
+ });
541
552
  }
542
553
  sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
543
554
  const url = this.urls['api'][api] + '/' + path;
@@ -385,6 +385,21 @@ class independentreserve extends independentreserve$1 {
385
385
  // "FeePercent": 0.005,
386
386
  // }
387
387
  //
388
+ // cancelOrder
389
+ //
390
+ // {
391
+ // "AvgPrice": 455.48,
392
+ // "CreatedTimestampUtc": "2022-08-05T06:42:11.3032208Z",
393
+ // "OrderGuid": "719c495c-a39e-4884-93ac-280b37245037",
394
+ // "Price": 485.76,
395
+ // "PrimaryCurrencyCode": "Xbt",
396
+ // "ReservedAmount": 0.358,
397
+ // "SecondaryCurrencyCode": "Usd",
398
+ // "Status": "Cancelled",
399
+ // "Type": "LimitOffer",
400
+ // "VolumeFilled": 0,
401
+ // "VolumeOrdered": 0.358
402
+ // }
388
403
  let symbol = undefined;
389
404
  const baseId = this.safeString(order, 'PrimaryCurrencyCode');
390
405
  const quoteId = this.safeString(order, 'SecondaryCurrencyCode');
@@ -715,6 +730,7 @@ class independentreserve extends independentreserve$1 {
715
730
  * @method
716
731
  * @name independentreserve#cancelOrder
717
732
  * @description cancels an open order
733
+ * @see https://www.independentreserve.com/features/api#CancelOrder
718
734
  * @param {string} id order id
719
735
  * @param {string} symbol unified symbol of the market the order was made in
720
736
  * @param {object} [params] extra parameters specific to the exchange API endpoint
@@ -724,7 +740,23 @@ class independentreserve extends independentreserve$1 {
724
740
  const request = {
725
741
  'orderGuid': id,
726
742
  };
727
- return await this.privatePostCancelOrder(this.extend(request, params));
743
+ const response = await this.privatePostCancelOrder(this.extend(request, params));
744
+ //
745
+ // {
746
+ // "AvgPrice": 455.48,
747
+ // "CreatedTimestampUtc": "2022-08-05T06:42:11.3032208Z",
748
+ // "OrderGuid": "719c495c-a39e-4884-93ac-280b37245037",
749
+ // "Price": 485.76,
750
+ // "PrimaryCurrencyCode": "Xbt",
751
+ // "ReservedAmount": 0.358,
752
+ // "SecondaryCurrencyCode": "Usd",
753
+ // "Status": "Cancelled",
754
+ // "Type": "LimitOffer",
755
+ // "VolumeFilled": 0,
756
+ // "VolumeOrdered": 0.358
757
+ // }
758
+ //
759
+ return this.parseOrder(response);
728
760
  }
729
761
  async fetchDepositAddress(code, params = {}) {
730
762
  /**
@@ -653,6 +653,24 @@ class indodax extends indodax$1 {
653
653
  // "order_xrp": "30.45000000",
654
654
  // "remain_xrp": "0.00000000"
655
655
  // }
656
+ //
657
+ // cancelOrder
658
+ //
659
+ // {
660
+ // "order_id": 666883,
661
+ // "client_order_id": "clientx-sj82ks82j",
662
+ // "type": "sell",
663
+ // "pair": "btc_idr",
664
+ // "balance": {
665
+ // "idr": "33605800",
666
+ // "btc": "0.00000000",
667
+ // ...
668
+ // "frozen_idr": "0",
669
+ // "frozen_btc": "0.00000000",
670
+ // ...
671
+ // }
672
+ // }
673
+ //
656
674
  let side = undefined;
657
675
  if ('type' in order) {
658
676
  side = order['type'];
@@ -663,6 +681,8 @@ class indodax extends indodax$1 {
663
681
  const price = this.safeString(order, 'price');
664
682
  let amount = undefined;
665
683
  let remaining = undefined;
684
+ const marketId = this.safeString(order, 'pair');
685
+ market = this.safeMarket(marketId, market);
666
686
  if (market !== undefined) {
667
687
  symbol = market['symbol'];
668
688
  let quoteId = market['quoteId'];
@@ -685,7 +705,7 @@ class indodax extends indodax$1 {
685
705
  return this.safeOrder({
686
706
  'info': order,
687
707
  'id': id,
688
- 'clientOrderId': undefined,
708
+ 'clientOrderId': this.safeString(order, 'client_order_id'),
689
709
  'timestamp': timestamp,
690
710
  'datetime': this.iso8601(timestamp),
691
711
  'lastTradeTimestamp': undefined,
@@ -863,7 +883,28 @@ class indodax extends indodax$1 {
863
883
  'pair': market['id'],
864
884
  'type': side,
865
885
  };
866
- return await this.privatePostCancelOrder(this.extend(request, params));
886
+ const response = await this.privatePostCancelOrder(this.extend(request, params));
887
+ //
888
+ // {
889
+ // "success": 1,
890
+ // "return": {
891
+ // "order_id": 666883,
892
+ // "client_order_id": "clientx-sj82ks82j",
893
+ // "type": "sell",
894
+ // "pair": "btc_idr",
895
+ // "balance": {
896
+ // "idr": "33605800",
897
+ // "btc": "0.00000000",
898
+ // ...
899
+ // "frozen_idr": "0",
900
+ // "frozen_btc": "0.00000000",
901
+ // ...
902
+ // }
903
+ // }
904
+ // }
905
+ //
906
+ const data = this.safeDict(response, 'return');
907
+ return this.parseOrder(data);
867
908
  }
868
909
  async fetchTransactionFee(code, params = {}) {
869
910
  /**
@@ -345,6 +345,9 @@ class okx extends okx$1 {
345
345
  'account/greeks': 2,
346
346
  'account/position-tiers': 2,
347
347
  'account/mmp-config': 4,
348
+ 'account/fixed-loan/borrowing-limit': 4,
349
+ 'account/fixed-loan/borrowing-quote': 5,
350
+ 'account/fixed-loan/borrowing-orders-list': 5,
348
351
  // subaccount
349
352
  'users/subaccount/list': 10,
350
353
  'account/subaccount/balances': 10 / 3,
@@ -470,6 +473,10 @@ class okx extends okx$1 {
470
473
  'account/set-account-level': 4,
471
474
  'account/mmp-reset': 4,
472
475
  'account/mmp-config': 100,
476
+ 'account/fixed-loan/borrowing-order': 5,
477
+ 'account/fixed-loan/amend-borrowing-order': 5,
478
+ 'account/fixed-loan/manual-reborrow': 5,
479
+ 'account/fixed-loan/repay-borrowing-order': 5,
473
480
  // subaccount
474
481
  'users/subaccount/modify-apikey': 10,
475
482
  'asset/subaccount/transfer': 10,
@@ -225,17 +225,17 @@ class alpaca extends alpaca$1 {
225
225
  const datetime = this.safeString(message, 't');
226
226
  const timestamp = this.parse8601(datetime);
227
227
  const isSnapshot = this.safeBool(message, 'r', false);
228
- let orderbook = this.safeValue(this.orderbooks, symbol);
229
- if (orderbook === undefined) {
230
- orderbook = this.orderBook();
228
+ if (!(symbol in this.orderbooks)) {
229
+ this.orderbooks[symbol] = this.orderBook();
231
230
  }
231
+ const orderbook = this.orderbooks[symbol];
232
232
  if (isSnapshot) {
233
233
  const snapshot = this.parseOrderBook(message, symbol, timestamp, 'b', 'a', 'p', 's');
234
234
  orderbook.reset(snapshot);
235
235
  }
236
236
  else {
237
- const asks = this.safeValue(message, 'a', []);
238
- const bids = this.safeValue(message, 'b', []);
237
+ const asks = this.safeList(message, 'a', []);
238
+ const bids = this.safeList(message, 'b', []);
239
239
  this.handleDeltas(orderbook['asks'], asks);
240
240
  this.handleDeltas(orderbook['bids'], bids);
241
241
  orderbook['timestamp'] = timestamp;
@@ -293,10 +293,10 @@ class ascendex extends ascendex$1 {
293
293
  const marketId = this.safeString(message, 'symbol');
294
294
  const symbol = this.safeSymbol(marketId);
295
295
  const messageHash = channel + ':' + marketId;
296
- let orderbook = this.safeValue(this.orderbooks, symbol);
297
- if (orderbook === undefined) {
298
- orderbook = this.orderBook({});
296
+ if (!(symbol in this.orderbooks)) {
297
+ this.orderbooks[symbol] = this.orderBook({});
299
298
  }
299
+ const orderbook = this.orderbooks[symbol];
300
300
  if (orderbook['nonce'] === undefined) {
301
301
  orderbook.cache.push(message);
302
302
  }