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
package/js/src/coinex.js CHANGED
@@ -21,7 +21,7 @@ export default class coinex extends Exchange {
21
21
  return this.deepExtend(super.describe(), {
22
22
  'id': 'coinex',
23
23
  'name': 'CoinEx',
24
- 'version': 'v1',
24
+ 'version': 'v2',
25
25
  'countries': ['CN'],
26
26
  // IP ratelimit is 400 requests per second
27
27
  // rateLimit = 1000ms / 400 = 2.5
@@ -318,6 +318,8 @@ export default class coinex extends Exchange {
318
318
  'futures/position-level': 1,
319
319
  'futures/liquidation-history': 1,
320
320
  'futures/basis-history': 1,
321
+ 'assets/deposit-withdraw-config': 1,
322
+ 'assets/all-deposit-withdraw-config': 1,
321
323
  },
322
324
  },
323
325
  'private': {
@@ -340,7 +342,6 @@ export default class coinex extends Exchange {
340
342
  'assets/deposit-address': 40,
341
343
  'assets/deposit-history': 40,
342
344
  'assets/withdraw': 40,
343
- 'assets/deposit-withdraw-config': 1,
344
345
  'assets/transfer-history': 40,
345
346
  'spot/order-status': 8,
346
347
  'spot/batch-order-status': 8,
@@ -534,131 +535,129 @@ export default class coinex extends Exchange {
534
535
  });
535
536
  }
536
537
  async fetchCurrencies(params = {}) {
537
- const response = await this.v1PublicGetCommonAssetConfig(params);
538
+ /**
539
+ * @method
540
+ * @name coinex#fetchCurrencies
541
+ * @description fetches all available currencies on an exchange
542
+ * @see https://docs.coinex.com/api/v2/assets/deposit-withdrawal/http/list-all-deposit-withdrawal-config
543
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
544
+ * @returns {object} an associative dictionary of currencies
545
+ */
546
+ const response = await this.v2PublicGetAssetsAllDepositWithdrawConfig(params);
547
+ //
538
548
  // {
539
549
  // "code": 0,
540
- // "data": {
541
- // "USDT-ERC20": {
542
- // "asset": "USDT",
543
- // "chain": "ERC20",
544
- // "withdrawal_precision": 6,
545
- // "can_deposit": true,
546
- // "can_withdraw": true,
547
- // "deposit_least_amount": "4.9",
548
- // "withdraw_least_amount": "4.9",
549
- // "withdraw_tx_fee": "4.9",
550
- // "explorer_asset_url": "https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7"
551
- // },
552
- // ...
553
- // },
554
- // "message": "Success",
550
+ // "data": [
551
+ // {
552
+ // "asset": {
553
+ // "ccy": "CET",
554
+ // "deposit_enabled": true,
555
+ // "withdraw_enabled": true,
556
+ // "inter_transfer_enabled": true,
557
+ // "is_st": false
558
+ // },
559
+ // "chains": [
560
+ // {
561
+ // "chain": "CSC",
562
+ // "min_deposit_amount": "0.8",
563
+ // "min_withdraw_amount": "8",
564
+ // "deposit_enabled": true,
565
+ // "withdraw_enabled": true,
566
+ // "deposit_delay_minutes": 0,
567
+ // "safe_confirmations": 10,
568
+ // "irreversible_confirmations": 20,
569
+ // "deflation_rate": "0",
570
+ // "withdrawal_fee": "0.026",
571
+ // "withdrawal_precision": 8,
572
+ // "memo": "",
573
+ // "is_memo_required_for_deposit": false,
574
+ // "explorer_asset_url": ""
575
+ // },
576
+ // ]
577
+ // }
578
+ // ],
579
+ // "message": "OK"
555
580
  // }
556
581
  //
557
- const data = this.safeValue(response, 'data', []);
558
- const coins = Object.keys(data);
582
+ const data = this.safeList(response, 'data', []);
559
583
  const result = {};
560
- for (let i = 0; i < coins.length; i++) {
561
- const coin = coins[i];
562
- const currency = data[coin];
563
- const currencyId = this.safeString(currency, 'asset');
564
- const networkId = this.safeString(currency, 'chain');
584
+ for (let i = 0; i < data.length; i++) {
585
+ const coin = data[i];
586
+ const asset = this.safeDict(coin, 'asset', {});
587
+ const chains = this.safeList(coin, 'chains', []);
588
+ const currencyId = this.safeString(asset, 'ccy');
589
+ if (currencyId === undefined) {
590
+ continue; // coinex returns empty structures for some reason
591
+ }
565
592
  const code = this.safeCurrencyCode(currencyId);
566
- const precisionString = this.parsePrecision(this.safeString(currency, 'withdrawal_precision'));
567
- const precision = this.parseNumber(precisionString);
568
- const canDeposit = this.safeValue(currency, 'can_deposit');
569
- const canWithdraw = this.safeValue(currency, 'can_withdraw');
570
- const feeString = this.safeString(currency, 'withdraw_tx_fee');
571
- const fee = this.parseNumber(feeString);
572
- const minNetworkDepositString = this.safeString(currency, 'deposit_least_amount');
573
- const minNetworkDeposit = this.parseNumber(minNetworkDepositString);
574
- const minNetworkWithdrawString = this.safeString(currency, 'withdraw_least_amount');
575
- const minNetworkWithdraw = this.parseNumber(minNetworkWithdrawString);
576
- if (this.safeValue(result, code) === undefined) {
577
- result[code] = {
578
- 'id': currencyId,
579
- 'numericId': undefined,
580
- 'code': code,
581
- 'info': undefined,
593
+ const canDeposit = this.safeBool(asset, 'deposit_enabled');
594
+ const canWithdraw = this.safeBool(asset, 'withdraw_enabled');
595
+ const firstChain = this.safeDict(chains, 0, {});
596
+ const firstPrecisionString = this.parsePrecision(this.safeString(firstChain, 'withdrawal_precision'));
597
+ result[code] = {
598
+ 'id': currencyId,
599
+ 'code': code,
600
+ 'name': undefined,
601
+ 'active': canDeposit && canWithdraw,
602
+ 'deposit': canDeposit,
603
+ 'withdraw': canWithdraw,
604
+ 'fee': undefined,
605
+ 'precision': this.parseNumber(firstPrecisionString),
606
+ 'limits': {
607
+ 'amount': {
608
+ 'min': undefined,
609
+ 'max': undefined,
610
+ },
611
+ 'deposit': {
612
+ 'min': undefined,
613
+ 'max': undefined,
614
+ },
615
+ 'withdraw': {
616
+ 'min': undefined,
617
+ 'max': undefined,
618
+ },
619
+ },
620
+ 'networks': {},
621
+ 'info': coin,
622
+ };
623
+ for (let j = 0; j < chains.length; j++) {
624
+ const chain = chains[j];
625
+ const networkId = this.safeString(chain, 'chain');
626
+ const precisionString = this.parsePrecision(this.safeString(chain, 'withdrawal_precision'));
627
+ const feeString = this.safeString(chain, 'withdrawal_fee');
628
+ const minNetworkDepositString = this.safeString(chain, 'min_deposit_amount');
629
+ const minNetworkWithdrawString = this.safeString(chain, 'min_withdraw_amount');
630
+ const canDepositChain = this.safeBool(chain, 'deposit_enabled');
631
+ const canWithdrawChain = this.safeBool(chain, 'withdraw_enabled');
632
+ const network = {
633
+ 'id': networkId,
634
+ 'network': networkId,
582
635
  'name': undefined,
583
- 'active': canDeposit && canWithdraw,
584
- 'deposit': canDeposit,
585
- 'withdraw': canWithdraw,
586
- 'fee': fee,
587
- 'precision': precision,
636
+ 'active': canDepositChain && canWithdrawChain,
637
+ 'deposit': canDepositChain,
638
+ 'withdraw': canWithdrawChain,
639
+ 'fee': this.parseNumber(feeString),
640
+ 'precision': this.parseNumber(precisionString),
588
641
  'limits': {
589
642
  'amount': {
590
643
  'min': undefined,
591
644
  'max': undefined,
592
645
  },
593
646
  'deposit': {
594
- 'min': minNetworkDeposit,
647
+ 'min': this.parseNumber(minNetworkDepositString),
595
648
  'max': undefined,
596
649
  },
597
650
  'withdraw': {
598
- 'min': minNetworkWithdraw,
651
+ 'min': this.parseNumber(minNetworkWithdrawString),
599
652
  'max': undefined,
600
653
  },
601
654
  },
655
+ 'info': chain,
602
656
  };
657
+ const networks = this.safeDict(result[code], 'networks', {});
658
+ networks[networkId] = network;
659
+ result[code]['networks'] = networks;
603
660
  }
604
- let minFeeString = this.safeString(result[code], 'fee');
605
- if (feeString !== undefined) {
606
- minFeeString = (minFeeString === undefined) ? feeString : Precise.stringMin(feeString, minFeeString);
607
- }
608
- let depositAvailable = this.safeValue(result[code], 'deposit');
609
- depositAvailable = (canDeposit) ? canDeposit : depositAvailable;
610
- let withdrawAvailable = this.safeValue(result[code], 'withdraw');
611
- withdrawAvailable = (canWithdraw) ? canWithdraw : withdrawAvailable;
612
- let minDepositString = this.safeString(result[code]['limits']['deposit'], 'min');
613
- if (minNetworkDepositString !== undefined) {
614
- minDepositString = (minDepositString === undefined) ? minNetworkDepositString : Precise.stringMin(minNetworkDepositString, minDepositString);
615
- }
616
- let minWithdrawString = this.safeString(result[code]['limits']['withdraw'], 'min');
617
- if (minNetworkWithdrawString !== undefined) {
618
- minWithdrawString = (minWithdrawString === undefined) ? minNetworkWithdrawString : Precise.stringMin(minNetworkWithdrawString, minWithdrawString);
619
- }
620
- let minPrecisionString = this.safeString(result[code], 'precision');
621
- if (precisionString !== undefined) {
622
- minPrecisionString = (minPrecisionString === undefined) ? precisionString : Precise.stringMin(precisionString, minPrecisionString);
623
- }
624
- const networks = this.safeValue(result[code], 'networks', {});
625
- const network = {
626
- 'info': currency,
627
- 'id': networkId,
628
- 'network': networkId,
629
- 'name': undefined,
630
- 'limits': {
631
- 'amount': {
632
- 'min': undefined,
633
- 'max': undefined,
634
- },
635
- 'deposit': {
636
- 'min': this.safeNumber(currency, 'deposit_least_amount'),
637
- 'max': undefined,
638
- },
639
- 'withdraw': {
640
- 'min': this.safeNumber(currency, 'withdraw_least_amount'),
641
- 'max': undefined,
642
- },
643
- },
644
- 'active': canDeposit && canWithdraw,
645
- 'deposit': canDeposit,
646
- 'withdraw': canWithdraw,
647
- 'fee': fee,
648
- 'precision': precision,
649
- };
650
- networks[networkId] = network;
651
- result[code]['networks'] = networks;
652
- result[code]['active'] = depositAvailable && withdrawAvailable;
653
- result[code]['deposit'] = depositAvailable;
654
- result[code]['withdraw'] = withdrawAvailable;
655
- const info = this.safeValue(result[code], 'info', []);
656
- info.push(currency);
657
- result[code]['info'] = info;
658
- result[code]['fee'] = this.parseNumber(minFeeString);
659
- result[code]['precision'] = this.parseNumber(minPrecisionString);
660
- result[code]['limits']['deposit']['min'] = this.parseNumber(minDepositString);
661
- result[code]['limits']['withdraw']['min'] = this.parseNumber(minWithdrawString);
662
661
  }
663
662
  return result;
664
663
  }
@@ -5431,7 +5430,7 @@ export default class coinex extends Exchange {
5431
5430
  const request = {
5432
5431
  'ccy': currency['id'],
5433
5432
  };
5434
- const response = await this.v2PrivateGetAssetsDepositWithdrawConfig(this.extend(request, params));
5433
+ const response = await this.v2PublicGetAssetsDepositWithdrawConfig(this.extend(request, params));
5435
5434
  //
5436
5435
  // {
5437
5436
  // "code": 0,
@@ -5789,7 +5788,7 @@ export default class coinex extends Exchange {
5789
5788
  preparedString += nonce + this.secret;
5790
5789
  const signature = this.hash(this.encode(preparedString), sha256);
5791
5790
  headers = {
5792
- 'Content-Type': 'application/json; charset=utf-8',
5791
+ 'Content-Type': 'application/json',
5793
5792
  'Accept': 'application/json',
5794
5793
  'X-COINEX-KEY': this.apiKey,
5795
5794
  'X-COINEX-SIGN': signature,
@@ -70,9 +70,9 @@ export default class kraken extends Exchange {
70
70
  fetchOrderTrades(id: string, symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
71
71
  fetchOrdersByIds(ids: any, symbol?: Str, params?: {}): Promise<any[]>;
72
72
  fetchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
73
- cancelOrder(id: string, symbol?: Str, params?: {}): Promise<any>;
74
- cancelOrders(ids: any, symbol?: Str, params?: {}): Promise<any>;
75
- cancelAllOrders(symbol?: Str, params?: {}): Promise<any>;
73
+ cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
74
+ cancelOrders(ids: any, symbol?: Str, params?: {}): Promise<Order[]>;
75
+ cancelAllOrders(symbol?: Str, params?: {}): Promise<Order[]>;
76
76
  cancelAllOrdersAfter(timeout: Int, params?: {}): Promise<any>;
77
77
  fetchOpenOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
78
78
  fetchClosedOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
package/js/src/kraken.js CHANGED
@@ -2140,6 +2140,14 @@ export default class kraken extends Exchange {
2140
2140
  params = this.omit(params, ['userref', 'clientOrderId']);
2141
2141
  try {
2142
2142
  response = await this.privatePostCancelOrder(this.extend(request, params));
2143
+ //
2144
+ // {
2145
+ // error: [],
2146
+ // result: {
2147
+ // count: '1'
2148
+ // }
2149
+ // }
2150
+ //
2143
2151
  }
2144
2152
  catch (e) {
2145
2153
  if (this.last_http_response) {
@@ -2149,7 +2157,9 @@ export default class kraken extends Exchange {
2149
2157
  }
2150
2158
  throw e;
2151
2159
  }
2152
- return response;
2160
+ return this.safeOrder({
2161
+ 'info': response,
2162
+ });
2153
2163
  }
2154
2164
  async cancelOrders(ids, symbol = undefined, params = {}) {
2155
2165
  /**
@@ -2174,7 +2184,11 @@ export default class kraken extends Exchange {
2174
2184
  // }
2175
2185
  // }
2176
2186
  //
2177
- return response;
2187
+ return [
2188
+ this.safeOrder({
2189
+ 'info': response,
2190
+ }),
2191
+ ];
2178
2192
  }
2179
2193
  async cancelAllOrders(symbol = undefined, params = {}) {
2180
2194
  /**
@@ -2187,7 +2201,20 @@ export default class kraken extends Exchange {
2187
2201
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2188
2202
  */
2189
2203
  await this.loadMarkets();
2190
- return await this.privatePostCancelAll(params);
2204
+ const response = await this.privatePostCancelAll(params);
2205
+ //
2206
+ // {
2207
+ // error: [],
2208
+ // result: {
2209
+ // count: '1'
2210
+ // }
2211
+ // }
2212
+ //
2213
+ return [
2214
+ this.safeOrder({
2215
+ 'info': response,
2216
+ }),
2217
+ ];
2191
2218
  }
2192
2219
  async cancelAllOrdersAfter(timeout, params = {}) {
2193
2220
  /**
@@ -20,7 +20,7 @@ export default class krakenfutures extends Exchange {
20
20
  editOrder(id: string, symbol: string, type: OrderType, side: OrderSide, amount?: Num, price?: Num, params?: {}): Promise<Order>;
21
21
  cancelOrder(id: string, symbol?: Str, params?: {}): Promise<any>;
22
22
  cancelOrders(ids: string[], symbol?: Str, params?: {}): Promise<Order[]>;
23
- cancelAllOrders(symbol?: Str, params?: {}): Promise<any>;
23
+ cancelAllOrders(symbol?: Str, params?: {}): Promise<Order[]>;
24
24
  cancelAllOrdersAfter(timeout: Int, params?: {}): Promise<any>;
25
25
  fetchOpenOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
26
26
  fetchClosedOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
@@ -1272,7 +1272,46 @@ export default class krakenfutures extends Exchange {
1272
1272
  request['symbol'] = this.marketId(symbol);
1273
1273
  }
1274
1274
  const response = await this.privatePostCancelallorders(this.extend(request, params));
1275
- return response;
1275
+ //
1276
+ // {
1277
+ // result: 'success',
1278
+ // cancelStatus: {
1279
+ // receivedTime: '2024-06-06T01:12:44.814Z',
1280
+ // cancelOnly: 'PF_XRPUSD',
1281
+ // status: 'cancelled',
1282
+ // cancelledOrders: [ { order_id: '272fd0ac-45c0-4003-b84d-d39b9e86bd36' } ],
1283
+ // orderEvents: [
1284
+ // {
1285
+ // uid: '272fd0ac-45c0-4003-b84d-d39b9e86bd36',
1286
+ // order: {
1287
+ // orderId: '272fd0ac-45c0-4003-b84d-d39b9e86bd36',
1288
+ // cliOrdId: null,
1289
+ // type: 'lmt',
1290
+ // symbol: 'PF_XRPUSD',
1291
+ // side: 'buy',
1292
+ // quantity: '10',
1293
+ // filled: '0',
1294
+ // limitPrice: '0.4',
1295
+ // reduceOnly: false,
1296
+ // timestamp: '2024-06-06T01:11:16.045Z',
1297
+ // lastUpdateTimestamp: '2024-06-06T01:11:16.045Z'
1298
+ // },
1299
+ // type: 'CANCEL'
1300
+ // }
1301
+ // ]
1302
+ // },
1303
+ // serverTime: '2024-06-06T01:12:44.814Z'
1304
+ // }
1305
+ //
1306
+ const cancelStatus = this.safeDict(response, 'cancelStatus');
1307
+ const orderEvents = this.safeList(cancelStatus, 'orderEvents', []);
1308
+ const orders = [];
1309
+ for (let i = 0; i < orderEvents.length; i++) {
1310
+ const orderEvent = this.safeDict(orderEvents, 0);
1311
+ const order = this.safeDict(orderEvent, 'order', {});
1312
+ orders.push(order);
1313
+ }
1314
+ return this.parseOrders(orders);
1276
1315
  }
1277
1316
  async cancelAllOrdersAfter(timeout, params = {}) {
1278
1317
  /**
@@ -1640,6 +1679,22 @@ export default class krakenfutures extends Exchange {
1640
1679
  // ]
1641
1680
  // }
1642
1681
  //
1682
+ // cancelAllOrders
1683
+ //
1684
+ // {
1685
+ // "orderId": "85c40002-3f20-4e87-9302-262626c3531b",
1686
+ // "cliOrdId": null,
1687
+ // "type": "lmt",
1688
+ // "symbol": "pi_xbtusd",
1689
+ // "side": "buy",
1690
+ // "quantity": 1000,
1691
+ // "filled": 0,
1692
+ // "limitPrice": 10144,
1693
+ // "stopPrice": null,
1694
+ // "reduceOnly": false,
1695
+ // "timestamp": "2019-08-01T15:26:27.790Z"
1696
+ // }
1697
+ //
1643
1698
  // FETCH OPEN ORDERS
1644
1699
  //
1645
1700
  // {
@@ -63,7 +63,7 @@ export default class kucoin extends Exchange {
63
63
  marketOrderAmountToPrecision(symbol: string, amount: any): string;
64
64
  createOrderRequest(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): any;
65
65
  editOrder(id: string, symbol: string, type: OrderType, side: OrderSide, amount?: Num, price?: Num, params?: {}): Promise<Order>;
66
- cancelOrder(id: string, symbol?: Str, params?: {}): Promise<any>;
66
+ cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
67
67
  cancelAllOrders(symbol?: Str, params?: {}): Promise<any>;
68
68
  fetchOrdersByStatus(status: any, symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
69
69
  fetchClosedOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
package/js/src/kucoin.js CHANGED
@@ -2333,27 +2333,84 @@ export default class kucoin extends Exchange {
2333
2333
  request['clientOid'] = clientOrderId;
2334
2334
  if (stop) {
2335
2335
  response = await this.privateDeleteStopOrderCancelOrderByClientOid(this.extend(request, params));
2336
+ //
2337
+ // {
2338
+ // code: '200000',
2339
+ // data: {
2340
+ // cancelledOrderId: 'vs8lgpiuao41iaft003khbbk',
2341
+ // clientOid: '123456'
2342
+ // }
2343
+ // }
2344
+ //
2336
2345
  }
2337
2346
  else if (hf) {
2338
2347
  response = await this.privateDeleteHfOrdersClientOrderClientOid(this.extend(request, params));
2348
+ //
2349
+ // {
2350
+ // "code": "200000",
2351
+ // "data": {
2352
+ // "clientOid": "6d539dc614db3"
2353
+ // }
2354
+ // }
2355
+ //
2339
2356
  }
2340
2357
  else {
2341
2358
  response = await this.privateDeleteOrderClientOrderClientOid(this.extend(request, params));
2359
+ //
2360
+ // {
2361
+ // code: '200000',
2362
+ // data: {
2363
+ // cancelledOrderId: '665e580f6660500007aba341',
2364
+ // clientOid: '1234567',
2365
+ // cancelledOcoOrderIds: null
2366
+ // }
2367
+ // }
2368
+ //
2342
2369
  }
2370
+ response = this.safeDict(response, 'data');
2371
+ return this.parseOrder(response);
2343
2372
  }
2344
2373
  else {
2345
2374
  request['orderId'] = id;
2346
2375
  if (stop) {
2347
2376
  response = await this.privateDeleteStopOrderOrderId(this.extend(request, params));
2377
+ //
2378
+ // {
2379
+ // code: '200000',
2380
+ // data: { cancelledOrderIds: [ 'vs8lgpiuaco91qk8003vebu9' ] }
2381
+ // }
2382
+ //
2348
2383
  }
2349
2384
  else if (hf) {
2350
2385
  response = await this.privateDeleteHfOrdersOrderId(this.extend(request, params));
2386
+ //
2387
+ // {
2388
+ // "code": "200000",
2389
+ // "data": {
2390
+ // "orderId": "630625dbd9180300014c8d52"
2391
+ // }
2392
+ // }
2393
+ //
2394
+ response = this.safeDict(response, 'data');
2395
+ return this.parseOrder(response);
2351
2396
  }
2352
2397
  else {
2353
2398
  response = await this.privateDeleteOrdersOrderId(this.extend(request, params));
2399
+ //
2400
+ // {
2401
+ // code: '200000',
2402
+ // data: { cancelledOrderIds: [ '665e4fbe28051a0007245c41' ] }
2403
+ // }
2404
+ //
2354
2405
  }
2406
+ const data = this.safeDict(response, 'data');
2407
+ const orderIds = this.safeList(data, 'cancelledOrderIds', []);
2408
+ const orderId = this.safeString(orderIds, 0);
2409
+ return this.safeOrder({
2410
+ 'info': data,
2411
+ 'id': orderId,
2412
+ });
2355
2413
  }
2356
- return response;
2357
2414
  }
2358
2415
  async cancelAllOrders(symbol = undefined, params = {}) {
2359
2416
  /**
@@ -2821,7 +2878,7 @@ export default class kucoin extends Exchange {
2821
2878
  const stopPrice = this.safeNumber(order, 'stopPrice');
2822
2879
  return this.safeOrder({
2823
2880
  'info': order,
2824
- 'id': this.safeStringN(order, ['id', 'orderId', 'newOrderId']),
2881
+ 'id': this.safeStringN(order, ['id', 'orderId', 'newOrderId', 'cancelledOrderId']),
2825
2882
  'clientOrderId': this.safeString(order, 'clientOid'),
2826
2883
  'symbol': this.safeSymbol(marketId, market, '-'),
2827
2884
  'type': this.safeString(order, 'type'),
package/js/src/phemex.js CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  // ----------------------------------------------------------------------------
8
8
  import Exchange from './abstract/phemex.js';
9
- import { ExchangeError, BadSymbol, AuthenticationError, InsufficientFunds, InvalidOrder, ArgumentsRequired, OrderNotFound, BadRequest, PermissionDenied, AccountSuspended, CancelPending, DDoSProtection, DuplicateOrderId, RateLimitExceeded, NotSupported } from './base/errors.js';
9
+ import { ExchangeError, BadSymbol, AuthenticationError, InsufficientFunds, InvalidOrder, ArgumentsRequired, OrderNotFound, BadRequest, PermissionDenied, AccountSuspended, CancelPending, DDoSProtection, DuplicateOrderId, RateLimitExceeded } from './base/errors.js';
10
10
  import { Precise } from './base/Precise.js';
11
11
  import { TICK_SIZE } from './base/functions/number.js';
12
12
  import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
@@ -2957,6 +2957,7 @@ export default class phemex extends Exchange {
2957
2957
  /**
2958
2958
  * @method
2959
2959
  * @name phemex#fetchOrder
2960
+ * @see https://phemex-docs.github.io/#query-orders-by-ids
2960
2961
  * @description fetches information on an order made by the user
2961
2962
  * @param {string} symbol unified symbol of the market the order was made in
2962
2963
  * @param {object} [params] extra parameters specific to the exchange API endpoint
@@ -2967,9 +2968,6 @@ export default class phemex extends Exchange {
2967
2968
  }
2968
2969
  await this.loadMarkets();
2969
2970
  const market = this.market(symbol);
2970
- if (market['settle'] === 'USDT') {
2971
- throw new NotSupported(this.id + 'fetchOrder() is not supported yet for USDT settled swap markets'); // https://github.com/phemex/phemex-api-docs/blob/master/Public-Hedged-Perpetual-API.md#query-user-order-by-orderid-or-query-user-order-by-client-order-id
2972
- }
2973
2971
  const request = {
2974
2972
  'symbol': market['id'],
2975
2973
  };
@@ -2982,7 +2980,10 @@ export default class phemex extends Exchange {
2982
2980
  request['orderID'] = id;
2983
2981
  }
2984
2982
  let response = undefined;
2985
- if (market['spot']) {
2983
+ if (market['settle'] === 'USDT') {
2984
+ response = await this.privateGetApiDataGFuturesOrdersByOrderId(this.extend(request, params));
2985
+ }
2986
+ else if (market['spot']) {
2986
2987
  response = await this.privateGetSpotOrdersActive(this.extend(request, params));
2987
2988
  }
2988
2989
  else {