ccxt 4.3.41 → 4.3.43

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 (52) hide show
  1. package/README.md +5 -5
  2. package/dist/ccxt.browser.min.js +3 -3
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/binance.js +169 -44
  5. package/dist/cjs/src/bitmart.js +196 -100
  6. package/dist/cjs/src/blockchaincom.js +11 -7
  7. package/dist/cjs/src/btcmarkets.js +31 -2
  8. package/dist/cjs/src/coinex.js +107 -108
  9. package/dist/cjs/src/kraken.js +30 -3
  10. package/dist/cjs/src/krakenfutures.js +56 -1
  11. package/dist/cjs/src/kucoin.js +59 -2
  12. package/dist/cjs/src/phemex.js +5 -4
  13. package/dist/cjs/src/pro/bitget.js +36 -22
  14. package/dist/cjs/src/pro/bybit.js +1 -1
  15. package/dist/cjs/src/pro/mexc.js +2 -2
  16. package/dist/cjs/src/pro/upbit.js +8 -4
  17. package/dist/cjs/src/pro/woo.js +2 -2
  18. package/dist/cjs/src/tradeogre.js +11 -5
  19. package/dist/cjs/src/wavesexchange.js +2 -2
  20. package/dist/cjs/src/wazirx.js +38 -15
  21. package/dist/cjs/src/zonda.js +9 -1
  22. package/js/ccxt.d.ts +3 -3
  23. package/js/ccxt.js +1 -1
  24. package/js/src/abstract/coinex.d.ts +2 -1
  25. package/js/src/binance.js +169 -44
  26. package/js/src/bitmart.js +196 -100
  27. package/js/src/blockchaincom.d.ts +2 -8
  28. package/js/src/blockchaincom.js +11 -7
  29. package/js/src/btcmarkets.d.ts +2 -2
  30. package/js/src/btcmarkets.js +31 -2
  31. package/js/src/coinex.js +107 -108
  32. package/js/src/kraken.d.ts +3 -3
  33. package/js/src/kraken.js +30 -3
  34. package/js/src/krakenfutures.d.ts +1 -1
  35. package/js/src/krakenfutures.js +56 -1
  36. package/js/src/kucoin.d.ts +1 -1
  37. package/js/src/kucoin.js +59 -2
  38. package/js/src/phemex.js +6 -5
  39. package/js/src/pro/bitget.js +36 -22
  40. package/js/src/pro/bybit.js +1 -1
  41. package/js/src/pro/mexc.js +2 -2
  42. package/js/src/pro/upbit.js +8 -4
  43. package/js/src/pro/woo.js +2 -2
  44. package/js/src/tradeogre.d.ts +1 -1
  45. package/js/src/tradeogre.js +12 -6
  46. package/js/src/wavesexchange.d.ts +1 -20
  47. package/js/src/wavesexchange.js +2 -2
  48. package/js/src/wazirx.d.ts +1 -1
  49. package/js/src/wazirx.js +38 -15
  50. package/js/src/zonda.d.ts +1 -1
  51. package/js/src/zonda.js +9 -1
  52. package/package.json +1 -1
