ccxt 4.5.44 → 4.5.45

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 (81) hide show
  1. package/README.md +9 -12
  2. package/dist/ccxt.browser.min.js +3 -3
  3. package/dist/cjs/ccxt.js +1 -12
  4. package/dist/cjs/src/abstract/kucoinfutures.js +1 -1
  5. package/dist/cjs/src/base/Exchange.js +36 -3
  6. package/dist/cjs/src/base/functions/encode.js +2 -2
  7. package/dist/cjs/src/base/functions/generic.js +8 -2
  8. package/dist/cjs/src/bitrue.js +1 -1
  9. package/dist/cjs/src/bitteam.js +1 -1
  10. package/dist/cjs/src/btcbox.js +1 -1
  11. package/dist/cjs/src/cex.js +1 -0
  12. package/dist/cjs/src/gate.js +227 -168
  13. package/dist/cjs/src/grvt.js +3 -2
  14. package/dist/cjs/src/hyperliquid.js +16 -5
  15. package/dist/cjs/src/kraken.js +2 -2
  16. package/dist/cjs/src/krakenfutures.js +1 -5
  17. package/dist/cjs/src/kucoin.js +4729 -970
  18. package/dist/cjs/src/kucoinfutures.js +14 -3434
  19. package/dist/cjs/src/lbank.js +1 -1
  20. package/dist/cjs/src/poloniex.js +1 -1
  21. package/dist/cjs/src/pro/gate.js +37 -1
  22. package/dist/cjs/src/pro/kucoin.js +819 -178
  23. package/dist/cjs/src/pro/kucoinfutures.js +95 -1261
  24. package/dist/cjs/src/pro/mexc.js +10 -5
  25. package/dist/cjs/src/pro/okx.js +84 -39
  26. package/js/ccxt.d.ts +2 -14
  27. package/js/ccxt.js +2 -10
  28. package/js/src/abstract/kucoin.d.ts +46 -3
  29. package/js/src/abstract/kucoinfutures.d.ts +27 -12
  30. package/js/src/base/Exchange.d.ts +12 -1
  31. package/js/src/base/Exchange.js +36 -3
  32. package/js/src/base/functions/encode.js +2 -2
  33. package/js/src/base/functions/generic.js +9 -3
  34. package/js/src/bitrue.js +1 -1
  35. package/js/src/bitteam.js +1 -1
  36. package/js/src/btcbox.js +1 -1
  37. package/js/src/cex.js +2 -1
  38. package/js/src/gate.d.ts +125 -119
  39. package/js/src/gate.js +227 -168
  40. package/js/src/grvt.js +3 -2
  41. package/js/src/hyperliquid.d.ts +3 -1
  42. package/js/src/hyperliquid.js +16 -5
  43. package/js/src/kraken.js +2 -2
  44. package/js/src/krakenfutures.js +1 -5
  45. package/js/src/kucoin.d.ts +696 -100
  46. package/js/src/kucoin.js +4730 -971
  47. package/js/src/kucoinfutures.d.ts +4 -522
  48. package/js/src/kucoinfutures.js +14 -3434
  49. package/js/src/lbank.js +1 -1
  50. package/js/src/poloniex.js +1 -1
  51. package/js/src/pro/gate.d.ts +30 -1
  52. package/js/src/pro/gate.js +37 -1
  53. package/js/src/pro/kucoin.d.ts +70 -30
  54. package/js/src/pro/kucoin.js +821 -180
  55. package/js/src/pro/kucoinfutures.d.ts +17 -195
  56. package/js/src/pro/kucoinfutures.js +96 -1262
  57. package/js/src/pro/mexc.js +10 -5
  58. package/js/src/pro/okx.d.ts +1 -0
  59. package/js/src/pro/okx.js +84 -39
  60. package/package.json +1 -1
  61. package/dist/cjs/src/abstract/alp.js +0 -11
  62. package/dist/cjs/src/abstract/defx.js +0 -11
  63. package/dist/cjs/src/abstract/timex.js +0 -11
  64. package/dist/cjs/src/alp.js +0 -1059
  65. package/dist/cjs/src/defx.js +0 -2142
  66. package/dist/cjs/src/pro/defx.js +0 -866
  67. package/dist/cjs/src/timex.js +0 -1793
  68. package/js/src/abstract/alp.d.ts +0 -21
  69. package/js/src/abstract/alp.js +0 -5
  70. package/js/src/abstract/defx.d.ts +0 -72
  71. package/js/src/abstract/defx.js +0 -5
  72. package/js/src/abstract/timex.d.ts +0 -65
  73. package/js/src/abstract/timex.js +0 -5
  74. package/js/src/alp.d.ts +0 -209
  75. package/js/src/alp.js +0 -1052
  76. package/js/src/defx.d.ts +0 -348
  77. package/js/src/defx.js +0 -2135
  78. package/js/src/pro/defx.d.ts +0 -236
  79. package/js/src/pro/defx.js +0 -859
  80. package/js/src/timex.d.ts +0 -247
  81. package/js/src/timex.js +0 -1786
