ccxt 4.5.11 → 4.5.12

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 (49) hide show
  1. package/README.md +30 -30
  2. package/dist/ccxt.browser.min.js +3 -3
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/apex.js +9 -0
  5. package/dist/cjs/src/base/Exchange.js +1 -1
  6. package/dist/cjs/src/base/functions/throttle.js +1 -1
  7. package/dist/cjs/src/binance.js +1 -1
  8. package/dist/cjs/src/bitget.js +15 -0
  9. package/dist/cjs/src/bitmart.js +2 -2
  10. package/dist/cjs/src/bybit.js +28 -7
  11. package/dist/cjs/src/coincatch.js +2 -1
  12. package/dist/cjs/src/krakenfutures.js +26 -5
  13. package/dist/cjs/src/okx.js +18 -9
  14. package/dist/cjs/src/pro/alpaca.js +17 -1
  15. package/dist/cjs/src/pro/apex.js +17 -0
  16. package/dist/cjs/src/pro/binance.js +5 -5
  17. package/dist/cjs/src/pro/bitget.js +9 -3
  18. package/dist/cjs/src/pro/coinbase.js +8 -7
  19. package/dist/cjs/src/pro/hyperliquid.js +4 -0
  20. package/dist/cjs/src/pro/mexc.js +1 -1
  21. package/dist/cjs/src/pro/woo.js +48 -4
  22. package/dist/cjs/src/woo.js +20 -2
  23. package/dist/cjs/src/xt.js +1 -1
  24. package/js/ccxt.d.ts +1 -1
  25. package/js/ccxt.js +1 -1
  26. package/js/src/abstract/xt.d.ts +1 -1
  27. package/js/src/apex.js +9 -0
  28. package/js/src/base/Exchange.js +1 -1
  29. package/js/src/base/functions/throttle.js +1 -1
  30. package/js/src/binance.js +1 -1
  31. package/js/src/bitget.d.ts +14 -1
  32. package/js/src/bitget.js +15 -0
  33. package/js/src/bitmart.js +2 -2
  34. package/js/src/bybit.js +28 -7
  35. package/js/src/coincatch.js +2 -1
  36. package/js/src/krakenfutures.js +26 -5
  37. package/js/src/okx.js +18 -9
  38. package/js/src/pro/alpaca.js +17 -1
  39. package/js/src/pro/apex.d.ts +2 -0
  40. package/js/src/pro/apex.js +18 -1
  41. package/js/src/pro/binance.js +5 -5
  42. package/js/src/pro/bitget.js +9 -3
  43. package/js/src/pro/coinbase.js +8 -7
  44. package/js/src/pro/hyperliquid.js +4 -0
  45. package/js/src/pro/mexc.js +1 -1
  46. package/js/src/pro/woo.js +48 -4
  47. package/js/src/woo.js +20 -2
  48. package/js/src/xt.js +1 -1
  49. package/package.json +1 -1