@@ -1021,6 +1021,7 @@ export default class bitget extends bitgetRest {
1021
1021
  [marginMode, params] = this.handleMarginModeAndParams('watchOrders', params);
1022
1022
  if (marginMode !== undefined) {
1023
1023
  instType = 'MARGIN';
1024
+ messageHash = messageHash + ':' + marginMode;
1024
1025
  if (marginMode === 'isolated') {
1025
1026
  channel = 'orders-isolated';
1026
1027
  }
@@ -1114,7 +1115,13 @@ export default class bitget extends bitgetRest {
1114
1115
  const keys = Object.keys(marketSymbols);
1115
1116
  for (let i = 0; i < keys.length; i++) {
1116
1117
  const symbol = keys[i];
1117
- const innerMessageHash = messageHash + ':' + symbol;
1118
+ let innerMessageHash = messageHash + ':' + symbol;
1119
+ if (channel === 'orders-crossed') {
1120
+ innerMessageHash = innerMessageHash + ':cross';
1121
+ }
1122
+ else if (channel === 'orders-isolated') {
1123
+ innerMessageHash = innerMessageHash + ':isolated';
1124
+ }
1118
1125
  client.resolve(stored, innerMessageHash);
1119
1126
  }
1120
1127
  client.resolve(stored, messageHash);
@@ -1221,23 +1228,30 @@ export default class bitget extends bitgetRest {
1221
1228
  // isolated and cross margin
1222
1229
  //
1223
1230
  // {
1224
- // "enterPointSource": "web",
1225
- // "force": "gtc",
1226
- // "feeDetail": [],
1227
- // "orderType": "limit",
1228
- // "price": "35000.000000000",
1229
- // "quoteSize": "10.500000000",
1230
- // "side": "buy",
1231
- // "status": "live",
1232
- // "baseSize": "0.000300000",
1233
- // "cTime": "1701923982427",
1234
- // "clientOid": "4902047879864dc980c4840e9906db4e",
1235
- // "fillPrice": "0.000000000",
1236
- // "baseVolume": "0.000000000",
1237
- // "fillTotalAmount": "0.000000000",
1238
- // "loanType": "auto-loan-and-repay",
1239
- // "orderId": "1116515595178356737"
1240
- // }
1231
+ // enterPointSource: "web",
1232
+ // feeDetail: [
1233
+ // {
1234
+ // feeCoin: "AAVE",
1235
+ // deduction: "no",
1236
+ // totalDeductionFee: "0",
1237
+ // totalFee: "-0.00010740",
1238
+ // },
1239
+ // ],
1240
+ // force: "gtc",
1241
+ // orderType: "limit",
1242
+ // price: "93.170000000",
1243
+ // fillPrice: "93.170000000",
1244
+ // baseSize: "0.110600000", // total amount of order
1245
+ // quoteSize: "10.304602000", // total cost of order (independently if order is filled or pending)
1246
+ // baseVolume: "0.107400000", // filled amount of order (during order's lifecycle, and not for this specific incoming update)
1247
+ // fillTotalAmount: "10.006458000", // filled cost of order (during order's lifecycle, and not for this specific incoming update)
1248
+ // side: "buy",
1249
+ // status: "partially_filled",
1250
+ // cTime: "1717875017306",
1251
+ // clientOid: "b57afe789a06454e9c560a2aab7f7201",
1252
+ // loanType: "auto-loan",
1253
+ // orderId: "1183419084588060673",
1254
+ // }
1241
1255
  //
1242
1256
  const isSpot = !('posMode' in order);
1243
1257
  const isMargin = ('loanType' in order);
@@ -1278,12 +1292,12 @@ export default class bitget extends bitgetRest {
1278
1292
  let filledAmount = undefined;
1279
1293
  let cost = undefined;
1280
1294
  let remaining = undefined;
1281
- const totalFilled = this.safeString(order, 'accBaseVolume');
1295
+ let totalFilled = this.safeString(order, 'accBaseVolume');
1282
1296
  if (isSpot) {
1283
1297
  if (isMargin) {
1284
- filledAmount = this.omitZero(this.safeString(order, 'fillTotalAmount'));
1285
- totalAmount = this.omitZero(this.safeString(order, 'baseSize')); // for margin trading
1286
- cost = this.safeString(order, 'quoteSize');
1298
+ totalAmount = this.safeString(order, 'baseSize');
1299
+ totalFilled = this.safeString(order, 'baseVolume');
1300
+ cost = this.safeString(order, 'fillTotalAmount');
1287
1301
  }
1288
1302
  else {
1289
1303
  const partialFillAmount = this.safeString(order, 'baseVolume');
@@ -126,7 +126,7 @@ export default class bybit extends bybitRest {
126
126
  },
127
127
  'streaming': {
128
128
  'ping': this.ping,
129
- 'keepAlive': 19000,
129
+ 'keepAlive': 18000,
130
130
  },
131
131
  });
132
132
  }
@@ -37,7 +37,7 @@ export default class mexc extends mexcRest {
37
37
  'api': {
38
38
  'ws': {
39
39
  'spot': 'wss://wbs.mexc.com/ws',
40
- 'swap': 'wss://contract.mexc.com/ws',
40
+ 'swap': 'wss://contract.mexc.com/edge',
41
41
  },
42
42
  },
43
43
  },
@@ -64,7 +64,7 @@ export default class mexc extends mexcRest {
64
64
  },
65
65
  'streaming': {
66
66
  'ping': this.ping,
67
- 'keepAlive': 10000,
67
+ 'keepAlive': 8000,
68
68
  },
69
69
  'exceptions': {},
70
70
  });
@@ -232,17 +232,21 @@ export default class upbit extends upbitRest {
232
232
  }
233
233
  async authenticate(params = {}) {
234
234
  this.checkRequiredCredentials();
235
- const authenticated = this.options['ws']['token'];
235
+ const wsOptions = this.safeDict(this.options, 'ws', {});
236
+ const authenticated = this.safeString(wsOptions, 'token');
236
237
  if (authenticated === undefined) {
237
238
  const auth = {
238
239
  'access_key': this.apiKey,
239
240
  'nonce': this.uuid(),
240
241
  };
241
242
  const token = jwt(auth, this.encode(this.secret), sha256, false);
242
- this.options['ws']['token'] = token;
243
- this.options['ws']['options']['headers'] = {
244
- 'authorization': 'Bearer ' + token,
243
+ wsOptions['token'] = token;
244
+ wsOptions['options'] = {
245
+ 'headers': {
246
+ 'authorization': 'Bearer ' + token,
247
+ },
245
248
  };
249
+ this.options['ws'] = wsOptions;
246
250
  }
247
251
  const url = this.urls['api']['ws'] + '/private';
248
252
  const client = this.client(url);
package/js/src/pro/woo.js CHANGED
@@ -598,7 +598,7 @@ export default class woo extends wooRest {
598
598
  async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
599
599
  /**
600
600
  * @method
601
- * @name woo#watchOrders
601
+ * @name woo#watchMyTrades
602
602
  * @see https://docs.woo.org/#executionreport
603
603
  * @see https://docs.woo.org/#algoexecutionreportv2
604
604
  * @description watches information on multiple trades made by the user
@@ -607,7 +607,7 @@ export default class woo extends wooRest {
607
607
  * @param {int} [limit] the maximum number of order structures to retrieve
608
608
  * @param {object} [params] extra parameters specific to the exchange API endpoint
609
609
  * @param {bool} [params.trigger] true if trigger order
610
- * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
610
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
611
611
  */
612
612
  await this.loadMarkets();
613
613
  const trigger = this.safeBool2(params, 'stop', 'trigger', false);
@@ -18,7 +18,7 @@ export default class tradeogre extends Exchange {
18
18
  parseBalance(response: any): import("./base/types.js").Balances;
19
19
  createOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
20
20
  cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
21
- cancelAllOrders(symbol?: Str, params?: {}): Promise<Order>;
21
+ cancelAllOrders(symbol?: Str, params?: {}): Promise<Order[]>;
22
22
  fetchOpenOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
23
23
  fetchOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
24
24
  parseOrder(order: Dict, market?: Market): Order;
@@ -6,7 +6,7 @@
6
6
 
7
7
  // ---------------------------------------------------------------------------
8
8
  import Exchange from './abstract/tradeogre.js';
9
- import { InsufficientFunds, AuthenticationError, BadRequest, ExchangeError } from './base/errors.js';
9
+ import { InsufficientFunds, AuthenticationError, BadRequest, ExchangeError, ArgumentsRequired } from './base/errors.js';
10
10
  import { TICK_SIZE } from './base/functions/number.js';
11
11
  // ---------------------------------------------------------------------------
12
12
  /**
@@ -452,7 +452,7 @@ export default class tradeogre extends Exchange {
452
452
  * @name tradeogre#createOrder
453
453
  * @description create a trade order
454
454
  * @param {string} symbol unified symbol of the market to create an order in
455
- * @param {string} type not used by tradeogre
455
+ * @param {string} type must be 'limit'
456
456
  * @param {string} side 'buy' or 'sell'
457
457
  * @param {float} amount how much of currency you want to trade in units of base currency
458
458
  * @param {float} price the price at which the order is to be fullfilled, in units of the quote currency
@@ -461,14 +461,17 @@ export default class tradeogre extends Exchange {
461
461
  */
462
462
  await this.loadMarkets();
463
463
  const market = this.market(symbol);
464
+ if (type === 'market') {
465
+ throw new BadRequest(this.id + ' createOrder does not support market orders');
466
+ }
467
+ if (price === undefined) {
468
+ throw new ArgumentsRequired(this.id + ' createOrder requires a limit parameter');
469
+ }
464
470
  const request = {
465
471
  'market': market['id'],
466
472
  'quantity': this.parseToNumeric(this.amountToPrecision(symbol, amount)),
467
473
  'price': this.parseToNumeric(this.priceToPrecision(symbol, price)),
468
474
  };
469
- if (type === 'market') {
470
- throw new BadRequest(this.id + ' createOrder does not support market orders');
471
- }
472
475
  let response = undefined;
473
476
  if (side === 'buy') {
474
477
  response = await this.privatePostOrderBuy(this.extend(request, params));
@@ -505,7 +508,10 @@ export default class tradeogre extends Exchange {
505
508
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
506
509
  */
507
510
  await this.loadMarkets();
508
- return await this.cancelOrder('all', symbol, params);
511
+ const response = await this.cancelOrder('all', symbol, params);
512
+ return [
513
+ response,
514
+ ];
509
515
  }
510
516
  async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
511
517
  /**
@@ -53,26 +53,7 @@ export default class wavesexchange extends Exchange {
53
53
  safeGetDynamic(settings: any): any;
54
54
  safeGetRates(dynamic: any): any;
55
55
  createOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
56
- cancelOrder(id: string, symbol?: Str, params?: {}): Promise<{
57
- info: any;
58
- id: string;
59
- clientOrderId: any;
60
- timestamp: any;
61
- datetime: any;
62
- lastTradeTimestamp: any;
63
- symbol: string;
64
- type: any;
65
- side: any;
66
- price: any;
67
- amount: any;
68
- cost: any;
69
- average: any;
70
- filled: any;
71
- remaining: any;
72
- status: any;
73
- fee: any;
74
- trades: any;
75
- }>;
56
+ cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
76
57
  fetchOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
77
58
  fetchOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
78
59
  fetchOpenOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
@@ -1502,7 +1502,7 @@ export default class wavesexchange extends Exchange {
1502
1502
  const firstMessage = this.safeValue(message, 0);
1503
1503
  const firstOrder = this.safeValue(firstMessage, 0);
1504
1504
  const returnedId = this.safeString(firstOrder, 'orderId');
1505
- return {
1505
+ return this.safeOrder({
1506
1506
  'info': response,
1507
1507
  'id': returnedId,
1508
1508
  'clientOrderId': undefined,
@@ -1521,7 +1521,7 @@ export default class wavesexchange extends Exchange {
1521
1521
  'status': undefined,
1522
1522
  'fee': undefined,
1523
1523
  'trades': undefined,
1524
- };
1524
+ });
1525
1525
  }
1526
1526
  async fetchOrder(id, symbol = undefined, params = {}) {
1527
1527
  /**
@@ -28,7 +28,7 @@ export default class wazirx extends Exchange {
28
28
  fetchBalance(params?: {}): Promise<Balances>;
29
29
  fetchOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
30
30
  fetchOpenOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
31
- cancelAllOrders(symbol?: Str, params?: {}): Promise<any>;
31
+ cancelAllOrders(symbol?: Str, params?: {}): Promise<Order[]>;
32
32
  cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
33
33
  createOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
34
34
  parseOrder(order: Dict, market?: Market): Order;
package/js/src/wazirx.js CHANGED
@@ -795,7 +795,26 @@ export default class wazirx extends Exchange {
795
795
  const request = {
796
796
  'symbol': market['id'],
797
797
  };
798
- return await this.privateDeleteOpenOrders(this.extend(request, params));
798
+ const response = await this.privateDeleteOpenOrders(this.extend(request, params));
799
+ //
800
+ // [
801
+ // {
802
+ // id: "4565421197",
803
+ // symbol: "adausdt",
804
+ // type: "limit",
805
+ // side: "buy",
806
+ // status: "wait",
807
+ // price: "0.41",
808
+ // origQty: "11.00",
809
+ // executedQty: "0.00",
810
+ // avgPrice: "0.00",
811
+ // createdTime: "1718089507000",
812
+ // updatedTime: "1718089507000",
813
+ // clientOrderId: "93d2a838-e272-405d-91e7-3a7bc6d3a003"
814
+ // }
815
+ // ]
816
+ //
817
+ return this.parseOrders(response);
799
818
  }
800
819
  async cancelOrder(id, symbol = undefined, params = {}) {
801
820
  /**
@@ -871,18 +890,22 @@ export default class wazirx extends Exchange {
871
890
  return this.parseOrder(response, market);
872
891
  }
873
892
  parseOrder(order, market = undefined) {
874
- // {
875
- // "id":1949417813,
876
- // "symbol":"ltcusdt",
877
- // "type":"limit",
878
- // "side":"sell",
879
- // "status":"done",
880
- // "price":"146.2",
881
- // "origQty":"0.05",
882
- // "executedQty":"0.05",
883
- // "createdTime":1641252564000,
884
- // "updatedTime":1641252564000
885
- // },
893
+ //
894
+ // {
895
+ // "id": 1949417813,
896
+ // "symbol": "ltcusdt",
897
+ // "type": "limit",
898
+ // "side": "sell",
899
+ // "status": "done",
900
+ // "price": "146.2",
901
+ // "origQty": "0.05",
902
+ // "executedQty": "0.05",
903
+ // "avgPrice": "0.00",
904
+ // "createdTime": 1641252564000,
905
+ // "updatedTime": 1641252564000
906
+ // "clientOrderId": "93d2a838-e272-405d-91e7-3a7bc6d3a003"
907
+ // }
908
+ //
886
909
  const created = this.safeInteger(order, 'createdTime');
887
910
  const updated = this.safeInteger(order, 'updatedTime');
888
911
  const marketId = this.safeString(order, 'symbol');
@@ -897,7 +920,7 @@ export default class wazirx extends Exchange {
897
920
  return this.safeOrder({
898
921
  'info': order,
899
922
  'id': id,
900
- 'clientOrderId': undefined,
923
+ 'clientOrderId': this.safeString(order, 'clientOrderId'),
901
924
  'timestamp': created,
902
925
  'datetime': this.iso8601(created),
903
926
  'lastTradeTimestamp': updated,
@@ -913,7 +936,7 @@ export default class wazirx extends Exchange {
913
936
  'remaining': undefined,
914
937
  'cost': undefined,
915
938
  'fee': undefined,
916
- 'average': undefined,
939
+ 'average': this.safeString(order, 'avgPrice'),
917
940
  'trades': [],
918
941
  }, market);
919
942
  }
package/js/src/zonda.d.ts CHANGED
@@ -41,7 +41,7 @@ export default class zonda extends Exchange {
41
41
  parseTrade(trade: Dict, market?: Market): Trade;
42
42
  fetchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
43
43
  createOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
44
- cancelOrder(id: string, symbol?: Str, params?: {}): Promise<any>;
44
+ cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
45
45
  isFiat(currency: any): boolean;
46
46
  parseDepositAddress(depositAddress: any, currency?: Currency): {
47
47
  currency: string;
package/js/src/zonda.js CHANGED
@@ -443,6 +443,13 @@ export default class zonda extends Exchange {
443
443
  // "secondBalanceId": "ab43023b-4079-414c-b340-056e3430a3af"
444
444
  // }
445
445
  //
446
+ // cancelOrder
447
+ //
448
+ // {
449
+ // status: "Ok",
450
+ // errors: []
451
+ // }
452
+ //
446
453
  const marketId = this.safeString(order, 'market');
447
454
  const symbol = this.safeSymbol(marketId, market, '-');
448
455
  const timestamp = this.safeInteger(order, 'time');
@@ -1500,9 +1507,10 @@ export default class zonda extends Exchange {
1500
1507
  'side': side,
1501
1508
  'price': price,
1502
1509
  };
1510
+ const response = await this.v1_01PrivateDeleteTradingOfferSymbolIdSidePrice(this.extend(request, params));
1503
1511
  // { status: "Fail", errors: [ "NOT_RECOGNIZED_OFFER_TYPE" ] } -- if required params are missing
1504
1512
  // { status: "Ok", errors: [] }
1505
- return await this.v1_01PrivateDeleteTradingOfferSymbolIdSidePrice(this.extend(request, params));
1513
+ return this.parseOrder(response);
1506
1514
  }
1507
1515
  isFiat(currency) {
1508
1516
  const fiatCurrencies = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccxt",
3
- "version": "4.3.41",
3
+ "version": "4.3.43",
4
4
  "description": "A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges",
5
5
  "unpkg": "dist/ccxt.browser.min.js",
6
6
  "type": "module",