@@ -647,7 +647,7 @@ class grvt extends grvt$1["default"] {
647
647
  // ...
648
648
  //
649
649
  const promises = [marketsPromise];
650
- if (this.privateKey !== undefined || this.apiKey !== undefined) {
650
+ if (!this.isEmptyString(this.apiKey) || !this.isEmptyString(this.privateKey)) {
651
651
  promises.push(this.signIn());
652
652
  }
653
653
  const results = await Promise.all(promises);
@@ -758,7 +758,8 @@ class grvt extends grvt$1["default"] {
758
758
  * @returns {object} an associative dictionary of currencies
759
759
  */
760
760
  async fetchCurrencies(params = {}) {
761
- const response = await this.publicMarketPostFullV1Currency(params);
761
+ const request = { '': '' }; // workaround for php [] empty arr
762
+ const response = await this.publicMarketPostFullV1Currency(request);
762
763
  //
763
764
  // {
764
765
  // "result": [
@@ -358,6 +358,7 @@ class hyperliquid extends hyperliquid$1["default"] {
358
358
  },
359
359
  },
360
360
  },
361
+ 'rollingWindowSize': 0.0,
361
362
  });
362
363
  }
363
364
  setSandboxMode(enabled) {
@@ -1094,6 +1095,8 @@ class hyperliquid extends hyperliquid$1["default"] {
1094
1095
  * @returns {object} a [balance structure]{@link https://docs.ccxt.com/?id=balance-structure}
1095
1096
  */
1096
1097
  async fetchBalance(params = {}) {
1098
+ // if user provides a different address in params and does not provide the enableUnifiedMargin we assume we need to request the info again
1099
+ const shouldRefresh = (this.safeString2(params, 'user', 'address') !== undefined) && this.safeBool(params, 'enableUnifiedMargin') === undefined;
1097
1100
  let userAddress = undefined;
1098
1101
  [userAddress, params] = this.handlePublicAddress('fetchBalance', params);
1099
1102
  let type = undefined;
@@ -1101,7 +1104,7 @@ class hyperliquid extends hyperliquid$1["default"] {
1101
1104
  let marginMode = undefined;
1102
1105
  [marginMode, params] = this.handleMarginModeAndParams('fetchBalance', params);
1103
1106
  let isUnifiedEnabled = undefined;
1104
- [isUnifiedEnabled, params] = await this.isUnifiedEnabled('fetchBalance', params);
1107
+ [isUnifiedEnabled, params] = await this.isUnifiedEnabled('fetchBalance', userAddress, shouldRefresh, params);
1105
1108
  const dex = this.safeString(params, 'dex');
1106
1109
  const isSpot = ((type === 'spot') || isUnifiedEnabled) && (dex === undefined);
1107
1110
  const request = {
@@ -1805,7 +1808,7 @@ class hyperliquid extends hyperliquid$1["default"] {
1805
1808
  }
1806
1809
  async initializeClient() {
1807
1810
  try {
1808
- await Promise.all([this.handleBuilderFeeApproval(), this.setRef(), this.isUnifiedEnabled('fetchBalance', {})]); // for now only fetchBalance requires the unified knowledge, but we can extend this to other methods as needed
1811
+ await Promise.all([this.handleBuilderFeeApproval(), this.setRef(), this.isUnifiedEnabled('fetchBalance', undefined, false, {})]); // for now only fetchBalance requires the unified knowledge, but we can extend this to other methods as needed
1809
1812
  }
1810
1813
  catch (e) {
1811
1814
  return false;
@@ -1838,15 +1841,22 @@ class hyperliquid extends hyperliquid$1["default"] {
1838
1841
  * @see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/info-endpoint#query-a-users-abstraction-state
1839
1842
  * @description returns enableUnifiedMargin so the user can check if unified account is enabled
1840
1843
  * @param {string} method the method for which we want to check if unified margin is enabled, this is used to check options for specific methods (e.g. fetchBalance can have a specific option to enable unified margin)
1844
+ * @param address
1845
+ * @param shouldRefresh
1841
1846
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1842
1847
  * @returns {bool} enableUnifiedMargin
1843
1848
  */
1844
- async isUnifiedEnabled(method, params = {}) {
1849
+ async isUnifiedEnabled(method, address = undefined, shouldRefresh = false, params = {}) {
1845
1850
  let userAddress = undefined;
1846
- [userAddress, params] = this.handlePublicAddress('isUnifiedEnabled', params);
1851
+ if (address !== undefined) {
1852
+ userAddress = address;
1853
+ }
1854
+ else {
1855
+ [userAddress, params] = this.handlePublicAddress('isUnifiedEnabled', params);
1856
+ }
1847
1857
  let enableUnifiedMargin = undefined;
1848
1858
  [enableUnifiedMargin, params] = this.handleOptionAndParams(params, method, 'enableUnifiedMargin');
1849
- if (enableUnifiedMargin === undefined) {
1859
+ if (enableUnifiedMargin === undefined || shouldRefresh) {
1850
1860
  const request = {
1851
1861
  'type': 'userAbstraction',
1852
1862
  'user': userAddress,
@@ -1862,6 +1872,7 @@ class hyperliquid extends hyperliquid$1["default"] {
1862
1872
  // "unifiedAccount" | "portfolioMargin" | "disabled" | "default" | "dexAbstraction"
1863
1873
  //
1864
1874
  enableUnifiedMargin = response === '"unifiedAccount"';
1875
+ // don't cache this result if this is a different addresss
1865
1876
  this.options['enableUnifiedMargin'] = enableUnifiedMargin; // cache this for future calls
1866
1877
  }
1867
1878
  return [enableUnifiedMargin, params];
@@ -3538,7 +3538,7 @@ class kraken extends kraken$1["default"] {
3538
3538
  let url = '/' + this.version + '/' + api + '/' + path;
3539
3539
  if (api === 'public') {
3540
3540
  if (Object.keys(params).length) {
3541
- // urlencodeNested is used to address https://github.com/ccxt/ccxt/issues/12872
3541
+ // rawencode is used to address https://github.com/ccxt/ccxt/issues/12872
3542
3542
  url += '?' + this.urlencodeNested(params);
3543
3543
  }
3544
3544
  }
@@ -3552,11 +3552,11 @@ class kraken extends kraken$1["default"] {
3552
3552
  const isBatchOrder = (path === 'AddOrderBatch');
3553
3553
  this.checkRequiredCredentials();
3554
3554
  const nonce = this.nonce().toString();
3555
- // urlencodeNested is used to address https://github.com/ccxt/ccxt/issues/12872
3556
3555
  if (isCancelOrderBatch || isTriggerPercent || isBatchOrder) {
3557
3556
  body = this.json(this.extend({ 'nonce': nonce }, params));
3558
3557
  }
3559
3558
  else {
3559
+ // rawencode is used to address https://github.com/ccxt/ccxt/issues/12872
3560
3560
  body = this.urlencodeNested(this.extend({ 'nonce': nonce }, params));
3561
3561
  }
3562
3562
  const auth = this.encode(nonce + body);
@@ -2039,10 +2039,6 @@ class krakenfutures extends krakenfutures$1["default"] {
2039
2039
  //
2040
2040
  const datetime = this.safeString(orderDictFromFetchOrder, 'timestamp');
2041
2041
  const innerStatus = this.safeString(order, 'status');
2042
- let filledOrder = this.safeString(orderDictFromFetchOrder, 'filled', '0');
2043
- if ((filledOrder === '0') || (filledOrder === '0.0')) {
2044
- filledOrder = undefined;
2045
- }
2046
2042
  const fetchOrderPriceTriggerOptions = this.safeDict(orderDictFromFetchOrder, 'priceTriggerOptions', {});
2047
2043
  const fetchOrderTriggerPrice = this.safeString(fetchOrderPriceTriggerOptions, 'triggerPrice');
2048
2044
  return this.safeOrder({
@@ -2065,7 +2061,7 @@ class krakenfutures extends krakenfutures$1["default"] {
2065
2061
  'amount': this.safeString(orderDictFromFetchOrder, 'quantity'),
2066
2062
  'cost': undefined,
2067
2063
  'average': undefined,
2068
- 'filled': filledOrder,
2064
+ 'filled': this.safeString(orderDictFromFetchOrder, 'filled'),
2069
2065
  'remaining': undefined,
2070
2066
  'status': this.parseOrderStatus(innerStatus),
2071
2067
  'fee': undefined,