@@ -425,7 +425,7 @@ export default class binance extends binanceRest {
425
425
  // }
426
426
  //
427
427
  const marketId = this.safeString(liquidation, 's');
428
- market = this.safeMarket(marketId, market);
428
+ market = this.safeMarket(marketId, market, undefined, 'swap');
429
429
  const timestamp = this.safeInteger(liquidation, 'T');
430
430
  return this.safeLiquidation({
431
431
  'info': liquidation,
@@ -547,8 +547,8 @@ export default class binance extends binanceRest {
547
547
  return;
548
548
  }
549
549
  const marketId = this.safeString(message, 's');
550
- const market = this.safeMarket(marketId);
551
- const symbol = this.safeSymbol(marketId);
550
+ const market = this.safeMarket(marketId, undefined, undefined, 'swap');
551
+ const symbol = this.safeSymbol(marketId, market);
552
552
  const liquidation = this.parseWsLiquidation(message, market);
553
553
  let myLiquidations = this.safeValue(this.myLiquidations, symbol);
554
554
  if (myLiquidations === undefined) {
@@ -922,7 +922,7 @@ export default class binance extends binanceRest {
922
922
  // }
923
923
  //
924
924
  const isSpot = this.isSpotUrl(client);
925
- const marketType = (isSpot) ? 'spot' : 'contract';
925
+ const marketType = (isSpot) ? 'spot' : 'swap';
926
926
  const marketId = this.safeString(message, 's');
927
927
  const market = this.safeMarket(marketId, undefined, undefined, marketType);
928
928
  const symbol = market['symbol'];
@@ -4029,7 +4029,7 @@ export default class binance extends binanceRest {
4029
4029
  return this.safePosition({
4030
4030
  'info': position,
4031
4031
  'id': undefined,
4032
- 'symbol': this.safeSymbol(marketId, undefined, undefined, 'contract'),
4032
+ 'symbol': this.safeSymbol(marketId, undefined, undefined, 'swap'),
4033
4033
  'notional': undefined,
4034
4034
  'marginMode': this.safeString(position, 'mt'),
4035
4035
  'liquidationPrice': undefined,
@@ -2751,7 +2751,9 @@ export default class bitget extends bitgetRest {
2751
2751
  delete client.subscriptions[messageHash];
2752
2752
  }
2753
2753
  const error = new UnsubscribeError(this.id + ' orderbook ' + symbol);
2754
- client.reject(error, subMessageHash);
2754
+ if (subMessageHash in client.futures) {
2755
+ client.reject(error, subMessageHash);
2756
+ }
2755
2757
  client.resolve(true, messageHash);
2756
2758
  }
2757
2759
  handleTradesUnSubscription(client, message) {
@@ -2776,7 +2778,9 @@ export default class bitget extends bitgetRest {
2776
2778
  delete client.subscriptions[messageHash];
2777
2779
  }
2778
2780
  const error = new UnsubscribeError(this.id + ' trades ' + symbol);
2779
- client.reject(error, subMessageHash);
2781
+ if (subMessageHash in client.futures) {
2782
+ client.reject(error, subMessageHash);
2783
+ }
2780
2784
  client.resolve(true, messageHash);
2781
2785
  }
2782
2786
  handleTickerUnSubscription(client, message) {
@@ -2801,7 +2805,9 @@ export default class bitget extends bitgetRest {
2801
2805
  delete client.subscriptions[messageHash];
2802
2806
  }
2803
2807
  const error = new UnsubscribeError(this.id + ' ticker ' + symbol);
2804
- client.reject(error, subMessageHash);
2808
+ if (subMessageHash in client.futures) {
2809
+ client.reject(error, subMessageHash);
2810
+ }
2805
2811
  client.resolve(true, messageHash);
2806
2812
  }
2807
2813
  handleOHLCVUnSubscription(client, message) {
@@ -776,8 +776,9 @@ export default class coinbase extends coinbaseRest {
776
776
  const id = this.safeString(order, 'order_id');
777
777
  const clientOrderId = this.safeString(order, 'client_order_id');
778
778
  const marketId = this.safeString(order, 'product_id');
779
- const datetime = this.safeString(order, 'time');
779
+ const datetime = this.safeString2(order, 'time', 'creation_time');
780
780
  market = this.safeMarket(marketId, market);
781
+ const stopPrice = this.safeString(order, 'stop_price');
781
782
  return this.safeOrder({
782
783
  'info': order,
783
784
  'symbol': this.safeString(market, 'symbol'),
@@ -789,12 +790,12 @@ export default class coinbase extends coinbaseRest {
789
790
  'type': this.safeString(order, 'order_type'),
790
791
  'timeInForce': undefined,
791
792
  'postOnly': undefined,
792
- 'side': this.safeString(order, 'side'),
793
- 'price': undefined,
794
- 'stopPrice': undefined,
795
- 'triggerPrice': undefined,
796
- 'amount': undefined,
797
- 'cost': undefined,
793
+ 'side': this.safeString2(order, 'side', 'order_side'),
794
+ 'price': this.safeString(order, 'limit_price'),
795
+ 'stopPrice': stopPrice,
796
+ 'triggerPrice': stopPrice,
797
+ 'amount': this.safeString(order, 'cumulative_quantity'),
798
+ 'cost': this.omitZero(this.safeString(order, 'filled_value')),
798
799
  'average': this.safeString(order, 'avg_price'),
799
800
  'filled': this.safeString(order, 'cumulative_quantity'),
800
801
  'remaining': this.safeString(order, 'leaves_quantity'),
@@ -454,8 +454,10 @@ export default class hyperliquid extends hyperliquidRest {
454
454
  const assetObject = spotAssets[i];
455
455
  const marketId = this.safeString(assetObject, 'coin');
456
456
  const market = this.safeMarket(marketId, undefined, undefined, 'spot');
457
+ const symbol = market['symbol'];
457
458
  const ticker = this.parseWsTicker(assetObject, market);
458
459
  parsedTickers.push(ticker);
460
+ this.tickers[symbol] = ticker;
459
461
  }
460
462
  // perpetuals
461
463
  const meta = this.safeDict(rawData, 'meta', {});
@@ -465,7 +467,9 @@ export default class hyperliquid extends hyperliquidRest {
465
467
  const data = this.extend(this.safeDict(universe, i, {}), this.safeDict(assetCtxs, i, {}));
466
468
  const id = data['name'] + '/USDC:USDC';
467
469
  const market = this.safeMarket(id, undefined, undefined, 'swap');
470
+ const symbol = market['symbol'];
468
471
  const ticker = this.parseWsTicker(data, market);
472
+ this.tickers[symbol] = ticker;
469
473
  parsedTickers.push(ticker);
470
474
  }
471
475
  const tickers = this.indexBy(parsedTickers, 'symbol');
@@ -114,7 +114,7 @@ export default class mexc extends mexcRest {
114
114
  // "symbol": "BTC_USDT",
115
115
  // "data": {
116
116
  // "symbol": "BTC_USDT",
117
- // "lastPrice": 76376.2,
117
+ // "lastPrice": 76376.1,
118
118
  // "riseFallRate": -0.0006,
119
119
  // "fairPrice": 76374.4,
120
120
  // "indexPrice": 76385.8,
package/js/src/pro/woo.js CHANGED
@@ -977,8 +977,50 @@ export default class woo extends wooRest {
977
977
  // "reduceOnly": false,
978
978
  // "maker": false
979
979
  // }
980
+ // {
981
+ // "symbol": "SPOT_BTC_USDT",
982
+ // "rootAlgoOrderId": 2573778,
983
+ // "parentAlgoOrderId": 0,
984
+ // "algoOrderId": 2573778,
985
+ // "clientOrderId": 0,
986
+ // "orderTag": "default",
987
+ // "algoType": "STOP_LOSS",
988
+ // "side": "SELL",
989
+ // "quantity": 0.00011,
990
+ // "triggerPrice": 98566.67,
991
+ // "triggerStatus": "USELESS",
992
+ // "price": 0,
993
+ // "type": "MARKET",
994
+ // "triggerTradePrice": 0,
995
+ // "triggerTime": 0,
996
+ // "tradeId": 0,
997
+ // "executedPrice": 0,
998
+ // "executedQuantity": 0,
999
+ // "fee": 0,
1000
+ // "reason": "",
1001
+ // "feeAsset": "",
1002
+ // "totalExecutedQuantity": 0,
1003
+ // "averageExecutedPrice": 0,
1004
+ // "totalFee": 0,
1005
+ // "timestamp": 1761030467426,
1006
+ // "visibleQuantity": 0,
1007
+ // "reduceOnly": false,
1008
+ // "triggerPriceType": "MARKET_PRICE",
1009
+ // "positionSide": "BOTH",
1010
+ // "feeCurrency": "",
1011
+ // "totalRebate": 0.0,
1012
+ // "rebateCurrency": "",
1013
+ // "triggered": false,
1014
+ // "maker": false,
1015
+ // "activated": false,
1016
+ // "isTriggered": false,
1017
+ // "isMaker": false,
1018
+ // "isActivated": false,
1019
+ // "rootAlgoStatus": "NEW",
1020
+ // "algoStatus": "NEW"
1021
+ // }
980
1022
  //
981
- const orderId = this.safeString(order, 'orderId');
1023
+ const orderId = this.safeString2(order, 'orderId', 'algoOrderId');
982
1024
  const marketId = this.safeString(order, 'symbol');
983
1025
  market = this.market(marketId);
984
1026
  const symbol = market['symbol'];
@@ -1002,10 +1044,11 @@ export default class woo extends wooRest {
1002
1044
  if (amount >= totalExecQuantity) {
1003
1045
  remaining -= totalExecQuantity;
1004
1046
  }
1005
- const rawStatus = this.safeString(order, 'status');
1047
+ const rawStatus = this.safeString2(order, 'status', 'algoStatus');
1006
1048
  const status = this.parseOrderStatus(rawStatus);
1007
1049
  const trades = undefined;
1008
1050
  const clientOrderId = this.safeString(order, 'clientOrderId');
1051
+ const triggerPrice = this.safeString(order, 'triggerPrice');
1009
1052
  return this.safeOrder({
1010
1053
  'info': order,
1011
1054
  'symbol': symbol,
@@ -1019,8 +1062,9 @@ export default class woo extends wooRest {
1019
1062
  'postOnly': undefined,
1020
1063
  'side': side,
1021
1064
  'price': price,
1022
- 'stopPrice': undefined,
1023
- 'triggerPrice': undefined,
1065
+ 'stopPrice': triggerPrice,
1066
+ 'triggerPrice': triggerPrice,
1067
+ 'reduceOnly': this.safeBool(order, 'reduceOnly'),
1024
1068
  'amount': amount,
1025
1069
  'cost': undefined,
1026
1070
  'average': avgPrice,
package/js/src/woo.js CHANGED
@@ -1995,7 +1995,16 @@ export default class woo extends Exchange {
1995
1995
  // "positionSide": "BOTH"
1996
1996
  // }
1997
1997
  //
1998
- let timestamp = this.safeTimestamp(order, 'createdTime');
1998
+ let timestamp = undefined;
1999
+ const timestrampString = this.safeString(order, 'createdTime');
2000
+ if (timestrampString !== undefined) {
2001
+ if (timestrampString.indexOf('.') >= 0) {
2002
+ timestamp = this.safeTimestamp(order, 'createdTime'); // algo orders
2003
+ }
2004
+ else {
2005
+ timestamp = this.safeInteger(order, 'createdTime'); // regular orders
2006
+ }
2007
+ }
1999
2008
  if (timestamp === undefined) {
2000
2009
  timestamp = this.safeInteger(order, 'timestamp');
2001
2010
  }
@@ -2016,7 +2025,16 @@ export default class woo extends Exchange {
2016
2025
  const fee = this.safeNumber(order, 'totalFee');
2017
2026
  const feeCurrency = this.safeString(order, 'feeAsset');
2018
2027
  const triggerPrice = this.safeNumber(order, 'triggerPrice');
2019
- const lastUpdateTimestamp = this.safeTimestamp(order, 'updatedTime');
2028
+ const lastUpdateTimestampString = this.safeString(order, 'updatedTime');
2029
+ let lastUpdateTimestamp = undefined;
2030
+ if (lastUpdateTimestampString !== undefined) {
2031
+ if (lastUpdateTimestampString.indexOf('.') >= 0) {
2032
+ lastUpdateTimestamp = this.safeTimestamp(order, 'updatedTime'); // algo orders
2033
+ }
2034
+ else {
2035
+ lastUpdateTimestamp = this.safeInteger(order, 'updatedTime'); // regular orders
2036
+ }
2037
+ }
2020
2038
  return this.safeOrder({
2021
2039
  'id': orderId,
2022
2040
  'clientOrderId': clientOrderId,
package/js/src/xt.js CHANGED
@@ -338,7 +338,7 @@ export default class xt extends Exchange {
338
338
  'user/account/api-key': 1,
339
339
  },
340
340
  'delete': {
341
- 'user/account/{apikeyId}': 1,
341
+ 'user/account/{apiKeyId}': 1,
342
342
  },
343
343
  },
344
344
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccxt",
3
- "version": "4.5.11",
3
+ "version": "4.5.12",
4
4
  "description": "A cryptocurrency trading API with more than 100 exchanges in JavaScript / TypeScript / Python / C# / PHP / Go",
5
5
  "unpkg": "dist/ccxt.browser.min.js",
6
6
  "type": "module",